From a67b94ddb7535d11f7c6a41b8ef89f5e9d3a2ea5 Mon Sep 17 00:00:00 2001 From: sjplimp Date: Wed, 2 Jan 2013 16:15:05 +0000 Subject: [PATCH 01/61] git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@9172 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- src/KSPACE/pair_lj_long_coul_long.cpp | 9 +++++---- src/kspace.cpp | 1 + 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/KSPACE/pair_lj_long_coul_long.cpp b/src/KSPACE/pair_lj_long_coul_long.cpp index 8f7eb79c8d..b7d5d930ff 100644 --- a/src/KSPACE/pair_lj_long_coul_long.cpp +++ b/src/KSPACE/pair_lj_long_coul_long.cpp @@ -598,9 +598,11 @@ void PairLJLongCoulLong::compute_inner() int newton_pair = force->newton_pair; double qqrd2e = force->qqrd2e; + double cut_out_on = cut_respa[0]; double cut_out_off = cut_respa[1]; + double cut_out_diff = cut_out_off - cut_out_on; double cut_out_on_sq = cut_out_on*cut_out_on; double cut_out_off_sq = cut_out_off*cut_out_off; @@ -611,15 +613,12 @@ void PairLJLongCoulLong::compute_inner() vector xi, d; ineighn = (ineigh = list->ilist)+list->inum; - for (; ineighfirstneigh[i])+list->numneigh[i]; - for (; jneigh= cut_out_off_sq) continue; r2inv = 1.0/rsq; - if (order1 && (rsq < cut_coulsq)) // coulombic + if (order1 && (rsq < cut_coulsq)) { // coulombic + qri = qqrd2e*q[i]; force_coul = ni == 0 ? qri*q[j]*sqrt(r2inv) : qri*q[j]*sqrt(r2inv)*special_coul[ni]; + } if (rsq < cut_ljsqi[typej = type[j]]) { // lennard-jones register double rn = r2inv*r2inv*r2inv; diff --git a/src/kspace.cpp b/src/kspace.cpp index 0642e519b1..9cbe1c71cd 100644 --- a/src/kspace.cpp +++ b/src/kspace.cpp @@ -316,6 +316,7 @@ void KSpace::modify_params(int narg, char **arg) } else if (strcmp(arg[iarg],"order/disp") == 0) { if (iarg+2 > narg) error->all(FLERR,"Illegal kspace_modify command"); order_6 = atoi(arg[iarg+1]); + iarg += 2; } else if (strcmp(arg[iarg],"minorder") == 0) { if (iarg+2 > narg) error->all(FLERR,"Illegal kspace_modify command"); minorder = atoi(arg[iarg+1]); From d6353f2da34867c9438fed99835a93eadd3d3b83 Mon Sep 17 00:00:00 2001 From: sjplimp Date: Wed, 2 Jan 2013 16:18:02 +0000 Subject: [PATCH 02/61] git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@9173 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- src/version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/version.h b/src/version.h index 4c77412833..a0dfb9557d 100644 --- a/src/version.h +++ b/src/version.h @@ -1 +1 @@ -#define LAMMPS_VERSION "6 Dec 2012" +#define LAMMPS_VERSION "1 Jan 2013" From c8624bc7ebb89402717bd729c52e0582140b227c Mon Sep 17 00:00:00 2001 From: sjplimp Date: Wed, 2 Jan 2013 16:27:31 +0000 Subject: [PATCH 03/61] git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@9175 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- lib/gpu/Makefile.xk7 | 29 +++++++++++++++++++++++++++++ lib/gpu/lal_base_ellipsoid.cpp | 8 ++++---- lib/gpu/lal_preprocessor.h | 6 +++--- lib/gpu/lal_yukawa.cu | 12 ++++++------ 4 files changed, 42 insertions(+), 13 deletions(-) create mode 100644 lib/gpu/Makefile.xk7 diff --git a/lib/gpu/Makefile.xk7 b/lib/gpu/Makefile.xk7 new file mode 100644 index 0000000000..f4bd399e08 --- /dev/null +++ b/lib/gpu/Makefile.xk7 @@ -0,0 +1,29 @@ +# /* ---------------------------------------------------------------------- +# Makefile for Cray XK7 Architecture supporting Hyper-Q with Proxy +# - Uses PrgEnv-gnu +# ------------------------------------------------------------------------- */ + + +CUDA_HOME = $(CRAY_CUDATOOLKIT_DIR) +NVCC = nvcc + +CUDA_ARCH = -arch=sm_35 + +CUDA_PRECISION = -D_SINGLE_DOUBLE +CUDA_INCLUDE = -I$(CUDA_HOME)/include +CUDA_LIB = -L$(CUDA_HOME)/lib64 +CUDA_OPTS = -DUNIX -O3 -Xptxas -v --use_fast_math + +CUDR_CPP = CC -DCUDA_PROXY -DMPI_GERYON -DUCL_NO_EXIT -DMPICH_IGNORE_CXX_SEEK +CUDR_OPTS = -O2 -march=bdver1 -ftree-vectorize + +BIN_DIR = ./ +OBJ_DIR = ./ +LIB_DIR = ./ +AR = ar +BSH = /bin/sh + +CUDPP_OPT = # -DUSE_CUDPP -Icudpp_mini + +include Nvidia.makefile + diff --git a/lib/gpu/lal_base_ellipsoid.cpp b/lib/gpu/lal_base_ellipsoid.cpp index 2b45b109db..fca3151b82 100644 --- a/lib/gpu/lal_base_ellipsoid.cpp +++ b/lib/gpu/lal_base_ellipsoid.cpp @@ -109,10 +109,10 @@ int BaseEllipsoidT::init_base(const int nlocal, const int nall, for (int j=i; j0) { - std::cerr << "Cannot use Gayberne with multiple forms and GPU neighbor.\n"; - exit(1); - } + if (_multiple_forms && host_nlocal>0) + return -8; + if (_multiple_forms && gpu_nbor!=0) + return -9; if (_multiple_forms) ans->force.zero(); diff --git a/lib/gpu/lal_preprocessor.h b/lib/gpu/lal_preprocessor.h index f681268f1c..16e4c29610 100644 --- a/lib/gpu/lal_preprocessor.h +++ b/lib/gpu/lal_preprocessor.h @@ -114,9 +114,9 @@ #define THREADS_PER_ATOM 4 #define THREADS_PER_CHARGE 8 #define BLOCK_NBOR_BUILD 128 -#define BLOCK_PAIR 512 -#define BLOCK_BIO_PAIR 512 -#define BLOCK_ELLIPSE 256 +#define BLOCK_PAIR 256 +#define BLOCK_BIO_PAIR 256 +#define BLOCK_ELLIPSE 128 #define MAX_SHARED_TYPES 11 #ifdef _SINGLE_SINGLE diff --git a/lib/gpu/lal_yukawa.cu b/lib/gpu/lal_yukawa.cu index 1e644b8a64..ece54b854f 100644 --- a/lib/gpu/lal_yukawa.cu +++ b/lib/gpu/lal_yukawa.cu @@ -77,9 +77,9 @@ __kernel void k_yukawa(const __global numtyp4 *restrict x_, int mtype=itype*lj_types+jtype; if (rsq Date: Wed, 2 Jan 2013 16:27:38 +0000 Subject: [PATCH 04/61] git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@9176 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- src/GPU/gpu_extra.h | 8 ++++ src/GPU/pppm_gpu.cpp | 112 ++++++++++++++++++++++++------------------- src/GPU/pppm_gpu.h | 7 ++- 3 files changed, 78 insertions(+), 49 deletions(-) diff --git a/src/GPU/gpu_extra.h b/src/GPU/gpu_extra.h index 2c83806c00..f1b8de65cf 100644 --- a/src/GPU/gpu_extra.h +++ b/src/GPU/gpu_extra.h @@ -49,6 +49,9 @@ namespace GPU_EXTRA { else if (all_success == -8) error->all(FLERR, "GPU particle split must be set to 1 for this pair style."); + else if (all_success == -9) + error->all(FLERR, + "CPU neighbor lists must be used for ellipsoid/sphere mix."); else error->all(FLERR,"Unknown error in GPU library"); } @@ -102,6 +105,11 @@ E: GPU particle split must be set to 1 for this pair style. For this pair style, you cannot run part of the force calculation on the host. See the package command. +E: CPU neighbor lists must be used for ellipsoid/sphere mix + +When using Gay-Berne or RE-squared pair styles with both ellipsoidal and +spherical particles, the neighbor list must be built on the CPU + E: Unknown error in GPU library Self-explanatory. diff --git a/src/GPU/pppm_gpu.cpp b/src/GPU/pppm_gpu.cpp index a8138067de..4fef72a0e1 100644 --- a/src/GPU/pppm_gpu.cpp +++ b/src/GPU/pppm_gpu.cpp @@ -39,6 +39,7 @@ #include "error.h" #include "update.h" #include "universe.h" +#include "fix.h" using namespace LAMMPS_NS; using namespace MathConst; @@ -120,9 +121,6 @@ void PPPMGPU::init() // NOTE: could free density_brick and vdxyz_brick after PPPM allocates them, // before allocating db_gpu and vd_brick down below, if don't need, // if do this, make sure to set them to NULL - // NOTE: delete/realloc of cg necessary b/c packing 4 values per grid pt, - // not 3 as PPPM does - probably a better way to account for this - // in PPPM::init() destroy_3d_offset(density_brick_gpu,nzlo_out,nylo_out); destroy_3d_offset(vd_brick,nzlo_out,nylo_out); @@ -130,15 +128,11 @@ void PPPMGPU::init() PPPM::init(); - if (differentiation_flag == 0) { - delete cg; - int (*procneigh)[2] = comm->procneigh; - cg = new CommGrid(lmp,world,4,1, - nxlo_in,nxhi_in,nylo_in,nyhi_in,nzlo_in,nzhi_in, - nxlo_out,nxhi_out,nylo_out,nyhi_out,nzlo_out,nzhi_out, - procneigh[0][0],procneigh[0][1],procneigh[1][0], - procneigh[1][1],procneigh[2][0],procneigh[2][1]); - } + // insure no conflict with fix balance + + for (int i = 0; i < modify->nfix; i++) + if (strcmp(modify->fix[i]->style,"balance") == 0) + error->all(FLERR,"Cannot currently use pppm/gpu with fix balance."); // unsupported option @@ -189,6 +183,8 @@ void PPPMGPU::init() void PPPMGPU::compute(int eflag, int vflag) { + int i,j; + int nago; if (kspace_split) { if (im_real_space) return; @@ -205,8 +201,12 @@ void PPPMGPU::compute(int eflag, int vflag) else evflag = evflag_atom = eflag_global = vflag_global = eflag_atom = vflag_atom = 0; + // If need per-atom energies/virials, also do particle map on host + // concurrently with GPU calculations if (evflag_atom && !peratom_allocate_flag) { allocate_peratom(); + cg_peratom->ghost_notify(); + cg_peratom->setup(); peratom_allocate_flag = 1; } @@ -220,18 +220,6 @@ void PPPMGPU::compute(int eflag, int vflag) if (flag != 0) error->one(FLERR,"Out of range atoms - cannot compute PPPM"); - // If need per-atom energies/virials, also do particle map on host - // concurrently with GPU calculations - - if (evflag_atom) { - memory->destroy(part2grid); - nmax = atom->nmax; - memory->create(part2grid,nmax,3,"pppm:part2grid"); - particle_map(); - } - - int i,j; - // convert atoms from box to lamda coords if (triclinic == 0) boxlo = domain->boxlo; @@ -240,6 +228,15 @@ void PPPMGPU::compute(int eflag, int vflag) domain->x2lamda(atom->nlocal); } + // extend size of per-atom arrays if necessary + + if (evflag_atom && atom->nlocal > nmax) { + memory->destroy(part2grid); + nmax = atom->nmax; + memory->create(part2grid,nmax,3,"pppm:part2grid"); + particle_map(); + } + double t3 = MPI_Wtime(); // all procs communicate density values from their ghost cells @@ -280,24 +277,7 @@ void PPPMGPU::compute(int eflag, int vflag) // per-atom energy/virial // energy includes self-energy correction - if (evflag_atom) { - double *q = atom->q; - int nlocal = atom->nlocal; - - if (eflag_atom) { - for (i = 0; i < nlocal; i++) { - eatom[i] *= 0.5; - eatom[i] -= g_ewald*q[i]*q[i]/MY_PIS + MY_PI2*q[i]*qsum / - (g_ewald*g_ewald*volume); - eatom[i] *= qscale; - } - } - - if (vflag_atom) { - for (i = 0; i < nlocal; i++) - for (j = 0; j < 6; j++) vatom[i][j] *= 0.5*qscale; - } - } + if (evflag_atom) fieldforce_peratom(); // sum energy across procs and add in volume-dependent term @@ -320,6 +300,28 @@ void PPPMGPU::compute(int eflag, int vflag) for (i = 0; i < 6; i++) virial[i] = 0.5*qscale*volume*virial_all[i]; } + // per-atom energy/virial + // energy includes self-energy correction + + if (evflag_atom) { + double *q = atom->q; + int nlocal = atom->nlocal; + + if (eflag_atom) { + for (i = 0; i < nlocal; i++) { + eatom[i] *= 0.5; + eatom[i] -= g_ewald*q[i]*q[i]/MY_PIS + MY_PI2*q[i]*qsum / + (g_ewald*g_ewald*volume); + eatom[i] *= qscale; + } + } + + if (vflag_atom) { + for (i = 0; i < nlocal; i++) + for (j = 0; j < 6; j++) vatom[i][j] *= 0.5*qscale; + } + } + // 2d slab correction if (slabflag) slabcorr(); @@ -555,7 +557,7 @@ void PPPMGPU::unpack_forward(int flag, FFT_SCALAR *buf, int nlist, int *list) if (flag == FORWARD_IK) { int offset; - FFT_SCALAR *dest = &vdx_brick[nzlo_out][nylo_out][4*nxlo_out]; + FFT_SCALAR *dest = &vd_brick[nzlo_out][nylo_out][4*nxlo_out]; for (int i = 0; i < nlist; i++) { offset = 4*list[i]; dest[offset++] = buf[n++]; @@ -565,7 +567,7 @@ void PPPMGPU::unpack_forward(int flag, FFT_SCALAR *buf, int nlist, int *list) } else if (flag == FORWARD_AD) { FFT_SCALAR *dest = &u_brick[nzlo_out][nylo_out][nxlo_out]; for (int i = 0; i < nlist; i++) - dest[list[i]] = buf[n++]; + dest[list[i]] = buf[i]; } else if (flag == FORWARD_IK_PERATOM) { FFT_SCALAR *esrc = &u_brick[nzlo_out][nylo_out][nxlo_out]; FFT_SCALAR *v0src = &v0_brick[nzlo_out][nylo_out][nxlo_out]; @@ -690,16 +692,30 @@ double PPPMGPU::memory_usage() } /* ---------------------------------------------------------------------- - perform and time the 4 FFTs required for N timesteps + perform and time the 1d FFTs required for N timesteps ------------------------------------------------------------------------- */ -int PPPMGPU::timing(int n, double &time3d, double &time1d) { +int PPPMGPU::timing_1d(int n, double &time1d) +{ if (im_real_space) { - time3d = 1.0; time1d = 1.0; return 4; } - PPPM::timing(n,time3d,time1d); + PPPM::timing_1d(n,time1d); + return 4; +} + +/* ---------------------------------------------------------------------- + perform and time the 3d FFTs required for N timesteps +------------------------------------------------------------------------- */ + +int PPPMGPU::timing_3d(int n, double &time3d) +{ + if (im_real_space) { + time3d = 1.0; + return 4; + } + PPPM::timing_3d(n,time3d); return 4; } diff --git a/src/GPU/pppm_gpu.h b/src/GPU/pppm_gpu.h index 98d62ffa24..7ca80080ef 100644 --- a/src/GPU/pppm_gpu.h +++ b/src/GPU/pppm_gpu.h @@ -31,7 +31,8 @@ class PPPMGPU : public PPPM { void init(); void setup(); void compute(int, int); - int timing(int, double &, double &); + int timing_1d(int, double &); + int timing_3d(int, double &); double memory_usage(); protected: @@ -67,6 +68,10 @@ Self-explanatory. Check the input script syntax and compare to the documentation for the command. You can use -echo screen as a command-line option when running LAMMPS to see the offending line. +E: Cannot currently use pppm/gpu with fix balance. + +Self-explanatory. + E: Cannot (yet) do analytic differentiation with pppm/gpu. Self-explanatory. From 299ea01ce0debc1cc9272697ad8f36a7e3b8604a Mon Sep 17 00:00:00 2001 From: sjplimp Date: Wed, 2 Jan 2013 16:31:25 +0000 Subject: [PATCH 05/61] git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@9177 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- src/version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/version.h b/src/version.h index a0dfb9557d..2b75b2b609 100644 --- a/src/version.h +++ b/src/version.h @@ -1 +1 @@ -#define LAMMPS_VERSION "1 Jan 2013" +#define LAMMPS_VERSION "2 Jan 2013" From 3aea32f946b3dfb62aec6fa0d07c91f9108ea95b Mon Sep 17 00:00:00 2001 From: sjplimp Date: Wed, 2 Jan 2013 16:39:52 +0000 Subject: [PATCH 06/61] git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@9179 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- tools/moltemplate/src/extract_lammps_data.py | 82 +- tools/moltemplate/src/ltemplify.py | 374 ++-- tools/moltemplate/src/lttree.py | 82 +- tools/moltemplate/src/lttree_check.py | 1632 +++++++++++++++-- tools/moltemplate/src/moltemplate.sh | 60 +- tools/moltemplate/src/nbody_graph_search.py | 2 +- .../src/postprocess_input_script.py | 24 +- tools/moltemplate/src/ttree.py | 390 ++-- tools/moltemplate/src/ttree_lex.py | 573 ++++-- tools/moltemplate/src/ttree_render.py | 24 +- 10 files changed, 2515 insertions(+), 728 deletions(-) diff --git a/tools/moltemplate/src/extract_lammps_data.py b/tools/moltemplate/src/extract_lammps_data.py index 59af89ca15..4fe3ec743d 100755 --- a/tools/moltemplate/src/extract_lammps_data.py +++ b/tools/moltemplate/src/extract_lammps_data.py @@ -22,26 +22,59 @@ lammps_data_sections = set(['Atoms', 'Dihedrals By Type',# new. not standard LAMMPS 'Angles By Type']) # new. not standard LAMMPS + +def DeleteComments(string, + escape='\\', + comment_char='#'): + escaped_state = False + for i in range(0,len(string)): + if string[i] in escape: + if escaped_state: + escaped_state = False + else: + escaped_state = True + elif string[i] == comment_char: + if not escaped_state: + return string[0:i] + return string + + + def ExtractDataSection(f, - section_header, + section_name, comment_char = '#', - include_header = False, + include_section_name = False, return_line_nums = False): + inside_section = False + if section_name in ('header','Header'): #"Header" section includes beginning + inside_section = True + nonblank_encountered = False + nonheader_encountered = False + i = 0 for line_orig in f: return_this_line = False - line = line_orig.strip() - if line == section_header: + line = DeleteComments(line_orig).strip() + if line in lammps_data_sections: + nonheader_encountered = True + if section_name in ('header', 'Header'): + # The "header" section includes all lines at the beginning of the + # before any other section is encountered. + if nonheader_encountered: + return_this_line = False + else: + return_this_line = True + elif line == section_name: inside_section = True nonblank_encountered = False - if include_header: + if include_section_name: return_this_line = True # A block of blank lines (which dont immediately follow - # the section header-name) signal the end of a section: + # the section_name) signal the end of a section: elif len(line) == 0: - if inside_section and include_header: + if inside_section and include_section_name: return_this_line = True if nonblank_encountered: inside_section = False @@ -59,39 +92,6 @@ def ExtractDataSection(f, i += 1 -def FindDataSection(f, - section_header, - comment_char = '#'): - i_section_start = -1 - i_section_stop = -1 - inside_section = False - nonblank_encountered = False - i = 0 - for line_orig in f: - line = line_orig.strip() - if line == section_header: - inside_section = True - nonblank_encountered = False - # A block of blank lines (which dont immediately follow - # the section header-name) signal the end of a section: - elif len(line) == 0: - if nonblank_encountered: - inside_section = False - i_section_stop = i - break - elif line[0] != comment_char: - if inside_section: - if not nonblank_encountered: - i_section_start = i # <- first non-blank line - nonblank_encountered = True - i += 1 - - if i_section_stop == -1: - if i_section_start != -1: - i_section_stop = i - - return (i_section_start, i_section_stop) - if __name__ == "__main__": @@ -111,7 +111,7 @@ if __name__ == "__main__": for section_name in sys.argv[1:]: for line_num in ExtractDataSection(lines, section_name, - include_header=True, + include_section_name=True, return_line_nums=True): line_nums_exclude.add(line_num) for i in range(0, len(lines)): diff --git a/tools/moltemplate/src/ltemplify.py b/tools/moltemplate/src/ltemplify.py index 9ded475611..663d66a0a8 100755 --- a/tools/moltemplate/src/ltemplify.py +++ b/tools/moltemplate/src/ltemplify.py @@ -36,6 +36,10 @@ from lttree_styles import * def Intify(s): if s.isdigit(): return int(s) + elif s[0:2] == 'id': + return int(s[2:]) + elif s[0:4] == 'type': + return int(s[4:]) else: return s @@ -152,10 +156,12 @@ def BelongsToSel(i, sel): try: g_program_name = 'lemplify.py' - g_version_str = '0.2' - g_date_str = '2012-4-12' + g_version_str = '0.3' + g_date_str = '2012-12-11' sys.stderr.write(g_program_name+' v'+g_version_str+' '+g_date_str+'\n') + non_empty_output = False + no_warnings = True indent = 2 cindent = 0 atomid_selection = [] @@ -451,7 +457,6 @@ try: tokens = line.strip().split() if (len(tokens) > 0): - if ((tokens[0] == 'atom_style') and atom_style_undefined): @@ -482,7 +487,10 @@ try: 'impoper_style', 'min_style', 'pair_style', - 'special_bonds'])): + 'pair_modify', + 'special_bonds', + 'kspace_style', + 'kspace_modify'])): l_in_init.append((' '*indent)+line.lstrip()) #if (line.strip() == 'LAMMPS Description'): @@ -515,6 +523,9 @@ try: complained_atom_style_mismatch = True sys.stderr.write('Warning: The number of columns in the \"Atoms\" section does\n' ' not match the atom_style (see column name list above).\n') + # this is not a very serious warning. + #no_warnings = False <--no need. commenting out + atomid = Intify(tokens[i_atomid]) atomtype = Intify(tokens[i_atomtype]) @@ -687,12 +698,14 @@ try: elif some_in_selection: sys.stderr.write('WARNING: SELECTION BREAKS BONDS\n') sys.stderr.write(' (between atom ids: ') + for n in range(0,2): sys.stderr.write(str(atomids[n])+' ') sys.stderr.write(')\n' ' The atoms you selected are bonded\n' ' to other atoms you didn\'t select.\n' ' Are you sure you selected the correct atoms?\n') + no_warnings = False @@ -743,6 +756,7 @@ try: ' interactions with other atoms you didn\'t select.\n' ' (They will be ignored.)\n' ' Are you sure you selected the correct atoms?\n') + no_warnings = False elif (line.strip() == 'Dihedrals'): @@ -790,6 +804,7 @@ try: ' interactions with other atoms you didn\'t select.\n' ' (They will be ignored.)\n' ' Are you sure you selected the correct atoms?\n') + no_warnings = False elif (line.strip() == 'Impropers'): @@ -837,6 +852,7 @@ try: ' interactions with other atoms you didn\'t select.\n' ' (They will be ignored.)\n' ' Are you sure you selected the correct atoms?\n') + no_warnings = False elif (line.strip() == 'Bond Coeffs'): @@ -904,7 +920,7 @@ try: atomtype_i_str = tokens[0] if '*' in atomtype_i_str: raise InputError('PROBLEM near or before '+ErrorLeader(infile, lineno)+'\n' - ' As of 2012-7, moltemplate discourages use of the "\*\" wildcard\n' + ' As of 2012-7, moltemplate forbids use of the "\*\" wildcard\n' ' character in the \"Pair Coeffs\" section.\n') else: i = int(atomtype_i_str) @@ -935,7 +951,7 @@ try: raise InputError('Error: near or before '+ErrorLeader(infile, lineno)+'\n' ' Nonsensical bond_coeff command:\n' ' \"'+line.strip()+'\"\n') - #tokens[0] = '@bond:type'+tokens[0] + #tokens[1] = '@bond:type'+tokens[1] l_in_bond_coeffs.append((' '*indent)+(' '.join(tokens)+'\n')) elif (tokens[0] == 'angle_coeff'): @@ -943,7 +959,7 @@ try: raise InputError('Error: near or before '+ErrorLeader(infile, lineno)+'\n' ' Nonsensical angle_coeff command:\n' ' \"'+line.strip()+'\"\n') - tokens[1] = '@angle:type'+tokens[1] + #tokens[1] = '@angle:type'+tokens[1] l_in_angle_coeffs.append((' '*indent)+(' '.join(tokens)+'\n')) elif (tokens[0] == 'dihedral_coeff'): @@ -951,14 +967,14 @@ try: raise InputError('Error: near or before '+ErrorLeader(infile, lineno)+'\n' ' Nonsensical dihedral_coeff command:\n' ' \"'+line.strip()+'\"\n') - tokens[1] = '@dihedral:type'+tokens[1] + #tokens[1] = '@dihedral:type'+tokens[1] l_in_dihedral_coeffs.append((' '*indent)+(' '.join(tokens)+'\n')) elif (tokens[0] == 'improper_coeff'): if (len(tokens) < 2): raise InputError('Error: near or before '+ErrorLeader(infile, lineno)+'\n' ' Nonsensical improper_coeff command:\n' ' \"'+line.strip()+'\"\n') - tokens[1] = '@improper:type'+tokens[1] + #tokens[1] = '@improper:type'+tokens[1] l_in_improper_coeffs.append((' '*indent)+(' '.join(tokens)+'\n')) @@ -1188,21 +1204,20 @@ try: i_a_final = None i_b_final = None for i in range(i_a, i_b+1): - if ((i in needed_atomtypes) or - (min_sel_atomtype and min_sel_atomtype <= i)): + if ((i in needed_atomtypes) or (min_sel_atomtype <= i)): i_a_final = i break for i in reversed(range(i_a, i_b+1)): - if ((i in needed_atomtypes) or - (max_sel_atomtype and max_sel_atomtype >= i)): + if ((i in needed_atomtypes) or (max_sel_atomtype >= i)): i_b_final = i break - if i_a_final and i_b_final: - if i_a_final == i_b_final: - i_str = '@atom:type'+str(i_a_final) - tokens[1] = i_str - else: - i_str = '@{atom:type'+str(i_a_final)+'}*@{atom:type'+str(i_b_final)+'}' + + #if i_a_final and i_b_final: + # if i_a_final == i_b_final: + # i_str = '@atom:type'+str(i_a_final) + # tokens[1] = i_str + # else: + # i_str = '@{atom:type'+str(i_a_final)+'}*@{atom:type'+str(i_b_final)+'}' @@ -1233,29 +1248,38 @@ try: j_a_final = None j_b_final = None for j in range(j_a, j_b+1): - if ((j in needed_atomtypes) or - (min_sel_atomtype and min_sel_atomtype <= j)): + if ((j in needed_atomtypes) or (min_sel_atomtype <= j)): j_a_final = j break for j in reversed(range(j_a, j_b+1)): - if ((j in needed_atomtypes) or - (max_sel_atomtype and max_sel_atomtype >= j)): + if ((j in needed_atomtypes) or (max_sel_atomtype >= j)): j_b_final = j break - if j_a_final and j_b_final: - if j_a_final == j_b_final: - j_str = '@atom:type'+str(j_a_final) - tokens[1] = j_str - else: - j_str = '@{atom:type'+str(j_a_final)+'}*@{atom:type'+str(j_b_final)+'}' + + #if j_a_final and j_b_final: + # if j_a_final == j_b_final: + # j_str = '@atom:type'+str(j_a_final) + # tokens[1] = j_str + # else: + # j_str = '@{atom:type'+str(j_a_final)+'}*@{atom:type'+str(j_b_final)+'}' if not (i_a_final and i_b_final and j_a_final and j_b_final): del(l_in_pair_coeffs[i_line]) + elif (('*' in atomtype_i_str) or ('*' in atomtype_j_str)): + del(l_in_pair_coeffs[i_line]) + for i in range(i_a_final, i_b_final+1): + for j in range(j_a_final, j_b_final+1): + if j >= i: + tokens[1] = '@atom:type'+str(i) + tokens[2] = '@atom:type'+str(j) + l_in_pair_coeffs.insert(i_line, + (' '*indent)+(' '.join(tokens)+'\n')) + i_line += 1 else: - tokens[1] = i_str - tokens[2] = j_str + tokens[1] = '@atom:type'+tokens[1] + tokens[2] = '@atom:type'+tokens[2] l_in_pair_coeffs[i_line] = (' '*indent)+(' '.join(tokens)+'\n') i_line += 1 @@ -1311,26 +1335,31 @@ try: i_a_final = None i_b_final = None for i in range(i_a, i_b+1): - if ((i in needed_atomtypes) or - (min_sel_atomtype and min_sel_atomtype <= i)): + if ((i in needed_atomtypes) or (min_sel_atomtype <= i)): i_a_final = i break for i in reversed(range(i_a, i_b+1)): - if ((i in needed_atomtypes) or - (max_sel_atomtype and max_sel_atomtype >= i)): + if ((i in needed_atomtypes) or (max_sel_atomtype >= i)): i_b_final = i break - if i_a_final and i_b_final: - if i_a_final == i_b_final: - i_str = '@atom:type'+str(i_a_final) - tokens[1] = i_str - else: - i_str = '@{atom:type'+str(i_a_final)+'}*@{atom:type'+str(i_b_final)+'}' + #if i_a_final and i_b_final: + # if i_a_final == i_b_final: + # i_str = '@atom:type'+str(i_a_final) + # tokens[1] = i_str + # else: + # i_str = '@{atom:type'+str(i_a_final)+'}*@{atom:type'+str(i_b_final)+'}' if not (i_a_final and i_b_final and j_a_final and j_b_final): del(l_in_masses[i_line]) + elif ('*' in atomtype_i_str): + del(l_in_masses[i_line]) + for i in range(i_a_final, i_b_final+1): + tokens[1] = '@atom:type'+str(i) + l_in_masses.insert(i_line, (' '*indent)+(' '.join(tokens)+'\n')) + i_line += 1 else: - tokens[1] = i_str + assert(i_a == i_b) + tokens[1] = '@atom:type'+str(i_a) l_in_masses[i_line] = (' '*indent)+(' '.join(tokens)+'\n') i_line += 1 @@ -1355,7 +1384,7 @@ try: tokens[0] = '$bond:id'+str(bondid) tokens[1] = '@bond:type'+str(bondtype) tokens[2] = '$atom:id'+str(atomid1) - tokens[3] = '$atom:type'+str(atomid2) + tokens[3] = '$atom:id'+str(atomid2) needed_bondids.add(bondid) needed_bondtypes.add(bondtype) l_data_bonds[i_line] = (' '*indent)+(' '.join(tokens)+'\n') @@ -1391,7 +1420,6 @@ try: tokens = line.strip().split() bondtype_str = tokens[1] - if ('*' in bondtype_str): bondtype_tokens = bondtype_str.split('*') @@ -1413,18 +1441,30 @@ try: if i_b > max_needed_bondtype: i_b = max_needed_bondtype - if i_a == i_b: - i_str = '@bond:type'+str(i_a) - tokens[1] = i_str - else: - i_str = '@{bond:type'+str(j_a_final)+'}*@{bond:type'+str(j_b_final)+'}' + #if i_a == i_b: + # i_str = '@bond:type'+str(i_a) + # tokens[1] = i_str + #else: + # i_str = '@{bond:type'+str(j_a)+'}*@{bond:type'+str(j_b)+'}' - if ((i_a in needed_bondtypes) and - (i_b in needed_bondtypes)): - l_in_bond_coeffs[i_line] = (' '*indent)+(' '.join(tokens)+'\n') - i_line += 1 - else: + if ('*' in bondtype_str): del(l_in_bond_coeffs[i_line]) + for i in range(i_a, i_b+1): + if (i in needed_bondtypes): + tokens[1] = '@bond:type'+str(i) + l_in_bond_coeffs.insert(i_line, + (' '*indent)+(' '.join(tokens)+'\n')) + i_line += 1 + else: + assert(i_a == i_b) + if (i_a in needed_bondtypes): + tokens[1] = '@bond:type'+str(i_a) + l_in_bond_coeffs[i_line] = (' '*indent)+(' '.join(tokens)+'\n') + i_line += 1 + else: + del(l_in_bond_coeffs[i_line]) + + @@ -1484,7 +1524,6 @@ try: tokens = line.strip().split() angletype_str = tokens[1] - if ('*' in angletype_str): angletype_tokens = angletype_str.split('*') @@ -1506,18 +1545,28 @@ try: if i_b > max_needed_angletype: i_b = max_needed_angletype - if i_a == i_b: - i_str = '@angle:type'+str(i_a) - tokens[1] = i_str - else: - i_str = '@{angle:type'+str(j_a_final)+'}*@{angle:type'+str(j_b_final)+'}' + #if i_a == i_b: + # i_str = '@angle:type'+str(i_a) + # tokens[1] = i_str + #else: + # i_str = '@{angle:type'+str(j_a)+'}*@{angle:type'+str(j_b)+'}' - if ((i_a in needed_angletypes) and - (i_b in needed_angletypes)): - l_in_angle_coeffs[i_line] = (' '*indent)+(' '.join(tokens)+'\n') - i_line += 1 - else: + if ('*' in angletype_str): del(l_in_angle_coeffs[i_line]) + for i in range(i_a, i_b+1): + if (i in needed_angletypes): + tokens[1] = '@angle:type'+str(i) + l_in_angle_coeffs.insert(i_line, + (' '*indent)+(' '.join(tokens)+'\n')) + i_line += 1 + else: + assert(i_a == i_b) + if (i_a in needed_angletypes): + tokens[1] = '@angle:type'+str(i_a) + l_in_angle_coeffs[i_line] = (' '*indent)+(' '.join(tokens)+'\n') + i_line += 1 + else: + del(l_in_angle_coeffs[i_line]) @@ -1579,7 +1628,6 @@ try: tokens = line.strip().split() dihedraltype_str = tokens[1] - if ('*' in dihedraltype_str): dihedraltype_tokens = dihedraltype_str.split('*') @@ -1601,20 +1649,28 @@ try: if i_b > max_needed_dihedraltype: i_b = max_needed_dihedraltype - if i_a == i_b: - i_str = '@dihedral:type'+str(i_a) - tokens[1] = i_str - else: - i_str = '@{dihedral:type'+str(j_a_final)+'}*@{dihedral:type'+str(j_b_final)+'}' + #if i_a == i_b: + # i_str = '@dihedral:type'+str(i_a) + # tokens[1] = i_str + #else: + # i_str = '@{dihedral:type'+str(j_a)+'}*@{dihedral:type'+str(j_b)+'}' - if ((i_a in needed_dihedraltypes) and - (i_b in needed_dihedraltypes)): - l_in_dihedral_coeffs[i_line] = (' '*indent)+(' '.join(tokens)+'\n') - i_line += 1 - else: + if ('*' in dihedraltype_str): del(l_in_dihedral_coeffs[i_line]) - - + for i in range(i_a, i_b+1): + if (i in needed_dihedraltypes): + tokens[1] = '@dihedral:type'+str(i) + l_in_dihedral_coeffs.insert(i_line, + (' '*indent)+(' '.join(tokens)+'\n')) + i_line += 1 + else: + assert(i_a == i_b) + if (i_a in needed_dihedraltypes): + tokens[1] = '@dihedral:type'+str(i_a) + l_in_dihedral_coeffs[i_line] = (' '*indent)+(' '.join(tokens)+'\n') + i_line += 1 + else: + del(l_in_dihedral_coeffs[i_line]) @@ -1676,7 +1732,6 @@ try: tokens = line.strip().split() impropertype_str = tokens[1] - if ('*' in impropertype_str): impropertype_tokens = impropertype_str.split('*') @@ -1698,18 +1753,28 @@ try: if i_b > max_needed_impropertype: i_b = max_needed_impropertype - if i_a == i_b: - i_str = '@improper:type'+str(i_a) - tokens[1] = i_str - else: - i_str = '@{improper:type'+str(j_a_final)+'}*@{improper:type'+str(j_b_final)+'}' + #if i_a == i_b: + # i_str = '@improper:type'+str(i_a) + # tokens[1] = i_str + #else: + # i_str = '@{improper:type'+str(j_a)+'}*@{improper:type'+str(j_b)+'}' - if ((i_a in needed_impropertypes) and - (i_b in needed_impropertypes)): - l_in_improper_coeffs[i_line] = (' '*indent)+(' '.join(tokens)+'\n') - i_line += 1 - else: + if ('*' in impropertype_str): del(l_in_improper_coeffs[i_line]) + for i in range(i_a, i_b+1): + if (i in needed_impropertypes): + tokens[1] = '@improper:type'+str(i) + l_in_improper_coeffs.insert(i_line, + (' '*indent)+(' '.join(tokens)+'\n')) + i_line += 1 + else: + assert(i_a == i_b) + if (i_a in needed_impropertypes): + tokens[1] = '@improper:type'+str(i_a) + l_in_improper_coeffs[i_line] = (' '*indent)+(' '.join(tokens)+'\n') + i_line += 1 + else: + del(l_in_improper_coeffs[i_line]) @@ -1721,6 +1786,7 @@ try: if not some_pair_coeffs_read: sys.stderr.write('Warning: No \"pair coeffs\" set.\n' ' (No interactions between non-bonded atoms defined.)\n') + no_warnings = False #sys.stderr.write('Writing ttree data to standard out.\n' # ' You can redirect this to a file using:\n'+ @@ -1729,36 +1795,98 @@ try: if mol_name != '': sys.stdout.write(mol_name + ' {\n') + + if len(l_in_init) > 0: + sys.stdout.write('\n### LAMMPS commands for initialization\n' + '### (These can be overridden later.)\n\n') + l_in_init.insert(0, (' '*cindent)+'write_once(\"'+in_init+'\") {\n') + l_in_init.append((' '*cindent)+'}\n') + sys.stdout.write('\n') + sys.stdout.write(''.join(l_in_init)) + if len(l_in_settings) > 0: + sys.stdout.write('\n### LAMMPS commands for settings\n' + '### (These can be overridden later.)\n\n') + l_in_settings.insert(0, (' '*cindent)+'write_once(\"'+in_settings+'\") {\n') + l_in_settings.append((' '*cindent)+'}\n') + sys.stdout.write('\n') + sys.stdout.write(''.join(l_in_settings)) + non_empty_output = True + if len(l_in_masses) > 0: + l_in_masses.insert(0, (' '*cindent)+'write_once(\"'+in_settings+'\") {\n') + l_in_masses.append((' '*cindent)+'}\n') + sys.stdout.write('\n') + sys.stdout.write(''.join(l_in_masses)) + non_empty_output = True + if len(l_in_pair_coeffs) > 0: + l_in_pair_coeffs.insert(0, (' '*cindent)+'write_once(\"'+in_settings+'\") {\n') + l_in_pair_coeffs.append((' '*cindent)+'}\n') + sys.stdout.write('\n') + sys.stdout.write(''.join(l_in_pair_coeffs)) + non_empty_output = True + if len(l_in_bond_coeffs) > 0: + l_in_bond_coeffs.insert(0, (' '*cindent)+'write_once(\"'+in_settings+'\") {\n') + l_in_bond_coeffs.append((' '*cindent)+'}\n') + sys.stdout.write('\n') + sys.stdout.write(''.join(l_in_bond_coeffs)) + non_empty_output = True + if len(l_in_angle_coeffs) > 0: + l_in_angle_coeffs.insert(0, (' '*cindent)+'write_once(\"'+in_settings+'\") {\n') + l_in_angle_coeffs.append((' '*cindent)+'}\n') + sys.stdout.write('\n') + sys.stdout.write(''.join(l_in_angle_coeffs)) + non_empty_output = True + if len(l_in_dihedral_coeffs) > 0: + l_in_dihedral_coeffs.insert(0, (' '*cindent)+'write_once(\"'+in_settings+'\") {\n') + l_in_dihedral_coeffs.append((' '*cindent)+'}\n') + sys.stdout.write('\n') + sys.stdout.write(''.join(l_in_dihedral_coeffs)) + non_empty_output = True + if len(l_in_improper_coeffs) > 0: + l_in_improper_coeffs.insert(0, (' '*cindent)+'write_once(\"'+in_settings+'\") {\n') + l_in_improper_coeffs.append((' '*cindent)+'}\n') + sys.stdout.write('\n') + sys.stdout.write(''.join(l_in_improper_coeffs)) + non_empty_output = True + + if non_empty_output: + sys.stdout.write('\n### DATA sections\n\n') + if len(l_data_masses) > 0: l_data_masses.insert(0, (' '*cindent)+'write_once(\"'+data_masses+'\") {\n') l_data_masses.append((' '*cindent)+'}\n') sys.stdout.write('\n') sys.stdout.write(''.join(l_data_masses)) + non_empty_output = True if len(l_data_bond_coeffs) > 0: l_data_bond_coeffs.insert(0, (' '*cindent)+'write_once(\"'+data_bond_coeffs+'\") {\n') l_data_bond_coeffs.append((' '*cindent)+'}\n') sys.stdout.write('\n') sys.stdout.write(''.join(l_data_bond_coeffs)) + non_empty_output = True if len(l_data_angle_coeffs) > 0: l_data_angle_coeffs.insert(0, (' '*cindent)+'write_once(\"'+data_angle_coeffs+'\") {\n') l_data_angle_coeffs.append((' '*cindent)+'}\n') sys.stdout.write('\n') sys.stdout.write(''.join(l_data_angle_coeffs)) + non_empty_output = True if len(l_data_dihedral_coeffs) > 0: l_data_dihedral_coeffs.insert(0, (' '*cindent)+'write_once(\"'+data_dihedral_coeffs+'\") {\n') l_data_dihedral_coeffs.append((' '*cindent)+'}\n') sys.stdout.write('\n') sys.stdout.write(''.join(l_data_dihedral_coeffs)) + non_empty_output = True if len(l_data_improper_coeffs) > 0: l_data_improper_coeffs.insert(0, (' '*cindent)+'write_once(\"'+data_improper_coeffs+'\") {\n') l_data_improper_coeffs.append((' '*cindent)+'}\n') sys.stdout.write('\n') sys.stdout.write(''.join(l_data_improper_coeffs)) + non_empty_output = True if len(l_data_pair_coeffs) > 0: l_data_pair_coeffs.insert(0, (' '*cindent)+'write_once(\"'+data_pair_coeffs+'\") {\n') l_data_pair_coeffs.append((' '*cindent)+'}\n') sys.stdout.write('\n') sys.stdout.write(''.join(l_data_pair_coeffs)) + non_empty_output = True # class2 force fields: if len(l_data_bondbond_coeffs) > 0: @@ -1766,41 +1894,49 @@ try: l_data_bondbond_coeffs.append((' '*cindent)+'}\n') sys.stdout.write('\n') sys.stdout.write(''.join(l_data_bondbond_coeffs)) + non_empty_output = True if len(l_data_bondangle_coeffs) > 0: l_data_bondangle_coeffs.insert(0, (' '*cindent)+'write_once(\"'+data_bondangle_coeffs+'\") {\n') l_data_bondangle_coeffs.append((' '*cindent)+'}\n') sys.stdout.write('\n') sys.stdout.write(''.join(l_data_bondangle_coeffs)) + non_empty_output = True if len(l_data_middlebondtorsion_coeffs) > 0: l_data_middlebondtorsion_coeffs.insert(0, (' '*cindent)+'write_once(\"'+data_middlebondtorsion_coeffs+'\") {\n') l_data_middlebondtorsion_coeffs.append((' '*cindent)+'}\n') sys.stdout.write('\n') sys.stdout.write(''.join(l_data_middlebondtorsion_coeffs)) + non_empty_output = True if len(l_data_endbondtorsion_coeffs) > 0: l_data_endbondtorsion_coeffs.insert(0, (' '*cindent)+'write_once(\"'+data_endbondtorsion_coeffs+'\") {\n') l_data_endbondtorsion_coeffs.append((' '*cindent)+'}\n') sys.stdout.write('\n') sys.stdout.write(''.join(l_data_endbondtorsion_coeffs)) + non_empty_output = True if len(l_data_angletorsion_coeffs) > 0: l_data_angletorsion_coeffs.insert(0, (' '*cindent)+'write_once(\"'+data_angletorsion_coeffs+'\") {\n') l_data_angletorsion_coeffs.append((' '*cindent)+'}\n') sys.stdout.write('\n') sys.stdout.write(''.join(l_data_angletorsion_coeffs)) + non_empty_output = True if len(l_data_angleangletorsion_coeffs) > 0: l_data_angleangletorsion_coeffs.insert(0, (' '*cindent)+'write_once(\"'+data_angleangletorsion_coeffs+'\") {\n') l_data_angleangletorsion_coeffs.append((' '*cindent)+'}\n') sys.stdout.write('\n') sys.stdout.write(''.join(l_data_angleangletorsion_coeffs)) + non_empty_output = True if len(l_data_bondbond13_coeffs) > 0: l_data_bondbond13_coeffs.insert(0, (' '*cindent)+'write_once(\"'+data_bondbond13_coeffs+'\") {\n') l_data_bondbond13_coeffs.append((' '*cindent)+'}\n') sys.stdout.write('\n') sys.stdout.write(''.join(l_data_bondbond13_coeffs)) + non_empty_output = True if len(l_data_angleangle_coeffs) > 0: l_data_angleangle_coeffs.insert(0, (' '*cindent)+'write_once(\"'+data_angleangle_coeffs+'\") {\n') l_data_angleangle_coeffs.append((' '*cindent)+'}\n') sys.stdout.write('\n') sys.stdout.write(''.join(l_data_angleangle_coeffs)) + non_empty_output = True # automatic generation of bonded interactions by type: if len(l_data_angles_by_type) > 0: @@ -1808,25 +1944,30 @@ try: l_data_angles_by_type.append((' '*cindent)+'}\n') sys.stdout.write('\n') sys.stdout.write(''.join(l_data_angles_by_type)) + non_empty_output = True if len(l_data_dihedrals_by_type) > 0: l_data_dihedrals_by_type.insert(0, (' '*cindent)+'write_once(\"'+data_dihedrals_by_type+'\") {\n') l_data_dihedrals_by_type.append((' '*cindent)+'}\n') sys.stdout.write('\n') sys.stdout.write(''.join(l_data_dihedrals_by_type)) + non_empty_output = True if len(l_data_impropers_by_type) > 0: l_data_impropers_by_type.insert(0, (' '*cindent)+'write_once(\"'+data_impropers_by_type+'\") {\n') l_data_impropers_by_type.append((' '*cindent)+'}\n') sys.stdout.write('\n') sys.stdout.write(''.join(l_data_impropers_by_type)) + non_empty_output = True if len(l_data_atoms) > 0: l_data_atoms.insert(0, (' '*cindent)+'write(\"'+data_atoms+'\") {\n') l_data_atoms.append((' '*cindent)+'}\n') sys.stdout.write('\n') sys.stdout.write(''.join(l_data_atoms)) + non_empty_output = True else: sys.stderr.write('Warning: missing \"Atoms\" section.\n' ' (Did you include a LAMMPS data file in your argument list?)\n') + no_warnings = False # non-point-like particles if len(l_data_ellipsoids) > 0: @@ -1855,66 +1996,39 @@ try: l_data_bonds.append((' '*cindent)+'}\n') sys.stdout.write('\n') sys.stdout.write(''.join(l_data_bonds)) + non_empty_output = True if len(l_data_angles) > 0: l_data_angles.insert(0, (' '*cindent)+'write(\"'+data_angles+'\") {\n') l_data_angles.append((' '*cindent)+'}\n') sys.stdout.write('\n') sys.stdout.write(''.join(l_data_angles)) + non_empty_output = True if len(l_data_dihedrals) > 0: l_data_dihedrals.insert(0, (' '*cindent)+'write(\"'+data_dihedrals+'\") {\n') l_data_dihedrals.append((' '*cindent)+'}\n') sys.stdout.write('\n') sys.stdout.write(''.join(l_data_dihedrals)) + non_empty_output = True if len(l_data_impropers) > 0: l_data_impropers.insert(0, (' '*cindent)+'write(\"'+data_impropers+'\") {\n') l_data_impropers.append((' '*cindent)+'}\n') sys.stdout.write('\n') sys.stdout.write(''.join(l_data_impropers)) - if len(l_in_pair_coeffs) > 0: - l_in_pair_coeffs.insert(0, (' '*cindent)+'write_once(\"'+in_settings+'\") {\n') - l_in_pair_coeffs.append((' '*cindent)+'}\n') - sys.stdout.write('\n') - sys.stdout.write(''.join(l_in_pair_coeffs)) - if len(l_in_bond_coeffs) > 0: - l_in_bond_coeffs.insert(0, (' '*cindent)+'write_once(\"'+in_settings+'\") {\n') - l_in_bond_coeffs.append((' '*cindent)+'}\n') - sys.stdout.write('\n') - sys.stdout.write(''.join(l_in_bond_coeffs)) - if len(l_in_angle_coeffs) > 0: - l_in_angle_coeffs.insert(0, (' '*cindent)+'write_once(\"'+in_settings+'\") {\n') - l_in_angle_coeffs.append((' '*cindent)+'}\n') - sys.stdout.write('\n') - sys.stdout.write(''.join(l_in_angle_coeffs)) - if len(l_in_dihedral_coeffs) > 0: - l_in_dihedral_coeffs.insert(0, (' '*cindent)+'write_once(\"'+in_settings+'\") {\n') - l_in_dihedral_coeffs.append((' '*cindent)+'}\n') - sys.stdout.write('\n') - sys.stdout.write(''.join(l_in_dihedral_coeffs)) - if len(l_in_improper_coeffs) > 0: - l_in_improper_coeffs.insert(0, (' '*cindent)+'write_once(\"'+in_settings+'\") {\n') - l_in_improper_coeffs.append((' '*cindent)+'}\n') - sys.stdout.write('\n') - sys.stdout.write(''.join(l_in_improper_coeffs)) - if len(l_in_masses) > 0: - l_in_masses.insert(0, (' '*cindent)+'write_once(\"'+in_settings+'\") {\n') - l_in_masses.append((' '*cindent)+'}\n') - sys.stdout.write('\n') - sys.stdout.write(''.join(l_in_masses)) - - if len(l_in_settings) > 0: - l_in_settings.insert(0, (' '*cindent)+'write_once(\"'+in_settings+'\") {\n') - l_in_settings.append((' '*cindent)+'}\n') - sys.stdout.write('\n') - sys.stdout.write(''.join(l_in_settings)) - if len(l_in_init) > 0: - l_in_init.insert(0, (' '*cindent)+'write_once(\"'+in_init+'\") {\n') - l_in_init.append((' '*cindent)+'}\n') - sys.stdout.write('\n') - sys.stdout.write(''.join(l_in_init)) + non_empty_output = True if mol_name != '': sys.stdout.write('\n} # end of \"'+mol_name+'\" type definition\n') + if non_empty_output and no_warnings: + sys.stderr.write('WARNING: The '+g_program_name+' script has not been rigorously tested.\n' + ' Exotic (manybody) pair styles (and other force-field styles\n' + ' with unusual syntax) are not understood by '+g_program_name+'\n' + ' (although they are supported by moltemplate). Please look over\n' + ' the resulting LT file and check for errors. Convert any remaining\n' + ' atom, bond, angle, dihedral, or improper id or type numbers to the\n' + ' corresponding variables. Feel free to report any bugs you find.\n' + ' (-Andrew Jewett 2012-12-11)\n') + except (ValueError, InputError) as err: sys.stderr.write('\n'+str(err)+'\n') sys.exit(-1) diff --git a/tools/moltemplate/src/lttree.py b/tools/moltemplate/src/lttree.py index 24951e78a2..b5c7328b21 100755 --- a/tools/moltemplate/src/lttree.py +++ b/tools/moltemplate/src/lttree.py @@ -39,8 +39,6 @@ except NameError: basestring = unicode = str -data_atoms = 'Data Atoms' # <-- The name of the file/section storing Atom data. - class LttreeSettings(BasicUISettings): @@ -65,6 +63,8 @@ class LttreeSettings(BasicUISettings): self.i_atomid=None #<--An integer indicating which column has the atomid self.i_atomtype=None #<--An integer indicating which column has the atomtype self.i_molid=None #<--An integer indicating which column has the molid, if applicable + self.infile=None # Name of the outermost file. This is the file + # which was read at the moment parsing begins. @@ -83,9 +83,9 @@ def LttreeParseArgs(argv, settings): (argv[i].lower() == '-atom-style') or (argv[i].lower() == '-atom_style')): if i+1 >= len(argv): - raise InputError('Error: '+argv[i]+' flag should be followed by a an atom_style name.\n' - ' (Or single quoted string which includes a space-separated\n' - ' list of column names.)\n') + raise InputError('Error('+g_program_name+'): The '+argv[i]+' flag should be followed by a LAMMPS\n' + ' atom_style name (or single quoted string containing a space-separated\n' + ' list of column names such as: atom-ID atom-type q x y z molecule-ID.)\n') settings.column_names = AtomStyle2ColNames(argv[i+1]) sys.stderr.write('\n \"'+data_atoms+'\" column format:\n') sys.stderr.write(' '+(' '.join(settings.column_names))+'\n\n') @@ -234,9 +234,6 @@ def LttreeParseArgs(argv, settings): # '## dipole or ellipsoid (ie. a rotateable vector).##\n' # '## (More than one triplet can be specified. The ##\n' # '## number of entries must be divisible by 3.) ##\n' - #'## 5) Include a ##\n' - #'## write(\"Init.txt\"){atom_style ...} ##\n' - #'## statement in your .ttree file. ##\n' '########################################################\n') # The default atom_style is "full" @@ -402,9 +399,10 @@ def _ExecCommands(command_list, index += 1 # For debugging only - #if ((not isinstance(command, StackableCommand)) and - # (not isinstance(command, ScopeCommand))): - sys.stderr.write(str(command)+'\n') + if ((not isinstance(command, StackableCommand)) and + (not isinstance(command, ScopeCommand)) and + (not isinstance(command, WriteFileCommand))): + sys.stderr.write(str(command)+'\n') if isinstance(command, PopCommand): @@ -497,11 +495,6 @@ def _ExecCommands(command_list, elif isinstance(command, WriteFileCommand): - if ((len(command.tmpl_list) > 1) and - (isinstance(command.tmpl_list[1], VarRef)) and - (command.tmpl_list[1].binding.full_name == '$/atom:polymer/monomers[6]/CA')): - pass - # --- Throw away lines containin references to deleted variables:--- # First: To edit the content of a template, @@ -510,8 +503,7 @@ def _ExecCommands(command_list, for entry in command.tmpl_list: if isinstance(entry, TextBlock): tmpl_list.append(TextBlock(entry.text, - entry.locBeg, - entry.locEnd)) + entry.srcloc)) #, entry.srcloc_end)) else: tmpl_list.append(entry) @@ -531,10 +523,10 @@ def _ExecCommands(command_list, # This requires us to re-parse the contents of this text # (after it has been rendered), and apply these transformations # before passing them on to the caller. - if command.file_name == data_atoms: + if command.filename == data_atoms: text = TransformAtomText(text, matrix_stack.M) - files_content[command.file_name].append(text) + files_content[command.filename].append(text) elif isinstance(command, ScopeBegin): @@ -559,14 +551,14 @@ def _ExecCommands(command_list, substitute_vars) elif isinstance(command, ScopeEnd): - if 'Data Atoms' in files_content: + if data_atoms in files_content: for ppcommand in postprocessing_commands: - if 'Data Masses' in files_content: - xcm = CalcCM(files_content['Data Atoms'], - files_content['Data Masses'], + if data_masses in files_content: + xcm = CalcCM(files_content[data_atoms], + files_content[data_masses], settings) else: - xcm = CalcCM(files_content['Data Atoms']) + xcm = CalcCM(files_content[data_atoms]) if isinstance(ppcommand, PushRightCommand): matrix_stack.PushCommandsRight(ppcommand.contents, ppcommand.srcloc, @@ -577,8 +569,8 @@ def _ExecCommands(command_list, ppcommand.srcloc, xcm, which_stack=command.context_node) - files_content['Data Atoms'] = \ - TransformAtomText(Files_content['Data Atoms'], + files_content[data_atoms] = \ + TransformAtomText(files_content[data_atoms], matrix_stack.M) for ppcommand in postprocessing_commands: @@ -600,9 +592,9 @@ def _ExecCommands(command_list, # After processing the commands in this list, # merge the templates with the callers template list - for file_name, tmpl_list in files_content.items(): - global_files_content[file_name] += \ - files_content[file_name] + for filename, tmpl_list in files_content.items(): + global_files_content[filename] += \ + files_content[filename] return index @@ -628,17 +620,17 @@ def ExecCommands(commands, def WriteFiles(files_content, suffix='', write_to_stdout=True): - for file_name, str_list in files_content.items(): - if file_name != None: + for filename, str_list in files_content.items(): + if filename != None: out_file = None - if file_name == '': + if filename == '': if write_to_stdout: out_file = sys.stdout else: - out_file = open(file_name+suffix, 'a') + out_file = open(filename+suffix, 'a') if out_file != None: out_file.write(''.join(str_list)) - if file_name != '': + if filename != '': out_file.close() @@ -658,8 +650,8 @@ if __name__ == "__main__": """ g_program_name = 'lttree.py' - g_date_str = '2012-10-19' - g_version_str = '0.35' + g_date_str = '2012-12-15' + g_version_str = '0.7' ####### Main Code Below: ####### sys.stderr.write(g_program_name+' v'+g_version_str+' '+g_date_str+' ') @@ -691,8 +683,11 @@ if __name__ == "__main__": g_static_commands, g_instance_commands) - # Now, carry out the commands - # This involves rendering the templates and post-processing them. + # Interpret the the commands. (These are typically write() or + # write_once() commands, rendering templates into text. + # This step also handles coordinate transformations and delete commands. + # Coordinate transformations can be applied to the rendered text + # as a post-processing step. sys.stderr.write(' done\nbuilding templates...') @@ -707,6 +702,8 @@ if __name__ == "__main__": settings, False) + # Finally: write the rendered text to actual files. + # Erase the files that will be written to: sys.stderr.write(' done\nwriting templates...') EraseTemplateFiles(g_static_commands) @@ -723,7 +720,14 @@ if __name__ == "__main__": ExecCommands(g_instance_commands, files_content, settings, True) sys.stderr.write(' done\nwriting rendered templates...\n') WriteFiles(files_content) + sys.stderr.write(' done\n') + # Step 11: Now write the variable bindings/assignments table. + # Now write the variable bindings/assignments table. + sys.stderr.write('writing \"ttree_assignments.txt\" file...') + open('ttree_assignments.txt', 'w').close() # <-- erase previous version. + WriteVarBindingsFile(g_objectdefs) + WriteVarBindingsFile(g_objects) sys.stderr.write(' done\n') except (ValueError, InputError) as err: diff --git a/tools/moltemplate/src/lttree_check.py b/tools/moltemplate/src/lttree_check.py index ec3e5c5692..e97dcef6e9 100755 --- a/tools/moltemplate/src/lttree_check.py +++ b/tools/moltemplate/src/lttree_check.py @@ -7,15 +7,37 @@ # All rights reserved. """ -ltree_check.py +lttree_check.py + +The original template file format supports any variable types or file names. +However if you plan to process template files using lttree.py to create +LAMMPS-readable input/data files, then variables and file names obey certain +naming conventions. This code attempts to insure these conventions are obeyed +and to make sure that necessary variables are defined. + + -- This code checks static variables (@) and basic LAMMPS syntax -- -The original lttree-file format supports any variables or file names. -However if you plan to process lttree-files using lttree.py, then -lttree.py requires that variables and file names obey certain naming -conventions. This program makes an attempt to check that the variables and file names which appear in an "lttree" file are not mispelled (or miscapitlised). -(This is not the pretiest code I've ever written.) + +It also attempts to check that LAMMPS syntax conventions are obeyed. +(It checks that the appropriate type of variable is located in each column). + +It also attempts to check that all of the needed coeffs are defined. + + -- This code does NOT check instance variables ($) -- + +This code does not check to make sure that all references to instance variables +(such as $atom, $bond, $angle, $dihedral, $improper or $mol variables) are valid +This means a user's input script command (like the "group" command) could refer +to an $atom or $mol which was never defined, and this code would not detect it. +(Why: Checking for instance variables requires building the entire instance tree + and checking references uses up additional memory after that. I do not do this + because memory is often very scarce after building the instance tree.) +Instead, we could check for these kinds of errors when post-processing of +the files generated by lttree.py or moltemplate.sh. + + -- This is not the pretiest code I've ever written. -- """ @@ -30,7 +52,17 @@ if sys.version < '2.6': raise InputError('Error: Alas, you must upgrade to a newever version of python.') -def CheckVarNames(prefix, descr_str, suffix, srcloc): +#g_no_check_msg = \ +# "(If this error message is wrong, and/or you would like to continue anyway,\n"+\ +# "try running moltemplate again using the \"-nocheck\" command-line-argument.)\n" + +g_no_check_msg = \ + '(To continue anyway, run moltemplate using the \"-nocheck\" argument.)\n' + + + + +def CheckCommonVarNames(prefix, descr_str, suffix, srcloc): """ Check the name of variables in a lttree-file to confirm that they follow the conventions used by lttree. Almost any variable/category name is permitted, except for @@ -101,7 +133,7 @@ def CheckVarNames(prefix, descr_str, suffix, srcloc): -def CheckDataFileNames(file_name, +def CheckDataFileNames(filename, srcloc, write_command, fnames_found): @@ -109,90 +141,90 @@ def CheckDataFileNames(file_name, #data_prefix_no_space = data_prefix.rstrip() N_data_prefix_no_space = len(data_prefix) - section_name = file_name[N_data_prefix:] + section_name = filename[N_data_prefix:] if ((section_name.lower() == 'atom') or (section_name.lower() == 'atoms')): - if (file_name != data_atoms): + if (filename != data_atoms): raise InputError('Probable typo in '+ErrorLeader(srcloc.infile,srcloc.lineno)+'\n\n'+ - 'Output file name (\"'+file_name+'\") does not match,\n' + 'Output file name (\"'+filename+'\") does not match,\n' 'yet overlaps closely with reserved lttree-file name.\n' 'Perhaps you meant \"'+data_atoms+'\"?') elif (write_command == 'write_once'): raise InputError('Probable typo in '+ErrorLeader(srcloc.infile,srcloc.lineno)+'\n\n'+ 'When using moltemplate.sh to build LAMMPS input files, you probably do not\n' - 'want to use the '+write_command+'() command with \"'+file_name+'\".\n' - 'You should probably use write(\"'+file_name+'\") instead.\n') + 'want to use the '+write_command+'() command with \"'+filename+'\".\n' + 'You should probably use write(\"'+filename+'\") instead.\n') elif ((section_name.lower() == 'velocities') or (section_name.lower() == 'velocity')): - if (file_name != data_velocities): + if (filename != data_velocities): raise InputError('Probable typo in '+ErrorLeader(srcloc.infile,srcloc.lineno)+'\n\n'+ - 'Output file name (\"'+file_name+'\") does not match,\n' + 'Output file name (\"'+filename+'\") does not match,\n' 'yet overlaps closely with reserved lttree-file name.\n' 'Perhaps you meant \"'+data_velocities+'\"?') elif (write_command == 'write_once'): raise InputError('Probable typo in '+ErrorLeader(srcloc.infile,srcloc.lineno)+'\n\n'+ 'When using moltemplate.sh to build LAMMPS input files, you probably do not\n' - 'want to use the '+write_command+'() command with \"'+file_name+'\".\n' - 'You should probably use write(\"'+file_name+'\") instead.\n') + 'want to use the '+write_command+'() command with \"'+filename+'\".\n' + 'You should probably use write(\"'+filename+'\") instead.\n') elif ((section_name.lower() == 'mass') or (section_name.lower() == 'masses')): - if (file_name != data_masses): + if (filename != data_masses): raise InputError('Probable typo in '+ErrorLeader(srcloc.infile,srcloc.lineno)+'\n\n'+ - 'Output file name (\"'+file_name+'\") does not match,\n' + 'Output file name (\"'+filename+'\") does not match,\n' 'yet overlaps closely with reserved lttree-file name.\n' 'Perhaps you meant \"'+data_masses+'\"?') elif (write_command != 'write_once'): raise InputError('Probable typo in '+ErrorLeader(srcloc.infile,srcloc.lineno)+'\n\n'+ 'When using moltemplate.sh to build LAMMPS input files, you probably do not\n' - 'want to use the '+write_command+'() command with \"'+file_name+'\".\n' - 'You should probably use write_once(\"'+file_name+'\") instead.\n') + 'want to use the '+write_command+'() command with \"'+filename+'\".\n' + 'You should probably use write_once(\"'+filename+'\") instead.\n') elif ((section_name.lower() == 'ellipsoids') or (section_name.lower() == 'ellipsoid') or (section_name.lower() == 'elipsoids') or (section_name.lower() == 'elipsoid')): - if (file_name != data_ellipsoids): + if (filename != data_ellipsoids): raise InputError('Probable typo in '+ErrorLeader(srcloc.infile,srcloc.lineno)+'\n\n'+ - 'Output file name (\"'+file_name+'\") does not match,\n' + 'Output file name (\"'+filename+'\") does not match,\n' 'yet overlaps closely with reserved lttree-file name.\n' 'Perhaps you meant \"'+data_ellipsoids+'\"?') elif (write_command == 'write_once'): raise InputError('Probable typo in '+ErrorLeader(srcloc.infile,srcloc.lineno)+'\n\n'+ 'When using moltemplate.sh to build LAMMPS input files, you probably do not\n' - 'want to use the '+write_command+'() command with \"'+file_name+'\".\n' - 'You should probably use write(\"'+file_name+'\") instead.\n') + 'want to use the '+write_command+'() command with \"'+filename+'\".\n' + 'You should probably use write(\"'+filename+'\") instead.\n') elif ((section_name.lower() == 'triangle') or (section_name.lower() == 'triangles')): - if (file_name != data_triangles): + if (filename != data_triangles): raise InputError('Probable typo in '+ErrorLeader(srcloc.infile,srcloc.lineno)+'\n\n'+ - 'Output file name (\"'+file_name+'\") does not match,\n' + 'Output file name (\"'+filename+'\") does not match,\n' 'yet overlaps closely with reserved lttree-file name.\n' 'Perhaps you meant \"'+data_triangles+'\"?') elif (write_command == 'write_once'): raise InputError('Probable typo in '+ErrorLeader(srcloc.infile,srcloc.lineno)+'\n\n'+ 'When using moltemplate.sh to build LAMMPS input files, you probably do not\n' - 'want to use the '+write_command+'() command with \"'+file_name+'\".\n' - 'You should probably use write(\"'+file_name+'\") instead.\n') + 'want to use the '+write_command+'() command with \"'+filename+'\".\n' + 'You should probably use write(\"'+filename+'\") instead.\n') elif ((section_name.lower() == 'line') or (section_name.lower() == 'lines')): - if (file_name != data_lines): + if (filename != data_lines): raise InputError('Probable typo in '+ErrorLeader(srcloc.infile,srcloc.lineno)+'\n\n'+ - 'Output file name (\"'+file_name+'\") does not match,\n' + 'Output file name (\"'+filename+'\") does not match,\n' 'yet overlaps closely with reserved lttree-file name.\n' 'Perhaps you meant \"'+data_lines+'\"?') elif (write_command == 'write_once'): raise InputError('Probable typo in '+ErrorLeader(srcloc.infile,srcloc.lineno)+'\n\n'+ 'When using moltemplate.sh to build LAMMPS input files, you probably do not\n' - 'want to use the '+write_command+'() command with \"'+file_name+'\".\n' - 'You should probably use write(\"'+file_name+'\") instead.\n') + 'want to use the '+write_command+'() command with \"'+filename+'\".\n' + 'You should probably use write(\"'+filename+'\") instead.\n') elif ((section_name.lower().find('pair coef') == 0) or (section_name.lower().find('pair_coef') == 0) or @@ -202,9 +234,9 @@ def CheckDataFileNames(file_name, (section_name.lower().find('pair_by_type') == 0) or (section_name.lower().find('pair_bytype') == 0) or (section_name.lower().find('pairbytype') == 0)): - if (file_name != data_pair_coeffs): + if (filename != data_pair_coeffs): err_msg = 'Probable typo in '+ErrorLeader(srcloc.infile,srcloc.lineno)+'\n\n'+\ - 'Output file name (\"'+file_name+'\") does not match,\n'+\ + 'Output file name (\"'+filename+'\") does not match,\n'+\ 'yet overlaps closely with reserved lttree-file name.\n'+\ 'Perhaps you meant \"'+data_pair_coeffs+'\"?' if ((section_name.lower().find('by type') != -1) or @@ -216,94 +248,94 @@ def CheckDataFileNames(file_name, elif (write_command != 'write_once'): raise InputError('Probable typo in '+ErrorLeader(srcloc.infile,srcloc.lineno)+'\n\n'+ 'When using moltemplate.sh to build LAMMPS input files, you probably do not\n' - 'want to use the '+write_command+'() command with \"'+file_name+'\".\n' - 'You should probably use write_once(\"'+file_name+'\") instead.\n') + 'want to use the '+write_command+'() command with \"'+filename+'\".\n' + 'You should probably use write_once(\"'+filename+'\") instead.\n') elif ((section_name.lower().find('bond coef') == 0) or (section_name.lower().find('bond_coef') == 0) or (section_name.lower().find('bondcoef') == 0)): - if (file_name != data_bond_coeffs): + if (filename != data_bond_coeffs): raise InputError('Probable typo in '+ErrorLeader(srcloc.infile,srcloc.lineno)+'\n\n'+ - 'Output file name (\"'+file_name+'\") does not match,\n' + 'Output file name (\"'+filename+'\") does not match,\n' 'yet overlaps closely with reserved lttree-file name.\n' 'Perhaps you meant \"'+data_bond_coeffs+'\"?') elif (write_command != 'write_once'): raise InputError('Probable typo in '+ErrorLeader(srcloc.infile,srcloc.lineno)+'\n\n'+ 'When using moltemplate.sh to build LAMMPS input files, you probably do not\n' - 'want to use the '+write_command+'() command with \"'+file_name+'\".\n' - 'You should probably use write_once(\"'+file_name+'\") instead.\n') + 'want to use the '+write_command+'() command with \"'+filename+'\".\n' + 'You should probably use write_once(\"'+filename+'\") instead.\n') elif ((section_name.lower().find('angle coef') == 0) or (section_name.lower().find('angle_coef') == 0) or (section_name.lower().find('anglecoef') == 0)): - if (file_name != data_angle_coeffs): + if (filename != data_angle_coeffs): raise InputError('Probable typo in '+ErrorLeader(srcloc.infile,srcloc.lineno)+'\n\n'+ - 'Output file name (\"'+file_name+'\") does not match,\n' + 'Output file name (\"'+filename+'\") does not match,\n' 'yet overlaps closely with reserved lttree-file name.\n' 'Perhaps you meant \"'+data_angle_coeffs+'\"?') elif (write_command != 'write_once'): raise InputError('Probable typo in '+ErrorLeader(srcloc.infile,srcloc.lineno)+'\n\n'+ 'When using moltemplate.sh to build LAMMPS input files, you probably do not\n' - 'want to use the '+write_command+'() command with \"'+file_name+'\".\n' - 'You should probably use write_once(\"'+file_name+'\") instead.\n') + 'want to use the '+write_command+'() command with \"'+filename+'\".\n' + 'You should probably use write_once(\"'+filename+'\") instead.\n') elif ((section_name.lower().find('dihedral coef') == 0) or (section_name.lower().find('dihedral_coef') == 0) or (section_name.lower().find('dihedralcoef') == 0)): - if (file_name != data_dihedral_coeffs): + if (filename != data_dihedral_coeffs): raise InputError('Probable typo in '+ErrorLeader(srcloc.infile,srcloc.lineno)+'\n\n'+ - 'Output file name (\"'+file_name+'\") does not match,\n' + 'Output file name (\"'+filename+'\") does not match,\n' 'yet overlaps closely with reserved lttree-file name.\n' 'Perhaps you meant \"'+data_dihedral_coeffs+'\"?') elif (write_command != 'write_once'): raise InputError('Probable typo in '+ErrorLeader(srcloc.infile,srcloc.lineno)+'\n\n'+ 'When using moltemplate.sh to build LAMMPS input files, you probably do not\n' - 'want to use the '+write_command+'() command with \"'+file_name+'\".\n' - 'You should probably use write_once(\"'+file_name+'\") instead.\n') + 'want to use the '+write_command+'() command with \"'+filename+'\".\n' + 'You should probably use write_once(\"'+filename+'\") instead.\n') elif ((section_name.lower().find('improper coef') == 0) or (section_name.lower().find('improper_coef') == 0) or (section_name.lower().find('impropercoef') == 0)): - if (file_name != data_improper_coeffs): + if (filename != data_improper_coeffs): raise InputError('Probable typo in '+ErrorLeader(srcloc.infile,srcloc.lineno)+'\n\n'+ - 'Output file name (\"'+file_name+'\") does not match,\n' + 'Output file name (\"'+filename+'\") does not match,\n' 'yet overlaps closely with reserved lttree-file name.\n' 'Perhaps you meant \"'+data_improper_coeffs+'\"?') elif (write_command != 'write_once'): raise InputError('Probable typo in '+ErrorLeader(srcloc.infile,srcloc.lineno)+'\n\n'+ 'When using moltemplate.sh to build LAMMPS input files, you probably do not\n' - 'want to use the '+write_command+'() command with \"'+file_name+'\".\n' - 'You should probably use write_once(\"'+file_name+'\") instead.\n') + 'want to use the '+write_command+'() command with \"'+filename+'\".\n' + 'You should probably use write_once(\"'+filename+'\") instead.\n') # -- class2 data sections -- elif ((section_name.lower().find('bondbond coef') == 0) or (section_name.lower().find('bondbond_coef') == 0) or (section_name.lower().find('bondbondcoef') == 0)): - if (file_name != data_bondbond_coeffs): + if (filename != data_bondbond_coeffs): raise InputError('Probable typo in '+ErrorLeader(srcloc.infile,srcloc.lineno)+'\n\n'+ - 'Output file name (\"'+file_name+'\") does not match,\n' + 'Output file name (\"'+filename+'\") does not match,\n' 'yet overlaps closely with reserved lttree-file name.\n' 'Perhaps you meant \"'+data_bondbond_coeffs+'\"?') elif (write_command != 'write_once'): raise InputError('Probable typo in '+ErrorLeader(srcloc.infile,srcloc.lineno)+'\n\n'+ 'When using moltemplate.sh to build LAMMPS input files, you probably do not\n' - 'want to use the '+write_command+'() command with \"'+file_name+'\".\n' - 'You should probably use write_once(\"'+file_name+'\") instead.\n') + 'want to use the '+write_command+'() command with \"'+filename+'\".\n' + 'You should probably use write_once(\"'+filename+'\") instead.\n') elif ((section_name.lower().find('bondangle coef') == 0) or (section_name.lower().find('bondangle_coef') == 0) or (section_name.lower().find('bondanglecoef') == 0)): - if (file_name != data_bondangle_coeffs): + if (filename != data_bondangle_coeffs): raise InputError('Probable typo in '+ErrorLeader(srcloc.infile,srcloc.lineno)+'\n\n'+ - 'Output file name (\"'+file_name+'\") does not match,\n' + 'Output file name (\"'+filename+'\") does not match,\n' 'yet overlaps closely with reserved lttree-file name.\n' 'Perhaps you meant \"'+data_bondangle_coeffs+'\"?') elif (write_command != 'write_once'): raise InputError('Probable typo in '+ErrorLeader(srcloc.infile,srcloc.lineno)+'\n\n'+ 'When using moltemplate.sh to build LAMMPS input files, you probably do not\n' - 'want to use the '+write_command+'() command with \"'+file_name+'\".\n' - 'You should probably use write_once(\"'+file_name+'\") instead.\n') + 'want to use the '+write_command+'() command with \"'+filename+'\".\n' + 'You should probably use write_once(\"'+filename+'\") instead.\n') elif ((section_name.lower().find('middlebondtorsion coef') == 0) or (section_name.lower().find('middlebondtorsion_coef') == 0) or @@ -311,16 +343,16 @@ def CheckDataFileNames(file_name, (section_name.lower().find('middlebondtorision coef') == 0) or (section_name.lower().find('middlebondtorision_coef') == 0) or (section_name.lower().find('middlebondtorisioncoef') == 0)): - if (file_name != data_middlebondtorsion_coeffs): + if (filename != data_middlebondtorsion_coeffs): raise InputError('Probable typo in '+ErrorLeader(srcloc.infile,srcloc.lineno)+'\n\n'+ - 'Output file name (\"'+file_name+'\") does not match,\n' + 'Output file name (\"'+filename+'\") does not match,\n' 'yet overlaps closely with reserved lttree-file name.\n' 'Perhaps you meant \"'+data_middlebondtorsion_coeffs+'\"?') elif (write_command != 'write_once'): raise InputError('Probable typo in '+ErrorLeader(srcloc.infile,srcloc.lineno)+'\n\n'+ 'When using moltemplate.sh to build LAMMPS input files, you probably do not\n' - 'want to use the '+write_command+'() command with \"'+file_name+'\".\n' - 'You should probably use write_once(\"'+file_name+'\") instead.\n') + 'want to use the '+write_command+'() command with \"'+filename+'\".\n' + 'You should probably use write_once(\"'+filename+'\") instead.\n') elif ((section_name.lower().find('endbondtorsion coef') == 0) or (section_name.lower().find('endbondtorsion_coef') == 0) or @@ -328,16 +360,16 @@ def CheckDataFileNames(file_name, (section_name.lower().find('endbondtorision coef') == 0) or (section_name.lower().find('endbondtorision_coef') == 0) or (section_name.lower().find('endbondtorisioncoef') == 0)): - if (file_name != data_endbondtorsion_coeffs): + if (filename != data_endbondtorsion_coeffs): raise InputError('Probable typo in '+ErrorLeader(srcloc.infile,srcloc.lineno)+'\n\n'+ - 'Output file name (\"'+file_name+'\") does not match,\n' + 'Output file name (\"'+filename+'\") does not match,\n' 'yet overlaps closely with reserved lttree-file name.\n' 'Perhaps you meant \"'+data_endbondtorsion_coeffs+'\"?') elif (write_command != 'write_once'): raise InputError('Probable typo in '+ErrorLeader(srcloc.infile,srcloc.lineno)+'\n\n'+ 'When using moltemplate.sh to build LAMMPS input files, you probably do not\n' - 'want to use the '+write_command+'() command with \"'+file_name+'\".\n' - 'You should probably use write_once(\"'+file_name+'\") instead.\n') + 'want to use the '+write_command+'() command with \"'+filename+'\".\n' + 'You should probably use write_once(\"'+filename+'\") instead.\n') elif ((section_name.lower().find('angletorsion coef') == 0) or (section_name.lower().find('angletorsion_coef') == 0) or @@ -345,16 +377,16 @@ def CheckDataFileNames(file_name, (section_name.lower().find('angletorision coef') == 0) or (section_name.lower().find('angletorision_coef') == 0) or (section_name.lower().find('angletorisioncoef') == 0)): - if (file_name != data_angletorsion_coeffs): + if (filename != data_angletorsion_coeffs): raise InputError('Probable typo in '+ErrorLeader(srcloc.infile,srcloc.lineno)+'\n\n'+ - 'Output file name (\"'+file_name+'\") does not match,\n' + 'Output file name (\"'+filename+'\") does not match,\n' 'yet overlaps closely with reserved lttree-file name.\n' 'Perhaps you meant \"'+data_angletorsion_coeffs+'\"?') elif (write_command != 'write_once'): raise InputError('Probable typo in '+ErrorLeader(srcloc.infile,srcloc.lineno)+'\n\n'+ 'When using moltemplate.sh to build LAMMPS input files, you probably do not\n' - 'want to use the '+write_command+'() command with \"'+file_name+'\".\n' - 'You should probably use write_once(\"'+file_name+'\") instead.\n') + 'want to use the '+write_command+'() command with \"'+filename+'\".\n' + 'You should probably use write_once(\"'+filename+'\") instead.\n') elif ((section_name.lower().find('angleangletorsion coef') == 0) or (section_name.lower().find('angleangletorsion_coef') == 0) or @@ -362,47 +394,44 @@ def CheckDataFileNames(file_name, (section_name.lower().find('angleangletorision coef') == 0) or (section_name.lower().find('angleangletorision_coef') == 0) or (section_name.lower().find('angleangletorisioncoef') == 0)): - if (file_name != data_angleangletorsion_coeffs): + if (filename != data_angleangletorsion_coeffs): raise InputError('Probable typo in '+ErrorLeader(srcloc.infile,srcloc.lineno)+'\n\n'+ - 'Output file name (\"'+file_name+'\") does not match,\n' + 'Output file name (\"'+filename+'\") does not match,\n' 'yet overlaps closely with reserved lttree-file name.\n' 'Perhaps you meant \"'+data_angleangletorsion_coeffs+'\"?') elif (write_command != 'write_once'): raise InputError('Probable typo in '+ErrorLeader(srcloc.infile,srcloc.lineno)+'\n\n'+ 'When using moltemplate.sh to build LAMMPS input files, you probably do not\n' - 'want to use the '+write_command+'() command with \"'+file_name+'\".\n' - 'You should probably use write_once(\"'+file_name+'\") instead.\n') + 'want to use the '+write_command+'() command with \"'+filename+'\".\n' + 'You should probably use write_once(\"'+filename+'\") instead.\n') elif ((section_name.lower().find('bondbond13 coef') == 0) or (section_name.lower().find('bondbond13_coef') == 0) or (section_name.lower().find('bondbond13coef') == 0)): - if (file_name != data_bondbond13_coeffs): + if (filename != data_bondbond13_coeffs): raise InputError('Probable typo in '+ErrorLeader(srcloc.infile,srcloc.lineno)+'\n\n'+ - 'Output file name (\"'+file_name+'\") does not match,\n' + 'Output file name (\"'+filename+'\") does not match,\n' 'yet overlaps closely with reserved lttree-file name.\n' 'Perhaps you meant \"'+data_bondbond13_coeffs+'\"?') elif (write_command != 'write_once'): raise InputError('Probable typo in '+ErrorLeader(srcloc.infile,srcloc.lineno)+'\n\n'+ 'When using moltemplate.sh to build LAMMPS input files, you probably do not\n' - 'want to use the '+write_command+'() command with \"'+file_name+'\".\n' - 'You should probably use write_once(\"'+file_name+'\") instead.\n') + 'want to use the '+write_command+'() command with \"'+filename+'\".\n' + 'You should probably use write_once(\"'+filename+'\") instead.\n') elif ((section_name.lower().find('angleangle coef') == 0) or (section_name.lower().find('angleangle_coef') == 0) or (section_name.lower().find('angleanglecoef') == 0)): - if (file_name != data_angleangle_coeffs): + if (filename != data_angleangle_coeffs): raise InputError('Probable typo in '+ErrorLeader(srcloc.infile,srcloc.lineno)+'\n\n'+ - 'Output file name (\"'+file_name+'\") does not match,\n' + 'Output file name (\"'+filename+'\") does not match,\n' 'yet overlaps closely with reserved lttree-file name.\n' 'Perhaps you meant \"'+data_angleangle_coeffs+'\"?') elif (write_command != 'write_once'): raise InputError('Probable typo in '+ErrorLeader(srcloc.infile,srcloc.lineno)+'\n\n'+ 'When using moltemplate.sh to build LAMMPS input files, you probably do not\n' - 'want to use the '+write_command+'() command with \"'+file_name+'\".\n' - 'You should probably use write_once(\"'+file_name+'\") instead.\n') - - - + 'want to use the '+write_command+'() command with \"'+filename+'\".\n' + 'You should probably use write_once(\"'+filename+'\") instead.\n') @@ -416,16 +445,16 @@ def CheckDataFileNames(file_name, (section_name.lower() == 'angle_by_type') or (section_name.lower() == 'angle_bytype') or (section_name.lower() == 'anglebytype')): - if (file_name != data_angles_by_type): + if (filename != data_angles_by_type): raise InputError('Probable typo in '+ErrorLeader(srcloc.infile,srcloc.lineno)+'\n\n'+ - 'Output file name (\"'+file_name+'\") does not match,\n' + 'Output file name (\"'+filename+'\") does not match,\n' 'yet overlaps closely with reserved lttree-file name.\n' 'Perhaps you meant \"'+data_angles_by_type+'\"?') elif (write_command != 'write_once'): raise InputError('Probable typo in '+ErrorLeader(srcloc.infile,srcloc.lineno)+'\n\n'+ 'When using moltemplate.sh to build LAMMPS input files, you probably do not\n' - 'want to use the '+write_command+'() command with \"'+file_name+'\".\n' - 'You should probably use write_once(\"'+file_name+'\") instead.\n') + 'want to use the '+write_command+'() command with \"'+filename+'\".\n' + 'You should probably use write_once(\"'+filename+'\") instead.\n') elif ((section_name.lower() == 'dihedrals by type') or (section_name.lower() == 'dihedrals bytype') or @@ -437,16 +466,16 @@ def CheckDataFileNames(file_name, (section_name.lower() == 'dihedral_by_type') or (section_name.lower() == 'dihedral_bytype') or (section_name.lower() == 'dihedralbytype')): - if (file_name != data_dihedrals_by_type): + if (filename != data_dihedrals_by_type): raise InputError('Probable typo in '+ErrorLeader(srcloc.infile,srcloc.lineno)+'\n\n'+ - 'Output file name (\"'+file_name+'\") does not match,\n' + 'Output file name (\"'+filename+'\") does not match,\n' 'yet overlaps closely with reserved lttree-file name.\n' 'Perhaps you meant \"'+data_dihedrals_by_type+'\"?') elif (write_command != 'write_once'): raise InputError('Probable typo in '+ErrorLeader(srcloc.infile,srcloc.lineno)+'\n\n'+ 'When using moltemplate.sh to build LAMMPS input files, you probably do not\n' - 'want to use the '+write_command+'() command with \"'+file_name+'\".\n' - 'You should probably use write_once(\"'+file_name+'\") instead.\n') + 'want to use the '+write_command+'() command with \"'+filename+'\".\n' + 'You should probably use write_once(\"'+filename+'\") instead.\n') elif ((section_name.lower() == 'impropers by type') or (section_name.lower() == 'impropers bytype') or @@ -458,71 +487,71 @@ def CheckDataFileNames(file_name, (section_name.lower() == 'improper_by_type') or (section_name.lower() == 'improper_bytype') or (section_name.lower() == 'improperbytype')): - if (file_name != data_impropers_by_type): + if (filename != data_impropers_by_type): raise InputError('Probable typo in '+ErrorLeader(srcloc.infile,srcloc.lineno)+'\n\n'+ - 'Output file name (\"'+file_name+'\") does not match,\n' + 'Output file name (\"'+filename+'\") does not match,\n' 'yet overlaps closely with reserved lttree-file name.\n' 'Perhaps you meant \"'+data_impropers_by_type+'\"?') elif (write_command != 'write_once'): raise InputError('Probable typo in '+ErrorLeader(srcloc.infile,srcloc.lineno)+'\n\n'+ 'When using moltemplate.sh to build LAMMPS input files, you probably do not\n' - 'want to use the '+write_command+'() command with \"'+file_name+'\".\n' - 'You should probably use write_once(\"'+file_name+'\") instead.\n') + 'want to use the '+write_command+'() command with \"'+filename+'\".\n' + 'You should probably use write_once(\"'+filename+'\") instead.\n') elif ((section_name.lower() == 'bonds') or (section_name.lower() == 'bond')): - if (file_name != data_bonds): + if (filename != data_bonds): raise InputError('Probable typo in '+ErrorLeader(srcloc.infile,srcloc.lineno)+'\n\n'+ - 'Output file name (\"'+file_name+'\") does not match,\n' + 'Output file name (\"'+filename+'\") does not match,\n' 'yet overlaps closely with reserved lttree-file name.\n' 'Perhaps you meant \"'+data_bonds+'\"?') elif (write_command == 'write_once'): raise InputError('Probable typo in '+ErrorLeader(srcloc.infile,srcloc.lineno)+'\n\n'+ 'When using moltemplate.sh to build LAMMPS input files, you probably do not\n' - 'want to use the '+write_command+'() command with \"'+file_name+'\".\n' - 'You should probably use write(\"'+file_name+'\") instead.\n') + 'want to use the '+write_command+'() command with \"'+filename+'\".\n' + 'You should probably use write(\"'+filename+'\") instead.\n') elif ((section_name.lower() == 'angles') or (section_name.lower() == 'angle')): - if (file_name != data_angles): + if (filename != data_angles): raise InputError('Probable typo in '+ErrorLeader(srcloc.infile,srcloc.lineno)+'\n\n'+ - 'Output file name (\"'+file_name+'\") does not match,\n' + 'Output file name (\"'+filename+'\") does not match,\n' 'yet overlaps closely with reserved lttree-file name.\n' 'Perhaps you meant \"'+data_angles+'\"?') elif (write_command == 'write_once'): raise InputError('Probable typo in '+ErrorLeader(srcloc.infile,srcloc.lineno)+'\n\n'+ 'When using moltemplate.sh to build LAMMPS input files, you probably do not\n' - 'want to use the '+write_command+'() command with \"'+file_name+'\".\n' - 'You should probably use write(\"'+file_name+'\") instead.\n') + 'want to use the '+write_command+'() command with \"'+filename+'\".\n' + 'You should probably use write(\"'+filename+'\") instead.\n') elif ((section_name.lower() == 'dihedrals') or (section_name.lower() == 'dihedral')): - if (file_name != data_dihedrals): + if (filename != data_dihedrals): raise InputError('Probable typo in '+ErrorLeader(srcloc.infile,srcloc.lineno)+'\n\n'+ - 'Output file name (\"'+file_name+'\") does not match,\n' + 'Output file name (\"'+filename+'\") does not match,\n' 'yet overlaps closely with reserved lttree-file name.\n' 'Perhaps you meant \"'+data_dihedrals+'\"?') elif (write_command == 'write_once'): raise InputError('Probable typo in '+ErrorLeader(srcloc.infile,srcloc.lineno)+'\n\n'+ 'When using moltemplate.sh to build LAMMPS input files, you probably do not\n' - 'want to use the '+write_command+'() command with \"'+file_name+'\".\n' - 'You should probably use write(\"'+file_name+'\") instead.\n') + 'want to use the '+write_command+'() command with \"'+filename+'\".\n' + 'You should probably use write(\"'+filename+'\") instead.\n') elif ((section_name.lower() == 'impropers') or (section_name.lower() == 'improper')): - if (file_name != data_impropers): + if (filename != data_impropers): raise InputError('Probable typo in '+ErrorLeader(srcloc.infile,srcloc.lineno)+'\n\n'+ - 'Output file name (\"'+file_name+'\") does not match,\n' + 'Output file name (\"'+filename+'\") does not match,\n' 'yet overlaps closely with reserved lttree-file name.\n' 'Perhaps you meant \"'+data_impropers+'\"?') elif (write_command == 'write_once'): raise InputError('Probable typo in '+ErrorLeader(srcloc.infile,srcloc.lineno)+'\n\n'+ 'When using moltemplate.sh to build LAMMPS input files, you probably do not\n' - 'want to use the '+write_command+'() command with \"'+file_name+'\".\n' - 'You should probably use write(\"'+file_name+'\") instead.\n') + 'want to use the '+write_command+'() command with \"'+filename+'\".\n' + 'You should probably use write(\"'+filename+'\") instead.\n') elif ((section_name.lower() == 'box boundaries') or (section_name.lower() == 'box boundary') or @@ -534,29 +563,29 @@ def CheckDataFileNames(file_name, (section_name.lower() == 'periodic_boundaries') or (section_name.lower() == 'periodic_boundary_conditions') or (section_name.lower() == 'pbc')): - if ((file_name != data_boundary) and - (file_name != data_pbc)): + if ((filename != data_boundary) and + (filename != data_pbc)): raise InputError('Probable typo in '+ErrorLeader(srcloc.infile,srcloc.lineno)+'\n\n'+ - 'Output file name (\"'+file_name+'\") does not match,\n' + 'Output file name (\"'+filename+'\") does not match,\n' 'yet overlaps closely with reserved lttree-file name.\n' 'Perhaps you meant \"'+data_boundary+'\"?\n' '(Specify periodic boundary conditions this way.)') elif (write_command != 'write_once'): raise InputError('Probable typo in '+ErrorLeader(srcloc.infile,srcloc.lineno)+'\n\n'+ 'When using moltemplate.sh to build LAMMPS input files, you probably do not\n' - 'want to use the '+write_command+'() command with \"'+file_name+'\".\n' - 'You should probably use write_once(\"'+file_name+'\") instead.\n') - elif (file_name == data_pbc): + 'want to use the '+write_command+'() command with \"'+filename+'\".\n' + 'You should probably use write_once(\"'+filename+'\") instead.\n') + elif (filename == data_pbc): sys.stderr.write('WARNING: write_once(\"'+data_pbc+'\") is depreciated.\n' ' Use write_once(\"'+data_boundary+'\") instead.\n') -def CheckFileNames(file_name, - srcloc, - write_command, - file_names_found): +def CheckCommonFileNames(filename, + srcloc, + write_command, + filenames_found): """ Check the write() or write_once() statements in a lttree-file to make sure that the files being written @@ -566,90 +595,90 @@ def CheckFileNames(file_name, """ - file_names_found.add(file_name) + filenames_found.add(filename) N_data_prefix = len(data_prefix) #data_prefix_no_space = data_prefix.rstrip() N_data_prefix_no_space = len(data_prefix_no_space) - if ((file_name[:N_data_prefix].lower() == data_prefix.lower()) and - (file_name[:N_data_prefix] != data_prefix)): + if ((filename[:N_data_prefix].lower() == data_prefix.lower()) and + (filename[:N_data_prefix] != data_prefix)): raise InputError('Probable typo in '+ErrorLeader(srcloc.infile,srcloc.lineno)+'\n\n'+ - 'The beginning of output file (\"'+file_name+'\")\n' + 'The beginning of output file (\"'+filename+'\")\n' 'does not match yet overlaps closely with a reserved lttree-file name prefix.\n' '(\"'+data_prefix+'\"). Perhaps you meant \"'+data_prefix+filename[N_data_prefix:]+'\"?') # check did they forget the space? - if (file_name[:N_data_prefix_no_space] == data_prefix_no_space): - if (file_name[:N_data_prefix] == data_prefix): + if (filename[:N_data_prefix_no_space] == data_prefix_no_space): + if (filename[:N_data_prefix] == data_prefix): - CheckDataFileNames(file_name, + CheckDataFileNames(filename, srcloc, write_command, - file_names_found) + filenames_found) else: raise InputError('Probable typo in '+ErrorLeader(srcloc.infile,srcloc.lineno)+'\n\n'+ - 'The beginning of output file (\"'+file_name+'\")\n' + 'The beginning of output file (\"'+filename+'\")\n' 'does not match yet overlaps closely with a reserved lttree-file name prefix.\n' '(\"'+data_prefix+'\"). Perhaps you meant \"'+data_prefix+filename[N_data_prefix_no_space:]+'\"?') - elif ((file_name.lower() == 'box boundaries') or - (file_name.lower() == 'box boundary') or - (file_name.lower() == 'boundaries') or - (file_name.lower() == 'boundary') or - (file_name.lower() == 'boundary conditions') or - (file_name.lower() == 'periodic boundaries') or - (file_name.lower() == 'periodic boundary conditions') or - (file_name.lower() == 'periodic_boundaries') or - (file_name.lower() == 'periodic_boundary_conditions') or - (file_name.lower() == 'pbc')): + elif ((filename.lower() == 'box boundaries') or + (filename.lower() == 'box boundary') or + (filename.lower() == 'boundaries') or + (filename.lower() == 'boundary') or + (filename.lower() == 'boundary conditions') or + (filename.lower() == 'periodic boundaries') or + (filename.lower() == 'periodic boundary conditions') or + (filename.lower() == 'periodic_boundaries') or + (filename.lower() == 'periodic_boundary_conditions') or + (filename.lower() == 'pbc')): # In that case (for one thing) they forgot the data_prefix raise InputError('Probable typo in '+ErrorLeader(srcloc.infile,srcloc.lineno)+'\n\n'+ - 'Output file name (\"'+file_name+'\") does not match,\n' + 'Output file name (\"'+filename+'\") does not match,\n' 'yet overlaps closely with reserved lttree-file name.\n' 'Perhaps you meant \"'+data_boundary+'\"?\n' '(Specify periodic boundary conditions this way.)') - elif ((file_name.lower() == 'init') or - (file_name.lower() == 'in init') or - (file_name.lower() == 'ininit') or - (file_name.lower() == 'initialize') or - (file_name.lower() == 'in initialize') or - (file_name.lower() == 'ininitialize')): - if (file_name != in_init): + elif ((filename.lower() == 'init') or + (filename.lower() == 'in init') or + (filename.lower() == 'ininit') or + (filename.lower() == 'initialize') or + (filename.lower() == 'in initialize') or + (filename.lower() == 'ininitialize')): + if (filename != in_init): raise InputError('Probable typo in '+ErrorLeader(srcloc.infile,srcloc.lineno)+'\n\n'+ - 'Output file name (\"'+file_name+'\") does not match,\n' + 'Output file name (\"'+filename+'\") does not match,\n' 'yet overlaps closely with reserved lttree-file name.\n' 'Perhaps you meant \"'+in_init+'\"?') elif (write_command != 'write_once'): raise InputError('Probable typo in '+ErrorLeader(srcloc.infile,srcloc.lineno)+'\n\n'+ 'When using moltemplate.sh to build LAMMPS input files, you probably do not\n' - 'want to use the '+write_command+'() command with \"'+file_name+'\".\n' - 'You should probably use write_once(\"'+file_name+'\") instead.\n') + 'want to use the '+write_command+'() command with \"'+filename+'\".\n' + 'You should probably use write_once(\"'+filename+'\") instead.\n') - elif ((file_name.lower() == 'settings') or - (file_name.lower() == 'in settings') or - (file_name.lower() == 'insettings')): + elif ((filename.lower() == 'settings') or + (filename.lower() == 'in settings') or + (filename.lower() == 'insettings')): - if (file_name != in_settings): + if (filename != in_settings): raise InputError('Probable typo in '+ErrorLeader(srcloc.infile,srcloc.lineno)+'\n\n'+ - 'Output file name (\"'+file_name+'\") does not match,\n' + 'Output file name (\"'+filename+'\") does not match,\n' 'yet overlaps closely with reserved lttree-file name.\n' 'Perhaps you meant \"'+in_settings+'\"?') - elif ((file_name.lower() == 'set_coords') or - (file_name.lower() == 'set coords') or - (file_name.lower() == 'setcoords') or - (file_name.lower() == 'in set_coords') or - (file_name.lower() == 'in set coords') or - (file_name.lower() == 'in setcoords')): - if (file_name != in_set_coords): + elif ((filename.lower() == 'set_coords') or + (filename.lower() == 'set coords') or + (filename.lower() == 'setcoords') or + (filename.lower() == 'in set_coords') or + (filename.lower() == 'in set coords') or + (filename.lower() == 'in setcoords')): + if (filename != in_set_coords): raise InputError('Probable typo in '+ErrorLeader(srcloc.infile,srcloc.lineno)+'\n\n'+ - 'Output file name (\"'+file_name+'\") does not match,\n' + 'Output file name (\"'+filename+'\") does not match,\n' 'yet overlaps closely with reserved lttree-file name.\n' 'Perhaps you meant \"'+in_set_coords+'\"?') @@ -659,7 +688,7 @@ def CheckFileNames(file_name, -def CheckSyntax(lex): +def CheckSyntaxCheap(lex): """ Parse() builds a static tree of StaticObjs by parsing text file. -The "lex" argument is afile or input stream which has been converted @@ -689,18 +718,18 @@ def CheckSyntax(lex): #print('Parse(): open_paren=\"'+open_paren+'\"') if open_paren=='{': - # ..then the user neglected to specify the "file_name" file-name + # ..then the user neglected to specify the "filename" file-name # argument. In that case, supply the default, ''. # (which is shorthand for the standard out in this case) open_curly = open_paren[0] open_paren = '' close_paren = '' - file_name = '' + filename = '' srcloc = lex.GetSrcLoc() else: - file_name = lex.get_token() - if file_name == ')': - file_name == '' + filename = lex.get_token() + if filename == ')': + filename == '' close_paren = ')' else: close_paren = lex.get_token() @@ -713,24 +742,25 @@ def CheckSyntax(lex): raise InputError('Error: in '+lex.error_leader()+'\n\n' 'Syntax error at beginning of '+command+' command.') - file_name = RemoveOuterQuotes(file_name, lex.quotes) + filename = RemoveOuterQuotes(filename, lex.quotes) # The previous line is similar to: - #file_name = file_name.strip(lex.quotes) + #filename = filename.strip(lex.quotes) - CheckFileNames(file_name, lex.GetSrcLoc(), command, fnames_found) + CheckCommonFileNames(filename, lex.GetSrcLoc(), command, fnames_found) - templ_contents = lex.ReadTemplate() + tmpl_contents = lex.ReadTemplate() + StaticObj.CleanupReadTemplate(tmpl_contents, lex) - for entry in templ_contents: + for entry in tmpl_contents: if (type(entry) is VarRef): - CheckVarNames(entry.prefix, - entry.descr_str, - entry.suffix, - entry.srcloc) + CheckCommonVarNames(entry.prefix, + entry.descr_str, + entry.suffix, + entry.srcloc) #if (data_velocities not in fnames_found): @@ -786,9 +816,979 @@ def CheckSyntax(lex): + +def CheckSyntaxStatic(context_node, + root_node, + atom_column_names, + data_pair_coeffs_defined, + data_bond_coeffs_defined, + data_angle_coeffs_defined, + data_dihedral_coeffs_defined, + data_improper_coeffs_defined, + in_pair_coeffs_defined, + in_bond_coeffs_defined, + in_angle_coeffs_defined, + in_dihedral_coeffs_defined, + in_improper_coeffs_defined, + search_instance_commands): + + if search_instance_commands: + assert(isinstance(context_node, StaticObj)) + commands = context_node.instance_commands + else: + # Note: Leaf nodes contain no commands, so skip them + if (not hasattr(context_node, 'commands')): + return + # Otherwise process their commands + commands = context_node.commands + + for command in commands: + if isinstance(command, WriteFileCommand): + + filename = command.filename + + if filename == None: # (The "create_var" command causes this) + pass + elif (filename.find(in_prefix) == 0): #if filename begins with "In " + CheckInFileSyntax(command.tmpl_list, + root_node, + in_pair_coeffs_defined, + in_bond_coeffs_defined, + in_angle_coeffs_defined, + in_dihedral_coeffs_defined, + in_improper_coeffs_defined) + + elif filename == 'Data Atoms': + table = TableFromTemplate(command.tmpl_list, + [[' ', '\t', '\r'], '\n'], + [True, False]) + for i in range(0, len(table)): + + assert(hasattr(table[i], '__len__')) + if len(table[i]) == 0: + pass # skip blank lines + elif ((len(table[i]) > 1) and + isinstance(table[i][0], TextBlock) and + (len(table[i][0].text) > 0) and + (table[i][0].text == '#')): + pass # skip comment lines + else: + syntax_err = False + + if len(table[i]) < len(atom_column_names): + syntax_err = True + else: + syntax_err = False + for j in range(0, len(atom_column_names)): + if ((atom_column_names[j].lower() == 'atom-id') and + (not ((j < len(table[i])) and + isinstance(table[i][j], VarRef) and + (table[i][j].prefix in ('$','${')) and + (ExtractCatName(table[i][j].descr_str) == 'atom')))): + syntax_err = True + elif ((atom_column_names[j].lower() == 'molecule-id') and + (not ((j < len(table[i])) and + isinstance(table[i][j], VarRef) and + (table[i][j].prefix in ('$','${')) and + (ExtractCatName(table[i][j].descr_str) == 'mol')))): + syntax_err = True + elif ((atom_column_names[j].lower() == 'atom-type') and + (not ((j < len(table[i])) and + (isinstance(table[i][j], VarRef)) and + (table[i][j].prefix in ('@', '@{')) and + (table[i][j].nptr.cat_name == 'atom') and + (table[i][j].nptr.cat_node == root_node)))): + syntax_err = True + + if syntax_err: + correct_rows_list = [s for s in atom_column_names] + for j in range(0, len(correct_rows_list)): + if correct_rows_list[j].lower() == 'atom-id': + correct_rows_list[j] = '$atom:id' + elif correct_rows_list[j].lower() == 'atom-type': + correct_rows_list[j] = '@atom:type' + elif correct_rows_list[j].lower() == 'molecule-id': + correct_rows_list[j] = '$mol:id' + correct_rows_msg = ' '.join(correct_rows_list) + raise InputError('----------------------------------------------------\n'+ + ' Syntax error near '+ + ErrorLeader(table[i][0].srcloc.infile, + table[i][0].srcloc.lineno)+'\n' + ' Invalid "Data Atoms" syntax.\n'+ + 'Each line of the \"Data Atoms\" section should have this format:\n\n' + ' '+correct_rows_msg+'\n\n' + 'You may have forgotten to specify the LAMMPS atom_style.\n'+ + '(You can do this running moltemplate with the -atom-style _style_ argument.)\n'+ + '----------------------------------------------------\n'+ + g_no_check_msg) + + elif filename == 'Data Bonds': + table = TableFromTemplate(command.tmpl_list, + [[' ', '\t', '\r'], '\n'], + [True, False]) + for i in range(0, len(table)): + syntax_err = False + assert(hasattr(table[i], '__len__')) + if len(table[i]) > 0: + if ((len(table[i]) > 1) and + isinstance(table[i][0], TextBlock) and + (len(table[i][0].text) > 0) and + (table[i][0].text == '#')): + pass + else: + if len(table[i]) < 4: + syntax_err = True + table_entry = table[i][0] + if (not ((isinstance(table_entry, VarRef)) and + (table_entry.prefix in ('$','${')) and + (ExtractCatName(table_entry.descr_str) == 'bond'))): + syntax_err = True + if len(table[i]) > 1: + table_entry = table[i][1] + if (not ((isinstance(table_entry, VarRef)) and + (table_entry.prefix in ('@', '@{')) and + (table_entry.nptr.cat_name == 'bond') and + (table_entry.nptr.cat_node == root_node))): + syntax_err = True + if len(table[i]) > 2: + table_entry = table[i][2] + if (not ((isinstance(table_entry, VarRef)) and + (table_entry.prefix in ('$','${')) and + (ExtractCatName(table_entry.descr_str) == 'atom'))): + syntax_err = True + if len(table[i]) > 3: + table_entry = table[i][3] + if (not ((isinstance(table_entry, VarRef)) and + (table_entry.prefix in ('$','${')) and + (ExtractCatName(table_entry.descr_str) == 'atom'))): + syntax_err = True + + if syntax_err: + raise InputError('----------------------------------------------------\n'+ + ' Syntax error near '+ + ErrorLeader(table[i][0].srcloc.infile, + table[i][0].srcloc.lineno)+'\n' + ' Incorrect "Data Bonds" syntax.\n'+ + 'Each line of the \"Data Bonds\" section should have this format:\n\n' + ' $bond:id @bond:type $atom:id1 $atom:id2\n'+ + '----------------------------------------------------\n'+ + g_no_check_msg) + + + elif filename == 'Data Angles': + table = TableFromTemplate(command.tmpl_list, + [[' ', '\t', '\r'], '\n'], + [True, False]) + for i in range(0, len(table)): + syntax_err = False + assert(hasattr(table[i], '__len__')) + if len(table[i]) > 0: + if ((len(table[i]) > 1) and + isinstance(table[i][0], TextBlock) and + (len(table[i][0].text) > 0) and + (table[i][0].text == '#')): + pass + else: + if len(table[i]) < 5: + syntax_err = True + table_entry = table[i][0] + if (not ((isinstance(table_entry, VarRef)) and + (table_entry.prefix in ('$','${')) and + (ExtractCatName(table_entry.descr_str) == 'angle'))): + syntax_err = True + if len(table[i]) > 1: + table_entry = table[i][1] + if (not ((isinstance(table_entry, VarRef)) and + (table_entry.prefix in ('@', '@{')) and + (table_entry.nptr.cat_name == 'angle') and + (table_entry.nptr.cat_node == root_node))): + syntax_err = True + if len(table[i]) > 2: + table_entry = table[i][2] + if (not ((isinstance(table_entry, VarRef)) and + (table_entry.prefix in ('$','${')) and + (ExtractCatName(table_entry.descr_str) == 'atom'))): + syntax_err = True + if len(table[i]) > 3: + table_entry = table[i][3] + if (not ((isinstance(table_entry, VarRef)) and + (table_entry.prefix in ('$','${')) and + (ExtractCatName(table_entry.descr_str) == 'atom'))): + syntax_err = True + if len(table[i]) > 4: + table_entry = table[i][4] + if (not ((isinstance(table_entry, VarRef)) and + (table_entry.prefix in ('$','${')) and + (ExtractCatName(table_entry.descr_str) == 'atom'))): + syntax_err = True + + if syntax_err: + raise InputError('----------------------------------------------------\n'+ + ' Syntax error near '+ + ErrorLeader(table[i][0].srcloc.infile, + table[i][0].srcloc.lineno)+'\n' + ' Incorrect "Data Angles" syntax.\n'+ + 'Each line of the \"Data Angles\" section should have this format:\n\n' + ' $angle:id @angle:type $atom:id1 $atom:id2 $atom:id3\n'+ + '----------------------------------------------------\n\n'+ + g_no_check_msg) + + elif filename == 'Data Dihedrals': + table = TableFromTemplate(command.tmpl_list, + [[' ', '\t', '\r'], '\n'], + [True, False]) + for i in range(0, len(table)): + syntax_err = False + assert(hasattr(table[i], '__len__')) + if len(table[i]) > 0: + if ((len(table[i]) > 1) and + isinstance(table[i][0], TextBlock) and + (len(table[i][0].text) > 0) and + (table[i][0].text == '#')): + pass + else: + if len(table[i]) < 6: + syntax_err = True + table_entry = table[i][0] + if (not ((isinstance(table_entry, VarRef)) and + (table_entry.prefix in ('$','${')) and + (ExtractCatName(table_entry.descr_str) == 'dihedral'))): + syntax_err = True + if len(table[i]) > 1: + table_entry = table[i][1] + if (not ((isinstance(table_entry, VarRef)) and + (table_entry.prefix in ('@', '@{')) and + (table_entry.nptr.cat_name == 'dihedral') and + (table_entry.nptr.cat_node == root_node))): + syntax_err = True + if len(table[i]) > 2: + table_entry = table[i][2] + if (not ((isinstance(table_entry, VarRef)) and + (table_entry.prefix in ('$','${')) and + (ExtractCatName(table_entry.descr_str) == 'atom'))): + syntax_err = True + if len(table[i]) > 3: + table_entry = table[i][3] + if (not ((isinstance(table_entry, VarRef)) and + (table_entry.prefix in ('$','${')) and + (ExtractCatName(table_entry.descr_str) == 'atom'))): + syntax_err = True + if len(table[i]) > 4: + table_entry = table[i][4] + if (not ((isinstance(table_entry, VarRef)) and + (table_entry.prefix in ('$','${')) and + (ExtractCatName(table_entry.descr_str) == 'atom'))): + syntax_err = True + if len(table[i]) > 5: + table_entry = table[i][5] + if (not ((isinstance(table_entry, VarRef)) and + (table_entry.prefix in ('$','${')) and + (ExtractCatName(table_entry.descr_str) == 'atom'))): + syntax_err = True + + if syntax_err: + raise InputError('----------------------------------------------------\n'+ + ' Syntax error near '+ + ErrorLeader(table[i][0].srcloc.infile, + table[i][0].srcloc.lineno)+'\n' + ' Incorrect "Data Dihedrals" syntax.\n'+ + 'Each line of the \"Data Dihedrals\" section should have this format:\n\n' + ' $dihedral:id @dihedral:type $atom:id1 $atom:id2 $atom:id3 $atom:id4\n'+ + '----------------------------------------------------\n'+ + g_no_check_msg) + + elif filename == 'Data Impropers': + table = TableFromTemplate(command.tmpl_list, + [[' ', '\t', '\r'], '\n'], + [True, False]) + for i in range(0, len(table)): + syntax_err = False + assert(hasattr(table[i], '__len__')) + if len(table[i]) > 0: + if ((len(table[i]) > 1) and + isinstance(table[i][0], TextBlock) and + (len(table[i][0].text) > 0) and + (table[i][0].text == '#')): + pass + else: + if len(table[i]) < 6: + syntax_err = True + table_entry = table[i][0] + if (not ((isinstance(table_entry, VarRef)) and + (table_entry.prefix in ('$','${')) and + (ExtractCatName(table_entry.descr_str) == 'improper'))): + syntax_err = True + if len(table[i]) > 1: + table_entry = table[i][1] + if (not ((isinstance(table_entry, VarRef)) and + (table_entry.prefix in ('@', '@{')) and + (table_entry.nptr.cat_name == 'improper') and + (table_entry.nptr.cat_node == root_node))): + syntax_err = True + if len(table[i]) > 2: + table_entry = table[i][2] + if (not ((isinstance(table_entry, VarRef)) and + (table_entry.prefix in ('$','${')) and + (ExtractCatName(table_entry.descr_str) == 'atom'))): + syntax_err = True + if len(table[i]) > 3: + table_entry = table[i][3] + if (not ((isinstance(table_entry, VarRef)) and + (table_entry.prefix in ('$','${')) and + (ExtractCatName(table_entry.descr_str) == 'atom'))): + syntax_err = True + if len(table[i]) > 4: + table_entry = table[i][4] + if (not ((isinstance(table_entry, VarRef)) and + (table_entry.prefix in ('$','${')) and + (ExtractCatName(table_entry.descr_str) == 'atom'))): + syntax_err = True + if len(table[i]) > 5: + table_entry = table[i][5] + if (not ((isinstance(table_entry, VarRef)) and + (table_entry.prefix in ('$','${')) and + (ExtractCatName(table_entry.descr_str) == 'atom'))): + syntax_err = True + + if syntax_err: + raise InputError('----------------------------------------------------\n'+ + ' Syntax error near '+ + ErrorLeader(table[i][0].srcloc.infile, + table[i][0].srcloc.lineno)+'\n' + ' Incorrect "Data Impropers" syntax.\n'+ + 'Each line of the \"Data Impropers\" section should have this format:\n\n' + ' $improper:id @improper:type $atom:id1 $atom:id2 $atom:id3 $atom:id4\n'+ + '----------------------------------------------------\n'+ + g_no_check_msg) + + + + # A simple wildcard is the character "*" on its own. + # These are okay. + # A "compound" wildcard expression is something like + # 5*7 or + # 5* or + # *7 or + # @{bond:A}*@bond:B or + # @{bond:A}* or + # *@bond:B + # LAMMPS allows this but in moltemplate this causes + # unintended side-effects. Check for these now. + if filename in set(['Data Bond Coeffs', + 'Data Angle Coeffs', + 'Data Dihedral Coeffs', + 'Data Improper Coeffs', + 'Data Pair Coeffs']): + table = TableFromTemplate(command.tmpl_list, + [[' ','\t','\r'], '\n'], + [True, False]) + for i in range(0, len(table)): + assert(hasattr(table[i], '__len__')) + if len(table[i]) > 0: + if (isinstance(table[i][0], TextBlock) and + table[i][0].text == '*'): + if filename == 'Data Bond Coeffs': + data_bond_coeffs_defined.add('*') + elif filename == 'Data Angle Coeffs': + data_angle_coeffs_defined.add('*') + elif filename == 'Data Dihedral Coeffs': + data_dihedral_coeffs_defined.add('*') + elif filename == 'Data Improper Coeffs': + data_improper_coeffs_defined.add('*') + elif filename == 'Data Pair Coeffs': + data_pair_coeffs_defined.add(('*','*')) + else: + compound_wildcard = False + if (len(table[i]) > 1): + if hasattr(table[i][0],'__len__'): + ltmpl = table[i][0] + else: + ltmpl = [table[i][0]] + for entry in ltmpl: + if (isinstance(entry, TextBlock) and + ('*' in entry.text)): + compound_wildcard = True + elif (isinstance(entry, VarRef) and + ('*' in entry.descr_str)): + compound_wildcard = True + if compound_wildcard: + raise InputError('--- Paranoid checking: ---\n' + ' Possible error near '+ + ErrorLeader(entry.srcloc.infile, + entry.srcloc.lineno)+'\n' + 'The wildcard symbol, \"*\", is not recommended within \"'+filename+'\".\n' + 'It is safer to specify the parameters for each type explicitly.\n' + 'You CAN use \"*\" wildcards, but you must disable syntax checking. To get\n' + 'past this error message, run moltemplate.sh using the \"-nocheck\" option.\n') + + + if filename == 'Data Bond Coeffs': + # Commenting the next line out. We did this already: + #table = TableFromTemplate(command.tmpl_list, + # [[' ','\t','\r'], '\n'], + # [True, False]) + for i in range(0, len(table)): + if len(table[i]) == 0: + pass + elif ((len(table[i]) > 1) and + isinstance(table[i][0], TextBlock) and + (table[i][0].text == '*')): + pass # we dealt with this case earlier + elif ((len(table[i]) > 1) and + isinstance(table[i][0], TextBlock) and + (len(table[i][0].text) > 0) and + (table[i][0].text == '#')): + pass #Ignore comment lines (postprocessing removes them) + elif (not (isinstance(table[i][0], VarRef) and + (table[i][0].prefix in ('@', '@{')) and + (table[i][0].nptr.cat_name == 'bond') and + (table[i][0].nptr.cat_node == root_node))): + raise InputError('----------------------------------------------------\n'+ + ' Syntax error near '+ + ErrorLeader(table[i][0].srcloc.infile, + table[i][0].srcloc.lineno)+'\n' + ' Incorrect "Data Bond Coeffs" syntax.\n' + ' Each line of the \"Data Bond Coeffs\" section\n' + ' should have the following syntax:\n\n'+ + ' @bond:type list-of-parameters...\n'+ + '----------------------------------------------------\n'+ + g_no_check_msg) + else: + data_bond_coeffs_defined.add(table[i][0].binding) + + + elif filename == 'Data Angle Coeffs': + # Commenting the next line out. We did this already: + #table = TableFromTemplate(command.tmpl_list, + # [[' ','\t','\r'], '\n'], + # [True, False]) + for i in range(0, len(table)): + if len(table[i]) == 0: + pass + elif ((len(table[i]) > 1) and + isinstance(table[i][0], TextBlock) and + (table[i][0].text == '*')): + pass # we dealt with this case earlier + elif ((len(table[i]) > 1) and + isinstance(table[i][0], TextBlock) and + (len(table[i][0].text) > 0) and + (table[i][0].text == '#')): + pass #Ignore comment lines (postprocessing removes them) + elif (not (isinstance(table[i][0], VarRef) and + (table[i][0].prefix in ('@', '@{')) and + (table[i][0].nptr.cat_name == 'angle') and + (table[i][0].nptr.cat_node == root_node))): + raise InputError('----------------------------------------------------\n'+ + ' Syntax error near '+ + ErrorLeader(table[i][0].srcloc.infile, + table[i][0].srcloc.lineno)+'\n' + ' Incorrect "Data Angle Coeffs" syntax.\n' + ' Each line of the \"Data Angle Coeffs\" section\n' + ' should have the following syntax:\n\n'+ + ' @angle:type list-of-parameters...\n'+ + '----------------------------------------------------\n'+ + g_no_check_msg) + else: + data_angle_coeffs_defined.add(table[i][0].binding) + + + elif filename == 'Data Dihedral Coeffs': + # Commenting the next line out. We did this already: + #table = TableFromTemplate(command.tmpl_list, + # [[' ','\t','\r'], '\n'], + # [True, False]) + for i in range(0, len(table)): + if len(table[i]) == 0: + pass + elif ((len(table[i]) > 1) and + isinstance(table[i][0], TextBlock) and + (table[i][0].text == '*')): + pass # we dealt with this case earlier + elif ((len(table[i]) > 1) and + isinstance(table[i][0], TextBlock) and + (len(table[i][0].text) > 0) and + (table[i][0].text == '#')): + pass #Ignore comment lines (postprocessing removes them) + elif (not (isinstance(table[i][0], VarRef) and + (table[i][0].prefix in ('@', '@{')) and + (table[i][0].nptr.cat_name == 'dihedral') and + (table[i][0].nptr.cat_node == root_node))): + raise InputError('----------------------------------------------------\n'+ + ' Syntax error near '+ + ErrorLeader(table[i][0].srcloc.infile, + table[i][0].srcloc.lineno)+'\n' + ' Incorrect "Data Dihedral Coeffs" syntax.\n' + ' Each line of the \"Data Dihedral Coeffs\" section\n' + ' should have the following syntax:\n\n'+ + ' @dihedral:type list-of-parameters...\n'+ + '----------------------------------------------------\n'+ + g_no_check_msg) + else: + data_dihedral_coeffs_defined.add(table[i][0].binding) + + + elif filename == 'Data Improper Coeffs': + # Commenting the next line out. We did this already: + #table = TableFromTemplate(command.tmpl_list, + # [[' ','\t','\r'], '\n'], + # [True, False]) + for i in range(0, len(table)): + if len(table[i]) == 0: + pass + elif ((len(table[i]) > 1) and + isinstance(table[i][0], TextBlock) and + (table[i][0].text == '*')): + pass # we dealt with this case earlier + elif ((len(table[i]) > 1) and + isinstance(table[i][0], TextBlock) and + (len(table[i][0].text) > 0) and + (table[i][0].text == '#')): + pass #Ignore comment lines (postprocessing removes them) + elif (not (isinstance(table[i][0], VarRef) and + (table[i][0].prefix in ('@', '@{')) and + (table[i][0].nptr.cat_name == 'improper') and + (table[i][0].nptr.cat_node == root_node))): + raise InputError('----------------------------------------------------\n'+ + ' Syntax error near '+ + ErrorLeader(table[i][0].srcloc.infile, + table[i][0].srcloc.lineno)+'\n' + ' Incorrect "Data Improper Coeffs" syntax.\n' + ' Each line of the \"Data Improper Coeffs\" section\n' + ' should have the following syntax:\n\n'+ + ' @improper:type list-of-parameters...\n'+ + '----------------------------------------------------\n'+ + g_no_check_msg) + else: + data_improper_coeffs_defined.add(table[i][0].binding) + + + elif filename == 'Data Pair Coeffs': + # Commenting the next line out. We did this already: + #table = TableFromTemplate(command.tmpl_list, + # [[' ','\t','\r'], '\n'], + # [True, False]) + for i in range(0, len(table)): + if len(table[i]) == 0: + pass + elif ((len(table[i]) > 0) and + isinstance(table[i][0], TextBlock) and + (table[i][0].text == '*')): + pass # we dealt with this case earlier + elif ((len(table[i]) > 0) and + isinstance(table[i][0], TextBlock) and + (len(table[i][0].text) > 0) and + (table[i][0].text == '#')): + pass #Ignore comment lines (postprocessing removes them) + elif (not ((len(table[i]) > 0) and + isinstance(table[i][0], VarRef) and + (table[i][0].prefix in ('@', '@{')) and + (table[i][0].nptr.cat_name == 'atom') and + (table[i][0].nptr.cat_node == root_node))): + raise InputError('----------------------------------------------------\n'+ + ' Syntax error near '+ + ErrorLeader(table[i][0].srcloc.infile, + table[i][0].srcloc.lineno)+'\n' + ' Incorrect "Data Pair Coeffs" syntax.\n' + ' Each line of the \"Data Pair Coeffs\" section\n' + ' should have the following syntax:\n\n'+ + ' @atom:type list-of-parameters...\n'+ + '----------------------------------------------------\n'+ + g_no_check_msg) + else: + data_pair_coeffs_defined.add((table[i][0].binding, + table[i][0].binding)) + + + elif filename == 'Data Angles By Type': + table = TableFromTemplate(command.tmpl_list, + [[' ','\t','\r'], '\n'], + [True, False]) + for i in range(0, len(table)): + if len(table[i]) == 0: + pass + elif ((len(table[i]) > 1) and + isinstance(table[i][0], TextBlock) and + (len(table[i][0].text) > 0) and + (table[i][0].text == '#')): + pass #Ignore comment lines (postprocessing removes them) + elif (not ((len(table[i]) >= 4) and + isinstance(table[i][0], VarRef) and + (table[i][0].prefix in ('@', '@{')) and + (table[i][0].nptr.cat_name == 'angle') and + (table[i][0].nptr.cat_node == root_node))): + raise InputError('----------------------------------------------------\n'+ + ' Syntax error near '+ + ErrorLeader(table[i][0].srcloc.infile, + table[i][0].srcloc.lineno)+'\n' + ' Incorrect \"Data Angles By Type\" syntax.\n' + ' Each line of the \"Data Angles By Type\" section should begin with an\n' + ' @angle:type variable followed by 3 atom types (and 2 optional bond types).\n'+ + '----------------------------------------------------\n'+ + g_no_check_msg) + + + elif filename == 'Data Dihedrals By Type': + table = TableFromTemplate(command.tmpl_list, + [[' ','\t','\r'], '\n'], + [True, False]) + for i in range(0, len(table)): + if len(table[i]) == 0: + pass + elif ((len(table[i]) > 1) and + isinstance(table[i][0], TextBlock) and + (len(table[i][0].text) > 0) and + (table[i][0].text == '#')): + pass #Ignore comment lines (postprocessing removes them) + elif (not ((len(table[i]) >= 5) and + isinstance(table[i][0], VarRef) and + (table[i][0].prefix in ('@', '@{')) and + (table[i][0].nptr.cat_name == 'dihedral') and + (table[i][0].nptr.cat_node == root_node))): + raise InputError('----------------------------------------------------\n'+ + ' Syntax error near '+ + ErrorLeader(table[i][0].srcloc.infile, + table[i][0].srcloc.lineno)+'\n' + ' Incorrect \"Data Dihedrals By Type\" syntax.\n' + ' Each line of the \"Data Dihedrals By Type\" section should begin with a\n\n' + ' @dihedral:type variable followed by 4 atom types (and 3 optional bond types).\n'+ + '----------------------------------------------------\n'+ + g_no_check_msg) + + + elif filename == 'Data Impropers By Type': + table = TableFromTemplate(command.tmpl_list, + [[' ','\t','\r'], '\n'], + [True, False]) + for i in range(0, len(table)): + if len(table[i]) == 0: + pass + elif ((len(table[i]) > 1) and + isinstance(table[i][0], TextBlock) and + (len(table[i][0].text) > 0) and + (table[i][0].text == '#')): + pass #Ignore comment lines (postprocessing removes them) + elif (not ((len(table[i]) >= 5) and + isinstance(table[i][0], VarRef) and + (table[i][0].prefix in ('@', '@{')) and + (table[i][0].nptr.cat_name == 'improper') and + (table[i][0].nptr.cat_node == root_node))): + raise InputError('----------------------------------------------------\n'+ + ' Syntax error near '+ + ErrorLeader(table[i][0].srcloc.infile, + table[i][0].srcloc.lineno)+'\n' + ' Incorrect \"Data Impropers By Type\" syntax.\n' + ' Each line of the \"Data Impropers By Type\" section should begin with an\n\n' + ' @improper:type variable followed by 4 atom types (and 3 optional bond types).\n'+ + '----------------------------------------------------\n'+ + g_no_check_msg) + + + # Recursively invoke AssignVarPtrs() on all (non-leaf) child nodes: + for child in context_node.children: + CheckSyntaxStatic(child, + root_node, + atom_column_names, + data_pair_coeffs_defined, + data_bond_coeffs_defined, + data_angle_coeffs_defined, + data_dihedral_coeffs_defined, + data_improper_coeffs_defined, + in_pair_coeffs_defined, + in_bond_coeffs_defined, + in_angle_coeffs_defined, + in_dihedral_coeffs_defined, + in_improper_coeffs_defined, + search_instance_commands) + + + + + +def CheckInFileSyntax(tmpl_list, + root_node, + pair_coeffs_defined, + bond_coeffs_defined, + angle_coeffs_defined, + dihedral_coeffs_defined, + improper_coeffs_defined): + + table = TableFromTemplate(tmpl_list, + [[' ','\t','\r'], '\n'], + [True, False]) + + for i in range(0, len(table)): + assert(hasattr(table[i], '__len__')) + + if len(table[i]) > 0: + if ((isinstance(table[i][0], TextBlock)) and + (table[i][0].text in set(['bond_coeff', + 'angle_coeff', + 'dihedral_coeff', + 'improper_coeff']))): + if len(table[i]) > 1: # if not deal with error later + if (isinstance(table[i][1], TextBlock) and + table[i][1].text == '*'): + if table[i][0].text == 'bond_coeff': + bond_coeffs_defined.add('*') + elif table[i][0].text == 'angle_coeff': + angle_coeffs_defined.add('*') + elif table[i][0].text == 'dihedral_coeff': + dihedral_coeffs_defined.add('*') + elif table[i][0].text == 'improper_coeff': + improper_coeffs_defined.add('*') + else: + compound_wildcard = False + if (len(table[i]) > 1): + if hasattr(table[i][1], '__len__'): + ltmpl = table[i][1] + else: + ltmpl = [table[i][1]] + for entry in ltmpl: + if (isinstance(entry, TextBlock) and + ('*' in entry.text)): + compound_wildcard = True + elif (isinstance(entry, VarRef) and + ('*' in entry.descr_str)): + compound_wildcard = True + if compound_wildcard: + raise InputError('---- Paranoid checking: ---\n' + ' Possible error near '+ + ErrorLeader(entry.srcloc.infile, + entry.srcloc.lineno)+'\n' + 'The wildcard symbol, \"*\", is not recommended within a \"'+table[i][0].text+'\".\n' + 'command. It is safer to specify the parameters for each bond type explicitly.\n' + 'You CAN use \"*\" wildcards, but you must disable syntax checking. To get\n' + 'past this error message, run moltemplate.sh using the \"-nocheck\" option.\n') + + + + if ((isinstance(table[i][0], TextBlock)) and + ((table[i][0].text.lower() == 'bondcoeff') or + (table[i][0].text.lower() == 'bond_coeff'))): + if table[i][0].text != 'bond_coeff': + raise InputError('----------------------------------------------------\n'+ + ' Spelling error near '+ + ErrorLeader(table[i][0].srcloc.infile, + table[i][0].srcloc.lineno)+'\n' + ' Use \"bond_coeff\", not \"'+table[i][0].text+'\"\n'+ + '----------------------------------------------------\n'+ + g_no_check_msg) + + if ((len(table[i]) > 1) and + isinstance(table[i][1], TextBlock) and + (table[i][1].text == '*')): + pass # we dealt with this case earlier + elif (not ((len(table[i]) > 1) and + (isinstance(table[i][1], VarRef)) and + (table[i][1].prefix in ('@', '@{')) and + (table[i][1].nptr.cat_name == 'bond') and + (table[i][1].nptr.cat_node == root_node))): + raise InputError('----------------------------------------------------\n'+ + ' Syntax error near '+ + ErrorLeader(table[i][0].srcloc.infile, + table[i][0].srcloc.lineno)+'\n' + ' Invalid \"bond_coeff\" command.\n\n'+ + ' Each \"bond_coeff\" command should have the following syntax:\n\n'+ + ' bond_coeff @bond:type [optional style] list-of-parameters...\n'+ + '----------------------------------------------------\n\n'+ + g_no_check_msg) + else: + bond_coeffs_defined.add(table[i][1].binding) + + + if ((isinstance(table[i][0], TextBlock)) and + ((table[i][0].text.lower() == 'anglecoeff') or + (table[i][0].text.lower() == 'angle_coeff'))): + if table[i][0].text != 'angle_coeff': + raise InputError('----------------------------------------------------\n'+ + ' Spelling error near '+ + ErrorLeader(table[i][0].srcloc.infile, + table[i][0].srcloc.lineno)+'\n' + ' Use \"angle_coeff\", not \"'+table[i][0].text+'\"\n'+ + '----------------------------------------------------\n'+ + g_no_check_msg) + + if ((len(table[i]) > 1) and + isinstance(table[i][1], TextBlock) and + (table[i][1].text == '*')): + pass # we dealt with this case earlier + elif (not ((len(table[i]) > 1) and + (isinstance(table[i][1], VarRef)) and + (table[i][1].prefix in ('@', '@{')) and + (table[i][1].nptr.cat_name == 'angle') and + (table[i][1].nptr.cat_node == root_node))): + raise InputError('----------------------------------------------------\n'+ + ' Syntax error near '+ + ErrorLeader(table[i][0].srcloc.infile, + table[i][0].srcloc.lineno)+'\n' + ' Invalid \"angle_coeff\" command.\n\n'+ + ' Each \"angle_coeff\" command should have the following syntax:\n\n'+ + ' angle_coeff @angle:type [optional style] list-of-parameters...\n'+ + '----------------------------------------------------\n\n'+ + g_no_check_msg) + else: + angle_coeffs_defined.add(table[i][1].binding) + + + if ((isinstance(table[i][0], TextBlock)) and + ((table[i][0].text.lower() == 'dihedralcoeff') or + (table[i][0].text.lower() == 'dihedral_coeff'))): + if table[i][0].text != 'dihedral_coeff': + raise InputError('----------------------------------------------------\n'+ + ' Spelling error near '+ + ErrorLeader(table[i][0].srcloc.infile, + table[i][0].srcloc.lineno)+'\n' + ' Use \"dihedral_coeff\", not \"'+table[i][0].text+'\"\n'+ + '----------------------------------------------------\n'+ + g_no_check_msg) + + if ((len(table[i]) > 1) and + isinstance(table[i][1], TextBlock) and + (table[i][1].text == '*')): + pass # we dealt with this case earlier + elif (not ((len(table[i]) > 1) and + (isinstance(table[i][1], VarRef)) and + (table[i][1].prefix in ('@', '@{')) and + (table[i][1].nptr.cat_name == 'dihedral') and + (table[i][1].nptr.cat_node == root_node))): + raise InputError('----------------------------------------------------\n'+ + ' Syntax error near '+ + ErrorLeader(table[i][0].srcloc.infile, + table[i][0].srcloc.lineno)+'\n' + ' Invalid \"dihedral_coeff\" command.\n\n'+ + ' Each \"dihedral_coeff\" command should have the following syntax:\n\n'+ + ' dihedral_coeff @dihedral:type [optional style] list-of-parameters...\n'+ + '----------------------------------------------------\n\n'+ + g_no_check_msg) + else: + dihedral_coeffs_defined.add(table[i][1].binding) + + + if ((isinstance(table[i][0], TextBlock)) and + ((table[i][0].text.lower() == 'impropercoeff') or + (table[i][0].text.lower() == 'improper_coeff'))): + if table[i][0].text != 'improper_coeff': + raise InputError('----------------------------------------------------\n'+ + ' Spelling error near '+ + ErrorLeader(table[i][0].srcloc.infile, + table[i][0].srcloc.lineno)+'\n' + ' Use \"improper_coeff\", not \"'+table[i][0].text+'\"\n'+ + '----------------------------------------------------\n'+ + g_no_check_msg) + + if ((len(table[i]) > 1) and + isinstance(table[i][1], TextBlock) and + (table[i][1].text == '*')): + pass # we dealt with this case earlier + elif (not ((len(table[i]) > 1) and + (isinstance(table[i][1], VarRef)) and + (table[i][1].prefix in ('@', '@{')) and + (table[i][1].nptr.cat_name == 'improper') and + (table[i][1].nptr.cat_node == root_node))): + raise InputError('----------------------------------------------------\n'+ + ' Syntax error near '+ + ErrorLeader(table[i][0].srcloc.infile, + table[i][0].srcloc.lineno)+'\n' + ' Invalid \"improper_coeff\" command.\n\n'+ + ' Each \"improper_coeff\" command should have the following syntax:\n\n'+ + ' improper_coeff @improper:type [optional style] list-of-parameters...\n'+ + '----------------------------------------------------\n\n'+ + g_no_check_msg) + else: + improper_coeffs_defined.add(table[i][1].binding) + + + elif ((isinstance(table[i][0], TextBlock)) and + ((table[i][0].text.lower() == 'paircoeff') or + (table[i][0].text.lower() == 'pair_coeff'))): + if table[i][0].text != 'pair_coeff': + raise InputError('----------------------------------------------------\n'+ + ' Spelling error near '+ + ErrorLeader(table[i][0].srcloc.infile, + table[i][0].srcloc.lineno)+'\n' + ' Use \"pair_coeff\", not \"'+table[i][0].text+'\"\n'+ + '----------------------------------------------------\n'+ + g_no_check_msg) + + if len(table[i]) > 2: # if not, deal with error later + if ((isinstance(table[i][1], TextBlock) and + (table[i][1].text == '*')) and + (isinstance(table[i][1], TextBlock) and + (table[i][1].text == '*'))): + pair_coeffs_defined.add(('*','*')) + else: + compound_wildcard = False + assert(len(table[i]) > 1) + + if hasattr(table[i][1], '__len__'): + ltmpl = table[i][1] + else: + ltmpl = [table[i][1]] + for entry in ltmpl: + if (isinstance(entry, TextBlock) and + ('*' in entry.text)): + compound_wildcard = True + elif (isinstance(entry, VarRef) and + ('*' in entry.descr_str)): + compound_wildcard = True + + if hasattr(table[i][2], '__len__'): + ltmpl = table[i][2] + else: + ltmpl = [table[i][2]] + for entry in ltmpl: + if (isinstance(entry, TextBlock) and + ('*' in entry.text)): + compound_wildcard = True + elif (isinstance(entry, VarRef) and + ('*' in entry.descr_str)): + compound_wildcard = True + + if compound_wildcard: + raise InputError('---- Paranoid checking: ---\n' + ' Possible error near '+ + ErrorLeader(entry.srcloc.infile, + entry.srcloc.lineno)+'\n' + 'The wildcard symbol, \"*\", is not recommended within a \"pair_coeff\" command.\n' + 'It is safer to specify the parameters for each bond type explicitly.\n' + 'You CAN use \"*\" wildcards, but you must disable syntax checking. To get\n' + 'past this error message, run moltemplate.sh using the \"-nocheck\" option.\n') + + + if ((len(table[i]) > 2) and + (isinstance(table[i][1], TextBlock) and + (table[i][1].text == '*')) and + (isinstance(table[i][2], TextBlock) and + (table[i][2].text == '*'))): + pass # we dealt with this case earlier + + elif (not ((len(table[i]) > 2) and + (isinstance(table[i][1], VarRef)) and + (table[i][1].prefix in ('@', '@{')) and + (table[i][1].nptr.cat_name == 'atom') and + (table[i][1].nptr.cat_node == root_node) and + (isinstance(table[i][2], VarRef)) and + (table[i][2].prefix in ('@', '@{')) and + (table[i][2].nptr.cat_name == 'atom') and + (table[i][2].nptr.cat_node == root_node))): + raise InputError('----------------------------------------------------\n'+ + ' Syntax error near '+ + ErrorLeader(table[i][0].srcloc.infile, + table[i][0].srcloc.lineno)+'\n' + ' Invalid \"pair_coeff\" command.\n\n'+ + ' Each \"pair_coeff\" command should have the following syntax:\n\n'+ + ' pair_coeff @atom:typeI @atom:typeJ [optional style] list-of-parameters...\n'+ + '----------------------------------------------------\n\n'+ + g_no_check_msg) + else: + pair_coeffs_defined.add((table[i][1].binding, table[i][2].binding)) + + + + def LttreeCheckParseArgs(argv, settings): - LttreeParseArgs(sys.argv, settings) + LttreeParseArgs(argv, settings) if __name__ == "__main__": # Instantiate the lexer we will be using. @@ -799,11 +1799,13 @@ def LttreeCheckParseArgs(argv, settings): raise InputError('Error: This program requires at least one argument\n' ' the name of a file containing ttree template commands\n') elif len(argv) == 2: + settings.infile = argv[1] try: - settings.lex = TemplateLexer(open(argv[1], 'r'), argv[1]) # Parse text from file + settings.lex = TemplateLexer(open(settings.infile, 'r'), + settings.infile) # Parse text from file except IOError: sys.stderr.write('Error: unable to open file\n' - ' \"'+argv[1]+'\"\n' + ' \"'+settings.infile+'\"\n' ' for reading.\n') sys.exit(1) del(argv[1:2]) @@ -831,8 +1833,8 @@ def LttreeCheckParseArgs(argv, settings): if __name__ == "__main__": g_program_name = 'lttree_check.py' - g_version_str = '0.23' - g_date_str = '2012-7-31' + g_version_str = '0.72' + g_date_str = '2012-12-15' sys.stderr.write(g_program_name+' v'+g_version_str+' '+g_date_str+'\n') try: @@ -843,17 +1845,255 @@ if __name__ == "__main__": settings = LttreeSettings() LttreeCheckParseArgs(sys.argv, settings) - #Invoke syntax checker: - CheckSyntax(settings.lex); + # Invoke syntax checker pass: + # This first check only checks for very simple mistakes + # (mispelled versions of standard files or variable names). + CheckSyntaxCheap(settings.lex) + settings.lex.instream.close() + # Now read the file again. + # This time parse it using StaticObj.ReadTemplate(). + # (This will allow us to check for deeper problems.) + del settings.lex + settings.lex = TemplateLexer(open(settings.infile, 'r'), + settings.infile) + static_tree_root = StaticObj('', None) # The root of the static tree + # has name '' (equivalent to '/') + sys.stderr.write(g_program_name+': parsing the class definitions...') + static_tree_root.Parse(settings.lex) - # If no errors so far, then print an encouraging message. - #sys.stdout.write(g_program_name+': No obvious lttree syntax errors\nwere detected in file \"'+lex.infile+'\".\n') + sys.stderr.write(' done\n'+g_program_name+': looking up classes...') + static_tree_root.LookupStaticRefs() + sys.stderr.write(' done\n'+g_program_name+': looking up @variables...') + AssignVarPtrs(static_tree_root, + search_instance_commands=False) + AssignVarPtrs(static_tree_root, + search_instance_commands=True) + sys.stderr.write(' done\n') + #sys.stderr.write(' done\n\nclass_def_tree = ' + str(static_tree_root) + '\n\n') + + data_pair_coeffs_defined = set([]) + data_bond_coeffs_defined = set([]) + data_angle_coeffs_defined = set([]) + data_dihedral_coeffs_defined = set([]) + data_improper_coeffs_defined = set([]) + in_pair_coeffs_defined = set([]) + in_bond_coeffs_defined = set([]) + in_angle_coeffs_defined = set([]) + in_dihedral_coeffs_defined = set([]) + in_improper_coeffs_defined = set([]) + + # Now check the static syntax + # Here we check the contents of the the "write_once()" commands: + CheckSyntaxStatic(static_tree_root, + static_tree_root, + settings.column_names, + data_pair_coeffs_defined, + data_bond_coeffs_defined, + data_angle_coeffs_defined, + data_dihedral_coeffs_defined, + data_improper_coeffs_defined, + in_pair_coeffs_defined, + in_bond_coeffs_defined, + in_angle_coeffs_defined, + in_dihedral_coeffs_defined, + in_improper_coeffs_defined, + search_instance_commands=False) + # Here we check the contents of the the "write()" commands: + CheckSyntaxStatic(static_tree_root, + static_tree_root, + settings.column_names, + data_pair_coeffs_defined, + data_bond_coeffs_defined, + data_angle_coeffs_defined, + data_dihedral_coeffs_defined, + data_improper_coeffs_defined, + in_pair_coeffs_defined, + in_bond_coeffs_defined, + in_angle_coeffs_defined, + in_dihedral_coeffs_defined, + in_improper_coeffs_defined, + search_instance_commands=True) + + + if 'bond' in static_tree_root.categories: + + if ((len(data_bond_coeffs_defined) > 0) and + (len(in_bond_coeffs_defined) > 0)): + raise InputError('---------------------------------------------------------------------\n'+ + ' Syntax error: You can EITHER use \"bond_coeff\" commands\n'+ + ' OR you can have a \"Data Bond Coeffs\" section.\n'+ + ' LAMMPS will not allow both (...as of late 2012)\n'+ + '---------------------------------------------------------------------\n'+ + g_no_check_msg) + #' If this is no longer true, to override this error message you must\n'+ + #' disable error checking by running moltemplate with the -nocheck option.\n') + if len(data_bond_coeffs_defined) > 0: + bond_coeffs_defined = data_bond_coeffs_defined + else: + bond_coeffs_defined = in_bond_coeffs_defined + + bond_bindings = static_tree_root.categories['bond'].bindings + for nd,bond_binding in bond_bindings.items(): + if not nd.IsDeleted(): + if ((not (bond_binding in bond_coeffs_defined)) and + (not HasWildCard(bond_binding.full_name)) and + (not ('*' in bond_coeffs_defined))): + raise InputError('---------------------------------------------------------------------\n'+ + ' Syntax error: Missing bond coeff.\n\n'+ + ' No coeffs for the \"'+bond_binding.full_name+'\" bond type have been\n'+ + 'defined, but a reference to that bond type was discovered\n'+ + 'near '+ErrorLeader(bond_binding.refs[0].srcloc.infile, + bond_binding.refs[0].srcloc.lineno)+'. Check this file and also check\n' + 'your \"bond_coeff\" commands or your \"Data Bond Coeffs" section.\n' + '---------------------------------------------------------------------\n'+ + g_no_check_msg) + + + + if 'angle' in static_tree_root.categories: + + if ((len(data_angle_coeffs_defined) > 0) and + (len(in_angle_coeffs_defined) > 0)): + raise InputError('---------------------------------------------------------------------\n'+ + ' Syntax error: You can EITHER use \"angle_coeff\" commands\n'+ + ' OR you can have a \"Data Angle Coeffs\" section.\n'+ + ' LAMMPS will not allow both (...as of late 2012)\n'+ + '---------------------------------------------------------------------\n'+ + g_no_check_msg) + #' If this is no longer true, to override this error message you must\n'+ + #' disable error checking by running moltemplate with the -nocheck option.\n') + if len(data_angle_coeffs_defined) > 0: + angle_coeffs_defined = data_angle_coeffs_defined + else: + angle_coeffs_defined = in_angle_coeffs_defined + + angle_bindings = static_tree_root.categories['angle'].bindings + for nd,angle_binding in angle_bindings.items(): + if not nd.IsDeleted(): + if ((not (angle_binding in angle_coeffs_defined)) and + #(not HasWildCard(angle_binding.full_name)) and + (not ('*' in angle_coeffs_defined))): + raise InputError('---------------------------------------------------------------------\n'+ + ' Syntax error: Missing angle coeff.\n\n'+ + ' No coeffs for the \"'+angle_binding.full_name+'\" angle type have been\n'+ + 'defined, but a reference to that angle type was discovered\n'+ + 'near '+ErrorLeader(angle_binding.refs[0].srcloc.infile, + angle_binding.refs[0].srcloc.lineno)+'. Check this file and\n' + 'also check your \"angle_coeff\" commands or your \"Data Angle Coeffs" section.\n'+ + '---------------------------------------------------------------------\n'+ + g_no_check_msg) + + + + if 'dihedral' in static_tree_root.categories: + + if ((len(data_dihedral_coeffs_defined) > 0) and + (len(in_dihedral_coeffs_defined) > 0)): + raise InputError('---------------------------------------------------------------------\n'+ + ' Syntax error: You can EITHER use \"dihedral_coeff\" commands\n'+ + ' OR you can have a \"Data Dihedral Coeffs\" section.\n'+ + ' LAMMPS will not allow both (...as of late 2012)\n'+ + '---------------------------------------------------------------------\n'+ + g_no_check_msg) + #' If this is no longer true, to override this error message you must\n'+ + #' disable error checking by running moltemplate with the -nocheck option.\n') + if len(data_dihedral_coeffs_defined) > 0: + dihedral_coeffs_defined = data_dihedral_coeffs_defined + else: + dihedral_coeffs_defined = in_dihedral_coeffs_defined + + dihedral_bindings = static_tree_root.categories['dihedral'].bindings + for nd,dihedral_binding in dihedral_bindings.items(): + if not nd.IsDeleted(): + if ((not (dihedral_binding in dihedral_coeffs_defined)) and + #(not HasWildCard(dihedral_binding.full_name)) and + (not ('*' in dihedral_coeffs_defined))): + raise InputError('---------------------------------------------------------------------\n'+ + ' Syntax error: Missing dihedral coeff.\n\n'+ + ' No coeffs for the \"'+dihedral_binding.full_name+'\" dihedral type have been\n'+ + 'defined, but a reference to that dihedral type was discovered\n'+ + 'near '+ErrorLeader(dihedral_binding.refs[0].srcloc.infile, + dihedral_binding.refs[0].srcloc.lineno)+'. Check this file and\n' + 'also check your \"dihedral_coeff\" commands or your \"Data Dihedral Coeffs" section.\n'+ + '---------------------------------------------------------------------\n'+ + g_no_check_msg) + + + if 'improper' in static_tree_root.categories: + + if ((len(data_improper_coeffs_defined) > 0) and + (len(in_improper_coeffs_defined) > 0)): + raise InputError('---------------------------------------------------------------------\n'+ + ' Syntax error: You can EITHER use \"improper_coeff\" commands\n'+ + ' OR you can have a \"Data Improper Coeffs\" section.\n'+ + ' LAMMPS will not allow both (...as of late 2012)\n'+ + '---------------------------------------------------------------------\n'+ + g_no_check_msg) + #' If this is no longer true, to override this error message you must\n'+ + #' disable error checking by running moltemplate with the -nocheck option.\n') + if len(data_improper_coeffs_defined) > 0: + improper_coeffs_defined = data_improper_coeffs_defined + else: + improper_coeffs_defined = in_improper_coeffs_defined + + improper_bindings = static_tree_root.categories['improper'].bindings + for nd,improper_binding in improper_bindings.items(): + if not nd.IsDeleted(): + if ((not (improper_binding in improper_coeffs_defined)) and + #(not HasWildCard(improper_binding.full_name)) and + (not ('*' in improper_coeffs_defined))): + raise InputError('---------------------------------------------------------------------\n'+ + ' Syntax error: Missing improper coeff.\n\n'+ + ' No coeffs for the \"'+improper_binding.full_name+'\" improper type have been\n'+ + 'defined, but a reference to that improper type was discovered\n'+ + 'near '+ErrorLeader(improper_binding.refs[0].srcloc.infile, + improper_binding.refs[0].srcloc.lineno)+'. Check this file and\n' + 'also check your \"improper_coeff\" commands or your \"Data Improper Coeffs" section.\n'+ + '---------------------------------------------------------------------\n'+ + g_no_check_msg) + + + if 'atom' in static_tree_root.categories: + + if ((len(data_pair_coeffs_defined) > 0) and + (len(in_pair_coeffs_defined) > 0)): + raise InputError('---------------------------------------------------------------------\n'+ + ' Syntax error: You can EITHER use \"pair_coeff\" commands\n'+ + ' OR you can have a \"Data Pair Coeffs\" section.\n'+ + ' LAMMPS will not allow both (...as of late 2012)\n'+ + '---------------------------------------------------------------------\n'+ + g_no_check_msg) + #' If this is no longer true, to override this error message you must\n'+ + #' disable error checking by running moltemplate with the -nocheck option.\n') + + if len(data_pair_coeffs_defined) > 0: + pair_coeffs_defined = data_pair_coeffs_defined + else: + pair_coeffs_defined = in_pair_coeffs_defined + + atom_bindings = static_tree_root.categories['atom'].bindings + for nd,atom_binding in atom_bindings.items(): + if not nd.IsDeleted(): + if ((not ((atom_binding,atom_binding) + in + pair_coeffs_defined)) and + (not HasWildCard(atom_binding.full_name)) and + (not (('*','*') in pair_coeffs_defined))): + raise InputError('---------------------------------------------------------------------\n'+ + ' Syntax error: Missing pair coeff.\n\n'+ + ' No pair coeffs for the \"'+atom_binding.full_name+'\" atom type have been\n'+ + 'defined, but a reference to that atom type was discovered\n'+ + 'near '+ErrorLeader(atom_binding.refs[0].srcloc.infile, + atom_binding.refs[0].srcloc.lineno)+'. Check this file and\n' + 'also check your \"pair_coeff\" commands or your \"Data Pair Coeffs" section.\n\n'+ + g_no_check_msg) + #else: + # raise InputError('Error: No atom types (@atom) have been defined.\n') + + sys.stderr.write(g_program_name+': -- No errors detected. --\n') exit(0) - # Alternatley, you can use lex.error_leader() in place of lex.infile(). except (ValueError, InputError) as err: - # (note to self: I need to learn more about exceptions. - # some examples at: http://www.doughellmann.com/PyMOTW/shlex/) sys.stderr.write('\n'+str(err)+'\n') sys.exit(1) diff --git a/tools/moltemplate/src/moltemplate.sh b/tools/moltemplate/src/moltemplate.sh index cf9d612543..82c3f1ffc6 100755 --- a/tools/moltemplate/src/moltemplate.sh +++ b/tools/moltemplate/src/moltemplate.sh @@ -6,28 +6,30 @@ # Copyright (c) 2012, Regents of the University of California # All rights reserved. +G_PROGRAM_NAME="moltemplate.sh" +G_VERSION="1.01" +G_DATE="2012-12-15" + +echo "${G_PROGRAM_NAME} v${G_VERSION} ${G_DATE}" >&2 +echo "" >&2 + # First, determine the directory in which this shell script is located. # (The python script files should also be located here as well.) -# method 1: -# SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -# method 2: -# SOURCE="${BASH_SOURCE[0]}" -# while [ -h "$SOURCE" ] ; do SOURCE="$(readlink "$SOURCE")"; done -# SCRIPT_DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )" -# method 3: SCRIPT_DIR=$(dirname $0) -#if which python3 > /dev/null; then -# PYTHON_COMMAND='python3' -#else -# PYTHON_COMMAND='python' -#fi -# -# COMMENTING OUT: I don't use python3 any more because python3 has a larger -# memory footprint. Just use regular python instead.) -PYTHON_COMMAND='python' +# Check for python: +# I prefer python over python3 because python3 requires +# more memory. Just use regular python when available. +if which python > /dev/null; then + PYTHON_COMMAND='python' +elif which python3 > /dev/null; then + PYTHON_COMMAND='python3' +else + echo "Error: $G_PROGRAM_NAME requires python or python3" >&2 + exit 1 +fi IMOLPATH="" @@ -35,11 +37,14 @@ if [ -n "${MOLTEMPLATE_PATH}" ]; then IMOLPATH="-importpath ${MOLTEMPLATE_PATH}" fi +# command that invokes lttree.py +LTTREE_COMMAND="$PYTHON_COMMAND ${SCRIPT_DIR}/lttree.py ${IMOLPATH}" + # command that invokes lttree_check.py LTTREE_CHECK_COMMAND="$PYTHON_COMMAND ${SCRIPT_DIR}/lttree_check.py ${IMOLPATH}" -# command that invokes lttree.py -LTTREE_COMMAND="$PYTHON_COMMAND ${SCRIPT_DIR}/lttree.py ${IMOLPATH}" +# command that invokes lttree_postprocess.py +LTTREE_POSTPROCESS_COMMAND="$PYTHON_COMMAND ${SCRIPT_DIR}/lttree_postprocess.py ${IMOLPATH}" # command that invokes nbody_by_type.py NBODY_COMMAND="$PYTHON_COMMAND ${SCRIPT_DIR}/nbody_by_type.py" @@ -331,6 +336,7 @@ while [ "$i" -lt "$ARGC" ]; do if [ "$A" = "-nocheck" ]; then # Disable syntax checking by undefining LTTREE_CHECK_COMMAND unset LTTREE_CHECK_COMMAND + unset LTTREE_POSTPROCESS_COMMAND elif [ "$A" = "-overlay-bonds" ]; then # In that case, do not remove duplicate bond interactions unset REMOVE_DUPLICATE_BONDS @@ -524,7 +530,6 @@ fi - # ---------------- Interactions By Type ----------------- # At the time of writing, bonded-interactions-by-atom-type were not # understood by LAMMPS. These features require auxilliary python scripts. @@ -690,6 +695,16 @@ if [ -s "$data_impropers_by_type" ]; then fi + +if [ -n "$LTTREE_POSTPROCESS_COMMAND" ]; then + echo "" >&2 + if ! eval $LTTREE_POSTPROCESS_COMMAND $TTREE_ARGS; then + exit 1 + fi + echo "" >&2 +fi + + # ------------------------------------------------------- # If present, then remove duplicate bonds, angles, dihedrals, and impropers # (unless overridden by the user). @@ -869,6 +884,7 @@ if [ -s "$data_boundary" ]; then if [ -n "$BOXSIZE_XY" ] || [ -n "$BOXSIZE_XZ" ] || [ -n "$BOXSIZE_YZ" ]; then if [ -n "$BOXSIZE_XY" ] && [ -n "$BOXSIZE_XZ" ] && [ -n "$BOXSIZE_YZ" ]; then + #echo "triclinic_parameters: XY XZ YZ = $BOXSIZE_XY $BOXSIZE_XZ $BOXSIZE_YZ" >&2 TRICLINIC="True" else echo "Error: Problem with triclinic format (\"xy xz yz\") in \"$data_boundary\"" >&2 @@ -932,11 +948,13 @@ fi -if [ -n $TRICLINIC ]; then +if [ -z "$TRICLINIC" ]; then echo " $BOXSIZE_MINX $BOXSIZE_MAXX xlo xhi" >> "$OUT_FILE_DATA" echo " $BOXSIZE_MINY $BOXSIZE_MAXY ylo yhi" >> "$OUT_FILE_DATA" echo " $BOXSIZE_MINZ $BOXSIZE_MAXZ zlo zhi" >> "$OUT_FILE_DATA" else + echo "triclinic parameters: XY XZ YZ = $BOXSIZE_XY $BOXSIZE_XZ $BOXSIZE_YZ" >&2 + echo "" >&2 # Otherwise, this is a triclinic (non orthoganal) crystal basis. # LAMMPS represents triclinic symmetry using a different set of parameters # (lx,ly,lz,xy,xz,yz) than the PDB file format (alpha,beta,gamma). @@ -1334,7 +1352,7 @@ fi echo "" > input_scripts_so_far.tmp -for file_name in "$OUT_FILE_INPUT_SCRIPT" "$OUT_FILE_SETTINGS" "$OUT_FILE_INIT"; do +for file_name in "$OUT_FILE_INIT" "$OUT_FILE_INPUT_SCRIPT" "$OUT_FILE_SETTINGS"; do if [ -s "$file_name" ]; then echo "postprocessing file \"$file_name\"" >&2 postprocess_input_script.py input_scripts_so_far.tmp < "$file_name" > "$file_name".tmp diff --git a/tools/moltemplate/src/nbody_graph_search.py b/tools/moltemplate/src/nbody_graph_search.py index f12bf1b084..b82449a209 100644 --- a/tools/moltemplate/src/nbody_graph_search.py +++ b/tools/moltemplate/src/nbody_graph_search.py @@ -37,7 +37,7 @@ class GraphError(GenError): g_str = str(g) # If the string representation of the graph is too # large to fit in one screen, truncate it - g_str_lines = split(g_str, '\n') + g_str_lines = g_str.split('\n') if (len(g_str_lines) > 12): g_str_lines = g_str_lines[0:12] + [' ...(additional lines not shown)]'] g_str = '\n'.join(g_str_lines) diff --git a/tools/moltemplate/src/postprocess_input_script.py b/tools/moltemplate/src/postprocess_input_script.py index ee483d9a8e..85a3b3e854 100755 --- a/tools/moltemplate/src/postprocess_input_script.py +++ b/tools/moltemplate/src/postprocess_input_script.py @@ -42,11 +42,19 @@ pair_style_list=[] swap_occured = False warn_wildcard = False +i=0 +while i < len(lines_orig): + # Read the next logical line + # Any lines ending in '&' should be merged with the next line before breaking + line_orig = '' + while i < len(lines_orig): + line_counter = 1 + i - num_lines_ignore + line_orig += lines_orig[i] + if ((len(line_orig) < 2) or (line_orig[-2:] != '&\n')): + break + i += 1 + line = line_orig.replace('&\n','\n').rstrip('\n') -for i in range(0, len(lines_orig)): - line_counter = 1 + i - num_lines_ignore - line_orig = lines_orig[i] - line = line_orig.rstrip('\n') comment = '' if '#' in line_orig: ic = line.find('#') @@ -82,11 +90,11 @@ for i in range(0, len(lines_orig)): # If swapped atom types eariler, we also need to swap 'i' with 'j'. # # If "hbond/dreiding.." pair style is used with "hybrid" or - # "overlay" then tokens[3] is the name of the pair style + # "hybrid/overlay" then tokens[3] is the name of the pair style # and tokens[5] is either 'i' or 'j'. if len(pair_style_list) > 0: if ((pair_style_list[0] == 'hybrid') or - (pair_style_list[0] == 'overlay')): + (pair_style_list[0] == 'hybrid/overlay')): if ((tokens[5] == 'i') and (tokens[3][0:6]=='hbond/')): tokens[5] = 'j' sys.stderr.write(' (and replaced \"i\" with \"j\")\n') @@ -101,7 +109,7 @@ for i in range(0, len(lines_orig)): tokens[4] = 'i' sys.stderr.write(' (and replaced \"j\" with \"i\")\n') - sys.stdout.write(' '.join(tokens)+comment+'\n') + sys.stdout.write((' '.join(tokens)+comment).replace('\n','&\n')+'\n') else: if ((('*' in tokens[1]) or ('*' in tokens[2])) @@ -114,6 +122,8 @@ for i in range(0, len(lines_orig)): if i >= num_lines_ignore: sys.stdout.write(line_orig) + i += 1 + if swap_occured: diff --git a/tools/moltemplate/src/ttree.py b/tools/moltemplate/src/ttree.py index 89799aa0ea..6984142b74 100755 --- a/tools/moltemplate/src/ttree.py +++ b/tools/moltemplate/src/ttree.py @@ -91,13 +91,13 @@ else: # We keep track of the program name and version. # (This is only used for generating error messages.) -#g_file_name = 'ttree.py' -g_file_name = __file__.split('/')[-1] -g_module_name = g_file_name -if g_file_name.rfind('.py') != -1: - g_module_name = g_file_name[:g_file_name.rfind('.py')] -g_date_str = '2012-10-19' -g_version_str = '0.47' +#g_filename = 'ttree.py' +g_filename = __file__.split('/')[-1] +g_module_name = g_filename +if g_filename.rfind('.py') != -1: + g_module_name = g_filename[:g_filename.rfind('.py')] +g_date_str = '2012-12-15' +g_version_str = '0.73' @@ -133,7 +133,7 @@ class ClassReference(object): srcloc=None, statobj=None): self.statobj_str = statobj_str - if srcloc == None: + if srcloc is None: self.srcloc = OSrcLoc('', -1) else: self.srcloc = srcloc @@ -173,7 +173,7 @@ class Command(object): class WriteFileCommand(Command): """ WriteFileCommand - file_name This is the name of the file that will be written to + filename This is the name of the file that will be written to when the command is executed. tmpl_list This is the contents of what will be written to the file. Text strings are often simple strings, however more @@ -185,24 +185,24 @@ class WriteFileCommand(Command): """ def __init__(self, - file_name = None, + filename = None, tmpl_list = None, srcloc = None): - self.file_name = file_name - if tmpl_list == None: + self.filename = filename + if tmpl_list is None: self.tmpl_list = [] else: Command.__init__(self, srcloc) self.tmpl_list = tmpl_list def __str__(self): - if self.file_name: - return 'WriteFileCommand(\"'+self.file_name+'\")' + if self.filename: + return 'WriteFileCommand(\"'+self.filename+'\")' else: return 'WriteFileCommand(NULL)' def __copy__(self): tmpl_list = [] CopyTmplList(self.tmpl_list, tmpl_list) #CHECK:IS_MEMORY_WASTED_HERE? - return WriteFileCommand(self.file_name, tmpl_list, self.srcloc) + return WriteFileCommand(self.filename, tmpl_list, self.srcloc) class InstantiateCommand(Command): @@ -219,7 +219,7 @@ class InstantiateCommand(Command): srcloc = None): Command.__init__(self, srcloc) self.name = name - #if class_ref == None: + #if class_ref is None: # self.class_ref = ClassReference() #else: self.class_ref = class_ref @@ -328,7 +328,7 @@ class PopRightCommand(PopCommand): srcloc, context_node=None): PopCommand.__init__(self, partner, srcloc, context_node) - assert((partner == None) or isinstance(partner, PushRightCommand)) + assert((partner is None) or isinstance(partner, PushRightCommand)) def __copy__(self): return PopRightCommand(self.partner, self.srcloc, self.context_node) @@ -342,7 +342,7 @@ class PopLeftCommand(PopCommand): srcloc, context_node=None): PopCommand.__init__(self, partner, srcloc, context_node) - assert((partner == None) or isinstance(partner, PushLeftCommand)) + assert((partner is None) or isinstance(partner, PushLeftCommand)) def __copy__(self): return PopLeftCommand(self.partner, self.srcloc, self.context_node) @@ -473,8 +473,8 @@ def CopyTmplList(source_tmpl_list, dest_cpy): # "entry.nptr" should not contain # any data yet, so we just ignore it. # I assert this below: - assert((entry.nptr.cat_node == None) and - (entry.nptr.leaf_node == None)) + assert((entry.nptr.cat_node is None) and + (entry.nptr.leaf_node is None)) dest_cpy.append(var_ref) else: @@ -554,7 +554,7 @@ def FindChild(name, node, dbg_loc): Note: I have not yet specified what kind of nodes FindChild() operates on. Both StaticObjs and InstanceObjs have self.children and self.parent. However only StaticObjs have "self.class_parents". - (These are "parents" in the object-oriented sense.) + ("class_parents" are "parents" in the object-oriented sense.) If "node" (2nd argument) happens t be an StaticObj, this means it also We must search over the children of these class_parents as well. @@ -648,7 +648,7 @@ def FollowPath(path_tokens, starting_node, dbg_loc): while i < len(path_tokens): if path_tokens[i] == '..': - if node.parent == None: + if node.parent is None: return i, node # <-return the index into the token list # Caller will know that something went awry # if the return value is not equal to the @@ -671,13 +671,13 @@ def FollowPath(path_tokens, starting_node, dbg_loc): # are immediate children of this node's parents are searched.) while node != None: child = FindChild(search_target, node, dbg_loc) - if child == None: + if child is None: node = node.parent else: node = child break - if node == None: + if node is None: # Caller will know that something went awry if the return # value is not equal to the length of the token list. return i, node_before_ellipsis @@ -696,7 +696,7 @@ def FollowPath(path_tokens, starting_node, dbg_loc): # node for one who's name matches path_tokens[i]. child = FindChild(path_tokens[i], node, dbg_loc) - if child == None: + if child is None: # In that case, return with the node_list incomplete. # Let the caller check to see if something went wrong. return i, node # <-return the index into the token list (i) @@ -709,7 +709,7 @@ def FollowPath(path_tokens, starting_node, dbg_loc): i += 1 if node.IsDeleted(): - sys.stderr.write('(debug_msg: encountered deleted node: \"'+node.name+'\")\n') + #sys.stderr.write('(debug_msg: encountered deleted node: \"'+node.name+'\")\n') break return len(path_tokens), node @@ -727,7 +727,7 @@ def PtknsToNode(path_tokens, starting_node, dbg_loc): if i_last_ptkn < len(path_tokens): #assert(isinstance(last_node,StaticObj)) <--why did I assert this? seems wrong - if (last_node.parent == None) and (path_tokens[i_last_ptkn] == '..'): + if (last_node.parent is None) and (path_tokens[i_last_ptkn] == '..'): #In that case, we tried to back out beyond the root of the tree. raise InputError('Error('+g_module_name+'.PtknsToNode()):\n' ' Invalid variable/class name:\n' @@ -839,7 +839,7 @@ def NodeToPtkns(node): def NodeToStr(node): ptkns = NodeToPtkns(node) assert(len(ptkns) > 0) - if node.parent == None: + if node.parent is None: assert(node.name == '') return '/' path_str = ptkns[0] @@ -860,40 +860,46 @@ def CatLeafNodesToTkns(cat_name, cat_node, leaf_node, dbg_loc): cat_node_ptkns.append(cat_name+':') # Determine the path of the leaf node (which should inherit from cat) + deleted = False leaf_node_ptkns = [] if cat_node != leaf_node: node = leaf_node while node.parent != None: + if node.IsDeleted(): + deleted = True + leaf_node_ptkns.append('DELETED_'+node.name) + break leaf_node_ptkns.append(node.name) if node.parent == cat_node: break node = node.parent leaf_node_ptkns.reverse() - # Check that leaf inherits from cat. If not, print error. - if ((node.parent != cat_node) and (node != cat_node)): - err_msg = 'Error('+g_module_name+'.CatLeafNodesToPtkns()):\n'+\ - ' Invalid variable (category:leaf) pair\n' - if dbg_loc != None: - cat_node_str = NodeToStr(cat_node) - leaf_node_str = NodeToStr(leaf_node) - err_msg += ' located near '+ErrorLeader(dbg_loc.infile, dbg_loc.lineno)+'\n'+\ - ' (\"'+leaf_node.name+'\" is not in the scope of \"'+cat_node_str+'/'+cat_name+':\")\n'+\ - ' This will happen if you used the \"category\" command to manually\n'+\ - ' create a category/counter which is not defined globally.\n'+\ - '\n'+\ - ' Note: Using the analogy of a unix style file system, \n'+\ - ' the problem is that \"'+leaf_node_str+'\"\n'+\ - ' is not a subdirectory of \"'+cat_node_str+'\".\n'+\ - '\n'+\ - ' Note: This often occurs when \".../\" is used. In that case, you may\n'+\ - ' be able to avoid this error by referring to your variable explicitly\n'+\ - ' by using chains of \"../\" tokens in the path instead of \".../\".\n' - #' Make sure that your variable you are using is defined in \n'+\ - #' an environment (currently \"'+leaf_node_str+'\")\n'+\ - #' which lies WITHIN the environment where the category was defined.\n'+\ - #' (currently \"'+cat_node_str+'\").\n' - raise InputError(err_msg) + if not deleted: + # Check that leaf inherits from cat. If not, print error. + if ((node.parent != cat_node) and (node != cat_node)): + err_msg = 'Error('+g_module_name+'.CatLeafNodesToPtkns()):\n'+\ + ' Invalid variable (category:leaf) pair\n' + if dbg_loc != None: + cat_node_str = NodeToStr(cat_node) + leaf_node_str = NodeToStr(leaf_node) + err_msg += ' located near '+ErrorLeader(dbg_loc.infile, dbg_loc.lineno)+'\n'+\ + ' (\"'+leaf_node.name+'\" is not in the scope of \"'+cat_node_str+'/'+cat_name+':\")\n'+\ + ' This will happen if you used the \"category\" command to manually\n'+\ + ' create a category/counter which is not defined globally.\n'+\ + '\n'+\ + ' Note: Using the analogy of a unix style file system, \n'+\ + ' the problem is that \"'+leaf_node_str+'\"\n'+\ + ' is not a subdirectory of \"'+cat_node_str+'\".\n'+\ + '\n'+\ + ' Note: This often occurs when \".../\" is used. In that case, you may\n'+\ + ' be able to avoid this error by referring to your variable explicitly\n'+\ + ' by using chains of \"../\" tokens in the path instead of \".../\".\n' + #' Make sure that your variable you are using is defined in \n'+\ + #' an environment (currently \"'+leaf_node_str+'\")\n'+\ + #' which lies WITHIN the environment where the category was defined.\n'+\ + #' (currently \"'+cat_node_str+'\").\n' + raise InputError(err_msg) else: err_msg = 'Warning: Strange variable path' if dbg_loc != None: @@ -983,11 +989,11 @@ def FindCatNode(category_name, current_node, srcloc): elif node.parent != None: node = node.parent else: - # node.parent == None, ... we're done + # node.parent is None, ... we're done break - if cat_node == None: - assert(node.parent == None) + if cat_node is None: + assert(node.parent is None) #sys.stderr.write('Warning near ' + # ErrorLeader(srcloc.infile, # srcloc.lineno)+'\n'+ @@ -1327,7 +1333,7 @@ def DescrToCatLeafNodes(descr_str, cat_start_node = PtknsToNode(cat_ptkns[:-1], context_node, dbg_loc) # Later on, we will search upwards until we find an ancestor # node containing a category matching cat_name. This will - # be taken care of later. (See "if cat_node == None:" below.) + # be taken care of later. (See "if cat_node is None:" below.) else: # In this case, the user supplied an explicit path # for the category node. Find it now. @@ -1339,7 +1345,7 @@ def DescrToCatLeafNodes(descr_str, # of the category node, which is what we want. leaf_start_node = cat_node - if cat_node == None: + if cat_node is None: # Otherwise, the user did not indicate where the category # node is defined, but only supplied the category name. # (This is the most common scenario.) @@ -1441,7 +1447,7 @@ def DescrToCatLeafNodes(descr_str, else: #In that case, we were unable to find the node referenced by "..." raise InputError('Error('+g_module_name+'.DescrToCatLeafNodes()):\n' - ' Broken path containing ellipsis (...)\n' + ' Broken path.\n' # containing ellipsis (...)\n' ' class/variable \"'+search_target+'\" not found in this\n' ' context: \"' #+var_ref.prefix + var_ref.descr_str + var_ref.suffix+'\"\n' @@ -1526,7 +1532,7 @@ def DescrToCatLeafNodes(descr_str, # Otherwise, the user made a mistake in the path. # Figure out which kind of mistake and print an error. - if (last_node.parent == None) and (leaf_ptkns[i_last_ptkn] == '..'): + if (last_node.parent is None) and (leaf_ptkns[i_last_ptkn] == '..'): #In that case, we tried to back out beyond the root of the tree. raise InputError('Error('+g_module_name+'.DescrToCatLeafNodes()):\n' ' Broken path in variable:\n' @@ -1678,22 +1684,22 @@ class Category(object): self.name = name - if bindings == None: + if bindings is None: self.bindings = OrderedDict() else: self.bindings = bindings - if counter == None: + if counter is None: self.counter = SimpleCounter(1,1) else: self.counter = counter - if manual_assignments == None: + if manual_assignments is None: self.manual_assignments = OrderedDict() else: self.manual_assignments = manual_assignments - if reserved_values == None: + if reserved_values is None: self.reserved_values = OrderedDict() else: self.reserved_values = reserved_values @@ -1888,7 +1894,7 @@ class StaticObj(object): ##vb##def AddVarBinding(self, var_binding): - ##vb## if self.var_bindings == None: + ##vb## if self.var_bindings is None: ##vb## self.var_bindings = [var_binding] ##vb## else: ##vb## self.var_bindings.append(var_binding) @@ -1908,7 +1914,7 @@ class StaticObj(object): # augment their original class definition, adding new content to an # existing class. In that case self.srcloc_begin will have already # been assigned. We don't want to overwrite it in that case.) - if self.srcloc_begin == None: # <-- not defined yet? + if self.srcloc_begin is None: # <-- not defined yet? self.srcloc_begin = lex.GetSrcLoc() while True: @@ -1967,48 +1973,7 @@ class StaticObj(object): # tmpl_filename = tmpl_filename.strip(lex.quotes) ) tmpl_contents = lex.ReadTemplate() - - # Format quirks: - #1) Remove any newlines at the beginning of the first text block - # in tmpl_content.(Sometimes they cause ugly extra blank lines) - assert(len(tmpl_contents) > 0) - if isinstance(tmpl_contents[0], TextBlock): - first_token_strip = tmpl_contents[0].text.lstrip(' ') - if ((len(first_token_strip) > 0) and - (first_token_strip[0] in lex.newline)): - tmpl_contents[0].text = first_token_strip[1:] - - #2) Remove any trailing '}' characters, and complain if absent. - # The last token - assert(isinstance(tmpl_contents[-1], TextBlock)) - assert(tmpl_contents[-1].text in ['}','']) - if tmpl_contents[-1].text == '}': - del tmpl_contents[-1] - else: - tmpl_begin = None - if isinstance(tmpl_contents[0], TextBlock): - tmpl_begin = tmpl_contents[0].locBeg - elif isinstance(tmpl_contents[0], VarRef): - tmpl_begin = tmpl_contents[0].srcloc - else: - assert(False) - raise InputError('Error('+g_module_name+'.StaticObj.Parse()):\n' - ' Error near '+lex.error_leader()+'\n\n' - ' Premature end to template.\n' - '(Missing terminator character, usually a \'}\'.) The\n' - 'incomplete template begins near '+ErrorLeader(tmpl_begin.infile, tmpl_begin.lineno)+'\n') - #3) Finally, if there is nothing but whitespace between the - # last newline and the end, then strip that off too. - if isinstance(tmpl_contents[-1], TextBlock): - i = len(tmpl_contents[-1].text)-1 - if i >= 0: - while ((i >= 0) and - (tmpl_contents[-1].text[i] in lex.whitespace) and - (tmpl_contents[-1].text[i] not in lex.newline)): - i -= 1 - if (tmpl_contents[-1].text[i] in lex.newline): - tmpl_contents[-1].text = tmpl_contents[-1].text[0:i+1] - + StaticObj.CleanupReadTemplate(tmpl_contents, lex) #sys.stdout.write(' Parse() after ReadTemplate, tokens:\n\n') #print(tmpl_contents) @@ -2234,7 +2199,7 @@ class StaticObj(object): break # If found, we refer to it as "child". # If not, then we create a new StaticObj named "child". - if (child == None) or (child.name != child_name): + if (child is None) or (child.name != child_name): child = StaticObj(child_name, self) self.children.append(child) assert(child in self.children) @@ -2343,13 +2308,16 @@ class StaticObj(object): ' Error in new statement near '+lex.error_leader()+'\n' ' A \'[\' character should be followed by a number and a \']\' character.') array_size.append(int(number_str)) - suffix = lex.GetParenExpr() - if ((suffix == '') or - (suffix == lex.eof)): + suffix = lex.get_token() + + if ((suffix == '') or (suffix == lex.eof)): array_suffixes.append('') array_srclocs.append(base_srcloc) break if suffix[0] == '.': + lex.push_token(suffix[1:]) + suffix_func = lex.GetParenExpr() + suffix = '.' + suffix_func array_suffixes.append(suffix) array_srclocs.append(lex.GetSrcLoc()) else: @@ -2593,13 +2561,13 @@ class StaticObj(object): pop_mod_command = ModCommand(pop_command, instobj_descr_str) if instobj_descr_str != './': - sys.stderr.write('DEBUG: Adding '+str(push_command)+' to '+ - staticobj.name+'.instance_commands\n') + #sys.stderr.write('DEBUG: Adding '+str(push_command)+' to '+ + # staticobj.name+'.instance_commands\n') staticobj.instance_commands.append(push_mod_command) staticobj.instance_commands.append(pop_mod_command) else: - sys.stderr.write('DEBUG: Adding '+str(push_command)+' to '+ - staticobj.name+'.instance_commands_push\n') + #sys.stderr.write('DEBUG: Adding '+str(push_command)+' to '+ + # staticobj.name+'.instance_commands_push\n') # CONTINUEHERE: should I make these PushRight commands and # append them in the opposite order? # If so I also have to worry about the case above. @@ -2626,6 +2594,49 @@ class StaticObj(object): + @staticmethod + def CleanupReadTemplate(tmpl_contents, lex): + #1) Remove any newlines at the beginning of the first text block + # in tmpl_content.(Sometimes they cause ugly extra blank lines) + assert(len(tmpl_contents) > 0) + if isinstance(tmpl_contents[0], TextBlock): + first_token_strip = tmpl_contents[0].text.lstrip(' ') + if ((len(first_token_strip) > 0) and + (first_token_strip[0] in lex.newline)): + tmpl_contents[0].text = first_token_strip[1:] + tmpl_contents[0].srcloc.lineno += 1 + + #2) Remove any trailing '}' characters, and complain if absent. + # The last token + assert(isinstance(tmpl_contents[-1], TextBlock)) + assert(tmpl_contents[-1].text in ['}','']) + if tmpl_contents[-1].text == '}': + del tmpl_contents[-1] + else: + tmpl_begin = None + if isinstance(tmpl_contents[0], TextBlock): + tmpl_begin = tmpl_contents[0].srcloc + elif isinstance(tmpl_contents[0], VarRef): + tmpl_begin = tmpl_contents[0].srcloc + else: + assert(False) + raise InputError('Error('+g_module_name+'.StaticObj.Parse()):\n' + ' Error near '+lex.error_leader()+'\n\n' + ' Premature end to template.\n' + '(Missing terminator character, usually a \'}\'.) The\n' + 'incomplete template begins near '+ErrorLeader(tmpl_begin.infile, tmpl_begin.lineno)+'\n') + #3) Finally, if there is nothing but whitespace between the + # last newline and the end, then strip that off too. + if isinstance(tmpl_contents[-1], TextBlock): + i = len(tmpl_contents[-1].text)-1 + if i >= 0: + while ((i >= 0) and + (tmpl_contents[-1].text[i] in lex.whitespace) and + (tmpl_contents[-1].text[i] not in lex.newline)): + i -= 1 + if (tmpl_contents[-1].text[i] in lex.newline): + tmpl_contents[-1].text = tmpl_contents[-1].text[0:i+1] + def LookupStaticRefs(self): @@ -3006,7 +3017,7 @@ class InstanceObjBasic(object): ##vb##def AddVarBinding(self, var_binding): - ##vb## if self.var_bindings == None: + ##vb## if self.var_bindings is None: ##vb## self.var_bindings = [var_binding] ##vb## else: ##vb## self.var_bindings.append(var_binding) @@ -3014,7 +3025,7 @@ class InstanceObjBasic(object): def Dealloc(self): pass - ##vb##if self.var_bindings == None: + ##vb##if self.var_bindings is None: ##vb## return ##vb##N = len(self.var_bindings)-1 ##vb##for i in range(0,len(self.var_bindings)): @@ -3036,7 +3047,14 @@ class InstanceObjBasic(object): # eliminated unnecessary data members to save space. def IsDeleted(self): - return (self.parent == self) + # Return true if self.parent == self + # for this node (or for any ancestor node). + node = self + while node.parent != None: + if node.parent == node: + return True + node = node.parent + return False @@ -3390,6 +3408,7 @@ class InstanceObj(InstanceObjBasic): # del parent.children[i] # else: # i += 1 + self.Dealloc() InstanceObjBasic.DeleteSelf(self) @@ -3437,8 +3456,8 @@ class InstanceObj(InstanceObjBasic): for class_parent in statobj.class_parents: # Avoid the "Diamond of Death" multiple inheritance problem if class_parent not in class_parents_in_use: - sys.stderr.write(' DEBUG: '+self.name+'.class_parent = '+ - class_parent.name+'\n') + #sys.stderr.write(' DEBUG: '+self.name+'.class_parent = '+ + # class_parent.name+'\n') self.BuildInstanceTree(class_parent, class_parents_in_use) class_parents_in_use.add(class_parent) @@ -3787,7 +3806,7 @@ def AssignVarOrderByFile(context_node, search_instance_commands=False): isinstance(context_node, InstanceObjBasic))): #if ((var_ref.prefix == '@') or # (not search_instance_commands)): - if ((var_ref.binding.order == None) or + if ((var_ref.binding.order is None) or (var_ref.binding.order > var_ref.srcloc.order)): var_ref.binding.order = var_ref.srcloc.order @@ -3812,7 +3831,8 @@ def AssignVarOrderByCommand(command_list, prefix_filter): for var_ref in tmpl_list: if isinstance(var_ref, VarRef): if var_ref.prefix in prefix_filter: - if ((var_ref.binding.order == None) or + count += 1 + if ((var_ref.binding.order is None) or (var_ref.binding.order > count)): var_ref.binding.order = count @@ -3874,7 +3894,7 @@ def AutoAssignVals(cat_node, for leaf_node,var_binding in var_bind_iter: - if ((var_binding.value == None) or ignore_prior_values): + if ((var_binding.value is None) or ignore_prior_values): if var_binding.nptr.leaf_node.name[:9] == '__query__': # -- THE "COUNT" HACK -- @@ -3902,7 +3922,7 @@ def AutoAssignVals(cat_node, while True: cat.counter.incr() value = str(cat.counter.query()) - if ((reserved_values == None) or + if ((reserved_values is None) or ((cat, value) not in reserved_values)): break @@ -4049,8 +4069,8 @@ def MergeWriteCommands(command_list): file_templates = defaultdict(list) for command in command_list: if isinstance(command, WriteFileCommand): - if command.file_name != None: - file_templates[command.file_name] += \ + if command.filename != None: + file_templates[command.filename] += \ command.tmpl_list return file_templates @@ -4062,28 +4082,28 @@ def WriteTemplatesValue(file_templates): write out the contents of the templates contain inside them). """ - for file_name, tmpl_list in file_templates.items(): - if file_name == '': + for filename, tmpl_list in file_templates.items(): + if filename == '': out_file = sys.stdout else: - out_file = open(file_name, 'a') + out_file = open(filename, 'a') out_file.write(Render(tmpl_list, substitute_vars=True)) - if file_name != '': + if filename != '': out_file.close() # Alternate (old method): #for command in command_list: # if isinstance(command, WriteFileCommand): - # if command.file_name != None: - # if command.file_name == '': + # if command.filename != None: + # if command.filename == '': # out_file = sys.stdout # else: - # out_file = open(command.file_name, 'a') + # out_file = open(command.filename, 'a') # # out_file.write(Render(command.tmpl_list)) # - # if command.file_name != '': + # if command.filename != '': # out_file.close() @@ -4096,34 +4116,34 @@ def WriteTemplatesVarName(file_templates): """ - for file_name, tmpl_list in file_templates.items(): - if file_name != '': - out_file = open(file_name + '.template', 'a') + for filename, tmpl_list in file_templates.items(): + if filename != '': + out_file = open(filename + '.template', 'a') out_file.write(Render(tmpl_list, substitute_vars=False)) out_file.close() def EraseTemplateFiles(command_list): - file_names = set([]) + filenames = set([]) for command in command_list: if isinstance(command, WriteFileCommand): - if (command.file_name != None) and (command.file_name != ''): - if command.file_name not in file_names: - file_names.add(command.file_name) + if (command.filename != None) and (command.filename != ''): + if command.filename not in filenames: + filenames.add(command.filename) # Openning the files (in mode 'w') and closing them again # erases their contents. - out_file = open(command.file_name, 'w') + out_file = open(command.filename, 'w') out_file.close() - out_file = open(command.file_name + '.template', 'w') + out_file = open(command.filename + '.template', 'w') out_file.close() #def ClearTemplates(file_templates): -# for file_name in file_templates: -# if file_name != '': -# out_file = open(file_name, 'w') +# for filename in file_templates: +# if filename != '': +# out_file = open(filename, 'w') # out_file.close() -# out_file = open(file_name + '.template', 'w') +# out_file = open(filename + '.template', 'w') # out_file.close() @@ -4154,13 +4174,21 @@ def WriteVarBindingsFile(node): # Now omit variables whos names contain "*" or "?" # (these are actually not variables, but wildcard patterns) if not HasWildCard(var_binding.full_name): + if len(var_binding.refs) > 0: + usage_example = ' #'+\ + ErrorLeader(var_binding.refs[0].srcloc.infile, \ + var_binding.refs[0].srcloc.lineno) + else: + usage_example = '' out.write(SafelyEncodeString(var_binding.full_name) +' '+ - SafelyEncodeString(var_binding.value)+'\n') + SafelyEncodeString(var_binding.value) + +usage_example+'\n') out.close() for child in node.children: WriteVarBindingsFile(child) + def CustomizeBindings(bindings, g_objectdefs, g_objects): @@ -4209,13 +4237,13 @@ def CustomizeBindings(bindings, ############################################################## -def BasicUIReadBindingsFile(bindings_so_far, file_name): +def BasicUIReadBindingsFile(bindings_so_far, filename): try: - f = open(file_name, 'r') + f = open(filename, 'r') except IOError: - sys.stderr.write('Error('+g_file_name+'):\n'' : unable to open file\n' + sys.stderr.write('Error('+g_filename+'):\n'' : unable to open file\n' '\n' - ' \"'+bindings_file_name+'\"\n' + ' \"'+bindings_filename+'\"\n' ' for reading.\n' '\n' ' (If you were not trying to open a file with this name, then this could\n' @@ -4224,7 +4252,7 @@ def BasicUIReadBindingsFile(bindings_so_far, file_name): ' to set the variable $atom:wat[2]/H1 to 20.)\n') sys.exit(1) - BasicUIReadBindingsStream(bindings_so_far, f, file_name) + BasicUIReadBindingsStream(bindings_so_far, f, filename) f.close() @@ -4276,7 +4304,7 @@ def BasicUIReadBindingsStream(bindings_so_far, in_stream, source_name=''): text_block = tmpllist[i+1] assert(isinstance(var_ref, VarRef)) if (not isinstance(text_block, TextBlock)): - raise InputError('Error('+g_file_name+'):\n' + raise InputError('Error('+g_filename+'):\n' ' This is not a valid name-value pair:\n' ' \"'+var_ref.prefix+var_ref.descr_str+' '+text_block.text.rstrip()+'\"\n' ' Each variable asignment should contain a variable name (beginning with\n' @@ -4374,14 +4402,14 @@ def BasicUIParseArgs(argv, settings): #sys.stderr.write('argv['+str(i)+'] = \"'+argv[i]+'\"\n') if argv[i] == '-a': if ((i+1 >= len(argv)) or (argv[i+1][:1] == '-')): - raise InputError('Error('+g_file_name+'):\n' + raise InputError('Error('+g_filename+'):\n' ' Error in -a \"'+argv[i+1]+' argument.\"\n' ' The -a flag '+bind_err_msg) if (argv[i+1][0] in '@$'): #tokens = argv[i+1].strip().split(' ') tokens = SplitQuotedString(argv[i+1].strip()) if len(tokens) < 2: - raise InputError('Error('+g_file_name+'):\n' + raise InputError('Error('+g_filename+'):\n' ' Error in -a \"'+argv[i+1]+'\" argument.\n' ' '+bind_err_msg_var) BasicUIReadBindingsText(settings.user_bindings_x, @@ -4394,14 +4422,14 @@ def BasicUIParseArgs(argv, settings): del(argv[i:i+2]) elif argv[i] == '-b': if ((i+1 >= len(argv)) or (argv[i+1][:1] == '-')): - raise InputError('Error('+g_file_name+'):\n' + raise InputError('Error('+g_filename+'):\n' ' Error in -b \"'+argv[i+1]+' argument.\"\n' ' The -b flag '+bind_err_msg) if (argv[i+1][0] in '@$'): #tokens = argv[i+1].strip().split(' ') tokens = SplitQuotedString(argv[i+1].strip()) if len(tokens) < 2: - raise InputError('Error('+g_file_name+'):\n' + raise InputError('Error('+g_filename+'):\n' ' Error in -b \"'+argv[i+1]+'\" argument.\n' ' '+bind_err_msg_var) BasicUIReadBindingsText(settings.user_bindings, @@ -4427,7 +4455,7 @@ def BasicUIParseArgs(argv, settings): (argv[i] == '-import-path') or (argv[i] == '-import_path')): if ((i+1 >= len(argv)) or (argv[i+1][:1] == '-')): - raise InputError('Error('+g_file_name+'):\n' + raise InputError('Error('+g_filename+'):\n' ' Error in \"'+argv[i]+'\" argument.\"\n' ' The \"'+argv[i]+'\" argument should be followed by the name of\n' ' an environment variable storing a path for including/importing files.\n') @@ -4436,7 +4464,7 @@ def BasicUIParseArgs(argv, settings): elif ((argv[i][0] == '-') and (__name__ == "__main__")): #elif (__name__ == "__main__"): - raise InputError('Error('+g_file_name+'):\n' + raise InputError('Error('+g_filename+'):\n' 'Unrecogized command line argument \"'+argv[i]+'\"\n') else: i += 1 @@ -4452,14 +4480,14 @@ def BasicUIParseArgs(argv, settings): # python script which imports this module, so we let them handle it.) if len(argv) == 1: - raise InputError('Error('+g_file_name+'):\n' + raise InputError('Error('+g_filename+'):\n' ' This program requires at least one argument\n' ' the name of a file containing ttree template commands\n') elif len(argv) == 2: try: settings.lex = TemplateLexer(open(argv[1], 'r'), argv[1]) # Parse text from file except IOError: - sys.stderr.write('Error('+g_file_name+'):\n' + sys.stderr.write('Error('+g_filename+'):\n' ' unable to open file\n' ' \"'+argv[1]+'\"\n' ' for reading.\n') @@ -4469,7 +4497,7 @@ def BasicUIParseArgs(argv, settings): else: # if there are more than 2 remaining arguments, problem_args = ['\"'+arg+'\"' for arg in argv[1:]] - raise InputError('Syntax Error ('+g_file_name+'):\n' + raise InputError('Syntax Error ('+g_filename+'):\n' ' Problem with argument list.\n' ' The remaining arguments are:\n\n' ' '+(' '.join(problem_args))+'\n\n' @@ -4527,12 +4555,13 @@ def BasicUI(settings, # and replace the (static) variable references to pointers # to nodes in the StaticObj tree: sys.stderr.write(' done\nlooking up @variables...') + # Here we assign pointers for variables in "write_once(){text}" templates: AssignVarPtrs(static_tree_root, search_instance_commands=False) - #gc.collect() + # Here we assign pointers for variables in "write(){text}" templates: AssignVarPtrs(static_tree_root, search_instance_commands=True) - #gc.collect() sys.stderr.write(' done\nconstructing the tree of class definitions...') sys.stderr.write(' done\n\nclass_def_tree = ' + str(static_tree_root) + '\n\n') + #gc.collect() # Step 4: Construct the instance tree (the tree of instantiated # classes) from the static tree of type definitions. @@ -4551,14 +4580,18 @@ def BasicUI(settings, AssignVarPtrs(instance_tree_root, search_instance_commands=False) #sys.stderr.write('done\n garbage collection...') #gc.collect() - # CONTINUEHERE: EXPLANATION NEEDED + + # Step 6: Now carry out all of the "delete" commands (deferred earlier). + # (These were deferred because the instance tree must be complete before any + # references to target nodes (with non-trivial paths) can be understood.) InvokeAllDeletes(instance_tree_root, null_list_warning=False, null_list_error=True) sys.stderr.write(' done\n') #sys.stderr.write('instance_v = ' + str(instance_tree_root) + '\n') + #gc.collect() - # Step 6: The commands must be carried out in a specific order. + # Step 7: The commands must be carried out in a specific order. # (for example, the "write()" and "new" commands). # Search through the tree, and append commands to a command list. # Then re-order the list in the order the commands should have @@ -4570,7 +4603,7 @@ def BasicUI(settings, #sys.stderr.write('static_commands = '+str(static_commands)+'\n') #sys.stderr.write('instance_commands = '+str(instance_commands)+'\n') - # Step 7: We are about to assign numbers to the variables. + # Step 8: We are about to assign numbers to the variables. # We need to decide the order in which to assign them. # By default static variables (@) are assigned in the order # they appear in the file. @@ -4581,7 +4614,7 @@ def BasicUI(settings, AssignVarOrderByFile(static_tree_root, search_instance_commands=True) AssignVarOrderByCommand(instance_commands, '$') - # Step 8: Assign the variables. + # Step 9: Assign the variables. # (If the user requested any customized variable bindings, # load those now.) if len(settings.user_bindings_x) > 0: @@ -4605,13 +4638,7 @@ def BasicUI(settings, static_tree_root, instance_tree_root) - # Step 9: Now write the variable bindings/assignments table. - sys.stderr.write(' done\nwriting \"ttree_assignments.txt\" file...') - open('ttree_assignments.txt', 'w').close() # <-- erase previous version. - WriteVarBindingsFile(static_tree_root) - WriteVarBindingsFile(instance_tree_root) - - # The task of writing the output files is left up to the caller. + sys.stderr.write(' done\n') @@ -4631,7 +4658,7 @@ if __name__ == "__main__": """ ####### Main Code Below: ####### - g_program_name = g_file_name + g_program_name = g_filename sys.stderr.write(g_program_name+' v'+g_version_str+' '+g_date_str+' ') sys.stderr.write('\n(python version '+str(sys.version)+')\n') @@ -4659,10 +4686,11 @@ if __name__ == "__main__": g_instance_commands) # Now write the files + # (Finally carry out the "write()" and "write_once()" commands.) # Optional: Multiple commands to write to the same file can be merged to # reduce the number of times the file is openned and closed. - sys.stderr.write(' done\nwriting templates...\n') + sys.stderr.write('writing templates...\n') # Erase the files that will be written to: EraseTemplateFiles(g_static_commands) EraseTemplateFiles(g_instance_commands) @@ -4679,6 +4707,12 @@ if __name__ == "__main__": sys.stderr.write(' done\n') + # Step 11: Now write the variable bindings/assignments table. + sys.stderr.write('writing \"ttree_assignments.txt\" file...') + open('ttree_assignments.txt', 'w').close() # <-- erase previous version. + WriteVarBindingsFile(g_objectdefs) + WriteVarBindingsFile(g_objects) + except (ValueError, InputError) as err: sys.stderr.write('\n\n'+str(err)+'\n') sys.exit(-1) diff --git a/tools/moltemplate/src/ttree_lex.py b/tools/moltemplate/src/ttree_lex.py index 1809d647c2..f5f5af13a5 100644 --- a/tools/moltemplate/src/ttree_lex.py +++ b/tools/moltemplate/src/ttree_lex.py @@ -22,6 +22,7 @@ import os.path import sys from collections import deque import re, fnmatch +import string #import gc @@ -51,7 +52,12 @@ __all__ = ["TtreeShlex", "VarRef", "VarNPtr", "VarBinding", - "DeleteLineFromTemplate", + "SplitTemplate", + "SplitTemplateMulti", + "TableFromTemplate", + "ExtractCatName", + #"_TableFromTemplate", + #"_DeleteLineFromTemplate", "DeleteLinesWithBadVars", "TemplateLexer"] @@ -97,7 +103,7 @@ class TtreeShlex(object): self.wordterminators = set([]) #WORDTERMINATORS self.prev_space_terminator = '' #WORDTERMINATORS - self.whitespace = ' \t\r\n' + self.whitespace = ' \t\r\f\n' self.whitespace_split = False self.quotes = '\'"' self.escape = '\\' @@ -233,17 +239,23 @@ class TtreeShlex(object): return raw + + def read_char(self): + if self.pushback: #WORDTERMINATORS + nextchar = self.pushback.popleft() #WORDTERMINATORS + assert((type(nextchar) is str) and (len(nextchar)==1)) #WORDTERMINATORS + else: #WORDTERMINATORS + nextchar = self.instream.read(1) #WORDTERMINATORS + return nextchar + + def read_token(self): self.prev_space_terminator = '' #WORDTERMINATORS quoted = False escapedstate = ' ' while True: #### self.pushback is now a stack of characters, not tokens #WORDTERMINATORS - if self.pushback: #WORDTERMINATORS - nextchar = self.pushback.popleft() #WORDTERMINATORS - assert((type(nextchar) is str) and (len(nextchar)==1)) #WORDTERMINATORS - else: #WORDTERMINATORS - nextchar = self.instream.read(1) #WORDTERMINATORS + nextchar = self.read_char() if nextchar == '\n': self.lineno = self.lineno + 1 if self.debug >= 3: @@ -347,7 +359,7 @@ class TtreeShlex(object): if self.token or (self.posix and quoted): # Keep track of which character(s) terminated # the token (including whitespace and comments). - self.prev_space_terminator = next_char + comment_contents #WORDTERMINATORS + self.prev_space_terminator = nextchar + comment_contents #WORDTERMINATORS break # emit current token else: continue @@ -434,6 +446,8 @@ class TtreeShlex(object): return self.__bool__() +# The split() function was originally from shlex +# It is included for backwards compatibility. def split(s, comments=False, posix=True): lex = TtreeShlex(s, posix=posix) lex.whitespace_split = True @@ -473,7 +487,7 @@ class InputError(Exception): def ErrorLeader(infile, lineno): - return '\"'+infile+'\", line '+str(lineno)+': ' + return '\"'+infile+'\", line '+str(lineno) class SrcLoc(object): @@ -490,7 +504,7 @@ class SrcLoc(object): def SplitQuotedString(string, quotes='\'\"', - delimiters=' \t\r\n', + delimiters=' \t\r\f\n', escape='\\', comment_char='#'): tokens = [] @@ -533,6 +547,8 @@ def SplitQuotedString(string, c = '\t' elif (c == 'r') and (escaped_state == True): c = '\r' + elif (c == 'f') and (escaped_state == True): + c = '\f' token += c reading_token = True escaped_state = False @@ -559,12 +575,12 @@ def EscCharStrToChar(s_in, escape='\\'): out_lstr.append('\t') elif (c == 'r'): out_lstr.append('\r') + elif (c == 'f'): + out_lstr.append('\f') elif (c == '\''): out_lstr.append('\'') elif (c == '\"'): out_lstr.append('\"') - elif (c == '\r'): - c = '\\r' elif c in escape: out_lstr.append(c) else: @@ -582,7 +598,7 @@ def EscCharStrToChar(s_in, escape='\\'): def SafelyEncodeString(in_str, quotes='\'\"', - delimiters=' \t\r\n', + delimiters=' \t\r\f\n', escape='\\', comment_char='#'): """ @@ -605,6 +621,8 @@ def SafelyEncodeString(in_str, c = '\\t' elif (c == '\r'): c = '\\r' + elif (c == '\f'): + c = '\\f' elif c in quotes: c = escape[0]+c elif c in escape: @@ -780,36 +798,28 @@ class LineLex(TtreeShlex): escaped_state = False found_space = False while True: - if self.pushback: - next_char = self.pushback.popleft() - assert((type(next_char) is str) and (len(next_char)==1)) - else: - next_char = self.instream.read(1) - #sys.stderr.write('next_char=\"'+next_char+'\"\n') - while next_char == '': + nextchar = self.read_char() + #sys.stderr.write('nextchar=\"'+nextchar+'\"\n') + while nextchar == '': if not self.filestack: return self._StripComments(line), '', first_token, found_space else: self.pop_source() - if self.pushback: - next_char = self.pushback.popleft() - assert((type(next_char) is str) and (len(next_char)==1)) - else: - next_char = self.instream.read(1) - if next_char == '\n': + nextchar = self.read_char() + if nextchar == '\n': self.lineno += 1 if escaped_state: escaped_state = False else: - if next_char in self.escape: - line += next_char + if nextchar in self.escape: + line += nextchar escaped_state = True else: escaped_state = False if not escaped_state: - if (next_char in self.whitespace): + if (nextchar in self.whitespace): found_space = True while first_token in self.source_triggers: fname = RemoveOuterQuotes(self.get_token()) @@ -832,11 +842,11 @@ class LineLex(TtreeShlex): sys.stderr.write('\nWarning at '+self.error_leader()+':\n' ' duplicate attempt to import file:\n \"'+fname+'\"\n') - line, next_char, first_token, found_space = \ + line, nextchar, first_token, found_space = \ self._ReadLine(recur_level+1) - if next_char in self.line_terminators: + if nextchar in self.line_terminators: line_nrw = line.rstrip(self.whitespace) #sys.stderr.write('line_nrw=\"'+line_nrw+'\"\n') if ((len(line_nrw) > 0) and @@ -845,20 +855,20 @@ class LineLex(TtreeShlex): line = line_nrw[:-1] #delete the line_extend character # from the end of that line and keep reading... else: - return self._StripComments(line), next_char, first_token, found_space + return self._StripComments(line), nextchar, first_token, found_space else: - line += next_char + line += nextchar if not found_space: - first_token += next_char + first_token += nextchar def ReadLine(self, recur_level=0): - line, next_char, first_token, found_space = \ + line, nextchar, first_token, found_space = \ self._ReadLine(recur_level) - if next_char == self.eof: + if nextchar == self.eof: self.end_encountered = True - return line + next_char + return line + nextchar @staticmethod @@ -937,18 +947,18 @@ class OSrcLoc(object): class TextBlock(object): - """TextBlock is just a 3-tuple consisting of a string, and two OSrcLocs + """TextBlock is just a 3-tuple consisting of a string, and an OSrcLoc to help locate it in the original file from which it was read.""" - def __init__(self, text, locBeg, locEnd): + def __init__(self, text, srcloc): #srcloc_end): self.text = text - if locBeg == None: - self.locBeg = OSrcLoc() + if srcloc == None: + self.srcloc = OSrcLoc() else: - self.locBeg = locBeg - if locEnd == None: - self.locEnd = OSrcLoc() - else: - self.locEnd = locEnd + self.srcloc = srcloc + #if srcloc_end == None: + # self.srcloc_end = OSrcLoc() + #else: + # self.srcloc_end = srcloc_end def __repr__(self): return '\"'+self.text+'\"' @@ -962,7 +972,7 @@ class VarRef(object): prefix = '', # '$' or '${' descr_str = '', # <- descriptor string: "cpath/category:lpath" suffix = '', # '}' - srcloc = None,# location in file where defined + srcloc = None,# location in file where defined binding = None,# a pointer to a tuple storing the value nptr = None):# <- see class VarNPtr @@ -1063,10 +1073,35 @@ class VarBinding(object): return repr((self.full_name, self.value, self.order)) +def ExtractCatName(descr_str): + """ When applied to a VarRef's "descr_str" member, + this function will extract the "catname" of it's corresponding + "nptr" member. This can be useful for error reporting. + (I use it to insure that the user is using the correct counter + variable types at various locations in their input files.) -def DeleteLineFromTemplate(tmpl_list, - i_entry, # index into tmpl_list - newline_delimiter='\n'): + """ + + ib = descr_str.find(':') + if ib == -1: + ib = len(descr_str) + ia = descr_str.rfind('/') + if ia == -1: + ia = 0 + return descr_str[ia:ib] + else: + str_before_colon = descr_str[0:ib] + ia = str_before_colon.rfind('/') + if ia == -1: + return str_before_colon + else: + return str_before_colon[ia+1:] + + + +def _DeleteLineFromTemplate(tmpl_list, + i_entry, # index into tmpl_list + newline_delimiter='\n'): """ Delete a single line from tmpl_list. tmpl_list is an alternating list of VarRefs and TextBlocks. To identify the line, the index corresponding to one of the @@ -1091,7 +1126,9 @@ def DeleteLineFromTemplate(tmpl_list, break i_prev_newline -= 1 - i_next_newline = i_entry + first_var = True + #i_next_newline = i_entry + i_next_newline = i_prev_newline+1 while i_next_newline < len(tmpl_list): entry = tmpl_list[i_next_newline] if isinstance(entry, TextBlock): @@ -1100,6 +1137,12 @@ def DeleteLineFromTemplate(tmpl_list, # Delete the text before this newline (including the newline) entry.text = entry.text[i_char_newline+1:] break + # Invoke DeleteSelf() on the first variables on this line. This will + # insure that it is deleted from the ttree_assignments.txt file. + elif isinstance(entry, VarRef): + if first_var: + entry.nptr.leaf_node.DeleteSelf() + first_var = False i_next_newline += 1 del tmpl_list[i_prev_newline + 1 : i_next_newline] @@ -1132,9 +1175,9 @@ def DeleteLinesWithBadVars(tmpl_list, del tmpl_list[:] return 0 else: - i = DeleteLineFromTemplate(tmpl_list, - i, - newline_delimiter) + i = _DeleteLineFromTemplate(tmpl_list, + i, + newline_delimiter) else: i += 1 else: @@ -1143,6 +1186,319 @@ def DeleteLinesWithBadVars(tmpl_list, + + + +def SplitTemplate(ltmpl, delim, delete_blanks = False): + """ + Split a template "ltmpl" into a list of "tokens" (sub-templates) + using a single delimiter string "delim". + + INPUT arguments: + "ltmpl" should be an list of TextBlocks and VarRefs. + "delim" should be a simple string (type str) + "delete_blanks" should be a boolean True/False value. + When true, successive occurrences of the delimiter + should not create blank entries in the output list. + + OUTPUT: + A list of tokens. + Each "token" is either a TextBlock, a VarRef, + or a (flat, 1-dimensional) list containing more than one of these objects. + The number of "tokens" returned equals the number of times the delimiter + is encountered in any of the TextBlocks in the "ltmpl" argument, plus one. + (... Unless "delete_blanks" is set to True. + Again, in that case, empty entries in this list are deleted.) + + """ + assert(type(delim) is str) + if not hasattr(ltmpl, '__len__'): + ltmpl = [ltmpl] + + tokens_lltmpl = [] + token_ltmpl = [] + i = 0 + while i < len(ltmpl): + entry = ltmpl[i] + if isinstance(entry, TextBlock): + #if hasattr(entry, 'text'): + prev_src_loc = entry.srcloc + + tokens_str = entry.text.split(delim) + + lineno = entry.srcloc.lineno + + j = 0 + while j < len(tokens_str): + token_str = tokens_str[j] + + delim_found = False + if (j < len(tokens_str)-1): + delim_found = True + + if token_str == '': + if delete_blanks: + if delim == '\n': + lineno += 1 + if len(token_ltmpl) > 0: + if len(token_ltmpl) == 1: + tokens_lltmpl.append(token_ltmpl[0]) + else: + tokens_lltmpl.append(token_ltmpl) + del token_ltmpl + token_ltmpl = [] + j += 1 + continue + + new_src_loc = OSrcLoc(prev_src_loc.infile, lineno) + new_src_loc.order = prev_src_loc.order + + for c in token_str: + # Reminder to self: c != delim (so c!='\n' if delim='\n') + # (We keep track of '\n' characters in delimiters above.) + if c == '\n': + lineno +=1 + + new_src_loc.lineno = lineno + + text_block = TextBlock(token_str, + new_src_loc) + + prev_src_loc = new_src_loc + + if len(token_ltmpl) == 0: + if delim_found: + tokens_lltmpl.append(text_block) + del token_ltmpl + token_ltmpl = [] + else: + token_ltmpl.append(text_block) + else: + if delim_found: + if len(token_str) > 0: + token_ltmpl.append(text_block) + tokens_lltmpl.append(token_ltmpl) + del token_ltmpl + token_ltmpl = [] + else: + assert(not delete_blanks) + if (isinstance(token_ltmpl[-1], VarRef) + and + ((j>0) + or + ((j == len(tokens_str)-1) and + (i == len(ltmpl)-1)) + )): + # In that case, this empty token_str corresponds + # to a delimiter which was located immediately + # after the variable name, + # AND + # -there is more text to follow, + # OR + # -we are at the end of the template. + token_ltmpl.append(text_block) + if len(token_ltmpl) == 1: + tokens_lltmpl.append(token_ltmpl[0]) + else: + tokens_lltmpl.append(token_ltmpl) + del token_ltmpl + token_ltmpl = [] + else: + token_ltmpl.append(text_block) + + if (delim_found and (delim == '\n')): + lineno += 1 + + j += 1 + + elif isinstance(entry, VarRef): + #elif hasattr(entry, 'descr_str'): + lineno = entry.srcloc.lineno + if ((len(token_ltmpl) == 1) and + isinstance(token_ltmpl[0], TextBlock) and + (len(token_ltmpl[0].text) == 0)): + # special case: if the previous entry was "", then it means + # the delimeter appeared at the end of the previous text block + # leading up to this variable. It separates the variable from + # the previous text block. It is not a text block of length 0. + token_ltmpl[0] = entry + else: + token_ltmpl.append(entry) + elif entry == None: + token_ltmpl.append(entry) + else: + assert(False) + + i += 1 + + # Append left over remains of the last token + if len(token_ltmpl) == 1: + tokens_lltmpl.append(token_ltmpl[0]) + elif len(token_ltmpl) > 1: + tokens_lltmpl.append(token_ltmpl) + del token_ltmpl + + return tokens_lltmpl + + + + + + +def SplitTemplateMulti(ltmpl, delims, delete_blanks=False): + """ + Split a template "ltmpl" into a list of templates using a + single one or more delimiter strings "delim_list". + If multiple delimiter strings are provided, splitting + begins using the first delimiter string in the list. + Then each token in the resulting list of templates + is split using the next delimiter string + and so on until we run out of delimiter strings. + + "ltmpl" should be an list of TextBlocks and VarRefs. + "delims" should be a simple string (type str) or a list of strings + "delete_blanks" is either True or False + If True, then any blank entries in the resulting list of + tokens (sub-templates) will be deleted. + + """ + + if hasattr(delims, '__len__'): # then it hopefully is a list of strings + delim_list = delims + else: + delim_list = [delims] # then it hopefully is a string + + tokens = [ltmpl] + for delim in delim_list: + assert(type(delim) is str) + tokens_il = [] + for t in tokens: + sub_tokens = SplitTemplate(t, delim, delete_blanks) + for st in sub_tokens: + if hasattr(st, '__len__'): + if (len(st) > 0) or (not delete_blanks): + tokens_il.append(st) + else: + tokens_il.append(st) + tokens = tokens_il + del tokens_il + + return tokens + + + +def _TableFromTemplate(d, ltmpl, delimiters, delete_blanks): + """ + See the docstring for the TableFromTemplate() function for an explanation. + (This _TableFromTemplate() and SplitTemplate() are the workhorse functions + for TableFromTemplate().) + + """ + + output = SplitTemplateMulti(ltmpl, delimiters[d], delete_blanks[d]) + + if d > 0: + i = 0 + while i < len(output): + output[i] = _TableFromTemplate(d-1, + output[i], + delimiters, + delete_blanks) + # Delete empty LISTS? + if (delete_blanks[d] and + hasattr(output[i], '__len__') and + (len(output[i]) == 0)): + del output[i] + else: + i += 1 + + return output + + +def TableFromTemplate(ltmpl, delimiters, delete_blanks=True): + """ + This function can be used to split a template + (a list containing TextBlocks and VarRefs) into a table + into a multidimensional table, with an arbitrary number of dimensions. + + Arguments: + + ltmpl + + An alternating list of TextBlocks and VarRefs containing + the contents of this text template. + + delimiters + + The user must supply a list or tuple of delimiters: one delimiter for + each dimension in the table, with low-priority delimiters + (such as spaces ' ') appearing first, and higher-priority delimiters + (sich as newlines '\n') appearing later on in the list. + This function will divide the entire "ltmpl" into an n-dimensional + table. Initially the text is split into a list of text using the + highest-priority delimiter. Then each entry in the resulting list is + split into another list according to the next highest-priority delimiter. + This continues until all of the delimiters are used up and an + n-dimensional list-of-lists is remaining. + + delete_blanks + + The optional "delete_blanks" argument can be used to indicate whether + or not to delete blank entries in the table (which occur as a result + of placing two delimiters next to each other). It should be either + None (default), or it should be an array of booleans matching the + size of the "delimiters" argument. This allows the caller to customize + the merge settings separately for each dimension (for example: to allow + merging of whitespace within a line, without ignoring blank lines). + + + ---- Details: ---- + + 1) Multi-character delimiters ARE allowed (like '\n\n'). + + 2) If a delimiter in the "delimiters" argument is not a string + but is a tuple (or a list) of strings, then the text is split according + to any of the delimiters in that tuple/list (starting from the last entry). + This way, users can use this feature to split text according to multiple + different kinds of whitespace characters (such as ' ' and '\t'), for + example, buy setting delimiters[0] = (' ','\t'). If, additionally, + delete_blanks[0] == True, then this will cause this function to + divide text in without regard to whitespace on a given line (for example). + + Detailed example: + + table2D = TableFromTmplList(ltmpl, + delimiters = ((' ','\t'), '\n'), + delete_blanks = (True, False)) + + This divides text in a similar way that the "awk" program does by default, + ie, by ignoring various kinds of whitespace between text fields, but NOT + ignoring blank lines. + + 3) Any text contained in variable-names is ignored. + + """ + + # Make a copy of ltmpl + # (The workhorse function "_TableFromTemplate()" makes in-place changes to + # its "ltmpl" argument. I don't want to modify "ltmpl", so I make a copy + # of it before I invoke "_TableFromTemplate()" on it.) + + output = [ltmpl[i] for i in range(0, len(ltmpl))] + + d = len(delimiters) - 1 + output = _TableFromTemplate(d, output, delimiters, delete_blanks) + return output + + + + + + + + + + class TemplateLexer(TtreeShlex): """ This class extends the standard python lexing module, shlex, adding a new member function (ReadTemplate()), which can read in a block of raw text, @@ -1161,6 +1517,7 @@ class TemplateLexer(TtreeShlex): self.var_open_paren = '{' #optional parenthesis surround a variable self.var_close_paren = '}' #optional parenthesis surround a variable self.newline = '\n' + self.comment_skip_var = '#' # Which characters belong in words? # @@ -1201,7 +1558,7 @@ class TemplateLexer(TtreeShlex): self.escape + \ self.commenters # Note: - # self.whitespace = ' \t\r\n' + # self.whitespace = ' \t\r\f\n' # self.quotes = '\'"' # self.escape = '\\' # self.commenters = '#' @@ -1301,6 +1658,7 @@ class TemplateLexer(TtreeShlex): prev_char_delim=False #True iff we just read a var_delim character like '$' escaped_state=False #True iff we just read a (non-escaped) esc character '\' + commented_state=False #True iff we are in a region of text where vars should be ignored var_paren_depth=0 # This is non-zero iff we are inside a # bracketed variable's name for example: "${var}" var_terminators = self.whitespace + self.newline + self.var_delim + '{}' @@ -1326,20 +1684,24 @@ class TemplateLexer(TtreeShlex): terminate_var = False #delete_prior_escape = False - next_char = self.instream.read(1) + nextchar = self.read_char() - #print(' ReadTemplate() next_char=\''+next_char+'\' at '+self.error_leader()+' esc='+str(escaped_state)+', pvar='+str(prev_char_delim)+', paren='+str(var_paren_depth)) - + #print(' ReadTemplate() nextchar=\''+nextchar+'\' at '+self.error_leader()+' esc='+str(escaped_state)+', pvar='+str(prev_char_delim)+', paren='+str(var_paren_depth)) # Count newlines: - if next_char in self.newline: + if nextchar in self.newline: + commented_state = False self.lineno += 1 + elif ((nextchar in self.comment_skip_var) and + (not escaped_state)): + commented_state = True + # Check for end-of-file: - if next_char == '': + if nextchar == '': if escaped_state: raise InputError('Error: in '+self.error_leader()+'\n\n' @@ -1366,32 +1728,32 @@ class TemplateLexer(TtreeShlex): elif reading_var: - if next_char in terminators: + if nextchar in terminators: #sys.stdout.write(' ReadTemplate() readmode found terminator.\n') if escaped_state: # In this case, the '\' char was only to prevent terminating # string prematurely, so delete the '\' character. #delete_prior_escape = True - if not (next_char in self.var_close_paren): + if not (nextchar in self.var_close_paren): del var_descr_plist[-1] - var_descr_plist.append(next_char) + var_descr_plist.append(nextchar) - elif not ((var_paren_depth>0) and (next_char in self.var_close_paren)): + elif not ((var_paren_depth>0) and (nextchar in self.var_close_paren)): terminate_var = True done_reading = True - if next_char in self.var_open_paren: # eg: next_char == '{' + if nextchar in self.var_open_paren: # eg: nextchar == '{' #sys.stdout.write(' ReadTemplate() readmode found {.\n') if escaped_state: # In this case, the '\' char was only to prevent # interpreting '{' as a variable prefix #delete_prior_escape=True # so delete the '\' character del var_descr_plist[-1] - var_descr_plist.append(next_char) + var_descr_plist.append(nextchar) else: # "${var}" is a valid way to refer to a variable if prev_char_delim: - var_prefix += next_char + var_prefix += nextchar var_paren_depth = 1 # "${{var}}" is also a valid way to refer to a variable, # (although strange), but "$va{r}" is not. @@ -1400,47 +1762,47 @@ class TemplateLexer(TtreeShlex): elif var_paren_depth > 0: var_paren_depth += 1 - elif next_char in self.var_close_paren: + elif nextchar in self.var_close_paren: #sys.stdout.write(' ReadTemplate() readmode found }.\n') if escaped_state: # In this case, the '\' char was only to prevent # interpreting '}' as a variable suffix, #delete_prior_escape=True #so skip the '\' character - if (next_char not in terminators): + if (nextchar not in terminators): del var_descr_plist[-1] - var_descr_plist.append(next_char) + var_descr_plist.append(nextchar) else: if var_paren_depth > 0: var_paren_depth -= 1 if var_paren_depth == 0: - var_suffix = next_char + var_suffix = nextchar terminate_var = True - elif next_char in var_terminators: - #sys.stdout.write(' ReadTemplate() readmode found var_terminator \"'+next_char+'\"\n') + elif nextchar in var_terminators: + #sys.stdout.write(' ReadTemplate() readmode found var_terminator \"'+nextchar+'\"\n') if (escaped_state or (var_paren_depth>0)): # In this case, the '\' char was only to prevent - # interpreting next_char as a variable terminator + # interpreting nextchar as a variable terminator #delete_prior_escape = True # so skip the '\' character del var_descr_plist[-1] - var_descr_plist.append(next_char) + var_descr_plist.append(nextchar) else: terminate_var = True - elif next_char in self.var_delim: # such as '$' + elif nextchar in self.var_delim: # such as '$' #sys.stdout.write(' ReadTemplate() readmode found var_delim.\n') if escaped_state: # In this case, the '\' char was only to prevent # interpreting '$' as a new variable name #delete_prior_escape = True # so skip the '\' character del var_descr_plist[-1] - var_descr_plist.append(next_char) + var_descr_plist.append(nextchar) else: prev_var_delim = True # Then we are processing a new variable name terminate_var = True else: - var_descr_plist.append(next_char) + var_descr_plist.append(nextchar) prev_char_delim = False @@ -1448,39 +1810,43 @@ class TemplateLexer(TtreeShlex): # Then we are reading a text_block - if next_char in terminators: + if nextchar in terminators: if escaped_state: # In this case, the '\' char was only to prevent terminating # string prematurely, so delete the '\' character. #delete_prior_escape = True del text_block_plist[-1] - text_block_plist.append(next_char) + text_block_plist.append(nextchar) + elif commented_state: + text_block_plist.append(nextchar) else: terminate_text = True done_reading = True - elif next_char in self.var_delim: # such as '$' + elif nextchar in self.var_delim: # such as '$' if escaped_state: # In this case, the '\' char was only to prevent # interpreting '$' as a variable prefix. #delete_prior_escape=True #so delete the '\' character del text_block_plist[-1] - text_block_plist.append(next_char) + text_block_plist.append(nextchar) + elif commented_state: + text_block_plist.append(nextchar) else: prev_char_delim = True reading_var = True var_paren_depth = 0 terminate_text = True else: - text_block_plist.append(next_char) + text_block_plist.append(nextchar) #TO DO: use "list_of_chars.join()" instead of '+=' prev_char_delim = False # the previous character was not '$' # Now deal with "other_esc_chars" - #if escaped_state and (next_char in other_esc_chars): + #if escaped_state and (nextchar in other_esc_chars): - if escaped_state and (next_char in other_esc_chars): + if escaped_state and (nextchar in other_esc_chars): if reading_var: #sys.stdout.write(' ReadTemplate: var_descr_str=\''+''.join(var_descr_plist)+'\'\n') assert(var_descr_plist[-2] in self.escape) @@ -1503,13 +1869,13 @@ class TemplateLexer(TtreeShlex): tmpl_list.append(''.join(text_block_plist)) else: tmpl_list.append(TextBlock(''.join(text_block_plist), - OSrcLoc(prev_filename, prev_lineno), - OSrcLoc(self.infile, self.lineno))) + OSrcLoc(prev_filename, prev_lineno))) + #, OSrcLoc(self.infile, self.lineno))) if not done_reading: # The character that ended the text block # was a variable delimiter (like '$'), in which case - # we should put it (next_char) in the variable's prefix. - var_prefix = next_char + # we should put it (nextchar) in the variable's prefix. + var_prefix = nextchar else: var_prefix = '' var_descr_plist = [] @@ -1525,10 +1891,10 @@ class TemplateLexer(TtreeShlex): # Print an error if we terminated in the middle of # an incomplete variable name: if prev_char_delim: - raise InputError('Error: in '+self.error_leader()+'\n\n' + raise InputError('Error: near '+self.error_leader()+'\n\n' 'Null variable name.') if var_paren_depth > 0: - raise InputError('Error: in '+self.error_leader()+'\n\n' + raise InputError('Error: near '+self.error_leader()+'\n\n' 'Incomplete bracketed variable name.') var_descr_str = ''.join(var_descr_plist) @@ -1575,18 +1941,18 @@ class TemplateLexer(TtreeShlex): var_prefix = '' var_descr_plist = [] var_suffix = '' - # Special case: Variable delimeters like '$' + # Special case: Variable delimiters like '$' # terminate the reading of variables, # but they also signify that a new # variable is being read. - if next_char in self.var_delim: + if nextchar in self.var_delim: # Then we are processing a new variable name prev_var_delim = True reading_var = True var_paren_depth = 0 - var_prefix = next_char + var_prefix = nextchar - elif next_char in self.var_close_paren: + elif nextchar in self.var_close_paren: del text_block_plist text_block_plist = [] #gc.collect() @@ -1599,7 +1965,7 @@ class TemplateLexer(TtreeShlex): # caused us to stop reading the previous variable and append # it to the block of text that comes after. del text_block_plist - text_block_plist = [next_char] + text_block_plist = [nextchar] #gc.collect() prev_var_delim = False reading_var = False @@ -1609,23 +1975,24 @@ class TemplateLexer(TtreeShlex): # then the terminal character can be included in the list # of text_blocks to be returned to the caller. if done_reading and keep_terminal_char: - #sys.stdout.write('ReadTemplate() appending: \''+next_char+'\'\n') + #sys.stdout.write('ReadTemplate() appending: \''+nextchar+'\'\n') # Here we create a new text block which contains only the - # terminal character (next_char). - #tmpl_list.append( [next_char, + # terminal character (nextchar). + #tmpl_list.append( [nextchar, # ((self.infile, self.lineno), # (self.infile, self.lineno))] ) if simplify_output: - tmpl_list.append(next_char) + tmpl_list.append(nextchar) else: - tmpl_list.append(TextBlock(next_char, - OSrcLoc(self.infile, self.lineno), + tmpl_list.append(TextBlock(nextchar, OSrcLoc(self.infile, self.lineno))) + #, OSrcLoc(self.infile, self.lineno))) + if escaped_state: escaped_state = False else: - if next_char in self.escape: + if nextchar in self.escape: escaped_state = True #print("*** TMPL_LIST0 = ***", tmpl_list) diff --git a/tools/moltemplate/src/ttree_render.py b/tools/moltemplate/src/ttree_render.py index da7a385a7a..11f3406ab6 100755 --- a/tools/moltemplate/src/ttree_render.py +++ b/tools/moltemplate/src/ttree_render.py @@ -21,13 +21,13 @@ from ttree import * import gc -g_file_name = __file__.split('/')[-1] -g_module_name = g_file_name -if g_file_name.rfind('.py') != -1: - g_module_name = g_file_name[:g_file_name.rfind('.py')] +g_filename = __file__.split('/')[-1] +g_module_name = g_filename +if g_filename.rfind('.py') != -1: + g_module_name = g_filename[:g_filename.rfind('.py')] g_date_str = '2012-9-06' g_version_str = '0.1' -g_program_name = g_file_name +g_program_name = g_filename #sys.stderr.write(g_program_name+' v'+g_version_str+' '+g_date_str+' ') @@ -45,18 +45,18 @@ try: ' (This is likely a programmer error.\n' ' This script was not intended to be run by end users.)\n') - bindings_file_name = sys.argv[1] - f = open(bindings_file_name) + bindings_filename = sys.argv[1] + f = open(bindings_filename) assignments = {} - #BasicUIReadBindingsStream(assignments, f, bindings_file_name) + #BasicUIReadBindingsStream(assignments, f, bindings_filename) # The line above is robust but it uses far too much memory. # This for loop below works for most cases. for line in f: #tokens = lines.strip().split() tokens = SplitQuotedString(line.strip()) # like split but handles quotes - if len(tokens) != 2: + if len(tokens) < 2: continue assignments[tokens[0]] = tokens[1] @@ -84,9 +84,9 @@ try: var_name = entry if var_name not in assignments: - raise(InputError('Error at '+ - ErrorLeader(var_ref.src_loc.infile, - var_ref.src_loc.lineno)+ + raise(InputError('Error('+g_program_name+')' + #' at '+ErrorLeader(var_ref.src_loc.infile, + # var_ref.src_loc.lineno)+ ' unknown variable:\n' ' \"'+var_name+'\"\n')) else: From b73919c94ec7910528593de6a628cc6f9e03216c Mon Sep 17 00:00:00 2001 From: sjplimp Date: Wed, 2 Jan 2013 16:40:03 +0000 Subject: [PATCH 07/61] git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@9180 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- tools/moltemplate/src/lttree_postprocess.py | 326 ++++++++++++++++++++ 1 file changed, 326 insertions(+) create mode 100755 tools/moltemplate/src/lttree_postprocess.py diff --git a/tools/moltemplate/src/lttree_postprocess.py b/tools/moltemplate/src/lttree_postprocess.py new file mode 100755 index 0000000000..bb040c98a1 --- /dev/null +++ b/tools/moltemplate/src/lttree_postprocess.py @@ -0,0 +1,326 @@ +#!/usr/bin/env python + +""" + lttree_postprocess.py + This is a stand-alone python script which checks the files created by + lttree.py to insure that the standard instance-variables ($variables) + have all been defined. This script performs a task which is very similar + to the task performed by lttree_check.py. This script attempts to detect + mistakes in the names of $atom, $bond, $angle, $dihedral, $improper, & $mol + variables. + +""" + +import sys +from lttree_styles import * +from ttree_lex import ExtractCatName + +g_program_name = 'lttree_postprocess.py' +atom_style = 'full' +ttree_assignments_fname = 'ttree_assignments.txt' +defined_mols = set([]) +defined_atoms = set([]) +defined_bonds = set([]) +defined_angles = set([]) +defined_dihedrals = set([]) +defined_impropers = set([]) + +g_no_check_msg = \ + '(To override this error, run moltemplate using the \"-nocheck\" argument.)\n' + +if len(sys.argv) > 1: + for i in range(0,len(sys.argv)): + if ((sys.argv[i].lower() == '-atomstyle') or + (sys.argv[i].lower() == '-atom-style') or + (sys.argv[i].lower() == '-atom_style')): + if i+1 >= len(sys.argv): + raise InputError('Error('+g_program_name+'): The '+sys.argv[i]+' flag should be followed by a LAMMPS\n' + ' atom_style name (or single quoted string containing a space-separated\n' + ' list of column names such as: atom-ID atom-type q x y z molecule-ID.)\n') + + atom_style = sys.argv[i+1] + elif ((sys.argv[i].lower() == '-ttreeassignments') or + (sys.argv[i].lower() == '-ttree-assignments') or + (sys.argv[i].lower() == '-ttree_assignments')): + if i+1 >= len(sys.argv): + raise InputError('Error('+g_program_name+'): The '+sys.argv[i]+' flag should be followed by \n' + ' a file containing the variable bindings created by ttree/moltemplate.\n') + ttree_assignments_fname = sys.argv[i+1] + else: + pass # ignore other arguments (they are intended for lttree.py) + + +atom_column_names = AtomStyle2ColNames(atom_style) +i_atomid = 0 +i_molid = -1 +for i in range(0,len(atom_column_names)): + if atom_column_names[i].lower() == 'atom-id': + i_atomid = i + elif atom_column_names[i].lower() == 'molecule-id': + i_molid = i +i_max_column = max(i_atomid, i_molid) + + +# The following variables are defined in "lttree_styles.py" +#data_atoms="Data Atoms" +#data_masses="Data Masses" +#data_velocities="Data Velocities" +#data_bonds="Data Bonds" +#data_angles="Data Angles" +#data_dihedrals="Data Dihedrals" +#data_impropers="Data Impropers" + + +g_program_name = 'lttree_postprocess.py' +g_version_str = '0.4' +g_date_str = '2012-12-12' +sys.stderr.write(g_program_name+' v'+g_version_str+' '+g_date_str+'\n') + +try: + # ------------ defined_atoms ------------ + try: + f = open(data_atoms+'.template', 'r') + except: + raise InputError('Error('+g_program_name+'): Unable to open file\n'+ + '\"'+data_atoms+'.template\"\n' + ' for reading. (Do your files lack a \"'+data_atoms+'\" section?)\n' + +g_no_check_msg+'\n') + + for line_orig in f: + ic = line_orig.find('#') + if ic != -1: + line = line_orig[:ic] + else: + line = line_orig.rstrip('\n') + + tokens = line.strip().split() + if len(tokens) == 0: + pass + elif len(tokens) <= i_max_column: + raise InputError('Error('+g_program_name+'): The following line from\n' + ' "\"'+data_atoms+'.template\" has bad format:\n\n' + +line_orig+'\n' + ' This my probably an internal error. (Feel free to contact the developer.)\n' + +g_no_check_msg+'\n') + else: + defined_atoms.add(tokens[i_atomid]) + if i_molid != -1: + defined_mols.add(tokens[i_molid]) + + f.close() + + + # ------------ defined_bonds ------------ + try: + f = open(data_bonds+'.template', 'r') + + for line_orig in f: + ic = line_orig.find('#') + if ic != -1: + line = line_orig[:ic] + else: + line = line_orig.rstrip('\n') + + tokens = line.strip().split() + if len(tokens) == 0: + pass + elif len(tokens) < 4: + raise InputError('Error('+g_program_name+'): The following line from\n' + ' "\"'+data_bonds+'.template\" has bad format:\n\n' + +line_orig+'\n' + ' This my probably an internal error. (Feel free to contact the developer.)\n' + +g_no_check_msg+'\n') + else: + defined_bonds.add(tokens[0]) + f.close() + except: + pass # Defining bonds (stored in the data_bonds file) is optional + + + # ------------ defined_angles ------------ + try: + f = open(data_angles+'.template', 'r') + for line_orig in f: + ic = line_orig.find('#') + if ic != -1: + line = line_orig[:ic] + else: + line = line_orig.rstrip('\n') + + tokens = line.strip().split() + if len(tokens) == 0: + pass + elif len(tokens) < 5: + raise InputError('Error('+g_program_name+'): The following line from\n' + ' "\"'+data_angles+'.template\" has bad format:\n\n' + +line_orig+'\n' + ' This my probably an internal error. (Feel free to contact the developer.)\n' + +g_no_check_msg+'\n') + else: + defined_angles.add(tokens[0]) + f.close() + except: + pass # Defining angles (stored in the data_angles file) is optional + + + # ------------ defined_dihedrals ------------ + try: + f = open(data_dihedrals+'.template', 'r') + for line_orig in f: + ic = line_orig.find('#') + if ic != -1: + line = line_orig[:ic] + else: + line = line_orig.rstrip('\n') + + tokens = line.strip().split() + if len(tokens) == 0: + pass + elif len(tokens) < 6: + raise InputError('Error('+g_program_name+'): The following line from\n' + ' "\"'+data_dihedrals+'.template\" has bad format:\n\n' + +line_orig+'\n' + ' This my probably an internal error. (Feel free to contact the developer.)\n' + +g_no_check_msg+'\n') + else: + defined_dihedrals.add(tokens[0]) + f.close() + except: + pass #Defining dihedrals (stored in the data_dihedrals file) is optional + + + # ------------ defined_impropers ------------ + try: + f = open(data_impropers+'.template', 'r') + + for line_orig in f: + ic = line_orig.find('#') + if ic != -1: + line = line_orig[:ic] + else: + line = line_orig.rstrip('\n') + + tokens = line.strip().split() + if len(tokens) == 0: + pass + elif len(tokens) < 6: + raise InputError('Error('+g_program_name+'): The following line from\n' + ' "\"'+data_impropers+'.template\" has bad format:\n\n' + +line_orig+'\n' + ' This my probably an internal error. (Feel free to contact the developer.)\n' + +g_no_check_msg+'\n') + else: + defined_impropers.add(tokens[0]) + f.close() + except: + pass #Defining impropers (stored in the data_impropers file) is optional + + + + + # ---- Check ttree_assignments to make sure variables are defined ---- + + try: + f = open(ttree_assignments_fname, 'r') + except: + raise InputError('Error('+g_program_name+'): Unable to open file\n'+ + '\"'+ttree_assignments_fname+'\"\n' + ' for reading. (Do your files lack a \"'+data_atoms+'\" section?)\n' + +g_no_check_msg+'\n') + + for line_orig in f: + + ic = line_orig.find('#') + if ic != -1: + line = line_orig[:ic] + usage_location_str = 'near ' + line_orig[ic+1:] + else: + line = line_orig.rstrip('\n') + usage_location_str = '' + + tokens = line.strip().split() + if len(tokens) == 0: + pass + if len(tokens) > 0: + # This file contains a list of variables of the form: + # + # @/atom:MoleculeType1:C 1 + # @/atom:MoleculeType2:N 2 + # : + # $/atom:molecule1141:C2 13578 + # $/atom:molecule1142:N1 13579 + # + # We only care about instance variables (which use the '$' prefix) + # Lines in this file with a different prefix ('@') which don't + # contain '$' should be ignored. + i_prefix = tokens[0].find('$') + if i_prefix != -1: + descr_str = tokens[0][i_prefix+1:] + cat_name = ExtractCatName(descr_str) + + if ((cat_name == 'atom') and + (tokens[0] not in defined_atoms)): + raise InputError('Error('+g_program_name+'): '+usage_location_str+'\n'+ + ' Reference to undefined $atom:\n\n' + ' '+tokens[0]+' (<--full name)\n\n'+ + ' (If that atom belongs to a molecule (or other subunit), make sure that\n'+ + ' you specified the correct path which leads to it (using / and ..))\n\n'+ + g_no_check_msg) + + elif ((cat_name == 'bond') and + (tokens[0] not in defined_bonds)): + raise InputError('Error('+g_program_name+'): '+usage_location_str+'\n'+ + ' Reference to undefined $bond:\n\n' + ' '+tokens[0]+' (<--full name)\n\n'+ + ' (If that bond belongs to a molecule (or other subunit), make sure that\n'+ + ' you specified the correct path which leads to it (using / and ..))\n\n'+ + g_no_check_msg) + + elif ((cat_name == 'angle') and + (tokens[0] not in defined_angles)): + raise InputError('Error('+g_program_name+'): '+usage_location_str+'\n'+ + ' Reference to undefined $angle:\n\n'+ + ' '+tokens[0]+' (<--full name)\n\n'+ + ' (If that angle belongs to a molecule (or other subunit), make sure that\n'+ + ' you specified the correct path which leads to it (using / and ..))\n\n'+ + g_no_check_msg) + + elif ((cat_name == 'dihedral') and + (tokens[0] not in defined_dihedrals)): + raise InputError('Error('+g_program_name+'): '+usage_location_str+'\n\n'+ + ' Reference to undefined $dihedral:\n\n' + ' '+tokens[0]+' (<--full name)\n\n'+ + ' (If that dihedral belongs to a molecule (or other subunit), make sure that\n'+ + ' you specified the correct path which leads to it (using / and ..))\n\n'+ + g_no_check_msg) + + elif ((cat_name == 'improper') and + (tokens[0] not in defined_impropers)): + raise InputError('Error('+g_program_name+'): '+usage_location_str+'\n'+ + ' Reference to undefined $improper:\n\n' + ' '+tokens[0]+' (<--full name)\n\n'+ + ' (If that improper belongs to a molecule (or other subunit), make sure that\n'+ + ' you specified the correct path which leads to it (using / and ..))\n\n'+ + g_no_check_msg) + + elif ((cat_name == 'mol') and + (tokens[0] not in defined_mols)): + raise InputError('Error('+g_program_name+'): '+usage_location_str+'\n'+ + ' Reference to undefined $mol (molecule-ID) variable:\n\n' + ' '+tokens[0]+' (<--full name)\n\n'+ + ' (If that molecule is part of a larger molecule, then make sure that\n'+ + ' you specified the correct path which leads to it (using / and ..))\n\n'+ + g_no_check_msg) + + + f.close() + + sys.stderr.write(g_program_name+': -- No errors detected. --\n') + exit(0) + + + +except (ValueError, InputError) as err: + sys.stderr.write('\n'+str(err)+'\n') + sys.exit(1) + From f4cc8c35bb0c70bcf41f45719a740dde5c55b11f Mon Sep 17 00:00:00 2001 From: sjplimp Date: Wed, 2 Jan 2013 16:43:52 +0000 Subject: [PATCH 08/61] git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@9181 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- src/version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/version.h b/src/version.h index 2b75b2b609..dd7c02ca68 100644 --- a/src/version.h +++ b/src/version.h @@ -1 +1 @@ -#define LAMMPS_VERSION "2 Jan 2013" +#define LAMMPS_VERSION "3 Jan 2013" From 5b9c57e43813237554b2a293832d42dd7a06ac96 Mon Sep 17 00:00:00 2001 From: sjplimp Date: Wed, 2 Jan 2013 16:45:47 +0000 Subject: [PATCH 09/61] git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@9183 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- tools/eff/lmp2xyz.py | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/tools/eff/lmp2xyz.py b/tools/eff/lmp2xyz.py index 8fa9660ec1..c41b48b6d3 100644 --- a/tools/eff/lmp2xyz.py +++ b/tools/eff/lmp2xyz.py @@ -57,14 +57,15 @@ def lmp2xyz(lammps,xyz,xpos): countsnap=1 if data!='n': coords={} else: coords=zeros((int(numatoms),4),dtype=float) - sys.stdout.write("Writing [%d]: "%(snaps)) - sys.stdout.flush() +# sys.stdout.write("Writing %d snapshots\n"%(snaps)) +# sys.stdout.flush() read_atoms=0 + types={} for line in lines: if line.find('ITEM: TIMESTEP')==0: read_atom_flag=False - sys.stdout.write("%d "%(countsnap)) - sys.stdout.flush() +# sys.stdout.write("%d "%(countsnap)) +# sys.stdout.flush() fout.writelines("%s\nAtoms\n"%(numatoms)) countsnap+=1 continue @@ -75,13 +76,11 @@ def lmp2xyz(lammps,xyz,xpos): read_atoms+=1 parse=line.split() if parse[0]!="": -# print [mass_floor[int(floor(mass[int(parse[1])-1]))],float(parse[xpos-1]),float(parse[xpos]),float(parse[xpos+1])] if data!='n': - if mass[int(parse[1])-1]==1.0: - type='Au' - else: - type=mass_floor[int(floor(mass[int(parse[1])-1]))] - coords[int(parse[0])-1]=[type,float(parse[xpos-1]),float(parse[xpos]),float(parse[xpos+1])] + if parse[1] not in types.keys(): + type=raw_input("Atom name for type %s: "%parse[1]) + types[parse[1]]=type + coords[int(parse[0])-1]=[types[parse[1]],float(parse[xpos-1]),float(parse[xpos]),float(parse[xpos+1])] else: coords[int(parse[0])-1][0]=int(parse[1]) coords[int(parse[0])-1][1]=float(parse[xpos-1]) From a69bbed0b75cea8ecf3598242cabe922b3875e8d Mon Sep 17 00:00:00 2001 From: sjplimp Date: Wed, 2 Jan 2013 16:48:13 +0000 Subject: [PATCH 10/61] git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@9184 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- examples/USER/eff/ECP/Si2H6/data.Si2H6 | 2 +- examples/USER/eff/ECP/Si2H6/in.Si2H6 | 2 +- examples/USER/eff/ECP/SiC/bulk/data.SiC | 5018 +++++++++++++++++++++++ examples/USER/eff/ECP/SiC/bulk/in.SiC | 41 + examples/USER/eff/ECP/SiH4/data.SiH4 | 2 +- examples/USER/eff/ECP/SiH4/in.SiH4 | 2 +- examples/USER/eff/ECP/SiH4/in.SiH4.ang | 2 +- 7 files changed, 5064 insertions(+), 5 deletions(-) create mode 100644 examples/USER/eff/ECP/SiC/bulk/data.SiC create mode 100644 examples/USER/eff/ECP/SiC/bulk/in.SiC diff --git a/examples/USER/eff/ECP/Si2H6/data.Si2H6 b/examples/USER/eff/ECP/Si2H6/data.Si2H6 index c95a14c048..59ab24c1fd 100644 --- a/examples/USER/eff/ECP/Si2H6/data.Si2H6 +++ b/examples/USER/eff/ECP/Si2H6/data.Si2H6 @@ -9,7 +9,7 @@ Created using cfg2lammps (c) AJB-2009 Masses -1 9.012182 +1 28.086589324618736 2 1.007940 3 1.000000 diff --git a/examples/USER/eff/ECP/Si2H6/in.Si2H6 b/examples/USER/eff/ECP/Si2H6/in.Si2H6 index f17e2fd5c5..6e39497399 100644 --- a/examples/USER/eff/ECP/Si2H6/in.Si2H6 +++ b/examples/USER/eff/ECP/Si2H6/in.Si2H6 @@ -14,7 +14,7 @@ atom_style electron read_data data.${sname} -pair_style eff/cut 1000.0 +pair_style eff/cut 1000.0 ecp 1 Si pair_coeff * * compute energies all pair eff/cut diff --git a/examples/USER/eff/ECP/SiC/bulk/data.SiC b/examples/USER/eff/ECP/SiC/bulk/data.SiC new file mode 100644 index 0000000000..dc8a3eb907 --- /dev/null +++ b/examples/USER/eff/ECP/SiC/bulk/data.SiC @@ -0,0 +1,5018 @@ +5 x 5 x 5 Supercell of SiC diamond structure with lattice parameter of 4.349835 Angstrom + +5000 atoms +3 atom types + +0.000000 41.100000 xlo xhi +0.000000 41.100000 ylo yhi +0.000000 41.100000 zlo zhi + +Masses + +1 28.085500 +2 12.010700 +3 1.000000 + +Atoms + + 1 1 4.0 3 1.691398 0.0000000000 0.0000000000 0.0000000000 + 2 1 4.0 3 1.691398 0.0000000000 4.1100000000 4.1100000000 + 3 1 4.0 3 1.691398 4.1100000000 0.0000000000 4.1100000000 + 4 1 4.0 3 1.691398 4.1100000000 4.1100000000 0.0000000000 + 5 1 4.0 3 1.691398 0.0000000000 0.0000000000 8.2200000000 + 6 1 4.0 3 1.691398 0.0000000000 4.1100000000 12.3300000000 + 7 1 4.0 3 1.691398 4.1100000000 0.0000000000 12.3300000000 + 8 1 4.0 3 1.691398 4.1100000000 4.1100000000 8.2200000000 + 9 1 4.0 3 1.691398 0.0000000000 0.0000000000 16.4400000000 + 10 1 4.0 3 1.691398 0.0000000000 4.1100000000 20.5500000000 + 11 1 4.0 3 1.691398 4.1100000000 0.0000000000 20.5500000000 + 12 1 4.0 3 1.691398 4.1100000000 4.1100000000 16.4400000000 + 13 1 4.0 3 1.691398 0.0000000000 0.0000000000 24.6600000000 + 14 1 4.0 3 1.691398 0.0000000000 4.1100000000 28.7700000000 + 15 1 4.0 3 1.691398 4.1100000000 0.0000000000 28.7700000000 + 16 1 4.0 3 1.691398 4.1100000000 4.1100000000 24.6600000000 + 17 1 4.0 3 1.691398 0.0000000000 0.0000000000 32.8800000000 + 18 1 4.0 3 1.691398 0.0000000000 4.1100000000 36.9900000000 + 19 1 4.0 3 1.691398 4.1100000000 0.0000000000 36.9900000000 + 20 1 4.0 3 1.691398 4.1100000000 4.1100000000 32.8800000000 + 21 1 4.0 3 1.691398 0.0000000000 8.2200000000 0.0000000000 + 22 1 4.0 3 1.691398 0.0000000000 12.3300000000 4.1100000000 + 23 1 4.0 3 1.691398 4.1100000000 8.2200000000 4.1100000000 + 24 1 4.0 3 1.691398 4.1100000000 12.3300000000 0.0000000000 + 25 1 4.0 3 1.691398 0.0000000000 8.2200000000 8.2200000000 + 26 1 4.0 3 1.691398 0.0000000000 12.3300000000 12.3300000000 + 27 1 4.0 3 1.691398 4.1100000000 8.2200000000 12.3300000000 + 28 1 4.0 3 1.691398 4.1100000000 12.3300000000 8.2200000000 + 29 1 4.0 3 1.691398 0.0000000000 8.2200000000 16.4400000000 + 30 1 4.0 3 1.691398 0.0000000000 12.3300000000 20.5500000000 + 31 1 4.0 3 1.691398 4.1100000000 8.2200000000 20.5500000000 + 32 1 4.0 3 1.691398 4.1100000000 12.3300000000 16.4400000000 + 33 1 4.0 3 1.691398 0.0000000000 8.2200000000 24.6600000000 + 34 1 4.0 3 1.691398 0.0000000000 12.3300000000 28.7700000000 + 35 1 4.0 3 1.691398 4.1100000000 8.2200000000 28.7700000000 + 36 1 4.0 3 1.691398 4.1100000000 12.3300000000 24.6600000000 + 37 1 4.0 3 1.691398 0.0000000000 8.2200000000 32.8800000000 + 38 1 4.0 3 1.691398 0.0000000000 12.3300000000 36.9900000000 + 39 1 4.0 3 1.691398 4.1100000000 8.2200000000 36.9900000000 + 40 1 4.0 3 1.691398 4.1100000000 12.3300000000 32.8800000000 + 41 1 4.0 3 1.691398 0.0000000000 16.4400000000 0.0000000000 + 42 1 4.0 3 1.691398 0.0000000000 20.5500000000 4.1100000000 + 43 1 4.0 3 1.691398 4.1100000000 16.4400000000 4.1100000000 + 44 1 4.0 3 1.691398 4.1100000000 20.5500000000 0.0000000000 + 45 1 4.0 3 1.691398 0.0000000000 16.4400000000 8.2200000000 + 46 1 4.0 3 1.691398 0.0000000000 20.5500000000 12.3300000000 + 47 1 4.0 3 1.691398 4.1100000000 16.4400000000 12.3300000000 + 48 1 4.0 3 1.691398 4.1100000000 20.5500000000 8.2200000000 + 49 1 4.0 3 1.691398 0.0000000000 16.4400000000 16.4400000000 + 50 1 4.0 3 1.691398 0.0000000000 20.5500000000 20.5500000000 + 51 1 4.0 3 1.691398 4.1100000000 16.4400000000 20.5500000000 + 52 1 4.0 3 1.691398 4.1100000000 20.5500000000 16.4400000000 + 53 1 4.0 3 1.691398 0.0000000000 16.4400000000 24.6600000000 + 54 1 4.0 3 1.691398 0.0000000000 20.5500000000 28.7700000000 + 55 1 4.0 3 1.691398 4.1100000000 16.4400000000 28.7700000000 + 56 1 4.0 3 1.691398 4.1100000000 20.5500000000 24.6600000000 + 57 1 4.0 3 1.691398 0.0000000000 16.4400000000 32.8800000000 + 58 1 4.0 3 1.691398 0.0000000000 20.5500000000 36.9900000000 + 59 1 4.0 3 1.691398 4.1100000000 16.4400000000 36.9900000000 + 60 1 4.0 3 1.691398 4.1100000000 20.5500000000 32.8800000000 + 61 1 4.0 3 1.691398 0.0000000000 24.6600000000 0.0000000000 + 62 1 4.0 3 1.691398 0.0000000000 28.7700000000 4.1100000000 + 63 1 4.0 3 1.691398 4.1100000000 24.6600000000 4.1100000000 + 64 1 4.0 3 1.691398 4.1100000000 28.7700000000 0.0000000000 + 65 1 4.0 3 1.691398 0.0000000000 24.6600000000 8.2200000000 + 66 1 4.0 3 1.691398 0.0000000000 28.7700000000 12.3300000000 + 67 1 4.0 3 1.691398 4.1100000000 24.6600000000 12.3300000000 + 68 1 4.0 3 1.691398 4.1100000000 28.7700000000 8.2200000000 + 69 1 4.0 3 1.691398 0.0000000000 24.6600000000 16.4400000000 + 70 1 4.0 3 1.691398 0.0000000000 28.7700000000 20.5500000000 + 71 1 4.0 3 1.691398 4.1100000000 24.6600000000 20.5500000000 + 72 1 4.0 3 1.691398 4.1100000000 28.7700000000 16.4400000000 + 73 1 4.0 3 1.691398 0.0000000000 24.6600000000 24.6600000000 + 74 1 4.0 3 1.691398 0.0000000000 28.7700000000 28.7700000000 + 75 1 4.0 3 1.691398 4.1100000000 24.6600000000 28.7700000000 + 76 1 4.0 3 1.691398 4.1100000000 28.7700000000 24.6600000000 + 77 1 4.0 3 1.691398 0.0000000000 24.6600000000 32.8800000000 + 78 1 4.0 3 1.691398 0.0000000000 28.7700000000 36.9900000000 + 79 1 4.0 3 1.691398 4.1100000000 24.6600000000 36.9900000000 + 80 1 4.0 3 1.691398 4.1100000000 28.7700000000 32.8800000000 + 81 1 4.0 3 1.691398 0.0000000000 32.8800000000 0.0000000000 + 82 1 4.0 3 1.691398 0.0000000000 36.9900000000 4.1100000000 + 83 1 4.0 3 1.691398 4.1100000000 32.8800000000 4.1100000000 + 84 1 4.0 3 1.691398 4.1100000000 36.9900000000 0.0000000000 + 85 1 4.0 3 1.691398 0.0000000000 32.8800000000 8.2200000000 + 86 1 4.0 3 1.691398 0.0000000000 36.9900000000 12.3300000000 + 87 1 4.0 3 1.691398 4.1100000000 32.8800000000 12.3300000000 + 88 1 4.0 3 1.691398 4.1100000000 36.9900000000 8.2200000000 + 89 1 4.0 3 1.691398 0.0000000000 32.8800000000 16.4400000000 + 90 1 4.0 3 1.691398 0.0000000000 36.9900000000 20.5500000000 + 91 1 4.0 3 1.691398 4.1100000000 32.8800000000 20.5500000000 + 92 1 4.0 3 1.691398 4.1100000000 36.9900000000 16.4400000000 + 93 1 4.0 3 1.691398 0.0000000000 32.8800000000 24.6600000000 + 94 1 4.0 3 1.691398 0.0000000000 36.9900000000 28.7700000000 + 95 1 4.0 3 1.691398 4.1100000000 32.8800000000 28.7700000000 + 96 1 4.0 3 1.691398 4.1100000000 36.9900000000 24.6600000000 + 97 1 4.0 3 1.691398 0.0000000000 32.8800000000 32.8800000000 + 98 1 4.0 3 1.691398 0.0000000000 36.9900000000 36.9900000000 + 99 1 4.0 3 1.691398 4.1100000000 32.8800000000 36.9900000000 + 100 1 4.0 3 1.691398 4.1100000000 36.9900000000 32.8800000000 + 101 1 4.0 3 1.691398 8.2200000000 0.0000000000 0.0000000000 + 102 1 4.0 3 1.691398 8.2200000000 4.1100000000 4.1100000000 + 103 1 4.0 3 1.691398 12.3300000000 0.0000000000 4.1100000000 + 104 1 4.0 3 1.691398 12.3300000000 4.1100000000 0.0000000000 + 105 1 4.0 3 1.691398 8.2200000000 0.0000000000 8.2200000000 + 106 1 4.0 3 1.691398 8.2200000000 4.1100000000 12.3300000000 + 107 1 4.0 3 1.691398 12.3300000000 0.0000000000 12.3300000000 + 108 1 4.0 3 1.691398 12.3300000000 4.1100000000 8.2200000000 + 109 1 4.0 3 1.691398 8.2200000000 0.0000000000 16.4400000000 + 110 1 4.0 3 1.691398 8.2200000000 4.1100000000 20.5500000000 + 111 1 4.0 3 1.691398 12.3300000000 0.0000000000 20.5500000000 + 112 1 4.0 3 1.691398 12.3300000000 4.1100000000 16.4400000000 + 113 1 4.0 3 1.691398 8.2200000000 0.0000000000 24.6600000000 + 114 1 4.0 3 1.691398 8.2200000000 4.1100000000 28.7700000000 + 115 1 4.0 3 1.691398 12.3300000000 0.0000000000 28.7700000000 + 116 1 4.0 3 1.691398 12.3300000000 4.1100000000 24.6600000000 + 117 1 4.0 3 1.691398 8.2200000000 0.0000000000 32.8800000000 + 118 1 4.0 3 1.691398 8.2200000000 4.1100000000 36.9900000000 + 119 1 4.0 3 1.691398 12.3300000000 0.0000000000 36.9900000000 + 120 1 4.0 3 1.691398 12.3300000000 4.1100000000 32.8800000000 + 121 1 4.0 3 1.691398 8.2200000000 8.2200000000 0.0000000000 + 122 1 4.0 3 1.691398 8.2200000000 12.3300000000 4.1100000000 + 123 1 4.0 3 1.691398 12.3300000000 8.2200000000 4.1100000000 + 124 1 4.0 3 1.691398 12.3300000000 12.3300000000 0.0000000000 + 125 1 4.0 3 1.691398 8.2200000000 8.2200000000 8.2200000000 + 126 1 4.0 3 1.691398 8.2200000000 12.3300000000 12.3300000000 + 127 1 4.0 3 1.691398 12.3300000000 8.2200000000 12.3300000000 + 128 1 4.0 3 1.691398 12.3300000000 12.3300000000 8.2200000000 + 129 1 4.0 3 1.691398 8.2200000000 8.2200000000 16.4400000000 + 130 1 4.0 3 1.691398 8.2200000000 12.3300000000 20.5500000000 + 131 1 4.0 3 1.691398 12.3300000000 8.2200000000 20.5500000000 + 132 1 4.0 3 1.691398 12.3300000000 12.3300000000 16.4400000000 + 133 1 4.0 3 1.691398 8.2200000000 8.2200000000 24.6600000000 + 134 1 4.0 3 1.691398 8.2200000000 12.3300000000 28.7700000000 + 135 1 4.0 3 1.691398 12.3300000000 8.2200000000 28.7700000000 + 136 1 4.0 3 1.691398 12.3300000000 12.3300000000 24.6600000000 + 137 1 4.0 3 1.691398 8.2200000000 8.2200000000 32.8800000000 + 138 1 4.0 3 1.691398 8.2200000000 12.3300000000 36.9900000000 + 139 1 4.0 3 1.691398 12.3300000000 8.2200000000 36.9900000000 + 140 1 4.0 3 1.691398 12.3300000000 12.3300000000 32.8800000000 + 141 1 4.0 3 1.691398 8.2200000000 16.4400000000 0.0000000000 + 142 1 4.0 3 1.691398 8.2200000000 20.5500000000 4.1100000000 + 143 1 4.0 3 1.691398 12.3300000000 16.4400000000 4.1100000000 + 144 1 4.0 3 1.691398 12.3300000000 20.5500000000 0.0000000000 + 145 1 4.0 3 1.691398 8.2200000000 16.4400000000 8.2200000000 + 146 1 4.0 3 1.691398 8.2200000000 20.5500000000 12.3300000000 + 147 1 4.0 3 1.691398 12.3300000000 16.4400000000 12.3300000000 + 148 1 4.0 3 1.691398 12.3300000000 20.5500000000 8.2200000000 + 149 1 4.0 3 1.691398 8.2200000000 16.4400000000 16.4400000000 + 150 1 4.0 3 1.691398 8.2200000000 20.5500000000 20.5500000000 + 151 1 4.0 3 1.691398 12.3300000000 16.4400000000 20.5500000000 + 152 1 4.0 3 1.691398 12.3300000000 20.5500000000 16.4400000000 + 153 1 4.0 3 1.691398 8.2200000000 16.4400000000 24.6600000000 + 154 1 4.0 3 1.691398 8.2200000000 20.5500000000 28.7700000000 + 155 1 4.0 3 1.691398 12.3300000000 16.4400000000 28.7700000000 + 156 1 4.0 3 1.691398 12.3300000000 20.5500000000 24.6600000000 + 157 1 4.0 3 1.691398 8.2200000000 16.4400000000 32.8800000000 + 158 1 4.0 3 1.691398 8.2200000000 20.5500000000 36.9900000000 + 159 1 4.0 3 1.691398 12.3300000000 16.4400000000 36.9900000000 + 160 1 4.0 3 1.691398 12.3300000000 20.5500000000 32.8800000000 + 161 1 4.0 3 1.691398 8.2200000000 24.6600000000 0.0000000000 + 162 1 4.0 3 1.691398 8.2200000000 28.7700000000 4.1100000000 + 163 1 4.0 3 1.691398 12.3300000000 24.6600000000 4.1100000000 + 164 1 4.0 3 1.691398 12.3300000000 28.7700000000 0.0000000000 + 165 1 4.0 3 1.691398 8.2200000000 24.6600000000 8.2200000000 + 166 1 4.0 3 1.691398 8.2200000000 28.7700000000 12.3300000000 + 167 1 4.0 3 1.691398 12.3300000000 24.6600000000 12.3300000000 + 168 1 4.0 3 1.691398 12.3300000000 28.7700000000 8.2200000000 + 169 1 4.0 3 1.691398 8.2200000000 24.6600000000 16.4400000000 + 170 1 4.0 3 1.691398 8.2200000000 28.7700000000 20.5500000000 + 171 1 4.0 3 1.691398 12.3300000000 24.6600000000 20.5500000000 + 172 1 4.0 3 1.691398 12.3300000000 28.7700000000 16.4400000000 + 173 1 4.0 3 1.691398 8.2200000000 24.6600000000 24.6600000000 + 174 1 4.0 3 1.691398 8.2200000000 28.7700000000 28.7700000000 + 175 1 4.0 3 1.691398 12.3300000000 24.6600000000 28.7700000000 + 176 1 4.0 3 1.691398 12.3300000000 28.7700000000 24.6600000000 + 177 1 4.0 3 1.691398 8.2200000000 24.6600000000 32.8800000000 + 178 1 4.0 3 1.691398 8.2200000000 28.7700000000 36.9900000000 + 179 1 4.0 3 1.691398 12.3300000000 24.6600000000 36.9900000000 + 180 1 4.0 3 1.691398 12.3300000000 28.7700000000 32.8800000000 + 181 1 4.0 3 1.691398 8.2200000000 32.8800000000 0.0000000000 + 182 1 4.0 3 1.691398 8.2200000000 36.9900000000 4.1100000000 + 183 1 4.0 3 1.691398 12.3300000000 32.8800000000 4.1100000000 + 184 1 4.0 3 1.691398 12.3300000000 36.9900000000 0.0000000000 + 185 1 4.0 3 1.691398 8.2200000000 32.8800000000 8.2200000000 + 186 1 4.0 3 1.691398 8.2200000000 36.9900000000 12.3300000000 + 187 1 4.0 3 1.691398 12.3300000000 32.8800000000 12.3300000000 + 188 1 4.0 3 1.691398 12.3300000000 36.9900000000 8.2200000000 + 189 1 4.0 3 1.691398 8.2200000000 32.8800000000 16.4400000000 + 190 1 4.0 3 1.691398 8.2200000000 36.9900000000 20.5500000000 + 191 1 4.0 3 1.691398 12.3300000000 32.8800000000 20.5500000000 + 192 1 4.0 3 1.691398 12.3300000000 36.9900000000 16.4400000000 + 193 1 4.0 3 1.691398 8.2200000000 32.8800000000 24.6600000000 + 194 1 4.0 3 1.691398 8.2200000000 36.9900000000 28.7700000000 + 195 1 4.0 3 1.691398 12.3300000000 32.8800000000 28.7700000000 + 196 1 4.0 3 1.691398 12.3300000000 36.9900000000 24.6600000000 + 197 1 4.0 3 1.691398 8.2200000000 32.8800000000 32.8800000000 + 198 1 4.0 3 1.691398 8.2200000000 36.9900000000 36.9900000000 + 199 1 4.0 3 1.691398 12.3300000000 32.8800000000 36.9900000000 + 200 1 4.0 3 1.691398 12.3300000000 36.9900000000 32.8800000000 + 201 1 4.0 3 1.691398 16.4400000000 0.0000000000 0.0000000000 + 202 1 4.0 3 1.691398 16.4400000000 4.1100000000 4.1100000000 + 203 1 4.0 3 1.691398 20.5500000000 0.0000000000 4.1100000000 + 204 1 4.0 3 1.691398 20.5500000000 4.1100000000 0.0000000000 + 205 1 4.0 3 1.691398 16.4400000000 0.0000000000 8.2200000000 + 206 1 4.0 3 1.691398 16.4400000000 4.1100000000 12.3300000000 + 207 1 4.0 3 1.691398 20.5500000000 0.0000000000 12.3300000000 + 208 1 4.0 3 1.691398 20.5500000000 4.1100000000 8.2200000000 + 209 1 4.0 3 1.691398 16.4400000000 0.0000000000 16.4400000000 + 210 1 4.0 3 1.691398 16.4400000000 4.1100000000 20.5500000000 + 211 1 4.0 3 1.691398 20.5500000000 0.0000000000 20.5500000000 + 212 1 4.0 3 1.691398 20.5500000000 4.1100000000 16.4400000000 + 213 1 4.0 3 1.691398 16.4400000000 0.0000000000 24.6600000000 + 214 1 4.0 3 1.691398 16.4400000000 4.1100000000 28.7700000000 + 215 1 4.0 3 1.691398 20.5500000000 0.0000000000 28.7700000000 + 216 1 4.0 3 1.691398 20.5500000000 4.1100000000 24.6600000000 + 217 1 4.0 3 1.691398 16.4400000000 0.0000000000 32.8800000000 + 218 1 4.0 3 1.691398 16.4400000000 4.1100000000 36.9900000000 + 219 1 4.0 3 1.691398 20.5500000000 0.0000000000 36.9900000000 + 220 1 4.0 3 1.691398 20.5500000000 4.1100000000 32.8800000000 + 221 1 4.0 3 1.691398 16.4400000000 8.2200000000 0.0000000000 + 222 1 4.0 3 1.691398 16.4400000000 12.3300000000 4.1100000000 + 223 1 4.0 3 1.691398 20.5500000000 8.2200000000 4.1100000000 + 224 1 4.0 3 1.691398 20.5500000000 12.3300000000 0.0000000000 + 225 1 4.0 3 1.691398 16.4400000000 8.2200000000 8.2200000000 + 226 1 4.0 3 1.691398 16.4400000000 12.3300000000 12.3300000000 + 227 1 4.0 3 1.691398 20.5500000000 8.2200000000 12.3300000000 + 228 1 4.0 3 1.691398 20.5500000000 12.3300000000 8.2200000000 + 229 1 4.0 3 1.691398 16.4400000000 8.2200000000 16.4400000000 + 230 1 4.0 3 1.691398 16.4400000000 12.3300000000 20.5500000000 + 231 1 4.0 3 1.691398 20.5500000000 8.2200000000 20.5500000000 + 232 1 4.0 3 1.691398 20.5500000000 12.3300000000 16.4400000000 + 233 1 4.0 3 1.691398 16.4400000000 8.2200000000 24.6600000000 + 234 1 4.0 3 1.691398 16.4400000000 12.3300000000 28.7700000000 + 235 1 4.0 3 1.691398 20.5500000000 8.2200000000 28.7700000000 + 236 1 4.0 3 1.691398 20.5500000000 12.3300000000 24.6600000000 + 237 1 4.0 3 1.691398 16.4400000000 8.2200000000 32.8800000000 + 238 1 4.0 3 1.691398 16.4400000000 12.3300000000 36.9900000000 + 239 1 4.0 3 1.691398 20.5500000000 8.2200000000 36.9900000000 + 240 1 4.0 3 1.691398 20.5500000000 12.3300000000 32.8800000000 + 241 1 4.0 3 1.691398 16.4400000000 16.4400000000 0.0000000000 + 242 1 4.0 3 1.691398 16.4400000000 20.5500000000 4.1100000000 + 243 1 4.0 3 1.691398 20.5500000000 16.4400000000 4.1100000000 + 244 1 4.0 3 1.691398 20.5500000000 20.5500000000 0.0000000000 + 245 1 4.0 3 1.691398 16.4400000000 16.4400000000 8.2200000000 + 246 1 4.0 3 1.691398 16.4400000000 20.5500000000 12.3300000000 + 247 1 4.0 3 1.691398 20.5500000000 16.4400000000 12.3300000000 + 248 1 4.0 3 1.691398 20.5500000000 20.5500000000 8.2200000000 + 249 1 4.0 3 1.691398 16.4400000000 16.4400000000 16.4400000000 + 250 1 4.0 3 1.691398 16.4400000000 20.5500000000 20.5500000000 + 251 1 4.0 3 1.691398 20.5500000000 16.4400000000 20.5500000000 + 252 1 4.0 3 1.691398 20.5500000000 20.5500000000 16.4400000000 + 253 1 4.0 3 1.691398 16.4400000000 16.4400000000 24.6600000000 + 254 1 4.0 3 1.691398 16.4400000000 20.5500000000 28.7700000000 + 255 1 4.0 3 1.691398 20.5500000000 16.4400000000 28.7700000000 + 256 1 4.0 3 1.691398 20.5500000000 20.5500000000 24.6600000000 + 257 1 4.0 3 1.691398 16.4400000000 16.4400000000 32.8800000000 + 258 1 4.0 3 1.691398 16.4400000000 20.5500000000 36.9900000000 + 259 1 4.0 3 1.691398 20.5500000000 16.4400000000 36.9900000000 + 260 1 4.0 3 1.691398 20.5500000000 20.5500000000 32.8800000000 + 261 1 4.0 3 1.691398 16.4400000000 24.6600000000 0.0000000000 + 262 1 4.0 3 1.691398 16.4400000000 28.7700000000 4.1100000000 + 263 1 4.0 3 1.691398 20.5500000000 24.6600000000 4.1100000000 + 264 1 4.0 3 1.691398 20.5500000000 28.7700000000 0.0000000000 + 265 1 4.0 3 1.691398 16.4400000000 24.6600000000 8.2200000000 + 266 1 4.0 3 1.691398 16.4400000000 28.7700000000 12.3300000000 + 267 1 4.0 3 1.691398 20.5500000000 24.6600000000 12.3300000000 + 268 1 4.0 3 1.691398 20.5500000000 28.7700000000 8.2200000000 + 269 1 4.0 3 1.691398 16.4400000000 24.6600000000 16.4400000000 + 270 1 4.0 3 1.691398 16.4400000000 28.7700000000 20.5500000000 + 271 1 4.0 3 1.691398 20.5500000000 24.6600000000 20.5500000000 + 272 1 4.0 3 1.691398 20.5500000000 28.7700000000 16.4400000000 + 273 1 4.0 3 1.691398 16.4400000000 24.6600000000 24.6600000000 + 274 1 4.0 3 1.691398 16.4400000000 28.7700000000 28.7700000000 + 275 1 4.0 3 1.691398 20.5500000000 24.6600000000 28.7700000000 + 276 1 4.0 3 1.691398 20.5500000000 28.7700000000 24.6600000000 + 277 1 4.0 3 1.691398 16.4400000000 24.6600000000 32.8800000000 + 278 1 4.0 3 1.691398 16.4400000000 28.7700000000 36.9900000000 + 279 1 4.0 3 1.691398 20.5500000000 24.6600000000 36.9900000000 + 280 1 4.0 3 1.691398 20.5500000000 28.7700000000 32.8800000000 + 281 1 4.0 3 1.691398 16.4400000000 32.8800000000 0.0000000000 + 282 1 4.0 3 1.691398 16.4400000000 36.9900000000 4.1100000000 + 283 1 4.0 3 1.691398 20.5500000000 32.8800000000 4.1100000000 + 284 1 4.0 3 1.691398 20.5500000000 36.9900000000 0.0000000000 + 285 1 4.0 3 1.691398 16.4400000000 32.8800000000 8.2200000000 + 286 1 4.0 3 1.691398 16.4400000000 36.9900000000 12.3300000000 + 287 1 4.0 3 1.691398 20.5500000000 32.8800000000 12.3300000000 + 288 1 4.0 3 1.691398 20.5500000000 36.9900000000 8.2200000000 + 289 1 4.0 3 1.691398 16.4400000000 32.8800000000 16.4400000000 + 290 1 4.0 3 1.691398 16.4400000000 36.9900000000 20.5500000000 + 291 1 4.0 3 1.691398 20.5500000000 32.8800000000 20.5500000000 + 292 1 4.0 3 1.691398 20.5500000000 36.9900000000 16.4400000000 + 293 1 4.0 3 1.691398 16.4400000000 32.8800000000 24.6600000000 + 294 1 4.0 3 1.691398 16.4400000000 36.9900000000 28.7700000000 + 295 1 4.0 3 1.691398 20.5500000000 32.8800000000 28.7700000000 + 296 1 4.0 3 1.691398 20.5500000000 36.9900000000 24.6600000000 + 297 1 4.0 3 1.691398 16.4400000000 32.8800000000 32.8800000000 + 298 1 4.0 3 1.691398 16.4400000000 36.9900000000 36.9900000000 + 299 1 4.0 3 1.691398 20.5500000000 32.8800000000 36.9900000000 + 300 1 4.0 3 1.691398 20.5500000000 36.9900000000 32.8800000000 + 301 1 4.0 3 1.691398 24.6600000000 0.0000000000 0.0000000000 + 302 1 4.0 3 1.691398 24.6600000000 4.1100000000 4.1100000000 + 303 1 4.0 3 1.691398 28.7700000000 0.0000000000 4.1100000000 + 304 1 4.0 3 1.691398 28.7700000000 4.1100000000 0.0000000000 + 305 1 4.0 3 1.691398 24.6600000000 0.0000000000 8.2200000000 + 306 1 4.0 3 1.691398 24.6600000000 4.1100000000 12.3300000000 + 307 1 4.0 3 1.691398 28.7700000000 0.0000000000 12.3300000000 + 308 1 4.0 3 1.691398 28.7700000000 4.1100000000 8.2200000000 + 309 1 4.0 3 1.691398 24.6600000000 0.0000000000 16.4400000000 + 310 1 4.0 3 1.691398 24.6600000000 4.1100000000 20.5500000000 + 311 1 4.0 3 1.691398 28.7700000000 0.0000000000 20.5500000000 + 312 1 4.0 3 1.691398 28.7700000000 4.1100000000 16.4400000000 + 313 1 4.0 3 1.691398 24.6600000000 0.0000000000 24.6600000000 + 314 1 4.0 3 1.691398 24.6600000000 4.1100000000 28.7700000000 + 315 1 4.0 3 1.691398 28.7700000000 0.0000000000 28.7700000000 + 316 1 4.0 3 1.691398 28.7700000000 4.1100000000 24.6600000000 + 317 1 4.0 3 1.691398 24.6600000000 0.0000000000 32.8800000000 + 318 1 4.0 3 1.691398 24.6600000000 4.1100000000 36.9900000000 + 319 1 4.0 3 1.691398 28.7700000000 0.0000000000 36.9900000000 + 320 1 4.0 3 1.691398 28.7700000000 4.1100000000 32.8800000000 + 321 1 4.0 3 1.691398 24.6600000000 8.2200000000 0.0000000000 + 322 1 4.0 3 1.691398 24.6600000000 12.3300000000 4.1100000000 + 323 1 4.0 3 1.691398 28.7700000000 8.2200000000 4.1100000000 + 324 1 4.0 3 1.691398 28.7700000000 12.3300000000 0.0000000000 + 325 1 4.0 3 1.691398 24.6600000000 8.2200000000 8.2200000000 + 326 1 4.0 3 1.691398 24.6600000000 12.3300000000 12.3300000000 + 327 1 4.0 3 1.691398 28.7700000000 8.2200000000 12.3300000000 + 328 1 4.0 3 1.691398 28.7700000000 12.3300000000 8.2200000000 + 329 1 4.0 3 1.691398 24.6600000000 8.2200000000 16.4400000000 + 330 1 4.0 3 1.691398 24.6600000000 12.3300000000 20.5500000000 + 331 1 4.0 3 1.691398 28.7700000000 8.2200000000 20.5500000000 + 332 1 4.0 3 1.691398 28.7700000000 12.3300000000 16.4400000000 + 333 1 4.0 3 1.691398 24.6600000000 8.2200000000 24.6600000000 + 334 1 4.0 3 1.691398 24.6600000000 12.3300000000 28.7700000000 + 335 1 4.0 3 1.691398 28.7700000000 8.2200000000 28.7700000000 + 336 1 4.0 3 1.691398 28.7700000000 12.3300000000 24.6600000000 + 337 1 4.0 3 1.691398 24.6600000000 8.2200000000 32.8800000000 + 338 1 4.0 3 1.691398 24.6600000000 12.3300000000 36.9900000000 + 339 1 4.0 3 1.691398 28.7700000000 8.2200000000 36.9900000000 + 340 1 4.0 3 1.691398 28.7700000000 12.3300000000 32.8800000000 + 341 1 4.0 3 1.691398 24.6600000000 16.4400000000 0.0000000000 + 342 1 4.0 3 1.691398 24.6600000000 20.5500000000 4.1100000000 + 343 1 4.0 3 1.691398 28.7700000000 16.4400000000 4.1100000000 + 344 1 4.0 3 1.691398 28.7700000000 20.5500000000 0.0000000000 + 345 1 4.0 3 1.691398 24.6600000000 16.4400000000 8.2200000000 + 346 1 4.0 3 1.691398 24.6600000000 20.5500000000 12.3300000000 + 347 1 4.0 3 1.691398 28.7700000000 16.4400000000 12.3300000000 + 348 1 4.0 3 1.691398 28.7700000000 20.5500000000 8.2200000000 + 349 1 4.0 3 1.691398 24.6600000000 16.4400000000 16.4400000000 + 350 1 4.0 3 1.691398 24.6600000000 20.5500000000 20.5500000000 + 351 1 4.0 3 1.691398 28.7700000000 16.4400000000 20.5500000000 + 352 1 4.0 3 1.691398 28.7700000000 20.5500000000 16.4400000000 + 353 1 4.0 3 1.691398 24.6600000000 16.4400000000 24.6600000000 + 354 1 4.0 3 1.691398 24.6600000000 20.5500000000 28.7700000000 + 355 1 4.0 3 1.691398 28.7700000000 16.4400000000 28.7700000000 + 356 1 4.0 3 1.691398 28.7700000000 20.5500000000 24.6600000000 + 357 1 4.0 3 1.691398 24.6600000000 16.4400000000 32.8800000000 + 358 1 4.0 3 1.691398 24.6600000000 20.5500000000 36.9900000000 + 359 1 4.0 3 1.691398 28.7700000000 16.4400000000 36.9900000000 + 360 1 4.0 3 1.691398 28.7700000000 20.5500000000 32.8800000000 + 361 1 4.0 3 1.691398 24.6600000000 24.6600000000 0.0000000000 + 362 1 4.0 3 1.691398 24.6600000000 28.7700000000 4.1100000000 + 363 1 4.0 3 1.691398 28.7700000000 24.6600000000 4.1100000000 + 364 1 4.0 3 1.691398 28.7700000000 28.7700000000 0.0000000000 + 365 1 4.0 3 1.691398 24.6600000000 24.6600000000 8.2200000000 + 366 1 4.0 3 1.691398 24.6600000000 28.7700000000 12.3300000000 + 367 1 4.0 3 1.691398 28.7700000000 24.6600000000 12.3300000000 + 368 1 4.0 3 1.691398 28.7700000000 28.7700000000 8.2200000000 + 369 1 4.0 3 1.691398 24.6600000000 24.6600000000 16.4400000000 + 370 1 4.0 3 1.691398 24.6600000000 28.7700000000 20.5500000000 + 371 1 4.0 3 1.691398 28.7700000000 24.6600000000 20.5500000000 + 372 1 4.0 3 1.691398 28.7700000000 28.7700000000 16.4400000000 + 373 1 4.0 3 1.691398 24.6600000000 24.6600000000 24.6600000000 + 374 1 4.0 3 1.691398 24.6600000000 28.7700000000 28.7700000000 + 375 1 4.0 3 1.691398 28.7700000000 24.6600000000 28.7700000000 + 376 1 4.0 3 1.691398 28.7700000000 28.7700000000 24.6600000000 + 377 1 4.0 3 1.691398 24.6600000000 24.6600000000 32.8800000000 + 378 1 4.0 3 1.691398 24.6600000000 28.7700000000 36.9900000000 + 379 1 4.0 3 1.691398 28.7700000000 24.6600000000 36.9900000000 + 380 1 4.0 3 1.691398 28.7700000000 28.7700000000 32.8800000000 + 381 1 4.0 3 1.691398 24.6600000000 32.8800000000 0.0000000000 + 382 1 4.0 3 1.691398 24.6600000000 36.9900000000 4.1100000000 + 383 1 4.0 3 1.691398 28.7700000000 32.8800000000 4.1100000000 + 384 1 4.0 3 1.691398 28.7700000000 36.9900000000 0.0000000000 + 385 1 4.0 3 1.691398 24.6600000000 32.8800000000 8.2200000000 + 386 1 4.0 3 1.691398 24.6600000000 36.9900000000 12.3300000000 + 387 1 4.0 3 1.691398 28.7700000000 32.8800000000 12.3300000000 + 388 1 4.0 3 1.691398 28.7700000000 36.9900000000 8.2200000000 + 389 1 4.0 3 1.691398 24.6600000000 32.8800000000 16.4400000000 + 390 1 4.0 3 1.691398 24.6600000000 36.9900000000 20.5500000000 + 391 1 4.0 3 1.691398 28.7700000000 32.8800000000 20.5500000000 + 392 1 4.0 3 1.691398 28.7700000000 36.9900000000 16.4400000000 + 393 1 4.0 3 1.691398 24.6600000000 32.8800000000 24.6600000000 + 394 1 4.0 3 1.691398 24.6600000000 36.9900000000 28.7700000000 + 395 1 4.0 3 1.691398 28.7700000000 32.8800000000 28.7700000000 + 396 1 4.0 3 1.691398 28.7700000000 36.9900000000 24.6600000000 + 397 1 4.0 3 1.691398 24.6600000000 32.8800000000 32.8800000000 + 398 1 4.0 3 1.691398 24.6600000000 36.9900000000 36.9900000000 + 399 1 4.0 3 1.691398 28.7700000000 32.8800000000 36.9900000000 + 400 1 4.0 3 1.691398 28.7700000000 36.9900000000 32.8800000000 + 401 1 4.0 3 1.691398 32.8800000000 0.0000000000 0.0000000000 + 402 1 4.0 3 1.691398 32.8800000000 4.1100000000 4.1100000000 + 403 1 4.0 3 1.691398 36.9900000000 0.0000000000 4.1100000000 + 404 1 4.0 3 1.691398 36.9900000000 4.1100000000 0.0000000000 + 405 1 4.0 3 1.691398 32.8800000000 0.0000000000 8.2200000000 + 406 1 4.0 3 1.691398 32.8800000000 4.1100000000 12.3300000000 + 407 1 4.0 3 1.691398 36.9900000000 0.0000000000 12.3300000000 + 408 1 4.0 3 1.691398 36.9900000000 4.1100000000 8.2200000000 + 409 1 4.0 3 1.691398 32.8800000000 0.0000000000 16.4400000000 + 410 1 4.0 3 1.691398 32.8800000000 4.1100000000 20.5500000000 + 411 1 4.0 3 1.691398 36.9900000000 0.0000000000 20.5500000000 + 412 1 4.0 3 1.691398 36.9900000000 4.1100000000 16.4400000000 + 413 1 4.0 3 1.691398 32.8800000000 0.0000000000 24.6600000000 + 414 1 4.0 3 1.691398 32.8800000000 4.1100000000 28.7700000000 + 415 1 4.0 3 1.691398 36.9900000000 0.0000000000 28.7700000000 + 416 1 4.0 3 1.691398 36.9900000000 4.1100000000 24.6600000000 + 417 1 4.0 3 1.691398 32.8800000000 0.0000000000 32.8800000000 + 418 1 4.0 3 1.691398 32.8800000000 4.1100000000 36.9900000000 + 419 1 4.0 3 1.691398 36.9900000000 0.0000000000 36.9900000000 + 420 1 4.0 3 1.691398 36.9900000000 4.1100000000 32.8800000000 + 421 1 4.0 3 1.691398 32.8800000000 8.2200000000 0.0000000000 + 422 1 4.0 3 1.691398 32.8800000000 12.3300000000 4.1100000000 + 423 1 4.0 3 1.691398 36.9900000000 8.2200000000 4.1100000000 + 424 1 4.0 3 1.691398 36.9900000000 12.3300000000 0.0000000000 + 425 1 4.0 3 1.691398 32.8800000000 8.2200000000 8.2200000000 + 426 1 4.0 3 1.691398 32.8800000000 12.3300000000 12.3300000000 + 427 1 4.0 3 1.691398 36.9900000000 8.2200000000 12.3300000000 + 428 1 4.0 3 1.691398 36.9900000000 12.3300000000 8.2200000000 + 429 1 4.0 3 1.691398 32.8800000000 8.2200000000 16.4400000000 + 430 1 4.0 3 1.691398 32.8800000000 12.3300000000 20.5500000000 + 431 1 4.0 3 1.691398 36.9900000000 8.2200000000 20.5500000000 + 432 1 4.0 3 1.691398 36.9900000000 12.3300000000 16.4400000000 + 433 1 4.0 3 1.691398 32.8800000000 8.2200000000 24.6600000000 + 434 1 4.0 3 1.691398 32.8800000000 12.3300000000 28.7700000000 + 435 1 4.0 3 1.691398 36.9900000000 8.2200000000 28.7700000000 + 436 1 4.0 3 1.691398 36.9900000000 12.3300000000 24.6600000000 + 437 1 4.0 3 1.691398 32.8800000000 8.2200000000 32.8800000000 + 438 1 4.0 3 1.691398 32.8800000000 12.3300000000 36.9900000000 + 439 1 4.0 3 1.691398 36.9900000000 8.2200000000 36.9900000000 + 440 1 4.0 3 1.691398 36.9900000000 12.3300000000 32.8800000000 + 441 1 4.0 3 1.691398 32.8800000000 16.4400000000 0.0000000000 + 442 1 4.0 3 1.691398 32.8800000000 20.5500000000 4.1100000000 + 443 1 4.0 3 1.691398 36.9900000000 16.4400000000 4.1100000000 + 444 1 4.0 3 1.691398 36.9900000000 20.5500000000 0.0000000000 + 445 1 4.0 3 1.691398 32.8800000000 16.4400000000 8.2200000000 + 446 1 4.0 3 1.691398 32.8800000000 20.5500000000 12.3300000000 + 447 1 4.0 3 1.691398 36.9900000000 16.4400000000 12.3300000000 + 448 1 4.0 3 1.691398 36.9900000000 20.5500000000 8.2200000000 + 449 1 4.0 3 1.691398 32.8800000000 16.4400000000 16.4400000000 + 450 1 4.0 3 1.691398 32.8800000000 20.5500000000 20.5500000000 + 451 1 4.0 3 1.691398 36.9900000000 16.4400000000 20.5500000000 + 452 1 4.0 3 1.691398 36.9900000000 20.5500000000 16.4400000000 + 453 1 4.0 3 1.691398 32.8800000000 16.4400000000 24.6600000000 + 454 1 4.0 3 1.691398 32.8800000000 20.5500000000 28.7700000000 + 455 1 4.0 3 1.691398 36.9900000000 16.4400000000 28.7700000000 + 456 1 4.0 3 1.691398 36.9900000000 20.5500000000 24.6600000000 + 457 1 4.0 3 1.691398 32.8800000000 16.4400000000 32.8800000000 + 458 1 4.0 3 1.691398 32.8800000000 20.5500000000 36.9900000000 + 459 1 4.0 3 1.691398 36.9900000000 16.4400000000 36.9900000000 + 460 1 4.0 3 1.691398 36.9900000000 20.5500000000 32.8800000000 + 461 1 4.0 3 1.691398 32.8800000000 24.6600000000 0.0000000000 + 462 1 4.0 3 1.691398 32.8800000000 28.7700000000 4.1100000000 + 463 1 4.0 3 1.691398 36.9900000000 24.6600000000 4.1100000000 + 464 1 4.0 3 1.691398 36.9900000000 28.7700000000 0.0000000000 + 465 1 4.0 3 1.691398 32.8800000000 24.6600000000 8.2200000000 + 466 1 4.0 3 1.691398 32.8800000000 28.7700000000 12.3300000000 + 467 1 4.0 3 1.691398 36.9900000000 24.6600000000 12.3300000000 + 468 1 4.0 3 1.691398 36.9900000000 28.7700000000 8.2200000000 + 469 1 4.0 3 1.691398 32.8800000000 24.6600000000 16.4400000000 + 470 1 4.0 3 1.691398 32.8800000000 28.7700000000 20.5500000000 + 471 1 4.0 3 1.691398 36.9900000000 24.6600000000 20.5500000000 + 472 1 4.0 3 1.691398 36.9900000000 28.7700000000 16.4400000000 + 473 1 4.0 3 1.691398 32.8800000000 24.6600000000 24.6600000000 + 474 1 4.0 3 1.691398 32.8800000000 28.7700000000 28.7700000000 + 475 1 4.0 3 1.691398 36.9900000000 24.6600000000 28.7700000000 + 476 1 4.0 3 1.691398 36.9900000000 28.7700000000 24.6600000000 + 477 1 4.0 3 1.691398 32.8800000000 24.6600000000 32.8800000000 + 478 1 4.0 3 1.691398 32.8800000000 28.7700000000 36.9900000000 + 479 1 4.0 3 1.691398 36.9900000000 24.6600000000 36.9900000000 + 480 1 4.0 3 1.691398 36.9900000000 28.7700000000 32.8800000000 + 481 1 4.0 3 1.691398 32.8800000000 32.8800000000 0.0000000000 + 482 1 4.0 3 1.691398 32.8800000000 36.9900000000 4.1100000000 + 483 1 4.0 3 1.691398 36.9900000000 32.8800000000 4.1100000000 + 484 1 4.0 3 1.691398 36.9900000000 36.9900000000 0.0000000000 + 485 1 4.0 3 1.691398 32.8800000000 32.8800000000 8.2200000000 + 486 1 4.0 3 1.691398 32.8800000000 36.9900000000 12.3300000000 + 487 1 4.0 3 1.691398 36.9900000000 32.8800000000 12.3300000000 + 488 1 4.0 3 1.691398 36.9900000000 36.9900000000 8.2200000000 + 489 1 4.0 3 1.691398 32.8800000000 32.8800000000 16.4400000000 + 490 1 4.0 3 1.691398 32.8800000000 36.9900000000 20.5500000000 + 491 1 4.0 3 1.691398 36.9900000000 32.8800000000 20.5500000000 + 492 1 4.0 3 1.691398 36.9900000000 36.9900000000 16.4400000000 + 493 1 4.0 3 1.691398 32.8800000000 32.8800000000 24.6600000000 + 494 1 4.0 3 1.691398 32.8800000000 36.9900000000 28.7700000000 + 495 1 4.0 3 1.691398 36.9900000000 32.8800000000 28.7700000000 + 496 1 4.0 3 1.691398 36.9900000000 36.9900000000 24.6600000000 + 497 1 4.0 3 1.691398 32.8800000000 32.8800000000 32.8800000000 + 498 1 4.0 3 1.691398 32.8800000000 36.9900000000 36.9900000000 + 499 1 4.0 3 1.691398 36.9900000000 32.8800000000 36.9900000000 + 500 1 4.0 3 1.691398 36.9900000000 36.9900000000 32.8800000000 + 501 2 4.0 3 0.621427 2.0550000000 2.0550000000 2.0550000000 + 502 2 4.0 3 0.621427 6.1650000000 6.1650000000 2.0550000000 + 503 2 4.0 3 0.621427 2.0550000000 6.1650000000 6.1650000000 + 504 2 4.0 3 0.621427 6.1650000000 2.0550000000 6.1650000000 + 505 2 4.0 3 0.621427 2.0550000000 2.0550000000 10.2750000000 + 506 2 4.0 3 0.621427 6.1650000000 6.1650000000 10.2750000000 + 507 2 4.0 3 0.621427 2.0550000000 6.1650000000 14.3850000000 + 508 2 4.0 3 0.621427 6.1650000000 2.0550000000 14.3850000000 + 509 2 4.0 3 0.621427 2.0550000000 2.0550000000 18.4950000000 + 510 2 4.0 3 0.621427 6.1650000000 6.1650000000 18.4950000000 + 511 2 4.0 3 0.621427 2.0550000000 6.1650000000 22.6050000000 + 512 2 4.0 3 0.621427 6.1650000000 2.0550000000 22.6050000000 + 513 2 4.0 3 0.621427 2.0550000000 2.0550000000 26.7150000000 + 514 2 4.0 3 0.621427 6.1650000000 6.1650000000 26.7150000000 + 515 2 4.0 3 0.621427 2.0550000000 6.1650000000 30.8250000000 + 516 2 4.0 3 0.621427 6.1650000000 2.0550000000 30.8250000000 + 517 2 4.0 3 0.621427 2.0550000000 2.0550000000 34.9350000000 + 518 2 4.0 3 0.621427 6.1650000000 6.1650000000 34.9350000000 + 519 2 4.0 3 0.621427 2.0550000000 6.1650000000 39.0450000000 + 520 2 4.0 3 0.621427 6.1650000000 2.0550000000 39.0450000000 + 521 2 4.0 3 0.621427 2.0550000000 10.2750000000 2.0550000000 + 522 2 4.0 3 0.621427 6.1650000000 14.3850000000 2.0550000000 + 523 2 4.0 3 0.621427 2.0550000000 14.3850000000 6.1650000000 + 524 2 4.0 3 0.621427 6.1650000000 10.2750000000 6.1650000000 + 525 2 4.0 3 0.621427 2.0550000000 10.2750000000 10.2750000000 + 526 2 4.0 3 0.621427 6.1650000000 14.3850000000 10.2750000000 + 527 2 4.0 3 0.621427 2.0550000000 14.3850000000 14.3850000000 + 528 2 4.0 3 0.621427 6.1650000000 10.2750000000 14.3850000000 + 529 2 4.0 3 0.621427 2.0550000000 10.2750000000 18.4950000000 + 530 2 4.0 3 0.621427 6.1650000000 14.3850000000 18.4950000000 + 531 2 4.0 3 0.621427 2.0550000000 14.3850000000 22.6050000000 + 532 2 4.0 3 0.621427 6.1650000000 10.2750000000 22.6050000000 + 533 2 4.0 3 0.621427 2.0550000000 10.2750000000 26.7150000000 + 534 2 4.0 3 0.621427 6.1650000000 14.3850000000 26.7150000000 + 535 2 4.0 3 0.621427 2.0550000000 14.3850000000 30.8250000000 + 536 2 4.0 3 0.621427 6.1650000000 10.2750000000 30.8250000000 + 537 2 4.0 3 0.621427 2.0550000000 10.2750000000 34.9350000000 + 538 2 4.0 3 0.621427 6.1650000000 14.3850000000 34.9350000000 + 539 2 4.0 3 0.621427 2.0550000000 14.3850000000 39.0450000000 + 540 2 4.0 3 0.621427 6.1650000000 10.2750000000 39.0450000000 + 541 2 4.0 3 0.621427 2.0550000000 18.4950000000 2.0550000000 + 542 2 4.0 3 0.621427 6.1650000000 22.6050000000 2.0550000000 + 543 2 4.0 3 0.621427 2.0550000000 22.6050000000 6.1650000000 + 544 2 4.0 3 0.621427 6.1650000000 18.4950000000 6.1650000000 + 545 2 4.0 3 0.621427 2.0550000000 18.4950000000 10.2750000000 + 546 2 4.0 3 0.621427 6.1650000000 22.6050000000 10.2750000000 + 547 2 4.0 3 0.621427 2.0550000000 22.6050000000 14.3850000000 + 548 2 4.0 3 0.621427 6.1650000000 18.4950000000 14.3850000000 + 549 2 4.0 3 0.621427 2.0550000000 18.4950000000 18.4950000000 + 550 2 4.0 3 0.621427 6.1650000000 22.6050000000 18.4950000000 + 551 2 4.0 3 0.621427 2.0550000000 22.6050000000 22.6050000000 + 552 2 4.0 3 0.621427 6.1650000000 18.4950000000 22.6050000000 + 553 2 4.0 3 0.621427 2.0550000000 18.4950000000 26.7150000000 + 554 2 4.0 3 0.621427 6.1650000000 22.6050000000 26.7150000000 + 555 2 4.0 3 0.621427 2.0550000000 22.6050000000 30.8250000000 + 556 2 4.0 3 0.621427 6.1650000000 18.4950000000 30.8250000000 + 557 2 4.0 3 0.621427 2.0550000000 18.4950000000 34.9350000000 + 558 2 4.0 3 0.621427 6.1650000000 22.6050000000 34.9350000000 + 559 2 4.0 3 0.621427 2.0550000000 22.6050000000 39.0450000000 + 560 2 4.0 3 0.621427 6.1650000000 18.4950000000 39.0450000000 + 561 2 4.0 3 0.621427 2.0550000000 26.7150000000 2.0550000000 + 562 2 4.0 3 0.621427 6.1650000000 30.8250000000 2.0550000000 + 563 2 4.0 3 0.621427 2.0550000000 30.8250000000 6.1650000000 + 564 2 4.0 3 0.621427 6.1650000000 26.7150000000 6.1650000000 + 565 2 4.0 3 0.621427 2.0550000000 26.7150000000 10.2750000000 + 566 2 4.0 3 0.621427 6.1650000000 30.8250000000 10.2750000000 + 567 2 4.0 3 0.621427 2.0550000000 30.8250000000 14.3850000000 + 568 2 4.0 3 0.621427 6.1650000000 26.7150000000 14.3850000000 + 569 2 4.0 3 0.621427 2.0550000000 26.7150000000 18.4950000000 + 570 2 4.0 3 0.621427 6.1650000000 30.8250000000 18.4950000000 + 571 2 4.0 3 0.621427 2.0550000000 30.8250000000 22.6050000000 + 572 2 4.0 3 0.621427 6.1650000000 26.7150000000 22.6050000000 + 573 2 4.0 3 0.621427 2.0550000000 26.7150000000 26.7150000000 + 574 2 4.0 3 0.621427 6.1650000000 30.8250000000 26.7150000000 + 575 2 4.0 3 0.621427 2.0550000000 30.8250000000 30.8250000000 + 576 2 4.0 3 0.621427 6.1650000000 26.7150000000 30.8250000000 + 577 2 4.0 3 0.621427 2.0550000000 26.7150000000 34.9350000000 + 578 2 4.0 3 0.621427 6.1650000000 30.8250000000 34.9350000000 + 579 2 4.0 3 0.621427 2.0550000000 30.8250000000 39.0450000000 + 580 2 4.0 3 0.621427 6.1650000000 26.7150000000 39.0450000000 + 581 2 4.0 3 0.621427 2.0550000000 34.9350000000 2.0550000000 + 582 2 4.0 3 0.621427 6.1650000000 39.0450000000 2.0550000000 + 583 2 4.0 3 0.621427 2.0550000000 39.0450000000 6.1650000000 + 584 2 4.0 3 0.621427 6.1650000000 34.9350000000 6.1650000000 + 585 2 4.0 3 0.621427 2.0550000000 34.9350000000 10.2750000000 + 586 2 4.0 3 0.621427 6.1650000000 39.0450000000 10.2750000000 + 587 2 4.0 3 0.621427 2.0550000000 39.0450000000 14.3850000000 + 588 2 4.0 3 0.621427 6.1650000000 34.9350000000 14.3850000000 + 589 2 4.0 3 0.621427 2.0550000000 34.9350000000 18.4950000000 + 590 2 4.0 3 0.621427 6.1650000000 39.0450000000 18.4950000000 + 591 2 4.0 3 0.621427 2.0550000000 39.0450000000 22.6050000000 + 592 2 4.0 3 0.621427 6.1650000000 34.9350000000 22.6050000000 + 593 2 4.0 3 0.621427 2.0550000000 34.9350000000 26.7150000000 + 594 2 4.0 3 0.621427 6.1650000000 39.0450000000 26.7150000000 + 595 2 4.0 3 0.621427 2.0550000000 39.0450000000 30.8250000000 + 596 2 4.0 3 0.621427 6.1650000000 34.9350000000 30.8250000000 + 597 2 4.0 3 0.621427 2.0550000000 34.9350000000 34.9350000000 + 598 2 4.0 3 0.621427 6.1650000000 39.0450000000 34.9350000000 + 599 2 4.0 3 0.621427 2.0550000000 39.0450000000 39.0450000000 + 600 2 4.0 3 0.621427 6.1650000000 34.9350000000 39.0450000000 + 601 2 4.0 3 0.621427 10.2750000000 2.0550000000 2.0550000000 + 602 2 4.0 3 0.621427 14.3850000000 6.1650000000 2.0550000000 + 603 2 4.0 3 0.621427 10.2750000000 6.1650000000 6.1650000000 + 604 2 4.0 3 0.621427 14.3850000000 2.0550000000 6.1650000000 + 605 2 4.0 3 0.621427 10.2750000000 2.0550000000 10.2750000000 + 606 2 4.0 3 0.621427 14.3850000000 6.1650000000 10.2750000000 + 607 2 4.0 3 0.621427 10.2750000000 6.1650000000 14.3850000000 + 608 2 4.0 3 0.621427 14.3850000000 2.0550000000 14.3850000000 + 609 2 4.0 3 0.621427 10.2750000000 2.0550000000 18.4950000000 + 610 2 4.0 3 0.621427 14.3850000000 6.1650000000 18.4950000000 + 611 2 4.0 3 0.621427 10.2750000000 6.1650000000 22.6050000000 + 612 2 4.0 3 0.621427 14.3850000000 2.0550000000 22.6050000000 + 613 2 4.0 3 0.621427 10.2750000000 2.0550000000 26.7150000000 + 614 2 4.0 3 0.621427 14.3850000000 6.1650000000 26.7150000000 + 615 2 4.0 3 0.621427 10.2750000000 6.1650000000 30.8250000000 + 616 2 4.0 3 0.621427 14.3850000000 2.0550000000 30.8250000000 + 617 2 4.0 3 0.621427 10.2750000000 2.0550000000 34.9350000000 + 618 2 4.0 3 0.621427 14.3850000000 6.1650000000 34.9350000000 + 619 2 4.0 3 0.621427 10.2750000000 6.1650000000 39.0450000000 + 620 2 4.0 3 0.621427 14.3850000000 2.0550000000 39.0450000000 + 621 2 4.0 3 0.621427 10.2750000000 10.2750000000 2.0550000000 + 622 2 4.0 3 0.621427 14.3850000000 14.3850000000 2.0550000000 + 623 2 4.0 3 0.621427 10.2750000000 14.3850000000 6.1650000000 + 624 2 4.0 3 0.621427 14.3850000000 10.2750000000 6.1650000000 + 625 2 4.0 3 0.621427 10.2750000000 10.2750000000 10.2750000000 + 626 2 4.0 3 0.621427 14.3850000000 14.3850000000 10.2750000000 + 627 2 4.0 3 0.621427 10.2750000000 14.3850000000 14.3850000000 + 628 2 4.0 3 0.621427 14.3850000000 10.2750000000 14.3850000000 + 629 2 4.0 3 0.621427 10.2750000000 10.2750000000 18.4950000000 + 630 2 4.0 3 0.621427 14.3850000000 14.3850000000 18.4950000000 + 631 2 4.0 3 0.621427 10.2750000000 14.3850000000 22.6050000000 + 632 2 4.0 3 0.621427 14.3850000000 10.2750000000 22.6050000000 + 633 2 4.0 3 0.621427 10.2750000000 10.2750000000 26.7150000000 + 634 2 4.0 3 0.621427 14.3850000000 14.3850000000 26.7150000000 + 635 2 4.0 3 0.621427 10.2750000000 14.3850000000 30.8250000000 + 636 2 4.0 3 0.621427 14.3850000000 10.2750000000 30.8250000000 + 637 2 4.0 3 0.621427 10.2750000000 10.2750000000 34.9350000000 + 638 2 4.0 3 0.621427 14.3850000000 14.3850000000 34.9350000000 + 639 2 4.0 3 0.621427 10.2750000000 14.3850000000 39.0450000000 + 640 2 4.0 3 0.621427 14.3850000000 10.2750000000 39.0450000000 + 641 2 4.0 3 0.621427 10.2750000000 18.4950000000 2.0550000000 + 642 2 4.0 3 0.621427 14.3850000000 22.6050000000 2.0550000000 + 643 2 4.0 3 0.621427 10.2750000000 22.6050000000 6.1650000000 + 644 2 4.0 3 0.621427 14.3850000000 18.4950000000 6.1650000000 + 645 2 4.0 3 0.621427 10.2750000000 18.4950000000 10.2750000000 + 646 2 4.0 3 0.621427 14.3850000000 22.6050000000 10.2750000000 + 647 2 4.0 3 0.621427 10.2750000000 22.6050000000 14.3850000000 + 648 2 4.0 3 0.621427 14.3850000000 18.4950000000 14.3850000000 + 649 2 4.0 3 0.621427 10.2750000000 18.4950000000 18.4950000000 + 650 2 4.0 3 0.621427 14.3850000000 22.6050000000 18.4950000000 + 651 2 4.0 3 0.621427 10.2750000000 22.6050000000 22.6050000000 + 652 2 4.0 3 0.621427 14.3850000000 18.4950000000 22.6050000000 + 653 2 4.0 3 0.621427 10.2750000000 18.4950000000 26.7150000000 + 654 2 4.0 3 0.621427 14.3850000000 22.6050000000 26.7150000000 + 655 2 4.0 3 0.621427 10.2750000000 22.6050000000 30.8250000000 + 656 2 4.0 3 0.621427 14.3850000000 18.4950000000 30.8250000000 + 657 2 4.0 3 0.621427 10.2750000000 18.4950000000 34.9350000000 + 658 2 4.0 3 0.621427 14.3850000000 22.6050000000 34.9350000000 + 659 2 4.0 3 0.621427 10.2750000000 22.6050000000 39.0450000000 + 660 2 4.0 3 0.621427 14.3850000000 18.4950000000 39.0450000000 + 661 2 4.0 3 0.621427 10.2750000000 26.7150000000 2.0550000000 + 662 2 4.0 3 0.621427 14.3850000000 30.8250000000 2.0550000000 + 663 2 4.0 3 0.621427 10.2750000000 30.8250000000 6.1650000000 + 664 2 4.0 3 0.621427 14.3850000000 26.7150000000 6.1650000000 + 665 2 4.0 3 0.621427 10.2750000000 26.7150000000 10.2750000000 + 666 2 4.0 3 0.621427 14.3850000000 30.8250000000 10.2750000000 + 667 2 4.0 3 0.621427 10.2750000000 30.8250000000 14.3850000000 + 668 2 4.0 3 0.621427 14.3850000000 26.7150000000 14.3850000000 + 669 2 4.0 3 0.621427 10.2750000000 26.7150000000 18.4950000000 + 670 2 4.0 3 0.621427 14.3850000000 30.8250000000 18.4950000000 + 671 2 4.0 3 0.621427 10.2750000000 30.8250000000 22.6050000000 + 672 2 4.0 3 0.621427 14.3850000000 26.7150000000 22.6050000000 + 673 2 4.0 3 0.621427 10.2750000000 26.7150000000 26.7150000000 + 674 2 4.0 3 0.621427 14.3850000000 30.8250000000 26.7150000000 + 675 2 4.0 3 0.621427 10.2750000000 30.8250000000 30.8250000000 + 676 2 4.0 3 0.621427 14.3850000000 26.7150000000 30.8250000000 + 677 2 4.0 3 0.621427 10.2750000000 26.7150000000 34.9350000000 + 678 2 4.0 3 0.621427 14.3850000000 30.8250000000 34.9350000000 + 679 2 4.0 3 0.621427 10.2750000000 30.8250000000 39.0450000000 + 680 2 4.0 3 0.621427 14.3850000000 26.7150000000 39.0450000000 + 681 2 4.0 3 0.621427 10.2750000000 34.9350000000 2.0550000000 + 682 2 4.0 3 0.621427 14.3850000000 39.0450000000 2.0550000000 + 683 2 4.0 3 0.621427 10.2750000000 39.0450000000 6.1650000000 + 684 2 4.0 3 0.621427 14.3850000000 34.9350000000 6.1650000000 + 685 2 4.0 3 0.621427 10.2750000000 34.9350000000 10.2750000000 + 686 2 4.0 3 0.621427 14.3850000000 39.0450000000 10.2750000000 + 687 2 4.0 3 0.621427 10.2750000000 39.0450000000 14.3850000000 + 688 2 4.0 3 0.621427 14.3850000000 34.9350000000 14.3850000000 + 689 2 4.0 3 0.621427 10.2750000000 34.9350000000 18.4950000000 + 690 2 4.0 3 0.621427 14.3850000000 39.0450000000 18.4950000000 + 691 2 4.0 3 0.621427 10.2750000000 39.0450000000 22.6050000000 + 692 2 4.0 3 0.621427 14.3850000000 34.9350000000 22.6050000000 + 693 2 4.0 3 0.621427 10.2750000000 34.9350000000 26.7150000000 + 694 2 4.0 3 0.621427 14.3850000000 39.0450000000 26.7150000000 + 695 2 4.0 3 0.621427 10.2750000000 39.0450000000 30.8250000000 + 696 2 4.0 3 0.621427 14.3850000000 34.9350000000 30.8250000000 + 697 2 4.0 3 0.621427 10.2750000000 34.9350000000 34.9350000000 + 698 2 4.0 3 0.621427 14.3850000000 39.0450000000 34.9350000000 + 699 2 4.0 3 0.621427 10.2750000000 39.0450000000 39.0450000000 + 700 2 4.0 3 0.621427 14.3850000000 34.9350000000 39.0450000000 + 701 2 4.0 3 0.621427 18.4950000000 2.0550000000 2.0550000000 + 702 2 4.0 3 0.621427 22.6050000000 6.1650000000 2.0550000000 + 703 2 4.0 3 0.621427 18.4950000000 6.1650000000 6.1650000000 + 704 2 4.0 3 0.621427 22.6050000000 2.0550000000 6.1650000000 + 705 2 4.0 3 0.621427 18.4950000000 2.0550000000 10.2750000000 + 706 2 4.0 3 0.621427 22.6050000000 6.1650000000 10.2750000000 + 707 2 4.0 3 0.621427 18.4950000000 6.1650000000 14.3850000000 + 708 2 4.0 3 0.621427 22.6050000000 2.0550000000 14.3850000000 + 709 2 4.0 3 0.621427 18.4950000000 2.0550000000 18.4950000000 + 710 2 4.0 3 0.621427 22.6050000000 6.1650000000 18.4950000000 + 711 2 4.0 3 0.621427 18.4950000000 6.1650000000 22.6050000000 + 712 2 4.0 3 0.621427 22.6050000000 2.0550000000 22.6050000000 + 713 2 4.0 3 0.621427 18.4950000000 2.0550000000 26.7150000000 + 714 2 4.0 3 0.621427 22.6050000000 6.1650000000 26.7150000000 + 715 2 4.0 3 0.621427 18.4950000000 6.1650000000 30.8250000000 + 716 2 4.0 3 0.621427 22.6050000000 2.0550000000 30.8250000000 + 717 2 4.0 3 0.621427 18.4950000000 2.0550000000 34.9350000000 + 718 2 4.0 3 0.621427 22.6050000000 6.1650000000 34.9350000000 + 719 2 4.0 3 0.621427 18.4950000000 6.1650000000 39.0450000000 + 720 2 4.0 3 0.621427 22.6050000000 2.0550000000 39.0450000000 + 721 2 4.0 3 0.621427 18.4950000000 10.2750000000 2.0550000000 + 722 2 4.0 3 0.621427 22.6050000000 14.3850000000 2.0550000000 + 723 2 4.0 3 0.621427 18.4950000000 14.3850000000 6.1650000000 + 724 2 4.0 3 0.621427 22.6050000000 10.2750000000 6.1650000000 + 725 2 4.0 3 0.621427 18.4950000000 10.2750000000 10.2750000000 + 726 2 4.0 3 0.621427 22.6050000000 14.3850000000 10.2750000000 + 727 2 4.0 3 0.621427 18.4950000000 14.3850000000 14.3850000000 + 728 2 4.0 3 0.621427 22.6050000000 10.2750000000 14.3850000000 + 729 2 4.0 3 0.621427 18.4950000000 10.2750000000 18.4950000000 + 730 2 4.0 3 0.621427 22.6050000000 14.3850000000 18.4950000000 + 731 2 4.0 3 0.621427 18.4950000000 14.3850000000 22.6050000000 + 732 2 4.0 3 0.621427 22.6050000000 10.2750000000 22.6050000000 + 733 2 4.0 3 0.621427 18.4950000000 10.2750000000 26.7150000000 + 734 2 4.0 3 0.621427 22.6050000000 14.3850000000 26.7150000000 + 735 2 4.0 3 0.621427 18.4950000000 14.3850000000 30.8250000000 + 736 2 4.0 3 0.621427 22.6050000000 10.2750000000 30.8250000000 + 737 2 4.0 3 0.621427 18.4950000000 10.2750000000 34.9350000000 + 738 2 4.0 3 0.621427 22.6050000000 14.3850000000 34.9350000000 + 739 2 4.0 3 0.621427 18.4950000000 14.3850000000 39.0450000000 + 740 2 4.0 3 0.621427 22.6050000000 10.2750000000 39.0450000000 + 741 2 4.0 3 0.621427 18.4950000000 18.4950000000 2.0550000000 + 742 2 4.0 3 0.621427 22.6050000000 22.6050000000 2.0550000000 + 743 2 4.0 3 0.621427 18.4950000000 22.6050000000 6.1650000000 + 744 2 4.0 3 0.621427 22.6050000000 18.4950000000 6.1650000000 + 745 2 4.0 3 0.621427 18.4950000000 18.4950000000 10.2750000000 + 746 2 4.0 3 0.621427 22.6050000000 22.6050000000 10.2750000000 + 747 2 4.0 3 0.621427 18.4950000000 22.6050000000 14.3850000000 + 748 2 4.0 3 0.621427 22.6050000000 18.4950000000 14.3850000000 + 749 2 4.0 3 0.621427 18.4950000000 18.4950000000 18.4950000000 + 750 2 4.0 3 0.621427 22.6050000000 22.6050000000 18.4950000000 + 751 2 4.0 3 0.621427 18.4950000000 22.6050000000 22.6050000000 + 752 2 4.0 3 0.621427 22.6050000000 18.4950000000 22.6050000000 + 753 2 4.0 3 0.621427 18.4950000000 18.4950000000 26.7150000000 + 754 2 4.0 3 0.621427 22.6050000000 22.6050000000 26.7150000000 + 755 2 4.0 3 0.621427 18.4950000000 22.6050000000 30.8250000000 + 756 2 4.0 3 0.621427 22.6050000000 18.4950000000 30.8250000000 + 757 2 4.0 3 0.621427 18.4950000000 18.4950000000 34.9350000000 + 758 2 4.0 3 0.621427 22.6050000000 22.6050000000 34.9350000000 + 759 2 4.0 3 0.621427 18.4950000000 22.6050000000 39.0450000000 + 760 2 4.0 3 0.621427 22.6050000000 18.4950000000 39.0450000000 + 761 2 4.0 3 0.621427 18.4950000000 26.7150000000 2.0550000000 + 762 2 4.0 3 0.621427 22.6050000000 30.8250000000 2.0550000000 + 763 2 4.0 3 0.621427 18.4950000000 30.8250000000 6.1650000000 + 764 2 4.0 3 0.621427 22.6050000000 26.7150000000 6.1650000000 + 765 2 4.0 3 0.621427 18.4950000000 26.7150000000 10.2750000000 + 766 2 4.0 3 0.621427 22.6050000000 30.8250000000 10.2750000000 + 767 2 4.0 3 0.621427 18.4950000000 30.8250000000 14.3850000000 + 768 2 4.0 3 0.621427 22.6050000000 26.7150000000 14.3850000000 + 769 2 4.0 3 0.621427 18.4950000000 26.7150000000 18.4950000000 + 770 2 4.0 3 0.621427 22.6050000000 30.8250000000 18.4950000000 + 771 2 4.0 3 0.621427 18.4950000000 30.8250000000 22.6050000000 + 772 2 4.0 3 0.621427 22.6050000000 26.7150000000 22.6050000000 + 773 2 4.0 3 0.621427 18.4950000000 26.7150000000 26.7150000000 + 774 2 4.0 3 0.621427 22.6050000000 30.8250000000 26.7150000000 + 775 2 4.0 3 0.621427 18.4950000000 30.8250000000 30.8250000000 + 776 2 4.0 3 0.621427 22.6050000000 26.7150000000 30.8250000000 + 777 2 4.0 3 0.621427 18.4950000000 26.7150000000 34.9350000000 + 778 2 4.0 3 0.621427 22.6050000000 30.8250000000 34.9350000000 + 779 2 4.0 3 0.621427 18.4950000000 30.8250000000 39.0450000000 + 780 2 4.0 3 0.621427 22.6050000000 26.7150000000 39.0450000000 + 781 2 4.0 3 0.621427 18.4950000000 34.9350000000 2.0550000000 + 782 2 4.0 3 0.621427 22.6050000000 39.0450000000 2.0550000000 + 783 2 4.0 3 0.621427 18.4950000000 39.0450000000 6.1650000000 + 784 2 4.0 3 0.621427 22.6050000000 34.9350000000 6.1650000000 + 785 2 4.0 3 0.621427 18.4950000000 34.9350000000 10.2750000000 + 786 2 4.0 3 0.621427 22.6050000000 39.0450000000 10.2750000000 + 787 2 4.0 3 0.621427 18.4950000000 39.0450000000 14.3850000000 + 788 2 4.0 3 0.621427 22.6050000000 34.9350000000 14.3850000000 + 789 2 4.0 3 0.621427 18.4950000000 34.9350000000 18.4950000000 + 790 2 4.0 3 0.621427 22.6050000000 39.0450000000 18.4950000000 + 791 2 4.0 3 0.621427 18.4950000000 39.0450000000 22.6050000000 + 792 2 4.0 3 0.621427 22.6050000000 34.9350000000 22.6050000000 + 793 2 4.0 3 0.621427 18.4950000000 34.9350000000 26.7150000000 + 794 2 4.0 3 0.621427 22.6050000000 39.0450000000 26.7150000000 + 795 2 4.0 3 0.621427 18.4950000000 39.0450000000 30.8250000000 + 796 2 4.0 3 0.621427 22.6050000000 34.9350000000 30.8250000000 + 797 2 4.0 3 0.621427 18.4950000000 34.9350000000 34.9350000000 + 798 2 4.0 3 0.621427 22.6050000000 39.0450000000 34.9350000000 + 799 2 4.0 3 0.621427 18.4950000000 39.0450000000 39.0450000000 + 800 2 4.0 3 0.621427 22.6050000000 34.9350000000 39.0450000000 + 801 2 4.0 3 0.621427 26.7150000000 2.0550000000 2.0550000000 + 802 2 4.0 3 0.621427 30.8250000000 6.1650000000 2.0550000000 + 803 2 4.0 3 0.621427 26.7150000000 6.1650000000 6.1650000000 + 804 2 4.0 3 0.621427 30.8250000000 2.0550000000 6.1650000000 + 805 2 4.0 3 0.621427 26.7150000000 2.0550000000 10.2750000000 + 806 2 4.0 3 0.621427 30.8250000000 6.1650000000 10.2750000000 + 807 2 4.0 3 0.621427 26.7150000000 6.1650000000 14.3850000000 + 808 2 4.0 3 0.621427 30.8250000000 2.0550000000 14.3850000000 + 809 2 4.0 3 0.621427 26.7150000000 2.0550000000 18.4950000000 + 810 2 4.0 3 0.621427 30.8250000000 6.1650000000 18.4950000000 + 811 2 4.0 3 0.621427 26.7150000000 6.1650000000 22.6050000000 + 812 2 4.0 3 0.621427 30.8250000000 2.0550000000 22.6050000000 + 813 2 4.0 3 0.621427 26.7150000000 2.0550000000 26.7150000000 + 814 2 4.0 3 0.621427 30.8250000000 6.1650000000 26.7150000000 + 815 2 4.0 3 0.621427 26.7150000000 6.1650000000 30.8250000000 + 816 2 4.0 3 0.621427 30.8250000000 2.0550000000 30.8250000000 + 817 2 4.0 3 0.621427 26.7150000000 2.0550000000 34.9350000000 + 818 2 4.0 3 0.621427 30.8250000000 6.1650000000 34.9350000000 + 819 2 4.0 3 0.621427 26.7150000000 6.1650000000 39.0450000000 + 820 2 4.0 3 0.621427 30.8250000000 2.0550000000 39.0450000000 + 821 2 4.0 3 0.621427 26.7150000000 10.2750000000 2.0550000000 + 822 2 4.0 3 0.621427 30.8250000000 14.3850000000 2.0550000000 + 823 2 4.0 3 0.621427 26.7150000000 14.3850000000 6.1650000000 + 824 2 4.0 3 0.621427 30.8250000000 10.2750000000 6.1650000000 + 825 2 4.0 3 0.621427 26.7150000000 10.2750000000 10.2750000000 + 826 2 4.0 3 0.621427 30.8250000000 14.3850000000 10.2750000000 + 827 2 4.0 3 0.621427 26.7150000000 14.3850000000 14.3850000000 + 828 2 4.0 3 0.621427 30.8250000000 10.2750000000 14.3850000000 + 829 2 4.0 3 0.621427 26.7150000000 10.2750000000 18.4950000000 + 830 2 4.0 3 0.621427 30.8250000000 14.3850000000 18.4950000000 + 831 2 4.0 3 0.621427 26.7150000000 14.3850000000 22.6050000000 + 832 2 4.0 3 0.621427 30.8250000000 10.2750000000 22.6050000000 + 833 2 4.0 3 0.621427 26.7150000000 10.2750000000 26.7150000000 + 834 2 4.0 3 0.621427 30.8250000000 14.3850000000 26.7150000000 + 835 2 4.0 3 0.621427 26.7150000000 14.3850000000 30.8250000000 + 836 2 4.0 3 0.621427 30.8250000000 10.2750000000 30.8250000000 + 837 2 4.0 3 0.621427 26.7150000000 10.2750000000 34.9350000000 + 838 2 4.0 3 0.621427 30.8250000000 14.3850000000 34.9350000000 + 839 2 4.0 3 0.621427 26.7150000000 14.3850000000 39.0450000000 + 840 2 4.0 3 0.621427 30.8250000000 10.2750000000 39.0450000000 + 841 2 4.0 3 0.621427 26.7150000000 18.4950000000 2.0550000000 + 842 2 4.0 3 0.621427 30.8250000000 22.6050000000 2.0550000000 + 843 2 4.0 3 0.621427 26.7150000000 22.6050000000 6.1650000000 + 844 2 4.0 3 0.621427 30.8250000000 18.4950000000 6.1650000000 + 845 2 4.0 3 0.621427 26.7150000000 18.4950000000 10.2750000000 + 846 2 4.0 3 0.621427 30.8250000000 22.6050000000 10.2750000000 + 847 2 4.0 3 0.621427 26.7150000000 22.6050000000 14.3850000000 + 848 2 4.0 3 0.621427 30.8250000000 18.4950000000 14.3850000000 + 849 2 4.0 3 0.621427 26.7150000000 18.4950000000 18.4950000000 + 850 2 4.0 3 0.621427 30.8250000000 22.6050000000 18.4950000000 + 851 2 4.0 3 0.621427 26.7150000000 22.6050000000 22.6050000000 + 852 2 4.0 3 0.621427 30.8250000000 18.4950000000 22.6050000000 + 853 2 4.0 3 0.621427 26.7150000000 18.4950000000 26.7150000000 + 854 2 4.0 3 0.621427 30.8250000000 22.6050000000 26.7150000000 + 855 2 4.0 3 0.621427 26.7150000000 22.6050000000 30.8250000000 + 856 2 4.0 3 0.621427 30.8250000000 18.4950000000 30.8250000000 + 857 2 4.0 3 0.621427 26.7150000000 18.4950000000 34.9350000000 + 858 2 4.0 3 0.621427 30.8250000000 22.6050000000 34.9350000000 + 859 2 4.0 3 0.621427 26.7150000000 22.6050000000 39.0450000000 + 860 2 4.0 3 0.621427 30.8250000000 18.4950000000 39.0450000000 + 861 2 4.0 3 0.621427 26.7150000000 26.7150000000 2.0550000000 + 862 2 4.0 3 0.621427 30.8250000000 30.8250000000 2.0550000000 + 863 2 4.0 3 0.621427 26.7150000000 30.8250000000 6.1650000000 + 864 2 4.0 3 0.621427 30.8250000000 26.7150000000 6.1650000000 + 865 2 4.0 3 0.621427 26.7150000000 26.7150000000 10.2750000000 + 866 2 4.0 3 0.621427 30.8250000000 30.8250000000 10.2750000000 + 867 2 4.0 3 0.621427 26.7150000000 30.8250000000 14.3850000000 + 868 2 4.0 3 0.621427 30.8250000000 26.7150000000 14.3850000000 + 869 2 4.0 3 0.621427 26.7150000000 26.7150000000 18.4950000000 + 870 2 4.0 3 0.621427 30.8250000000 30.8250000000 18.4950000000 + 871 2 4.0 3 0.621427 26.7150000000 30.8250000000 22.6050000000 + 872 2 4.0 3 0.621427 30.8250000000 26.7150000000 22.6050000000 + 873 2 4.0 3 0.621427 26.7150000000 26.7150000000 26.7150000000 + 874 2 4.0 3 0.621427 30.8250000000 30.8250000000 26.7150000000 + 875 2 4.0 3 0.621427 26.7150000000 30.8250000000 30.8250000000 + 876 2 4.0 3 0.621427 30.8250000000 26.7150000000 30.8250000000 + 877 2 4.0 3 0.621427 26.7150000000 26.7150000000 34.9350000000 + 878 2 4.0 3 0.621427 30.8250000000 30.8250000000 34.9350000000 + 879 2 4.0 3 0.621427 26.7150000000 30.8250000000 39.0450000000 + 880 2 4.0 3 0.621427 30.8250000000 26.7150000000 39.0450000000 + 881 2 4.0 3 0.621427 26.7150000000 34.9350000000 2.0550000000 + 882 2 4.0 3 0.621427 30.8250000000 39.0450000000 2.0550000000 + 883 2 4.0 3 0.621427 26.7150000000 39.0450000000 6.1650000000 + 884 2 4.0 3 0.621427 30.8250000000 34.9350000000 6.1650000000 + 885 2 4.0 3 0.621427 26.7150000000 34.9350000000 10.2750000000 + 886 2 4.0 3 0.621427 30.8250000000 39.0450000000 10.2750000000 + 887 2 4.0 3 0.621427 26.7150000000 39.0450000000 14.3850000000 + 888 2 4.0 3 0.621427 30.8250000000 34.9350000000 14.3850000000 + 889 2 4.0 3 0.621427 26.7150000000 34.9350000000 18.4950000000 + 890 2 4.0 3 0.621427 30.8250000000 39.0450000000 18.4950000000 + 891 2 4.0 3 0.621427 26.7150000000 39.0450000000 22.6050000000 + 892 2 4.0 3 0.621427 30.8250000000 34.9350000000 22.6050000000 + 893 2 4.0 3 0.621427 26.7150000000 34.9350000000 26.7150000000 + 894 2 4.0 3 0.621427 30.8250000000 39.0450000000 26.7150000000 + 895 2 4.0 3 0.621427 26.7150000000 39.0450000000 30.8250000000 + 896 2 4.0 3 0.621427 30.8250000000 34.9350000000 30.8250000000 + 897 2 4.0 3 0.621427 26.7150000000 34.9350000000 34.9350000000 + 898 2 4.0 3 0.621427 30.8250000000 39.0450000000 34.9350000000 + 899 2 4.0 3 0.621427 26.7150000000 39.0450000000 39.0450000000 + 900 2 4.0 3 0.621427 30.8250000000 34.9350000000 39.0450000000 + 901 2 4.0 3 0.621427 34.9350000000 2.0550000000 2.0550000000 + 902 2 4.0 3 0.621427 39.0450000000 6.1650000000 2.0550000000 + 903 2 4.0 3 0.621427 34.9350000000 6.1650000000 6.1650000000 + 904 2 4.0 3 0.621427 39.0450000000 2.0550000000 6.1650000000 + 905 2 4.0 3 0.621427 34.9350000000 2.0550000000 10.2750000000 + 906 2 4.0 3 0.621427 39.0450000000 6.1650000000 10.2750000000 + 907 2 4.0 3 0.621427 34.9350000000 6.1650000000 14.3850000000 + 908 2 4.0 3 0.621427 39.0450000000 2.0550000000 14.3850000000 + 909 2 4.0 3 0.621427 34.9350000000 2.0550000000 18.4950000000 + 910 2 4.0 3 0.621427 39.0450000000 6.1650000000 18.4950000000 + 911 2 4.0 3 0.621427 34.9350000000 6.1650000000 22.6050000000 + 912 2 4.0 3 0.621427 39.0450000000 2.0550000000 22.6050000000 + 913 2 4.0 3 0.621427 34.9350000000 2.0550000000 26.7150000000 + 914 2 4.0 3 0.621427 39.0450000000 6.1650000000 26.7150000000 + 915 2 4.0 3 0.621427 34.9350000000 6.1650000000 30.8250000000 + 916 2 4.0 3 0.621427 39.0450000000 2.0550000000 30.8250000000 + 917 2 4.0 3 0.621427 34.9350000000 2.0550000000 34.9350000000 + 918 2 4.0 3 0.621427 39.0450000000 6.1650000000 34.9350000000 + 919 2 4.0 3 0.621427 34.9350000000 6.1650000000 39.0450000000 + 920 2 4.0 3 0.621427 39.0450000000 2.0550000000 39.0450000000 + 921 2 4.0 3 0.621427 34.9350000000 10.2750000000 2.0550000000 + 922 2 4.0 3 0.621427 39.0450000000 14.3850000000 2.0550000000 + 923 2 4.0 3 0.621427 34.9350000000 14.3850000000 6.1650000000 + 924 2 4.0 3 0.621427 39.0450000000 10.2750000000 6.1650000000 + 925 2 4.0 3 0.621427 34.9350000000 10.2750000000 10.2750000000 + 926 2 4.0 3 0.621427 39.0450000000 14.3850000000 10.2750000000 + 927 2 4.0 3 0.621427 34.9350000000 14.3850000000 14.3850000000 + 928 2 4.0 3 0.621427 39.0450000000 10.2750000000 14.3850000000 + 929 2 4.0 3 0.621427 34.9350000000 10.2750000000 18.4950000000 + 930 2 4.0 3 0.621427 39.0450000000 14.3850000000 18.4950000000 + 931 2 4.0 3 0.621427 34.9350000000 14.3850000000 22.6050000000 + 932 2 4.0 3 0.621427 39.0450000000 10.2750000000 22.6050000000 + 933 2 4.0 3 0.621427 34.9350000000 10.2750000000 26.7150000000 + 934 2 4.0 3 0.621427 39.0450000000 14.3850000000 26.7150000000 + 935 2 4.0 3 0.621427 34.9350000000 14.3850000000 30.8250000000 + 936 2 4.0 3 0.621427 39.0450000000 10.2750000000 30.8250000000 + 937 2 4.0 3 0.621427 34.9350000000 10.2750000000 34.9350000000 + 938 2 4.0 3 0.621427 39.0450000000 14.3850000000 34.9350000000 + 939 2 4.0 3 0.621427 34.9350000000 14.3850000000 39.0450000000 + 940 2 4.0 3 0.621427 39.0450000000 10.2750000000 39.0450000000 + 941 2 4.0 3 0.621427 34.9350000000 18.4950000000 2.0550000000 + 942 2 4.0 3 0.621427 39.0450000000 22.6050000000 2.0550000000 + 943 2 4.0 3 0.621427 34.9350000000 22.6050000000 6.1650000000 + 944 2 4.0 3 0.621427 39.0450000000 18.4950000000 6.1650000000 + 945 2 4.0 3 0.621427 34.9350000000 18.4950000000 10.2750000000 + 946 2 4.0 3 0.621427 39.0450000000 22.6050000000 10.2750000000 + 947 2 4.0 3 0.621427 34.9350000000 22.6050000000 14.3850000000 + 948 2 4.0 3 0.621427 39.0450000000 18.4950000000 14.3850000000 + 949 2 4.0 3 0.621427 34.9350000000 18.4950000000 18.4950000000 + 950 2 4.0 3 0.621427 39.0450000000 22.6050000000 18.4950000000 + 951 2 4.0 3 0.621427 34.9350000000 22.6050000000 22.6050000000 + 952 2 4.0 3 0.621427 39.0450000000 18.4950000000 22.6050000000 + 953 2 4.0 3 0.621427 34.9350000000 18.4950000000 26.7150000000 + 954 2 4.0 3 0.621427 39.0450000000 22.6050000000 26.7150000000 + 955 2 4.0 3 0.621427 34.9350000000 22.6050000000 30.8250000000 + 956 2 4.0 3 0.621427 39.0450000000 18.4950000000 30.8250000000 + 957 2 4.0 3 0.621427 34.9350000000 18.4950000000 34.9350000000 + 958 2 4.0 3 0.621427 39.0450000000 22.6050000000 34.9350000000 + 959 2 4.0 3 0.621427 34.9350000000 22.6050000000 39.0450000000 + 960 2 4.0 3 0.621427 39.0450000000 18.4950000000 39.0450000000 + 961 2 4.0 3 0.621427 34.9350000000 26.7150000000 2.0550000000 + 962 2 4.0 3 0.621427 39.0450000000 30.8250000000 2.0550000000 + 963 2 4.0 3 0.621427 34.9350000000 30.8250000000 6.1650000000 + 964 2 4.0 3 0.621427 39.0450000000 26.7150000000 6.1650000000 + 965 2 4.0 3 0.621427 34.9350000000 26.7150000000 10.2750000000 + 966 2 4.0 3 0.621427 39.0450000000 30.8250000000 10.2750000000 + 967 2 4.0 3 0.621427 34.9350000000 30.8250000000 14.3850000000 + 968 2 4.0 3 0.621427 39.0450000000 26.7150000000 14.3850000000 + 969 2 4.0 3 0.621427 34.9350000000 26.7150000000 18.4950000000 + 970 2 4.0 3 0.621427 39.0450000000 30.8250000000 18.4950000000 + 971 2 4.0 3 0.621427 34.9350000000 30.8250000000 22.6050000000 + 972 2 4.0 3 0.621427 39.0450000000 26.7150000000 22.6050000000 + 973 2 4.0 3 0.621427 34.9350000000 26.7150000000 26.7150000000 + 974 2 4.0 3 0.621427 39.0450000000 30.8250000000 26.7150000000 + 975 2 4.0 3 0.621427 34.9350000000 30.8250000000 30.8250000000 + 976 2 4.0 3 0.621427 39.0450000000 26.7150000000 30.8250000000 + 977 2 4.0 3 0.621427 34.9350000000 26.7150000000 34.9350000000 + 978 2 4.0 3 0.621427 39.0450000000 30.8250000000 34.9350000000 + 979 2 4.0 3 0.621427 34.9350000000 30.8250000000 39.0450000000 + 980 2 4.0 3 0.621427 39.0450000000 26.7150000000 39.0450000000 + 981 2 4.0 3 0.621427 34.9350000000 34.9350000000 2.0550000000 + 982 2 4.0 3 0.621427 39.0450000000 39.0450000000 2.0550000000 + 983 2 4.0 3 0.621427 34.9350000000 39.0450000000 6.1650000000 + 984 2 4.0 3 0.621427 39.0450000000 34.9350000000 6.1650000000 + 985 2 4.0 3 0.621427 34.9350000000 34.9350000000 10.2750000000 + 986 2 4.0 3 0.621427 39.0450000000 39.0450000000 10.2750000000 + 987 2 4.0 3 0.621427 34.9350000000 39.0450000000 14.3850000000 + 988 2 4.0 3 0.621427 39.0450000000 34.9350000000 14.3850000000 + 989 2 4.0 3 0.621427 34.9350000000 34.9350000000 18.4950000000 + 990 2 4.0 3 0.621427 39.0450000000 39.0450000000 18.4950000000 + 991 2 4.0 3 0.621427 34.9350000000 39.0450000000 22.6050000000 + 992 2 4.0 3 0.621427 39.0450000000 34.9350000000 22.6050000000 + 993 2 4.0 3 0.621427 34.9350000000 34.9350000000 26.7150000000 + 994 2 4.0 3 0.621427 39.0450000000 39.0450000000 26.7150000000 + 995 2 4.0 3 0.621427 34.9350000000 39.0450000000 30.8250000000 + 996 2 4.0 3 0.621427 39.0450000000 34.9350000000 30.8250000000 + 997 2 4.0 3 0.621427 34.9350000000 34.9350000000 34.9350000000 + 998 2 4.0 3 0.621427 39.0450000000 39.0450000000 34.9350000000 + 999 2 4.0 3 0.621427 34.9350000000 39.0450000000 39.0450000000 + 1000 2 4.0 3 0.621427 39.0450000000 34.9350000000 39.0450000000 + 1001 3 0.0 1 1.500000 1.2330000000 1.2330000000 1.2330000000 + 1002 3 0.0 -1 1.500000 1.2330000000 1.2330000000 1.2330000000 + 1003 3 0.0 1 1.500000 1.2330000000 2.8770000000 2.8770000000 + 1004 3 0.0 -1 1.500000 1.2330000000 2.8770000000 2.8770000000 + 1005 3 0.0 1 1.500000 2.8770000000 1.2330000000 2.8770000000 + 1006 3 0.0 -1 1.500000 2.8770000000 1.2330000000 2.8770000000 + 1007 3 0.0 1 1.500000 2.8770000000 2.8770000000 1.2330000000 + 1008 3 0.0 -1 1.500000 2.8770000000 2.8770000000 1.2330000000 + 1009 3 0.0 1 1.500000 5.3430000000 5.3430000000 1.2330000000 + 1010 3 0.0 -1 1.500000 5.3430000000 5.3430000000 1.2330000000 + 1011 3 0.0 1 1.500000 5.3430000000 6.9870000000 2.8770000000 + 1012 3 0.0 -1 1.500000 5.3430000000 6.9870000000 2.8770000000 + 1013 3 0.0 1 1.500000 6.9870000000 5.3430000000 2.8770000000 + 1014 3 0.0 -1 1.500000 6.9870000000 5.3430000000 2.8770000000 + 1015 3 0.0 1 1.500000 6.9870000000 6.9870000000 1.2330000000 + 1016 3 0.0 -1 1.500000 6.9870000000 6.9870000000 1.2330000000 + 1017 3 0.0 1 1.500000 1.2330000000 5.3430000000 5.3430000000 + 1018 3 0.0 -1 1.500000 1.2330000000 5.3430000000 5.3430000000 + 1019 3 0.0 1 1.500000 2.8770000000 5.3430000000 6.9870000000 + 1020 3 0.0 -1 1.500000 2.8770000000 5.3430000000 6.9870000000 + 1021 3 0.0 1 1.500000 2.8770000000 6.9870000000 5.3430000000 + 1022 3 0.0 -1 1.500000 2.8770000000 6.9870000000 5.3430000000 + 1023 3 0.0 1 1.500000 1.2330000000 6.9870000000 6.9870000000 + 1024 3 0.0 -1 1.500000 1.2330000000 6.9870000000 6.9870000000 + 1025 3 0.0 1 1.500000 5.3430000000 1.2330000000 5.3430000000 + 1026 3 0.0 -1 1.500000 5.3430000000 1.2330000000 5.3430000000 + 1027 3 0.0 1 1.500000 5.3430000000 2.8770000000 6.9870000000 + 1028 3 0.0 -1 1.500000 5.3430000000 2.8770000000 6.9870000000 + 1029 3 0.0 1 1.500000 6.9870000000 2.8770000000 5.3430000000 + 1030 3 0.0 -1 1.500000 6.9870000000 2.8770000000 5.3430000000 + 1031 3 0.0 1 1.500000 6.9870000000 1.2330000000 6.9870000000 + 1032 3 0.0 -1 1.500000 6.9870000000 1.2330000000 6.9870000000 + 1033 3 0.0 1 1.500000 1.2330000000 1.2330000000 9.4530000000 + 1034 3 0.0 -1 1.500000 1.2330000000 1.2330000000 9.4530000000 + 1035 3 0.0 1 1.500000 1.2330000000 2.8770000000 11.0970000000 + 1036 3 0.0 -1 1.500000 1.2330000000 2.8770000000 11.0970000000 + 1037 3 0.0 1 1.500000 2.8770000000 1.2330000000 11.0970000000 + 1038 3 0.0 -1 1.500000 2.8770000000 1.2330000000 11.0970000000 + 1039 3 0.0 1 1.500000 2.8770000000 2.8770000000 9.4530000000 + 1040 3 0.0 -1 1.500000 2.8770000000 2.8770000000 9.4530000000 + 1041 3 0.0 1 1.500000 5.3430000000 5.3430000000 9.4530000000 + 1042 3 0.0 -1 1.500000 5.3430000000 5.3430000000 9.4530000000 + 1043 3 0.0 1 1.500000 5.3430000000 6.9870000000 11.0970000000 + 1044 3 0.0 -1 1.500000 5.3430000000 6.9870000000 11.0970000000 + 1045 3 0.0 1 1.500000 6.9870000000 5.3430000000 11.0970000000 + 1046 3 0.0 -1 1.500000 6.9870000000 5.3430000000 11.0970000000 + 1047 3 0.0 1 1.500000 6.9870000000 6.9870000000 9.4530000000 + 1048 3 0.0 -1 1.500000 6.9870000000 6.9870000000 9.4530000000 + 1049 3 0.0 1 1.500000 1.2330000000 5.3430000000 13.5630000000 + 1050 3 0.0 -1 1.500000 1.2330000000 5.3430000000 13.5630000000 + 1051 3 0.0 1 1.500000 2.8770000000 5.3430000000 15.2070000000 + 1052 3 0.0 -1 1.500000 2.8770000000 5.3430000000 15.2070000000 + 1053 3 0.0 1 1.500000 2.8770000000 6.9870000000 13.5630000000 + 1054 3 0.0 -1 1.500000 2.8770000000 6.9870000000 13.5630000000 + 1055 3 0.0 1 1.500000 1.2330000000 6.9870000000 15.2070000000 + 1056 3 0.0 -1 1.500000 1.2330000000 6.9870000000 15.2070000000 + 1057 3 0.0 1 1.500000 5.3430000000 1.2330000000 13.5630000000 + 1058 3 0.0 -1 1.500000 5.3430000000 1.2330000000 13.5630000000 + 1059 3 0.0 1 1.500000 5.3430000000 2.8770000000 15.2070000000 + 1060 3 0.0 -1 1.500000 5.3430000000 2.8770000000 15.2070000000 + 1061 3 0.0 1 1.500000 6.9870000000 2.8770000000 13.5630000000 + 1062 3 0.0 -1 1.500000 6.9870000000 2.8770000000 13.5630000000 + 1063 3 0.0 1 1.500000 6.9870000000 1.2330000000 15.2070000000 + 1064 3 0.0 -1 1.500000 6.9870000000 1.2330000000 15.2070000000 + 1065 3 0.0 1 1.500000 1.2330000000 1.2330000000 17.6730000000 + 1066 3 0.0 -1 1.500000 1.2330000000 1.2330000000 17.6730000000 + 1067 3 0.0 1 1.500000 1.2330000000 2.8770000000 19.3170000000 + 1068 3 0.0 -1 1.500000 1.2330000000 2.8770000000 19.3170000000 + 1069 3 0.0 1 1.500000 2.8770000000 1.2330000000 19.3170000000 + 1070 3 0.0 -1 1.500000 2.8770000000 1.2330000000 19.3170000000 + 1071 3 0.0 1 1.500000 2.8770000000 2.8770000000 17.6730000000 + 1072 3 0.0 -1 1.500000 2.8770000000 2.8770000000 17.6730000000 + 1073 3 0.0 1 1.500000 5.3430000000 5.3430000000 17.6730000000 + 1074 3 0.0 -1 1.500000 5.3430000000 5.3430000000 17.6730000000 + 1075 3 0.0 1 1.500000 5.3430000000 6.9870000000 19.3170000000 + 1076 3 0.0 -1 1.500000 5.3430000000 6.9870000000 19.3170000000 + 1077 3 0.0 1 1.500000 6.9870000000 5.3430000000 19.3170000000 + 1078 3 0.0 -1 1.500000 6.9870000000 5.3430000000 19.3170000000 + 1079 3 0.0 1 1.500000 6.9870000000 6.9870000000 17.6730000000 + 1080 3 0.0 -1 1.500000 6.9870000000 6.9870000000 17.6730000000 + 1081 3 0.0 1 1.500000 1.2330000000 5.3430000000 21.7830000000 + 1082 3 0.0 -1 1.500000 1.2330000000 5.3430000000 21.7830000000 + 1083 3 0.0 1 1.500000 2.8770000000 5.3430000000 23.4270000000 + 1084 3 0.0 -1 1.500000 2.8770000000 5.3430000000 23.4270000000 + 1085 3 0.0 1 1.500000 2.8770000000 6.9870000000 21.7830000000 + 1086 3 0.0 -1 1.500000 2.8770000000 6.9870000000 21.7830000000 + 1087 3 0.0 1 1.500000 1.2330000000 6.9870000000 23.4270000000 + 1088 3 0.0 -1 1.500000 1.2330000000 6.9870000000 23.4270000000 + 1089 3 0.0 1 1.500000 5.3430000000 1.2330000000 21.7830000000 + 1090 3 0.0 -1 1.500000 5.3430000000 1.2330000000 21.7830000000 + 1091 3 0.0 1 1.500000 5.3430000000 2.8770000000 23.4270000000 + 1092 3 0.0 -1 1.500000 5.3430000000 2.8770000000 23.4270000000 + 1093 3 0.0 1 1.500000 6.9870000000 2.8770000000 21.7830000000 + 1094 3 0.0 -1 1.500000 6.9870000000 2.8770000000 21.7830000000 + 1095 3 0.0 1 1.500000 6.9870000000 1.2330000000 23.4270000000 + 1096 3 0.0 -1 1.500000 6.9870000000 1.2330000000 23.4270000000 + 1097 3 0.0 1 1.500000 1.2330000000 1.2330000000 25.8930000000 + 1098 3 0.0 -1 1.500000 1.2330000000 1.2330000000 25.8930000000 + 1099 3 0.0 1 1.500000 1.2330000000 2.8770000000 27.5370000000 + 1100 3 0.0 -1 1.500000 1.2330000000 2.8770000000 27.5370000000 + 1101 3 0.0 1 1.500000 2.8770000000 1.2330000000 27.5370000000 + 1102 3 0.0 -1 1.500000 2.8770000000 1.2330000000 27.5370000000 + 1103 3 0.0 1 1.500000 2.8770000000 2.8770000000 25.8930000000 + 1104 3 0.0 -1 1.500000 2.8770000000 2.8770000000 25.8930000000 + 1105 3 0.0 1 1.500000 5.3430000000 5.3430000000 25.8930000000 + 1106 3 0.0 -1 1.500000 5.3430000000 5.3430000000 25.8930000000 + 1107 3 0.0 1 1.500000 5.3430000000 6.9870000000 27.5370000000 + 1108 3 0.0 -1 1.500000 5.3430000000 6.9870000000 27.5370000000 + 1109 3 0.0 1 1.500000 6.9870000000 5.3430000000 27.5370000000 + 1110 3 0.0 -1 1.500000 6.9870000000 5.3430000000 27.5370000000 + 1111 3 0.0 1 1.500000 6.9870000000 6.9870000000 25.8930000000 + 1112 3 0.0 -1 1.500000 6.9870000000 6.9870000000 25.8930000000 + 1113 3 0.0 1 1.500000 1.2330000000 5.3430000000 30.0030000000 + 1114 3 0.0 -1 1.500000 1.2330000000 5.3430000000 30.0030000000 + 1115 3 0.0 1 1.500000 2.8770000000 5.3430000000 31.6470000000 + 1116 3 0.0 -1 1.500000 2.8770000000 5.3430000000 31.6470000000 + 1117 3 0.0 1 1.500000 2.8770000000 6.9870000000 30.0030000000 + 1118 3 0.0 -1 1.500000 2.8770000000 6.9870000000 30.0030000000 + 1119 3 0.0 1 1.500000 1.2330000000 6.9870000000 31.6470000000 + 1120 3 0.0 -1 1.500000 1.2330000000 6.9870000000 31.6470000000 + 1121 3 0.0 1 1.500000 5.3430000000 1.2330000000 30.0030000000 + 1122 3 0.0 -1 1.500000 5.3430000000 1.2330000000 30.0030000000 + 1123 3 0.0 1 1.500000 5.3430000000 2.8770000000 31.6470000000 + 1124 3 0.0 -1 1.500000 5.3430000000 2.8770000000 31.6470000000 + 1125 3 0.0 1 1.500000 6.9870000000 2.8770000000 30.0030000000 + 1126 3 0.0 -1 1.500000 6.9870000000 2.8770000000 30.0030000000 + 1127 3 0.0 1 1.500000 6.9870000000 1.2330000000 31.6470000000 + 1128 3 0.0 -1 1.500000 6.9870000000 1.2330000000 31.6470000000 + 1129 3 0.0 1 1.500000 1.2330000000 1.2330000000 34.1130000000 + 1130 3 0.0 -1 1.500000 1.2330000000 1.2330000000 34.1130000000 + 1131 3 0.0 1 1.500000 1.2330000000 2.8770000000 35.7570000000 + 1132 3 0.0 -1 1.500000 1.2330000000 2.8770000000 35.7570000000 + 1133 3 0.0 1 1.500000 2.8770000000 1.2330000000 35.7570000000 + 1134 3 0.0 -1 1.500000 2.8770000000 1.2330000000 35.7570000000 + 1135 3 0.0 1 1.500000 2.8770000000 2.8770000000 34.1130000000 + 1136 3 0.0 -1 1.500000 2.8770000000 2.8770000000 34.1130000000 + 1137 3 0.0 1 1.500000 5.3430000000 5.3430000000 34.1130000000 + 1138 3 0.0 -1 1.500000 5.3430000000 5.3430000000 34.1130000000 + 1139 3 0.0 1 1.500000 5.3430000000 6.9870000000 35.7570000000 + 1140 3 0.0 -1 1.500000 5.3430000000 6.9870000000 35.7570000000 + 1141 3 0.0 1 1.500000 6.9870000000 5.3430000000 35.7570000000 + 1142 3 0.0 -1 1.500000 6.9870000000 5.3430000000 35.7570000000 + 1143 3 0.0 1 1.500000 6.9870000000 6.9870000000 34.1130000000 + 1144 3 0.0 -1 1.500000 6.9870000000 6.9870000000 34.1130000000 + 1145 3 0.0 1 1.500000 2.8770000000 5.3430000000 39.8670000000 + 1146 3 0.0 -1 1.500000 2.8770000000 5.3430000000 39.8670000000 + 1147 3 0.0 1 1.500000 1.2330000000 5.3430000000 38.2230000000 + 1148 3 0.0 -1 1.500000 1.2330000000 5.3430000000 38.2230000000 + 1149 3 0.0 1 1.500000 1.2330000000 6.9870000000 39.8670000000 + 1150 3 0.0 -1 1.500000 1.2330000000 6.9870000000 39.8670000000 + 1151 3 0.0 1 1.500000 2.8770000000 6.9870000000 38.2230000000 + 1152 3 0.0 -1 1.500000 2.8770000000 6.9870000000 38.2230000000 + 1153 3 0.0 1 1.500000 5.3430000000 2.8770000000 39.8670000000 + 1154 3 0.0 -1 1.500000 5.3430000000 2.8770000000 39.8670000000 + 1155 3 0.0 1 1.500000 5.3430000000 1.2330000000 38.2230000000 + 1156 3 0.0 -1 1.500000 5.3430000000 1.2330000000 38.2230000000 + 1157 3 0.0 1 1.500000 6.9870000000 1.2330000000 39.8670000000 + 1158 3 0.0 -1 1.500000 6.9870000000 1.2330000000 39.8670000000 + 1159 3 0.0 1 1.500000 6.9870000000 2.8770000000 38.2230000000 + 1160 3 0.0 -1 1.500000 6.9870000000 2.8770000000 38.2230000000 + 1161 3 0.0 1 1.500000 1.2330000000 9.4530000000 1.2330000000 + 1162 3 0.0 -1 1.500000 1.2330000000 9.4530000000 1.2330000000 + 1163 3 0.0 1 1.500000 1.2330000000 11.0970000000 2.8770000000 + 1164 3 0.0 -1 1.500000 1.2330000000 11.0970000000 2.8770000000 + 1165 3 0.0 1 1.500000 2.8770000000 9.4530000000 2.8770000000 + 1166 3 0.0 -1 1.500000 2.8770000000 9.4530000000 2.8770000000 + 1167 3 0.0 1 1.500000 2.8770000000 11.0970000000 1.2330000000 + 1168 3 0.0 -1 1.500000 2.8770000000 11.0970000000 1.2330000000 + 1169 3 0.0 1 1.500000 5.3430000000 13.5630000000 1.2330000000 + 1170 3 0.0 -1 1.500000 5.3430000000 13.5630000000 1.2330000000 + 1171 3 0.0 1 1.500000 5.3430000000 15.2070000000 2.8770000000 + 1172 3 0.0 -1 1.500000 5.3430000000 15.2070000000 2.8770000000 + 1173 3 0.0 1 1.500000 6.9870000000 13.5630000000 2.8770000000 + 1174 3 0.0 -1 1.500000 6.9870000000 13.5630000000 2.8770000000 + 1175 3 0.0 1 1.500000 6.9870000000 15.2070000000 1.2330000000 + 1176 3 0.0 -1 1.500000 6.9870000000 15.2070000000 1.2330000000 + 1177 3 0.0 1 1.500000 1.2330000000 13.5630000000 5.3430000000 + 1178 3 0.0 -1 1.500000 1.2330000000 13.5630000000 5.3430000000 + 1179 3 0.0 1 1.500000 2.8770000000 13.5630000000 6.9870000000 + 1180 3 0.0 -1 1.500000 2.8770000000 13.5630000000 6.9870000000 + 1181 3 0.0 1 1.500000 2.8770000000 15.2070000000 5.3430000000 + 1182 3 0.0 -1 1.500000 2.8770000000 15.2070000000 5.3430000000 + 1183 3 0.0 1 1.500000 1.2330000000 15.2070000000 6.9870000000 + 1184 3 0.0 -1 1.500000 1.2330000000 15.2070000000 6.9870000000 + 1185 3 0.0 1 1.500000 5.3430000000 9.4530000000 5.3430000000 + 1186 3 0.0 -1 1.500000 5.3430000000 9.4530000000 5.3430000000 + 1187 3 0.0 1 1.500000 5.3430000000 11.0970000000 6.9870000000 + 1188 3 0.0 -1 1.500000 5.3430000000 11.0970000000 6.9870000000 + 1189 3 0.0 1 1.500000 6.9870000000 11.0970000000 5.3430000000 + 1190 3 0.0 -1 1.500000 6.9870000000 11.0970000000 5.3430000000 + 1191 3 0.0 1 1.500000 6.9870000000 9.4530000000 6.9870000000 + 1192 3 0.0 -1 1.500000 6.9870000000 9.4530000000 6.9870000000 + 1193 3 0.0 1 1.500000 1.2330000000 9.4530000000 9.4530000000 + 1194 3 0.0 -1 1.500000 1.2330000000 9.4530000000 9.4530000000 + 1195 3 0.0 1 1.500000 1.2330000000 11.0970000000 11.0970000000 + 1196 3 0.0 -1 1.500000 1.2330000000 11.0970000000 11.0970000000 + 1197 3 0.0 1 1.500000 2.8770000000 9.4530000000 11.0970000000 + 1198 3 0.0 -1 1.500000 2.8770000000 9.4530000000 11.0970000000 + 1199 3 0.0 1 1.500000 2.8770000000 11.0970000000 9.4530000000 + 1200 3 0.0 -1 1.500000 2.8770000000 11.0970000000 9.4530000000 + 1201 3 0.0 1 1.500000 5.3430000000 13.5630000000 9.4530000000 + 1202 3 0.0 -1 1.500000 5.3430000000 13.5630000000 9.4530000000 + 1203 3 0.0 1 1.500000 5.3430000000 15.2070000000 11.0970000000 + 1204 3 0.0 -1 1.500000 5.3430000000 15.2070000000 11.0970000000 + 1205 3 0.0 1 1.500000 6.9870000000 13.5630000000 11.0970000000 + 1206 3 0.0 -1 1.500000 6.9870000000 13.5630000000 11.0970000000 + 1207 3 0.0 1 1.500000 6.9870000000 15.2070000000 9.4530000000 + 1208 3 0.0 -1 1.500000 6.9870000000 15.2070000000 9.4530000000 + 1209 3 0.0 1 1.500000 1.2330000000 13.5630000000 13.5630000000 + 1210 3 0.0 -1 1.500000 1.2330000000 13.5630000000 13.5630000000 + 1211 3 0.0 1 1.500000 2.8770000000 13.5630000000 15.2070000000 + 1212 3 0.0 -1 1.500000 2.8770000000 13.5630000000 15.2070000000 + 1213 3 0.0 1 1.500000 2.8770000000 15.2070000000 13.5630000000 + 1214 3 0.0 -1 1.500000 2.8770000000 15.2070000000 13.5630000000 + 1215 3 0.0 1 1.500000 1.2330000000 15.2070000000 15.2070000000 + 1216 3 0.0 -1 1.500000 1.2330000000 15.2070000000 15.2070000000 + 1217 3 0.0 1 1.500000 5.3430000000 9.4530000000 13.5630000000 + 1218 3 0.0 -1 1.500000 5.3430000000 9.4530000000 13.5630000000 + 1219 3 0.0 1 1.500000 5.3430000000 11.0970000000 15.2070000000 + 1220 3 0.0 -1 1.500000 5.3430000000 11.0970000000 15.2070000000 + 1221 3 0.0 1 1.500000 6.9870000000 11.0970000000 13.5630000000 + 1222 3 0.0 -1 1.500000 6.9870000000 11.0970000000 13.5630000000 + 1223 3 0.0 1 1.500000 6.9870000000 9.4530000000 15.2070000000 + 1224 3 0.0 -1 1.500000 6.9870000000 9.4530000000 15.2070000000 + 1225 3 0.0 1 1.500000 1.2330000000 9.4530000000 17.6730000000 + 1226 3 0.0 -1 1.500000 1.2330000000 9.4530000000 17.6730000000 + 1227 3 0.0 1 1.500000 1.2330000000 11.0970000000 19.3170000000 + 1228 3 0.0 -1 1.500000 1.2330000000 11.0970000000 19.3170000000 + 1229 3 0.0 1 1.500000 2.8770000000 9.4530000000 19.3170000000 + 1230 3 0.0 -1 1.500000 2.8770000000 9.4530000000 19.3170000000 + 1231 3 0.0 1 1.500000 2.8770000000 11.0970000000 17.6730000000 + 1232 3 0.0 -1 1.500000 2.8770000000 11.0970000000 17.6730000000 + 1233 3 0.0 1 1.500000 5.3430000000 13.5630000000 17.6730000000 + 1234 3 0.0 -1 1.500000 5.3430000000 13.5630000000 17.6730000000 + 1235 3 0.0 1 1.500000 5.3430000000 15.2070000000 19.3170000000 + 1236 3 0.0 -1 1.500000 5.3430000000 15.2070000000 19.3170000000 + 1237 3 0.0 1 1.500000 6.9870000000 13.5630000000 19.3170000000 + 1238 3 0.0 -1 1.500000 6.9870000000 13.5630000000 19.3170000000 + 1239 3 0.0 1 1.500000 6.9870000000 15.2070000000 17.6730000000 + 1240 3 0.0 -1 1.500000 6.9870000000 15.2070000000 17.6730000000 + 1241 3 0.0 1 1.500000 1.2330000000 13.5630000000 21.7830000000 + 1242 3 0.0 -1 1.500000 1.2330000000 13.5630000000 21.7830000000 + 1243 3 0.0 1 1.500000 2.8770000000 13.5630000000 23.4270000000 + 1244 3 0.0 -1 1.500000 2.8770000000 13.5630000000 23.4270000000 + 1245 3 0.0 1 1.500000 2.8770000000 15.2070000000 21.7830000000 + 1246 3 0.0 -1 1.500000 2.8770000000 15.2070000000 21.7830000000 + 1247 3 0.0 1 1.500000 1.2330000000 15.2070000000 23.4270000000 + 1248 3 0.0 -1 1.500000 1.2330000000 15.2070000000 23.4270000000 + 1249 3 0.0 1 1.500000 5.3430000000 9.4530000000 21.7830000000 + 1250 3 0.0 -1 1.500000 5.3430000000 9.4530000000 21.7830000000 + 1251 3 0.0 1 1.500000 5.3430000000 11.0970000000 23.4270000000 + 1252 3 0.0 -1 1.500000 5.3430000000 11.0970000000 23.4270000000 + 1253 3 0.0 1 1.500000 6.9870000000 11.0970000000 21.7830000000 + 1254 3 0.0 -1 1.500000 6.9870000000 11.0970000000 21.7830000000 + 1255 3 0.0 1 1.500000 6.9870000000 9.4530000000 23.4270000000 + 1256 3 0.0 -1 1.500000 6.9870000000 9.4530000000 23.4270000000 + 1257 3 0.0 1 1.500000 1.2330000000 9.4530000000 25.8930000000 + 1258 3 0.0 -1 1.500000 1.2330000000 9.4530000000 25.8930000000 + 1259 3 0.0 1 1.500000 1.2330000000 11.0970000000 27.5370000000 + 1260 3 0.0 -1 1.500000 1.2330000000 11.0970000000 27.5370000000 + 1261 3 0.0 1 1.500000 2.8770000000 9.4530000000 27.5370000000 + 1262 3 0.0 -1 1.500000 2.8770000000 9.4530000000 27.5370000000 + 1263 3 0.0 1 1.500000 2.8770000000 11.0970000000 25.8930000000 + 1264 3 0.0 -1 1.500000 2.8770000000 11.0970000000 25.8930000000 + 1265 3 0.0 1 1.500000 5.3430000000 13.5630000000 25.8930000000 + 1266 3 0.0 -1 1.500000 5.3430000000 13.5630000000 25.8930000000 + 1267 3 0.0 1 1.500000 5.3430000000 15.2070000000 27.5370000000 + 1268 3 0.0 -1 1.500000 5.3430000000 15.2070000000 27.5370000000 + 1269 3 0.0 1 1.500000 6.9870000000 13.5630000000 27.5370000000 + 1270 3 0.0 -1 1.500000 6.9870000000 13.5630000000 27.5370000000 + 1271 3 0.0 1 1.500000 6.9870000000 15.2070000000 25.8930000000 + 1272 3 0.0 -1 1.500000 6.9870000000 15.2070000000 25.8930000000 + 1273 3 0.0 1 1.500000 1.2330000000 13.5630000000 30.0030000000 + 1274 3 0.0 -1 1.500000 1.2330000000 13.5630000000 30.0030000000 + 1275 3 0.0 1 1.500000 2.8770000000 13.5630000000 31.6470000000 + 1276 3 0.0 -1 1.500000 2.8770000000 13.5630000000 31.6470000000 + 1277 3 0.0 1 1.500000 2.8770000000 15.2070000000 30.0030000000 + 1278 3 0.0 -1 1.500000 2.8770000000 15.2070000000 30.0030000000 + 1279 3 0.0 1 1.500000 1.2330000000 15.2070000000 31.6470000000 + 1280 3 0.0 -1 1.500000 1.2330000000 15.2070000000 31.6470000000 + 1281 3 0.0 1 1.500000 5.3430000000 9.4530000000 30.0030000000 + 1282 3 0.0 -1 1.500000 5.3430000000 9.4530000000 30.0030000000 + 1283 3 0.0 1 1.500000 5.3430000000 11.0970000000 31.6470000000 + 1284 3 0.0 -1 1.500000 5.3430000000 11.0970000000 31.6470000000 + 1285 3 0.0 1 1.500000 6.9870000000 11.0970000000 30.0030000000 + 1286 3 0.0 -1 1.500000 6.9870000000 11.0970000000 30.0030000000 + 1287 3 0.0 1 1.500000 6.9870000000 9.4530000000 31.6470000000 + 1288 3 0.0 -1 1.500000 6.9870000000 9.4530000000 31.6470000000 + 1289 3 0.0 1 1.500000 1.2330000000 9.4530000000 34.1130000000 + 1290 3 0.0 -1 1.500000 1.2330000000 9.4530000000 34.1130000000 + 1291 3 0.0 1 1.500000 1.2330000000 11.0970000000 35.7570000000 + 1292 3 0.0 -1 1.500000 1.2330000000 11.0970000000 35.7570000000 + 1293 3 0.0 1 1.500000 2.8770000000 9.4530000000 35.7570000000 + 1294 3 0.0 -1 1.500000 2.8770000000 9.4530000000 35.7570000000 + 1295 3 0.0 1 1.500000 2.8770000000 11.0970000000 34.1130000000 + 1296 3 0.0 -1 1.500000 2.8770000000 11.0970000000 34.1130000000 + 1297 3 0.0 1 1.500000 5.3430000000 13.5630000000 34.1130000000 + 1298 3 0.0 -1 1.500000 5.3430000000 13.5630000000 34.1130000000 + 1299 3 0.0 1 1.500000 5.3430000000 15.2070000000 35.7570000000 + 1300 3 0.0 -1 1.500000 5.3430000000 15.2070000000 35.7570000000 + 1301 3 0.0 1 1.500000 6.9870000000 13.5630000000 35.7570000000 + 1302 3 0.0 -1 1.500000 6.9870000000 13.5630000000 35.7570000000 + 1303 3 0.0 1 1.500000 6.9870000000 15.2070000000 34.1130000000 + 1304 3 0.0 -1 1.500000 6.9870000000 15.2070000000 34.1130000000 + 1305 3 0.0 1 1.500000 2.8770000000 13.5630000000 39.8670000000 + 1306 3 0.0 -1 1.500000 2.8770000000 13.5630000000 39.8670000000 + 1307 3 0.0 1 1.500000 1.2330000000 13.5630000000 38.2230000000 + 1308 3 0.0 -1 1.500000 1.2330000000 13.5630000000 38.2230000000 + 1309 3 0.0 1 1.500000 1.2330000000 15.2070000000 39.8670000000 + 1310 3 0.0 -1 1.500000 1.2330000000 15.2070000000 39.8670000000 + 1311 3 0.0 1 1.500000 2.8770000000 15.2070000000 38.2230000000 + 1312 3 0.0 -1 1.500000 2.8770000000 15.2070000000 38.2230000000 + 1313 3 0.0 1 1.500000 5.3430000000 11.0970000000 39.8670000000 + 1314 3 0.0 -1 1.500000 5.3430000000 11.0970000000 39.8670000000 + 1315 3 0.0 1 1.500000 5.3430000000 9.4530000000 38.2230000000 + 1316 3 0.0 -1 1.500000 5.3430000000 9.4530000000 38.2230000000 + 1317 3 0.0 1 1.500000 6.9870000000 9.4530000000 39.8670000000 + 1318 3 0.0 -1 1.500000 6.9870000000 9.4530000000 39.8670000000 + 1319 3 0.0 1 1.500000 6.9870000000 11.0970000000 38.2230000000 + 1320 3 0.0 -1 1.500000 6.9870000000 11.0970000000 38.2230000000 + 1321 3 0.0 1 1.500000 1.2330000000 17.6730000000 1.2330000000 + 1322 3 0.0 -1 1.500000 1.2330000000 17.6730000000 1.2330000000 + 1323 3 0.0 1 1.500000 1.2330000000 19.3170000000 2.8770000000 + 1324 3 0.0 -1 1.500000 1.2330000000 19.3170000000 2.8770000000 + 1325 3 0.0 1 1.500000 2.8770000000 17.6730000000 2.8770000000 + 1326 3 0.0 -1 1.500000 2.8770000000 17.6730000000 2.8770000000 + 1327 3 0.0 1 1.500000 2.8770000000 19.3170000000 1.2330000000 + 1328 3 0.0 -1 1.500000 2.8770000000 19.3170000000 1.2330000000 + 1329 3 0.0 1 1.500000 5.3430000000 21.7830000000 1.2330000000 + 1330 3 0.0 -1 1.500000 5.3430000000 21.7830000000 1.2330000000 + 1331 3 0.0 1 1.500000 5.3430000000 23.4270000000 2.8770000000 + 1332 3 0.0 -1 1.500000 5.3430000000 23.4270000000 2.8770000000 + 1333 3 0.0 1 1.500000 6.9870000000 21.7830000000 2.8770000000 + 1334 3 0.0 -1 1.500000 6.9870000000 21.7830000000 2.8770000000 + 1335 3 0.0 1 1.500000 6.9870000000 23.4270000000 1.2330000000 + 1336 3 0.0 -1 1.500000 6.9870000000 23.4270000000 1.2330000000 + 1337 3 0.0 1 1.500000 1.2330000000 21.7830000000 5.3430000000 + 1338 3 0.0 -1 1.500000 1.2330000000 21.7830000000 5.3430000000 + 1339 3 0.0 1 1.500000 2.8770000000 21.7830000000 6.9870000000 + 1340 3 0.0 -1 1.500000 2.8770000000 21.7830000000 6.9870000000 + 1341 3 0.0 1 1.500000 2.8770000000 23.4270000000 5.3430000000 + 1342 3 0.0 -1 1.500000 2.8770000000 23.4270000000 5.3430000000 + 1343 3 0.0 1 1.500000 1.2330000000 23.4270000000 6.9870000000 + 1344 3 0.0 -1 1.500000 1.2330000000 23.4270000000 6.9870000000 + 1345 3 0.0 1 1.500000 5.3430000000 17.6730000000 5.3430000000 + 1346 3 0.0 -1 1.500000 5.3430000000 17.6730000000 5.3430000000 + 1347 3 0.0 1 1.500000 5.3430000000 19.3170000000 6.9870000000 + 1348 3 0.0 -1 1.500000 5.3430000000 19.3170000000 6.9870000000 + 1349 3 0.0 1 1.500000 6.9870000000 19.3170000000 5.3430000000 + 1350 3 0.0 -1 1.500000 6.9870000000 19.3170000000 5.3430000000 + 1351 3 0.0 1 1.500000 6.9870000000 17.6730000000 6.9870000000 + 1352 3 0.0 -1 1.500000 6.9870000000 17.6730000000 6.9870000000 + 1353 3 0.0 1 1.500000 1.2330000000 17.6730000000 9.4530000000 + 1354 3 0.0 -1 1.500000 1.2330000000 17.6730000000 9.4530000000 + 1355 3 0.0 1 1.500000 1.2330000000 19.3170000000 11.0970000000 + 1356 3 0.0 -1 1.500000 1.2330000000 19.3170000000 11.0970000000 + 1357 3 0.0 1 1.500000 2.8770000000 17.6730000000 11.0970000000 + 1358 3 0.0 -1 1.500000 2.8770000000 17.6730000000 11.0970000000 + 1359 3 0.0 1 1.500000 2.8770000000 19.3170000000 9.4530000000 + 1360 3 0.0 -1 1.500000 2.8770000000 19.3170000000 9.4530000000 + 1361 3 0.0 1 1.500000 5.3430000000 21.7830000000 9.4530000000 + 1362 3 0.0 -1 1.500000 5.3430000000 21.7830000000 9.4530000000 + 1363 3 0.0 1 1.500000 5.3430000000 23.4270000000 11.0970000000 + 1364 3 0.0 -1 1.500000 5.3430000000 23.4270000000 11.0970000000 + 1365 3 0.0 1 1.500000 6.9870000000 21.7830000000 11.0970000000 + 1366 3 0.0 -1 1.500000 6.9870000000 21.7830000000 11.0970000000 + 1367 3 0.0 1 1.500000 6.9870000000 23.4270000000 9.4530000000 + 1368 3 0.0 -1 1.500000 6.9870000000 23.4270000000 9.4530000000 + 1369 3 0.0 1 1.500000 1.2330000000 21.7830000000 13.5630000000 + 1370 3 0.0 -1 1.500000 1.2330000000 21.7830000000 13.5630000000 + 1371 3 0.0 1 1.500000 2.8770000000 21.7830000000 15.2070000000 + 1372 3 0.0 -1 1.500000 2.8770000000 21.7830000000 15.2070000000 + 1373 3 0.0 1 1.500000 2.8770000000 23.4270000000 13.5630000000 + 1374 3 0.0 -1 1.500000 2.8770000000 23.4270000000 13.5630000000 + 1375 3 0.0 1 1.500000 1.2330000000 23.4270000000 15.2070000000 + 1376 3 0.0 -1 1.500000 1.2330000000 23.4270000000 15.2070000000 + 1377 3 0.0 1 1.500000 5.3430000000 17.6730000000 13.5630000000 + 1378 3 0.0 -1 1.500000 5.3430000000 17.6730000000 13.5630000000 + 1379 3 0.0 1 1.500000 5.3430000000 19.3170000000 15.2070000000 + 1380 3 0.0 -1 1.500000 5.3430000000 19.3170000000 15.2070000000 + 1381 3 0.0 1 1.500000 6.9870000000 19.3170000000 13.5630000000 + 1382 3 0.0 -1 1.500000 6.9870000000 19.3170000000 13.5630000000 + 1383 3 0.0 1 1.500000 6.9870000000 17.6730000000 15.2070000000 + 1384 3 0.0 -1 1.500000 6.9870000000 17.6730000000 15.2070000000 + 1385 3 0.0 1 1.500000 1.2330000000 17.6730000000 17.6730000000 + 1386 3 0.0 -1 1.500000 1.2330000000 17.6730000000 17.6730000000 + 1387 3 0.0 1 1.500000 1.2330000000 19.3170000000 19.3170000000 + 1388 3 0.0 -1 1.500000 1.2330000000 19.3170000000 19.3170000000 + 1389 3 0.0 1 1.500000 2.8770000000 17.6730000000 19.3170000000 + 1390 3 0.0 -1 1.500000 2.8770000000 17.6730000000 19.3170000000 + 1391 3 0.0 1 1.500000 2.8770000000 19.3170000000 17.6730000000 + 1392 3 0.0 -1 1.500000 2.8770000000 19.3170000000 17.6730000000 + 1393 3 0.0 1 1.500000 5.3430000000 21.7830000000 17.6730000000 + 1394 3 0.0 -1 1.500000 5.3430000000 21.7830000000 17.6730000000 + 1395 3 0.0 1 1.500000 5.3430000000 23.4270000000 19.3170000000 + 1396 3 0.0 -1 1.500000 5.3430000000 23.4270000000 19.3170000000 + 1397 3 0.0 1 1.500000 6.9870000000 21.7830000000 19.3170000000 + 1398 3 0.0 -1 1.500000 6.9870000000 21.7830000000 19.3170000000 + 1399 3 0.0 1 1.500000 6.9870000000 23.4270000000 17.6730000000 + 1400 3 0.0 -1 1.500000 6.9870000000 23.4270000000 17.6730000000 + 1401 3 0.0 1 1.500000 1.2330000000 21.7830000000 21.7830000000 + 1402 3 0.0 -1 1.500000 1.2330000000 21.7830000000 21.7830000000 + 1403 3 0.0 1 1.500000 2.8770000000 21.7830000000 23.4270000000 + 1404 3 0.0 -1 1.500000 2.8770000000 21.7830000000 23.4270000000 + 1405 3 0.0 1 1.500000 2.8770000000 23.4270000000 21.7830000000 + 1406 3 0.0 -1 1.500000 2.8770000000 23.4270000000 21.7830000000 + 1407 3 0.0 1 1.500000 1.2330000000 23.4270000000 23.4270000000 + 1408 3 0.0 -1 1.500000 1.2330000000 23.4270000000 23.4270000000 + 1409 3 0.0 1 1.500000 5.3430000000 17.6730000000 21.7830000000 + 1410 3 0.0 -1 1.500000 5.3430000000 17.6730000000 21.7830000000 + 1411 3 0.0 1 1.500000 5.3430000000 19.3170000000 23.4270000000 + 1412 3 0.0 -1 1.500000 5.3430000000 19.3170000000 23.4270000000 + 1413 3 0.0 1 1.500000 6.9870000000 19.3170000000 21.7830000000 + 1414 3 0.0 -1 1.500000 6.9870000000 19.3170000000 21.7830000000 + 1415 3 0.0 1 1.500000 6.9870000000 17.6730000000 23.4270000000 + 1416 3 0.0 -1 1.500000 6.9870000000 17.6730000000 23.4270000000 + 1417 3 0.0 1 1.500000 1.2330000000 17.6730000000 25.8930000000 + 1418 3 0.0 -1 1.500000 1.2330000000 17.6730000000 25.8930000000 + 1419 3 0.0 1 1.500000 1.2330000000 19.3170000000 27.5370000000 + 1420 3 0.0 -1 1.500000 1.2330000000 19.3170000000 27.5370000000 + 1421 3 0.0 1 1.500000 2.8770000000 17.6730000000 27.5370000000 + 1422 3 0.0 -1 1.500000 2.8770000000 17.6730000000 27.5370000000 + 1423 3 0.0 1 1.500000 2.8770000000 19.3170000000 25.8930000000 + 1424 3 0.0 -1 1.500000 2.8770000000 19.3170000000 25.8930000000 + 1425 3 0.0 1 1.500000 5.3430000000 21.7830000000 25.8930000000 + 1426 3 0.0 -1 1.500000 5.3430000000 21.7830000000 25.8930000000 + 1427 3 0.0 1 1.500000 5.3430000000 23.4270000000 27.5370000000 + 1428 3 0.0 -1 1.500000 5.3430000000 23.4270000000 27.5370000000 + 1429 3 0.0 1 1.500000 6.9870000000 21.7830000000 27.5370000000 + 1430 3 0.0 -1 1.500000 6.9870000000 21.7830000000 27.5370000000 + 1431 3 0.0 1 1.500000 6.9870000000 23.4270000000 25.8930000000 + 1432 3 0.0 -1 1.500000 6.9870000000 23.4270000000 25.8930000000 + 1433 3 0.0 1 1.500000 1.2330000000 21.7830000000 30.0030000000 + 1434 3 0.0 -1 1.500000 1.2330000000 21.7830000000 30.0030000000 + 1435 3 0.0 1 1.500000 2.8770000000 21.7830000000 31.6470000000 + 1436 3 0.0 -1 1.500000 2.8770000000 21.7830000000 31.6470000000 + 1437 3 0.0 1 1.500000 2.8770000000 23.4270000000 30.0030000000 + 1438 3 0.0 -1 1.500000 2.8770000000 23.4270000000 30.0030000000 + 1439 3 0.0 1 1.500000 1.2330000000 23.4270000000 31.6470000000 + 1440 3 0.0 -1 1.500000 1.2330000000 23.4270000000 31.6470000000 + 1441 3 0.0 1 1.500000 5.3430000000 17.6730000000 30.0030000000 + 1442 3 0.0 -1 1.500000 5.3430000000 17.6730000000 30.0030000000 + 1443 3 0.0 1 1.500000 5.3430000000 19.3170000000 31.6470000000 + 1444 3 0.0 -1 1.500000 5.3430000000 19.3170000000 31.6470000000 + 1445 3 0.0 1 1.500000 6.9870000000 19.3170000000 30.0030000000 + 1446 3 0.0 -1 1.500000 6.9870000000 19.3170000000 30.0030000000 + 1447 3 0.0 1 1.500000 6.9870000000 17.6730000000 31.6470000000 + 1448 3 0.0 -1 1.500000 6.9870000000 17.6730000000 31.6470000000 + 1449 3 0.0 1 1.500000 1.2330000000 17.6730000000 34.1130000000 + 1450 3 0.0 -1 1.500000 1.2330000000 17.6730000000 34.1130000000 + 1451 3 0.0 1 1.500000 1.2330000000 19.3170000000 35.7570000000 + 1452 3 0.0 -1 1.500000 1.2330000000 19.3170000000 35.7570000000 + 1453 3 0.0 1 1.500000 2.8770000000 17.6730000000 35.7570000000 + 1454 3 0.0 -1 1.500000 2.8770000000 17.6730000000 35.7570000000 + 1455 3 0.0 1 1.500000 2.8770000000 19.3170000000 34.1130000000 + 1456 3 0.0 -1 1.500000 2.8770000000 19.3170000000 34.1130000000 + 1457 3 0.0 1 1.500000 5.3430000000 21.7830000000 34.1130000000 + 1458 3 0.0 -1 1.500000 5.3430000000 21.7830000000 34.1130000000 + 1459 3 0.0 1 1.500000 5.3430000000 23.4270000000 35.7570000000 + 1460 3 0.0 -1 1.500000 5.3430000000 23.4270000000 35.7570000000 + 1461 3 0.0 1 1.500000 6.9870000000 21.7830000000 35.7570000000 + 1462 3 0.0 -1 1.500000 6.9870000000 21.7830000000 35.7570000000 + 1463 3 0.0 1 1.500000 6.9870000000 23.4270000000 34.1130000000 + 1464 3 0.0 -1 1.500000 6.9870000000 23.4270000000 34.1130000000 + 1465 3 0.0 1 1.500000 2.8770000000 21.7830000000 39.8670000000 + 1466 3 0.0 -1 1.500000 2.8770000000 21.7830000000 39.8670000000 + 1467 3 0.0 1 1.500000 1.2330000000 21.7830000000 38.2230000000 + 1468 3 0.0 -1 1.500000 1.2330000000 21.7830000000 38.2230000000 + 1469 3 0.0 1 1.500000 1.2330000000 23.4270000000 39.8670000000 + 1470 3 0.0 -1 1.500000 1.2330000000 23.4270000000 39.8670000000 + 1471 3 0.0 1 1.500000 2.8770000000 23.4270000000 38.2230000000 + 1472 3 0.0 -1 1.500000 2.8770000000 23.4270000000 38.2230000000 + 1473 3 0.0 1 1.500000 5.3430000000 19.3170000000 39.8670000000 + 1474 3 0.0 -1 1.500000 5.3430000000 19.3170000000 39.8670000000 + 1475 3 0.0 1 1.500000 5.3430000000 17.6730000000 38.2230000000 + 1476 3 0.0 -1 1.500000 5.3430000000 17.6730000000 38.2230000000 + 1477 3 0.0 1 1.500000 6.9870000000 17.6730000000 39.8670000000 + 1478 3 0.0 -1 1.500000 6.9870000000 17.6730000000 39.8670000000 + 1479 3 0.0 1 1.500000 6.9870000000 19.3170000000 38.2230000000 + 1480 3 0.0 -1 1.500000 6.9870000000 19.3170000000 38.2230000000 + 1481 3 0.0 1 1.500000 1.2330000000 25.8930000000 1.2330000000 + 1482 3 0.0 -1 1.500000 1.2330000000 25.8930000000 1.2330000000 + 1483 3 0.0 1 1.500000 1.2330000000 27.5370000000 2.8770000000 + 1484 3 0.0 -1 1.500000 1.2330000000 27.5370000000 2.8770000000 + 1485 3 0.0 1 1.500000 2.8770000000 25.8930000000 2.8770000000 + 1486 3 0.0 -1 1.500000 2.8770000000 25.8930000000 2.8770000000 + 1487 3 0.0 1 1.500000 2.8770000000 27.5370000000 1.2330000000 + 1488 3 0.0 -1 1.500000 2.8770000000 27.5370000000 1.2330000000 + 1489 3 0.0 1 1.500000 5.3430000000 30.0030000000 1.2330000000 + 1490 3 0.0 -1 1.500000 5.3430000000 30.0030000000 1.2330000000 + 1491 3 0.0 1 1.500000 5.3430000000 31.6470000000 2.8770000000 + 1492 3 0.0 -1 1.500000 5.3430000000 31.6470000000 2.8770000000 + 1493 3 0.0 1 1.500000 6.9870000000 30.0030000000 2.8770000000 + 1494 3 0.0 -1 1.500000 6.9870000000 30.0030000000 2.8770000000 + 1495 3 0.0 1 1.500000 6.9870000000 31.6470000000 1.2330000000 + 1496 3 0.0 -1 1.500000 6.9870000000 31.6470000000 1.2330000000 + 1497 3 0.0 1 1.500000 1.2330000000 30.0030000000 5.3430000000 + 1498 3 0.0 -1 1.500000 1.2330000000 30.0030000000 5.3430000000 + 1499 3 0.0 1 1.500000 2.8770000000 30.0030000000 6.9870000000 + 1500 3 0.0 -1 1.500000 2.8770000000 30.0030000000 6.9870000000 + 1501 3 0.0 1 1.500000 2.8770000000 31.6470000000 5.3430000000 + 1502 3 0.0 -1 1.500000 2.8770000000 31.6470000000 5.3430000000 + 1503 3 0.0 1 1.500000 1.2330000000 31.6470000000 6.9870000000 + 1504 3 0.0 -1 1.500000 1.2330000000 31.6470000000 6.9870000000 + 1505 3 0.0 1 1.500000 5.3430000000 25.8930000000 5.3430000000 + 1506 3 0.0 -1 1.500000 5.3430000000 25.8930000000 5.3430000000 + 1507 3 0.0 1 1.500000 5.3430000000 27.5370000000 6.9870000000 + 1508 3 0.0 -1 1.500000 5.3430000000 27.5370000000 6.9870000000 + 1509 3 0.0 1 1.500000 6.9870000000 27.5370000000 5.3430000000 + 1510 3 0.0 -1 1.500000 6.9870000000 27.5370000000 5.3430000000 + 1511 3 0.0 1 1.500000 6.9870000000 25.8930000000 6.9870000000 + 1512 3 0.0 -1 1.500000 6.9870000000 25.8930000000 6.9870000000 + 1513 3 0.0 1 1.500000 1.2330000000 25.8930000000 9.4530000000 + 1514 3 0.0 -1 1.500000 1.2330000000 25.8930000000 9.4530000000 + 1515 3 0.0 1 1.500000 1.2330000000 27.5370000000 11.0970000000 + 1516 3 0.0 -1 1.500000 1.2330000000 27.5370000000 11.0970000000 + 1517 3 0.0 1 1.500000 2.8770000000 25.8930000000 11.0970000000 + 1518 3 0.0 -1 1.500000 2.8770000000 25.8930000000 11.0970000000 + 1519 3 0.0 1 1.500000 2.8770000000 27.5370000000 9.4530000000 + 1520 3 0.0 -1 1.500000 2.8770000000 27.5370000000 9.4530000000 + 1521 3 0.0 1 1.500000 5.3430000000 30.0030000000 9.4530000000 + 1522 3 0.0 -1 1.500000 5.3430000000 30.0030000000 9.4530000000 + 1523 3 0.0 1 1.500000 5.3430000000 31.6470000000 11.0970000000 + 1524 3 0.0 -1 1.500000 5.3430000000 31.6470000000 11.0970000000 + 1525 3 0.0 1 1.500000 6.9870000000 30.0030000000 11.0970000000 + 1526 3 0.0 -1 1.500000 6.9870000000 30.0030000000 11.0970000000 + 1527 3 0.0 1 1.500000 6.9870000000 31.6470000000 9.4530000000 + 1528 3 0.0 -1 1.500000 6.9870000000 31.6470000000 9.4530000000 + 1529 3 0.0 1 1.500000 1.2330000000 30.0030000000 13.5630000000 + 1530 3 0.0 -1 1.500000 1.2330000000 30.0030000000 13.5630000000 + 1531 3 0.0 1 1.500000 2.8770000000 30.0030000000 15.2070000000 + 1532 3 0.0 -1 1.500000 2.8770000000 30.0030000000 15.2070000000 + 1533 3 0.0 1 1.500000 2.8770000000 31.6470000000 13.5630000000 + 1534 3 0.0 -1 1.500000 2.8770000000 31.6470000000 13.5630000000 + 1535 3 0.0 1 1.500000 1.2330000000 31.6470000000 15.2070000000 + 1536 3 0.0 -1 1.500000 1.2330000000 31.6470000000 15.2070000000 + 1537 3 0.0 1 1.500000 5.3430000000 25.8930000000 13.5630000000 + 1538 3 0.0 -1 1.500000 5.3430000000 25.8930000000 13.5630000000 + 1539 3 0.0 1 1.500000 5.3430000000 27.5370000000 15.2070000000 + 1540 3 0.0 -1 1.500000 5.3430000000 27.5370000000 15.2070000000 + 1541 3 0.0 1 1.500000 6.9870000000 27.5370000000 13.5630000000 + 1542 3 0.0 -1 1.500000 6.9870000000 27.5370000000 13.5630000000 + 1543 3 0.0 1 1.500000 6.9870000000 25.8930000000 15.2070000000 + 1544 3 0.0 -1 1.500000 6.9870000000 25.8930000000 15.2070000000 + 1545 3 0.0 1 1.500000 1.2330000000 25.8930000000 17.6730000000 + 1546 3 0.0 -1 1.500000 1.2330000000 25.8930000000 17.6730000000 + 1547 3 0.0 1 1.500000 1.2330000000 27.5370000000 19.3170000000 + 1548 3 0.0 -1 1.500000 1.2330000000 27.5370000000 19.3170000000 + 1549 3 0.0 1 1.500000 2.8770000000 25.8930000000 19.3170000000 + 1550 3 0.0 -1 1.500000 2.8770000000 25.8930000000 19.3170000000 + 1551 3 0.0 1 1.500000 2.8770000000 27.5370000000 17.6730000000 + 1552 3 0.0 -1 1.500000 2.8770000000 27.5370000000 17.6730000000 + 1553 3 0.0 1 1.500000 5.3430000000 30.0030000000 17.6730000000 + 1554 3 0.0 -1 1.500000 5.3430000000 30.0030000000 17.6730000000 + 1555 3 0.0 1 1.500000 5.3430000000 31.6470000000 19.3170000000 + 1556 3 0.0 -1 1.500000 5.3430000000 31.6470000000 19.3170000000 + 1557 3 0.0 1 1.500000 6.9870000000 30.0030000000 19.3170000000 + 1558 3 0.0 -1 1.500000 6.9870000000 30.0030000000 19.3170000000 + 1559 3 0.0 1 1.500000 6.9870000000 31.6470000000 17.6730000000 + 1560 3 0.0 -1 1.500000 6.9870000000 31.6470000000 17.6730000000 + 1561 3 0.0 1 1.500000 1.2330000000 30.0030000000 21.7830000000 + 1562 3 0.0 -1 1.500000 1.2330000000 30.0030000000 21.7830000000 + 1563 3 0.0 1 1.500000 2.8770000000 30.0030000000 23.4270000000 + 1564 3 0.0 -1 1.500000 2.8770000000 30.0030000000 23.4270000000 + 1565 3 0.0 1 1.500000 2.8770000000 31.6470000000 21.7830000000 + 1566 3 0.0 -1 1.500000 2.8770000000 31.6470000000 21.7830000000 + 1567 3 0.0 1 1.500000 1.2330000000 31.6470000000 23.4270000000 + 1568 3 0.0 -1 1.500000 1.2330000000 31.6470000000 23.4270000000 + 1569 3 0.0 1 1.500000 5.3430000000 25.8930000000 21.7830000000 + 1570 3 0.0 -1 1.500000 5.3430000000 25.8930000000 21.7830000000 + 1571 3 0.0 1 1.500000 5.3430000000 27.5370000000 23.4270000000 + 1572 3 0.0 -1 1.500000 5.3430000000 27.5370000000 23.4270000000 + 1573 3 0.0 1 1.500000 6.9870000000 27.5370000000 21.7830000000 + 1574 3 0.0 -1 1.500000 6.9870000000 27.5370000000 21.7830000000 + 1575 3 0.0 1 1.500000 6.9870000000 25.8930000000 23.4270000000 + 1576 3 0.0 -1 1.500000 6.9870000000 25.8930000000 23.4270000000 + 1577 3 0.0 1 1.500000 1.2330000000 25.8930000000 25.8930000000 + 1578 3 0.0 -1 1.500000 1.2330000000 25.8930000000 25.8930000000 + 1579 3 0.0 1 1.500000 1.2330000000 27.5370000000 27.5370000000 + 1580 3 0.0 -1 1.500000 1.2330000000 27.5370000000 27.5370000000 + 1581 3 0.0 1 1.500000 2.8770000000 25.8930000000 27.5370000000 + 1582 3 0.0 -1 1.500000 2.8770000000 25.8930000000 27.5370000000 + 1583 3 0.0 1 1.500000 2.8770000000 27.5370000000 25.8930000000 + 1584 3 0.0 -1 1.500000 2.8770000000 27.5370000000 25.8930000000 + 1585 3 0.0 1 1.500000 5.3430000000 30.0030000000 25.8930000000 + 1586 3 0.0 -1 1.500000 5.3430000000 30.0030000000 25.8930000000 + 1587 3 0.0 1 1.500000 5.3430000000 31.6470000000 27.5370000000 + 1588 3 0.0 -1 1.500000 5.3430000000 31.6470000000 27.5370000000 + 1589 3 0.0 1 1.500000 6.9870000000 30.0030000000 27.5370000000 + 1590 3 0.0 -1 1.500000 6.9870000000 30.0030000000 27.5370000000 + 1591 3 0.0 1 1.500000 6.9870000000 31.6470000000 25.8930000000 + 1592 3 0.0 -1 1.500000 6.9870000000 31.6470000000 25.8930000000 + 1593 3 0.0 1 1.500000 1.2330000000 30.0030000000 30.0030000000 + 1594 3 0.0 -1 1.500000 1.2330000000 30.0030000000 30.0030000000 + 1595 3 0.0 1 1.500000 2.8770000000 30.0030000000 31.6470000000 + 1596 3 0.0 -1 1.500000 2.8770000000 30.0030000000 31.6470000000 + 1597 3 0.0 1 1.500000 2.8770000000 31.6470000000 30.0030000000 + 1598 3 0.0 -1 1.500000 2.8770000000 31.6470000000 30.0030000000 + 1599 3 0.0 1 1.500000 1.2330000000 31.6470000000 31.6470000000 + 1600 3 0.0 -1 1.500000 1.2330000000 31.6470000000 31.6470000000 + 1601 3 0.0 1 1.500000 5.3430000000 25.8930000000 30.0030000000 + 1602 3 0.0 -1 1.500000 5.3430000000 25.8930000000 30.0030000000 + 1603 3 0.0 1 1.500000 5.3430000000 27.5370000000 31.6470000000 + 1604 3 0.0 -1 1.500000 5.3430000000 27.5370000000 31.6470000000 + 1605 3 0.0 1 1.500000 6.9870000000 27.5370000000 30.0030000000 + 1606 3 0.0 -1 1.500000 6.9870000000 27.5370000000 30.0030000000 + 1607 3 0.0 1 1.500000 6.9870000000 25.8930000000 31.6470000000 + 1608 3 0.0 -1 1.500000 6.9870000000 25.8930000000 31.6470000000 + 1609 3 0.0 1 1.500000 1.2330000000 25.8930000000 34.1130000000 + 1610 3 0.0 -1 1.500000 1.2330000000 25.8930000000 34.1130000000 + 1611 3 0.0 1 1.500000 1.2330000000 27.5370000000 35.7570000000 + 1612 3 0.0 -1 1.500000 1.2330000000 27.5370000000 35.7570000000 + 1613 3 0.0 1 1.500000 2.8770000000 25.8930000000 35.7570000000 + 1614 3 0.0 -1 1.500000 2.8770000000 25.8930000000 35.7570000000 + 1615 3 0.0 1 1.500000 2.8770000000 27.5370000000 34.1130000000 + 1616 3 0.0 -1 1.500000 2.8770000000 27.5370000000 34.1130000000 + 1617 3 0.0 1 1.500000 5.3430000000 30.0030000000 34.1130000000 + 1618 3 0.0 -1 1.500000 5.3430000000 30.0030000000 34.1130000000 + 1619 3 0.0 1 1.500000 5.3430000000 31.6470000000 35.7570000000 + 1620 3 0.0 -1 1.500000 5.3430000000 31.6470000000 35.7570000000 + 1621 3 0.0 1 1.500000 6.9870000000 30.0030000000 35.7570000000 + 1622 3 0.0 -1 1.500000 6.9870000000 30.0030000000 35.7570000000 + 1623 3 0.0 1 1.500000 6.9870000000 31.6470000000 34.1130000000 + 1624 3 0.0 -1 1.500000 6.9870000000 31.6470000000 34.1130000000 + 1625 3 0.0 1 1.500000 2.8770000000 30.0030000000 39.8670000000 + 1626 3 0.0 -1 1.500000 2.8770000000 30.0030000000 39.8670000000 + 1627 3 0.0 1 1.500000 1.2330000000 30.0030000000 38.2230000000 + 1628 3 0.0 -1 1.500000 1.2330000000 30.0030000000 38.2230000000 + 1629 3 0.0 1 1.500000 1.2330000000 31.6470000000 39.8670000000 + 1630 3 0.0 -1 1.500000 1.2330000000 31.6470000000 39.8670000000 + 1631 3 0.0 1 1.500000 2.8770000000 31.6470000000 38.2230000000 + 1632 3 0.0 -1 1.500000 2.8770000000 31.6470000000 38.2230000000 + 1633 3 0.0 1 1.500000 5.3430000000 27.5370000000 39.8670000000 + 1634 3 0.0 -1 1.500000 5.3430000000 27.5370000000 39.8670000000 + 1635 3 0.0 1 1.500000 5.3430000000 25.8930000000 38.2230000000 + 1636 3 0.0 -1 1.500000 5.3430000000 25.8930000000 38.2230000000 + 1637 3 0.0 1 1.500000 6.9870000000 25.8930000000 39.8670000000 + 1638 3 0.0 -1 1.500000 6.9870000000 25.8930000000 39.8670000000 + 1639 3 0.0 1 1.500000 6.9870000000 27.5370000000 38.2230000000 + 1640 3 0.0 -1 1.500000 6.9870000000 27.5370000000 38.2230000000 + 1641 3 0.0 1 1.500000 1.2330000000 34.1130000000 1.2330000000 + 1642 3 0.0 -1 1.500000 1.2330000000 34.1130000000 1.2330000000 + 1643 3 0.0 1 1.500000 1.2330000000 35.7570000000 2.8770000000 + 1644 3 0.0 -1 1.500000 1.2330000000 35.7570000000 2.8770000000 + 1645 3 0.0 1 1.500000 2.8770000000 34.1130000000 2.8770000000 + 1646 3 0.0 -1 1.500000 2.8770000000 34.1130000000 2.8770000000 + 1647 3 0.0 1 1.500000 2.8770000000 35.7570000000 1.2330000000 + 1648 3 0.0 -1 1.500000 2.8770000000 35.7570000000 1.2330000000 + 1649 3 0.0 1 1.500000 5.3430000000 39.8670000000 2.8770000000 + 1650 3 0.0 -1 1.500000 5.3430000000 39.8670000000 2.8770000000 + 1651 3 0.0 1 1.500000 5.3430000000 38.2230000000 1.2330000000 + 1652 3 0.0 -1 1.500000 5.3430000000 38.2230000000 1.2330000000 + 1653 3 0.0 1 1.500000 6.9870000000 39.8670000000 1.2330000000 + 1654 3 0.0 -1 1.500000 6.9870000000 39.8670000000 1.2330000000 + 1655 3 0.0 1 1.500000 6.9870000000 38.2230000000 2.8770000000 + 1656 3 0.0 -1 1.500000 6.9870000000 38.2230000000 2.8770000000 + 1657 3 0.0 1 1.500000 2.8770000000 39.8670000000 5.3430000000 + 1658 3 0.0 -1 1.500000 2.8770000000 39.8670000000 5.3430000000 + 1659 3 0.0 1 1.500000 1.2330000000 39.8670000000 6.9870000000 + 1660 3 0.0 -1 1.500000 1.2330000000 39.8670000000 6.9870000000 + 1661 3 0.0 1 1.500000 1.2330000000 38.2230000000 5.3430000000 + 1662 3 0.0 -1 1.500000 1.2330000000 38.2230000000 5.3430000000 + 1663 3 0.0 1 1.500000 2.8770000000 38.2230000000 6.9870000000 + 1664 3 0.0 -1 1.500000 2.8770000000 38.2230000000 6.9870000000 + 1665 3 0.0 1 1.500000 5.3430000000 34.1130000000 5.3430000000 + 1666 3 0.0 -1 1.500000 5.3430000000 34.1130000000 5.3430000000 + 1667 3 0.0 1 1.500000 5.3430000000 35.7570000000 6.9870000000 + 1668 3 0.0 -1 1.500000 5.3430000000 35.7570000000 6.9870000000 + 1669 3 0.0 1 1.500000 6.9870000000 35.7570000000 5.3430000000 + 1670 3 0.0 -1 1.500000 6.9870000000 35.7570000000 5.3430000000 + 1671 3 0.0 1 1.500000 6.9870000000 34.1130000000 6.9870000000 + 1672 3 0.0 -1 1.500000 6.9870000000 34.1130000000 6.9870000000 + 1673 3 0.0 1 1.500000 1.2330000000 34.1130000000 9.4530000000 + 1674 3 0.0 -1 1.500000 1.2330000000 34.1130000000 9.4530000000 + 1675 3 0.0 1 1.500000 1.2330000000 35.7570000000 11.0970000000 + 1676 3 0.0 -1 1.500000 1.2330000000 35.7570000000 11.0970000000 + 1677 3 0.0 1 1.500000 2.8770000000 34.1130000000 11.0970000000 + 1678 3 0.0 -1 1.500000 2.8770000000 34.1130000000 11.0970000000 + 1679 3 0.0 1 1.500000 2.8770000000 35.7570000000 9.4530000000 + 1680 3 0.0 -1 1.500000 2.8770000000 35.7570000000 9.4530000000 + 1681 3 0.0 1 1.500000 5.3430000000 39.8670000000 11.0970000000 + 1682 3 0.0 -1 1.500000 5.3430000000 39.8670000000 11.0970000000 + 1683 3 0.0 1 1.500000 5.3430000000 38.2230000000 9.4530000000 + 1684 3 0.0 -1 1.500000 5.3430000000 38.2230000000 9.4530000000 + 1685 3 0.0 1 1.500000 6.9870000000 39.8670000000 9.4530000000 + 1686 3 0.0 -1 1.500000 6.9870000000 39.8670000000 9.4530000000 + 1687 3 0.0 1 1.500000 6.9870000000 38.2230000000 11.0970000000 + 1688 3 0.0 -1 1.500000 6.9870000000 38.2230000000 11.0970000000 + 1689 3 0.0 1 1.500000 2.8770000000 39.8670000000 13.5630000000 + 1690 3 0.0 -1 1.500000 2.8770000000 39.8670000000 13.5630000000 + 1691 3 0.0 1 1.500000 1.2330000000 39.8670000000 15.2070000000 + 1692 3 0.0 -1 1.500000 1.2330000000 39.8670000000 15.2070000000 + 1693 3 0.0 1 1.500000 1.2330000000 38.2230000000 13.5630000000 + 1694 3 0.0 -1 1.500000 1.2330000000 38.2230000000 13.5630000000 + 1695 3 0.0 1 1.500000 2.8770000000 38.2230000000 15.2070000000 + 1696 3 0.0 -1 1.500000 2.8770000000 38.2230000000 15.2070000000 + 1697 3 0.0 1 1.500000 5.3430000000 34.1130000000 13.5630000000 + 1698 3 0.0 -1 1.500000 5.3430000000 34.1130000000 13.5630000000 + 1699 3 0.0 1 1.500000 5.3430000000 35.7570000000 15.2070000000 + 1700 3 0.0 -1 1.500000 5.3430000000 35.7570000000 15.2070000000 + 1701 3 0.0 1 1.500000 6.9870000000 35.7570000000 13.5630000000 + 1702 3 0.0 -1 1.500000 6.9870000000 35.7570000000 13.5630000000 + 1703 3 0.0 1 1.500000 6.9870000000 34.1130000000 15.2070000000 + 1704 3 0.0 -1 1.500000 6.9870000000 34.1130000000 15.2070000000 + 1705 3 0.0 1 1.500000 1.2330000000 34.1130000000 17.6730000000 + 1706 3 0.0 -1 1.500000 1.2330000000 34.1130000000 17.6730000000 + 1707 3 0.0 1 1.500000 1.2330000000 35.7570000000 19.3170000000 + 1708 3 0.0 -1 1.500000 1.2330000000 35.7570000000 19.3170000000 + 1709 3 0.0 1 1.500000 2.8770000000 34.1130000000 19.3170000000 + 1710 3 0.0 -1 1.500000 2.8770000000 34.1130000000 19.3170000000 + 1711 3 0.0 1 1.500000 2.8770000000 35.7570000000 17.6730000000 + 1712 3 0.0 -1 1.500000 2.8770000000 35.7570000000 17.6730000000 + 1713 3 0.0 1 1.500000 5.3430000000 39.8670000000 19.3170000000 + 1714 3 0.0 -1 1.500000 5.3430000000 39.8670000000 19.3170000000 + 1715 3 0.0 1 1.500000 5.3430000000 38.2230000000 17.6730000000 + 1716 3 0.0 -1 1.500000 5.3430000000 38.2230000000 17.6730000000 + 1717 3 0.0 1 1.500000 6.9870000000 39.8670000000 17.6730000000 + 1718 3 0.0 -1 1.500000 6.9870000000 39.8670000000 17.6730000000 + 1719 3 0.0 1 1.500000 6.9870000000 38.2230000000 19.3170000000 + 1720 3 0.0 -1 1.500000 6.9870000000 38.2230000000 19.3170000000 + 1721 3 0.0 1 1.500000 2.8770000000 39.8670000000 21.7830000000 + 1722 3 0.0 -1 1.500000 2.8770000000 39.8670000000 21.7830000000 + 1723 3 0.0 1 1.500000 1.2330000000 39.8670000000 23.4270000000 + 1724 3 0.0 -1 1.500000 1.2330000000 39.8670000000 23.4270000000 + 1725 3 0.0 1 1.500000 1.2330000000 38.2230000000 21.7830000000 + 1726 3 0.0 -1 1.500000 1.2330000000 38.2230000000 21.7830000000 + 1727 3 0.0 1 1.500000 2.8770000000 38.2230000000 23.4270000000 + 1728 3 0.0 -1 1.500000 2.8770000000 38.2230000000 23.4270000000 + 1729 3 0.0 1 1.500000 5.3430000000 34.1130000000 21.7830000000 + 1730 3 0.0 -1 1.500000 5.3430000000 34.1130000000 21.7830000000 + 1731 3 0.0 1 1.500000 5.3430000000 35.7570000000 23.4270000000 + 1732 3 0.0 -1 1.500000 5.3430000000 35.7570000000 23.4270000000 + 1733 3 0.0 1 1.500000 6.9870000000 35.7570000000 21.7830000000 + 1734 3 0.0 -1 1.500000 6.9870000000 35.7570000000 21.7830000000 + 1735 3 0.0 1 1.500000 6.9870000000 34.1130000000 23.4270000000 + 1736 3 0.0 -1 1.500000 6.9870000000 34.1130000000 23.4270000000 + 1737 3 0.0 1 1.500000 1.2330000000 34.1130000000 25.8930000000 + 1738 3 0.0 -1 1.500000 1.2330000000 34.1130000000 25.8930000000 + 1739 3 0.0 1 1.500000 1.2330000000 35.7570000000 27.5370000000 + 1740 3 0.0 -1 1.500000 1.2330000000 35.7570000000 27.5370000000 + 1741 3 0.0 1 1.500000 2.8770000000 34.1130000000 27.5370000000 + 1742 3 0.0 -1 1.500000 2.8770000000 34.1130000000 27.5370000000 + 1743 3 0.0 1 1.500000 2.8770000000 35.7570000000 25.8930000000 + 1744 3 0.0 -1 1.500000 2.8770000000 35.7570000000 25.8930000000 + 1745 3 0.0 1 1.500000 5.3430000000 39.8670000000 27.5370000000 + 1746 3 0.0 -1 1.500000 5.3430000000 39.8670000000 27.5370000000 + 1747 3 0.0 1 1.500000 5.3430000000 38.2230000000 25.8930000000 + 1748 3 0.0 -1 1.500000 5.3430000000 38.2230000000 25.8930000000 + 1749 3 0.0 1 1.500000 6.9870000000 39.8670000000 25.8930000000 + 1750 3 0.0 -1 1.500000 6.9870000000 39.8670000000 25.8930000000 + 1751 3 0.0 1 1.500000 6.9870000000 38.2230000000 27.5370000000 + 1752 3 0.0 -1 1.500000 6.9870000000 38.2230000000 27.5370000000 + 1753 3 0.0 1 1.500000 2.8770000000 39.8670000000 30.0030000000 + 1754 3 0.0 -1 1.500000 2.8770000000 39.8670000000 30.0030000000 + 1755 3 0.0 1 1.500000 1.2330000000 39.8670000000 31.6470000000 + 1756 3 0.0 -1 1.500000 1.2330000000 39.8670000000 31.6470000000 + 1757 3 0.0 1 1.500000 1.2330000000 38.2230000000 30.0030000000 + 1758 3 0.0 -1 1.500000 1.2330000000 38.2230000000 30.0030000000 + 1759 3 0.0 1 1.500000 2.8770000000 38.2230000000 31.6470000000 + 1760 3 0.0 -1 1.500000 2.8770000000 38.2230000000 31.6470000000 + 1761 3 0.0 1 1.500000 5.3430000000 34.1130000000 30.0030000000 + 1762 3 0.0 -1 1.500000 5.3430000000 34.1130000000 30.0030000000 + 1763 3 0.0 1 1.500000 5.3430000000 35.7570000000 31.6470000000 + 1764 3 0.0 -1 1.500000 5.3430000000 35.7570000000 31.6470000000 + 1765 3 0.0 1 1.500000 6.9870000000 35.7570000000 30.0030000000 + 1766 3 0.0 -1 1.500000 6.9870000000 35.7570000000 30.0030000000 + 1767 3 0.0 1 1.500000 6.9870000000 34.1130000000 31.6470000000 + 1768 3 0.0 -1 1.500000 6.9870000000 34.1130000000 31.6470000000 + 1769 3 0.0 1 1.500000 1.2330000000 34.1130000000 34.1130000000 + 1770 3 0.0 -1 1.500000 1.2330000000 34.1130000000 34.1130000000 + 1771 3 0.0 1 1.500000 1.2330000000 35.7570000000 35.7570000000 + 1772 3 0.0 -1 1.500000 1.2330000000 35.7570000000 35.7570000000 + 1773 3 0.0 1 1.500000 2.8770000000 34.1130000000 35.7570000000 + 1774 3 0.0 -1 1.500000 2.8770000000 34.1130000000 35.7570000000 + 1775 3 0.0 1 1.500000 2.8770000000 35.7570000000 34.1130000000 + 1776 3 0.0 -1 1.500000 2.8770000000 35.7570000000 34.1130000000 + 1777 3 0.0 1 1.500000 5.3430000000 39.8670000000 35.7570000000 + 1778 3 0.0 -1 1.500000 5.3430000000 39.8670000000 35.7570000000 + 1779 3 0.0 1 1.500000 5.3430000000 38.2230000000 34.1130000000 + 1780 3 0.0 -1 1.500000 5.3430000000 38.2230000000 34.1130000000 + 1781 3 0.0 1 1.500000 6.9870000000 39.8670000000 34.1130000000 + 1782 3 0.0 -1 1.500000 6.9870000000 39.8670000000 34.1130000000 + 1783 3 0.0 1 1.500000 6.9870000000 38.2230000000 35.7570000000 + 1784 3 0.0 -1 1.500000 6.9870000000 38.2230000000 35.7570000000 + 1785 3 0.0 1 1.500000 1.2330000000 39.8670000000 39.8670000000 + 1786 3 0.0 -1 1.500000 1.2330000000 39.8670000000 39.8670000000 + 1787 3 0.0 1 1.500000 2.8770000000 39.8670000000 38.2230000000 + 1788 3 0.0 -1 1.500000 2.8770000000 39.8670000000 38.2230000000 + 1789 3 0.0 1 1.500000 2.8770000000 38.2230000000 39.8670000000 + 1790 3 0.0 -1 1.500000 2.8770000000 38.2230000000 39.8670000000 + 1791 3 0.0 1 1.500000 1.2330000000 38.2230000000 38.2230000000 + 1792 3 0.0 -1 1.500000 1.2330000000 38.2230000000 38.2230000000 + 1793 3 0.0 1 1.500000 5.3430000000 35.7570000000 39.8670000000 + 1794 3 0.0 -1 1.500000 5.3430000000 35.7570000000 39.8670000000 + 1795 3 0.0 1 1.500000 5.3430000000 34.1130000000 38.2230000000 + 1796 3 0.0 -1 1.500000 5.3430000000 34.1130000000 38.2230000000 + 1797 3 0.0 1 1.500000 6.9870000000 34.1130000000 39.8670000000 + 1798 3 0.0 -1 1.500000 6.9870000000 34.1130000000 39.8670000000 + 1799 3 0.0 1 1.500000 6.9870000000 35.7570000000 38.2230000000 + 1800 3 0.0 -1 1.500000 6.9870000000 35.7570000000 38.2230000000 + 1801 3 0.0 1 1.500000 9.4530000000 1.2330000000 1.2330000000 + 1802 3 0.0 -1 1.500000 9.4530000000 1.2330000000 1.2330000000 + 1803 3 0.0 1 1.500000 9.4530000000 2.8770000000 2.8770000000 + 1804 3 0.0 -1 1.500000 9.4530000000 2.8770000000 2.8770000000 + 1805 3 0.0 1 1.500000 11.0970000000 1.2330000000 2.8770000000 + 1806 3 0.0 -1 1.500000 11.0970000000 1.2330000000 2.8770000000 + 1807 3 0.0 1 1.500000 11.0970000000 2.8770000000 1.2330000000 + 1808 3 0.0 -1 1.500000 11.0970000000 2.8770000000 1.2330000000 + 1809 3 0.0 1 1.500000 13.5630000000 5.3430000000 1.2330000000 + 1810 3 0.0 -1 1.500000 13.5630000000 5.3430000000 1.2330000000 + 1811 3 0.0 1 1.500000 13.5630000000 6.9870000000 2.8770000000 + 1812 3 0.0 -1 1.500000 13.5630000000 6.9870000000 2.8770000000 + 1813 3 0.0 1 1.500000 15.2070000000 5.3430000000 2.8770000000 + 1814 3 0.0 -1 1.500000 15.2070000000 5.3430000000 2.8770000000 + 1815 3 0.0 1 1.500000 15.2070000000 6.9870000000 1.2330000000 + 1816 3 0.0 -1 1.500000 15.2070000000 6.9870000000 1.2330000000 + 1817 3 0.0 1 1.500000 9.4530000000 5.3430000000 5.3430000000 + 1818 3 0.0 -1 1.500000 9.4530000000 5.3430000000 5.3430000000 + 1819 3 0.0 1 1.500000 11.0970000000 5.3430000000 6.9870000000 + 1820 3 0.0 -1 1.500000 11.0970000000 5.3430000000 6.9870000000 + 1821 3 0.0 1 1.500000 11.0970000000 6.9870000000 5.3430000000 + 1822 3 0.0 -1 1.500000 11.0970000000 6.9870000000 5.3430000000 + 1823 3 0.0 1 1.500000 9.4530000000 6.9870000000 6.9870000000 + 1824 3 0.0 -1 1.500000 9.4530000000 6.9870000000 6.9870000000 + 1825 3 0.0 1 1.500000 13.5630000000 1.2330000000 5.3430000000 + 1826 3 0.0 -1 1.500000 13.5630000000 1.2330000000 5.3430000000 + 1827 3 0.0 1 1.500000 13.5630000000 2.8770000000 6.9870000000 + 1828 3 0.0 -1 1.500000 13.5630000000 2.8770000000 6.9870000000 + 1829 3 0.0 1 1.500000 15.2070000000 2.8770000000 5.3430000000 + 1830 3 0.0 -1 1.500000 15.2070000000 2.8770000000 5.3430000000 + 1831 3 0.0 1 1.500000 15.2070000000 1.2330000000 6.9870000000 + 1832 3 0.0 -1 1.500000 15.2070000000 1.2330000000 6.9870000000 + 1833 3 0.0 1 1.500000 9.4530000000 1.2330000000 9.4530000000 + 1834 3 0.0 -1 1.500000 9.4530000000 1.2330000000 9.4530000000 + 1835 3 0.0 1 1.500000 9.4530000000 2.8770000000 11.0970000000 + 1836 3 0.0 -1 1.500000 9.4530000000 2.8770000000 11.0970000000 + 1837 3 0.0 1 1.500000 11.0970000000 1.2330000000 11.0970000000 + 1838 3 0.0 -1 1.500000 11.0970000000 1.2330000000 11.0970000000 + 1839 3 0.0 1 1.500000 11.0970000000 2.8770000000 9.4530000000 + 1840 3 0.0 -1 1.500000 11.0970000000 2.8770000000 9.4530000000 + 1841 3 0.0 1 1.500000 13.5630000000 5.3430000000 9.4530000000 + 1842 3 0.0 -1 1.500000 13.5630000000 5.3430000000 9.4530000000 + 1843 3 0.0 1 1.500000 13.5630000000 6.9870000000 11.0970000000 + 1844 3 0.0 -1 1.500000 13.5630000000 6.9870000000 11.0970000000 + 1845 3 0.0 1 1.500000 15.2070000000 5.3430000000 11.0970000000 + 1846 3 0.0 -1 1.500000 15.2070000000 5.3430000000 11.0970000000 + 1847 3 0.0 1 1.500000 15.2070000000 6.9870000000 9.4530000000 + 1848 3 0.0 -1 1.500000 15.2070000000 6.9870000000 9.4530000000 + 1849 3 0.0 1 1.500000 9.4530000000 5.3430000000 13.5630000000 + 1850 3 0.0 -1 1.500000 9.4530000000 5.3430000000 13.5630000000 + 1851 3 0.0 1 1.500000 11.0970000000 5.3430000000 15.2070000000 + 1852 3 0.0 -1 1.500000 11.0970000000 5.3430000000 15.2070000000 + 1853 3 0.0 1 1.500000 11.0970000000 6.9870000000 13.5630000000 + 1854 3 0.0 -1 1.500000 11.0970000000 6.9870000000 13.5630000000 + 1855 3 0.0 1 1.500000 9.4530000000 6.9870000000 15.2070000000 + 1856 3 0.0 -1 1.500000 9.4530000000 6.9870000000 15.2070000000 + 1857 3 0.0 1 1.500000 13.5630000000 1.2330000000 13.5630000000 + 1858 3 0.0 -1 1.500000 13.5630000000 1.2330000000 13.5630000000 + 1859 3 0.0 1 1.500000 13.5630000000 2.8770000000 15.2070000000 + 1860 3 0.0 -1 1.500000 13.5630000000 2.8770000000 15.2070000000 + 1861 3 0.0 1 1.500000 15.2070000000 2.8770000000 13.5630000000 + 1862 3 0.0 -1 1.500000 15.2070000000 2.8770000000 13.5630000000 + 1863 3 0.0 1 1.500000 15.2070000000 1.2330000000 15.2070000000 + 1864 3 0.0 -1 1.500000 15.2070000000 1.2330000000 15.2070000000 + 1865 3 0.0 1 1.500000 9.4530000000 1.2330000000 17.6730000000 + 1866 3 0.0 -1 1.500000 9.4530000000 1.2330000000 17.6730000000 + 1867 3 0.0 1 1.500000 9.4530000000 2.8770000000 19.3170000000 + 1868 3 0.0 -1 1.500000 9.4530000000 2.8770000000 19.3170000000 + 1869 3 0.0 1 1.500000 11.0970000000 1.2330000000 19.3170000000 + 1870 3 0.0 -1 1.500000 11.0970000000 1.2330000000 19.3170000000 + 1871 3 0.0 1 1.500000 11.0970000000 2.8770000000 17.6730000000 + 1872 3 0.0 -1 1.500000 11.0970000000 2.8770000000 17.6730000000 + 1873 3 0.0 1 1.500000 13.5630000000 5.3430000000 17.6730000000 + 1874 3 0.0 -1 1.500000 13.5630000000 5.3430000000 17.6730000000 + 1875 3 0.0 1 1.500000 13.5630000000 6.9870000000 19.3170000000 + 1876 3 0.0 -1 1.500000 13.5630000000 6.9870000000 19.3170000000 + 1877 3 0.0 1 1.500000 15.2070000000 5.3430000000 19.3170000000 + 1878 3 0.0 -1 1.500000 15.2070000000 5.3430000000 19.3170000000 + 1879 3 0.0 1 1.500000 15.2070000000 6.9870000000 17.6730000000 + 1880 3 0.0 -1 1.500000 15.2070000000 6.9870000000 17.6730000000 + 1881 3 0.0 1 1.500000 9.4530000000 5.3430000000 21.7830000000 + 1882 3 0.0 -1 1.500000 9.4530000000 5.3430000000 21.7830000000 + 1883 3 0.0 1 1.500000 11.0970000000 5.3430000000 23.4270000000 + 1884 3 0.0 -1 1.500000 11.0970000000 5.3430000000 23.4270000000 + 1885 3 0.0 1 1.500000 11.0970000000 6.9870000000 21.7830000000 + 1886 3 0.0 -1 1.500000 11.0970000000 6.9870000000 21.7830000000 + 1887 3 0.0 1 1.500000 9.4530000000 6.9870000000 23.4270000000 + 1888 3 0.0 -1 1.500000 9.4530000000 6.9870000000 23.4270000000 + 1889 3 0.0 1 1.500000 13.5630000000 1.2330000000 21.7830000000 + 1890 3 0.0 -1 1.500000 13.5630000000 1.2330000000 21.7830000000 + 1891 3 0.0 1 1.500000 13.5630000000 2.8770000000 23.4270000000 + 1892 3 0.0 -1 1.500000 13.5630000000 2.8770000000 23.4270000000 + 1893 3 0.0 1 1.500000 15.2070000000 2.8770000000 21.7830000000 + 1894 3 0.0 -1 1.500000 15.2070000000 2.8770000000 21.7830000000 + 1895 3 0.0 1 1.500000 15.2070000000 1.2330000000 23.4270000000 + 1896 3 0.0 -1 1.500000 15.2070000000 1.2330000000 23.4270000000 + 1897 3 0.0 1 1.500000 9.4530000000 1.2330000000 25.8930000000 + 1898 3 0.0 -1 1.500000 9.4530000000 1.2330000000 25.8930000000 + 1899 3 0.0 1 1.500000 9.4530000000 2.8770000000 27.5370000000 + 1900 3 0.0 -1 1.500000 9.4530000000 2.8770000000 27.5370000000 + 1901 3 0.0 1 1.500000 11.0970000000 1.2330000000 27.5370000000 + 1902 3 0.0 -1 1.500000 11.0970000000 1.2330000000 27.5370000000 + 1903 3 0.0 1 1.500000 11.0970000000 2.8770000000 25.8930000000 + 1904 3 0.0 -1 1.500000 11.0970000000 2.8770000000 25.8930000000 + 1905 3 0.0 1 1.500000 13.5630000000 5.3430000000 25.8930000000 + 1906 3 0.0 -1 1.500000 13.5630000000 5.3430000000 25.8930000000 + 1907 3 0.0 1 1.500000 13.5630000000 6.9870000000 27.5370000000 + 1908 3 0.0 -1 1.500000 13.5630000000 6.9870000000 27.5370000000 + 1909 3 0.0 1 1.500000 15.2070000000 5.3430000000 27.5370000000 + 1910 3 0.0 -1 1.500000 15.2070000000 5.3430000000 27.5370000000 + 1911 3 0.0 1 1.500000 15.2070000000 6.9870000000 25.8930000000 + 1912 3 0.0 -1 1.500000 15.2070000000 6.9870000000 25.8930000000 + 1913 3 0.0 1 1.500000 9.4530000000 5.3430000000 30.0030000000 + 1914 3 0.0 -1 1.500000 9.4530000000 5.3430000000 30.0030000000 + 1915 3 0.0 1 1.500000 11.0970000000 5.3430000000 31.6470000000 + 1916 3 0.0 -1 1.500000 11.0970000000 5.3430000000 31.6470000000 + 1917 3 0.0 1 1.500000 11.0970000000 6.9870000000 30.0030000000 + 1918 3 0.0 -1 1.500000 11.0970000000 6.9870000000 30.0030000000 + 1919 3 0.0 1 1.500000 9.4530000000 6.9870000000 31.6470000000 + 1920 3 0.0 -1 1.500000 9.4530000000 6.9870000000 31.6470000000 + 1921 3 0.0 1 1.500000 13.5630000000 1.2330000000 30.0030000000 + 1922 3 0.0 -1 1.500000 13.5630000000 1.2330000000 30.0030000000 + 1923 3 0.0 1 1.500000 13.5630000000 2.8770000000 31.6470000000 + 1924 3 0.0 -1 1.500000 13.5630000000 2.8770000000 31.6470000000 + 1925 3 0.0 1 1.500000 15.2070000000 2.8770000000 30.0030000000 + 1926 3 0.0 -1 1.500000 15.2070000000 2.8770000000 30.0030000000 + 1927 3 0.0 1 1.500000 15.2070000000 1.2330000000 31.6470000000 + 1928 3 0.0 -1 1.500000 15.2070000000 1.2330000000 31.6470000000 + 1929 3 0.0 1 1.500000 9.4530000000 1.2330000000 34.1130000000 + 1930 3 0.0 -1 1.500000 9.4530000000 1.2330000000 34.1130000000 + 1931 3 0.0 1 1.500000 9.4530000000 2.8770000000 35.7570000000 + 1932 3 0.0 -1 1.500000 9.4530000000 2.8770000000 35.7570000000 + 1933 3 0.0 1 1.500000 11.0970000000 1.2330000000 35.7570000000 + 1934 3 0.0 -1 1.500000 11.0970000000 1.2330000000 35.7570000000 + 1935 3 0.0 1 1.500000 11.0970000000 2.8770000000 34.1130000000 + 1936 3 0.0 -1 1.500000 11.0970000000 2.8770000000 34.1130000000 + 1937 3 0.0 1 1.500000 13.5630000000 5.3430000000 34.1130000000 + 1938 3 0.0 -1 1.500000 13.5630000000 5.3430000000 34.1130000000 + 1939 3 0.0 1 1.500000 13.5630000000 6.9870000000 35.7570000000 + 1940 3 0.0 -1 1.500000 13.5630000000 6.9870000000 35.7570000000 + 1941 3 0.0 1 1.500000 15.2070000000 5.3430000000 35.7570000000 + 1942 3 0.0 -1 1.500000 15.2070000000 5.3430000000 35.7570000000 + 1943 3 0.0 1 1.500000 15.2070000000 6.9870000000 34.1130000000 + 1944 3 0.0 -1 1.500000 15.2070000000 6.9870000000 34.1130000000 + 1945 3 0.0 1 1.500000 11.0970000000 5.3430000000 39.8670000000 + 1946 3 0.0 -1 1.500000 11.0970000000 5.3430000000 39.8670000000 + 1947 3 0.0 1 1.500000 9.4530000000 5.3430000000 38.2230000000 + 1948 3 0.0 -1 1.500000 9.4530000000 5.3430000000 38.2230000000 + 1949 3 0.0 1 1.500000 9.4530000000 6.9870000000 39.8670000000 + 1950 3 0.0 -1 1.500000 9.4530000000 6.9870000000 39.8670000000 + 1951 3 0.0 1 1.500000 11.0970000000 6.9870000000 38.2230000000 + 1952 3 0.0 -1 1.500000 11.0970000000 6.9870000000 38.2230000000 + 1953 3 0.0 1 1.500000 13.5630000000 2.8770000000 39.8670000000 + 1954 3 0.0 -1 1.500000 13.5630000000 2.8770000000 39.8670000000 + 1955 3 0.0 1 1.500000 13.5630000000 1.2330000000 38.2230000000 + 1956 3 0.0 -1 1.500000 13.5630000000 1.2330000000 38.2230000000 + 1957 3 0.0 1 1.500000 15.2070000000 1.2330000000 39.8670000000 + 1958 3 0.0 -1 1.500000 15.2070000000 1.2330000000 39.8670000000 + 1959 3 0.0 1 1.500000 15.2070000000 2.8770000000 38.2230000000 + 1960 3 0.0 -1 1.500000 15.2070000000 2.8770000000 38.2230000000 + 1961 3 0.0 1 1.500000 9.4530000000 9.4530000000 1.2330000000 + 1962 3 0.0 -1 1.500000 9.4530000000 9.4530000000 1.2330000000 + 1963 3 0.0 1 1.500000 9.4530000000 11.0970000000 2.8770000000 + 1964 3 0.0 -1 1.500000 9.4530000000 11.0970000000 2.8770000000 + 1965 3 0.0 1 1.500000 11.0970000000 9.4530000000 2.8770000000 + 1966 3 0.0 -1 1.500000 11.0970000000 9.4530000000 2.8770000000 + 1967 3 0.0 1 1.500000 11.0970000000 11.0970000000 1.2330000000 + 1968 3 0.0 -1 1.500000 11.0970000000 11.0970000000 1.2330000000 + 1969 3 0.0 1 1.500000 13.5630000000 13.5630000000 1.2330000000 + 1970 3 0.0 -1 1.500000 13.5630000000 13.5630000000 1.2330000000 + 1971 3 0.0 1 1.500000 13.5630000000 15.2070000000 2.8770000000 + 1972 3 0.0 -1 1.500000 13.5630000000 15.2070000000 2.8770000000 + 1973 3 0.0 1 1.500000 15.2070000000 13.5630000000 2.8770000000 + 1974 3 0.0 -1 1.500000 15.2070000000 13.5630000000 2.8770000000 + 1975 3 0.0 1 1.500000 15.2070000000 15.2070000000 1.2330000000 + 1976 3 0.0 -1 1.500000 15.2070000000 15.2070000000 1.2330000000 + 1977 3 0.0 1 1.500000 9.4530000000 13.5630000000 5.3430000000 + 1978 3 0.0 -1 1.500000 9.4530000000 13.5630000000 5.3430000000 + 1979 3 0.0 1 1.500000 11.0970000000 13.5630000000 6.9870000000 + 1980 3 0.0 -1 1.500000 11.0970000000 13.5630000000 6.9870000000 + 1981 3 0.0 1 1.500000 11.0970000000 15.2070000000 5.3430000000 + 1982 3 0.0 -1 1.500000 11.0970000000 15.2070000000 5.3430000000 + 1983 3 0.0 1 1.500000 9.4530000000 15.2070000000 6.9870000000 + 1984 3 0.0 -1 1.500000 9.4530000000 15.2070000000 6.9870000000 + 1985 3 0.0 1 1.500000 13.5630000000 9.4530000000 5.3430000000 + 1986 3 0.0 -1 1.500000 13.5630000000 9.4530000000 5.3430000000 + 1987 3 0.0 1 1.500000 13.5630000000 11.0970000000 6.9870000000 + 1988 3 0.0 -1 1.500000 13.5630000000 11.0970000000 6.9870000000 + 1989 3 0.0 1 1.500000 15.2070000000 11.0970000000 5.3430000000 + 1990 3 0.0 -1 1.500000 15.2070000000 11.0970000000 5.3430000000 + 1991 3 0.0 1 1.500000 15.2070000000 9.4530000000 6.9870000000 + 1992 3 0.0 -1 1.500000 15.2070000000 9.4530000000 6.9870000000 + 1993 3 0.0 1 1.500000 9.4530000000 9.4530000000 9.4530000000 + 1994 3 0.0 -1 1.500000 9.4530000000 9.4530000000 9.4530000000 + 1995 3 0.0 1 1.500000 9.4530000000 11.0970000000 11.0970000000 + 1996 3 0.0 -1 1.500000 9.4530000000 11.0970000000 11.0970000000 + 1997 3 0.0 1 1.500000 11.0970000000 9.4530000000 11.0970000000 + 1998 3 0.0 -1 1.500000 11.0970000000 9.4530000000 11.0970000000 + 1999 3 0.0 1 1.500000 11.0970000000 11.0970000000 9.4530000000 + 2000 3 0.0 -1 1.500000 11.0970000000 11.0970000000 9.4530000000 + 2001 3 0.0 1 1.500000 13.5630000000 13.5630000000 9.4530000000 + 2002 3 0.0 -1 1.500000 13.5630000000 13.5630000000 9.4530000000 + 2003 3 0.0 1 1.500000 13.5630000000 15.2070000000 11.0970000000 + 2004 3 0.0 -1 1.500000 13.5630000000 15.2070000000 11.0970000000 + 2005 3 0.0 1 1.500000 15.2070000000 13.5630000000 11.0970000000 + 2006 3 0.0 -1 1.500000 15.2070000000 13.5630000000 11.0970000000 + 2007 3 0.0 1 1.500000 15.2070000000 15.2070000000 9.4530000000 + 2008 3 0.0 -1 1.500000 15.2070000000 15.2070000000 9.4530000000 + 2009 3 0.0 1 1.500000 9.4530000000 13.5630000000 13.5630000000 + 2010 3 0.0 -1 1.500000 9.4530000000 13.5630000000 13.5630000000 + 2011 3 0.0 1 1.500000 11.0970000000 13.5630000000 15.2070000000 + 2012 3 0.0 -1 1.500000 11.0970000000 13.5630000000 15.2070000000 + 2013 3 0.0 1 1.500000 11.0970000000 15.2070000000 13.5630000000 + 2014 3 0.0 -1 1.500000 11.0970000000 15.2070000000 13.5630000000 + 2015 3 0.0 1 1.500000 9.4530000000 15.2070000000 15.2070000000 + 2016 3 0.0 -1 1.500000 9.4530000000 15.2070000000 15.2070000000 + 2017 3 0.0 1 1.500000 13.5630000000 9.4530000000 13.5630000000 + 2018 3 0.0 -1 1.500000 13.5630000000 9.4530000000 13.5630000000 + 2019 3 0.0 1 1.500000 13.5630000000 11.0970000000 15.2070000000 + 2020 3 0.0 -1 1.500000 13.5630000000 11.0970000000 15.2070000000 + 2021 3 0.0 1 1.500000 15.2070000000 11.0970000000 13.5630000000 + 2022 3 0.0 -1 1.500000 15.2070000000 11.0970000000 13.5630000000 + 2023 3 0.0 1 1.500000 15.2070000000 9.4530000000 15.2070000000 + 2024 3 0.0 -1 1.500000 15.2070000000 9.4530000000 15.2070000000 + 2025 3 0.0 1 1.500000 9.4530000000 9.4530000000 17.6730000000 + 2026 3 0.0 -1 1.500000 9.4530000000 9.4530000000 17.6730000000 + 2027 3 0.0 1 1.500000 9.4530000000 11.0970000000 19.3170000000 + 2028 3 0.0 -1 1.500000 9.4530000000 11.0970000000 19.3170000000 + 2029 3 0.0 1 1.500000 11.0970000000 9.4530000000 19.3170000000 + 2030 3 0.0 -1 1.500000 11.0970000000 9.4530000000 19.3170000000 + 2031 3 0.0 1 1.500000 11.0970000000 11.0970000000 17.6730000000 + 2032 3 0.0 -1 1.500000 11.0970000000 11.0970000000 17.6730000000 + 2033 3 0.0 1 1.500000 13.5630000000 13.5630000000 17.6730000000 + 2034 3 0.0 -1 1.500000 13.5630000000 13.5630000000 17.6730000000 + 2035 3 0.0 1 1.500000 13.5630000000 15.2070000000 19.3170000000 + 2036 3 0.0 -1 1.500000 13.5630000000 15.2070000000 19.3170000000 + 2037 3 0.0 1 1.500000 15.2070000000 13.5630000000 19.3170000000 + 2038 3 0.0 -1 1.500000 15.2070000000 13.5630000000 19.3170000000 + 2039 3 0.0 1 1.500000 15.2070000000 15.2070000000 17.6730000000 + 2040 3 0.0 -1 1.500000 15.2070000000 15.2070000000 17.6730000000 + 2041 3 0.0 1 1.500000 9.4530000000 13.5630000000 21.7830000000 + 2042 3 0.0 -1 1.500000 9.4530000000 13.5630000000 21.7830000000 + 2043 3 0.0 1 1.500000 11.0970000000 13.5630000000 23.4270000000 + 2044 3 0.0 -1 1.500000 11.0970000000 13.5630000000 23.4270000000 + 2045 3 0.0 1 1.500000 11.0970000000 15.2070000000 21.7830000000 + 2046 3 0.0 -1 1.500000 11.0970000000 15.2070000000 21.7830000000 + 2047 3 0.0 1 1.500000 9.4530000000 15.2070000000 23.4270000000 + 2048 3 0.0 -1 1.500000 9.4530000000 15.2070000000 23.4270000000 + 2049 3 0.0 1 1.500000 13.5630000000 9.4530000000 21.7830000000 + 2050 3 0.0 -1 1.500000 13.5630000000 9.4530000000 21.7830000000 + 2051 3 0.0 1 1.500000 13.5630000000 11.0970000000 23.4270000000 + 2052 3 0.0 -1 1.500000 13.5630000000 11.0970000000 23.4270000000 + 2053 3 0.0 1 1.500000 15.2070000000 11.0970000000 21.7830000000 + 2054 3 0.0 -1 1.500000 15.2070000000 11.0970000000 21.7830000000 + 2055 3 0.0 1 1.500000 15.2070000000 9.4530000000 23.4270000000 + 2056 3 0.0 -1 1.500000 15.2070000000 9.4530000000 23.4270000000 + 2057 3 0.0 1 1.500000 9.4530000000 9.4530000000 25.8930000000 + 2058 3 0.0 -1 1.500000 9.4530000000 9.4530000000 25.8930000000 + 2059 3 0.0 1 1.500000 9.4530000000 11.0970000000 27.5370000000 + 2060 3 0.0 -1 1.500000 9.4530000000 11.0970000000 27.5370000000 + 2061 3 0.0 1 1.500000 11.0970000000 9.4530000000 27.5370000000 + 2062 3 0.0 -1 1.500000 11.0970000000 9.4530000000 27.5370000000 + 2063 3 0.0 1 1.500000 11.0970000000 11.0970000000 25.8930000000 + 2064 3 0.0 -1 1.500000 11.0970000000 11.0970000000 25.8930000000 + 2065 3 0.0 1 1.500000 13.5630000000 13.5630000000 25.8930000000 + 2066 3 0.0 -1 1.500000 13.5630000000 13.5630000000 25.8930000000 + 2067 3 0.0 1 1.500000 13.5630000000 15.2070000000 27.5370000000 + 2068 3 0.0 -1 1.500000 13.5630000000 15.2070000000 27.5370000000 + 2069 3 0.0 1 1.500000 15.2070000000 13.5630000000 27.5370000000 + 2070 3 0.0 -1 1.500000 15.2070000000 13.5630000000 27.5370000000 + 2071 3 0.0 1 1.500000 15.2070000000 15.2070000000 25.8930000000 + 2072 3 0.0 -1 1.500000 15.2070000000 15.2070000000 25.8930000000 + 2073 3 0.0 1 1.500000 9.4530000000 13.5630000000 30.0030000000 + 2074 3 0.0 -1 1.500000 9.4530000000 13.5630000000 30.0030000000 + 2075 3 0.0 1 1.500000 11.0970000000 13.5630000000 31.6470000000 + 2076 3 0.0 -1 1.500000 11.0970000000 13.5630000000 31.6470000000 + 2077 3 0.0 1 1.500000 11.0970000000 15.2070000000 30.0030000000 + 2078 3 0.0 -1 1.500000 11.0970000000 15.2070000000 30.0030000000 + 2079 3 0.0 1 1.500000 9.4530000000 15.2070000000 31.6470000000 + 2080 3 0.0 -1 1.500000 9.4530000000 15.2070000000 31.6470000000 + 2081 3 0.0 1 1.500000 13.5630000000 9.4530000000 30.0030000000 + 2082 3 0.0 -1 1.500000 13.5630000000 9.4530000000 30.0030000000 + 2083 3 0.0 1 1.500000 13.5630000000 11.0970000000 31.6470000000 + 2084 3 0.0 -1 1.500000 13.5630000000 11.0970000000 31.6470000000 + 2085 3 0.0 1 1.500000 15.2070000000 11.0970000000 30.0030000000 + 2086 3 0.0 -1 1.500000 15.2070000000 11.0970000000 30.0030000000 + 2087 3 0.0 1 1.500000 15.2070000000 9.4530000000 31.6470000000 + 2088 3 0.0 -1 1.500000 15.2070000000 9.4530000000 31.6470000000 + 2089 3 0.0 1 1.500000 9.4530000000 9.4530000000 34.1130000000 + 2090 3 0.0 -1 1.500000 9.4530000000 9.4530000000 34.1130000000 + 2091 3 0.0 1 1.500000 9.4530000000 11.0970000000 35.7570000000 + 2092 3 0.0 -1 1.500000 9.4530000000 11.0970000000 35.7570000000 + 2093 3 0.0 1 1.500000 11.0970000000 9.4530000000 35.7570000000 + 2094 3 0.0 -1 1.500000 11.0970000000 9.4530000000 35.7570000000 + 2095 3 0.0 1 1.500000 11.0970000000 11.0970000000 34.1130000000 + 2096 3 0.0 -1 1.500000 11.0970000000 11.0970000000 34.1130000000 + 2097 3 0.0 1 1.500000 13.5630000000 13.5630000000 34.1130000000 + 2098 3 0.0 -1 1.500000 13.5630000000 13.5630000000 34.1130000000 + 2099 3 0.0 1 1.500000 13.5630000000 15.2070000000 35.7570000000 + 2100 3 0.0 -1 1.500000 13.5630000000 15.2070000000 35.7570000000 + 2101 3 0.0 1 1.500000 15.2070000000 13.5630000000 35.7570000000 + 2102 3 0.0 -1 1.500000 15.2070000000 13.5630000000 35.7570000000 + 2103 3 0.0 1 1.500000 15.2070000000 15.2070000000 34.1130000000 + 2104 3 0.0 -1 1.500000 15.2070000000 15.2070000000 34.1130000000 + 2105 3 0.0 1 1.500000 11.0970000000 13.5630000000 39.8670000000 + 2106 3 0.0 -1 1.500000 11.0970000000 13.5630000000 39.8670000000 + 2107 3 0.0 1 1.500000 9.4530000000 13.5630000000 38.2230000000 + 2108 3 0.0 -1 1.500000 9.4530000000 13.5630000000 38.2230000000 + 2109 3 0.0 1 1.500000 9.4530000000 15.2070000000 39.8670000000 + 2110 3 0.0 -1 1.500000 9.4530000000 15.2070000000 39.8670000000 + 2111 3 0.0 1 1.500000 11.0970000000 15.2070000000 38.2230000000 + 2112 3 0.0 -1 1.500000 11.0970000000 15.2070000000 38.2230000000 + 2113 3 0.0 1 1.500000 13.5630000000 11.0970000000 39.8670000000 + 2114 3 0.0 -1 1.500000 13.5630000000 11.0970000000 39.8670000000 + 2115 3 0.0 1 1.500000 13.5630000000 9.4530000000 38.2230000000 + 2116 3 0.0 -1 1.500000 13.5630000000 9.4530000000 38.2230000000 + 2117 3 0.0 1 1.500000 15.2070000000 9.4530000000 39.8670000000 + 2118 3 0.0 -1 1.500000 15.2070000000 9.4530000000 39.8670000000 + 2119 3 0.0 1 1.500000 15.2070000000 11.0970000000 38.2230000000 + 2120 3 0.0 -1 1.500000 15.2070000000 11.0970000000 38.2230000000 + 2121 3 0.0 1 1.500000 9.4530000000 17.6730000000 1.2330000000 + 2122 3 0.0 -1 1.500000 9.4530000000 17.6730000000 1.2330000000 + 2123 3 0.0 1 1.500000 9.4530000000 19.3170000000 2.8770000000 + 2124 3 0.0 -1 1.500000 9.4530000000 19.3170000000 2.8770000000 + 2125 3 0.0 1 1.500000 11.0970000000 17.6730000000 2.8770000000 + 2126 3 0.0 -1 1.500000 11.0970000000 17.6730000000 2.8770000000 + 2127 3 0.0 1 1.500000 11.0970000000 19.3170000000 1.2330000000 + 2128 3 0.0 -1 1.500000 11.0970000000 19.3170000000 1.2330000000 + 2129 3 0.0 1 1.500000 13.5630000000 21.7830000000 1.2330000000 + 2130 3 0.0 -1 1.500000 13.5630000000 21.7830000000 1.2330000000 + 2131 3 0.0 1 1.500000 13.5630000000 23.4270000000 2.8770000000 + 2132 3 0.0 -1 1.500000 13.5630000000 23.4270000000 2.8770000000 + 2133 3 0.0 1 1.500000 15.2070000000 21.7830000000 2.8770000000 + 2134 3 0.0 -1 1.500000 15.2070000000 21.7830000000 2.8770000000 + 2135 3 0.0 1 1.500000 15.2070000000 23.4270000000 1.2330000000 + 2136 3 0.0 -1 1.500000 15.2070000000 23.4270000000 1.2330000000 + 2137 3 0.0 1 1.500000 9.4530000000 21.7830000000 5.3430000000 + 2138 3 0.0 -1 1.500000 9.4530000000 21.7830000000 5.3430000000 + 2139 3 0.0 1 1.500000 11.0970000000 21.7830000000 6.9870000000 + 2140 3 0.0 -1 1.500000 11.0970000000 21.7830000000 6.9870000000 + 2141 3 0.0 1 1.500000 11.0970000000 23.4270000000 5.3430000000 + 2142 3 0.0 -1 1.500000 11.0970000000 23.4270000000 5.3430000000 + 2143 3 0.0 1 1.500000 9.4530000000 23.4270000000 6.9870000000 + 2144 3 0.0 -1 1.500000 9.4530000000 23.4270000000 6.9870000000 + 2145 3 0.0 1 1.500000 13.5630000000 17.6730000000 5.3430000000 + 2146 3 0.0 -1 1.500000 13.5630000000 17.6730000000 5.3430000000 + 2147 3 0.0 1 1.500000 13.5630000000 19.3170000000 6.9870000000 + 2148 3 0.0 -1 1.500000 13.5630000000 19.3170000000 6.9870000000 + 2149 3 0.0 1 1.500000 15.2070000000 19.3170000000 5.3430000000 + 2150 3 0.0 -1 1.500000 15.2070000000 19.3170000000 5.3430000000 + 2151 3 0.0 1 1.500000 15.2070000000 17.6730000000 6.9870000000 + 2152 3 0.0 -1 1.500000 15.2070000000 17.6730000000 6.9870000000 + 2153 3 0.0 1 1.500000 9.4530000000 17.6730000000 9.4530000000 + 2154 3 0.0 -1 1.500000 9.4530000000 17.6730000000 9.4530000000 + 2155 3 0.0 1 1.500000 9.4530000000 19.3170000000 11.0970000000 + 2156 3 0.0 -1 1.500000 9.4530000000 19.3170000000 11.0970000000 + 2157 3 0.0 1 1.500000 11.0970000000 17.6730000000 11.0970000000 + 2158 3 0.0 -1 1.500000 11.0970000000 17.6730000000 11.0970000000 + 2159 3 0.0 1 1.500000 11.0970000000 19.3170000000 9.4530000000 + 2160 3 0.0 -1 1.500000 11.0970000000 19.3170000000 9.4530000000 + 2161 3 0.0 1 1.500000 13.5630000000 21.7830000000 9.4530000000 + 2162 3 0.0 -1 1.500000 13.5630000000 21.7830000000 9.4530000000 + 2163 3 0.0 1 1.500000 13.5630000000 23.4270000000 11.0970000000 + 2164 3 0.0 -1 1.500000 13.5630000000 23.4270000000 11.0970000000 + 2165 3 0.0 1 1.500000 15.2070000000 21.7830000000 11.0970000000 + 2166 3 0.0 -1 1.500000 15.2070000000 21.7830000000 11.0970000000 + 2167 3 0.0 1 1.500000 15.2070000000 23.4270000000 9.4530000000 + 2168 3 0.0 -1 1.500000 15.2070000000 23.4270000000 9.4530000000 + 2169 3 0.0 1 1.500000 9.4530000000 21.7830000000 13.5630000000 + 2170 3 0.0 -1 1.500000 9.4530000000 21.7830000000 13.5630000000 + 2171 3 0.0 1 1.500000 11.0970000000 21.7830000000 15.2070000000 + 2172 3 0.0 -1 1.500000 11.0970000000 21.7830000000 15.2070000000 + 2173 3 0.0 1 1.500000 11.0970000000 23.4270000000 13.5630000000 + 2174 3 0.0 -1 1.500000 11.0970000000 23.4270000000 13.5630000000 + 2175 3 0.0 1 1.500000 9.4530000000 23.4270000000 15.2070000000 + 2176 3 0.0 -1 1.500000 9.4530000000 23.4270000000 15.2070000000 + 2177 3 0.0 1 1.500000 13.5630000000 17.6730000000 13.5630000000 + 2178 3 0.0 -1 1.500000 13.5630000000 17.6730000000 13.5630000000 + 2179 3 0.0 1 1.500000 13.5630000000 19.3170000000 15.2070000000 + 2180 3 0.0 -1 1.500000 13.5630000000 19.3170000000 15.2070000000 + 2181 3 0.0 1 1.500000 15.2070000000 19.3170000000 13.5630000000 + 2182 3 0.0 -1 1.500000 15.2070000000 19.3170000000 13.5630000000 + 2183 3 0.0 1 1.500000 15.2070000000 17.6730000000 15.2070000000 + 2184 3 0.0 -1 1.500000 15.2070000000 17.6730000000 15.2070000000 + 2185 3 0.0 1 1.500000 9.4530000000 17.6730000000 17.6730000000 + 2186 3 0.0 -1 1.500000 9.4530000000 17.6730000000 17.6730000000 + 2187 3 0.0 1 1.500000 9.4530000000 19.3170000000 19.3170000000 + 2188 3 0.0 -1 1.500000 9.4530000000 19.3170000000 19.3170000000 + 2189 3 0.0 1 1.500000 11.0970000000 17.6730000000 19.3170000000 + 2190 3 0.0 -1 1.500000 11.0970000000 17.6730000000 19.3170000000 + 2191 3 0.0 1 1.500000 11.0970000000 19.3170000000 17.6730000000 + 2192 3 0.0 -1 1.500000 11.0970000000 19.3170000000 17.6730000000 + 2193 3 0.0 1 1.500000 13.5630000000 21.7830000000 17.6730000000 + 2194 3 0.0 -1 1.500000 13.5630000000 21.7830000000 17.6730000000 + 2195 3 0.0 1 1.500000 13.5630000000 23.4270000000 19.3170000000 + 2196 3 0.0 -1 1.500000 13.5630000000 23.4270000000 19.3170000000 + 2197 3 0.0 1 1.500000 15.2070000000 21.7830000000 19.3170000000 + 2198 3 0.0 -1 1.500000 15.2070000000 21.7830000000 19.3170000000 + 2199 3 0.0 1 1.500000 15.2070000000 23.4270000000 17.6730000000 + 2200 3 0.0 -1 1.500000 15.2070000000 23.4270000000 17.6730000000 + 2201 3 0.0 1 1.500000 9.4530000000 21.7830000000 21.7830000000 + 2202 3 0.0 -1 1.500000 9.4530000000 21.7830000000 21.7830000000 + 2203 3 0.0 1 1.500000 11.0970000000 21.7830000000 23.4270000000 + 2204 3 0.0 -1 1.500000 11.0970000000 21.7830000000 23.4270000000 + 2205 3 0.0 1 1.500000 11.0970000000 23.4270000000 21.7830000000 + 2206 3 0.0 -1 1.500000 11.0970000000 23.4270000000 21.7830000000 + 2207 3 0.0 1 1.500000 9.4530000000 23.4270000000 23.4270000000 + 2208 3 0.0 -1 1.500000 9.4530000000 23.4270000000 23.4270000000 + 2209 3 0.0 1 1.500000 13.5630000000 17.6730000000 21.7830000000 + 2210 3 0.0 -1 1.500000 13.5630000000 17.6730000000 21.7830000000 + 2211 3 0.0 1 1.500000 13.5630000000 19.3170000000 23.4270000000 + 2212 3 0.0 -1 1.500000 13.5630000000 19.3170000000 23.4270000000 + 2213 3 0.0 1 1.500000 15.2070000000 19.3170000000 21.7830000000 + 2214 3 0.0 -1 1.500000 15.2070000000 19.3170000000 21.7830000000 + 2215 3 0.0 1 1.500000 15.2070000000 17.6730000000 23.4270000000 + 2216 3 0.0 -1 1.500000 15.2070000000 17.6730000000 23.4270000000 + 2217 3 0.0 1 1.500000 9.4530000000 17.6730000000 25.8930000000 + 2218 3 0.0 -1 1.500000 9.4530000000 17.6730000000 25.8930000000 + 2219 3 0.0 1 1.500000 9.4530000000 19.3170000000 27.5370000000 + 2220 3 0.0 -1 1.500000 9.4530000000 19.3170000000 27.5370000000 + 2221 3 0.0 1 1.500000 11.0970000000 17.6730000000 27.5370000000 + 2222 3 0.0 -1 1.500000 11.0970000000 17.6730000000 27.5370000000 + 2223 3 0.0 1 1.500000 11.0970000000 19.3170000000 25.8930000000 + 2224 3 0.0 -1 1.500000 11.0970000000 19.3170000000 25.8930000000 + 2225 3 0.0 1 1.500000 13.5630000000 21.7830000000 25.8930000000 + 2226 3 0.0 -1 1.500000 13.5630000000 21.7830000000 25.8930000000 + 2227 3 0.0 1 1.500000 13.5630000000 23.4270000000 27.5370000000 + 2228 3 0.0 -1 1.500000 13.5630000000 23.4270000000 27.5370000000 + 2229 3 0.0 1 1.500000 15.2070000000 21.7830000000 27.5370000000 + 2230 3 0.0 -1 1.500000 15.2070000000 21.7830000000 27.5370000000 + 2231 3 0.0 1 1.500000 15.2070000000 23.4270000000 25.8930000000 + 2232 3 0.0 -1 1.500000 15.2070000000 23.4270000000 25.8930000000 + 2233 3 0.0 1 1.500000 9.4530000000 21.7830000000 30.0030000000 + 2234 3 0.0 -1 1.500000 9.4530000000 21.7830000000 30.0030000000 + 2235 3 0.0 1 1.500000 11.0970000000 21.7830000000 31.6470000000 + 2236 3 0.0 -1 1.500000 11.0970000000 21.7830000000 31.6470000000 + 2237 3 0.0 1 1.500000 11.0970000000 23.4270000000 30.0030000000 + 2238 3 0.0 -1 1.500000 11.0970000000 23.4270000000 30.0030000000 + 2239 3 0.0 1 1.500000 9.4530000000 23.4270000000 31.6470000000 + 2240 3 0.0 -1 1.500000 9.4530000000 23.4270000000 31.6470000000 + 2241 3 0.0 1 1.500000 13.5630000000 17.6730000000 30.0030000000 + 2242 3 0.0 -1 1.500000 13.5630000000 17.6730000000 30.0030000000 + 2243 3 0.0 1 1.500000 13.5630000000 19.3170000000 31.6470000000 + 2244 3 0.0 -1 1.500000 13.5630000000 19.3170000000 31.6470000000 + 2245 3 0.0 1 1.500000 15.2070000000 19.3170000000 30.0030000000 + 2246 3 0.0 -1 1.500000 15.2070000000 19.3170000000 30.0030000000 + 2247 3 0.0 1 1.500000 15.2070000000 17.6730000000 31.6470000000 + 2248 3 0.0 -1 1.500000 15.2070000000 17.6730000000 31.6470000000 + 2249 3 0.0 1 1.500000 9.4530000000 17.6730000000 34.1130000000 + 2250 3 0.0 -1 1.500000 9.4530000000 17.6730000000 34.1130000000 + 2251 3 0.0 1 1.500000 9.4530000000 19.3170000000 35.7570000000 + 2252 3 0.0 -1 1.500000 9.4530000000 19.3170000000 35.7570000000 + 2253 3 0.0 1 1.500000 11.0970000000 17.6730000000 35.7570000000 + 2254 3 0.0 -1 1.500000 11.0970000000 17.6730000000 35.7570000000 + 2255 3 0.0 1 1.500000 11.0970000000 19.3170000000 34.1130000000 + 2256 3 0.0 -1 1.500000 11.0970000000 19.3170000000 34.1130000000 + 2257 3 0.0 1 1.500000 13.5630000000 21.7830000000 34.1130000000 + 2258 3 0.0 -1 1.500000 13.5630000000 21.7830000000 34.1130000000 + 2259 3 0.0 1 1.500000 13.5630000000 23.4270000000 35.7570000000 + 2260 3 0.0 -1 1.500000 13.5630000000 23.4270000000 35.7570000000 + 2261 3 0.0 1 1.500000 15.2070000000 21.7830000000 35.7570000000 + 2262 3 0.0 -1 1.500000 15.2070000000 21.7830000000 35.7570000000 + 2263 3 0.0 1 1.500000 15.2070000000 23.4270000000 34.1130000000 + 2264 3 0.0 -1 1.500000 15.2070000000 23.4270000000 34.1130000000 + 2265 3 0.0 1 1.500000 11.0970000000 21.7830000000 39.8670000000 + 2266 3 0.0 -1 1.500000 11.0970000000 21.7830000000 39.8670000000 + 2267 3 0.0 1 1.500000 9.4530000000 21.7830000000 38.2230000000 + 2268 3 0.0 -1 1.500000 9.4530000000 21.7830000000 38.2230000000 + 2269 3 0.0 1 1.500000 9.4530000000 23.4270000000 39.8670000000 + 2270 3 0.0 -1 1.500000 9.4530000000 23.4270000000 39.8670000000 + 2271 3 0.0 1 1.500000 11.0970000000 23.4270000000 38.2230000000 + 2272 3 0.0 -1 1.500000 11.0970000000 23.4270000000 38.2230000000 + 2273 3 0.0 1 1.500000 13.5630000000 19.3170000000 39.8670000000 + 2274 3 0.0 -1 1.500000 13.5630000000 19.3170000000 39.8670000000 + 2275 3 0.0 1 1.500000 13.5630000000 17.6730000000 38.2230000000 + 2276 3 0.0 -1 1.500000 13.5630000000 17.6730000000 38.2230000000 + 2277 3 0.0 1 1.500000 15.2070000000 17.6730000000 39.8670000000 + 2278 3 0.0 -1 1.500000 15.2070000000 17.6730000000 39.8670000000 + 2279 3 0.0 1 1.500000 15.2070000000 19.3170000000 38.2230000000 + 2280 3 0.0 -1 1.500000 15.2070000000 19.3170000000 38.2230000000 + 2281 3 0.0 1 1.500000 9.4530000000 25.8930000000 1.2330000000 + 2282 3 0.0 -1 1.500000 9.4530000000 25.8930000000 1.2330000000 + 2283 3 0.0 1 1.500000 9.4530000000 27.5370000000 2.8770000000 + 2284 3 0.0 -1 1.500000 9.4530000000 27.5370000000 2.8770000000 + 2285 3 0.0 1 1.500000 11.0970000000 25.8930000000 2.8770000000 + 2286 3 0.0 -1 1.500000 11.0970000000 25.8930000000 2.8770000000 + 2287 3 0.0 1 1.500000 11.0970000000 27.5370000000 1.2330000000 + 2288 3 0.0 -1 1.500000 11.0970000000 27.5370000000 1.2330000000 + 2289 3 0.0 1 1.500000 13.5630000000 30.0030000000 1.2330000000 + 2290 3 0.0 -1 1.500000 13.5630000000 30.0030000000 1.2330000000 + 2291 3 0.0 1 1.500000 13.5630000000 31.6470000000 2.8770000000 + 2292 3 0.0 -1 1.500000 13.5630000000 31.6470000000 2.8770000000 + 2293 3 0.0 1 1.500000 15.2070000000 30.0030000000 2.8770000000 + 2294 3 0.0 -1 1.500000 15.2070000000 30.0030000000 2.8770000000 + 2295 3 0.0 1 1.500000 15.2070000000 31.6470000000 1.2330000000 + 2296 3 0.0 -1 1.500000 15.2070000000 31.6470000000 1.2330000000 + 2297 3 0.0 1 1.500000 9.4530000000 30.0030000000 5.3430000000 + 2298 3 0.0 -1 1.500000 9.4530000000 30.0030000000 5.3430000000 + 2299 3 0.0 1 1.500000 11.0970000000 30.0030000000 6.9870000000 + 2300 3 0.0 -1 1.500000 11.0970000000 30.0030000000 6.9870000000 + 2301 3 0.0 1 1.500000 11.0970000000 31.6470000000 5.3430000000 + 2302 3 0.0 -1 1.500000 11.0970000000 31.6470000000 5.3430000000 + 2303 3 0.0 1 1.500000 9.4530000000 31.6470000000 6.9870000000 + 2304 3 0.0 -1 1.500000 9.4530000000 31.6470000000 6.9870000000 + 2305 3 0.0 1 1.500000 13.5630000000 25.8930000000 5.3430000000 + 2306 3 0.0 -1 1.500000 13.5630000000 25.8930000000 5.3430000000 + 2307 3 0.0 1 1.500000 13.5630000000 27.5370000000 6.9870000000 + 2308 3 0.0 -1 1.500000 13.5630000000 27.5370000000 6.9870000000 + 2309 3 0.0 1 1.500000 15.2070000000 27.5370000000 5.3430000000 + 2310 3 0.0 -1 1.500000 15.2070000000 27.5370000000 5.3430000000 + 2311 3 0.0 1 1.500000 15.2070000000 25.8930000000 6.9870000000 + 2312 3 0.0 -1 1.500000 15.2070000000 25.8930000000 6.9870000000 + 2313 3 0.0 1 1.500000 9.4530000000 25.8930000000 9.4530000000 + 2314 3 0.0 -1 1.500000 9.4530000000 25.8930000000 9.4530000000 + 2315 3 0.0 1 1.500000 9.4530000000 27.5370000000 11.0970000000 + 2316 3 0.0 -1 1.500000 9.4530000000 27.5370000000 11.0970000000 + 2317 3 0.0 1 1.500000 11.0970000000 25.8930000000 11.0970000000 + 2318 3 0.0 -1 1.500000 11.0970000000 25.8930000000 11.0970000000 + 2319 3 0.0 1 1.500000 11.0970000000 27.5370000000 9.4530000000 + 2320 3 0.0 -1 1.500000 11.0970000000 27.5370000000 9.4530000000 + 2321 3 0.0 1 1.500000 13.5630000000 30.0030000000 9.4530000000 + 2322 3 0.0 -1 1.500000 13.5630000000 30.0030000000 9.4530000000 + 2323 3 0.0 1 1.500000 13.5630000000 31.6470000000 11.0970000000 + 2324 3 0.0 -1 1.500000 13.5630000000 31.6470000000 11.0970000000 + 2325 3 0.0 1 1.500000 15.2070000000 30.0030000000 11.0970000000 + 2326 3 0.0 -1 1.500000 15.2070000000 30.0030000000 11.0970000000 + 2327 3 0.0 1 1.500000 15.2070000000 31.6470000000 9.4530000000 + 2328 3 0.0 -1 1.500000 15.2070000000 31.6470000000 9.4530000000 + 2329 3 0.0 1 1.500000 9.4530000000 30.0030000000 13.5630000000 + 2330 3 0.0 -1 1.500000 9.4530000000 30.0030000000 13.5630000000 + 2331 3 0.0 1 1.500000 11.0970000000 30.0030000000 15.2070000000 + 2332 3 0.0 -1 1.500000 11.0970000000 30.0030000000 15.2070000000 + 2333 3 0.0 1 1.500000 11.0970000000 31.6470000000 13.5630000000 + 2334 3 0.0 -1 1.500000 11.0970000000 31.6470000000 13.5630000000 + 2335 3 0.0 1 1.500000 9.4530000000 31.6470000000 15.2070000000 + 2336 3 0.0 -1 1.500000 9.4530000000 31.6470000000 15.2070000000 + 2337 3 0.0 1 1.500000 13.5630000000 25.8930000000 13.5630000000 + 2338 3 0.0 -1 1.500000 13.5630000000 25.8930000000 13.5630000000 + 2339 3 0.0 1 1.500000 13.5630000000 27.5370000000 15.2070000000 + 2340 3 0.0 -1 1.500000 13.5630000000 27.5370000000 15.2070000000 + 2341 3 0.0 1 1.500000 15.2070000000 27.5370000000 13.5630000000 + 2342 3 0.0 -1 1.500000 15.2070000000 27.5370000000 13.5630000000 + 2343 3 0.0 1 1.500000 15.2070000000 25.8930000000 15.2070000000 + 2344 3 0.0 -1 1.500000 15.2070000000 25.8930000000 15.2070000000 + 2345 3 0.0 1 1.500000 9.4530000000 25.8930000000 17.6730000000 + 2346 3 0.0 -1 1.500000 9.4530000000 25.8930000000 17.6730000000 + 2347 3 0.0 1 1.500000 9.4530000000 27.5370000000 19.3170000000 + 2348 3 0.0 -1 1.500000 9.4530000000 27.5370000000 19.3170000000 + 2349 3 0.0 1 1.500000 11.0970000000 25.8930000000 19.3170000000 + 2350 3 0.0 -1 1.500000 11.0970000000 25.8930000000 19.3170000000 + 2351 3 0.0 1 1.500000 11.0970000000 27.5370000000 17.6730000000 + 2352 3 0.0 -1 1.500000 11.0970000000 27.5370000000 17.6730000000 + 2353 3 0.0 1 1.500000 13.5630000000 30.0030000000 17.6730000000 + 2354 3 0.0 -1 1.500000 13.5630000000 30.0030000000 17.6730000000 + 2355 3 0.0 1 1.500000 13.5630000000 31.6470000000 19.3170000000 + 2356 3 0.0 -1 1.500000 13.5630000000 31.6470000000 19.3170000000 + 2357 3 0.0 1 1.500000 15.2070000000 30.0030000000 19.3170000000 + 2358 3 0.0 -1 1.500000 15.2070000000 30.0030000000 19.3170000000 + 2359 3 0.0 1 1.500000 15.2070000000 31.6470000000 17.6730000000 + 2360 3 0.0 -1 1.500000 15.2070000000 31.6470000000 17.6730000000 + 2361 3 0.0 1 1.500000 9.4530000000 30.0030000000 21.7830000000 + 2362 3 0.0 -1 1.500000 9.4530000000 30.0030000000 21.7830000000 + 2363 3 0.0 1 1.500000 11.0970000000 30.0030000000 23.4270000000 + 2364 3 0.0 -1 1.500000 11.0970000000 30.0030000000 23.4270000000 + 2365 3 0.0 1 1.500000 11.0970000000 31.6470000000 21.7830000000 + 2366 3 0.0 -1 1.500000 11.0970000000 31.6470000000 21.7830000000 + 2367 3 0.0 1 1.500000 9.4530000000 31.6470000000 23.4270000000 + 2368 3 0.0 -1 1.500000 9.4530000000 31.6470000000 23.4270000000 + 2369 3 0.0 1 1.500000 13.5630000000 25.8930000000 21.7830000000 + 2370 3 0.0 -1 1.500000 13.5630000000 25.8930000000 21.7830000000 + 2371 3 0.0 1 1.500000 13.5630000000 27.5370000000 23.4270000000 + 2372 3 0.0 -1 1.500000 13.5630000000 27.5370000000 23.4270000000 + 2373 3 0.0 1 1.500000 15.2070000000 27.5370000000 21.7830000000 + 2374 3 0.0 -1 1.500000 15.2070000000 27.5370000000 21.7830000000 + 2375 3 0.0 1 1.500000 15.2070000000 25.8930000000 23.4270000000 + 2376 3 0.0 -1 1.500000 15.2070000000 25.8930000000 23.4270000000 + 2377 3 0.0 1 1.500000 9.4530000000 25.8930000000 25.8930000000 + 2378 3 0.0 -1 1.500000 9.4530000000 25.8930000000 25.8930000000 + 2379 3 0.0 1 1.500000 9.4530000000 27.5370000000 27.5370000000 + 2380 3 0.0 -1 1.500000 9.4530000000 27.5370000000 27.5370000000 + 2381 3 0.0 1 1.500000 11.0970000000 25.8930000000 27.5370000000 + 2382 3 0.0 -1 1.500000 11.0970000000 25.8930000000 27.5370000000 + 2383 3 0.0 1 1.500000 11.0970000000 27.5370000000 25.8930000000 + 2384 3 0.0 -1 1.500000 11.0970000000 27.5370000000 25.8930000000 + 2385 3 0.0 1 1.500000 13.5630000000 30.0030000000 25.8930000000 + 2386 3 0.0 -1 1.500000 13.5630000000 30.0030000000 25.8930000000 + 2387 3 0.0 1 1.500000 13.5630000000 31.6470000000 27.5370000000 + 2388 3 0.0 -1 1.500000 13.5630000000 31.6470000000 27.5370000000 + 2389 3 0.0 1 1.500000 15.2070000000 30.0030000000 27.5370000000 + 2390 3 0.0 -1 1.500000 15.2070000000 30.0030000000 27.5370000000 + 2391 3 0.0 1 1.500000 15.2070000000 31.6470000000 25.8930000000 + 2392 3 0.0 -1 1.500000 15.2070000000 31.6470000000 25.8930000000 + 2393 3 0.0 1 1.500000 9.4530000000 30.0030000000 30.0030000000 + 2394 3 0.0 -1 1.500000 9.4530000000 30.0030000000 30.0030000000 + 2395 3 0.0 1 1.500000 11.0970000000 30.0030000000 31.6470000000 + 2396 3 0.0 -1 1.500000 11.0970000000 30.0030000000 31.6470000000 + 2397 3 0.0 1 1.500000 11.0970000000 31.6470000000 30.0030000000 + 2398 3 0.0 -1 1.500000 11.0970000000 31.6470000000 30.0030000000 + 2399 3 0.0 1 1.500000 9.4530000000 31.6470000000 31.6470000000 + 2400 3 0.0 -1 1.500000 9.4530000000 31.6470000000 31.6470000000 + 2401 3 0.0 1 1.500000 13.5630000000 25.8930000000 30.0030000000 + 2402 3 0.0 -1 1.500000 13.5630000000 25.8930000000 30.0030000000 + 2403 3 0.0 1 1.500000 13.5630000000 27.5370000000 31.6470000000 + 2404 3 0.0 -1 1.500000 13.5630000000 27.5370000000 31.6470000000 + 2405 3 0.0 1 1.500000 15.2070000000 27.5370000000 30.0030000000 + 2406 3 0.0 -1 1.500000 15.2070000000 27.5370000000 30.0030000000 + 2407 3 0.0 1 1.500000 15.2070000000 25.8930000000 31.6470000000 + 2408 3 0.0 -1 1.500000 15.2070000000 25.8930000000 31.6470000000 + 2409 3 0.0 1 1.500000 9.4530000000 25.8930000000 34.1130000000 + 2410 3 0.0 -1 1.500000 9.4530000000 25.8930000000 34.1130000000 + 2411 3 0.0 1 1.500000 9.4530000000 27.5370000000 35.7570000000 + 2412 3 0.0 -1 1.500000 9.4530000000 27.5370000000 35.7570000000 + 2413 3 0.0 1 1.500000 11.0970000000 25.8930000000 35.7570000000 + 2414 3 0.0 -1 1.500000 11.0970000000 25.8930000000 35.7570000000 + 2415 3 0.0 1 1.500000 11.0970000000 27.5370000000 34.1130000000 + 2416 3 0.0 -1 1.500000 11.0970000000 27.5370000000 34.1130000000 + 2417 3 0.0 1 1.500000 13.5630000000 30.0030000000 34.1130000000 + 2418 3 0.0 -1 1.500000 13.5630000000 30.0030000000 34.1130000000 + 2419 3 0.0 1 1.500000 13.5630000000 31.6470000000 35.7570000000 + 2420 3 0.0 -1 1.500000 13.5630000000 31.6470000000 35.7570000000 + 2421 3 0.0 1 1.500000 15.2070000000 30.0030000000 35.7570000000 + 2422 3 0.0 -1 1.500000 15.2070000000 30.0030000000 35.7570000000 + 2423 3 0.0 1 1.500000 15.2070000000 31.6470000000 34.1130000000 + 2424 3 0.0 -1 1.500000 15.2070000000 31.6470000000 34.1130000000 + 2425 3 0.0 1 1.500000 11.0970000000 30.0030000000 39.8670000000 + 2426 3 0.0 -1 1.500000 11.0970000000 30.0030000000 39.8670000000 + 2427 3 0.0 1 1.500000 9.4530000000 30.0030000000 38.2230000000 + 2428 3 0.0 -1 1.500000 9.4530000000 30.0030000000 38.2230000000 + 2429 3 0.0 1 1.500000 9.4530000000 31.6470000000 39.8670000000 + 2430 3 0.0 -1 1.500000 9.4530000000 31.6470000000 39.8670000000 + 2431 3 0.0 1 1.500000 11.0970000000 31.6470000000 38.2230000000 + 2432 3 0.0 -1 1.500000 11.0970000000 31.6470000000 38.2230000000 + 2433 3 0.0 1 1.500000 13.5630000000 27.5370000000 39.8670000000 + 2434 3 0.0 -1 1.500000 13.5630000000 27.5370000000 39.8670000000 + 2435 3 0.0 1 1.500000 13.5630000000 25.8930000000 38.2230000000 + 2436 3 0.0 -1 1.500000 13.5630000000 25.8930000000 38.2230000000 + 2437 3 0.0 1 1.500000 15.2070000000 25.8930000000 39.8670000000 + 2438 3 0.0 -1 1.500000 15.2070000000 25.8930000000 39.8670000000 + 2439 3 0.0 1 1.500000 15.2070000000 27.5370000000 38.2230000000 + 2440 3 0.0 -1 1.500000 15.2070000000 27.5370000000 38.2230000000 + 2441 3 0.0 1 1.500000 9.4530000000 34.1130000000 1.2330000000 + 2442 3 0.0 -1 1.500000 9.4530000000 34.1130000000 1.2330000000 + 2443 3 0.0 1 1.500000 9.4530000000 35.7570000000 2.8770000000 + 2444 3 0.0 -1 1.500000 9.4530000000 35.7570000000 2.8770000000 + 2445 3 0.0 1 1.500000 11.0970000000 34.1130000000 2.8770000000 + 2446 3 0.0 -1 1.500000 11.0970000000 34.1130000000 2.8770000000 + 2447 3 0.0 1 1.500000 11.0970000000 35.7570000000 1.2330000000 + 2448 3 0.0 -1 1.500000 11.0970000000 35.7570000000 1.2330000000 + 2449 3 0.0 1 1.500000 13.5630000000 39.8670000000 2.8770000000 + 2450 3 0.0 -1 1.500000 13.5630000000 39.8670000000 2.8770000000 + 2451 3 0.0 1 1.500000 13.5630000000 38.2230000000 1.2330000000 + 2452 3 0.0 -1 1.500000 13.5630000000 38.2230000000 1.2330000000 + 2453 3 0.0 1 1.500000 15.2070000000 39.8670000000 1.2330000000 + 2454 3 0.0 -1 1.500000 15.2070000000 39.8670000000 1.2330000000 + 2455 3 0.0 1 1.500000 15.2070000000 38.2230000000 2.8770000000 + 2456 3 0.0 -1 1.500000 15.2070000000 38.2230000000 2.8770000000 + 2457 3 0.0 1 1.500000 11.0970000000 39.8670000000 5.3430000000 + 2458 3 0.0 -1 1.500000 11.0970000000 39.8670000000 5.3430000000 + 2459 3 0.0 1 1.500000 9.4530000000 39.8670000000 6.9870000000 + 2460 3 0.0 -1 1.500000 9.4530000000 39.8670000000 6.9870000000 + 2461 3 0.0 1 1.500000 9.4530000000 38.2230000000 5.3430000000 + 2462 3 0.0 -1 1.500000 9.4530000000 38.2230000000 5.3430000000 + 2463 3 0.0 1 1.500000 11.0970000000 38.2230000000 6.9870000000 + 2464 3 0.0 -1 1.500000 11.0970000000 38.2230000000 6.9870000000 + 2465 3 0.0 1 1.500000 13.5630000000 34.1130000000 5.3430000000 + 2466 3 0.0 -1 1.500000 13.5630000000 34.1130000000 5.3430000000 + 2467 3 0.0 1 1.500000 13.5630000000 35.7570000000 6.9870000000 + 2468 3 0.0 -1 1.500000 13.5630000000 35.7570000000 6.9870000000 + 2469 3 0.0 1 1.500000 15.2070000000 35.7570000000 5.3430000000 + 2470 3 0.0 -1 1.500000 15.2070000000 35.7570000000 5.3430000000 + 2471 3 0.0 1 1.500000 15.2070000000 34.1130000000 6.9870000000 + 2472 3 0.0 -1 1.500000 15.2070000000 34.1130000000 6.9870000000 + 2473 3 0.0 1 1.500000 9.4530000000 34.1130000000 9.4530000000 + 2474 3 0.0 -1 1.500000 9.4530000000 34.1130000000 9.4530000000 + 2475 3 0.0 1 1.500000 9.4530000000 35.7570000000 11.0970000000 + 2476 3 0.0 -1 1.500000 9.4530000000 35.7570000000 11.0970000000 + 2477 3 0.0 1 1.500000 11.0970000000 34.1130000000 11.0970000000 + 2478 3 0.0 -1 1.500000 11.0970000000 34.1130000000 11.0970000000 + 2479 3 0.0 1 1.500000 11.0970000000 35.7570000000 9.4530000000 + 2480 3 0.0 -1 1.500000 11.0970000000 35.7570000000 9.4530000000 + 2481 3 0.0 1 1.500000 13.5630000000 39.8670000000 11.0970000000 + 2482 3 0.0 -1 1.500000 13.5630000000 39.8670000000 11.0970000000 + 2483 3 0.0 1 1.500000 13.5630000000 38.2230000000 9.4530000000 + 2484 3 0.0 -1 1.500000 13.5630000000 38.2230000000 9.4530000000 + 2485 3 0.0 1 1.500000 15.2070000000 39.8670000000 9.4530000000 + 2486 3 0.0 -1 1.500000 15.2070000000 39.8670000000 9.4530000000 + 2487 3 0.0 1 1.500000 15.2070000000 38.2230000000 11.0970000000 + 2488 3 0.0 -1 1.500000 15.2070000000 38.2230000000 11.0970000000 + 2489 3 0.0 1 1.500000 11.0970000000 39.8670000000 13.5630000000 + 2490 3 0.0 -1 1.500000 11.0970000000 39.8670000000 13.5630000000 + 2491 3 0.0 1 1.500000 9.4530000000 39.8670000000 15.2070000000 + 2492 3 0.0 -1 1.500000 9.4530000000 39.8670000000 15.2070000000 + 2493 3 0.0 1 1.500000 9.4530000000 38.2230000000 13.5630000000 + 2494 3 0.0 -1 1.500000 9.4530000000 38.2230000000 13.5630000000 + 2495 3 0.0 1 1.500000 11.0970000000 38.2230000000 15.2070000000 + 2496 3 0.0 -1 1.500000 11.0970000000 38.2230000000 15.2070000000 + 2497 3 0.0 1 1.500000 13.5630000000 34.1130000000 13.5630000000 + 2498 3 0.0 -1 1.500000 13.5630000000 34.1130000000 13.5630000000 + 2499 3 0.0 1 1.500000 13.5630000000 35.7570000000 15.2070000000 + 2500 3 0.0 -1 1.500000 13.5630000000 35.7570000000 15.2070000000 + 2501 3 0.0 1 1.500000 15.2070000000 35.7570000000 13.5630000000 + 2502 3 0.0 -1 1.500000 15.2070000000 35.7570000000 13.5630000000 + 2503 3 0.0 1 1.500000 15.2070000000 34.1130000000 15.2070000000 + 2504 3 0.0 -1 1.500000 15.2070000000 34.1130000000 15.2070000000 + 2505 3 0.0 1 1.500000 9.4530000000 34.1130000000 17.6730000000 + 2506 3 0.0 -1 1.500000 9.4530000000 34.1130000000 17.6730000000 + 2507 3 0.0 1 1.500000 9.4530000000 35.7570000000 19.3170000000 + 2508 3 0.0 -1 1.500000 9.4530000000 35.7570000000 19.3170000000 + 2509 3 0.0 1 1.500000 11.0970000000 34.1130000000 19.3170000000 + 2510 3 0.0 -1 1.500000 11.0970000000 34.1130000000 19.3170000000 + 2511 3 0.0 1 1.500000 11.0970000000 35.7570000000 17.6730000000 + 2512 3 0.0 -1 1.500000 11.0970000000 35.7570000000 17.6730000000 + 2513 3 0.0 1 1.500000 13.5630000000 39.8670000000 19.3170000000 + 2514 3 0.0 -1 1.500000 13.5630000000 39.8670000000 19.3170000000 + 2515 3 0.0 1 1.500000 13.5630000000 38.2230000000 17.6730000000 + 2516 3 0.0 -1 1.500000 13.5630000000 38.2230000000 17.6730000000 + 2517 3 0.0 1 1.500000 15.2070000000 39.8670000000 17.6730000000 + 2518 3 0.0 -1 1.500000 15.2070000000 39.8670000000 17.6730000000 + 2519 3 0.0 1 1.500000 15.2070000000 38.2230000000 19.3170000000 + 2520 3 0.0 -1 1.500000 15.2070000000 38.2230000000 19.3170000000 + 2521 3 0.0 1 1.500000 11.0970000000 39.8670000000 21.7830000000 + 2522 3 0.0 -1 1.500000 11.0970000000 39.8670000000 21.7830000000 + 2523 3 0.0 1 1.500000 9.4530000000 39.8670000000 23.4270000000 + 2524 3 0.0 -1 1.500000 9.4530000000 39.8670000000 23.4270000000 + 2525 3 0.0 1 1.500000 9.4530000000 38.2230000000 21.7830000000 + 2526 3 0.0 -1 1.500000 9.4530000000 38.2230000000 21.7830000000 + 2527 3 0.0 1 1.500000 11.0970000000 38.2230000000 23.4270000000 + 2528 3 0.0 -1 1.500000 11.0970000000 38.2230000000 23.4270000000 + 2529 3 0.0 1 1.500000 13.5630000000 34.1130000000 21.7830000000 + 2530 3 0.0 -1 1.500000 13.5630000000 34.1130000000 21.7830000000 + 2531 3 0.0 1 1.500000 13.5630000000 35.7570000000 23.4270000000 + 2532 3 0.0 -1 1.500000 13.5630000000 35.7570000000 23.4270000000 + 2533 3 0.0 1 1.500000 15.2070000000 35.7570000000 21.7830000000 + 2534 3 0.0 -1 1.500000 15.2070000000 35.7570000000 21.7830000000 + 2535 3 0.0 1 1.500000 15.2070000000 34.1130000000 23.4270000000 + 2536 3 0.0 -1 1.500000 15.2070000000 34.1130000000 23.4270000000 + 2537 3 0.0 1 1.500000 9.4530000000 34.1130000000 25.8930000000 + 2538 3 0.0 -1 1.500000 9.4530000000 34.1130000000 25.8930000000 + 2539 3 0.0 1 1.500000 9.4530000000 35.7570000000 27.5370000000 + 2540 3 0.0 -1 1.500000 9.4530000000 35.7570000000 27.5370000000 + 2541 3 0.0 1 1.500000 11.0970000000 34.1130000000 27.5370000000 + 2542 3 0.0 -1 1.500000 11.0970000000 34.1130000000 27.5370000000 + 2543 3 0.0 1 1.500000 11.0970000000 35.7570000000 25.8930000000 + 2544 3 0.0 -1 1.500000 11.0970000000 35.7570000000 25.8930000000 + 2545 3 0.0 1 1.500000 13.5630000000 39.8670000000 27.5370000000 + 2546 3 0.0 -1 1.500000 13.5630000000 39.8670000000 27.5370000000 + 2547 3 0.0 1 1.500000 13.5630000000 38.2230000000 25.8930000000 + 2548 3 0.0 -1 1.500000 13.5630000000 38.2230000000 25.8930000000 + 2549 3 0.0 1 1.500000 15.2070000000 39.8670000000 25.8930000000 + 2550 3 0.0 -1 1.500000 15.2070000000 39.8670000000 25.8930000000 + 2551 3 0.0 1 1.500000 15.2070000000 38.2230000000 27.5370000000 + 2552 3 0.0 -1 1.500000 15.2070000000 38.2230000000 27.5370000000 + 2553 3 0.0 1 1.500000 11.0970000000 39.8670000000 30.0030000000 + 2554 3 0.0 -1 1.500000 11.0970000000 39.8670000000 30.0030000000 + 2555 3 0.0 1 1.500000 9.4530000000 39.8670000000 31.6470000000 + 2556 3 0.0 -1 1.500000 9.4530000000 39.8670000000 31.6470000000 + 2557 3 0.0 1 1.500000 9.4530000000 38.2230000000 30.0030000000 + 2558 3 0.0 -1 1.500000 9.4530000000 38.2230000000 30.0030000000 + 2559 3 0.0 1 1.500000 11.0970000000 38.2230000000 31.6470000000 + 2560 3 0.0 -1 1.500000 11.0970000000 38.2230000000 31.6470000000 + 2561 3 0.0 1 1.500000 13.5630000000 34.1130000000 30.0030000000 + 2562 3 0.0 -1 1.500000 13.5630000000 34.1130000000 30.0030000000 + 2563 3 0.0 1 1.500000 13.5630000000 35.7570000000 31.6470000000 + 2564 3 0.0 -1 1.500000 13.5630000000 35.7570000000 31.6470000000 + 2565 3 0.0 1 1.500000 15.2070000000 35.7570000000 30.0030000000 + 2566 3 0.0 -1 1.500000 15.2070000000 35.7570000000 30.0030000000 + 2567 3 0.0 1 1.500000 15.2070000000 34.1130000000 31.6470000000 + 2568 3 0.0 -1 1.500000 15.2070000000 34.1130000000 31.6470000000 + 2569 3 0.0 1 1.500000 9.4530000000 34.1130000000 34.1130000000 + 2570 3 0.0 -1 1.500000 9.4530000000 34.1130000000 34.1130000000 + 2571 3 0.0 1 1.500000 9.4530000000 35.7570000000 35.7570000000 + 2572 3 0.0 -1 1.500000 9.4530000000 35.7570000000 35.7570000000 + 2573 3 0.0 1 1.500000 11.0970000000 34.1130000000 35.7570000000 + 2574 3 0.0 -1 1.500000 11.0970000000 34.1130000000 35.7570000000 + 2575 3 0.0 1 1.500000 11.0970000000 35.7570000000 34.1130000000 + 2576 3 0.0 -1 1.500000 11.0970000000 35.7570000000 34.1130000000 + 2577 3 0.0 1 1.500000 13.5630000000 39.8670000000 35.7570000000 + 2578 3 0.0 -1 1.500000 13.5630000000 39.8670000000 35.7570000000 + 2579 3 0.0 1 1.500000 13.5630000000 38.2230000000 34.1130000000 + 2580 3 0.0 -1 1.500000 13.5630000000 38.2230000000 34.1130000000 + 2581 3 0.0 1 1.500000 15.2070000000 39.8670000000 34.1130000000 + 2582 3 0.0 -1 1.500000 15.2070000000 39.8670000000 34.1130000000 + 2583 3 0.0 1 1.500000 15.2070000000 38.2230000000 35.7570000000 + 2584 3 0.0 -1 1.500000 15.2070000000 38.2230000000 35.7570000000 + 2585 3 0.0 1 1.500000 9.4530000000 39.8670000000 39.8670000000 + 2586 3 0.0 -1 1.500000 9.4530000000 39.8670000000 39.8670000000 + 2587 3 0.0 1 1.500000 11.0970000000 39.8670000000 38.2230000000 + 2588 3 0.0 -1 1.500000 11.0970000000 39.8670000000 38.2230000000 + 2589 3 0.0 1 1.500000 11.0970000000 38.2230000000 39.8670000000 + 2590 3 0.0 -1 1.500000 11.0970000000 38.2230000000 39.8670000000 + 2591 3 0.0 1 1.500000 9.4530000000 38.2230000000 38.2230000000 + 2592 3 0.0 -1 1.500000 9.4530000000 38.2230000000 38.2230000000 + 2593 3 0.0 1 1.500000 13.5630000000 35.7570000000 39.8670000000 + 2594 3 0.0 -1 1.500000 13.5630000000 35.7570000000 39.8670000000 + 2595 3 0.0 1 1.500000 13.5630000000 34.1130000000 38.2230000000 + 2596 3 0.0 -1 1.500000 13.5630000000 34.1130000000 38.2230000000 + 2597 3 0.0 1 1.500000 15.2070000000 34.1130000000 39.8670000000 + 2598 3 0.0 -1 1.500000 15.2070000000 34.1130000000 39.8670000000 + 2599 3 0.0 1 1.500000 15.2070000000 35.7570000000 38.2230000000 + 2600 3 0.0 -1 1.500000 15.2070000000 35.7570000000 38.2230000000 + 2601 3 0.0 1 1.500000 17.6730000000 1.2330000000 1.2330000000 + 2602 3 0.0 -1 1.500000 17.6730000000 1.2330000000 1.2330000000 + 2603 3 0.0 1 1.500000 17.6730000000 2.8770000000 2.8770000000 + 2604 3 0.0 -1 1.500000 17.6730000000 2.8770000000 2.8770000000 + 2605 3 0.0 1 1.500000 19.3170000000 1.2330000000 2.8770000000 + 2606 3 0.0 -1 1.500000 19.3170000000 1.2330000000 2.8770000000 + 2607 3 0.0 1 1.500000 19.3170000000 2.8770000000 1.2330000000 + 2608 3 0.0 -1 1.500000 19.3170000000 2.8770000000 1.2330000000 + 2609 3 0.0 1 1.500000 21.7830000000 5.3430000000 1.2330000000 + 2610 3 0.0 -1 1.500000 21.7830000000 5.3430000000 1.2330000000 + 2611 3 0.0 1 1.500000 21.7830000000 6.9870000000 2.8770000000 + 2612 3 0.0 -1 1.500000 21.7830000000 6.9870000000 2.8770000000 + 2613 3 0.0 1 1.500000 23.4270000000 5.3430000000 2.8770000000 + 2614 3 0.0 -1 1.500000 23.4270000000 5.3430000000 2.8770000000 + 2615 3 0.0 1 1.500000 23.4270000000 6.9870000000 1.2330000000 + 2616 3 0.0 -1 1.500000 23.4270000000 6.9870000000 1.2330000000 + 2617 3 0.0 1 1.500000 17.6730000000 5.3430000000 5.3430000000 + 2618 3 0.0 -1 1.500000 17.6730000000 5.3430000000 5.3430000000 + 2619 3 0.0 1 1.500000 19.3170000000 5.3430000000 6.9870000000 + 2620 3 0.0 -1 1.500000 19.3170000000 5.3430000000 6.9870000000 + 2621 3 0.0 1 1.500000 19.3170000000 6.9870000000 5.3430000000 + 2622 3 0.0 -1 1.500000 19.3170000000 6.9870000000 5.3430000000 + 2623 3 0.0 1 1.500000 17.6730000000 6.9870000000 6.9870000000 + 2624 3 0.0 -1 1.500000 17.6730000000 6.9870000000 6.9870000000 + 2625 3 0.0 1 1.500000 21.7830000000 1.2330000000 5.3430000000 + 2626 3 0.0 -1 1.500000 21.7830000000 1.2330000000 5.3430000000 + 2627 3 0.0 1 1.500000 21.7830000000 2.8770000000 6.9870000000 + 2628 3 0.0 -1 1.500000 21.7830000000 2.8770000000 6.9870000000 + 2629 3 0.0 1 1.500000 23.4270000000 2.8770000000 5.3430000000 + 2630 3 0.0 -1 1.500000 23.4270000000 2.8770000000 5.3430000000 + 2631 3 0.0 1 1.500000 23.4270000000 1.2330000000 6.9870000000 + 2632 3 0.0 -1 1.500000 23.4270000000 1.2330000000 6.9870000000 + 2633 3 0.0 1 1.500000 17.6730000000 1.2330000000 9.4530000000 + 2634 3 0.0 -1 1.500000 17.6730000000 1.2330000000 9.4530000000 + 2635 3 0.0 1 1.500000 17.6730000000 2.8770000000 11.0970000000 + 2636 3 0.0 -1 1.500000 17.6730000000 2.8770000000 11.0970000000 + 2637 3 0.0 1 1.500000 19.3170000000 1.2330000000 11.0970000000 + 2638 3 0.0 -1 1.500000 19.3170000000 1.2330000000 11.0970000000 + 2639 3 0.0 1 1.500000 19.3170000000 2.8770000000 9.4530000000 + 2640 3 0.0 -1 1.500000 19.3170000000 2.8770000000 9.4530000000 + 2641 3 0.0 1 1.500000 21.7830000000 5.3430000000 9.4530000000 + 2642 3 0.0 -1 1.500000 21.7830000000 5.3430000000 9.4530000000 + 2643 3 0.0 1 1.500000 21.7830000000 6.9870000000 11.0970000000 + 2644 3 0.0 -1 1.500000 21.7830000000 6.9870000000 11.0970000000 + 2645 3 0.0 1 1.500000 23.4270000000 5.3430000000 11.0970000000 + 2646 3 0.0 -1 1.500000 23.4270000000 5.3430000000 11.0970000000 + 2647 3 0.0 1 1.500000 23.4270000000 6.9870000000 9.4530000000 + 2648 3 0.0 -1 1.500000 23.4270000000 6.9870000000 9.4530000000 + 2649 3 0.0 1 1.500000 17.6730000000 5.3430000000 13.5630000000 + 2650 3 0.0 -1 1.500000 17.6730000000 5.3430000000 13.5630000000 + 2651 3 0.0 1 1.500000 19.3170000000 5.3430000000 15.2070000000 + 2652 3 0.0 -1 1.500000 19.3170000000 5.3430000000 15.2070000000 + 2653 3 0.0 1 1.500000 19.3170000000 6.9870000000 13.5630000000 + 2654 3 0.0 -1 1.500000 19.3170000000 6.9870000000 13.5630000000 + 2655 3 0.0 1 1.500000 17.6730000000 6.9870000000 15.2070000000 + 2656 3 0.0 -1 1.500000 17.6730000000 6.9870000000 15.2070000000 + 2657 3 0.0 1 1.500000 21.7830000000 1.2330000000 13.5630000000 + 2658 3 0.0 -1 1.500000 21.7830000000 1.2330000000 13.5630000000 + 2659 3 0.0 1 1.500000 21.7830000000 2.8770000000 15.2070000000 + 2660 3 0.0 -1 1.500000 21.7830000000 2.8770000000 15.2070000000 + 2661 3 0.0 1 1.500000 23.4270000000 2.8770000000 13.5630000000 + 2662 3 0.0 -1 1.500000 23.4270000000 2.8770000000 13.5630000000 + 2663 3 0.0 1 1.500000 23.4270000000 1.2330000000 15.2070000000 + 2664 3 0.0 -1 1.500000 23.4270000000 1.2330000000 15.2070000000 + 2665 3 0.0 1 1.500000 17.6730000000 1.2330000000 17.6730000000 + 2666 3 0.0 -1 1.500000 17.6730000000 1.2330000000 17.6730000000 + 2667 3 0.0 1 1.500000 17.6730000000 2.8770000000 19.3170000000 + 2668 3 0.0 -1 1.500000 17.6730000000 2.8770000000 19.3170000000 + 2669 3 0.0 1 1.500000 19.3170000000 1.2330000000 19.3170000000 + 2670 3 0.0 -1 1.500000 19.3170000000 1.2330000000 19.3170000000 + 2671 3 0.0 1 1.500000 19.3170000000 2.8770000000 17.6730000000 + 2672 3 0.0 -1 1.500000 19.3170000000 2.8770000000 17.6730000000 + 2673 3 0.0 1 1.500000 21.7830000000 5.3430000000 17.6730000000 + 2674 3 0.0 -1 1.500000 21.7830000000 5.3430000000 17.6730000000 + 2675 3 0.0 1 1.500000 21.7830000000 6.9870000000 19.3170000000 + 2676 3 0.0 -1 1.500000 21.7830000000 6.9870000000 19.3170000000 + 2677 3 0.0 1 1.500000 23.4270000000 5.3430000000 19.3170000000 + 2678 3 0.0 -1 1.500000 23.4270000000 5.3430000000 19.3170000000 + 2679 3 0.0 1 1.500000 23.4270000000 6.9870000000 17.6730000000 + 2680 3 0.0 -1 1.500000 23.4270000000 6.9870000000 17.6730000000 + 2681 3 0.0 1 1.500000 17.6730000000 5.3430000000 21.7830000000 + 2682 3 0.0 -1 1.500000 17.6730000000 5.3430000000 21.7830000000 + 2683 3 0.0 1 1.500000 19.3170000000 5.3430000000 23.4270000000 + 2684 3 0.0 -1 1.500000 19.3170000000 5.3430000000 23.4270000000 + 2685 3 0.0 1 1.500000 19.3170000000 6.9870000000 21.7830000000 + 2686 3 0.0 -1 1.500000 19.3170000000 6.9870000000 21.7830000000 + 2687 3 0.0 1 1.500000 17.6730000000 6.9870000000 23.4270000000 + 2688 3 0.0 -1 1.500000 17.6730000000 6.9870000000 23.4270000000 + 2689 3 0.0 1 1.500000 21.7830000000 1.2330000000 21.7830000000 + 2690 3 0.0 -1 1.500000 21.7830000000 1.2330000000 21.7830000000 + 2691 3 0.0 1 1.500000 21.7830000000 2.8770000000 23.4270000000 + 2692 3 0.0 -1 1.500000 21.7830000000 2.8770000000 23.4270000000 + 2693 3 0.0 1 1.500000 23.4270000000 2.8770000000 21.7830000000 + 2694 3 0.0 -1 1.500000 23.4270000000 2.8770000000 21.7830000000 + 2695 3 0.0 1 1.500000 23.4270000000 1.2330000000 23.4270000000 + 2696 3 0.0 -1 1.500000 23.4270000000 1.2330000000 23.4270000000 + 2697 3 0.0 1 1.500000 17.6730000000 1.2330000000 25.8930000000 + 2698 3 0.0 -1 1.500000 17.6730000000 1.2330000000 25.8930000000 + 2699 3 0.0 1 1.500000 17.6730000000 2.8770000000 27.5370000000 + 2700 3 0.0 -1 1.500000 17.6730000000 2.8770000000 27.5370000000 + 2701 3 0.0 1 1.500000 19.3170000000 1.2330000000 27.5370000000 + 2702 3 0.0 -1 1.500000 19.3170000000 1.2330000000 27.5370000000 + 2703 3 0.0 1 1.500000 19.3170000000 2.8770000000 25.8930000000 + 2704 3 0.0 -1 1.500000 19.3170000000 2.8770000000 25.8930000000 + 2705 3 0.0 1 1.500000 21.7830000000 5.3430000000 25.8930000000 + 2706 3 0.0 -1 1.500000 21.7830000000 5.3430000000 25.8930000000 + 2707 3 0.0 1 1.500000 21.7830000000 6.9870000000 27.5370000000 + 2708 3 0.0 -1 1.500000 21.7830000000 6.9870000000 27.5370000000 + 2709 3 0.0 1 1.500000 23.4270000000 5.3430000000 27.5370000000 + 2710 3 0.0 -1 1.500000 23.4270000000 5.3430000000 27.5370000000 + 2711 3 0.0 1 1.500000 23.4270000000 6.9870000000 25.8930000000 + 2712 3 0.0 -1 1.500000 23.4270000000 6.9870000000 25.8930000000 + 2713 3 0.0 1 1.500000 17.6730000000 5.3430000000 30.0030000000 + 2714 3 0.0 -1 1.500000 17.6730000000 5.3430000000 30.0030000000 + 2715 3 0.0 1 1.500000 19.3170000000 5.3430000000 31.6470000000 + 2716 3 0.0 -1 1.500000 19.3170000000 5.3430000000 31.6470000000 + 2717 3 0.0 1 1.500000 19.3170000000 6.9870000000 30.0030000000 + 2718 3 0.0 -1 1.500000 19.3170000000 6.9870000000 30.0030000000 + 2719 3 0.0 1 1.500000 17.6730000000 6.9870000000 31.6470000000 + 2720 3 0.0 -1 1.500000 17.6730000000 6.9870000000 31.6470000000 + 2721 3 0.0 1 1.500000 21.7830000000 1.2330000000 30.0030000000 + 2722 3 0.0 -1 1.500000 21.7830000000 1.2330000000 30.0030000000 + 2723 3 0.0 1 1.500000 21.7830000000 2.8770000000 31.6470000000 + 2724 3 0.0 -1 1.500000 21.7830000000 2.8770000000 31.6470000000 + 2725 3 0.0 1 1.500000 23.4270000000 2.8770000000 30.0030000000 + 2726 3 0.0 -1 1.500000 23.4270000000 2.8770000000 30.0030000000 + 2727 3 0.0 1 1.500000 23.4270000000 1.2330000000 31.6470000000 + 2728 3 0.0 -1 1.500000 23.4270000000 1.2330000000 31.6470000000 + 2729 3 0.0 1 1.500000 17.6730000000 1.2330000000 34.1130000000 + 2730 3 0.0 -1 1.500000 17.6730000000 1.2330000000 34.1130000000 + 2731 3 0.0 1 1.500000 17.6730000000 2.8770000000 35.7570000000 + 2732 3 0.0 -1 1.500000 17.6730000000 2.8770000000 35.7570000000 + 2733 3 0.0 1 1.500000 19.3170000000 1.2330000000 35.7570000000 + 2734 3 0.0 -1 1.500000 19.3170000000 1.2330000000 35.7570000000 + 2735 3 0.0 1 1.500000 19.3170000000 2.8770000000 34.1130000000 + 2736 3 0.0 -1 1.500000 19.3170000000 2.8770000000 34.1130000000 + 2737 3 0.0 1 1.500000 21.7830000000 5.3430000000 34.1130000000 + 2738 3 0.0 -1 1.500000 21.7830000000 5.3430000000 34.1130000000 + 2739 3 0.0 1 1.500000 21.7830000000 6.9870000000 35.7570000000 + 2740 3 0.0 -1 1.500000 21.7830000000 6.9870000000 35.7570000000 + 2741 3 0.0 1 1.500000 23.4270000000 5.3430000000 35.7570000000 + 2742 3 0.0 -1 1.500000 23.4270000000 5.3430000000 35.7570000000 + 2743 3 0.0 1 1.500000 23.4270000000 6.9870000000 34.1130000000 + 2744 3 0.0 -1 1.500000 23.4270000000 6.9870000000 34.1130000000 + 2745 3 0.0 1 1.500000 19.3170000000 5.3430000000 39.8670000000 + 2746 3 0.0 -1 1.500000 19.3170000000 5.3430000000 39.8670000000 + 2747 3 0.0 1 1.500000 17.6730000000 5.3430000000 38.2230000000 + 2748 3 0.0 -1 1.500000 17.6730000000 5.3430000000 38.2230000000 + 2749 3 0.0 1 1.500000 17.6730000000 6.9870000000 39.8670000000 + 2750 3 0.0 -1 1.500000 17.6730000000 6.9870000000 39.8670000000 + 2751 3 0.0 1 1.500000 19.3170000000 6.9870000000 38.2230000000 + 2752 3 0.0 -1 1.500000 19.3170000000 6.9870000000 38.2230000000 + 2753 3 0.0 1 1.500000 21.7830000000 2.8770000000 39.8670000000 + 2754 3 0.0 -1 1.500000 21.7830000000 2.8770000000 39.8670000000 + 2755 3 0.0 1 1.500000 21.7830000000 1.2330000000 38.2230000000 + 2756 3 0.0 -1 1.500000 21.7830000000 1.2330000000 38.2230000000 + 2757 3 0.0 1 1.500000 23.4270000000 1.2330000000 39.8670000000 + 2758 3 0.0 -1 1.500000 23.4270000000 1.2330000000 39.8670000000 + 2759 3 0.0 1 1.500000 23.4270000000 2.8770000000 38.2230000000 + 2760 3 0.0 -1 1.500000 23.4270000000 2.8770000000 38.2230000000 + 2761 3 0.0 1 1.500000 17.6730000000 9.4530000000 1.2330000000 + 2762 3 0.0 -1 1.500000 17.6730000000 9.4530000000 1.2330000000 + 2763 3 0.0 1 1.500000 17.6730000000 11.0970000000 2.8770000000 + 2764 3 0.0 -1 1.500000 17.6730000000 11.0970000000 2.8770000000 + 2765 3 0.0 1 1.500000 19.3170000000 9.4530000000 2.8770000000 + 2766 3 0.0 -1 1.500000 19.3170000000 9.4530000000 2.8770000000 + 2767 3 0.0 1 1.500000 19.3170000000 11.0970000000 1.2330000000 + 2768 3 0.0 -1 1.500000 19.3170000000 11.0970000000 1.2330000000 + 2769 3 0.0 1 1.500000 21.7830000000 13.5630000000 1.2330000000 + 2770 3 0.0 -1 1.500000 21.7830000000 13.5630000000 1.2330000000 + 2771 3 0.0 1 1.500000 21.7830000000 15.2070000000 2.8770000000 + 2772 3 0.0 -1 1.500000 21.7830000000 15.2070000000 2.8770000000 + 2773 3 0.0 1 1.500000 23.4270000000 13.5630000000 2.8770000000 + 2774 3 0.0 -1 1.500000 23.4270000000 13.5630000000 2.8770000000 + 2775 3 0.0 1 1.500000 23.4270000000 15.2070000000 1.2330000000 + 2776 3 0.0 -1 1.500000 23.4270000000 15.2070000000 1.2330000000 + 2777 3 0.0 1 1.500000 17.6730000000 13.5630000000 5.3430000000 + 2778 3 0.0 -1 1.500000 17.6730000000 13.5630000000 5.3430000000 + 2779 3 0.0 1 1.500000 19.3170000000 13.5630000000 6.9870000000 + 2780 3 0.0 -1 1.500000 19.3170000000 13.5630000000 6.9870000000 + 2781 3 0.0 1 1.500000 19.3170000000 15.2070000000 5.3430000000 + 2782 3 0.0 -1 1.500000 19.3170000000 15.2070000000 5.3430000000 + 2783 3 0.0 1 1.500000 17.6730000000 15.2070000000 6.9870000000 + 2784 3 0.0 -1 1.500000 17.6730000000 15.2070000000 6.9870000000 + 2785 3 0.0 1 1.500000 21.7830000000 9.4530000000 5.3430000000 + 2786 3 0.0 -1 1.500000 21.7830000000 9.4530000000 5.3430000000 + 2787 3 0.0 1 1.500000 21.7830000000 11.0970000000 6.9870000000 + 2788 3 0.0 -1 1.500000 21.7830000000 11.0970000000 6.9870000000 + 2789 3 0.0 1 1.500000 23.4270000000 11.0970000000 5.3430000000 + 2790 3 0.0 -1 1.500000 23.4270000000 11.0970000000 5.3430000000 + 2791 3 0.0 1 1.500000 23.4270000000 9.4530000000 6.9870000000 + 2792 3 0.0 -1 1.500000 23.4270000000 9.4530000000 6.9870000000 + 2793 3 0.0 1 1.500000 17.6730000000 9.4530000000 9.4530000000 + 2794 3 0.0 -1 1.500000 17.6730000000 9.4530000000 9.4530000000 + 2795 3 0.0 1 1.500000 17.6730000000 11.0970000000 11.0970000000 + 2796 3 0.0 -1 1.500000 17.6730000000 11.0970000000 11.0970000000 + 2797 3 0.0 1 1.500000 19.3170000000 9.4530000000 11.0970000000 + 2798 3 0.0 -1 1.500000 19.3170000000 9.4530000000 11.0970000000 + 2799 3 0.0 1 1.500000 19.3170000000 11.0970000000 9.4530000000 + 2800 3 0.0 -1 1.500000 19.3170000000 11.0970000000 9.4530000000 + 2801 3 0.0 1 1.500000 21.7830000000 13.5630000000 9.4530000000 + 2802 3 0.0 -1 1.500000 21.7830000000 13.5630000000 9.4530000000 + 2803 3 0.0 1 1.500000 21.7830000000 15.2070000000 11.0970000000 + 2804 3 0.0 -1 1.500000 21.7830000000 15.2070000000 11.0970000000 + 2805 3 0.0 1 1.500000 23.4270000000 13.5630000000 11.0970000000 + 2806 3 0.0 -1 1.500000 23.4270000000 13.5630000000 11.0970000000 + 2807 3 0.0 1 1.500000 23.4270000000 15.2070000000 9.4530000000 + 2808 3 0.0 -1 1.500000 23.4270000000 15.2070000000 9.4530000000 + 2809 3 0.0 1 1.500000 17.6730000000 13.5630000000 13.5630000000 + 2810 3 0.0 -1 1.500000 17.6730000000 13.5630000000 13.5630000000 + 2811 3 0.0 1 1.500000 19.3170000000 13.5630000000 15.2070000000 + 2812 3 0.0 -1 1.500000 19.3170000000 13.5630000000 15.2070000000 + 2813 3 0.0 1 1.500000 19.3170000000 15.2070000000 13.5630000000 + 2814 3 0.0 -1 1.500000 19.3170000000 15.2070000000 13.5630000000 + 2815 3 0.0 1 1.500000 17.6730000000 15.2070000000 15.2070000000 + 2816 3 0.0 -1 1.500000 17.6730000000 15.2070000000 15.2070000000 + 2817 3 0.0 1 1.500000 21.7830000000 9.4530000000 13.5630000000 + 2818 3 0.0 -1 1.500000 21.7830000000 9.4530000000 13.5630000000 + 2819 3 0.0 1 1.500000 21.7830000000 11.0970000000 15.2070000000 + 2820 3 0.0 -1 1.500000 21.7830000000 11.0970000000 15.2070000000 + 2821 3 0.0 1 1.500000 23.4270000000 11.0970000000 13.5630000000 + 2822 3 0.0 -1 1.500000 23.4270000000 11.0970000000 13.5630000000 + 2823 3 0.0 1 1.500000 23.4270000000 9.4530000000 15.2070000000 + 2824 3 0.0 -1 1.500000 23.4270000000 9.4530000000 15.2070000000 + 2825 3 0.0 1 1.500000 17.6730000000 9.4530000000 17.6730000000 + 2826 3 0.0 -1 1.500000 17.6730000000 9.4530000000 17.6730000000 + 2827 3 0.0 1 1.500000 17.6730000000 11.0970000000 19.3170000000 + 2828 3 0.0 -1 1.500000 17.6730000000 11.0970000000 19.3170000000 + 2829 3 0.0 1 1.500000 19.3170000000 9.4530000000 19.3170000000 + 2830 3 0.0 -1 1.500000 19.3170000000 9.4530000000 19.3170000000 + 2831 3 0.0 1 1.500000 19.3170000000 11.0970000000 17.6730000000 + 2832 3 0.0 -1 1.500000 19.3170000000 11.0970000000 17.6730000000 + 2833 3 0.0 1 1.500000 21.7830000000 13.5630000000 17.6730000000 + 2834 3 0.0 -1 1.500000 21.7830000000 13.5630000000 17.6730000000 + 2835 3 0.0 1 1.500000 21.7830000000 15.2070000000 19.3170000000 + 2836 3 0.0 -1 1.500000 21.7830000000 15.2070000000 19.3170000000 + 2837 3 0.0 1 1.500000 23.4270000000 13.5630000000 19.3170000000 + 2838 3 0.0 -1 1.500000 23.4270000000 13.5630000000 19.3170000000 + 2839 3 0.0 1 1.500000 23.4270000000 15.2070000000 17.6730000000 + 2840 3 0.0 -1 1.500000 23.4270000000 15.2070000000 17.6730000000 + 2841 3 0.0 1 1.500000 17.6730000000 13.5630000000 21.7830000000 + 2842 3 0.0 -1 1.500000 17.6730000000 13.5630000000 21.7830000000 + 2843 3 0.0 1 1.500000 19.3170000000 13.5630000000 23.4270000000 + 2844 3 0.0 -1 1.500000 19.3170000000 13.5630000000 23.4270000000 + 2845 3 0.0 1 1.500000 19.3170000000 15.2070000000 21.7830000000 + 2846 3 0.0 -1 1.500000 19.3170000000 15.2070000000 21.7830000000 + 2847 3 0.0 1 1.500000 17.6730000000 15.2070000000 23.4270000000 + 2848 3 0.0 -1 1.500000 17.6730000000 15.2070000000 23.4270000000 + 2849 3 0.0 1 1.500000 21.7830000000 9.4530000000 21.7830000000 + 2850 3 0.0 -1 1.500000 21.7830000000 9.4530000000 21.7830000000 + 2851 3 0.0 1 1.500000 21.7830000000 11.0970000000 23.4270000000 + 2852 3 0.0 -1 1.500000 21.7830000000 11.0970000000 23.4270000000 + 2853 3 0.0 1 1.500000 23.4270000000 11.0970000000 21.7830000000 + 2854 3 0.0 -1 1.500000 23.4270000000 11.0970000000 21.7830000000 + 2855 3 0.0 1 1.500000 23.4270000000 9.4530000000 23.4270000000 + 2856 3 0.0 -1 1.500000 23.4270000000 9.4530000000 23.4270000000 + 2857 3 0.0 1 1.500000 17.6730000000 9.4530000000 25.8930000000 + 2858 3 0.0 -1 1.500000 17.6730000000 9.4530000000 25.8930000000 + 2859 3 0.0 1 1.500000 17.6730000000 11.0970000000 27.5370000000 + 2860 3 0.0 -1 1.500000 17.6730000000 11.0970000000 27.5370000000 + 2861 3 0.0 1 1.500000 19.3170000000 9.4530000000 27.5370000000 + 2862 3 0.0 -1 1.500000 19.3170000000 9.4530000000 27.5370000000 + 2863 3 0.0 1 1.500000 19.3170000000 11.0970000000 25.8930000000 + 2864 3 0.0 -1 1.500000 19.3170000000 11.0970000000 25.8930000000 + 2865 3 0.0 1 1.500000 21.7830000000 13.5630000000 25.8930000000 + 2866 3 0.0 -1 1.500000 21.7830000000 13.5630000000 25.8930000000 + 2867 3 0.0 1 1.500000 21.7830000000 15.2070000000 27.5370000000 + 2868 3 0.0 -1 1.500000 21.7830000000 15.2070000000 27.5370000000 + 2869 3 0.0 1 1.500000 23.4270000000 13.5630000000 27.5370000000 + 2870 3 0.0 -1 1.500000 23.4270000000 13.5630000000 27.5370000000 + 2871 3 0.0 1 1.500000 23.4270000000 15.2070000000 25.8930000000 + 2872 3 0.0 -1 1.500000 23.4270000000 15.2070000000 25.8930000000 + 2873 3 0.0 1 1.500000 17.6730000000 13.5630000000 30.0030000000 + 2874 3 0.0 -1 1.500000 17.6730000000 13.5630000000 30.0030000000 + 2875 3 0.0 1 1.500000 19.3170000000 13.5630000000 31.6470000000 + 2876 3 0.0 -1 1.500000 19.3170000000 13.5630000000 31.6470000000 + 2877 3 0.0 1 1.500000 19.3170000000 15.2070000000 30.0030000000 + 2878 3 0.0 -1 1.500000 19.3170000000 15.2070000000 30.0030000000 + 2879 3 0.0 1 1.500000 17.6730000000 15.2070000000 31.6470000000 + 2880 3 0.0 -1 1.500000 17.6730000000 15.2070000000 31.6470000000 + 2881 3 0.0 1 1.500000 21.7830000000 9.4530000000 30.0030000000 + 2882 3 0.0 -1 1.500000 21.7830000000 9.4530000000 30.0030000000 + 2883 3 0.0 1 1.500000 21.7830000000 11.0970000000 31.6470000000 + 2884 3 0.0 -1 1.500000 21.7830000000 11.0970000000 31.6470000000 + 2885 3 0.0 1 1.500000 23.4270000000 11.0970000000 30.0030000000 + 2886 3 0.0 -1 1.500000 23.4270000000 11.0970000000 30.0030000000 + 2887 3 0.0 1 1.500000 23.4270000000 9.4530000000 31.6470000000 + 2888 3 0.0 -1 1.500000 23.4270000000 9.4530000000 31.6470000000 + 2889 3 0.0 1 1.500000 17.6730000000 9.4530000000 34.1130000000 + 2890 3 0.0 -1 1.500000 17.6730000000 9.4530000000 34.1130000000 + 2891 3 0.0 1 1.500000 17.6730000000 11.0970000000 35.7570000000 + 2892 3 0.0 -1 1.500000 17.6730000000 11.0970000000 35.7570000000 + 2893 3 0.0 1 1.500000 19.3170000000 9.4530000000 35.7570000000 + 2894 3 0.0 -1 1.500000 19.3170000000 9.4530000000 35.7570000000 + 2895 3 0.0 1 1.500000 19.3170000000 11.0970000000 34.1130000000 + 2896 3 0.0 -1 1.500000 19.3170000000 11.0970000000 34.1130000000 + 2897 3 0.0 1 1.500000 21.7830000000 13.5630000000 34.1130000000 + 2898 3 0.0 -1 1.500000 21.7830000000 13.5630000000 34.1130000000 + 2899 3 0.0 1 1.500000 21.7830000000 15.2070000000 35.7570000000 + 2900 3 0.0 -1 1.500000 21.7830000000 15.2070000000 35.7570000000 + 2901 3 0.0 1 1.500000 23.4270000000 13.5630000000 35.7570000000 + 2902 3 0.0 -1 1.500000 23.4270000000 13.5630000000 35.7570000000 + 2903 3 0.0 1 1.500000 23.4270000000 15.2070000000 34.1130000000 + 2904 3 0.0 -1 1.500000 23.4270000000 15.2070000000 34.1130000000 + 2905 3 0.0 1 1.500000 19.3170000000 13.5630000000 39.8670000000 + 2906 3 0.0 -1 1.500000 19.3170000000 13.5630000000 39.8670000000 + 2907 3 0.0 1 1.500000 17.6730000000 13.5630000000 38.2230000000 + 2908 3 0.0 -1 1.500000 17.6730000000 13.5630000000 38.2230000000 + 2909 3 0.0 1 1.500000 17.6730000000 15.2070000000 39.8670000000 + 2910 3 0.0 -1 1.500000 17.6730000000 15.2070000000 39.8670000000 + 2911 3 0.0 1 1.500000 19.3170000000 15.2070000000 38.2230000000 + 2912 3 0.0 -1 1.500000 19.3170000000 15.2070000000 38.2230000000 + 2913 3 0.0 1 1.500000 21.7830000000 11.0970000000 39.8670000000 + 2914 3 0.0 -1 1.500000 21.7830000000 11.0970000000 39.8670000000 + 2915 3 0.0 1 1.500000 21.7830000000 9.4530000000 38.2230000000 + 2916 3 0.0 -1 1.500000 21.7830000000 9.4530000000 38.2230000000 + 2917 3 0.0 1 1.500000 23.4270000000 9.4530000000 39.8670000000 + 2918 3 0.0 -1 1.500000 23.4270000000 9.4530000000 39.8670000000 + 2919 3 0.0 1 1.500000 23.4270000000 11.0970000000 38.2230000000 + 2920 3 0.0 -1 1.500000 23.4270000000 11.0970000000 38.2230000000 + 2921 3 0.0 1 1.500000 17.6730000000 17.6730000000 1.2330000000 + 2922 3 0.0 -1 1.500000 17.6730000000 17.6730000000 1.2330000000 + 2923 3 0.0 1 1.500000 17.6730000000 19.3170000000 2.8770000000 + 2924 3 0.0 -1 1.500000 17.6730000000 19.3170000000 2.8770000000 + 2925 3 0.0 1 1.500000 19.3170000000 17.6730000000 2.8770000000 + 2926 3 0.0 -1 1.500000 19.3170000000 17.6730000000 2.8770000000 + 2927 3 0.0 1 1.500000 19.3170000000 19.3170000000 1.2330000000 + 2928 3 0.0 -1 1.500000 19.3170000000 19.3170000000 1.2330000000 + 2929 3 0.0 1 1.500000 21.7830000000 21.7830000000 1.2330000000 + 2930 3 0.0 -1 1.500000 21.7830000000 21.7830000000 1.2330000000 + 2931 3 0.0 1 1.500000 21.7830000000 23.4270000000 2.8770000000 + 2932 3 0.0 -1 1.500000 21.7830000000 23.4270000000 2.8770000000 + 2933 3 0.0 1 1.500000 23.4270000000 21.7830000000 2.8770000000 + 2934 3 0.0 -1 1.500000 23.4270000000 21.7830000000 2.8770000000 + 2935 3 0.0 1 1.500000 23.4270000000 23.4270000000 1.2330000000 + 2936 3 0.0 -1 1.500000 23.4270000000 23.4270000000 1.2330000000 + 2937 3 0.0 1 1.500000 17.6730000000 21.7830000000 5.3430000000 + 2938 3 0.0 -1 1.500000 17.6730000000 21.7830000000 5.3430000000 + 2939 3 0.0 1 1.500000 19.3170000000 21.7830000000 6.9870000000 + 2940 3 0.0 -1 1.500000 19.3170000000 21.7830000000 6.9870000000 + 2941 3 0.0 1 1.500000 19.3170000000 23.4270000000 5.3430000000 + 2942 3 0.0 -1 1.500000 19.3170000000 23.4270000000 5.3430000000 + 2943 3 0.0 1 1.500000 17.6730000000 23.4270000000 6.9870000000 + 2944 3 0.0 -1 1.500000 17.6730000000 23.4270000000 6.9870000000 + 2945 3 0.0 1 1.500000 21.7830000000 17.6730000000 5.3430000000 + 2946 3 0.0 -1 1.500000 21.7830000000 17.6730000000 5.3430000000 + 2947 3 0.0 1 1.500000 21.7830000000 19.3170000000 6.9870000000 + 2948 3 0.0 -1 1.500000 21.7830000000 19.3170000000 6.9870000000 + 2949 3 0.0 1 1.500000 23.4270000000 19.3170000000 5.3430000000 + 2950 3 0.0 -1 1.500000 23.4270000000 19.3170000000 5.3430000000 + 2951 3 0.0 1 1.500000 23.4270000000 17.6730000000 6.9870000000 + 2952 3 0.0 -1 1.500000 23.4270000000 17.6730000000 6.9870000000 + 2953 3 0.0 1 1.500000 17.6730000000 17.6730000000 9.4530000000 + 2954 3 0.0 -1 1.500000 17.6730000000 17.6730000000 9.4530000000 + 2955 3 0.0 1 1.500000 17.6730000000 19.3170000000 11.0970000000 + 2956 3 0.0 -1 1.500000 17.6730000000 19.3170000000 11.0970000000 + 2957 3 0.0 1 1.500000 19.3170000000 17.6730000000 11.0970000000 + 2958 3 0.0 -1 1.500000 19.3170000000 17.6730000000 11.0970000000 + 2959 3 0.0 1 1.500000 19.3170000000 19.3170000000 9.4530000000 + 2960 3 0.0 -1 1.500000 19.3170000000 19.3170000000 9.4530000000 + 2961 3 0.0 1 1.500000 21.7830000000 21.7830000000 9.4530000000 + 2962 3 0.0 -1 1.500000 21.7830000000 21.7830000000 9.4530000000 + 2963 3 0.0 1 1.500000 21.7830000000 23.4270000000 11.0970000000 + 2964 3 0.0 -1 1.500000 21.7830000000 23.4270000000 11.0970000000 + 2965 3 0.0 1 1.500000 23.4270000000 21.7830000000 11.0970000000 + 2966 3 0.0 -1 1.500000 23.4270000000 21.7830000000 11.0970000000 + 2967 3 0.0 1 1.500000 23.4270000000 23.4270000000 9.4530000000 + 2968 3 0.0 -1 1.500000 23.4270000000 23.4270000000 9.4530000000 + 2969 3 0.0 1 1.500000 17.6730000000 21.7830000000 13.5630000000 + 2970 3 0.0 -1 1.500000 17.6730000000 21.7830000000 13.5630000000 + 2971 3 0.0 1 1.500000 19.3170000000 21.7830000000 15.2070000000 + 2972 3 0.0 -1 1.500000 19.3170000000 21.7830000000 15.2070000000 + 2973 3 0.0 1 1.500000 19.3170000000 23.4270000000 13.5630000000 + 2974 3 0.0 -1 1.500000 19.3170000000 23.4270000000 13.5630000000 + 2975 3 0.0 1 1.500000 17.6730000000 23.4270000000 15.2070000000 + 2976 3 0.0 -1 1.500000 17.6730000000 23.4270000000 15.2070000000 + 2977 3 0.0 1 1.500000 21.7830000000 17.6730000000 13.5630000000 + 2978 3 0.0 -1 1.500000 21.7830000000 17.6730000000 13.5630000000 + 2979 3 0.0 1 1.500000 21.7830000000 19.3170000000 15.2070000000 + 2980 3 0.0 -1 1.500000 21.7830000000 19.3170000000 15.2070000000 + 2981 3 0.0 1 1.500000 23.4270000000 19.3170000000 13.5630000000 + 2982 3 0.0 -1 1.500000 23.4270000000 19.3170000000 13.5630000000 + 2983 3 0.0 1 1.500000 23.4270000000 17.6730000000 15.2070000000 + 2984 3 0.0 -1 1.500000 23.4270000000 17.6730000000 15.2070000000 + 2985 3 0.0 1 1.500000 17.6730000000 17.6730000000 17.6730000000 + 2986 3 0.0 -1 1.500000 17.6730000000 17.6730000000 17.6730000000 + 2987 3 0.0 1 1.500000 17.6730000000 19.3170000000 19.3170000000 + 2988 3 0.0 -1 1.500000 17.6730000000 19.3170000000 19.3170000000 + 2989 3 0.0 1 1.500000 19.3170000000 17.6730000000 19.3170000000 + 2990 3 0.0 -1 1.500000 19.3170000000 17.6730000000 19.3170000000 + 2991 3 0.0 1 1.500000 19.3170000000 19.3170000000 17.6730000000 + 2992 3 0.0 -1 1.500000 19.3170000000 19.3170000000 17.6730000000 + 2993 3 0.0 1 1.500000 21.7830000000 21.7830000000 17.6730000000 + 2994 3 0.0 -1 1.500000 21.7830000000 21.7830000000 17.6730000000 + 2995 3 0.0 1 1.500000 21.7830000000 23.4270000000 19.3170000000 + 2996 3 0.0 -1 1.500000 21.7830000000 23.4270000000 19.3170000000 + 2997 3 0.0 1 1.500000 23.4270000000 21.7830000000 19.3170000000 + 2998 3 0.0 -1 1.500000 23.4270000000 21.7830000000 19.3170000000 + 2999 3 0.0 1 1.500000 23.4270000000 23.4270000000 17.6730000000 + 3000 3 0.0 -1 1.500000 23.4270000000 23.4270000000 17.6730000000 + 3001 3 0.0 1 1.500000 17.6730000000 21.7830000000 21.7830000000 + 3002 3 0.0 -1 1.500000 17.6730000000 21.7830000000 21.7830000000 + 3003 3 0.0 1 1.500000 19.3170000000 21.7830000000 23.4270000000 + 3004 3 0.0 -1 1.500000 19.3170000000 21.7830000000 23.4270000000 + 3005 3 0.0 1 1.500000 19.3170000000 23.4270000000 21.7830000000 + 3006 3 0.0 -1 1.500000 19.3170000000 23.4270000000 21.7830000000 + 3007 3 0.0 1 1.500000 17.6730000000 23.4270000000 23.4270000000 + 3008 3 0.0 -1 1.500000 17.6730000000 23.4270000000 23.4270000000 + 3009 3 0.0 1 1.500000 21.7830000000 17.6730000000 21.7830000000 + 3010 3 0.0 -1 1.500000 21.7830000000 17.6730000000 21.7830000000 + 3011 3 0.0 1 1.500000 21.7830000000 19.3170000000 23.4270000000 + 3012 3 0.0 -1 1.500000 21.7830000000 19.3170000000 23.4270000000 + 3013 3 0.0 1 1.500000 23.4270000000 19.3170000000 21.7830000000 + 3014 3 0.0 -1 1.500000 23.4270000000 19.3170000000 21.7830000000 + 3015 3 0.0 1 1.500000 23.4270000000 17.6730000000 23.4270000000 + 3016 3 0.0 -1 1.500000 23.4270000000 17.6730000000 23.4270000000 + 3017 3 0.0 1 1.500000 17.6730000000 17.6730000000 25.8930000000 + 3018 3 0.0 -1 1.500000 17.6730000000 17.6730000000 25.8930000000 + 3019 3 0.0 1 1.500000 17.6730000000 19.3170000000 27.5370000000 + 3020 3 0.0 -1 1.500000 17.6730000000 19.3170000000 27.5370000000 + 3021 3 0.0 1 1.500000 19.3170000000 17.6730000000 27.5370000000 + 3022 3 0.0 -1 1.500000 19.3170000000 17.6730000000 27.5370000000 + 3023 3 0.0 1 1.500000 19.3170000000 19.3170000000 25.8930000000 + 3024 3 0.0 -1 1.500000 19.3170000000 19.3170000000 25.8930000000 + 3025 3 0.0 1 1.500000 21.7830000000 21.7830000000 25.8930000000 + 3026 3 0.0 -1 1.500000 21.7830000000 21.7830000000 25.8930000000 + 3027 3 0.0 1 1.500000 21.7830000000 23.4270000000 27.5370000000 + 3028 3 0.0 -1 1.500000 21.7830000000 23.4270000000 27.5370000000 + 3029 3 0.0 1 1.500000 23.4270000000 21.7830000000 27.5370000000 + 3030 3 0.0 -1 1.500000 23.4270000000 21.7830000000 27.5370000000 + 3031 3 0.0 1 1.500000 23.4270000000 23.4270000000 25.8930000000 + 3032 3 0.0 -1 1.500000 23.4270000000 23.4270000000 25.8930000000 + 3033 3 0.0 1 1.500000 17.6730000000 21.7830000000 30.0030000000 + 3034 3 0.0 -1 1.500000 17.6730000000 21.7830000000 30.0030000000 + 3035 3 0.0 1 1.500000 19.3170000000 21.7830000000 31.6470000000 + 3036 3 0.0 -1 1.500000 19.3170000000 21.7830000000 31.6470000000 + 3037 3 0.0 1 1.500000 19.3170000000 23.4270000000 30.0030000000 + 3038 3 0.0 -1 1.500000 19.3170000000 23.4270000000 30.0030000000 + 3039 3 0.0 1 1.500000 17.6730000000 23.4270000000 31.6470000000 + 3040 3 0.0 -1 1.500000 17.6730000000 23.4270000000 31.6470000000 + 3041 3 0.0 1 1.500000 21.7830000000 17.6730000000 30.0030000000 + 3042 3 0.0 -1 1.500000 21.7830000000 17.6730000000 30.0030000000 + 3043 3 0.0 1 1.500000 21.7830000000 19.3170000000 31.6470000000 + 3044 3 0.0 -1 1.500000 21.7830000000 19.3170000000 31.6470000000 + 3045 3 0.0 1 1.500000 23.4270000000 19.3170000000 30.0030000000 + 3046 3 0.0 -1 1.500000 23.4270000000 19.3170000000 30.0030000000 + 3047 3 0.0 1 1.500000 23.4270000000 17.6730000000 31.6470000000 + 3048 3 0.0 -1 1.500000 23.4270000000 17.6730000000 31.6470000000 + 3049 3 0.0 1 1.500000 17.6730000000 17.6730000000 34.1130000000 + 3050 3 0.0 -1 1.500000 17.6730000000 17.6730000000 34.1130000000 + 3051 3 0.0 1 1.500000 17.6730000000 19.3170000000 35.7570000000 + 3052 3 0.0 -1 1.500000 17.6730000000 19.3170000000 35.7570000000 + 3053 3 0.0 1 1.500000 19.3170000000 17.6730000000 35.7570000000 + 3054 3 0.0 -1 1.500000 19.3170000000 17.6730000000 35.7570000000 + 3055 3 0.0 1 1.500000 19.3170000000 19.3170000000 34.1130000000 + 3056 3 0.0 -1 1.500000 19.3170000000 19.3170000000 34.1130000000 + 3057 3 0.0 1 1.500000 21.7830000000 21.7830000000 34.1130000000 + 3058 3 0.0 -1 1.500000 21.7830000000 21.7830000000 34.1130000000 + 3059 3 0.0 1 1.500000 21.7830000000 23.4270000000 35.7570000000 + 3060 3 0.0 -1 1.500000 21.7830000000 23.4270000000 35.7570000000 + 3061 3 0.0 1 1.500000 23.4270000000 21.7830000000 35.7570000000 + 3062 3 0.0 -1 1.500000 23.4270000000 21.7830000000 35.7570000000 + 3063 3 0.0 1 1.500000 23.4270000000 23.4270000000 34.1130000000 + 3064 3 0.0 -1 1.500000 23.4270000000 23.4270000000 34.1130000000 + 3065 3 0.0 1 1.500000 19.3170000000 21.7830000000 39.8670000000 + 3066 3 0.0 -1 1.500000 19.3170000000 21.7830000000 39.8670000000 + 3067 3 0.0 1 1.500000 17.6730000000 21.7830000000 38.2230000000 + 3068 3 0.0 -1 1.500000 17.6730000000 21.7830000000 38.2230000000 + 3069 3 0.0 1 1.500000 17.6730000000 23.4270000000 39.8670000000 + 3070 3 0.0 -1 1.500000 17.6730000000 23.4270000000 39.8670000000 + 3071 3 0.0 1 1.500000 19.3170000000 23.4270000000 38.2230000000 + 3072 3 0.0 -1 1.500000 19.3170000000 23.4270000000 38.2230000000 + 3073 3 0.0 1 1.500000 21.7830000000 19.3170000000 39.8670000000 + 3074 3 0.0 -1 1.500000 21.7830000000 19.3170000000 39.8670000000 + 3075 3 0.0 1 1.500000 21.7830000000 17.6730000000 38.2230000000 + 3076 3 0.0 -1 1.500000 21.7830000000 17.6730000000 38.2230000000 + 3077 3 0.0 1 1.500000 23.4270000000 17.6730000000 39.8670000000 + 3078 3 0.0 -1 1.500000 23.4270000000 17.6730000000 39.8670000000 + 3079 3 0.0 1 1.500000 23.4270000000 19.3170000000 38.2230000000 + 3080 3 0.0 -1 1.500000 23.4270000000 19.3170000000 38.2230000000 + 3081 3 0.0 1 1.500000 17.6730000000 25.8930000000 1.2330000000 + 3082 3 0.0 -1 1.500000 17.6730000000 25.8930000000 1.2330000000 + 3083 3 0.0 1 1.500000 17.6730000000 27.5370000000 2.8770000000 + 3084 3 0.0 -1 1.500000 17.6730000000 27.5370000000 2.8770000000 + 3085 3 0.0 1 1.500000 19.3170000000 25.8930000000 2.8770000000 + 3086 3 0.0 -1 1.500000 19.3170000000 25.8930000000 2.8770000000 + 3087 3 0.0 1 1.500000 19.3170000000 27.5370000000 1.2330000000 + 3088 3 0.0 -1 1.500000 19.3170000000 27.5370000000 1.2330000000 + 3089 3 0.0 1 1.500000 21.7830000000 30.0030000000 1.2330000000 + 3090 3 0.0 -1 1.500000 21.7830000000 30.0030000000 1.2330000000 + 3091 3 0.0 1 1.500000 21.7830000000 31.6470000000 2.8770000000 + 3092 3 0.0 -1 1.500000 21.7830000000 31.6470000000 2.8770000000 + 3093 3 0.0 1 1.500000 23.4270000000 30.0030000000 2.8770000000 + 3094 3 0.0 -1 1.500000 23.4270000000 30.0030000000 2.8770000000 + 3095 3 0.0 1 1.500000 23.4270000000 31.6470000000 1.2330000000 + 3096 3 0.0 -1 1.500000 23.4270000000 31.6470000000 1.2330000000 + 3097 3 0.0 1 1.500000 17.6730000000 30.0030000000 5.3430000000 + 3098 3 0.0 -1 1.500000 17.6730000000 30.0030000000 5.3430000000 + 3099 3 0.0 1 1.500000 19.3170000000 30.0030000000 6.9870000000 + 3100 3 0.0 -1 1.500000 19.3170000000 30.0030000000 6.9870000000 + 3101 3 0.0 1 1.500000 19.3170000000 31.6470000000 5.3430000000 + 3102 3 0.0 -1 1.500000 19.3170000000 31.6470000000 5.3430000000 + 3103 3 0.0 1 1.500000 17.6730000000 31.6470000000 6.9870000000 + 3104 3 0.0 -1 1.500000 17.6730000000 31.6470000000 6.9870000000 + 3105 3 0.0 1 1.500000 21.7830000000 25.8930000000 5.3430000000 + 3106 3 0.0 -1 1.500000 21.7830000000 25.8930000000 5.3430000000 + 3107 3 0.0 1 1.500000 21.7830000000 27.5370000000 6.9870000000 + 3108 3 0.0 -1 1.500000 21.7830000000 27.5370000000 6.9870000000 + 3109 3 0.0 1 1.500000 23.4270000000 27.5370000000 5.3430000000 + 3110 3 0.0 -1 1.500000 23.4270000000 27.5370000000 5.3430000000 + 3111 3 0.0 1 1.500000 23.4270000000 25.8930000000 6.9870000000 + 3112 3 0.0 -1 1.500000 23.4270000000 25.8930000000 6.9870000000 + 3113 3 0.0 1 1.500000 17.6730000000 25.8930000000 9.4530000000 + 3114 3 0.0 -1 1.500000 17.6730000000 25.8930000000 9.4530000000 + 3115 3 0.0 1 1.500000 17.6730000000 27.5370000000 11.0970000000 + 3116 3 0.0 -1 1.500000 17.6730000000 27.5370000000 11.0970000000 + 3117 3 0.0 1 1.500000 19.3170000000 25.8930000000 11.0970000000 + 3118 3 0.0 -1 1.500000 19.3170000000 25.8930000000 11.0970000000 + 3119 3 0.0 1 1.500000 19.3170000000 27.5370000000 9.4530000000 + 3120 3 0.0 -1 1.500000 19.3170000000 27.5370000000 9.4530000000 + 3121 3 0.0 1 1.500000 21.7830000000 30.0030000000 9.4530000000 + 3122 3 0.0 -1 1.500000 21.7830000000 30.0030000000 9.4530000000 + 3123 3 0.0 1 1.500000 21.7830000000 31.6470000000 11.0970000000 + 3124 3 0.0 -1 1.500000 21.7830000000 31.6470000000 11.0970000000 + 3125 3 0.0 1 1.500000 23.4270000000 30.0030000000 11.0970000000 + 3126 3 0.0 -1 1.500000 23.4270000000 30.0030000000 11.0970000000 + 3127 3 0.0 1 1.500000 23.4270000000 31.6470000000 9.4530000000 + 3128 3 0.0 -1 1.500000 23.4270000000 31.6470000000 9.4530000000 + 3129 3 0.0 1 1.500000 17.6730000000 30.0030000000 13.5630000000 + 3130 3 0.0 -1 1.500000 17.6730000000 30.0030000000 13.5630000000 + 3131 3 0.0 1 1.500000 19.3170000000 30.0030000000 15.2070000000 + 3132 3 0.0 -1 1.500000 19.3170000000 30.0030000000 15.2070000000 + 3133 3 0.0 1 1.500000 19.3170000000 31.6470000000 13.5630000000 + 3134 3 0.0 -1 1.500000 19.3170000000 31.6470000000 13.5630000000 + 3135 3 0.0 1 1.500000 17.6730000000 31.6470000000 15.2070000000 + 3136 3 0.0 -1 1.500000 17.6730000000 31.6470000000 15.2070000000 + 3137 3 0.0 1 1.500000 21.7830000000 25.8930000000 13.5630000000 + 3138 3 0.0 -1 1.500000 21.7830000000 25.8930000000 13.5630000000 + 3139 3 0.0 1 1.500000 21.7830000000 27.5370000000 15.2070000000 + 3140 3 0.0 -1 1.500000 21.7830000000 27.5370000000 15.2070000000 + 3141 3 0.0 1 1.500000 23.4270000000 27.5370000000 13.5630000000 + 3142 3 0.0 -1 1.500000 23.4270000000 27.5370000000 13.5630000000 + 3143 3 0.0 1 1.500000 23.4270000000 25.8930000000 15.2070000000 + 3144 3 0.0 -1 1.500000 23.4270000000 25.8930000000 15.2070000000 + 3145 3 0.0 1 1.500000 17.6730000000 25.8930000000 17.6730000000 + 3146 3 0.0 -1 1.500000 17.6730000000 25.8930000000 17.6730000000 + 3147 3 0.0 1 1.500000 17.6730000000 27.5370000000 19.3170000000 + 3148 3 0.0 -1 1.500000 17.6730000000 27.5370000000 19.3170000000 + 3149 3 0.0 1 1.500000 19.3170000000 25.8930000000 19.3170000000 + 3150 3 0.0 -1 1.500000 19.3170000000 25.8930000000 19.3170000000 + 3151 3 0.0 1 1.500000 19.3170000000 27.5370000000 17.6730000000 + 3152 3 0.0 -1 1.500000 19.3170000000 27.5370000000 17.6730000000 + 3153 3 0.0 1 1.500000 21.7830000000 30.0030000000 17.6730000000 + 3154 3 0.0 -1 1.500000 21.7830000000 30.0030000000 17.6730000000 + 3155 3 0.0 1 1.500000 21.7830000000 31.6470000000 19.3170000000 + 3156 3 0.0 -1 1.500000 21.7830000000 31.6470000000 19.3170000000 + 3157 3 0.0 1 1.500000 23.4270000000 30.0030000000 19.3170000000 + 3158 3 0.0 -1 1.500000 23.4270000000 30.0030000000 19.3170000000 + 3159 3 0.0 1 1.500000 23.4270000000 31.6470000000 17.6730000000 + 3160 3 0.0 -1 1.500000 23.4270000000 31.6470000000 17.6730000000 + 3161 3 0.0 1 1.500000 17.6730000000 30.0030000000 21.7830000000 + 3162 3 0.0 -1 1.500000 17.6730000000 30.0030000000 21.7830000000 + 3163 3 0.0 1 1.500000 19.3170000000 30.0030000000 23.4270000000 + 3164 3 0.0 -1 1.500000 19.3170000000 30.0030000000 23.4270000000 + 3165 3 0.0 1 1.500000 19.3170000000 31.6470000000 21.7830000000 + 3166 3 0.0 -1 1.500000 19.3170000000 31.6470000000 21.7830000000 + 3167 3 0.0 1 1.500000 17.6730000000 31.6470000000 23.4270000000 + 3168 3 0.0 -1 1.500000 17.6730000000 31.6470000000 23.4270000000 + 3169 3 0.0 1 1.500000 21.7830000000 25.8930000000 21.7830000000 + 3170 3 0.0 -1 1.500000 21.7830000000 25.8930000000 21.7830000000 + 3171 3 0.0 1 1.500000 21.7830000000 27.5370000000 23.4270000000 + 3172 3 0.0 -1 1.500000 21.7830000000 27.5370000000 23.4270000000 + 3173 3 0.0 1 1.500000 23.4270000000 27.5370000000 21.7830000000 + 3174 3 0.0 -1 1.500000 23.4270000000 27.5370000000 21.7830000000 + 3175 3 0.0 1 1.500000 23.4270000000 25.8930000000 23.4270000000 + 3176 3 0.0 -1 1.500000 23.4270000000 25.8930000000 23.4270000000 + 3177 3 0.0 1 1.500000 17.6730000000 25.8930000000 25.8930000000 + 3178 3 0.0 -1 1.500000 17.6730000000 25.8930000000 25.8930000000 + 3179 3 0.0 1 1.500000 17.6730000000 27.5370000000 27.5370000000 + 3180 3 0.0 -1 1.500000 17.6730000000 27.5370000000 27.5370000000 + 3181 3 0.0 1 1.500000 19.3170000000 25.8930000000 27.5370000000 + 3182 3 0.0 -1 1.500000 19.3170000000 25.8930000000 27.5370000000 + 3183 3 0.0 1 1.500000 19.3170000000 27.5370000000 25.8930000000 + 3184 3 0.0 -1 1.500000 19.3170000000 27.5370000000 25.8930000000 + 3185 3 0.0 1 1.500000 21.7830000000 30.0030000000 25.8930000000 + 3186 3 0.0 -1 1.500000 21.7830000000 30.0030000000 25.8930000000 + 3187 3 0.0 1 1.500000 21.7830000000 31.6470000000 27.5370000000 + 3188 3 0.0 -1 1.500000 21.7830000000 31.6470000000 27.5370000000 + 3189 3 0.0 1 1.500000 23.4270000000 30.0030000000 27.5370000000 + 3190 3 0.0 -1 1.500000 23.4270000000 30.0030000000 27.5370000000 + 3191 3 0.0 1 1.500000 23.4270000000 31.6470000000 25.8930000000 + 3192 3 0.0 -1 1.500000 23.4270000000 31.6470000000 25.8930000000 + 3193 3 0.0 1 1.500000 17.6730000000 30.0030000000 30.0030000000 + 3194 3 0.0 -1 1.500000 17.6730000000 30.0030000000 30.0030000000 + 3195 3 0.0 1 1.500000 19.3170000000 30.0030000000 31.6470000000 + 3196 3 0.0 -1 1.500000 19.3170000000 30.0030000000 31.6470000000 + 3197 3 0.0 1 1.500000 19.3170000000 31.6470000000 30.0030000000 + 3198 3 0.0 -1 1.500000 19.3170000000 31.6470000000 30.0030000000 + 3199 3 0.0 1 1.500000 17.6730000000 31.6470000000 31.6470000000 + 3200 3 0.0 -1 1.500000 17.6730000000 31.6470000000 31.6470000000 + 3201 3 0.0 1 1.500000 21.7830000000 25.8930000000 30.0030000000 + 3202 3 0.0 -1 1.500000 21.7830000000 25.8930000000 30.0030000000 + 3203 3 0.0 1 1.500000 21.7830000000 27.5370000000 31.6470000000 + 3204 3 0.0 -1 1.500000 21.7830000000 27.5370000000 31.6470000000 + 3205 3 0.0 1 1.500000 23.4270000000 27.5370000000 30.0030000000 + 3206 3 0.0 -1 1.500000 23.4270000000 27.5370000000 30.0030000000 + 3207 3 0.0 1 1.500000 23.4270000000 25.8930000000 31.6470000000 + 3208 3 0.0 -1 1.500000 23.4270000000 25.8930000000 31.6470000000 + 3209 3 0.0 1 1.500000 17.6730000000 25.8930000000 34.1130000000 + 3210 3 0.0 -1 1.500000 17.6730000000 25.8930000000 34.1130000000 + 3211 3 0.0 1 1.500000 17.6730000000 27.5370000000 35.7570000000 + 3212 3 0.0 -1 1.500000 17.6730000000 27.5370000000 35.7570000000 + 3213 3 0.0 1 1.500000 19.3170000000 25.8930000000 35.7570000000 + 3214 3 0.0 -1 1.500000 19.3170000000 25.8930000000 35.7570000000 + 3215 3 0.0 1 1.500000 19.3170000000 27.5370000000 34.1130000000 + 3216 3 0.0 -1 1.500000 19.3170000000 27.5370000000 34.1130000000 + 3217 3 0.0 1 1.500000 21.7830000000 30.0030000000 34.1130000000 + 3218 3 0.0 -1 1.500000 21.7830000000 30.0030000000 34.1130000000 + 3219 3 0.0 1 1.500000 21.7830000000 31.6470000000 35.7570000000 + 3220 3 0.0 -1 1.500000 21.7830000000 31.6470000000 35.7570000000 + 3221 3 0.0 1 1.500000 23.4270000000 30.0030000000 35.7570000000 + 3222 3 0.0 -1 1.500000 23.4270000000 30.0030000000 35.7570000000 + 3223 3 0.0 1 1.500000 23.4270000000 31.6470000000 34.1130000000 + 3224 3 0.0 -1 1.500000 23.4270000000 31.6470000000 34.1130000000 + 3225 3 0.0 1 1.500000 19.3170000000 30.0030000000 39.8670000000 + 3226 3 0.0 -1 1.500000 19.3170000000 30.0030000000 39.8670000000 + 3227 3 0.0 1 1.500000 17.6730000000 30.0030000000 38.2230000000 + 3228 3 0.0 -1 1.500000 17.6730000000 30.0030000000 38.2230000000 + 3229 3 0.0 1 1.500000 17.6730000000 31.6470000000 39.8670000000 + 3230 3 0.0 -1 1.500000 17.6730000000 31.6470000000 39.8670000000 + 3231 3 0.0 1 1.500000 19.3170000000 31.6470000000 38.2230000000 + 3232 3 0.0 -1 1.500000 19.3170000000 31.6470000000 38.2230000000 + 3233 3 0.0 1 1.500000 21.7830000000 27.5370000000 39.8670000000 + 3234 3 0.0 -1 1.500000 21.7830000000 27.5370000000 39.8670000000 + 3235 3 0.0 1 1.500000 21.7830000000 25.8930000000 38.2230000000 + 3236 3 0.0 -1 1.500000 21.7830000000 25.8930000000 38.2230000000 + 3237 3 0.0 1 1.500000 23.4270000000 25.8930000000 39.8670000000 + 3238 3 0.0 -1 1.500000 23.4270000000 25.8930000000 39.8670000000 + 3239 3 0.0 1 1.500000 23.4270000000 27.5370000000 38.2230000000 + 3240 3 0.0 -1 1.500000 23.4270000000 27.5370000000 38.2230000000 + 3241 3 0.0 1 1.500000 17.6730000000 34.1130000000 1.2330000000 + 3242 3 0.0 -1 1.500000 17.6730000000 34.1130000000 1.2330000000 + 3243 3 0.0 1 1.500000 17.6730000000 35.7570000000 2.8770000000 + 3244 3 0.0 -1 1.500000 17.6730000000 35.7570000000 2.8770000000 + 3245 3 0.0 1 1.500000 19.3170000000 34.1130000000 2.8770000000 + 3246 3 0.0 -1 1.500000 19.3170000000 34.1130000000 2.8770000000 + 3247 3 0.0 1 1.500000 19.3170000000 35.7570000000 1.2330000000 + 3248 3 0.0 -1 1.500000 19.3170000000 35.7570000000 1.2330000000 + 3249 3 0.0 1 1.500000 21.7830000000 39.8670000000 2.8770000000 + 3250 3 0.0 -1 1.500000 21.7830000000 39.8670000000 2.8770000000 + 3251 3 0.0 1 1.500000 21.7830000000 38.2230000000 1.2330000000 + 3252 3 0.0 -1 1.500000 21.7830000000 38.2230000000 1.2330000000 + 3253 3 0.0 1 1.500000 23.4270000000 39.8670000000 1.2330000000 + 3254 3 0.0 -1 1.500000 23.4270000000 39.8670000000 1.2330000000 + 3255 3 0.0 1 1.500000 23.4270000000 38.2230000000 2.8770000000 + 3256 3 0.0 -1 1.500000 23.4270000000 38.2230000000 2.8770000000 + 3257 3 0.0 1 1.500000 19.3170000000 39.8670000000 5.3430000000 + 3258 3 0.0 -1 1.500000 19.3170000000 39.8670000000 5.3430000000 + 3259 3 0.0 1 1.500000 17.6730000000 39.8670000000 6.9870000000 + 3260 3 0.0 -1 1.500000 17.6730000000 39.8670000000 6.9870000000 + 3261 3 0.0 1 1.500000 17.6730000000 38.2230000000 5.3430000000 + 3262 3 0.0 -1 1.500000 17.6730000000 38.2230000000 5.3430000000 + 3263 3 0.0 1 1.500000 19.3170000000 38.2230000000 6.9870000000 + 3264 3 0.0 -1 1.500000 19.3170000000 38.2230000000 6.9870000000 + 3265 3 0.0 1 1.500000 21.7830000000 34.1130000000 5.3430000000 + 3266 3 0.0 -1 1.500000 21.7830000000 34.1130000000 5.3430000000 + 3267 3 0.0 1 1.500000 21.7830000000 35.7570000000 6.9870000000 + 3268 3 0.0 -1 1.500000 21.7830000000 35.7570000000 6.9870000000 + 3269 3 0.0 1 1.500000 23.4270000000 35.7570000000 5.3430000000 + 3270 3 0.0 -1 1.500000 23.4270000000 35.7570000000 5.3430000000 + 3271 3 0.0 1 1.500000 23.4270000000 34.1130000000 6.9870000000 + 3272 3 0.0 -1 1.500000 23.4270000000 34.1130000000 6.9870000000 + 3273 3 0.0 1 1.500000 17.6730000000 34.1130000000 9.4530000000 + 3274 3 0.0 -1 1.500000 17.6730000000 34.1130000000 9.4530000000 + 3275 3 0.0 1 1.500000 17.6730000000 35.7570000000 11.0970000000 + 3276 3 0.0 -1 1.500000 17.6730000000 35.7570000000 11.0970000000 + 3277 3 0.0 1 1.500000 19.3170000000 34.1130000000 11.0970000000 + 3278 3 0.0 -1 1.500000 19.3170000000 34.1130000000 11.0970000000 + 3279 3 0.0 1 1.500000 19.3170000000 35.7570000000 9.4530000000 + 3280 3 0.0 -1 1.500000 19.3170000000 35.7570000000 9.4530000000 + 3281 3 0.0 1 1.500000 21.7830000000 39.8670000000 11.0970000000 + 3282 3 0.0 -1 1.500000 21.7830000000 39.8670000000 11.0970000000 + 3283 3 0.0 1 1.500000 21.7830000000 38.2230000000 9.4530000000 + 3284 3 0.0 -1 1.500000 21.7830000000 38.2230000000 9.4530000000 + 3285 3 0.0 1 1.500000 23.4270000000 39.8670000000 9.4530000000 + 3286 3 0.0 -1 1.500000 23.4270000000 39.8670000000 9.4530000000 + 3287 3 0.0 1 1.500000 23.4270000000 38.2230000000 11.0970000000 + 3288 3 0.0 -1 1.500000 23.4270000000 38.2230000000 11.0970000000 + 3289 3 0.0 1 1.500000 19.3170000000 39.8670000000 13.5630000000 + 3290 3 0.0 -1 1.500000 19.3170000000 39.8670000000 13.5630000000 + 3291 3 0.0 1 1.500000 17.6730000000 39.8670000000 15.2070000000 + 3292 3 0.0 -1 1.500000 17.6730000000 39.8670000000 15.2070000000 + 3293 3 0.0 1 1.500000 17.6730000000 38.2230000000 13.5630000000 + 3294 3 0.0 -1 1.500000 17.6730000000 38.2230000000 13.5630000000 + 3295 3 0.0 1 1.500000 19.3170000000 38.2230000000 15.2070000000 + 3296 3 0.0 -1 1.500000 19.3170000000 38.2230000000 15.2070000000 + 3297 3 0.0 1 1.500000 21.7830000000 34.1130000000 13.5630000000 + 3298 3 0.0 -1 1.500000 21.7830000000 34.1130000000 13.5630000000 + 3299 3 0.0 1 1.500000 21.7830000000 35.7570000000 15.2070000000 + 3300 3 0.0 -1 1.500000 21.7830000000 35.7570000000 15.2070000000 + 3301 3 0.0 1 1.500000 23.4270000000 35.7570000000 13.5630000000 + 3302 3 0.0 -1 1.500000 23.4270000000 35.7570000000 13.5630000000 + 3303 3 0.0 1 1.500000 23.4270000000 34.1130000000 15.2070000000 + 3304 3 0.0 -1 1.500000 23.4270000000 34.1130000000 15.2070000000 + 3305 3 0.0 1 1.500000 17.6730000000 34.1130000000 17.6730000000 + 3306 3 0.0 -1 1.500000 17.6730000000 34.1130000000 17.6730000000 + 3307 3 0.0 1 1.500000 17.6730000000 35.7570000000 19.3170000000 + 3308 3 0.0 -1 1.500000 17.6730000000 35.7570000000 19.3170000000 + 3309 3 0.0 1 1.500000 19.3170000000 34.1130000000 19.3170000000 + 3310 3 0.0 -1 1.500000 19.3170000000 34.1130000000 19.3170000000 + 3311 3 0.0 1 1.500000 19.3170000000 35.7570000000 17.6730000000 + 3312 3 0.0 -1 1.500000 19.3170000000 35.7570000000 17.6730000000 + 3313 3 0.0 1 1.500000 21.7830000000 39.8670000000 19.3170000000 + 3314 3 0.0 -1 1.500000 21.7830000000 39.8670000000 19.3170000000 + 3315 3 0.0 1 1.500000 21.7830000000 38.2230000000 17.6730000000 + 3316 3 0.0 -1 1.500000 21.7830000000 38.2230000000 17.6730000000 + 3317 3 0.0 1 1.500000 23.4270000000 39.8670000000 17.6730000000 + 3318 3 0.0 -1 1.500000 23.4270000000 39.8670000000 17.6730000000 + 3319 3 0.0 1 1.500000 23.4270000000 38.2230000000 19.3170000000 + 3320 3 0.0 -1 1.500000 23.4270000000 38.2230000000 19.3170000000 + 3321 3 0.0 1 1.500000 19.3170000000 39.8670000000 21.7830000000 + 3322 3 0.0 -1 1.500000 19.3170000000 39.8670000000 21.7830000000 + 3323 3 0.0 1 1.500000 17.6730000000 39.8670000000 23.4270000000 + 3324 3 0.0 -1 1.500000 17.6730000000 39.8670000000 23.4270000000 + 3325 3 0.0 1 1.500000 17.6730000000 38.2230000000 21.7830000000 + 3326 3 0.0 -1 1.500000 17.6730000000 38.2230000000 21.7830000000 + 3327 3 0.0 1 1.500000 19.3170000000 38.2230000000 23.4270000000 + 3328 3 0.0 -1 1.500000 19.3170000000 38.2230000000 23.4270000000 + 3329 3 0.0 1 1.500000 21.7830000000 34.1130000000 21.7830000000 + 3330 3 0.0 -1 1.500000 21.7830000000 34.1130000000 21.7830000000 + 3331 3 0.0 1 1.500000 21.7830000000 35.7570000000 23.4270000000 + 3332 3 0.0 -1 1.500000 21.7830000000 35.7570000000 23.4270000000 + 3333 3 0.0 1 1.500000 23.4270000000 35.7570000000 21.7830000000 + 3334 3 0.0 -1 1.500000 23.4270000000 35.7570000000 21.7830000000 + 3335 3 0.0 1 1.500000 23.4270000000 34.1130000000 23.4270000000 + 3336 3 0.0 -1 1.500000 23.4270000000 34.1130000000 23.4270000000 + 3337 3 0.0 1 1.500000 17.6730000000 34.1130000000 25.8930000000 + 3338 3 0.0 -1 1.500000 17.6730000000 34.1130000000 25.8930000000 + 3339 3 0.0 1 1.500000 17.6730000000 35.7570000000 27.5370000000 + 3340 3 0.0 -1 1.500000 17.6730000000 35.7570000000 27.5370000000 + 3341 3 0.0 1 1.500000 19.3170000000 34.1130000000 27.5370000000 + 3342 3 0.0 -1 1.500000 19.3170000000 34.1130000000 27.5370000000 + 3343 3 0.0 1 1.500000 19.3170000000 35.7570000000 25.8930000000 + 3344 3 0.0 -1 1.500000 19.3170000000 35.7570000000 25.8930000000 + 3345 3 0.0 1 1.500000 21.7830000000 39.8670000000 27.5370000000 + 3346 3 0.0 -1 1.500000 21.7830000000 39.8670000000 27.5370000000 + 3347 3 0.0 1 1.500000 21.7830000000 38.2230000000 25.8930000000 + 3348 3 0.0 -1 1.500000 21.7830000000 38.2230000000 25.8930000000 + 3349 3 0.0 1 1.500000 23.4270000000 39.8670000000 25.8930000000 + 3350 3 0.0 -1 1.500000 23.4270000000 39.8670000000 25.8930000000 + 3351 3 0.0 1 1.500000 23.4270000000 38.2230000000 27.5370000000 + 3352 3 0.0 -1 1.500000 23.4270000000 38.2230000000 27.5370000000 + 3353 3 0.0 1 1.500000 19.3170000000 39.8670000000 30.0030000000 + 3354 3 0.0 -1 1.500000 19.3170000000 39.8670000000 30.0030000000 + 3355 3 0.0 1 1.500000 17.6730000000 39.8670000000 31.6470000000 + 3356 3 0.0 -1 1.500000 17.6730000000 39.8670000000 31.6470000000 + 3357 3 0.0 1 1.500000 17.6730000000 38.2230000000 30.0030000000 + 3358 3 0.0 -1 1.500000 17.6730000000 38.2230000000 30.0030000000 + 3359 3 0.0 1 1.500000 19.3170000000 38.2230000000 31.6470000000 + 3360 3 0.0 -1 1.500000 19.3170000000 38.2230000000 31.6470000000 + 3361 3 0.0 1 1.500000 21.7830000000 34.1130000000 30.0030000000 + 3362 3 0.0 -1 1.500000 21.7830000000 34.1130000000 30.0030000000 + 3363 3 0.0 1 1.500000 21.7830000000 35.7570000000 31.6470000000 + 3364 3 0.0 -1 1.500000 21.7830000000 35.7570000000 31.6470000000 + 3365 3 0.0 1 1.500000 23.4270000000 35.7570000000 30.0030000000 + 3366 3 0.0 -1 1.500000 23.4270000000 35.7570000000 30.0030000000 + 3367 3 0.0 1 1.500000 23.4270000000 34.1130000000 31.6470000000 + 3368 3 0.0 -1 1.500000 23.4270000000 34.1130000000 31.6470000000 + 3369 3 0.0 1 1.500000 17.6730000000 34.1130000000 34.1130000000 + 3370 3 0.0 -1 1.500000 17.6730000000 34.1130000000 34.1130000000 + 3371 3 0.0 1 1.500000 17.6730000000 35.7570000000 35.7570000000 + 3372 3 0.0 -1 1.500000 17.6730000000 35.7570000000 35.7570000000 + 3373 3 0.0 1 1.500000 19.3170000000 34.1130000000 35.7570000000 + 3374 3 0.0 -1 1.500000 19.3170000000 34.1130000000 35.7570000000 + 3375 3 0.0 1 1.500000 19.3170000000 35.7570000000 34.1130000000 + 3376 3 0.0 -1 1.500000 19.3170000000 35.7570000000 34.1130000000 + 3377 3 0.0 1 1.500000 21.7830000000 39.8670000000 35.7570000000 + 3378 3 0.0 -1 1.500000 21.7830000000 39.8670000000 35.7570000000 + 3379 3 0.0 1 1.500000 21.7830000000 38.2230000000 34.1130000000 + 3380 3 0.0 -1 1.500000 21.7830000000 38.2230000000 34.1130000000 + 3381 3 0.0 1 1.500000 23.4270000000 39.8670000000 34.1130000000 + 3382 3 0.0 -1 1.500000 23.4270000000 39.8670000000 34.1130000000 + 3383 3 0.0 1 1.500000 23.4270000000 38.2230000000 35.7570000000 + 3384 3 0.0 -1 1.500000 23.4270000000 38.2230000000 35.7570000000 + 3385 3 0.0 1 1.500000 17.6730000000 39.8670000000 39.8670000000 + 3386 3 0.0 -1 1.500000 17.6730000000 39.8670000000 39.8670000000 + 3387 3 0.0 1 1.500000 19.3170000000 39.8670000000 38.2230000000 + 3388 3 0.0 -1 1.500000 19.3170000000 39.8670000000 38.2230000000 + 3389 3 0.0 1 1.500000 19.3170000000 38.2230000000 39.8670000000 + 3390 3 0.0 -1 1.500000 19.3170000000 38.2230000000 39.8670000000 + 3391 3 0.0 1 1.500000 17.6730000000 38.2230000000 38.2230000000 + 3392 3 0.0 -1 1.500000 17.6730000000 38.2230000000 38.2230000000 + 3393 3 0.0 1 1.500000 21.7830000000 35.7570000000 39.8670000000 + 3394 3 0.0 -1 1.500000 21.7830000000 35.7570000000 39.8670000000 + 3395 3 0.0 1 1.500000 21.7830000000 34.1130000000 38.2230000000 + 3396 3 0.0 -1 1.500000 21.7830000000 34.1130000000 38.2230000000 + 3397 3 0.0 1 1.500000 23.4270000000 34.1130000000 39.8670000000 + 3398 3 0.0 -1 1.500000 23.4270000000 34.1130000000 39.8670000000 + 3399 3 0.0 1 1.500000 23.4270000000 35.7570000000 38.2230000000 + 3400 3 0.0 -1 1.500000 23.4270000000 35.7570000000 38.2230000000 + 3401 3 0.0 1 1.500000 25.8930000000 1.2330000000 1.2330000000 + 3402 3 0.0 -1 1.500000 25.8930000000 1.2330000000 1.2330000000 + 3403 3 0.0 1 1.500000 25.8930000000 2.8770000000 2.8770000000 + 3404 3 0.0 -1 1.500000 25.8930000000 2.8770000000 2.8770000000 + 3405 3 0.0 1 1.500000 27.5370000000 1.2330000000 2.8770000000 + 3406 3 0.0 -1 1.500000 27.5370000000 1.2330000000 2.8770000000 + 3407 3 0.0 1 1.500000 27.5370000000 2.8770000000 1.2330000000 + 3408 3 0.0 -1 1.500000 27.5370000000 2.8770000000 1.2330000000 + 3409 3 0.0 1 1.500000 30.0030000000 5.3430000000 1.2330000000 + 3410 3 0.0 -1 1.500000 30.0030000000 5.3430000000 1.2330000000 + 3411 3 0.0 1 1.500000 30.0030000000 6.9870000000 2.8770000000 + 3412 3 0.0 -1 1.500000 30.0030000000 6.9870000000 2.8770000000 + 3413 3 0.0 1 1.500000 31.6470000000 5.3430000000 2.8770000000 + 3414 3 0.0 -1 1.500000 31.6470000000 5.3430000000 2.8770000000 + 3415 3 0.0 1 1.500000 31.6470000000 6.9870000000 1.2330000000 + 3416 3 0.0 -1 1.500000 31.6470000000 6.9870000000 1.2330000000 + 3417 3 0.0 1 1.500000 25.8930000000 5.3430000000 5.3430000000 + 3418 3 0.0 -1 1.500000 25.8930000000 5.3430000000 5.3430000000 + 3419 3 0.0 1 1.500000 27.5370000000 5.3430000000 6.9870000000 + 3420 3 0.0 -1 1.500000 27.5370000000 5.3430000000 6.9870000000 + 3421 3 0.0 1 1.500000 27.5370000000 6.9870000000 5.3430000000 + 3422 3 0.0 -1 1.500000 27.5370000000 6.9870000000 5.3430000000 + 3423 3 0.0 1 1.500000 25.8930000000 6.9870000000 6.9870000000 + 3424 3 0.0 -1 1.500000 25.8930000000 6.9870000000 6.9870000000 + 3425 3 0.0 1 1.500000 30.0030000000 1.2330000000 5.3430000000 + 3426 3 0.0 -1 1.500000 30.0030000000 1.2330000000 5.3430000000 + 3427 3 0.0 1 1.500000 30.0030000000 2.8770000000 6.9870000000 + 3428 3 0.0 -1 1.500000 30.0030000000 2.8770000000 6.9870000000 + 3429 3 0.0 1 1.500000 31.6470000000 2.8770000000 5.3430000000 + 3430 3 0.0 -1 1.500000 31.6470000000 2.8770000000 5.3430000000 + 3431 3 0.0 1 1.500000 31.6470000000 1.2330000000 6.9870000000 + 3432 3 0.0 -1 1.500000 31.6470000000 1.2330000000 6.9870000000 + 3433 3 0.0 1 1.500000 25.8930000000 1.2330000000 9.4530000000 + 3434 3 0.0 -1 1.500000 25.8930000000 1.2330000000 9.4530000000 + 3435 3 0.0 1 1.500000 25.8930000000 2.8770000000 11.0970000000 + 3436 3 0.0 -1 1.500000 25.8930000000 2.8770000000 11.0970000000 + 3437 3 0.0 1 1.500000 27.5370000000 1.2330000000 11.0970000000 + 3438 3 0.0 -1 1.500000 27.5370000000 1.2330000000 11.0970000000 + 3439 3 0.0 1 1.500000 27.5370000000 2.8770000000 9.4530000000 + 3440 3 0.0 -1 1.500000 27.5370000000 2.8770000000 9.4530000000 + 3441 3 0.0 1 1.500000 30.0030000000 5.3430000000 9.4530000000 + 3442 3 0.0 -1 1.500000 30.0030000000 5.3430000000 9.4530000000 + 3443 3 0.0 1 1.500000 30.0030000000 6.9870000000 11.0970000000 + 3444 3 0.0 -1 1.500000 30.0030000000 6.9870000000 11.0970000000 + 3445 3 0.0 1 1.500000 31.6470000000 5.3430000000 11.0970000000 + 3446 3 0.0 -1 1.500000 31.6470000000 5.3430000000 11.0970000000 + 3447 3 0.0 1 1.500000 31.6470000000 6.9870000000 9.4530000000 + 3448 3 0.0 -1 1.500000 31.6470000000 6.9870000000 9.4530000000 + 3449 3 0.0 1 1.500000 25.8930000000 5.3430000000 13.5630000000 + 3450 3 0.0 -1 1.500000 25.8930000000 5.3430000000 13.5630000000 + 3451 3 0.0 1 1.500000 27.5370000000 5.3430000000 15.2070000000 + 3452 3 0.0 -1 1.500000 27.5370000000 5.3430000000 15.2070000000 + 3453 3 0.0 1 1.500000 27.5370000000 6.9870000000 13.5630000000 + 3454 3 0.0 -1 1.500000 27.5370000000 6.9870000000 13.5630000000 + 3455 3 0.0 1 1.500000 25.8930000000 6.9870000000 15.2070000000 + 3456 3 0.0 -1 1.500000 25.8930000000 6.9870000000 15.2070000000 + 3457 3 0.0 1 1.500000 30.0030000000 1.2330000000 13.5630000000 + 3458 3 0.0 -1 1.500000 30.0030000000 1.2330000000 13.5630000000 + 3459 3 0.0 1 1.500000 30.0030000000 2.8770000000 15.2070000000 + 3460 3 0.0 -1 1.500000 30.0030000000 2.8770000000 15.2070000000 + 3461 3 0.0 1 1.500000 31.6470000000 2.8770000000 13.5630000000 + 3462 3 0.0 -1 1.500000 31.6470000000 2.8770000000 13.5630000000 + 3463 3 0.0 1 1.500000 31.6470000000 1.2330000000 15.2070000000 + 3464 3 0.0 -1 1.500000 31.6470000000 1.2330000000 15.2070000000 + 3465 3 0.0 1 1.500000 25.8930000000 1.2330000000 17.6730000000 + 3466 3 0.0 -1 1.500000 25.8930000000 1.2330000000 17.6730000000 + 3467 3 0.0 1 1.500000 25.8930000000 2.8770000000 19.3170000000 + 3468 3 0.0 -1 1.500000 25.8930000000 2.8770000000 19.3170000000 + 3469 3 0.0 1 1.500000 27.5370000000 1.2330000000 19.3170000000 + 3470 3 0.0 -1 1.500000 27.5370000000 1.2330000000 19.3170000000 + 3471 3 0.0 1 1.500000 27.5370000000 2.8770000000 17.6730000000 + 3472 3 0.0 -1 1.500000 27.5370000000 2.8770000000 17.6730000000 + 3473 3 0.0 1 1.500000 30.0030000000 5.3430000000 17.6730000000 + 3474 3 0.0 -1 1.500000 30.0030000000 5.3430000000 17.6730000000 + 3475 3 0.0 1 1.500000 30.0030000000 6.9870000000 19.3170000000 + 3476 3 0.0 -1 1.500000 30.0030000000 6.9870000000 19.3170000000 + 3477 3 0.0 1 1.500000 31.6470000000 5.3430000000 19.3170000000 + 3478 3 0.0 -1 1.500000 31.6470000000 5.3430000000 19.3170000000 + 3479 3 0.0 1 1.500000 31.6470000000 6.9870000000 17.6730000000 + 3480 3 0.0 -1 1.500000 31.6470000000 6.9870000000 17.6730000000 + 3481 3 0.0 1 1.500000 25.8930000000 5.3430000000 21.7830000000 + 3482 3 0.0 -1 1.500000 25.8930000000 5.3430000000 21.7830000000 + 3483 3 0.0 1 1.500000 27.5370000000 5.3430000000 23.4270000000 + 3484 3 0.0 -1 1.500000 27.5370000000 5.3430000000 23.4270000000 + 3485 3 0.0 1 1.500000 27.5370000000 6.9870000000 21.7830000000 + 3486 3 0.0 -1 1.500000 27.5370000000 6.9870000000 21.7830000000 + 3487 3 0.0 1 1.500000 25.8930000000 6.9870000000 23.4270000000 + 3488 3 0.0 -1 1.500000 25.8930000000 6.9870000000 23.4270000000 + 3489 3 0.0 1 1.500000 30.0030000000 1.2330000000 21.7830000000 + 3490 3 0.0 -1 1.500000 30.0030000000 1.2330000000 21.7830000000 + 3491 3 0.0 1 1.500000 30.0030000000 2.8770000000 23.4270000000 + 3492 3 0.0 -1 1.500000 30.0030000000 2.8770000000 23.4270000000 + 3493 3 0.0 1 1.500000 31.6470000000 2.8770000000 21.7830000000 + 3494 3 0.0 -1 1.500000 31.6470000000 2.8770000000 21.7830000000 + 3495 3 0.0 1 1.500000 31.6470000000 1.2330000000 23.4270000000 + 3496 3 0.0 -1 1.500000 31.6470000000 1.2330000000 23.4270000000 + 3497 3 0.0 1 1.500000 25.8930000000 1.2330000000 25.8930000000 + 3498 3 0.0 -1 1.500000 25.8930000000 1.2330000000 25.8930000000 + 3499 3 0.0 1 1.500000 25.8930000000 2.8770000000 27.5370000000 + 3500 3 0.0 -1 1.500000 25.8930000000 2.8770000000 27.5370000000 + 3501 3 0.0 1 1.500000 27.5370000000 1.2330000000 27.5370000000 + 3502 3 0.0 -1 1.500000 27.5370000000 1.2330000000 27.5370000000 + 3503 3 0.0 1 1.500000 27.5370000000 2.8770000000 25.8930000000 + 3504 3 0.0 -1 1.500000 27.5370000000 2.8770000000 25.8930000000 + 3505 3 0.0 1 1.500000 30.0030000000 5.3430000000 25.8930000000 + 3506 3 0.0 -1 1.500000 30.0030000000 5.3430000000 25.8930000000 + 3507 3 0.0 1 1.500000 30.0030000000 6.9870000000 27.5370000000 + 3508 3 0.0 -1 1.500000 30.0030000000 6.9870000000 27.5370000000 + 3509 3 0.0 1 1.500000 31.6470000000 5.3430000000 27.5370000000 + 3510 3 0.0 -1 1.500000 31.6470000000 5.3430000000 27.5370000000 + 3511 3 0.0 1 1.500000 31.6470000000 6.9870000000 25.8930000000 + 3512 3 0.0 -1 1.500000 31.6470000000 6.9870000000 25.8930000000 + 3513 3 0.0 1 1.500000 25.8930000000 5.3430000000 30.0030000000 + 3514 3 0.0 -1 1.500000 25.8930000000 5.3430000000 30.0030000000 + 3515 3 0.0 1 1.500000 27.5370000000 5.3430000000 31.6470000000 + 3516 3 0.0 -1 1.500000 27.5370000000 5.3430000000 31.6470000000 + 3517 3 0.0 1 1.500000 27.5370000000 6.9870000000 30.0030000000 + 3518 3 0.0 -1 1.500000 27.5370000000 6.9870000000 30.0030000000 + 3519 3 0.0 1 1.500000 25.8930000000 6.9870000000 31.6470000000 + 3520 3 0.0 -1 1.500000 25.8930000000 6.9870000000 31.6470000000 + 3521 3 0.0 1 1.500000 30.0030000000 1.2330000000 30.0030000000 + 3522 3 0.0 -1 1.500000 30.0030000000 1.2330000000 30.0030000000 + 3523 3 0.0 1 1.500000 30.0030000000 2.8770000000 31.6470000000 + 3524 3 0.0 -1 1.500000 30.0030000000 2.8770000000 31.6470000000 + 3525 3 0.0 1 1.500000 31.6470000000 2.8770000000 30.0030000000 + 3526 3 0.0 -1 1.500000 31.6470000000 2.8770000000 30.0030000000 + 3527 3 0.0 1 1.500000 31.6470000000 1.2330000000 31.6470000000 + 3528 3 0.0 -1 1.500000 31.6470000000 1.2330000000 31.6470000000 + 3529 3 0.0 1 1.500000 25.8930000000 1.2330000000 34.1130000000 + 3530 3 0.0 -1 1.500000 25.8930000000 1.2330000000 34.1130000000 + 3531 3 0.0 1 1.500000 25.8930000000 2.8770000000 35.7570000000 + 3532 3 0.0 -1 1.500000 25.8930000000 2.8770000000 35.7570000000 + 3533 3 0.0 1 1.500000 27.5370000000 1.2330000000 35.7570000000 + 3534 3 0.0 -1 1.500000 27.5370000000 1.2330000000 35.7570000000 + 3535 3 0.0 1 1.500000 27.5370000000 2.8770000000 34.1130000000 + 3536 3 0.0 -1 1.500000 27.5370000000 2.8770000000 34.1130000000 + 3537 3 0.0 1 1.500000 30.0030000000 5.3430000000 34.1130000000 + 3538 3 0.0 -1 1.500000 30.0030000000 5.3430000000 34.1130000000 + 3539 3 0.0 1 1.500000 30.0030000000 6.9870000000 35.7570000000 + 3540 3 0.0 -1 1.500000 30.0030000000 6.9870000000 35.7570000000 + 3541 3 0.0 1 1.500000 31.6470000000 5.3430000000 35.7570000000 + 3542 3 0.0 -1 1.500000 31.6470000000 5.3430000000 35.7570000000 + 3543 3 0.0 1 1.500000 31.6470000000 6.9870000000 34.1130000000 + 3544 3 0.0 -1 1.500000 31.6470000000 6.9870000000 34.1130000000 + 3545 3 0.0 1 1.500000 27.5370000000 5.3430000000 39.8670000000 + 3546 3 0.0 -1 1.500000 27.5370000000 5.3430000000 39.8670000000 + 3547 3 0.0 1 1.500000 25.8930000000 5.3430000000 38.2230000000 + 3548 3 0.0 -1 1.500000 25.8930000000 5.3430000000 38.2230000000 + 3549 3 0.0 1 1.500000 25.8930000000 6.9870000000 39.8670000000 + 3550 3 0.0 -1 1.500000 25.8930000000 6.9870000000 39.8670000000 + 3551 3 0.0 1 1.500000 27.5370000000 6.9870000000 38.2230000000 + 3552 3 0.0 -1 1.500000 27.5370000000 6.9870000000 38.2230000000 + 3553 3 0.0 1 1.500000 30.0030000000 2.8770000000 39.8670000000 + 3554 3 0.0 -1 1.500000 30.0030000000 2.8770000000 39.8670000000 + 3555 3 0.0 1 1.500000 30.0030000000 1.2330000000 38.2230000000 + 3556 3 0.0 -1 1.500000 30.0030000000 1.2330000000 38.2230000000 + 3557 3 0.0 1 1.500000 31.6470000000 1.2330000000 39.8670000000 + 3558 3 0.0 -1 1.500000 31.6470000000 1.2330000000 39.8670000000 + 3559 3 0.0 1 1.500000 31.6470000000 2.8770000000 38.2230000000 + 3560 3 0.0 -1 1.500000 31.6470000000 2.8770000000 38.2230000000 + 3561 3 0.0 1 1.500000 25.8930000000 9.4530000000 1.2330000000 + 3562 3 0.0 -1 1.500000 25.8930000000 9.4530000000 1.2330000000 + 3563 3 0.0 1 1.500000 25.8930000000 11.0970000000 2.8770000000 + 3564 3 0.0 -1 1.500000 25.8930000000 11.0970000000 2.8770000000 + 3565 3 0.0 1 1.500000 27.5370000000 9.4530000000 2.8770000000 + 3566 3 0.0 -1 1.500000 27.5370000000 9.4530000000 2.8770000000 + 3567 3 0.0 1 1.500000 27.5370000000 11.0970000000 1.2330000000 + 3568 3 0.0 -1 1.500000 27.5370000000 11.0970000000 1.2330000000 + 3569 3 0.0 1 1.500000 30.0030000000 13.5630000000 1.2330000000 + 3570 3 0.0 -1 1.500000 30.0030000000 13.5630000000 1.2330000000 + 3571 3 0.0 1 1.500000 30.0030000000 15.2070000000 2.8770000000 + 3572 3 0.0 -1 1.500000 30.0030000000 15.2070000000 2.8770000000 + 3573 3 0.0 1 1.500000 31.6470000000 13.5630000000 2.8770000000 + 3574 3 0.0 -1 1.500000 31.6470000000 13.5630000000 2.8770000000 + 3575 3 0.0 1 1.500000 31.6470000000 15.2070000000 1.2330000000 + 3576 3 0.0 -1 1.500000 31.6470000000 15.2070000000 1.2330000000 + 3577 3 0.0 1 1.500000 25.8930000000 13.5630000000 5.3430000000 + 3578 3 0.0 -1 1.500000 25.8930000000 13.5630000000 5.3430000000 + 3579 3 0.0 1 1.500000 27.5370000000 13.5630000000 6.9870000000 + 3580 3 0.0 -1 1.500000 27.5370000000 13.5630000000 6.9870000000 + 3581 3 0.0 1 1.500000 27.5370000000 15.2070000000 5.3430000000 + 3582 3 0.0 -1 1.500000 27.5370000000 15.2070000000 5.3430000000 + 3583 3 0.0 1 1.500000 25.8930000000 15.2070000000 6.9870000000 + 3584 3 0.0 -1 1.500000 25.8930000000 15.2070000000 6.9870000000 + 3585 3 0.0 1 1.500000 30.0030000000 9.4530000000 5.3430000000 + 3586 3 0.0 -1 1.500000 30.0030000000 9.4530000000 5.3430000000 + 3587 3 0.0 1 1.500000 30.0030000000 11.0970000000 6.9870000000 + 3588 3 0.0 -1 1.500000 30.0030000000 11.0970000000 6.9870000000 + 3589 3 0.0 1 1.500000 31.6470000000 11.0970000000 5.3430000000 + 3590 3 0.0 -1 1.500000 31.6470000000 11.0970000000 5.3430000000 + 3591 3 0.0 1 1.500000 31.6470000000 9.4530000000 6.9870000000 + 3592 3 0.0 -1 1.500000 31.6470000000 9.4530000000 6.9870000000 + 3593 3 0.0 1 1.500000 25.8930000000 9.4530000000 9.4530000000 + 3594 3 0.0 -1 1.500000 25.8930000000 9.4530000000 9.4530000000 + 3595 3 0.0 1 1.500000 25.8930000000 11.0970000000 11.0970000000 + 3596 3 0.0 -1 1.500000 25.8930000000 11.0970000000 11.0970000000 + 3597 3 0.0 1 1.500000 27.5370000000 9.4530000000 11.0970000000 + 3598 3 0.0 -1 1.500000 27.5370000000 9.4530000000 11.0970000000 + 3599 3 0.0 1 1.500000 27.5370000000 11.0970000000 9.4530000000 + 3600 3 0.0 -1 1.500000 27.5370000000 11.0970000000 9.4530000000 + 3601 3 0.0 1 1.500000 30.0030000000 13.5630000000 9.4530000000 + 3602 3 0.0 -1 1.500000 30.0030000000 13.5630000000 9.4530000000 + 3603 3 0.0 1 1.500000 30.0030000000 15.2070000000 11.0970000000 + 3604 3 0.0 -1 1.500000 30.0030000000 15.2070000000 11.0970000000 + 3605 3 0.0 1 1.500000 31.6470000000 13.5630000000 11.0970000000 + 3606 3 0.0 -1 1.500000 31.6470000000 13.5630000000 11.0970000000 + 3607 3 0.0 1 1.500000 31.6470000000 15.2070000000 9.4530000000 + 3608 3 0.0 -1 1.500000 31.6470000000 15.2070000000 9.4530000000 + 3609 3 0.0 1 1.500000 25.8930000000 13.5630000000 13.5630000000 + 3610 3 0.0 -1 1.500000 25.8930000000 13.5630000000 13.5630000000 + 3611 3 0.0 1 1.500000 27.5370000000 13.5630000000 15.2070000000 + 3612 3 0.0 -1 1.500000 27.5370000000 13.5630000000 15.2070000000 + 3613 3 0.0 1 1.500000 27.5370000000 15.2070000000 13.5630000000 + 3614 3 0.0 -1 1.500000 27.5370000000 15.2070000000 13.5630000000 + 3615 3 0.0 1 1.500000 25.8930000000 15.2070000000 15.2070000000 + 3616 3 0.0 -1 1.500000 25.8930000000 15.2070000000 15.2070000000 + 3617 3 0.0 1 1.500000 30.0030000000 9.4530000000 13.5630000000 + 3618 3 0.0 -1 1.500000 30.0030000000 9.4530000000 13.5630000000 + 3619 3 0.0 1 1.500000 30.0030000000 11.0970000000 15.2070000000 + 3620 3 0.0 -1 1.500000 30.0030000000 11.0970000000 15.2070000000 + 3621 3 0.0 1 1.500000 31.6470000000 11.0970000000 13.5630000000 + 3622 3 0.0 -1 1.500000 31.6470000000 11.0970000000 13.5630000000 + 3623 3 0.0 1 1.500000 31.6470000000 9.4530000000 15.2070000000 + 3624 3 0.0 -1 1.500000 31.6470000000 9.4530000000 15.2070000000 + 3625 3 0.0 1 1.500000 25.8930000000 9.4530000000 17.6730000000 + 3626 3 0.0 -1 1.500000 25.8930000000 9.4530000000 17.6730000000 + 3627 3 0.0 1 1.500000 25.8930000000 11.0970000000 19.3170000000 + 3628 3 0.0 -1 1.500000 25.8930000000 11.0970000000 19.3170000000 + 3629 3 0.0 1 1.500000 27.5370000000 9.4530000000 19.3170000000 + 3630 3 0.0 -1 1.500000 27.5370000000 9.4530000000 19.3170000000 + 3631 3 0.0 1 1.500000 27.5370000000 11.0970000000 17.6730000000 + 3632 3 0.0 -1 1.500000 27.5370000000 11.0970000000 17.6730000000 + 3633 3 0.0 1 1.500000 30.0030000000 13.5630000000 17.6730000000 + 3634 3 0.0 -1 1.500000 30.0030000000 13.5630000000 17.6730000000 + 3635 3 0.0 1 1.500000 30.0030000000 15.2070000000 19.3170000000 + 3636 3 0.0 -1 1.500000 30.0030000000 15.2070000000 19.3170000000 + 3637 3 0.0 1 1.500000 31.6470000000 13.5630000000 19.3170000000 + 3638 3 0.0 -1 1.500000 31.6470000000 13.5630000000 19.3170000000 + 3639 3 0.0 1 1.500000 31.6470000000 15.2070000000 17.6730000000 + 3640 3 0.0 -1 1.500000 31.6470000000 15.2070000000 17.6730000000 + 3641 3 0.0 1 1.500000 25.8930000000 13.5630000000 21.7830000000 + 3642 3 0.0 -1 1.500000 25.8930000000 13.5630000000 21.7830000000 + 3643 3 0.0 1 1.500000 27.5370000000 13.5630000000 23.4270000000 + 3644 3 0.0 -1 1.500000 27.5370000000 13.5630000000 23.4270000000 + 3645 3 0.0 1 1.500000 27.5370000000 15.2070000000 21.7830000000 + 3646 3 0.0 -1 1.500000 27.5370000000 15.2070000000 21.7830000000 + 3647 3 0.0 1 1.500000 25.8930000000 15.2070000000 23.4270000000 + 3648 3 0.0 -1 1.500000 25.8930000000 15.2070000000 23.4270000000 + 3649 3 0.0 1 1.500000 30.0030000000 9.4530000000 21.7830000000 + 3650 3 0.0 -1 1.500000 30.0030000000 9.4530000000 21.7830000000 + 3651 3 0.0 1 1.500000 30.0030000000 11.0970000000 23.4270000000 + 3652 3 0.0 -1 1.500000 30.0030000000 11.0970000000 23.4270000000 + 3653 3 0.0 1 1.500000 31.6470000000 11.0970000000 21.7830000000 + 3654 3 0.0 -1 1.500000 31.6470000000 11.0970000000 21.7830000000 + 3655 3 0.0 1 1.500000 31.6470000000 9.4530000000 23.4270000000 + 3656 3 0.0 -1 1.500000 31.6470000000 9.4530000000 23.4270000000 + 3657 3 0.0 1 1.500000 25.8930000000 9.4530000000 25.8930000000 + 3658 3 0.0 -1 1.500000 25.8930000000 9.4530000000 25.8930000000 + 3659 3 0.0 1 1.500000 25.8930000000 11.0970000000 27.5370000000 + 3660 3 0.0 -1 1.500000 25.8930000000 11.0970000000 27.5370000000 + 3661 3 0.0 1 1.500000 27.5370000000 9.4530000000 27.5370000000 + 3662 3 0.0 -1 1.500000 27.5370000000 9.4530000000 27.5370000000 + 3663 3 0.0 1 1.500000 27.5370000000 11.0970000000 25.8930000000 + 3664 3 0.0 -1 1.500000 27.5370000000 11.0970000000 25.8930000000 + 3665 3 0.0 1 1.500000 30.0030000000 13.5630000000 25.8930000000 + 3666 3 0.0 -1 1.500000 30.0030000000 13.5630000000 25.8930000000 + 3667 3 0.0 1 1.500000 30.0030000000 15.2070000000 27.5370000000 + 3668 3 0.0 -1 1.500000 30.0030000000 15.2070000000 27.5370000000 + 3669 3 0.0 1 1.500000 31.6470000000 13.5630000000 27.5370000000 + 3670 3 0.0 -1 1.500000 31.6470000000 13.5630000000 27.5370000000 + 3671 3 0.0 1 1.500000 31.6470000000 15.2070000000 25.8930000000 + 3672 3 0.0 -1 1.500000 31.6470000000 15.2070000000 25.8930000000 + 3673 3 0.0 1 1.500000 25.8930000000 13.5630000000 30.0030000000 + 3674 3 0.0 -1 1.500000 25.8930000000 13.5630000000 30.0030000000 + 3675 3 0.0 1 1.500000 27.5370000000 13.5630000000 31.6470000000 + 3676 3 0.0 -1 1.500000 27.5370000000 13.5630000000 31.6470000000 + 3677 3 0.0 1 1.500000 27.5370000000 15.2070000000 30.0030000000 + 3678 3 0.0 -1 1.500000 27.5370000000 15.2070000000 30.0030000000 + 3679 3 0.0 1 1.500000 25.8930000000 15.2070000000 31.6470000000 + 3680 3 0.0 -1 1.500000 25.8930000000 15.2070000000 31.6470000000 + 3681 3 0.0 1 1.500000 30.0030000000 9.4530000000 30.0030000000 + 3682 3 0.0 -1 1.500000 30.0030000000 9.4530000000 30.0030000000 + 3683 3 0.0 1 1.500000 30.0030000000 11.0970000000 31.6470000000 + 3684 3 0.0 -1 1.500000 30.0030000000 11.0970000000 31.6470000000 + 3685 3 0.0 1 1.500000 31.6470000000 11.0970000000 30.0030000000 + 3686 3 0.0 -1 1.500000 31.6470000000 11.0970000000 30.0030000000 + 3687 3 0.0 1 1.500000 31.6470000000 9.4530000000 31.6470000000 + 3688 3 0.0 -1 1.500000 31.6470000000 9.4530000000 31.6470000000 + 3689 3 0.0 1 1.500000 25.8930000000 9.4530000000 34.1130000000 + 3690 3 0.0 -1 1.500000 25.8930000000 9.4530000000 34.1130000000 + 3691 3 0.0 1 1.500000 25.8930000000 11.0970000000 35.7570000000 + 3692 3 0.0 -1 1.500000 25.8930000000 11.0970000000 35.7570000000 + 3693 3 0.0 1 1.500000 27.5370000000 9.4530000000 35.7570000000 + 3694 3 0.0 -1 1.500000 27.5370000000 9.4530000000 35.7570000000 + 3695 3 0.0 1 1.500000 27.5370000000 11.0970000000 34.1130000000 + 3696 3 0.0 -1 1.500000 27.5370000000 11.0970000000 34.1130000000 + 3697 3 0.0 1 1.500000 30.0030000000 13.5630000000 34.1130000000 + 3698 3 0.0 -1 1.500000 30.0030000000 13.5630000000 34.1130000000 + 3699 3 0.0 1 1.500000 30.0030000000 15.2070000000 35.7570000000 + 3700 3 0.0 -1 1.500000 30.0030000000 15.2070000000 35.7570000000 + 3701 3 0.0 1 1.500000 31.6470000000 13.5630000000 35.7570000000 + 3702 3 0.0 -1 1.500000 31.6470000000 13.5630000000 35.7570000000 + 3703 3 0.0 1 1.500000 31.6470000000 15.2070000000 34.1130000000 + 3704 3 0.0 -1 1.500000 31.6470000000 15.2070000000 34.1130000000 + 3705 3 0.0 1 1.500000 27.5370000000 13.5630000000 39.8670000000 + 3706 3 0.0 -1 1.500000 27.5370000000 13.5630000000 39.8670000000 + 3707 3 0.0 1 1.500000 25.8930000000 13.5630000000 38.2230000000 + 3708 3 0.0 -1 1.500000 25.8930000000 13.5630000000 38.2230000000 + 3709 3 0.0 1 1.500000 25.8930000000 15.2070000000 39.8670000000 + 3710 3 0.0 -1 1.500000 25.8930000000 15.2070000000 39.8670000000 + 3711 3 0.0 1 1.500000 27.5370000000 15.2070000000 38.2230000000 + 3712 3 0.0 -1 1.500000 27.5370000000 15.2070000000 38.2230000000 + 3713 3 0.0 1 1.500000 30.0030000000 11.0970000000 39.8670000000 + 3714 3 0.0 -1 1.500000 30.0030000000 11.0970000000 39.8670000000 + 3715 3 0.0 1 1.500000 30.0030000000 9.4530000000 38.2230000000 + 3716 3 0.0 -1 1.500000 30.0030000000 9.4530000000 38.2230000000 + 3717 3 0.0 1 1.500000 31.6470000000 9.4530000000 39.8670000000 + 3718 3 0.0 -1 1.500000 31.6470000000 9.4530000000 39.8670000000 + 3719 3 0.0 1 1.500000 31.6470000000 11.0970000000 38.2230000000 + 3720 3 0.0 -1 1.500000 31.6470000000 11.0970000000 38.2230000000 + 3721 3 0.0 1 1.500000 25.8930000000 17.6730000000 1.2330000000 + 3722 3 0.0 -1 1.500000 25.8930000000 17.6730000000 1.2330000000 + 3723 3 0.0 1 1.500000 25.8930000000 19.3170000000 2.8770000000 + 3724 3 0.0 -1 1.500000 25.8930000000 19.3170000000 2.8770000000 + 3725 3 0.0 1 1.500000 27.5370000000 17.6730000000 2.8770000000 + 3726 3 0.0 -1 1.500000 27.5370000000 17.6730000000 2.8770000000 + 3727 3 0.0 1 1.500000 27.5370000000 19.3170000000 1.2330000000 + 3728 3 0.0 -1 1.500000 27.5370000000 19.3170000000 1.2330000000 + 3729 3 0.0 1 1.500000 30.0030000000 21.7830000000 1.2330000000 + 3730 3 0.0 -1 1.500000 30.0030000000 21.7830000000 1.2330000000 + 3731 3 0.0 1 1.500000 30.0030000000 23.4270000000 2.8770000000 + 3732 3 0.0 -1 1.500000 30.0030000000 23.4270000000 2.8770000000 + 3733 3 0.0 1 1.500000 31.6470000000 21.7830000000 2.8770000000 + 3734 3 0.0 -1 1.500000 31.6470000000 21.7830000000 2.8770000000 + 3735 3 0.0 1 1.500000 31.6470000000 23.4270000000 1.2330000000 + 3736 3 0.0 -1 1.500000 31.6470000000 23.4270000000 1.2330000000 + 3737 3 0.0 1 1.500000 25.8930000000 21.7830000000 5.3430000000 + 3738 3 0.0 -1 1.500000 25.8930000000 21.7830000000 5.3430000000 + 3739 3 0.0 1 1.500000 27.5370000000 21.7830000000 6.9870000000 + 3740 3 0.0 -1 1.500000 27.5370000000 21.7830000000 6.9870000000 + 3741 3 0.0 1 1.500000 27.5370000000 23.4270000000 5.3430000000 + 3742 3 0.0 -1 1.500000 27.5370000000 23.4270000000 5.3430000000 + 3743 3 0.0 1 1.500000 25.8930000000 23.4270000000 6.9870000000 + 3744 3 0.0 -1 1.500000 25.8930000000 23.4270000000 6.9870000000 + 3745 3 0.0 1 1.500000 30.0030000000 17.6730000000 5.3430000000 + 3746 3 0.0 -1 1.500000 30.0030000000 17.6730000000 5.3430000000 + 3747 3 0.0 1 1.500000 30.0030000000 19.3170000000 6.9870000000 + 3748 3 0.0 -1 1.500000 30.0030000000 19.3170000000 6.9870000000 + 3749 3 0.0 1 1.500000 31.6470000000 19.3170000000 5.3430000000 + 3750 3 0.0 -1 1.500000 31.6470000000 19.3170000000 5.3430000000 + 3751 3 0.0 1 1.500000 31.6470000000 17.6730000000 6.9870000000 + 3752 3 0.0 -1 1.500000 31.6470000000 17.6730000000 6.9870000000 + 3753 3 0.0 1 1.500000 25.8930000000 17.6730000000 9.4530000000 + 3754 3 0.0 -1 1.500000 25.8930000000 17.6730000000 9.4530000000 + 3755 3 0.0 1 1.500000 25.8930000000 19.3170000000 11.0970000000 + 3756 3 0.0 -1 1.500000 25.8930000000 19.3170000000 11.0970000000 + 3757 3 0.0 1 1.500000 27.5370000000 17.6730000000 11.0970000000 + 3758 3 0.0 -1 1.500000 27.5370000000 17.6730000000 11.0970000000 + 3759 3 0.0 1 1.500000 27.5370000000 19.3170000000 9.4530000000 + 3760 3 0.0 -1 1.500000 27.5370000000 19.3170000000 9.4530000000 + 3761 3 0.0 1 1.500000 30.0030000000 21.7830000000 9.4530000000 + 3762 3 0.0 -1 1.500000 30.0030000000 21.7830000000 9.4530000000 + 3763 3 0.0 1 1.500000 30.0030000000 23.4270000000 11.0970000000 + 3764 3 0.0 -1 1.500000 30.0030000000 23.4270000000 11.0970000000 + 3765 3 0.0 1 1.500000 31.6470000000 21.7830000000 11.0970000000 + 3766 3 0.0 -1 1.500000 31.6470000000 21.7830000000 11.0970000000 + 3767 3 0.0 1 1.500000 31.6470000000 23.4270000000 9.4530000000 + 3768 3 0.0 -1 1.500000 31.6470000000 23.4270000000 9.4530000000 + 3769 3 0.0 1 1.500000 25.8930000000 21.7830000000 13.5630000000 + 3770 3 0.0 -1 1.500000 25.8930000000 21.7830000000 13.5630000000 + 3771 3 0.0 1 1.500000 27.5370000000 21.7830000000 15.2070000000 + 3772 3 0.0 -1 1.500000 27.5370000000 21.7830000000 15.2070000000 + 3773 3 0.0 1 1.500000 27.5370000000 23.4270000000 13.5630000000 + 3774 3 0.0 -1 1.500000 27.5370000000 23.4270000000 13.5630000000 + 3775 3 0.0 1 1.500000 25.8930000000 23.4270000000 15.2070000000 + 3776 3 0.0 -1 1.500000 25.8930000000 23.4270000000 15.2070000000 + 3777 3 0.0 1 1.500000 30.0030000000 17.6730000000 13.5630000000 + 3778 3 0.0 -1 1.500000 30.0030000000 17.6730000000 13.5630000000 + 3779 3 0.0 1 1.500000 30.0030000000 19.3170000000 15.2070000000 + 3780 3 0.0 -1 1.500000 30.0030000000 19.3170000000 15.2070000000 + 3781 3 0.0 1 1.500000 31.6470000000 19.3170000000 13.5630000000 + 3782 3 0.0 -1 1.500000 31.6470000000 19.3170000000 13.5630000000 + 3783 3 0.0 1 1.500000 31.6470000000 17.6730000000 15.2070000000 + 3784 3 0.0 -1 1.500000 31.6470000000 17.6730000000 15.2070000000 + 3785 3 0.0 1 1.500000 25.8930000000 17.6730000000 17.6730000000 + 3786 3 0.0 -1 1.500000 25.8930000000 17.6730000000 17.6730000000 + 3787 3 0.0 1 1.500000 25.8930000000 19.3170000000 19.3170000000 + 3788 3 0.0 -1 1.500000 25.8930000000 19.3170000000 19.3170000000 + 3789 3 0.0 1 1.500000 27.5370000000 17.6730000000 19.3170000000 + 3790 3 0.0 -1 1.500000 27.5370000000 17.6730000000 19.3170000000 + 3791 3 0.0 1 1.500000 27.5370000000 19.3170000000 17.6730000000 + 3792 3 0.0 -1 1.500000 27.5370000000 19.3170000000 17.6730000000 + 3793 3 0.0 1 1.500000 30.0030000000 21.7830000000 17.6730000000 + 3794 3 0.0 -1 1.500000 30.0030000000 21.7830000000 17.6730000000 + 3795 3 0.0 1 1.500000 30.0030000000 23.4270000000 19.3170000000 + 3796 3 0.0 -1 1.500000 30.0030000000 23.4270000000 19.3170000000 + 3797 3 0.0 1 1.500000 31.6470000000 21.7830000000 19.3170000000 + 3798 3 0.0 -1 1.500000 31.6470000000 21.7830000000 19.3170000000 + 3799 3 0.0 1 1.500000 31.6470000000 23.4270000000 17.6730000000 + 3800 3 0.0 -1 1.500000 31.6470000000 23.4270000000 17.6730000000 + 3801 3 0.0 1 1.500000 25.8930000000 21.7830000000 21.7830000000 + 3802 3 0.0 -1 1.500000 25.8930000000 21.7830000000 21.7830000000 + 3803 3 0.0 1 1.500000 27.5370000000 21.7830000000 23.4270000000 + 3804 3 0.0 -1 1.500000 27.5370000000 21.7830000000 23.4270000000 + 3805 3 0.0 1 1.500000 27.5370000000 23.4270000000 21.7830000000 + 3806 3 0.0 -1 1.500000 27.5370000000 23.4270000000 21.7830000000 + 3807 3 0.0 1 1.500000 25.8930000000 23.4270000000 23.4270000000 + 3808 3 0.0 -1 1.500000 25.8930000000 23.4270000000 23.4270000000 + 3809 3 0.0 1 1.500000 30.0030000000 17.6730000000 21.7830000000 + 3810 3 0.0 -1 1.500000 30.0030000000 17.6730000000 21.7830000000 + 3811 3 0.0 1 1.500000 30.0030000000 19.3170000000 23.4270000000 + 3812 3 0.0 -1 1.500000 30.0030000000 19.3170000000 23.4270000000 + 3813 3 0.0 1 1.500000 31.6470000000 19.3170000000 21.7830000000 + 3814 3 0.0 -1 1.500000 31.6470000000 19.3170000000 21.7830000000 + 3815 3 0.0 1 1.500000 31.6470000000 17.6730000000 23.4270000000 + 3816 3 0.0 -1 1.500000 31.6470000000 17.6730000000 23.4270000000 + 3817 3 0.0 1 1.500000 25.8930000000 17.6730000000 25.8930000000 + 3818 3 0.0 -1 1.500000 25.8930000000 17.6730000000 25.8930000000 + 3819 3 0.0 1 1.500000 25.8930000000 19.3170000000 27.5370000000 + 3820 3 0.0 -1 1.500000 25.8930000000 19.3170000000 27.5370000000 + 3821 3 0.0 1 1.500000 27.5370000000 17.6730000000 27.5370000000 + 3822 3 0.0 -1 1.500000 27.5370000000 17.6730000000 27.5370000000 + 3823 3 0.0 1 1.500000 27.5370000000 19.3170000000 25.8930000000 + 3824 3 0.0 -1 1.500000 27.5370000000 19.3170000000 25.8930000000 + 3825 3 0.0 1 1.500000 30.0030000000 21.7830000000 25.8930000000 + 3826 3 0.0 -1 1.500000 30.0030000000 21.7830000000 25.8930000000 + 3827 3 0.0 1 1.500000 30.0030000000 23.4270000000 27.5370000000 + 3828 3 0.0 -1 1.500000 30.0030000000 23.4270000000 27.5370000000 + 3829 3 0.0 1 1.500000 31.6470000000 21.7830000000 27.5370000000 + 3830 3 0.0 -1 1.500000 31.6470000000 21.7830000000 27.5370000000 + 3831 3 0.0 1 1.500000 31.6470000000 23.4270000000 25.8930000000 + 3832 3 0.0 -1 1.500000 31.6470000000 23.4270000000 25.8930000000 + 3833 3 0.0 1 1.500000 25.8930000000 21.7830000000 30.0030000000 + 3834 3 0.0 -1 1.500000 25.8930000000 21.7830000000 30.0030000000 + 3835 3 0.0 1 1.500000 27.5370000000 21.7830000000 31.6470000000 + 3836 3 0.0 -1 1.500000 27.5370000000 21.7830000000 31.6470000000 + 3837 3 0.0 1 1.500000 27.5370000000 23.4270000000 30.0030000000 + 3838 3 0.0 -1 1.500000 27.5370000000 23.4270000000 30.0030000000 + 3839 3 0.0 1 1.500000 25.8930000000 23.4270000000 31.6470000000 + 3840 3 0.0 -1 1.500000 25.8930000000 23.4270000000 31.6470000000 + 3841 3 0.0 1 1.500000 30.0030000000 17.6730000000 30.0030000000 + 3842 3 0.0 -1 1.500000 30.0030000000 17.6730000000 30.0030000000 + 3843 3 0.0 1 1.500000 30.0030000000 19.3170000000 31.6470000000 + 3844 3 0.0 -1 1.500000 30.0030000000 19.3170000000 31.6470000000 + 3845 3 0.0 1 1.500000 31.6470000000 19.3170000000 30.0030000000 + 3846 3 0.0 -1 1.500000 31.6470000000 19.3170000000 30.0030000000 + 3847 3 0.0 1 1.500000 31.6470000000 17.6730000000 31.6470000000 + 3848 3 0.0 -1 1.500000 31.6470000000 17.6730000000 31.6470000000 + 3849 3 0.0 1 1.500000 25.8930000000 17.6730000000 34.1130000000 + 3850 3 0.0 -1 1.500000 25.8930000000 17.6730000000 34.1130000000 + 3851 3 0.0 1 1.500000 25.8930000000 19.3170000000 35.7570000000 + 3852 3 0.0 -1 1.500000 25.8930000000 19.3170000000 35.7570000000 + 3853 3 0.0 1 1.500000 27.5370000000 17.6730000000 35.7570000000 + 3854 3 0.0 -1 1.500000 27.5370000000 17.6730000000 35.7570000000 + 3855 3 0.0 1 1.500000 27.5370000000 19.3170000000 34.1130000000 + 3856 3 0.0 -1 1.500000 27.5370000000 19.3170000000 34.1130000000 + 3857 3 0.0 1 1.500000 30.0030000000 21.7830000000 34.1130000000 + 3858 3 0.0 -1 1.500000 30.0030000000 21.7830000000 34.1130000000 + 3859 3 0.0 1 1.500000 30.0030000000 23.4270000000 35.7570000000 + 3860 3 0.0 -1 1.500000 30.0030000000 23.4270000000 35.7570000000 + 3861 3 0.0 1 1.500000 31.6470000000 21.7830000000 35.7570000000 + 3862 3 0.0 -1 1.500000 31.6470000000 21.7830000000 35.7570000000 + 3863 3 0.0 1 1.500000 31.6470000000 23.4270000000 34.1130000000 + 3864 3 0.0 -1 1.500000 31.6470000000 23.4270000000 34.1130000000 + 3865 3 0.0 1 1.500000 27.5370000000 21.7830000000 39.8670000000 + 3866 3 0.0 -1 1.500000 27.5370000000 21.7830000000 39.8670000000 + 3867 3 0.0 1 1.500000 25.8930000000 21.7830000000 38.2230000000 + 3868 3 0.0 -1 1.500000 25.8930000000 21.7830000000 38.2230000000 + 3869 3 0.0 1 1.500000 25.8930000000 23.4270000000 39.8670000000 + 3870 3 0.0 -1 1.500000 25.8930000000 23.4270000000 39.8670000000 + 3871 3 0.0 1 1.500000 27.5370000000 23.4270000000 38.2230000000 + 3872 3 0.0 -1 1.500000 27.5370000000 23.4270000000 38.2230000000 + 3873 3 0.0 1 1.500000 30.0030000000 19.3170000000 39.8670000000 + 3874 3 0.0 -1 1.500000 30.0030000000 19.3170000000 39.8670000000 + 3875 3 0.0 1 1.500000 30.0030000000 17.6730000000 38.2230000000 + 3876 3 0.0 -1 1.500000 30.0030000000 17.6730000000 38.2230000000 + 3877 3 0.0 1 1.500000 31.6470000000 17.6730000000 39.8670000000 + 3878 3 0.0 -1 1.500000 31.6470000000 17.6730000000 39.8670000000 + 3879 3 0.0 1 1.500000 31.6470000000 19.3170000000 38.2230000000 + 3880 3 0.0 -1 1.500000 31.6470000000 19.3170000000 38.2230000000 + 3881 3 0.0 1 1.500000 25.8930000000 25.8930000000 1.2330000000 + 3882 3 0.0 -1 1.500000 25.8930000000 25.8930000000 1.2330000000 + 3883 3 0.0 1 1.500000 25.8930000000 27.5370000000 2.8770000000 + 3884 3 0.0 -1 1.500000 25.8930000000 27.5370000000 2.8770000000 + 3885 3 0.0 1 1.500000 27.5370000000 25.8930000000 2.8770000000 + 3886 3 0.0 -1 1.500000 27.5370000000 25.8930000000 2.8770000000 + 3887 3 0.0 1 1.500000 27.5370000000 27.5370000000 1.2330000000 + 3888 3 0.0 -1 1.500000 27.5370000000 27.5370000000 1.2330000000 + 3889 3 0.0 1 1.500000 30.0030000000 30.0030000000 1.2330000000 + 3890 3 0.0 -1 1.500000 30.0030000000 30.0030000000 1.2330000000 + 3891 3 0.0 1 1.500000 30.0030000000 31.6470000000 2.8770000000 + 3892 3 0.0 -1 1.500000 30.0030000000 31.6470000000 2.8770000000 + 3893 3 0.0 1 1.500000 31.6470000000 30.0030000000 2.8770000000 + 3894 3 0.0 -1 1.500000 31.6470000000 30.0030000000 2.8770000000 + 3895 3 0.0 1 1.500000 31.6470000000 31.6470000000 1.2330000000 + 3896 3 0.0 -1 1.500000 31.6470000000 31.6470000000 1.2330000000 + 3897 3 0.0 1 1.500000 25.8930000000 30.0030000000 5.3430000000 + 3898 3 0.0 -1 1.500000 25.8930000000 30.0030000000 5.3430000000 + 3899 3 0.0 1 1.500000 27.5370000000 30.0030000000 6.9870000000 + 3900 3 0.0 -1 1.500000 27.5370000000 30.0030000000 6.9870000000 + 3901 3 0.0 1 1.500000 27.5370000000 31.6470000000 5.3430000000 + 3902 3 0.0 -1 1.500000 27.5370000000 31.6470000000 5.3430000000 + 3903 3 0.0 1 1.500000 25.8930000000 31.6470000000 6.9870000000 + 3904 3 0.0 -1 1.500000 25.8930000000 31.6470000000 6.9870000000 + 3905 3 0.0 1 1.500000 30.0030000000 25.8930000000 5.3430000000 + 3906 3 0.0 -1 1.500000 30.0030000000 25.8930000000 5.3430000000 + 3907 3 0.0 1 1.500000 30.0030000000 27.5370000000 6.9870000000 + 3908 3 0.0 -1 1.500000 30.0030000000 27.5370000000 6.9870000000 + 3909 3 0.0 1 1.500000 31.6470000000 27.5370000000 5.3430000000 + 3910 3 0.0 -1 1.500000 31.6470000000 27.5370000000 5.3430000000 + 3911 3 0.0 1 1.500000 31.6470000000 25.8930000000 6.9870000000 + 3912 3 0.0 -1 1.500000 31.6470000000 25.8930000000 6.9870000000 + 3913 3 0.0 1 1.500000 25.8930000000 25.8930000000 9.4530000000 + 3914 3 0.0 -1 1.500000 25.8930000000 25.8930000000 9.4530000000 + 3915 3 0.0 1 1.500000 25.8930000000 27.5370000000 11.0970000000 + 3916 3 0.0 -1 1.500000 25.8930000000 27.5370000000 11.0970000000 + 3917 3 0.0 1 1.500000 27.5370000000 25.8930000000 11.0970000000 + 3918 3 0.0 -1 1.500000 27.5370000000 25.8930000000 11.0970000000 + 3919 3 0.0 1 1.500000 27.5370000000 27.5370000000 9.4530000000 + 3920 3 0.0 -1 1.500000 27.5370000000 27.5370000000 9.4530000000 + 3921 3 0.0 1 1.500000 30.0030000000 30.0030000000 9.4530000000 + 3922 3 0.0 -1 1.500000 30.0030000000 30.0030000000 9.4530000000 + 3923 3 0.0 1 1.500000 30.0030000000 31.6470000000 11.0970000000 + 3924 3 0.0 -1 1.500000 30.0030000000 31.6470000000 11.0970000000 + 3925 3 0.0 1 1.500000 31.6470000000 30.0030000000 11.0970000000 + 3926 3 0.0 -1 1.500000 31.6470000000 30.0030000000 11.0970000000 + 3927 3 0.0 1 1.500000 31.6470000000 31.6470000000 9.4530000000 + 3928 3 0.0 -1 1.500000 31.6470000000 31.6470000000 9.4530000000 + 3929 3 0.0 1 1.500000 25.8930000000 30.0030000000 13.5630000000 + 3930 3 0.0 -1 1.500000 25.8930000000 30.0030000000 13.5630000000 + 3931 3 0.0 1 1.500000 27.5370000000 30.0030000000 15.2070000000 + 3932 3 0.0 -1 1.500000 27.5370000000 30.0030000000 15.2070000000 + 3933 3 0.0 1 1.500000 27.5370000000 31.6470000000 13.5630000000 + 3934 3 0.0 -1 1.500000 27.5370000000 31.6470000000 13.5630000000 + 3935 3 0.0 1 1.500000 25.8930000000 31.6470000000 15.2070000000 + 3936 3 0.0 -1 1.500000 25.8930000000 31.6470000000 15.2070000000 + 3937 3 0.0 1 1.500000 30.0030000000 25.8930000000 13.5630000000 + 3938 3 0.0 -1 1.500000 30.0030000000 25.8930000000 13.5630000000 + 3939 3 0.0 1 1.500000 30.0030000000 27.5370000000 15.2070000000 + 3940 3 0.0 -1 1.500000 30.0030000000 27.5370000000 15.2070000000 + 3941 3 0.0 1 1.500000 31.6470000000 27.5370000000 13.5630000000 + 3942 3 0.0 -1 1.500000 31.6470000000 27.5370000000 13.5630000000 + 3943 3 0.0 1 1.500000 31.6470000000 25.8930000000 15.2070000000 + 3944 3 0.0 -1 1.500000 31.6470000000 25.8930000000 15.2070000000 + 3945 3 0.0 1 1.500000 25.8930000000 25.8930000000 17.6730000000 + 3946 3 0.0 -1 1.500000 25.8930000000 25.8930000000 17.6730000000 + 3947 3 0.0 1 1.500000 25.8930000000 27.5370000000 19.3170000000 + 3948 3 0.0 -1 1.500000 25.8930000000 27.5370000000 19.3170000000 + 3949 3 0.0 1 1.500000 27.5370000000 25.8930000000 19.3170000000 + 3950 3 0.0 -1 1.500000 27.5370000000 25.8930000000 19.3170000000 + 3951 3 0.0 1 1.500000 27.5370000000 27.5370000000 17.6730000000 + 3952 3 0.0 -1 1.500000 27.5370000000 27.5370000000 17.6730000000 + 3953 3 0.0 1 1.500000 30.0030000000 30.0030000000 17.6730000000 + 3954 3 0.0 -1 1.500000 30.0030000000 30.0030000000 17.6730000000 + 3955 3 0.0 1 1.500000 30.0030000000 31.6470000000 19.3170000000 + 3956 3 0.0 -1 1.500000 30.0030000000 31.6470000000 19.3170000000 + 3957 3 0.0 1 1.500000 31.6470000000 30.0030000000 19.3170000000 + 3958 3 0.0 -1 1.500000 31.6470000000 30.0030000000 19.3170000000 + 3959 3 0.0 1 1.500000 31.6470000000 31.6470000000 17.6730000000 + 3960 3 0.0 -1 1.500000 31.6470000000 31.6470000000 17.6730000000 + 3961 3 0.0 1 1.500000 25.8930000000 30.0030000000 21.7830000000 + 3962 3 0.0 -1 1.500000 25.8930000000 30.0030000000 21.7830000000 + 3963 3 0.0 1 1.500000 27.5370000000 30.0030000000 23.4270000000 + 3964 3 0.0 -1 1.500000 27.5370000000 30.0030000000 23.4270000000 + 3965 3 0.0 1 1.500000 27.5370000000 31.6470000000 21.7830000000 + 3966 3 0.0 -1 1.500000 27.5370000000 31.6470000000 21.7830000000 + 3967 3 0.0 1 1.500000 25.8930000000 31.6470000000 23.4270000000 + 3968 3 0.0 -1 1.500000 25.8930000000 31.6470000000 23.4270000000 + 3969 3 0.0 1 1.500000 30.0030000000 25.8930000000 21.7830000000 + 3970 3 0.0 -1 1.500000 30.0030000000 25.8930000000 21.7830000000 + 3971 3 0.0 1 1.500000 30.0030000000 27.5370000000 23.4270000000 + 3972 3 0.0 -1 1.500000 30.0030000000 27.5370000000 23.4270000000 + 3973 3 0.0 1 1.500000 31.6470000000 27.5370000000 21.7830000000 + 3974 3 0.0 -1 1.500000 31.6470000000 27.5370000000 21.7830000000 + 3975 3 0.0 1 1.500000 31.6470000000 25.8930000000 23.4270000000 + 3976 3 0.0 -1 1.500000 31.6470000000 25.8930000000 23.4270000000 + 3977 3 0.0 1 1.500000 25.8930000000 25.8930000000 25.8930000000 + 3978 3 0.0 -1 1.500000 25.8930000000 25.8930000000 25.8930000000 + 3979 3 0.0 1 1.500000 25.8930000000 27.5370000000 27.5370000000 + 3980 3 0.0 -1 1.500000 25.8930000000 27.5370000000 27.5370000000 + 3981 3 0.0 1 1.500000 27.5370000000 25.8930000000 27.5370000000 + 3982 3 0.0 -1 1.500000 27.5370000000 25.8930000000 27.5370000000 + 3983 3 0.0 1 1.500000 27.5370000000 27.5370000000 25.8930000000 + 3984 3 0.0 -1 1.500000 27.5370000000 27.5370000000 25.8930000000 + 3985 3 0.0 1 1.500000 30.0030000000 30.0030000000 25.8930000000 + 3986 3 0.0 -1 1.500000 30.0030000000 30.0030000000 25.8930000000 + 3987 3 0.0 1 1.500000 30.0030000000 31.6470000000 27.5370000000 + 3988 3 0.0 -1 1.500000 30.0030000000 31.6470000000 27.5370000000 + 3989 3 0.0 1 1.500000 31.6470000000 30.0030000000 27.5370000000 + 3990 3 0.0 -1 1.500000 31.6470000000 30.0030000000 27.5370000000 + 3991 3 0.0 1 1.500000 31.6470000000 31.6470000000 25.8930000000 + 3992 3 0.0 -1 1.500000 31.6470000000 31.6470000000 25.8930000000 + 3993 3 0.0 1 1.500000 25.8930000000 30.0030000000 30.0030000000 + 3994 3 0.0 -1 1.500000 25.8930000000 30.0030000000 30.0030000000 + 3995 3 0.0 1 1.500000 27.5370000000 30.0030000000 31.6470000000 + 3996 3 0.0 -1 1.500000 27.5370000000 30.0030000000 31.6470000000 + 3997 3 0.0 1 1.500000 27.5370000000 31.6470000000 30.0030000000 + 3998 3 0.0 -1 1.500000 27.5370000000 31.6470000000 30.0030000000 + 3999 3 0.0 1 1.500000 25.8930000000 31.6470000000 31.6470000000 + 4000 3 0.0 -1 1.500000 25.8930000000 31.6470000000 31.6470000000 + 4001 3 0.0 1 1.500000 30.0030000000 25.8930000000 30.0030000000 + 4002 3 0.0 -1 1.500000 30.0030000000 25.8930000000 30.0030000000 + 4003 3 0.0 1 1.500000 30.0030000000 27.5370000000 31.6470000000 + 4004 3 0.0 -1 1.500000 30.0030000000 27.5370000000 31.6470000000 + 4005 3 0.0 1 1.500000 31.6470000000 27.5370000000 30.0030000000 + 4006 3 0.0 -1 1.500000 31.6470000000 27.5370000000 30.0030000000 + 4007 3 0.0 1 1.500000 31.6470000000 25.8930000000 31.6470000000 + 4008 3 0.0 -1 1.500000 31.6470000000 25.8930000000 31.6470000000 + 4009 3 0.0 1 1.500000 25.8930000000 25.8930000000 34.1130000000 + 4010 3 0.0 -1 1.500000 25.8930000000 25.8930000000 34.1130000000 + 4011 3 0.0 1 1.500000 25.8930000000 27.5370000000 35.7570000000 + 4012 3 0.0 -1 1.500000 25.8930000000 27.5370000000 35.7570000000 + 4013 3 0.0 1 1.500000 27.5370000000 25.8930000000 35.7570000000 + 4014 3 0.0 -1 1.500000 27.5370000000 25.8930000000 35.7570000000 + 4015 3 0.0 1 1.500000 27.5370000000 27.5370000000 34.1130000000 + 4016 3 0.0 -1 1.500000 27.5370000000 27.5370000000 34.1130000000 + 4017 3 0.0 1 1.500000 30.0030000000 30.0030000000 34.1130000000 + 4018 3 0.0 -1 1.500000 30.0030000000 30.0030000000 34.1130000000 + 4019 3 0.0 1 1.500000 30.0030000000 31.6470000000 35.7570000000 + 4020 3 0.0 -1 1.500000 30.0030000000 31.6470000000 35.7570000000 + 4021 3 0.0 1 1.500000 31.6470000000 30.0030000000 35.7570000000 + 4022 3 0.0 -1 1.500000 31.6470000000 30.0030000000 35.7570000000 + 4023 3 0.0 1 1.500000 31.6470000000 31.6470000000 34.1130000000 + 4024 3 0.0 -1 1.500000 31.6470000000 31.6470000000 34.1130000000 + 4025 3 0.0 1 1.500000 27.5370000000 30.0030000000 39.8670000000 + 4026 3 0.0 -1 1.500000 27.5370000000 30.0030000000 39.8670000000 + 4027 3 0.0 1 1.500000 25.8930000000 30.0030000000 38.2230000000 + 4028 3 0.0 -1 1.500000 25.8930000000 30.0030000000 38.2230000000 + 4029 3 0.0 1 1.500000 25.8930000000 31.6470000000 39.8670000000 + 4030 3 0.0 -1 1.500000 25.8930000000 31.6470000000 39.8670000000 + 4031 3 0.0 1 1.500000 27.5370000000 31.6470000000 38.2230000000 + 4032 3 0.0 -1 1.500000 27.5370000000 31.6470000000 38.2230000000 + 4033 3 0.0 1 1.500000 30.0030000000 27.5370000000 39.8670000000 + 4034 3 0.0 -1 1.500000 30.0030000000 27.5370000000 39.8670000000 + 4035 3 0.0 1 1.500000 30.0030000000 25.8930000000 38.2230000000 + 4036 3 0.0 -1 1.500000 30.0030000000 25.8930000000 38.2230000000 + 4037 3 0.0 1 1.500000 31.6470000000 25.8930000000 39.8670000000 + 4038 3 0.0 -1 1.500000 31.6470000000 25.8930000000 39.8670000000 + 4039 3 0.0 1 1.500000 31.6470000000 27.5370000000 38.2230000000 + 4040 3 0.0 -1 1.500000 31.6470000000 27.5370000000 38.2230000000 + 4041 3 0.0 1 1.500000 25.8930000000 34.1130000000 1.2330000000 + 4042 3 0.0 -1 1.500000 25.8930000000 34.1130000000 1.2330000000 + 4043 3 0.0 1 1.500000 25.8930000000 35.7570000000 2.8770000000 + 4044 3 0.0 -1 1.500000 25.8930000000 35.7570000000 2.8770000000 + 4045 3 0.0 1 1.500000 27.5370000000 34.1130000000 2.8770000000 + 4046 3 0.0 -1 1.500000 27.5370000000 34.1130000000 2.8770000000 + 4047 3 0.0 1 1.500000 27.5370000000 35.7570000000 1.2330000000 + 4048 3 0.0 -1 1.500000 27.5370000000 35.7570000000 1.2330000000 + 4049 3 0.0 1 1.500000 30.0030000000 39.8670000000 2.8770000000 + 4050 3 0.0 -1 1.500000 30.0030000000 39.8670000000 2.8770000000 + 4051 3 0.0 1 1.500000 30.0030000000 38.2230000000 1.2330000000 + 4052 3 0.0 -1 1.500000 30.0030000000 38.2230000000 1.2330000000 + 4053 3 0.0 1 1.500000 31.6470000000 39.8670000000 1.2330000000 + 4054 3 0.0 -1 1.500000 31.6470000000 39.8670000000 1.2330000000 + 4055 3 0.0 1 1.500000 31.6470000000 38.2230000000 2.8770000000 + 4056 3 0.0 -1 1.500000 31.6470000000 38.2230000000 2.8770000000 + 4057 3 0.0 1 1.500000 27.5370000000 39.8670000000 5.3430000000 + 4058 3 0.0 -1 1.500000 27.5370000000 39.8670000000 5.3430000000 + 4059 3 0.0 1 1.500000 25.8930000000 39.8670000000 6.9870000000 + 4060 3 0.0 -1 1.500000 25.8930000000 39.8670000000 6.9870000000 + 4061 3 0.0 1 1.500000 25.8930000000 38.2230000000 5.3430000000 + 4062 3 0.0 -1 1.500000 25.8930000000 38.2230000000 5.3430000000 + 4063 3 0.0 1 1.500000 27.5370000000 38.2230000000 6.9870000000 + 4064 3 0.0 -1 1.500000 27.5370000000 38.2230000000 6.9870000000 + 4065 3 0.0 1 1.500000 30.0030000000 34.1130000000 5.3430000000 + 4066 3 0.0 -1 1.500000 30.0030000000 34.1130000000 5.3430000000 + 4067 3 0.0 1 1.500000 30.0030000000 35.7570000000 6.9870000000 + 4068 3 0.0 -1 1.500000 30.0030000000 35.7570000000 6.9870000000 + 4069 3 0.0 1 1.500000 31.6470000000 35.7570000000 5.3430000000 + 4070 3 0.0 -1 1.500000 31.6470000000 35.7570000000 5.3430000000 + 4071 3 0.0 1 1.500000 31.6470000000 34.1130000000 6.9870000000 + 4072 3 0.0 -1 1.500000 31.6470000000 34.1130000000 6.9870000000 + 4073 3 0.0 1 1.500000 25.8930000000 34.1130000000 9.4530000000 + 4074 3 0.0 -1 1.500000 25.8930000000 34.1130000000 9.4530000000 + 4075 3 0.0 1 1.500000 25.8930000000 35.7570000000 11.0970000000 + 4076 3 0.0 -1 1.500000 25.8930000000 35.7570000000 11.0970000000 + 4077 3 0.0 1 1.500000 27.5370000000 34.1130000000 11.0970000000 + 4078 3 0.0 -1 1.500000 27.5370000000 34.1130000000 11.0970000000 + 4079 3 0.0 1 1.500000 27.5370000000 35.7570000000 9.4530000000 + 4080 3 0.0 -1 1.500000 27.5370000000 35.7570000000 9.4530000000 + 4081 3 0.0 1 1.500000 30.0030000000 39.8670000000 11.0970000000 + 4082 3 0.0 -1 1.500000 30.0030000000 39.8670000000 11.0970000000 + 4083 3 0.0 1 1.500000 30.0030000000 38.2230000000 9.4530000000 + 4084 3 0.0 -1 1.500000 30.0030000000 38.2230000000 9.4530000000 + 4085 3 0.0 1 1.500000 31.6470000000 39.8670000000 9.4530000000 + 4086 3 0.0 -1 1.500000 31.6470000000 39.8670000000 9.4530000000 + 4087 3 0.0 1 1.500000 31.6470000000 38.2230000000 11.0970000000 + 4088 3 0.0 -1 1.500000 31.6470000000 38.2230000000 11.0970000000 + 4089 3 0.0 1 1.500000 27.5370000000 39.8670000000 13.5630000000 + 4090 3 0.0 -1 1.500000 27.5370000000 39.8670000000 13.5630000000 + 4091 3 0.0 1 1.500000 25.8930000000 39.8670000000 15.2070000000 + 4092 3 0.0 -1 1.500000 25.8930000000 39.8670000000 15.2070000000 + 4093 3 0.0 1 1.500000 25.8930000000 38.2230000000 13.5630000000 + 4094 3 0.0 -1 1.500000 25.8930000000 38.2230000000 13.5630000000 + 4095 3 0.0 1 1.500000 27.5370000000 38.2230000000 15.2070000000 + 4096 3 0.0 -1 1.500000 27.5370000000 38.2230000000 15.2070000000 + 4097 3 0.0 1 1.500000 30.0030000000 34.1130000000 13.5630000000 + 4098 3 0.0 -1 1.500000 30.0030000000 34.1130000000 13.5630000000 + 4099 3 0.0 1 1.500000 30.0030000000 35.7570000000 15.2070000000 + 4100 3 0.0 -1 1.500000 30.0030000000 35.7570000000 15.2070000000 + 4101 3 0.0 1 1.500000 31.6470000000 35.7570000000 13.5630000000 + 4102 3 0.0 -1 1.500000 31.6470000000 35.7570000000 13.5630000000 + 4103 3 0.0 1 1.500000 31.6470000000 34.1130000000 15.2070000000 + 4104 3 0.0 -1 1.500000 31.6470000000 34.1130000000 15.2070000000 + 4105 3 0.0 1 1.500000 25.8930000000 34.1130000000 17.6730000000 + 4106 3 0.0 -1 1.500000 25.8930000000 34.1130000000 17.6730000000 + 4107 3 0.0 1 1.500000 25.8930000000 35.7570000000 19.3170000000 + 4108 3 0.0 -1 1.500000 25.8930000000 35.7570000000 19.3170000000 + 4109 3 0.0 1 1.500000 27.5370000000 34.1130000000 19.3170000000 + 4110 3 0.0 -1 1.500000 27.5370000000 34.1130000000 19.3170000000 + 4111 3 0.0 1 1.500000 27.5370000000 35.7570000000 17.6730000000 + 4112 3 0.0 -1 1.500000 27.5370000000 35.7570000000 17.6730000000 + 4113 3 0.0 1 1.500000 30.0030000000 39.8670000000 19.3170000000 + 4114 3 0.0 -1 1.500000 30.0030000000 39.8670000000 19.3170000000 + 4115 3 0.0 1 1.500000 30.0030000000 38.2230000000 17.6730000000 + 4116 3 0.0 -1 1.500000 30.0030000000 38.2230000000 17.6730000000 + 4117 3 0.0 1 1.500000 31.6470000000 39.8670000000 17.6730000000 + 4118 3 0.0 -1 1.500000 31.6470000000 39.8670000000 17.6730000000 + 4119 3 0.0 1 1.500000 31.6470000000 38.2230000000 19.3170000000 + 4120 3 0.0 -1 1.500000 31.6470000000 38.2230000000 19.3170000000 + 4121 3 0.0 1 1.500000 27.5370000000 39.8670000000 21.7830000000 + 4122 3 0.0 -1 1.500000 27.5370000000 39.8670000000 21.7830000000 + 4123 3 0.0 1 1.500000 25.8930000000 39.8670000000 23.4270000000 + 4124 3 0.0 -1 1.500000 25.8930000000 39.8670000000 23.4270000000 + 4125 3 0.0 1 1.500000 25.8930000000 38.2230000000 21.7830000000 + 4126 3 0.0 -1 1.500000 25.8930000000 38.2230000000 21.7830000000 + 4127 3 0.0 1 1.500000 27.5370000000 38.2230000000 23.4270000000 + 4128 3 0.0 -1 1.500000 27.5370000000 38.2230000000 23.4270000000 + 4129 3 0.0 1 1.500000 30.0030000000 34.1130000000 21.7830000000 + 4130 3 0.0 -1 1.500000 30.0030000000 34.1130000000 21.7830000000 + 4131 3 0.0 1 1.500000 30.0030000000 35.7570000000 23.4270000000 + 4132 3 0.0 -1 1.500000 30.0030000000 35.7570000000 23.4270000000 + 4133 3 0.0 1 1.500000 31.6470000000 35.7570000000 21.7830000000 + 4134 3 0.0 -1 1.500000 31.6470000000 35.7570000000 21.7830000000 + 4135 3 0.0 1 1.500000 31.6470000000 34.1130000000 23.4270000000 + 4136 3 0.0 -1 1.500000 31.6470000000 34.1130000000 23.4270000000 + 4137 3 0.0 1 1.500000 25.8930000000 34.1130000000 25.8930000000 + 4138 3 0.0 -1 1.500000 25.8930000000 34.1130000000 25.8930000000 + 4139 3 0.0 1 1.500000 25.8930000000 35.7570000000 27.5370000000 + 4140 3 0.0 -1 1.500000 25.8930000000 35.7570000000 27.5370000000 + 4141 3 0.0 1 1.500000 27.5370000000 34.1130000000 27.5370000000 + 4142 3 0.0 -1 1.500000 27.5370000000 34.1130000000 27.5370000000 + 4143 3 0.0 1 1.500000 27.5370000000 35.7570000000 25.8930000000 + 4144 3 0.0 -1 1.500000 27.5370000000 35.7570000000 25.8930000000 + 4145 3 0.0 1 1.500000 30.0030000000 39.8670000000 27.5370000000 + 4146 3 0.0 -1 1.500000 30.0030000000 39.8670000000 27.5370000000 + 4147 3 0.0 1 1.500000 30.0030000000 38.2230000000 25.8930000000 + 4148 3 0.0 -1 1.500000 30.0030000000 38.2230000000 25.8930000000 + 4149 3 0.0 1 1.500000 31.6470000000 39.8670000000 25.8930000000 + 4150 3 0.0 -1 1.500000 31.6470000000 39.8670000000 25.8930000000 + 4151 3 0.0 1 1.500000 31.6470000000 38.2230000000 27.5370000000 + 4152 3 0.0 -1 1.500000 31.6470000000 38.2230000000 27.5370000000 + 4153 3 0.0 1 1.500000 27.5370000000 39.8670000000 30.0030000000 + 4154 3 0.0 -1 1.500000 27.5370000000 39.8670000000 30.0030000000 + 4155 3 0.0 1 1.500000 25.8930000000 39.8670000000 31.6470000000 + 4156 3 0.0 -1 1.500000 25.8930000000 39.8670000000 31.6470000000 + 4157 3 0.0 1 1.500000 25.8930000000 38.2230000000 30.0030000000 + 4158 3 0.0 -1 1.500000 25.8930000000 38.2230000000 30.0030000000 + 4159 3 0.0 1 1.500000 27.5370000000 38.2230000000 31.6470000000 + 4160 3 0.0 -1 1.500000 27.5370000000 38.2230000000 31.6470000000 + 4161 3 0.0 1 1.500000 30.0030000000 34.1130000000 30.0030000000 + 4162 3 0.0 -1 1.500000 30.0030000000 34.1130000000 30.0030000000 + 4163 3 0.0 1 1.500000 30.0030000000 35.7570000000 31.6470000000 + 4164 3 0.0 -1 1.500000 30.0030000000 35.7570000000 31.6470000000 + 4165 3 0.0 1 1.500000 31.6470000000 35.7570000000 30.0030000000 + 4166 3 0.0 -1 1.500000 31.6470000000 35.7570000000 30.0030000000 + 4167 3 0.0 1 1.500000 31.6470000000 34.1130000000 31.6470000000 + 4168 3 0.0 -1 1.500000 31.6470000000 34.1130000000 31.6470000000 + 4169 3 0.0 1 1.500000 25.8930000000 34.1130000000 34.1130000000 + 4170 3 0.0 -1 1.500000 25.8930000000 34.1130000000 34.1130000000 + 4171 3 0.0 1 1.500000 25.8930000000 35.7570000000 35.7570000000 + 4172 3 0.0 -1 1.500000 25.8930000000 35.7570000000 35.7570000000 + 4173 3 0.0 1 1.500000 27.5370000000 34.1130000000 35.7570000000 + 4174 3 0.0 -1 1.500000 27.5370000000 34.1130000000 35.7570000000 + 4175 3 0.0 1 1.500000 27.5370000000 35.7570000000 34.1130000000 + 4176 3 0.0 -1 1.500000 27.5370000000 35.7570000000 34.1130000000 + 4177 3 0.0 1 1.500000 30.0030000000 39.8670000000 35.7570000000 + 4178 3 0.0 -1 1.500000 30.0030000000 39.8670000000 35.7570000000 + 4179 3 0.0 1 1.500000 30.0030000000 38.2230000000 34.1130000000 + 4180 3 0.0 -1 1.500000 30.0030000000 38.2230000000 34.1130000000 + 4181 3 0.0 1 1.500000 31.6470000000 39.8670000000 34.1130000000 + 4182 3 0.0 -1 1.500000 31.6470000000 39.8670000000 34.1130000000 + 4183 3 0.0 1 1.500000 31.6470000000 38.2230000000 35.7570000000 + 4184 3 0.0 -1 1.500000 31.6470000000 38.2230000000 35.7570000000 + 4185 3 0.0 1 1.500000 25.8930000000 39.8670000000 39.8670000000 + 4186 3 0.0 -1 1.500000 25.8930000000 39.8670000000 39.8670000000 + 4187 3 0.0 1 1.500000 27.5370000000 39.8670000000 38.2230000000 + 4188 3 0.0 -1 1.500000 27.5370000000 39.8670000000 38.2230000000 + 4189 3 0.0 1 1.500000 27.5370000000 38.2230000000 39.8670000000 + 4190 3 0.0 -1 1.500000 27.5370000000 38.2230000000 39.8670000000 + 4191 3 0.0 1 1.500000 25.8930000000 38.2230000000 38.2230000000 + 4192 3 0.0 -1 1.500000 25.8930000000 38.2230000000 38.2230000000 + 4193 3 0.0 1 1.500000 30.0030000000 35.7570000000 39.8670000000 + 4194 3 0.0 -1 1.500000 30.0030000000 35.7570000000 39.8670000000 + 4195 3 0.0 1 1.500000 30.0030000000 34.1130000000 38.2230000000 + 4196 3 0.0 -1 1.500000 30.0030000000 34.1130000000 38.2230000000 + 4197 3 0.0 1 1.500000 31.6470000000 34.1130000000 39.8670000000 + 4198 3 0.0 -1 1.500000 31.6470000000 34.1130000000 39.8670000000 + 4199 3 0.0 1 1.500000 31.6470000000 35.7570000000 38.2230000000 + 4200 3 0.0 -1 1.500000 31.6470000000 35.7570000000 38.2230000000 + 4201 3 0.0 1 1.500000 34.1130000000 1.2330000000 1.2330000000 + 4202 3 0.0 -1 1.500000 34.1130000000 1.2330000000 1.2330000000 + 4203 3 0.0 1 1.500000 34.1130000000 2.8770000000 2.8770000000 + 4204 3 0.0 -1 1.500000 34.1130000000 2.8770000000 2.8770000000 + 4205 3 0.0 1 1.500000 35.7570000000 1.2330000000 2.8770000000 + 4206 3 0.0 -1 1.500000 35.7570000000 1.2330000000 2.8770000000 + 4207 3 0.0 1 1.500000 35.7570000000 2.8770000000 1.2330000000 + 4208 3 0.0 -1 1.500000 35.7570000000 2.8770000000 1.2330000000 + 4209 3 0.0 1 1.500000 39.8670000000 5.3430000000 2.8770000000 + 4210 3 0.0 -1 1.500000 39.8670000000 5.3430000000 2.8770000000 + 4211 3 0.0 1 1.500000 39.8670000000 6.9870000000 1.2330000000 + 4212 3 0.0 -1 1.500000 39.8670000000 6.9870000000 1.2330000000 + 4213 3 0.0 1 1.500000 38.2230000000 5.3430000000 1.2330000000 + 4214 3 0.0 -1 1.500000 38.2230000000 5.3430000000 1.2330000000 + 4215 3 0.0 1 1.500000 38.2230000000 6.9870000000 2.8770000000 + 4216 3 0.0 -1 1.500000 38.2230000000 6.9870000000 2.8770000000 + 4217 3 0.0 1 1.500000 34.1130000000 5.3430000000 5.3430000000 + 4218 3 0.0 -1 1.500000 34.1130000000 5.3430000000 5.3430000000 + 4219 3 0.0 1 1.500000 35.7570000000 5.3430000000 6.9870000000 + 4220 3 0.0 -1 1.500000 35.7570000000 5.3430000000 6.9870000000 + 4221 3 0.0 1 1.500000 35.7570000000 6.9870000000 5.3430000000 + 4222 3 0.0 -1 1.500000 35.7570000000 6.9870000000 5.3430000000 + 4223 3 0.0 1 1.500000 34.1130000000 6.9870000000 6.9870000000 + 4224 3 0.0 -1 1.500000 34.1130000000 6.9870000000 6.9870000000 + 4225 3 0.0 1 1.500000 39.8670000000 2.8770000000 5.3430000000 + 4226 3 0.0 -1 1.500000 39.8670000000 2.8770000000 5.3430000000 + 4227 3 0.0 1 1.500000 39.8670000000 1.2330000000 6.9870000000 + 4228 3 0.0 -1 1.500000 39.8670000000 1.2330000000 6.9870000000 + 4229 3 0.0 1 1.500000 38.2230000000 1.2330000000 5.3430000000 + 4230 3 0.0 -1 1.500000 38.2230000000 1.2330000000 5.3430000000 + 4231 3 0.0 1 1.500000 38.2230000000 2.8770000000 6.9870000000 + 4232 3 0.0 -1 1.500000 38.2230000000 2.8770000000 6.9870000000 + 4233 3 0.0 1 1.500000 34.1130000000 1.2330000000 9.4530000000 + 4234 3 0.0 -1 1.500000 34.1130000000 1.2330000000 9.4530000000 + 4235 3 0.0 1 1.500000 34.1130000000 2.8770000000 11.0970000000 + 4236 3 0.0 -1 1.500000 34.1130000000 2.8770000000 11.0970000000 + 4237 3 0.0 1 1.500000 35.7570000000 1.2330000000 11.0970000000 + 4238 3 0.0 -1 1.500000 35.7570000000 1.2330000000 11.0970000000 + 4239 3 0.0 1 1.500000 35.7570000000 2.8770000000 9.4530000000 + 4240 3 0.0 -1 1.500000 35.7570000000 2.8770000000 9.4530000000 + 4241 3 0.0 1 1.500000 39.8670000000 5.3430000000 11.0970000000 + 4242 3 0.0 -1 1.500000 39.8670000000 5.3430000000 11.0970000000 + 4243 3 0.0 1 1.500000 39.8670000000 6.9870000000 9.4530000000 + 4244 3 0.0 -1 1.500000 39.8670000000 6.9870000000 9.4530000000 + 4245 3 0.0 1 1.500000 38.2230000000 5.3430000000 9.4530000000 + 4246 3 0.0 -1 1.500000 38.2230000000 5.3430000000 9.4530000000 + 4247 3 0.0 1 1.500000 38.2230000000 6.9870000000 11.0970000000 + 4248 3 0.0 -1 1.500000 38.2230000000 6.9870000000 11.0970000000 + 4249 3 0.0 1 1.500000 34.1130000000 5.3430000000 13.5630000000 + 4250 3 0.0 -1 1.500000 34.1130000000 5.3430000000 13.5630000000 + 4251 3 0.0 1 1.500000 35.7570000000 5.3430000000 15.2070000000 + 4252 3 0.0 -1 1.500000 35.7570000000 5.3430000000 15.2070000000 + 4253 3 0.0 1 1.500000 35.7570000000 6.9870000000 13.5630000000 + 4254 3 0.0 -1 1.500000 35.7570000000 6.9870000000 13.5630000000 + 4255 3 0.0 1 1.500000 34.1130000000 6.9870000000 15.2070000000 + 4256 3 0.0 -1 1.500000 34.1130000000 6.9870000000 15.2070000000 + 4257 3 0.0 1 1.500000 39.8670000000 2.8770000000 13.5630000000 + 4258 3 0.0 -1 1.500000 39.8670000000 2.8770000000 13.5630000000 + 4259 3 0.0 1 1.500000 39.8670000000 1.2330000000 15.2070000000 + 4260 3 0.0 -1 1.500000 39.8670000000 1.2330000000 15.2070000000 + 4261 3 0.0 1 1.500000 38.2230000000 1.2330000000 13.5630000000 + 4262 3 0.0 -1 1.500000 38.2230000000 1.2330000000 13.5630000000 + 4263 3 0.0 1 1.500000 38.2230000000 2.8770000000 15.2070000000 + 4264 3 0.0 -1 1.500000 38.2230000000 2.8770000000 15.2070000000 + 4265 3 0.0 1 1.500000 34.1130000000 1.2330000000 17.6730000000 + 4266 3 0.0 -1 1.500000 34.1130000000 1.2330000000 17.6730000000 + 4267 3 0.0 1 1.500000 34.1130000000 2.8770000000 19.3170000000 + 4268 3 0.0 -1 1.500000 34.1130000000 2.8770000000 19.3170000000 + 4269 3 0.0 1 1.500000 35.7570000000 1.2330000000 19.3170000000 + 4270 3 0.0 -1 1.500000 35.7570000000 1.2330000000 19.3170000000 + 4271 3 0.0 1 1.500000 35.7570000000 2.8770000000 17.6730000000 + 4272 3 0.0 -1 1.500000 35.7570000000 2.8770000000 17.6730000000 + 4273 3 0.0 1 1.500000 39.8670000000 5.3430000000 19.3170000000 + 4274 3 0.0 -1 1.500000 39.8670000000 5.3430000000 19.3170000000 + 4275 3 0.0 1 1.500000 39.8670000000 6.9870000000 17.6730000000 + 4276 3 0.0 -1 1.500000 39.8670000000 6.9870000000 17.6730000000 + 4277 3 0.0 1 1.500000 38.2230000000 5.3430000000 17.6730000000 + 4278 3 0.0 -1 1.500000 38.2230000000 5.3430000000 17.6730000000 + 4279 3 0.0 1 1.500000 38.2230000000 6.9870000000 19.3170000000 + 4280 3 0.0 -1 1.500000 38.2230000000 6.9870000000 19.3170000000 + 4281 3 0.0 1 1.500000 34.1130000000 5.3430000000 21.7830000000 + 4282 3 0.0 -1 1.500000 34.1130000000 5.3430000000 21.7830000000 + 4283 3 0.0 1 1.500000 35.7570000000 5.3430000000 23.4270000000 + 4284 3 0.0 -1 1.500000 35.7570000000 5.3430000000 23.4270000000 + 4285 3 0.0 1 1.500000 35.7570000000 6.9870000000 21.7830000000 + 4286 3 0.0 -1 1.500000 35.7570000000 6.9870000000 21.7830000000 + 4287 3 0.0 1 1.500000 34.1130000000 6.9870000000 23.4270000000 + 4288 3 0.0 -1 1.500000 34.1130000000 6.9870000000 23.4270000000 + 4289 3 0.0 1 1.500000 39.8670000000 2.8770000000 21.7830000000 + 4290 3 0.0 -1 1.500000 39.8670000000 2.8770000000 21.7830000000 + 4291 3 0.0 1 1.500000 39.8670000000 1.2330000000 23.4270000000 + 4292 3 0.0 -1 1.500000 39.8670000000 1.2330000000 23.4270000000 + 4293 3 0.0 1 1.500000 38.2230000000 1.2330000000 21.7830000000 + 4294 3 0.0 -1 1.500000 38.2230000000 1.2330000000 21.7830000000 + 4295 3 0.0 1 1.500000 38.2230000000 2.8770000000 23.4270000000 + 4296 3 0.0 -1 1.500000 38.2230000000 2.8770000000 23.4270000000 + 4297 3 0.0 1 1.500000 34.1130000000 1.2330000000 25.8930000000 + 4298 3 0.0 -1 1.500000 34.1130000000 1.2330000000 25.8930000000 + 4299 3 0.0 1 1.500000 34.1130000000 2.8770000000 27.5370000000 + 4300 3 0.0 -1 1.500000 34.1130000000 2.8770000000 27.5370000000 + 4301 3 0.0 1 1.500000 35.7570000000 1.2330000000 27.5370000000 + 4302 3 0.0 -1 1.500000 35.7570000000 1.2330000000 27.5370000000 + 4303 3 0.0 1 1.500000 35.7570000000 2.8770000000 25.8930000000 + 4304 3 0.0 -1 1.500000 35.7570000000 2.8770000000 25.8930000000 + 4305 3 0.0 1 1.500000 39.8670000000 5.3430000000 27.5370000000 + 4306 3 0.0 -1 1.500000 39.8670000000 5.3430000000 27.5370000000 + 4307 3 0.0 1 1.500000 39.8670000000 6.9870000000 25.8930000000 + 4308 3 0.0 -1 1.500000 39.8670000000 6.9870000000 25.8930000000 + 4309 3 0.0 1 1.500000 38.2230000000 5.3430000000 25.8930000000 + 4310 3 0.0 -1 1.500000 38.2230000000 5.3430000000 25.8930000000 + 4311 3 0.0 1 1.500000 38.2230000000 6.9870000000 27.5370000000 + 4312 3 0.0 -1 1.500000 38.2230000000 6.9870000000 27.5370000000 + 4313 3 0.0 1 1.500000 34.1130000000 5.3430000000 30.0030000000 + 4314 3 0.0 -1 1.500000 34.1130000000 5.3430000000 30.0030000000 + 4315 3 0.0 1 1.500000 35.7570000000 5.3430000000 31.6470000000 + 4316 3 0.0 -1 1.500000 35.7570000000 5.3430000000 31.6470000000 + 4317 3 0.0 1 1.500000 35.7570000000 6.9870000000 30.0030000000 + 4318 3 0.0 -1 1.500000 35.7570000000 6.9870000000 30.0030000000 + 4319 3 0.0 1 1.500000 34.1130000000 6.9870000000 31.6470000000 + 4320 3 0.0 -1 1.500000 34.1130000000 6.9870000000 31.6470000000 + 4321 3 0.0 1 1.500000 39.8670000000 2.8770000000 30.0030000000 + 4322 3 0.0 -1 1.500000 39.8670000000 2.8770000000 30.0030000000 + 4323 3 0.0 1 1.500000 39.8670000000 1.2330000000 31.6470000000 + 4324 3 0.0 -1 1.500000 39.8670000000 1.2330000000 31.6470000000 + 4325 3 0.0 1 1.500000 38.2230000000 1.2330000000 30.0030000000 + 4326 3 0.0 -1 1.500000 38.2230000000 1.2330000000 30.0030000000 + 4327 3 0.0 1 1.500000 38.2230000000 2.8770000000 31.6470000000 + 4328 3 0.0 -1 1.500000 38.2230000000 2.8770000000 31.6470000000 + 4329 3 0.0 1 1.500000 34.1130000000 1.2330000000 34.1130000000 + 4330 3 0.0 -1 1.500000 34.1130000000 1.2330000000 34.1130000000 + 4331 3 0.0 1 1.500000 34.1130000000 2.8770000000 35.7570000000 + 4332 3 0.0 -1 1.500000 34.1130000000 2.8770000000 35.7570000000 + 4333 3 0.0 1 1.500000 35.7570000000 1.2330000000 35.7570000000 + 4334 3 0.0 -1 1.500000 35.7570000000 1.2330000000 35.7570000000 + 4335 3 0.0 1 1.500000 35.7570000000 2.8770000000 34.1130000000 + 4336 3 0.0 -1 1.500000 35.7570000000 2.8770000000 34.1130000000 + 4337 3 0.0 1 1.500000 39.8670000000 5.3430000000 35.7570000000 + 4338 3 0.0 -1 1.500000 39.8670000000 5.3430000000 35.7570000000 + 4339 3 0.0 1 1.500000 39.8670000000 6.9870000000 34.1130000000 + 4340 3 0.0 -1 1.500000 39.8670000000 6.9870000000 34.1130000000 + 4341 3 0.0 1 1.500000 38.2230000000 5.3430000000 34.1130000000 + 4342 3 0.0 -1 1.500000 38.2230000000 5.3430000000 34.1130000000 + 4343 3 0.0 1 1.500000 38.2230000000 6.9870000000 35.7570000000 + 4344 3 0.0 -1 1.500000 38.2230000000 6.9870000000 35.7570000000 + 4345 3 0.0 1 1.500000 35.7570000000 5.3430000000 39.8670000000 + 4346 3 0.0 -1 1.500000 35.7570000000 5.3430000000 39.8670000000 + 4347 3 0.0 1 1.500000 34.1130000000 5.3430000000 38.2230000000 + 4348 3 0.0 -1 1.500000 34.1130000000 5.3430000000 38.2230000000 + 4349 3 0.0 1 1.500000 34.1130000000 6.9870000000 39.8670000000 + 4350 3 0.0 -1 1.500000 34.1130000000 6.9870000000 39.8670000000 + 4351 3 0.0 1 1.500000 35.7570000000 6.9870000000 38.2230000000 + 4352 3 0.0 -1 1.500000 35.7570000000 6.9870000000 38.2230000000 + 4353 3 0.0 1 1.500000 39.8670000000 1.2330000000 39.8670000000 + 4354 3 0.0 -1 1.500000 39.8670000000 1.2330000000 39.8670000000 + 4355 3 0.0 1 1.500000 39.8670000000 2.8770000000 38.2230000000 + 4356 3 0.0 -1 1.500000 39.8670000000 2.8770000000 38.2230000000 + 4357 3 0.0 1 1.500000 38.2230000000 2.8770000000 39.8670000000 + 4358 3 0.0 -1 1.500000 38.2230000000 2.8770000000 39.8670000000 + 4359 3 0.0 1 1.500000 38.2230000000 1.2330000000 38.2230000000 + 4360 3 0.0 -1 1.500000 38.2230000000 1.2330000000 38.2230000000 + 4361 3 0.0 1 1.500000 34.1130000000 9.4530000000 1.2330000000 + 4362 3 0.0 -1 1.500000 34.1130000000 9.4530000000 1.2330000000 + 4363 3 0.0 1 1.500000 34.1130000000 11.0970000000 2.8770000000 + 4364 3 0.0 -1 1.500000 34.1130000000 11.0970000000 2.8770000000 + 4365 3 0.0 1 1.500000 35.7570000000 9.4530000000 2.8770000000 + 4366 3 0.0 -1 1.500000 35.7570000000 9.4530000000 2.8770000000 + 4367 3 0.0 1 1.500000 35.7570000000 11.0970000000 1.2330000000 + 4368 3 0.0 -1 1.500000 35.7570000000 11.0970000000 1.2330000000 + 4369 3 0.0 1 1.500000 39.8670000000 13.5630000000 2.8770000000 + 4370 3 0.0 -1 1.500000 39.8670000000 13.5630000000 2.8770000000 + 4371 3 0.0 1 1.500000 39.8670000000 15.2070000000 1.2330000000 + 4372 3 0.0 -1 1.500000 39.8670000000 15.2070000000 1.2330000000 + 4373 3 0.0 1 1.500000 38.2230000000 13.5630000000 1.2330000000 + 4374 3 0.0 -1 1.500000 38.2230000000 13.5630000000 1.2330000000 + 4375 3 0.0 1 1.500000 38.2230000000 15.2070000000 2.8770000000 + 4376 3 0.0 -1 1.500000 38.2230000000 15.2070000000 2.8770000000 + 4377 3 0.0 1 1.500000 34.1130000000 13.5630000000 5.3430000000 + 4378 3 0.0 -1 1.500000 34.1130000000 13.5630000000 5.3430000000 + 4379 3 0.0 1 1.500000 35.7570000000 13.5630000000 6.9870000000 + 4380 3 0.0 -1 1.500000 35.7570000000 13.5630000000 6.9870000000 + 4381 3 0.0 1 1.500000 35.7570000000 15.2070000000 5.3430000000 + 4382 3 0.0 -1 1.500000 35.7570000000 15.2070000000 5.3430000000 + 4383 3 0.0 1 1.500000 34.1130000000 15.2070000000 6.9870000000 + 4384 3 0.0 -1 1.500000 34.1130000000 15.2070000000 6.9870000000 + 4385 3 0.0 1 1.500000 39.8670000000 11.0970000000 5.3430000000 + 4386 3 0.0 -1 1.500000 39.8670000000 11.0970000000 5.3430000000 + 4387 3 0.0 1 1.500000 39.8670000000 9.4530000000 6.9870000000 + 4388 3 0.0 -1 1.500000 39.8670000000 9.4530000000 6.9870000000 + 4389 3 0.0 1 1.500000 38.2230000000 9.4530000000 5.3430000000 + 4390 3 0.0 -1 1.500000 38.2230000000 9.4530000000 5.3430000000 + 4391 3 0.0 1 1.500000 38.2230000000 11.0970000000 6.9870000000 + 4392 3 0.0 -1 1.500000 38.2230000000 11.0970000000 6.9870000000 + 4393 3 0.0 1 1.500000 34.1130000000 9.4530000000 9.4530000000 + 4394 3 0.0 -1 1.500000 34.1130000000 9.4530000000 9.4530000000 + 4395 3 0.0 1 1.500000 34.1130000000 11.0970000000 11.0970000000 + 4396 3 0.0 -1 1.500000 34.1130000000 11.0970000000 11.0970000000 + 4397 3 0.0 1 1.500000 35.7570000000 9.4530000000 11.0970000000 + 4398 3 0.0 -1 1.500000 35.7570000000 9.4530000000 11.0970000000 + 4399 3 0.0 1 1.500000 35.7570000000 11.0970000000 9.4530000000 + 4400 3 0.0 -1 1.500000 35.7570000000 11.0970000000 9.4530000000 + 4401 3 0.0 1 1.500000 39.8670000000 13.5630000000 11.0970000000 + 4402 3 0.0 -1 1.500000 39.8670000000 13.5630000000 11.0970000000 + 4403 3 0.0 1 1.500000 39.8670000000 15.2070000000 9.4530000000 + 4404 3 0.0 -1 1.500000 39.8670000000 15.2070000000 9.4530000000 + 4405 3 0.0 1 1.500000 38.2230000000 13.5630000000 9.4530000000 + 4406 3 0.0 -1 1.500000 38.2230000000 13.5630000000 9.4530000000 + 4407 3 0.0 1 1.500000 38.2230000000 15.2070000000 11.0970000000 + 4408 3 0.0 -1 1.500000 38.2230000000 15.2070000000 11.0970000000 + 4409 3 0.0 1 1.500000 34.1130000000 13.5630000000 13.5630000000 + 4410 3 0.0 -1 1.500000 34.1130000000 13.5630000000 13.5630000000 + 4411 3 0.0 1 1.500000 35.7570000000 13.5630000000 15.2070000000 + 4412 3 0.0 -1 1.500000 35.7570000000 13.5630000000 15.2070000000 + 4413 3 0.0 1 1.500000 35.7570000000 15.2070000000 13.5630000000 + 4414 3 0.0 -1 1.500000 35.7570000000 15.2070000000 13.5630000000 + 4415 3 0.0 1 1.500000 34.1130000000 15.2070000000 15.2070000000 + 4416 3 0.0 -1 1.500000 34.1130000000 15.2070000000 15.2070000000 + 4417 3 0.0 1 1.500000 39.8670000000 11.0970000000 13.5630000000 + 4418 3 0.0 -1 1.500000 39.8670000000 11.0970000000 13.5630000000 + 4419 3 0.0 1 1.500000 39.8670000000 9.4530000000 15.2070000000 + 4420 3 0.0 -1 1.500000 39.8670000000 9.4530000000 15.2070000000 + 4421 3 0.0 1 1.500000 38.2230000000 9.4530000000 13.5630000000 + 4422 3 0.0 -1 1.500000 38.2230000000 9.4530000000 13.5630000000 + 4423 3 0.0 1 1.500000 38.2230000000 11.0970000000 15.2070000000 + 4424 3 0.0 -1 1.500000 38.2230000000 11.0970000000 15.2070000000 + 4425 3 0.0 1 1.500000 34.1130000000 9.4530000000 17.6730000000 + 4426 3 0.0 -1 1.500000 34.1130000000 9.4530000000 17.6730000000 + 4427 3 0.0 1 1.500000 34.1130000000 11.0970000000 19.3170000000 + 4428 3 0.0 -1 1.500000 34.1130000000 11.0970000000 19.3170000000 + 4429 3 0.0 1 1.500000 35.7570000000 9.4530000000 19.3170000000 + 4430 3 0.0 -1 1.500000 35.7570000000 9.4530000000 19.3170000000 + 4431 3 0.0 1 1.500000 35.7570000000 11.0970000000 17.6730000000 + 4432 3 0.0 -1 1.500000 35.7570000000 11.0970000000 17.6730000000 + 4433 3 0.0 1 1.500000 39.8670000000 13.5630000000 19.3170000000 + 4434 3 0.0 -1 1.500000 39.8670000000 13.5630000000 19.3170000000 + 4435 3 0.0 1 1.500000 39.8670000000 15.2070000000 17.6730000000 + 4436 3 0.0 -1 1.500000 39.8670000000 15.2070000000 17.6730000000 + 4437 3 0.0 1 1.500000 38.2230000000 13.5630000000 17.6730000000 + 4438 3 0.0 -1 1.500000 38.2230000000 13.5630000000 17.6730000000 + 4439 3 0.0 1 1.500000 38.2230000000 15.2070000000 19.3170000000 + 4440 3 0.0 -1 1.500000 38.2230000000 15.2070000000 19.3170000000 + 4441 3 0.0 1 1.500000 34.1130000000 13.5630000000 21.7830000000 + 4442 3 0.0 -1 1.500000 34.1130000000 13.5630000000 21.7830000000 + 4443 3 0.0 1 1.500000 35.7570000000 13.5630000000 23.4270000000 + 4444 3 0.0 -1 1.500000 35.7570000000 13.5630000000 23.4270000000 + 4445 3 0.0 1 1.500000 35.7570000000 15.2070000000 21.7830000000 + 4446 3 0.0 -1 1.500000 35.7570000000 15.2070000000 21.7830000000 + 4447 3 0.0 1 1.500000 34.1130000000 15.2070000000 23.4270000000 + 4448 3 0.0 -1 1.500000 34.1130000000 15.2070000000 23.4270000000 + 4449 3 0.0 1 1.500000 39.8670000000 11.0970000000 21.7830000000 + 4450 3 0.0 -1 1.500000 39.8670000000 11.0970000000 21.7830000000 + 4451 3 0.0 1 1.500000 39.8670000000 9.4530000000 23.4270000000 + 4452 3 0.0 -1 1.500000 39.8670000000 9.4530000000 23.4270000000 + 4453 3 0.0 1 1.500000 38.2230000000 9.4530000000 21.7830000000 + 4454 3 0.0 -1 1.500000 38.2230000000 9.4530000000 21.7830000000 + 4455 3 0.0 1 1.500000 38.2230000000 11.0970000000 23.4270000000 + 4456 3 0.0 -1 1.500000 38.2230000000 11.0970000000 23.4270000000 + 4457 3 0.0 1 1.500000 34.1130000000 9.4530000000 25.8930000000 + 4458 3 0.0 -1 1.500000 34.1130000000 9.4530000000 25.8930000000 + 4459 3 0.0 1 1.500000 34.1130000000 11.0970000000 27.5370000000 + 4460 3 0.0 -1 1.500000 34.1130000000 11.0970000000 27.5370000000 + 4461 3 0.0 1 1.500000 35.7570000000 9.4530000000 27.5370000000 + 4462 3 0.0 -1 1.500000 35.7570000000 9.4530000000 27.5370000000 + 4463 3 0.0 1 1.500000 35.7570000000 11.0970000000 25.8930000000 + 4464 3 0.0 -1 1.500000 35.7570000000 11.0970000000 25.8930000000 + 4465 3 0.0 1 1.500000 39.8670000000 13.5630000000 27.5370000000 + 4466 3 0.0 -1 1.500000 39.8670000000 13.5630000000 27.5370000000 + 4467 3 0.0 1 1.500000 39.8670000000 15.2070000000 25.8930000000 + 4468 3 0.0 -1 1.500000 39.8670000000 15.2070000000 25.8930000000 + 4469 3 0.0 1 1.500000 38.2230000000 13.5630000000 25.8930000000 + 4470 3 0.0 -1 1.500000 38.2230000000 13.5630000000 25.8930000000 + 4471 3 0.0 1 1.500000 38.2230000000 15.2070000000 27.5370000000 + 4472 3 0.0 -1 1.500000 38.2230000000 15.2070000000 27.5370000000 + 4473 3 0.0 1 1.500000 34.1130000000 13.5630000000 30.0030000000 + 4474 3 0.0 -1 1.500000 34.1130000000 13.5630000000 30.0030000000 + 4475 3 0.0 1 1.500000 35.7570000000 13.5630000000 31.6470000000 + 4476 3 0.0 -1 1.500000 35.7570000000 13.5630000000 31.6470000000 + 4477 3 0.0 1 1.500000 35.7570000000 15.2070000000 30.0030000000 + 4478 3 0.0 -1 1.500000 35.7570000000 15.2070000000 30.0030000000 + 4479 3 0.0 1 1.500000 34.1130000000 15.2070000000 31.6470000000 + 4480 3 0.0 -1 1.500000 34.1130000000 15.2070000000 31.6470000000 + 4481 3 0.0 1 1.500000 39.8670000000 11.0970000000 30.0030000000 + 4482 3 0.0 -1 1.500000 39.8670000000 11.0970000000 30.0030000000 + 4483 3 0.0 1 1.500000 39.8670000000 9.4530000000 31.6470000000 + 4484 3 0.0 -1 1.500000 39.8670000000 9.4530000000 31.6470000000 + 4485 3 0.0 1 1.500000 38.2230000000 9.4530000000 30.0030000000 + 4486 3 0.0 -1 1.500000 38.2230000000 9.4530000000 30.0030000000 + 4487 3 0.0 1 1.500000 38.2230000000 11.0970000000 31.6470000000 + 4488 3 0.0 -1 1.500000 38.2230000000 11.0970000000 31.6470000000 + 4489 3 0.0 1 1.500000 34.1130000000 9.4530000000 34.1130000000 + 4490 3 0.0 -1 1.500000 34.1130000000 9.4530000000 34.1130000000 + 4491 3 0.0 1 1.500000 34.1130000000 11.0970000000 35.7570000000 + 4492 3 0.0 -1 1.500000 34.1130000000 11.0970000000 35.7570000000 + 4493 3 0.0 1 1.500000 35.7570000000 9.4530000000 35.7570000000 + 4494 3 0.0 -1 1.500000 35.7570000000 9.4530000000 35.7570000000 + 4495 3 0.0 1 1.500000 35.7570000000 11.0970000000 34.1130000000 + 4496 3 0.0 -1 1.500000 35.7570000000 11.0970000000 34.1130000000 + 4497 3 0.0 1 1.500000 39.8670000000 13.5630000000 35.7570000000 + 4498 3 0.0 -1 1.500000 39.8670000000 13.5630000000 35.7570000000 + 4499 3 0.0 1 1.500000 39.8670000000 15.2070000000 34.1130000000 + 4500 3 0.0 -1 1.500000 39.8670000000 15.2070000000 34.1130000000 + 4501 3 0.0 1 1.500000 38.2230000000 13.5630000000 34.1130000000 + 4502 3 0.0 -1 1.500000 38.2230000000 13.5630000000 34.1130000000 + 4503 3 0.0 1 1.500000 38.2230000000 15.2070000000 35.7570000000 + 4504 3 0.0 -1 1.500000 38.2230000000 15.2070000000 35.7570000000 + 4505 3 0.0 1 1.500000 35.7570000000 13.5630000000 39.8670000000 + 4506 3 0.0 -1 1.500000 35.7570000000 13.5630000000 39.8670000000 + 4507 3 0.0 1 1.500000 34.1130000000 13.5630000000 38.2230000000 + 4508 3 0.0 -1 1.500000 34.1130000000 13.5630000000 38.2230000000 + 4509 3 0.0 1 1.500000 34.1130000000 15.2070000000 39.8670000000 + 4510 3 0.0 -1 1.500000 34.1130000000 15.2070000000 39.8670000000 + 4511 3 0.0 1 1.500000 35.7570000000 15.2070000000 38.2230000000 + 4512 3 0.0 -1 1.500000 35.7570000000 15.2070000000 38.2230000000 + 4513 3 0.0 1 1.500000 39.8670000000 9.4530000000 39.8670000000 + 4514 3 0.0 -1 1.500000 39.8670000000 9.4530000000 39.8670000000 + 4515 3 0.0 1 1.500000 39.8670000000 11.0970000000 38.2230000000 + 4516 3 0.0 -1 1.500000 39.8670000000 11.0970000000 38.2230000000 + 4517 3 0.0 1 1.500000 38.2230000000 11.0970000000 39.8670000000 + 4518 3 0.0 -1 1.500000 38.2230000000 11.0970000000 39.8670000000 + 4519 3 0.0 1 1.500000 38.2230000000 9.4530000000 38.2230000000 + 4520 3 0.0 -1 1.500000 38.2230000000 9.4530000000 38.2230000000 + 4521 3 0.0 1 1.500000 34.1130000000 17.6730000000 1.2330000000 + 4522 3 0.0 -1 1.500000 34.1130000000 17.6730000000 1.2330000000 + 4523 3 0.0 1 1.500000 34.1130000000 19.3170000000 2.8770000000 + 4524 3 0.0 -1 1.500000 34.1130000000 19.3170000000 2.8770000000 + 4525 3 0.0 1 1.500000 35.7570000000 17.6730000000 2.8770000000 + 4526 3 0.0 -1 1.500000 35.7570000000 17.6730000000 2.8770000000 + 4527 3 0.0 1 1.500000 35.7570000000 19.3170000000 1.2330000000 + 4528 3 0.0 -1 1.500000 35.7570000000 19.3170000000 1.2330000000 + 4529 3 0.0 1 1.500000 39.8670000000 21.7830000000 2.8770000000 + 4530 3 0.0 -1 1.500000 39.8670000000 21.7830000000 2.8770000000 + 4531 3 0.0 1 1.500000 39.8670000000 23.4270000000 1.2330000000 + 4532 3 0.0 -1 1.500000 39.8670000000 23.4270000000 1.2330000000 + 4533 3 0.0 1 1.500000 38.2230000000 21.7830000000 1.2330000000 + 4534 3 0.0 -1 1.500000 38.2230000000 21.7830000000 1.2330000000 + 4535 3 0.0 1 1.500000 38.2230000000 23.4270000000 2.8770000000 + 4536 3 0.0 -1 1.500000 38.2230000000 23.4270000000 2.8770000000 + 4537 3 0.0 1 1.500000 34.1130000000 21.7830000000 5.3430000000 + 4538 3 0.0 -1 1.500000 34.1130000000 21.7830000000 5.3430000000 + 4539 3 0.0 1 1.500000 35.7570000000 21.7830000000 6.9870000000 + 4540 3 0.0 -1 1.500000 35.7570000000 21.7830000000 6.9870000000 + 4541 3 0.0 1 1.500000 35.7570000000 23.4270000000 5.3430000000 + 4542 3 0.0 -1 1.500000 35.7570000000 23.4270000000 5.3430000000 + 4543 3 0.0 1 1.500000 34.1130000000 23.4270000000 6.9870000000 + 4544 3 0.0 -1 1.500000 34.1130000000 23.4270000000 6.9870000000 + 4545 3 0.0 1 1.500000 39.8670000000 19.3170000000 5.3430000000 + 4546 3 0.0 -1 1.500000 39.8670000000 19.3170000000 5.3430000000 + 4547 3 0.0 1 1.500000 39.8670000000 17.6730000000 6.9870000000 + 4548 3 0.0 -1 1.500000 39.8670000000 17.6730000000 6.9870000000 + 4549 3 0.0 1 1.500000 38.2230000000 17.6730000000 5.3430000000 + 4550 3 0.0 -1 1.500000 38.2230000000 17.6730000000 5.3430000000 + 4551 3 0.0 1 1.500000 38.2230000000 19.3170000000 6.9870000000 + 4552 3 0.0 -1 1.500000 38.2230000000 19.3170000000 6.9870000000 + 4553 3 0.0 1 1.500000 34.1130000000 17.6730000000 9.4530000000 + 4554 3 0.0 -1 1.500000 34.1130000000 17.6730000000 9.4530000000 + 4555 3 0.0 1 1.500000 34.1130000000 19.3170000000 11.0970000000 + 4556 3 0.0 -1 1.500000 34.1130000000 19.3170000000 11.0970000000 + 4557 3 0.0 1 1.500000 35.7570000000 17.6730000000 11.0970000000 + 4558 3 0.0 -1 1.500000 35.7570000000 17.6730000000 11.0970000000 + 4559 3 0.0 1 1.500000 35.7570000000 19.3170000000 9.4530000000 + 4560 3 0.0 -1 1.500000 35.7570000000 19.3170000000 9.4530000000 + 4561 3 0.0 1 1.500000 39.8670000000 21.7830000000 11.0970000000 + 4562 3 0.0 -1 1.500000 39.8670000000 21.7830000000 11.0970000000 + 4563 3 0.0 1 1.500000 39.8670000000 23.4270000000 9.4530000000 + 4564 3 0.0 -1 1.500000 39.8670000000 23.4270000000 9.4530000000 + 4565 3 0.0 1 1.500000 38.2230000000 21.7830000000 9.4530000000 + 4566 3 0.0 -1 1.500000 38.2230000000 21.7830000000 9.4530000000 + 4567 3 0.0 1 1.500000 38.2230000000 23.4270000000 11.0970000000 + 4568 3 0.0 -1 1.500000 38.2230000000 23.4270000000 11.0970000000 + 4569 3 0.0 1 1.500000 34.1130000000 21.7830000000 13.5630000000 + 4570 3 0.0 -1 1.500000 34.1130000000 21.7830000000 13.5630000000 + 4571 3 0.0 1 1.500000 35.7570000000 21.7830000000 15.2070000000 + 4572 3 0.0 -1 1.500000 35.7570000000 21.7830000000 15.2070000000 + 4573 3 0.0 1 1.500000 35.7570000000 23.4270000000 13.5630000000 + 4574 3 0.0 -1 1.500000 35.7570000000 23.4270000000 13.5630000000 + 4575 3 0.0 1 1.500000 34.1130000000 23.4270000000 15.2070000000 + 4576 3 0.0 -1 1.500000 34.1130000000 23.4270000000 15.2070000000 + 4577 3 0.0 1 1.500000 39.8670000000 19.3170000000 13.5630000000 + 4578 3 0.0 -1 1.500000 39.8670000000 19.3170000000 13.5630000000 + 4579 3 0.0 1 1.500000 39.8670000000 17.6730000000 15.2070000000 + 4580 3 0.0 -1 1.500000 39.8670000000 17.6730000000 15.2070000000 + 4581 3 0.0 1 1.500000 38.2230000000 17.6730000000 13.5630000000 + 4582 3 0.0 -1 1.500000 38.2230000000 17.6730000000 13.5630000000 + 4583 3 0.0 1 1.500000 38.2230000000 19.3170000000 15.2070000000 + 4584 3 0.0 -1 1.500000 38.2230000000 19.3170000000 15.2070000000 + 4585 3 0.0 1 1.500000 34.1130000000 17.6730000000 17.6730000000 + 4586 3 0.0 -1 1.500000 34.1130000000 17.6730000000 17.6730000000 + 4587 3 0.0 1 1.500000 34.1130000000 19.3170000000 19.3170000000 + 4588 3 0.0 -1 1.500000 34.1130000000 19.3170000000 19.3170000000 + 4589 3 0.0 1 1.500000 35.7570000000 17.6730000000 19.3170000000 + 4590 3 0.0 -1 1.500000 35.7570000000 17.6730000000 19.3170000000 + 4591 3 0.0 1 1.500000 35.7570000000 19.3170000000 17.6730000000 + 4592 3 0.0 -1 1.500000 35.7570000000 19.3170000000 17.6730000000 + 4593 3 0.0 1 1.500000 39.8670000000 21.7830000000 19.3170000000 + 4594 3 0.0 -1 1.500000 39.8670000000 21.7830000000 19.3170000000 + 4595 3 0.0 1 1.500000 39.8670000000 23.4270000000 17.6730000000 + 4596 3 0.0 -1 1.500000 39.8670000000 23.4270000000 17.6730000000 + 4597 3 0.0 1 1.500000 38.2230000000 21.7830000000 17.6730000000 + 4598 3 0.0 -1 1.500000 38.2230000000 21.7830000000 17.6730000000 + 4599 3 0.0 1 1.500000 38.2230000000 23.4270000000 19.3170000000 + 4600 3 0.0 -1 1.500000 38.2230000000 23.4270000000 19.3170000000 + 4601 3 0.0 1 1.500000 34.1130000000 21.7830000000 21.7830000000 + 4602 3 0.0 -1 1.500000 34.1130000000 21.7830000000 21.7830000000 + 4603 3 0.0 1 1.500000 35.7570000000 21.7830000000 23.4270000000 + 4604 3 0.0 -1 1.500000 35.7570000000 21.7830000000 23.4270000000 + 4605 3 0.0 1 1.500000 35.7570000000 23.4270000000 21.7830000000 + 4606 3 0.0 -1 1.500000 35.7570000000 23.4270000000 21.7830000000 + 4607 3 0.0 1 1.500000 34.1130000000 23.4270000000 23.4270000000 + 4608 3 0.0 -1 1.500000 34.1130000000 23.4270000000 23.4270000000 + 4609 3 0.0 1 1.500000 39.8670000000 19.3170000000 21.7830000000 + 4610 3 0.0 -1 1.500000 39.8670000000 19.3170000000 21.7830000000 + 4611 3 0.0 1 1.500000 39.8670000000 17.6730000000 23.4270000000 + 4612 3 0.0 -1 1.500000 39.8670000000 17.6730000000 23.4270000000 + 4613 3 0.0 1 1.500000 38.2230000000 17.6730000000 21.7830000000 + 4614 3 0.0 -1 1.500000 38.2230000000 17.6730000000 21.7830000000 + 4615 3 0.0 1 1.500000 38.2230000000 19.3170000000 23.4270000000 + 4616 3 0.0 -1 1.500000 38.2230000000 19.3170000000 23.4270000000 + 4617 3 0.0 1 1.500000 34.1130000000 17.6730000000 25.8930000000 + 4618 3 0.0 -1 1.500000 34.1130000000 17.6730000000 25.8930000000 + 4619 3 0.0 1 1.500000 34.1130000000 19.3170000000 27.5370000000 + 4620 3 0.0 -1 1.500000 34.1130000000 19.3170000000 27.5370000000 + 4621 3 0.0 1 1.500000 35.7570000000 17.6730000000 27.5370000000 + 4622 3 0.0 -1 1.500000 35.7570000000 17.6730000000 27.5370000000 + 4623 3 0.0 1 1.500000 35.7570000000 19.3170000000 25.8930000000 + 4624 3 0.0 -1 1.500000 35.7570000000 19.3170000000 25.8930000000 + 4625 3 0.0 1 1.500000 39.8670000000 21.7830000000 27.5370000000 + 4626 3 0.0 -1 1.500000 39.8670000000 21.7830000000 27.5370000000 + 4627 3 0.0 1 1.500000 39.8670000000 23.4270000000 25.8930000000 + 4628 3 0.0 -1 1.500000 39.8670000000 23.4270000000 25.8930000000 + 4629 3 0.0 1 1.500000 38.2230000000 21.7830000000 25.8930000000 + 4630 3 0.0 -1 1.500000 38.2230000000 21.7830000000 25.8930000000 + 4631 3 0.0 1 1.500000 38.2230000000 23.4270000000 27.5370000000 + 4632 3 0.0 -1 1.500000 38.2230000000 23.4270000000 27.5370000000 + 4633 3 0.0 1 1.500000 34.1130000000 21.7830000000 30.0030000000 + 4634 3 0.0 -1 1.500000 34.1130000000 21.7830000000 30.0030000000 + 4635 3 0.0 1 1.500000 35.7570000000 21.7830000000 31.6470000000 + 4636 3 0.0 -1 1.500000 35.7570000000 21.7830000000 31.6470000000 + 4637 3 0.0 1 1.500000 35.7570000000 23.4270000000 30.0030000000 + 4638 3 0.0 -1 1.500000 35.7570000000 23.4270000000 30.0030000000 + 4639 3 0.0 1 1.500000 34.1130000000 23.4270000000 31.6470000000 + 4640 3 0.0 -1 1.500000 34.1130000000 23.4270000000 31.6470000000 + 4641 3 0.0 1 1.500000 39.8670000000 19.3170000000 30.0030000000 + 4642 3 0.0 -1 1.500000 39.8670000000 19.3170000000 30.0030000000 + 4643 3 0.0 1 1.500000 39.8670000000 17.6730000000 31.6470000000 + 4644 3 0.0 -1 1.500000 39.8670000000 17.6730000000 31.6470000000 + 4645 3 0.0 1 1.500000 38.2230000000 17.6730000000 30.0030000000 + 4646 3 0.0 -1 1.500000 38.2230000000 17.6730000000 30.0030000000 + 4647 3 0.0 1 1.500000 38.2230000000 19.3170000000 31.6470000000 + 4648 3 0.0 -1 1.500000 38.2230000000 19.3170000000 31.6470000000 + 4649 3 0.0 1 1.500000 34.1130000000 17.6730000000 34.1130000000 + 4650 3 0.0 -1 1.500000 34.1130000000 17.6730000000 34.1130000000 + 4651 3 0.0 1 1.500000 34.1130000000 19.3170000000 35.7570000000 + 4652 3 0.0 -1 1.500000 34.1130000000 19.3170000000 35.7570000000 + 4653 3 0.0 1 1.500000 35.7570000000 17.6730000000 35.7570000000 + 4654 3 0.0 -1 1.500000 35.7570000000 17.6730000000 35.7570000000 + 4655 3 0.0 1 1.500000 35.7570000000 19.3170000000 34.1130000000 + 4656 3 0.0 -1 1.500000 35.7570000000 19.3170000000 34.1130000000 + 4657 3 0.0 1 1.500000 39.8670000000 21.7830000000 35.7570000000 + 4658 3 0.0 -1 1.500000 39.8670000000 21.7830000000 35.7570000000 + 4659 3 0.0 1 1.500000 39.8670000000 23.4270000000 34.1130000000 + 4660 3 0.0 -1 1.500000 39.8670000000 23.4270000000 34.1130000000 + 4661 3 0.0 1 1.500000 38.2230000000 21.7830000000 34.1130000000 + 4662 3 0.0 -1 1.500000 38.2230000000 21.7830000000 34.1130000000 + 4663 3 0.0 1 1.500000 38.2230000000 23.4270000000 35.7570000000 + 4664 3 0.0 -1 1.500000 38.2230000000 23.4270000000 35.7570000000 + 4665 3 0.0 1 1.500000 35.7570000000 21.7830000000 39.8670000000 + 4666 3 0.0 -1 1.500000 35.7570000000 21.7830000000 39.8670000000 + 4667 3 0.0 1 1.500000 34.1130000000 21.7830000000 38.2230000000 + 4668 3 0.0 -1 1.500000 34.1130000000 21.7830000000 38.2230000000 + 4669 3 0.0 1 1.500000 34.1130000000 23.4270000000 39.8670000000 + 4670 3 0.0 -1 1.500000 34.1130000000 23.4270000000 39.8670000000 + 4671 3 0.0 1 1.500000 35.7570000000 23.4270000000 38.2230000000 + 4672 3 0.0 -1 1.500000 35.7570000000 23.4270000000 38.2230000000 + 4673 3 0.0 1 1.500000 39.8670000000 17.6730000000 39.8670000000 + 4674 3 0.0 -1 1.500000 39.8670000000 17.6730000000 39.8670000000 + 4675 3 0.0 1 1.500000 39.8670000000 19.3170000000 38.2230000000 + 4676 3 0.0 -1 1.500000 39.8670000000 19.3170000000 38.2230000000 + 4677 3 0.0 1 1.500000 38.2230000000 19.3170000000 39.8670000000 + 4678 3 0.0 -1 1.500000 38.2230000000 19.3170000000 39.8670000000 + 4679 3 0.0 1 1.500000 38.2230000000 17.6730000000 38.2230000000 + 4680 3 0.0 -1 1.500000 38.2230000000 17.6730000000 38.2230000000 + 4681 3 0.0 1 1.500000 34.1130000000 25.8930000000 1.2330000000 + 4682 3 0.0 -1 1.500000 34.1130000000 25.8930000000 1.2330000000 + 4683 3 0.0 1 1.500000 34.1130000000 27.5370000000 2.8770000000 + 4684 3 0.0 -1 1.500000 34.1130000000 27.5370000000 2.8770000000 + 4685 3 0.0 1 1.500000 35.7570000000 25.8930000000 2.8770000000 + 4686 3 0.0 -1 1.500000 35.7570000000 25.8930000000 2.8770000000 + 4687 3 0.0 1 1.500000 35.7570000000 27.5370000000 1.2330000000 + 4688 3 0.0 -1 1.500000 35.7570000000 27.5370000000 1.2330000000 + 4689 3 0.0 1 1.500000 39.8670000000 30.0030000000 2.8770000000 + 4690 3 0.0 -1 1.500000 39.8670000000 30.0030000000 2.8770000000 + 4691 3 0.0 1 1.500000 39.8670000000 31.6470000000 1.2330000000 + 4692 3 0.0 -1 1.500000 39.8670000000 31.6470000000 1.2330000000 + 4693 3 0.0 1 1.500000 38.2230000000 30.0030000000 1.2330000000 + 4694 3 0.0 -1 1.500000 38.2230000000 30.0030000000 1.2330000000 + 4695 3 0.0 1 1.500000 38.2230000000 31.6470000000 2.8770000000 + 4696 3 0.0 -1 1.500000 38.2230000000 31.6470000000 2.8770000000 + 4697 3 0.0 1 1.500000 34.1130000000 30.0030000000 5.3430000000 + 4698 3 0.0 -1 1.500000 34.1130000000 30.0030000000 5.3430000000 + 4699 3 0.0 1 1.500000 35.7570000000 30.0030000000 6.9870000000 + 4700 3 0.0 -1 1.500000 35.7570000000 30.0030000000 6.9870000000 + 4701 3 0.0 1 1.500000 35.7570000000 31.6470000000 5.3430000000 + 4702 3 0.0 -1 1.500000 35.7570000000 31.6470000000 5.3430000000 + 4703 3 0.0 1 1.500000 34.1130000000 31.6470000000 6.9870000000 + 4704 3 0.0 -1 1.500000 34.1130000000 31.6470000000 6.9870000000 + 4705 3 0.0 1 1.500000 39.8670000000 27.5370000000 5.3430000000 + 4706 3 0.0 -1 1.500000 39.8670000000 27.5370000000 5.3430000000 + 4707 3 0.0 1 1.500000 39.8670000000 25.8930000000 6.9870000000 + 4708 3 0.0 -1 1.500000 39.8670000000 25.8930000000 6.9870000000 + 4709 3 0.0 1 1.500000 38.2230000000 25.8930000000 5.3430000000 + 4710 3 0.0 -1 1.500000 38.2230000000 25.8930000000 5.3430000000 + 4711 3 0.0 1 1.500000 38.2230000000 27.5370000000 6.9870000000 + 4712 3 0.0 -1 1.500000 38.2230000000 27.5370000000 6.9870000000 + 4713 3 0.0 1 1.500000 34.1130000000 25.8930000000 9.4530000000 + 4714 3 0.0 -1 1.500000 34.1130000000 25.8930000000 9.4530000000 + 4715 3 0.0 1 1.500000 34.1130000000 27.5370000000 11.0970000000 + 4716 3 0.0 -1 1.500000 34.1130000000 27.5370000000 11.0970000000 + 4717 3 0.0 1 1.500000 35.7570000000 25.8930000000 11.0970000000 + 4718 3 0.0 -1 1.500000 35.7570000000 25.8930000000 11.0970000000 + 4719 3 0.0 1 1.500000 35.7570000000 27.5370000000 9.4530000000 + 4720 3 0.0 -1 1.500000 35.7570000000 27.5370000000 9.4530000000 + 4721 3 0.0 1 1.500000 39.8670000000 30.0030000000 11.0970000000 + 4722 3 0.0 -1 1.500000 39.8670000000 30.0030000000 11.0970000000 + 4723 3 0.0 1 1.500000 39.8670000000 31.6470000000 9.4530000000 + 4724 3 0.0 -1 1.500000 39.8670000000 31.6470000000 9.4530000000 + 4725 3 0.0 1 1.500000 38.2230000000 30.0030000000 9.4530000000 + 4726 3 0.0 -1 1.500000 38.2230000000 30.0030000000 9.4530000000 + 4727 3 0.0 1 1.500000 38.2230000000 31.6470000000 11.0970000000 + 4728 3 0.0 -1 1.500000 38.2230000000 31.6470000000 11.0970000000 + 4729 3 0.0 1 1.500000 34.1130000000 30.0030000000 13.5630000000 + 4730 3 0.0 -1 1.500000 34.1130000000 30.0030000000 13.5630000000 + 4731 3 0.0 1 1.500000 35.7570000000 30.0030000000 15.2070000000 + 4732 3 0.0 -1 1.500000 35.7570000000 30.0030000000 15.2070000000 + 4733 3 0.0 1 1.500000 35.7570000000 31.6470000000 13.5630000000 + 4734 3 0.0 -1 1.500000 35.7570000000 31.6470000000 13.5630000000 + 4735 3 0.0 1 1.500000 34.1130000000 31.6470000000 15.2070000000 + 4736 3 0.0 -1 1.500000 34.1130000000 31.6470000000 15.2070000000 + 4737 3 0.0 1 1.500000 39.8670000000 27.5370000000 13.5630000000 + 4738 3 0.0 -1 1.500000 39.8670000000 27.5370000000 13.5630000000 + 4739 3 0.0 1 1.500000 39.8670000000 25.8930000000 15.2070000000 + 4740 3 0.0 -1 1.500000 39.8670000000 25.8930000000 15.2070000000 + 4741 3 0.0 1 1.500000 38.2230000000 25.8930000000 13.5630000000 + 4742 3 0.0 -1 1.500000 38.2230000000 25.8930000000 13.5630000000 + 4743 3 0.0 1 1.500000 38.2230000000 27.5370000000 15.2070000000 + 4744 3 0.0 -1 1.500000 38.2230000000 27.5370000000 15.2070000000 + 4745 3 0.0 1 1.500000 34.1130000000 25.8930000000 17.6730000000 + 4746 3 0.0 -1 1.500000 34.1130000000 25.8930000000 17.6730000000 + 4747 3 0.0 1 1.500000 34.1130000000 27.5370000000 19.3170000000 + 4748 3 0.0 -1 1.500000 34.1130000000 27.5370000000 19.3170000000 + 4749 3 0.0 1 1.500000 35.7570000000 25.8930000000 19.3170000000 + 4750 3 0.0 -1 1.500000 35.7570000000 25.8930000000 19.3170000000 + 4751 3 0.0 1 1.500000 35.7570000000 27.5370000000 17.6730000000 + 4752 3 0.0 -1 1.500000 35.7570000000 27.5370000000 17.6730000000 + 4753 3 0.0 1 1.500000 39.8670000000 30.0030000000 19.3170000000 + 4754 3 0.0 -1 1.500000 39.8670000000 30.0030000000 19.3170000000 + 4755 3 0.0 1 1.500000 39.8670000000 31.6470000000 17.6730000000 + 4756 3 0.0 -1 1.500000 39.8670000000 31.6470000000 17.6730000000 + 4757 3 0.0 1 1.500000 38.2230000000 30.0030000000 17.6730000000 + 4758 3 0.0 -1 1.500000 38.2230000000 30.0030000000 17.6730000000 + 4759 3 0.0 1 1.500000 38.2230000000 31.6470000000 19.3170000000 + 4760 3 0.0 -1 1.500000 38.2230000000 31.6470000000 19.3170000000 + 4761 3 0.0 1 1.500000 34.1130000000 30.0030000000 21.7830000000 + 4762 3 0.0 -1 1.500000 34.1130000000 30.0030000000 21.7830000000 + 4763 3 0.0 1 1.500000 35.7570000000 30.0030000000 23.4270000000 + 4764 3 0.0 -1 1.500000 35.7570000000 30.0030000000 23.4270000000 + 4765 3 0.0 1 1.500000 35.7570000000 31.6470000000 21.7830000000 + 4766 3 0.0 -1 1.500000 35.7570000000 31.6470000000 21.7830000000 + 4767 3 0.0 1 1.500000 34.1130000000 31.6470000000 23.4270000000 + 4768 3 0.0 -1 1.500000 34.1130000000 31.6470000000 23.4270000000 + 4769 3 0.0 1 1.500000 39.8670000000 27.5370000000 21.7830000000 + 4770 3 0.0 -1 1.500000 39.8670000000 27.5370000000 21.7830000000 + 4771 3 0.0 1 1.500000 39.8670000000 25.8930000000 23.4270000000 + 4772 3 0.0 -1 1.500000 39.8670000000 25.8930000000 23.4270000000 + 4773 3 0.0 1 1.500000 38.2230000000 25.8930000000 21.7830000000 + 4774 3 0.0 -1 1.500000 38.2230000000 25.8930000000 21.7830000000 + 4775 3 0.0 1 1.500000 38.2230000000 27.5370000000 23.4270000000 + 4776 3 0.0 -1 1.500000 38.2230000000 27.5370000000 23.4270000000 + 4777 3 0.0 1 1.500000 34.1130000000 25.8930000000 25.8930000000 + 4778 3 0.0 -1 1.500000 34.1130000000 25.8930000000 25.8930000000 + 4779 3 0.0 1 1.500000 34.1130000000 27.5370000000 27.5370000000 + 4780 3 0.0 -1 1.500000 34.1130000000 27.5370000000 27.5370000000 + 4781 3 0.0 1 1.500000 35.7570000000 25.8930000000 27.5370000000 + 4782 3 0.0 -1 1.500000 35.7570000000 25.8930000000 27.5370000000 + 4783 3 0.0 1 1.500000 35.7570000000 27.5370000000 25.8930000000 + 4784 3 0.0 -1 1.500000 35.7570000000 27.5370000000 25.8930000000 + 4785 3 0.0 1 1.500000 39.8670000000 30.0030000000 27.5370000000 + 4786 3 0.0 -1 1.500000 39.8670000000 30.0030000000 27.5370000000 + 4787 3 0.0 1 1.500000 39.8670000000 31.6470000000 25.8930000000 + 4788 3 0.0 -1 1.500000 39.8670000000 31.6470000000 25.8930000000 + 4789 3 0.0 1 1.500000 38.2230000000 30.0030000000 25.8930000000 + 4790 3 0.0 -1 1.500000 38.2230000000 30.0030000000 25.8930000000 + 4791 3 0.0 1 1.500000 38.2230000000 31.6470000000 27.5370000000 + 4792 3 0.0 -1 1.500000 38.2230000000 31.6470000000 27.5370000000 + 4793 3 0.0 1 1.500000 34.1130000000 30.0030000000 30.0030000000 + 4794 3 0.0 -1 1.500000 34.1130000000 30.0030000000 30.0030000000 + 4795 3 0.0 1 1.500000 35.7570000000 30.0030000000 31.6470000000 + 4796 3 0.0 -1 1.500000 35.7570000000 30.0030000000 31.6470000000 + 4797 3 0.0 1 1.500000 35.7570000000 31.6470000000 30.0030000000 + 4798 3 0.0 -1 1.500000 35.7570000000 31.6470000000 30.0030000000 + 4799 3 0.0 1 1.500000 34.1130000000 31.6470000000 31.6470000000 + 4800 3 0.0 -1 1.500000 34.1130000000 31.6470000000 31.6470000000 + 4801 3 0.0 1 1.500000 39.8670000000 27.5370000000 30.0030000000 + 4802 3 0.0 -1 1.500000 39.8670000000 27.5370000000 30.0030000000 + 4803 3 0.0 1 1.500000 39.8670000000 25.8930000000 31.6470000000 + 4804 3 0.0 -1 1.500000 39.8670000000 25.8930000000 31.6470000000 + 4805 3 0.0 1 1.500000 38.2230000000 25.8930000000 30.0030000000 + 4806 3 0.0 -1 1.500000 38.2230000000 25.8930000000 30.0030000000 + 4807 3 0.0 1 1.500000 38.2230000000 27.5370000000 31.6470000000 + 4808 3 0.0 -1 1.500000 38.2230000000 27.5370000000 31.6470000000 + 4809 3 0.0 1 1.500000 34.1130000000 25.8930000000 34.1130000000 + 4810 3 0.0 -1 1.500000 34.1130000000 25.8930000000 34.1130000000 + 4811 3 0.0 1 1.500000 34.1130000000 27.5370000000 35.7570000000 + 4812 3 0.0 -1 1.500000 34.1130000000 27.5370000000 35.7570000000 + 4813 3 0.0 1 1.500000 35.7570000000 25.8930000000 35.7570000000 + 4814 3 0.0 -1 1.500000 35.7570000000 25.8930000000 35.7570000000 + 4815 3 0.0 1 1.500000 35.7570000000 27.5370000000 34.1130000000 + 4816 3 0.0 -1 1.500000 35.7570000000 27.5370000000 34.1130000000 + 4817 3 0.0 1 1.500000 39.8670000000 30.0030000000 35.7570000000 + 4818 3 0.0 -1 1.500000 39.8670000000 30.0030000000 35.7570000000 + 4819 3 0.0 1 1.500000 39.8670000000 31.6470000000 34.1130000000 + 4820 3 0.0 -1 1.500000 39.8670000000 31.6470000000 34.1130000000 + 4821 3 0.0 1 1.500000 38.2230000000 30.0030000000 34.1130000000 + 4822 3 0.0 -1 1.500000 38.2230000000 30.0030000000 34.1130000000 + 4823 3 0.0 1 1.500000 38.2230000000 31.6470000000 35.7570000000 + 4824 3 0.0 -1 1.500000 38.2230000000 31.6470000000 35.7570000000 + 4825 3 0.0 1 1.500000 35.7570000000 30.0030000000 39.8670000000 + 4826 3 0.0 -1 1.500000 35.7570000000 30.0030000000 39.8670000000 + 4827 3 0.0 1 1.500000 34.1130000000 30.0030000000 38.2230000000 + 4828 3 0.0 -1 1.500000 34.1130000000 30.0030000000 38.2230000000 + 4829 3 0.0 1 1.500000 34.1130000000 31.6470000000 39.8670000000 + 4830 3 0.0 -1 1.500000 34.1130000000 31.6470000000 39.8670000000 + 4831 3 0.0 1 1.500000 35.7570000000 31.6470000000 38.2230000000 + 4832 3 0.0 -1 1.500000 35.7570000000 31.6470000000 38.2230000000 + 4833 3 0.0 1 1.500000 39.8670000000 25.8930000000 39.8670000000 + 4834 3 0.0 -1 1.500000 39.8670000000 25.8930000000 39.8670000000 + 4835 3 0.0 1 1.500000 39.8670000000 27.5370000000 38.2230000000 + 4836 3 0.0 -1 1.500000 39.8670000000 27.5370000000 38.2230000000 + 4837 3 0.0 1 1.500000 38.2230000000 27.5370000000 39.8670000000 + 4838 3 0.0 -1 1.500000 38.2230000000 27.5370000000 39.8670000000 + 4839 3 0.0 1 1.500000 38.2230000000 25.8930000000 38.2230000000 + 4840 3 0.0 -1 1.500000 38.2230000000 25.8930000000 38.2230000000 + 4841 3 0.0 1 1.500000 34.1130000000 34.1130000000 1.2330000000 + 4842 3 0.0 -1 1.500000 34.1130000000 34.1130000000 1.2330000000 + 4843 3 0.0 1 1.500000 34.1130000000 35.7570000000 2.8770000000 + 4844 3 0.0 -1 1.500000 34.1130000000 35.7570000000 2.8770000000 + 4845 3 0.0 1 1.500000 35.7570000000 34.1130000000 2.8770000000 + 4846 3 0.0 -1 1.500000 35.7570000000 34.1130000000 2.8770000000 + 4847 3 0.0 1 1.500000 35.7570000000 35.7570000000 1.2330000000 + 4848 3 0.0 -1 1.500000 35.7570000000 35.7570000000 1.2330000000 + 4849 3 0.0 1 1.500000 39.8670000000 39.8670000000 1.2330000000 + 4850 3 0.0 -1 1.500000 39.8670000000 39.8670000000 1.2330000000 + 4851 3 0.0 1 1.500000 39.8670000000 38.2230000000 2.8770000000 + 4852 3 0.0 -1 1.500000 39.8670000000 38.2230000000 2.8770000000 + 4853 3 0.0 1 1.500000 38.2230000000 39.8670000000 2.8770000000 + 4854 3 0.0 -1 1.500000 38.2230000000 39.8670000000 2.8770000000 + 4855 3 0.0 1 1.500000 38.2230000000 38.2230000000 1.2330000000 + 4856 3 0.0 -1 1.500000 38.2230000000 38.2230000000 1.2330000000 + 4857 3 0.0 1 1.500000 35.7570000000 39.8670000000 5.3430000000 + 4858 3 0.0 -1 1.500000 35.7570000000 39.8670000000 5.3430000000 + 4859 3 0.0 1 1.500000 34.1130000000 39.8670000000 6.9870000000 + 4860 3 0.0 -1 1.500000 34.1130000000 39.8670000000 6.9870000000 + 4861 3 0.0 1 1.500000 34.1130000000 38.2230000000 5.3430000000 + 4862 3 0.0 -1 1.500000 34.1130000000 38.2230000000 5.3430000000 + 4863 3 0.0 1 1.500000 35.7570000000 38.2230000000 6.9870000000 + 4864 3 0.0 -1 1.500000 35.7570000000 38.2230000000 6.9870000000 + 4865 3 0.0 1 1.500000 39.8670000000 35.7570000000 5.3430000000 + 4866 3 0.0 -1 1.500000 39.8670000000 35.7570000000 5.3430000000 + 4867 3 0.0 1 1.500000 39.8670000000 34.1130000000 6.9870000000 + 4868 3 0.0 -1 1.500000 39.8670000000 34.1130000000 6.9870000000 + 4869 3 0.0 1 1.500000 38.2230000000 34.1130000000 5.3430000000 + 4870 3 0.0 -1 1.500000 38.2230000000 34.1130000000 5.3430000000 + 4871 3 0.0 1 1.500000 38.2230000000 35.7570000000 6.9870000000 + 4872 3 0.0 -1 1.500000 38.2230000000 35.7570000000 6.9870000000 + 4873 3 0.0 1 1.500000 34.1130000000 34.1130000000 9.4530000000 + 4874 3 0.0 -1 1.500000 34.1130000000 34.1130000000 9.4530000000 + 4875 3 0.0 1 1.500000 34.1130000000 35.7570000000 11.0970000000 + 4876 3 0.0 -1 1.500000 34.1130000000 35.7570000000 11.0970000000 + 4877 3 0.0 1 1.500000 35.7570000000 34.1130000000 11.0970000000 + 4878 3 0.0 -1 1.500000 35.7570000000 34.1130000000 11.0970000000 + 4879 3 0.0 1 1.500000 35.7570000000 35.7570000000 9.4530000000 + 4880 3 0.0 -1 1.500000 35.7570000000 35.7570000000 9.4530000000 + 4881 3 0.0 1 1.500000 39.8670000000 39.8670000000 9.4530000000 + 4882 3 0.0 -1 1.500000 39.8670000000 39.8670000000 9.4530000000 + 4883 3 0.0 1 1.500000 39.8670000000 38.2230000000 11.0970000000 + 4884 3 0.0 -1 1.500000 39.8670000000 38.2230000000 11.0970000000 + 4885 3 0.0 1 1.500000 38.2230000000 39.8670000000 11.0970000000 + 4886 3 0.0 -1 1.500000 38.2230000000 39.8670000000 11.0970000000 + 4887 3 0.0 1 1.500000 38.2230000000 38.2230000000 9.4530000000 + 4888 3 0.0 -1 1.500000 38.2230000000 38.2230000000 9.4530000000 + 4889 3 0.0 1 1.500000 35.7570000000 39.8670000000 13.5630000000 + 4890 3 0.0 -1 1.500000 35.7570000000 39.8670000000 13.5630000000 + 4891 3 0.0 1 1.500000 34.1130000000 39.8670000000 15.2070000000 + 4892 3 0.0 -1 1.500000 34.1130000000 39.8670000000 15.2070000000 + 4893 3 0.0 1 1.500000 34.1130000000 38.2230000000 13.5630000000 + 4894 3 0.0 -1 1.500000 34.1130000000 38.2230000000 13.5630000000 + 4895 3 0.0 1 1.500000 35.7570000000 38.2230000000 15.2070000000 + 4896 3 0.0 -1 1.500000 35.7570000000 38.2230000000 15.2070000000 + 4897 3 0.0 1 1.500000 39.8670000000 35.7570000000 13.5630000000 + 4898 3 0.0 -1 1.500000 39.8670000000 35.7570000000 13.5630000000 + 4899 3 0.0 1 1.500000 39.8670000000 34.1130000000 15.2070000000 + 4900 3 0.0 -1 1.500000 39.8670000000 34.1130000000 15.2070000000 + 4901 3 0.0 1 1.500000 38.2230000000 34.1130000000 13.5630000000 + 4902 3 0.0 -1 1.500000 38.2230000000 34.1130000000 13.5630000000 + 4903 3 0.0 1 1.500000 38.2230000000 35.7570000000 15.2070000000 + 4904 3 0.0 -1 1.500000 38.2230000000 35.7570000000 15.2070000000 + 4905 3 0.0 1 1.500000 34.1130000000 34.1130000000 17.6730000000 + 4906 3 0.0 -1 1.500000 34.1130000000 34.1130000000 17.6730000000 + 4907 3 0.0 1 1.500000 34.1130000000 35.7570000000 19.3170000000 + 4908 3 0.0 -1 1.500000 34.1130000000 35.7570000000 19.3170000000 + 4909 3 0.0 1 1.500000 35.7570000000 34.1130000000 19.3170000000 + 4910 3 0.0 -1 1.500000 35.7570000000 34.1130000000 19.3170000000 + 4911 3 0.0 1 1.500000 35.7570000000 35.7570000000 17.6730000000 + 4912 3 0.0 -1 1.500000 35.7570000000 35.7570000000 17.6730000000 + 4913 3 0.0 1 1.500000 39.8670000000 39.8670000000 17.6730000000 + 4914 3 0.0 -1 1.500000 39.8670000000 39.8670000000 17.6730000000 + 4915 3 0.0 1 1.500000 39.8670000000 38.2230000000 19.3170000000 + 4916 3 0.0 -1 1.500000 39.8670000000 38.2230000000 19.3170000000 + 4917 3 0.0 1 1.500000 38.2230000000 39.8670000000 19.3170000000 + 4918 3 0.0 -1 1.500000 38.2230000000 39.8670000000 19.3170000000 + 4919 3 0.0 1 1.500000 38.2230000000 38.2230000000 17.6730000000 + 4920 3 0.0 -1 1.500000 38.2230000000 38.2230000000 17.6730000000 + 4921 3 0.0 1 1.500000 35.7570000000 39.8670000000 21.7830000000 + 4922 3 0.0 -1 1.500000 35.7570000000 39.8670000000 21.7830000000 + 4923 3 0.0 1 1.500000 34.1130000000 39.8670000000 23.4270000000 + 4924 3 0.0 -1 1.500000 34.1130000000 39.8670000000 23.4270000000 + 4925 3 0.0 1 1.500000 34.1130000000 38.2230000000 21.7830000000 + 4926 3 0.0 -1 1.500000 34.1130000000 38.2230000000 21.7830000000 + 4927 3 0.0 1 1.500000 35.7570000000 38.2230000000 23.4270000000 + 4928 3 0.0 -1 1.500000 35.7570000000 38.2230000000 23.4270000000 + 4929 3 0.0 1 1.500000 39.8670000000 35.7570000000 21.7830000000 + 4930 3 0.0 -1 1.500000 39.8670000000 35.7570000000 21.7830000000 + 4931 3 0.0 1 1.500000 39.8670000000 34.1130000000 23.4270000000 + 4932 3 0.0 -1 1.500000 39.8670000000 34.1130000000 23.4270000000 + 4933 3 0.0 1 1.500000 38.2230000000 34.1130000000 21.7830000000 + 4934 3 0.0 -1 1.500000 38.2230000000 34.1130000000 21.7830000000 + 4935 3 0.0 1 1.500000 38.2230000000 35.7570000000 23.4270000000 + 4936 3 0.0 -1 1.500000 38.2230000000 35.7570000000 23.4270000000 + 4937 3 0.0 1 1.500000 34.1130000000 34.1130000000 25.8930000000 + 4938 3 0.0 -1 1.500000 34.1130000000 34.1130000000 25.8930000000 + 4939 3 0.0 1 1.500000 34.1130000000 35.7570000000 27.5370000000 + 4940 3 0.0 -1 1.500000 34.1130000000 35.7570000000 27.5370000000 + 4941 3 0.0 1 1.500000 35.7570000000 34.1130000000 27.5370000000 + 4942 3 0.0 -1 1.500000 35.7570000000 34.1130000000 27.5370000000 + 4943 3 0.0 1 1.500000 35.7570000000 35.7570000000 25.8930000000 + 4944 3 0.0 -1 1.500000 35.7570000000 35.7570000000 25.8930000000 + 4945 3 0.0 1 1.500000 39.8670000000 39.8670000000 25.8930000000 + 4946 3 0.0 -1 1.500000 39.8670000000 39.8670000000 25.8930000000 + 4947 3 0.0 1 1.500000 39.8670000000 38.2230000000 27.5370000000 + 4948 3 0.0 -1 1.500000 39.8670000000 38.2230000000 27.5370000000 + 4949 3 0.0 1 1.500000 38.2230000000 39.8670000000 27.5370000000 + 4950 3 0.0 -1 1.500000 38.2230000000 39.8670000000 27.5370000000 + 4951 3 0.0 1 1.500000 38.2230000000 38.2230000000 25.8930000000 + 4952 3 0.0 -1 1.500000 38.2230000000 38.2230000000 25.8930000000 + 4953 3 0.0 1 1.500000 35.7570000000 39.8670000000 30.0030000000 + 4954 3 0.0 -1 1.500000 35.7570000000 39.8670000000 30.0030000000 + 4955 3 0.0 1 1.500000 34.1130000000 39.8670000000 31.6470000000 + 4956 3 0.0 -1 1.500000 34.1130000000 39.8670000000 31.6470000000 + 4957 3 0.0 1 1.500000 34.1130000000 38.2230000000 30.0030000000 + 4958 3 0.0 -1 1.500000 34.1130000000 38.2230000000 30.0030000000 + 4959 3 0.0 1 1.500000 35.7570000000 38.2230000000 31.6470000000 + 4960 3 0.0 -1 1.500000 35.7570000000 38.2230000000 31.6470000000 + 4961 3 0.0 1 1.500000 39.8670000000 35.7570000000 30.0030000000 + 4962 3 0.0 -1 1.500000 39.8670000000 35.7570000000 30.0030000000 + 4963 3 0.0 1 1.500000 39.8670000000 34.1130000000 31.6470000000 + 4964 3 0.0 -1 1.500000 39.8670000000 34.1130000000 31.6470000000 + 4965 3 0.0 1 1.500000 38.2230000000 34.1130000000 30.0030000000 + 4966 3 0.0 -1 1.500000 38.2230000000 34.1130000000 30.0030000000 + 4967 3 0.0 1 1.500000 38.2230000000 35.7570000000 31.6470000000 + 4968 3 0.0 -1 1.500000 38.2230000000 35.7570000000 31.6470000000 + 4969 3 0.0 1 1.500000 34.1130000000 34.1130000000 34.1130000000 + 4970 3 0.0 -1 1.500000 34.1130000000 34.1130000000 34.1130000000 + 4971 3 0.0 1 1.500000 34.1130000000 35.7570000000 35.7570000000 + 4972 3 0.0 -1 1.500000 34.1130000000 35.7570000000 35.7570000000 + 4973 3 0.0 1 1.500000 35.7570000000 34.1130000000 35.7570000000 + 4974 3 0.0 -1 1.500000 35.7570000000 34.1130000000 35.7570000000 + 4975 3 0.0 1 1.500000 35.7570000000 35.7570000000 34.1130000000 + 4976 3 0.0 -1 1.500000 35.7570000000 35.7570000000 34.1130000000 + 4977 3 0.0 1 1.500000 39.8670000000 39.8670000000 34.1130000000 + 4978 3 0.0 -1 1.500000 39.8670000000 39.8670000000 34.1130000000 + 4979 3 0.0 1 1.500000 39.8670000000 38.2230000000 35.7570000000 + 4980 3 0.0 -1 1.500000 39.8670000000 38.2230000000 35.7570000000 + 4981 3 0.0 1 1.500000 38.2230000000 39.8670000000 35.7570000000 + 4982 3 0.0 -1 1.500000 38.2230000000 39.8670000000 35.7570000000 + 4983 3 0.0 1 1.500000 38.2230000000 38.2230000000 34.1130000000 + 4984 3 0.0 -1 1.500000 38.2230000000 38.2230000000 34.1130000000 + 4985 3 0.0 1 1.500000 34.1130000000 39.8670000000 39.8670000000 + 4986 3 0.0 -1 1.500000 34.1130000000 39.8670000000 39.8670000000 + 4987 3 0.0 1 1.500000 35.7570000000 39.8670000000 38.2230000000 + 4988 3 0.0 -1 1.500000 35.7570000000 39.8670000000 38.2230000000 + 4989 3 0.0 1 1.500000 35.7570000000 38.2230000000 39.8670000000 + 4990 3 0.0 -1 1.500000 35.7570000000 38.2230000000 39.8670000000 + 4991 3 0.0 1 1.500000 34.1130000000 38.2230000000 38.2230000000 + 4992 3 0.0 -1 1.500000 34.1130000000 38.2230000000 38.2230000000 + 4993 3 0.0 1 1.500000 39.8670000000 34.1130000000 39.8670000000 + 4994 3 0.0 -1 1.500000 39.8670000000 34.1130000000 39.8670000000 + 4995 3 0.0 1 1.500000 39.8670000000 35.7570000000 38.2230000000 + 4996 3 0.0 -1 1.500000 39.8670000000 35.7570000000 38.2230000000 + 4997 3 0.0 1 1.500000 38.2230000000 35.7570000000 39.8670000000 + 4998 3 0.0 -1 1.500000 38.2230000000 35.7570000000 39.8670000000 + 4999 3 0.0 1 1.500000 38.2230000000 34.1130000000 38.2230000000 + 5000 3 0.0 -1 1.500000 38.2230000000 34.1130000000 38.2230000000 + diff --git a/examples/USER/eff/ECP/SiC/bulk/in.SiC b/examples/USER/eff/ECP/SiC/bulk/in.SiC new file mode 100644 index 0000000000..2ce74232a6 --- /dev/null +++ b/examples/USER/eff/ECP/SiC/bulk/in.SiC @@ -0,0 +1,41 @@ +variable sname index SiC +variable nstep equal 100 + +units electron +newton on +boundary p p p + +atom_style electron + +read_data data.${sname} + +pair_style eff/cut 20.0 limit_eradius pressure_with_evirials ecp 1 Si 2 C +pair_coeff * * +pair_coeff 1 s 0.320852 2.283269 0.814857 +pair_coeff 2 p 22.721015 0.728733 1.103199 17.695345 6.693621 + +communicate single vel yes + +neigh_modify one 4000 page 40000 + +compute energies all pair eff/cut +variable eke equal c_energies[1] +variable epauli equal c_energies[2] +variable ecoul equal c_energies[3] +variable erres equal c_energies[4] +variable etotalnew equal c_energies[1]+c_energies[2]+c_energies[3]+c_energies[4] + +thermo ${nstep} +thermo_style custom step etotal pe ke v_etotalnew v_eke v_epauli v_ecoul v_erres +thermo_modify format float %16.8f +thermo_modify lost warn norm yes flush yes + +# Minimization + +min_style cg +dump 1 all xyz ${nstep} ${sname}.min.xyz +dump 2 all custom ${nstep} ${sname}.min.lammpstrj id type q spin eradius x y z fx fy fz erforce +dump 3 all custom ${nstep} ${sname}.data.restart id type q spin eradius x y z +min_modify line quadratic +minimize 0 1e-8 100000 1000000 + diff --git a/examples/USER/eff/ECP/SiH4/data.SiH4 b/examples/USER/eff/ECP/SiH4/data.SiH4 index 1170e747c3..84c9ae8f19 100644 --- a/examples/USER/eff/ECP/SiH4/data.SiH4 +++ b/examples/USER/eff/ECP/SiH4/data.SiH4 @@ -9,7 +9,7 @@ Created using cfg2lammps (c) AJB-2009 Masses -1 9.012182 +1 28.086589324618736 2 1.007940 3 1.000000 diff --git a/examples/USER/eff/ECP/SiH4/in.SiH4 b/examples/USER/eff/ECP/SiH4/in.SiH4 index 2e958c0e60..f670e6fefd 100644 --- a/examples/USER/eff/ECP/SiH4/in.SiH4 +++ b/examples/USER/eff/ECP/SiH4/in.SiH4 @@ -15,7 +15,7 @@ atom_style electron read_data data.${sname} -pair_style eff/cut 1000.0 +pair_style eff/cut 1000.0 ecp 1 Si pair_coeff * * compute energies all pair eff/cut diff --git a/examples/USER/eff/ECP/SiH4/in.SiH4.ang b/examples/USER/eff/ECP/SiH4/in.SiH4.ang index bd1b369024..c5fc4fc376 100644 --- a/examples/USER/eff/ECP/SiH4/in.SiH4.ang +++ b/examples/USER/eff/ECP/SiH4/in.SiH4.ang @@ -14,7 +14,7 @@ atom_style electron read_data data.${sname} -pair_style eff/cut 529.177249 +pair_style eff/cut 529.177249 ecp 1 Si pair_coeff * * compute energies all pair eff/cut From 69e7eca27c8051164aa4faf94bcb9ae8cb12e983 Mon Sep 17 00:00:00 2001 From: sjplimp Date: Wed, 2 Jan 2013 16:49:55 +0000 Subject: [PATCH 11/61] git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@9185 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- doc/Eqs/eff_ECP1.jpg | Bin 0 -> 72343 bytes doc/Eqs/eff_ECP2.jpg | Bin 0 -> 153389 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 doc/Eqs/eff_ECP1.jpg create mode 100644 doc/Eqs/eff_ECP2.jpg diff --git a/doc/Eqs/eff_ECP1.jpg b/doc/Eqs/eff_ECP1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e6fa32829db70b0994d92ff00910cb2bb1cc9038 GIT binary patch literal 72343 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 literal 0 HcmV?d00001 diff --git a/doc/Eqs/eff_ECP2.jpg b/doc/Eqs/eff_ECP2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3ab3fe62708879dce90b1d78e7c2386a7219fbbd GIT binary patch literal 153389 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 Date: Wed, 2 Jan 2013 16:50:18 +0000 Subject: [PATCH 12/61] git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@9186 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- doc/pair_eff.html | 98 ++++++++++++++++++++++++++++------------------- doc/pair_eff.txt | 89 +++++++++++++++++++++++++----------------- 2 files changed, 111 insertions(+), 76 deletions(-) diff --git a/doc/pair_eff.html b/doc/pair_eff.html index a2aaa1a882..5e287f066e 100644 --- a/doc/pair_eff.html +++ b/doc/pair_eff.html @@ -13,25 +13,33 @@

Syntax:

-

pair_style eff/cut cutoff eradius_limit_flag pressure_flag +

pair_style eff/cut cutoff limit_eradius pressure_with_evirials ecp type1 element1 type2 element2 ... typeN elementN +

+

cutoff = global cutoff for Coulombic interactions +limit_eradius = limit electron size (optional) +pressure_with_evirials = include electron virials in system pressure (optional) +type1 ... typeN = lammps atom type +element1 ... element2 = element symbol : ul

-
  • cutoff = global cutoff for Coulombic interactions -
  • eradius_limit_flag = 0 or 1 for whether electron size is restrained (optional) -
  • pressure_flag = 0 or 1 to define the type of pressure calculation (optional) -

Examples:

-
pair_style eff/cut 39.7
-pair_style eff/cut 40.0 1 1
+

pair_style eff/cut 39.7 +pair_style eff/cut 40.0 limit_eradius +pair_style eff/cut 40.0 limit_eradius pressure_with_evirials +pair_style eff/cut 40.0 ecp 1 Si 3 C pair_coeff * * -pair_coeff 2 2 20.0 -

+pair_coeff 2 2 20.0 +pair_coeff 1 s 0.320852 2.283269 0.814857 +pair_coeff 3 22.721015 0.728733 1.103199 17.695345 6.693621 : pre +

Description:

This pair style contains a LAMMPS implementation of the electron Force Field (eFF) potential currently under development at Caltech, as -described in (Jaramillo-Botero). The eFF was -first introduced by (Su) in 2007. +described in (Jaramillo-Botero). The eFF for Z<6 was +first introduced by (Su) in 2007. It has been extended to higher Zs +by using effective core potentials (ECPs) that now cover up to 2nd and 3rd +row p-block elements of the periodic table.

eFF can be viewed as an approximation to QM wave packet dynamics and Fermionic molecular dynamics, combining the ability of electronic @@ -138,25 +146,36 @@ individual I,J type pair via the pair_coeff comm All type pairs use the same global cutoff specified in the pair_style command.

-

The eradius_limit_flag and pressure_flag settings are optional. -Neither or both must be specified. If not specified they are -both set to 0 by default. +

The limit_eradius and pressure_with_evirials settings are optional. +Neither or both must be specified. If not specified they are unset.

-

The eradius_limit_flag is used to restrain electrons from becoming -unbounded in size at very high temperatures were the Gaussian wave +

The limit_eradius is used to restrain electron size from becoming +excessively diffuse at very high temperatures were the Gaussian wave packet representation breaks down, and from expanding as free -particles to infinite size. A setting of 0 means do not impose this -restraint. A setting of 1 imposes the restraint. The restraining -harmonic potential takes the form E = 1/2k_ss^2 for s > L_box/2, where -k_s = 1 Hartrees/Bohr^2. +particles to infinite size. If unset, electron radius is free to +increase without bounds. If set, a restraining +harmonic potential of the form E = 1/2k_ss^2 for s > L_box/2, where +k_s = 1 Hartrees/Bohr^2, is applied on the electron radius.

-

The pressure_flag is used to control between two types of pressure -computation: if set to 0, the computed pressure does not include the +

The pressure_with_evirials is used to control between two types of pressure +computation: if unset, the computed pressure does not include the electronic radial virials contributions to the total pressure (scalar -or tensor). If set to 1, the computed pressure will include the +or tensor). If set, the computed pressure will include the electronic radial virial contributions to the total pressure (scalar and tensor).

+

The ecp is used to associate an ECP representation for a particular atom type. +The ECP captures the orbital overlap between a core pseudo particle and valence electrons +within the Pauli repulsion. A list of type:element-symbol pairs may be provided for all +ECP representations, after the "ecp" keyword. +

+

IMPORTANT NOTE: Default ECP parameters are provided for C, N, O, Al, and Si. +Users can modify these using the pair_coeff command as exemplified above. +For this, the User must distinguish between two different functional forms supported, +one that captures the orbital overlap assuming the s-type core interacts with an s-like valence electron (s-s) +and another that assumes the interaction is s-p. For systems that exhibit significant p-character (e.g. C, N, O) +the s-p form is recommended. The "s" ECP form requires 3 parameters and the "p" 5 parameters. +

IMPORTANT NOTE: there are two different pressures that can be reported for eFF when defining this pair_style, one (default) that considers electrons do not contribute radial virial components (i.e. electrons @@ -171,26 +190,25 @@ partitioning changes, the total energy remains similar).


-

IMPORTANT NOTE: The currently implemented eFF gives a reasonably -accurate description for systems containing nuclei from Z = 1-6. -Users interested in applying eFF should restrict to systems where -electrons are s-like, or contain p character only insofar as a single -lobe of electron density is shifted away from the nuclear center. See -further details about some of the virtues and current limitations of -the method in (Jaramillo-Botero). +

IMPORTANT NOTE: This implemention of eFF gives a reasonably +accurate description for systems containing nuclei from Z = 1-6 in "all electron" representations. +For systems with increasingly non-spherical electrons, Users should use the ECP representations. +ECPs are now supported and validated for most of the 2nd and 3rd row elements of the p-block. +Predefined parameters are provided for C, N, O, Al, and Si. The ECP captures the orbital overlap +between the core and valence electrons (i.e. Pauli repulsion) with one of the functional forms:

-

Work is underway to extend the eFF to higher Z elements with -increasingly non-spherical electrons (p-block and d-block), to provide -explicit terms for electron correlation/exchange, and to improve its -computational efficiency via atom models with fixed 2 s core electrons -and atom models represented as pseudo-cores plus valence electrons. +

+
+
+
+

Where the 1st form correspond to core interactions with s-type valence electrons +and the 2nd to core interactions with p-type valence electrons.

-

The current version adds support for models with fixed-core and -effective pseudo-core (i.e. effective core pseudopotentials, ECP) +

The current version adds full support for models with fixed-core and ECP definitions. to enable larger timesteps (i.e. by avoiding the high frequency vibrational modes -translational and radial- of the 2 s -electrons), and in the ECP case to reduce the p-character effects in -higher Z elements (e.g. Silicon). A fixed-core should be defined with +electrons), and in the ECP case to reduce the increased orbital complexity in higher Z elements (up to Z<18). +A fixed-core should be defined with a mass that includes the corresponding nuclear mass plus the 2 s electrons in atomic mass units (2x5.4857990943e-4), and a radius equivalent to that of minimized 1s electrons (see examples under @@ -271,7 +289,7 @@ atoms.

Default:

-

If not specified, eradius_limit_flag = 0 and pressure_flag = 0. +

If not specified, limit_eradius = 0 and pressure_with_evirials = 0.


diff --git a/doc/pair_eff.txt b/doc/pair_eff.txt index 7e38770102..c79afef59f 100644 --- a/doc/pair_eff.txt +++ b/doc/pair_eff.txt @@ -10,25 +10,33 @@ pair_style eff/cut command :h3 [Syntax:] -pair_style eff/cut cutoff eradius_limit_flag pressure_flag +pair_style eff/cut cutoff limit_eradius pressure_with_evirials ecp type1 element1 type2 element2 ... typeN elementN cutoff = global cutoff for Coulombic interactions -eradius_limit_flag = 0 or 1 for whether electron size is restrained (optional) -pressure_flag = 0 or 1 to define the type of pressure calculation (optional) :ul +limit_eradius = limit electron size (optional) +pressure_with_evirials = include electron virials in system pressure (optional) +type1 ... typeN = lammps atom type +element1 ... element2 = element symbol : ul [Examples:] pair_style eff/cut 39.7 -pair_style eff/cut 40.0 1 1 +pair_style eff/cut 40.0 limit_eradius +pair_style eff/cut 40.0 limit_eradius pressure_with_evirials +pair_style eff/cut 40.0 ecp 1 Si 3 C pair_coeff * * -pair_coeff 2 2 20.0 :pre +pair_coeff 2 2 20.0 +pair_coeff 1 s 0.320852 2.283269 0.814857 +pair_coeff 3 22.721015 0.728733 1.103199 17.695345 6.693621 : pre [Description:] This pair style contains a LAMMPS implementation of the electron Force Field (eFF) potential currently under development at Caltech, as -described in "(Jaramillo-Botero)"_#Jaramillo-Botero. The eFF was -first introduced by "(Su)"_#Su in 2007. +described in "(Jaramillo-Botero)"_#Jaramillo-Botero. The eFF for Z<6 was +first introduced by "(Su)"_#Su in 2007. It has been extended to higher Zs +by using effective core potentials (ECPs) that now cover up to 2nd and 3rd +row p-block elements of the periodic table. eFF can be viewed as an approximation to QM wave packet dynamics and Fermionic molecular dynamics, combining the ability of electronic @@ -135,25 +143,36 @@ individual I,J type pair via the "pair_coeff"_pair_coeff.html command. All type pairs use the same global cutoff specified in the pair_style command. -The {eradius_limit_flag} and {pressure_flag} settings are optional. -Neither or both must be specified. If not specified they are -both set to 0 by default. +The {limit_eradius} and {pressure_with_evirials} settings are optional. +Neither or both must be specified. If not specified they are unset. -The {eradius_limit_flag} is used to restrain electrons from becoming -unbounded in size at very high temperatures were the Gaussian wave +The {limit_eradius} is used to restrain electron size from becoming +excessively diffuse at very high temperatures were the Gaussian wave packet representation breaks down, and from expanding as free -particles to infinite size. A setting of 0 means do not impose this -restraint. A setting of 1 imposes the restraint. The restraining -harmonic potential takes the form E = 1/2k_ss^2 for s > L_box/2, where -k_s = 1 Hartrees/Bohr^2. +particles to infinite size. If unset, electron radius is free to +increase without bounds. If set, a restraining +harmonic potential of the form E = 1/2k_ss^2 for s > L_box/2, where +k_s = 1 Hartrees/Bohr^2, is applied on the electron radius. -The {pressure_flag} is used to control between two types of pressure -computation: if set to 0, the computed pressure does not include the +The {pressure_with_evirials} is used to control between two types of pressure +computation: if unset, the computed pressure does not include the electronic radial virials contributions to the total pressure (scalar -or tensor). If set to 1, the computed pressure will include the +or tensor). If set, the computed pressure will include the electronic radial virial contributions to the total pressure (scalar and tensor). +The {ecp} is used to associate an ECP representation for a particular atom type. +The ECP captures the orbital overlap between a core pseudo particle and valence electrons +within the Pauli repulsion. A list of type:element-symbol pairs may be provided for all +ECP representations, after the "ecp" keyword. + +IMPORTANT NOTE: Default ECP parameters are provided for C, N, O, Al, and Si. +Users can modify these using the {pair_coeff} command as exemplified above. +For this, the User must distinguish between two different functional forms supported, +one that captures the orbital overlap assuming the s-type core interacts with an s-like valence electron (s-s) +and another that assumes the interaction is s-p. For systems that exhibit significant p-character (e.g. C, N, O) +the s-p form is recommended. The "s" ECP form requires 3 parameters and the "p" 5 parameters. + IMPORTANT NOTE: there are two different pressures that can be reported for eFF when defining this pair_style, one (default) that considers electrons do not contribute radial virial components (i.e. electrons @@ -168,26 +187,24 @@ partitioning changes, the total energy remains similar). :line -IMPORTANT NOTE: The currently implemented eFF gives a reasonably -accurate description for systems containing nuclei from Z = 1-6. -Users interested in applying eFF should restrict to systems where -electrons are s-like, or contain p character only insofar as a single -lobe of electron density is shifted away from the nuclear center. See -further details about some of the virtues and current limitations of -the method in "(Jaramillo-Botero)"_#Jaramillo-Botero. +IMPORTANT NOTE: This implemention of eFF gives a reasonably +accurate description for systems containing nuclei from Z = 1-6 in "all electron" representations. +For systems with increasingly non-spherical electrons, Users should use the ECP representations. +ECPs are now supported and validated for most of the 2nd and 3rd row elements of the p-block. +Predefined parameters are provided for C, N, O, Al, and Si. The ECP captures the orbital overlap +between the core and valence electrons (i.e. Pauli repulsion) with one of the functional forms: -Work is underway to extend the eFF to higher Z elements with -increasingly non-spherical electrons (p-block and d-block), to provide -explicit terms for electron correlation/exchange, and to improve its -computational efficiency via atom models with fixed 2 s core electrons -and atom models represented as pseudo-cores plus valence electrons. +:c,image(Eqs/eff_ECP1.jpg) +:c,image(Eqs/eff_ECP2.jpg) -The current version adds support for models with fixed-core and -effective pseudo-core (i.e. effective core pseudopotentials, ECP) +Where the 1st form correspond to core interactions with s-type valence electrons +and the 2nd to core interactions with p-type valence electrons. + +The current version adds full support for models with fixed-core and ECP definitions. to enable larger timesteps (i.e. by avoiding the high frequency vibrational modes -translational and radial- of the 2 s -electrons), and in the ECP case to reduce the p-character effects in -higher Z elements (e.g. Silicon). A fixed-core should be defined with +electrons), and in the ECP case to reduce the increased orbital complexity in higher Z elements (up to Z<18). +A fixed-core should be defined with a mass that includes the corresponding nuclear mass plus the 2 s electrons in atomic mass units (2x5.4857990943e-4), and a radius equivalent to that of minimized 1s electrons (see examples under @@ -268,7 +285,7 @@ atoms. [Default:] -If not specified, eradius_limit_flag = 0 and pressure_flag = 0. +If not specified, limit_eradius = 0 and pressure_with_evirials = 0. :line From 8106d6ed04f97b7048d6bbd65f598f51f74ea7ba Mon Sep 17 00:00:00 2001 From: sjplimp Date: Wed, 2 Jan 2013 16:52:45 +0000 Subject: [PATCH 13/61] git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@9187 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- doc/pair_eff.html | 98 +++++++++++++++++++++++++---------------------- doc/pair_eff.txt | 86 ++++++++++++++++++++++------------------- 2 files changed, 100 insertions(+), 84 deletions(-) diff --git a/doc/pair_eff.html b/doc/pair_eff.html index 5e287f066e..c700843030 100644 --- a/doc/pair_eff.html +++ b/doc/pair_eff.html @@ -15,31 +15,31 @@

pair_style eff/cut cutoff limit_eradius pressure_with_evirials ecp type1 element1 type2 element2 ... typeN elementN

-

cutoff = global cutoff for Coulombic interactions -limit_eradius = limit electron size (optional) -pressure_with_evirials = include electron virials in system pressure (optional) -type1 ... typeN = lammps atom type -element1 ... element2 = element symbol : ul -

+
  • cutoff = global cutoff for Coulombic interactions +
  • limit_eradius = limit electron size (optional) +
  • pressure_with_evirials = include electron virials in system pressure (optional) +
  • type1 ... typeN = LAMMPS atom type +
  • element1 ... element2 = element symbol +

Examples:

-

pair_style eff/cut 39.7 +

pair_style eff/cut 39.7
 pair_style eff/cut 40.0 limit_eradius
 pair_style eff/cut 40.0 limit_eradius pressure_with_evirials
 pair_style eff/cut 40.0 ecp 1 Si 3 C
 pair_coeff * *
 pair_coeff 2 2 20.0
 pair_coeff 1 s 0.320852 2.283269 0.814857 
-pair_coeff 3 22.721015 0.728733 1.103199 17.695345 6.693621 : pre
-

+pair_coeff 3 22.721015 0.728733 1.103199 17.695345 6.693621 +

Description:

This pair style contains a LAMMPS implementation of the electron Force Field (eFF) potential currently under development at Caltech, as -described in (Jaramillo-Botero). The eFF for Z<6 was -first introduced by (Su) in 2007. It has been extended to higher Zs -by using effective core potentials (ECPs) that now cover up to 2nd and 3rd -row p-block elements of the periodic table. +described in (Jaramillo-Botero). The eFF for Z<6 +was first introduced by (Su) in 2007. It has been extended to +higher Zs by using effective core potentials (ECPs) that now cover up +to 2nd and 3rd row p-block elements of the periodic table.

eFF can be viewed as an approximation to QM wave packet dynamics and Fermionic molecular dynamics, combining the ability of electronic @@ -164,17 +164,21 @@ or tensor). If set, the computed pressure will include the electronic radial virial contributions to the total pressure (scalar and tensor).

-

The ecp is used to associate an ECP representation for a particular atom type. -The ECP captures the orbital overlap between a core pseudo particle and valence electrons -within the Pauli repulsion. A list of type:element-symbol pairs may be provided for all -ECP representations, after the "ecp" keyword. +

The ecp is used to associate an ECP representation for a particular +atom type. The ECP captures the orbital overlap between a core pseudo +particle and valence electrons within the Pauli repulsion. A list of +type:element-symbol pairs may be provided for all ECP representations, +after the "ecp" keyword.

-

IMPORTANT NOTE: Default ECP parameters are provided for C, N, O, Al, and Si. -Users can modify these using the pair_coeff command as exemplified above. -For this, the User must distinguish between two different functional forms supported, -one that captures the orbital overlap assuming the s-type core interacts with an s-like valence electron (s-s) -and another that assumes the interaction is s-p. For systems that exhibit significant p-character (e.g. C, N, O) -the s-p form is recommended. The "s" ECP form requires 3 parameters and the "p" 5 parameters. +

IMPORTANT NOTE: Default ECP parameters are provided for C, N, O, Al, +and Si. Users can modify these using the pair_coeff command as +exemplified above. For this, the User must distinguish between two +different functional forms supported, one that captures the orbital +overlap assuming the s-type core interacts with an s-like valence +electron (s-s) and another that assumes the interaction is s-p. For +systems that exhibit significant p-character (e.g. C, N, O) the s-p +form is recommended. The "s" ECP form requires 3 parameters and the +"p" 5 parameters.

IMPORTANT NOTE: there are two different pressures that can be reported for eFF when defining this pair_style, one (default) that considers @@ -190,35 +194,39 @@ partitioning changes, the total energy remains similar).


-

IMPORTANT NOTE: This implemention of eFF gives a reasonably -accurate description for systems containing nuclei from Z = 1-6 in "all electron" representations. -For systems with increasingly non-spherical electrons, Users should use the ECP representations. -ECPs are now supported and validated for most of the 2nd and 3rd row elements of the p-block. -Predefined parameters are provided for C, N, O, Al, and Si. The ECP captures the orbital overlap -between the core and valence electrons (i.e. Pauli repulsion) with one of the functional forms: +

IMPORTANT NOTE: This implemention of eFF gives a reasonably accurate +description for systems containing nuclei from Z = 1-6 in "all +electron" representations. For systems with increasingly +non-spherical electrons, Users should use the ECP representations. +ECPs are now supported and validated for most of the 2nd and 3rd row +elements of the p-block. Predefined parameters are provided for C, N, +O, Al, and Si. The ECP captures the orbital overlap between the core +and valence electrons (i.e. Pauli repulsion) with one of the +functional forms:

-

Where the 1st form correspond to core interactions with s-type valence electrons -and the 2nd to core interactions with p-type valence electrons. -

-

The current version adds full support for models with fixed-core and ECP -definitions. to enable larger timesteps (i.e. by avoiding the high -frequency vibrational modes -translational and radial- of the 2 s -electrons), and in the ECP case to reduce the increased orbital complexity in higher Z elements (up to Z<18). -A fixed-core should be defined with -a mass that includes the corresponding nuclear mass plus the 2 s -electrons in atomic mass units (2x5.4857990943e-4), and a radius -equivalent to that of minimized 1s electrons (see examples under -/examples/USER/eff/fixed-core). An pseudo-core should be described -with a mass that includes the corresponding nuclear mass, plus all the -core electrons (i.e no outer shell electrons), and a radius equivalent -to that of a corresponding minimized full-electron system. The charge -for a pseudo-core atom should be given by the number of outer shell +

Where the 1st form correspond to core interactions with s-type valence +electrons and the 2nd to core interactions with p-type valence electrons.

+

The current version adds full support for models with fixed-core and +ECP definitions. to enable larger timesteps (i.e. by avoiding the +high frequency vibrational modes -translational and radial- of the 2 s +electrons), and in the ECP case to reduce the increased orbital +complexity in higher Z elements (up to Z<18). A fixed-core should be +defined with a mass that includes the corresponding nuclear mass plus +the 2 s electrons in atomic mass units (2x5.4857990943e-4), and a +radius equivalent to that of minimized 1s electrons (see examples +under /examples/USER/eff/fixed-core). An pseudo-core should be +described with a mass that includes the corresponding nuclear mass, +plus all the core electrons (i.e no outer shell electrons), and a +radius equivalent to that of a corresponding minimized full-electron +system. The charge for a pseudo-core atom should be given by the +number of outer shell electrons. +

In general, eFF excels at computing the properties of materials in extreme conditions and tracing the system dynamics over multi-picosend timescales; this is particularly relevant where electron excitations diff --git a/doc/pair_eff.txt b/doc/pair_eff.txt index c79afef59f..cda38f03da 100644 --- a/doc/pair_eff.txt +++ b/doc/pair_eff.txt @@ -15,8 +15,8 @@ pair_style eff/cut cutoff limit_eradius pressure_with_evirials ecp type1 element cutoff = global cutoff for Coulombic interactions limit_eradius = limit electron size (optional) pressure_with_evirials = include electron virials in system pressure (optional) -type1 ... typeN = lammps atom type -element1 ... element2 = element symbol : ul +type1 ... typeN = LAMMPS atom type +element1 ... element2 = element symbol :ul [Examples:] @@ -27,16 +27,16 @@ pair_style eff/cut 40.0 ecp 1 Si 3 C pair_coeff * * pair_coeff 2 2 20.0 pair_coeff 1 s 0.320852 2.283269 0.814857 -pair_coeff 3 22.721015 0.728733 1.103199 17.695345 6.693621 : pre +pair_coeff 3 22.721015 0.728733 1.103199 17.695345 6.693621 :pre [Description:] This pair style contains a LAMMPS implementation of the electron Force Field (eFF) potential currently under development at Caltech, as -described in "(Jaramillo-Botero)"_#Jaramillo-Botero. The eFF for Z<6 was -first introduced by "(Su)"_#Su in 2007. It has been extended to higher Zs -by using effective core potentials (ECPs) that now cover up to 2nd and 3rd -row p-block elements of the periodic table. +described in "(Jaramillo-Botero)"_#Jaramillo-Botero. The eFF for Z<6 +was first introduced by "(Su)"_#Su in 2007. It has been extended to +higher Zs by using effective core potentials (ECPs) that now cover up +to 2nd and 3rd row p-block elements of the periodic table. eFF can be viewed as an approximation to QM wave packet dynamics and Fermionic molecular dynamics, combining the ability of electronic @@ -161,17 +161,21 @@ or tensor). If set, the computed pressure will include the electronic radial virial contributions to the total pressure (scalar and tensor). -The {ecp} is used to associate an ECP representation for a particular atom type. -The ECP captures the orbital overlap between a core pseudo particle and valence electrons -within the Pauli repulsion. A list of type:element-symbol pairs may be provided for all -ECP representations, after the "ecp" keyword. +The {ecp} is used to associate an ECP representation for a particular +atom type. The ECP captures the orbital overlap between a core pseudo +particle and valence electrons within the Pauli repulsion. A list of +type:element-symbol pairs may be provided for all ECP representations, +after the "ecp" keyword. -IMPORTANT NOTE: Default ECP parameters are provided for C, N, O, Al, and Si. -Users can modify these using the {pair_coeff} command as exemplified above. -For this, the User must distinguish between two different functional forms supported, -one that captures the orbital overlap assuming the s-type core interacts with an s-like valence electron (s-s) -and another that assumes the interaction is s-p. For systems that exhibit significant p-character (e.g. C, N, O) -the s-p form is recommended. The "s" ECP form requires 3 parameters and the "p" 5 parameters. +IMPORTANT NOTE: Default ECP parameters are provided for C, N, O, Al, +and Si. Users can modify these using the {pair_coeff} command as +exemplified above. For this, the User must distinguish between two +different functional forms supported, one that captures the orbital +overlap assuming the s-type core interacts with an s-like valence +electron (s-s) and another that assumes the interaction is s-p. For +systems that exhibit significant p-character (e.g. C, N, O) the s-p +form is recommended. The "s" ECP form requires 3 parameters and the +"p" 5 parameters. IMPORTANT NOTE: there are two different pressures that can be reported for eFF when defining this pair_style, one (default) that considers @@ -187,34 +191,38 @@ partitioning changes, the total energy remains similar). :line -IMPORTANT NOTE: This implemention of eFF gives a reasonably -accurate description for systems containing nuclei from Z = 1-6 in "all electron" representations. -For systems with increasingly non-spherical electrons, Users should use the ECP representations. -ECPs are now supported and validated for most of the 2nd and 3rd row elements of the p-block. -Predefined parameters are provided for C, N, O, Al, and Si. The ECP captures the orbital overlap -between the core and valence electrons (i.e. Pauli repulsion) with one of the functional forms: +IMPORTANT NOTE: This implemention of eFF gives a reasonably accurate +description for systems containing nuclei from Z = 1-6 in "all +electron" representations. For systems with increasingly +non-spherical electrons, Users should use the ECP representations. +ECPs are now supported and validated for most of the 2nd and 3rd row +elements of the p-block. Predefined parameters are provided for C, N, +O, Al, and Si. The ECP captures the orbital overlap between the core +and valence electrons (i.e. Pauli repulsion) with one of the +functional forms: :c,image(Eqs/eff_ECP1.jpg) :c,image(Eqs/eff_ECP2.jpg) -Where the 1st form correspond to core interactions with s-type valence electrons -and the 2nd to core interactions with p-type valence electrons. - -The current version adds full support for models with fixed-core and ECP -definitions. to enable larger timesteps (i.e. by avoiding the high -frequency vibrational modes -translational and radial- of the 2 s -electrons), and in the ECP case to reduce the increased orbital complexity in higher Z elements (up to Z<18). -A fixed-core should be defined with -a mass that includes the corresponding nuclear mass plus the 2 s -electrons in atomic mass units (2x5.4857990943e-4), and a radius -equivalent to that of minimized 1s electrons (see examples under -/examples/USER/eff/fixed-core). An pseudo-core should be described -with a mass that includes the corresponding nuclear mass, plus all the -core electrons (i.e no outer shell electrons), and a radius equivalent -to that of a corresponding minimized full-electron system. The charge -for a pseudo-core atom should be given by the number of outer shell +Where the 1st form correspond to core interactions with s-type valence +electrons and the 2nd to core interactions with p-type valence electrons. +The current version adds full support for models with fixed-core and +ECP definitions. to enable larger timesteps (i.e. by avoiding the +high frequency vibrational modes -translational and radial- of the 2 s +electrons), and in the ECP case to reduce the increased orbital +complexity in higher Z elements (up to Z<18). A fixed-core should be +defined with a mass that includes the corresponding nuclear mass plus +the 2 s electrons in atomic mass units (2x5.4857990943e-4), and a +radius equivalent to that of minimized 1s electrons (see examples +under /examples/USER/eff/fixed-core). An pseudo-core should be +described with a mass that includes the corresponding nuclear mass, +plus all the core electrons (i.e no outer shell electrons), and a +radius equivalent to that of a corresponding minimized full-electron +system. The charge for a pseudo-core atom should be given by the +number of outer shell electrons. + In general, eFF excels at computing the properties of materials in extreme conditions and tracing the system dynamics over multi-picosend timescales; this is particularly relevant where electron excitations From 0a4cdacb673518f783b7db5d94247a01b45bef25 Mon Sep 17 00:00:00 2001 From: sjplimp Date: Wed, 2 Jan 2013 16:53:23 +0000 Subject: [PATCH 14/61] git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@9188 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- src/USER-EFF/atom_vec_electron.cpp | 4 + src/USER-EFF/pair_eff_cut.cpp | 335 +++++++++++++++++++---------- src/USER-EFF/pair_eff_cut.h | 5 +- src/USER-EFF/pair_eff_inline.h | 36 ++++ 4 files changed, 266 insertions(+), 114 deletions(-) diff --git a/src/USER-EFF/atom_vec_electron.cpp b/src/USER-EFF/atom_vec_electron.cpp index e1e3bc4104..c8eb874087 100644 --- a/src/USER-EFF/atom_vec_electron.cpp +++ b/src/USER-EFF/atom_vec_electron.cpp @@ -49,6 +49,8 @@ AtomVecElectron::AtomVecElectron(LAMMPS *lmp, int narg, char **arg) : size_data_vel = 5; xcol_data = 6; + atom->ecp_flag = 0; + atom->electron_flag = 1; atom->q_flag = atom->spin_flag = atom->eradius_flag = atom->ervel_flag = atom->erforce_flag = 1; @@ -766,6 +768,8 @@ void AtomVecElectron::data_atom(double *coord, tagint imagetmp, char **values) q[nlocal] = atof(values[2]); spin[nlocal] = atoi(values[3]); + if (spin[nlocal] == 3) atom->ecp_flag = 1; + eradius[nlocal] = atof(values[4]); x[nlocal][0] = coord[0]; diff --git a/src/USER-EFF/pair_eff_cut.cpp b/src/USER-EFF/pair_eff_cut.cpp index ae67bac2a0..737b22c90c 100644 --- a/src/USER-EFF/pair_eff_cut.cpp +++ b/src/USER-EFF/pair_eff_cut.cpp @@ -31,6 +31,7 @@ #include "neigh_list.h" #include "memory.h" #include "error.h" +#include "atom_vec_electron.h" using namespace LAMMPS_NS; @@ -76,7 +77,7 @@ void PairEffCut::compute(int eflag, int vflag) double rsq,rc; int *ilist,*jlist,*numneigh,**firstneigh; - energy = eke = epauli = ecoul = errestrain = 0.0; + energy = eke = epauli = ecp_epauli = ecoul = errestrain = 0.0; // pvector = [KE, Pauli, ecoul, radial_restraint] for (i=0; i<4; i++) pvector[i] = 0.0; @@ -92,6 +93,8 @@ void PairEffCut::compute(int eflag, int vflag) int *type = atom->type; int nlocal = atom->nlocal; + int *id = atom->tag; + int newton_pair = force->newton_pair; double qqrd2e = force->qqrd2e; @@ -101,7 +104,6 @@ void PairEffCut::compute(int eflag, int vflag) firstneigh = list->firstneigh; // loop over neighbors of my atoms - for (ii = 0; ii < inum; ii++) { i = ilist[ii]; xtmp = x[i][0]; @@ -154,7 +156,7 @@ void PairEffCut::compute(int eflag, int vflag) // Tally energy and compute radial atomic virial contribution if (evflag) { ev_tally_eff(i,i,nlocal,newton_pair,energy,0.0); - if (flexible_pressure_flag) // iff flexible pressure flag on + if (pressure_with_evirials_flag) // iff flexible pressure flag on ev_tally_eff(i,i,nlocal,newton_pair,0.0,e1rforce*eradius[i]); } if (eflag_global) { @@ -221,6 +223,12 @@ void PairEffCut::compute(int eflag, int vflag) ElecCoreNuc(qxq, rc, eradius[i], &ecoul, &fpair); } + else if (spin[i] == 4 && spin[j] == 0) { + double qxq = q[i]*q[j]; + + ElecCoreNuc(qxq, rc, eradius[i], &ecoul, &fpair); + } + // nucleus (i) - pseudo-core nucleus (j) interaction else if (spin[i] == 0 && spin[j] == 3) { double qxq = q[i]*q[j]; @@ -228,6 +236,12 @@ void PairEffCut::compute(int eflag, int vflag) ElecCoreNuc(qxq, rc, eradius[j], &ecoul, &fpair); } + else if (spin[i] == 0 && spin[j] == 4) { + double qxq = q[i]*q[j]; + + ElecCoreNuc(qxq, rc, eradius[j], &ecoul, &fpair); + } + // nucleus (i) - electron (j) Coul interaction else if (spin[i] == 0 && abs(spin[j]) == 1) { @@ -239,7 +253,7 @@ void PairEffCut::compute(int eflag, int vflag) erforce[j] += e1rforce; // Radial electron virial, iff flexible pressure flag set - if (evflag && flexible_pressure_flag) { + if (evflag && pressure_with_evirials_flag) { e1rvirial = eradius[j] * e1rforce; ev_tally_eff(j,j,nlocal,newton_pair,0.0,e1rvirial); } @@ -256,7 +270,7 @@ void PairEffCut::compute(int eflag, int vflag) erforce[i] += e1rforce; // Radial electron virial, iff flexible pressure flag set - if (evflag && flexible_pressure_flag) { + if (evflag && pressure_with_evirials_flag) { e1rvirial = eradius[i] * e1rforce; ev_tally_eff(i,i,nlocal,newton_pair,0.0,e1rvirial); } @@ -283,7 +297,7 @@ void PairEffCut::compute(int eflag, int vflag) erforce[j] += e2rforce; // Radial electron virial, iff flexible pressure flag set - if (evflag && flexible_pressure_flag) { + if (evflag && pressure_with_evirials_flag) { e1rvirial = eradius[i] * e1rforce; e2rvirial = eradius[j] * e2rforce; ev_tally_eff(i,j,nlocal,newton_pair,0.0,e1rvirial+e2rvirial); @@ -315,7 +329,7 @@ void PairEffCut::compute(int eflag, int vflag) erforce[j] += e2rforce; // Radial electron virial, iff flexible pressure flag set - if (evflag && flexible_pressure_flag) { + if (evflag && pressure_with_evirials_flag) { e2rvirial = eradius[j] * e2rforce; ev_tally_eff(j,j,nlocal,newton_pair,0.0,e2rvirial); } @@ -347,7 +361,7 @@ void PairEffCut::compute(int eflag, int vflag) erforce[i] += e2rforce; // add radial atomic virial, iff flexible pressure flag set - if (evflag && flexible_pressure_flag) { + if (evflag && pressure_with_evirials_flag) { e2rvirial = eradius[i] * e2rforce; ev_tally_eff(i,i,nlocal,newton_pair,0.0,e2rvirial); } @@ -391,25 +405,48 @@ void PairEffCut::compute(int eflag, int vflag) else if (spin[i] == 3 && (abs(spin[j]) == 1 || spin[j] == 2)) { e2rforce = ecp_e2rforce = 0.0; - if (abs(spin[j]) == 1) { - ElecCoreElec(q[i],rc,eradius[i],eradius[j],&ecoul, - &fpair,&e2rforce); - PauliCoreElec(rc,eradius[j],&ecp_epauli,&ecp_fpair, - &ecp_e2rforce,PAULI_CORE_A, PAULI_CORE_B, - PAULI_CORE_C); - } else { // add second s electron contribution from fixed-core - double qxq = q[i]*q[j]; - ElecCoreNuc(qxq, rc, eradius[j], &ecoul, &fpair); - ElecCoreElec(q[i],rc,eradius[i],eradius[j],&ecoul, - &fpair,&e2rforce); - ElecCoreElec(q[i],rc,eradius[i],eradius[j],&ecoul, - &fpair,&e2rforce); - PauliCoreElec(rc,eradius[j],&ecp_epauli,&ecp_fpair, - &ecp_e2rforce,PAULI_CORE_A, PAULI_CORE_B, - PAULI_CORE_C); - PauliCoreElec(rc,eradius[j],&ecp_epauli,&ecp_fpair, - &ecp_e2rforce,PAULI_CORE_A, PAULI_CORE_B, - PAULI_CORE_C); + if (((PAULI_CORE_D[ecp_type[itype]]) == 0.0) && ((PAULI_CORE_E[ecp_type[itype]]) == 0.0)) { + if (abs(spin[j]) == 1) { + ElecCoreElec(q[i],rc,eradius[i],eradius[j],&ecoul, + &fpair,&e2rforce); + PauliCoreElec(rc,eradius[j],&ecp_epauli,&ecp_fpair, + &ecp_e2rforce,PAULI_CORE_A[ecp_type[itype]], PAULI_CORE_B[ecp_type[itype]], + PAULI_CORE_C[ecp_type[itype]]); + } else { // add second s electron contribution from fixed-core + double qxq = q[i]*q[j]; + ElecCoreNuc(qxq, rc, eradius[j], &ecoul, &fpair); + ElecCoreElec(q[i],rc,eradius[i],eradius[j],&ecoul, + &fpair,&e2rforce); + ElecCoreElec(q[i],rc,eradius[i],eradius[j],&ecoul, + &fpair,&e2rforce); + PauliCoreElec(rc,eradius[j],&ecp_epauli,&ecp_fpair, + &ecp_e2rforce,PAULI_CORE_A[ecp_type[itype]], PAULI_CORE_B[ecp_type[itype]], + PAULI_CORE_C[ecp_type[itype]]); + PauliCoreElec(rc,eradius[j],&ecp_epauli,&ecp_fpair, + &ecp_e2rforce,PAULI_CORE_A[ecp_type[itype]], PAULI_CORE_B[ecp_type[itype]], + PAULI_CORE_C[ecp_type[itype]]); + } + } else { + if (abs(spin[j]) == 1) { + ElecCoreElec(q[i],rc,eradius[i],eradius[j],&ecoul, + &fpair,&e2rforce); + PauliCorePElec(rc,eradius[j],&ecp_epauli,&ecp_fpair, + &ecp_e2rforce,PAULI_CORE_A[ecp_type[itype]],PAULI_CORE_B[ecp_type[itype]], + PAULI_CORE_C[ecp_type[itype]],PAULI_CORE_D[ecp_type[itype]],PAULI_CORE_E[ecp_type[itype]]); + } else { // add second s electron contribution from fixed-core + double qxq = q[i]*q[j]; + ElecCoreNuc(qxq, rc, eradius[j], &ecoul, &fpair); + ElecCoreElec(q[i],rc,eradius[i],eradius[j],&ecoul, + &fpair,&e2rforce); + ElecCoreElec(q[i],rc,eradius[i],eradius[j],&ecoul, + &fpair,&e2rforce); + PauliCorePElec(rc,eradius[j],&ecp_epauli,&ecp_fpair, + &ecp_e2rforce,PAULI_CORE_A[ecp_type[itype]], PAULI_CORE_B[ecp_type[itype]], + PAULI_CORE_C[ecp_type[itype]],PAULI_CORE_D[ecp_type[itype]],PAULI_CORE_E[ecp_type[itype]]); + PauliCorePElec(rc,eradius[j],&ecp_epauli,&ecp_fpair, + &ecp_e2rforce,PAULI_CORE_A[ecp_type[itype]], PAULI_CORE_B[ecp_type[itype]], + PAULI_CORE_C[ecp_type[itype]],PAULI_CORE_D[ecp_type[itype]],PAULI_CORE_E[ecp_type[itype]]); + } } // Apply conversion factor from Hartree to kcal/mol @@ -421,7 +458,7 @@ void PairEffCut::compute(int eflag, int vflag) erforce[j] += e2rforce; // add radial atomic virial, iff flexible pressure flag set - if (evflag && flexible_pressure_flag) { + if (evflag && pressure_with_evirials_flag) { e2rvirial = eradius[j] * e2rforce; ev_tally_eff(j,j,nlocal,newton_pair,0.0,e2rvirial); } @@ -432,25 +469,48 @@ void PairEffCut::compute(int eflag, int vflag) else if ((abs(spin[i]) == 1 || spin[i] == 2) && spin[j] == 3) { e1rforce = ecp_e1rforce = 0.0; - if (abs(spin[i]) == 1) { - ElecCoreElec(q[j],rc,eradius[j],eradius[i],&ecoul, - &fpair,&e1rforce); - PauliCoreElec(rc,eradius[i],&ecp_epauli,&ecp_fpair, - &ecp_e1rforce,PAULI_CORE_A,PAULI_CORE_B, - PAULI_CORE_C); + if (((PAULI_CORE_D[ecp_type[jtype]]) == 0.0) && ((PAULI_CORE_E[ecp_type[jtype]]) == 0.0)) { + if (abs(spin[i]) == 1) { + ElecCoreElec(q[j],rc,eradius[j],eradius[i],&ecoul, + &fpair,&e1rforce); + PauliCoreElec(rc,eradius[i],&ecp_epauli,&ecp_fpair, + &ecp_e1rforce,PAULI_CORE_A[ecp_type[jtype]],PAULI_CORE_B[ecp_type[jtype]], + PAULI_CORE_C[ecp_type[jtype]]); + } else { + double qxq = q[i]*q[j]; + ElecCoreNuc(qxq,rc,eradius[i],&ecoul,&fpair); + ElecCoreElec(q[j],rc,eradius[j],eradius[i],&ecoul, + &fpair,&e1rforce); + ElecCoreElec(q[j],rc,eradius[j],eradius[i],&ecoul, + &fpair,&e1rforce); + PauliCoreElec(rc,eradius[i],&ecp_epauli,&ecp_fpair, + &ecp_e1rforce,PAULI_CORE_A[ecp_type[jtype]], PAULI_CORE_B[ecp_type[jtype]], + PAULI_CORE_C[ecp_type[jtype]]); + PauliCoreElec(rc,eradius[i],&ecp_epauli,&ecp_fpair, + &ecp_e1rforce,PAULI_CORE_A[ecp_type[jtype]], PAULI_CORE_B[ecp_type[jtype]], + PAULI_CORE_C[ecp_type[jtype]]); + } } else { - double qxq = q[i]*q[j]; - ElecCoreNuc(qxq,rc,eradius[i],&ecoul,&fpair); - ElecCoreElec(q[j],rc,eradius[j],eradius[i],&ecoul, - &fpair,&e1rforce); - ElecCoreElec(q[j],rc,eradius[j],eradius[i],&ecoul, - &fpair,&e1rforce); - PauliCoreElec(rc,eradius[i],&ecp_epauli,&ecp_fpair, - &ecp_e1rforce,PAULI_CORE_A, PAULI_CORE_B, - PAULI_CORE_C); - PauliCoreElec(rc,eradius[i],&ecp_epauli,&ecp_fpair, - &ecp_e1rforce,PAULI_CORE_A, PAULI_CORE_B, - PAULI_CORE_C); + if (abs(spin[i]) == 1) { + ElecCoreElec(q[j],rc,eradius[j],eradius[i],&ecoul, + &fpair,&e1rforce); + PauliCorePElec(rc,eradius[i],&ecp_epauli,&ecp_fpair, + &ecp_e1rforce,PAULI_CORE_A[ecp_type[jtype]],PAULI_CORE_B[ecp_type[jtype]], + PAULI_CORE_C[ecp_type[jtype]],PAULI_CORE_D[ecp_type[jtype]],PAULI_CORE_E[ecp_type[jtype]]); + } else { + double qxq = q[i]*q[j]; + ElecCoreNuc(qxq,rc,eradius[i],&ecoul,&fpair); + ElecCoreElec(q[j],rc,eradius[j],eradius[i],&ecoul, + &fpair,&e1rforce); + ElecCoreElec(q[j],rc,eradius[j],eradius[i],&ecoul, + &fpair,&e1rforce); + PauliCorePElec(rc,eradius[i],&ecp_epauli,&ecp_fpair, + &ecp_e1rforce,PAULI_CORE_A[ecp_type[jtype]], PAULI_CORE_B[ecp_type[jtype]], + PAULI_CORE_C[ecp_type[jtype]],PAULI_CORE_D[ecp_type[jtype]],PAULI_CORE_E[ecp_type[jtype]]); + PauliCorePElec(rc,eradius[i],&ecp_epauli,&ecp_fpair, + &ecp_e1rforce,PAULI_CORE_A[ecp_type[jtype]], PAULI_CORE_B[ecp_type[jtype]], + PAULI_CORE_C[ecp_type[jtype]],PAULI_CORE_D[ecp_type[jtype]],PAULI_CORE_E[ecp_type[jtype]]); + } } // Apply conversion factor from Hartree to kcal/mol @@ -462,7 +522,7 @@ void PairEffCut::compute(int eflag, int vflag) erforce[i] += e1rforce; // add radial atomic virial, iff flexible pressure flag set - if (evflag && flexible_pressure_flag) { + if (evflag && pressure_with_evirials_flag) { e1rvirial = eradius[i] * e1rforce; ev_tally_eff(i,i,nlocal,newton_pair,0.0,e1rvirial); } @@ -470,7 +530,7 @@ void PairEffCut::compute(int eflag, int vflag) // pseudo-core (i) - pseudo-core (j) interactions - else if (spin[i] == 3 && abs(spin[j]) == 3) { + else if (spin[i] == 3 && spin[j] == 3) { double qxq = q[i]*q[j]; ElecCoreCore(qxq,rc,eradius[i],eradius[j],&ecoul,&fpair); @@ -527,7 +587,7 @@ void PairEffCut::compute(int eflag, int vflag) // limit electron stifness (size) for periodic systems, to max=half-box-size - if (abs(spin[i]) == 1 && limit_size_flag) { + if (abs(spin[i]) == 1 && limit_eradius_flag) { double half_box_length=0, dr, kfactor=hhmss2e*1.0; e1rforce = errestrain = 0.0; @@ -548,7 +608,7 @@ void PairEffCut::compute(int eflag, int vflag) // Tally radial restrain energy and add radial restrain virial if (evflag) { ev_tally_eff(i,i,nlocal,newton_pair,errestrain,0.0); - if (flexible_pressure_flag) // flexible electron pressure + if (pressure_with_evirials_flag) // flexible electron pressure ev_tally_eff(i,i,nlocal,newton_pair,0.0,eradius[i]*e1rforce); } } @@ -558,7 +618,7 @@ void PairEffCut::compute(int eflag, int vflag) } if (vflag_fdotr) { virial_fdotr_compute(); - if (flexible_pressure_flag) virial_eff_compute(); + if (pressure_with_evirials_flag) virial_eff_compute(); } } @@ -700,46 +760,80 @@ void PairEffCut::allocate() void PairEffCut::settings(int narg, char **arg) { - if (narg != 1 && narg != 3 && narg != 5 && narg != 7) + if (narg < 1) error->all(FLERR,"Illegal pair_style command"); - // Defaults ECP parameters for Si - PAULI_CORE_A = 0.320852; - PAULI_CORE_B = 2.283269; - PAULI_CORE_C = 0.814857; + // Defaults ECP parameters for C (radius=0.154) + PAULI_CORE_A[6] = 22.721015; + PAULI_CORE_B[6] = 0.728733; + PAULI_CORE_C[6] = 1.103199; + PAULI_CORE_D[6] = 17.695345; + PAULI_CORE_E[6] = 6.693621; - if (narg == 1) { - cut_global = force->numeric(arg[0]); - limit_size_flag = 0; - flexible_pressure_flag = 0; - } else if (narg == 3) { - cut_global = force->numeric(arg[0]); - limit_size_flag = force->inumeric(arg[1]); - flexible_pressure_flag = force->inumeric(arg[2]); - } else if (narg == 5) { - cut_global = force->numeric(arg[0]); - limit_size_flag = 0; - flexible_pressure_flag = 0; - if (strcmp(arg[1],"ecp") != 0) - error->all(FLERR,"Illegal pair_style command"); - else { - PAULI_CORE_A = force->numeric(arg[2]); - PAULI_CORE_B = force->numeric(arg[3]); - PAULI_CORE_C = force->numeric(arg[4]); + // Defaults ECP parameters for N (radius=0.394732) + PAULI_CORE_A[7] = 16.242367; + PAULI_CORE_B[7] = 0.602818; + PAULI_CORE_C[7] = 1.081856; + PAULI_CORE_D[7] = 7.150803; + PAULI_CORE_E[7] = 5.351936; + + // Defaults p-element ECP parameters for Oxygen (radius=0.15) + PAULI_CORE_A[8] = 29.5185; + PAULI_CORE_B[8] = 0.32995; + PAULI_CORE_C[8] = 1.21676; + PAULI_CORE_D[8] = 11.98757; + PAULI_CORE_E[8] = 3.073417; + + // Defaults ECP parameters for Al (radius=1.660) + PAULI_CORE_A[13] = 0.486; + PAULI_CORE_B[13] = 1.049; + PAULI_CORE_C[13] = 0.207; + PAULI_CORE_D[13] = 0.0; + PAULI_CORE_E[13] = 0.0; + + // Defaults ECP parameters for Si (radius=1.691) + PAULI_CORE_A[14] = 0.320852; + PAULI_CORE_B[14] = 2.283269; + PAULI_CORE_C[14] = 0.814857; + PAULI_CORE_D[14] = 0.0; + PAULI_CORE_E[14] = 0.0; + + cut_global = force->numeric(arg[0]); + limit_eradius_flag = 0; + pressure_with_evirials_flag = 0; + + int atype; + int iarg = 1; + int ecp_found = 0; + + while (iarg < narg) { + if (strcmp(arg[iarg],"limit_eradius") == 0) { + limit_eradius_flag = 1; + iarg += 1; } - } else if (narg == 7) { - cut_global = force->numeric(arg[0]); - limit_size_flag = force->inumeric(arg[1]); - flexible_pressure_flag = force->inumeric(arg[2]); - if (strcmp(arg[3],"ecp") != 0) - error->all(FLERR,"Illegal pair_style command"); - else { - PAULI_CORE_A = force->numeric(arg[4]); - PAULI_CORE_B = force->numeric(arg[5]); - PAULI_CORE_C = force->numeric(arg[6]); + else if (strcmp(arg[iarg],"pressure_with_evirials") == 0) { + pressure_with_evirials_flag = 1; + iarg += 1; + } + else if (strcmp(arg[iarg],"ecp") == 0) { + iarg += 1; + while (iarg < narg) { + atype = force->inumeric(arg[iarg]); + if (strcmp(arg[iarg+1],"C") == 0) ecp_type[atype] = 6; + else if (strcmp(arg[iarg+1],"N") == 0) ecp_type[atype] = 7; + else if (strcmp(arg[iarg+1],"O") == 0) ecp_type[atype] = 8; + else if (strcmp(arg[iarg+1],"Al") == 0) ecp_type[atype] = 13; + else if (strcmp(arg[iarg+1],"Si") == 0) ecp_type[atype] = 14; + else error->all(FLERR, "Note: there are no default parameters for this atom ECP\n"); + iarg += 2; + ecp_found = 1; + } } } + if (!ecp_found && atom->ecp_flag) + error->all(FLERR,"Need to specify ECP type on pair_style command"); + // Need to introduce 2 new constants w/out changing update.cpp if (force->qqr2e==332.06371) { // i.e. Real units chosen h2e = 627.509; // hartree->kcal/mol @@ -759,34 +853,6 @@ void PairEffCut::settings(int narg, char **arg) } } -/* ---------------------------------------------------------------------- - set coeffs for one or more type pairs -------------------------------------------------------------------------- */ - -void PairEffCut::coeff(int narg, char **arg) -{ - if (narg < 2 || narg > 3) error->all(FLERR,"Incorrect args for pair coefficients"); - if (!allocated) allocate(); - - int ilo,ihi,jlo,jhi; - force->bounds(arg[0],atom->ntypes,ilo,ihi); - force->bounds(arg[1],atom->ntypes,jlo,jhi); - - double cut_one = cut_global; - if (narg == 3) cut_one = atof(arg[2]); - - int count = 0; - for (int i = ilo; i <= ihi; i++) { - for (int j = MAX(jlo,i); j <= jhi; j++) { - cut[i][j] = cut_one; - setflag[i][j] = 1; - count++; - } - } - - if (count == 0) error->all(FLERR,"Incorrect args for pair coefficients"); -} - /* ---------------------------------------------------------------------- init specific to this pair style ------------------------------------------------------------------------- */ @@ -817,6 +883,51 @@ void PairEffCut::init_style() int irequest = neighbor->request(this); } +/* ---------------------------------------------------------------------- + set coeffs for one or more type electron pairs (ECP-only) +------------------------------------------------------------------------- */ + +void PairEffCut::coeff(int narg, char **arg) +{ + if (!allocated) allocate(); + + if ((strcmp(arg[0],"*") == 0) || (strcmp(arg[1],"*") == 0)) { + int ilo,ihi,jlo,jhi; + force->bounds(arg[0],atom->ntypes,ilo,ihi); + force->bounds(arg[1],atom->ntypes,jlo,jhi); + + double cut_one = cut_global; + if (narg == 3) cut_one = atof(arg[2]); + + int count = 0; + for (int i = ilo; i <= ihi; i++) { + for (int j = MAX(jlo,i); j <= jhi; j++) { + cut[i][j] = cut_one; + setflag[i][j] = 1; + count++; + } + } + if (count == 0) error->all(FLERR,"Incorrect args for pair coefficients"); + } else { + int ecp; + ecp = force->inumeric(arg[0]); + if (strcmp(arg[1],"s") ==0) { + PAULI_CORE_A[ecp_type[ecp]] = force->numeric(arg[2]); + PAULI_CORE_B[ecp_type[ecp]] = force->numeric(arg[3]); + PAULI_CORE_C[ecp_type[ecp]] = force->numeric(arg[4]); + PAULI_CORE_D[ecp_type[ecp]] = 0.0; + PAULI_CORE_E[ecp_type[ecp]] = 0.0; + } else if (strcmp(arg[1],"p") ==0) { + PAULI_CORE_A[ecp_type[ecp]] = force->numeric(arg[2]); + PAULI_CORE_B[ecp_type[ecp]] = force->numeric(arg[3]); + PAULI_CORE_C[ecp_type[ecp]] = force->numeric(arg[4]); + PAULI_CORE_D[ecp_type[ecp]] = force->numeric(arg[5]); + PAULI_CORE_E[ecp_type[ecp]] = force->numeric(arg[6]); + } else error->all(FLERR,"Illegal pair_coeff command"); + } +} + + /* ---------------------------------------------------------------------- init for one type pair i,j and corresponding j,i ------------------------------------------------------------------------- */ diff --git a/src/USER-EFF/pair_eff_cut.h b/src/USER-EFF/pair_eff_cut.h index 0253359883..75ef2b436c 100644 --- a/src/USER-EFF/pair_eff_cut.h +++ b/src/USER-EFF/pair_eff_cut.h @@ -45,10 +45,11 @@ class PairEffCut : public Pair { double memory_usage(); private: - int limit_size_flag, flexible_pressure_flag; + int limit_eradius_flag, pressure_with_evirials_flag; double cut_global; double **cut; - double PAULI_CORE_A, PAULI_CORE_B, PAULI_CORE_C; + int ecp_type[100]; + double PAULI_CORE_A[100], PAULI_CORE_B[100], PAULI_CORE_C[100], PAULI_CORE_D[100], PAULI_CORE_E[100]; double hhmss2e, h2e; int nmax; diff --git a/src/USER-EFF/pair_eff_inline.h b/src/USER-EFF/pair_eff_inline.h index 30aad413b8..b29f4de66c 100644 --- a/src/USER-EFF/pair_eff_inline.h +++ b/src/USER-EFF/pair_eff_inline.h @@ -494,6 +494,42 @@ inline void PauliCoreElec(double rc, double re2, double *epauli, double *frc, /* ---------------------------------------------------------------------- */ +inline void PauliCorePElec(double rc, double re2, double *epauli, double *frc, + double *fre2, double PAULI_CORE_P_A, + double PAULI_CORE_P_B, double PAULI_CORE_P_C, + double PAULI_CORE_P_D, double PAULI_CORE_P_E) +{ + double E, dEdrc, dEdre2; + + E = PAULI_CORE_P_A * + pow((2.0 / (PAULI_CORE_P_B / re2 + re2 / PAULI_CORE_P_B)), 5.0) * + pow((rc - PAULI_CORE_P_C * re2), 2.0) * exp(-PAULI_CORE_P_D * + pow((rc - PAULI_CORE_P_C * re2), 2.0) / (PAULI_CORE_P_E + re2 * re2)); + + dEdrc = PAULI_CORE_P_A * + pow((2.0 / (PAULI_CORE_P_B / re2 + re2 / PAULI_CORE_P_B)), 5.0) * + 2.0 * (rc - PAULI_CORE_P_C * re2) * exp(-PAULI_CORE_P_D * + pow((rc - PAULI_CORE_P_C * re2), 2.0) / (PAULI_CORE_P_E + re2 * re2)) + + E * (-PAULI_CORE_P_D * 2.0 * (rc - PAULI_CORE_P_C * re2) / + (PAULI_CORE_P_E + re2 * re2)); + + dEdre2 = E * (-5.0 / (PAULI_CORE_P_B / re2 + re2 / PAULI_CORE_P_B) * + (-PAULI_CORE_P_B / (re2 * re2) + 1.0 / PAULI_CORE_P_B)) + + PAULI_CORE_P_A * + pow((2.0 / (PAULI_CORE_P_B / re2 + re2 / PAULI_CORE_P_B)), 5.0) * + 2.0 * (rc - PAULI_CORE_P_C * re2) * (-PAULI_CORE_P_C) * + exp(-PAULI_CORE_P_D * pow((rc - PAULI_CORE_P_C * re2), 2.0) / + (PAULI_CORE_P_E + re2 * re2)) + E * (2.0 * PAULI_CORE_P_D * + (rc - PAULI_CORE_P_C * re2) * (PAULI_CORE_P_C * PAULI_CORE_P_E + + rc * re2) / pow((PAULI_CORE_P_E + re2 * re2), 2.0)); + + *epauli += E; + *frc -= dEdrc; + *fre2 -= dEdre2; +} + +/* ---------------------------------------------------------------------- */ + inline void RForce(double dx, double dy, double dz, double rc, double force, double *fx, double *fy, double *fz) { From f678e2afa9c4970bf7a7ca2a089bcf0410b35a63 Mon Sep 17 00:00:00 2001 From: sjplimp Date: Wed, 2 Jan 2013 16:54:17 +0000 Subject: [PATCH 15/61] git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@9189 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- src/atom.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/atom.h b/src/atom.h index bc49b11382..a87b66fed5 100644 --- a/src/atom.h +++ b/src/atom.h @@ -90,6 +90,7 @@ class Atom : protected Pointers { // customize by adding new flag int sphere_flag,ellipsoid_flag,line_flag,tri_flag,peri_flag,electron_flag; + int ecp_flag; int wavepacket_flag,sph_flag; int molecule_flag,q_flag,mu_flag; From 47fcc6f93b111cb69209740d483b07f4a3c0de2f Mon Sep 17 00:00:00 2001 From: sjplimp Date: Wed, 2 Jan 2013 16:59:48 +0000 Subject: [PATCH 16/61] git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@9190 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- src/version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/version.h b/src/version.h index dd7c02ca68..06114886c1 100644 --- a/src/version.h +++ b/src/version.h @@ -1 +1 @@ -#define LAMMPS_VERSION "3 Jan 2013" +#define LAMMPS_VERSION "4 Jan 2013" From c3ed94c40c1a67ee615bc90e145de2be24917073 Mon Sep 17 00:00:00 2001 From: sjplimp Date: Wed, 2 Jan 2013 17:30:37 +0000 Subject: [PATCH 17/61] git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@9193 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- src/MOLECULE/pair_hbond_dreiding_lj.cpp | 2 +- src/MOLECULE/pair_hbond_dreiding_morse.cpp | 6 +++--- src/USER-OMP/pair_hbond_dreiding_morse_omp.cpp | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/MOLECULE/pair_hbond_dreiding_lj.cpp b/src/MOLECULE/pair_hbond_dreiding_lj.cpp index c5fd2b0269..200b344e1d 100644 --- a/src/MOLECULE/pair_hbond_dreiding_lj.cpp +++ b/src/MOLECULE/pair_hbond_dreiding_lj.cpp @@ -289,7 +289,7 @@ void PairHbondDreidingLJ::settings(int narg, char **arg) void PairHbondDreidingLJ::coeff(int narg, char **arg) { - if (narg < 6 || narg > 9) + if (narg < 6 || narg > 10) error->all(FLERR,"Incorrect args for pair coefficients"); if (!allocated) allocate(); diff --git a/src/MOLECULE/pair_hbond_dreiding_morse.cpp b/src/MOLECULE/pair_hbond_dreiding_morse.cpp index 044946bd13..07010c588d 100644 --- a/src/MOLECULE/pair_hbond_dreiding_morse.cpp +++ b/src/MOLECULE/pair_hbond_dreiding_morse.cpp @@ -139,10 +139,10 @@ void PairHbondDreidingMorse::compute(int eflag, int vflag) r = sqrt(rsq); dr = r - pm->r0; dexp = exp(-pm->alpha * dr); + eng_morse = pm->d0 * (dexp*dexp - 2.0*dexp); force_kernel = pm->morse1*(dexp*dexp - dexp)/r * pow(c,(double)pm->ap); force_angle = pm->ap * eng_morse * pow(c,pm->ap-1.0)*s; - eng_morse = pm->d0 * (dexp*dexp - 2.0*dexp); if (rsq > pm->cut_innersq) { switch1 = (pm->cut_outersq-rsq) * (pm->cut_outersq-rsq) * (pm->cut_outersq + 2.0*rsq - 3.0*pm->cut_innersq) / @@ -215,7 +215,7 @@ void PairHbondDreidingMorse::compute(int eflag, int vflag) void PairHbondDreidingMorse::coeff(int narg, char **arg) { - if (narg < 8 || narg > 11) + if (narg < 7 || narg > 11) error->all(FLERR,"Incorrect args for pair coefficients"); if (!allocated) allocate(); @@ -415,10 +415,10 @@ double PairHbondDreidingMorse::single(int i, int j, int itype, int jtype, r = sqrt(rsq); dr = r - pm->r0; dexp = exp(-pm->alpha * dr); + eng_morse = pm->d0 * (dexp*dexp - 2.0*dexp); //<-- BUGFIX 2012-11-14 force_kernel = pm->morse1*(dexp*dexp - dexp)/r * pow(c,(double)pm->ap); force_angle = pm->ap * eng_morse * pow(c,pm->ap-1.0)*s; - eng_morse = pm->d0 * (dexp*dexp - 2.0*dexp); if (rsq > pm->cut_innersq) { switch1 = (pm->cut_outersq-rsq) * (pm->cut_outersq-rsq) * (pm->cut_outersq + 2.0*rsq - 3.0*pm->cut_innersq) / diff --git a/src/USER-OMP/pair_hbond_dreiding_morse_omp.cpp b/src/USER-OMP/pair_hbond_dreiding_morse_omp.cpp index 3dccd98dbf..546d73d2ad 100644 --- a/src/USER-OMP/pair_hbond_dreiding_morse_omp.cpp +++ b/src/USER-OMP/pair_hbond_dreiding_morse_omp.cpp @@ -211,10 +211,10 @@ void PairHbondDreidingMorseOMP::eval(int iifrom, int iito, ThrData * const thr) r = sqrt(rsq); dr = r - pm->r0; dexp = exp(-pm->alpha * dr); + eng_morse = pm->d0 * (dexp*dexp - 2.0*dexp); force_kernel = pm->morse1*(dexp*dexp - dexp)/r * pow(c,(double)pm->ap); force_angle = pm->ap * eng_morse * pow(c,(double)pm->ap-1.0)*s; - eng_morse = pm->d0 * (dexp*dexp - 2.0*dexp); if (rsq > pm->cut_innersq) { switch1 = (pm->cut_outersq-rsq) * (pm->cut_outersq-rsq) * (pm->cut_outersq + 2.0*rsq - 3.0*pm->cut_innersq) / From da634ab53290ced75b360b08cdbc8e369152d2a3 Mon Sep 17 00:00:00 2001 From: sjplimp Date: Wed, 2 Jan 2013 17:39:23 +0000 Subject: [PATCH 18/61] git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@9194 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- doc/pair_hbond_dreiding.html | 43 ++++++++++++++++++++++++++---------- doc/pair_hbond_dreiding.txt | 43 ++++++++++++++++++++++++++---------- 2 files changed, 62 insertions(+), 24 deletions(-) diff --git a/doc/pair_hbond_dreiding.html b/doc/pair_hbond_dreiding.html index 3dbf6479ee..0a345ead85 100644 --- a/doc/pair_hbond_dreiding.html +++ b/doc/pair_hbond_dreiding.html @@ -30,13 +30,11 @@

Examples:

-
pair_style hbond/dreiding/lj 4 4.5 5.0 90
-pair_coeff * * 3 i 100.0 3.1
-pair_coeff * * 2*5 i 100.0 3.1 2 15.0 20.0 135.0 
+
pair_style hybrid/overlay lj/cut 10.0 hbond/dreiding/lj 4 9.0 11.0 90
+pair_coeff 1 2 hbond/dreiding/lj 3 i 9.5 2.75 4 9.0 11.0 90.0 
 
-
pair_style hbond/dreiding/morse 2 3.0 4.6 75.0 
-pair_coeff * * 3 j 100.0 1.0 2.0
-pair_coeff * * 2*5 j 100.0 1.0 2.0 4.0 6.0 
+
pair_style hybrid/overlay lj/cut 10.0 hbond/dreiding/morse 2 9.0 11.0 90
+pair_coeff 1 2 hbond/dreiding/morse 3 i 3.88 1.7241379 2.9 2 9 11 90 
 

Description:

@@ -76,11 +74,30 @@ when n = 2.

See this howto section of the manual for more information on the DREIDING forcefield.

-

Because the Dreiding hydrogen bond potential is only one portion of -an overall force field which typically includes other pairwise -interactions, it is common to use it as a sub-style in a pair_style -hybrid or hybrid/overlay command. +

IMPORTANT NOTE: Because the Dreiding hydrogen bond potential is only +one portion of an overall force field which typically includes other +pairwise interactions, it is common to use it as a sub-style in a +pair_style hybrid/overlay command, where another +pair style provides the repulsive core interaction between pairs of +atoms, e.g. a 1/r^12 Lennard-Jones repulsion.

+

IMPORTANT NOTE: When using the hbond/dreiding pair styles with +pair_style hybrid/overlay, you should explicitly +define pair interactions between the donor atom and acceptor atoms, +(as well as between these atoms and ALL other atoms in your system). +Whenever pair_style hybrid/overlay is used, +ordinary mixing rules are not applied to atoms like the donor and +acceptor atoms because they are typically referenced in multiple pair +styles. Neglecting to do this can cause difficult-to-detect physics +problems. +

+

IMPORTANT NOTE: In the original Dreiding force field paper 1-4 +non-bonded interactions ARE allowed. If this is desired for your +model, use the special_bonds command (e.g. "special_bonds lj 0.0 0.0 +1.0") to turn these interactions on. +

+
+

The following coefficients must be defined for pairs of eligible donor/acceptor types via the pair_coeff command as in the examples above. @@ -109,7 +126,8 @@ follows:

  • epsilon (energy units)
  • sigma (distance units)
  • n = exponent in formula above -
  • distance cutoff (distance units) +
  • distance cutoff Rin (distance units) +
  • distance cutoff Rout (distance units)
  • angle cutoff (degrees)

    For the hbond/dreiding/morse style the list of coefficients is as @@ -121,7 +139,8 @@ follows:

  • alpha (1/distance units)
  • r0 (distance units)
  • n = exponent in formula above -
  • distance cutoff (distance units) +
  • distance cutoff Rin (distance units) +
  • distance cutoff Rout (distance units)
  • angle cutoff (degrees)

    A single hydrogen atom type K can be specified, or a wild-card diff --git a/doc/pair_hbond_dreiding.txt b/doc/pair_hbond_dreiding.txt index 1c41da09ce..6e4d9ae540 100644 --- a/doc/pair_hbond_dreiding.txt +++ b/doc/pair_hbond_dreiding.txt @@ -24,13 +24,11 @@ interactions (degrees) :ul [Examples:] -pair_style hbond/dreiding/lj 4 4.5 5.0 90 -pair_coeff * * 3 i 100.0 3.1 -pair_coeff * * 2*5 i 100.0 3.1 2 15.0 20.0 135.0 :pre +pair_style hybrid/overlay lj/cut 10.0 hbond/dreiding/lj 4 9.0 11.0 90 +pair_coeff 1 2 hbond/dreiding/lj 3 i 9.5 2.75 4 9.0 11.0 90.0 :pre -pair_style hbond/dreiding/morse 2 3.0 4.6 75.0 -pair_coeff * * 3 j 100.0 1.0 2.0 -pair_coeff * * 2*5 j 100.0 1.0 2.0 4.0 6.0 :pre +pair_style hybrid/overlay lj/cut 10.0 hbond/dreiding/morse 2 9.0 11.0 90 +pair_coeff 1 2 hbond/dreiding/morse 3 i 3.88 1.7241379 2.9 2 9 11 90 :pre [Description:] @@ -70,10 +68,29 @@ when n = 2. See this "howto section"_Section_howto.html#howto_4 of the manual for more information on the DREIDING forcefield. -Because the Dreiding hydrogen bond potential is only one portion of -an overall force field which typically includes other pairwise -interactions, it is common to use it as a sub-style in a "pair_style -hybrid or hybrid/overlay"_pair_hybrid.html command. +IMPORTANT NOTE: Because the Dreiding hydrogen bond potential is only +one portion of an overall force field which typically includes other +pairwise interactions, it is common to use it as a sub-style in a +"pair_style hybrid/overlay"_pair_hybrid.html command, where another +pair style provides the repulsive core interaction between pairs of +atoms, e.g. a 1/r^12 Lennard-Jones repulsion. + +IMPORTANT NOTE: When using the hbond/dreiding pair styles with +"pair_style hybrid/overlay"_pair_hybrid.html, you should explicitly +define pair interactions between the donor atom and acceptor atoms, +(as well as between these atoms and ALL other atoms in your system). +Whenever "pair_style hybrid/overlay"_pair_hybrid.html is used, +ordinary mixing rules are not applied to atoms like the donor and +acceptor atoms because they are typically referenced in multiple pair +styles. Neglecting to do this can cause difficult-to-detect physics +problems. + +IMPORTANT NOTE: In the original Dreiding force field paper 1-4 +non-bonded interactions ARE allowed. If this is desired for your +model, use the special_bonds command (e.g. "special_bonds lj 0.0 0.0 +1.0") to turn these interactions on. + +:line The following coefficients must be defined for pairs of eligible donor/acceptor types via the "pair_coeff"_pair_coeff.html command as @@ -103,7 +120,8 @@ donor flag = {i} or {j} epsilon (energy units) sigma (distance units) n = exponent in formula above -distance cutoff (distance units) +distance cutoff Rin (distance units) +distance cutoff Rout (distance units) angle cutoff (degrees) :ul For the {hbond/dreiding/morse} style the list of coefficients is as @@ -115,7 +133,8 @@ D0 (energy units) alpha (1/distance units) r0 (distance units) n = exponent in formula above -distance cutoff (distance units) +distance cutoff Rin (distance units) +distance cutoff Rout (distance units) angle cutoff (degrees) :ul A single hydrogen atom type K can be specified, or a wild-card From fcc96239984aa1989665c16d24672e9c310395ff Mon Sep 17 00:00:00 2001 From: sjplimp Date: Wed, 2 Jan 2013 17:43:34 +0000 Subject: [PATCH 19/61] git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@9195 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- src/version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/version.h b/src/version.h index 06114886c1..458ff4158e 100644 --- a/src/version.h +++ b/src/version.h @@ -1 +1 @@ -#define LAMMPS_VERSION "4 Jan 2013" +#define LAMMPS_VERSION "5 Jan 2013" From 72aa99b5b3dd422bab901ef70c57ba4b2160051b Mon Sep 17 00:00:00 2001 From: athomps Date: Wed, 2 Jan 2013 20:30:55 +0000 Subject: [PATCH 20/61] Increased MIN_ALPHA_FAC for line forcezero git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@9198 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- src/min_linesearch.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/min_linesearch.cpp b/src/min_linesearch.cpp index 5ddf719ca9..eda07c67a5 100644 --- a/src/min_linesearch.cpp +++ b/src/min_linesearch.cpp @@ -607,7 +607,7 @@ int MinLineSearch::linemin_forcezero(double eoriginal, double &alpha) // fraction to which we want to reduce the directional derivative double GRAD_TOL = 0.1; // largest alpha increment which will trigger a failed_linesearch - double MIN_ALPHA_FAC = 1e-20; + double MIN_ALPHA_FAC = 1e-14; double LIMIT_BOOST = 4.0; // fdothall = projection of search dir along downhill gradient From cf4ed82081bcbea7b8568469d85af3ab16aa6560 Mon Sep 17 00:00:00 2001 From: sjplimp Date: Thu, 3 Jan 2013 00:26:04 +0000 Subject: [PATCH 21/61] git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@9199 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- src/DIPOLE/atom_vec_dipole.cpp | 2 +- src/fix_print.cpp | 23 +++-- src/fix_print.h | 1 + src/input.cpp | 150 ++++++++++++++++++++------------- src/input.h | 13 +-- src/thermo.cpp | 15 ++-- 6 files changed, 121 insertions(+), 83 deletions(-) diff --git a/src/DIPOLE/atom_vec_dipole.cpp b/src/DIPOLE/atom_vec_dipole.cpp index 25377ae828..acd35a1b9c 100644 --- a/src/DIPOLE/atom_vec_dipole.cpp +++ b/src/DIPOLE/atom_vec_dipole.cpp @@ -41,7 +41,7 @@ AtomVecDipole::AtomVecDipole(LAMMPS *lmp, int narg, char **arg) : size_border = 11; size_velocity = 3; size_data_atom = 9; - size_data_vel = 7; + size_data_vel = 4; xcol_data = 4; atom->q_flag = atom->mu_flag = 1; diff --git a/src/fix_print.cpp b/src/fix_print.cpp index 614dbc4c5c..5db6b096da 100644 --- a/src/fix_print.cpp +++ b/src/fix_print.cpp @@ -18,13 +18,12 @@ #include "input.h" #include "modify.h" #include "variable.h" +#include "memory.h" #include "error.h" using namespace LAMMPS_NS; using namespace FixConst; -#define MAXLINE 1024 - /* ---------------------------------------------------------------------- */ FixPrint::FixPrint(LAMMPS *lmp, int narg, char **arg) : @@ -40,6 +39,10 @@ FixPrint::FixPrint(LAMMPS *lmp, int narg, char **arg) : string = new char[n]; strcpy(string,arg[4]); + copy = (char *) memory->smalloc(n*sizeof(char),"fix/print:copy"); + work = (char *) memory->smalloc(n*sizeof(char),"fix/print:work"); + maxcopy = maxwork = n; + // parse optional args fp = NULL; @@ -85,9 +88,6 @@ FixPrint::FixPrint(LAMMPS *lmp, int narg, char **arg) : delete [] title; - copy = new char[MAXLINE]; - work = new char[MAXLINE]; - // add nfirst to all computes that store invocation times // since don't know a priori which are invoked via variables by this fix // once in end_of_step() can set timestep for ones actually invoked @@ -101,8 +101,8 @@ FixPrint::FixPrint(LAMMPS *lmp, int narg, char **arg) : FixPrint::~FixPrint() { delete [] string; - delete [] copy; - delete [] work; + memory->sfree(copy); + memory->sfree(work); if (fp && me == 0) fclose(fp); } @@ -128,16 +128,15 @@ void FixPrint::end_of_step() modify->clearstep_compute(); strcpy(copy,string); - input->substitute(copy,0); - strcat(copy,"\n"); + input->substitute(copy,work,maxcopy,maxwork,0); modify->addstep_compute(update->ntimestep + nevery); if (me == 0) { - if (screenflag && screen) fprintf(screen,"%s",copy); - if (screenflag && logfile) fprintf(logfile,"%s",copy); + if (screenflag && screen) fprintf(screen,"%s\n",copy); + if (screenflag && logfile) fprintf(logfile,"%s\n",copy); if (fp) { - fprintf(fp,"%s",copy); + fprintf(fp,"%s\n",copy); fflush(fp); } } diff --git a/src/fix_print.h b/src/fix_print.h index 35c18d78f2..8cba1093cd 100644 --- a/src/fix_print.h +++ b/src/fix_print.h @@ -36,6 +36,7 @@ class FixPrint : public Fix { int me,screenflag; FILE *fp; char *string,*copy,*work; + int maxcopy,maxwork; }; } diff --git a/src/input.cpp b/src/input.cpp index 3ec89cd44b..e1ce285185 100644 --- a/src/input.cpp +++ b/src/input.cpp @@ -52,7 +52,7 @@ using namespace LAMMPS_NS; -#define MAXLINE 8192 +#define DELTALINE 256 #define DELTA 4 /* ---------------------------------------------------------------------- */ @@ -61,9 +61,8 @@ Input::Input(LAMMPS *lmp, int argc, char **argv) : Pointers(lmp) { MPI_Comm_rank(world,&me); - line = new char[MAXLINE]; - copy = new char[MAXLINE]; - work = new char[MAXLINE]; + maxline = maxcopy = maxwork = 0; + line = copy = work = NULL; narg = maxarg = 0; arg = NULL; @@ -112,13 +111,13 @@ Input::~Input() // don't free command and arg strings // they just point to other allocated memory - delete variable; - delete [] line; - delete [] copy; - delete [] work; + memory->sfree(line); + memory->sfree(copy); + memory->sfree(work); if (labelstr) delete [] labelstr; memory->sfree(arg); memory->sfree(infiles); + delete variable; } /* ---------------------------------------------------------------------- @@ -133,19 +132,28 @@ void Input::file() while (1) { // read a line from input script - // if line ends in continuation char '&', concatenate next line(s) // n = length of line including str terminator, 0 if end of file - // m = position of last printable char in line or -1 if blank line + // if line ends in continuation char '&', concatenate next line if (me == 0) { m = 0; while (1) { - if (fgets(&line[m],MAXLINE-m,infile) == NULL) n = 0; - else n = strlen(line) + 1; - if (n == 0) break; - m = n-2; + if (maxline-m < 2) reallocate(line,maxline,0); + if (fgets(&line[m],maxline-m,infile) == NULL) { + if (m) n = strlen(line) + 1; + else n = 0; + break; + } + m = strlen(line); + if (line[m-1] != '\n') continue; + + m--; while (m >= 0 && isspace(line[m])) m--; - if (m < 0 || line[m] != '&') break; + if (m < 0 || line[m] != '&') { + line[m+1] = '\0'; + n = m+2; + break; + } } } @@ -168,16 +176,9 @@ void Input::file() continue; } + if (n > maxline) reallocate(line,maxline,n); MPI_Bcast(line,n,MPI_CHAR,0,world); - // if n = MAXLINE, line is too long - - if (n == MAXLINE) { - char str[MAXLINE+32]; - sprintf(str,"Input line too long: %s",line); - error->all(FLERR,str); - } - // echo the command unless scanning for label if (me == 0 && label_active == 0) { @@ -198,7 +199,7 @@ void Input::file() // execute the command if (execute_command()) { - char str[MAXLINE]; + char str[maxline+32]; sprintf(str,"Unknown command: %s",line); error->all(FLERR,str); } @@ -260,7 +261,7 @@ char *Input::one(const char *single) // execute the command and return its name if (execute_command()) { - char str[MAXLINE]; + char str[maxline+32]; sprintf(str,"Unknown command: %s",line); error->all(FLERR,str); } @@ -269,7 +270,7 @@ char *Input::one(const char *single) } /* ---------------------------------------------------------------------- - parse copy of command line + parse copy of command line by inserting string terminators strip comment = all chars from # on replace all $ via variable substitution command = first word @@ -280,8 +281,10 @@ char *Input::one(const char *single) void Input::parse() { - // make a copy to work on + // duplicate line into copy string to break into words + int n = strlen(line) + 1; + if (n > maxcopy) reallocate(copy,maxcopy,n); strcpy(copy,line); // strip any # comment by replacing it with 0 @@ -302,16 +305,16 @@ void Input::parse() // perform $ variable substitution (print changes) // except if searching for a label since earlier variable may not be defined - if (!label_active) substitute(copy,1); + if (!label_active) substitute(copy,work,maxcopy,maxwork,1); - // command = 1st arg + // command = 1st arg in copy string char *next; command = nextword(copy,&next); if (command == NULL) return; - // point arg[] at each subsequent arg - // nextword() inserts zeroes in copy to delimit args + // point arg[] at each subsequent arg in copy string + // nextword() inserts string terminators into copy string to delimit args // nextword() treats text between single/double quotes as one arg narg = 0; @@ -363,23 +366,29 @@ char *Input::nextword(char *str, char **next) /* ---------------------------------------------------------------------- substitute for $ variables in str and return it - str assumed to be long enough to hold expanded version + reallocate str/str2 to hold expanded version if necessary & reset max1/max2 print updated string if flag is set and not searching for label + label_active will be 0 if called from external class ------------------------------------------------------------------------- */ -void Input::substitute(char *str, int flag) +void Input::substitute(char *&str, char *&str2, int &max1, int &max2, int flag) { - // use work[] as scratch space to expand str, then copy back to str + // use str2 as scratch space to expand str, then copy back to str + // reallocate str and str2 as necessary // do not replace $ inside single/double quotes // var = pts at variable name, ended by NULL // if $ is followed by '{', trailing '}' becomes NULL // else $x becomes x followed by NULL // beyond = pts at text following variable + int n; char *var,*value,*beyond; char quote = '\0'; char *ptr = str; + n = strlen(str) + 1; + if (n > max2) reallocate(str2,max2,n); + while (*ptr) { if (*ptr == '$' && !quote) { if (*(ptr+1) == '{') { @@ -399,14 +408,13 @@ void Input::substitute(char *str, int flag) if (value == NULL) error->one(FLERR,"Substitution for illegal variable"); *ptr = '\0'; - strcpy(work,str); - if (strlen(work)+strlen(value) >= MAXLINE) - error->one(FLERR,"Input line too long after variable substitution"); - strcat(work,value); - if (strlen(work)+strlen(beyond) >= MAXLINE) - error->one(FLERR,"Input line too long after variable substitution"); - strcat(work,beyond); - strcpy(str,work); + strcpy(str2,str); + n = strlen(str2) + strlen(value) + strlen(beyond) + 1; + if (n > max1) reallocate(str,max1,n); + if (n > max2) reallocate(str2,max2,n); + strcat(str2,value); + strcat(str2,beyond); + strcpy(str,str2); ptr += strlen(value); if (flag && me == 0 && label_active == 0) { if (echo_screen && screen) fprintf(screen,"%s",str); @@ -420,6 +428,21 @@ void Input::substitute(char *str, int flag) } } +/* ---------------------------------------------------------------------- + rellocate a string + if n > 0: set max >= n in increments of DELTALINE + else just increment max by DELTALINE +------------------------------------------------------------------------- */ + +void Input::reallocate(char *&str, int &max, int n) +{ + if (n) { + while (n > max) max += DELTALINE; + } else max += DELTALINE; + + str = (char *) memory->srealloc(str,max*sizeof(char),"input:str"); +} + /* ---------------------------------------------------------------------- process a single parsed command return 0 if successful, -1 if did not recognize command @@ -565,13 +588,14 @@ void Input::ifthenelse() // in case expression was enclosed in quotes // must substitute on copy of arg else will step on subsequent args - char *scopy = new char[MAXLINE]; - strcpy(scopy,arg[0]); - substitute(scopy,0); + int n = strlen(arg[0]) + 1; + if (n > maxline) reallocate(line,maxline,n); + strcpy(line,arg[0]); + substitute(line,work,maxline,maxwork,0); // evaluate Boolean expression for "if" - double btest = variable->evaluate_boolean(scopy); + double btest = variable->evaluate_boolean(line); // bound "then" commands @@ -606,17 +630,13 @@ void Input::ifthenelse() for (int i = 0; i < ncommands; i++) delete [] commands[i]; delete [] commands; - delete [] scopy; return; } // done if no "elif" or "else" - if (iarg == narg) { - delete [] scopy; - return; - } + if (iarg == narg) return; // check "elif" or "else" until find commands to execute // substitute for variables and evaluate Boolean expression for "elif" @@ -626,9 +646,11 @@ void Input::ifthenelse() while (1) { if (iarg+2 > narg) error->all(FLERR,"Illegal if command"); if (strcmp(arg[iarg],"elif") == 0) { - strcpy(scopy,arg[iarg+1]); - substitute(scopy,0); - btest = variable->evaluate_boolean(scopy); + n = strlen(arg[iarg+1]) + 1; + if (n > maxline) reallocate(line,maxline,n); + strcpy(line,arg[iarg+1]); + substitute(line,work,maxline,maxwork,0); + btest = variable->evaluate_boolean(line); first = iarg+2; } else { btest = 1.0; @@ -664,7 +686,6 @@ void Input::ifthenelse() for (int i = 0; i < ncommands; i++) delete [] commands[i]; delete [] commands; - delete [] scopy; return; } @@ -801,12 +822,18 @@ void Input::print() { if (narg != 1) error->all(FLERR,"Illegal print command"); + // copy 1st arg back into line (copy is being used) + // check maxline since arg[0] could have been exanded by variables // substitute for $ variables (no printing) and print arg - substitute(arg[0],0); + int n = strlen(arg[0]) + 1; + if (n > maxline) reallocate(line,maxline,n); + strcpy(line,arg[0]); + substitute(line,work,maxline,maxwork,0); + if (me == 0) { - if (screen) fprintf(screen,"%s\n",arg[0]); - if (logfile) fprintf(logfile,"%s\n",arg[0]); + if (screen) fprintf(screen,"%s\n",line); + if (logfile) fprintf(logfile,"%s\n",line); } } @@ -850,15 +877,20 @@ void Input::shell() if (me == 0) for (int i = 1; i < narg; i++) rmdir(arg[i]); - // use work to concat args back into one string separated by spaces + // use work string to concat args back into one string separated by spaces // invoke string in shell via system() } else { + int n = 0; + for (int i = 0; i < narg; i++) n += strlen(arg[i]) + 1; + if (n > maxwork) reallocate(work,maxwork,n); + strcpy(work,arg[0]); for (int i = 1; i < narg; i++) { strcat(work," "); strcat(work,arg[i]); } + if (me == 0) system(work); } } diff --git a/src/input.h b/src/input.h index fb0fce2d15..36e6c0c0dd 100644 --- a/src/input.h +++ b/src/input.h @@ -30,13 +30,15 @@ class Input : protected Pointers { void file(); // process all input void file(const char *); // process an input script char *one(const char *); // process a single command - void substitute(char *, int); // substitute for variables in a string + void substitute(char *&, char *&, int &, int &, int); + // substitute for variables in a string private: int me; // proc ID char *command; // ptr to current command int maxarg; // max # of args in arg - char *line,*copy,*work; // input line & copy of it + char *line,*copy,*work; // input line & copy and work string + int maxline,maxcopy,maxwork; // max lengths of char strings int echo_screen; // 0 = no, 1 = yes int echo_log; // 0 = no, 1 = yes int nfile,maxfile; // current # and max # of open input files @@ -46,9 +48,10 @@ class Input : protected Pointers { FILE **infiles; // list of open input files - void parse(); // parse an input text line - char *nextword(char *, char **); // find next word in string, with quotes - int execute_command(); // execute a single command + void parse(); // parse an input text line + char *nextword(char *, char **); // find next word in string with quotes + void reallocate(char *&, int &, int); // reallocate a char string + int execute_command(); // execute a single command void clear(); // input script commands void echo(); diff --git a/src/thermo.cpp b/src/thermo.cpp index 763e1a175d..0909153adb 100644 --- a/src/thermo.cpp +++ b/src/thermo.cpp @@ -67,7 +67,6 @@ enum{SCALAR,VECTOR,ARRAY}; #define INVOKED_VECTOR 2 #define INVOKED_ARRAY 4 -#define MAXLINE 32768 // make this 4x longer than Input::MAXLINE #define DELTA 8 /* ---------------------------------------------------------------------- */ @@ -89,12 +88,19 @@ Thermo::Thermo(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp) lostbefore = 0; flushflag = 0; + // line string used for 3 tasks + // concat of custom style args + // one-time thermo output of header line + // each line of numeric thermo output + // 256 = extra for ONE or MULTI string or multi formatting + // 32 = max per-arg chars in header or numeric output + + line = new char[256+32*narg]; + // set style and corresponding lineflag // custom style builds its own line of keywords // customize a new thermo style by adding to if statement - line = new char[MAXLINE]; - if (strcmp(style,"one") == 0) { strcpy(line,ONE); } else if (strcmp(style,"multi") == 0) { @@ -337,9 +343,6 @@ void Thermo::compute(int flag) } } - // kludge for RedStorm timing issue - // if (ntimestep == 100) return; - // print line to screen and logfile if (me == 0) { From bee86b9a2ad056421bd3e1b57796162b971c6ec6 Mon Sep 17 00:00:00 2001 From: sjplimp Date: Thu, 3 Jan 2013 00:27:58 +0000 Subject: [PATCH 22/61] git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@9200 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- src/version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/version.h b/src/version.h index 458ff4158e..4aa2044335 100644 --- a/src/version.h +++ b/src/version.h @@ -1 +1 @@ -#define LAMMPS_VERSION "5 Jan 2013" +#define LAMMPS_VERSION "6 Jan 2013" From 91a1b21ad6182532082d324ba00a3a3dbe318577 Mon Sep 17 00:00:00 2001 From: sjplimp Date: Thu, 3 Jan 2013 16:16:45 +0000 Subject: [PATCH 23/61] git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@9203 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- doc/Eqs/eff_ECP1.jpg | Bin 72343 -> 9334 bytes doc/Eqs/eff_ECP1.tex | 8 ++++++++ doc/Eqs/eff_ECP2.jpg | Bin 153389 -> 9744 bytes doc/Eqs/eff_ECP2.tex | 8 ++++++++ 4 files changed, 16 insertions(+) create mode 100644 doc/Eqs/eff_ECP1.tex create mode 100644 doc/Eqs/eff_ECP2.tex diff --git a/doc/Eqs/eff_ECP1.jpg b/doc/Eqs/eff_ECP1.jpg index e6fa32829db70b0994d92ff00910cb2bb1cc9038..89a490d9c80eb0ecffe9378e92e7ebacfbcc3467 100644 GIT binary patch literal 9334 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 literal 72343 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 diff --git a/doc/Eqs/eff_ECP1.tex b/doc/Eqs/eff_ECP1.tex new file mode 100644 index 0000000000..238fe2f4f0 --- /dev/null +++ b/doc/Eqs/eff_ECP1.tex @@ -0,0 +1,8 @@ +\documentstyle[12pt]{article} + +\begin{document} + +$$ +E_{Pauli(ECP_p)}=p_1\left( \frac{2}{p_2/s+s/p_2} \right)\left( r-p_3s\right)^2\exp \left[ -\frac{p_4\left( r-p_3s \right)^2}{p_5+s^2} \right] +$$ + \end{document} \ No newline at end of file diff --git a/doc/Eqs/eff_ECP2.jpg b/doc/Eqs/eff_ECP2.jpg index 3ab3fe62708879dce90b1d78e7c2386a7219fbbd..195ed55e4381a7752475ee37c20276c9cc57df64 100644 GIT binary patch literal 9744 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 dgn_}*=u!_N3K0d&FnRaSBmGoX7D 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 Date: Thu, 3 Jan 2013 16:22:36 +0000 Subject: [PATCH 24/61] git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@9204 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- .../USER/eff/Auger-Adamantane/in.adamantane_ionized.nve | 2 +- examples/USER/eff/Be-solid/in.Be-solid.spe | 2 +- examples/USER/eff/ECP/SiC/bulk/in.SiC | 2 +- examples/USER/eff/H/in.h_atom.spe.ang | 2 +- examples/USER/eff/H/in.h_atom.spe.bohr | 2 +- examples/USER/eff/H2/in.h2 | 2 +- examples/USER/eff/H_plasma/in.h2bulk.npt | 2 +- examples/USER/eff/H_plasma/in.h2bulk.nve | 2 +- examples/USER/eff/H_plasma/in.h2bulk.nve.ang | 2 +- examples/USER/eff/Li-dendritic/in.Li-dendritic.min | 2 +- examples/USER/eff/Li-dendritic/in.Li-dendritic.nvt | 2 +- examples/USER/eff/Li-solid/in.Li.ang | 6 +++--- examples/USER/eff/Li-solid/in.Li.bohr | 2 +- examples/USER/eff/fixed-core/CH4/in.CH4fc.ang | 2 +- examples/USER/eff/fixed-core/CH4/in.CH4fc.bohr | 2 +- examples/USER/eff/fixed-core/CH4/in.CH4fc.spe.ang | 2 +- examples/USER/eff/fixed-core/CH4/in.CH4fc.spe.bohr | 2 +- src/USER-EFF/pair_eff_cut.cpp | 4 ++-- 18 files changed, 21 insertions(+), 21 deletions(-) diff --git a/examples/USER/eff/Auger-Adamantane/in.adamantane_ionized.nve b/examples/USER/eff/Auger-Adamantane/in.adamantane_ionized.nve index 08ef9fc219..f6ea882b2b 100644 --- a/examples/USER/eff/Auger-Adamantane/in.adamantane_ionized.nve +++ b/examples/USER/eff/Auger-Adamantane/in.adamantane_ionized.nve @@ -9,7 +9,7 @@ atom_style electron read_data data.${sname} -pair_style eff/cut 100.0 0 0 +pair_style eff/cut 100.0 pair_coeff * * communicate single vel yes diff --git a/examples/USER/eff/Be-solid/in.Be-solid.spe b/examples/USER/eff/Be-solid/in.Be-solid.spe index c07e1a132e..f62af6816d 100644 --- a/examples/USER/eff/Be-solid/in.Be-solid.spe +++ b/examples/USER/eff/Be-solid/in.Be-solid.spe @@ -9,7 +9,7 @@ atom_style electron read_data data.${sname} -pair_style eff/cut 31.6125 0 0 +pair_style eff/cut 31.6125 pair_coeff * * communicate single vel yes diff --git a/examples/USER/eff/ECP/SiC/bulk/in.SiC b/examples/USER/eff/ECP/SiC/bulk/in.SiC index 2ce74232a6..728446ef29 100644 --- a/examples/USER/eff/ECP/SiC/bulk/in.SiC +++ b/examples/USER/eff/ECP/SiC/bulk/in.SiC @@ -9,7 +9,7 @@ atom_style electron read_data data.${sname} -pair_style eff/cut 20.0 limit_eradius pressure_with_evirials ecp 1 Si 2 C +pair_style eff/cut 20.0 limit/eradius pressure/evirials ecp 1 Si 2 C pair_coeff * * pair_coeff 1 s 0.320852 2.283269 0.814857 pair_coeff 2 p 22.721015 0.728733 1.103199 17.695345 6.693621 diff --git a/examples/USER/eff/H/in.h_atom.spe.ang b/examples/USER/eff/H/in.h_atom.spe.ang index 2b827720c2..ba9ea02515 100644 --- a/examples/USER/eff/H/in.h_atom.spe.ang +++ b/examples/USER/eff/H/in.h_atom.spe.ang @@ -9,7 +9,7 @@ atom_style electron read_data data.${sname} -pair_style eff/cut 0.529177249 0 0 +pair_style eff/cut 0.529177249 pair_coeff * * communicate single vel yes diff --git a/examples/USER/eff/H/in.h_atom.spe.bohr b/examples/USER/eff/H/in.h_atom.spe.bohr index a925434ee4..7784b07caa 100644 --- a/examples/USER/eff/H/in.h_atom.spe.bohr +++ b/examples/USER/eff/H/in.h_atom.spe.bohr @@ -9,7 +9,7 @@ atom_style electron read_data data.${sname} -pair_style eff/cut 1.0 0 0 +pair_style eff/cut 1.0 pair_coeff * * communicate single vel yes diff --git a/examples/USER/eff/H2/in.h2 b/examples/USER/eff/H2/in.h2 index ad3cfa20f9..84218e86f2 100644 --- a/examples/USER/eff/H2/in.h2 +++ b/examples/USER/eff/H2/in.h2 @@ -9,7 +9,7 @@ atom_style electron read_data data.${sname} -pair_style eff/cut 6.447968 0 1 +pair_style eff/cut 6.447968 pressure/evirials pair_coeff * * communicate single vel yes diff --git a/examples/USER/eff/H_plasma/in.h2bulk.npt b/examples/USER/eff/H_plasma/in.h2bulk.npt index 7a40b46831..30f5ca0910 100644 --- a/examples/USER/eff/H_plasma/in.h2bulk.npt +++ b/examples/USER/eff/H_plasma/in.h2bulk.npt @@ -9,7 +9,7 @@ atom_style electron read_data data.${sname} -pair_style eff/cut 30.627847 0 0 +pair_style eff/cut 30.627847 pair_coeff * * neigh_modify one 20000 page 200000 diff --git a/examples/USER/eff/H_plasma/in.h2bulk.nve b/examples/USER/eff/H_plasma/in.h2bulk.nve index 533b328096..74ce5afbc5 100644 --- a/examples/USER/eff/H_plasma/in.h2bulk.nve +++ b/examples/USER/eff/H_plasma/in.h2bulk.nve @@ -9,7 +9,7 @@ atom_style electron read_data data.${sname} -pair_style eff/cut 30.627847 0 0 +pair_style eff/cut 30.627847 pair_coeff * * neigh_modify one 10000 page 100000 diff --git a/examples/USER/eff/H_plasma/in.h2bulk.nve.ang b/examples/USER/eff/H_plasma/in.h2bulk.nve.ang index ad2bc074ce..ecb0ac54c9 100644 --- a/examples/USER/eff/H_plasma/in.h2bulk.nve.ang +++ b/examples/USER/eff/H_plasma/in.h2bulk.nve.ang @@ -9,7 +9,7 @@ atom_style electron read_data data.${sname} -pair_style eff/cut 16.207559818252903 1 1 +pair_style eff/cut 16.207559818252903 limit/eradius pressure/evirials pair_coeff * * neigh_modify one 10000 page 100000 diff --git a/examples/USER/eff/Li-dendritic/in.Li-dendritic.min b/examples/USER/eff/Li-dendritic/in.Li-dendritic.min index 2c9d986965..9162183208 100644 --- a/examples/USER/eff/Li-dendritic/in.Li-dendritic.min +++ b/examples/USER/eff/Li-dendritic/in.Li-dendritic.min @@ -10,7 +10,7 @@ atom_style electron #read_data data.${sname} read_restart ${sname}.min.restart2 -pair_style eff/cut 50.112 0 0 +pair_style eff/cut 50.112 pair_coeff * * communicate single vel yes diff --git a/examples/USER/eff/Li-dendritic/in.Li-dendritic.nvt b/examples/USER/eff/Li-dendritic/in.Li-dendritic.nvt index 8ae71f9a95..815678f65e 100644 --- a/examples/USER/eff/Li-dendritic/in.Li-dendritic.nvt +++ b/examples/USER/eff/Li-dendritic/in.Li-dendritic.nvt @@ -10,7 +10,7 @@ atom_style electron read_data data.${sname} #read_restart ${sname}.min.restart -pair_style eff/cut 50.112 0 0 +pair_style eff/cut 50.112 pair_coeff * * communicate single vel yes diff --git a/examples/USER/eff/Li-solid/in.Li.ang b/examples/USER/eff/Li-solid/in.Li.ang index 305d688bf6..f1a12710d7 100644 --- a/examples/USER/eff/Li-solid/in.Li.ang +++ b/examples/USER/eff/Li-solid/in.Li.ang @@ -8,10 +8,10 @@ dielectric 1.0 atom_style electron -#read_data data.${sname} -read_restart ${sname}.min.restart +read_data data.${sname} +#read_restart ${sname}.min.restart -pair_style eff/cut 11.049221 1 1 +pair_style eff/cut 11.049221 limit/eradius pressure/evirials pair_coeff * * communicate single vel yes diff --git a/examples/USER/eff/Li-solid/in.Li.bohr b/examples/USER/eff/Li-solid/in.Li.bohr index cd1fe5ec87..fc6af919ba 100644 --- a/examples/USER/eff/Li-solid/in.Li.bohr +++ b/examples/USER/eff/Li-solid/in.Li.bohr @@ -10,7 +10,7 @@ atom_style electron read_data data.${sname} -pair_style eff/cut 20.88 1 1 +pair_style eff/cut 20.88 limit/eradius pressure/evirials pair_coeff * * communicate single vel yes diff --git a/examples/USER/eff/fixed-core/CH4/in.CH4fc.ang b/examples/USER/eff/fixed-core/CH4/in.CH4fc.ang index 8477bb08a0..aa6760bc91 100644 --- a/examples/USER/eff/fixed-core/CH4/in.CH4fc.ang +++ b/examples/USER/eff/fixed-core/CH4/in.CH4fc.ang @@ -12,7 +12,7 @@ atom_style electron read_data data.${sname} -pair_style eff/cut 529.177249 0 0 +pair_style eff/cut 529.177249 pair_coeff * * compute energies all pair eff/cut diff --git a/examples/USER/eff/fixed-core/CH4/in.CH4fc.bohr b/examples/USER/eff/fixed-core/CH4/in.CH4fc.bohr index b36b859c70..6d087e81cc 100644 --- a/examples/USER/eff/fixed-core/CH4/in.CH4fc.bohr +++ b/examples/USER/eff/fixed-core/CH4/in.CH4fc.bohr @@ -12,7 +12,7 @@ atom_style electron read_data data.${sname} -pair_style eff/cut 1000.0 0 0 +pair_style eff/cut 1000.0 pair_coeff * * compute energies all pair eff/cut diff --git a/examples/USER/eff/fixed-core/CH4/in.CH4fc.spe.ang b/examples/USER/eff/fixed-core/CH4/in.CH4fc.spe.ang index a41687bfae..9abcced9e6 100644 --- a/examples/USER/eff/fixed-core/CH4/in.CH4fc.spe.ang +++ b/examples/USER/eff/fixed-core/CH4/in.CH4fc.spe.ang @@ -12,7 +12,7 @@ atom_style electron read_data data.${sname} -pair_style eff/cut 1000.0 1 1 +pair_style eff/cut 1000.0 limit/eradius pressure/evirials pair_coeff * * compute energies all pair eff/cut diff --git a/examples/USER/eff/fixed-core/CH4/in.CH4fc.spe.bohr b/examples/USER/eff/fixed-core/CH4/in.CH4fc.spe.bohr index 7156fea7be..75f072c503 100644 --- a/examples/USER/eff/fixed-core/CH4/in.CH4fc.spe.bohr +++ b/examples/USER/eff/fixed-core/CH4/in.CH4fc.spe.bohr @@ -12,7 +12,7 @@ atom_style electron read_data data.${sname} -pair_style eff/cut 1000.0 1 1 +pair_style eff/cut 1000.0 limit/eradius pressure/evirials pair_coeff * * compute energies all pair eff/cut diff --git a/src/USER-EFF/pair_eff_cut.cpp b/src/USER-EFF/pair_eff_cut.cpp index 737b22c90c..6c728d0da0 100644 --- a/src/USER-EFF/pair_eff_cut.cpp +++ b/src/USER-EFF/pair_eff_cut.cpp @@ -807,11 +807,11 @@ void PairEffCut::settings(int narg, char **arg) int ecp_found = 0; while (iarg < narg) { - if (strcmp(arg[iarg],"limit_eradius") == 0) { + if (strcmp(arg[iarg],"limit/eradius") == 0) { limit_eradius_flag = 1; iarg += 1; } - else if (strcmp(arg[iarg],"pressure_with_evirials") == 0) { + else if (strcmp(arg[iarg],"pressure/evirials") == 0) { pressure_with_evirials_flag = 1; iarg += 1; } From 0147edb8eaab2b95dfd50c2cbe4e8b51c57cb0a5 Mon Sep 17 00:00:00 2001 From: sjplimp Date: Thu, 3 Jan 2013 16:50:41 +0000 Subject: [PATCH 25/61] git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@9205 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- doc/pair_eff.html | 67 +++++++++++++++++++++++++++-------------------- doc/pair_eff.txt | 64 ++++++++++++++++++++++++-------------------- 2 files changed, 73 insertions(+), 58 deletions(-) diff --git a/doc/pair_eff.html b/doc/pair_eff.html index c700843030..06f5455ce2 100644 --- a/doc/pair_eff.html +++ b/doc/pair_eff.html @@ -13,19 +13,26 @@

    Syntax:

    -

    pair_style eff/cut cutoff limit_eradius pressure_with_evirials ecp type1 element1 type2 element2 ... typeN elementN -

    -
    • cutoff = global cutoff for Coulombic interactions -
    • limit_eradius = limit electron size (optional) -
    • pressure_with_evirials = include electron virials in system pressure (optional) -
    • type1 ... typeN = LAMMPS atom type -
    • element1 ... element2 = element symbol +
      pair_style eff/cut cutoff keyword args ... 
      +
      +
      • cutoff = global cutoff for Coulombic interactions + +
      • zero or more keyword/value pairs may be appended + +
        keyword = limit/eradius or pressure/evirials or ecp
        +  limit/eradius args = none
        +  pressure/evirials args = none
        +  ecp args = type element type element ...
        +    type = LAMMPS atom type (1 to Ntypes)
        +    element = element symbol (e.g. H, Si) 
        +
        +

      Examples:

      pair_style eff/cut 39.7
      -pair_style eff/cut 40.0 limit_eradius
      -pair_style eff/cut 40.0 limit_eradius pressure_with_evirials
      +pair_style eff/cut 40.0 limit/eradius
      +pair_style eff/cut 40.0 limit/eradius pressure/evirials
       pair_style eff/cut 40.0 ecp 1 Si 3 C
       pair_coeff * *
       pair_coeff 2 2 20.0
      @@ -146,32 +153,34 @@ individual I,J type pair via the pair_coeff comm
       All type pairs use the same global cutoff specified in the pair_style
       command.
       

      -

      The limit_eradius and pressure_with_evirials settings are optional. +


      + +

      The limit/eradius and pressure/evirials keywrods are optional. Neither or both must be specified. If not specified they are unset.

      -

      The limit_eradius is used to restrain electron size from becoming -excessively diffuse at very high temperatures were the Gaussian wave -packet representation breaks down, and from expanding as free -particles to infinite size. If unset, electron radius is free to -increase without bounds. If set, a restraining -harmonic potential of the form E = 1/2k_ss^2 for s > L_box/2, where -k_s = 1 Hartrees/Bohr^2, is applied on the electron radius. +

      The limit/eradius keyword is used to restrain electron size from +becoming excessively diffuse at very high temperatures were the +Gaussian wave packet representation breaks down, and from expanding as +free particles to infinite size. If unset, electron radius is free to +increase without bounds. If set, a restraining harmonic potential of +the form E = 1/2k_ss^2 for s > L_box/2, where k_s = 1 Hartrees/Bohr^2, +is applied on the electron radius.

      -

      The pressure_with_evirials is used to control between two types of pressure -computation: if unset, the computed pressure does not include the -electronic radial virials contributions to the total pressure (scalar -or tensor). If set, the computed pressure will include the -electronic radial virial contributions to the total pressure (scalar -and tensor). +

      The pressure/evirials keyword is used to control between two types +of pressure computation: if unset, the computed pressure does not +include the electronic radial virials contributions to the total +pressure (scalar or tensor). If set, the computed pressure will +include the electronic radial virial contributions to the total +pressure (scalar and tensor).

      -

      The ecp is used to associate an ECP representation for a particular -atom type. The ECP captures the orbital overlap between a core pseudo -particle and valence electrons within the Pauli repulsion. A list of -type:element-symbol pairs may be provided for all ECP representations, -after the "ecp" keyword. +

      The ecp keyword is used to associate an ECP representation for a +particular atom type. The ECP captures the orbital overlap between a +core pseudo particle and valence electrons within the Pauli repulsion. +A list of type:element-symbol pairs may be provided for all ECP +representations, after the "ecp" keyword.

      IMPORTANT NOTE: Default ECP parameters are provided for C, N, O, Al, -and Si. Users can modify these using the pair_coeff command as +and Si. Users can modify these using the pair_coeff command as exemplified above. For this, the User must distinguish between two different functional forms supported, one that captures the orbital overlap assuming the s-type core interacts with an s-like valence diff --git a/doc/pair_eff.txt b/doc/pair_eff.txt index cda38f03da..956b849afb 100644 --- a/doc/pair_eff.txt +++ b/doc/pair_eff.txt @@ -10,19 +10,23 @@ pair_style eff/cut command :h3 [Syntax:] -pair_style eff/cut cutoff limit_eradius pressure_with_evirials ecp type1 element1 type2 element2 ... typeN elementN - -cutoff = global cutoff for Coulombic interactions -limit_eradius = limit electron size (optional) -pressure_with_evirials = include electron virials in system pressure (optional) -type1 ... typeN = LAMMPS atom type -element1 ... element2 = element symbol :ul +pair_style eff/cut cutoff keyword args ... :pre +cutoff = global cutoff for Coulombic interactions :ulb,l +zero or more keyword/value pairs may be appended :l +keyword = {limit/eradius} or {pressure/evirials} or {ecp} + {limit/eradius} args = none + {pressure/evirials} args = none + {ecp} args = type element type element ... + type = LAMMPS atom type (1 to Ntypes) + element = element symbol (e.g. H, Si) :pre +:ule + [Examples:] pair_style eff/cut 39.7 -pair_style eff/cut 40.0 limit_eradius -pair_style eff/cut 40.0 limit_eradius pressure_with_evirials +pair_style eff/cut 40.0 limit/eradius +pair_style eff/cut 40.0 limit/eradius pressure/evirials pair_style eff/cut 40.0 ecp 1 Si 3 C pair_coeff * * pair_coeff 2 2 20.0 @@ -143,32 +147,34 @@ individual I,J type pair via the "pair_coeff"_pair_coeff.html command. All type pairs use the same global cutoff specified in the pair_style command. -The {limit_eradius} and {pressure_with_evirials} settings are optional. +:line + +The {limit/eradius} and {pressure/evirials} keywrods are optional. Neither or both must be specified. If not specified they are unset. -The {limit_eradius} is used to restrain electron size from becoming -excessively diffuse at very high temperatures were the Gaussian wave -packet representation breaks down, and from expanding as free -particles to infinite size. If unset, electron radius is free to -increase without bounds. If set, a restraining -harmonic potential of the form E = 1/2k_ss^2 for s > L_box/2, where -k_s = 1 Hartrees/Bohr^2, is applied on the electron radius. +The {limit/eradius} keyword is used to restrain electron size from +becoming excessively diffuse at very high temperatures were the +Gaussian wave packet representation breaks down, and from expanding as +free particles to infinite size. If unset, electron radius is free to +increase without bounds. If set, a restraining harmonic potential of +the form E = 1/2k_ss^2 for s > L_box/2, where k_s = 1 Hartrees/Bohr^2, +is applied on the electron radius. -The {pressure_with_evirials} is used to control between two types of pressure -computation: if unset, the computed pressure does not include the -electronic radial virials contributions to the total pressure (scalar -or tensor). If set, the computed pressure will include the -electronic radial virial contributions to the total pressure (scalar -and tensor). +The {pressure/evirials} keyword is used to control between two types +of pressure computation: if unset, the computed pressure does not +include the electronic radial virials contributions to the total +pressure (scalar or tensor). If set, the computed pressure will +include the electronic radial virial contributions to the total +pressure (scalar and tensor). -The {ecp} is used to associate an ECP representation for a particular -atom type. The ECP captures the orbital overlap between a core pseudo -particle and valence electrons within the Pauli repulsion. A list of -type:element-symbol pairs may be provided for all ECP representations, -after the "ecp" keyword. +The {ecp} keyword is used to associate an ECP representation for a +particular atom type. The ECP captures the orbital overlap between a +core pseudo particle and valence electrons within the Pauli repulsion. +A list of type:element-symbol pairs may be provided for all ECP +representations, after the "ecp" keyword. IMPORTANT NOTE: Default ECP parameters are provided for C, N, O, Al, -and Si. Users can modify these using the {pair_coeff} command as +and Si. Users can modify these using the pair_coeff command as exemplified above. For this, the User must distinguish between two different functional forms supported, one that captures the orbital overlap assuming the s-type core interacts with an s-like valence From da49b01f764747f1ac8f0408ea6be692409bd4fd Mon Sep 17 00:00:00 2001 From: sjplimp Date: Thu, 3 Jan 2013 17:17:45 +0000 Subject: [PATCH 26/61] git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@9206 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- src/atom.cpp | 4 ++-- src/fix.h | 1 + src/min.cpp | 2 ++ src/modify.cpp | 12 ++++++++++++ src/modify.h | 1 + src/respa.cpp | 2 ++ src/verlet.cpp | 2 ++ 7 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/atom.cpp b/src/atom.cpp index 0eee4269e0..3ee0d194fc 100644 --- a/src/atom.cpp +++ b/src/atom.cpp @@ -420,8 +420,8 @@ void Atom::modify_params(int narg, char **arg) iarg += 2; } else if (strcmp(arg[iarg],"sort") == 0) { if (iarg+3 > narg) error->all(FLERR,"Illegal atom_modify command"); - sortfreq = atoi(arg[iarg+1]); - userbinsize = atof(arg[iarg+2]); + sortfreq = force->inumeric(arg[iarg+1]); + userbinsize = force->numeric(arg[iarg+2]); if (sortfreq < 0 || userbinsize < 0.0) error->all(FLERR,"Illegal atom_modify command"); if (sortfreq >= 0 && firstgroupname) diff --git a/src/fix.h b/src/fix.h index b9ed35aba2..f9aa2b6717 100644 --- a/src/fix.h +++ b/src/fix.h @@ -89,6 +89,7 @@ class Fix : protected Pointers { virtual void init_list(int, class NeighList *) {} virtual void setup(int) {} virtual void setup_pre_exchange() {} + virtual void setup_pre_neighbor() {} virtual void setup_pre_force(int) {} virtual void min_setup(int) {} virtual void initial_integrate(int) {} diff --git a/src/min.cpp b/src/min.cpp index cc51460b99..0416c68a16 100644 --- a/src/min.cpp +++ b/src/min.cpp @@ -235,6 +235,7 @@ void Min::setup() comm->borders(); if (triclinic) domain->lamda2x(atom->nlocal+atom->nghost); domain->box_too_small_check(); + modify->setup_pre_neighbor(); neighbor->build(); neighbor->ncalls = 0; @@ -321,6 +322,7 @@ void Min::setup_minimal(int flag) comm->borders(); if (triclinic) domain->lamda2x(atom->nlocal+atom->nghost); domain->box_too_small_check(); + modify->setup_pre_neighbor(); neighbor->build(); neighbor->ncalls = 0; } diff --git a/src/modify.cpp b/src/modify.cpp index b45ac72030..17a186b13d 100644 --- a/src/modify.cpp +++ b/src/modify.cpp @@ -245,6 +245,18 @@ void Modify::setup_pre_exchange() fix[list_min_pre_exchange[i]]->min_setup_pre_exchange(); } +/* ---------------------------------------------------------------------- + setup pre_neighbor call, only for fixes that define pre_neighbor + called from Verlet, RESPA +------------------------------------------------------------------------- */ + +void Modify::setup_pre_neighbor() +{ + if (update->whichflag == 1) + for (int i = 0; i < n_pre_neighbor; i++) + fix[list_pre_neighbor[i]]->setup_pre_neighbor(); +} + /* ---------------------------------------------------------------------- setup pre_force call, only for fixes that define pre_force called from Verlet, RESPA, Min diff --git a/src/modify.h b/src/modify.h index 0676b611a9..28ac58e443 100644 --- a/src/modify.h +++ b/src/modify.h @@ -44,6 +44,7 @@ class Modify : protected Pointers { virtual void init(); virtual void setup(int); virtual void setup_pre_exchange(); + virtual void setup_pre_neighbor(); virtual void setup_pre_force(int); virtual void initial_integrate(int); virtual void post_integrate(); diff --git a/src/respa.cpp b/src/respa.cpp index 96cd4a959b..2d7be07ae5 100644 --- a/src/respa.cpp +++ b/src/respa.cpp @@ -352,6 +352,7 @@ void Respa::setup() comm->borders(); if (triclinic) domain->lamda2x(atom->nlocal+atom->nghost); domain->box_too_small_check(); + modify->setup_pre_neighbor(); neighbor->build(); neighbor->ncalls = 0; @@ -417,6 +418,7 @@ void Respa::setup_minimal(int flag) comm->borders(); if (triclinic) domain->lamda2x(atom->nlocal+atom->nghost); domain->box_too_small_check(); + modify->setup_pre_neighbor(); neighbor->build(); neighbor->ncalls = 0; } diff --git a/src/verlet.cpp b/src/verlet.cpp index 43a4d69949..d4c68ca696 100644 --- a/src/verlet.cpp +++ b/src/verlet.cpp @@ -112,6 +112,7 @@ void Verlet::setup() comm->borders(); if (triclinic) domain->lamda2x(atom->nlocal+atom->nghost); domain->box_too_small_check(); + modify->setup_pre_neighbor(); neighbor->build(); neighbor->ncalls = 0; @@ -169,6 +170,7 @@ void Verlet::setup_minimal(int flag) comm->borders(); if (triclinic) domain->lamda2x(atom->nlocal+atom->nghost); domain->box_too_small_check(); + modify->setup_pre_neighbor(); neighbor->build(); neighbor->ncalls = 0; } From 2f87c0a14dbbdf2f2b8aa7fe48ce888ff9605d70 Mon Sep 17 00:00:00 2001 From: sjplimp Date: Thu, 3 Jan 2013 18:00:37 +0000 Subject: [PATCH 27/61] git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@9208 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- doc/Eqs/eff_ECP1.jpg | Bin 9334 -> 5146 bytes doc/Eqs/eff_ECP1.tex | 17 +++++++++-------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/doc/Eqs/eff_ECP1.jpg b/doc/Eqs/eff_ECP1.jpg index 89a490d9c80eb0ecffe9378e92e7ebacfbcc3467..3b8a3f8ff39ace5ad9c37d8ac6ada08077bf575d 100644 GIT binary patch literal 5146 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 D@x+|3 literal 9334 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 diff --git a/doc/Eqs/eff_ECP1.tex b/doc/Eqs/eff_ECP1.tex index 238fe2f4f0..7eecad0b8d 100644 --- a/doc/Eqs/eff_ECP1.tex +++ b/doc/Eqs/eff_ECP1.tex @@ -1,8 +1,9 @@ -\documentstyle[12pt]{article} - -\begin{document} - -$$ -E_{Pauli(ECP_p)}=p_1\left( \frac{2}{p_2/s+s/p_2} \right)\left( r-p_3s\right)^2\exp \left[ -\frac{p_4\left( r-p_3s \right)^2}{p_5+s^2} \right] -$$ - \end{document} \ No newline at end of file +\documentstyle[12pt]{article} + +\begin{document} + +$$ +E_{Pauli(ECP_s)}=p_1\exp\left(-\frac{p_2r^2}{p_3+s^2} \right) +$$ + +\end{document} \ No newline at end of file From 7f95feb0e4ab48b6f203b4003e4bd651c1a80e4c Mon Sep 17 00:00:00 2001 From: sjplimp Date: Thu, 3 Jan 2013 19:10:11 +0000 Subject: [PATCH 28/61] git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@9209 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- src/input.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/input.cpp b/src/input.cpp index e1ce285185..58c9bb4af5 100644 --- a/src/input.cpp +++ b/src/input.cpp @@ -182,8 +182,8 @@ void Input::file() // echo the command unless scanning for label if (me == 0 && label_active == 0) { - if (echo_screen && screen) fprintf(screen,"%s",line); - if (echo_log && logfile) fprintf(logfile,"%s",line); + if (echo_screen && screen) fprintf(screen,"%s\n",line); + if (echo_log && logfile) fprintf(logfile,"%s\n",line); } // parse the line @@ -417,8 +417,8 @@ void Input::substitute(char *&str, char *&str2, int &max1, int &max2, int flag) strcpy(str,str2); ptr += strlen(value); if (flag && me == 0 && label_active == 0) { - if (echo_screen && screen) fprintf(screen,"%s",str); - if (echo_log && logfile) fprintf(logfile,"%s",str); + if (echo_screen && screen) fprintf(screen,"%s\n",str); + if (echo_log && logfile) fprintf(logfile,"%s\n",str); } continue; } From 462efcafaa74450ee5d82de35f271f78a48138aa Mon Sep 17 00:00:00 2001 From: sjplimp Date: Thu, 3 Jan 2013 19:10:20 +0000 Subject: [PATCH 29/61] git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@9210 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- src/version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/version.h b/src/version.h index 4aa2044335..304b72d56b 100644 --- a/src/version.h +++ b/src/version.h @@ -1 +1 @@ -#define LAMMPS_VERSION "6 Jan 2013" +#define LAMMPS_VERSION "7 Jan 2013" From 0c063777a949579ea1799358d11e31d74d6a895e Mon Sep 17 00:00:00 2001 From: sjplimp Date: Thu, 3 Jan 2013 20:49:12 +0000 Subject: [PATCH 30/61] git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@9214 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- src/MAKE/Makefile.openmpi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/MAKE/Makefile.openmpi b/src/MAKE/Makefile.openmpi index 91f413c764..10249e4368 100644 --- a/src/MAKE/Makefile.openmpi +++ b/src/MAKE/Makefile.openmpi @@ -49,7 +49,7 @@ MPI_LIB = # PATH = path for FFT library # LIB = name of FFT library -FFT_INC = -DFFT_FFTW +FFT_INC = -DFFT_FFTW3 FFT_PATH = FFT_LIB = -lfftw From 5c4099d1268d859a7c895746e29b7ab48bdb0a88 Mon Sep 17 00:00:00 2001 From: sjplimp Date: Thu, 3 Jan 2013 21:07:33 +0000 Subject: [PATCH 31/61] git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@9217 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- src/CLASS2/dihedral_class2.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/CLASS2/dihedral_class2.cpp b/src/CLASS2/dihedral_class2.cpp index ea13d09bcc..69200072de 100644 --- a/src/CLASS2/dihedral_class2.cpp +++ b/src/CLASS2/dihedral_class2.cpp @@ -225,6 +225,19 @@ void DihedralClass2::compute(int eflag, int vflag) sinphi = sqrt(1.0 - c*c); sinphi = MAX(sinphi,SMALL); + // addition by Andrew Jewett, Jan 2013 + // adjust the sign of phi if necessary for negative input angles + // n123 = vb2 x vb1 + + double n123x = vb1y*vb2z - vb1z*vb2y; + double n123y = vb1z*vb2x - vb1x*vb2z; + double n123z = vb1x*vb2y - vb1y*vb2x; + double n123_dot_vb3 = n123x*vb3x + n123y*vb3y + n123z*vb3z; + if (n123_dot_vb3 > 0.0) { + phi = -phi; + sinphi = -sinphi; + } + a11 = -c*sb1*s1; a22 = sb2 * (2.0*costh13*s12 - c*(s1+s2)); a33 = -c*sb3*s2; From 5188afc7f083859ca006998dde949eca8d079f38 Mon Sep 17 00:00:00 2001 From: sjplimp Date: Thu, 3 Jan 2013 21:10:55 +0000 Subject: [PATCH 32/61] git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@9219 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- src/version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/version.h b/src/version.h index 304b72d56b..c7218f7316 100644 --- a/src/version.h +++ b/src/version.h @@ -1 +1 @@ -#define LAMMPS_VERSION "7 Jan 2013" +#define LAMMPS_VERSION "8 Jan 2013" From f2d187716cde9bf802d9b996e1ce4318521b78a8 Mon Sep 17 00:00:00 2001 From: pscrozi Date: Thu, 3 Jan 2013 21:34:55 +0000 Subject: [PATCH 33/61] git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@9221 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- src/KSPACE/ewald.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/KSPACE/ewald.cpp b/src/KSPACE/ewald.cpp index 79f49607fd..a80ba684dd 100644 --- a/src/KSPACE/ewald.cpp +++ b/src/KSPACE/ewald.cpp @@ -193,7 +193,7 @@ void Ewald::init() kcount,kmax,kmax3d); } if (logfile) { - fprintf(logfile," G vector (1/distnace) = %g\n",g_ewald); + fprintf(logfile," G vector (1/distance) = %g\n",g_ewald); fprintf(logfile," estimated absolute RMS force accuracy = %g\n", estimated_accuracy); fprintf(logfile," estimated relative force accuracy = %g\n", From fa8c7b68fc421a2cf0dfbd943755057691add75b Mon Sep 17 00:00:00 2001 From: sjplimp Date: Fri, 4 Jan 2013 17:15:32 +0000 Subject: [PATCH 34/61] git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@9222 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- src/fix_external.cpp | 123 +++++++++++++++++++++++++++++++++++-------- src/fix_external.h | 7 +++ 2 files changed, 109 insertions(+), 21 deletions(-) diff --git a/src/fix_external.cpp b/src/fix_external.cpp index 0e787d078d..b973d5dca3 100644 --- a/src/fix_external.cpp +++ b/src/fix_external.cpp @@ -13,6 +13,7 @@ #include "stdio.h" #include "string.h" +#include "stdlib.h" #include "fix_external.h" #include "atom.h" #include "update.h" @@ -22,23 +23,47 @@ using namespace LAMMPS_NS; using namespace FixConst; +enum{PF_CALLBACK,PF_ARRAY}; + /* ---------------------------------------------------------------------- */ FixExternal::FixExternal(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg) { - if (narg != 3) error->all(FLERR,"Illegal fix external command"); + if (narg < 4) error->all(FLERR,"Illegal fix external command"); + + if (strcmp(arg[3],"pf/callback") == 0) { + if (narg != 6) error->all(FLERR,"Illegal fix external command"); + mode = PF_CALLBACK; + ncall = atoi(arg[4]); + napply = atoi(arg[5]); + if (ncall <= 0 || napply <= 0) + error->all(FLERR,"Illegal fix external command"); + } else if (strcmp(arg[3],"pf/array") == 0) { + if (narg != 5) error->all(FLERR,"Illegal fix external command"); + mode = PF_ARRAY; + napply = atoi(arg[4]); + if (napply <= 0) error->all(FLERR,"Illegal fix external command"); + } else error->all(FLERR,"Illegal fix external command"); callback = NULL; - nmax = 0; + // perform initial allocation of atom-based array + // register with Atom class + fexternal = NULL; + grow_arrays(atom->nmax); + atom->add_callback(0); } /* ---------------------------------------------------------------------- */ FixExternal::~FixExternal() { + // unregister callbacks to this fix from Atom class + + atom->delete_callback(id,0); + memory->destroy(fexternal); } @@ -47,8 +72,10 @@ FixExternal::~FixExternal() int FixExternal::setmask() { int mask = 0; - mask |= POST_FORCE; - mask |= MIN_POST_FORCE; + if (mode == PF_CALLBACK || mode == PF_ARRAY) { + mask |= POST_FORCE; + mask |= MIN_POST_FORCE; + } return mask; } @@ -56,7 +83,7 @@ int FixExternal::setmask() void FixExternal::init() { - if (callback == NULL) + if (mode == PF_CALLBACK && callback == NULL) error->all(FLERR,"Fix external callback function not set"); } @@ -78,30 +105,29 @@ void FixExternal::min_setup(int vflag) void FixExternal::post_force(int vflag) { - if (atom->nlocal > nmax) { - memory->destroy(fexternal); - nmax = atom->nmax; - memory->create(fexternal,nmax,3,"external:fexternal"); - } + bigint ntimestep = update->ntimestep; // invoke the callback in driver program // it will fill fexternal with forces - (this->callback)(ptr_caller,update->ntimestep, - atom->nlocal,atom->tag,atom->x,fexternal); + if (mode == PF_CALLBACK && ntimestep & ncall == 0) + (this->callback)(ptr_caller,update->ntimestep, + atom->nlocal,atom->tag,atom->x,fexternal); // add forces from fexternal to atoms in group - double **f = atom->f; - int *mask = atom->mask; - int nlocal = atom->nlocal; + if (ntimestep & napply == 0) { + double **f = atom->f; + int *mask = atom->mask; + int nlocal = atom->nlocal; - for (int i = 0; i < nlocal; i++) - if (mask[i] & groupbit) { - f[i][0] += fexternal[i][0]; - f[i][1] += fexternal[i][1]; - f[i][2] += fexternal[i][2]; - } + for (int i = 0; i < nlocal; i++) + if (mask[i] & groupbit) { + f[i][0] += fexternal[i][0]; + f[i][1] += fexternal[i][1]; + f[i][2] += fexternal[i][2]; + } + } } /* ---------------------------------------------------------------------- */ @@ -111,6 +137,60 @@ void FixExternal::min_post_force(int vflag) post_force(vflag); } +/* ---------------------------------------------------------------------- + memory usage of local atom-based array +------------------------------------------------------------------------- */ + +double FixExternal::memory_usage() +{ + double bytes = 3*atom->nmax * sizeof(double); + return bytes; +} + +/* ---------------------------------------------------------------------- + allocate atom-based array +------------------------------------------------------------------------- */ + +void FixExternal::grow_arrays(int nmax) +{ + memory->grow(fexternal,nmax,3,"external:fexternal"); +} + +/* ---------------------------------------------------------------------- + copy values within local atom-based array +------------------------------------------------------------------------- */ + +void FixExternal::copy_arrays(int i, int j) +{ + fexternal[j][0] = fexternal[i][0]; + fexternal[j][1] = fexternal[i][1]; + fexternal[j][2] = fexternal[i][2]; +} + +/* ---------------------------------------------------------------------- + pack values in local atom-based array for exchange with another proc +------------------------------------------------------------------------- */ + +int FixExternal::pack_exchange(int i, double *buf) +{ + buf[0] = fexternal[i][0]; + buf[1] = fexternal[i][1]; + buf[2] = fexternal[i][2]; + return 3; +} + +/* ---------------------------------------------------------------------- + unpack values in local atom-based array from exchange with another proc +------------------------------------------------------------------------- */ + +int FixExternal::unpack_exchange(int nlocal, double *buf) +{ + fexternal[nlocal][0] = buf[0]; + fexternal[nlocal][1] = buf[1]; + fexternal[nlocal][2] = buf[2]; + return 3; +} + /* ---------------------------------------------------------------------- external caller sets a callback function to invoke in post_force() ------------------------------------------------------------------------- */ @@ -120,3 +200,4 @@ void FixExternal::set_callback(FnPtr caller_callback, void *caller_ptr) callback = caller_callback; ptr_caller = caller_ptr; } + diff --git a/src/fix_external.h b/src/fix_external.h index 8dce882216..9d4d8d1b62 100644 --- a/src/fix_external.h +++ b/src/fix_external.h @@ -35,10 +35,17 @@ class FixExternal : public Fix { void post_force(int); void min_post_force(int); + double memory_usage(); + void grow_arrays(int); + void copy_arrays(int, int); + int pack_exchange(int, double *); + int unpack_exchange(int, double *); + typedef void (*FnPtr)(void *, int, int, int *, double **, double **); void set_callback(FnPtr, void *); private: + int mode,ncall,napply; FnPtr callback; void *ptr_caller; int nmax; From da22df7e32cd82c2b87d5d19d3e80600b30ce77d Mon Sep 17 00:00:00 2001 From: sjplimp Date: Fri, 4 Jan 2013 17:15:45 +0000 Subject: [PATCH 35/61] git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@9223 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- doc/read_data.html | 7 ------- doc/read_data.txt | 7 ------- 2 files changed, 14 deletions(-) diff --git a/doc/read_data.html b/doc/read_data.html index fdfa36d454..d0ba1151a9 100644 --- a/doc/read_data.html +++ b/doc/read_data.html @@ -795,7 +795,6 @@ orientation may be important for defining some interactions.

    - @@ -834,12 +833,6 @@ fields:

    atom-ID vx vy vz ervel wx wy wz 
     
    -

    Note that if a non-standard value is defined by multiple sub-styles, -it must appear mutliple times in the velocity line. E.g. the velocity -line for atom_style hybrid dipole sphere would list "wx" twice: -

    -
    atom-ID vx vy vz wx wy wz wx wy wz 
    -

    Translational velocities can also be set by the velocity command in the input script.

    diff --git a/doc/read_data.txt b/doc/read_data.txt index 606d7431f9..17687ca800 100644 --- a/doc/read_data.txt +++ b/doc/read_data.txt @@ -703,7 +703,6 @@ one line per atom line syntax: depends on atom style :ul all styles except those listed: atom-ID vx vy vz -dipole: atom-ID vx vy vz wx wy wz electron: atom-ID vx vy vz ervel ellipsoid: atom-ID vx vy vz lx ly lz sphere: atom-ID vx vy vz wx wy wz @@ -741,12 +740,6 @@ fields: atom-ID vx vy vz ervel wx wy wz :pre -Note that if a non-standard value is defined by multiple sub-styles, -it must appear mutliple times in the velocity line. E.g. the velocity -line for atom_style hybrid dipole sphere would list "wx" twice: - -atom-ID vx vy vz wx wy wz wx wy wz :pre - Translational velocities can also be set by the "velocity"_velocity.html command in the input script. From b684961fc9fb20ab17372138907bcb8e708dcc4a Mon Sep 17 00:00:00 2001 From: sjplimp Date: Fri, 4 Jan 2013 17:15:59 +0000 Subject: [PATCH 36/61] git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@9224 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- doc/fix_external.html | 72 ++++++++++++++++++++++++++++++++----------- doc/fix_external.txt | 70 +++++++++++++++++++++++++++++------------ 2 files changed, 105 insertions(+), 37 deletions(-) diff --git a/doc/fix_external.html b/doc/fix_external.html index d08bffc4e6..4fcadc1275 100644 --- a/doc/fix_external.html +++ b/doc/fix_external.html @@ -13,25 +13,49 @@

    Syntax:

    -
    fix ID group-ID external 
    +
    fix ID group-ID external mode args 
     
    -
    • ID, group-ID are documented in fix command +
      • ID, group-ID are documented in fix command +
      • external = style name of this fix command + +
      • mode = pf/callback or pf/array + +
          pf/callback args = Ncall Napply
        +    Ncall = make callback every Ncall steps
        +    Napply = apply callback forces every Napply steps
        +  pf/array args = Napply
        +    Napply = apply array forces every Napply steps 
        +
        +

      Examples:

      -
      fix 1 all external 
      +
      fix 1 all external pf/callback 1 1
      +fix 1 all external pf/callback 100 1
      +fix 1 all external pf/array 10 
       

      Description:

      -

      This fix makes a callback each timestep or minimization iteration to -an external driver program that is using LAMMPS as a library. This is -a way to let another program compute forces on atoms which LAMMPS will -include in its dynamics performed by the run command or its -iterations performed by the minimize command +

      This fix allows external programs that are running LAMMPS through its +library interface to modify certain +LAMMPS properties on specific timesteps, similar to the way other +fixes do. The external driver can be a C/C++ or Fortran +program or a Python +script.

      -

      The callback function "foo" will be invoked every timestep or -iteration as: +


      + +

      If mode is pf/callback then the fix will make a callback every +Ncall timesteps or minimization iteration to the external program. +The external program computes forces on atoms by setting values in an +array owned by the fix. The fix then adds these forces to each atom +in the group, once every Napply steps, similar to the way the fix +addforce command works. Note that if Ncall > +Napply, the force values produced by one callback will persist, and +be used multiple times to update atom forces. +

      +

      The callback function "foo" will be invoked by the fix as:

      foo(ptr,timestep,nlocal,ids,x,fexternal); 
       
      @@ -46,19 +70,31 @@ iteration as:
    • nlocal = # of atoms on this processor
    • ids = list of atom IDs on this processor
    • x = coordinates of atoms on this processor -
    • fexternal = forces on atoms on this processor +
    • fexternal = forces to add to atoms on this processor
    -

    Fexternal are the forces returned by the driver program, -which LAMMPS adds to the current force on each atom. +

    Fexternal are the forces returned by the driver program.

    -

    See the couple/lammps_quest/lmpqst.cpp file in the LAMMPS distribution -for an example of a coupling application that uses this fix, and how -it makes a call to the fix to specify what function the fix should -callback to. The sample application performs classical MD using -quantum forces computed by a density functional code Quest. +

    The fix has a set_callback() method which the external driver can call +to pass a pointer to its foo() function. See the +couple/lammps_quest/lmpqst.cpp file in the LAMMPS distribution for an +example of how this is done. This sample application performs +classical MD using quantum forces computed by a density functional +code Quest.

    +
    + +

    If mode is pf/array then the fix simply stores force values in an +array. The fix adds these forces to each atom in the group, once +every Napply steps, similar to the way the fix +addforce command works. It is up to the external +program to set the values in this array to the desired quantities, as +often as desired. For example, the driver program might perform an MD +run in stages of 1000 timesteps each. In between calls to the LAMMPS +run command, it could retrieve atom coordinates from +LAMMPS, compute forces, set values in the fix external array, etc. +

    Restart, fix_modify, output, run start/stop, minimize info:

    No information about this fix is written to binary restart diff --git a/doc/fix_external.txt b/doc/fix_external.txt index f8e12ded3a..4b7a2a5ea3 100644 --- a/doc/fix_external.txt +++ b/doc/fix_external.txt @@ -10,25 +10,45 @@ fix external command :h3 [Syntax:] -fix ID group-ID external :pre +fix ID group-ID external mode args :pre -ID, group-ID are documented in "fix"_fix.html command -external = style name of this fix command :ul +ID, group-ID are documented in "fix"_fix.html command :ulb,l +external = style name of this fix command :l +mode = {pf/callback} or {pf/array} :l + {pf/callback} args = Ncall Napply + Ncall = make callback every Ncall steps + Napply = apply callback forces every Napply steps + {pf/array} args = Napply + Napply = apply array forces every Napply steps :pre +:ule [Examples:] -fix 1 all external :pre +fix 1 all external pf/callback 1 1 +fix 1 all external pf/callback 100 1 +fix 1 all external pf/array 10 :pre [Description:] -This fix makes a callback each timestep or minimization iteration to -an external driver program that is using LAMMPS as a library. This is -a way to let another program compute forces on atoms which LAMMPS will -include in its dynamics performed by the "run"_run.html command or its -iterations performed by the "minimize"_minimize.html command +This fix allows external programs that are running LAMMPS through its +"library interface"_Section_howto.html#howto_19 to modify certain +LAMMPS properties on specific timesteps, similar to the way other +fixes do. The external driver can be a "C/C++ or Fortran +program"_Section_howto.html#howto_19 or a "Python +script"_Section_python.html. -The callback function "foo" will be invoked every timestep or -iteration as: +:line + +If mode is {pf/callback} then the fix will make a callback every +{Ncall} timesteps or minimization iteration to the external program. +The external program computes forces on atoms by setting values in an +array owned by the fix. The fix then adds these forces to each atom +in the group, once every {Napply} steps, similar to the way the "fix +addforce"_fix_addforce.html command works. Note that if {Ncall} > +{Napply}, the force values produced by one callback will persist, and +be used multiple times to update atom forces. + +The callback function "foo" will be invoked by the fix as: foo(ptr,timestep,nlocal,ids,x,fexternal); :pre @@ -43,19 +63,31 @@ timestep = current LAMMPS timestep nlocal = # of atoms on this processor ids = list of atom IDs on this processor x = coordinates of atoms on this processor -fexternal = forces on atoms on this processor :ul +fexternal = forces to add to atoms on this processor :ul -Fexternal are the forces returned by the driver program, -which LAMMPS adds to the current force on each atom. +Fexternal are the forces returned by the driver program. -See the couple/lammps_quest/lmpqst.cpp file in the LAMMPS distribution -for an example of a coupling application that uses this fix, and how -it makes a call to the fix to specify what function the fix should -callback to. The sample application performs classical MD using -quantum forces computed by a density functional code "Quest"_quest. +The fix has a set_callback() method which the external driver can call +to pass a pointer to its foo() function. See the +couple/lammps_quest/lmpqst.cpp file in the LAMMPS distribution for an +example of how this is done. This sample application performs +classical MD using quantum forces computed by a density functional +code "Quest"_quest. :link(quest,http://dft.sandia.gov/Quest) +:line + +If mode is {pf/array} then the fix simply stores force values in an +array. The fix adds these forces to each atom in the group, once +every {Napply} steps, similar to the way the "fix +addforce"_fix_addforce.html command works. It is up to the external +program to set the values in this array to the desired quantities, as +often as desired. For example, the driver program might perform an MD +run in stages of 1000 timesteps each. In between calls to the LAMMPS +"run"_run.html command, it could retrieve atom coordinates from +LAMMPS, compute forces, set values in the fix external array, etc. + [Restart, fix_modify, output, run start/stop, minimize info:] No information about this fix is written to "binary restart From 11a5f87d1ae1edad29738e5f232da80b3bba7fb2 Mon Sep 17 00:00:00 2001 From: sjplimp Date: Fri, 4 Jan 2013 17:19:58 +0000 Subject: [PATCH 37/61] git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@9225 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- src/fix_external.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fix_external.h b/src/fix_external.h index 9d4d8d1b62..35cd8deb03 100644 --- a/src/fix_external.h +++ b/src/fix_external.h @@ -41,7 +41,7 @@ class FixExternal : public Fix { int pack_exchange(int, double *); int unpack_exchange(int, double *); - typedef void (*FnPtr)(void *, int, int, int *, double **, double **); + typedef void (*FnPtr)(void *, bigint, int, int *, double **, double **); void set_callback(FnPtr, void *); private: From fe5de26b234758a9876bbf5975221eb04b6615a6 Mon Sep 17 00:00:00 2001 From: sjplimp Date: Fri, 4 Jan 2013 17:20:04 +0000 Subject: [PATCH 38/61] git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@9226 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- doc/fix_external.html | 27 +++++++++++++++------------ doc/fix_external.txt | 27 +++++++++++++++------------ 2 files changed, 30 insertions(+), 24 deletions(-) diff --git a/doc/fix_external.html b/doc/fix_external.html index 4fcadc1275..788079d6e9 100644 --- a/doc/fix_external.html +++ b/doc/fix_external.html @@ -55,14 +55,10 @@ addforce command works. Note that if Ncall > Napply, the force values produced by one callback will persist, and be used multiple times to update atom forces.

    -

    The callback function "foo" will be invoked by the fix as: +

    The callback function "foo" is invoked by the fix as:

    -
    foo(ptr,timestep,nlocal,ids,x,fexternal); 
    +
    foo(void *ptr, bigint timestep, int nlocal, int *ids, double **x, double **fexternal); 
     
    -

    which has this prototype: -

    -

    void foo(void *, int, int, int *, double **, double **); -

    The arguments are as follows:

    • ptr = pointer provided by and simply passed back to external driver @@ -72,6 +68,9 @@ be used multiple times to update atom forces.
    • x = coordinates of atoms on this processor
    • fexternal = forces to add to atoms on this processor
    +

    Note that timestep is a "bigint" which is defined in src/lmptype.h, +typically as a 64-bit integer. +

    Fexternal are the forces returned by the driver program.

    The fix has a set_callback() method which the external driver can call @@ -88,13 +87,17 @@ code Quest.

    If mode is pf/array then the fix simply stores force values in an array. The fix adds these forces to each atom in the group, once every Napply steps, similar to the way the fix -addforce command works. It is up to the external -program to set the values in this array to the desired quantities, as -often as desired. For example, the driver program might perform an MD -run in stages of 1000 timesteps each. In between calls to the LAMMPS -run command, it could retrieve atom coordinates from -LAMMPS, compute forces, set values in the fix external array, etc. +addforce command works.

    +

    It is up to the external program to set the values in this array to +the desired quantities, as often as desired. For example, the driver +program might perform an MD run in stages of 1000 timesteps each. In +between calls to the LAMMPS run command, it could retrieve +atom coordinates from LAMMPS, compute forces, set values in the fix +external array, etc. +

    +
    +

    Restart, fix_modify, output, run start/stop, minimize info:

    No information about this fix is written to binary restart diff --git a/doc/fix_external.txt b/doc/fix_external.txt index 4b7a2a5ea3..80bead420e 100644 --- a/doc/fix_external.txt +++ b/doc/fix_external.txt @@ -48,13 +48,9 @@ addforce"_fix_addforce.html command works. Note that if {Ncall} > {Napply}, the force values produced by one callback will persist, and be used multiple times to update atom forces. -The callback function "foo" will be invoked by the fix as: +The callback function "foo" is invoked by the fix as: -foo(ptr,timestep,nlocal,ids,x,fexternal); :pre - -which has this prototype: - -void foo(void *, int, int, int *, double **, double **); +foo(void *ptr, bigint timestep, int nlocal, int *ids, double **x, double **fexternal); :pre The arguments are as follows: @@ -65,6 +61,9 @@ ids = list of atom IDs on this processor x = coordinates of atoms on this processor fexternal = forces to add to atoms on this processor :ul +Note that timestep is a "bigint" which is defined in src/lmptype.h, +typically as a 64-bit integer. + Fexternal are the forces returned by the driver program. The fix has a set_callback() method which the external driver can call @@ -81,12 +80,16 @@ code "Quest"_quest. If mode is {pf/array} then the fix simply stores force values in an array. The fix adds these forces to each atom in the group, once every {Napply} steps, similar to the way the "fix -addforce"_fix_addforce.html command works. It is up to the external -program to set the values in this array to the desired quantities, as -often as desired. For example, the driver program might perform an MD -run in stages of 1000 timesteps each. In between calls to the LAMMPS -"run"_run.html command, it could retrieve atom coordinates from -LAMMPS, compute forces, set values in the fix external array, etc. +addforce"_fix_addforce.html command works. + +It is up to the external program to set the values in this array to +the desired quantities, as often as desired. For example, the driver +program might perform an MD run in stages of 1000 timesteps each. In +between calls to the LAMMPS "run"_run.html command, it could retrieve +atom coordinates from LAMMPS, compute forces, set values in the fix +external array, etc. + +:line [Restart, fix_modify, output, run start/stop, minimize info:] From 9b87f881246e333dd5f8242173451c400b2e0015 Mon Sep 17 00:00:00 2001 From: sjplimp Date: Fri, 4 Jan 2013 17:58:46 +0000 Subject: [PATCH 39/61] git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@9227 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- examples/COUPLE/lammps_quest/Makefile.g++ | 2 +- examples/COUPLE/lammps_quest/README | 2 +- examples/COUPLE/lammps_quest/in.lammps | 2 +- examples/COUPLE/lammps_quest/lmpqst.cpp | 8 +++++--- src/Makefile.lib | 4 ++-- src/Makefile.shlib | 4 ++-- src/fix_external.cpp | 1 - src/fix_external.h | 1 - 8 files changed, 12 insertions(+), 12 deletions(-) diff --git a/examples/COUPLE/lammps_quest/Makefile.g++ b/examples/COUPLE/lammps_quest/Makefile.g++ index e9e4020091..2bb32e8a69 100644 --- a/examples/COUPLE/lammps_quest/Makefile.g++ +++ b/examples/COUPLE/lammps_quest/Makefile.g++ @@ -11,7 +11,7 @@ CCFLAGS = -g -O -DMPICH_IGNORE_CXX_SEEK -I../library DEPFLAGS = -M LINK = g++ LINKFLAGS = -g -O -L../library -L${LAMMPS}/src -USRLIB = -lcouple -llmp_g++ +USRLIB = -lcouple -llammps_g++ SYSLIB = -lfftw -lmpich -lpthread ARCHIVE = ar ARFLAGS = -rc diff --git a/examples/COUPLE/lammps_quest/README b/examples/COUPLE/lammps_quest/README index 8efd950b72..8f4a365858 100644 --- a/examples/COUPLE/lammps_quest/README +++ b/examples/COUPLE/lammps_quest/README @@ -14,7 +14,7 @@ qstexe.h contains full pathname to Quest executable After editing the Makefile, lmppath.h, and qstexe.h to make them suitable for your box, type: -g++ -f Makefile.g++ +make -f Makefile.g++ and you should get the lmpqst executable. diff --git a/examples/COUPLE/lammps_quest/in.lammps b/examples/COUPLE/lammps_quest/in.lammps index c8d7faad6f..9813e7c2a8 100644 --- a/examples/COUPLE/lammps_quest/in.lammps +++ b/examples/COUPLE/lammps_quest/in.lammps @@ -14,7 +14,7 @@ mass 1 28.08 velocity all create 300.0 87293 loop geom fix 1 all nve -fix 2 all external +fix 2 all external pf/callback 1 1 dump 1 all custom 1 dump.md id type x y z fx fy fz thermo 1 diff --git a/examples/COUPLE/lammps_quest/lmpqst.cpp b/examples/COUPLE/lammps_quest/lmpqst.cpp index 661d8c04cd..a9f364a232 100644 --- a/examples/COUPLE/lammps_quest/lmpqst.cpp +++ b/examples/COUPLE/lammps_quest/lmpqst.cpp @@ -10,6 +10,7 @@ #include "stdio.h" #include "stdlib.h" #include "string.h" +#include "stdint.h" #include "many2one.h" #include "one2many.h" @@ -35,7 +36,7 @@ using namespace LAMMPS_NS; #define ANGSTROM_per_BOHR 0.529 #define EV_per_RYDBERG 13.6056923 -void quest_callback(void *, int, int, int *, double **, double **); +void quest_callback(void *, bigint, int, int *, double **, double **); struct Info { int me; @@ -92,6 +93,7 @@ int main(int narg, char **arg) info.quest_input = quest_input; // set callback to Quest inside fix external + // this could also be done thru Python, using a ctypes callback int ifix = lmp->modify->find_fix("2"); FixExternal *fix = (FixExternal *) lmp->modify->fix[ifix]; @@ -122,8 +124,8 @@ int main(int narg, char **arg) f can be NULL if proc owns no atoms ------------------------------------------------------------------------- */ -void quest_callback(void *ptr, int ntimestep, int nlocal, - int *id, double **x, double **f) +void quest_callback(void *ptr, bigint ntimestep, + int nlocal, int *id, double **x, double **f) { int i,j; char str[128]; diff --git a/src/Makefile.lib b/src/Makefile.lib index 7e27fef24d..1ab8281ed3 100644 --- a/src/Makefile.lib +++ b/src/Makefile.lib @@ -7,9 +7,9 @@ SHELL = /bin/sh ROOT = lammps EXE = lib$(ROOT)_$@.a -SRC = angle.cpp angle_charmm.cpp angle_class2.cpp angle_cosine.cpp angle_cosine_delta.cpp angle_cosine_periodic.cpp angle_cosine_squared.cpp angle_harmonic.cpp angle_hybrid.cpp angle_table.cpp atom.cpp atom_map.cpp atom_vec.cpp atom_vec_angle.cpp atom_vec_atomic.cpp atom_vec_bond.cpp atom_vec_charge.cpp atom_vec_dipole.cpp atom_vec_ellipsoid.cpp atom_vec_full.cpp atom_vec_hybrid.cpp atom_vec_line.cpp atom_vec_molecular.cpp atom_vec_peri.cpp atom_vec_sphere.cpp atom_vec_tri.cpp balance.cpp bond.cpp bond_class2.cpp bond_fene.cpp bond_fene_expand.cpp bond_harmonic.cpp bond_hybrid.cpp bond_morse.cpp bond_nonlinear.cpp bond_quartic.cpp bond_table.cpp change_box.cpp comm.cpp compute.cpp compute_angle_local.cpp compute_atom_molecule.cpp compute_bond_local.cpp compute_centro_atom.cpp compute_cluster_atom.cpp compute_cna_atom.cpp compute_com.cpp compute_com_molecule.cpp compute_contact_atom.cpp compute_coord_atom.cpp compute_damage_atom.cpp compute_dihedral_local.cpp compute_displace_atom.cpp compute_erotate_asphere.cpp compute_erotate_sphere.cpp compute_erotate_sphere_atom.cpp compute_event_displace.cpp compute_group_group.cpp compute_gyration.cpp compute_gyration_molecule.cpp compute_heat_flux.cpp compute_improper_local.cpp compute_ke.cpp compute_ke_atom.cpp compute_msd.cpp compute_msd_molecule.cpp compute_pair.cpp compute_pair_local.cpp compute_pe.cpp compute_pe_atom.cpp compute_pressure.cpp compute_property_atom.cpp compute_property_local.cpp compute_property_molecule.cpp compute_rdf.cpp compute_reduce.cpp compute_reduce_region.cpp compute_slice.cpp compute_stress_atom.cpp compute_temp.cpp compute_temp_asphere.cpp compute_temp_com.cpp compute_temp_deform.cpp compute_temp_partial.cpp compute_temp_profile.cpp compute_temp_ramp.cpp compute_temp_region.cpp compute_temp_sphere.cpp compute_ti.cpp create_atoms.cpp create_box.cpp delete_atoms.cpp delete_bonds.cpp dihedral.cpp dihedral_charmm.cpp dihedral_class2.cpp dihedral_harmonic.cpp dihedral_helix.cpp dihedral_hybrid.cpp dihedral_multi_harmonic.cpp dihedral_opls.cpp displace_atoms.cpp domain.cpp dump.cpp dump_atom.cpp dump_cfg.cpp dump_custom.cpp dump_dcd.cpp dump_image.cpp dump_local.cpp dump_xtc.cpp dump_xyz.cpp error.cpp ewald.cpp fft3d.cpp fft3d_wrap.cpp finish.cpp fix.cpp fix_adapt.cpp fix_addforce.cpp fix_append_atoms.cpp fix_ave_atom.cpp fix_ave_correlate.cpp fix_ave_histo.cpp fix_ave_spatial.cpp fix_ave_time.cpp fix_aveforce.cpp fix_balance.cpp fix_bond_break.cpp fix_bond_create.cpp fix_bond_swap.cpp fix_box_relax.cpp fix_deform.cpp fix_deposit.cpp fix_drag.cpp fix_dt_reset.cpp fix_efield.cpp fix_enforce2d.cpp fix_evaporate.cpp fix_event.cpp fix_event_prd.cpp fix_event_tad.cpp fix_external.cpp fix_freeze.cpp fix_gcmc.cpp fix_gravity.cpp fix_heat.cpp fix_indent.cpp fix_langevin.cpp fix_lineforce.cpp fix_minimize.cpp fix_momentum.cpp fix_move.cpp fix_msst.cpp fix_neb.cpp fix_nh.cpp fix_nh_asphere.cpp fix_nh_sphere.cpp fix_nph.cpp fix_nph_asphere.cpp fix_nph_sphere.cpp fix_nphug.cpp fix_npt.cpp fix_npt_asphere.cpp fix_npt_sphere.cpp fix_nve.cpp fix_nve_asphere.cpp fix_nve_asphere_noforce.cpp fix_nve_limit.cpp fix_nve_line.cpp fix_nve_noforce.cpp fix_nve_sphere.cpp fix_nve_tri.cpp fix_nvt.cpp fix_nvt_asphere.cpp fix_nvt_sllod.cpp fix_nvt_sphere.cpp fix_orient_fcc.cpp fix_peri_neigh.cpp fix_planeforce.cpp fix_pour.cpp fix_press_berendsen.cpp fix_print.cpp fix_qeq_comb.cpp fix_read_restart.cpp fix_recenter.cpp fix_respa.cpp fix_restrain.cpp fix_rigid.cpp fix_rigid_nve.cpp fix_rigid_nvt.cpp fix_setforce.cpp fix_shake.cpp fix_shear_history.cpp fix_spring.cpp fix_spring_rg.cpp fix_spring_self.cpp fix_srd.cpp fix_store_force.cpp fix_store_state.cpp fix_temp_berendsen.cpp fix_temp_rescale.cpp fix_thermal_conductivity.cpp fix_tmd.cpp fix_ttm.cpp fix_viscosity.cpp fix_viscous.cpp fix_wall.cpp fix_wall_colloid.cpp fix_wall_gran.cpp fix_wall_harmonic.cpp fix_wall_lj126.cpp fix_wall_lj93.cpp fix_wall_piston.cpp fix_wall_reflect.cpp fix_wall_region.cpp fix_wall_srd.cpp force.cpp group.cpp image.cpp improper.cpp improper_class2.cpp improper_cvff.cpp improper_harmonic.cpp improper_hybrid.cpp improper_umbrella.cpp input.cpp integrate.cpp irregular.cpp kspace.cpp lammps.cpp lattice.cpp library.cpp math_extra.cpp memory.cpp min.cpp min_cg.cpp min_fire.cpp min_hftn.cpp min_linesearch.cpp min_quickmin.cpp min_sd.cpp minimize.cpp modify.cpp neb.cpp neigh_bond.cpp neigh_derive.cpp neigh_full.cpp neigh_gran.cpp neigh_half_bin.cpp neigh_half_multi.cpp neigh_half_nsq.cpp neigh_list.cpp neigh_request.cpp neigh_respa.cpp neigh_stencil.cpp neighbor.cpp output.cpp pair.cpp pair_adp.cpp pair_airebo.cpp pair_beck.cpp pair_bop.cpp pair_born.cpp pair_born_coul_long.cpp pair_born_coul_wolf.cpp pair_brownian.cpp pair_brownian_poly.cpp pair_buck.cpp pair_buck_coul_cut.cpp pair_buck_coul_long.cpp pair_colloid.cpp pair_comb.cpp pair_coul_cut.cpp pair_coul_debye.cpp pair_coul_long.cpp pair_coul_wolf.cpp pair_dipole_cut.cpp pair_dpd.cpp pair_dpd_tstat.cpp pair_dsmc.cpp pair_eam.cpp pair_eam_alloy.cpp pair_eam_alloy_opt.cpp pair_eam_fs.cpp pair_eam_fs_opt.cpp pair_eam_opt.cpp pair_eim.cpp pair_gauss.cpp pair_gayberne.cpp pair_gran_hertz_history.cpp pair_gran_hooke.cpp pair_gran_hooke_history.cpp pair_hbond_dreiding_lj.cpp pair_hbond_dreiding_morse.cpp pair_hybrid.cpp pair_hybrid_overlay.cpp pair_lcbop.cpp pair_line_lj.cpp pair_lj96_cut.cpp pair_lj_charmm_coul_charmm.cpp pair_lj_charmm_coul_charmm_implicit.cpp pair_lj_charmm_coul_long.cpp pair_lj_charmm_coul_long_opt.cpp pair_lj_class2.cpp pair_lj_class2_coul_cut.cpp pair_lj_class2_coul_long.cpp pair_lj_cubic.cpp pair_lj_cut.cpp pair_lj_cut_coul_cut.cpp pair_lj_cut_coul_debye.cpp pair_lj_cut_coul_long.cpp pair_lj_cut_coul_long_opt.cpp pair_lj_cut_coul_long_tip4p.cpp pair_lj_cut_coul_long_tip4p_opt.cpp pair_lj_cut_opt.cpp pair_lj_expand.cpp pair_lj_gromacs.cpp pair_lj_gromacs_coul_gromacs.cpp pair_lj_smooth.cpp pair_lj_smooth_linear.cpp pair_lubricate.cpp pair_lubricateU.cpp pair_lubricateU_poly.cpp pair_lubricate_poly.cpp pair_morse.cpp pair_morse_opt.cpp pair_peri_lps.cpp pair_peri_pmb.cpp pair_rebo.cpp pair_resquared.cpp pair_soft.cpp pair_sw.cpp pair_table.cpp pair_tersoff.cpp pair_tersoff_zbl.cpp pair_tri_lj.cpp pair_yukawa.cpp pair_yukawa_colloid.cpp pppm.cpp pppm_cg.cpp pppm_old.cpp pppm_tip4p.cpp prd.cpp procmap.cpp random_mars.cpp random_park.cpp read_data.cpp read_dump.cpp read_restart.cpp reader.cpp reader_native.cpp reader_xyz.cpp region.cpp region_block.cpp region_cone.cpp region_cylinder.cpp region_intersect.cpp region_plane.cpp region_prism.cpp region_sphere.cpp region_union.cpp remap.cpp remap_wrap.cpp replicate.cpp rerun.cpp respa.cpp run.cpp set.cpp special.cpp tad.cpp temper.cpp thermo.cpp timer.cpp universe.cpp update.cpp variable.cpp velocity.cpp verlet.cpp verlet_split.cpp write_restart.cpp xdr_compat.cpp +SRC = angle.cpp angle_charmm.cpp angle_class2.cpp angle_cosine.cpp angle_cosine_delta.cpp angle_cosine_periodic.cpp angle_cosine_squared.cpp angle_harmonic.cpp angle_hybrid.cpp angle_table.cpp atom.cpp atom_map.cpp atom_vec.cpp atom_vec_angle.cpp atom_vec_atomic.cpp atom_vec_bond.cpp atom_vec_charge.cpp atom_vec_dipole.cpp atom_vec_ellipsoid.cpp atom_vec_full.cpp atom_vec_hybrid.cpp atom_vec_line.cpp atom_vec_molecular.cpp atom_vec_peri.cpp atom_vec_sphere.cpp atom_vec_tri.cpp balance.cpp bond.cpp bond_class2.cpp bond_fene.cpp bond_fene_expand.cpp bond_harmonic.cpp bond_hybrid.cpp bond_morse.cpp bond_nonlinear.cpp bond_quartic.cpp bond_table.cpp change_box.cpp comm.cpp commgrid.cpp compute.cpp compute_angle_local.cpp compute_atom_molecule.cpp compute_bond_local.cpp compute_centro_atom.cpp compute_cluster_atom.cpp compute_cna_atom.cpp compute_com.cpp compute_com_molecule.cpp compute_contact_atom.cpp compute_coord_atom.cpp compute_damage_atom.cpp compute_dihedral_local.cpp compute_displace_atom.cpp compute_erotate_asphere.cpp compute_erotate_sphere.cpp compute_erotate_sphere_atom.cpp compute_event_displace.cpp compute_group_group.cpp compute_gyration.cpp compute_gyration_molecule.cpp compute_heat_flux.cpp compute_improper_local.cpp compute_inertia_molecule.cpp compute_ke.cpp compute_ke_atom.cpp compute_msd.cpp compute_msd_molecule.cpp compute_pair.cpp compute_pair_local.cpp compute_pe.cpp compute_pe_atom.cpp compute_pressure.cpp compute_property_atom.cpp compute_property_local.cpp compute_property_molecule.cpp compute_rdf.cpp compute_reduce.cpp compute_reduce_region.cpp compute_slice.cpp compute_stress_atom.cpp compute_temp.cpp compute_temp_asphere.cpp compute_temp_com.cpp compute_temp_deform.cpp compute_temp_partial.cpp compute_temp_profile.cpp compute_temp_ramp.cpp compute_temp_region.cpp compute_temp_sphere.cpp compute_ti.cpp create_atoms.cpp create_box.cpp delete_atoms.cpp delete_bonds.cpp dihedral.cpp dihedral_charmm.cpp dihedral_class2.cpp dihedral_harmonic.cpp dihedral_helix.cpp dihedral_hybrid.cpp dihedral_multi_harmonic.cpp dihedral_opls.cpp displace_atoms.cpp domain.cpp dump.cpp dump_atom.cpp dump_cfg.cpp dump_custom.cpp dump_dcd.cpp dump_image.cpp dump_local.cpp dump_xtc.cpp dump_xyz.cpp error.cpp ewald.cpp ewald_disp.cpp fft3d.cpp fft3d_wrap.cpp finish.cpp fix.cpp fix_adapt.cpp fix_addforce.cpp fix_append_atoms.cpp fix_ave_atom.cpp fix_ave_correlate.cpp fix_ave_histo.cpp fix_ave_spatial.cpp fix_ave_time.cpp fix_aveforce.cpp fix_balance.cpp fix_bond_break.cpp fix_bond_create.cpp fix_bond_swap.cpp fix_box_relax.cpp fix_deform.cpp fix_deposit.cpp fix_drag.cpp fix_dt_reset.cpp fix_efield.cpp fix_enforce2d.cpp fix_evaporate.cpp fix_event.cpp fix_event_prd.cpp fix_event_tad.cpp fix_external.cpp fix_freeze.cpp fix_gcmc.cpp fix_gravity.cpp fix_heat.cpp fix_indent.cpp fix_langevin.cpp fix_lineforce.cpp fix_minimize.cpp fix_momentum.cpp fix_move.cpp fix_msst.cpp fix_neb.cpp fix_nh.cpp fix_nh_asphere.cpp fix_nh_sphere.cpp fix_nph.cpp fix_nph_asphere.cpp fix_nph_sphere.cpp fix_nphug.cpp fix_npt.cpp fix_npt_asphere.cpp fix_npt_sphere.cpp fix_nve.cpp fix_nve_asphere.cpp fix_nve_asphere_noforce.cpp fix_nve_limit.cpp fix_nve_line.cpp fix_nve_noforce.cpp fix_nve_sphere.cpp fix_nve_tri.cpp fix_nvt.cpp fix_nvt_asphere.cpp fix_nvt_sllod.cpp fix_nvt_sphere.cpp fix_orient_fcc.cpp fix_peri_neigh.cpp fix_planeforce.cpp fix_pour.cpp fix_press_berendsen.cpp fix_print.cpp fix_qeq_comb.cpp fix_read_restart.cpp fix_recenter.cpp fix_respa.cpp fix_restrain.cpp fix_rigid.cpp fix_rigid_nh.cpp fix_rigid_nph.cpp fix_rigid_npt.cpp fix_rigid_nve.cpp fix_rigid_nvt.cpp fix_setforce.cpp fix_shake.cpp fix_shear_history.cpp fix_spring.cpp fix_spring_rg.cpp fix_spring_self.cpp fix_srd.cpp fix_store_force.cpp fix_store_state.cpp fix_temp_berendsen.cpp fix_temp_rescale.cpp fix_thermal_conductivity.cpp fix_tmd.cpp fix_ttm.cpp fix_viscosity.cpp fix_viscous.cpp fix_wall.cpp fix_wall_colloid.cpp fix_wall_gran.cpp fix_wall_harmonic.cpp fix_wall_lj126.cpp fix_wall_lj93.cpp fix_wall_piston.cpp fix_wall_reflect.cpp fix_wall_region.cpp fix_wall_srd.cpp force.cpp group.cpp image.cpp improper.cpp improper_class2.cpp improper_cvff.cpp improper_harmonic.cpp improper_hybrid.cpp improper_umbrella.cpp input.cpp integrate.cpp irregular.cpp kspace.cpp lammps.cpp lattice.cpp library.cpp math_extra.cpp memory.cpp min.cpp min_cg.cpp min_fire.cpp min_hftn.cpp min_linesearch.cpp min_quickmin.cpp min_sd.cpp minimize.cpp modify.cpp msm.cpp neb.cpp neigh_bond.cpp neigh_derive.cpp neigh_full.cpp neigh_gran.cpp neigh_half_bin.cpp neigh_half_multi.cpp neigh_half_nsq.cpp neigh_list.cpp neigh_request.cpp neigh_respa.cpp neigh_stencil.cpp neighbor.cpp output.cpp pair.cpp pair_adp.cpp pair_airebo.cpp pair_beck.cpp pair_bop.cpp pair_born.cpp pair_born_coul_long.cpp pair_born_coul_msm.cpp pair_born_coul_wolf.cpp pair_brownian.cpp pair_brownian_poly.cpp pair_buck.cpp pair_buck_coul_cut.cpp pair_buck_coul_long.cpp pair_buck_coul_msm.cpp pair_buck_long_coul_long.cpp pair_colloid.cpp pair_comb.cpp pair_coul_cut.cpp pair_coul_debye.cpp pair_coul_dsf.cpp pair_coul_long.cpp pair_coul_msm.cpp pair_coul_wolf.cpp pair_dipole_cut.cpp pair_dpd.cpp pair_dpd_tstat.cpp pair_dsmc.cpp pair_eam.cpp pair_eam_alloy.cpp pair_eam_alloy_opt.cpp pair_eam_fs.cpp pair_eam_fs_opt.cpp pair_eam_opt.cpp pair_eim.cpp pair_gauss.cpp pair_gayberne.cpp pair_gran_hertz_history.cpp pair_gran_hooke.cpp pair_gran_hooke_history.cpp pair_hbond_dreiding_lj.cpp pair_hbond_dreiding_morse.cpp pair_hybrid.cpp pair_hybrid_overlay.cpp pair_lcbop.cpp pair_line_lj.cpp pair_lj96_cut.cpp pair_lj_charmm_coul_charmm.cpp pair_lj_charmm_coul_charmm_implicit.cpp pair_lj_charmm_coul_long.cpp pair_lj_charmm_coul_long_opt.cpp pair_lj_charmm_coul_msm.cpp pair_lj_class2.cpp pair_lj_class2_coul_cut.cpp pair_lj_class2_coul_long.cpp pair_lj_cubic.cpp pair_lj_cut.cpp pair_lj_cut_coul_cut.cpp pair_lj_cut_coul_debye.cpp pair_lj_cut_coul_dsf.cpp pair_lj_cut_coul_long.cpp pair_lj_cut_coul_long_opt.cpp pair_lj_cut_coul_msm.cpp pair_lj_cut_opt.cpp pair_lj_cut_tip4p_long.cpp pair_lj_cut_tip4p_long_opt.cpp pair_lj_expand.cpp pair_lj_gromacs.cpp pair_lj_gromacs_coul_gromacs.cpp pair_lj_long_coul_long.cpp pair_lj_long_tip4p_long.cpp pair_lj_smooth.cpp pair_lj_smooth_linear.cpp pair_lubricate.cpp pair_lubricateU.cpp pair_lubricateU_poly.cpp pair_lubricate_poly.cpp pair_mie_cut.cpp pair_morse.cpp pair_morse_opt.cpp pair_peri_lps.cpp pair_peri_pmb.cpp pair_rebo.cpp pair_resquared.cpp pair_soft.cpp pair_sw.cpp pair_table.cpp pair_tersoff.cpp pair_tersoff_zbl.cpp pair_tri_lj.cpp pair_yukawa.cpp pair_yukawa_colloid.cpp pppm.cpp pppm_cg.cpp pppm_disp.cpp pppm_disp_tip4p.cpp pppm_old.cpp pppm_tip4p.cpp prd.cpp procmap.cpp random_mars.cpp random_park.cpp read_data.cpp read_dump.cpp read_restart.cpp reader.cpp reader_native.cpp reader_xyz.cpp region.cpp region_block.cpp region_cone.cpp region_cylinder.cpp region_intersect.cpp region_plane.cpp region_prism.cpp region_sphere.cpp region_union.cpp remap.cpp remap_wrap.cpp replicate.cpp rerun.cpp respa.cpp run.cpp set.cpp special.cpp tad.cpp temper.cpp thermo.cpp timer.cpp universe.cpp update.cpp variable.cpp velocity.cpp verlet.cpp verlet_split.cpp write_restart.cpp xdr_compat.cpp -INC = accelerator_cuda.h accelerator_omp.h angle.h angle_charmm.h angle_class2.h angle_cosine.h angle_cosine_delta.h angle_cosine_periodic.h angle_cosine_squared.h angle_harmonic.h angle_hybrid.h angle_table.h atom.h atom_map.h atom_vec.h atom_vec_angle.h atom_vec_atomic.h atom_vec_bond.h atom_vec_charge.h atom_vec_dipole.h atom_vec_ellipsoid.h atom_vec_full.h atom_vec_hybrid.h atom_vec_line.h atom_vec_molecular.h atom_vec_peri.h atom_vec_sphere.h atom_vec_tri.h balance.h bond.h bond_class2.h bond_fene.h bond_fene_expand.h bond_harmonic.h bond_hybrid.h bond_morse.h bond_nonlinear.h bond_quartic.h bond_table.h change_box.h comm.h compute.h compute_angle_local.h compute_atom_molecule.h compute_bond_local.h compute_centro_atom.h compute_cluster_atom.h compute_cna_atom.h compute_com.h compute_com_molecule.h compute_contact_atom.h compute_coord_atom.h compute_damage_atom.h compute_dihedral_local.h compute_displace_atom.h compute_erotate_asphere.h compute_erotate_sphere.h compute_erotate_sphere_atom.h compute_event_displace.h compute_group_group.h compute_gyration.h compute_gyration_molecule.h compute_heat_flux.h compute_improper_local.h compute_ke.h compute_ke_atom.h compute_msd.h compute_msd_molecule.h compute_pair.h compute_pair_local.h compute_pe.h compute_pe_atom.h compute_pressure.h compute_property_atom.h compute_property_local.h compute_property_molecule.h compute_rdf.h compute_reduce.h compute_reduce_region.h compute_slice.h compute_stress_atom.h compute_temp.h compute_temp_asphere.h compute_temp_com.h compute_temp_deform.h compute_temp_partial.h compute_temp_profile.h compute_temp_ramp.h compute_temp_region.h compute_temp_sphere.h compute_ti.h create_atoms.h create_box.h delete_atoms.h delete_bonds.h dihedral.h dihedral_charmm.h dihedral_class2.h dihedral_harmonic.h dihedral_helix.h dihedral_hybrid.h dihedral_multi_harmonic.h dihedral_opls.h displace_atoms.h domain.h dump.h dump_atom.h dump_cfg.h dump_custom.h dump_dcd.h dump_image.h dump_local.h dump_xtc.h dump_xyz.h error.h ewald.h fft3d.h fft3d_wrap.h finish.h fix.h fix_adapt.h fix_addforce.h fix_append_atoms.h fix_ave_atom.h fix_ave_correlate.h fix_ave_histo.h fix_ave_spatial.h fix_ave_time.h fix_aveforce.h fix_balance.h fix_bond_break.h fix_bond_create.h fix_bond_swap.h fix_box_relax.h fix_deform.h fix_deposit.h fix_drag.h fix_dt_reset.h fix_efield.h fix_enforce2d.h fix_evaporate.h fix_event.h fix_event_prd.h fix_event_tad.h fix_external.h fix_freeze.h fix_gcmc.h fix_gravity.h fix_heat.h fix_indent.h fix_langevin.h fix_lineforce.h fix_minimize.h fix_momentum.h fix_move.h fix_msst.h fix_neb.h fix_nh.h fix_nh_asphere.h fix_nh_sphere.h fix_nph.h fix_nph_asphere.h fix_nph_sphere.h fix_nphug.h fix_npt.h fix_npt_asphere.h fix_npt_sphere.h fix_nve.h fix_nve_asphere.h fix_nve_asphere_noforce.h fix_nve_limit.h fix_nve_line.h fix_nve_noforce.h fix_nve_sphere.h fix_nve_tri.h fix_nvt.h fix_nvt_asphere.h fix_nvt_sllod.h fix_nvt_sphere.h fix_orient_fcc.h fix_peri_neigh.h fix_planeforce.h fix_pour.h fix_press_berendsen.h fix_print.h fix_qeq_comb.h fix_read_restart.h fix_recenter.h fix_respa.h fix_restrain.h fix_rigid.h fix_rigid_nve.h fix_rigid_nvt.h fix_setforce.h fix_shake.h fix_shear_history.h fix_spring.h fix_spring_rg.h fix_spring_self.h fix_srd.h fix_store_force.h fix_store_state.h fix_temp_berendsen.h fix_temp_rescale.h fix_thermal_conductivity.h fix_tmd.h fix_ttm.h fix_viscosity.h fix_viscous.h fix_wall.h fix_wall_colloid.h fix_wall_gran.h fix_wall_harmonic.h fix_wall_lj126.h fix_wall_lj93.h fix_wall_piston.h fix_wall_reflect.h fix_wall_region.h fix_wall_srd.h force.h group.h image.h improper.h improper_class2.h improper_cvff.h improper_harmonic.h improper_hybrid.h improper_umbrella.h input.h integrate.h irregular.h kissfft.h kspace.h lammps.h lattice.h library.h lmptype.h lmpwindows.h math_const.h math_extra.h memory.h min.h min_cg.h min_fire.h min_hftn.h min_linesearch.h min_quickmin.h min_sd.h minimize.h modify.h neb.h neigh_bond.h neigh_derive.h neigh_full.h neigh_gran.h neigh_half_bin.h neigh_half_multi.h neigh_half_nsq.h neigh_list.h neigh_request.h neigh_respa.h neighbor.h output.h pack.h pair.h pair_adp.h pair_airebo.h pair_beck.h pair_bop.h pair_born.h pair_born_coul_long.h pair_born_coul_wolf.h pair_brownian.h pair_brownian_poly.h pair_buck.h pair_buck_coul_cut.h pair_buck_coul_long.h pair_colloid.h pair_comb.h pair_coul_cut.h pair_coul_debye.h pair_coul_long.h pair_coul_wolf.h pair_dipole_cut.h pair_dpd.h pair_dpd_tstat.h pair_dsmc.h pair_eam.h pair_eam_alloy.h pair_eam_alloy_opt.h pair_eam_fs.h pair_eam_fs_opt.h pair_eam_opt.h pair_eim.h pair_gauss.h pair_gayberne.h pair_gran_hertz_history.h pair_gran_hooke.h pair_gran_hooke_history.h pair_hbond_dreiding_lj.h pair_hbond_dreiding_morse.h pair_hybrid.h pair_hybrid_overlay.h pair_lcbop.h pair_line_lj.h pair_lj96_cut.h pair_lj_charmm_coul_charmm.h pair_lj_charmm_coul_charmm_implicit.h pair_lj_charmm_coul_long.h pair_lj_charmm_coul_long_opt.h pair_lj_class2.h pair_lj_class2_coul_cut.h pair_lj_class2_coul_long.h pair_lj_cubic.h pair_lj_cut.h pair_lj_cut_coul_cut.h pair_lj_cut_coul_debye.h pair_lj_cut_coul_long.h pair_lj_cut_coul_long_opt.h pair_lj_cut_coul_long_tip4p.h pair_lj_cut_coul_long_tip4p_opt.h pair_lj_cut_opt.h pair_lj_expand.h pair_lj_gromacs.h pair_lj_gromacs_coul_gromacs.h pair_lj_smooth.h pair_lj_smooth_linear.h pair_lubricate.h pair_lubricateU.h pair_lubricateU_poly.h pair_lubricate_poly.h pair_morse.h pair_morse_opt.h pair_peri_lps.h pair_peri_pmb.h pair_rebo.h pair_resquared.h pair_soft.h pair_sw.h pair_table.h pair_tersoff.h pair_tersoff_zbl.h pair_tri_lj.h pair_yukawa.h pair_yukawa_colloid.h pointers.h pppm.h pppm_cg.h pppm_old.h pppm_tip4p.h prd.h procmap.h random_mars.h random_park.h read_data.h read_dump.h read_restart.h reader.h reader_native.h reader_xyz.h region.h region_block.h region_cone.h region_cylinder.h region_intersect.h region_plane.h region_prism.h region_sphere.h region_union.h remap.h remap_wrap.h replicate.h rerun.h respa.h run.h set.h special.h style_angle.h style_atom.h style_bond.h style_command.h style_compute.h style_dihedral.h style_dump.h style_fix.h style_improper.h style_integrate.h style_kspace.h style_minimize.h style_pair.h style_reader.h style_region.h suffix.h tad.h temper.h thermo.h timer.h universe.h update.h variable.h velocity.h verlet.h verlet_split.h version.h write_restart.h xdr_compat.h +INC = accelerator_cuda.h accelerator_omp.h angle.h angle_charmm.h angle_class2.h angle_cosine.h angle_cosine_delta.h angle_cosine_periodic.h angle_cosine_squared.h angle_harmonic.h angle_hybrid.h angle_table.h atom.h atom_map.h atom_masks.h atom_vec.h atom_vec_angle.h atom_vec_atomic.h atom_vec_bond.h atom_vec_charge.h atom_vec_dipole.h atom_vec_ellipsoid.h atom_vec_full.h atom_vec_hybrid.h atom_vec_line.h atom_vec_molecular.h atom_vec_peri.h atom_vec_sphere.h atom_vec_tri.h balance.h bond.h bond_class2.h bond_fene.h bond_fene_expand.h bond_harmonic.h bond_hybrid.h bond_morse.h bond_nonlinear.h bond_quartic.h bond_table.h change_box.h comm.h commgrid.h compute.h compute_angle_local.h compute_atom_molecule.h compute_bond_local.h compute_centro_atom.h compute_cluster_atom.h compute_cna_atom.h compute_com.h compute_com_molecule.h compute_contact_atom.h compute_coord_atom.h compute_damage_atom.h compute_dihedral_local.h compute_displace_atom.h compute_erotate_asphere.h compute_erotate_sphere.h compute_erotate_sphere_atom.h compute_event_displace.h compute_group_group.h compute_gyration.h compute_gyration_molecule.h compute_heat_flux.h compute_improper_local.h compute_inertia_molecule.h compute_ke.h compute_ke_atom.h compute_msd.h compute_msd_molecule.h compute_pair.h compute_pair_local.h compute_pe.h compute_pe_atom.h compute_pressure.h compute_property_atom.h compute_property_local.h compute_property_molecule.h compute_rdf.h compute_reduce.h compute_reduce_region.h compute_slice.h compute_stress_atom.h compute_temp.h compute_temp_asphere.h compute_temp_com.h compute_temp_deform.h compute_temp_partial.h compute_temp_profile.h compute_temp_ramp.h compute_temp_region.h compute_temp_sphere.h compute_ti.h create_atoms.h create_box.h delete_atoms.h delete_bonds.h dihedral.h dihedral_charmm.h dihedral_class2.h dihedral_harmonic.h dihedral_helix.h dihedral_hybrid.h dihedral_multi_harmonic.h dihedral_opls.h displace_atoms.h domain.h dump.h dump_atom.h dump_cfg.h dump_custom.h dump_dcd.h dump_image.h dump_local.h dump_xtc.h dump_xyz.h error.h ewald.h ewald_disp.h fft3d.h fft3d_wrap.h finish.h fix.h fix_adapt.h fix_addforce.h fix_append_atoms.h fix_ave_atom.h fix_ave_correlate.h fix_ave_histo.h fix_ave_spatial.h fix_ave_time.h fix_aveforce.h fix_balance.h fix_bond_break.h fix_bond_create.h fix_bond_swap.h fix_box_relax.h fix_deform.h fix_deposit.h fix_drag.h fix_dt_reset.h fix_efield.h fix_enforce2d.h fix_evaporate.h fix_event.h fix_event_prd.h fix_event_tad.h fix_external.h fix_freeze.h fix_gcmc.h fix_gravity.h fix_heat.h fix_indent.h fix_langevin.h fix_lineforce.h fix_minimize.h fix_momentum.h fix_move.h fix_msst.h fix_neb.h fix_nh.h fix_nh_asphere.h fix_nh_sphere.h fix_nph.h fix_nph_asphere.h fix_nph_sphere.h fix_nphug.h fix_npt.h fix_npt_asphere.h fix_npt_sphere.h fix_nve.h fix_nve_asphere.h fix_nve_asphere_noforce.h fix_nve_limit.h fix_nve_line.h fix_nve_noforce.h fix_nve_sphere.h fix_nve_tri.h fix_nvt.h fix_nvt_asphere.h fix_nvt_sllod.h fix_nvt_sphere.h fix_orient_fcc.h fix_peri_neigh.h fix_planeforce.h fix_pour.h fix_press_berendsen.h fix_print.h fix_qeq_comb.h fix_read_restart.h fix_recenter.h fix_respa.h fix_restrain.h fix_rigid.h fix_rigid_nh.h fix_rigid_nph.h fix_rigid_npt.h fix_rigid_nve.h fix_rigid_nvt.h fix_setforce.h fix_shake.h fix_shear_history.h fix_spring.h fix_spring_rg.h fix_spring_self.h fix_srd.h fix_store_force.h fix_store_state.h fix_temp_berendsen.h fix_temp_rescale.h fix_thermal_conductivity.h fix_tmd.h fix_ttm.h fix_viscosity.h fix_viscous.h fix_wall.h fix_wall_colloid.h fix_wall_gran.h fix_wall_harmonic.h fix_wall_lj126.h fix_wall_lj93.h fix_wall_piston.h fix_wall_reflect.h fix_wall_region.h fix_wall_srd.h force.h group.h image.h improper.h improper_class2.h improper_cvff.h improper_harmonic.h improper_hybrid.h improper_umbrella.h input.h integrate.h irregular.h kissfft.h kspace.h lammps.h lattice.h library.h lmptype.h lmpwindows.h math_complex.h math_const.h math_extra.h math_vector.h memory.h min.h min_cg.h min_fire.h min_hftn.h min_linesearch.h min_quickmin.h min_sd.h minimize.h modify.h msm.h neb.h neigh_bond.h neigh_derive.h neigh_full.h neigh_gran.h neigh_half_bin.h neigh_half_multi.h neigh_half_nsq.h neigh_list.h neigh_request.h neigh_respa.h neighbor.h output.h pack.h pair.h pair_adp.h pair_airebo.h pair_beck.h pair_bop.h pair_born.h pair_born_coul_long.h pair_born_coul_msm.h pair_born_coul_wolf.h pair_brownian.h pair_brownian_poly.h pair_buck.h pair_buck_coul_cut.h pair_buck_coul_long.h pair_buck_coul_msm.h pair_buck_long_coul_long.h pair_colloid.h pair_comb.h pair_coul_cut.h pair_coul_debye.h pair_coul_dsf.h pair_coul_long.h pair_coul_msm.h pair_coul_wolf.h pair_dipole_cut.h pair_dpd.h pair_dpd_tstat.h pair_dsmc.h pair_eam.h pair_eam_alloy.h pair_eam_alloy_opt.h pair_eam_fs.h pair_eam_fs_opt.h pair_eam_opt.h pair_eim.h pair_gauss.h pair_gayberne.h pair_gran_hertz_history.h pair_gran_hooke.h pair_gran_hooke_history.h pair_hbond_dreiding_lj.h pair_hbond_dreiding_morse.h pair_hybrid.h pair_hybrid_overlay.h pair_lcbop.h pair_line_lj.h pair_lj96_cut.h pair_lj_charmm_coul_charmm.h pair_lj_charmm_coul_charmm_implicit.h pair_lj_charmm_coul_long.h pair_lj_charmm_coul_long_opt.h pair_lj_charmm_coul_msm.h pair_lj_class2.h pair_lj_class2_coul_cut.h pair_lj_class2_coul_long.h pair_lj_cubic.h pair_lj_cut.h pair_lj_cut_coul_cut.h pair_lj_cut_coul_debye.h pair_lj_cut_coul_dsf.h pair_lj_cut_coul_long.h pair_lj_cut_coul_long_opt.h pair_lj_cut_coul_msm.h pair_lj_cut_opt.h pair_lj_cut_tip4p_long.h pair_lj_cut_tip4p_long_opt.h pair_lj_expand.h pair_lj_gromacs.h pair_lj_gromacs_coul_gromacs.h pair_lj_long_coul_long.h pair_lj_long_tip4p_long.h pair_lj_smooth.h pair_lj_smooth_linear.h pair_lubricate.h pair_lubricateU.h pair_lubricateU_poly.h pair_lubricate_poly.h pair_mie_cut.h pair_morse.h pair_morse_opt.h pair_peri_lps.h pair_peri_pmb.h pair_rebo.h pair_resquared.h pair_soft.h pair_sw.h pair_table.h pair_tersoff.h pair_tersoff_zbl.h pair_tri_lj.h pair_yukawa.h pair_yukawa_colloid.h pointers.h pppm.h pppm_cg.h pppm_disp.h pppm_disp_tip4p.h pppm_old.h pppm_tip4p.h prd.h procmap.h random_mars.h random_park.h read_data.h read_dump.h read_restart.h reader.h reader_native.h reader_xyz.h region.h region_block.h region_cone.h region_cylinder.h region_intersect.h region_plane.h region_prism.h region_sphere.h region_union.h remap.h remap_wrap.h replicate.h rerun.h respa.h run.h set.h special.h style_angle.h style_atom.h style_bond.h style_command.h style_compute.h style_dihedral.h style_dump.h style_fix.h style_improper.h style_integrate.h style_kspace.h style_minimize.h style_pair.h style_reader.h style_region.h suffix.h tad.h temper.h thermo.h timer.h universe.h update.h variable.h velocity.h verlet.h verlet_split.h version.h write_restart.h xdr_compat.h OBJ = $(SRC:.cpp=.o) diff --git a/src/Makefile.shlib b/src/Makefile.shlib index d8e6b982b9..17c1bdb8f7 100644 --- a/src/Makefile.shlib +++ b/src/Makefile.shlib @@ -7,9 +7,9 @@ SHELL = /bin/sh ROOT = lammps EXE = lib$(ROOT)_$@.so -SRC = angle.cpp angle_charmm.cpp angle_class2.cpp angle_cosine.cpp angle_cosine_delta.cpp angle_cosine_periodic.cpp angle_cosine_squared.cpp angle_harmonic.cpp angle_hybrid.cpp angle_table.cpp atom.cpp atom_map.cpp atom_vec.cpp atom_vec_angle.cpp atom_vec_atomic.cpp atom_vec_bond.cpp atom_vec_charge.cpp atom_vec_dipole.cpp atom_vec_ellipsoid.cpp atom_vec_full.cpp atom_vec_hybrid.cpp atom_vec_line.cpp atom_vec_molecular.cpp atom_vec_peri.cpp atom_vec_sphere.cpp atom_vec_tri.cpp balance.cpp bond.cpp bond_class2.cpp bond_fene.cpp bond_fene_expand.cpp bond_harmonic.cpp bond_hybrid.cpp bond_morse.cpp bond_nonlinear.cpp bond_quartic.cpp bond_table.cpp change_box.cpp comm.cpp compute.cpp compute_angle_local.cpp compute_atom_molecule.cpp compute_bond_local.cpp compute_centro_atom.cpp compute_cluster_atom.cpp compute_cna_atom.cpp compute_com.cpp compute_com_molecule.cpp compute_contact_atom.cpp compute_coord_atom.cpp compute_damage_atom.cpp compute_dihedral_local.cpp compute_displace_atom.cpp compute_erotate_sphere.cpp compute_erotate_sphere_atom.cpp compute_event_displace.cpp compute_group_group.cpp compute_gyration.cpp compute_gyration_molecule.cpp compute_heat_flux.cpp compute_improper_local.cpp compute_inertia_molecule.cpp compute_ke.cpp compute_ke_atom.cpp compute_msd.cpp compute_msd_molecule.cpp compute_pair.cpp compute_pair_local.cpp compute_pe.cpp compute_pe_atom.cpp compute_pressure.cpp compute_property_atom.cpp compute_property_local.cpp compute_property_molecule.cpp compute_rdf.cpp compute_reduce.cpp compute_reduce_region.cpp compute_slice.cpp compute_stress_atom.cpp compute_temp.cpp compute_temp_com.cpp compute_temp_deform.cpp compute_temp_partial.cpp compute_temp_profile.cpp compute_temp_ramp.cpp compute_temp_region.cpp compute_temp_sphere.cpp compute_ti.cpp create_atoms.cpp create_box.cpp delete_atoms.cpp delete_bonds.cpp dihedral.cpp dihedral_charmm.cpp dihedral_class2.cpp dihedral_harmonic.cpp dihedral_helix.cpp dihedral_hybrid.cpp dihedral_multi_harmonic.cpp dihedral_opls.cpp displace_atoms.cpp domain.cpp dump.cpp dump_atom.cpp dump_cfg.cpp dump_custom.cpp dump_dcd.cpp dump_image.cpp dump_local.cpp dump_xtc.cpp dump_xyz.cpp error.cpp finish.cpp fix.cpp fix_adapt.cpp fix_addforce.cpp fix_append_atoms.cpp fix_ave_atom.cpp fix_ave_correlate.cpp fix_ave_histo.cpp fix_ave_spatial.cpp fix_ave_time.cpp fix_aveforce.cpp fix_balance.cpp fix_bond_break.cpp fix_bond_create.cpp fix_bond_swap.cpp fix_box_relax.cpp fix_deform.cpp fix_deposit.cpp fix_drag.cpp fix_dt_reset.cpp fix_efield.cpp fix_enforce2d.cpp fix_evaporate.cpp fix_event.cpp fix_event_prd.cpp fix_event_tad.cpp fix_external.cpp fix_freeze.cpp fix_gcmc.cpp fix_gravity.cpp fix_heat.cpp fix_indent.cpp fix_langevin.cpp fix_lineforce.cpp fix_minimize.cpp fix_momentum.cpp fix_move.cpp fix_msst.cpp fix_neb.cpp fix_nh.cpp fix_nh_sphere.cpp fix_nph.cpp fix_nph_sphere.cpp fix_nphug.cpp fix_npt.cpp fix_npt_sphere.cpp fix_nve.cpp fix_nve_limit.cpp fix_nve_noforce.cpp fix_nve_sphere.cpp fix_nvt.cpp fix_nvt_sllod.cpp fix_nvt_sphere.cpp fix_orient_fcc.cpp fix_peri_neigh.cpp fix_planeforce.cpp fix_pour.cpp fix_press_berendsen.cpp fix_print.cpp fix_qeq_comb.cpp fix_read_restart.cpp fix_recenter.cpp fix_respa.cpp fix_restrain.cpp fix_rigid.cpp fix_rigid_nh.cpp fix_rigid_nph.cpp fix_rigid_npt.cpp fix_rigid_nve.cpp fix_rigid_nvt.cpp fix_setforce.cpp fix_shake.cpp fix_shear_history.cpp fix_spring.cpp fix_spring_rg.cpp fix_spring_self.cpp fix_srd.cpp fix_store_force.cpp fix_store_state.cpp fix_temp_berendsen.cpp fix_temp_rescale.cpp fix_thermal_conductivity.cpp fix_tmd.cpp fix_ttm.cpp fix_viscosity.cpp fix_viscous.cpp fix_wall.cpp fix_wall_colloid.cpp fix_wall_gran.cpp fix_wall_harmonic.cpp fix_wall_lj126.cpp fix_wall_lj93.cpp fix_wall_piston.cpp fix_wall_reflect.cpp fix_wall_region.cpp fix_wall_srd.cpp force.cpp group.cpp image.cpp improper.cpp improper_class2.cpp improper_cvff.cpp improper_harmonic.cpp improper_hybrid.cpp improper_umbrella.cpp input.cpp integrate.cpp irregular.cpp kspace.cpp lammps.cpp lattice.cpp library.cpp math_extra.cpp memory.cpp min.cpp min_cg.cpp min_fire.cpp min_hftn.cpp min_linesearch.cpp min_quickmin.cpp min_sd.cpp minimize.cpp modify.cpp neb.cpp neigh_bond.cpp neigh_derive.cpp neigh_full.cpp neigh_gran.cpp neigh_half_bin.cpp neigh_half_multi.cpp neigh_half_nsq.cpp neigh_list.cpp neigh_request.cpp neigh_respa.cpp neigh_stencil.cpp neighbor.cpp output.cpp pair.cpp pair_adp.cpp pair_airebo.cpp pair_beck.cpp pair_bop.cpp pair_born.cpp pair_born_coul_wolf.cpp pair_brownian.cpp pair_brownian_poly.cpp pair_buck.cpp pair_buck_coul_cut.cpp pair_colloid.cpp pair_comb.cpp pair_coul_cut.cpp pair_coul_debye.cpp pair_coul_dsf.cpp pair_coul_wolf.cpp pair_dipole_cut.cpp pair_dpd.cpp pair_dpd_tstat.cpp pair_dsmc.cpp pair_eam.cpp pair_eam_alloy.cpp pair_eam_alloy_opt.cpp pair_eam_fs.cpp pair_eam_fs_opt.cpp pair_eam_opt.cpp pair_eim.cpp pair_gauss.cpp pair_gran_hertz_history.cpp pair_gran_hooke.cpp pair_gran_hooke_history.cpp pair_hbond_dreiding_lj.cpp pair_hbond_dreiding_morse.cpp pair_hybrid.cpp pair_hybrid_overlay.cpp pair_lcbop.cpp pair_lj96_cut.cpp pair_lj_charmm_coul_charmm.cpp pair_lj_charmm_coul_charmm_implicit.cpp pair_lj_class2.cpp pair_lj_class2_coul_cut.cpp pair_lj_class2_coul_long.cpp pair_lj_cubic.cpp pair_lj_cut.cpp pair_lj_cut_coul_cut.cpp pair_lj_cut_coul_debye.cpp pair_lj_cut_coul_dsf.cpp pair_lj_cut_opt.cpp pair_lj_expand.cpp pair_lj_gromacs.cpp pair_lj_gromacs_coul_gromacs.cpp pair_lj_smooth.cpp pair_lj_smooth_linear.cpp pair_lubricate.cpp pair_lubricateU.cpp pair_lubricateU_poly.cpp pair_lubricate_poly.cpp pair_mie_cut.cpp pair_morse.cpp pair_morse_opt.cpp pair_peri_lps.cpp pair_peri_pmb.cpp pair_rebo.cpp pair_soft.cpp pair_sw.cpp pair_table.cpp pair_tersoff.cpp pair_tersoff_zbl.cpp pair_yukawa.cpp pair_yukawa_colloid.cpp prd.cpp procmap.cpp random_mars.cpp random_park.cpp read_data.cpp read_dump.cpp read_restart.cpp reader.cpp reader_native.cpp reader_xyz.cpp region.cpp region_block.cpp region_cone.cpp region_cylinder.cpp region_intersect.cpp region_plane.cpp region_prism.cpp region_sphere.cpp region_union.cpp replicate.cpp rerun.cpp respa.cpp run.cpp set.cpp special.cpp tad.cpp temper.cpp thermo.cpp timer.cpp universe.cpp update.cpp variable.cpp velocity.cpp verlet.cpp verlet_split.cpp write_restart.cpp xdr_compat.cpp +SRC = angle.cpp angle_charmm.cpp angle_class2.cpp angle_cosine.cpp angle_cosine_delta.cpp angle_cosine_periodic.cpp angle_cosine_squared.cpp angle_harmonic.cpp angle_hybrid.cpp angle_table.cpp atom.cpp atom_map.cpp atom_vec.cpp atom_vec_angle.cpp atom_vec_atomic.cpp atom_vec_bond.cpp atom_vec_charge.cpp atom_vec_dipole.cpp atom_vec_ellipsoid.cpp atom_vec_full.cpp atom_vec_hybrid.cpp atom_vec_line.cpp atom_vec_molecular.cpp atom_vec_peri.cpp atom_vec_sphere.cpp atom_vec_tri.cpp balance.cpp bond.cpp bond_class2.cpp bond_fene.cpp bond_fene_expand.cpp bond_harmonic.cpp bond_hybrid.cpp bond_morse.cpp bond_nonlinear.cpp bond_quartic.cpp bond_table.cpp change_box.cpp comm.cpp compute.cpp compute_angle_local.cpp compute_atom_molecule.cpp compute_bond_local.cpp compute_centro_atom.cpp compute_cluster_atom.cpp compute_cna_atom.cpp compute_com.cpp compute_com_molecule.cpp compute_contact_atom.cpp compute_coord_atom.cpp compute_damage_atom.cpp compute_dihedral_local.cpp compute_displace_atom.cpp compute_erotate_asphere.cpp compute_erotate_sphere.cpp compute_erotate_sphere_atom.cpp compute_event_displace.cpp compute_group_group.cpp compute_gyration.cpp compute_gyration_molecule.cpp compute_heat_flux.cpp compute_improper_local.cpp compute_inertia_molecule.cpp compute_ke.cpp compute_ke_atom.cpp compute_msd.cpp compute_msd_molecule.cpp compute_pair.cpp compute_pair_local.cpp compute_pe.cpp compute_pe_atom.cpp compute_pressure.cpp compute_property_atom.cpp compute_property_local.cpp compute_property_molecule.cpp compute_rdf.cpp compute_reduce.cpp compute_reduce_region.cpp compute_slice.cpp compute_stress_atom.cpp compute_temp.cpp compute_temp_asphere.cpp compute_temp_com.cpp compute_temp_deform.cpp compute_temp_partial.cpp compute_temp_profile.cpp compute_temp_ramp.cpp compute_temp_region.cpp compute_temp_sphere.cpp compute_ti.cpp create_atoms.cpp create_box.cpp delete_atoms.cpp delete_bonds.cpp dihedral.cpp dihedral_charmm.cpp dihedral_class2.cpp dihedral_harmonic.cpp dihedral_helix.cpp dihedral_hybrid.cpp dihedral_multi_harmonic.cpp dihedral_opls.cpp displace_atoms.cpp domain.cpp dump.cpp dump_atom.cpp dump_cfg.cpp dump_custom.cpp dump_dcd.cpp dump_image.cpp dump_local.cpp dump_xtc.cpp dump_xyz.cpp error.cpp finish.cpp fix.cpp fix_adapt.cpp fix_addforce.cpp fix_append_atoms.cpp fix_ave_atom.cpp fix_ave_correlate.cpp fix_ave_histo.cpp fix_ave_spatial.cpp fix_ave_time.cpp fix_aveforce.cpp fix_balance.cpp fix_bond_break.cpp fix_bond_create.cpp fix_bond_swap.cpp fix_box_relax.cpp fix_deform.cpp fix_deposit.cpp fix_drag.cpp fix_dt_reset.cpp fix_efield.cpp fix_enforce2d.cpp fix_evaporate.cpp fix_event.cpp fix_event_prd.cpp fix_event_tad.cpp fix_external.cpp fix_freeze.cpp fix_gcmc.cpp fix_gravity.cpp fix_heat.cpp fix_indent.cpp fix_langevin.cpp fix_lineforce.cpp fix_minimize.cpp fix_momentum.cpp fix_move.cpp fix_msst.cpp fix_neb.cpp fix_nh.cpp fix_nh_asphere.cpp fix_nh_sphere.cpp fix_nph.cpp fix_nph_asphere.cpp fix_nph_sphere.cpp fix_nphug.cpp fix_npt.cpp fix_npt_asphere.cpp fix_npt_sphere.cpp fix_nve.cpp fix_nve_asphere.cpp fix_nve_asphere_noforce.cpp fix_nve_limit.cpp fix_nve_line.cpp fix_nve_noforce.cpp fix_nve_sphere.cpp fix_nve_tri.cpp fix_nvt.cpp fix_nvt_asphere.cpp fix_nvt_sllod.cpp fix_nvt_sphere.cpp fix_orient_fcc.cpp fix_peri_neigh.cpp fix_planeforce.cpp fix_pour.cpp fix_press_berendsen.cpp fix_print.cpp fix_qeq_comb.cpp fix_read_restart.cpp fix_recenter.cpp fix_respa.cpp fix_restrain.cpp fix_rigid.cpp fix_rigid_nh.cpp fix_rigid_nph.cpp fix_rigid_npt.cpp fix_rigid_nve.cpp fix_rigid_nvt.cpp fix_setforce.cpp fix_shake.cpp fix_shear_history.cpp fix_spring.cpp fix_spring_rg.cpp fix_spring_self.cpp fix_srd.cpp fix_store_force.cpp fix_store_state.cpp fix_temp_berendsen.cpp fix_temp_rescale.cpp fix_thermal_conductivity.cpp fix_tmd.cpp fix_ttm.cpp fix_viscosity.cpp fix_viscous.cpp fix_wall.cpp fix_wall_colloid.cpp fix_wall_gran.cpp fix_wall_harmonic.cpp fix_wall_lj126.cpp fix_wall_lj93.cpp fix_wall_piston.cpp fix_wall_reflect.cpp fix_wall_region.cpp fix_wall_srd.cpp force.cpp group.cpp image.cpp improper.cpp improper_class2.cpp improper_cvff.cpp improper_harmonic.cpp improper_hybrid.cpp improper_umbrella.cpp input.cpp integrate.cpp irregular.cpp kspace.cpp lammps.cpp lattice.cpp library.cpp math_extra.cpp memory.cpp min.cpp min_cg.cpp min_fire.cpp min_hftn.cpp min_linesearch.cpp min_quickmin.cpp min_sd.cpp minimize.cpp modify.cpp neb.cpp neigh_bond.cpp neigh_derive.cpp neigh_full.cpp neigh_gran.cpp neigh_half_bin.cpp neigh_half_multi.cpp neigh_half_nsq.cpp neigh_list.cpp neigh_request.cpp neigh_respa.cpp neigh_stencil.cpp neighbor.cpp output.cpp pair.cpp pair_adp.cpp pair_airebo.cpp pair_beck.cpp pair_bop.cpp pair_born.cpp pair_born_coul_wolf.cpp pair_brownian.cpp pair_brownian_poly.cpp pair_buck.cpp pair_buck_coul_cut.cpp pair_colloid.cpp pair_comb.cpp pair_coul_cut.cpp pair_coul_debye.cpp pair_coul_dsf.cpp pair_coul_wolf.cpp pair_dipole_cut.cpp pair_dpd.cpp pair_dpd_tstat.cpp pair_dsmc.cpp pair_eam.cpp pair_eam_alloy.cpp pair_eam_alloy_opt.cpp pair_eam_fs.cpp pair_eam_fs_opt.cpp pair_eam_opt.cpp pair_eim.cpp pair_gauss.cpp pair_gayberne.cpp pair_gran_hertz_history.cpp pair_gran_hooke.cpp pair_gran_hooke_history.cpp pair_hbond_dreiding_lj.cpp pair_hbond_dreiding_morse.cpp pair_hybrid.cpp pair_hybrid_overlay.cpp pair_lcbop.cpp pair_line_lj.cpp pair_lj96_cut.cpp pair_lj_charmm_coul_charmm.cpp pair_lj_charmm_coul_charmm_implicit.cpp pair_lj_class2.cpp pair_lj_class2_coul_cut.cpp pair_lj_class2_coul_long.cpp pair_lj_cubic.cpp pair_lj_cut.cpp pair_lj_cut_coul_cut.cpp pair_lj_cut_coul_debye.cpp pair_lj_cut_coul_dsf.cpp pair_lj_cut_opt.cpp pair_lj_expand.cpp pair_lj_gromacs.cpp pair_lj_gromacs_coul_gromacs.cpp pair_lj_smooth.cpp pair_lj_smooth_linear.cpp pair_lubricate.cpp pair_lubricateU.cpp pair_lubricateU_poly.cpp pair_lubricate_poly.cpp pair_mie_cut.cpp pair_morse.cpp pair_morse_opt.cpp pair_peri_lps.cpp pair_peri_pmb.cpp pair_rebo.cpp pair_resquared.cpp pair_soft.cpp pair_sw.cpp pair_table.cpp pair_tersoff.cpp pair_tersoff_zbl.cpp pair_tri_lj.cpp pair_yukawa.cpp pair_yukawa_colloid.cpp prd.cpp procmap.cpp random_mars.cpp random_park.cpp read_data.cpp read_dump.cpp read_restart.cpp reader.cpp reader_native.cpp reader_xyz.cpp region.cpp region_block.cpp region_cone.cpp region_cylinder.cpp region_intersect.cpp region_plane.cpp region_prism.cpp region_sphere.cpp region_union.cpp replicate.cpp rerun.cpp respa.cpp run.cpp set.cpp special.cpp tad.cpp temper.cpp thermo.cpp timer.cpp universe.cpp update.cpp variable.cpp velocity.cpp verlet.cpp verlet_split.cpp write_restart.cpp xdr_compat.cpp -INC = accelerator_cuda.h accelerator_omp.h angle.h angle_charmm.h angle_class2.h angle_cosine.h angle_cosine_delta.h angle_cosine_periodic.h angle_cosine_squared.h angle_harmonic.h angle_hybrid.h angle_table.h atom.h atom_map.h atom_masks.h atom_vec.h atom_vec_angle.h atom_vec_atomic.h atom_vec_bond.h atom_vec_charge.h atom_vec_dipole.h atom_vec_ellipsoid.h atom_vec_full.h atom_vec_hybrid.h atom_vec_line.h atom_vec_molecular.h atom_vec_peri.h atom_vec_sphere.h atom_vec_tri.h balance.h bond.h bond_class2.h bond_fene.h bond_fene_expand.h bond_harmonic.h bond_hybrid.h bond_morse.h bond_nonlinear.h bond_quartic.h bond_table.h change_box.h comm.h compute.h compute_angle_local.h compute_atom_molecule.h compute_bond_local.h compute_centro_atom.h compute_cluster_atom.h compute_cna_atom.h compute_com.h compute_com_molecule.h compute_contact_atom.h compute_coord_atom.h compute_damage_atom.h compute_dihedral_local.h compute_displace_atom.h compute_erotate_sphere.h compute_erotate_sphere_atom.h compute_event_displace.h compute_group_group.h compute_gyration.h compute_gyration_molecule.h compute_heat_flux.h compute_improper_local.h compute_inertia_molecule.h compute_ke.h compute_ke_atom.h compute_msd.h compute_msd_molecule.h compute_pair.h compute_pair_local.h compute_pe.h compute_pe_atom.h compute_pressure.h compute_property_atom.h compute_property_local.h compute_property_molecule.h compute_rdf.h compute_reduce.h compute_reduce_region.h compute_slice.h compute_stress_atom.h compute_temp.h compute_temp_com.h compute_temp_deform.h compute_temp_partial.h compute_temp_profile.h compute_temp_ramp.h compute_temp_region.h compute_temp_sphere.h compute_ti.h create_atoms.h create_box.h delete_atoms.h delete_bonds.h dihedral.h dihedral_charmm.h dihedral_class2.h dihedral_harmonic.h dihedral_helix.h dihedral_hybrid.h dihedral_multi_harmonic.h dihedral_opls.h displace_atoms.h domain.h dump.h dump_atom.h dump_cfg.h dump_custom.h dump_dcd.h dump_image.h dump_local.h dump_xtc.h dump_xyz.h error.h finish.h fix.h fix_adapt.h fix_addforce.h fix_append_atoms.h fix_ave_atom.h fix_ave_correlate.h fix_ave_histo.h fix_ave_spatial.h fix_ave_time.h fix_aveforce.h fix_balance.h fix_bond_break.h fix_bond_create.h fix_bond_swap.h fix_box_relax.h fix_deform.h fix_deposit.h fix_drag.h fix_dt_reset.h fix_efield.h fix_enforce2d.h fix_evaporate.h fix_event.h fix_event_prd.h fix_event_tad.h fix_external.h fix_freeze.h fix_gcmc.h fix_gravity.h fix_heat.h fix_indent.h fix_langevin.h fix_lineforce.h fix_minimize.h fix_momentum.h fix_move.h fix_msst.h fix_neb.h fix_nh.h fix_nh_sphere.h fix_nph.h fix_nph_sphere.h fix_nphug.h fix_npt.h fix_npt_sphere.h fix_nve.h fix_nve_limit.h fix_nve_noforce.h fix_nve_sphere.h fix_nvt.h fix_nvt_sllod.h fix_nvt_sphere.h fix_orient_fcc.h fix_peri_neigh.h fix_planeforce.h fix_pour.h fix_press_berendsen.h fix_print.h fix_qeq_comb.h fix_read_restart.h fix_recenter.h fix_respa.h fix_restrain.h fix_rigid.h fix_rigid_nh.h fix_rigid_nph.h fix_rigid_npt.h fix_rigid_nve.h fix_rigid_nvt.h fix_setforce.h fix_shake.h fix_shear_history.h fix_spring.h fix_spring_rg.h fix_spring_self.h fix_srd.h fix_store_force.h fix_store_state.h fix_temp_berendsen.h fix_temp_rescale.h fix_thermal_conductivity.h fix_tmd.h fix_ttm.h fix_viscosity.h fix_viscous.h fix_wall.h fix_wall_colloid.h fix_wall_gran.h fix_wall_harmonic.h fix_wall_lj126.h fix_wall_lj93.h fix_wall_piston.h fix_wall_reflect.h fix_wall_region.h fix_wall_srd.h force.h group.h image.h improper.h improper_class2.h improper_cvff.h improper_harmonic.h improper_hybrid.h improper_umbrella.h input.h integrate.h irregular.h kspace.h lammps.h lattice.h library.h lmptype.h lmpwindows.h math_const.h math_extra.h memory.h min.h min_cg.h min_fire.h min_hftn.h min_linesearch.h min_quickmin.h min_sd.h minimize.h modify.h neb.h neigh_bond.h neigh_derive.h neigh_full.h neigh_gran.h neigh_half_bin.h neigh_half_multi.h neigh_half_nsq.h neigh_list.h neigh_request.h neigh_respa.h neighbor.h output.h pack.h pair.h pair_adp.h pair_airebo.h pair_beck.h pair_bop.h pair_born.h pair_born_coul_wolf.h pair_brownian.h pair_brownian_poly.h pair_buck.h pair_buck_coul_cut.h pair_colloid.h pair_comb.h pair_coul_cut.h pair_coul_debye.h pair_coul_dsf.h pair_coul_wolf.h pair_dipole_cut.h pair_dpd.h pair_dpd_tstat.h pair_dsmc.h pair_eam.h pair_eam_alloy.h pair_eam_alloy_opt.h pair_eam_fs.h pair_eam_fs_opt.h pair_eam_opt.h pair_eim.h pair_gauss.h pair_gran_hertz_history.h pair_gran_hooke.h pair_gran_hooke_history.h pair_hbond_dreiding_lj.h pair_hbond_dreiding_morse.h pair_hybrid.h pair_hybrid_overlay.h pair_lcbop.h pair_lj96_cut.h pair_lj_charmm_coul_charmm.h pair_lj_charmm_coul_charmm_implicit.h pair_lj_class2.h pair_lj_class2_coul_cut.h pair_lj_class2_coul_long.h pair_lj_cubic.h pair_lj_cut.h pair_lj_cut_coul_cut.h pair_lj_cut_coul_debye.h pair_lj_cut_coul_dsf.h pair_lj_cut_opt.h pair_lj_expand.h pair_lj_gromacs.h pair_lj_gromacs_coul_gromacs.h pair_lj_smooth.h pair_lj_smooth_linear.h pair_lubricate.h pair_lubricateU.h pair_lubricateU_poly.h pair_lubricate_poly.h pair_mie_cut.h pair_morse.h pair_morse_opt.h pair_peri_lps.h pair_peri_pmb.h pair_rebo.h pair_soft.h pair_sw.h pair_table.h pair_tersoff.h pair_tersoff_zbl.h pair_yukawa.h pair_yukawa_colloid.h pointers.h prd.h procmap.h random_mars.h random_park.h read_data.h read_dump.h read_restart.h reader.h reader_native.h reader_xyz.h region.h region_block.h region_cone.h region_cylinder.h region_intersect.h region_plane.h region_prism.h region_sphere.h region_union.h replicate.h rerun.h respa.h run.h set.h special.h style_angle.h style_atom.h style_bond.h style_command.h style_compute.h style_dihedral.h style_dump.h style_fix.h style_improper.h style_integrate.h style_kspace.h style_minimize.h style_pair.h style_reader.h style_region.h suffix.h tad.h temper.h thermo.h timer.h universe.h update.h variable.h velocity.h verlet.h verlet_split.h version.h write_restart.h xdr_compat.h +INC = accelerator_cuda.h accelerator_omp.h angle.h angle_charmm.h angle_class2.h angle_cosine.h angle_cosine_delta.h angle_cosine_periodic.h angle_cosine_squared.h angle_harmonic.h angle_hybrid.h angle_table.h atom.h atom_map.h atom_masks.h atom_vec.h atom_vec_angle.h atom_vec_atomic.h atom_vec_bond.h atom_vec_charge.h atom_vec_dipole.h atom_vec_ellipsoid.h atom_vec_full.h atom_vec_hybrid.h atom_vec_line.h atom_vec_molecular.h atom_vec_peri.h atom_vec_sphere.h atom_vec_tri.h balance.h bond.h bond_class2.h bond_fene.h bond_fene_expand.h bond_harmonic.h bond_hybrid.h bond_morse.h bond_nonlinear.h bond_quartic.h bond_table.h change_box.h comm.h compute.h compute_angle_local.h compute_atom_molecule.h compute_bond_local.h compute_centro_atom.h compute_cluster_atom.h compute_cna_atom.h compute_com.h compute_com_molecule.h compute_contact_atom.h compute_coord_atom.h compute_damage_atom.h compute_dihedral_local.h compute_displace_atom.h compute_erotate_asphere.h compute_erotate_sphere.h compute_erotate_sphere_atom.h compute_event_displace.h compute_group_group.h compute_gyration.h compute_gyration_molecule.h compute_heat_flux.h compute_improper_local.h compute_inertia_molecule.h compute_ke.h compute_ke_atom.h compute_msd.h compute_msd_molecule.h compute_pair.h compute_pair_local.h compute_pe.h compute_pe_atom.h compute_pressure.h compute_property_atom.h compute_property_local.h compute_property_molecule.h compute_rdf.h compute_reduce.h compute_reduce_region.h compute_slice.h compute_stress_atom.h compute_temp.h compute_temp_asphere.h compute_temp_com.h compute_temp_deform.h compute_temp_partial.h compute_temp_profile.h compute_temp_ramp.h compute_temp_region.h compute_temp_sphere.h compute_ti.h create_atoms.h create_box.h delete_atoms.h delete_bonds.h dihedral.h dihedral_charmm.h dihedral_class2.h dihedral_harmonic.h dihedral_helix.h dihedral_hybrid.h dihedral_multi_harmonic.h dihedral_opls.h displace_atoms.h domain.h dump.h dump_atom.h dump_cfg.h dump_custom.h dump_dcd.h dump_image.h dump_local.h dump_xtc.h dump_xyz.h error.h finish.h fix.h fix_adapt.h fix_addforce.h fix_append_atoms.h fix_ave_atom.h fix_ave_correlate.h fix_ave_histo.h fix_ave_spatial.h fix_ave_time.h fix_aveforce.h fix_balance.h fix_bond_break.h fix_bond_create.h fix_bond_swap.h fix_box_relax.h fix_deform.h fix_deposit.h fix_drag.h fix_dt_reset.h fix_efield.h fix_enforce2d.h fix_evaporate.h fix_event.h fix_event_prd.h fix_event_tad.h fix_external.h fix_freeze.h fix_gcmc.h fix_gravity.h fix_heat.h fix_indent.h fix_langevin.h fix_lineforce.h fix_minimize.h fix_momentum.h fix_move.h fix_msst.h fix_neb.h fix_nh.h fix_nh_asphere.h fix_nh_sphere.h fix_nph.h fix_nph_asphere.h fix_nph_sphere.h fix_nphug.h fix_npt.h fix_npt_asphere.h fix_npt_sphere.h fix_nve.h fix_nve_asphere.h fix_nve_asphere_noforce.h fix_nve_limit.h fix_nve_line.h fix_nve_noforce.h fix_nve_sphere.h fix_nve_tri.h fix_nvt.h fix_nvt_asphere.h fix_nvt_sllod.h fix_nvt_sphere.h fix_orient_fcc.h fix_peri_neigh.h fix_planeforce.h fix_pour.h fix_press_berendsen.h fix_print.h fix_qeq_comb.h fix_read_restart.h fix_recenter.h fix_respa.h fix_restrain.h fix_rigid.h fix_rigid_nh.h fix_rigid_nph.h fix_rigid_npt.h fix_rigid_nve.h fix_rigid_nvt.h fix_setforce.h fix_shake.h fix_shear_history.h fix_spring.h fix_spring_rg.h fix_spring_self.h fix_srd.h fix_store_force.h fix_store_state.h fix_temp_berendsen.h fix_temp_rescale.h fix_thermal_conductivity.h fix_tmd.h fix_ttm.h fix_viscosity.h fix_viscous.h fix_wall.h fix_wall_colloid.h fix_wall_gran.h fix_wall_harmonic.h fix_wall_lj126.h fix_wall_lj93.h fix_wall_piston.h fix_wall_reflect.h fix_wall_region.h fix_wall_srd.h force.h group.h image.h improper.h improper_class2.h improper_cvff.h improper_harmonic.h improper_hybrid.h improper_umbrella.h input.h integrate.h irregular.h kspace.h lammps.h lattice.h library.h lmptype.h lmpwindows.h math_const.h math_extra.h memory.h min.h min_cg.h min_fire.h min_hftn.h min_linesearch.h min_quickmin.h min_sd.h minimize.h modify.h neb.h neigh_bond.h neigh_derive.h neigh_full.h neigh_gran.h neigh_half_bin.h neigh_half_multi.h neigh_half_nsq.h neigh_list.h neigh_request.h neigh_respa.h neighbor.h output.h pack.h pair.h pair_adp.h pair_airebo.h pair_beck.h pair_bop.h pair_born.h pair_born_coul_wolf.h pair_brownian.h pair_brownian_poly.h pair_buck.h pair_buck_coul_cut.h pair_colloid.h pair_comb.h pair_coul_cut.h pair_coul_debye.h pair_coul_dsf.h pair_coul_wolf.h pair_dipole_cut.h pair_dpd.h pair_dpd_tstat.h pair_dsmc.h pair_eam.h pair_eam_alloy.h pair_eam_alloy_opt.h pair_eam_fs.h pair_eam_fs_opt.h pair_eam_opt.h pair_eim.h pair_gauss.h pair_gayberne.h pair_gran_hertz_history.h pair_gran_hooke.h pair_gran_hooke_history.h pair_hbond_dreiding_lj.h pair_hbond_dreiding_morse.h pair_hybrid.h pair_hybrid_overlay.h pair_lcbop.h pair_line_lj.h pair_lj96_cut.h pair_lj_charmm_coul_charmm.h pair_lj_charmm_coul_charmm_implicit.h pair_lj_class2.h pair_lj_class2_coul_cut.h pair_lj_class2_coul_long.h pair_lj_cubic.h pair_lj_cut.h pair_lj_cut_coul_cut.h pair_lj_cut_coul_debye.h pair_lj_cut_coul_dsf.h pair_lj_cut_opt.h pair_lj_expand.h pair_lj_gromacs.h pair_lj_gromacs_coul_gromacs.h pair_lj_smooth.h pair_lj_smooth_linear.h pair_lubricate.h pair_lubricateU.h pair_lubricateU_poly.h pair_lubricate_poly.h pair_mie_cut.h pair_morse.h pair_morse_opt.h pair_peri_lps.h pair_peri_pmb.h pair_rebo.h pair_resquared.h pair_soft.h pair_sw.h pair_table.h pair_tersoff.h pair_tersoff_zbl.h pair_tri_lj.h pair_yukawa.h pair_yukawa_colloid.h pointers.h prd.h procmap.h random_mars.h random_park.h read_data.h read_dump.h read_restart.h reader.h reader_native.h reader_xyz.h region.h region_block.h region_cone.h region_cylinder.h region_intersect.h region_plane.h region_prism.h region_sphere.h region_union.h replicate.h rerun.h respa.h run.h set.h special.h style_angle.h style_atom.h style_bond.h style_command.h style_compute.h style_dihedral.h style_dump.h style_fix.h style_improper.h style_integrate.h style_kspace.h style_minimize.h style_pair.h style_reader.h style_region.h suffix.h tad.h temper.h thermo.h timer.h universe.h update.h variable.h velocity.h verlet.h verlet_split.h version.h write_restart.h xdr_compat.h OBJ = $(SRC:.cpp=.o) diff --git a/src/fix_external.cpp b/src/fix_external.cpp index b973d5dca3..0356c4a696 100644 --- a/src/fix_external.cpp +++ b/src/fix_external.cpp @@ -200,4 +200,3 @@ void FixExternal::set_callback(FnPtr caller_callback, void *caller_ptr) callback = caller_callback; ptr_caller = caller_ptr; } - diff --git a/src/fix_external.h b/src/fix_external.h index 35cd8deb03..9830c495fc 100644 --- a/src/fix_external.h +++ b/src/fix_external.h @@ -48,7 +48,6 @@ class FixExternal : public Fix { int mode,ncall,napply; FnPtr callback; void *ptr_caller; - int nmax; double **fexternal; }; From 51d6ffe7953d63a98febe5860610724dccc8a13b Mon Sep 17 00:00:00 2001 From: sjplimp Date: Fri, 4 Jan 2013 18:00:47 +0000 Subject: [PATCH 40/61] git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@9228 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- src/version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/version.h b/src/version.h index c7218f7316..a544c8ca5b 100644 --- a/src/version.h +++ b/src/version.h @@ -1 +1 @@ -#define LAMMPS_VERSION "8 Jan 2013" +#define LAMMPS_VERSION "9 Jan 2013" From 0921544c24d4acf1c5d2fc9e95e16189a615ffda Mon Sep 17 00:00:00 2001 From: sjplimp Date: Fri, 4 Jan 2013 18:30:49 +0000 Subject: [PATCH 41/61] git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@9230 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- src/fix_store_state.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/fix_store_state.cpp b/src/fix_store_state.cpp index 579de00063..693d699c68 100644 --- a/src/fix_store_state.cpp +++ b/src/fix_store_state.cpp @@ -66,7 +66,8 @@ FixStoreState::FixStoreState(LAMMPS *lmp, int narg, char **arg) : pack_choice[nvalues++] = &FixStoreState::pack_id; } else if (strcmp(arg[iarg],"mol") == 0) { if (!atom->molecule_flag) - error->all(FLERR,"Fix store/state for atom property that isn't allocated"); + error->all(FLERR, + "Fix store/state for atom property that isn't allocated"); pack_choice[nvalues++] = &FixStoreState::pack_molecule; } else if (strcmp(arg[iarg],"type") == 0) { pack_choice[nvalues++] = &FixStoreState::pack_type; @@ -469,7 +470,7 @@ double FixStoreState::memory_usage() void FixStoreState::grow_arrays(int nmax) { - memory->grow(values,nmax,nvalues,"store/state:values"); + memory->grow(values,nmax,nvalues,"store/state:values"); if (nvalues == 1) { if (nmax) vector_atom = &values[0][0]; else vector_atom = NULL; From c183aa664407aac4a91520b7fe89ac66f3366ff0 Mon Sep 17 00:00:00 2001 From: sjplimp Date: Sat, 5 Jan 2013 00:10:52 +0000 Subject: [PATCH 42/61] git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@9232 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- src/pair_lj_expand.cpp | 12 ++++++++++++ src/pair_lj_expand.h | 1 + 2 files changed, 13 insertions(+) diff --git a/src/pair_lj_expand.cpp b/src/pair_lj_expand.cpp index ce6cc68901..a9e0dcd085 100644 --- a/src/pair_lj_expand.cpp +++ b/src/pair_lj_expand.cpp @@ -14,6 +14,7 @@ #include "math.h" #include "stdio.h" #include "stdlib.h" +#include "string.h" #include "pair_lj_expand.h" #include "atom.h" #include "comm.h" @@ -390,3 +391,14 @@ double PairLJExpand::single(int i, int j, int itype, int jtype, double rsq, offset[itype][jtype]; return factor_lj*philj; } + +/* ---------------------------------------------------------------------- */ + +void *PairLJExpand::extract(const char *str, int &dim) +{ + dim = 2; + if (strcmp(str,"epsilon") == 0) return (void *) epsilon; + if (strcmp(str,"sigma") == 0) return (void *) sigma; + if (strcmp(str,"delta") == 0) return (void *) shift; + return NULL; +} diff --git a/src/pair_lj_expand.h b/src/pair_lj_expand.h index f132857e7e..3c7f7cd793 100644 --- a/src/pair_lj_expand.h +++ b/src/pair_lj_expand.h @@ -38,6 +38,7 @@ class PairLJExpand : public Pair { void write_restart_settings(FILE *); void read_restart_settings(FILE *); double single(int, int, int, int, double, double, double, double &); + void *extract(const char *, int &); protected: double cut_global; From a535ce285a0ce718082d7ca5349c8d24d60138c1 Mon Sep 17 00:00:00 2001 From: sjplimp Date: Sat, 5 Jan 2013 00:12:24 +0000 Subject: [PATCH 43/61] git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@9233 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- doc/fix_adapt.html | 13 ++++++------- doc/fix_adapt.txt | 11 +++++------ 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/doc/fix_adapt.html b/doc/fix_adapt.html index 3d6c1a3430..cfbf36373b 100644 --- a/doc/fix_adapt.html +++ b/doc/fix_adapt.html @@ -79,10 +79,6 @@ the end of a simulation. Even if reset is specified as yes, a restart file written during a simulation will contain the modified settings.

    -

    IMPORTANT NOTE: Currently, only the pair and kspace params -are resettable. Atom attributes are not. This will be -added at some point. -

    If the scale keyword is set to no, then the value the parameter is set to will be whatever the variable generates. If the scale keyword is set to yes, then the value of the altered parameter will @@ -116,8 +112,8 @@ styles and their energy formulas for the meaning of these parameters:

    - - + +
    all styles except those listed atom-ID vx vy vz
    dipole atom-ID vx vy vz wx wy wz
    electron atom-ID vx vy vz ervel
    ellipsoid atom-ID vx vy vz lx ly lz
    sphere atom-ID vx vy vz wx wy wz
    coul/cut scale type pairs
    coul/debye scale type pairs
    coul/long scale type pairs
    lj/cut epsilon type pairs
    lj/cut/opt epsilon type pairs
    lj/cut epsilon,sigma type pairs
    lj/expand epsilon,sigma,delta type pairs
    lubricate mu global
    gauss a type pairs
    soft a type pairs @@ -205,7 +201,8 @@ is set to no or yes. aparam argument is the name of the parameter to change. This is the current list of atom parameters that can be varied by this fix:

    -
    • diameter = diameter of particle +
      • charge = charge on particle +
      • diameter = diameter of particle

      The v_name argument of the atom keyword is the name of an equal-style variable which will be evaluated each time @@ -228,6 +225,8 @@ over the course of a 1000-step simulation:

      variable size equal ramp(1.0,0.1)
       fix 1 center adapt 10 atom diameter v_size 
       
      +
      +

      Restart, fix_modify, output, run start/stop, minimize info:

      No information about this fix is written to binary restart diff --git a/doc/fix_adapt.txt b/doc/fix_adapt.txt index 04e383f2cf..6c7b6ef356 100644 --- a/doc/fix_adapt.txt +++ b/doc/fix_adapt.txt @@ -66,10 +66,6 @@ the end of a simulation. Even if {reset} is specified as {yes}, a restart file written during a simulation will contain the modified settings. -IMPORTANT NOTE: Currently, only the {pair} and {kspace} params -are resettable. {Atom} attributes are not. This will be -added at some point. - If the {scale} keyword is set to {no}, then the value the parameter is set to will be whatever the variable generates. If the {scale} keyword is set to {yes}, then the value of the altered parameter will @@ -102,8 +98,8 @@ styles and their energy formulas for the meaning of these parameters: "coul/cut"_pair_coul.html: scale: type pairs: "coul/debye"_pair_coul.html: scale: type pairs: "coul/long"_pair_coul.html: scale: type pairs: -"lj/cut"_pair_lj.html: epsilon: type pairs: -"lj/cut/opt"_pair_lj.html: epsilon: type pairs: +"lj/cut"_pair_lj.html: epsilon,sigma: type pairs: +"lj/expand"_pair_lj_expand.html: epsilon,sigma,delta: type pairs: "lubricate"_pair_lubricate.html: mu: global: "gauss"_pair_gauss.html: a: type pairs: "soft"_pair_soft.html: a: type pairs :tb(c=3,s=:) @@ -190,6 +186,7 @@ The {atom} keyword enables various atom properties to be changed. The {aparam} argument is the name of the parameter to change. This is the current list of atom parameters that can be varied by this fix: +charge = charge on particle diameter = diameter of particle :ul The {v_name} argument of the {atom} keyword is the name of an @@ -213,6 +210,8 @@ over the course of a 1000-step simulation: variable size equal ramp(1.0,0.1) fix 1 center adapt 10 atom diameter v_size :pre +:line + [Restart, fix_modify, output, run start/stop, minimize info:] No information about this fix is written to "binary restart From 0fd35228c602c9e1087a7647bbc1e6bc2cc0d765 Mon Sep 17 00:00:00 2001 From: sjplimp Date: Sat, 5 Jan 2013 00:15:59 +0000 Subject: [PATCH 44/61] git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@9234 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- src/USER-MISC/pair_lj_sf.cpp | 11 ++++++++--- src/fix_adapt.cpp | 6 +----- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/USER-MISC/pair_lj_sf.cpp b/src/USER-MISC/pair_lj_sf.cpp index d378cfab4e..2e1c92c93f 100644 --- a/src/USER-MISC/pair_lj_sf.cpp +++ b/src/USER-MISC/pair_lj_sf.cpp @@ -30,7 +30,10 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -PairLJShiftedForce::PairLJShiftedForce(LAMMPS *lmp) : Pair(lmp) {} +PairLJShiftedForce::PairLJShiftedForce(LAMMPS *lmp) : Pair(lmp) +{ + respa_enable = 0; +} /* ---------------------------------------------------------------------- */ @@ -149,11 +152,12 @@ void PairLJShiftedForce::allocate() setflag[i][j] = 0; memory->create(cutsq,n+1,n+1,"pair:cutsq"); + memory->create(cut,n+1,n+1,"pair:cut"); memory->create(epsilon,n+1,n+1,"pair:epsilon"); memory->create(sigma,n+1,n+1,"pair:sigma"); memory->create(lj1,n+1,n+1,"pair:lj1"); - memory->create(lj3,n+1,n+1,"pair:lj2"); + memory->create(lj2,n+1,n+1,"pair:lj2"); memory->create(lj3,n+1,n+1,"pair:lj3"); memory->create(lj4,n+1,n+1,"pair:lj4"); memory->create(foffset,n+1,n+1,"pair:foffset"); @@ -189,7 +193,8 @@ void PairLJShiftedForce::settings(int narg, char **arg) void PairLJShiftedForce::coeff(int narg, char **arg) { - if (narg < 4 || narg > 5) error->all(FLERR,"Incorrect args for pair coefficients"); + if (narg < 4 || narg > 5) + error->all(FLERR,"Incorrect args for pair coefficients"); if (!allocated) allocate(); int ilo,ihi,jlo,jhi; diff --git a/src/fix_adapt.cpp b/src/fix_adapt.cpp index 2f0c735efc..49684020c8 100644 --- a/src/fix_adapt.cpp +++ b/src/fix_adapt.cpp @@ -347,11 +347,7 @@ void FixAdapt::change_settings() int *mask = atom->mask; int nlocal = atom->nlocal; for (i = 0; i < nlocal; i++) - if (mask[i] & groupbit) { -// cout<<"Fix adapt called now!\n"; -// cout<<" Charge of atom: "< Date: Sat, 5 Jan 2013 00:30:41 +0000 Subject: [PATCH 45/61] git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@9235 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- src/SHOCK/fix_append_atoms.cpp | 25 +++++++++++++++++++------ src/SHOCK/fix_append_atoms.h | 7 ++++--- 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/src/SHOCK/fix_append_atoms.cpp b/src/SHOCK/fix_append_atoms.cpp index 66580c6bfa..9b2f92b9f6 100644 --- a/src/SHOCK/fix_append_atoms.cpp +++ b/src/SHOCK/fix_append_atoms.cpp @@ -60,6 +60,13 @@ FixAppendAtoms::FixAppendAtoms(LAMMPS *lmp, int narg, char **arg) : randomx = NULL; randomt = NULL; + if (!domain->lattice) + error->all(FLERR,"Fix append/atoms requires a lattice be defined"); + + nbasis = domain->lattice->nbasis; + basistype = new int[nbasis]; + for (int i = 0; i < nbasis; i++) basistype[i] = 1; + int iarg = 0; iarg = 3; while (iarg < narg) { @@ -117,6 +124,16 @@ FixAppendAtoms::FixAppendAtoms(LAMMPS *lmp, int narg, char **arg) : strcpy(spatialid,suffix); delete [] suffix; iarg += 3; + } else if (strcmp(arg[iarg],"basis") == 0) { + if (iarg+3 > narg) error->all(FLERR,"Illegal fix append/atoms command"); + if (domain->lattice == NULL) + error->all(FLERR,"Must define lattice to append/atoms"); + int ibasis = atoi(arg[iarg+1]); + int itype = atoi(arg[iarg+2]); + if (ibasis <= 0 || ibasis > nbasis || itype <= 0 || itype > atom->ntypes) + error->all(FLERR,"Illegal fix append/atoms command"); + basistype[ibasis-1] = itype; + iarg += 3; } else if (strcmp(arg[iarg],"size") == 0) { if (iarg+2 > narg) error->all(FLERR,"Illegal fix append/atoms command"); size = atof(arg[iarg+1]); @@ -193,6 +210,8 @@ FixAppendAtoms::FixAppendAtoms(LAMMPS *lmp, int narg, char **arg) : FixAppendAtoms::~FixAppendAtoms() { + delete [] basistype; + if (ranflag) delete randomx; if (tempflag) { delete randomt; @@ -396,12 +415,6 @@ void FixAppendAtoms::pre_exchange() if (ntimestep % freq == 0) { if (spatflag==1) if (get_spatial()==0) return; if (comm->myloc[2] == comm->procgrid[2]-1) { - if (domain->lattice) { - nbasis = domain->lattice->nbasis; - basistype = new int[nbasis]; - for (int i = 0; i < nbasis; i++) basistype[i] = 1; - } else error->all(FLERR,"Must define lattice to append/atoms"); - double bboxlo[3],bboxhi[3]; bboxlo[0] = domain->sublo[0]; bboxhi[0] = domain->subhi[0]; diff --git a/src/SHOCK/fix_append_atoms.h b/src/SHOCK/fix_append_atoms.h index dca43d5ec2..5b374c9c87 100644 --- a/src/SHOCK/fix_append_atoms.h +++ b/src/SHOCK/fix_append_atoms.h @@ -42,9 +42,10 @@ class FixAppendAtoms : public Fix { class RanMars *randomx; class RanMars *randomt; int scaleflag, freq; - int *basistype, nbasis; - int advance, advance_sum; - double size, spatlead; + int nbasis; + int *basistype; + int advance,advance_sum; + double size,spatlead; char *spatialid; double tfactor; double *gfactor1,*gfactor2; From 15137c006528b5d1c64ee862202255d11dd2cd05 Mon Sep 17 00:00:00 2001 From: sjplimp Date: Sat, 5 Jan 2013 00:33:26 +0000 Subject: [PATCH 46/61] git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@9236 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- doc/fix_append_atoms.html | 16 +++++++++++++--- doc/fix_append_atoms.txt | 14 ++++++++++++-- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/doc/fix_append_atoms.html b/doc/fix_append_atoms.html index 26a69b86a5..00799936c4 100644 --- a/doc/fix_append_atoms.html +++ b/doc/fix_append_atoms.html @@ -23,9 +23,12 @@

    • zero or more keyword/value pairs may be appended -
    • keyword = size or freq or temp or random or units +
    • keyword = basis or size or freq or temp or random or units -
        size args = Lz
      +
        basis values = M itype
      +    M = which basis atom
      +    itype = atom type (1-N) to assign to this basis atom
      +  size args = Lz
           Lz = z size of lattice region appended in a single event(distance units)
         freq args = freq
           freq = the number of timesteps between append events
      @@ -62,6 +65,12 @@ Before using this command, a lattice must also be defined using the
       

      This fix will automatically freeze atoms on the zhi edge of the system, so that overlaps are avoided when new atoms are appended.

      +

      The basis keyword specifies an atom type that will be assigned to +specific basis atoms as they are created. See the +lattice command for specifics on how basis atoms are +defined for the unit cell of the lattice. By default, all created +atoms are assigned type = 1 unless this keyword specifies differently. +

      The size keyword defines the size in z of the chunk of material to be added.

      @@ -108,6 +117,7 @@ than periodic.

      Default:

      -

      The keyword defaults are size = 0.0, freq = 0, units = lattice. +

      The keyword defaults are size = 0.0, freq = 0, units = lattice. All +added atoms are of type 1 unless the basis keyword is used.

      diff --git a/doc/fix_append_atoms.txt b/doc/fix_append_atoms.txt index 89f3326666..73e4632736 100644 --- a/doc/fix_append_atoms.txt +++ b/doc/fix_append_atoms.txt @@ -16,7 +16,10 @@ ID, group-ID are documented in "fix"_fix.html command :ulb,l append/atoms = style name of this fix command :l face = {zhi} :l zero or more keyword/value pairs may be appended :l -keyword = {size} or {freq} or {temp} or {random} or {units} :l +keyword = {basis} or {size} or {freq} or {temp} or {random} or {units} :l + {basis} values = M itype + M = which basis atom + itype = atom type (1-N) to assign to this basis atom {size} args = Lz Lz = z size of lattice region appended in a single event(distance units) {freq} args = freq @@ -53,6 +56,12 @@ Before using this command, a lattice must also be defined using the This fix will automatically freeze atoms on the zhi edge of the system, so that overlaps are avoided when new atoms are appended. +The {basis} keyword specifies an atom type that will be assigned to +specific basis atoms as they are created. See the +"lattice"_lattice.html command for specifics on how basis atoms are +defined for the unit cell of the lattice. By default, all created +atoms are assigned type = 1 unless this keyword specifies differently. + The {size} keyword defines the size in z of the chunk of material to be added. @@ -99,4 +108,5 @@ than periodic. [Default:] -The keyword defaults are size = 0.0, freq = 0, units = lattice. +The keyword defaults are size = 0.0, freq = 0, units = lattice. All +added atoms are of type 1 unless the basis keyword is used. From 5ce40edc4c4659c59218673adb6e6640374b2800 Mon Sep 17 00:00:00 2001 From: sjplimp Date: Sat, 5 Jan 2013 00:36:03 +0000 Subject: [PATCH 47/61] git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@9237 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- src/version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/version.h b/src/version.h index a544c8ca5b..b746be26bc 100644 --- a/src/version.h +++ b/src/version.h @@ -1 +1 @@ -#define LAMMPS_VERSION "9 Jan 2013" +#define LAMMPS_VERSION "10 Jan 2013" From 9934c92093e67156c42a3db3761223e64e4622fb Mon Sep 17 00:00:00 2001 From: sjplimp Date: Sat, 5 Jan 2013 00:45:15 +0000 Subject: [PATCH 48/61] git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@9239 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- src/fix_heat.cpp | 34 +++++++++++++++++++++++++++++++++- src/fix_heat.h | 2 ++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/src/fix_heat.cpp b/src/fix_heat.cpp index 52ec746b20..46934f96e0 100644 --- a/src/fix_heat.cpp +++ b/src/fix_heat.cpp @@ -25,11 +25,16 @@ #include "group.h" #include "force.h" #include "update.h" +#include "modify.h" +#include "input.h" +#include "variable.h" #include "error.h" using namespace LAMMPS_NS; using namespace FixConst; +enum{CONSTANT,EQUAL}; + /* ---------------------------------------------------------------------- */ FixHeat::FixHeat(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg) @@ -43,7 +48,17 @@ FixHeat::FixHeat(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg) nevery = atoi(arg[3]); if (nevery <= 0) error->all(FLERR,"Illegal fix heat command"); - heat_input = atof(arg[4]); + hstr = NULL; + + if (strstr(arg[4],"v_") == arg[4]) { + int n = strlen(&arg[4][2]) + 1; + hstr = new char[n]; + strcpy(hstr,&arg[4][2]); + hstyle = EQUAL; + } else { + heat_input = atof(arg[4]); + hstyle = CONSTANT; + } // optional args @@ -71,6 +86,7 @@ FixHeat::FixHeat(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg) FixHeat::~FixHeat() { + delete [] hstr; delete [] idregion; } @@ -95,6 +111,16 @@ void FixHeat::init() error->all(FLERR,"Region ID for fix heat does not exist"); } + // check variable + + if (hstr) { + hvar = input->variable->find(hstr); + if (hvar < 0) + error->all(FLERR,"Variable name for fix heat does not exist"); + if (!input->variable->equalstyle(hvar)) + error->all(FLERR,"Variable for fix heat is invalid style"); + } + // cannot have 0 atoms in group if (group->count(igroup) == 0) @@ -111,6 +137,12 @@ void FixHeat::end_of_step() Region *region = NULL; if (iregion >= 0) region = domain->regions[iregion]; + if (hstyle == EQUAL) { + modify->clearstep_compute(); + heat_input = input->variable->compute_equal(hvar); + modify->addstep_compute(update->ntimestep + nevery); + } + if (iregion < 0) { heat = heat_input*nevery*update->dt*force->ftm2v; ke = group->ke(igroup)*force->ftm2v; diff --git a/src/fix_heat.h b/src/fix_heat.h index 83551e6637..4562ac9a90 100644 --- a/src/fix_heat.h +++ b/src/fix_heat.h @@ -39,6 +39,8 @@ class FixHeat : public Fix { double masstotal; double scale; char *idregion; + char *hstr; + int hstyle,hvar; }; } From b72f03d427a8f3ea49c680a125a3ec579e6b6c13 Mon Sep 17 00:00:00 2001 From: sjplimp Date: Sat, 5 Jan 2013 00:48:13 +0000 Subject: [PATCH 49/61] git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@9240 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- doc/fix_heat.html | 14 ++++++++++++++ doc/fix_heat.txt | 14 +++++++++++++- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/doc/fix_heat.html b/doc/fix_heat.html index e871f5f484..44295c0cce 100644 --- a/doc/fix_heat.html +++ b/doc/fix_heat.html @@ -23,6 +23,8 @@
    • eflux = rate of heat addition or subtraction (energy/time units) +
    • eflux can be a variable (see below) +
    • zero or more keyword/value pairs may be appended to args
    • keyword = region @@ -35,6 +37,7 @@

      Examples:

      fix 3 qin heat 1 1.0
      +fix 3 qin heat 10 v_flux
       fix 4 qout heat 1 -1.0 region top 
       

      Description: @@ -62,6 +65,17 @@ time the fix is invoked. If heat is subtracted from the system too aggressively so that the group's kinetic energy would go to zero, LAMMPS halts with an error message.

      +

      The eflux parameter can be specified as an equal-style +variable. If the value is a variable, it should be +specified as v_name, where name is the variable name. In this case, +the variable will be evaluated each timestep, and its value used to +determine the flux. +

      +

      Equal-style variables can specify formulas with various mathematical +functions, and include thermo_style command +keywords for the simulation box parameters and timestep and elapsed +time. Thus it is easy to specify a time-dependent flux. +

      Fix heat is different from a thermostat such as fix nvt or fix temp/rescale in that energy is added/subtracted continually. Thus if there isn't another mechanism diff --git a/doc/fix_heat.txt b/doc/fix_heat.txt index b6c3ee3560..51a26b4278 100644 --- a/doc/fix_heat.txt +++ b/doc/fix_heat.txt @@ -16,6 +16,7 @@ ID, group-ID are documented in "fix"_fix.html command :ulb,l heat = style name of this fix command :l N = add/subtract heat every this many timesteps :l eflux = rate of heat addition or subtraction (energy/time units) :l +eflux can be a variable (see below) :l zero or more keyword/value pairs may be appended to args :l keyword = {region} :l {region} value = region-ID @@ -25,6 +26,7 @@ keyword = {region} :l [Examples:] fix 3 qin heat 1 1.0 +fix 3 qin heat 10 v_flux fix 4 qout heat 1 -1.0 region top :pre [Description:] @@ -52,6 +54,17 @@ time the fix is invoked. If heat is subtracted from the system too aggressively so that the group's kinetic energy would go to zero, LAMMPS halts with an error message. +The {eflux} parameter can be specified as an equal-style +"variable"_variable.html. If the value is a variable, it should be +specified as v_name, where name is the variable name. In this case, +the variable will be evaluated each timestep, and its value used to +determine the flux. + +Equal-style variables can specify formulas with various mathematical +functions, and include "thermo_style"_thermo_style.html command +keywords for the simulation box parameters and timestep and elapsed +time. Thus it is easy to specify a time-dependent flux. + Fix heat is different from a thermostat such as "fix nvt"_fix_nh.html or "fix temp/rescale"_fix_temp_rescale.html in that energy is added/subtracted continually. Thus if there isn't another mechanism @@ -90,4 +103,3 @@ minimization"_minimize.html. temp/region"_compute_temp_region.html [Default:] none - From 71e58a480a1b4fee22d1e31572cbb3061533a578 Mon Sep 17 00:00:00 2001 From: sjplimp Date: Sat, 5 Jan 2013 00:49:41 +0000 Subject: [PATCH 50/61] git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@9241 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- src/version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/version.h b/src/version.h index b746be26bc..0a63754c35 100644 --- a/src/version.h +++ b/src/version.h @@ -1 +1 @@ -#define LAMMPS_VERSION "10 Jan 2013" +#define LAMMPS_VERSION "11 Jan 2013" From 7886b6f1d170bf766e6cc2f8f1381ef3e4a6c297 Mon Sep 17 00:00:00 2001 From: sjplimp Date: Mon, 7 Jan 2013 16:28:59 +0000 Subject: [PATCH 51/61] git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@9243 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- src/input.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/input.cpp b/src/input.cpp index 58c9bb4af5..c0436862ce 100644 --- a/src/input.cpp +++ b/src/input.cpp @@ -233,12 +233,14 @@ void Input::file(const char *filename) } /* ---------------------------------------------------------------------- - parse the command in single and execute it + copy command in single to line, parse and execute it return command name to caller ------------------------------------------------------------------------- */ char *Input::one(const char *single) { + int n = strlen(single) + 1; + if (n > maxline) reallocate(line,maxline,n); strcpy(line,single); // echo the command unless scanning for label From 426ad1c55bd8908fc099309d44da4b5fb7fa1925 Mon Sep 17 00:00:00 2001 From: pscrozi Date: Mon, 7 Jan 2013 23:20:16 +0000 Subject: [PATCH 52/61] Updating kspace docs to reflect changes in MSM allowing non-periodic boundaries. git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@9244 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- doc/kspace_modify.html | 12 ++++++------ doc/kspace_modify.txt | 12 ++++++------ doc/kspace_style.html | 21 +++++++++++++++------ doc/kspace_style.txt | 19 ++++++++++++++----- 4 files changed, 41 insertions(+), 23 deletions(-) diff --git a/doc/kspace_modify.html b/doc/kspace_modify.html index d3fa736a4e..3da9a66b4f 100644 --- a/doc/kspace_modify.html +++ b/doc/kspace_modify.html @@ -168,8 +168,10 @@ must prevent particle migration beyond the initial z-bounds, typically by providing a wall-style fix. The methodology behind the slab option is explained in the paper by (Yeh). An alternative slab option can be invoked with the nozforce keyword in lieu of the -volfactor. This turns off all kspace forces in the z direction. The -slab and nozforce options are not allowed for MSM. +volfactor. This turns off all kspace forces in the z direction. +The nozforce option is not supported by MSM. For MSM, any combination +of periodic, non-periodic, or shrink-wrapped boundaries can be set +using boundary (the slab approximation in not needed).

      The compute keyword allows Kspace computations to be turned off, even though a kspace_style is defined. This is @@ -203,9 +205,7 @@ then performs analytic differentiation on the single quantity to generate the 3 components of the electric field at each grid point. This is sometimes referred to as "smoothed" PPPM. This approach requires a somewhat larger PPPM mesh to achieve the same accuracy as -the ik method. Analogous approaches have been implemented in MSM -and can be specified using the same keywords. The ad approach is -the default for MSM. +the ik method. The ad method is always used for MSM.

      IMPORTANT NOTE: Currently, not all PPPM styles support the ad option. Support for those PPPM variants will be added later. @@ -221,7 +221,7 @@ option. Support for those PPPM variants will be added later.

      The option defaults are mesh = mesh/disp = 0 0 0, order = order/disp = 5 (PPPM), order = 8 (MSM), minorder = 2, overlap = yes, force = -1.0, gewald = gewald/disp = 0.0, slab = 1.0, compute = yes, cutoff/adjust = -yes, and diff = ik (PPPM), diff = ad (MSM). +yes (MSM), and diff = ik (PPPM).


      diff --git a/doc/kspace_modify.txt b/doc/kspace_modify.txt index 158d710655..3a21672458 100644 --- a/doc/kspace_modify.txt +++ b/doc/kspace_modify.txt @@ -162,8 +162,10 @@ must prevent particle migration beyond the initial z-bounds, typically by providing a wall-style fix. The methodology behind the {slab} option is explained in the paper by "(Yeh)"_#Yeh. An alternative slab option can be invoked with the {nozforce} keyword in lieu of the -volfactor. This turns off all kspace forces in the z direction. The -{slab} and {nozforce} options are not allowed for MSM. +volfactor. This turns off all kspace forces in the z direction. +The {nozforce} option is not supported by MSM. For MSM, any combination +of periodic, non-periodic, or shrink-wrapped boundaries can be set +using "boundary"_boundary.html (the slab approximation in not needed). The {compute} keyword allows Kspace computations to be turned off, even though a "kspace_style"_kspace_style.html is defined. This is @@ -197,9 +199,7 @@ then performs analytic differentiation on the single quantity to generate the 3 components of the electric field at each grid point. This is sometimes referred to as "smoothed" PPPM. This approach requires a somewhat larger PPPM mesh to achieve the same accuracy as -the {ik} method. Analogous approaches have been implemented in MSM -and can be specified using the same keywords. The {ad} approach is -the default for MSM. +the {ik} method. The {ad} method is always used for MSM. IMPORTANT NOTE: Currently, not all PPPM styles support the {ad} option. Support for those PPPM variants will be added later. @@ -215,7 +215,7 @@ option. Support for those PPPM variants will be added later. The option defaults are mesh = mesh/disp = 0 0 0, order = order/disp = 5 (PPPM), order = 8 (MSM), minorder = 2, overlap = yes, force = -1.0, gewald = gewald/disp = 0.0, slab = 1.0, compute = yes, cutoff/adjust = -yes, and diff = ik (PPPM), diff = ad (MSM). +yes (MSM), and diff = ik (PPPM). :line diff --git a/doc/kspace_style.html b/doc/kspace_style.html index 06ae1a674d..c12340b364 100644 --- a/doc/kspace_style.html +++ b/doc/kspace_style.html @@ -73,7 +73,7 @@ style to perform consistent short-range pairwise calculations. This means that the name of the pair style contains a matching keyword to the name of the KSpace style, as in this table:

      -
      +
      @@ -159,7 +159,8 @@ mesh, and uses a multi-level hierarchy of coarser and coarser meshes on which direct coulomb solves are done. This method does not use FFTs and scales as N. It may therefore be faster than the other K-space solvers for relatively large problems when running on large -core counts. +core counts. MSM can also be used for non-periodic boundary conditions and +for mixed periodic and non-periodic boundaries.

      MSM is most competitive versus Ewald and PPPM when only relatively low accuracy forces, about 1e-4 relative error or less accurate, @@ -167,6 +168,10 @@ are needed. Note that use of a larger coulomb cutoff (i.e. 15 angstroms instead of 10 angstroms) provides better MSM accuracy for both the real space and grid computed forces.

      +

      Currently the pressure calculation in MSM is expensive, +so calculating the pressure at every timestep or using a fixed pressure +simulation with MSM will cause the code to run slower. +


      The specified accuracy determines the relative RMS error in per-atom @@ -231,10 +236,14 @@ only enabled if LAMMPS was built with that package. See the kspace_modify, in which case the xy dimensions -must be periodic and the z dimension must be non-periodic. +

      For MSM, a simulation must be 3d and one can use any combination of +periodic, non-periodic, or shrink-wrapped boundaries (specified using +the boundary command). +

      +

      For Ewald and PPPM, a simulation must be 3d and periodic in all dimensions. +The only exception is if the slab option is set with kspace_modify, +in which case the xy dimensions must be periodic and the z dimension must be +non-periodic.

      Related commands:

      diff --git a/doc/kspace_style.txt b/doc/kspace_style.txt index 68fc97deb2..6f3be625dd 100644 --- a/doc/kspace_style.txt +++ b/doc/kspace_style.txt @@ -152,7 +152,8 @@ mesh, and uses a multi-level hierarchy of coarser and coarser meshes on which direct coulomb solves are done. This method does not use FFTs and scales as N. It may therefore be faster than the other K-space solvers for relatively large problems when running on large -core counts. +core counts. MSM can also be used for non-periodic boundary conditions and +for mixed periodic and non-periodic boundaries. MSM is most competitive versus Ewald and PPPM when only relatively low accuracy forces, about 1e-4 relative error or less accurate, @@ -160,6 +161,10 @@ are needed. Note that use of a larger coulomb cutoff (i.e. 15 angstroms instead of 10 angstroms) provides better MSM accuracy for both the real space and grid computed forces. +Currently the pressure calculation in MSM is expensive, +so calculating the pressure at every timestep or using a fixed pressure +simulation with MSM will cause the code to run slower. + :line The specified {accuracy} determines the relative RMS error in per-atom @@ -224,10 +229,14 @@ only enabled if LAMMPS was built with that package. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. Note that the KSPACE package is installed by default. -A simulation must be 3d and periodic in all dimensions to use an Ewald -or PPPM solver. The only exception is if the slab option is set with -"kspace_modify"_kspace_modify.html, in which case the xy dimensions -must be periodic and the z dimension must be non-periodic. +For MSM, a simulation must be 3d and one can use any combination of +periodic, non-periodic, or shrink-wrapped boundaries (specified using +the "boundary"_boundary.html command). + +For Ewald and PPPM, a simulation must be 3d and periodic in all dimensions. +The only exception is if the slab option is set with "kspace_modify"_kspace_modify.html, +in which case the xy dimensions must be periodic and the z dimension must be +non-periodic. [Related commands:] From 46287db34f0d791a542c4c9e935b480ef8a5991a Mon Sep 17 00:00:00 2001 From: pscrozi Date: Tue, 8 Jan 2013 16:06:35 +0000 Subject: [PATCH 53/61] git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@9245 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- doc/kspace_style.html | 6 ++++-- doc/kspace_style.txt | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/doc/kspace_style.html b/doc/kspace_style.html index c12340b364..cf72c603af 100644 --- a/doc/kspace_style.html +++ b/doc/kspace_style.html @@ -194,8 +194,10 @@ equation 9 of (Petersen). RMS force errors in K-space which is similar to equation 32 of (Kolafa). RMS force errors in K-space for pppm are estimated using equation 38 of (Deserno). RMS force errors for msm are estimated -following the procedure outlined in chapter 3 of (Hardy), -with equation 3.197 of particular note. +using ideas from chapter 3 of (Hardy), with equation 3.197 +of particular note. When using msm with non-periodic boundary +conditions, it is expected that the error estimation will be too +pessimistic.

      See the kspace_modify command for additional options of the K-space solvers that can be set, including a force diff --git a/doc/kspace_style.txt b/doc/kspace_style.txt index 6f3be625dd..5f0bed56ed 100644 --- a/doc/kspace_style.txt +++ b/doc/kspace_style.txt @@ -187,8 +187,10 @@ equation 9 of "(Petersen)"_#Petersen. RMS force errors in K-space for which is similar to equation 32 of "(Kolafa)"_#Kolafa. RMS force errors in K-space for {pppm} are estimated using equation 38 of "(Deserno)"_#Deserno. RMS force errors for {msm} are estimated -following the procedure outlined in chapter 3 of "(Hardy)"_#Hardy, -with equation 3.197 of particular note. +using ideas from chapter 3 of "(Hardy)"_#Hardy, with equation 3.197 +of particular note. When using {msm} with non-periodic boundary +conditions, it is expected that the error estimation will be too +pessimistic. See the "kspace_modify"_kspace_modify.html command for additional options of the K-space solvers that can be set, including a {force} From 27c6f67b93d6b0e7fc6fda394a32d52607a6a56b Mon Sep 17 00:00:00 2001 From: sjplimp Date: Tue, 8 Jan 2013 17:45:03 +0000 Subject: [PATCH 54/61] git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@9246 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- src/thermo.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/thermo.cpp b/src/thermo.cpp index 0909153adb..d682552a9c 100644 --- a/src/thermo.cpp +++ b/src/thermo.cpp @@ -88,27 +88,27 @@ Thermo::Thermo(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp) lostbefore = 0; flushflag = 0; - // line string used for 3 tasks - // concat of custom style args - // one-time thermo output of header line - // each line of numeric thermo output - // 256 = extra for ONE or MULTI string or multi formatting - // 32 = max per-arg chars in header or numeric output - - line = new char[256+32*narg]; - // set style and corresponding lineflag // custom style builds its own line of keywords // customize a new thermo style by adding to if statement + // allocate line string used for 3 tasks + // concat of custom style args + // one-time thermo output of header line + // each line of numeric thermo output + // 256 = extra for ONE or MULTI string or multi formatting + // 64 = max per-arg chars in header or numeric output if (strcmp(style,"one") == 0) { + line = new char[256+6*64]; strcpy(line,ONE); } else if (strcmp(style,"multi") == 0) { + line = new char[256+12*64]; strcpy(line,MULTI); lineflag = MULTILINE; } else if (strcmp(style,"custom") == 0) { if (narg == 1) error->all(FLERR,"Illegal thermo style custom command"); + line = new char[256+narg*64]; line[0] = '\0'; for (int iarg = 1; iarg < narg; iarg++) { strcat(line,arg[iarg]); From 18c211af658cd55754648ba72ddbfde3cf64718f Mon Sep 17 00:00:00 2001 From: pscrozi Date: Tue, 8 Jan 2013 17:48:28 +0000 Subject: [PATCH 55/61] Updating MSM code to reflect changes allowing non-periodic boundaries. git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@9247 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- src/KSPACE/msm.cpp | 1631 +++++++++++++++++++------------------------- src/KSPACE/msm.h | 37 +- src/domain.cpp | 5 + 3 files changed, 714 insertions(+), 959 deletions(-) diff --git a/src/KSPACE/msm.cpp b/src/KSPACE/msm.cpp index cabb4e9a15..f3f9faf032 100644 --- a/src/KSPACE/msm.cpp +++ b/src/KSPACE/msm.cpp @@ -44,8 +44,8 @@ using namespace MathConst; #define SMALL 0.00001 #define LARGE 10000.0 -enum{REVERSE_RHO,REVERSE_IK,REVERSE_AD,REVERSE_IK_PERATOM,REVERSE_AD_PERATOM}; -enum{FORWARD_RHO,FORWARD_IK,FORWARD_AD,FORWARD_IK_PERATOM,FORWARD_AD_PERATOM}; +enum{REVERSE_RHO,REVERSE_AD,REVERSE_AD_PERATOM}; +enum{FORWARD_RHO,FORWARD_AD,FORWARD_AD_PERATOM}; /* ---------------------------------------------------------------------- */ MSM::MSM(LAMMPS *lmp, int narg, char **arg) : KSpace(lmp, narg, arg) @@ -69,23 +69,21 @@ MSM::MSM(LAMMPS *lmp, int narg, char **arg) : KSpace(lmp, narg, arg) part2grid = NULL; g_direct = NULL; - - dgx_direct = NULL; - dgy_direct = NULL; - dgz_direct = NULL; + g_direct_top = NULL; v0_direct = v1_direct = v2_direct = NULL; v3_direct = v4_direct = v5_direct = NULL; - cg = cg_IK = cg_peratom = NULL; + v0_direct_top = v1_direct_top = v2_direct_top = NULL; + v3_direct_top = v4_direct_top = v5_direct_top = NULL; + + cg = cg_peratom = NULL; levels = 0; peratom_allocate_flag = 0; order = 8; - - differentiation_flag = 1; } /* ---------------------------------------------------------------------- @@ -99,15 +97,19 @@ MSM::~MSM() deallocate_peratom(); memory->destroy(part2grid); memory->destroy(g_direct); - memory->destroy(dgx_direct); - memory->destroy(dgy_direct); - memory->destroy(dgz_direct); + memory->destroy(g_direct_top); memory->destroy(v0_direct); memory->destroy(v1_direct); memory->destroy(v2_direct); memory->destroy(v3_direct); memory->destroy(v4_direct); memory->destroy(v5_direct); + memory->destroy(v0_direct_top); + memory->destroy(v1_direct_top); + memory->destroy(v2_direct_top); + memory->destroy(v3_direct_top); + memory->destroy(v4_direct_top); + memory->destroy(v5_direct_top); deallocate_levels(); } @@ -135,9 +137,6 @@ void MSM::init() if (slabflag == 1) error->all(FLERR,"Cannot use slab correction with MSM"); - if (domain->nonperiodic > 0) - error->all(FLERR,"Cannot (yet) use nonperiodic boundaries with MSM"); - if (order < 4 || order > 10) { char str[128]; sprintf(str,"MSM order must be 4, 6, 8, or 10"); @@ -252,23 +251,19 @@ double MSM::estimate_cutoff(double h, double prd) if (p == 3) { Mp = 9; cprime = 1.0/6.0; - if (differentiation_flag) error_scaling = 0.39189561; - else error_scaling = 0.215328372; + error_scaling = 0.39189561; } else if (p == 5) { Mp = 825; cprime = 1.0/30.0; - if (differentiation_flag) error_scaling = 0.150829428; - else error_scaling = 0.10751471; + error_scaling = 0.150829428; } else if (p == 7) { Mp = 130095; cprime = 1.0/140.0; - if (differentiation_flag) error_scaling = 0.049632967; - else error_scaling = 0.047579461; + error_scaling = 0.049632967; } else if (p == 9) { Mp = 34096545; cprime = 1.0/630.0; - if (differentiation_flag) error_scaling = 0.013520855; - else error_scaling = 0.010403771; + error_scaling = 0.013520855; } else { error->all(FLERR,"MSM order must be 4, 6, 8, or 10"); } @@ -308,23 +303,19 @@ double MSM::estimate_1d_error(double h, double prd) if (p == 3) { Mp = 9; cprime = 1.0/6.0; - if (differentiation_flag) error_scaling = 0.39189561; - else error_scaling = 0.215328372; + error_scaling = 0.39189561; } else if (p == 5) { Mp = 825; cprime = 1.0/30.0; - if (differentiation_flag) error_scaling = 0.150829428; - else error_scaling = 0.10751471; + error_scaling = 0.150829428; } else if (p == 7) { Mp = 130095; cprime = 1.0/140.0; - if (differentiation_flag) error_scaling = 0.049632967; - else error_scaling = 0.047579461; + error_scaling = 0.049632967; } else if (p == 9) { Mp = 34096545; cprime = 1.0/630.0; - if (differentiation_flag) error_scaling = 0.013520855; - else error_scaling = 0.010403771; + error_scaling = 0.013520855; } else { error->all(FLERR,"MSM order must be 4, 6, 8, or 10"); } @@ -405,7 +396,7 @@ void MSM::setup() // loop over grid levels - for (int n=0; nnonperiodic) { + get_g_direct_top(levels-1); + get_virial_direct_top(levels-1); + } } else { - if (differentiation_flag) get_g_direct(); - if (!differentiation_flag) get_dg_direct(); - - if (!differentiation_flag && eflag_either) get_g_direct(); - if (differentiation_flag && vflag_either) get_dg_direct(); - if (vflag_either) get_virial_direct(); + get_g_direct(); + if (domain->nonperiodic) get_g_direct_top(levels-1); + if (vflag_either) { + get_virial_direct(); + if (domain->nonperiodic) get_virial_direct_top(levels-1); + } } + boxlo = domain->boxlo; set_grid_local(); @@ -448,13 +443,9 @@ void MSM::setup() allocate(); peratom_allocate_flag = 0; - for (int n=0; nghost_notify(); cg[n]->setup(); - if (!differentiation_flag) { - cg_IK[n]->ghost_notify(); - cg_IK[n]->setup(); - } } } @@ -474,9 +465,9 @@ void MSM::compute(int eflag, int vflag) else evflag = evflag_atom = eflag_global = vflag_global = eflag_atom = vflag_atom = eflag_either = vflag_either = 0; - if (evflag_atom && !peratom_allocate_flag) { + if (vflag_atom && !peratom_allocate_flag) { allocate_peratom(); - for (int n=0; nghost_notify(); cg_peratom[n]->setup(); } @@ -503,77 +494,35 @@ void MSM::compute(int eflag, int vflag) // all procs communicate density values from their ghost cells // to fully sum contribution in their 3d bricks - for (int n=0; n<=cutlevel; n++) { + for (int n=0; n<=levels-2; n++) { current_level = n; cg[n]->forward_comm(this,FORWARD_RHO); - // Direct sum up to cutlevel is parallel + direct(n); - if (differentiation_flag) direct_ad(n); - else direct(n); + if (vflag_atom) direct_peratom(n); - if (evflag_atom) direct_peratom(n); - - if (n < levels-2) restriction(n); + restriction(n); + } + + // top grid level + + if (domain->nonperiodic) { + direct_top(levels-1); + if (vflag_atom) direct_peratom_top(levels-1); } - if (cutlevel+1 < levels-2) grid_swap(cutlevel+1,qgrid[cutlevel+1]); + for (int n=levels-2; n>=0; n--) { - if (differentiation_flag) direct_ad(cutlevel+1); - else direct(cutlevel+1); - - if (evflag_atom) direct_peratom(cutlevel+1); - - if (eflag_global) { - double energy_all; - MPI_Allreduce(&energy,&energy_all,1,MPI_DOUBLE,MPI_SUM,world); - energy = energy_all; - } - - if (vflag_global) { - double virial_all[6]; - MPI_Allreduce(virial,virial_all,6,MPI_DOUBLE,MPI_SUM,world); - for (i = 0; i < 6; i++) virial[i] = virial_all[i]; - } - - if (cutlevel+1 < levels-2) restriction(cutlevel+1); - - // compute potential gradient on my MSM grid and - // portion of e_long on this proc's MSM grid - // return gradients (electric fields) in 3d brick decomposition - - for (int n=cutlevel+2; n=cutlevel+1; n--) - if (n < levels-2) prolongation(n); - - // all procs communicate E-field values - // to fill ghost cells surrounding their 3d bricks - - for (int n=cutlevel; n>=0; n--) { + prolongation(n); current_level = n; - if (n < levels-2) prolongation(n); + cg[n]->reverse_comm(this,REVERSE_AD); - if (differentiation_flag) cg[n]->reverse_comm(this,REVERSE_AD); - else cg_IK[n]->reverse_comm(this,REVERSE_IK); - - // extra per-atom energy/virial communication - - if (evflag_atom) { - if (differentiation_flag && vflag_atom) - cg_peratom[n]->reverse_comm(this,REVERSE_AD_PERATOM); - else if (!differentiation_flag) - cg_peratom[n]->reverse_comm(this,REVERSE_IK_PERATOM); - } + // extra per-atom virial communication + if (vflag_atom) + cg_peratom[n]->reverse_comm(this,REVERSE_AD_PERATOM); } // all procs communicate E-field values @@ -581,22 +530,16 @@ void MSM::compute(int eflag, int vflag) current_level = 0; - if (differentiation_flag) cg[0]->forward_comm(this,FORWARD_AD); - else cg_IK[0]->forward_comm(this,FORWARD_IK); + cg[0]->forward_comm(this,FORWARD_AD); // extra per-atom energy/virial communication - if (evflag_atom) { - if (differentiation_flag && vflag_atom) - cg_peratom[0]->forward_comm(this,FORWARD_AD_PERATOM); - else if (!differentiation_flag) - cg_peratom[0]->forward_comm(this,FORWARD_IK_PERATOM); - } + if (vflag_atom) + cg_peratom[0]->forward_comm(this,FORWARD_AD_PERATOM); // calculate the force on my particles (interpolation) - if (differentiation_flag) fieldforce_ad(); - else fieldforce(); + fieldforce(); // calculate the per-atom energy for my particles @@ -605,8 +548,12 @@ void MSM::compute(int eflag, int vflag) const double qscale = force->qqrd2e * scale; // Total long-range energy - + if (eflag_global) { + double energy_all; + MPI_Allreduce(&energy,&energy_all,1,MPI_DOUBLE,MPI_SUM,world); + energy = energy_all; + double e_self = qsqsum*gamma(0.0)/cutoff; // Self-energy term energy -= e_self; energy *= 0.5*qscale; @@ -615,7 +562,9 @@ void MSM::compute(int eflag, int vflag) // Total long-range virial if (vflag_global) { - for (i = 0; i < 6; i++) virial[i] *= 0.5*qscale; + double virial_all[6]; + MPI_Allreduce(virial,virial_all,6,MPI_DOUBLE,MPI_SUM,world); + for (i = 0; i < 6; i++) virial[i] = 0.5*qscale*virial_all[i]; } // per-atom energy/virial @@ -653,21 +602,12 @@ void MSM::allocate() // allocate grid levels - for (int n=0; ncreate3d_offset(qgrid[n],nzlo_out[n],nzhi_out[n], nylo_out[n],nyhi_out[n],nxlo_out[n],nxhi_out[n],"msm:qgrid"); - if (differentiation_flag) { - memory->create3d_offset(egrid[n],nzlo_out[n],nzhi_out[n], - nylo_out[n],nyhi_out[n],nxlo_out[n],nxhi_out[n],"msm:egrid"); - } else { - memory->create3d_offset(fxgrid[n],nzlo_out[n],nzhi_out[n], - nylo_out[n],nyhi_out[n],nxlo_out[n],nxhi_out[n],"msm:fxgrid"); - memory->create3d_offset(fygrid[n],nzlo_out[n],nzhi_out[n], - nylo_out[n],nyhi_out[n],nxlo_out[n],nxhi_out[n],"msm:fygrid"); - memory->create3d_offset(fzgrid[n],nzlo_out[n],nzhi_out[n], - nylo_out[n],nyhi_out[n],nxlo_out[n],nxhi_out[n],"msm:fzgrid"); - } + memory->create3d_offset(egrid[n],nzlo_out[n],nzhi_out[n], + nylo_out[n],nyhi_out[n],nxlo_out[n],nxhi_out[n],"msm:egrid"); // create ghost grid object for rho and electric field communication @@ -678,13 +618,6 @@ void MSM::allocate() nxlo_out[n],nxhi_out[n],nylo_out[n],nyhi_out[n],nzlo_out[n],nzhi_out[n], procneigh[0][0],procneigh[0][1],procneigh[1][0], procneigh[1][1],procneigh[2][0],procneigh[2][1]); - - if (!differentiation_flag) - cg_IK[n] = new CommGrid(lmp,world,3,3, - nxlo_in[n],nxhi_in[n],nylo_in[n],nyhi_in[n],nzlo_in[n],nzhi_in[n], - nxlo_out[n],nxhi_out[n],nylo_out[n],nyhi_out[n],nzlo_out[n],nzhi_out[n], - procneigh[0][0],procneigh[0][1],procneigh[1][0], - procneigh[1][1],procneigh[2][0],procneigh[2][1]); } } @@ -696,11 +629,7 @@ void MSM::allocate_peratom() { // allocate grid levels - for (int n=0; ncreate3d_offset(egrid[n],nzlo_out[n],nzhi_out[n], - nylo_out[n],nyhi_out[n],nxlo_out[n],nxhi_out[n],"msm:egrid"); - + for (int n=0; ncreate3d_offset(v0grid[n],nzlo_out[n],nzhi_out[n], nylo_out[n],nyhi_out[n],nxlo_out[n],nxhi_out[n],"msm:v0grid"); memory->create3d_offset(v1grid[n],nzlo_out[n],nzhi_out[n], @@ -714,25 +643,16 @@ void MSM::allocate_peratom() memory->create3d_offset(v5grid[n],nzlo_out[n],nzhi_out[n], nylo_out[n],nyhi_out[n],nxlo_out[n],nxhi_out[n],"msm:v5grid"); - // create ghost grid object for per-atom energy/virial int (*procneigh)[2] = comm->procneigh; - if (differentiation_flag) - cg_peratom[n] = - new CommGrid(lmp,world,6,6, - nxlo_in[n],nxhi_in[n],nylo_in[n],nyhi_in[n],nzlo_in[n],nzhi_in[n], - nxlo_out[n],nxhi_out[n],nylo_out[n],nyhi_out[n],nzlo_out[n],nzhi_out[n], - procneigh[0][0],procneigh[0][1],procneigh[1][0], - procneigh[1][1],procneigh[2][0],procneigh[2][1]); - else - cg_peratom[n] = - new CommGrid(lmp,world,7,7, - nxlo_in[n],nxhi_in[n],nylo_in[n],nyhi_in[n],nzlo_in[n],nzhi_in[n], - nxlo_out[n],nxhi_out[n],nylo_out[n],nyhi_out[n],nzlo_out[n],nzhi_out[n], - procneigh[0][0],procneigh[0][1],procneigh[1][0], - procneigh[1][1],procneigh[2][0],procneigh[2][1]); + cg_peratom[n] = + new CommGrid(lmp,world,6,6, + nxlo_in[n],nxhi_in[n],nylo_in[n],nyhi_in[n],nzlo_in[n],nzhi_in[n], + nxlo_out[n],nxhi_out[n],nylo_out[n],nyhi_out[n],nzlo_out[n],nzhi_out[n], + procneigh[0][0],procneigh[0][1],procneigh[1][0], + procneigh[1][1],procneigh[2][0],procneigh[2][1]); } } @@ -747,27 +667,15 @@ void MSM::deallocate() // deallocate grid levels - for (int n=0; ndestroy3d_offset(qgrid[n],nzlo_out[n],nylo_out[n],nxlo_out[n]); - if (differentiation_flag) { - if (egrid[n]) - memory->destroy3d_offset(egrid[n],nzlo_out[n],nylo_out[n],nxlo_out[n]); - } else { - if (fxgrid[n]) - memory->destroy3d_offset(fxgrid[n],nzlo_out[n],nylo_out[n],nxlo_out[n]); - if (fygrid[n]) - memory->destroy3d_offset(fygrid[n],nzlo_out[n],nylo_out[n],nxlo_out[n]); - if (fzgrid[n]) - memory->destroy3d_offset(fzgrid[n],nzlo_out[n],nylo_out[n],nxlo_out[n]); - } + if (egrid[n]) + memory->destroy3d_offset(egrid[n],nzlo_out[n],nylo_out[n],nxlo_out[n]); if (cg) if (cg[n]) delete cg[n]; - - if (cg_IK) - if (cg_IK[n]) delete cg_IK[n]; } } @@ -777,11 +685,7 @@ void MSM::deallocate() void MSM::deallocate_peratom() { - for (int n=0; ndestroy3d_offset(egrid[n],nzlo_out[n],nylo_out[n],nxlo_out[n]); - + for (int n=0; ndestroy3d_offset(v0grid[n],nzlo_out[n],nylo_out[n],nxlo_out[n]); if (v1grid[n]) @@ -806,71 +710,58 @@ void MSM::deallocate_peratom() void MSM::allocate_levels() { - ngrid = new int[levels-1]; + ngrid = new int[levels]; - cg = new CommGrid*[levels-1]; - cg_IK = new CommGrid*[levels-1]; - cg_peratom = new CommGrid*[levels-1]; + cg = new CommGrid*[levels]; + cg_peratom = new CommGrid*[levels]; + + alpha = new int[levels]; + betax = new int[levels]; + betay = new int[levels]; + betaz = new int[levels]; - nx_msm = new int[levels-1]; - ny_msm = new int[levels-1]; - nz_msm = new int[levels-1]; + nx_msm = new int[levels]; + ny_msm = new int[levels]; + nz_msm = new int[levels]; - nxlo_in = new int[levels-1]; - nylo_in = new int[levels-1]; - nzlo_in = new int[levels-1]; + nxlo_in = new int[levels]; + nylo_in = new int[levels]; + nzlo_in = new int[levels]; - nxhi_in = new int[levels-1]; - nyhi_in = new int[levels-1]; - nzhi_in = new int[levels-1]; + nxhi_in = new int[levels]; + nyhi_in = new int[levels]; + nzhi_in = new int[levels]; - nxlo_in_d = new int[levels-1]; - nylo_in_d = new int[levels-1]; - nzlo_in_d = new int[levels-1]; + nxlo_out = new int[levels]; + nylo_out = new int[levels]; + nzlo_out = new int[levels]; - nxhi_in_d = new int[levels-1]; - nyhi_in_d = new int[levels-1]; - nzhi_in_d = new int[levels-1]; + nxhi_out = new int[levels]; + nyhi_out = new int[levels]; + nzhi_out = new int[levels]; - nxlo_out = new int[levels-1]; - nylo_out = new int[levels-1]; - nzlo_out = new int[levels-1]; + delxinv = new double[levels]; + delyinv = new double[levels]; + delzinv = new double[levels]; + delvolinv = new double[levels]; - nxhi_out = new int[levels-1]; - nyhi_out = new int[levels-1]; - nzhi_out = new int[levels-1]; + qgrid = new double***[levels]; + egrid = new double***[levels]; - delxinv = new double[levels-1]; - delyinv = new double[levels-1]; - delzinv = new double[levels-1]; - delvolinv = new double[levels-1]; + v0grid = new double***[levels]; + v1grid = new double***[levels]; + v2grid = new double***[levels]; + v3grid = new double***[levels]; + v4grid = new double***[levels]; + v5grid = new double***[levels]; - qgrid = new double***[levels-1]; - egrid = new double***[levels-1]; - - fxgrid = new double***[levels-1]; - fygrid = new double***[levels-1]; - fzgrid = new double***[levels-1]; - - v0grid = new double***[levels-1]; - v1grid = new double***[levels-1]; - v2grid = new double***[levels-1]; - v3grid = new double***[levels-1]; - v4grid = new double***[levels-1]; - v5grid = new double***[levels-1]; - - for (int n=0; nwarning(FLERR,"Number of MSM mesh points increased to be a multiple of 2"); + // Find maximum number of levels + + levels = MAX(xlevels,ylevels); + levels = MAX(levels,zlevels); + + if (levels > MAX_LEVELS) + error->all(FLERR,"Too many MSM grid levels"); + +// Need at least 2 MSM levels for periodic systems + + if (levels <= 1) { + levels = xlevels = ylevels = zlevels = 2; + nx_max = ny_max = nz_max = 2; + if (gridflag) + error->warning(FLERR,"MSM mesh too small, increasing to 2 points in each direction)"); + } + if (adjust_cutoff_flag) { hx = xprd/nx_max; hy = yprd/ny_max; @@ -1034,20 +934,9 @@ void MSM::set_grid_global() if (me == 0) error->warning(FLERR,str); } - // Find maximum number of levels - - levels = MAX(xlevels,ylevels); - levels = MAX(levels,zlevels); - - if (levels > MAX_LEVELS) - error->all(FLERR,"Too many MSM grid levels"); - allocate_levels(); - cutlevel = levels-3; - if (cutlevel < 0) cutlevel = 0; - - for (int n = 0; n < levels-1; n++) { + for (int n = 0; n < levels; n++) { if (xlevels-n-1 > 0) nx_msm[n] = static_cast (pow(2.0,xlevels-n-1)); @@ -1067,6 +956,20 @@ void MSM::set_grid_global() if (nx_msm[0] >= OFFSET || ny_msm[0] >= OFFSET || nz_msm[0] >= OFFSET) error->all(FLERR,"MSM grid is too large"); + + if (domain->nonperiodic) { + alpha[0] = -(order/2 - 1); + betax[0] = nx_msm[0] + (order/2 - 1); + betay[0] = ny_msm[0] + (order/2 - 1); + betaz[0] = nz_msm[0] + (order/2 - 1); + for (int n = 1; n < levels; n++) { + alpha[n] = -((-alpha[n-1]+1)/2) - (order/2 - 1); + betax[n] = ((betax[n-1]+1)/2) + (order/2 - 1); + betay[n] = ((betay[n-1]+1)/2) + (order/2 - 1); + betaz[n] = ((betaz[n-1]+1)/2) + (order/2 - 1); + } + } + } /* ---------------------------------------------------------------------- @@ -1083,57 +986,20 @@ void MSM::set_grid_local() // loop over grid levels - for (int n=0; n (comm->xsplit[comm->myloc[0]] * nx_msm[n]); + nxhi_in[n] = static_cast (comm->xsplit[comm->myloc[0]+1] * nx_msm[n]) - 1; - nxlo_in_d[n] = static_cast (comm->xsplit[comm->myloc[0]] * nx_msm[n]); - nxhi_in_d[n] = static_cast (comm->xsplit[comm->myloc[0]+1] * nx_msm[n]) - 1; + nylo_in[n] = static_cast (comm->ysplit[comm->myloc[1]] * ny_msm[n]); + nyhi_in[n] = static_cast (comm->ysplit[comm->myloc[1]+1] * ny_msm[n]) - 1; - nylo_in_d[n] = static_cast (comm->ysplit[comm->myloc[1]] * ny_msm[n]); - nyhi_in_d[n] = static_cast (comm->ysplit[comm->myloc[1]+1] * ny_msm[n]) - 1; - - nzlo_in_d[n] = static_cast (comm->zsplit[comm->myloc[2]] * nz_msm[n]); - nzhi_in_d[n] = static_cast (comm->zsplit[comm->myloc[2]+1] * nz_msm[n]) - 1; - - } else { - - nxlo_in_d[n] = 0; - nxhi_in_d[n] = nx_msm[n] - 1; - - nylo_in_d[n] = 0; - nyhi_in_d[n] = ny_msm[n] - 1; - - nzlo_in_d[n] = 0; - nzhi_in_d[n] = nz_msm[n] - 1; - } - - if (n <= cutlevel) { - - nxlo_in[n] = static_cast (comm->xsplit[comm->myloc[0]] * nx_msm[n]); - nxhi_in[n] = static_cast (comm->xsplit[comm->myloc[0]+1] * nx_msm[n]) - 1; - - nylo_in[n] = static_cast (comm->ysplit[comm->myloc[1]] * ny_msm[n]); - nyhi_in[n] = static_cast (comm->ysplit[comm->myloc[1]+1] * ny_msm[n]) - 1; - - nzlo_in[n] = static_cast (comm->zsplit[comm->myloc[2]] * nz_msm[n]); - nzhi_in[n] = static_cast (comm->zsplit[comm->myloc[2]+1] * nz_msm[n]) - 1; - - } else { - - nxlo_in[n] = 0; - nxhi_in[n] = nx_msm[n] - 1; - - nylo_in[n] = 0; - nyhi_in[n] = ny_msm[n] - 1; - - nzlo_in[n] = 0; - nzhi_in[n] = nz_msm[n] - 1; - } + nzlo_in[n] = static_cast (comm->zsplit[comm->myloc[2]] * nz_msm[n]); + nzhi_in[n] = static_cast (comm->zsplit[comm->myloc[2]+1] * nz_msm[n]) - 1; // nlower,nupper = stencil size for mapping particles to MSM grid @@ -1161,17 +1027,8 @@ void MSM::set_grid_local() // dist[3] = particle position bound = subbox + skin/2.0 // nlo_out,nhi_out = nlo,nhi + stencil size for particle mapping - - if (n <= cutlevel) { - - sublo = domain->sublo; - subhi = domain->subhi; - - } else { - - sublo = boxlo; - subhi = domain->boxhi; - } + sublo = domain->sublo; + subhi = domain->subhi; double dist[3]; double cuthalf = 0.0; @@ -1200,6 +1057,47 @@ void MSM::set_grid_local() nz_msm[n]/zprd + OFFSET) - OFFSET; nzlo_out[n] = nlo + MIN(-order,nzlo_direct); nzhi_out[n] = nhi + MAX(order,nzhi_direct); + + // Add extra grid points for nonperiodic boundary conditions + + if (domain->nonperiodic) { + + if (!domain->xperiodic) { + if (nxlo_in[n] == 0) + nxlo_in[n] = alpha[n]; + nxlo_out[n] = MAX(nxlo_out[n],alpha[n]); + + if (nxhi_in[n] == nx_msm[n] - 1) + nxhi_in[n] = betax[n]; + nxhi_out[n] = MIN(nxhi_out[n],betax[n]); + if (nxhi_in[n] < 0) + nxhi_in[n] = alpha[n] - 1; + } + + if (!domain->yperiodic) { + if (nylo_in[n] == 0) + nylo_in[n] = alpha[n]; + nylo_out[n] = MAX(nylo_out[n],alpha[n]); + + if (nyhi_in[n] == ny_msm[n] - 1) + nyhi_in[n] = betay[n]; + nyhi_out[n] = MIN(nyhi_out[n],betay[n]); + if (nyhi_in[n] < 0) + nyhi_in[n] = alpha[n] - 1; + } + + if (!domain->zperiodic) { + if (nzlo_in[n] == 0) + nzlo_in[n] = alpha[n]; + nzlo_out[n] = MAX(nzlo_out[n],alpha[n]); + + if (nzhi_in[n] == nz_msm[n] - 1) + nzhi_in[n] = betaz[n]; + nzhi_out[n] = MIN(nzhi_out[n],betaz[n]); + if (nzhi_in[n] < 0) + nzhi_in[n] = alpha[n] - 1; + } + } // MSM grids for this proc, including ghosts @@ -1252,33 +1150,6 @@ int MSM::factorable(int n, int &flag, int &levels) return 1; } -/* ---------------------------------------------------------------------- - MPI-Reduce so each processor has the full grid -------------------------------------------------------------------------- */ -void MSM::grid_swap(int n, double*** &gridn) -{ - if (nprocs == 1) return; - - double ***gridn_all; - memory->create3d_offset(gridn_all,nzlo_out[n],nzhi_out[n],nylo_out[n],nyhi_out[n], - nxlo_out[n],nxhi_out[n],"msm:grid_all"); - - memset(&(gridn_all[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]),0,ngrid[n]*sizeof(double)); - - MPI_Allreduce(&(gridn[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]), - &(gridn_all[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]), - ngrid[n],MPI_DOUBLE,MPI_SUM,world); - - // Swap pointers between gridn and gridn_all to avoid need of copy operation - - double ***tmp; - tmp = gridn; - gridn = gridn_all; - gridn_all = tmp; - - memory->destroy3d_offset(gridn_all,nzlo_out[n],nylo_out[n],nxlo_out[n]); -} - /* ---------------------------------------------------------------------- find center grid pt for each of my particles check that full stencil for the particle will fit in my 3d brick @@ -1379,214 +1250,90 @@ void MSM::make_rho() MSM direct part procedure for intermediate grid levels ------------------------------------------------------------------------- */ -void MSM::direct_ad(int n) +void MSM::direct(int n) { //fprintf(screen,"Direct contribution on level %i\n\n",n); double ***egridn = egrid[n]; double ***qgridn = qgrid[n]; - // bitmask for PBCs (only works for power of 2 numbers) - - int PBCx,PBCy,PBCz; - - PBCx = nx_msm[n]-1; - PBCy = ny_msm[n]-1; - PBCz = nz_msm[n]-1; - // zero out electric potential memset(&(egridn[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]),0,ngrid[n]*sizeof(double)); - int icx,icy,icz,ix,iy,iz,k; + int icx,icy,icz,ix,iy,iz,zk,zyk,k; int jj,kk; + int imin,imax,jmin,jmax,kmin,kmax; double qtmp; double esum,v0sum,v1sum,v2sum,v3sum,v4sum,v5sum; + + int nx = nxhi_direct - nxlo_direct + 1; + int ny = nyhi_direct - nylo_direct + 1; + int nz = nzhi_direct - nzlo_direct + 1; - for (icz = nzlo_in_d[n]; icz <= nzhi_in_d[n]; icz++) { - for (icy = nylo_in_d[n]; icy <= nyhi_in_d[n]; icy++) { - for (icx = nxlo_in_d[n]; icx <= nxhi_in_d[n]; icx++) { - if (evflag) { - esum = 0.0; - v0sum = v1sum = v2sum = 0.0; - v3sum = v4sum = v5sum = 0.0; - } - - if (n <= cutlevel && nprocs > 1) { - - k = 0; - for (iz = nzlo_direct; iz <= nzhi_direct; iz++) { - kk = icz+iz; - for (iy = nylo_direct; iy <= nyhi_direct; iy++) { - jj = icy+iy; - for (ix = nxlo_direct; ix <= nxhi_direct; ix++) { - qtmp = qgridn[kk][jj][icx+ix]; - egridn[icz][icy][icx] += g_direct[n][k] * qtmp; - - if (evflag) { - if (eflag_global) esum += g_direct[n][k] * qtmp; - if (vflag_global) { - v0sum += v0_direct[n][k] * qtmp; - v1sum += v1_direct[n][k] * qtmp; - v2sum += v2_direct[n][k] * qtmp; - v3sum += v3_direct[n][k] * qtmp; - v4sum += v4_direct[n][k] * qtmp; - v5sum += v5_direct[n][k] * qtmp; - } - } - k++; - } - } - } - - } else { - - k = 0; - for (iz = nzlo_direct; iz <= nzhi_direct; iz++) { - kk = (icz+iz)&PBCz; - for (iy = nylo_direct; iy <= nyhi_direct; iy++) { - jj = (icy+iy)&PBCy; - for (ix = nxlo_direct; ix <= nxhi_direct; ix++) { - qtmp = qgridn[kk][jj][(icx+ix)&PBCx]; - egridn[icz][icy][icx] += g_direct[n][k] * qtmp; - - if (evflag) { - if (eflag_global) esum += g_direct[n][k] * qtmp; - if (vflag_global) { - v0sum += v0_direct[n][k] * qtmp; - v1sum += v1_direct[n][k] * qtmp; - v2sum += v2_direct[n][k] * qtmp; - v3sum += v3_direct[n][k] * qtmp; - v4sum += v4_direct[n][k] * qtmp; - v5sum += v5_direct[n][k] * qtmp; - } - } - k++; - } - } - } - - } - - if (evflag) { - qtmp = qgridn[icz][icy][icx]; - if (eflag_global) energy += esum * qtmp; - if (vflag_global) { - virial[0] += v0sum * qtmp; - virial[1] += v1sum * qtmp; - virial[2] += v2sum * qtmp; - virial[3] += v3sum * qtmp; - virial[4] += v4sum * qtmp; - virial[5] += v5sum * qtmp; - } - } - - } + for (icz = nzlo_in[n]; icz <= nzhi_in[n]; icz++) { + + if (domain->zperiodic) { + kmin = nzlo_direct; + kmax = nzhi_direct; + } else { + kmin = MAX(nzlo_direct,alpha[n] - icz); + kmax = MIN(nzhi_direct,betaz[n] - icz); } - } -} + + for (icy = nylo_in[n]; icy <= nyhi_in[n]; icy++) { -/* ---------------------------------------------------------------------- - MSM direct part procedure for intermediate grid levels -------------------------------------------------------------------------- */ + if (domain->yperiodic) { + jmin = nylo_direct; + jmax = nyhi_direct; + } else { + jmin = MAX(nylo_direct,alpha[n] - icy); + jmax = MIN(nyhi_direct,betay[n] - icy); + } + + for (icx = nxlo_in[n]; icx <= nxhi_in[n]; icx++) { -void MSM::direct(int n) -{ - double ***qgridn = qgrid[n]; + if (domain->xperiodic) { + imin = nxlo_direct; + imax = nxhi_direct; + } else { + imin = MAX(nxlo_direct,alpha[n] - icx); + imax = MIN(nxhi_direct,betax[n] - icx); + } - double ***fxgridn = fxgrid[n]; - double ***fygridn = fygrid[n]; - double ***fzgridn = fzgrid[n]; - - // bitmask for PBCs (only works for power of 2 numbers) - - int PBCx,PBCy,PBCz; - - PBCx = nx_msm[n]-1; - PBCy = ny_msm[n]-1; - PBCz = nz_msm[n]-1; - - int icx,icy,icz,ix,iy,iz,k; - - // zero out forces - - memset(&(fxgridn[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]),0,ngrid[n]*sizeof(double)); - memset(&(fygridn[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]),0,ngrid[n]*sizeof(double)); - memset(&(fzgridn[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]),0,ngrid[n]*sizeof(double)); - - int jj,kk; - double qtmp; - double esum,v0sum,v1sum,v2sum,v3sum,v4sum,v5sum; - - for (icz = nzlo_in_d[n]; icz <= nzhi_in_d[n]; icz++) { - for (icy = nylo_in_d[n]; icy <= nyhi_in_d[n]; icy++) { - for (icx = nxlo_in_d[n]; icx <= nxhi_in_d[n]; icx++) { if (evflag) { esum = 0.0; v0sum = v1sum = v2sum = 0.0; v3sum = v4sum = v5sum = 0.0; } + + for (iz = kmin; iz <= kmax; iz++) { + kk = icz+iz; + zk = (iz + nzhi_direct)*nz; + for (iy = jmin; iy <= jmax; iy++) { + jj = icy+iy; + zyk = (zk + iy + nyhi_direct)*ny; + for (ix = imin; ix <= imax; ix++) { + qtmp = qgridn[kk][jj][icx+ix]; + k = zyk + ix + nxhi_direct; + egridn[icz][icy][icx] += g_direct[n][k] * qtmp; - if (n <= cutlevel && nprocs > 1) { - - k = 0; - for (iz = nzlo_direct; iz <= nzhi_direct; iz++) { - kk = icz+iz; - for (iy = nylo_direct; iy <= nyhi_direct; iy++) { - jj = icy+iy; - for (ix = nxlo_direct; ix <= nxhi_direct; ix++) { - qtmp = qgridn[kk][jj][icx+ix]; - fxgridn[icz][icy][icx] += dgx_direct[n][k] * qtmp; - fygridn[icz][icy][icx] += dgy_direct[n][k] * qtmp; - fzgridn[icz][icy][icx] += dgz_direct[n][k] * qtmp; - - if (evflag) { - if (eflag_global) esum += g_direct[n][k] * qtmp; - if (vflag_global) { - v0sum += v0_direct[n][k] * qtmp; - v1sum += v1_direct[n][k] * qtmp; - v2sum += v2_direct[n][k] * qtmp; - v3sum += v3_direct[n][k] * qtmp; - v4sum += v4_direct[n][k] * qtmp; - v5sum += v5_direct[n][k] * qtmp; - } + if (evflag) { + if (eflag_global) esum += g_direct[n][k] * qtmp; + if (vflag_global) { + v0sum += v0_direct[n][k] * qtmp; + v1sum += v1_direct[n][k] * qtmp; + v2sum += v2_direct[n][k] * qtmp; + v3sum += v3_direct[n][k] * qtmp; + v4sum += v4_direct[n][k] * qtmp; + v5sum += v5_direct[n][k] * qtmp; } - - k++; } - } - } - } else { - - k = 0; - for (iz = nzlo_direct; iz <= nzhi_direct; iz++) { - kk = (icz+iz)&PBCz; - for (iy = nylo_direct; iy <= nyhi_direct; iy++) { - jj = (icy+iy)&PBCy; - for (ix = nxlo_direct; ix <= nxhi_direct; ix++) { - qtmp = qgridn[kk][jj][(icx+ix)&PBCx]; - fxgridn[icz][icy][icx] += dgx_direct[n][k] * qtmp; - fygridn[icz][icy][icx] += dgy_direct[n][k] * qtmp; - fzgridn[icz][icy][icx] += dgz_direct[n][k] * qtmp; - - if (evflag) { - if (eflag_global) esum += g_direct[n][k] * qtmp; - if (vflag_global) { - v0sum += v0_direct[n][k] * qtmp; - v1sum += v1_direct[n][k] * qtmp; - v2sum += v2_direct[n][k] * qtmp; - v3sum += v3_direct[n][k] * qtmp; - v4sum += v4_direct[n][k] * qtmp; - v5sum += v5_direct[n][k] * qtmp; - } - } - - k++; - } } } } + if (evflag) { qtmp = qgridn[icz][icy][icx]; if (eflag_global) energy += esum * qtmp; @@ -1611,7 +1358,6 @@ void MSM::direct(int n) void MSM::direct_peratom(int n) { - double ***egridn = egrid[n]; double ***qgridn = qgrid[n]; double ***v0gridn = v0grid[n]; @@ -1621,21 +1367,6 @@ void MSM::direct_peratom(int n) double ***v4gridn = v4grid[n]; double ***v5gridn = v5grid[n]; - // bitmask for PBCs (only works for power of 2 numbers) - - int PBCx,PBCy,PBCz; - - PBCx = nx_msm[n]-1; - PBCy = ny_msm[n]-1; - PBCz = nz_msm[n]-1; - - int icx,icy,icz,ix,iy,iz,k; - - // zero out electric potential - - if (!differentiation_flag && eflag_atom) - memset(&(egridn[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]),0,ngrid[n]*sizeof(double)); - // zero out virial if (vflag_atom) { @@ -1647,69 +1378,155 @@ void MSM::direct_peratom(int n) memset(&(v5gridn[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]),0,ngrid[n]*sizeof(double)); } + int icx,icy,icz,ix,iy,iz,zk,zyk,k; int jj,kk; + int imin,imax,jmin,jmax,kmin,kmax; double qtmp; - int ndiff_eflag_atom = !differentiation_flag && eflag_atom; + int nx = nxhi_direct - nxlo_direct + 1; + int ny = nyhi_direct - nylo_direct + 1; + int nz = nzhi_direct - nzlo_direct + 1; - for (icz = nzlo_in_d[n]; icz <= nzhi_in_d[n]; icz++) { - for (icy = nylo_in_d[n]; icy <= nyhi_in_d[n]; icy++) { - for (icx = nxlo_in_d[n]; icx <= nxhi_in_d[n]; icx++) { + for (icz = nzlo_in[n]; icz <= nzhi_in[n]; icz++) { + + if (domain->zperiodic) { + kmin = nzlo_direct; + kmax = nzhi_direct; + } else { + kmin = MAX(nzlo_direct,alpha[n] - icz); + kmax = MIN(nzhi_direct,betaz[n] - icz); + } + + for (icy = nylo_in[n]; icy <= nyhi_in[n]; icy++) { - if (n <= cutlevel && nprocs > 1) { - - k = 0; - for (iz = nzlo_direct; iz <= nzhi_direct; iz++) { - kk = icz+iz; - for (iy = nylo_direct; iy <= nyhi_direct; iy++) { - jj = icy+iy; - for (ix = nxlo_direct; ix <= nxhi_direct; ix++) { - qtmp = qgridn[kk][jj][icx+ix]; - - if (ndiff_eflag_atom) - egridn[icz][icy][icx] += g_direct[n][k] * qtmp; - - if (vflag_atom) { - v0gridn[icz][icy][icx] += v0_direct[n][k] * qtmp; - v1gridn[icz][icy][icx] += v1_direct[n][k] * qtmp; - v2gridn[icz][icy][icx] += v2_direct[n][k] * qtmp; - v3gridn[icz][icy][icx] += v3_direct[n][k] * qtmp; - v4gridn[icz][icy][icx] += v4_direct[n][k] * qtmp; - v5gridn[icz][icy][icx] += v5_direct[n][k] * qtmp; - } - - k++; - } - } - } + if (domain->yperiodic) { + jmin = nylo_direct; + jmax = nyhi_direct; + } else { + jmin = MAX(nylo_direct,alpha[n] - icy); + jmax = MIN(nyhi_direct,betay[n] - icy); + } + + for (icx = nxlo_in[n]; icx <= nxhi_in[n]; icx++) { + if (domain->xperiodic) { + imin = nxlo_direct; + imax = nxhi_direct; } else { + imin = MAX(nxlo_direct,alpha[n] - icx); + imax = MIN(nxhi_direct,betax[n] - icx); + } - k = 0; - for (iz = nzlo_direct; iz <= nzhi_direct; iz++) { - kk = (icz+iz)&PBCz; - for (iy = nylo_direct; iy <= nyhi_direct; iy++) { - jj = (icy+iy)&PBCy; - for (ix = nxlo_direct; ix <= nxhi_direct; ix++) { - qtmp = qgridn[kk][jj][(icx+ix)&PBCx]; + for (iz = kmin; iz <= kmax; iz++) { + kk = icz+iz; + zk = (iz + nzhi_direct)*nz; + for (iy = jmin; iy <= jmax; iy++) { + jj = icy+iy; + zyk = (zk + iy + nyhi_direct)*ny; + for (ix = imin; ix <= imax; ix++) { + qtmp = qgridn[kk][jj][icx+ix]; + k = zyk + ix + nxhi_direct; - if (ndiff_eflag_atom) - egridn[icz][icy][icx] += g_direct[n][k] * qtmp; - - if (vflag_atom) { - v0gridn[icz][icy][icx] += v0_direct[n][k] * qtmp; - v1gridn[icz][icy][icx] += v1_direct[n][k] * qtmp; - v2gridn[icz][icy][icx] += v2_direct[n][k] * qtmp; - v3gridn[icz][icy][icx] += v3_direct[n][k] * qtmp; - v4gridn[icz][icy][icx] += v4_direct[n][k] * qtmp; - v5gridn[icz][icy][icx] += v5_direct[n][k] * qtmp; - } - - k++; - } + v0gridn[icz][icy][icx] += v0_direct[n][k] * qtmp; + v1gridn[icz][icy][icx] += v1_direct[n][k] * qtmp; + v2gridn[icz][icy][icx] += v2_direct[n][k] * qtmp; + v3gridn[icz][icy][icx] += v3_direct[n][k] * qtmp; + v4gridn[icz][icy][icx] += v4_direct[n][k] * qtmp; + v5gridn[icz][icy][icx] += v5_direct[n][k] * qtmp; } } + } + } + } + } +} + + +/* ---------------------------------------------------------------------- + MSM direct part procedure for top grid level +------------------------------------------------------------------------- */ + +void MSM::direct_top(int n) +{ + //fprintf(screen,"Direct contribution on level %i\n\n",n); + + double ***egridn = egrid[n]; + double ***qgridn = qgrid[n]; + + // zero out electric potential + + memset(&(egridn[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]),0,ngrid[n]*sizeof(double)); + + int icx,icy,icz,ix,iy,iz,zk,zyk,k; + int jj,kk; + int imin,imax,jmin,jmax,kmin,kmax; + double qtmp; + double esum,v0sum,v1sum,v2sum,v3sum,v4sum,v5sum; + + int nx_top = betax[n] - alpha[n]; + int ny_top = betay[n] - alpha[n]; + int nz_top = betaz[n] - alpha[n]; + + int nx = 2*nx_top + 1; + int ny = 2*ny_top + 1; + int nz = 2*nz_top + 1; + + for (icz = nzlo_in[n]; icz <= nzhi_in[n]; icz++) { + kmin = alpha[n] - icz; + kmax = betaz[n] - icz; + for (icy = nylo_in[n]; icy <= nyhi_in[n]; icy++) { + jmin = alpha[n] - icy; + jmax = betay[n] - icy; + for (icx = nxlo_in[n]; icx <= nxhi_in[n]; icx++) { + imin = alpha[n] - icx; + imax = betax[n] - icx; + + if (evflag) { + esum = 0.0; + v0sum = v1sum = v2sum = 0.0; + v3sum = v4sum = v5sum = 0.0; + } + + for (iz = kmin; iz <= kmax; iz++) { + kk = icz+iz; + zk = (iz + nz_top)*nz; + for (iy = jmin; iy <= jmax; iy++) { + jj = icy+iy; + zyk = (zk + iy + ny_top)*ny; + for (ix = imin; ix <= imax; ix++) { + qtmp = qgridn[kk][jj][icx+ix]; + k = zyk + ix + nx_top; + qtmp = qgridn[kk][jj][icx+ix]; + egridn[icz][icy][icx] += g_direct_top[k] * qtmp; + + if (evflag) { + if (eflag_global) esum += g_direct_top[k] * qtmp; + if (vflag_global) { + v0sum += v0_direct_top[k] * qtmp; + v1sum += v1_direct_top[k] * qtmp; + v2sum += v2_direct_top[k] * qtmp; + v3sum += v3_direct_top[k] * qtmp; + v4sum += v4_direct_top[k] * qtmp; + v5sum += v5_direct_top[k] * qtmp; + } + } + + } + } + } + + if (evflag) { + qtmp = qgridn[icz][icy][icx]; + if (eflag_global) energy += esum * qtmp; + if (vflag_global) { + virial[0] += v0sum * qtmp; + virial[1] += v1sum * qtmp; + virial[2] += v2sum * qtmp; + virial[3] += v3sum * qtmp; + virial[4] += v4sum * qtmp; + virial[5] += v5sum * qtmp; + } } } @@ -1718,7 +1535,85 @@ void MSM::direct_peratom(int n) } /* ---------------------------------------------------------------------- - MSM restriction procedure for intermediate grid levels + MSM direct part procedure for top grid level +------------------------------------------------------------------------- */ + +void MSM::direct_peratom_top(int n) +{ + //fprintf(screen,"Direct contribution on level %i\n\n",n); + + double ***qgridn = qgrid[n]; + + double ***v0gridn = v0grid[n]; + double ***v1gridn = v1grid[n]; + double ***v2gridn = v2grid[n]; + double ***v3gridn = v3grid[n]; + double ***v4gridn = v4grid[n]; + double ***v5gridn = v5grid[n]; + + // zero out virial + + if (vflag_atom) { + memset(&(v0gridn[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]),0,ngrid[n]*sizeof(double)); + memset(&(v1gridn[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]),0,ngrid[n]*sizeof(double)); + memset(&(v2gridn[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]),0,ngrid[n]*sizeof(double)); + memset(&(v3gridn[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]),0,ngrid[n]*sizeof(double)); + memset(&(v4gridn[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]),0,ngrid[n]*sizeof(double)); + memset(&(v5gridn[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]),0,ngrid[n]*sizeof(double)); + } + + int icx,icy,icz,ix,iy,iz,zk,zyk,k; + int jj,kk; + int imin,imax,jmin,jmax,kmin,kmax; + double qtmp; + + int nx_top = betax[n] - alpha[n]; + int ny_top = betay[n] - alpha[n]; + int nz_top = betaz[n] - alpha[n]; + + int nx = 2*nx_top + 1; + int ny = 2*ny_top + 1; + int nz = 2*nz_top + 1; + + for (icz = nzlo_in[n]; icz <= nzhi_in[n]; icz++) { + kmin = alpha[n] - icz; + kmax = betaz[n] - icz; + for (icy = nylo_in[n]; icy <= nyhi_in[n]; icy++) { + jmin = alpha[n] - icy; + jmax = betay[n] - icy; + for (icx = nxlo_in[n]; icx <= nxhi_in[n]; icx++) { + imin = alpha[n] - icx; + imax = betax[n] - icx; + + for (iz = kmin; iz <= kmax; iz++) { + kk = icz+iz; + zk = (iz + nz_top)*nz; + for (iy = jmin; iy <= jmax; iy++) { + jj = icy+iy; + zyk = (zk + iy + ny_top)*ny; + for (ix = imin; ix <= imax; ix++) { + qtmp = qgridn[kk][jj][icx+ix]; + k = zyk + ix + nx_top; + qtmp = qgridn[kk][jj][icx+ix]; + + v0gridn[icz][icy][icx] += v0_direct_top[k] * qtmp; + v1gridn[icz][icy][icx] += v1_direct_top[k] * qtmp; + v2gridn[icz][icy][icx] += v2_direct_top[k] * qtmp; + v3gridn[icz][icy][icx] += v3_direct_top[k] * qtmp; + v4gridn[icz][icy][icx] += v4_direct_top[k] * qtmp; + v5gridn[icz][icy][icx] += v5_direct_top[k] * qtmp; + + } + } + } + + } + } + } +} + +/* ---------------------------------------------------------------------- + MSM restriction procedure for intermediate grid levels ------------------------------------------------------------------------- */ void MSM::restriction(int n) @@ -1730,14 +1625,6 @@ void MSM::restriction(int n) double ***qgrid1 = qgrid[n]; double ***qgrid2 = qgrid[n+1]; - // bitmask for PBCs (only works for power of 2 numbers) - - int PBCx,PBCy,PBCz; - - PBCx = nx_msm[n]-1; - PBCy = ny_msm[n]-1; - PBCz = nz_msm[n]-1; - //restrict grid (going from grid n to grid n+1, i.e. to a coarser grid) int k = 0; @@ -1752,49 +1639,45 @@ void MSM::restriction(int n) } int ip,jp,kp,ic,jc,kc,i,j; - int jj,kk; + int ii,jj,kk; double phiz,phizy; // zero out charge on coarser grid memset(&(qgrid2[nzlo_out[n+1]][nylo_out[n+1]][nxlo_out[n+1]]),0,ngrid[n+1]*sizeof(double)); - for (kp = nzlo_in_d[n+1]; kp <= nzhi_in_d[n+1]; kp++) - for (jp = nylo_in_d[n+1]; jp <= nyhi_in_d[n+1]; jp++) - for (ip = nxlo_in_d[n+1]; ip <= nxhi_in_d[n+1]; ip++) { + for (kp = nzlo_in[n+1]; kp <= nzhi_in[n+1]; kp++) + for (jp = nylo_in[n+1]; jp <= nyhi_in[n+1]; jp++) + for (ip = nxlo_in[n+1]; ip <= nxhi_in[n+1]; ip++) { ic = ip * static_cast (delxinv[n]/delxinv[n+1]); jc = jp * static_cast (delyinv[n]/delyinv[n+1]); kc = kp * static_cast (delzinv[n]/delzinv[n+1]); - if (n <= cutlevel && nprocs > 1) { - - for (k=0; k<=p+1; k++) { - kk = kc+index[k]; - phiz = phi1d[2][k]; - for (j=0; j<=p+1; j++) { - jj = jc+index[j]; - phizy = phi1d[1][j]*phiz; - for (i=0; i<=p+1; i++) { - qgrid2[kp][jp][ip] += qgrid1[kk][jj][ic+index[i]] * - phi1d[0][i]*phizy; + for (k=0; k<=p+1; k++) { + kk = kc+index[k]; + if (!domain->zperiodic) { + if (kk < alpha[n]) continue; + if (kk > betaz[n]) break; + } + phiz = phi1d[2][k]; + for (j=0; j<=p+1; j++) { + jj = jc+index[j]; + if (!domain->yperiodic) { + if (jj < alpha[n]) continue; + if (jj > betay[n]) break; + } + phizy = phi1d[1][j]*phiz; + for (i=0; i<=p+1; i++) { + ii = ic+index[i]; + if (!domain->xperiodic) { + if (ii < alpha[n]) continue; + if (ii > betax[n]) break; } + qgrid2[kp][jp][ip] += qgrid1[kk][jj][ii] * + phi1d[0][i]*phizy; } } - } else { - for (k=0; k<=p+1; k++) { - kk = (kc+index[k])&PBCz; - phiz = phi1d[2][k]; - for (j=0; j<=p+1; j++) { - jj = (jc+index[j])&PBCy; - phizy = phi1d[1][j]*phiz; - for (i=0; i<=p+1; i++) { - qgrid2[kp][jp][ip] += qgrid1[kk][jj][(ic+index[i])&PBCx] * - phi1d[0][i]*phizy; - } - } - } - } } @@ -1813,13 +1696,6 @@ void MSM::prolongation(int n) double ***egrid1 = egrid[n]; double ***egrid2 = egrid[n+1]; - double ***fxgrid1 = fxgrid[n]; - double ***fxgrid2 = fxgrid[n+1]; - double ***fygrid1 = fygrid[n]; - double ***fygrid2 = fygrid[n+1]; - double ***fzgrid1 = fzgrid[n]; - double ***fzgrid2 = fzgrid[n+1]; - double ***v0grid1 = v0grid[n]; double ***v0grid2 = v0grid[n+1]; double ***v1grid1 = v1grid[n]; @@ -1833,14 +1709,6 @@ void MSM::prolongation(int n) double ***v5grid1 = v5grid[n]; double ***v5grid2 = v5grid[n+1]; - // bitmask for PBCs (only works for power of 2 numbers) - - int PBCx,PBCy,PBCz; - - PBCx = nx_msm[n]-1; - PBCy = ny_msm[n]-1; - PBCz = nz_msm[n]-1; - //prolongate grid (going from grid n to grid n-1, i.e. to a finer grid) int k = 0; @@ -1855,86 +1723,54 @@ void MSM::prolongation(int n) } int ip,jp,kp,ic,jc,kc,i,j; - int jj,kk,ii; + int ii,jj,kk; double phiz,phizy,phi3d; - for (kp = nzlo_in_d[n+1]; kp <= nzhi_in_d[n+1]; kp++) - for (jp = nylo_in_d[n+1]; jp <= nyhi_in_d[n+1]; jp++) - for (ip = nxlo_in_d[n+1]; ip <= nxhi_in_d[n+1]; ip++) { + for (kp = nzlo_in[n+1]; kp <= nzhi_in[n+1]; kp++) + for (jp = nylo_in[n+1]; jp <= nyhi_in[n+1]; jp++) + for (ip = nxlo_in[n+1]; ip <= nxhi_in[n+1]; ip++) { ic = ip * static_cast (delxinv[n]/delxinv[n+1]); jc = jp * static_cast (delyinv[n]/delyinv[n+1]); kc = kp * static_cast (delzinv[n]/delzinv[n+1]); - if (n <= cutlevel && nprocs > 1) { - - for (k=0; k<=p+1; k++) { // Could make this faster creating separate functions - kk = kc+index[k]; - phiz = phi1d[2][k]; - for (j=0; j<=p+1; j++) { - jj = jc+index[j]; - phizy = phi1d[1][j]*phiz; - for (i=0; i<=p+1; i++) { - ii = ic+index[i]; - phi3d = phi1d[0][i]*phizy; - - if (differentiation_flag || eflag_atom) { - egrid1[kk][jj][ii] += egrid2[kp][jp][ip] * phi3d; - } - - if (!differentiation_flag) { - fxgrid1[kk][jj][ii] += fxgrid2[kp][jp][ip] * phi3d; - fygrid1[kk][jj][ii] += fygrid2[kp][jp][ip] * phi3d; - fzgrid1[kk][jj][ii] += fzgrid2[kp][jp][ip] * phi3d; - } - - if (vflag_atom) { - v0grid1[kk][jj][ii] += v0grid2[kp][jp][ip] * phi3d; - v1grid1[kk][jj][ii] += v1grid2[kp][jp][ip] * phi3d; - v2grid1[kk][jj][ii] += v2grid2[kp][jp][ip] * phi3d; - v3grid1[kk][jj][ii] += v3grid2[kp][jp][ip] * phi3d; - v4grid1[kk][jj][ii] += v4grid2[kp][jp][ip] * phi3d; - v5grid1[kk][jj][ii] += v5grid2[kp][jp][ip] * phi3d; - } + for (k=0; k<=p+1; k++) { + kk = kc+index[k]; + if (!domain->zperiodic) { + if (kk < alpha[n]) continue; + if (kk > betaz[n]) break; + } + phiz = phi1d[2][k]; + for (j=0; j<=p+1; j++) { + jj = jc+index[j]; + if (!domain->yperiodic) { + if (jj < alpha[n]) continue; + if (jj > betay[n]) break; + } + phizy = phi1d[1][j]*phiz; + for (i=0; i<=p+1; i++) { + ii = ic+index[i]; + if (!domain->xperiodic) { + if (ii < alpha[n]) continue; + if (ii > betax[n]) break; } + phi3d = phi1d[0][i]*phizy; + + egrid1[kk][jj][ii] += egrid2[kp][jp][ip] * phi3d; + + if (vflag_atom) { + v0grid1[kk][jj][ii] += v0grid2[kp][jp][ip] * phi3d; + v1grid1[kk][jj][ii] += v1grid2[kp][jp][ip] * phi3d; + v2grid1[kk][jj][ii] += v2grid2[kp][jp][ip] * phi3d; + v3grid1[kk][jj][ii] += v3grid2[kp][jp][ip] * phi3d; + v4grid1[kk][jj][ii] += v4grid2[kp][jp][ip] * phi3d; + v5grid1[kk][jj][ii] += v5grid2[kp][jp][ip] * phi3d; + } + } } - - } else { - - for (k=0; k<=p+1; k++) { // Could make this faster by creating separate functions - kk = (kc+index[k])&PBCz; - phiz = phi1d[2][k]; - for (j=0; j<=p+1; j++) { - jj = (jc+index[j])&PBCy; - phizy = phi1d[1][j]*phiz; - for (i=0; i<=p+1; i++) { - ii = (ic+index[i])&PBCx; - phi3d = phi1d[0][i]*phizy; - - if (differentiation_flag || eflag_atom) { - egrid1[kk][jj][ii] += egrid2[kp][jp][ip] * phi3d; - } - - if (!differentiation_flag) { - fxgrid1[kk][jj][ii] += fxgrid2[kp][jp][ip] * phi3d; - fygrid1[kk][jj][ii] += fygrid2[kp][jp][ip] * phi3d; - fzgrid1[kk][jj][ii] += fzgrid2[kp][jp][ip] * phi3d; - } - - if (vflag_atom) { - v0grid1[kk][jj][ii] += v0grid2[kp][jp][ip] * phi3d; - v1grid1[kk][jj][ii] += v1grid2[kp][jp][ip] * phi3d; - v2grid1[kk][jj][ii] += v2grid2[kp][jp][ip] * phi3d; - v3grid1[kk][jj][ii] += v3grid2[kp][jp][ip] * phi3d; - v4grid1[kk][jj][ii] += v4grid2[kp][jp][ip] * phi3d; - v5grid1[kk][jj][ii] += v5grid2[kp][jp][ip] * phi3d; - } - } - } - } - } + } } @@ -1950,10 +1786,6 @@ void MSM::pack_forward(int flag, double *buf, int nlist, int *list) double ***qgridn = qgrid[n]; double ***egridn = egrid[n]; - double ***fxgridn = fxgrid[n]; - double ***fygridn = fygrid[n]; - double ***fzgridn = fzgrid[n]; - double ***v0gridn = v0grid[n]; double ***v1gridn = v1grid[n]; double ***v2gridn = v2grid[n]; @@ -1968,38 +1800,10 @@ void MSM::pack_forward(int flag, double *buf, int nlist, int *list) for (int i = 0; i < nlist; i++) { buf[k++] = qsrc[list[i]]; } - } else if (flag == FORWARD_IK) { - double *xsrc = &fxgridn[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]; - double *ysrc = &fygridn[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]; - double *zsrc = &fzgridn[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]; - for (int i = 0; i < nlist; i++) { - buf[k++] = xsrc[list[i]]; - buf[k++] = ysrc[list[i]]; - buf[k++] = zsrc[list[i]]; - } } else if (flag == FORWARD_AD) { double *src = &egridn[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]; for (int i = 0; i < nlist; i++) buf[i] = src[list[i]]; - } else if (flag == FORWARD_IK_PERATOM) { - double *esrc = &egridn[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]; - double *v0src = &v0gridn[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]; - double *v1src = &v1gridn[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]; - double *v2src = &v2gridn[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]; - double *v3src = &v3gridn[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]; - double *v4src = &v4gridn[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]; - double *v5src = &v5gridn[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]; - for (int i = 0; i < nlist; i++) { - if (eflag_atom) buf[k++] = esrc[list[i]]; - if (vflag_atom) { - buf[k++] = v0src[list[i]]; - buf[k++] = v1src[list[i]]; - buf[k++] = v2src[list[i]]; - buf[k++] = v3src[list[i]]; - buf[k++] = v4src[list[i]]; - buf[k++] = v5src[list[i]]; - } - } } else if (flag == FORWARD_AD_PERATOM) { double *v0src = &v0gridn[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]; double *v1src = &v1gridn[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]; @@ -2029,10 +1833,6 @@ void MSM::unpack_forward(int flag, double *buf, int nlist, int *list) double ***qgridn = qgrid[n]; double ***egridn = egrid[n]; - double ***fxgridn = fxgrid[n]; - double ***fygridn = fygrid[n]; - double ***fzgridn = fzgrid[n]; - double ***v0gridn = v0grid[n]; double ***v1gridn = v1grid[n]; double ***v2gridn = v2grid[n]; @@ -2047,38 +1847,10 @@ void MSM::unpack_forward(int flag, double *buf, int nlist, int *list) for (int i = 0; i < nlist; i++) { dest[list[i]] = buf[k++]; } - } else if (flag == FORWARD_IK) { - double *xdest = &fxgridn[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]; - double *ydest = &fygridn[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]; - double *zdest = &fzgridn[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]; - for (int i = 0; i < nlist; i++) { - xdest[list[i]] = buf[k++]; - ydest[list[i]] = buf[k++]; - zdest[list[i]] = buf[k++]; - } } else if (flag == FORWARD_AD) { double *dest = &egridn[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]; for (int i = 0; i < nlist; i++) dest[list[i]] = buf[k++]; - } else if (flag == FORWARD_IK_PERATOM) { - double *esrc = &egridn[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]; - double *v0src = &v0gridn[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]; - double *v1src = &v1gridn[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]; - double *v2src = &v2gridn[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]; - double *v3src = &v3gridn[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]; - double *v4src = &v4gridn[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]; - double *v5src = &v5gridn[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]; - for (int i = 0; i < nlist; i++) { - if (eflag_atom) esrc[list[i]] = buf[k++]; - if (vflag_atom) { - v0src[list[i]] = buf[k++]; - v1src[list[i]] = buf[k++]; - v2src[list[i]] = buf[k++]; - v3src[list[i]] = buf[k++]; - v4src[list[i]] = buf[k++]; - v5src[list[i]] = buf[k++]; - } - } } else if (flag == FORWARD_AD_PERATOM) { double *v0src = &v0gridn[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]; double *v1src = &v1gridn[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]; @@ -2108,10 +1880,6 @@ void MSM::pack_reverse(int flag, double *buf, int nlist, int *list) double ***qgridn = qgrid[n]; double ***egridn = egrid[n]; - double ***fxgridn = fxgrid[n]; - double ***fygridn = fygrid[n]; - double ***fzgridn = fzgrid[n]; - double ***v0gridn = v0grid[n]; double ***v1gridn = v1grid[n]; double ***v2gridn = v2grid[n]; @@ -2126,38 +1894,10 @@ void MSM::pack_reverse(int flag, double *buf, int nlist, int *list) for (int i = 0; i < nlist; i++) { buf[k++] = qsrc[list[i]]; } - } else if (flag == REVERSE_IK) { - double *xsrc = &fxgridn[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]; - double *ysrc = &fygridn[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]; - double *zsrc = &fzgridn[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]; - for (int i = 0; i < nlist; i++) { - buf[k++] = xsrc[list[i]]; - buf[k++] = ysrc[list[i]]; - buf[k++] = zsrc[list[i]]; - } } else if (flag == REVERSE_AD) { double *src = &egridn[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]; for (int i = 0; i < nlist; i++) buf[i] = src[list[i]]; - } else if (flag == REVERSE_IK_PERATOM) { - double *esrc = &egridn[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]; - double *v0src = &v0gridn[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]; - double *v1src = &v1gridn[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]; - double *v2src = &v2gridn[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]; - double *v3src = &v3gridn[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]; - double *v4src = &v4gridn[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]; - double *v5src = &v5gridn[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]; - for (int i = 0; i < nlist; i++) { - if (eflag_atom) buf[k++] = esrc[list[i]]; - if (vflag_atom) { - buf[k++] = v0src[list[i]]; - buf[k++] = v1src[list[i]]; - buf[k++] = v2src[list[i]]; - buf[k++] = v3src[list[i]]; - buf[k++] = v4src[list[i]]; - buf[k++] = v5src[list[i]]; - } - } } else if (flag == REVERSE_AD_PERATOM) { double *v0src = &v0gridn[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]; double *v1src = &v1gridn[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]; @@ -2187,10 +1927,6 @@ void MSM::unpack_reverse(int flag, double *buf, int nlist, int *list) double ***qgridn = qgrid[n]; double ***egridn = egrid[n]; - double ***fxgridn = fxgrid[n]; - double ***fygridn = fygrid[n]; - double ***fzgridn = fzgrid[n]; - double ***v0gridn = v0grid[n]; double ***v1gridn = v1grid[n]; double ***v2gridn = v2grid[n]; @@ -2205,38 +1941,10 @@ void MSM::unpack_reverse(int flag, double *buf, int nlist, int *list) for (int i = 0; i < nlist; i++) { dest[list[i]] += buf[k++]; } - } else if (flag == REVERSE_IK) { - double *xdest = &fxgridn[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]; - double *ydest = &fygridn[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]; - double *zdest = &fzgridn[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]; - for (int i = 0; i < nlist; i++) { - xdest[list[i]] += buf[k++]; - ydest[list[i]] += buf[k++]; - zdest[list[i]] += buf[k++]; - } } else if (flag == REVERSE_AD) { double *dest = &egridn[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]; for (int i = 0; i < nlist; i++) dest[list[i]] += buf[k++]; - } else if (flag == REVERSE_IK_PERATOM) { - double *esrc = &egridn[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]; - double *v0src = &v0gridn[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]; - double *v1src = &v1gridn[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]; - double *v2src = &v2gridn[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]; - double *v3src = &v3gridn[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]; - double *v4src = &v4gridn[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]; - double *v5src = &v5gridn[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]; - for (int i = 0; i < nlist; i++) { - if (eflag_atom) esrc[list[i]] += buf[k++]; - if (vflag_atom) { - v0src[list[i]] += buf[k++]; - v1src[list[i]] += buf[k++]; - v2src[list[i]] += buf[k++]; - v3src[list[i]] += buf[k++]; - v4src[list[i]] += buf[k++]; - v5src[list[i]] += buf[k++]; - } - } } else if (flag == REVERSE_AD_PERATOM) { double *v0src = &v0gridn[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]; double *v1src = &v1gridn[nzlo_out[n]][nylo_out[n]][nxlo_out[n]]; @@ -2259,11 +1967,12 @@ void MSM::unpack_reverse(int flag, double *buf, int nlist, int *list) interpolate from grid to get force on my particles ------------------------------------------------------------------------- */ -void MSM::fieldforce_ad() +void MSM::fieldforce() { //fprintf(screen,"MSM interpolation\n\n"); double ***egridn = egrid[0]; + int i,l,m,n,nx,ny,nz,mx,my,mz; double dx,dy,dz; double phi_x,phi_y,phi_z; @@ -2326,68 +2035,6 @@ void MSM::fieldforce_ad() } } -/* ---------------------------------------------------------------------- - interpolate from grid to get my particles -------------------------------------------------------------------------- */ - -void MSM::fieldforce() -{ - int i,l,m,n,nx,ny,nz,mx,my,mz; - double dx,dy,dz,x0,y0,z0; - double ekx,eky,ekz; - - double ***fxgridn = fxgrid[0]; - double ***fygridn = fygrid[0]; - double ***fzgridn = fzgrid[0]; - - // loop over my charges, interpolate electric field from nearby grid points - // (nx,ny,nz) = global coords of grid pt to "lower left" of charge - // (dx,dy,dz) = distance to "lower left" grid pt - // (mx,my,mz) = global coords of moving stencil pt - // ek = 3 components of E-field on particle - - double *q = atom->q; - double **x = atom->x; - double **f = atom->f; - - int nlocal = atom->nlocal; - - for (i = 0; i < nlocal; i++) { - nx = part2grid[i][0]; - ny = part2grid[i][1]; - nz = part2grid[i][2]; - dx = nx - (x[i][0]-boxlo[0])*delxinv[0]; - dy = ny - (x[i][1]-boxlo[1])*delyinv[0]; - dz = nz - (x[i][2]-boxlo[2])*delzinv[0]; - - compute_phis_and_dphis(dx,dy,dz); - - ekx = eky = ekz = 0.0; - for (n = nlower; n <= nupper; n++) { - mz = n+nz; - z0 = phi1d[2][n]; - for (m = nlower; m <= nupper; m++) { - my = m+ny; - y0 = z0*phi1d[1][m]; - for (l = nlower; l <= nupper; l++) { - mx = l+nx; - x0 = y0*phi1d[0][l]; - ekx -= x0*fxgridn[mz][my][mx]; - eky -= x0*fygridn[mz][my][mx]; - ekz -= x0*fzgridn[mz][my][mx]; - } - } - } - - // convert E-field to force - - const double qfactor = force->qqrd2e * scale * q[i]; - f[i][0] += qfactor*ekx; - f[i][1] += qfactor*eky; - f[i][2] += qfactor*ekz; - } -} - /* ---------------------------------------------------------------------- interpolate from grid to get per-atom energy/virial ------------------------------------------------------------------------- */ @@ -2694,34 +2341,39 @@ double MSM::compute_dphi(const double &xi) } /* ---------------------------------------------------------------------- - Compute direct interaction for each grid level + Compute direct interaction for intermediate grid levels ------------------------------------------------------------------------- */ void MSM::get_g_direct() { if (g_direct) memory->destroy(g_direct); - memory->create(g_direct,levels-1,nmax_direct,"msm:g_direct"); + memory->create(g_direct,levels,nmax_direct,"msm:g_direct"); double a = cutoff; - int n,k,ix,iy,iz; + int n,zk,zyk,k,ix,iy,iz; double xdiff,ydiff,zdiff; double rsq,rho,two_n; two_n = 1.0; - for (n=0; ndestroy(dgx_direct); - memory->create(dgx_direct,levels-1,nmax_direct,"msm:dgx_direct"); - if (dgy_direct) memory->destroy(dgy_direct); - memory->create(dgy_direct,levels-1,nmax_direct,"msm:dgy_direct"); - if (dgz_direct) memory->destroy(dgz_direct); - memory->create(dgz_direct,levels-1,nmax_direct,"msm:dgz_direct"); + if (v0_direct) memory->destroy(v0_direct); + memory->create(v0_direct,levels,nmax_direct,"msm:v0_direct"); + if (v1_direct) memory->destroy(v1_direct); + memory->create(v1_direct,levels,nmax_direct,"msm:v1_direct"); + if (v2_direct) memory->destroy(v2_direct); + memory->create(v2_direct,levels,nmax_direct,"msm:v2_direct"); + if (v3_direct) memory->destroy(v3_direct); + memory->create(v3_direct,levels,nmax_direct,"msm:v3_direct"); + if (v4_direct) memory->destroy(v4_direct); + memory->create(v4_direct,levels,nmax_direct,"msm:v4_direct"); + if (v5_direct) memory->destroy(v5_direct); + memory->create(v5_direct,levels,nmax_direct,"msm:v5_direct"); double a = cutoff; double a_sq = cutoff*cutoff; - int n,k,ix,iy,iz; + int n,zk,zyk,k,ix,iy,iz; double xdiff,ydiff,zdiff; double rsq,r,rho,two_n,two_nsq,dg; two_n = 1.0; - for (n=0; ndestroy(v0_direct); - memory->create(v0_direct,levels-1,nmax_direct,"msm:v0_direct"); - if (v1_direct) memory->destroy(v1_direct); - memory->create(v1_direct,levels-1,nmax_direct,"msm:v1_direct"); - if (v2_direct) memory->destroy(v2_direct); - memory->create(v2_direct,levels-1,nmax_direct,"msm:v2_direct"); - if (v3_direct) memory->destroy(v3_direct); - memory->create(v3_direct,levels-1,nmax_direct,"msm:v3_direct"); - if (v4_direct) memory->destroy(v4_direct); - memory->create(v4_direct,levels-1,nmax_direct,"msm:v4_direct"); - if (v5_direct) memory->destroy(v5_direct); - memory->create(v5_direct,levels-1,nmax_direct,"msm:v5_direct"); + int nx_top = betax[n] - alpha[n]; + int ny_top = betay[n] - alpha[n]; + int nz_top = betaz[n] - alpha[n]; + + int nx = 2*nx_top + 1; + int ny = 2*ny_top + 1; + int nz = 2*nz_top + 1; + + int nmax_top = 8*(nx+1)*(ny*1)*(nz+1); + + if (g_direct_top) memory->destroy(g_direct_top); + memory->create(g_direct_top,nmax_top,"msm:g_direct_top"); - int n,k,ix,iy,iz; + double a = cutoff; + + int zk,zyk,k,ix,iy,iz; double xdiff,ydiff,zdiff; + double rsq,rho,two_n; - for (n=0; ndestroy(v0_direct_top); + memory->create(v0_direct_top,nmax_top,"msm:v0_direct_top"); + if (v1_direct_top) memory->destroy(v1_direct_top); + memory->create(v1_direct_top,nmax_top,"msm:v1_direct_top"); + if (v2_direct_top) memory->destroy(v2_direct_top); + memory->create(v2_direct_top,nmax_top,"msm:v2_direct_top"); + if (v3_direct_top) memory->destroy(v3_direct_top); + memory->create(v3_direct_top,nmax_top,"msm:v3_direct_top"); + if (v4_direct_top) memory->destroy(v4_direct_top); + memory->create(v4_direct_top,nmax_top,"msm:v4_direct_top"); + if (v5_direct_top) memory->destroy(v5_direct_top); + memory->create(v5_direct_top,nmax_top,"msm:v5_direct_top"); + + double a = cutoff; + double a_sq = cutoff*cutoff; + + int zk,zyk,k,ix,iy,iz; + double xdiff,ydiff,zdiff; + double rsq,r,rho,two_n,two_nsq,dg; + + two_n = pow(2.0,n); + two_nsq = two_n * two_n; + + for (iz = -nz_top; iz <= nz_top; iz++) { + zdiff = iz/delzinv[n]; + zk = (iz + nz_top)*nz; + for (iy = -ny_top; iy <= ny_top; iy++) { + ydiff = iy/delyinv[n]; + zyk = (zk + iy + ny_top)*ny; + for (ix = -nx_top; ix <= nx_top; ix++) { + xdiff = ix/delxinv[n]; + rsq = xdiff*xdiff + ydiff*ydiff + zdiff*zdiff; + k = zyk + ix + nx_top; + r = sqrt(rsq); + if (r == 0) { + v0_direct_top[k] = 0.0; + v1_direct_top[k] = 0.0; + v2_direct_top[k] = 0.0; + v3_direct_top[k] = 0.0; + v4_direct_top[k] = 0.0; + v5_direct_top[k] = 0.0; + } else { + rho = r/(two_n*a); + dg = -(dgamma(rho)/(two_nsq*a_sq))/r; + v0_direct_top[k] = dg * xdiff * xdiff; + v1_direct_top[k] = dg * ydiff * ydiff; + v2_direct_top[k] = dg * zdiff * zdiff; + v3_direct_top[k] = dg * xdiff * ydiff; + v4_direct_top[k] = dg * xdiff * zdiff; + v5_direct_top[k] = dg * ydiff * zdiff; + } + } + } + } +} \ No newline at end of file diff --git a/src/KSPACE/msm.h b/src/KSPACE/msm.h index 377f427804..350798aed1 100644 --- a/src/KSPACE/msm.h +++ b/src/KSPACE/msm.h @@ -49,33 +49,40 @@ class MSM : public KSpace { int *nx_msm,*ny_msm,*nz_msm; int *nxlo_in,*nylo_in,*nzlo_in; int *nxhi_in,*nyhi_in,*nzhi_in; - int *nxlo_in_d,*nylo_in_d,*nzlo_in_d; - int *nxhi_in_d,*nyhi_in_d,*nzhi_in_d; int *nxlo_out,*nylo_out,*nzlo_out; int *nxhi_out,*nyhi_out,*nzhi_out; int *ngrid; + int *alpha,*betax,*betay,*betaz; int nxlo_direct,nxhi_direct,nylo_direct; int nyhi_direct,nzlo_direct,nzhi_direct; int nmax_direct; int nlower,nupper; int peratom_allocate_flag; - int levels,cutlevel; + int levels; + + MPI_Comm *world_levels; double ****qgrid; double ****egrid; - double ****fxgrid,****fygrid,****fzgrid; double ****v0grid,****v1grid,****v2grid; double ****v3grid,****v4grid,****v5grid; double **g_direct; - double **dgx_direct,**dgy_direct,**dgz_direct; double **v0_direct,**v1_direct,**v2_direct; double **v3_direct,**v4_direct,**v5_direct; + double *g_direct_top; + double *v0_direct_top,*v1_direct_top,*v2_direct_top; + double *v3_direct_top,*v4_direct_top,*v5_direct_top; double **phi1d,**dphi1d; + int procgrid[3]; // procs assigned in each dim of 3d grid + int myloc[3]; // which proc I am in each dim + int ***procneigh_levels; // my 6 neighboring procs, 0/1 = left/right class CommGrid **cg; - class CommGrid **cg_IK; class CommGrid **cg_peratom; + class CommGrid *cg_all; + class CommGrid *cg_peratom_all; + int current_level; int **part2grid; // storage for particle -> grid mapping @@ -84,6 +91,7 @@ class MSM : public KSpace { double *boxlo; void set_grid_global(); + void set_proc_grid(int); void set_grid_local(); void setup_grid(); double estimate_cutoff(double,double); @@ -99,21 +107,21 @@ class MSM : public KSpace { int factorable(int,int&,int&); void particle_map(); void make_rho(); - void grid_swap(int,double*** &); - void direct_ad(int); void direct(int); + void direct_top(int); void direct_peratom(int); + void direct_peratom_top(int); void restriction(int); void prolongation(int); - void fieldforce_ad(); void fieldforce(); void fieldforce_peratom(); void compute_phis_and_dphis(const double &, const double &, const double &); double compute_phi(const double &); double compute_dphi(const double &); void get_g_direct(); - void get_dg_direct(); void get_virial_direct(); + void get_g_direct_top(int); + void get_virial_direct_top(int); // grid communication void pack_forward(int, double *, int, int *); @@ -147,10 +155,6 @@ E: Kspace style requires atom attribute q The atom style defined does not have these attributes. -E: Cannot (yet) use nonperiodic boundaries with MSM - -This feature is not yet supported. - E: Cannot use slab correction with MSM Slab correction can only be used with Ewald and PPPM, not MSM. @@ -185,6 +189,11 @@ The global MSM grid is larger than OFFSET in one or more dimensions. OFFSET is currently set to 16384. You likely need to decrease the requested accuracy. +W: MSM mesh too small, increasing to 2 points in each direction + +The global MSM grid is too small, so the number of grid points has been +increased + E: KSpace accuracy must be > 0 The kspace accuracy designated in the input must be greater than zero. diff --git a/src/domain.cpp b/src/domain.cpp index c95553c6a1..1223a83411 100644 --- a/src/domain.cpp +++ b/src/domain.cpp @@ -24,6 +24,7 @@ #include "style_region.h" #include "atom.h" #include "force.h" +#include "kspace.h" #include "update.h" #include "modify.h" #include "fix.h" @@ -399,6 +400,10 @@ void Domain::reset_box() set_global_box(); set_local_box(); + // if shrink-wrapped & kspace is defined (i.e. using MSM) call setup() + + if (nonperiodic == 2 && force->kspace) force->kspace->setup(); + // if shrink-wrapped & triclinic, re-convert to lamda coords for new box // re-invoke pbc() b/c x2lamda result can be outside [0,1] due to roundoff From 57d9d9c7c4e2744ad3a5c5caf379c17b3a38618e Mon Sep 17 00:00:00 2001 From: sjplimp Date: Tue, 8 Jan 2013 17:48:31 +0000 Subject: [PATCH 56/61] git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@9248 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- src/thermo.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/thermo.cpp b/src/thermo.cpp index d682552a9c..b51938635c 100644 --- a/src/thermo.cpp +++ b/src/thermo.cpp @@ -54,6 +54,7 @@ using namespace MathConst; // cella, cellb, cellc, cellalpha, cellbeta, cellgamma // customize a new thermo style by adding a DEFINE to this list +// also insure allocation of line string is correct in constructor #define ONE "step temp epair emol etotal press" #define MULTI "etotal ke temp pe ebond eangle edihed eimp evdwl ecoul elong press" From 1ec45d89fffcefbe1a1c5268c22485591cf77b71 Mon Sep 17 00:00:00 2001 From: sjplimp Date: Tue, 8 Jan 2013 18:07:50 +0000 Subject: [PATCH 57/61] git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@9249 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- src/fix_tmd.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/fix_tmd.cpp b/src/fix_tmd.cpp index 9710af6df1..c504ae0514 100644 --- a/src/fix_tmd.cpp +++ b/src/fix_tmd.cpp @@ -40,8 +40,7 @@ using namespace FixConst; /* ---------------------------------------------------------------------- */ -FixTMD::FixTMD(LAMMPS *lmp, int narg, char **arg) : - Fix(lmp, narg, arg) +FixTMD::FixTMD(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg) { if (narg < 6) error->all(FLERR,"Illegal fix tmd command"); From 405ed173384520f3c3d99a790438cad113ec3603 Mon Sep 17 00:00:00 2001 From: sjplimp Date: Tue, 8 Jan 2013 20:16:39 +0000 Subject: [PATCH 58/61] git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@9250 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- src/fix_heat.cpp | 115 ++++++++++++++++++++++++++++++++++++----------- src/fix_heat.h | 3 ++ 2 files changed, 93 insertions(+), 25 deletions(-) diff --git a/src/fix_heat.cpp b/src/fix_heat.cpp index 46934f96e0..af173115e6 100644 --- a/src/fix_heat.cpp +++ b/src/fix_heat.cpp @@ -28,12 +28,13 @@ #include "modify.h" #include "input.h" #include "variable.h" +#include "memory.h" #include "error.h" using namespace LAMMPS_NS; using namespace FixConst; -enum{CONSTANT,EQUAL}; +enum{CONSTANT,EQUAL,ATOM}; /* ---------------------------------------------------------------------- */ @@ -54,7 +55,6 @@ FixHeat::FixHeat(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg) int n = strlen(&arg[4][2]) + 1; hstr = new char[n]; strcpy(hstr,&arg[4][2]); - hstyle = EQUAL; } else { heat_input = atof(arg[4]); hstyle = CONSTANT; @@ -80,6 +80,9 @@ FixHeat::FixHeat(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg) } scale = 1.0; + + maxatom = 0; + vheat = NULL; } /* ---------------------------------------------------------------------- */ @@ -88,6 +91,7 @@ FixHeat::~FixHeat() { delete [] hstr; delete [] idregion; + memory->destroy(vheat); } /* ---------------------------------------------------------------------- */ @@ -117,8 +121,9 @@ void FixHeat::init() hvar = input->variable->find(hstr); if (hvar < 0) error->all(FLERR,"Variable name for fix heat does not exist"); - if (!input->variable->equalstyle(hvar)) - error->all(FLERR,"Variable for fix heat is invalid style"); + if (input->variable->equalstyle(hvar)) hstyle = EQUAL; + else if (input->variable->equalstyle(hvar)) hstyle = ATOM; + else error->all(FLERR,"Variable for fix heat is invalid style"); } // cannot have 0 atoms in group @@ -132,17 +137,51 @@ void FixHeat::init() void FixHeat::end_of_step() { + int i; double heat,ke; double vsub[3],vcm[3]; - Region *region = NULL; - if (iregion >= 0) region = domain->regions[iregion]; + Region *region; - if (hstyle == EQUAL) { + double **x = atom->x; + double **v = atom->v; + int *mask = atom->mask; + int nlocal = atom->nlocal; + + // reallocate vheat array if necessary + + if (hstyle == ATOM && atom->nlocal > maxatom) { + maxatom = atom->nmax; + memory->destroy(vheat); + memory->create(vheat,maxatom,"heat:vheat"); + } + + if (hstyle != CONSTANT) { modify->clearstep_compute(); - heat_input = input->variable->compute_equal(hvar); + + if (hstyle == EQUAL) heat_input = input->variable->compute_equal(hvar); + else { + input->variable->compute_atom(hvar,igroup,vheat,1,0); + + double mine = 0.0; + if (iregion < 0) { + for (i = 0; i < nlocal; i++) + if (mask[i] & groupbit) mine += vheat[i]; + } else { + region = domain->regions[iregion]; + for (i = 0; i < nlocal; i++) + if (mask[i] & groupbit && region->match(x[i][0],x[i][1],x[i][2])) + mine += vheat[i]; + } + MPI_Allreduce(&mine,&heat_input,1,MPI_DOUBLE,MPI_SUM,world); + } + modify->addstep_compute(update->ntimestep + nevery); } + // vcm = center-of-mass velocity of scaled atoms + // scale = velocity scale factor to accomplish eflux change in energy + // vsub = ??? // NOTE: document this? + if (iregion < 0) { heat = heat_input*nevery*update->dt*force->ftm2v; ke = group->ke(igroup)*force->ftm2v; @@ -160,29 +199,53 @@ void FixHeat::end_of_step() if (escale < 0.0) error->all(FLERR,"Fix heat kinetic energy went negative"); scale = sqrt(escale); + // NOTE: if hstyle = ATOM, do something different to compute vsub ?? + vsub[0] = (scale-1.0) * vcm[0]; vsub[1] = (scale-1.0) * vcm[1]; vsub[2] = (scale-1.0) * vcm[2]; - double **x = atom->x; - double **v = atom->v; - int *mask = atom->mask; - int nlocal = atom->nlocal; + // add heat via scale factor on velocities for CONSTANT and EQUAL cases - if (iregion < 0) { - for (int i = 0; i < nlocal; i++) - if (mask[i] & groupbit) { - v[i][0] = scale*v[i][0] - vsub[0]; - v[i][1] = scale*v[i][1] - vsub[1]; - v[i][2] = scale*v[i][2] - vsub[2]; - } + if (hstyle != ATOM) { + if (iregion < 0) { + for (i = 0; i < nlocal; i++) + if (mask[i] & groupbit) { + v[i][0] = scale*v[i][0] - vsub[0]; + v[i][1] = scale*v[i][1] - vsub[1]; + v[i][2] = scale*v[i][2] - vsub[2]; + } + } else { + region = domain->regions[iregion]; + for (int i = 0; i < nlocal; i++) + if (mask[i] & groupbit && region->match(x[i][0],x[i][1],x[i][2])) { + v[i][0] = scale*v[i][0] - vsub[0]; + v[i][1] = scale*v[i][1] - vsub[1]; + v[i][2] = scale*v[i][2] - vsub[2]; + } + } + + // add heat via per-atom scale factor on velocities for ATOM case + } else { - for (int i = 0; i < nlocal; i++) - if (mask[i] & groupbit && region->match(x[i][0],x[i][1],x[i][2])) { - v[i][0] = scale*v[i][0] - vsub[0]; - v[i][1] = scale*v[i][1] - vsub[1]; - v[i][2] = scale*v[i][2] - vsub[2]; - } + if (iregion < 0) { + for (i = 0; i < nlocal; i++) + if (mask[i] & groupbit) { + scale = 0.0; // NOTE: set to per-atom value + v[i][0] = scale*v[i][0] - vsub[0]; + v[i][1] = scale*v[i][1] - vsub[1]; + v[i][2] = scale*v[i][2] - vsub[2]; + } + } else { + region = domain->regions[iregion]; + for (int i = 0; i < nlocal; i++) + if (mask[i] & groupbit && region->match(x[i][0],x[i][1],x[i][2])) { + scale = 0.0; // NOTE: set to per-atom value + v[i][0] = scale*v[i][0] - vsub[0]; + v[i][1] = scale*v[i][1] - vsub[1]; + v[i][2] = scale*v[i][2] - vsub[2]; + } + } } } @@ -190,5 +253,7 @@ void FixHeat::end_of_step() double FixHeat::compute_scalar() { + // NOTE: what should this be for per-atom case? + return scale; } diff --git a/src/fix_heat.h b/src/fix_heat.h index 4562ac9a90..35884704f7 100644 --- a/src/fix_heat.h +++ b/src/fix_heat.h @@ -41,6 +41,9 @@ class FixHeat : public Fix { char *idregion; char *hstr; int hstyle,hvar; + + int maxatom; + double *vheat; }; } From 9d9587cb963b6c7720dc0a563e908cab4afbcc0c Mon Sep 17 00:00:00 2001 From: sjplimp Date: Tue, 8 Jan 2013 20:26:00 +0000 Subject: [PATCH 59/61] git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@9251 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- doc/fix_addforce.html | 4 ++-- doc/fix_addforce.txt | 4 ++-- doc/fix_heat.html | 56 ++++++++++++++++++++++++++++--------------- doc/fix_heat.txt | 56 ++++++++++++++++++++++++++++--------------- 4 files changed, 78 insertions(+), 42 deletions(-) diff --git a/doc/fix_addforce.html b/doc/fix_addforce.html index c97756d813..60ab3ef538 100644 --- a/doc/fix_addforce.html +++ b/doc/fix_addforce.html @@ -53,8 +53,8 @@ a channel. as an equal-style or atom-style variable, namely fx, fy, fz. If the value is a variable, it should be specified as v_name, where name is the variable name. In this case, the variable -will be evaluated each timestep, and its value used to determine the -force component. +will be evaluated each timestep, and its value(s) used to determine +the force component.

      Equal-style variables can specify formulas with various mathematical functions, and include thermo_style command diff --git a/doc/fix_addforce.txt b/doc/fix_addforce.txt index 3ce5a5d3e0..37fd62fd9e 100644 --- a/doc/fix_addforce.txt +++ b/doc/fix_addforce.txt @@ -42,8 +42,8 @@ Any of the 3 quantities defining the force components can be specified as an equal-style or atom-style "variable"_variable.html, namely {fx}, {fy}, {fz}. If the value is a variable, it should be specified as v_name, where name is the variable name. In this case, the variable -will be evaluated each timestep, and its value used to determine the -force component. +will be evaluated each timestep, and its value(s) used to determine +the force component. Equal-style variables can specify formulas with various mathematical functions, and include "thermo_style"_thermo_style.html command diff --git a/doc/fix_heat.html b/doc/fix_heat.html index 44295c0cce..aa963c6e8c 100644 --- a/doc/fix_heat.html +++ b/doc/fix_heat.html @@ -42,11 +42,11 @@ fix 4 qout heat 1 -1.0 region top

      Description:

      -

      Add non-translational kinetic energy (heat) to a group of atoms such -that their aggregate momentum is conserved. Two of these fixes can be -used to establish a temperature gradient across a simulation domain by -adding heat (energy) to one group of atoms (hot reservoir) and -subtracting heat from another (cold reservoir). E.g. a simulation +

      Add non-translational kinetic energy (heat) to a group of atoms in a +manner that conserves their aggregate momentum. Two of these fixes +can be used to establish a temperature gradient across a simulation +domain by adding heat (energy) to one group of atoms (hot reservoir) +and subtracting heat from another (cold reservoir). E.g. a simulation sampling from the McDLT ensemble.

      If the region keyword is used, the atom must be in both the group @@ -55,27 +55,43 @@ energy added or subtracted to it. If not specified, then the atoms in the group are affected wherever they may move to.

      Heat addition/subtraction is performed every N timesteps. The eflux -parameter determines the change in aggregate energy of the entire -group of atoms per unit time, e.g. in eV/psec for metal -units. Thus it is an "extensive" quantity, meaning its -magnitude should be scaled with the number of atoms in the group. -Since eflux is independent of N or the timestep, a -larger value of N will add/subtract a larger amount of energy each -time the fix is invoked. If heat is subtracted from the system too -aggressively so that the group's kinetic energy would go to zero, -LAMMPS halts with an error message. +parameter can be specified as a numeric constant or as a variable (see +below). If it is a numeric constant or equal-style variable which +evaluates to a scalar value, then the eflux determines the change in +aggregate energy of the entire group of atoms per unit time, e.g. in +eV/psec for metal units. In this case it is an +"extensive" quantity, meaning its magnitude should be scaled with the +number of atoms in the group. Note that since eflux has per-time +units (i.e. it is a flux), this means that a larger value of N will +add/subtract a larger amount of energy each time the fix is invoked.

      -

      The eflux parameter can be specified as an equal-style -variable. If the value is a variable, it should be -specified as v_name, where name is the variable name. In this case, -the variable will be evaluated each timestep, and its value used to -determine the flux. +

      If eflux is specified as an atom-style variable (see below), then +the variable computes one value per atom. In this case, each value is +the energy flux for a single atom, again in units of energy per unit +time. In this case, each value is an "intensive" quantity, which need +not be scaled with the number of atoms in the group. +

      +

      As mentioned above, the eflux parameter can be specified as an +equal-style or atom_style variable. If the value is a +variable, it should be specified as v_name, where name is the variable +name. In this case, the variable will be evaluated each timestep, and +its value(s) used to determine the flux.

      Equal-style variables can specify formulas with various mathematical functions, and include thermo_style command keywords for the simulation box parameters and timestep and elapsed time. Thus it is easy to specify a time-dependent flux.

      +

      Atom-style variables can specify the same formulas as equal-style +variables but can also include per-atom values, such as atom +coordinates. Thus it is easy to specify a spatially-dependent flux +with optional time-dependence as well. +

      +

      IMPORTANT NOTE: If heat is subtracted from the system too aggressively +so that the group's kinetic energy would go to zero, or any individual +atom's kinetic energy would go to zero for the case where eflux is +an atom-style variable, then LAMMPS will halt with an error message. +

      Fix heat is different from a thermostat such as fix nvt or fix temp/rescale in that energy is added/subtracted continually. Thus if there isn't another mechanism @@ -102,6 +118,8 @@ are relevant to this fix. most recent value by which velocites were scaled. The scalar value calculated by this fix is "intensive".

      +

      // NOTE: what is the scalar output for an atom-style variable? +

      No parameter of this fix can be used with the start/stop keywords of the run command. This fix is not invoked during energy minimization. diff --git a/doc/fix_heat.txt b/doc/fix_heat.txt index 51a26b4278..a1629e8cb8 100644 --- a/doc/fix_heat.txt +++ b/doc/fix_heat.txt @@ -31,11 +31,11 @@ fix 4 qout heat 1 -1.0 region top :pre [Description:] -Add non-translational kinetic energy (heat) to a group of atoms such -that their aggregate momentum is conserved. Two of these fixes can be -used to establish a temperature gradient across a simulation domain by -adding heat (energy) to one group of atoms (hot reservoir) and -subtracting heat from another (cold reservoir). E.g. a simulation +Add non-translational kinetic energy (heat) to a group of atoms in a +manner that conserves their aggregate momentum. Two of these fixes +can be used to establish a temperature gradient across a simulation +domain by adding heat (energy) to one group of atoms (hot reservoir) +and subtracting heat from another (cold reservoir). E.g. a simulation sampling from the McDLT ensemble. If the {region} keyword is used, the atom must be in both the group @@ -44,27 +44,43 @@ energy added or subtracted to it. If not specified, then the atoms in the group are affected wherever they may move to. Heat addition/subtraction is performed every N timesteps. The {eflux} -parameter determines the change in aggregate energy of the entire -group of atoms per unit time, e.g. in eV/psec for "metal -units"_units.html. Thus it is an "extensive" quantity, meaning its -magnitude should be scaled with the number of atoms in the group. -Since {eflux} is independent of N or the "timestep"_timestep.html, a -larger value of N will add/subtract a larger amount of energy each -time the fix is invoked. If heat is subtracted from the system too -aggressively so that the group's kinetic energy would go to zero, -LAMMPS halts with an error message. +parameter can be specified as a numeric constant or as a variable (see +below). If it is a numeric constant or equal-style variable which +evaluates to a scalar value, then the {eflux} determines the change in +aggregate energy of the entire group of atoms per unit time, e.g. in +eV/psec for "metal units"_units.html. In this case it is an +"extensive" quantity, meaning its magnitude should be scaled with the +number of atoms in the group. Note that since {eflux} has per-time +units (i.e. it is a flux), this means that a larger value of N will +add/subtract a larger amount of energy each time the fix is invoked. -The {eflux} parameter can be specified as an equal-style -"variable"_variable.html. If the value is a variable, it should be -specified as v_name, where name is the variable name. In this case, -the variable will be evaluated each timestep, and its value used to -determine the flux. +If {eflux} is specified as an atom-style variable (see below), then +the variable computes one value per atom. In this case, each value is +the energy flux for a single atom, again in units of energy per unit +time. In this case, each value is an "intensive" quantity, which need +not be scaled with the number of atoms in the group. + +As mentioned above, the {eflux} parameter can be specified as an +equal-style or atom_style "variable"_variable.html. If the value is a +variable, it should be specified as v_name, where name is the variable +name. In this case, the variable will be evaluated each timestep, and +its value(s) used to determine the flux. Equal-style variables can specify formulas with various mathematical functions, and include "thermo_style"_thermo_style.html command keywords for the simulation box parameters and timestep and elapsed time. Thus it is easy to specify a time-dependent flux. +Atom-style variables can specify the same formulas as equal-style +variables but can also include per-atom values, such as atom +coordinates. Thus it is easy to specify a spatially-dependent flux +with optional time-dependence as well. + +IMPORTANT NOTE: If heat is subtracted from the system too aggressively +so that the group's kinetic energy would go to zero, or any individual +atom's kinetic energy would go to zero for the case where {eflux} is +an atom-style variable, then LAMMPS will halt with an error message. + Fix heat is different from a thermostat such as "fix nvt"_fix_nh.html or "fix temp/rescale"_fix_temp_rescale.html in that energy is added/subtracted continually. Thus if there isn't another mechanism @@ -91,6 +107,8 @@ This fix computes a global scalar which can be accessed by various most recent value by which velocites were scaled. The scalar value calculated by this fix is "intensive". +// NOTE: what is the scalar output for an atom-style variable? + No parameter of this fix can be used with the {start/stop} keywords of the "run"_run.html command. This fix is not invoked during "energy minimization"_minimize.html. From 1d9c0274639bfe37e7eea17fe430d99332048a1d Mon Sep 17 00:00:00 2001 From: athomps Date: Wed, 9 Jan 2013 02:40:20 +0000 Subject: [PATCH 60/61] Corrected some errors in the mathematical expressions git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@9252 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- doc/pair_gromacs.html | 12 +++++++----- doc/pair_gromacs.txt | 12 +++++++----- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/doc/pair_gromacs.html b/doc/pair_gromacs.html index c2ffe88497..674ee8b44c 100644 --- a/doc/pair_gromacs.html +++ b/doc/pair_gromacs.html @@ -54,16 +54,18 @@ the coarse-grained models of (Marrink).

      -

      R1 is the inner cutoff; Rc is the outer cutoff. The coefficients A, B, +

      r1 is the inner cutoff; rc is the outer cutoff. The coefficients A, B, and C are computed by LAMMPS to perform the shifting and smoothing. The function S(r) is actually applied once to each term of the LJ formula and once to the Coulombic formula, so there are 2 or 3 sets of A,B,C coefficients depending on which pair_style is used. The boundary conditions -applied to the smoothing function are as follows: S(r1) = S'(r1) = 0, -S(rc) = -F(rc), S'(rc) = -F'(rc), where F(r) is the corresponding term -in the LJ or Coulombic potential energy function and a -single quote represents a derivative with respect to r. +applied to the smoothing function are as follows: S'(r1) = S''(r1) = 0, +S(rc) = -E(rc), S'(rc) = -E'(rc), and S''(rc) = -E''(rc), +where E(r) is the corresponding term +in the LJ or Coulombic potential energy function. +Single and double primes denote first and second +derivatives with respect to r, respectively.

      The inner and outer cutoff for the LJ and Coulombic terms can be the same or different depending on whether 2 or 4 arguments are used in diff --git a/doc/pair_gromacs.txt b/doc/pair_gromacs.txt index 361e43744b..77119ba3bf 100644 --- a/doc/pair_gromacs.txt +++ b/doc/pair_gromacs.txt @@ -45,16 +45,18 @@ the coarse-grained models of "(Marrink)"_#Marrink. :c,image(Eqs/pair_gromacs.jpg) -R1 is the inner cutoff; Rc is the outer cutoff. The coefficients A, B, +r1 is the inner cutoff; rc is the outer cutoff. The coefficients A, B, and C are computed by LAMMPS to perform the shifting and smoothing. The function S(r) is actually applied once to each term of the LJ formula and once to the Coulombic formula, so there are 2 or 3 sets of A,B,C coefficients depending on which pair_style is used. The boundary conditions -applied to the smoothing function are as follows: S(r1) = S'(r1) = 0, -S(rc) = -F(rc), S'(rc) = -F'(rc), where F(r) is the corresponding term -in the LJ or Coulombic potential energy function and a -single quote represents a derivative with respect to r. +applied to the smoothing function are as follows: S'(r1) = S''(r1) = 0, +S(rc) = -E(rc), S'(rc) = -E'(rc), and S''(rc) = -E''(rc), +where E(r) is the corresponding term +in the LJ or Coulombic potential energy function. +Single and double primes denote first and second +derivatives with respect to r, respectively. The inner and outer cutoff for the LJ and Coulombic terms can be the same or different depending on whether 2 or 4 arguments are used in From 5d0835345b8ad45139b37f7b8d3b23e5cd132f55 Mon Sep 17 00:00:00 2001 From: athomps Date: Wed, 9 Jan 2013 03:01:48 +0000 Subject: [PATCH 61/61] Corrected some errors in the mathematical expressions git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@9253 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- doc/Eqs/pair_gromacs.jpg | Bin 17058 -> 50447 bytes doc/Eqs/pair_gromacs.tex | 5 ++++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/doc/Eqs/pair_gromacs.jpg b/doc/Eqs/pair_gromacs.jpg index 675b399c67dc39943a47786dc43fa07704f25d1e..885c059e65f28d4b9db925fd9a0320988736bfaf 100644 GIT binary patch literal 50447 zcmdpdcU)87mhYiAkq%O$fPxf}u2KRbO{6Mai1a2z1f&xY=}kaDL5NaCN~8p&_oARk z5hO@S5Rsk;!cjta$KRcI@7(#!n|W{Eyno(KcCyYs`;@iI+N*r`(dVN@fc>hTp&md* zMFr$QAK-{Ut!1dAgD|r&)ib=N3!MM}>hs!HF6&aW1Awnz;9U#-%O`DY?M^a$1Q-Dp zfD2Fr)SO%b?r58tT?3%xhxBv%^Z(CjZwi3!1OOAVfA00q=l;_pW|up61EE@EC@Z+S z1-JkJ)p>~a2@bpil~X-~Xl`epzv$P0=({&8bfEG+h(7M|H+u39?ff_T>mT|q!~|4l z_fLI~zi4X4KeY4TXrVuJpj*hF=K?y&JE3>IJUjzWDx5!m{-m}m(%J3g_0WJoH{XDh zhJG%{yLXUxodVrlp}K#2zdu(29Dl3$r^O`YFJ8QG_OH_a#-Bg^@VDFTnE%zjRJ>iGx7kyE(ZV| z&yMgwpl*nlI{+9P15(ga839@<0e}vo{)_-kD#5?gdQ_4C&0poz01)p5(Edvu6X^d> zg2v-t*Zl3D`Z@LgtU;ahoaTShRN;TB9?b$e05uiWpD#7^g%S-N&7VY1OG`t?K+nLy zKu=H4z{tYHz{t!+s(@vOUY~}B8hTke zTBsqYBBApDEe9RvDS2&rE^{XaQGafQ=!_SPVwY>Xc`U|=;)>39A22cV@}1xpIDJM! z@~o7SvWn`3iLM3cH+K(DFYkcBpnJg~plz5|c8s z9%tv|K6#o~R9sS8R{pZ$Rb71pwz26=b4yQeU;n`1(A#(86O*5&ra#Z%@PwtW%imVM zudb1P?Ck#B+XsLB{=*j)K=U`Y{?6II;fn*}iyGcJ&Yonz<$ZVvD1e+Ge^MB6U0p*(omOY$9e-#IC}*6 z!IG@eJU?wqkAPS=yoSZP5g1xt$&+lIH}@6WI$aJ>i0ThQWVy+e%t}kLcM8oI#v812 zq9%?2Y);~VJPr)|uwyjUX1ydQ=-8N#M=^g-6kH2C>^YTb4$E8RHrG9&V5B}S?*DvP zH0u7 z1os5X8I;0dn#*qmQ#&< z5KQaa+&$=WaEpTDgHd%bt%fc1!s*CYNhTOVWnAq<)>R^XePu`b{or}TjQ#9k(S;=% zX)Z>byJU2Rkk!UH`%LRf<}}+7d- zs*vec^Mfn*(o}jM4V7>>_99e{fbR1j;-Xl5Jh4#3D4px(ymwf6`mS^Vmm?{z zRNc%p_?5Aj|FLTcqjH(~H}vQ_hCW#+)2vDXl0`{SZj;#S0T(b{QD=!BJ&60N&VvNG ze!gaT?Ayd7`b}w8Y$ztYZfDy`{5=>9K8!2g+m-BSHQN z1L9z8RcZ5^w#joi9U-3&Fo=b1

    • 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

      EsLImM_0eeK0|Df>aaiCrXHdp~}B3D~kv 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தZ{M*CVp43@><8<+lznQr#DVdFII-UOHVt=?sy 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

      s^R0u0MnyLj}-yZ(mc3T1dJM? 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 literal 17058 zcmcJ$1yozl_b(cX7b~S`&|)oG+^w`|fl|Sx5VUB};1r4#2v*!mDbN-P?(V@oxCJLj zg8Sq9yZ`^X_b>Opx88bhXRSGtGiT16IkRWa-kg;sYorKB28^{B9ON@J|zRfZP68|3ArV<$g$Uds%AXx!0Z*M_o*cf^F3c z>SDp?M0B_D=Q*x~+di6K&K@3yhex9K?SK=Tcrkw@O@-8-2uSMxvH;gi4m$(BC$REd@j%N0AcRW|)$Dip01YBK!3t;>#|WOqF6B;5|zyV0eWZZj!@ zJ)~$!oj!ot`C-G;|AX+{0ovuZsUu7`HUkQ@4ITtm^mf#JHL|AFLKgMVWV7?9k226? zHbZlB>lhWbtsUEj*Z`9G#nZ5Nl}W|Jl#r*kzVUsBQv$gY@jh4=f77Ku9yVbJW>%F+ zUFW?Om0Zf$ZbYVjT?DXM(^B%SaY^l4!`F=(XQbZoF$)|xwxqFb596<)RJM0qt&^Ni zL-XF5;8SihgHUa09pS&6XJWi0f5aWLJr>*jshq<#*e_6fX7SvGen=hOz51!ts!)h# zi`^{~t6b{$WBOJE-tpG$XvdNgbsLY8GGz~DxWPn?(rKgExEpDKLis5tU4W^e1Du)( zKm5tW3aTq%;o(2)O#EYj9dhgtbf&dQBNsKn`E^!lq&D&DJ?$B3iduO0uwi>-2lcTQV$18yA=Nd%urIP={d|q4tzjCakuCxUlK6nYcHw7$GsN0o z=}(~ZI{@2q%5@1t)q%yfz9o_Se$&41qB?tuKHUS|rXttNVVw+wpNHkO(QO>W?$*)i z(tZ8M|3NdJ{zui&(F}mw9_~}7tW&r7`8p^Mff&oh$r6K)Tq{Q}Vsjfgkf(>zveX+4 z8=DwM3F3jC$hngFvN^sOaAVt|%86Lz%DgbL#Yix9}N;`CS(0H$Kvh>4ySQ~ZP zFe-2>q3>z~93O)ZBMmq*E^kN2S2&kSWNsf-5=Tqc(fdXDZPA(+r(_bNr5(xzTEm26 za&SV7x)1H$jiy+6?O5XB!yzy>nl>;x?jy{`E_@55o}o9gSdh%%G#_v7`+uikJh~ll zFMMwF`%W(FR18*6spu|fTU4x_sL0FDL-c_EvV_;>;hZjcT5t-uF<&Uvs$5Ts{Efq8 z*&3XDak??Un<_f(-X!bX>s>`w96iR`#S+R3;9j=$}T?1(%7`_^O^AMGnXf!6mQ8efNN;IeAK5bEMm$jhab{ z$978aTP&+PfMqW`<3qFZsku9V$&e~Yz+q`FeqcB`;5J#9p2K(r z?KcR!jVqfi9dign`0BKgiM$1Oo4H+dB-}DGnWKsgd^)GMZL-?xMo5Ct24rqM&&#;U z+k(5cE^3ST5$VkaKR3Qb!$0n2mN4Be9nLl`3kp~s>Rned4H_3SgnBOZoraO!0dReE z0#-MVBRfowTm!~oyjV|^@Ff@xxqF`pHvIIUe%i+m_UO!;w42^xQYgf#zpTu5=PPVx z$Am+40YffzyY>A7Zfm71wuqEvS)GGvY8$5+rSa7|AjHFh*9BEnw{8Boe9utRQe{!8 z)$)^X!7DPeDMW3IF2#Zh#K;wPc!Uc|7`Sltuq_|l&v&EJVBU3=^b1z6mp>(W*!wMa zmFne0@?nNDgLLAaHD|(bmRM5rL+46K&r;}054e+H)HX%j^K%8l(%>y358FIQ^o25x z#<;wlvQ?!YfN`Q^lD%Qn$H|K?JRo2Li zo%ht0FB0Zc)}TsGKHHeHdDMIyIk_*PIlm816#pmOy&a&9Z2F})<<*n8exSuSrQRNr zszE9IGgw~V!nYG{)z9;2-5`!+I1h{jL?@%lS;~|aiIh&KfE$|I^HdoAA+&L5BT6^% zJGe+CAo)(>=_`k~9HIdi#lgz$HQdd0pb2lK6`{JsNj0__kgSv5jf!c5)%iiE`N{TxXeEhOo!)zb3 zsOaa>M$2i)dd7Rg4$kycBU;rN847tr?^>7YE>&|>}%2qiI`ri z1nM&m3NCQs5~V&+Bmzjp#0QTJq`SbD!fsC3-r_roFvbbOFN;r#17@{vRL!DPaO|Dt zKqn8=mp9o4UG|^z`S5@@Xkq%HU;Y@Q37NlHcg`3wuwJ#~{s#Cwkjnn({#s{K5E1%0 zzx)07@g2K*!?2!y%aTzbKV~K2*V$f^Q*+a#6B4|%s6`PlFM0sGpmQ^w&7&ZnxdcT#5q*fcnT*-+eahcTD0S9LGymbNE8 zh<)2E>>0*e@f@VBOZKwemrPe!;5-4MsuJ}F7dA)MIbsOAA%nBn1$|kY%vqJN3#H3k z2MKJqy)Olsfn*L_kY)^8>ngoNZnZ%UbK>x0S1Z@}EGLx6F(Mz5^SvL)1WPUUvQtkZ zZ3Ww@G91fL>93}4Un!i6Z=CX_3%2|9YdluD5uM7Orz#K6^`f8IdM0x135@PFJOa4s z9yI?lOOs+jg}&1~nJbt-qZ@_!t*>UEiG>Dqc?7KQSVzsQdoajhl8HjPLqjj{nUaz= zO<}sa#t?7!IfI?W;rxaR-w!^khaHJ0tL-)Qp_h9$RvXG?*Nh6WBeomgM)Vf z&BjVx!sLqnr}Z1=FKX4@-9*@n8cS8QYPTFbqXVk0DS=<+H;{>tKr`gL`++A*_yAKz zYEH~mNocUjZ|^WI)ftj~6~rgaxUhuhyt0j5lJ30jOf!>}yTse4GLBH8mi~e>7@zxj z)Yp!0>vn>3f)gmO#5F*<3UCCD{Y9o{PfyAT&GSAH65!hYu(nxoWteX*ZajuxEw^@X zE`O3+K+7yPCC9GK%?ayj2j|pjy(%Bl0mob$LPyHJIMBMJ5?8&k)N^P*D_0)o)}OE1 z61o(g)ztgB{@$;rWO2NGh=2+kaF%hv{bXalIAd++h-Pc6|MAcXw$EwiO;; zR=vElE;}k6ik^a=?%KANL#2>LC?M6k7B$7 zh$FlM9v5^;aOfAW)fvt#DjP*W#iYnO(tZUPaCws-2X8-n%%q{R-(|Zamhhq2lblVr z!2UzZhKBWT2N+ZgzYe-|qT-k#wf8H=Jpsbo4mPT3=kWl=>6Tj!tgQ`qP7Q6)q5Nv} zL!TY{tDKCiw*64$+^Qz>l6Fv!eP0#(2R9x6Z3oYw-P!>x@fYfBZ^nD{AD@Vv(kC0O zcM-!_@ueoU5A@q8NbQXE=T@5iEA-fg#Bg*ciM?-LLEYknBX`hzml>BCc>XA1Do3+| z3lS0b_9o+vjhz9*;T#G8TtvX4K7q5C(COf*WPt=hz4-M)3jDdc&(?7@QaKIa5j&;O zU<3RgANU_)XdOjXDAf*-7j<6#1_Nh2?bjazd-vxuG1MBYDKs?ghxB{5R30-rSzve_ z`?I5SdtF+%UcEpOja_Wnfn|eB1aNG1%I)Qp_={v2WJQc)hwCB(cP#m;N6)}**=BD>4J6YT^8o#9JHF){- zhhMIXMi+#9(Bbj&<_b#3S_@`0ARuO%{l2}@xyZ28SBx;kdA#iWoGWYj3@TbPS5uz+ zpG_CeTO$y@ET>qXQ@^l_kWixKR@#Us&`_<|KiS{!K;PGA4a2);rN;%%WLeR8yZBm7^cNOp=p7VWfye zf~9j~T_lG~uVyw8?zyaOb~pkA)7=2P^x}qB*{MUamlWZ-64XrXE?f?O(z_;GC>Rh- zX|2W-H(5R2WgRnv%rWM*=nS@V(dpoWfh@K3NDT9V5f#XFP7~wb8SEi*r;H$A#WA}IB%pT}vj~h@ z6G6VXw!j*fKj^|~J?^Jy>Ffy;zIEWrK8>l0?S?oc^}nl;7J98QS%yYrqI;dDY4^6LK*u6*mygXxe3x?NmUy`M5c#9SMIw)+YXIXcVnte@| zix)4F6%CQnfOgdLto^b`P?vM@cAH_v4c3r*#vB@0dCMM=jNJ{Mw#6h1j*XX08+#z@ z^E1Ab6lA-6Wa^p<;F7SWIK)t0#A&#v7PU^z&VDpu?5+(s<0KdM*9aK34ZnA5sO5f{ z(A@#j({D4qYzY3r1m#&@*;ArTXzX;MO_1DBniN`kaHU9*4IKb$8X%KA5oHnO<{|wHAe;V5n%9r^REInSCk<)6c z-PB@o>G8iAr|6Qr-Rygs9w3ebPf2eKAT#_+1=(N@m(f6|&rq=`Wg09oiG}HH#abAZ zk`FX)O7G_EnhxO?DOh||FVQ$Cen?Ztq*T1Tu_pK?7QYSOG5;0T&XEb3ibrMJ#2!kd zB)t>4Z4Pz^LuN-O^WIUlnb35n1L**E%4-0kvHSiP`ffti)1XjgYI8|1)SK>Z(f&3b zQr0}QYRSfPAf}c~E3u=&Am90vcdl!yEP(Oa{SPbN=aR&7n#}#h{7i8_f)mD$(U;DQ zY(reG7~oJ7NF=QyF-=!_#Bk#gEz_TA5KXt!Qh_&cEW1T`a%)(|JKiWwe11bWdeAP< znIVlR+=g@9BCzn9398rCA3J1~|81D1zX{gF^D1Q(q(F{{^t-NYla$0Aa$S_?8>#p? z{Qn$&o08>RXX1u%5&QH-V$ySzJ7i?AjQH6g= zg^%?6PI|;MB%+R!WfcQ*PF0M9())8jtl}15ja20wl%DRsf9!AiR)#9}-|PI>W6S>x zB^5i4-n0m3Ss$u>fRa9EpkA7Ju&HRa$0oJ1VwEX`h2s^1vSnT0Vd#;Dy;w`(v+b_+ zSEPQ=Vkcv^N}s4x&xH!5Szud7*A2Nc0zd|m84QRfXja0He+x(dM^O5|O?z*rQtdOD z2sK&BqzVn!yd-OthQ@P&_HtTsO*!{YxUKCu{YQGn$50?G_NP3h25v-jZUs$uXk`GP zZqSt4Ne*WWPc^RRr7_LU0R_k2By6~!H6TuZh%CiI!u0W4GqVuCEE5zoSiK4)2G?p) znv`C-BtI~sKb6LNFhaMGnNTLP(!vH;T?wNa#FSYXWr0h3H>UD0a5T$T&!-jXylJ}Y ziupYPN#>weC1Mhc%CV3_r(iRCxKa|;cby|obGtYBsx@mm)^AxF?2OLjUTq0KAY^kr zjFd_rw!Wz8u^<^RVSV9zjxo10LK1oB`GhkG)#s5XY+tcVKmNEx8wZOMZDy2ub8g6A z%$co^c9*H2vDRa7IGEX+)AFOpL;WAOE?&#S&tuGC5y62vtNPq^VxWb15VFF!>{`eI zbKOz1*AVcDVD`kKt^`CK+lhcX8&!V9=>E(@YtO*AnSH}F+`hneNUmGuZeP~_GhAH5 z5%aPIk}FfSH-&=l;|`$S$xm$rKb8T5R}+6+Ce@NIB0&pYXphF%4oV;3W{};zQassf z{pYU)J(w!VY3je6VJ@ro5c>tr;w=r_eU_!Wo;>hP!_tl8i*g&%L8g!&cvZy*Kk(pE zoDb2QP;2pk!0CgBzg1(P`MT`*j0K-17`HbL4n#G6PIs`h(G{z}Is4LgwJRU|bFsgrxU7Vg0C80o@Sm6h`uphErWzTYj{8NBSS2&=Pso}Mcxcse*4LMK za0WG+t5YZw5zV%4)(TTgv=uuJ*MR|KF7n3Yx)=ED=k%R4#3r(DN@3C z$GT|Sr|fz{O**6s=ho|Qqu1zwKerN@n9>K`U%NStS90kry;>HiDMy@{* zn8ABBORLeL);i5wK2_Jvc~CRZU0WIBATVUtEr?zk*9*u&g}cp0qszxf}v%teeILKmETDl!K zNN=uNC(ZhL?|I3piG|&9&`wUkHmH60T74z^V0P(h{5DDYeut#9nfCUk_zuvdTgT6O zNF8s%Z6RcY3^lCy*fzQ7#ioJD5XDXdJ|pqSQ0npDF$f@+rp-FB8$W8s7ODSH-H5T= zkyKHb>M$~`K2Y?&9F!j5)tNaS@NyeXTlsxgXnoZt2WJ z@>JJeYN;i_4nJhR1~|N4mR$CwDR>P+%h6?$;}#?OC!sH{m3(FZ0_DW_IX>0F?tkG} zCu4BRGwH|;*LSsxDf{>e$t=l1>qL$GLx5fJIqcmX;zE=Hd0JH z59vP-cCDqG786LV`_pc{Ytx{~?HDm7MKSWm!6Qwqh6F|Sec|ssYkoZn@sm5eU zNfZ0xKe>H1RHKASSUdN%cf<+4GAB%a6)<0g1ih;AE}J*x{(Rz_&9mm=Ld6_c-lY~U z@~r*PgG^D?_gBD~$p*?^0L_2B`%-AqE&G1|P$f&9Lz7c=5R64zOD&KsG=`NwYa#zdBg0U9m8=l{iS zm=NFW)?T|7fexpRsKoN8U_9EjnT+dWO~oXOU-q>EUY5hKz}K)Z=U!B-5^b&?6&{ZI zEeT~hllZTBj?^}(h3k9e!hU#SkE)r#T~)yJEg9?Qy8=RH&ZmZf-RV4;2iuW@zU4G< z$Hfh$krDs5J)SaZK5h0I_HrT9R6XKVGJW8s2Iq!9Q>cMawhD=*DL&VTnbVPDEDf;Q zbpE@t_|8`wib}isbjPYCRu^ zMvKp=Q+zA@Ay)y!>yMepTFZW?Dx0TMhaiV81?k`N_v|zi+Jo$yGx%(FsF)_X6&TZx zw4Cz_291Ux#-afcoji+8q3%T%CLlwE&> z*XV5MdYuUnKPbnzLOWef&A#VDw2gzfiIu0hzeBV5Tu#N2(+H*aYn{GB`!_R$<#GTkpxNmKhoE>?+ zfkg;8quy+U*n3EFUq}^!O!+?y$CY-_KzM-|3)c+A2D~pnRjK%1%=bfXI54!&;feP0 zhVC!lyuQ6*3)I@pS(^5K{^Y+*7iRLGq7PwXD~;aYA5EmL zONS5fj&Idk0od|3IR8{Og|Za$fdN?MTIKm@N6UcZvQ$m}kYW(DzAYk^J2?}(sH$Y! zw^V65dulL<&Sb-#d~Thkrw7zYG`I=5<<)&KCuqsNkd@mNwDdgj7gUJt%BdgNKdkDc zePKAaabcgq{XC_ACEHFaD1pc!$?B{81@`51Pg1!yO#To%P&WPS$d9nKr)(tG- z1Jl(=GX<#|A6*1=VwS!$F7WbUqZ#`CaaEr_eU_2T&}AWL>ZL&$UXp_Asbw%$SKU}wnnGFq+jv+}z{NFgHJHm-YQs?uMculJv6`d{UnP$Dva0Bm2) z(Rc?S6PbOl19ga7uS4;Y?k$x`eUKxlJ)=R+`#`mCU-m%PQg+@>lu5m4;i&Twfy9>BO3GU}QIVI~$Dq*pi~wl)mh0Uz5e z{gHb;`rqE?Kb@p9{yqruqK-yDs9EY~C&1_R2riICdcUKAYBsaayp&f_lt47*sEo?9F=0@I|1x`&eX}VyS)?`W++pq&((( z81lTrywF7Mt&_&1Bz>}tUW8cj-bexhYdD(!_?Q>Y^E>IITzA zD*`mD4~n95IE3~t9uGnIF6^?^vVTQU32HNmWM}T74&a=l48}9 zy5_Q}{pA|->AgE4C8G@ zminVxgsSFG8EVS5I?mlg96Sd5jBX7R0|rF~N-4yO&SXDuo;r*9M}w4_;8GlNfnd~> zSm%(gmF-ulmJ=1voY{vY=02x?6cU1d_D$f{E`WdtN*|1R8^j29?&;+i&k!UynV=FhP5BuQwH;qiZ$ zStv5g#G|c7zfl>FT`5zIAh~q-lpN{*kIwZb&9`?-{jB&k`qw>1Bnz}*BX@uavK!6e`j)4Ku4!-e(+byDF9v2vobj2w#c_;#R>`t> z6E2*_=gNz3#_n4GvR1p)xyCcQ^C-oE02R%?|L@^Q3dXlnj zk5GoN2rpp(E;-i?t0 zlFt=2BkuW6Vi(aN-yvdOJ6(B9rPgUP{Cq=93^S`99i^9v(5-!pD8R_7XI}M;@OlvZ zgyA?V072hGLj|JgNbV6sGPAra$d}0VQ`dtmYvVpN1yB(Uu`|VW7AH$->I{3caJFqx z=7BO~ImtY{dfvhD>ss!Kr6lQZ$%3xxmiFlqt;Se!kv-00OahbTGqT)W z0Jm~X#-8|r5^`q3<|1j0DSsCKD&Xg+5)s3Db|w6;galWF%gH-WG9ku9$3Sm4J3 zTr-|=0+7AG#qf^Lu}BS*i(enwxXs)VL+t21DcT?3tt|avlh0$te&K-z$yPk8%?wU7 zgPpbiuAnRzMxFk#=4oZz6U&@oIfV)Nr5*VXFnsVuh9)=vdx4Ou7{81SbykXBNz`G= z=JWBT{)7AD!6u?IVoi@>&;ILL{r~1nt^~;(WudZ8m};+4K!V|K`xjfuDl0ch!qnt* z-Xx3jRJNzD8(fBi!Bf4{NrSTzQHeejYO9-Y&aU1wiO$P-)7=@n-hXSjEc?+`Pxh6H z^Q{DK#@DxP-|CVFdT_UY+8;twxGO_zNxVXOju1Pw=WY7)Ad!wg=K-GVWL!;YUmp_p zY6yEg3-V_l?>tMo&~R+_b0{!ovo9|DcWe9K9jTG?Q!kqKN$#0pobtG81!SB<77TDS zt^I3BkEfX5%AORwVd0WB8~CD~pS*sFTy8I^#Q1fG2%-MYJ<(s)B;7^&r5UYW_5Td- zZl3`HXAKY%LxAhf2U-rEvW2$)c$lwAvWL4O;UKW~c$v$sO8?<#H^3^_#y{}0FLCh*fnnT_bB=Bo4K;N4dk5wh6v>hIa z*CqfP7b@L$3u{?RS^xE5uRdNjRxsFQ&900HS}*)jsIg8c(5{rYVF|oyn7@(oxzzj5 zFO2fRzIhJ^T9LhN*8&ByH3OfNSjf`e8b>;1j^QaGZaI{udTJ!n!2C9(Hu#0VX#5qw zq4`PPGo`}SyE2s)(q9-PPSMX13n&Anw+Umb+O1pihGbT!FZq=_ReP`1Dx!Ae+`+Xg z@g5J{WwwYcuHm>JVwehflC`TYsm z@$o$AJ(QIQtBU)V9hn0mQDhqs(B4|#@j43(kKNf^S`gZPEw%fiyqzKD_7WscrlY+f||dE^J7`YqTeJw%Zb_lE0OMw z7NZ%Fl`VDl?0gI$<4{&14zB3;zB+NRQG1&2B1PZN-W}p8sz$SuoGGSj9r;-QlMQ31 zuYlCq4%2JC#tSazwP*dBp3@dCf%H44Y(WZ3e%ZjZjZ2?Le^X+J#X}isb2>ZHdb)&% z%ec8V4_?i%gXglAXF})w;QJpA=#dav$vJG2=+MGFY1PkWH5z8iHj=9J>TAp%a}nH# zwBCu1mHl-XeEmb7iMmjWX{e}hUC;T0AC2Nc+sJ`6+P2Z;0f8Fcs-fwkcFEk5g-cP< zhJxxZo`y|E9}`xYw<8waypv7zcj)}PyPKPmU%fIK498~kN_#OK@mT7&?N?8!OaAKE zjWFRLf@#(Thy*DY&k)Dw$LhSEwfKtWtbdqeJuRZ;bTXN8j-_xyusVeO==6#1;(Ir@sSy zOWfxKi~W74>Y6@>DD>|KY17w8Ffn#1`Wx(Lmao}rlh{=%RD9-IS;~Er)9LdikFVJ( zUfkUGK2Ar1)U(bQ@V?B)`vu*jfYws01?ibR7RAfrZxatkL=2|p`|)b4#*=F)h}m01 zLjh-YziY9_vRFY9e0V&Rn$&5%J*0*L2B8Ycys8dpUDx{cG+K7oEJUcl;8edGMxGQ< ztZ+}X9ZqFRdwK-ipgO_3=MIX&eqMjm%d>TRCn!&NPr{dEo$xQ*BUkvaJ`HUAx(u!% zRa$d&wZEo!Oym0cz}qVBN4Xf2e9t3f*_`pj&W61_E$hH&Xs1ftg5n$2x}{OS$}nMx zUyqd975*j#>V}FeI{?+bbjvZeFo+ zBo8<#m42Y-IWs#t)!qFqHc4eQdQ6=a1X7ycWWc&YAoC*1t2tHLSikU^InQ7t6#RZZ zeaeGKg1B~Ezq8^@Eg!NY`|d7!O$8!@OjdKZY})KN&MN!=AdpXRT))K3WPug_@o9_xI1N|(LZqm{&Z)Yexn+Wb79 z>x~slMRj9Re&q_!Q0zr~W7EyTmZ+Ac{^8d4HMH1G$32rK zyx55D^O2(63Wh#@KVu=Ii`Gt}DQ5ZcYsMag;i-=B+xe_vF4#Tl56=*#W}loyGeOoZ z3)U~)j*oTIVF99Nv8Mt3zI^g!| zth6nugJwTRHnGa-j7GE^Vm{J3IbOX&;)GTDs;vZ4?C-iaw#&AJ%G^l#ebAkC;e}Wx zqzTTzj9_P?qWCY!(bSeuEap1^&;a>UD$w{ur%?;L6`{ccYtwzHdn|QgD4qeCn2i@JeY1c9PSo-@O6eQ8RZsj<0-{b&q!*&HrnT! zf^z2!k}lIcLWPmJsQ-*nKBGK>a}Kw?jzOjjSSihX$L|VYzKjdC*=xI}xEeRdjgR3) zNbTjC{zo+!|Bo+LyIH0gdHrB*sOgCaO7$CW9la1O>nD$|gZ3fCd^Wa_9bQ|6ADM#7 zTIJ4s2b^RkorGo{UUVYn;HF(GGvHaHN-`eiR~ffo9)Me`$(?lm8am*@b^2x|BO~=Z zZDzj1IHr2{MHgcXoUxu>PneMHhHC0hN$+{ygg3;Kgw-!%T}Sy2fGDXfXJnUMBW~!d z{Vrn6`f5xOUZip=6d+(nLKXH%?1$09rM-8d#g}d|JaLgu#(1S;|9ZV105S#D6G=a< zf*AhRK9&;{h3{70mDGK)k-6;Q);f({blsZFP{_&a-a_0c(WSE*^t%UCge)7hToUvm zb~OyG8?O%yxBrDYsGX|X{>g>^mGgEQ{rH}5EjVQOEYi5g+nxS~=|)*DAgiamrG%Dx z-txI=Oi)v#ynmm>hJX_Cn4bh}b3>9Y(Da?dUm>V2*hzkS_t@=>em$;>m^;f$#_ zZ)2yg%Jw{!PM@+7YHhLd%l)iA_k0QE4@6&kyeJ(jj)FZQwa!gpwZT8Tygk{crLh>M z{{W_C3vKDtV4lj^k>Rnup2rER`C+^Cd#Q<>oJwX@l!GTZnw}G9=9gQwqv4PRdw7yc zU)AnIblZf~g{JS#T+?IIx%y^v@l09q>n5lG{YRelV$se!z#~&O9#@b(=;sTiKs)6= z0;ZHbSPY>A?xOxm3~;TE<7I!Uw3}#wJumMk*I7amoOt|zKRVp|m3^X2N;Fp0(;1(j zw#4>6Czz_C`*+1DA3F}qIo9V@R~GS>WaPEL(D=M>=#L~BKZMl5k4ZA2o}CFdVQOM? z&Nbc!-J;Pv4m38PKZt^Nc*lykkWO&-Qm(-WfGO5^jZ~mkpsj@YI9@FGWUN~ppT5UR zT5qFWso7VDDv|ifC#k$7o@%jS;REc7e7sf$>kXXRz0ZwWxG_k2JEk7AMq(xSP?P|t zoR*PpG^d7fT@jMtld7HbabB4gx4QWyzj_YO2@+xb8ao?kDcf95Vq*(i{H}%7bJ*Cd ze4vn61(zUUtz#dwH~NJQ`lQs|y4P1aiqrxl zNF6@A>_a}GfNdHseD#csSX!uSbh(jaCTT8REVvLiSgJ^_Xn2i^s`0=Pggrl1d5V3u zzayauSocRczJ}ft!XK*ZAs=PGy5P`oBNQfsH^bm>em>=+C1Cg*@~t>aZ9k1ui9N;` z98a+0cxCS$qTS(44ZeOwBP-Nb0f~|(C;0Ju6z5h^9)VgCc7!aIWEkO>VwabL2kybo z)zs*&c2G!(>-=V8v#JG{&o{V(;?e-Hp_snRv4pMV|ydYta>1Q~V`QqyyuMPkPOq!Lia_Kf! zN{is!rjL_9YEcr|oNFBBM$#;5Uh||Nh+aF?$uGn8O_cbo&hClV*WKIRzVVoV6o7h67GQ}WjQ$hWq22k`I{95R zWLJI|)%`E352aY#_>k7>9e{2~2Z<=?UPWI#teCc+Y;`S?{9|Tk{0xi@_dmrt9^oEc zb>kb(uqG-lNIzYvh`V2Kh13WQS>gBSpDU1n@y3z$FwYkHkSJ>~c4?Z2GGQhumfAM_6W^P*9moov0*plJ*?&;AM-4t{m%m%=BQNf437$6~FiC_38T_kb={! z9a?S3z5}KzeMElPU;dV(E1QWzJhEaX3ag0Cyx{TsxwRe=4dPx1@wK%0e}$z+2{McAyKri z&1Sjl%PUg29M!y@Ed-NFkT@1US{x=Z1e7`k`H*;izsGorl?QQw)W4j5y^#2_e?v5X zA8$XVRBuI@7-FrMG9c?3EhhL^(T9^MvU-b%x@bUBlEfU4@lr0nzC`Tr#}-Wk&qBq| zm4iG}sSQaFUYe&ZTc>r~*oF+)d7mt8u>L-% z#D&yuR-we$#;Y5AY;!+k4 zZ7J~MG=?@ER~!%@QkQ1%N1}_8pFj;Ep=GE1vuV^lXi4X^fmhTj7CzbkL?aW>8OE@G z0Z2ogkMuzL(gJ-`O)#uIQmjFiLC*kZdFHD})USsi%o#7Vh+RUZWilP`^EyU5{J;9? z{;QhO=J|}Y{BrUx7^-gIExH^}U0xLJt1GE$A1i6aP*yS;-BsXlaLM2DpiYM<6`~b5 zgdT8OfFPzYPk)O1&3_6Ki1x0eiY2QZ9XZxD$D(8X1p9W_VbJKl+eQDPv$Yo)ol^{w z9|4fIVxgKx?_)qw1#HfE4@IEmcP!QpdDoNeii6_B`vOX!5d8e;BKYry;N%XXqbaXy zeOgGL7e~dv7-S^rUjmkir2FWK%1!NBI!w#s^32KV)GdG4EXt5nc0ojHdqco{ds4#Z z5QI1Fm(&5YiYo@KkuYf5c^D9$FuO}B&ROr&-{aVPu5CCgK@iY)ffdxQjSL?n6nM<~ zuaf@;YM6aHu5&w2ojd8AA*-d zz@0Cyi9$e-EW&uvP}!&5k}rwYz+l&`RRHb~m~9JdsX8&_-@r2JWNyZnM!sdMdpd>A zyZvcho?1Yk=)Gtk!o9NdP-u*w&4e`V@&!Mccm}

    • Pair style KSpace style
      coul/long ewald or pppm
      coul/msm msm