From 0855d62bfdefabac475d5a4ffc07cd13a3da2a03 Mon Sep 17 00:00:00 2001 From: srtee Date: Mon, 2 May 2022 23:24:00 +1000 Subject: [PATCH 01/46] implement compute_array --- doc/src/fix_electrode_conp.rst | 65 +++++----- examples/PACKAGES/electrode/graph-il/in.conq | 8 +- examples/PACKAGES/electrode/graph-il/in.conq2 | 24 +--- ...++.1 => log.02May2022.graph-il-conq.g++.1} | 34 +++-- ...++.4 => log.02May2022.graph-il-conq.g++.4} | 36 +++--- ...+.1 => log.02May2022.graph-il-conq2.g++.1} | 50 +++----- ...+.4 => log.02May2022.graph-il-conq2.g++.4} | 48 +++----- src/ELECTRODE/fix_electrode_conp.cpp | 116 ++++-------------- src/ELECTRODE/fix_electrode_conp.h | 4 +- 9 files changed, 126 insertions(+), 259 deletions(-) rename examples/PACKAGES/electrode/graph-il/{log.26Apr2022.graph-il-conq.g++.1 => log.02May2022.graph-il-conq.g++.1} (84%) rename examples/PACKAGES/electrode/graph-il/{log.26Apr2022.graph-il-conq.g++.4 => log.02May2022.graph-il-conq.g++.4} (84%) rename examples/PACKAGES/electrode/graph-il/{log.26Apr2022.graph-il-conq2.g++.1 => log.02May2022.graph-il-conq2.g++.1} (78%) rename examples/PACKAGES/electrode/graph-il/{log.26Apr2022.graph-il-conq2.g++.4 => log.02May2022.graph-il-conq2.g++.4} (78%) diff --git a/doc/src/fix_electrode_conp.rst b/doc/src/fix_electrode_conp.rst index 75b099995f..1933d43879 100644 --- a/doc/src/fix_electrode_conp.rst +++ b/doc/src/fix_electrode_conp.rst @@ -130,48 +130,49 @@ file, for code developers to track optimization. fix_modify ID timer on/off -The *fix_modify set* options allow calculated quantities to be accessed via -internal variables. Currently four types of quantities can be accessed: +---------- -.. code-block:: LAMMPS +These fixes compute a global array which can be accessed by various +:doc:`output commands `. The array has *N* rows and *2N+2* +columns, where *N* is the number of electrode groups managed by the fix. For the +*I*-th row of the array, the elements are: - fix-modify ID set v group-ID variablename - fix-modify ID set qsb group-ID variablename - fix-modify ID set mc group-ID1 group-ID2 variablename - fix-modify ID set me group-ID1 group-ID2 variablename +* array[I][1] = potential instantaneously applied to group *I* +* array[I][1] = total charge that group *I* would have had *if it were at 0 V + applied potential* +* array[I][2 to *N* + 1] = the *N* entries of the *I*-th row of the electrode + capacitance matrix (definition follows) +* array[I][*N* + 2 to *2N* + 1] = the *N* entries of the *I*-th row of the electrode + elastance matrix (the inverse of the electrode capacitance matrix) -One use case is to output the potential that is internally calculated and -applied to each electrode group by *fix electrode/conq* or *fix electrode/thermo*. -For that case the *v* option makes *fix electrode* update the variable -*variablename* with the potential applied to group *group-ID*, where *group-ID* -must be a group whose charges are updated by *fix electrode* and *variablename* -must be an internal-style variable: +The first column is handy for *fix electrode/conq* and *fix +electrode/thermo* simulations, to output the potentials dynamically calculated and +imposed by the fix (see following formula). The potential is in units of electric field times +distance, which gives volts for most (but not all) :doc:`units ` settings. -.. code-block:: LAMMPS - - fix conq bot electrode/conq -1.0 1.979 couple top 1.0 - variable vbot internal 0.0 - fix_modify conq set v bot vbot - -The *qsb* option similarly outputs the total updated charge of the group if its -potential were 0.0V. The *mc* option requires two *group-IDs*, and outputs the -entry \{*group-ID1*, *group-ID2*\} of the (symmetric) *macro-capacitance* matrix -(MC) which relates the electrodes' applied potentials (V), total charges (Q), and -total charges at 0.0 V (Qsb): +The :math:`N \times N` electrode capacitance matrix, denoted :math:`\mathbf{C}` +in the following equation, summarizes how the total charge induced on each electrode +(:math:`\mathbf{Q}` as an *N*-vector) is related to the potential on each +electrode, :math:`\mathbf{V}`, and the charge-at-0V :math:`\mathbf{Q}_{0V}` +(which is influenced by the local electrolyte structure): .. math:: - \mathbf{Q} = \mathbf{Q}_{SB} + \mathbf{MC} \cdot \mathbf{V} + \mathbf{Q} = \mathbf{Q}_{0V} + \mathbf{C} \cdot \mathbf{V} -Lastly, the *me* option also requires two *group-IDs* and outputs the entry -\{*group-ID1*, *group-ID2*\} of the *macro-elastance* matrix, which is the -inverse of the macro-capacitance matrix. (As the names denote, the -macro-capacitance matrix gives electrode charges from potentials, and the -macro-elastance matrix gives electrode potentials from charges). +The charge-at-0V, electrode capacitance and elastance matrices are internally used to +calculate the potentials required to induce the specified total electrode charges +in *fix electrode/conq* and *fix electrode/thermo*. With the *symm on* option, +the electrode capacitance matrix would be singular, and thus its last row is +replaced with *N* copies of its top-left entry (:math:`\mathbf{C}_{11}`) for +invertibility. -.. warning:: +---------- - Positions of electrode particles have to be immobilized at all times. +Restrictions +"""""""""""" + +Positions of electrode particles have to be immobilized at all times. The parallelization for the fix works best if electrode atoms are evenly distributed across processors. For a system with two electrodes at the bottom diff --git a/examples/PACKAGES/electrode/graph-il/in.conq b/examples/PACKAGES/electrode/graph-il/in.conq index 08429924d4..7db9e4cf18 100644 --- a/examples/PACKAGES/electrode/graph-il/in.conq +++ b/examples/PACKAGES/electrode/graph-il/in.conq @@ -7,12 +7,6 @@ kspace_modify slab 3.0 fix conq bot electrode/conq -1.0 1.979 couple top 1.0 etypes 5 # conq doesn't take symm option -# ask fix conq to output electrode potentials to internal variables -variable vbot internal 0.0 -variable vtop internal 0.0 -fix_modify conq set v bot vbot -fix_modify conq set v top vtop - thermo 50 -thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop v_vbot v_vtop +thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop f_conq[1][1] f_conq[2][1] run 500 diff --git a/examples/PACKAGES/electrode/graph-il/in.conq2 b/examples/PACKAGES/electrode/graph-il/in.conq2 index 46c9ecbf99..afb9f94c52 100644 --- a/examples/PACKAGES/electrode/graph-il/in.conq2 +++ b/examples/PACKAGES/electrode/graph-il/in.conq2 @@ -7,28 +7,14 @@ kspace_modify slab 3.0 fix conp bot electrode/conp v_vbot 1.979 couple top v_vtop etypes 5 -# get the four entries of electrode elastance matrix -variable me00 internal 0.0 -variable me01 internal 0.0 -variable me10 internal 0.0 -variable me11 internal 0.0 -fix_modify conp set me bot bot me00 -fix_modify conp set me bot top me01 -fix_modify conp set me top bot me10 -fix_modify conp set me top top me11 - -# get the 0V charges (qsb), and excess charge required to reach preset total charges -variable qsb_bot internal 0.0 -variable qsb_top internal 0.0 -fix_modify conp set qsb bot qsb_bot -fix_modify conp set qsb top qsb_top -variable qex_bot equal -1.0-v_qsb_bot # difference between desired and 0V charge -variable qex_top equal 1.0-v_qsb_top # difference between desired and 0V charge +variable qex_bot equal -1.0-f_conp[1][2] # difference between desired and 0V charge +variable qex_top equal 1.0-f_conp[2][2] # difference between desired and 0V charge # calculate imposed potential as elastance * excess charge # note: fix will wait until the run setup to look for its potential variables -variable vbot equal v_me00*v_qex_bot+v_me01*v_qex_top -variable vtop equal v_me10*v_qex_bot+v_me11*v_qex_top +# which is why we can define variable names *after* fix conp without error +variable vbot equal f_conp[1][5]*v_qex_bot+f_conp[1][6]*v_qex_top +variable vtop equal f_conp[2][5]*v_qex_bot+f_conp[2][6]*v_qex_top thermo 50 thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop v_vbot v_vtop diff --git a/examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-conq.g++.1 b/examples/PACKAGES/electrode/graph-il/log.02May2022.graph-il-conq.g++.1 similarity index 84% rename from examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-conq.g++.1 rename to examples/PACKAGES/electrode/graph-il/log.02May2022.graph-il-conq.g++.1 index 5722e357ec..ca4e9bfe71 100644 --- a/examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-conq.g++.1 +++ b/examples/PACKAGES/electrode/graph-il/log.02May2022.graph-il-conq.g++.1 @@ -67,14 +67,8 @@ kspace_modify slab 3.0 fix conq bot electrode/conq -1.0 1.979 couple top 1.0 etypes 5 # conq doesn't take symm option 832 atoms in group conp_group -# ask fix conq to output electrode potentials to internal variables -variable vbot internal 0.0 -variable vtop internal 0.0 -fix_modify conq set v bot vbot -fix_modify conq set v top vtop - thermo 50 -thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop v_vbot v_vtop +thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop f_conq[1][1] f_conq[2][1] run 500 PPPM/electrode initialization ... using 12-bit tables for long-range coulomb (src/kspace.cpp:342) @@ -109,7 +103,7 @@ Neighbor list info ... stencil: none bin: none Per MPI rank memory allocation (min/avg/max) = 56.89 | 56.89 | 56.89 Mbytes - Step Temp c_ctemp E_pair TotEng c_qbot c_qtop v_vbot v_vtop + Step Temp c_ctemp E_pair TotEng c_qbot c_qtop f_conq[1][1] f_conq[2][1] 0 0 0 25136984 25136984 -1 1 -9.931852 10.097344 50 20.206425 72.797911 25136825 25137033 -1 1 -9.4359366 9.5964514 100 55.931663 201.50563 25136587 25137163 -1 1 -8.0440112 8.1861787 @@ -121,22 +115,22 @@ Per MPI rank memory allocation (min/avg/max) = 56.89 | 56.89 | 56.89 Mbytes 400 122.8443 442.57252 25136991 25138256 -1 1 -3.4311003 3.3941657 450 128.63713 463.44243 25137048 25138373 -1 1 -4.132871 3.9852959 500 131.18361 472.61665 25137142 25138493 -1 1 -4.5104095 4.2567261 -Loop time of 48.9361 on 1 procs for 500 steps with 3776 atoms +Loop time of 42.3981 on 1 procs for 500 steps with 3776 atoms -Performance: 0.883 ns/day, 27.187 hours/ns, 10.217 timesteps/s -393.9% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 1.019 ns/day, 23.555 hours/ns, 11.793 timesteps/s +393.2% CPU use with 1 MPI tasks x no OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 17.652 | 17.652 | 17.652 | 0.0 | 36.07 -Bond | 0.0010418 | 0.0010418 | 0.0010418 | 0.0 | 0.00 -Kspace | 16.566 | 16.566 | 16.566 | 0.0 | 33.85 -Neigh | 0.21584 | 0.21584 | 0.21584 | 0.0 | 0.44 -Comm | 0.04167 | 0.04167 | 0.04167 | 0.0 | 0.09 -Output | 0.0014585 | 0.0014585 | 0.0014585 | 0.0 | 0.00 -Modify | 14.445 | 14.445 | 14.445 | 0.0 | 29.52 -Other | | 0.0134 | | | 0.03 +Pair | 15.337 | 15.337 | 15.337 | 0.0 | 36.17 +Bond | 0.00098464 | 0.00098464 | 0.00098464 | 0.0 | 0.00 +Kspace | 16.11 | 16.11 | 16.11 | 0.0 | 38.00 +Neigh | 0.19136 | 0.19136 | 0.19136 | 0.0 | 0.45 +Comm | 0.039778 | 0.039778 | 0.039778 | 0.0 | 0.09 +Output | 0.0015193 | 0.0015193 | 0.0015193 | 0.0 | 0.00 +Modify | 10.705 | 10.705 | 10.705 | 0.0 | 25.25 +Other | | 0.01253 | | | 0.03 Nlocal: 3776 ave 3776 max 3776 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -150,4 +144,4 @@ Ave neighs/atom = 456.98835 Ave special neighs/atom = 0.50847458 Neighbor list builds = 6 Dangerous builds = 0 -Total wall time: 0:01:43 +Total wall time: 0:01:34 diff --git a/examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-conq.g++.4 b/examples/PACKAGES/electrode/graph-il/log.02May2022.graph-il-conq.g++.4 similarity index 84% rename from examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-conq.g++.4 rename to examples/PACKAGES/electrode/graph-il/log.02May2022.graph-il-conq.g++.4 index 96343114e6..d44f36af57 100644 --- a/examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-conq.g++.4 +++ b/examples/PACKAGES/electrode/graph-il/log.02May2022.graph-il-conq.g++.4 @@ -39,7 +39,7 @@ Finding 1-2 1-3 1-4 neighbors ... 1 = max # of 1-4 neighbors 2 = max # of special neighbors special bonds CPU = 0.001 seconds - read_data CPU = 0.020 seconds + read_data CPU = 0.018 seconds group bot molecule 641 416 atoms in group bot @@ -68,14 +68,8 @@ kspace_modify slab 3.0 fix conq bot electrode/conq -1.0 1.979 couple top 1.0 etypes 5 # conq doesn't take symm option 832 atoms in group conp_group -# ask fix conq to output electrode potentials to internal variables -variable vbot internal 0.0 -variable vtop internal 0.0 -fix_modify conq set v bot vbot -fix_modify conq set v top vtop - thermo 50 -thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop v_vbot v_vtop +thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop f_conq[1][1] f_conq[2][1] run 500 PPPM/electrode initialization ... using 12-bit tables for long-range coulomb (src/kspace.cpp:342) @@ -110,7 +104,7 @@ Neighbor list info ... stencil: none bin: none Per MPI rank memory allocation (min/avg/max) = 23.63 | 27.46 | 31.29 Mbytes - Step Temp c_ctemp E_pair TotEng c_qbot c_qtop v_vbot v_vtop + Step Temp c_ctemp E_pair TotEng c_qbot c_qtop f_conq[1][1] f_conq[2][1] 0 0 0 25136984 25136984 -1 1 -9.931852 10.097344 50 20.206425 72.797911 25136825 25137033 -1 1 -9.4359366 9.5964514 100 55.931663 201.50563 25136587 25137163 -1 1 -8.0440112 8.1861787 @@ -122,22 +116,22 @@ Per MPI rank memory allocation (min/avg/max) = 23.63 | 27.46 | 31.29 Mbytes 400 122.8443 442.57252 25136991 25138256 -1 1 -3.4311003 3.3941657 450 128.63713 463.44243 25137048 25138373 -1 1 -4.132871 3.9852959 500 131.18361 472.61665 25137142 25138493 -1 1 -4.5104095 4.2567261 -Loop time of 28.8336 on 4 procs for 500 steps with 3776 atoms +Loop time of 23.02 on 4 procs for 500 steps with 3776 atoms -Performance: 1.498 ns/day, 16.019 hours/ns, 17.341 timesteps/s -94.1% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 1.877 ns/day, 12.789 hours/ns, 21.720 timesteps/s +93.3% CPU use with 4 MPI tasks x no OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 5.7721 | 5.9353 | 6.144 | 6.0 | 20.58 -Bond | 0.00057855 | 0.00067043 | 0.00074793 | 0.0 | 0.00 -Kspace | 13.485 | 13.694 | 13.857 | 4.0 | 47.49 -Neigh | 0.092021 | 0.092044 | 0.092068 | 0.0 | 0.32 -Comm | 0.11486 | 0.11638 | 0.11801 | 0.4 | 0.40 -Output | 0.00090452 | 0.001109 | 0.0017097 | 1.0 | 0.00 -Modify | 8.974 | 8.9761 | 8.978 | 0.1 | 31.13 -Other | | 0.01837 | | | 0.06 +Pair | 4.0178 | 4.1947 | 4.3354 | 6.8 | 18.22 +Bond | 0.00061117 | 0.00068637 | 0.00072249 | 0.0 | 0.00 +Kspace | 11.853 | 11.994 | 12.171 | 4.0 | 52.10 +Neigh | 0.060425 | 0.060489 | 0.06052 | 0.0 | 0.26 +Comm | 0.091334 | 0.092251 | 0.093191 | 0.3 | 0.40 +Output | 0.00067425 | 0.00089541 | 0.0014804 | 0.0 | 0.00 +Modify | 6.6612 | 6.662 | 6.6627 | 0.0 | 28.94 +Other | | 0.01505 | | | 0.07 Nlocal: 944 ave 948 max 940 min Histogram: 1 0 0 1 0 0 1 0 0 1 @@ -151,4 +145,4 @@ Ave neighs/atom = 456.98835 Ave special neighs/atom = 0.50847458 Neighbor list builds = 6 Dangerous builds = 0 -Total wall time: 0:00:51 +Total wall time: 0:00:44 diff --git a/examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-conq2.g++.1 b/examples/PACKAGES/electrode/graph-il/log.02May2022.graph-il-conq2.g++.1 similarity index 78% rename from examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-conq2.g++.1 rename to examples/PACKAGES/electrode/graph-il/log.02May2022.graph-il-conq2.g++.1 index 4465ed311d..cc6fa2dce8 100644 --- a/examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-conq2.g++.1 +++ b/examples/PACKAGES/electrode/graph-il/log.02May2022.graph-il-conq2.g++.1 @@ -38,7 +38,7 @@ Finding 1-2 1-3 1-4 neighbors ... 1 = max # of 1-4 neighbors 2 = max # of special neighbors special bonds CPU = 0.001 seconds - read_data CPU = 0.031 seconds + read_data CPU = 0.012 seconds group bot molecule 641 416 atoms in group bot @@ -67,28 +67,14 @@ kspace_modify slab 3.0 fix conp bot electrode/conp v_vbot 1.979 couple top v_vtop etypes 5 832 atoms in group conp_group -# get the four entries of electrode elastance matrix -variable me00 internal 0.0 -variable me01 internal 0.0 -variable me10 internal 0.0 -variable me11 internal 0.0 -fix_modify conp set me bot bot me00 -fix_modify conp set me bot top me01 -fix_modify conp set me top bot me10 -fix_modify conp set me top top me11 - -# get the 0V charges (qsb), and excess charge required to reach preset total charges -variable qsb_bot internal 0.0 -variable qsb_top internal 0.0 -fix_modify conp set qsb bot qsb_bot -fix_modify conp set qsb top qsb_top -variable qex_bot equal -1.0-v_qsb_bot # difference between desired and 0V charge -variable qex_top equal 1.0-v_qsb_top # difference between desired and 0V charge +variable qex_bot equal -1.0-f_conp[1][2] # difference between desired and 0V charge +variable qex_top equal 1.0-f_conp[2][2] # difference between desired and 0V charge # calculate imposed potential as elastance * excess charge # note: fix will wait until the run setup to look for its potential variables -variable vbot equal v_me00*v_qex_bot+v_me01*v_qex_top -variable vtop equal v_me10*v_qex_bot+v_me11*v_qex_top +# which is why we can define variable names *after* fix conp without error +variable vbot equal f_conp[1][5]*v_qex_bot+f_conp[1][6]*v_qex_top +variable vtop equal f_conp[2][5]*v_qex_bot+f_conp[2][6]*v_qex_top thermo 50 thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop v_vbot v_vtop @@ -138,22 +124,22 @@ Per MPI rank memory allocation (min/avg/max) = 56.89 | 56.89 | 56.89 Mbytes 400 122.8443 442.57252 25136991 25138256 -1 1 -3.4311003 3.3941657 450 128.63713 463.44243 25137048 25138373 -1 1 -4.132871 3.9852959 500 131.18361 472.61665 25137142 25138493 -1 1 -4.5104095 4.2567261 -Loop time of 62.9692 on 1 procs for 500 steps with 3776 atoms +Loop time of 42.7942 on 1 procs for 500 steps with 3776 atoms -Performance: 0.686 ns/day, 34.983 hours/ns, 7.940 timesteps/s -393.7% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 1.009 ns/day, 23.775 hours/ns, 11.684 timesteps/s +394.4% CPU use with 1 MPI tasks x no OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 20.307 | 20.307 | 20.307 | 0.0 | 32.25 -Bond | 0.0020074 | 0.0020074 | 0.0020074 | 0.0 | 0.00 -Kspace | 23.562 | 23.562 | 23.562 | 0.0 | 37.42 -Neigh | 0.26149 | 0.26149 | 0.26149 | 0.0 | 0.42 -Comm | 0.059436 | 0.059436 | 0.059436 | 0.0 | 0.09 -Output | 0.0023888 | 0.0023888 | 0.0023888 | 0.0 | 0.00 -Modify | 18.756 | 18.756 | 18.756 | 0.0 | 29.79 -Other | | 0.01897 | | | 0.03 +Pair | 15.743 | 15.743 | 15.743 | 0.0 | 36.79 +Bond | 0.00097932 | 0.00097932 | 0.00097932 | 0.0 | 0.00 +Kspace | 16.028 | 16.028 | 16.028 | 0.0 | 37.45 +Neigh | 0.21147 | 0.21147 | 0.21147 | 0.0 | 0.49 +Comm | 0.040091 | 0.040091 | 0.040091 | 0.0 | 0.09 +Output | 0.001878 | 0.001878 | 0.001878 | 0.0 | 0.00 +Modify | 10.756 | 10.756 | 10.756 | 0.0 | 25.13 +Other | | 0.01243 | | | 0.03 Nlocal: 3776 ave 3776 max 3776 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -167,4 +153,4 @@ Ave neighs/atom = 456.98835 Ave special neighs/atom = 0.50847458 Neighbor list builds = 6 Dangerous builds = 0 -Total wall time: 0:02:26 +Total wall time: 0:01:35 diff --git a/examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-conq2.g++.4 b/examples/PACKAGES/electrode/graph-il/log.02May2022.graph-il-conq2.g++.4 similarity index 78% rename from examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-conq2.g++.4 rename to examples/PACKAGES/electrode/graph-il/log.02May2022.graph-il-conq2.g++.4 index cf8ddf60a3..2d34c40f79 100644 --- a/examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-conq2.g++.4 +++ b/examples/PACKAGES/electrode/graph-il/log.02May2022.graph-il-conq2.g++.4 @@ -68,28 +68,14 @@ kspace_modify slab 3.0 fix conp bot electrode/conp v_vbot 1.979 couple top v_vtop etypes 5 832 atoms in group conp_group -# get the four entries of electrode elastance matrix -variable me00 internal 0.0 -variable me01 internal 0.0 -variable me10 internal 0.0 -variable me11 internal 0.0 -fix_modify conp set me bot bot me00 -fix_modify conp set me bot top me01 -fix_modify conp set me top bot me10 -fix_modify conp set me top top me11 - -# get the 0V charges (qsb), and excess charge required to reach preset total charges -variable qsb_bot internal 0.0 -variable qsb_top internal 0.0 -fix_modify conp set qsb bot qsb_bot -fix_modify conp set qsb top qsb_top -variable qex_bot equal -1.0-v_qsb_bot # difference between desired and 0V charge -variable qex_top equal 1.0-v_qsb_top # difference between desired and 0V charge +variable qex_bot equal -1.0-f_conp[1][2] # difference between desired and 0V charge +variable qex_top equal 1.0-f_conp[2][2] # difference between desired and 0V charge # calculate imposed potential as elastance * excess charge # note: fix will wait until the run setup to look for its potential variables -variable vbot equal v_me00*v_qex_bot+v_me01*v_qex_top -variable vtop equal v_me10*v_qex_bot+v_me11*v_qex_top +# which is why we can define variable names *after* fix conp without error +variable vbot equal f_conp[1][5]*v_qex_bot+f_conp[1][6]*v_qex_top +variable vtop equal f_conp[2][5]*v_qex_bot+f_conp[2][6]*v_qex_top thermo 50 thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop v_vbot v_vtop @@ -139,22 +125,22 @@ Per MPI rank memory allocation (min/avg/max) = 23.63 | 27.46 | 31.29 Mbytes 400 122.8443 442.57252 25136991 25138256 -1 1 -3.4311003 3.3941657 450 128.63713 463.44243 25137048 25138373 -1 1 -4.132871 3.9852959 500 131.18361 472.61665 25137142 25138493 -1 1 -4.5104095 4.2567261 -Loop time of 33.4031 on 4 procs for 500 steps with 3776 atoms +Loop time of 23.4395 on 4 procs for 500 steps with 3776 atoms -Performance: 1.293 ns/day, 18.557 hours/ns, 14.969 timesteps/s -94.3% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 1.843 ns/day, 13.022 hours/ns, 21.331 timesteps/s +93.3% CPU use with 4 MPI tasks x no OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 7.1262 | 7.3913 | 7.611 | 6.8 | 22.13 -Bond | 0.0007191 | 0.00079089 | 0.00087005 | 0.0 | 0.00 -Kspace | 15.139 | 15.358 | 15.623 | 4.7 | 45.98 -Neigh | 0.10374 | 0.10377 | 0.10383 | 0.0 | 0.31 -Comm | 0.14245 | 0.14353 | 0.14563 | 0.3 | 0.43 -Output | 0.0012987 | 0.0015671 | 0.0022434 | 1.0 | 0.00 -Modify | 10.381 | 10.383 | 10.384 | 0.0 | 31.08 -Other | | 0.02134 | | | 0.06 +Pair | 4.1961 | 4.3786 | 4.5496 | 7.6 | 18.68 +Bond | 0.00057323 | 0.00065148 | 0.00075008 | 0.0 | 0.00 +Kspace | 11.998 | 12.168 | 12.35 | 4.6 | 51.91 +Neigh | 0.064936 | 0.064967 | 0.064998 | 0.0 | 0.28 +Comm | 0.089828 | 0.091261 | 0.092661 | 0.4 | 0.39 +Output | 0.00082362 | 0.0010221 | 0.0015517 | 1.0 | 0.00 +Modify | 6.7177 | 6.7195 | 6.7212 | 0.1 | 28.67 +Other | | 0.01535 | | | 0.07 Nlocal: 944 ave 948 max 940 min Histogram: 1 0 0 1 0 0 1 0 0 1 @@ -168,4 +154,4 @@ Ave neighs/atom = 456.98835 Ave special neighs/atom = 0.50847458 Neighbor list builds = 6 Dangerous builds = 0 -Total wall time: 0:01:01 +Total wall time: 0:00:44 diff --git a/src/ELECTRODE/fix_electrode_conp.cpp b/src/ELECTRODE/fix_electrode_conp.cpp index 5ac28cd121..cf76d83b28 100644 --- a/src/ELECTRODE/fix_electrode_conp.cpp +++ b/src/ELECTRODE/fix_electrode_conp.cpp @@ -22,8 +22,8 @@ #include "compute.h" #include "domain.h" #include "electrode_accel_interface.h" -#include "electrode_matrix.h" #include "electrode_math.h" +#include "electrode_matrix.h" #include "electrode_vector.h" #include "error.h" #include "force.h" @@ -73,7 +73,7 @@ FixElectrodeConp::FixElectrodeConp(LAMMPS *lmp, int narg, char **arg) : ffield = false; thermo_time = 0.; scalar_flag = 1; - vector_flag = 1; + array_flag = 1; top_group = 0; intelflag = false; tfflag = false; @@ -222,7 +222,8 @@ FixElectrodeConp::FixElectrodeConp(LAMMPS *lmp, int narg, char **arg) : "Cannot write elastance matrix if reading capacitance matrix " "from file"); num_of_groups = static_cast(groups.size()); - size_vector = num_of_groups; + size_array_rows = num_of_groups; + size_array_cols = 2 + 2 * num_of_groups; // check groups are consistent int *mask = atom->mask; @@ -260,12 +261,6 @@ FixElectrodeConp::FixElectrodeConp(LAMMPS *lmp, int narg, char **arg) : /* ---------------------------------------------------------------------- */ -// 0 1 2 3 return 4 if successful -// fix_modify fxupdate set v [group] [var] -// fix_modify fxupdate set qsb [group] [var] -// 0 1 2 3 4 return 5 if successful -// fix_modify fxupdate set mc [group1] [group2] [var] -// fix_modify fxupdate set me [group1] [group2] [var] int FixElectrodeConp::modify_param(int narg, char **arg) { if (strcmp(arg[0], "tf") == 0) { @@ -306,49 +301,6 @@ int FixElectrodeConp::modify_param(int narg, char **arg) timer_flag = utils::logical(FLERR, arg[1], false, lmp); return 2; - } else if (strcmp(arg[0], "set") == 0) { - if (strcmp(arg[1], "v") == 0 || strcmp(arg[1], "qsb") == 0) { - if (narg != 4) - error->all(FLERR, - fmt::format("Incorrect number of arguments for fix_modify set {}", arg[1])); - int outputgrp = groupnum_from_name(arg[2]); - int outputvar = input->variable->find(arg[3]); - if (outputvar < 0) - error->all(FLERR, - fmt::format("Variable {} for fix_modify electrode does not exist", arg[3])); - if (!input->variable->internalstyle(outputvar)) - error->all(FLERR, - fmt::format("Variable {} for fix_modify electrode is invalid style", arg[3])); - if (strcmp(arg[1], "v") == 0) - setvars_types.push_back(V); - else - setvars_types.push_back(QSB); - setvars_groups.push_back(outputgrp); - setvars_vars.push_back(outputvar); - return 4; - } else if (strcmp(arg[1], "mc") == 0 || strcmp(arg[1], "me") == 0) { - if (narg != 5) - error->all(FLERR, - fmt::format("Incorrect number of arguments for fix_modify set {}", arg[1])); - int outputgrpi = groupnum_from_name(arg[2]); - int outputgrpj = groupnum_from_name(arg[3]); - int outputgrpij = outputgrpi * num_of_groups + outputgrpj; - int outputvar = input->variable->find(arg[4]); - if (outputvar < 0) - error->all(FLERR, - fmt::format("Variable {} for fix_modify electrode does not exist", arg[4])); - if (!input->variable->internalstyle(outputvar)) - error->all(FLERR, - fmt::format("Variable {} for fix_modify electrode is invalid style", arg[4])); - if (strcmp(arg[1], "mc") == 0) - setvars_types.push_back(MC); - else - setvars_types.push_back(ME); - setvars_groups.push_back(outputgrpij); - setvars_vars.push_back(outputvar); - return 5; - } else - error->all(FLERR, "Invalid set option for fix_modify electrode"); } else error->all(FLERR, "Invalid argument for fix_modify electrode"); return 0; @@ -452,10 +404,6 @@ void FixElectrodeConp::setup_post_neighbor() int *mask = atom->mask; tagint *tag = atom->tag; - // setvars asserts: - assert(setvars_groups.size() == setvars_vars.size()); - assert(setvars_groups.size() == setvars_types.size()); - // if Thomas-Fermi, make sure all electrode atoms have parameters if (tfflag) { int unset_tf = 0; @@ -539,8 +487,8 @@ void FixElectrodeConp::setup_post_neighbor() compute_macro_matrices(); MPI_Barrier(world); if (timer_flag && (comm->me == 0)) - utils::logmesg(lmp, - fmt::format("SD-vector and macro matrices time: {:.4g} s\n", MPI_Wtime() - start)); + utils::logmesg( + lmp, fmt::format("SD-vector and macro matrices time: {:.4g} s\n", MPI_Wtime() - start)); // initial charges and b vector update_charges(); @@ -789,9 +737,7 @@ void FixElectrodeConp::update_charges() gather_elevec(charge_iele); MPI_Allreduce(MPI_IN_PLACE, &sb_charges.front(), num_of_groups, MPI_DOUBLE, MPI_SUM, world); - update_setvars(QSB); - update_psi(); // use for equal-style and conq - update_setvars(V); // push psi into 'fix_modify set' vars + update_psi(); // use for equal-style and conq for (int g = 0; g < num_of_groups; g++) for (int j = 0; j < ngroup; j++) { charge_iele[j] += sd_vectors[g][j] * group_psi[g]; } @@ -820,34 +766,6 @@ void FixElectrodeConp::update_psi() /* ---------------------------------------------------------------------- */ -void FixElectrodeConp::update_setvars(int vtype) -{ - int num_of_vars = static_cast(setvars_groups.size()); - for (int v = 0; v < num_of_vars; v++) { - if (vtype != setvars_types[v]) continue; - switch (vtype) { - case V: - input->variable->internal_set(setvars_vars[v], group_psi[setvars_groups[v]]); - break; - case QSB: - input->variable->internal_set(setvars_vars[v], sb_charges[setvars_groups[v]]); - break; - case MC: { - int groupi = setvars_groups[v] / num_of_groups; - int groupj = setvars_groups[v] % num_of_groups; - input->variable->internal_set(setvars_vars[v], macro_capacitance[groupi][groupj]); - } break; - case ME: { - int groupi = setvars_groups[v] / num_of_groups; - int groupj = setvars_groups[v] % num_of_groups; - input->variable->internal_set(setvars_vars[v], macro_elastance[groupi][groupj]); - } - } - } -} - -/* ---------------------------------------------------------------------- */ - void FixElectrodeConp::compute_macro_matrices() { macro_capacitance = @@ -902,9 +820,6 @@ void FixElectrodeConp::compute_macro_matrices() } } } - - update_setvars(MC); - update_setvars(ME); } /* ---------------------------------------------------------------------- */ @@ -915,9 +830,22 @@ double FixElectrodeConp::compute_scalar() } /* ---------------------------------------------------------------------- */ -double FixElectrodeConp::compute_vector(int i) +double FixElectrodeConp::compute_array(int i, int j) { - return group_psi[i]; + if (i < 0 || i >= num_of_groups) error->all(FLERR, "invalid fix electrode array row reference"); + if (j < 0) + error->all(FLERR, "invalid fix electrode array column reference"); + else if (j == 0) + return group_psi[i]; + else if (j == 1) + return sb_charges[i]; + else if (j <= num_of_groups + 1) + return macro_capacitance[i][j - 2]; + else if (j <= 2 * num_of_groups + 1) + return macro_elastance[i][j - num_of_groups - 2]; + else + error->all(FLERR, "invalid fix electrode array column reference"); + return 0.; // avoid -Wreturn-type warning } /* ---------------------------------------------------------------------- */ diff --git a/src/ELECTRODE/fix_electrode_conp.h b/src/ELECTRODE/fix_electrode_conp.h index 5113ad46cb..83a54a52ab 100644 --- a/src/ELECTRODE/fix_electrode_conp.h +++ b/src/ELECTRODE/fix_electrode_conp.h @@ -46,7 +46,7 @@ class FixElectrodeConp : public Fix { void pre_force(int) override; void pre_reverse(int, int) override; double compute_scalar() override; - double compute_vector(int) override; + double compute_array(int, int) override; int modify_param(int, char **) override; int modify_param(const std::string &); void init() override; @@ -104,8 +104,6 @@ class FixElectrodeConp : public Fix { void read_from_file(std::string input_file, double **, const std::string &); void compute_sd_vectors(); void compute_sd_vectors_ffield(); - std::vector setvars_types, setvars_groups, setvars_vars; - void update_setvars(int); int groupnum_from_name(char *); double evscale; class Pair *pair; From 272afc953e400c3296e99d82b9f408a5986fb9cf Mon Sep 17 00:00:00 2001 From: srtee Date: Fri, 27 May 2022 21:58:16 +1000 Subject: [PATCH 02/46] output scalar, vector and array; updated docs and examples --- doc/src/fix_electrode_conp.rst | 53 +++++++++++++++---- examples/PACKAGES/electrode/graph-il/in.conq | 2 +- examples/PACKAGES/electrode/graph-il/in.conq2 | 8 +-- ...++.1 => log.27May2022.graph-il-conq.g++.1} | 32 +++++------ ...++.4 => log.27May2022.graph-il-conq.g++.4} | 28 +++++----- ...+.1 => log.27May2022.graph-il-conq2.g++.1} | 34 ++++++------ ...+.4 => log.27May2022.graph-il-conq2.g++.4} | 34 ++++++------ src/ELECTRODE/fix_electrode_conp.cpp | 39 ++++++++------ src/ELECTRODE/fix_electrode_conp.h | 1 + 9 files changed, 136 insertions(+), 95 deletions(-) rename examples/PACKAGES/electrode/graph-il/{log.02May2022.graph-il-conq.g++.1 => log.27May2022.graph-il-conq.g++.1} (85%) rename examples/PACKAGES/electrode/graph-il/{log.02May2022.graph-il-conq.g++.4 => log.27May2022.graph-il-conq.g++.4} (86%) rename examples/PACKAGES/electrode/graph-il/{log.02May2022.graph-il-conq2.g++.1 => log.27May2022.graph-il-conq2.g++.1} (84%) rename examples/PACKAGES/electrode/graph-il/{log.02May2022.graph-il-conq2.g++.4 => log.27May2022.graph-il-conq2.g++.4} (84%) diff --git a/doc/src/fix_electrode_conp.rst b/doc/src/fix_electrode_conp.rst index 1933d43879..668b2371b9 100644 --- a/doc/src/fix_electrode_conp.rst +++ b/doc/src/fix_electrode_conp.rst @@ -31,7 +31,7 @@ Syntax * ID, group-ID are documented in fix command * mode = electrode/conp or electrode/conq or electrode/thermo -* potential = electrode potential +* potential = electrode potential (number, or equal-style variable) * charge = electrode charge * eta = reciprocal width of electrode charge smearing * T_v = temperature of thermo-potentiostat @@ -86,6 +86,22 @@ fix electrode/thermo implements a thermo-potentiostat :ref:`(Deissenbeck) to be specified using the temp keyword. Currently, only two electrodes are possible with this style. +For all three fixes, any potential (or charge for *conq*) can be specified as an +equal-style variable prefixed with "v_". For example, the following code will +ramp the potential difference between electrodes from 0.0V to 2.0V over the +course of the simulation: + +.. code-block:: LAMMPS + + fix fxconp bot electrode/conp 0.0 1.805 couple top v_v symm on + variable v equal ramp(0.0, 2.0) + +Note that these fixes only parse their supplied variable name when starting a +run, and so these fixes will accept equal-style variables defined *after* the +fix definition, including variables dependent on the fix's own output. For an +advanced example of this see the in.conq2 input file in the directory +examples/PACKAGES/electrode/graph-il. + This fix necessitates the use of a long range solver that calculates and provides the matrix of electrode-electrode interactions and a vector of electrode-electrolyte interactions. The Kspace styles *ewald/electrode*, *pppm/electrode* and @@ -132,12 +148,27 @@ file, for code developers to track optimization. ---------- -These fixes compute a global array which can be accessed by various -:doc:`output commands `. The array has *N* rows and *2N+2* -columns, where *N* is the number of electrode groups managed by the fix. For the -*I*-th row of the array, the elements are: +These fixes compute a global (extensive) scalar, a global (intensive) vector, +and a global array, which can be accessed by various +:doc:`output commands `. + +The global scalar outputs the energy added to the system by this fix, which is +the negative of the total charge on each electrode multiplied by that +electrode's potential. + +The global vector outputs the potential on each electrode (and thus has *N* +entries if the fix manages *N* electrode groups), in :doc:`units ` of +electric field multiplied by distance (thus volts for *real* and *metal* units). +The electrode groups' ordering follows the order in which they were input in the +fix command using *couple*. The global vector output is useful for +*fix electrode/conq* and *fix electrode/thermo*, +where potential is dynamically updated based on electrolyte configuration +instead of being directly set. + +The global array has *N* rows and *2N+1* columns, where the fix manages *N* +electrode groups managed by the fix. For the *I*-th row of the array, the +elements are: -* array[I][1] = potential instantaneously applied to group *I* * array[I][1] = total charge that group *I* would have had *if it were at 0 V applied potential* * array[I][2 to *N* + 1] = the *N* entries of the *I*-th row of the electrode @@ -145,11 +176,6 @@ columns, where *N* is the number of electrode groups managed by the fix. For the * array[I][*N* + 2 to *2N* + 1] = the *N* entries of the *I*-th row of the electrode elastance matrix (the inverse of the electrode capacitance matrix) -The first column is handy for *fix electrode/conq* and *fix -electrode/thermo* simulations, to output the potentials dynamically calculated and -imposed by the fix (see following formula). The potential is in units of electric field times -distance, which gives volts for most (but not all) :doc:`units ` settings. - The :math:`N \times N` electrode capacitance matrix, denoted :math:`\mathbf{C}` in the following equation, summarizes how the total charge induced on each electrode (:math:`\mathbf{Q}` as an *N*-vector) is related to the potential on each @@ -167,6 +193,11 @@ the electrode capacitance matrix would be singular, and thus its last row is replaced with *N* copies of its top-left entry (:math:`\mathbf{C}_{11}`) for invertibility. +The global array output is mainly useful for quickly determining the 'vacuum +capacitance' of the system (capacitance with only electrodes, no electrolyte), +and can also be used for advanced simulations setting the potential as some +function of the charge-at-0V (such as in the in.conq2 example mentioned above). + ---------- Restrictions diff --git a/examples/PACKAGES/electrode/graph-il/in.conq b/examples/PACKAGES/electrode/graph-il/in.conq index 7db9e4cf18..088cf0a8ac 100644 --- a/examples/PACKAGES/electrode/graph-il/in.conq +++ b/examples/PACKAGES/electrode/graph-il/in.conq @@ -8,5 +8,5 @@ kspace_modify slab 3.0 fix conq bot electrode/conq -1.0 1.979 couple top 1.0 etypes 5 # conq doesn't take symm option thermo 50 -thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop f_conq[1][1] f_conq[2][1] +thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop f_conq[1] f_conq[2] run 500 diff --git a/examples/PACKAGES/electrode/graph-il/in.conq2 b/examples/PACKAGES/electrode/graph-il/in.conq2 index afb9f94c52..4f84322196 100644 --- a/examples/PACKAGES/electrode/graph-il/in.conq2 +++ b/examples/PACKAGES/electrode/graph-il/in.conq2 @@ -7,14 +7,14 @@ kspace_modify slab 3.0 fix conp bot electrode/conp v_vbot 1.979 couple top v_vtop etypes 5 -variable qex_bot equal -1.0-f_conp[1][2] # difference between desired and 0V charge -variable qex_top equal 1.0-f_conp[2][2] # difference between desired and 0V charge +variable qex_bot equal -1.0-f_conp[1][1] # difference between desired and 0V charge +variable qex_top equal 1.0-f_conp[2][1] # difference between desired and 0V charge # calculate imposed potential as elastance * excess charge # note: fix will wait until the run setup to look for its potential variables # which is why we can define variable names *after* fix conp without error -variable vbot equal f_conp[1][5]*v_qex_bot+f_conp[1][6]*v_qex_top -variable vtop equal f_conp[2][5]*v_qex_bot+f_conp[2][6]*v_qex_top +variable vbot equal f_conp[1][4]*v_qex_bot+f_conp[1][5]*v_qex_top +variable vtop equal f_conp[2][4]*v_qex_bot+f_conp[2][5]*v_qex_top thermo 50 thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop v_vbot v_vtop diff --git a/examples/PACKAGES/electrode/graph-il/log.02May2022.graph-il-conq.g++.1 b/examples/PACKAGES/electrode/graph-il/log.27May2022.graph-il-conq.g++.1 similarity index 85% rename from examples/PACKAGES/electrode/graph-il/log.02May2022.graph-il-conq.g++.1 rename to examples/PACKAGES/electrode/graph-il/log.27May2022.graph-il-conq.g++.1 index ca4e9bfe71..0475fb07b6 100644 --- a/examples/PACKAGES/electrode/graph-il/log.02May2022.graph-il-conq.g++.1 +++ b/examples/PACKAGES/electrode/graph-il/log.27May2022.graph-il-conq.g++.1 @@ -38,7 +38,7 @@ Finding 1-2 1-3 1-4 neighbors ... 1 = max # of 1-4 neighbors 2 = max # of special neighbors special bonds CPU = 0.001 seconds - read_data CPU = 0.012 seconds + read_data CPU = 0.014 seconds group bot molecule 641 416 atoms in group bot @@ -56,7 +56,7 @@ fix shake bmi shake 1e-4 20 0 b 1 2 a 1 0 = # of size 3 clusters 0 = # of size 4 clusters 320 = # of frozen angles - find clusters CPU = 0.000 seconds + find clusters CPU = 0.001 seconds variable q atom q compute qtop top reduce sum v_q @@ -68,7 +68,7 @@ fix conq bot electrode/conq -1.0 1.979 couple top 1.0 etypes 5 # conq doesn't ta 832 atoms in group conp_group thermo 50 -thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop f_conq[1][1] f_conq[2][1] +thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop f_conq[1] f_conq[2] run 500 PPPM/electrode initialization ... using 12-bit tables for long-range coulomb (src/kspace.cpp:342) @@ -103,7 +103,7 @@ Neighbor list info ... stencil: none bin: none Per MPI rank memory allocation (min/avg/max) = 56.89 | 56.89 | 56.89 Mbytes - Step Temp c_ctemp E_pair TotEng c_qbot c_qtop f_conq[1][1] f_conq[2][1] + Step Temp c_ctemp E_pair TotEng c_qbot c_qtop f_conq[1] f_conq[2] 0 0 0 25136984 25136984 -1 1 -9.931852 10.097344 50 20.206425 72.797911 25136825 25137033 -1 1 -9.4359366 9.5964514 100 55.931663 201.50563 25136587 25137163 -1 1 -8.0440112 8.1861787 @@ -115,22 +115,22 @@ Per MPI rank memory allocation (min/avg/max) = 56.89 | 56.89 | 56.89 Mbytes 400 122.8443 442.57252 25136991 25138256 -1 1 -3.4311003 3.3941657 450 128.63713 463.44243 25137048 25138373 -1 1 -4.132871 3.9852959 500 131.18361 472.61665 25137142 25138493 -1 1 -4.5104095 4.2567261 -Loop time of 42.3981 on 1 procs for 500 steps with 3776 atoms +Loop time of 43.3117 on 1 procs for 500 steps with 3776 atoms -Performance: 1.019 ns/day, 23.555 hours/ns, 11.793 timesteps/s -393.2% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 0.997 ns/day, 24.062 hours/ns, 11.544 timesteps/s +394.5% CPU use with 1 MPI tasks x no OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 15.337 | 15.337 | 15.337 | 0.0 | 36.17 -Bond | 0.00098464 | 0.00098464 | 0.00098464 | 0.0 | 0.00 -Kspace | 16.11 | 16.11 | 16.11 | 0.0 | 38.00 -Neigh | 0.19136 | 0.19136 | 0.19136 | 0.0 | 0.45 -Comm | 0.039778 | 0.039778 | 0.039778 | 0.0 | 0.09 -Output | 0.0015193 | 0.0015193 | 0.0015193 | 0.0 | 0.00 -Modify | 10.705 | 10.705 | 10.705 | 0.0 | 25.25 -Other | | 0.01253 | | | 0.03 +Pair | 15.554 | 15.554 | 15.554 | 0.0 | 35.91 +Bond | 0.00094737 | 0.00094737 | 0.00094737 | 0.0 | 0.00 +Kspace | 16.502 | 16.502 | 16.502 | 0.0 | 38.10 +Neigh | 0.20285 | 0.20285 | 0.20285 | 0.0 | 0.47 +Comm | 0.039776 | 0.039776 | 0.039776 | 0.0 | 0.09 +Output | 0.0014342 | 0.0014342 | 0.0014342 | 0.0 | 0.00 +Modify | 10.998 | 10.998 | 10.998 | 0.0 | 25.39 +Other | | 0.01261 | | | 0.03 Nlocal: 3776 ave 3776 max 3776 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -144,4 +144,4 @@ Ave neighs/atom = 456.98835 Ave special neighs/atom = 0.50847458 Neighbor list builds = 6 Dangerous builds = 0 -Total wall time: 0:01:34 +Total wall time: 0:01:38 diff --git a/examples/PACKAGES/electrode/graph-il/log.02May2022.graph-il-conq.g++.4 b/examples/PACKAGES/electrode/graph-il/log.27May2022.graph-il-conq.g++.4 similarity index 86% rename from examples/PACKAGES/electrode/graph-il/log.02May2022.graph-il-conq.g++.4 rename to examples/PACKAGES/electrode/graph-il/log.27May2022.graph-il-conq.g++.4 index d44f36af57..ba028200d9 100644 --- a/examples/PACKAGES/electrode/graph-il/log.02May2022.graph-il-conq.g++.4 +++ b/examples/PACKAGES/electrode/graph-il/log.27May2022.graph-il-conq.g++.4 @@ -39,7 +39,7 @@ Finding 1-2 1-3 1-4 neighbors ... 1 = max # of 1-4 neighbors 2 = max # of special neighbors special bonds CPU = 0.001 seconds - read_data CPU = 0.018 seconds + read_data CPU = 0.015 seconds group bot molecule 641 416 atoms in group bot @@ -69,7 +69,7 @@ fix conq bot electrode/conq -1.0 1.979 couple top 1.0 etypes 5 # conq doesn't ta 832 atoms in group conp_group thermo 50 -thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop f_conq[1][1] f_conq[2][1] +thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop f_conq[1] f_conq[2] run 500 PPPM/electrode initialization ... using 12-bit tables for long-range coulomb (src/kspace.cpp:342) @@ -104,7 +104,7 @@ Neighbor list info ... stencil: none bin: none Per MPI rank memory allocation (min/avg/max) = 23.63 | 27.46 | 31.29 Mbytes - Step Temp c_ctemp E_pair TotEng c_qbot c_qtop f_conq[1][1] f_conq[2][1] + Step Temp c_ctemp E_pair TotEng c_qbot c_qtop f_conq[1] f_conq[2] 0 0 0 25136984 25136984 -1 1 -9.931852 10.097344 50 20.206425 72.797911 25136825 25137033 -1 1 -9.4359366 9.5964514 100 55.931663 201.50563 25136587 25137163 -1 1 -8.0440112 8.1861787 @@ -116,22 +116,22 @@ Per MPI rank memory allocation (min/avg/max) = 23.63 | 27.46 | 31.29 Mbytes 400 122.8443 442.57252 25136991 25138256 -1 1 -3.4311003 3.3941657 450 128.63713 463.44243 25137048 25138373 -1 1 -4.132871 3.9852959 500 131.18361 472.61665 25137142 25138493 -1 1 -4.5104095 4.2567261 -Loop time of 23.02 on 4 procs for 500 steps with 3776 atoms +Loop time of 23.8659 on 4 procs for 500 steps with 3776 atoms -Performance: 1.877 ns/day, 12.789 hours/ns, 21.720 timesteps/s -93.3% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 1.810 ns/day, 13.259 hours/ns, 20.950 timesteps/s +93.5% CPU use with 4 MPI tasks x no OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 4.0178 | 4.1947 | 4.3354 | 6.8 | 18.22 -Bond | 0.00061117 | 0.00068637 | 0.00072249 | 0.0 | 0.00 -Kspace | 11.853 | 11.994 | 12.171 | 4.0 | 52.10 -Neigh | 0.060425 | 0.060489 | 0.06052 | 0.0 | 0.26 -Comm | 0.091334 | 0.092251 | 0.093191 | 0.3 | 0.40 -Output | 0.00067425 | 0.00089541 | 0.0014804 | 0.0 | 0.00 -Modify | 6.6612 | 6.662 | 6.6627 | 0.0 | 28.94 -Other | | 0.01505 | | | 0.07 +Pair | 4.2231 | 4.3451 | 4.5145 | 5.6 | 18.21 +Bond | 0.00048756 | 0.00052807 | 0.00058913 | 0.0 | 0.00 +Kspace | 12.239 | 12.408 | 12.53 | 3.3 | 51.99 +Neigh | 0.062108 | 0.062136 | 0.062173 | 0.0 | 0.26 +Comm | 0.092261 | 0.096857 | 0.10111 | 1.1 | 0.41 +Output | 0.00063911 | 0.00082467 | 0.0013664 | 0.0 | 0.00 +Modify | 6.9315 | 6.9362 | 6.9417 | 0.2 | 29.06 +Other | | 0.01626 | | | 0.07 Nlocal: 944 ave 948 max 940 min Histogram: 1 0 0 1 0 0 1 0 0 1 diff --git a/examples/PACKAGES/electrode/graph-il/log.02May2022.graph-il-conq2.g++.1 b/examples/PACKAGES/electrode/graph-il/log.27May2022.graph-il-conq2.g++.1 similarity index 84% rename from examples/PACKAGES/electrode/graph-il/log.02May2022.graph-il-conq2.g++.1 rename to examples/PACKAGES/electrode/graph-il/log.27May2022.graph-il-conq2.g++.1 index cc6fa2dce8..8d3e01ca93 100644 --- a/examples/PACKAGES/electrode/graph-il/log.02May2022.graph-il-conq2.g++.1 +++ b/examples/PACKAGES/electrode/graph-il/log.27May2022.graph-il-conq2.g++.1 @@ -38,7 +38,7 @@ Finding 1-2 1-3 1-4 neighbors ... 1 = max # of 1-4 neighbors 2 = max # of special neighbors special bonds CPU = 0.001 seconds - read_data CPU = 0.012 seconds + read_data CPU = 0.013 seconds group bot molecule 641 416 atoms in group bot @@ -67,14 +67,14 @@ kspace_modify slab 3.0 fix conp bot electrode/conp v_vbot 1.979 couple top v_vtop etypes 5 832 atoms in group conp_group -variable qex_bot equal -1.0-f_conp[1][2] # difference between desired and 0V charge -variable qex_top equal 1.0-f_conp[2][2] # difference between desired and 0V charge +variable qex_bot equal -1.0-f_conp[1][1] # difference between desired and 0V charge +variable qex_top equal 1.0-f_conp[2][1] # difference between desired and 0V charge # calculate imposed potential as elastance * excess charge # note: fix will wait until the run setup to look for its potential variables # which is why we can define variable names *after* fix conp without error -variable vbot equal f_conp[1][5]*v_qex_bot+f_conp[1][6]*v_qex_top -variable vtop equal f_conp[2][5]*v_qex_bot+f_conp[2][6]*v_qex_top +variable vbot equal f_conp[1][4]*v_qex_bot+f_conp[1][5]*v_qex_top +variable vtop equal f_conp[2][4]*v_qex_bot+f_conp[2][5]*v_qex_top thermo 50 thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop v_vbot v_vtop @@ -124,22 +124,22 @@ Per MPI rank memory allocation (min/avg/max) = 56.89 | 56.89 | 56.89 Mbytes 400 122.8443 442.57252 25136991 25138256 -1 1 -3.4311003 3.3941657 450 128.63713 463.44243 25137048 25138373 -1 1 -4.132871 3.9852959 500 131.18361 472.61665 25137142 25138493 -1 1 -4.5104095 4.2567261 -Loop time of 42.7942 on 1 procs for 500 steps with 3776 atoms +Loop time of 44.4233 on 1 procs for 500 steps with 3776 atoms -Performance: 1.009 ns/day, 23.775 hours/ns, 11.684 timesteps/s -394.4% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 0.972 ns/day, 24.680 hours/ns, 11.255 timesteps/s +394.3% CPU use with 1 MPI tasks x no OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 15.743 | 15.743 | 15.743 | 0.0 | 36.79 -Bond | 0.00097932 | 0.00097932 | 0.00097932 | 0.0 | 0.00 -Kspace | 16.028 | 16.028 | 16.028 | 0.0 | 37.45 -Neigh | 0.21147 | 0.21147 | 0.21147 | 0.0 | 0.49 -Comm | 0.040091 | 0.040091 | 0.040091 | 0.0 | 0.09 -Output | 0.001878 | 0.001878 | 0.001878 | 0.0 | 0.00 -Modify | 10.756 | 10.756 | 10.756 | 0.0 | 25.13 -Other | | 0.01243 | | | 0.03 +Pair | 15.812 | 15.812 | 15.812 | 0.0 | 35.59 +Bond | 0.00085223 | 0.00085223 | 0.00085223 | 0.0 | 0.00 +Kspace | 17.03 | 17.03 | 17.03 | 0.0 | 38.33 +Neigh | 0.20513 | 0.20513 | 0.20513 | 0.0 | 0.46 +Comm | 0.04065 | 0.04065 | 0.04065 | 0.0 | 0.09 +Output | 0.0016819 | 0.0016819 | 0.0016819 | 0.0 | 0.00 +Modify | 11.32 | 11.32 | 11.32 | 0.0 | 25.48 +Other | | 0.01313 | | | 0.03 Nlocal: 3776 ave 3776 max 3776 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -153,4 +153,4 @@ Ave neighs/atom = 456.98835 Ave special neighs/atom = 0.50847458 Neighbor list builds = 6 Dangerous builds = 0 -Total wall time: 0:01:35 +Total wall time: 0:01:37 diff --git a/examples/PACKAGES/electrode/graph-il/log.02May2022.graph-il-conq2.g++.4 b/examples/PACKAGES/electrode/graph-il/log.27May2022.graph-il-conq2.g++.4 similarity index 84% rename from examples/PACKAGES/electrode/graph-il/log.02May2022.graph-il-conq2.g++.4 rename to examples/PACKAGES/electrode/graph-il/log.27May2022.graph-il-conq2.g++.4 index 2d34c40f79..0e95bee2ee 100644 --- a/examples/PACKAGES/electrode/graph-il/log.02May2022.graph-il-conq2.g++.4 +++ b/examples/PACKAGES/electrode/graph-il/log.27May2022.graph-il-conq2.g++.4 @@ -39,7 +39,7 @@ Finding 1-2 1-3 1-4 neighbors ... 1 = max # of 1-4 neighbors 2 = max # of special neighbors special bonds CPU = 0.001 seconds - read_data CPU = 0.019 seconds + read_data CPU = 0.015 seconds group bot molecule 641 416 atoms in group bot @@ -68,14 +68,14 @@ kspace_modify slab 3.0 fix conp bot electrode/conp v_vbot 1.979 couple top v_vtop etypes 5 832 atoms in group conp_group -variable qex_bot equal -1.0-f_conp[1][2] # difference between desired and 0V charge -variable qex_top equal 1.0-f_conp[2][2] # difference between desired and 0V charge +variable qex_bot equal -1.0-f_conp[1][1] # difference between desired and 0V charge +variable qex_top equal 1.0-f_conp[2][1] # difference between desired and 0V charge # calculate imposed potential as elastance * excess charge # note: fix will wait until the run setup to look for its potential variables # which is why we can define variable names *after* fix conp without error -variable vbot equal f_conp[1][5]*v_qex_bot+f_conp[1][6]*v_qex_top -variable vtop equal f_conp[2][5]*v_qex_bot+f_conp[2][6]*v_qex_top +variable vbot equal f_conp[1][4]*v_qex_bot+f_conp[1][5]*v_qex_top +variable vtop equal f_conp[2][4]*v_qex_bot+f_conp[2][5]*v_qex_top thermo 50 thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop v_vbot v_vtop @@ -125,22 +125,22 @@ Per MPI rank memory allocation (min/avg/max) = 23.63 | 27.46 | 31.29 Mbytes 400 122.8443 442.57252 25136991 25138256 -1 1 -3.4311003 3.3941657 450 128.63713 463.44243 25137048 25138373 -1 1 -4.132871 3.9852959 500 131.18361 472.61665 25137142 25138493 -1 1 -4.5104095 4.2567261 -Loop time of 23.4395 on 4 procs for 500 steps with 3776 atoms +Loop time of 23.4081 on 4 procs for 500 steps with 3776 atoms -Performance: 1.843 ns/day, 13.022 hours/ns, 21.331 timesteps/s -93.3% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 1.846 ns/day, 13.005 hours/ns, 21.360 timesteps/s +93.5% CPU use with 4 MPI tasks x no OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 4.1961 | 4.3786 | 4.5496 | 7.6 | 18.68 -Bond | 0.00057323 | 0.00065148 | 0.00075008 | 0.0 | 0.00 -Kspace | 11.998 | 12.168 | 12.35 | 4.6 | 51.91 -Neigh | 0.064936 | 0.064967 | 0.064998 | 0.0 | 0.28 -Comm | 0.089828 | 0.091261 | 0.092661 | 0.4 | 0.39 -Output | 0.00082362 | 0.0010221 | 0.0015517 | 1.0 | 0.00 -Modify | 6.7177 | 6.7195 | 6.7212 | 0.1 | 28.67 -Other | | 0.01535 | | | 0.07 +Pair | 4.1792 | 4.3002 | 4.4836 | 5.7 | 18.37 +Bond | 0.00045023 | 0.00053483 | 0.00058432 | 0.0 | 0.00 +Kspace | 12.016 | 12.199 | 12.32 | 3.4 | 52.11 +Neigh | 0.062683 | 0.062707 | 0.062734 | 0.0 | 0.27 +Comm | 0.086385 | 0.08861 | 0.090874 | 0.7 | 0.38 +Output | 0.00082773 | 0.0010401 | 0.0016576 | 1.1 | 0.00 +Modify | 6.7386 | 6.7413 | 6.7443 | 0.1 | 28.80 +Other | | 0.0151 | | | 0.06 Nlocal: 944 ave 948 max 940 min Histogram: 1 0 0 1 0 0 1 0 0 1 @@ -154,4 +154,4 @@ Ave neighs/atom = 456.98835 Ave special neighs/atom = 0.50847458 Neighbor list builds = 6 Dangerous builds = 0 -Total wall time: 0:00:44 +Total wall time: 0:00:45 diff --git a/src/ELECTRODE/fix_electrode_conp.cpp b/src/ELECTRODE/fix_electrode_conp.cpp index cf76d83b28..8fb8d74cf3 100644 --- a/src/ELECTRODE/fix_electrode_conp.cpp +++ b/src/ELECTRODE/fix_electrode_conp.cpp @@ -68,12 +68,19 @@ FixElectrodeConp::FixElectrodeConp(LAMMPS *lmp, int narg, char **arg) : vec_neighlist(nullptr), recvcounts(nullptr), displs(nullptr), iele_gathered(nullptr), buf_gathered(nullptr), potential_i(nullptr), potential_iele(nullptr), charge_iele(nullptr) { + // fix.h output flags + scalar_flag = 1; + vector_flag = 1; + array_flag = 1; + extscalar = 1; + extvector = 0; + extarray = 0; + read_inv = read_mat = false; symm = false; ffield = false; thermo_time = 0.; - scalar_flag = 1; - array_flag = 1; + top_group = 0; intelflag = false; tfflag = false; @@ -222,6 +229,7 @@ FixElectrodeConp::FixElectrodeConp(LAMMPS *lmp, int narg, char **arg) : "Cannot write elastance matrix if reading capacitance matrix " "from file"); num_of_groups = static_cast(groups.size()); + size_vector = num_of_groups; size_array_rows = num_of_groups; size_array_cols = 2 + 2 * num_of_groups; @@ -828,24 +836,25 @@ double FixElectrodeConp::compute_scalar() { return potential_energy(0); } + +/* ---------------------------------------------------------------------- */ + +double FixElectrodeConp::compute_vector(int i) +{ + return group_psi[i]; +} + /* ---------------------------------------------------------------------- */ double FixElectrodeConp::compute_array(int i, int j) { - if (i < 0 || i >= num_of_groups) error->all(FLERR, "invalid fix electrode array row reference"); - if (j < 0) - error->all(FLERR, "invalid fix electrode array column reference"); - else if (j == 0) - return group_psi[i]; - else if (j == 1) + if (j == 0) return sb_charges[i]; - else if (j <= num_of_groups + 1) - return macro_capacitance[i][j - 2]; - else if (j <= 2 * num_of_groups + 1) - return macro_elastance[i][j - num_of_groups - 2]; - else - error->all(FLERR, "invalid fix electrode array column reference"); - return 0.; // avoid -Wreturn-type warning + else if (j <= num_of_groups) + return macro_capacitance[i][j - 1]; + else if (j <= 2 * num_of_groups) + return macro_elastance[i][j - num_of_groups - 1]; + else return 0.; // avoid -Wreturn-type warning } /* ---------------------------------------------------------------------- */ diff --git a/src/ELECTRODE/fix_electrode_conp.h b/src/ELECTRODE/fix_electrode_conp.h index 83a54a52ab..b61984f7d9 100644 --- a/src/ELECTRODE/fix_electrode_conp.h +++ b/src/ELECTRODE/fix_electrode_conp.h @@ -46,6 +46,7 @@ class FixElectrodeConp : public Fix { void pre_force(int) override; void pre_reverse(int, int) override; double compute_scalar() override; + double compute_vector(int) override; double compute_array(int, int) override; int modify_param(int, char **) override; int modify_param(const std::string &); From 392b2c86dcdf4bd9a33e3a249fd48f9976e96a12 Mon Sep 17 00:00:00 2001 From: srtee Date: Sun, 29 May 2022 23:16:21 +1000 Subject: [PATCH 03/46] unique_ptr for accelerator interface --- src/ELECTRODE/fix_electrode_conp.cpp | 6 +++--- src/ELECTRODE/fix_electrode_conp.h | 3 ++- src/INTEL/electrode_accel_intel.h | 4 ++-- src/INTEL/fix_electrode_conp_intel.h | 3 +-- src/INTEL/fix_electrode_conq_intel.h | 3 +-- src/INTEL/fix_electrode_thermo_intel.h | 3 +-- 6 files changed, 10 insertions(+), 12 deletions(-) diff --git a/src/ELECTRODE/fix_electrode_conp.cpp b/src/ELECTRODE/fix_electrode_conp.cpp index 8fb8d74cf3..741aad47e6 100644 --- a/src/ELECTRODE/fix_electrode_conp.cpp +++ b/src/ELECTRODE/fix_electrode_conp.cpp @@ -252,7 +252,7 @@ FixElectrodeConp::FixElectrodeConp(LAMMPS *lmp, int narg, char **arg) : groupbit = group->bitmask[igroup]; ngroup = group->count(igroup); - accel_interface = new ElectrodeAccelInterface(lmp); + accel_interface = std::unique_ptr(new ElectrodeAccelInterface(lmp)); memory->create(iele_gathered, ngroup, "FixElectrode:iele_gathered"); memory->create(buf_gathered, ngroup, "FixElectrode:buf_gathered"); @@ -854,7 +854,8 @@ double FixElectrodeConp::compute_array(int i, int j) return macro_capacitance[i][j - 1]; else if (j <= 2 * num_of_groups) return macro_elastance[i][j - num_of_groups - 1]; - else return 0.; // avoid -Wreturn-type warning + else + return 0.; // avoid -Wreturn-type warning } /* ---------------------------------------------------------------------- */ @@ -1008,7 +1009,6 @@ FixElectrodeConp::~FixElectrodeConp() if (!(read_mat || read_inv)) delete array_compute; delete ele_vector; memory->destroy(capacitance); - delete accel_interface; if (f_inv) fclose(f_inv); if (f_mat) fclose(f_mat); if (f_vec) fclose(f_vec); diff --git a/src/ELECTRODE/fix_electrode_conp.h b/src/ELECTRODE/fix_electrode_conp.h index b61984f7d9..85acb42697 100644 --- a/src/ELECTRODE/fix_electrode_conp.h +++ b/src/ELECTRODE/fix_electrode_conp.h @@ -31,6 +31,7 @@ FixStyle(electrode/conp, FixElectrodeConp); #include #include +#include #include namespace LAMMPS_NS { @@ -82,7 +83,7 @@ class FixElectrodeConp : public Fix { bool ffield; // possibly tweak electrode/conq's version std::string fixname; // used by electrode/ffield to set up internal efield bool intelflag; - ElectrodeAccelInterface *accel_interface; // used by /intel + std::unique_ptr accel_interface; // used by /intel private: FILE *f_inv, *f_mat, *f_vec; // files for capacitance, eleastance and vector diff --git a/src/INTEL/electrode_accel_intel.h b/src/INTEL/electrode_accel_intel.h index 6b2c456715..e150058a14 100644 --- a/src/INTEL/electrode_accel_intel.h +++ b/src/INTEL/electrode_accel_intel.h @@ -23,8 +23,8 @@ namespace LAMMPS_NS { class ElectrodeAccelIntel : public ElectrodeAccelInterface { public: ElectrodeAccelIntel(class LAMMPS *lmp); - void intel_find_fix(); - void intel_pack_buffers(); + void intel_find_fix() override; + void intel_pack_buffers() override; private: class FixIntel *fix; diff --git a/src/INTEL/fix_electrode_conp_intel.h b/src/INTEL/fix_electrode_conp_intel.h index a9ea938dcc..d2acdd0ab9 100644 --- a/src/INTEL/fix_electrode_conp_intel.h +++ b/src/INTEL/fix_electrode_conp_intel.h @@ -36,8 +36,7 @@ class FixElectrodeConpIntel : public FixElectrodeConp { FixElectrodeConpIntel(class LAMMPS *lmp, int narg, char **arg) : FixElectrodeConp(lmp, narg, arg) { intelflag = true; - delete accel_interface; - accel_interface = new ElectrodeAccelIntel(lmp); + accel_interface = std::unique_ptr(new ElectrodeAccelIntel(lmp)); } }; diff --git a/src/INTEL/fix_electrode_conq_intel.h b/src/INTEL/fix_electrode_conq_intel.h index 77ff4bf297..f3d140c310 100644 --- a/src/INTEL/fix_electrode_conq_intel.h +++ b/src/INTEL/fix_electrode_conq_intel.h @@ -36,8 +36,7 @@ class FixElectrodeConqIntel : public FixElectrodeConq { FixElectrodeConqIntel(class LAMMPS *lmp, int narg, char **arg) : FixElectrodeConq(lmp, narg, arg) { intelflag = true; - delete accel_interface; - accel_interface = new ElectrodeAccelIntel(lmp); + accel_interface = std::unique_ptr(new ElectrodeAccelIntel(lmp)); } }; diff --git a/src/INTEL/fix_electrode_thermo_intel.h b/src/INTEL/fix_electrode_thermo_intel.h index d6e76af6c1..d8848733ba 100644 --- a/src/INTEL/fix_electrode_thermo_intel.h +++ b/src/INTEL/fix_electrode_thermo_intel.h @@ -37,8 +37,7 @@ class FixElectrodeThermoIntel : public FixElectrodeThermo { FixElectrodeThermo(lmp, narg, arg) { intelflag = true; - delete accel_interface; - accel_interface = new ElectrodeAccelIntel(lmp); + accel_interface = std::unique_ptr(new ElectrodeAccelIntel(lmp)); } }; From d06774ac3b50578370710ca17f323ad9426dee3a Mon Sep 17 00:00:00 2001 From: srtee Date: Mon, 30 May 2022 00:19:48 +1000 Subject: [PATCH 04/46] localise file opening and closing --- src/ELECTRODE/fix_electrode_conp.cpp | 84 +++++++++++++++------------- src/ELECTRODE/fix_electrode_conp.h | 5 +- 2 files changed, 47 insertions(+), 42 deletions(-) diff --git a/src/ELECTRODE/fix_electrode_conp.cpp b/src/ELECTRODE/fix_electrode_conp.cpp index 741aad47e6..b961c310aa 100644 --- a/src/ELECTRODE/fix_electrode_conp.cpp +++ b/src/ELECTRODE/fix_electrode_conp.cpp @@ -63,10 +63,10 @@ enum { // 0 1 2 3 4 // fix fxupdate group1 electrode/conp pot1 eta couple group2 pot2 FixElectrodeConp::FixElectrodeConp(LAMMPS *lmp, int narg, char **arg) : - Fix(lmp, narg, arg), f_inv(nullptr), f_mat(nullptr), f_vec(nullptr), array_compute(nullptr), - ele_vector(nullptr), capacitance(nullptr), pair(nullptr), mat_neighlist(nullptr), - vec_neighlist(nullptr), recvcounts(nullptr), displs(nullptr), iele_gathered(nullptr), - buf_gathered(nullptr), potential_i(nullptr), potential_iele(nullptr), charge_iele(nullptr) + Fix(lmp, narg, arg), ele_vector(nullptr), capacitance(nullptr), pair(nullptr), + mat_neighlist(nullptr), vec_neighlist(nullptr), recvcounts(nullptr), displs(nullptr), + iele_gathered(nullptr), buf_gathered(nullptr), potential_i(nullptr), potential_iele(nullptr), + charge_iele(nullptr) { // fix.h output flags scalar_flag = 1; @@ -76,7 +76,7 @@ FixElectrodeConp::FixElectrodeConp(LAMMPS *lmp, int narg, char **arg) : extvector = 0; extarray = 0; - read_inv = read_mat = false; + write_inv = write_mat = write_vec = read_inv = read_mat = false; symm = false; ffield = false; thermo_time = 0.; @@ -139,23 +139,14 @@ FixElectrodeConp::FixElectrodeConp(LAMMPS *lmp, int narg, char **arg) : if (iarg + 2 > narg) error->all(FLERR, "Need one argument after write command"); if (comm->me == 0) { if ((strcmp(arg[iarg], "write_inv") == 0)) { // capacitance matrix - f_inv = fopen(arg[++iarg], "w"); - if (f_inv == nullptr) - error->one(FLERR, - fmt::format("Cannot open capacitance matrix file {}: {}", arg[iarg], - utils::getsyserror())); - } else if ((strcmp(arg[iarg], "write_mat") == 0)) { // b vector - f_mat = fopen(arg[++iarg], "w"); - if (f_mat == nullptr) - error->one(FLERR, - fmt::format("Cannot open elastance matrix file {}: {}", arg[iarg], - utils::getsyserror())); + write_inv = true; + output_file_inv = arg[++iarg]; + } else if ((strcmp(arg[iarg], "write_mat") == 0)) { // elastance matrix + write_mat = true; + output_file_mat = arg[++iarg]; } else if ((strcmp(arg[iarg], "write_vec") == 0)) { // b vector - f_vec = fopen(arg[++iarg], "w"); - if (f_vec == nullptr) - error->one( - FLERR, - fmt::format("Cannot open vector file {}: {}", arg[iarg], utils::getsyserror())); + write_vec = true; + output_file_vec = arg[++iarg]; } else { error->all(FLERR, "Illegal fix electrode/conp command with write"); } @@ -214,7 +205,6 @@ FixElectrodeConp::FixElectrodeConp(LAMMPS *lmp, int narg, char **arg) : if (igroup < 0) error->all(FLERR, "Failed to create union of groups"); // construct computes ele_vector = new ElectrodeVector(lmp, igroup, igroup, eta, true); - if (!(read_inv || read_mat)) { array_compute = new ElectrodeMatrix(lmp, igroup, eta); } // error checks assert(groups.size() == group_bits.size()); @@ -222,9 +212,8 @@ FixElectrodeConp::FixElectrodeConp(LAMMPS *lmp, int narg, char **arg) : assert(groups.size() == group_psi_var_styles.size()); assert(groups.size() == group_psi_var_names.size()); assert(igroup == ele_vector->igroup); - if (!(read_mat || read_inv)) assert(igroup == array_compute->igroup); if (read_inv && read_mat) error->all(FLERR, "Cannot read matrix from two files"); - if (f_mat && read_inv) + if (write_mat && read_inv) error->all(FLERR, "Cannot write elastance matrix if reading capacitance matrix " "from file"); @@ -442,11 +431,6 @@ void FixElectrodeConp::setup_post_neighbor() evscale = force->qe2f / force->qqrd2e; ele_vector->setup(pair, vec_neighlist, timer_flag); - if (!(read_mat || read_inv)) { - if (etypes_neighlists) neighbor->build_one(mat_neighlist, 0); - array_compute->setup(tag_to_iele, pair, mat_neighlist); - if (tfflag) { array_compute->setup_tf(tf_types); } - } // setup psi with target potentials iele_to_group = std::vector(ngroup, -1); sd_vectors = std::vector>(num_of_groups, std::vector(ngroup)); @@ -476,11 +460,23 @@ void FixElectrodeConp::setup_post_neighbor() // temporarily hold elastance in "capacitance" if (read_mat) read_from_file(input_file_mat, capacitance, "elastance"); - else + else { + if (etypes_neighlists) neighbor->build_one(mat_neighlist, 0); + auto array_compute = std::unique_ptr(new ElectrodeMatrix(lmp, igroup, eta)); + array_compute->setup(tag_to_iele, pair, mat_neighlist); + if (tfflag) { array_compute->setup_tf(tf_types); } array_compute->compute_array(capacitance, timer_flag); - if (f_mat && !(read_inv)) - write_to_file(f_mat, taglist_bygroup, order_matrix(group_idx, capacitance)); - invert(); // TODO uncommented lots of stuff here + if (write_mat) { + auto f_mat = fopen(output_file_mat.c_str(), "w"); + if (f_mat == nullptr) + error->one(FLERR, + fmt::format("Cannot open elastance matrix file {}: {}", output_file_mat, + utils::getsyserror())); + write_to_file(f_mat, taglist_bygroup, order_matrix(group_idx, capacitance)); + fclose(f_mat); + } + invert(); // TODO uncommented lots of stuff here + } } if (symm) symmetrize(); @@ -507,12 +503,26 @@ void FixElectrodeConp::setup_post_neighbor() if (force->newton_pair) comm->reverse_comm(this); buffer_and_gather(potential_i, potential_iele); if (comm->me == 0) { - if (f_vec) { + if (write_vec) { + auto f_vec = fopen(output_file_vec.c_str(), "w"); + if (f_vec == nullptr) + error->one( + FLERR, + fmt::format("Cannot open vector file {}: {}", output_file_vec, utils::getsyserror())); std::vector> vec(ngroup, std::vector(1)); for (int i = 0; i < ngroup; i++) { vec[group_idx[i]][0] = potential_iele[i]; } write_to_file(f_vec, taglist_bygroup, vec); + fclose(f_vec); + } + if (write_inv) { + auto f_inv = fopen(output_file_inv.c_str(), "w"); + if (f_inv == nullptr) + error->one(FLERR, + fmt::format("Cannot open capacitance matrix file {}: {}", output_file_inv, + utils::getsyserror())); + write_to_file(f_inv, taglist_bygroup, order_matrix(group_idx, capacitance)); + fclose(f_inv); } - if (f_inv) { write_to_file(f_inv, taglist_bygroup, order_matrix(group_idx, capacitance)); } } } @@ -1006,12 +1016,8 @@ FixElectrodeConp::~FixElectrodeConp() memory->destroy(potential_iele); memory->destroy(charge_iele); - if (!(read_mat || read_inv)) delete array_compute; delete ele_vector; memory->destroy(capacitance); - if (f_inv) fclose(f_inv); - if (f_mat) fclose(f_mat); - if (f_vec) fclose(f_vec); } /* ---------------------------------------------------------------------- */ diff --git a/src/ELECTRODE/fix_electrode_conp.h b/src/ELECTRODE/fix_electrode_conp.h index 85acb42697..01461185f6 100644 --- a/src/ELECTRODE/fix_electrode_conp.h +++ b/src/ELECTRODE/fix_electrode_conp.h @@ -86,13 +86,12 @@ class FixElectrodeConp : public Fix { std::unique_ptr accel_interface; // used by /intel private: - FILE *f_inv, *f_mat, *f_vec; // files for capacitance, eleastance and vector + std::string output_file_inv, output_file_mat, output_file_vec; std::string input_file_inv, input_file_mat; - class ElectrodeMatrix *array_compute; class ElectrodeVector *ele_vector; std::vector groups; double **capacitance; - bool read_inv, read_mat; + bool read_inv, read_mat, write_inv, write_mat, write_vec; double eta; double update_time, mult_time; void create_taglist(); From 5273031e68e8fcd9cee651a0176fd787c6ba6718 Mon Sep 17 00:00:00 2001 From: Shern Tee Date: Wed, 8 Jun 2022 13:35:47 +0000 Subject: [PATCH 05/46] use array output for fix electrode instead of fix_modify --- doc/src/fix_electrode_conp.rst | 94 +++++++++----- examples/PACKAGES/electrode/graph-il/in.conq | 8 +- examples/PACKAGES/electrode/graph-il/in.conq2 | 24 +--- ...++.1 => log.27May2022.graph-il-conq.g++.1} | 38 +++--- ...++.4 => log.27May2022.graph-il-conq.g++.4} | 36 +++--- ...+.1 => log.27May2022.graph-il-conq2.g++.1} | 50 +++----- ...+.4 => log.27May2022.graph-il-conq2.g++.4} | 50 +++----- src/ELECTRODE/fix_electrode_conp.cpp | 121 +++++------------- src/ELECTRODE/fix_electrode_conp.h | 3 +- 9 files changed, 166 insertions(+), 258 deletions(-) rename examples/PACKAGES/electrode/graph-il/{log.26Apr2022.graph-il-conq.g++.1 => log.27May2022.graph-il-conq.g++.1} (83%) rename examples/PACKAGES/electrode/graph-il/{log.26Apr2022.graph-il-conq.g++.4 => log.27May2022.graph-il-conq.g++.4} (84%) rename examples/PACKAGES/electrode/graph-il/{log.26Apr2022.graph-il-conq2.g++.1 => log.27May2022.graph-il-conq2.g++.1} (78%) rename examples/PACKAGES/electrode/graph-il/{log.26Apr2022.graph-il-conq2.g++.4 => log.27May2022.graph-il-conq2.g++.4} (78%) diff --git a/doc/src/fix_electrode_conp.rst b/doc/src/fix_electrode_conp.rst index 75b099995f..668b2371b9 100644 --- a/doc/src/fix_electrode_conp.rst +++ b/doc/src/fix_electrode_conp.rst @@ -31,7 +31,7 @@ Syntax * ID, group-ID are documented in fix command * mode = electrode/conp or electrode/conq or electrode/thermo -* potential = electrode potential +* potential = electrode potential (number, or equal-style variable) * charge = electrode charge * eta = reciprocal width of electrode charge smearing * T_v = temperature of thermo-potentiostat @@ -86,6 +86,22 @@ fix electrode/thermo implements a thermo-potentiostat :ref:`(Deissenbeck) to be specified using the temp keyword. Currently, only two electrodes are possible with this style. +For all three fixes, any potential (or charge for *conq*) can be specified as an +equal-style variable prefixed with "v_". For example, the following code will +ramp the potential difference between electrodes from 0.0V to 2.0V over the +course of the simulation: + +.. code-block:: LAMMPS + + fix fxconp bot electrode/conp 0.0 1.805 couple top v_v symm on + variable v equal ramp(0.0, 2.0) + +Note that these fixes only parse their supplied variable name when starting a +run, and so these fixes will accept equal-style variables defined *after* the +fix definition, including variables dependent on the fix's own output. For an +advanced example of this see the in.conq2 input file in the directory +examples/PACKAGES/electrode/graph-il. + This fix necessitates the use of a long range solver that calculates and provides the matrix of electrode-electrode interactions and a vector of electrode-electrolyte interactions. The Kspace styles *ewald/electrode*, *pppm/electrode* and @@ -130,48 +146,64 @@ file, for code developers to track optimization. fix_modify ID timer on/off -The *fix_modify set* options allow calculated quantities to be accessed via -internal variables. Currently four types of quantities can be accessed: +---------- -.. code-block:: LAMMPS +These fixes compute a global (extensive) scalar, a global (intensive) vector, +and a global array, which can be accessed by various +:doc:`output commands `. - fix-modify ID set v group-ID variablename - fix-modify ID set qsb group-ID variablename - fix-modify ID set mc group-ID1 group-ID2 variablename - fix-modify ID set me group-ID1 group-ID2 variablename +The global scalar outputs the energy added to the system by this fix, which is +the negative of the total charge on each electrode multiplied by that +electrode's potential. -One use case is to output the potential that is internally calculated and -applied to each electrode group by *fix electrode/conq* or *fix electrode/thermo*. -For that case the *v* option makes *fix electrode* update the variable -*variablename* with the potential applied to group *group-ID*, where *group-ID* -must be a group whose charges are updated by *fix electrode* and *variablename* -must be an internal-style variable: +The global vector outputs the potential on each electrode (and thus has *N* +entries if the fix manages *N* electrode groups), in :doc:`units ` of +electric field multiplied by distance (thus volts for *real* and *metal* units). +The electrode groups' ordering follows the order in which they were input in the +fix command using *couple*. The global vector output is useful for +*fix electrode/conq* and *fix electrode/thermo*, +where potential is dynamically updated based on electrolyte configuration +instead of being directly set. -.. code-block:: LAMMPS +The global array has *N* rows and *2N+1* columns, where the fix manages *N* +electrode groups managed by the fix. For the *I*-th row of the array, the +elements are: - fix conq bot electrode/conq -1.0 1.979 couple top 1.0 - variable vbot internal 0.0 - fix_modify conq set v bot vbot +* array[I][1] = total charge that group *I* would have had *if it were at 0 V + applied potential* +* array[I][2 to *N* + 1] = the *N* entries of the *I*-th row of the electrode + capacitance matrix (definition follows) +* array[I][*N* + 2 to *2N* + 1] = the *N* entries of the *I*-th row of the electrode + elastance matrix (the inverse of the electrode capacitance matrix) -The *qsb* option similarly outputs the total updated charge of the group if its -potential were 0.0V. The *mc* option requires two *group-IDs*, and outputs the -entry \{*group-ID1*, *group-ID2*\} of the (symmetric) *macro-capacitance* matrix -(MC) which relates the electrodes' applied potentials (V), total charges (Q), and -total charges at 0.0 V (Qsb): +The :math:`N \times N` electrode capacitance matrix, denoted :math:`\mathbf{C}` +in the following equation, summarizes how the total charge induced on each electrode +(:math:`\mathbf{Q}` as an *N*-vector) is related to the potential on each +electrode, :math:`\mathbf{V}`, and the charge-at-0V :math:`\mathbf{Q}_{0V}` +(which is influenced by the local electrolyte structure): .. math:: - \mathbf{Q} = \mathbf{Q}_{SB} + \mathbf{MC} \cdot \mathbf{V} + \mathbf{Q} = \mathbf{Q}_{0V} + \mathbf{C} \cdot \mathbf{V} -Lastly, the *me* option also requires two *group-IDs* and outputs the entry -\{*group-ID1*, *group-ID2*\} of the *macro-elastance* matrix, which is the -inverse of the macro-capacitance matrix. (As the names denote, the -macro-capacitance matrix gives electrode charges from potentials, and the -macro-elastance matrix gives electrode potentials from charges). +The charge-at-0V, electrode capacitance and elastance matrices are internally used to +calculate the potentials required to induce the specified total electrode charges +in *fix electrode/conq* and *fix electrode/thermo*. With the *symm on* option, +the electrode capacitance matrix would be singular, and thus its last row is +replaced with *N* copies of its top-left entry (:math:`\mathbf{C}_{11}`) for +invertibility. -.. warning:: +The global array output is mainly useful for quickly determining the 'vacuum +capacitance' of the system (capacitance with only electrodes, no electrolyte), +and can also be used for advanced simulations setting the potential as some +function of the charge-at-0V (such as in the in.conq2 example mentioned above). - Positions of electrode particles have to be immobilized at all times. +---------- + +Restrictions +"""""""""""" + +Positions of electrode particles have to be immobilized at all times. The parallelization for the fix works best if electrode atoms are evenly distributed across processors. For a system with two electrodes at the bottom diff --git a/examples/PACKAGES/electrode/graph-il/in.conq b/examples/PACKAGES/electrode/graph-il/in.conq index 08429924d4..088cf0a8ac 100644 --- a/examples/PACKAGES/electrode/graph-il/in.conq +++ b/examples/PACKAGES/electrode/graph-il/in.conq @@ -7,12 +7,6 @@ kspace_modify slab 3.0 fix conq bot electrode/conq -1.0 1.979 couple top 1.0 etypes 5 # conq doesn't take symm option -# ask fix conq to output electrode potentials to internal variables -variable vbot internal 0.0 -variable vtop internal 0.0 -fix_modify conq set v bot vbot -fix_modify conq set v top vtop - thermo 50 -thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop v_vbot v_vtop +thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop f_conq[1] f_conq[2] run 500 diff --git a/examples/PACKAGES/electrode/graph-il/in.conq2 b/examples/PACKAGES/electrode/graph-il/in.conq2 index 46c9ecbf99..4f84322196 100644 --- a/examples/PACKAGES/electrode/graph-il/in.conq2 +++ b/examples/PACKAGES/electrode/graph-il/in.conq2 @@ -7,28 +7,14 @@ kspace_modify slab 3.0 fix conp bot electrode/conp v_vbot 1.979 couple top v_vtop etypes 5 -# get the four entries of electrode elastance matrix -variable me00 internal 0.0 -variable me01 internal 0.0 -variable me10 internal 0.0 -variable me11 internal 0.0 -fix_modify conp set me bot bot me00 -fix_modify conp set me bot top me01 -fix_modify conp set me top bot me10 -fix_modify conp set me top top me11 - -# get the 0V charges (qsb), and excess charge required to reach preset total charges -variable qsb_bot internal 0.0 -variable qsb_top internal 0.0 -fix_modify conp set qsb bot qsb_bot -fix_modify conp set qsb top qsb_top -variable qex_bot equal -1.0-v_qsb_bot # difference between desired and 0V charge -variable qex_top equal 1.0-v_qsb_top # difference between desired and 0V charge +variable qex_bot equal -1.0-f_conp[1][1] # difference between desired and 0V charge +variable qex_top equal 1.0-f_conp[2][1] # difference between desired and 0V charge # calculate imposed potential as elastance * excess charge # note: fix will wait until the run setup to look for its potential variables -variable vbot equal v_me00*v_qex_bot+v_me01*v_qex_top -variable vtop equal v_me10*v_qex_bot+v_me11*v_qex_top +# which is why we can define variable names *after* fix conp without error +variable vbot equal f_conp[1][4]*v_qex_bot+f_conp[1][5]*v_qex_top +variable vtop equal f_conp[2][4]*v_qex_bot+f_conp[2][5]*v_qex_top thermo 50 thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop v_vbot v_vtop diff --git a/examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-conq.g++.1 b/examples/PACKAGES/electrode/graph-il/log.27May2022.graph-il-conq.g++.1 similarity index 83% rename from examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-conq.g++.1 rename to examples/PACKAGES/electrode/graph-il/log.27May2022.graph-il-conq.g++.1 index 5722e357ec..0475fb07b6 100644 --- a/examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-conq.g++.1 +++ b/examples/PACKAGES/electrode/graph-il/log.27May2022.graph-il-conq.g++.1 @@ -38,7 +38,7 @@ Finding 1-2 1-3 1-4 neighbors ... 1 = max # of 1-4 neighbors 2 = max # of special neighbors special bonds CPU = 0.001 seconds - read_data CPU = 0.012 seconds + read_data CPU = 0.014 seconds group bot molecule 641 416 atoms in group bot @@ -56,7 +56,7 @@ fix shake bmi shake 1e-4 20 0 b 1 2 a 1 0 = # of size 3 clusters 0 = # of size 4 clusters 320 = # of frozen angles - find clusters CPU = 0.000 seconds + find clusters CPU = 0.001 seconds variable q atom q compute qtop top reduce sum v_q @@ -67,14 +67,8 @@ kspace_modify slab 3.0 fix conq bot electrode/conq -1.0 1.979 couple top 1.0 etypes 5 # conq doesn't take symm option 832 atoms in group conp_group -# ask fix conq to output electrode potentials to internal variables -variable vbot internal 0.0 -variable vtop internal 0.0 -fix_modify conq set v bot vbot -fix_modify conq set v top vtop - thermo 50 -thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop v_vbot v_vtop +thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop f_conq[1] f_conq[2] run 500 PPPM/electrode initialization ... using 12-bit tables for long-range coulomb (src/kspace.cpp:342) @@ -109,7 +103,7 @@ Neighbor list info ... stencil: none bin: none Per MPI rank memory allocation (min/avg/max) = 56.89 | 56.89 | 56.89 Mbytes - Step Temp c_ctemp E_pair TotEng c_qbot c_qtop v_vbot v_vtop + Step Temp c_ctemp E_pair TotEng c_qbot c_qtop f_conq[1] f_conq[2] 0 0 0 25136984 25136984 -1 1 -9.931852 10.097344 50 20.206425 72.797911 25136825 25137033 -1 1 -9.4359366 9.5964514 100 55.931663 201.50563 25136587 25137163 -1 1 -8.0440112 8.1861787 @@ -121,22 +115,22 @@ Per MPI rank memory allocation (min/avg/max) = 56.89 | 56.89 | 56.89 Mbytes 400 122.8443 442.57252 25136991 25138256 -1 1 -3.4311003 3.3941657 450 128.63713 463.44243 25137048 25138373 -1 1 -4.132871 3.9852959 500 131.18361 472.61665 25137142 25138493 -1 1 -4.5104095 4.2567261 -Loop time of 48.9361 on 1 procs for 500 steps with 3776 atoms +Loop time of 43.3117 on 1 procs for 500 steps with 3776 atoms -Performance: 0.883 ns/day, 27.187 hours/ns, 10.217 timesteps/s -393.9% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 0.997 ns/day, 24.062 hours/ns, 11.544 timesteps/s +394.5% CPU use with 1 MPI tasks x no OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 17.652 | 17.652 | 17.652 | 0.0 | 36.07 -Bond | 0.0010418 | 0.0010418 | 0.0010418 | 0.0 | 0.00 -Kspace | 16.566 | 16.566 | 16.566 | 0.0 | 33.85 -Neigh | 0.21584 | 0.21584 | 0.21584 | 0.0 | 0.44 -Comm | 0.04167 | 0.04167 | 0.04167 | 0.0 | 0.09 -Output | 0.0014585 | 0.0014585 | 0.0014585 | 0.0 | 0.00 -Modify | 14.445 | 14.445 | 14.445 | 0.0 | 29.52 -Other | | 0.0134 | | | 0.03 +Pair | 15.554 | 15.554 | 15.554 | 0.0 | 35.91 +Bond | 0.00094737 | 0.00094737 | 0.00094737 | 0.0 | 0.00 +Kspace | 16.502 | 16.502 | 16.502 | 0.0 | 38.10 +Neigh | 0.20285 | 0.20285 | 0.20285 | 0.0 | 0.47 +Comm | 0.039776 | 0.039776 | 0.039776 | 0.0 | 0.09 +Output | 0.0014342 | 0.0014342 | 0.0014342 | 0.0 | 0.00 +Modify | 10.998 | 10.998 | 10.998 | 0.0 | 25.39 +Other | | 0.01261 | | | 0.03 Nlocal: 3776 ave 3776 max 3776 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -150,4 +144,4 @@ Ave neighs/atom = 456.98835 Ave special neighs/atom = 0.50847458 Neighbor list builds = 6 Dangerous builds = 0 -Total wall time: 0:01:43 +Total wall time: 0:01:38 diff --git a/examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-conq.g++.4 b/examples/PACKAGES/electrode/graph-il/log.27May2022.graph-il-conq.g++.4 similarity index 84% rename from examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-conq.g++.4 rename to examples/PACKAGES/electrode/graph-il/log.27May2022.graph-il-conq.g++.4 index 96343114e6..ba028200d9 100644 --- a/examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-conq.g++.4 +++ b/examples/PACKAGES/electrode/graph-il/log.27May2022.graph-il-conq.g++.4 @@ -39,7 +39,7 @@ Finding 1-2 1-3 1-4 neighbors ... 1 = max # of 1-4 neighbors 2 = max # of special neighbors special bonds CPU = 0.001 seconds - read_data CPU = 0.020 seconds + read_data CPU = 0.015 seconds group bot molecule 641 416 atoms in group bot @@ -68,14 +68,8 @@ kspace_modify slab 3.0 fix conq bot electrode/conq -1.0 1.979 couple top 1.0 etypes 5 # conq doesn't take symm option 832 atoms in group conp_group -# ask fix conq to output electrode potentials to internal variables -variable vbot internal 0.0 -variable vtop internal 0.0 -fix_modify conq set v bot vbot -fix_modify conq set v top vtop - thermo 50 -thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop v_vbot v_vtop +thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop f_conq[1] f_conq[2] run 500 PPPM/electrode initialization ... using 12-bit tables for long-range coulomb (src/kspace.cpp:342) @@ -110,7 +104,7 @@ Neighbor list info ... stencil: none bin: none Per MPI rank memory allocation (min/avg/max) = 23.63 | 27.46 | 31.29 Mbytes - Step Temp c_ctemp E_pair TotEng c_qbot c_qtop v_vbot v_vtop + Step Temp c_ctemp E_pair TotEng c_qbot c_qtop f_conq[1] f_conq[2] 0 0 0 25136984 25136984 -1 1 -9.931852 10.097344 50 20.206425 72.797911 25136825 25137033 -1 1 -9.4359366 9.5964514 100 55.931663 201.50563 25136587 25137163 -1 1 -8.0440112 8.1861787 @@ -122,22 +116,22 @@ Per MPI rank memory allocation (min/avg/max) = 23.63 | 27.46 | 31.29 Mbytes 400 122.8443 442.57252 25136991 25138256 -1 1 -3.4311003 3.3941657 450 128.63713 463.44243 25137048 25138373 -1 1 -4.132871 3.9852959 500 131.18361 472.61665 25137142 25138493 -1 1 -4.5104095 4.2567261 -Loop time of 28.8336 on 4 procs for 500 steps with 3776 atoms +Loop time of 23.8659 on 4 procs for 500 steps with 3776 atoms -Performance: 1.498 ns/day, 16.019 hours/ns, 17.341 timesteps/s -94.1% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 1.810 ns/day, 13.259 hours/ns, 20.950 timesteps/s +93.5% CPU use with 4 MPI tasks x no OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 5.7721 | 5.9353 | 6.144 | 6.0 | 20.58 -Bond | 0.00057855 | 0.00067043 | 0.00074793 | 0.0 | 0.00 -Kspace | 13.485 | 13.694 | 13.857 | 4.0 | 47.49 -Neigh | 0.092021 | 0.092044 | 0.092068 | 0.0 | 0.32 -Comm | 0.11486 | 0.11638 | 0.11801 | 0.4 | 0.40 -Output | 0.00090452 | 0.001109 | 0.0017097 | 1.0 | 0.00 -Modify | 8.974 | 8.9761 | 8.978 | 0.1 | 31.13 -Other | | 0.01837 | | | 0.06 +Pair | 4.2231 | 4.3451 | 4.5145 | 5.6 | 18.21 +Bond | 0.00048756 | 0.00052807 | 0.00058913 | 0.0 | 0.00 +Kspace | 12.239 | 12.408 | 12.53 | 3.3 | 51.99 +Neigh | 0.062108 | 0.062136 | 0.062173 | 0.0 | 0.26 +Comm | 0.092261 | 0.096857 | 0.10111 | 1.1 | 0.41 +Output | 0.00063911 | 0.00082467 | 0.0013664 | 0.0 | 0.00 +Modify | 6.9315 | 6.9362 | 6.9417 | 0.2 | 29.06 +Other | | 0.01626 | | | 0.07 Nlocal: 944 ave 948 max 940 min Histogram: 1 0 0 1 0 0 1 0 0 1 @@ -151,4 +145,4 @@ Ave neighs/atom = 456.98835 Ave special neighs/atom = 0.50847458 Neighbor list builds = 6 Dangerous builds = 0 -Total wall time: 0:00:51 +Total wall time: 0:00:44 diff --git a/examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-conq2.g++.1 b/examples/PACKAGES/electrode/graph-il/log.27May2022.graph-il-conq2.g++.1 similarity index 78% rename from examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-conq2.g++.1 rename to examples/PACKAGES/electrode/graph-il/log.27May2022.graph-il-conq2.g++.1 index 4465ed311d..8d3e01ca93 100644 --- a/examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-conq2.g++.1 +++ b/examples/PACKAGES/electrode/graph-il/log.27May2022.graph-il-conq2.g++.1 @@ -38,7 +38,7 @@ Finding 1-2 1-3 1-4 neighbors ... 1 = max # of 1-4 neighbors 2 = max # of special neighbors special bonds CPU = 0.001 seconds - read_data CPU = 0.031 seconds + read_data CPU = 0.013 seconds group bot molecule 641 416 atoms in group bot @@ -67,28 +67,14 @@ kspace_modify slab 3.0 fix conp bot electrode/conp v_vbot 1.979 couple top v_vtop etypes 5 832 atoms in group conp_group -# get the four entries of electrode elastance matrix -variable me00 internal 0.0 -variable me01 internal 0.0 -variable me10 internal 0.0 -variable me11 internal 0.0 -fix_modify conp set me bot bot me00 -fix_modify conp set me bot top me01 -fix_modify conp set me top bot me10 -fix_modify conp set me top top me11 - -# get the 0V charges (qsb), and excess charge required to reach preset total charges -variable qsb_bot internal 0.0 -variable qsb_top internal 0.0 -fix_modify conp set qsb bot qsb_bot -fix_modify conp set qsb top qsb_top -variable qex_bot equal -1.0-v_qsb_bot # difference between desired and 0V charge -variable qex_top equal 1.0-v_qsb_top # difference between desired and 0V charge +variable qex_bot equal -1.0-f_conp[1][1] # difference between desired and 0V charge +variable qex_top equal 1.0-f_conp[2][1] # difference between desired and 0V charge # calculate imposed potential as elastance * excess charge # note: fix will wait until the run setup to look for its potential variables -variable vbot equal v_me00*v_qex_bot+v_me01*v_qex_top -variable vtop equal v_me10*v_qex_bot+v_me11*v_qex_top +# which is why we can define variable names *after* fix conp without error +variable vbot equal f_conp[1][4]*v_qex_bot+f_conp[1][5]*v_qex_top +variable vtop equal f_conp[2][4]*v_qex_bot+f_conp[2][5]*v_qex_top thermo 50 thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop v_vbot v_vtop @@ -138,22 +124,22 @@ Per MPI rank memory allocation (min/avg/max) = 56.89 | 56.89 | 56.89 Mbytes 400 122.8443 442.57252 25136991 25138256 -1 1 -3.4311003 3.3941657 450 128.63713 463.44243 25137048 25138373 -1 1 -4.132871 3.9852959 500 131.18361 472.61665 25137142 25138493 -1 1 -4.5104095 4.2567261 -Loop time of 62.9692 on 1 procs for 500 steps with 3776 atoms +Loop time of 44.4233 on 1 procs for 500 steps with 3776 atoms -Performance: 0.686 ns/day, 34.983 hours/ns, 7.940 timesteps/s -393.7% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 0.972 ns/day, 24.680 hours/ns, 11.255 timesteps/s +394.3% CPU use with 1 MPI tasks x no OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 20.307 | 20.307 | 20.307 | 0.0 | 32.25 -Bond | 0.0020074 | 0.0020074 | 0.0020074 | 0.0 | 0.00 -Kspace | 23.562 | 23.562 | 23.562 | 0.0 | 37.42 -Neigh | 0.26149 | 0.26149 | 0.26149 | 0.0 | 0.42 -Comm | 0.059436 | 0.059436 | 0.059436 | 0.0 | 0.09 -Output | 0.0023888 | 0.0023888 | 0.0023888 | 0.0 | 0.00 -Modify | 18.756 | 18.756 | 18.756 | 0.0 | 29.79 -Other | | 0.01897 | | | 0.03 +Pair | 15.812 | 15.812 | 15.812 | 0.0 | 35.59 +Bond | 0.00085223 | 0.00085223 | 0.00085223 | 0.0 | 0.00 +Kspace | 17.03 | 17.03 | 17.03 | 0.0 | 38.33 +Neigh | 0.20513 | 0.20513 | 0.20513 | 0.0 | 0.46 +Comm | 0.04065 | 0.04065 | 0.04065 | 0.0 | 0.09 +Output | 0.0016819 | 0.0016819 | 0.0016819 | 0.0 | 0.00 +Modify | 11.32 | 11.32 | 11.32 | 0.0 | 25.48 +Other | | 0.01313 | | | 0.03 Nlocal: 3776 ave 3776 max 3776 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -167,4 +153,4 @@ Ave neighs/atom = 456.98835 Ave special neighs/atom = 0.50847458 Neighbor list builds = 6 Dangerous builds = 0 -Total wall time: 0:02:26 +Total wall time: 0:01:37 diff --git a/examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-conq2.g++.4 b/examples/PACKAGES/electrode/graph-il/log.27May2022.graph-il-conq2.g++.4 similarity index 78% rename from examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-conq2.g++.4 rename to examples/PACKAGES/electrode/graph-il/log.27May2022.graph-il-conq2.g++.4 index cf8ddf60a3..0e95bee2ee 100644 --- a/examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-conq2.g++.4 +++ b/examples/PACKAGES/electrode/graph-il/log.27May2022.graph-il-conq2.g++.4 @@ -39,7 +39,7 @@ Finding 1-2 1-3 1-4 neighbors ... 1 = max # of 1-4 neighbors 2 = max # of special neighbors special bonds CPU = 0.001 seconds - read_data CPU = 0.019 seconds + read_data CPU = 0.015 seconds group bot molecule 641 416 atoms in group bot @@ -68,28 +68,14 @@ kspace_modify slab 3.0 fix conp bot electrode/conp v_vbot 1.979 couple top v_vtop etypes 5 832 atoms in group conp_group -# get the four entries of electrode elastance matrix -variable me00 internal 0.0 -variable me01 internal 0.0 -variable me10 internal 0.0 -variable me11 internal 0.0 -fix_modify conp set me bot bot me00 -fix_modify conp set me bot top me01 -fix_modify conp set me top bot me10 -fix_modify conp set me top top me11 - -# get the 0V charges (qsb), and excess charge required to reach preset total charges -variable qsb_bot internal 0.0 -variable qsb_top internal 0.0 -fix_modify conp set qsb bot qsb_bot -fix_modify conp set qsb top qsb_top -variable qex_bot equal -1.0-v_qsb_bot # difference between desired and 0V charge -variable qex_top equal 1.0-v_qsb_top # difference between desired and 0V charge +variable qex_bot equal -1.0-f_conp[1][1] # difference between desired and 0V charge +variable qex_top equal 1.0-f_conp[2][1] # difference between desired and 0V charge # calculate imposed potential as elastance * excess charge # note: fix will wait until the run setup to look for its potential variables -variable vbot equal v_me00*v_qex_bot+v_me01*v_qex_top -variable vtop equal v_me10*v_qex_bot+v_me11*v_qex_top +# which is why we can define variable names *after* fix conp without error +variable vbot equal f_conp[1][4]*v_qex_bot+f_conp[1][5]*v_qex_top +variable vtop equal f_conp[2][4]*v_qex_bot+f_conp[2][5]*v_qex_top thermo 50 thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop v_vbot v_vtop @@ -139,22 +125,22 @@ Per MPI rank memory allocation (min/avg/max) = 23.63 | 27.46 | 31.29 Mbytes 400 122.8443 442.57252 25136991 25138256 -1 1 -3.4311003 3.3941657 450 128.63713 463.44243 25137048 25138373 -1 1 -4.132871 3.9852959 500 131.18361 472.61665 25137142 25138493 -1 1 -4.5104095 4.2567261 -Loop time of 33.4031 on 4 procs for 500 steps with 3776 atoms +Loop time of 23.4081 on 4 procs for 500 steps with 3776 atoms -Performance: 1.293 ns/day, 18.557 hours/ns, 14.969 timesteps/s -94.3% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 1.846 ns/day, 13.005 hours/ns, 21.360 timesteps/s +93.5% CPU use with 4 MPI tasks x no OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 7.1262 | 7.3913 | 7.611 | 6.8 | 22.13 -Bond | 0.0007191 | 0.00079089 | 0.00087005 | 0.0 | 0.00 -Kspace | 15.139 | 15.358 | 15.623 | 4.7 | 45.98 -Neigh | 0.10374 | 0.10377 | 0.10383 | 0.0 | 0.31 -Comm | 0.14245 | 0.14353 | 0.14563 | 0.3 | 0.43 -Output | 0.0012987 | 0.0015671 | 0.0022434 | 1.0 | 0.00 -Modify | 10.381 | 10.383 | 10.384 | 0.0 | 31.08 -Other | | 0.02134 | | | 0.06 +Pair | 4.1792 | 4.3002 | 4.4836 | 5.7 | 18.37 +Bond | 0.00045023 | 0.00053483 | 0.00058432 | 0.0 | 0.00 +Kspace | 12.016 | 12.199 | 12.32 | 3.4 | 52.11 +Neigh | 0.062683 | 0.062707 | 0.062734 | 0.0 | 0.27 +Comm | 0.086385 | 0.08861 | 0.090874 | 0.7 | 0.38 +Output | 0.00082773 | 0.0010401 | 0.0016576 | 1.1 | 0.00 +Modify | 6.7386 | 6.7413 | 6.7443 | 0.1 | 28.80 +Other | | 0.0151 | | | 0.06 Nlocal: 944 ave 948 max 940 min Histogram: 1 0 0 1 0 0 1 0 0 1 @@ -168,4 +154,4 @@ Ave neighs/atom = 456.98835 Ave special neighs/atom = 0.50847458 Neighbor list builds = 6 Dangerous builds = 0 -Total wall time: 0:01:01 +Total wall time: 0:00:45 diff --git a/src/ELECTRODE/fix_electrode_conp.cpp b/src/ELECTRODE/fix_electrode_conp.cpp index 5ac28cd121..8fb8d74cf3 100644 --- a/src/ELECTRODE/fix_electrode_conp.cpp +++ b/src/ELECTRODE/fix_electrode_conp.cpp @@ -22,8 +22,8 @@ #include "compute.h" #include "domain.h" #include "electrode_accel_interface.h" -#include "electrode_matrix.h" #include "electrode_math.h" +#include "electrode_matrix.h" #include "electrode_vector.h" #include "error.h" #include "force.h" @@ -68,12 +68,19 @@ FixElectrodeConp::FixElectrodeConp(LAMMPS *lmp, int narg, char **arg) : vec_neighlist(nullptr), recvcounts(nullptr), displs(nullptr), iele_gathered(nullptr), buf_gathered(nullptr), potential_i(nullptr), potential_iele(nullptr), charge_iele(nullptr) { + // fix.h output flags + scalar_flag = 1; + vector_flag = 1; + array_flag = 1; + extscalar = 1; + extvector = 0; + extarray = 0; + read_inv = read_mat = false; symm = false; ffield = false; thermo_time = 0.; - scalar_flag = 1; - vector_flag = 1; + top_group = 0; intelflag = false; tfflag = false; @@ -223,6 +230,8 @@ FixElectrodeConp::FixElectrodeConp(LAMMPS *lmp, int narg, char **arg) : "from file"); num_of_groups = static_cast(groups.size()); size_vector = num_of_groups; + size_array_rows = num_of_groups; + size_array_cols = 2 + 2 * num_of_groups; // check groups are consistent int *mask = atom->mask; @@ -260,12 +269,6 @@ FixElectrodeConp::FixElectrodeConp(LAMMPS *lmp, int narg, char **arg) : /* ---------------------------------------------------------------------- */ -// 0 1 2 3 return 4 if successful -// fix_modify fxupdate set v [group] [var] -// fix_modify fxupdate set qsb [group] [var] -// 0 1 2 3 4 return 5 if successful -// fix_modify fxupdate set mc [group1] [group2] [var] -// fix_modify fxupdate set me [group1] [group2] [var] int FixElectrodeConp::modify_param(int narg, char **arg) { if (strcmp(arg[0], "tf") == 0) { @@ -306,49 +309,6 @@ int FixElectrodeConp::modify_param(int narg, char **arg) timer_flag = utils::logical(FLERR, arg[1], false, lmp); return 2; - } else if (strcmp(arg[0], "set") == 0) { - if (strcmp(arg[1], "v") == 0 || strcmp(arg[1], "qsb") == 0) { - if (narg != 4) - error->all(FLERR, - fmt::format("Incorrect number of arguments for fix_modify set {}", arg[1])); - int outputgrp = groupnum_from_name(arg[2]); - int outputvar = input->variable->find(arg[3]); - if (outputvar < 0) - error->all(FLERR, - fmt::format("Variable {} for fix_modify electrode does not exist", arg[3])); - if (!input->variable->internalstyle(outputvar)) - error->all(FLERR, - fmt::format("Variable {} for fix_modify electrode is invalid style", arg[3])); - if (strcmp(arg[1], "v") == 0) - setvars_types.push_back(V); - else - setvars_types.push_back(QSB); - setvars_groups.push_back(outputgrp); - setvars_vars.push_back(outputvar); - return 4; - } else if (strcmp(arg[1], "mc") == 0 || strcmp(arg[1], "me") == 0) { - if (narg != 5) - error->all(FLERR, - fmt::format("Incorrect number of arguments for fix_modify set {}", arg[1])); - int outputgrpi = groupnum_from_name(arg[2]); - int outputgrpj = groupnum_from_name(arg[3]); - int outputgrpij = outputgrpi * num_of_groups + outputgrpj; - int outputvar = input->variable->find(arg[4]); - if (outputvar < 0) - error->all(FLERR, - fmt::format("Variable {} for fix_modify electrode does not exist", arg[4])); - if (!input->variable->internalstyle(outputvar)) - error->all(FLERR, - fmt::format("Variable {} for fix_modify electrode is invalid style", arg[4])); - if (strcmp(arg[1], "mc") == 0) - setvars_types.push_back(MC); - else - setvars_types.push_back(ME); - setvars_groups.push_back(outputgrpij); - setvars_vars.push_back(outputvar); - return 5; - } else - error->all(FLERR, "Invalid set option for fix_modify electrode"); } else error->all(FLERR, "Invalid argument for fix_modify electrode"); return 0; @@ -452,10 +412,6 @@ void FixElectrodeConp::setup_post_neighbor() int *mask = atom->mask; tagint *tag = atom->tag; - // setvars asserts: - assert(setvars_groups.size() == setvars_vars.size()); - assert(setvars_groups.size() == setvars_types.size()); - // if Thomas-Fermi, make sure all electrode atoms have parameters if (tfflag) { int unset_tf = 0; @@ -539,8 +495,8 @@ void FixElectrodeConp::setup_post_neighbor() compute_macro_matrices(); MPI_Barrier(world); if (timer_flag && (comm->me == 0)) - utils::logmesg(lmp, - fmt::format("SD-vector and macro matrices time: {:.4g} s\n", MPI_Wtime() - start)); + utils::logmesg( + lmp, fmt::format("SD-vector and macro matrices time: {:.4g} s\n", MPI_Wtime() - start)); // initial charges and b vector update_charges(); @@ -789,9 +745,7 @@ void FixElectrodeConp::update_charges() gather_elevec(charge_iele); MPI_Allreduce(MPI_IN_PLACE, &sb_charges.front(), num_of_groups, MPI_DOUBLE, MPI_SUM, world); - update_setvars(QSB); - update_psi(); // use for equal-style and conq - update_setvars(V); // push psi into 'fix_modify set' vars + update_psi(); // use for equal-style and conq for (int g = 0; g < num_of_groups; g++) for (int j = 0; j < ngroup; j++) { charge_iele[j] += sd_vectors[g][j] * group_psi[g]; } @@ -820,34 +774,6 @@ void FixElectrodeConp::update_psi() /* ---------------------------------------------------------------------- */ -void FixElectrodeConp::update_setvars(int vtype) -{ - int num_of_vars = static_cast(setvars_groups.size()); - for (int v = 0; v < num_of_vars; v++) { - if (vtype != setvars_types[v]) continue; - switch (vtype) { - case V: - input->variable->internal_set(setvars_vars[v], group_psi[setvars_groups[v]]); - break; - case QSB: - input->variable->internal_set(setvars_vars[v], sb_charges[setvars_groups[v]]); - break; - case MC: { - int groupi = setvars_groups[v] / num_of_groups; - int groupj = setvars_groups[v] % num_of_groups; - input->variable->internal_set(setvars_vars[v], macro_capacitance[groupi][groupj]); - } break; - case ME: { - int groupi = setvars_groups[v] / num_of_groups; - int groupj = setvars_groups[v] % num_of_groups; - input->variable->internal_set(setvars_vars[v], macro_elastance[groupi][groupj]); - } - } - } -} - -/* ---------------------------------------------------------------------- */ - void FixElectrodeConp::compute_macro_matrices() { macro_capacitance = @@ -902,9 +828,6 @@ void FixElectrodeConp::compute_macro_matrices() } } } - - update_setvars(MC); - update_setvars(ME); } /* ---------------------------------------------------------------------- */ @@ -913,6 +836,7 @@ double FixElectrodeConp::compute_scalar() { return potential_energy(0); } + /* ---------------------------------------------------------------------- */ double FixElectrodeConp::compute_vector(int i) @@ -922,6 +846,19 @@ double FixElectrodeConp::compute_vector(int i) /* ---------------------------------------------------------------------- */ +double FixElectrodeConp::compute_array(int i, int j) +{ + if (j == 0) + return sb_charges[i]; + else if (j <= num_of_groups) + return macro_capacitance[i][j - 1]; + else if (j <= 2 * num_of_groups) + return macro_elastance[i][j - num_of_groups - 1]; + else return 0.; // avoid -Wreturn-type warning +} + +/* ---------------------------------------------------------------------- */ + double FixElectrodeConp::potential_energy(int eflag) { // corrections to energy due to potential psi diff --git a/src/ELECTRODE/fix_electrode_conp.h b/src/ELECTRODE/fix_electrode_conp.h index 5113ad46cb..b61984f7d9 100644 --- a/src/ELECTRODE/fix_electrode_conp.h +++ b/src/ELECTRODE/fix_electrode_conp.h @@ -47,6 +47,7 @@ class FixElectrodeConp : public Fix { void pre_reverse(int, int) override; double compute_scalar() override; double compute_vector(int) override; + double compute_array(int, int) override; int modify_param(int, char **) override; int modify_param(const std::string &); void init() override; @@ -104,8 +105,6 @@ class FixElectrodeConp : public Fix { void read_from_file(std::string input_file, double **, const std::string &); void compute_sd_vectors(); void compute_sd_vectors_ffield(); - std::vector setvars_types, setvars_groups, setvars_vars; - void update_setvars(int); int groupnum_from_name(char *); double evscale; class Pair *pair; From 597e3b77296b87e470ee43a4c4698c5de70000ca Mon Sep 17 00:00:00 2001 From: Shern Tee Date: Wed, 8 Jun 2022 13:35:47 +0000 Subject: [PATCH 06/46] use array output for fix electrode instead of fix_modify --- doc/src/fix_electrode_conp.rst | 94 +++++++++----- examples/PACKAGES/electrode/graph-il/in.conq | 8 +- examples/PACKAGES/electrode/graph-il/in.conq2 | 24 +--- ...++.1 => log.27May2022.graph-il-conq.g++.1} | 38 +++--- ...++.4 => log.27May2022.graph-il-conq.g++.4} | 36 +++--- ...+.1 => log.27May2022.graph-il-conq2.g++.1} | 50 +++----- ...+.4 => log.27May2022.graph-il-conq2.g++.4} | 50 +++----- src/ELECTRODE/fix_electrode_conp.cpp | 115 ++++-------------- src/ELECTRODE/fix_electrode_conp.h | 3 +- 9 files changed, 163 insertions(+), 255 deletions(-) rename examples/PACKAGES/electrode/graph-il/{log.26Apr2022.graph-il-conq.g++.1 => log.27May2022.graph-il-conq.g++.1} (83%) rename examples/PACKAGES/electrode/graph-il/{log.26Apr2022.graph-il-conq.g++.4 => log.27May2022.graph-il-conq.g++.4} (84%) rename examples/PACKAGES/electrode/graph-il/{log.26Apr2022.graph-il-conq2.g++.1 => log.27May2022.graph-il-conq2.g++.1} (78%) rename examples/PACKAGES/electrode/graph-il/{log.26Apr2022.graph-il-conq2.g++.4 => log.27May2022.graph-il-conq2.g++.4} (78%) diff --git a/doc/src/fix_electrode_conp.rst b/doc/src/fix_electrode_conp.rst index 75b099995f..668b2371b9 100644 --- a/doc/src/fix_electrode_conp.rst +++ b/doc/src/fix_electrode_conp.rst @@ -31,7 +31,7 @@ Syntax * ID, group-ID are documented in fix command * mode = electrode/conp or electrode/conq or electrode/thermo -* potential = electrode potential +* potential = electrode potential (number, or equal-style variable) * charge = electrode charge * eta = reciprocal width of electrode charge smearing * T_v = temperature of thermo-potentiostat @@ -86,6 +86,22 @@ fix electrode/thermo implements a thermo-potentiostat :ref:`(Deissenbeck) to be specified using the temp keyword. Currently, only two electrodes are possible with this style. +For all three fixes, any potential (or charge for *conq*) can be specified as an +equal-style variable prefixed with "v_". For example, the following code will +ramp the potential difference between electrodes from 0.0V to 2.0V over the +course of the simulation: + +.. code-block:: LAMMPS + + fix fxconp bot electrode/conp 0.0 1.805 couple top v_v symm on + variable v equal ramp(0.0, 2.0) + +Note that these fixes only parse their supplied variable name when starting a +run, and so these fixes will accept equal-style variables defined *after* the +fix definition, including variables dependent on the fix's own output. For an +advanced example of this see the in.conq2 input file in the directory +examples/PACKAGES/electrode/graph-il. + This fix necessitates the use of a long range solver that calculates and provides the matrix of electrode-electrode interactions and a vector of electrode-electrolyte interactions. The Kspace styles *ewald/electrode*, *pppm/electrode* and @@ -130,48 +146,64 @@ file, for code developers to track optimization. fix_modify ID timer on/off -The *fix_modify set* options allow calculated quantities to be accessed via -internal variables. Currently four types of quantities can be accessed: +---------- -.. code-block:: LAMMPS +These fixes compute a global (extensive) scalar, a global (intensive) vector, +and a global array, which can be accessed by various +:doc:`output commands `. - fix-modify ID set v group-ID variablename - fix-modify ID set qsb group-ID variablename - fix-modify ID set mc group-ID1 group-ID2 variablename - fix-modify ID set me group-ID1 group-ID2 variablename +The global scalar outputs the energy added to the system by this fix, which is +the negative of the total charge on each electrode multiplied by that +electrode's potential. -One use case is to output the potential that is internally calculated and -applied to each electrode group by *fix electrode/conq* or *fix electrode/thermo*. -For that case the *v* option makes *fix electrode* update the variable -*variablename* with the potential applied to group *group-ID*, where *group-ID* -must be a group whose charges are updated by *fix electrode* and *variablename* -must be an internal-style variable: +The global vector outputs the potential on each electrode (and thus has *N* +entries if the fix manages *N* electrode groups), in :doc:`units ` of +electric field multiplied by distance (thus volts for *real* and *metal* units). +The electrode groups' ordering follows the order in which they were input in the +fix command using *couple*. The global vector output is useful for +*fix electrode/conq* and *fix electrode/thermo*, +where potential is dynamically updated based on electrolyte configuration +instead of being directly set. -.. code-block:: LAMMPS +The global array has *N* rows and *2N+1* columns, where the fix manages *N* +electrode groups managed by the fix. For the *I*-th row of the array, the +elements are: - fix conq bot electrode/conq -1.0 1.979 couple top 1.0 - variable vbot internal 0.0 - fix_modify conq set v bot vbot +* array[I][1] = total charge that group *I* would have had *if it were at 0 V + applied potential* +* array[I][2 to *N* + 1] = the *N* entries of the *I*-th row of the electrode + capacitance matrix (definition follows) +* array[I][*N* + 2 to *2N* + 1] = the *N* entries of the *I*-th row of the electrode + elastance matrix (the inverse of the electrode capacitance matrix) -The *qsb* option similarly outputs the total updated charge of the group if its -potential were 0.0V. The *mc* option requires two *group-IDs*, and outputs the -entry \{*group-ID1*, *group-ID2*\} of the (symmetric) *macro-capacitance* matrix -(MC) which relates the electrodes' applied potentials (V), total charges (Q), and -total charges at 0.0 V (Qsb): +The :math:`N \times N` electrode capacitance matrix, denoted :math:`\mathbf{C}` +in the following equation, summarizes how the total charge induced on each electrode +(:math:`\mathbf{Q}` as an *N*-vector) is related to the potential on each +electrode, :math:`\mathbf{V}`, and the charge-at-0V :math:`\mathbf{Q}_{0V}` +(which is influenced by the local electrolyte structure): .. math:: - \mathbf{Q} = \mathbf{Q}_{SB} + \mathbf{MC} \cdot \mathbf{V} + \mathbf{Q} = \mathbf{Q}_{0V} + \mathbf{C} \cdot \mathbf{V} -Lastly, the *me* option also requires two *group-IDs* and outputs the entry -\{*group-ID1*, *group-ID2*\} of the *macro-elastance* matrix, which is the -inverse of the macro-capacitance matrix. (As the names denote, the -macro-capacitance matrix gives electrode charges from potentials, and the -macro-elastance matrix gives electrode potentials from charges). +The charge-at-0V, electrode capacitance and elastance matrices are internally used to +calculate the potentials required to induce the specified total electrode charges +in *fix electrode/conq* and *fix electrode/thermo*. With the *symm on* option, +the electrode capacitance matrix would be singular, and thus its last row is +replaced with *N* copies of its top-left entry (:math:`\mathbf{C}_{11}`) for +invertibility. -.. warning:: +The global array output is mainly useful for quickly determining the 'vacuum +capacitance' of the system (capacitance with only electrodes, no electrolyte), +and can also be used for advanced simulations setting the potential as some +function of the charge-at-0V (such as in the in.conq2 example mentioned above). - Positions of electrode particles have to be immobilized at all times. +---------- + +Restrictions +"""""""""""" + +Positions of electrode particles have to be immobilized at all times. The parallelization for the fix works best if electrode atoms are evenly distributed across processors. For a system with two electrodes at the bottom diff --git a/examples/PACKAGES/electrode/graph-il/in.conq b/examples/PACKAGES/electrode/graph-il/in.conq index 08429924d4..088cf0a8ac 100644 --- a/examples/PACKAGES/electrode/graph-il/in.conq +++ b/examples/PACKAGES/electrode/graph-il/in.conq @@ -7,12 +7,6 @@ kspace_modify slab 3.0 fix conq bot electrode/conq -1.0 1.979 couple top 1.0 etypes 5 # conq doesn't take symm option -# ask fix conq to output electrode potentials to internal variables -variable vbot internal 0.0 -variable vtop internal 0.0 -fix_modify conq set v bot vbot -fix_modify conq set v top vtop - thermo 50 -thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop v_vbot v_vtop +thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop f_conq[1] f_conq[2] run 500 diff --git a/examples/PACKAGES/electrode/graph-il/in.conq2 b/examples/PACKAGES/electrode/graph-il/in.conq2 index 46c9ecbf99..4f84322196 100644 --- a/examples/PACKAGES/electrode/graph-il/in.conq2 +++ b/examples/PACKAGES/electrode/graph-il/in.conq2 @@ -7,28 +7,14 @@ kspace_modify slab 3.0 fix conp bot electrode/conp v_vbot 1.979 couple top v_vtop etypes 5 -# get the four entries of electrode elastance matrix -variable me00 internal 0.0 -variable me01 internal 0.0 -variable me10 internal 0.0 -variable me11 internal 0.0 -fix_modify conp set me bot bot me00 -fix_modify conp set me bot top me01 -fix_modify conp set me top bot me10 -fix_modify conp set me top top me11 - -# get the 0V charges (qsb), and excess charge required to reach preset total charges -variable qsb_bot internal 0.0 -variable qsb_top internal 0.0 -fix_modify conp set qsb bot qsb_bot -fix_modify conp set qsb top qsb_top -variable qex_bot equal -1.0-v_qsb_bot # difference between desired and 0V charge -variable qex_top equal 1.0-v_qsb_top # difference between desired and 0V charge +variable qex_bot equal -1.0-f_conp[1][1] # difference between desired and 0V charge +variable qex_top equal 1.0-f_conp[2][1] # difference between desired and 0V charge # calculate imposed potential as elastance * excess charge # note: fix will wait until the run setup to look for its potential variables -variable vbot equal v_me00*v_qex_bot+v_me01*v_qex_top -variable vtop equal v_me10*v_qex_bot+v_me11*v_qex_top +# which is why we can define variable names *after* fix conp without error +variable vbot equal f_conp[1][4]*v_qex_bot+f_conp[1][5]*v_qex_top +variable vtop equal f_conp[2][4]*v_qex_bot+f_conp[2][5]*v_qex_top thermo 50 thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop v_vbot v_vtop diff --git a/examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-conq.g++.1 b/examples/PACKAGES/electrode/graph-il/log.27May2022.graph-il-conq.g++.1 similarity index 83% rename from examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-conq.g++.1 rename to examples/PACKAGES/electrode/graph-il/log.27May2022.graph-il-conq.g++.1 index 5722e357ec..0475fb07b6 100644 --- a/examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-conq.g++.1 +++ b/examples/PACKAGES/electrode/graph-il/log.27May2022.graph-il-conq.g++.1 @@ -38,7 +38,7 @@ Finding 1-2 1-3 1-4 neighbors ... 1 = max # of 1-4 neighbors 2 = max # of special neighbors special bonds CPU = 0.001 seconds - read_data CPU = 0.012 seconds + read_data CPU = 0.014 seconds group bot molecule 641 416 atoms in group bot @@ -56,7 +56,7 @@ fix shake bmi shake 1e-4 20 0 b 1 2 a 1 0 = # of size 3 clusters 0 = # of size 4 clusters 320 = # of frozen angles - find clusters CPU = 0.000 seconds + find clusters CPU = 0.001 seconds variable q atom q compute qtop top reduce sum v_q @@ -67,14 +67,8 @@ kspace_modify slab 3.0 fix conq bot electrode/conq -1.0 1.979 couple top 1.0 etypes 5 # conq doesn't take symm option 832 atoms in group conp_group -# ask fix conq to output electrode potentials to internal variables -variable vbot internal 0.0 -variable vtop internal 0.0 -fix_modify conq set v bot vbot -fix_modify conq set v top vtop - thermo 50 -thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop v_vbot v_vtop +thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop f_conq[1] f_conq[2] run 500 PPPM/electrode initialization ... using 12-bit tables for long-range coulomb (src/kspace.cpp:342) @@ -109,7 +103,7 @@ Neighbor list info ... stencil: none bin: none Per MPI rank memory allocation (min/avg/max) = 56.89 | 56.89 | 56.89 Mbytes - Step Temp c_ctemp E_pair TotEng c_qbot c_qtop v_vbot v_vtop + Step Temp c_ctemp E_pair TotEng c_qbot c_qtop f_conq[1] f_conq[2] 0 0 0 25136984 25136984 -1 1 -9.931852 10.097344 50 20.206425 72.797911 25136825 25137033 -1 1 -9.4359366 9.5964514 100 55.931663 201.50563 25136587 25137163 -1 1 -8.0440112 8.1861787 @@ -121,22 +115,22 @@ Per MPI rank memory allocation (min/avg/max) = 56.89 | 56.89 | 56.89 Mbytes 400 122.8443 442.57252 25136991 25138256 -1 1 -3.4311003 3.3941657 450 128.63713 463.44243 25137048 25138373 -1 1 -4.132871 3.9852959 500 131.18361 472.61665 25137142 25138493 -1 1 -4.5104095 4.2567261 -Loop time of 48.9361 on 1 procs for 500 steps with 3776 atoms +Loop time of 43.3117 on 1 procs for 500 steps with 3776 atoms -Performance: 0.883 ns/day, 27.187 hours/ns, 10.217 timesteps/s -393.9% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 0.997 ns/day, 24.062 hours/ns, 11.544 timesteps/s +394.5% CPU use with 1 MPI tasks x no OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 17.652 | 17.652 | 17.652 | 0.0 | 36.07 -Bond | 0.0010418 | 0.0010418 | 0.0010418 | 0.0 | 0.00 -Kspace | 16.566 | 16.566 | 16.566 | 0.0 | 33.85 -Neigh | 0.21584 | 0.21584 | 0.21584 | 0.0 | 0.44 -Comm | 0.04167 | 0.04167 | 0.04167 | 0.0 | 0.09 -Output | 0.0014585 | 0.0014585 | 0.0014585 | 0.0 | 0.00 -Modify | 14.445 | 14.445 | 14.445 | 0.0 | 29.52 -Other | | 0.0134 | | | 0.03 +Pair | 15.554 | 15.554 | 15.554 | 0.0 | 35.91 +Bond | 0.00094737 | 0.00094737 | 0.00094737 | 0.0 | 0.00 +Kspace | 16.502 | 16.502 | 16.502 | 0.0 | 38.10 +Neigh | 0.20285 | 0.20285 | 0.20285 | 0.0 | 0.47 +Comm | 0.039776 | 0.039776 | 0.039776 | 0.0 | 0.09 +Output | 0.0014342 | 0.0014342 | 0.0014342 | 0.0 | 0.00 +Modify | 10.998 | 10.998 | 10.998 | 0.0 | 25.39 +Other | | 0.01261 | | | 0.03 Nlocal: 3776 ave 3776 max 3776 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -150,4 +144,4 @@ Ave neighs/atom = 456.98835 Ave special neighs/atom = 0.50847458 Neighbor list builds = 6 Dangerous builds = 0 -Total wall time: 0:01:43 +Total wall time: 0:01:38 diff --git a/examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-conq.g++.4 b/examples/PACKAGES/electrode/graph-il/log.27May2022.graph-il-conq.g++.4 similarity index 84% rename from examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-conq.g++.4 rename to examples/PACKAGES/electrode/graph-il/log.27May2022.graph-il-conq.g++.4 index 96343114e6..ba028200d9 100644 --- a/examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-conq.g++.4 +++ b/examples/PACKAGES/electrode/graph-il/log.27May2022.graph-il-conq.g++.4 @@ -39,7 +39,7 @@ Finding 1-2 1-3 1-4 neighbors ... 1 = max # of 1-4 neighbors 2 = max # of special neighbors special bonds CPU = 0.001 seconds - read_data CPU = 0.020 seconds + read_data CPU = 0.015 seconds group bot molecule 641 416 atoms in group bot @@ -68,14 +68,8 @@ kspace_modify slab 3.0 fix conq bot electrode/conq -1.0 1.979 couple top 1.0 etypes 5 # conq doesn't take symm option 832 atoms in group conp_group -# ask fix conq to output electrode potentials to internal variables -variable vbot internal 0.0 -variable vtop internal 0.0 -fix_modify conq set v bot vbot -fix_modify conq set v top vtop - thermo 50 -thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop v_vbot v_vtop +thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop f_conq[1] f_conq[2] run 500 PPPM/electrode initialization ... using 12-bit tables for long-range coulomb (src/kspace.cpp:342) @@ -110,7 +104,7 @@ Neighbor list info ... stencil: none bin: none Per MPI rank memory allocation (min/avg/max) = 23.63 | 27.46 | 31.29 Mbytes - Step Temp c_ctemp E_pair TotEng c_qbot c_qtop v_vbot v_vtop + Step Temp c_ctemp E_pair TotEng c_qbot c_qtop f_conq[1] f_conq[2] 0 0 0 25136984 25136984 -1 1 -9.931852 10.097344 50 20.206425 72.797911 25136825 25137033 -1 1 -9.4359366 9.5964514 100 55.931663 201.50563 25136587 25137163 -1 1 -8.0440112 8.1861787 @@ -122,22 +116,22 @@ Per MPI rank memory allocation (min/avg/max) = 23.63 | 27.46 | 31.29 Mbytes 400 122.8443 442.57252 25136991 25138256 -1 1 -3.4311003 3.3941657 450 128.63713 463.44243 25137048 25138373 -1 1 -4.132871 3.9852959 500 131.18361 472.61665 25137142 25138493 -1 1 -4.5104095 4.2567261 -Loop time of 28.8336 on 4 procs for 500 steps with 3776 atoms +Loop time of 23.8659 on 4 procs for 500 steps with 3776 atoms -Performance: 1.498 ns/day, 16.019 hours/ns, 17.341 timesteps/s -94.1% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 1.810 ns/day, 13.259 hours/ns, 20.950 timesteps/s +93.5% CPU use with 4 MPI tasks x no OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 5.7721 | 5.9353 | 6.144 | 6.0 | 20.58 -Bond | 0.00057855 | 0.00067043 | 0.00074793 | 0.0 | 0.00 -Kspace | 13.485 | 13.694 | 13.857 | 4.0 | 47.49 -Neigh | 0.092021 | 0.092044 | 0.092068 | 0.0 | 0.32 -Comm | 0.11486 | 0.11638 | 0.11801 | 0.4 | 0.40 -Output | 0.00090452 | 0.001109 | 0.0017097 | 1.0 | 0.00 -Modify | 8.974 | 8.9761 | 8.978 | 0.1 | 31.13 -Other | | 0.01837 | | | 0.06 +Pair | 4.2231 | 4.3451 | 4.5145 | 5.6 | 18.21 +Bond | 0.00048756 | 0.00052807 | 0.00058913 | 0.0 | 0.00 +Kspace | 12.239 | 12.408 | 12.53 | 3.3 | 51.99 +Neigh | 0.062108 | 0.062136 | 0.062173 | 0.0 | 0.26 +Comm | 0.092261 | 0.096857 | 0.10111 | 1.1 | 0.41 +Output | 0.00063911 | 0.00082467 | 0.0013664 | 0.0 | 0.00 +Modify | 6.9315 | 6.9362 | 6.9417 | 0.2 | 29.06 +Other | | 0.01626 | | | 0.07 Nlocal: 944 ave 948 max 940 min Histogram: 1 0 0 1 0 0 1 0 0 1 @@ -151,4 +145,4 @@ Ave neighs/atom = 456.98835 Ave special neighs/atom = 0.50847458 Neighbor list builds = 6 Dangerous builds = 0 -Total wall time: 0:00:51 +Total wall time: 0:00:44 diff --git a/examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-conq2.g++.1 b/examples/PACKAGES/electrode/graph-il/log.27May2022.graph-il-conq2.g++.1 similarity index 78% rename from examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-conq2.g++.1 rename to examples/PACKAGES/electrode/graph-il/log.27May2022.graph-il-conq2.g++.1 index 4465ed311d..8d3e01ca93 100644 --- a/examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-conq2.g++.1 +++ b/examples/PACKAGES/electrode/graph-il/log.27May2022.graph-il-conq2.g++.1 @@ -38,7 +38,7 @@ Finding 1-2 1-3 1-4 neighbors ... 1 = max # of 1-4 neighbors 2 = max # of special neighbors special bonds CPU = 0.001 seconds - read_data CPU = 0.031 seconds + read_data CPU = 0.013 seconds group bot molecule 641 416 atoms in group bot @@ -67,28 +67,14 @@ kspace_modify slab 3.0 fix conp bot electrode/conp v_vbot 1.979 couple top v_vtop etypes 5 832 atoms in group conp_group -# get the four entries of electrode elastance matrix -variable me00 internal 0.0 -variable me01 internal 0.0 -variable me10 internal 0.0 -variable me11 internal 0.0 -fix_modify conp set me bot bot me00 -fix_modify conp set me bot top me01 -fix_modify conp set me top bot me10 -fix_modify conp set me top top me11 - -# get the 0V charges (qsb), and excess charge required to reach preset total charges -variable qsb_bot internal 0.0 -variable qsb_top internal 0.0 -fix_modify conp set qsb bot qsb_bot -fix_modify conp set qsb top qsb_top -variable qex_bot equal -1.0-v_qsb_bot # difference between desired and 0V charge -variable qex_top equal 1.0-v_qsb_top # difference between desired and 0V charge +variable qex_bot equal -1.0-f_conp[1][1] # difference between desired and 0V charge +variable qex_top equal 1.0-f_conp[2][1] # difference between desired and 0V charge # calculate imposed potential as elastance * excess charge # note: fix will wait until the run setup to look for its potential variables -variable vbot equal v_me00*v_qex_bot+v_me01*v_qex_top -variable vtop equal v_me10*v_qex_bot+v_me11*v_qex_top +# which is why we can define variable names *after* fix conp without error +variable vbot equal f_conp[1][4]*v_qex_bot+f_conp[1][5]*v_qex_top +variable vtop equal f_conp[2][4]*v_qex_bot+f_conp[2][5]*v_qex_top thermo 50 thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop v_vbot v_vtop @@ -138,22 +124,22 @@ Per MPI rank memory allocation (min/avg/max) = 56.89 | 56.89 | 56.89 Mbytes 400 122.8443 442.57252 25136991 25138256 -1 1 -3.4311003 3.3941657 450 128.63713 463.44243 25137048 25138373 -1 1 -4.132871 3.9852959 500 131.18361 472.61665 25137142 25138493 -1 1 -4.5104095 4.2567261 -Loop time of 62.9692 on 1 procs for 500 steps with 3776 atoms +Loop time of 44.4233 on 1 procs for 500 steps with 3776 atoms -Performance: 0.686 ns/day, 34.983 hours/ns, 7.940 timesteps/s -393.7% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 0.972 ns/day, 24.680 hours/ns, 11.255 timesteps/s +394.3% CPU use with 1 MPI tasks x no OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 20.307 | 20.307 | 20.307 | 0.0 | 32.25 -Bond | 0.0020074 | 0.0020074 | 0.0020074 | 0.0 | 0.00 -Kspace | 23.562 | 23.562 | 23.562 | 0.0 | 37.42 -Neigh | 0.26149 | 0.26149 | 0.26149 | 0.0 | 0.42 -Comm | 0.059436 | 0.059436 | 0.059436 | 0.0 | 0.09 -Output | 0.0023888 | 0.0023888 | 0.0023888 | 0.0 | 0.00 -Modify | 18.756 | 18.756 | 18.756 | 0.0 | 29.79 -Other | | 0.01897 | | | 0.03 +Pair | 15.812 | 15.812 | 15.812 | 0.0 | 35.59 +Bond | 0.00085223 | 0.00085223 | 0.00085223 | 0.0 | 0.00 +Kspace | 17.03 | 17.03 | 17.03 | 0.0 | 38.33 +Neigh | 0.20513 | 0.20513 | 0.20513 | 0.0 | 0.46 +Comm | 0.04065 | 0.04065 | 0.04065 | 0.0 | 0.09 +Output | 0.0016819 | 0.0016819 | 0.0016819 | 0.0 | 0.00 +Modify | 11.32 | 11.32 | 11.32 | 0.0 | 25.48 +Other | | 0.01313 | | | 0.03 Nlocal: 3776 ave 3776 max 3776 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -167,4 +153,4 @@ Ave neighs/atom = 456.98835 Ave special neighs/atom = 0.50847458 Neighbor list builds = 6 Dangerous builds = 0 -Total wall time: 0:02:26 +Total wall time: 0:01:37 diff --git a/examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-conq2.g++.4 b/examples/PACKAGES/electrode/graph-il/log.27May2022.graph-il-conq2.g++.4 similarity index 78% rename from examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-conq2.g++.4 rename to examples/PACKAGES/electrode/graph-il/log.27May2022.graph-il-conq2.g++.4 index cf8ddf60a3..0e95bee2ee 100644 --- a/examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-conq2.g++.4 +++ b/examples/PACKAGES/electrode/graph-il/log.27May2022.graph-il-conq2.g++.4 @@ -39,7 +39,7 @@ Finding 1-2 1-3 1-4 neighbors ... 1 = max # of 1-4 neighbors 2 = max # of special neighbors special bonds CPU = 0.001 seconds - read_data CPU = 0.019 seconds + read_data CPU = 0.015 seconds group bot molecule 641 416 atoms in group bot @@ -68,28 +68,14 @@ kspace_modify slab 3.0 fix conp bot electrode/conp v_vbot 1.979 couple top v_vtop etypes 5 832 atoms in group conp_group -# get the four entries of electrode elastance matrix -variable me00 internal 0.0 -variable me01 internal 0.0 -variable me10 internal 0.0 -variable me11 internal 0.0 -fix_modify conp set me bot bot me00 -fix_modify conp set me bot top me01 -fix_modify conp set me top bot me10 -fix_modify conp set me top top me11 - -# get the 0V charges (qsb), and excess charge required to reach preset total charges -variable qsb_bot internal 0.0 -variable qsb_top internal 0.0 -fix_modify conp set qsb bot qsb_bot -fix_modify conp set qsb top qsb_top -variable qex_bot equal -1.0-v_qsb_bot # difference between desired and 0V charge -variable qex_top equal 1.0-v_qsb_top # difference between desired and 0V charge +variable qex_bot equal -1.0-f_conp[1][1] # difference between desired and 0V charge +variable qex_top equal 1.0-f_conp[2][1] # difference between desired and 0V charge # calculate imposed potential as elastance * excess charge # note: fix will wait until the run setup to look for its potential variables -variable vbot equal v_me00*v_qex_bot+v_me01*v_qex_top -variable vtop equal v_me10*v_qex_bot+v_me11*v_qex_top +# which is why we can define variable names *after* fix conp without error +variable vbot equal f_conp[1][4]*v_qex_bot+f_conp[1][5]*v_qex_top +variable vtop equal f_conp[2][4]*v_qex_bot+f_conp[2][5]*v_qex_top thermo 50 thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop v_vbot v_vtop @@ -139,22 +125,22 @@ Per MPI rank memory allocation (min/avg/max) = 23.63 | 27.46 | 31.29 Mbytes 400 122.8443 442.57252 25136991 25138256 -1 1 -3.4311003 3.3941657 450 128.63713 463.44243 25137048 25138373 -1 1 -4.132871 3.9852959 500 131.18361 472.61665 25137142 25138493 -1 1 -4.5104095 4.2567261 -Loop time of 33.4031 on 4 procs for 500 steps with 3776 atoms +Loop time of 23.4081 on 4 procs for 500 steps with 3776 atoms -Performance: 1.293 ns/day, 18.557 hours/ns, 14.969 timesteps/s -94.3% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 1.846 ns/day, 13.005 hours/ns, 21.360 timesteps/s +93.5% CPU use with 4 MPI tasks x no OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 7.1262 | 7.3913 | 7.611 | 6.8 | 22.13 -Bond | 0.0007191 | 0.00079089 | 0.00087005 | 0.0 | 0.00 -Kspace | 15.139 | 15.358 | 15.623 | 4.7 | 45.98 -Neigh | 0.10374 | 0.10377 | 0.10383 | 0.0 | 0.31 -Comm | 0.14245 | 0.14353 | 0.14563 | 0.3 | 0.43 -Output | 0.0012987 | 0.0015671 | 0.0022434 | 1.0 | 0.00 -Modify | 10.381 | 10.383 | 10.384 | 0.0 | 31.08 -Other | | 0.02134 | | | 0.06 +Pair | 4.1792 | 4.3002 | 4.4836 | 5.7 | 18.37 +Bond | 0.00045023 | 0.00053483 | 0.00058432 | 0.0 | 0.00 +Kspace | 12.016 | 12.199 | 12.32 | 3.4 | 52.11 +Neigh | 0.062683 | 0.062707 | 0.062734 | 0.0 | 0.27 +Comm | 0.086385 | 0.08861 | 0.090874 | 0.7 | 0.38 +Output | 0.00082773 | 0.0010401 | 0.0016576 | 1.1 | 0.00 +Modify | 6.7386 | 6.7413 | 6.7443 | 0.1 | 28.80 +Other | | 0.0151 | | | 0.06 Nlocal: 944 ave 948 max 940 min Histogram: 1 0 0 1 0 0 1 0 0 1 @@ -168,4 +154,4 @@ Ave neighs/atom = 456.98835 Ave special neighs/atom = 0.50847458 Neighbor list builds = 6 Dangerous builds = 0 -Total wall time: 0:01:01 +Total wall time: 0:00:45 diff --git a/src/ELECTRODE/fix_electrode_conp.cpp b/src/ELECTRODE/fix_electrode_conp.cpp index 0122aeeffe..8afa83c9b1 100644 --- a/src/ELECTRODE/fix_electrode_conp.cpp +++ b/src/ELECTRODE/fix_electrode_conp.cpp @@ -68,12 +68,19 @@ FixElectrodeConp::FixElectrodeConp(LAMMPS *lmp, int narg, char **arg) : vec_neighlist(nullptr), recvcounts(nullptr), displs(nullptr), iele_gathered(nullptr), buf_gathered(nullptr), potential_i(nullptr), potential_iele(nullptr), charge_iele(nullptr) { + // fix.h output flags + scalar_flag = 1; + vector_flag = 1; + array_flag = 1; + extscalar = 1; + extvector = 0; + extarray = 0; + read_inv = read_mat = false; symm = false; ffield = false; thermo_time = 0.; - scalar_flag = 1; - vector_flag = 1; + top_group = 0; intelflag = false; tfflag = false; @@ -223,6 +230,8 @@ FixElectrodeConp::FixElectrodeConp(LAMMPS *lmp, int narg, char **arg) : "from file"); num_of_groups = static_cast(groups.size()); size_vector = num_of_groups; + size_array_rows = num_of_groups; + size_array_cols = 2 + 2 * num_of_groups; // check groups are consistent int *mask = atom->mask; @@ -260,12 +269,6 @@ FixElectrodeConp::FixElectrodeConp(LAMMPS *lmp, int narg, char **arg) : /* ---------------------------------------------------------------------- */ -// 0 1 2 3 return 4 if successful -// fix_modify fxupdate set v [group] [var] -// fix_modify fxupdate set qsb [group] [var] -// 0 1 2 3 4 return 5 if successful -// fix_modify fxupdate set mc [group1] [group2] [var] -// fix_modify fxupdate set me [group1] [group2] [var] int FixElectrodeConp::modify_param(int narg, char **arg) { if (strcmp(arg[0], "tf") == 0) { @@ -306,49 +309,6 @@ int FixElectrodeConp::modify_param(int narg, char **arg) timer_flag = utils::logical(FLERR, arg[1], false, lmp); return 2; - } else if (strcmp(arg[0], "set") == 0) { - if (strcmp(arg[1], "v") == 0 || strcmp(arg[1], "qsb") == 0) { - if (narg != 4) - error->all(FLERR, - fmt::format("Incorrect number of arguments for fix_modify set {}", arg[1])); - int outputgrp = groupnum_from_name(arg[2]); - int outputvar = input->variable->find(arg[3]); - if (outputvar < 0) - error->all(FLERR, - fmt::format("Variable {} for fix_modify electrode does not exist", arg[3])); - if (!input->variable->internalstyle(outputvar)) - error->all(FLERR, - fmt::format("Variable {} for fix_modify electrode is invalid style", arg[3])); - if (strcmp(arg[1], "v") == 0) - setvars_types.push_back(V); - else - setvars_types.push_back(QSB); - setvars_groups.push_back(outputgrp); - setvars_vars.push_back(outputvar); - return 4; - } else if (strcmp(arg[1], "mc") == 0 || strcmp(arg[1], "me") == 0) { - if (narg != 5) - error->all(FLERR, - fmt::format("Incorrect number of arguments for fix_modify set {}", arg[1])); - int outputgrpi = groupnum_from_name(arg[2]); - int outputgrpj = groupnum_from_name(arg[3]); - int outputgrpij = outputgrpi * num_of_groups + outputgrpj; - int outputvar = input->variable->find(arg[4]); - if (outputvar < 0) - error->all(FLERR, - fmt::format("Variable {} for fix_modify electrode does not exist", arg[4])); - if (!input->variable->internalstyle(outputvar)) - error->all(FLERR, - fmt::format("Variable {} for fix_modify electrode is invalid style", arg[4])); - if (strcmp(arg[1], "mc") == 0) - setvars_types.push_back(MC); - else - setvars_types.push_back(ME); - setvars_groups.push_back(outputgrpij); - setvars_vars.push_back(outputvar); - return 5; - } else - error->all(FLERR, "Invalid set option for fix_modify electrode"); } else error->all(FLERR, "Invalid argument for fix_modify electrode"); return 0; @@ -452,10 +412,6 @@ void FixElectrodeConp::setup_post_neighbor() int *mask = atom->mask; tagint *tag = atom->tag; - // setvars asserts: - assert(setvars_groups.size() == setvars_vars.size()); - assert(setvars_groups.size() == setvars_types.size()); - // if Thomas-Fermi, make sure all electrode atoms have parameters if (tfflag) { int unset_tf = 0; @@ -789,9 +745,7 @@ void FixElectrodeConp::update_charges() gather_elevec(charge_iele); MPI_Allreduce(MPI_IN_PLACE, &sb_charges.front(), num_of_groups, MPI_DOUBLE, MPI_SUM, world); - update_setvars(QSB); - update_psi(); // use for equal-style and conq - update_setvars(V); // push psi into 'fix_modify set' vars + update_psi(); // use for equal-style and conq for (int g = 0; g < num_of_groups; g++) for (int j = 0; j < ngroup; j++) { charge_iele[j] += sd_vectors[g][j] * group_psi[g]; } @@ -820,34 +774,6 @@ void FixElectrodeConp::update_psi() /* ---------------------------------------------------------------------- */ -void FixElectrodeConp::update_setvars(int vtype) -{ - int num_of_vars = static_cast(setvars_groups.size()); - for (int v = 0; v < num_of_vars; v++) { - if (vtype != setvars_types[v]) continue; - switch (vtype) { - case V: - input->variable->internal_set(setvars_vars[v], group_psi[setvars_groups[v]]); - break; - case QSB: - input->variable->internal_set(setvars_vars[v], sb_charges[setvars_groups[v]]); - break; - case MC: { - int groupi = setvars_groups[v] / num_of_groups; - int groupj = setvars_groups[v] % num_of_groups; - input->variable->internal_set(setvars_vars[v], macro_capacitance[groupi][groupj]); - } break; - case ME: { - int groupi = setvars_groups[v] / num_of_groups; - int groupj = setvars_groups[v] % num_of_groups; - input->variable->internal_set(setvars_vars[v], macro_elastance[groupi][groupj]); - } - } - } -} - -/* ---------------------------------------------------------------------- */ - void FixElectrodeConp::compute_macro_matrices() { macro_capacitance = @@ -902,9 +828,6 @@ void FixElectrodeConp::compute_macro_matrices() } } } - - update_setvars(MC); - update_setvars(ME); } /* ---------------------------------------------------------------------- */ @@ -913,6 +836,7 @@ double FixElectrodeConp::compute_scalar() { return potential_energy(0); } + /* ---------------------------------------------------------------------- */ double FixElectrodeConp::compute_vector(int i) @@ -922,6 +846,19 @@ double FixElectrodeConp::compute_vector(int i) /* ---------------------------------------------------------------------- */ +double FixElectrodeConp::compute_array(int i, int j) +{ + if (j == 0) + return sb_charges[i]; + else if (j <= num_of_groups) + return macro_capacitance[i][j - 1]; + else if (j <= 2 * num_of_groups) + return macro_elastance[i][j - num_of_groups - 1]; + else return 0.; // avoid -Wreturn-type warning +} + +/* ---------------------------------------------------------------------- */ + double FixElectrodeConp::potential_energy(int eflag) { // corrections to energy due to potential psi diff --git a/src/ELECTRODE/fix_electrode_conp.h b/src/ELECTRODE/fix_electrode_conp.h index cc24aa6b76..b4d4c82d5c 100644 --- a/src/ELECTRODE/fix_electrode_conp.h +++ b/src/ELECTRODE/fix_electrode_conp.h @@ -47,6 +47,7 @@ class FixElectrodeConp : public Fix { void pre_reverse(int, int) override; double compute_scalar() override; double compute_vector(int) override; + double compute_array(int, int) override; int modify_param(int, char **) override; int modify_param(const std::string &); void init() override; @@ -104,8 +105,6 @@ class FixElectrodeConp : public Fix { void read_from_file(const std::string& input_file, double **, const std::string &); void compute_sd_vectors(); void compute_sd_vectors_ffield(); - std::vector setvars_types, setvars_groups, setvars_vars; - void update_setvars(int); int groupnum_from_name(char *); double evscale; class Pair *pair; From b7a491089cc2a9e34489000b7838b93c41b8a034 Mon Sep 17 00:00:00 2001 From: Ludwig Ahrens Date: Fri, 15 Jul 2022 12:11:25 +0200 Subject: [PATCH 07/46] Algorithm as input keyword --- examples/PACKAGES/electrode/graph-il/in.conp | 2 +- src/ELECTRODE/fix_electrode_conp.cpp | 216 ++++++++++++------- src/ELECTRODE/fix_electrode_conp.h | 16 +- src/ELECTRODE/fix_electrode_conq.cpp | 7 +- src/ELECTRODE/fix_electrode_thermo.cpp | 9 +- 5 files changed, 160 insertions(+), 90 deletions(-) diff --git a/examples/PACKAGES/electrode/graph-il/in.conp b/examples/PACKAGES/electrode/graph-il/in.conp index 12fcd88541..3bb4954c00 100644 --- a/examples/PACKAGES/electrode/graph-il/in.conp +++ b/examples/PACKAGES/electrode/graph-il/in.conp @@ -5,7 +5,7 @@ boundary p p f # slab calculation include settings.mod # styles, groups, computes and fixes kspace_modify slab 3.0 -fix conp bot electrode/conp -1.0 1.979 couple top 1.0 symm on +fix conp bot electrode/conp -1.0 1.979 couple top 1.0 symm on algo mat_inv thermo 50 thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop diff --git a/src/ELECTRODE/fix_electrode_conp.cpp b/src/ELECTRODE/fix_electrode_conp.cpp index 8afa83c9b1..058f6d06e8 100644 --- a/src/ELECTRODE/fix_electrode_conp.cpp +++ b/src/ELECTRODE/fix_electrode_conp.cpp @@ -52,30 +52,25 @@ void dgetri_(const int *N, double *A, const int *lda, const int *ipiv, double *w const int *lwork, int *info); } -enum { CONST, EQUAL }; -enum { - V, // voltage - QSB, // q_sb - MC, // macro_capacitance - ME // macro_elastance -}; - // 0 1 2 3 4 // fix fxupdate group1 electrode/conp pot1 eta couple group2 pot2 FixElectrodeConp::FixElectrodeConp(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg), f_inv(nullptr), f_mat(nullptr), f_vec(nullptr), array_compute(nullptr), - ele_vector(nullptr), capacitance(nullptr), pair(nullptr), mat_neighlist(nullptr), - vec_neighlist(nullptr), recvcounts(nullptr), displs(nullptr), iele_gathered(nullptr), - buf_gathered(nullptr), potential_i(nullptr), potential_iele(nullptr), charge_iele(nullptr) + ele_vector(nullptr), capacitance(nullptr), elastance(nullptr), pair(nullptr), + mat_neighlist(nullptr), vec_neighlist(nullptr), recvcounts(nullptr), displs(nullptr), + iele_gathered(nullptr), buf_gathered(nullptr), potential_i(nullptr), potential_iele(nullptr), + charge_iele(nullptr) { // fix.h output flags scalar_flag = 1; vector_flag = 1; - array_flag = 1; extscalar = 1; extvector = 0; extarray = 0; + bool default_algo = true; + algo = Algo::MATRIX_INV; + matrix_algo = true; read_inv = read_mat = false; symm = false; ffield = false; @@ -94,13 +89,13 @@ FixElectrodeConp::FixElectrodeConp(LAMMPS *lmp, int narg, char **arg) : groups = std::vector(1, igroup); group_bits = std::vector(1, groupbit); group_psi_var_names = std::vector(1); - group_psi_var_styles = std::vector(1, CONST); + group_psi_var_styles = std::vector(1, VarStyle::CONST); group_psi = std::vector(1); etypes_neighlists = false; if (strstr(arg[3], "v_") == arg[3]) { std::string vname = arg[3]; group_psi_var_names[0] = vname.substr(2); - group_psi_var_styles[0] = EQUAL; + group_psi_var_styles[0] = VarStyle::EQUAL; } else group_psi[0] = utils::numeric(FLERR, arg[3], false, lmp); char *eta_str = arg[4]; @@ -117,12 +112,12 @@ FixElectrodeConp::FixElectrodeConp(LAMMPS *lmp, int narg, char **arg) : if (strstr(arg[iarg], "v_") == arg[iarg]) { std::string vname = arg[iarg]; group_psi_var_names.push_back(vname.substr(2)); - group_psi_var_styles.push_back(EQUAL); + group_psi_var_styles.push_back(VarStyle::EQUAL); group_psi.push_back(0.); } else { std::string null; group_psi_var_names.push_back(null); - group_psi_var_styles.push_back(CONST); + group_psi_var_styles.push_back(VarStyle::CONST); group_psi.push_back(utils::numeric(FLERR, arg[iarg], false, lmp)); } } else if ((strncmp(arg[iarg], "symm", 4) == 0)) { @@ -135,6 +130,24 @@ FixElectrodeConp::FixElectrodeConp(LAMMPS *lmp, int narg, char **arg) : } else { error->all(FLERR, "Invalid argument after symm keyword"); } + } else if ((strcmp(arg[iarg], "algo") == 0)) { + if (!default_algo) error->one(FLERR, fmt::format("Algorithm can be set once, only")); + default_algo = false; + if (iarg + 2 > narg) error->all(FLERR, "Need one argument after algo command"); + char *algo_arg = arg[++iarg]; + if ((strcmp(algo_arg, "mat_inv") == 0)) { + algo = Algo::MATRIX_INV; + matrix_algo = true; + } else if ((strcmp(algo_arg, "mat_cg") == 0)) { + algo = Algo::MATRIX_CG; + matrix_algo = true; + } else if ((strcmp(algo_arg, "cg") == 0)) { + algo = Algo::CG; + matrix_algo = false; + } else { + error->all(FLERR, "Invalid argument after algo keyword"); + } + } else if ((strncmp(arg[iarg], "write", 5) == 0)) { if (iarg + 2 > narg) error->all(FLERR, "Need one argument after write command"); if (comm->me == 0) { @@ -213,25 +226,49 @@ FixElectrodeConp::FixElectrodeConp(LAMMPS *lmp, int narg, char **arg) : igroup = group->find(union_group); if (igroup < 0) error->all(FLERR, "Failed to create union of groups"); // construct computes + need_array_compute = !(read_inv || read_mat) && matrix_algo; ele_vector = new ElectrodeVector(lmp, igroup, igroup, eta, true); - if (!(read_inv || read_mat)) { array_compute = new ElectrodeMatrix(lmp, igroup, eta); } + if (need_array_compute) { array_compute = new ElectrodeMatrix(lmp, igroup, eta); } // error checks + int write_inv = 0; + int write_mat = 0; + if (comm->me == 0) { + write_inv = !!(f_inv); + write_mat = !!(f_mat); + } + MPI_Bcast(&write_inv, 1, MPI_INT, 0, world); + MPI_Bcast(&write_mat, 1, MPI_INT, 0, world); assert(groups.size() == group_bits.size()); assert(groups.size() == group_psi.size()); assert(groups.size() == group_psi_var_styles.size()); assert(groups.size() == group_psi_var_names.size()); assert(igroup == ele_vector->igroup); - if (!(read_mat || read_inv)) assert(igroup == array_compute->igroup); + if (algo != Algo::MATRIX_INV) { + if (read_inv || write_inv) + error->all( + FLERR, + "Selected algorithm does not use inverted matrix. Cannot read/write inverted matrix."); + if (symm) + error->all(FLERR, "Setting 'symm on' compatible with matrix inversion algorithm, only"); + } + if (!matrix_algo) { + if (read_mat || write_mat) + error->all(FLERR, "Selected algorithm does not use matrix. Cannot read/write matrix."); + } + if (need_array_compute) assert(igroup == array_compute->igroup); if (read_inv && read_mat) error->all(FLERR, "Cannot read matrix from two files"); - if (f_mat && read_inv) + if (write_mat && read_inv) error->all(FLERR, "Cannot write elastance matrix if reading capacitance matrix " "from file"); num_of_groups = static_cast(groups.size()); size_vector = num_of_groups; - size_array_rows = num_of_groups; - size_array_cols = 2 + 2 * num_of_groups; + array_flag = !!(algo == Algo::MATRIX_INV); + if (array_flag) { + size_array_rows = num_of_groups; + size_array_cols = 2 + 2 * num_of_groups; + } // check groups are consistent int *mask = atom->mask; @@ -427,7 +464,7 @@ void FixElectrodeConp::setup_post_neighbor() // get equal-style variable ids: group_psi_var_ids = std::vector(num_of_groups, -1); for (int g = 0; g < num_of_groups; g++) { - if (group_psi_var_styles[g] == CONST) continue; + if (group_psi_var_styles[g] == VarStyle::CONST) continue; const char *var_name = group_psi_var_names[g].c_str(); int var_id = input->variable->find(var_name); if (var_id < 0) @@ -442,7 +479,7 @@ void FixElectrodeConp::setup_post_neighbor() evscale = force->qe2f / force->qqrd2e; ele_vector->setup(pair, vec_neighlist, timer_flag); - if (!(read_mat || read_inv)) { + if (need_array_compute) { if (etypes_neighlists) neighbor->build_one(mat_neighlist, 0); array_compute->setup(tag_to_iele, pair, mat_neighlist); if (tfflag) { array_compute->setup_tf(tf_types); } @@ -468,35 +505,49 @@ void FixElectrodeConp::setup_post_neighbor() return ordered_mat; }; - // capacitance matrix - memory->create(capacitance, ngroup, ngroup, "fix_electrode:capacitance"); - if (read_inv) { - read_from_file(input_file_inv, capacitance, "capacitance"); - } else { - // temporarily hold elastance in "capacitance" + if (algo == Algo::MATRIX_INV) { + // capacitance matrix + memory->create(capacitance, ngroup, ngroup, "fix_electrode:capacitance"); + if (read_inv) { + read_from_file(input_file_inv, capacitance, "capacitance"); + } else { + // temporarily hold elastance in "capacitance" + if (read_mat) + read_from_file(input_file_mat, capacitance, "elastance"); + else { + assert(need_array_compute); + array_compute->compute_array(capacitance, timer_flag); + } + if (comm->me == 0) + if (f_mat) write_to_file(f_mat, taglist_bygroup, order_matrix(group_idx, capacitance)); + invert(); + } + if (symm) symmetrize(); + // build sd vectors and macro matrices + MPI_Barrier(world); + double start = MPI_Wtime(); + if (ffield) { + compute_sd_vectors_ffield(); + } else { + compute_sd_vectors(); + } + compute_macro_matrices(); + MPI_Barrier(world); + if (timer_flag && (comm->me == 0)) + utils::logmesg( + lmp, fmt::format("SD-vector and macro matrices time: {:.4g} s\n", MPI_Wtime() - start)); + } else if (matrix_algo) { + // elastance matrix + memory->create(elastance, ngroup, ngroup, "fix_electrode:elastance"); if (read_mat) - read_from_file(input_file_mat, capacitance, "elastance"); - else - array_compute->compute_array(capacitance, timer_flag); - if (f_mat && !(read_inv)) - write_to_file(f_mat, taglist_bygroup, order_matrix(group_idx, capacitance)); - invert(); // TODO uncommented lots of stuff here + read_from_file(input_file_mat, elastance, "elastance"); + else { + assert(need_array_compute); + array_compute->compute_array(elastance, timer_flag); + } + if (comm->me == 0) + if (f_mat) write_to_file(f_mat, taglist_bygroup, order_matrix(group_idx, capacitance)); } - if (symm) symmetrize(); - - // build sd vectors and macro matrices - MPI_Barrier(world); - double start = MPI_Wtime(); - if (ffield) { - compute_sd_vectors_ffield(); - } else { - compute_sd_vectors(); - } - compute_macro_matrices(); - MPI_Barrier(world); - if (timer_flag && (comm->me == 0)) - utils::logmesg( - lmp, fmt::format("SD-vector and macro matrices time: {:.4g} s\n", MPI_Wtime() - start)); // initial charges and b vector update_charges(); @@ -530,6 +581,7 @@ void FixElectrodeConp::setup_pre_reverse(int eflag, int /*vflag*/) void FixElectrodeConp::invert() { + assert(algo == Algo::MATRIX_INV); MPI_Barrier(world); double invert_time = MPI_Wtime(); if (timer_flag && (comm->me == 0)) utils::logmesg(lmp, "CONP inverting matrix\n"); @@ -552,6 +604,7 @@ void FixElectrodeConp::invert() void FixElectrodeConp::symmetrize() { // S matrix to enforce charge neutrality constraint + assert(algo == Algo::MATRIX_INV); std::vector AinvE(ngroup, 0.); double EAinvE = 0.0; for (int i = 0; i < ngroup; i++) { @@ -651,6 +704,7 @@ void FixElectrodeConp::pre_reverse(int eflag, int /*vflag*/) void FixElectrodeConp::compute_sd_vectors() { + assert(algo == Algo::MATRIX_INV); for (int g = 0; g < num_of_groups; g++) { for (int j = 0; j < ngroup; j++) { if (iele_to_group[j] == g) { @@ -664,6 +718,7 @@ void FixElectrodeConp::compute_sd_vectors() void FixElectrodeConp::compute_sd_vectors_ffield() { + assert(algo == Algo::MATRIX_INV); double **x = atom->x; int *mask = atom->mask; tagint *tag = atom->tag; @@ -734,21 +789,25 @@ void FixElectrodeConp::update_charges() pre_update(); MPI_Barrier(world); double mult_start = MPI_Wtime(); - for (int i_iele = 0; i_iele < nlocalele; i_iele++) { - double q_tmp = 0; - int const iele = list_iele[i_iele]; - double *_noalias caprow = capacitance[iele]; - for (int j = 0; j < ngroup; j++) { q_tmp -= caprow[j] * potential_iele[j]; } - buf_iele[i_iele] = q_tmp; - sb_charges[iele_to_group[iele]] += q_tmp; + if (algo == Algo::MATRIX_INV) { + for (int i_iele = 0; i_iele < nlocalele; i_iele++) { + double q_tmp = 0; + int const iele = list_iele[i_iele]; + double *_noalias caprow = capacitance[iele]; + for (int j = 0; j < ngroup; j++) { q_tmp -= caprow[j] * potential_iele[j]; } + buf_iele[i_iele] = q_tmp; + sb_charges[iele_to_group[iele]] += q_tmp; + } + gather_elevec(charge_iele); + MPI_Allreduce(MPI_IN_PLACE, &sb_charges.front(), num_of_groups, MPI_DOUBLE, MPI_SUM, world); + + update_psi(); // use for equal-style and conq + + for (int g = 0; g < num_of_groups; g++) + for (int j = 0; j < ngroup; j++) { charge_iele[j] += sd_vectors[g][j] * group_psi[g]; } + } else { + error->all(FLERR, "This algorithm is not implemented, yet"); } - gather_elevec(charge_iele); - MPI_Allreduce(MPI_IN_PLACE, &sb_charges.front(), num_of_groups, MPI_DOUBLE, MPI_SUM, world); - - update_psi(); // use for equal-style and conq - - for (int g = 0; g < num_of_groups; g++) - for (int j = 0; j < ngroup; j++) { charge_iele[j] += sd_vectors[g][j] * group_psi[g]; } for (int i = 0; i < nall; i++) { if (!(groupbit & mask[i])) continue; @@ -767,7 +826,7 @@ void FixElectrodeConp::update_charges() void FixElectrodeConp::update_psi() { for (int g = 0; g < num_of_groups; g++) { - if (group_psi_var_styles[g] == CONST) continue; + if (group_psi_var_styles[g] == VarStyle::CONST) continue; group_psi[g] = input->variable->compute_equal(group_psi_var_ids[g]); } } @@ -776,6 +835,7 @@ void FixElectrodeConp::update_psi() void FixElectrodeConp::compute_macro_matrices() { + assert(algo == Algo::MATRIX_INV); macro_capacitance = std::vector>(num_of_groups, std::vector(num_of_groups)); for (int g = 0; g < num_of_groups; g++) { @@ -854,7 +914,8 @@ double FixElectrodeConp::compute_array(int i, int j) return macro_capacitance[i][j - 1]; else if (j <= 2 * num_of_groups) return macro_elastance[i][j - num_of_groups - 1]; - else return 0.; // avoid -Wreturn-type warning + else + return 0.; // avoid -Wreturn-type warning } /* ---------------------------------------------------------------------- */ @@ -1005,13 +1066,18 @@ FixElectrodeConp::~FixElectrodeConp() memory->destroy(potential_iele); memory->destroy(charge_iele); - if (!(read_mat || read_inv)) delete array_compute; + if (need_array_compute) delete array_compute; delete ele_vector; - memory->destroy(capacitance); + if (algo == Algo::MATRIX_INV) + memory->destroy(capacitance); + else if (matrix_algo) + memory->destroy(elastance); delete accel_interface; - if (f_inv) fclose(f_inv); - if (f_mat) fclose(f_mat); - if (f_vec) fclose(f_vec); + if (comm->me == 0) { + if (f_inv) fclose(f_inv); + if (f_mat) fclose(f_mat); + if (f_vec) fclose(f_vec); + } } /* ---------------------------------------------------------------------- */ @@ -1042,7 +1108,7 @@ void FixElectrodeConp::write_to_file(FILE *file, const std::vector &tags /*----------------------------------------------------------------------- */ -void FixElectrodeConp::read_from_file(const std::string& input_file, double **array, +void FixElectrodeConp::read_from_file(const std::string &input_file, double **array, const std::string &filetype) { if (comm->me == 0) { @@ -1203,9 +1269,9 @@ double FixElectrodeConp::memory_usage() double bytes = 0.0; bytes += nmax * (sizeof(double)); // potential_i bytes += ngroup * - (sizeof(int) + 3 * sizeof(double)); // iele_gathered, buf_gathered, pot / charge_iele - bytes += ngroup * ngroup * sizeof(double); // capacitance - bytes += nprocs * (2 * sizeof(int)); // displs, recvcounts + (sizeof(int) + 3 * sizeof(double)); // iele_gathered, buf_gathered, pot / charge_iele + if (matrix_algo) bytes += ngroup * ngroup * sizeof(double); // capacitance or elastance + bytes += nprocs * (2 * sizeof(int)); // displs, recvcounts bytes += list_iele.capacity() * sizeof(int); bytes += buf_iele.capacity() * sizeof(double); diff --git a/src/ELECTRODE/fix_electrode_conp.h b/src/ELECTRODE/fix_electrode_conp.h index b4d4c82d5c..757991d282 100644 --- a/src/ELECTRODE/fix_electrode_conp.h +++ b/src/ELECTRODE/fix_electrode_conp.h @@ -36,6 +36,7 @@ FixStyle(electrode/conp, FixElectrodeConp); namespace LAMMPS_NS { class FixElectrodeConp : public Fix { + public: FixElectrodeConp(class LAMMPS *, int, char **); ~FixElectrodeConp() override; @@ -63,6 +64,8 @@ class FixElectrodeConp : public Fix { void unpack_reverse_comm(int, int *, double *) override; protected: + enum class Algo { MATRIX_INV, MATRIX_CG, CG }; + enum class VarStyle { CONST, EQUAL }; virtual void update_psi(); virtual void pre_update(){}; virtual void compute_macro_matrices(); @@ -72,10 +75,12 @@ class FixElectrodeConp : public Fix { bigint ngroup; std::vector> sd_vectors; std::vector sb_charges; - std::vector group_psi_var_ids, group_psi_var_styles; + std::vector group_psi_var_ids; + std::vector group_psi_var_styles; std::vector group_psi_var_names; - bool symm; // symmetrize elastance for charge neutrality - std::vector> macro_elastance; // used by conq + bool symm; // symmetrize elastance for charge neutrality + Algo algo; + std::vector> macro_elastance; // used by conq std::vector> macro_capacitance; // used by thermo double thermo_temp, thermo_time; // used by electrode/thermo only int thermo_init; // initializer for rng in electrode/thermo @@ -90,8 +95,9 @@ class FixElectrodeConp : public Fix { class ElectrodeMatrix *array_compute; class ElectrodeVector *ele_vector; std::vector groups; - double **capacitance; + double **capacitance, **elastance; bool read_inv, read_mat; + bool matrix_algo, need_array_compute; double eta; double update_time, mult_time; void create_taglist(); @@ -102,7 +108,7 @@ class FixElectrodeConp : public Fix { double potential_energy(int); double self_energy(int); void write_to_file(FILE *, const std::vector &, const std::vector> &); - void read_from_file(const std::string& input_file, double **, const std::string &); + void read_from_file(const std::string &input_file, double **, const std::string &); void compute_sd_vectors(); void compute_sd_vectors_ffield(); int groupnum_from_name(char *); diff --git a/src/ELECTRODE/fix_electrode_conq.cpp b/src/ELECTRODE/fix_electrode_conq.cpp index fa6240816c..15716ec7a4 100644 --- a/src/ELECTRODE/fix_electrode_conq.cpp +++ b/src/ELECTRODE/fix_electrode_conq.cpp @@ -26,8 +26,6 @@ using namespace LAMMPS_NS; #define SMALL 0.00001 -enum { CONST, EQUAL }; - // 0 1 2 3 4 // fix fxupdate group1 electrode/conp pot1 eta couple group2 pot2 FixElectrodeConq::FixElectrodeConq(LAMMPS *lmp, int narg, char **arg) : @@ -36,14 +34,15 @@ FixElectrodeConq::FixElectrodeConq(LAMMPS *lmp, int narg, char **arg) : // copy const-style values across because update_psi will change group_psi group_q = group_psi; - if (symm) { error->all(FLERR, "Keyword symm on not allowed in electrode/conq"); } + if (symm) error->all(FLERR, "Keyword symm on not allowed in electrode/conq"); + if (algo != Algo::MATRIX_INV) error->all(FLERR, "Algorithm not allowed in electrode/conq"); } void FixElectrodeConq::update_psi() { // don't need MPI_Barrier because always preceded by MPI_Allreduce for (int g = 0; g < num_of_groups; g++) { - if (group_psi_var_styles[g] == CONST) continue; + if (group_psi_var_styles[g] == VarStyle::CONST) continue; group_q[g] = input->variable->compute_equal(group_psi_var_ids[g]); } diff --git a/src/ELECTRODE/fix_electrode_thermo.cpp b/src/ELECTRODE/fix_electrode_thermo.cpp index 148254bd75..ee9fa35784 100644 --- a/src/ELECTRODE/fix_electrode_thermo.cpp +++ b/src/ELECTRODE/fix_electrode_thermo.cpp @@ -31,8 +31,6 @@ using namespace LAMMPS_NS; #define NUM_GROUPS 2 #define SMALL 0.00001 -enum { CONST, EQUAL }; - /* ----------------------------------------------------------------------- */ // 0 1 2 3 4 @@ -45,17 +43,18 @@ FixElectrodeThermo::FixElectrodeThermo(LAMMPS *lmp, int narg, char **arg) : if (group_psi_var_styles[0] != group_psi_var_styles[1]) error->all(FLERR, "Potentials in electrode/thermo must have same style"); if (symm) error->all(FLERR, "Keyword symm on not allowed in electrode/thermo"); + if (algo != Algo::MATRIX_INV) error->all(FLERR, "Algorithm not allowed in electrode/thermo"); if (thermo_time < SMALL) error->all(FLERR, "Keyword temp not set or zero in electrode/thermo"); thermo_random = new RanMars(lmp, thermo_init); - if (group_psi_var_styles[0] == CONST) delta_psi_0 = group_psi[1] - group_psi[0]; + if (group_psi_var_styles[0] == VarStyle::CONST) delta_psi_0 = group_psi[1] - group_psi[0]; } /* ----------------------------------------------------------------------- */ FixElectrodeThermo::~FixElectrodeThermo() { - delete thermo_random; + delete thermo_random; } /* ----------------------------------------------------------------------- */ @@ -103,7 +102,7 @@ void FixElectrodeThermo::update_psi() double const delta_psi = group_psi_old[1] - group_psi_old[0]; // target potential difference from input parameters - if (group_psi_var_styles[0] != CONST) { + if (group_psi_var_styles[0] != VarStyle::CONST) { delta_psi_0 = input->variable->compute_equal(group_psi_var_ids[1]) - input->variable->compute_equal(group_psi_var_ids[0]); } From 8edcc3381e5b2bc4033dfaab90214d31117fe889 Mon Sep 17 00:00:00 2001 From: Ludwig Ahrens Date: Wed, 17 Aug 2022 14:23:36 +0200 Subject: [PATCH 08/46] Citation strings in ELECTRODE package Cite new paper in fix electrode and its documentation. Add citation string to kspace sytle pppm/electrode. --- doc/src/fix_electrode_conp.rst | 13 +++++++++++-- src/ELECTRODE/fix_electrode_conp.cpp | 15 +++++++++++++++ src/ELECTRODE/pppm_electrode.cpp | 15 +++++++++++++++ 3 files changed, 41 insertions(+), 2 deletions(-) diff --git a/doc/src/fix_electrode_conp.rst b/doc/src/fix_electrode_conp.rst index 668b2371b9..8eed1c0388 100644 --- a/doc/src/fix_electrode_conp.rst +++ b/doc/src/fix_electrode_conp.rst @@ -87,7 +87,7 @@ to be specified using the temp keyword. Currently, only two electrodes are possi this style. For all three fixes, any potential (or charge for *conq*) can be specified as an -equal-style variable prefixed with "v_". For example, the following code will +equal-style variable prefixed with "v\_". For example, the following code will ramp the potential difference between electrodes from 0.0V to 2.0V over the course of the simulation: @@ -157,7 +157,7 @@ the negative of the total charge on each electrode multiplied by that electrode's potential. The global vector outputs the potential on each electrode (and thus has *N* -entries if the fix manages *N* electrode groups), in :doc:`units ` of +entries if the fix manages *N* electrode groups), in :doc:`units ` of electric field multiplied by distance (thus volts for *real* and *metal* units). The electrode groups' ordering follows the order in which they were input in the fix command using *couple*. The global vector output is useful for @@ -198,6 +198,11 @@ capacitance' of the system (capacitance with only electrodes, no electrolyte), and can also be used for advanced simulations setting the potential as some function of the charge-at-0V (such as in the in.conq2 example mentioned above). +Please cite :ref:`(Ahrens-Iwers2022) ` in any publication that uses +this implementation. +Please cite also the publication on the combination of the CPM with pppm if you +use *pppm/electrode* :ref:`(Ahrens-Iwers) `. + ---------- Restrictions @@ -251,3 +256,7 @@ as on just one processor for testing). **(Scalfi)** Scalfi *et al.*, J. Chem. Phys., 153, 174704 (2020). +.. _Ahrens-Iwers2: + +**(Ahrens-Iwers2022)** Ahrens-Iwers *et al.*, J. Chem. Phys. 157, 084801 (2022). + diff --git a/src/ELECTRODE/fix_electrode_conp.cpp b/src/ELECTRODE/fix_electrode_conp.cpp index 058f6d06e8..8764a1e095 100644 --- a/src/ELECTRODE/fix_electrode_conp.cpp +++ b/src/ELECTRODE/fix_electrode_conp.cpp @@ -18,6 +18,7 @@ #include "fix_electrode_conp.h" #include "atom.h" +#include "citeme.h" #include "comm.h" #include "compute.h" #include "domain.h" @@ -52,6 +53,19 @@ void dgetri_(const int *N, double *A, const int *lda, const int *ipiv, double *w const int *lwork, int *info); } +static const char cite_fix_electrode[] = + "fix electrode command:\n\n" + "@article{Ahrens2022\n" + "author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\\ss}ner, " + "Robert H.},\n" + "doi = {10.1063/5.0099239},\n" + "title = {{ELECTRODE: An electrochemistry package for LAMMPS}},\n" + "journal = {The Journal of Chemical Physics},\n" + "year = {2022}\n" + "volume = {157},\n" + "pages = {084801},\n" + "}\n"; + // 0 1 2 3 4 // fix fxupdate group1 electrode/conp pot1 eta couple group2 pot2 FixElectrodeConp::FixElectrodeConp(LAMMPS *lmp, int narg, char **arg) : @@ -61,6 +75,7 @@ FixElectrodeConp::FixElectrodeConp(LAMMPS *lmp, int narg, char **arg) : iele_gathered(nullptr), buf_gathered(nullptr), potential_i(nullptr), potential_iele(nullptr), charge_iele(nullptr) { + if (lmp->citeme) lmp->citeme->add(cite_fix_electrode); // fix.h output flags scalar_flag = 1; vector_flag = 1; diff --git a/src/ELECTRODE/pppm_electrode.cpp b/src/ELECTRODE/pppm_electrode.cpp index 91d6acc2d5..a0eef84389 100644 --- a/src/ELECTRODE/pppm_electrode.cpp +++ b/src/ELECTRODE/pppm_electrode.cpp @@ -21,6 +21,7 @@ #include "atom.h" #include "bond.h" #include "boundary_correction.h" +#include "citeme.h" #include "comm.h" #include "domain.h" #include "error.h" @@ -62,11 +63,25 @@ enum { FORWARD_IK, FORWARD_AD, FORWARD_IK_PERATOM, FORWARD_AD_PERATOM }; #define ONEF 1.0 #endif +static const char cite_pppm_electrode[] = + "kspace_style pppm/electrode command:\n\n" + "@article{Ahrens2021,\n" + "author = {Ahrens-Iwers, Ludwig J.V. and Mei{\\ss}ner, Robert H.},\n" + "doi = {10.1063/5.0063381},\n" + "title = {{Constant potential simulations on a mesh}},\n" + "journal = {Journal of Chemical Physics},\n" + "year = {2021}\n" + "volume = {155},\n" + "pages = {104104},\n" + "}\n"; + /* ---------------------------------------------------------------------- */ PPPMElectrode::PPPMElectrode(LAMMPS *lmp) : PPPM(lmp), electrolyte_density_brick(nullptr), electrolyte_density_fft(nullptr) { + if (lmp->citeme) lmp->citeme->add(cite_pppm_electrode); + group_group_enable = 0; electrolyte_density_brick = nullptr; electrolyte_density_fft = nullptr; From 0388913241eeb91396e9d555d1ff26c255a5acf6 Mon Sep 17 00:00:00 2001 From: Ludwig Ahrens Date: Fri, 19 Aug 2022 15:15:50 +0200 Subject: [PATCH 09/46] Automatic detection for electrode etypes --- doc/src/fix_electrode_conp.rst | 4 +- examples/PACKAGES/electrode/au-aq/in.ffield | 2 +- examples/PACKAGES/electrode/au-aq/in.tf | 2 +- .../PACKAGES/electrode/graph-il/data.graph-il | 3332 +++++++++-------- examples/PACKAGES/electrode/graph-il/in.conq | 2 +- examples/PACKAGES/electrode/graph-il/in.conq2 | 2 +- .../PACKAGES/electrode/graph-il/in.etypes | 2 +- .../PACKAGES/electrode/graph-il/in.ffield | 2 +- examples/PACKAGES/electrode/graph-il/in.ramp | 2 +- .../PACKAGES/electrode/graph-il/in.thermo | 4 +- src/ELECTRODE/fix_electrode_conp.cpp | 23 +- 11 files changed, 1697 insertions(+), 1680 deletions(-) diff --git a/doc/src/fix_electrode_conp.rst b/doc/src/fix_electrode_conp.rst index 8eed1c0388..ff51174d8e 100644 --- a/doc/src/fix_electrode_conp.rst +++ b/doc/src/fix_electrode_conp.rst @@ -45,8 +45,8 @@ Syntax *couple group-ID value* group-ID = group of atoms treated as additional electrode value = electric potential or charge on this electrode - *etypes values = atom types* - specify atom types exclusive to the electrode for optimized neighbor lists + *etypes* + construct optimized neighbor lists (types of the electrode must be exclusive to them) *ffield on/off* turn on/off finite-field implementation *write_mat filename* diff --git a/examples/PACKAGES/electrode/au-aq/in.ffield b/examples/PACKAGES/electrode/au-aq/in.ffield index 094fc39144..35b053ea3a 100644 --- a/examples/PACKAGES/electrode/au-aq/in.ffield +++ b/examples/PACKAGES/electrode/au-aq/in.ffield @@ -4,7 +4,7 @@ boundary p p p # ffield uses periodic z-boundary and no slab include settings.mod # styles, groups, computes and fixes -fix conp bot electrode/conp -1.0 1.805132 couple top 1.0 symm on ffield yes etypes 6*7 +fix conp bot electrode/conp -1.0 1.805132 couple top 1.0 symm on ffield yes etypes thermo 50 thermo_style custom step temp c_ctemp epair etotal c_qtop c_qbot c_qztop c_qzbot diff --git a/examples/PACKAGES/electrode/au-aq/in.tf b/examples/PACKAGES/electrode/au-aq/in.tf index d73efd10fc..48a226456b 100644 --- a/examples/PACKAGES/electrode/au-aq/in.tf +++ b/examples/PACKAGES/electrode/au-aq/in.tf @@ -6,7 +6,7 @@ boundary p p p # ffield uses periodic z-boundary and no slab include settings.mod # styles, groups, computes and fixes -fix conp bot electrode/conp -1.0 1.805132 couple top 1.0 symm on ffield yes etypes 6*7 +fix conp bot electrode/conp -1.0 1.805132 couple top 1.0 symm on ffield yes etypes fix_modify conp tf 6 1.0 18.1715745 fix_modify conp tf 7 1.0 18.1715745 diff --git a/examples/PACKAGES/electrode/graph-il/data.graph-il b/examples/PACKAGES/electrode/graph-il/data.graph-il index 600adeb64f..597e3c21d8 100644 --- a/examples/PACKAGES/electrode/graph-il/data.graph-il +++ b/examples/PACKAGES/electrode/graph-il/data.graph-il @@ -3,7 +3,7 @@ LAMMPS data file. CGCMM style. atom_style full generated by VMD/TopoTools v1.7 o 3776 atoms 640 bonds 320 angles - 5 atom types + 6 atom types 2 bond types 1 angle types @@ -18,6 +18,7 @@ LAMMPS data file. CGCMM style. atom_style full generated by VMD/TopoTools v1.7 o 3 57.119999 # Roy-Maroncelli BMI3 4 144.960007 # Roy-Maroncelli PF64 5 12.001000 # carbon 5 + 6 12.001000 # carbon 5 Pair Coeffs # lj/cut/coul/long @@ -26,6 +27,7 @@ Pair Coeffs # lj/cut/coul/long 3 0.43738 5.04 4 1.12572 5.06 5 0.05497 3.37 +6 0.05497 3.37 Bond Coeffs # harmonic @@ -1318,1252 +1320,1252 @@ Angle Coeffs # harmonic 1278 639 2 0.157800 13.112696 26.068785 21.224487 # 2 1279 639 3 0.184800 13.700453 25.668398 15.818604 # 3 1280 640 4 -0.780000 30.804737 25.139051 26.365158 # 4 -1281 645 5 0.000000 1.229756 1.065000 -61.575001 # 5 -1282 645 5 0.000000 3.689268 1.065000 -61.575001 # 5 -1283 645 5 0.000000 2.459512 0.355000 -61.575001 # 5 -1284 645 5 0.000000 6.148780 1.065000 -61.575001 # 5 -1285 645 5 0.000000 4.919024 0.355000 -61.575001 # 5 -1286 645 5 0.000000 8.608293 1.065000 -61.575001 # 5 -1287 645 5 0.000000 7.378536 0.355000 -61.575001 # 5 -1288 645 5 0.000000 11.067804 1.065000 -61.575001 # 5 -1289 645 5 0.000000 9.838048 0.355000 -61.575001 # 5 -1290 645 5 0.000000 13.527316 1.065000 -61.575001 # 5 -1291 645 5 0.000000 12.297561 0.355000 -61.575001 # 5 -1292 645 5 0.000000 15.986829 1.065000 -61.575001 # 5 -1293 645 5 0.000000 14.757072 0.355000 -61.575001 # 5 -1294 645 5 0.000000 18.446341 1.065000 -61.575001 # 5 -1295 645 5 0.000000 17.216585 0.355000 -61.575001 # 5 -1296 645 5 0.000000 20.905853 1.065000 -61.575001 # 5 -1297 645 5 0.000000 19.676096 0.355000 -61.575001 # 5 -1298 645 5 0.000000 23.365364 1.065000 -61.575001 # 5 -1299 645 5 0.000000 22.135609 0.355000 -61.575001 # 5 -1300 645 5 0.000000 25.824877 1.065000 -61.575001 # 5 -1301 645 5 0.000000 24.595121 0.355000 -61.575001 # 5 -1302 645 5 0.000000 28.284389 1.065000 -61.575001 # 5 -1303 645 5 0.000000 27.054632 0.355000 -61.575001 # 5 -1304 645 5 0.000000 30.743900 1.065000 -61.575001 # 5 -1305 645 5 0.000000 29.514145 0.355000 -61.575001 # 5 -1306 645 5 0.000000 31.973658 0.355000 -61.575001 # 5 -1307 645 5 0.000000 2.459512 3.195000 -61.575001 # 5 -1308 645 5 0.000000 1.229756 2.485000 -61.575001 # 5 -1309 645 5 0.000000 4.919024 3.195000 -61.575001 # 5 -1310 645 5 0.000000 3.689268 2.485000 -61.575001 # 5 -1311 645 5 0.000000 7.378536 3.195000 -61.575001 # 5 -1312 645 5 0.000000 6.148780 2.485000 -61.575001 # 5 -1313 645 5 0.000000 9.838048 3.195000 -61.575001 # 5 -1314 645 5 0.000000 8.608293 2.485000 -61.575001 # 5 -1315 645 5 0.000000 12.297561 3.195000 -61.575001 # 5 -1316 645 5 0.000000 11.067804 2.485000 -61.575001 # 5 -1317 645 5 0.000000 14.757072 3.195000 -61.575001 # 5 -1318 645 5 0.000000 13.527316 2.485000 -61.575001 # 5 -1319 645 5 0.000000 17.216585 3.195000 -61.575001 # 5 -1320 645 5 0.000000 15.986829 2.485000 -61.575001 # 5 -1321 645 5 0.000000 19.676096 3.195000 -61.575001 # 5 -1322 645 5 0.000000 18.446341 2.485000 -61.575001 # 5 -1323 645 5 0.000000 22.135609 3.195000 -61.575001 # 5 -1324 645 5 0.000000 20.905853 2.485000 -61.575001 # 5 -1325 645 5 0.000000 24.595121 3.195000 -61.575001 # 5 -1326 645 5 0.000000 23.365364 2.485000 -61.575001 # 5 -1327 645 5 0.000000 27.054632 3.195000 -61.575001 # 5 -1328 645 5 0.000000 25.824877 2.485000 -61.575001 # 5 -1329 645 5 0.000000 29.514145 3.195000 -61.575001 # 5 -1330 645 5 0.000000 28.284389 2.485000 -61.575001 # 5 -1331 645 5 0.000000 31.973658 3.195000 -61.575001 # 5 -1332 645 5 0.000000 30.743900 2.485000 -61.575001 # 5 -1333 645 5 0.000000 1.229756 5.325000 -61.575001 # 5 -1334 645 5 0.000000 3.689268 5.325000 -61.575001 # 5 -1335 645 5 0.000000 2.459512 4.615000 -61.575001 # 5 -1336 645 5 0.000000 6.148780 5.325000 -61.575001 # 5 -1337 645 5 0.000000 4.919024 4.615000 -61.575001 # 5 -1338 645 5 0.000000 8.608293 5.325000 -61.575001 # 5 -1339 645 5 0.000000 7.378536 4.615000 -61.575001 # 5 -1340 645 5 0.000000 11.067804 5.325000 -61.575001 # 5 -1341 645 5 0.000000 9.838048 4.615000 -61.575001 # 5 -1342 645 5 0.000000 13.527316 5.325000 -61.575001 # 5 -1343 645 5 0.000000 12.297561 4.615000 -61.575001 # 5 -1344 645 5 0.000000 15.986829 5.325000 -61.575001 # 5 -1345 645 5 0.000000 14.757072 4.615000 -61.575001 # 5 -1346 645 5 0.000000 18.446341 5.325000 -61.575001 # 5 -1347 645 5 0.000000 17.216585 4.615000 -61.575001 # 5 -1348 645 5 0.000000 20.905853 5.325000 -61.575001 # 5 -1349 645 5 0.000000 19.676096 4.615000 -61.575001 # 5 -1350 645 5 0.000000 23.365364 5.325000 -61.575001 # 5 -1351 645 5 0.000000 22.135609 4.615000 -61.575001 # 5 -1352 645 5 0.000000 25.824877 5.325000 -61.575001 # 5 -1353 645 5 0.000000 24.595121 4.615000 -61.575001 # 5 -1354 645 5 0.000000 28.284389 5.325000 -61.575001 # 5 -1355 645 5 0.000000 27.054632 4.615000 -61.575001 # 5 -1356 645 5 0.000000 30.743900 5.325000 -61.575001 # 5 -1357 645 5 0.000000 29.514145 4.615000 -61.575001 # 5 -1358 645 5 0.000000 31.973658 4.615000 -61.575001 # 5 -1359 645 5 0.000000 2.459512 7.455000 -61.575001 # 5 -1360 645 5 0.000000 1.229756 6.745000 -61.575001 # 5 -1361 645 5 0.000000 4.919024 7.455000 -61.575001 # 5 -1362 645 5 0.000000 3.689268 6.745000 -61.575001 # 5 -1363 645 5 0.000000 7.378536 7.455000 -61.575001 # 5 -1364 645 5 0.000000 6.148780 6.745000 -61.575001 # 5 -1365 645 5 0.000000 9.838048 7.455000 -61.575001 # 5 -1366 645 5 0.000000 8.608293 6.745000 -61.575001 # 5 -1367 645 5 0.000000 12.297561 7.455000 -61.575001 # 5 -1368 645 5 0.000000 11.067804 6.745000 -61.575001 # 5 -1369 645 5 0.000000 14.757072 7.455000 -61.575001 # 5 -1370 645 5 0.000000 13.527316 6.745000 -61.575001 # 5 -1371 645 5 0.000000 17.216585 7.455000 -61.575001 # 5 -1372 645 5 0.000000 15.986829 6.745000 -61.575001 # 5 -1373 645 5 0.000000 19.676096 7.455000 -61.575001 # 5 -1374 645 5 0.000000 18.446341 6.745000 -61.575001 # 5 -1375 645 5 0.000000 22.135609 7.455000 -61.575001 # 5 -1376 645 5 0.000000 20.905853 6.745000 -61.575001 # 5 -1377 645 5 0.000000 24.595121 7.455000 -61.575001 # 5 -1378 645 5 0.000000 23.365364 6.745000 -61.575001 # 5 -1379 645 5 0.000000 27.054632 7.455000 -61.575001 # 5 -1380 645 5 0.000000 25.824877 6.745000 -61.575001 # 5 -1381 645 5 0.000000 29.514145 7.455000 -61.575001 # 5 -1382 645 5 0.000000 28.284389 6.745000 -61.575001 # 5 -1383 645 5 0.000000 31.973658 7.455000 -61.575001 # 5 -1384 645 5 0.000000 30.743900 6.745000 -61.575001 # 5 -1385 645 5 0.000000 1.229756 9.585000 -61.575001 # 5 -1386 645 5 0.000000 3.689268 9.585000 -61.575001 # 5 -1387 645 5 0.000000 2.459512 8.875000 -61.575001 # 5 -1388 645 5 0.000000 6.148780 9.585000 -61.575001 # 5 -1389 645 5 0.000000 4.919024 8.875000 -61.575001 # 5 -1390 645 5 0.000000 8.608293 9.585000 -61.575001 # 5 -1391 645 5 0.000000 7.378536 8.875000 -61.575001 # 5 -1392 645 5 0.000000 11.067804 9.585000 -61.575001 # 5 -1393 645 5 0.000000 9.838048 8.875000 -61.575001 # 5 -1394 645 5 0.000000 13.527316 9.585000 -61.575001 # 5 -1395 645 5 0.000000 12.297561 8.875000 -61.575001 # 5 -1396 645 5 0.000000 15.986829 9.585000 -61.575001 # 5 -1397 645 5 0.000000 14.757072 8.875000 -61.575001 # 5 -1398 645 5 0.000000 18.446341 9.585000 -61.575001 # 5 -1399 645 5 0.000000 17.216585 8.875000 -61.575001 # 5 -1400 645 5 0.000000 20.905853 9.585000 -61.575001 # 5 -1401 645 5 0.000000 19.676096 8.875000 -61.575001 # 5 -1402 645 5 0.000000 23.365364 9.585000 -61.575001 # 5 -1403 645 5 0.000000 22.135609 8.875000 -61.575001 # 5 -1404 645 5 0.000000 25.824877 9.585000 -61.575001 # 5 -1405 645 5 0.000000 24.595121 8.875000 -61.575001 # 5 -1406 645 5 0.000000 28.284389 9.585000 -61.575001 # 5 -1407 645 5 0.000000 27.054632 8.875000 -61.575001 # 5 -1408 645 5 0.000000 30.743900 9.585000 -61.575001 # 5 -1409 645 5 0.000000 29.514145 8.875000 -61.575001 # 5 -1410 645 5 0.000000 31.973658 8.875000 -61.575001 # 5 -1411 645 5 0.000000 2.459512 11.715001 -61.575001 # 5 -1412 645 5 0.000000 1.229756 11.005000 -61.575001 # 5 -1413 645 5 0.000000 4.919024 11.715001 -61.575001 # 5 -1414 645 5 0.000000 3.689268 11.005000 -61.575001 # 5 -1415 645 5 0.000000 7.378536 11.715001 -61.575001 # 5 -1416 645 5 0.000000 6.148780 11.005000 -61.575001 # 5 -1417 645 5 0.000000 9.838048 11.715001 -61.575001 # 5 -1418 645 5 0.000000 8.608293 11.005000 -61.575001 # 5 -1419 645 5 0.000000 12.297561 11.715001 -61.575001 # 5 -1420 645 5 0.000000 11.067804 11.005000 -61.575001 # 5 -1421 645 5 0.000000 14.757072 11.715001 -61.575001 # 5 -1422 645 5 0.000000 13.527316 11.005000 -61.575001 # 5 -1423 645 5 0.000000 17.216585 11.715001 -61.575001 # 5 -1424 645 5 0.000000 15.986829 11.005000 -61.575001 # 5 -1425 645 5 0.000000 19.676096 11.715001 -61.575001 # 5 -1426 645 5 0.000000 18.446341 11.005000 -61.575001 # 5 -1427 645 5 0.000000 22.135609 11.715001 -61.575001 # 5 -1428 645 5 0.000000 20.905853 11.005000 -61.575001 # 5 -1429 645 5 0.000000 24.595121 11.715001 -61.575001 # 5 -1430 645 5 0.000000 23.365364 11.005000 -61.575001 # 5 -1431 645 5 0.000000 27.054632 11.715001 -61.575001 # 5 -1432 645 5 0.000000 25.824877 11.005000 -61.575001 # 5 -1433 645 5 0.000000 29.514145 11.715001 -61.575001 # 5 -1434 645 5 0.000000 28.284389 11.005000 -61.575001 # 5 -1435 645 5 0.000000 31.973658 11.715001 -61.575001 # 5 -1436 645 5 0.000000 30.743900 11.005000 -61.575001 # 5 -1437 645 5 0.000000 1.229756 13.845000 -61.575001 # 5 -1438 645 5 0.000000 3.689268 13.845000 -61.575001 # 5 -1439 645 5 0.000000 2.459512 13.135000 -61.575001 # 5 -1440 645 5 0.000000 6.148780 13.845000 -61.575001 # 5 -1441 645 5 0.000000 4.919024 13.135000 -61.575001 # 5 -1442 645 5 0.000000 8.608293 13.845000 -61.575001 # 5 -1443 645 5 0.000000 7.378536 13.135000 -61.575001 # 5 -1444 645 5 0.000000 11.067804 13.845000 -61.575001 # 5 -1445 645 5 0.000000 9.838048 13.135000 -61.575001 # 5 -1446 645 5 0.000000 13.527316 13.845000 -61.575001 # 5 -1447 645 5 0.000000 12.297561 13.135000 -61.575001 # 5 -1448 645 5 0.000000 15.986829 13.845000 -61.575001 # 5 -1449 645 5 0.000000 14.757072 13.135000 -61.575001 # 5 -1450 645 5 0.000000 18.446341 13.845000 -61.575001 # 5 -1451 645 5 0.000000 17.216585 13.135000 -61.575001 # 5 -1452 645 5 0.000000 20.905853 13.845000 -61.575001 # 5 -1453 645 5 0.000000 19.676096 13.135000 -61.575001 # 5 -1454 645 5 0.000000 23.365364 13.845000 -61.575001 # 5 -1455 645 5 0.000000 22.135609 13.135000 -61.575001 # 5 -1456 645 5 0.000000 25.824877 13.845000 -61.575001 # 5 -1457 645 5 0.000000 24.595121 13.135000 -61.575001 # 5 -1458 645 5 0.000000 28.284389 13.845000 -61.575001 # 5 -1459 645 5 0.000000 27.054632 13.135000 -61.575001 # 5 -1460 645 5 0.000000 30.743900 13.845000 -61.575001 # 5 -1461 645 5 0.000000 29.514145 13.135000 -61.575001 # 5 -1462 645 5 0.000000 31.973658 13.135000 -61.575001 # 5 -1463 645 5 0.000000 2.459512 15.975000 -61.575001 # 5 -1464 645 5 0.000000 1.229756 15.265000 -61.575001 # 5 -1465 645 5 0.000000 4.919024 15.975000 -61.575001 # 5 -1466 645 5 0.000000 3.689268 15.265000 -61.575001 # 5 -1467 645 5 0.000000 7.378536 15.975000 -61.575001 # 5 -1468 645 5 0.000000 6.148780 15.265000 -61.575001 # 5 -1469 645 5 0.000000 9.838048 15.975000 -61.575001 # 5 -1470 645 5 0.000000 8.608293 15.265000 -61.575001 # 5 -1471 645 5 0.000000 12.297561 15.975000 -61.575001 # 5 -1472 645 5 0.000000 11.067804 15.265000 -61.575001 # 5 -1473 645 5 0.000000 14.757072 15.975000 -61.575001 # 5 -1474 645 5 0.000000 13.527316 15.265000 -61.575001 # 5 -1475 645 5 0.000000 17.216585 15.975000 -61.575001 # 5 -1476 645 5 0.000000 15.986829 15.265000 -61.575001 # 5 -1477 645 5 0.000000 19.676096 15.975000 -61.575001 # 5 -1478 645 5 0.000000 18.446341 15.265000 -61.575001 # 5 -1479 645 5 0.000000 22.135609 15.975000 -61.575001 # 5 -1480 645 5 0.000000 20.905853 15.265000 -61.575001 # 5 -1481 645 5 0.000000 24.595121 15.975000 -61.575001 # 5 -1482 645 5 0.000000 23.365364 15.265000 -61.575001 # 5 -1483 645 5 0.000000 27.054632 15.975000 -61.575001 # 5 -1484 645 5 0.000000 25.824877 15.265000 -61.575001 # 5 -1485 645 5 0.000000 29.514145 15.975000 -61.575001 # 5 -1486 645 5 0.000000 28.284389 15.265000 -61.575001 # 5 -1487 645 5 0.000000 31.973658 15.975000 -61.575001 # 5 -1488 645 5 0.000000 30.743900 15.265000 -61.575001 # 5 -1489 645 5 0.000000 1.229756 18.105000 -61.575001 # 5 -1490 645 5 0.000000 3.689268 18.105000 -61.575001 # 5 -1491 645 5 0.000000 2.459512 17.395000 -61.575001 # 5 -1492 645 5 0.000000 6.148780 18.105000 -61.575001 # 5 -1493 645 5 0.000000 4.919024 17.395000 -61.575001 # 5 -1494 645 5 0.000000 8.608293 18.105000 -61.575001 # 5 -1495 645 5 0.000000 7.378536 17.395000 -61.575001 # 5 -1496 645 5 0.000000 11.067804 18.105000 -61.575001 # 5 -1497 645 5 0.000000 9.838048 17.395000 -61.575001 # 5 -1498 645 5 0.000000 13.527316 18.105000 -61.575001 # 5 -1499 645 5 0.000000 12.297561 17.395000 -61.575001 # 5 -1500 645 5 0.000000 15.986829 18.105000 -61.575001 # 5 -1501 645 5 0.000000 14.757072 17.395000 -61.575001 # 5 -1502 645 5 0.000000 18.446341 18.105000 -61.575001 # 5 -1503 645 5 0.000000 17.216585 17.395000 -61.575001 # 5 -1504 645 5 0.000000 20.905853 18.105000 -61.575001 # 5 -1505 645 5 0.000000 19.676096 17.395000 -61.575001 # 5 -1506 645 5 0.000000 23.365364 18.105000 -61.575001 # 5 -1507 645 5 0.000000 22.135609 17.395000 -61.575001 # 5 -1508 645 5 0.000000 25.824877 18.105000 -61.575001 # 5 -1509 645 5 0.000000 24.595121 17.395000 -61.575001 # 5 -1510 645 5 0.000000 28.284389 18.105000 -61.575001 # 5 -1511 645 5 0.000000 27.054632 17.395000 -61.575001 # 5 -1512 645 5 0.000000 30.743900 18.105000 -61.575001 # 5 -1513 645 5 0.000000 29.514145 17.395000 -61.575001 # 5 -1514 645 5 0.000000 31.973658 17.395000 -61.575001 # 5 -1515 645 5 0.000000 2.459512 20.235001 -61.575001 # 5 -1516 645 5 0.000000 1.229756 19.525000 -61.575001 # 5 -1517 645 5 0.000000 4.919024 20.235001 -61.575001 # 5 -1518 645 5 0.000000 3.689268 19.525000 -61.575001 # 5 -1519 645 5 0.000000 7.378536 20.235001 -61.575001 # 5 -1520 645 5 0.000000 6.148780 19.525000 -61.575001 # 5 -1521 645 5 0.000000 9.838048 20.235001 -61.575001 # 5 -1522 645 5 0.000000 8.608293 19.525000 -61.575001 # 5 -1523 645 5 0.000000 12.297561 20.235001 -61.575001 # 5 -1524 645 5 0.000000 11.067804 19.525000 -61.575001 # 5 -1525 645 5 0.000000 14.757072 20.235001 -61.575001 # 5 -1526 645 5 0.000000 13.527316 19.525000 -61.575001 # 5 -1527 645 5 0.000000 17.216585 20.235001 -61.575001 # 5 -1528 645 5 0.000000 15.986829 19.525000 -61.575001 # 5 -1529 645 5 0.000000 19.676096 20.235001 -61.575001 # 5 -1530 645 5 0.000000 18.446341 19.525000 -61.575001 # 5 -1531 645 5 0.000000 22.135609 20.235001 -61.575001 # 5 -1532 645 5 0.000000 20.905853 19.525000 -61.575001 # 5 -1533 645 5 0.000000 24.595121 20.235001 -61.575001 # 5 -1534 645 5 0.000000 23.365364 19.525000 -61.575001 # 5 -1535 645 5 0.000000 27.054632 20.235001 -61.575001 # 5 -1536 645 5 0.000000 25.824877 19.525000 -61.575001 # 5 -1537 645 5 0.000000 29.514145 20.235001 -61.575001 # 5 -1538 645 5 0.000000 28.284389 19.525000 -61.575001 # 5 -1539 645 5 0.000000 31.973658 20.235001 -61.575001 # 5 -1540 645 5 0.000000 30.743900 19.525000 -61.575001 # 5 -1541 645 5 0.000000 1.229756 22.365000 -61.575001 # 5 -1542 645 5 0.000000 3.689268 22.365000 -61.575001 # 5 -1543 645 5 0.000000 2.459512 21.655001 -61.575001 # 5 -1544 645 5 0.000000 6.148780 22.365000 -61.575001 # 5 -1545 645 5 0.000000 4.919024 21.655001 -61.575001 # 5 -1546 645 5 0.000000 8.608293 22.365000 -61.575001 # 5 -1547 645 5 0.000000 7.378536 21.655001 -61.575001 # 5 -1548 645 5 0.000000 11.067804 22.365000 -61.575001 # 5 -1549 645 5 0.000000 9.838048 21.655001 -61.575001 # 5 -1550 645 5 0.000000 13.527316 22.365000 -61.575001 # 5 -1551 645 5 0.000000 12.297561 21.655001 -61.575001 # 5 -1552 645 5 0.000000 15.986829 22.365000 -61.575001 # 5 -1553 645 5 0.000000 14.757072 21.655001 -61.575001 # 5 -1554 645 5 0.000000 18.446341 22.365000 -61.575001 # 5 -1555 645 5 0.000000 17.216585 21.655001 -61.575001 # 5 -1556 645 5 0.000000 20.905853 22.365000 -61.575001 # 5 -1557 645 5 0.000000 19.676096 21.655001 -61.575001 # 5 -1558 645 5 0.000000 23.365364 22.365000 -61.575001 # 5 -1559 645 5 0.000000 22.135609 21.655001 -61.575001 # 5 -1560 645 5 0.000000 25.824877 22.365000 -61.575001 # 5 -1561 645 5 0.000000 24.595121 21.655001 -61.575001 # 5 -1562 645 5 0.000000 28.284389 22.365000 -61.575001 # 5 -1563 645 5 0.000000 27.054632 21.655001 -61.575001 # 5 -1564 645 5 0.000000 30.743900 22.365000 -61.575001 # 5 -1565 645 5 0.000000 29.514145 21.655001 -61.575001 # 5 -1566 645 5 0.000000 31.973658 21.655001 -61.575001 # 5 -1567 645 5 0.000000 2.459512 24.495001 -61.575001 # 5 -1568 645 5 0.000000 1.229756 23.785000 -61.575001 # 5 -1569 645 5 0.000000 4.919024 24.495001 -61.575001 # 5 -1570 645 5 0.000000 3.689268 23.785000 -61.575001 # 5 -1571 645 5 0.000000 7.378536 24.495001 -61.575001 # 5 -1572 645 5 0.000000 6.148780 23.785000 -61.575001 # 5 -1573 645 5 0.000000 9.838048 24.495001 -61.575001 # 5 -1574 645 5 0.000000 8.608293 23.785000 -61.575001 # 5 -1575 645 5 0.000000 12.297561 24.495001 -61.575001 # 5 -1576 645 5 0.000000 11.067804 23.785000 -61.575001 # 5 -1577 645 5 0.000000 14.757072 24.495001 -61.575001 # 5 -1578 645 5 0.000000 13.527316 23.785000 -61.575001 # 5 -1579 645 5 0.000000 17.216585 24.495001 -61.575001 # 5 -1580 645 5 0.000000 15.986829 23.785000 -61.575001 # 5 -1581 645 5 0.000000 19.676096 24.495001 -61.575001 # 5 -1582 645 5 0.000000 18.446341 23.785000 -61.575001 # 5 -1583 645 5 0.000000 22.135609 24.495001 -61.575001 # 5 -1584 645 5 0.000000 20.905853 23.785000 -61.575001 # 5 -1585 645 5 0.000000 24.595121 24.495001 -61.575001 # 5 -1586 645 5 0.000000 23.365364 23.785000 -61.575001 # 5 -1587 645 5 0.000000 27.054632 24.495001 -61.575001 # 5 -1588 645 5 0.000000 25.824877 23.785000 -61.575001 # 5 -1589 645 5 0.000000 29.514145 24.495001 -61.575001 # 5 -1590 645 5 0.000000 28.284389 23.785000 -61.575001 # 5 -1591 645 5 0.000000 31.973658 24.495001 -61.575001 # 5 -1592 645 5 0.000000 30.743900 23.785000 -61.575001 # 5 -1593 645 5 0.000000 1.229756 26.625000 -61.575001 # 5 -1594 645 5 0.000000 3.689268 26.625000 -61.575001 # 5 -1595 645 5 0.000000 2.459512 25.915003 -61.575001 # 5 -1596 645 5 0.000000 6.148780 26.625000 -61.575001 # 5 -1597 645 5 0.000000 4.919024 25.915003 -61.575001 # 5 -1598 645 5 0.000000 8.608293 26.625000 -61.575001 # 5 -1599 645 5 0.000000 7.378536 25.915003 -61.575001 # 5 -1600 645 5 0.000000 11.067804 26.625000 -61.575001 # 5 -1601 645 5 0.000000 9.838048 25.915003 -61.575001 # 5 -1602 645 5 0.000000 13.527316 26.625000 -61.575001 # 5 -1603 645 5 0.000000 12.297561 25.915003 -61.575001 # 5 -1604 645 5 0.000000 15.986829 26.625000 -61.575001 # 5 -1605 645 5 0.000000 14.757072 25.915003 -61.575001 # 5 -1606 645 5 0.000000 18.446341 26.625000 -61.575001 # 5 -1607 645 5 0.000000 17.216585 25.915003 -61.575001 # 5 -1608 645 5 0.000000 20.905853 26.625000 -61.575001 # 5 -1609 645 5 0.000000 19.676096 25.915003 -61.575001 # 5 -1610 645 5 0.000000 23.365364 26.625000 -61.575001 # 5 -1611 645 5 0.000000 22.135609 25.915003 -61.575001 # 5 -1612 645 5 0.000000 25.824877 26.625000 -61.575001 # 5 -1613 645 5 0.000000 24.595121 25.915003 -61.575001 # 5 -1614 645 5 0.000000 28.284389 26.625000 -61.575001 # 5 -1615 645 5 0.000000 27.054632 25.915003 -61.575001 # 5 -1616 645 5 0.000000 30.743900 26.625000 -61.575001 # 5 -1617 645 5 0.000000 29.514145 25.915003 -61.575001 # 5 -1618 645 5 0.000000 31.973658 25.915003 -61.575001 # 5 -1619 645 5 0.000000 2.459512 28.754999 -61.575001 # 5 -1620 645 5 0.000000 1.229756 28.045000 -61.575001 # 5 -1621 645 5 0.000000 4.919024 28.754999 -61.575001 # 5 -1622 645 5 0.000000 3.689268 28.045000 -61.575001 # 5 -1623 645 5 0.000000 7.378536 28.754999 -61.575001 # 5 -1624 645 5 0.000000 6.148780 28.045000 -61.575001 # 5 -1625 645 5 0.000000 9.838048 28.754999 -61.575001 # 5 -1626 645 5 0.000000 8.608293 28.045000 -61.575001 # 5 -1627 645 5 0.000000 12.297561 28.754999 -61.575001 # 5 -1628 645 5 0.000000 11.067804 28.045000 -61.575001 # 5 -1629 645 5 0.000000 14.757072 28.754999 -61.575001 # 5 -1630 645 5 0.000000 13.527316 28.045000 -61.575001 # 5 -1631 645 5 0.000000 17.216585 28.754999 -61.575001 # 5 -1632 645 5 0.000000 15.986829 28.045000 -61.575001 # 5 -1633 645 5 0.000000 19.676096 28.754999 -61.575001 # 5 -1634 645 5 0.000000 18.446341 28.045000 -61.575001 # 5 -1635 645 5 0.000000 22.135609 28.754999 -61.575001 # 5 -1636 645 5 0.000000 20.905853 28.045000 -61.575001 # 5 -1637 645 5 0.000000 24.595121 28.754999 -61.575001 # 5 -1638 645 5 0.000000 23.365364 28.045000 -61.575001 # 5 -1639 645 5 0.000000 27.054632 28.754999 -61.575001 # 5 -1640 645 5 0.000000 25.824877 28.045000 -61.575001 # 5 -1641 645 5 0.000000 29.514145 28.754999 -61.575001 # 5 -1642 645 5 0.000000 28.284389 28.045000 -61.575001 # 5 -1643 645 5 0.000000 31.973658 28.754999 -61.575001 # 5 -1644 645 5 0.000000 30.743900 28.045000 -61.575001 # 5 -1645 645 5 0.000000 1.229756 30.885000 -61.575001 # 5 -1646 645 5 0.000000 3.689268 30.885000 -61.575001 # 5 -1647 645 5 0.000000 2.459512 30.174999 -61.575001 # 5 -1648 645 5 0.000000 6.148780 30.885000 -61.575001 # 5 -1649 645 5 0.000000 4.919024 30.174999 -61.575001 # 5 -1650 645 5 0.000000 8.608293 30.885000 -61.575001 # 5 -1651 645 5 0.000000 7.378536 30.174999 -61.575001 # 5 -1652 645 5 0.000000 11.067804 30.885000 -61.575001 # 5 -1653 645 5 0.000000 9.838048 30.174999 -61.575001 # 5 -1654 645 5 0.000000 13.527316 30.885000 -61.575001 # 5 -1655 645 5 0.000000 12.297561 30.174999 -61.575001 # 5 -1656 645 5 0.000000 15.986829 30.885000 -61.575001 # 5 -1657 645 5 0.000000 14.757072 30.174999 -61.575001 # 5 -1658 645 5 0.000000 18.446341 30.885000 -61.575001 # 5 -1659 645 5 0.000000 17.216585 30.174999 -61.575001 # 5 -1660 645 5 0.000000 20.905853 30.885000 -61.575001 # 5 -1661 645 5 0.000000 19.676096 30.174999 -61.575001 # 5 -1662 645 5 0.000000 23.365364 30.885000 -61.575001 # 5 -1663 645 5 0.000000 22.135609 30.174999 -61.575001 # 5 -1664 645 5 0.000000 25.824877 30.885000 -61.575001 # 5 -1665 645 5 0.000000 24.595121 30.174999 -61.575001 # 5 -1666 645 5 0.000000 28.284389 30.885000 -61.575001 # 5 -1667 645 5 0.000000 27.054632 30.174999 -61.575001 # 5 -1668 645 5 0.000000 30.743900 30.885000 -61.575001 # 5 -1669 645 5 0.000000 29.514145 30.174999 -61.575001 # 5 -1670 645 5 0.000000 31.973658 30.174999 -61.575001 # 5 -1671 645 5 0.000000 2.459512 33.014999 -61.575001 # 5 -1672 645 5 0.000000 1.229756 32.305000 -61.575001 # 5 -1673 645 5 0.000000 4.919024 33.014999 -61.575001 # 5 -1674 645 5 0.000000 3.689268 32.305000 -61.575001 # 5 -1675 645 5 0.000000 7.378536 33.014999 -61.575001 # 5 -1676 645 5 0.000000 6.148780 32.305000 -61.575001 # 5 -1677 645 5 0.000000 9.838048 33.014999 -61.575001 # 5 -1678 645 5 0.000000 8.608293 32.305000 -61.575001 # 5 -1679 645 5 0.000000 12.297561 33.014999 -61.575001 # 5 -1680 645 5 0.000000 11.067804 32.305000 -61.575001 # 5 -1681 645 5 0.000000 14.757072 33.014999 -61.575001 # 5 -1682 645 5 0.000000 13.527316 32.305000 -61.575001 # 5 -1683 645 5 0.000000 17.216585 33.014999 -61.575001 # 5 -1684 645 5 0.000000 15.986829 32.305000 -61.575001 # 5 -1685 645 5 0.000000 19.676096 33.014999 -61.575001 # 5 -1686 645 5 0.000000 18.446341 32.305000 -61.575001 # 5 -1687 645 5 0.000000 22.135609 33.014999 -61.575001 # 5 -1688 645 5 0.000000 20.905853 32.305000 -61.575001 # 5 -1689 645 5 0.000000 24.595121 33.014999 -61.575001 # 5 -1690 645 5 0.000000 23.365364 32.305000 -61.575001 # 5 -1691 645 5 0.000000 27.054632 33.014999 -61.575001 # 5 -1692 645 5 0.000000 25.824877 32.305000 -61.575001 # 5 -1693 645 5 0.000000 29.514145 33.014999 -61.575001 # 5 -1694 645 5 0.000000 28.284389 32.305000 -61.575001 # 5 -1695 645 5 0.000000 31.973658 33.014999 -61.575001 # 5 -1696 645 5 0.000000 30.743900 32.305000 -61.575001 # 5 -1697 643 5 0.000000 1.229756 1.065000 -58.224998 # 5 +1281 645 6 0.000000 1.229756 1.065000 -61.575001 # 5 +1282 645 6 0.000000 3.689268 1.065000 -61.575001 # 5 +1283 645 6 0.000000 2.459512 0.355000 -61.575001 # 5 +1284 645 6 0.000000 6.148780 1.065000 -61.575001 # 5 +1285 645 6 0.000000 4.919024 0.355000 -61.575001 # 5 +1286 645 6 0.000000 8.608293 1.065000 -61.575001 # 5 +1287 645 6 0.000000 7.378536 0.355000 -61.575001 # 5 +1288 645 6 0.000000 11.067804 1.065000 -61.575001 # 5 +1289 645 6 0.000000 9.838048 0.355000 -61.575001 # 5 +1290 645 6 0.000000 13.527316 1.065000 -61.575001 # 5 +1291 645 6 0.000000 12.297561 0.355000 -61.575001 # 5 +1292 645 6 0.000000 15.986829 1.065000 -61.575001 # 5 +1293 645 6 0.000000 14.757072 0.355000 -61.575001 # 5 +1294 645 6 0.000000 18.446341 1.065000 -61.575001 # 5 +1295 645 6 0.000000 17.216585 0.355000 -61.575001 # 5 +1296 645 6 0.000000 20.905853 1.065000 -61.575001 # 5 +1297 645 6 0.000000 19.676096 0.355000 -61.575001 # 5 +1298 645 6 0.000000 23.365364 1.065000 -61.575001 # 5 +1299 645 6 0.000000 22.135609 0.355000 -61.575001 # 5 +1300 645 6 0.000000 25.824877 1.065000 -61.575001 # 5 +1301 645 6 0.000000 24.595121 0.355000 -61.575001 # 5 +1302 645 6 0.000000 28.284389 1.065000 -61.575001 # 5 +1303 645 6 0.000000 27.054632 0.355000 -61.575001 # 5 +1304 645 6 0.000000 30.743900 1.065000 -61.575001 # 5 +1305 645 6 0.000000 29.514145 0.355000 -61.575001 # 5 +1306 645 6 0.000000 31.973658 0.355000 -61.575001 # 5 +1307 645 6 0.000000 2.459512 3.195000 -61.575001 # 5 +1308 645 6 0.000000 1.229756 2.485000 -61.575001 # 5 +1309 645 6 0.000000 4.919024 3.195000 -61.575001 # 5 +1310 645 6 0.000000 3.689268 2.485000 -61.575001 # 5 +1311 645 6 0.000000 7.378536 3.195000 -61.575001 # 5 +1312 645 6 0.000000 6.148780 2.485000 -61.575001 # 5 +1313 645 6 0.000000 9.838048 3.195000 -61.575001 # 5 +1314 645 6 0.000000 8.608293 2.485000 -61.575001 # 5 +1315 645 6 0.000000 12.297561 3.195000 -61.575001 # 5 +1316 645 6 0.000000 11.067804 2.485000 -61.575001 # 5 +1317 645 6 0.000000 14.757072 3.195000 -61.575001 # 5 +1318 645 6 0.000000 13.527316 2.485000 -61.575001 # 5 +1319 645 6 0.000000 17.216585 3.195000 -61.575001 # 5 +1320 645 6 0.000000 15.986829 2.485000 -61.575001 # 5 +1321 645 6 0.000000 19.676096 3.195000 -61.575001 # 5 +1322 645 6 0.000000 18.446341 2.485000 -61.575001 # 5 +1323 645 6 0.000000 22.135609 3.195000 -61.575001 # 5 +1324 645 6 0.000000 20.905853 2.485000 -61.575001 # 5 +1325 645 6 0.000000 24.595121 3.195000 -61.575001 # 5 +1326 645 6 0.000000 23.365364 2.485000 -61.575001 # 5 +1327 645 6 0.000000 27.054632 3.195000 -61.575001 # 5 +1328 645 6 0.000000 25.824877 2.485000 -61.575001 # 5 +1329 645 6 0.000000 29.514145 3.195000 -61.575001 # 5 +1330 645 6 0.000000 28.284389 2.485000 -61.575001 # 5 +1331 645 6 0.000000 31.973658 3.195000 -61.575001 # 5 +1332 645 6 0.000000 30.743900 2.485000 -61.575001 # 5 +1333 645 6 0.000000 1.229756 5.325000 -61.575001 # 5 +1334 645 6 0.000000 3.689268 5.325000 -61.575001 # 5 +1335 645 6 0.000000 2.459512 4.615000 -61.575001 # 5 +1336 645 6 0.000000 6.148780 5.325000 -61.575001 # 5 +1337 645 6 0.000000 4.919024 4.615000 -61.575001 # 5 +1338 645 6 0.000000 8.608293 5.325000 -61.575001 # 5 +1339 645 6 0.000000 7.378536 4.615000 -61.575001 # 5 +1340 645 6 0.000000 11.067804 5.325000 -61.575001 # 5 +1341 645 6 0.000000 9.838048 4.615000 -61.575001 # 5 +1342 645 6 0.000000 13.527316 5.325000 -61.575001 # 5 +1343 645 6 0.000000 12.297561 4.615000 -61.575001 # 5 +1344 645 6 0.000000 15.986829 5.325000 -61.575001 # 5 +1345 645 6 0.000000 14.757072 4.615000 -61.575001 # 5 +1346 645 6 0.000000 18.446341 5.325000 -61.575001 # 5 +1347 645 6 0.000000 17.216585 4.615000 -61.575001 # 5 +1348 645 6 0.000000 20.905853 5.325000 -61.575001 # 5 +1349 645 6 0.000000 19.676096 4.615000 -61.575001 # 5 +1350 645 6 0.000000 23.365364 5.325000 -61.575001 # 5 +1351 645 6 0.000000 22.135609 4.615000 -61.575001 # 5 +1352 645 6 0.000000 25.824877 5.325000 -61.575001 # 5 +1353 645 6 0.000000 24.595121 4.615000 -61.575001 # 5 +1354 645 6 0.000000 28.284389 5.325000 -61.575001 # 5 +1355 645 6 0.000000 27.054632 4.615000 -61.575001 # 5 +1356 645 6 0.000000 30.743900 5.325000 -61.575001 # 5 +1357 645 6 0.000000 29.514145 4.615000 -61.575001 # 5 +1358 645 6 0.000000 31.973658 4.615000 -61.575001 # 5 +1359 645 6 0.000000 2.459512 7.455000 -61.575001 # 5 +1360 645 6 0.000000 1.229756 6.745000 -61.575001 # 5 +1361 645 6 0.000000 4.919024 7.455000 -61.575001 # 5 +1362 645 6 0.000000 3.689268 6.745000 -61.575001 # 5 +1363 645 6 0.000000 7.378536 7.455000 -61.575001 # 5 +1364 645 6 0.000000 6.148780 6.745000 -61.575001 # 5 +1365 645 6 0.000000 9.838048 7.455000 -61.575001 # 5 +1366 645 6 0.000000 8.608293 6.745000 -61.575001 # 5 +1367 645 6 0.000000 12.297561 7.455000 -61.575001 # 5 +1368 645 6 0.000000 11.067804 6.745000 -61.575001 # 5 +1369 645 6 0.000000 14.757072 7.455000 -61.575001 # 5 +1370 645 6 0.000000 13.527316 6.745000 -61.575001 # 5 +1371 645 6 0.000000 17.216585 7.455000 -61.575001 # 5 +1372 645 6 0.000000 15.986829 6.745000 -61.575001 # 5 +1373 645 6 0.000000 19.676096 7.455000 -61.575001 # 5 +1374 645 6 0.000000 18.446341 6.745000 -61.575001 # 5 +1375 645 6 0.000000 22.135609 7.455000 -61.575001 # 5 +1376 645 6 0.000000 20.905853 6.745000 -61.575001 # 5 +1377 645 6 0.000000 24.595121 7.455000 -61.575001 # 5 +1378 645 6 0.000000 23.365364 6.745000 -61.575001 # 5 +1379 645 6 0.000000 27.054632 7.455000 -61.575001 # 5 +1380 645 6 0.000000 25.824877 6.745000 -61.575001 # 5 +1381 645 6 0.000000 29.514145 7.455000 -61.575001 # 5 +1382 645 6 0.000000 28.284389 6.745000 -61.575001 # 5 +1383 645 6 0.000000 31.973658 7.455000 -61.575001 # 5 +1384 645 6 0.000000 30.743900 6.745000 -61.575001 # 5 +1385 645 6 0.000000 1.229756 9.585000 -61.575001 # 5 +1386 645 6 0.000000 3.689268 9.585000 -61.575001 # 5 +1387 645 6 0.000000 2.459512 8.875000 -61.575001 # 5 +1388 645 6 0.000000 6.148780 9.585000 -61.575001 # 5 +1389 645 6 0.000000 4.919024 8.875000 -61.575001 # 5 +1390 645 6 0.000000 8.608293 9.585000 -61.575001 # 5 +1391 645 6 0.000000 7.378536 8.875000 -61.575001 # 5 +1392 645 6 0.000000 11.067804 9.585000 -61.575001 # 5 +1393 645 6 0.000000 9.838048 8.875000 -61.575001 # 5 +1394 645 6 0.000000 13.527316 9.585000 -61.575001 # 5 +1395 645 6 0.000000 12.297561 8.875000 -61.575001 # 5 +1396 645 6 0.000000 15.986829 9.585000 -61.575001 # 5 +1397 645 6 0.000000 14.757072 8.875000 -61.575001 # 5 +1398 645 6 0.000000 18.446341 9.585000 -61.575001 # 5 +1399 645 6 0.000000 17.216585 8.875000 -61.575001 # 5 +1400 645 6 0.000000 20.905853 9.585000 -61.575001 # 5 +1401 645 6 0.000000 19.676096 8.875000 -61.575001 # 5 +1402 645 6 0.000000 23.365364 9.585000 -61.575001 # 5 +1403 645 6 0.000000 22.135609 8.875000 -61.575001 # 5 +1404 645 6 0.000000 25.824877 9.585000 -61.575001 # 5 +1405 645 6 0.000000 24.595121 8.875000 -61.575001 # 5 +1406 645 6 0.000000 28.284389 9.585000 -61.575001 # 5 +1407 645 6 0.000000 27.054632 8.875000 -61.575001 # 5 +1408 645 6 0.000000 30.743900 9.585000 -61.575001 # 5 +1409 645 6 0.000000 29.514145 8.875000 -61.575001 # 5 +1410 645 6 0.000000 31.973658 8.875000 -61.575001 # 5 +1411 645 6 0.000000 2.459512 11.715001 -61.575001 # 5 +1412 645 6 0.000000 1.229756 11.005000 -61.575001 # 5 +1413 645 6 0.000000 4.919024 11.715001 -61.575001 # 5 +1414 645 6 0.000000 3.689268 11.005000 -61.575001 # 5 +1415 645 6 0.000000 7.378536 11.715001 -61.575001 # 5 +1416 645 6 0.000000 6.148780 11.005000 -61.575001 # 5 +1417 645 6 0.000000 9.838048 11.715001 -61.575001 # 5 +1418 645 6 0.000000 8.608293 11.005000 -61.575001 # 5 +1419 645 6 0.000000 12.297561 11.715001 -61.575001 # 5 +1420 645 6 0.000000 11.067804 11.005000 -61.575001 # 5 +1421 645 6 0.000000 14.757072 11.715001 -61.575001 # 5 +1422 645 6 0.000000 13.527316 11.005000 -61.575001 # 5 +1423 645 6 0.000000 17.216585 11.715001 -61.575001 # 5 +1424 645 6 0.000000 15.986829 11.005000 -61.575001 # 5 +1425 645 6 0.000000 19.676096 11.715001 -61.575001 # 5 +1426 645 6 0.000000 18.446341 11.005000 -61.575001 # 5 +1427 645 6 0.000000 22.135609 11.715001 -61.575001 # 5 +1428 645 6 0.000000 20.905853 11.005000 -61.575001 # 5 +1429 645 6 0.000000 24.595121 11.715001 -61.575001 # 5 +1430 645 6 0.000000 23.365364 11.005000 -61.575001 # 5 +1431 645 6 0.000000 27.054632 11.715001 -61.575001 # 5 +1432 645 6 0.000000 25.824877 11.005000 -61.575001 # 5 +1433 645 6 0.000000 29.514145 11.715001 -61.575001 # 5 +1434 645 6 0.000000 28.284389 11.005000 -61.575001 # 5 +1435 645 6 0.000000 31.973658 11.715001 -61.575001 # 5 +1436 645 6 0.000000 30.743900 11.005000 -61.575001 # 5 +1437 645 6 0.000000 1.229756 13.845000 -61.575001 # 5 +1438 645 6 0.000000 3.689268 13.845000 -61.575001 # 5 +1439 645 6 0.000000 2.459512 13.135000 -61.575001 # 5 +1440 645 6 0.000000 6.148780 13.845000 -61.575001 # 5 +1441 645 6 0.000000 4.919024 13.135000 -61.575001 # 5 +1442 645 6 0.000000 8.608293 13.845000 -61.575001 # 5 +1443 645 6 0.000000 7.378536 13.135000 -61.575001 # 5 +1444 645 6 0.000000 11.067804 13.845000 -61.575001 # 5 +1445 645 6 0.000000 9.838048 13.135000 -61.575001 # 5 +1446 645 6 0.000000 13.527316 13.845000 -61.575001 # 5 +1447 645 6 0.000000 12.297561 13.135000 -61.575001 # 5 +1448 645 6 0.000000 15.986829 13.845000 -61.575001 # 5 +1449 645 6 0.000000 14.757072 13.135000 -61.575001 # 5 +1450 645 6 0.000000 18.446341 13.845000 -61.575001 # 5 +1451 645 6 0.000000 17.216585 13.135000 -61.575001 # 5 +1452 645 6 0.000000 20.905853 13.845000 -61.575001 # 5 +1453 645 6 0.000000 19.676096 13.135000 -61.575001 # 5 +1454 645 6 0.000000 23.365364 13.845000 -61.575001 # 5 +1455 645 6 0.000000 22.135609 13.135000 -61.575001 # 5 +1456 645 6 0.000000 25.824877 13.845000 -61.575001 # 5 +1457 645 6 0.000000 24.595121 13.135000 -61.575001 # 5 +1458 645 6 0.000000 28.284389 13.845000 -61.575001 # 5 +1459 645 6 0.000000 27.054632 13.135000 -61.575001 # 5 +1460 645 6 0.000000 30.743900 13.845000 -61.575001 # 5 +1461 645 6 0.000000 29.514145 13.135000 -61.575001 # 5 +1462 645 6 0.000000 31.973658 13.135000 -61.575001 # 5 +1463 645 6 0.000000 2.459512 15.975000 -61.575001 # 5 +1464 645 6 0.000000 1.229756 15.265000 -61.575001 # 5 +1465 645 6 0.000000 4.919024 15.975000 -61.575001 # 5 +1466 645 6 0.000000 3.689268 15.265000 -61.575001 # 5 +1467 645 6 0.000000 7.378536 15.975000 -61.575001 # 5 +1468 645 6 0.000000 6.148780 15.265000 -61.575001 # 5 +1469 645 6 0.000000 9.838048 15.975000 -61.575001 # 5 +1470 645 6 0.000000 8.608293 15.265000 -61.575001 # 5 +1471 645 6 0.000000 12.297561 15.975000 -61.575001 # 5 +1472 645 6 0.000000 11.067804 15.265000 -61.575001 # 5 +1473 645 6 0.000000 14.757072 15.975000 -61.575001 # 5 +1474 645 6 0.000000 13.527316 15.265000 -61.575001 # 5 +1475 645 6 0.000000 17.216585 15.975000 -61.575001 # 5 +1476 645 6 0.000000 15.986829 15.265000 -61.575001 # 5 +1477 645 6 0.000000 19.676096 15.975000 -61.575001 # 5 +1478 645 6 0.000000 18.446341 15.265000 -61.575001 # 5 +1479 645 6 0.000000 22.135609 15.975000 -61.575001 # 5 +1480 645 6 0.000000 20.905853 15.265000 -61.575001 # 5 +1481 645 6 0.000000 24.595121 15.975000 -61.575001 # 5 +1482 645 6 0.000000 23.365364 15.265000 -61.575001 # 5 +1483 645 6 0.000000 27.054632 15.975000 -61.575001 # 5 +1484 645 6 0.000000 25.824877 15.265000 -61.575001 # 5 +1485 645 6 0.000000 29.514145 15.975000 -61.575001 # 5 +1486 645 6 0.000000 28.284389 15.265000 -61.575001 # 5 +1487 645 6 0.000000 31.973658 15.975000 -61.575001 # 5 +1488 645 6 0.000000 30.743900 15.265000 -61.575001 # 5 +1489 645 6 0.000000 1.229756 18.105000 -61.575001 # 5 +1490 645 6 0.000000 3.689268 18.105000 -61.575001 # 5 +1491 645 6 0.000000 2.459512 17.395000 -61.575001 # 5 +1492 645 6 0.000000 6.148780 18.105000 -61.575001 # 5 +1493 645 6 0.000000 4.919024 17.395000 -61.575001 # 5 +1494 645 6 0.000000 8.608293 18.105000 -61.575001 # 5 +1495 645 6 0.000000 7.378536 17.395000 -61.575001 # 5 +1496 645 6 0.000000 11.067804 18.105000 -61.575001 # 5 +1497 645 6 0.000000 9.838048 17.395000 -61.575001 # 5 +1498 645 6 0.000000 13.527316 18.105000 -61.575001 # 5 +1499 645 6 0.000000 12.297561 17.395000 -61.575001 # 5 +1500 645 6 0.000000 15.986829 18.105000 -61.575001 # 5 +1501 645 6 0.000000 14.757072 17.395000 -61.575001 # 5 +1502 645 6 0.000000 18.446341 18.105000 -61.575001 # 5 +1503 645 6 0.000000 17.216585 17.395000 -61.575001 # 5 +1504 645 6 0.000000 20.905853 18.105000 -61.575001 # 5 +1505 645 6 0.000000 19.676096 17.395000 -61.575001 # 5 +1506 645 6 0.000000 23.365364 18.105000 -61.575001 # 5 +1507 645 6 0.000000 22.135609 17.395000 -61.575001 # 5 +1508 645 6 0.000000 25.824877 18.105000 -61.575001 # 5 +1509 645 6 0.000000 24.595121 17.395000 -61.575001 # 5 +1510 645 6 0.000000 28.284389 18.105000 -61.575001 # 5 +1511 645 6 0.000000 27.054632 17.395000 -61.575001 # 5 +1512 645 6 0.000000 30.743900 18.105000 -61.575001 # 5 +1513 645 6 0.000000 29.514145 17.395000 -61.575001 # 5 +1514 645 6 0.000000 31.973658 17.395000 -61.575001 # 5 +1515 645 6 0.000000 2.459512 20.235001 -61.575001 # 5 +1516 645 6 0.000000 1.229756 19.525000 -61.575001 # 5 +1517 645 6 0.000000 4.919024 20.235001 -61.575001 # 5 +1518 645 6 0.000000 3.689268 19.525000 -61.575001 # 5 +1519 645 6 0.000000 7.378536 20.235001 -61.575001 # 5 +1520 645 6 0.000000 6.148780 19.525000 -61.575001 # 5 +1521 645 6 0.000000 9.838048 20.235001 -61.575001 # 5 +1522 645 6 0.000000 8.608293 19.525000 -61.575001 # 5 +1523 645 6 0.000000 12.297561 20.235001 -61.575001 # 5 +1524 645 6 0.000000 11.067804 19.525000 -61.575001 # 5 +1525 645 6 0.000000 14.757072 20.235001 -61.575001 # 5 +1526 645 6 0.000000 13.527316 19.525000 -61.575001 # 5 +1527 645 6 0.000000 17.216585 20.235001 -61.575001 # 5 +1528 645 6 0.000000 15.986829 19.525000 -61.575001 # 5 +1529 645 6 0.000000 19.676096 20.235001 -61.575001 # 5 +1530 645 6 0.000000 18.446341 19.525000 -61.575001 # 5 +1531 645 6 0.000000 22.135609 20.235001 -61.575001 # 5 +1532 645 6 0.000000 20.905853 19.525000 -61.575001 # 5 +1533 645 6 0.000000 24.595121 20.235001 -61.575001 # 5 +1534 645 6 0.000000 23.365364 19.525000 -61.575001 # 5 +1535 645 6 0.000000 27.054632 20.235001 -61.575001 # 5 +1536 645 6 0.000000 25.824877 19.525000 -61.575001 # 5 +1537 645 6 0.000000 29.514145 20.235001 -61.575001 # 5 +1538 645 6 0.000000 28.284389 19.525000 -61.575001 # 5 +1539 645 6 0.000000 31.973658 20.235001 -61.575001 # 5 +1540 645 6 0.000000 30.743900 19.525000 -61.575001 # 5 +1541 645 6 0.000000 1.229756 22.365000 -61.575001 # 5 +1542 645 6 0.000000 3.689268 22.365000 -61.575001 # 5 +1543 645 6 0.000000 2.459512 21.655001 -61.575001 # 5 +1544 645 6 0.000000 6.148780 22.365000 -61.575001 # 5 +1545 645 6 0.000000 4.919024 21.655001 -61.575001 # 5 +1546 645 6 0.000000 8.608293 22.365000 -61.575001 # 5 +1547 645 6 0.000000 7.378536 21.655001 -61.575001 # 5 +1548 645 6 0.000000 11.067804 22.365000 -61.575001 # 5 +1549 645 6 0.000000 9.838048 21.655001 -61.575001 # 5 +1550 645 6 0.000000 13.527316 22.365000 -61.575001 # 5 +1551 645 6 0.000000 12.297561 21.655001 -61.575001 # 5 +1552 645 6 0.000000 15.986829 22.365000 -61.575001 # 5 +1553 645 6 0.000000 14.757072 21.655001 -61.575001 # 5 +1554 645 6 0.000000 18.446341 22.365000 -61.575001 # 5 +1555 645 6 0.000000 17.216585 21.655001 -61.575001 # 5 +1556 645 6 0.000000 20.905853 22.365000 -61.575001 # 5 +1557 645 6 0.000000 19.676096 21.655001 -61.575001 # 5 +1558 645 6 0.000000 23.365364 22.365000 -61.575001 # 5 +1559 645 6 0.000000 22.135609 21.655001 -61.575001 # 5 +1560 645 6 0.000000 25.824877 22.365000 -61.575001 # 5 +1561 645 6 0.000000 24.595121 21.655001 -61.575001 # 5 +1562 645 6 0.000000 28.284389 22.365000 -61.575001 # 5 +1563 645 6 0.000000 27.054632 21.655001 -61.575001 # 5 +1564 645 6 0.000000 30.743900 22.365000 -61.575001 # 5 +1565 645 6 0.000000 29.514145 21.655001 -61.575001 # 5 +1566 645 6 0.000000 31.973658 21.655001 -61.575001 # 5 +1567 645 6 0.000000 2.459512 24.495001 -61.575001 # 5 +1568 645 6 0.000000 1.229756 23.785000 -61.575001 # 5 +1569 645 6 0.000000 4.919024 24.495001 -61.575001 # 5 +1570 645 6 0.000000 3.689268 23.785000 -61.575001 # 5 +1571 645 6 0.000000 7.378536 24.495001 -61.575001 # 5 +1572 645 6 0.000000 6.148780 23.785000 -61.575001 # 5 +1573 645 6 0.000000 9.838048 24.495001 -61.575001 # 5 +1574 645 6 0.000000 8.608293 23.785000 -61.575001 # 5 +1575 645 6 0.000000 12.297561 24.495001 -61.575001 # 5 +1576 645 6 0.000000 11.067804 23.785000 -61.575001 # 5 +1577 645 6 0.000000 14.757072 24.495001 -61.575001 # 5 +1578 645 6 0.000000 13.527316 23.785000 -61.575001 # 5 +1579 645 6 0.000000 17.216585 24.495001 -61.575001 # 5 +1580 645 6 0.000000 15.986829 23.785000 -61.575001 # 5 +1581 645 6 0.000000 19.676096 24.495001 -61.575001 # 5 +1582 645 6 0.000000 18.446341 23.785000 -61.575001 # 5 +1583 645 6 0.000000 22.135609 24.495001 -61.575001 # 5 +1584 645 6 0.000000 20.905853 23.785000 -61.575001 # 5 +1585 645 6 0.000000 24.595121 24.495001 -61.575001 # 5 +1586 645 6 0.000000 23.365364 23.785000 -61.575001 # 5 +1587 645 6 0.000000 27.054632 24.495001 -61.575001 # 5 +1588 645 6 0.000000 25.824877 23.785000 -61.575001 # 5 +1589 645 6 0.000000 29.514145 24.495001 -61.575001 # 5 +1590 645 6 0.000000 28.284389 23.785000 -61.575001 # 5 +1591 645 6 0.000000 31.973658 24.495001 -61.575001 # 5 +1592 645 6 0.000000 30.743900 23.785000 -61.575001 # 5 +1593 645 6 0.000000 1.229756 26.625000 -61.575001 # 5 +1594 645 6 0.000000 3.689268 26.625000 -61.575001 # 5 +1595 645 6 0.000000 2.459512 25.915003 -61.575001 # 5 +1596 645 6 0.000000 6.148780 26.625000 -61.575001 # 5 +1597 645 6 0.000000 4.919024 25.915003 -61.575001 # 5 +1598 645 6 0.000000 8.608293 26.625000 -61.575001 # 5 +1599 645 6 0.000000 7.378536 25.915003 -61.575001 # 5 +1600 645 6 0.000000 11.067804 26.625000 -61.575001 # 5 +1601 645 6 0.000000 9.838048 25.915003 -61.575001 # 5 +1602 645 6 0.000000 13.527316 26.625000 -61.575001 # 5 +1603 645 6 0.000000 12.297561 25.915003 -61.575001 # 5 +1604 645 6 0.000000 15.986829 26.625000 -61.575001 # 5 +1605 645 6 0.000000 14.757072 25.915003 -61.575001 # 5 +1606 645 6 0.000000 18.446341 26.625000 -61.575001 # 5 +1607 645 6 0.000000 17.216585 25.915003 -61.575001 # 5 +1608 645 6 0.000000 20.905853 26.625000 -61.575001 # 5 +1609 645 6 0.000000 19.676096 25.915003 -61.575001 # 5 +1610 645 6 0.000000 23.365364 26.625000 -61.575001 # 5 +1611 645 6 0.000000 22.135609 25.915003 -61.575001 # 5 +1612 645 6 0.000000 25.824877 26.625000 -61.575001 # 5 +1613 645 6 0.000000 24.595121 25.915003 -61.575001 # 5 +1614 645 6 0.000000 28.284389 26.625000 -61.575001 # 5 +1615 645 6 0.000000 27.054632 25.915003 -61.575001 # 5 +1616 645 6 0.000000 30.743900 26.625000 -61.575001 # 5 +1617 645 6 0.000000 29.514145 25.915003 -61.575001 # 5 +1618 645 6 0.000000 31.973658 25.915003 -61.575001 # 5 +1619 645 6 0.000000 2.459512 28.754999 -61.575001 # 5 +1620 645 6 0.000000 1.229756 28.045000 -61.575001 # 5 +1621 645 6 0.000000 4.919024 28.754999 -61.575001 # 5 +1622 645 6 0.000000 3.689268 28.045000 -61.575001 # 5 +1623 645 6 0.000000 7.378536 28.754999 -61.575001 # 5 +1624 645 6 0.000000 6.148780 28.045000 -61.575001 # 5 +1625 645 6 0.000000 9.838048 28.754999 -61.575001 # 5 +1626 645 6 0.000000 8.608293 28.045000 -61.575001 # 5 +1627 645 6 0.000000 12.297561 28.754999 -61.575001 # 5 +1628 645 6 0.000000 11.067804 28.045000 -61.575001 # 5 +1629 645 6 0.000000 14.757072 28.754999 -61.575001 # 5 +1630 645 6 0.000000 13.527316 28.045000 -61.575001 # 5 +1631 645 6 0.000000 17.216585 28.754999 -61.575001 # 5 +1632 645 6 0.000000 15.986829 28.045000 -61.575001 # 5 +1633 645 6 0.000000 19.676096 28.754999 -61.575001 # 5 +1634 645 6 0.000000 18.446341 28.045000 -61.575001 # 5 +1635 645 6 0.000000 22.135609 28.754999 -61.575001 # 5 +1636 645 6 0.000000 20.905853 28.045000 -61.575001 # 5 +1637 645 6 0.000000 24.595121 28.754999 -61.575001 # 5 +1638 645 6 0.000000 23.365364 28.045000 -61.575001 # 5 +1639 645 6 0.000000 27.054632 28.754999 -61.575001 # 5 +1640 645 6 0.000000 25.824877 28.045000 -61.575001 # 5 +1641 645 6 0.000000 29.514145 28.754999 -61.575001 # 5 +1642 645 6 0.000000 28.284389 28.045000 -61.575001 # 5 +1643 645 6 0.000000 31.973658 28.754999 -61.575001 # 5 +1644 645 6 0.000000 30.743900 28.045000 -61.575001 # 5 +1645 645 6 0.000000 1.229756 30.885000 -61.575001 # 5 +1646 645 6 0.000000 3.689268 30.885000 -61.575001 # 5 +1647 645 6 0.000000 2.459512 30.174999 -61.575001 # 5 +1648 645 6 0.000000 6.148780 30.885000 -61.575001 # 5 +1649 645 6 0.000000 4.919024 30.174999 -61.575001 # 5 +1650 645 6 0.000000 8.608293 30.885000 -61.575001 # 5 +1651 645 6 0.000000 7.378536 30.174999 -61.575001 # 5 +1652 645 6 0.000000 11.067804 30.885000 -61.575001 # 5 +1653 645 6 0.000000 9.838048 30.174999 -61.575001 # 5 +1654 645 6 0.000000 13.527316 30.885000 -61.575001 # 5 +1655 645 6 0.000000 12.297561 30.174999 -61.575001 # 5 +1656 645 6 0.000000 15.986829 30.885000 -61.575001 # 5 +1657 645 6 0.000000 14.757072 30.174999 -61.575001 # 5 +1658 645 6 0.000000 18.446341 30.885000 -61.575001 # 5 +1659 645 6 0.000000 17.216585 30.174999 -61.575001 # 5 +1660 645 6 0.000000 20.905853 30.885000 -61.575001 # 5 +1661 645 6 0.000000 19.676096 30.174999 -61.575001 # 5 +1662 645 6 0.000000 23.365364 30.885000 -61.575001 # 5 +1663 645 6 0.000000 22.135609 30.174999 -61.575001 # 5 +1664 645 6 0.000000 25.824877 30.885000 -61.575001 # 5 +1665 645 6 0.000000 24.595121 30.174999 -61.575001 # 5 +1666 645 6 0.000000 28.284389 30.885000 -61.575001 # 5 +1667 645 6 0.000000 27.054632 30.174999 -61.575001 # 5 +1668 645 6 0.000000 30.743900 30.885000 -61.575001 # 5 +1669 645 6 0.000000 29.514145 30.174999 -61.575001 # 5 +1670 645 6 0.000000 31.973658 30.174999 -61.575001 # 5 +1671 645 6 0.000000 2.459512 33.014999 -61.575001 # 5 +1672 645 6 0.000000 1.229756 32.305000 -61.575001 # 5 +1673 645 6 0.000000 4.919024 33.014999 -61.575001 # 5 +1674 645 6 0.000000 3.689268 32.305000 -61.575001 # 5 +1675 645 6 0.000000 7.378536 33.014999 -61.575001 # 5 +1676 645 6 0.000000 6.148780 32.305000 -61.575001 # 5 +1677 645 6 0.000000 9.838048 33.014999 -61.575001 # 5 +1678 645 6 0.000000 8.608293 32.305000 -61.575001 # 5 +1679 645 6 0.000000 12.297561 33.014999 -61.575001 # 5 +1680 645 6 0.000000 11.067804 32.305000 -61.575001 # 5 +1681 645 6 0.000000 14.757072 33.014999 -61.575001 # 5 +1682 645 6 0.000000 13.527316 32.305000 -61.575001 # 5 +1683 645 6 0.000000 17.216585 33.014999 -61.575001 # 5 +1684 645 6 0.000000 15.986829 32.305000 -61.575001 # 5 +1685 645 6 0.000000 19.676096 33.014999 -61.575001 # 5 +1686 645 6 0.000000 18.446341 32.305000 -61.575001 # 5 +1687 645 6 0.000000 22.135609 33.014999 -61.575001 # 5 +1688 645 6 0.000000 20.905853 32.305000 -61.575001 # 5 +1689 645 6 0.000000 24.595121 33.014999 -61.575001 # 5 +1690 645 6 0.000000 23.365364 32.305000 -61.575001 # 5 +1691 645 6 0.000000 27.054632 33.014999 -61.575001 # 5 +1692 645 6 0.000000 25.824877 32.305000 -61.575001 # 5 +1693 645 6 0.000000 29.514145 33.014999 -61.575001 # 5 +1694 645 6 0.000000 28.284389 32.305000 -61.575001 # 5 +1695 645 6 0.000000 31.973658 33.014999 -61.575001 # 5 +1696 645 6 0.000000 30.743900 32.305000 -61.575001 # 5 +1697 643 6 0.000000 1.229756 1.065000 -58.224998 # 5 1698 641 5 -0.003588 1.229756 1.065000 -54.875000 # 5 -1699 643 5 0.000000 2.459512 1.775000 -58.224998 # 5 -1700 643 5 0.000000 3.689268 1.065000 -58.224998 # 5 +1699 643 6 0.000000 2.459512 1.775000 -58.224998 # 5 +1700 643 6 0.000000 3.689268 1.065000 -58.224998 # 5 1701 641 5 0.010943 3.689268 1.065000 -54.875000 # 5 1702 641 5 0.003654 2.459512 0.355000 -54.875000 # 5 -1703 643 5 0.000000 4.919024 1.775000 -58.224998 # 5 -1704 643 5 0.000000 6.148780 1.065000 -58.224998 # 5 +1703 643 6 0.000000 4.919024 1.775000 -58.224998 # 5 +1704 643 6 0.000000 6.148780 1.065000 -58.224998 # 5 1705 641 5 0.007813 6.148780 1.065000 -54.875000 # 5 1706 641 5 0.011720 4.919024 0.355000 -54.875000 # 5 -1707 643 5 0.000000 7.378536 1.775000 -58.224998 # 5 -1708 643 5 0.000000 8.608293 1.065000 -58.224998 # 5 +1707 643 6 0.000000 7.378536 1.775000 -58.224998 # 5 +1708 643 6 0.000000 8.608293 1.065000 -58.224998 # 5 1709 641 5 -0.003508 8.608293 1.065000 -54.875000 # 5 1710 641 5 0.001472 7.378536 0.355000 -54.875000 # 5 -1711 643 5 0.000000 9.838048 1.775000 -58.224998 # 5 -1712 643 5 0.000000 11.067804 1.065000 -58.224998 # 5 +1711 643 6 0.000000 9.838048 1.775000 -58.224998 # 5 +1712 643 6 0.000000 11.067804 1.065000 -58.224998 # 5 1713 641 5 -0.000091 11.067804 1.065000 -54.875000 # 5 1714 641 5 -0.002586 9.838048 0.355000 -54.875000 # 5 -1715 643 5 0.000000 12.297561 1.775000 -58.224998 # 5 -1716 643 5 0.000000 13.527316 1.065000 -58.224998 # 5 +1715 643 6 0.000000 12.297561 1.775000 -58.224998 # 5 +1716 643 6 0.000000 13.527316 1.065000 -58.224998 # 5 1717 641 5 0.011584 13.527316 1.065000 -54.875000 # 5 1718 641 5 0.009209 12.297561 0.355000 -54.875000 # 5 -1719 643 5 0.000000 14.757072 1.775000 -58.224998 # 5 -1720 643 5 0.000000 15.986829 1.065000 -58.224998 # 5 +1719 643 6 0.000000 14.757072 1.775000 -58.224998 # 5 +1720 643 6 0.000000 15.986829 1.065000 -58.224998 # 5 1721 641 5 0.004193 15.986829 1.065000 -54.875000 # 5 1722 641 5 0.013449 14.757072 0.355000 -54.875000 # 5 -1723 643 5 0.000000 17.216585 1.775000 -58.224998 # 5 -1724 643 5 0.000000 18.446341 1.065000 -58.224998 # 5 +1723 643 6 0.000000 17.216585 1.775000 -58.224998 # 5 +1724 643 6 0.000000 18.446341 1.065000 -58.224998 # 5 1725 641 5 -0.001422 18.446341 1.065000 -54.875000 # 5 1726 641 5 0.003415 17.216585 0.355000 -54.875000 # 5 -1727 643 5 0.000000 19.676096 1.775000 -58.224998 # 5 -1728 643 5 0.000000 20.905853 1.065000 -58.224998 # 5 +1727 643 6 0.000000 19.676096 1.775000 -58.224998 # 5 +1728 643 6 0.000000 20.905853 1.065000 -58.224998 # 5 1729 641 5 0.004366 20.905853 1.065000 -54.875000 # 5 1730 641 5 0.007882 19.676096 0.355000 -54.875000 # 5 -1731 643 5 0.000000 22.135609 1.775000 -58.224998 # 5 -1732 643 5 0.000000 23.365364 1.065000 -58.224998 # 5 +1731 643 6 0.000000 22.135609 1.775000 -58.224998 # 5 +1732 643 6 0.000000 23.365364 1.065000 -58.224998 # 5 1733 641 5 0.005847 23.365364 1.065000 -54.875000 # 5 1734 641 5 0.009526 22.135609 0.355000 -54.875000 # 5 -1735 643 5 0.000000 24.595121 1.775000 -58.224998 # 5 -1736 643 5 0.000000 25.824877 1.065000 -58.224998 # 5 +1735 643 6 0.000000 24.595121 1.775000 -58.224998 # 5 +1736 643 6 0.000000 25.824877 1.065000 -58.224998 # 5 1737 641 5 0.008915 25.824877 1.065000 -54.875000 # 5 1738 641 5 0.007506 24.595121 0.355000 -54.875000 # 5 -1739 643 5 0.000000 27.054632 1.775000 -58.224998 # 5 -1740 643 5 0.000000 28.284389 1.065000 -58.224998 # 5 +1739 643 6 0.000000 27.054632 1.775000 -58.224998 # 5 +1740 643 6 0.000000 28.284389 1.065000 -58.224998 # 5 1741 641 5 0.003894 28.284389 1.065000 -54.875000 # 5 1742 641 5 0.006134 27.054632 0.355000 -54.875000 # 5 -1743 643 5 0.000000 29.514145 1.775000 -58.224998 # 5 -1744 643 5 0.000000 30.743900 1.065000 -58.224998 # 5 +1743 643 6 0.000000 29.514145 1.775000 -58.224998 # 5 +1744 643 6 0.000000 30.743900 1.065000 -58.224998 # 5 1745 641 5 -0.008012 30.743900 1.065000 -54.875000 # 5 1746 641 5 -0.003567 29.514145 0.355000 -54.875000 # 5 -1747 643 5 0.000000 31.973658 1.775000 -58.224998 # 5 +1747 643 6 0.000000 31.973658 1.775000 -58.224998 # 5 1748 641 5 -0.009828 31.973658 0.355000 -54.875000 # 5 -1749 643 5 0.000000 1.229756 3.905000 -58.224998 # 5 -1750 643 5 0.000000 2.459512 3.195000 -58.224998 # 5 +1749 643 6 0.000000 1.229756 3.905000 -58.224998 # 5 +1750 643 6 0.000000 2.459512 3.195000 -58.224998 # 5 1751 641 5 0.005462 2.459512 3.195000 -54.875000 # 5 1752 641 5 -0.000737 1.229756 2.485000 -54.875000 # 5 -1753 643 5 0.000000 3.689268 3.905000 -58.224998 # 5 -1754 643 5 0.000000 4.919024 3.195000 -58.224998 # 5 +1753 643 6 0.000000 3.689268 3.905000 -58.224998 # 5 +1754 643 6 0.000000 4.919024 3.195000 -58.224998 # 5 1755 641 5 0.007224 4.919024 3.195000 -54.875000 # 5 1756 641 5 0.009510 3.689268 2.485000 -54.875000 # 5 -1757 643 5 0.000000 6.148780 3.905000 -58.224998 # 5 -1758 643 5 0.000000 7.378536 3.195000 -58.224998 # 5 +1757 643 6 0.000000 6.148780 3.905000 -58.224998 # 5 +1758 643 6 0.000000 7.378536 3.195000 -58.224998 # 5 1759 641 5 -0.002420 7.378536 3.195000 -54.875000 # 5 1760 641 5 0.005396 6.148780 2.485000 -54.875000 # 5 -1761 643 5 0.000000 8.608293 3.905000 -58.224998 # 5 -1762 643 5 0.000000 9.838048 3.195000 -58.224998 # 5 +1761 643 6 0.000000 8.608293 3.905000 -58.224998 # 5 +1762 643 6 0.000000 9.838048 3.195000 -58.224998 # 5 1763 641 5 -0.008531 9.838048 3.195000 -54.875000 # 5 1764 641 5 -0.005950 8.608293 2.485000 -54.875000 # 5 -1765 643 5 0.000000 11.067804 3.905000 -58.224998 # 5 -1766 643 5 0.000000 12.297561 3.195000 -58.224998 # 5 +1765 643 6 0.000000 11.067804 3.905000 -58.224998 # 5 +1766 643 6 0.000000 12.297561 3.195000 -58.224998 # 5 1767 641 5 -0.001160 12.297561 3.195000 -54.875000 # 5 1768 641 5 -0.004007 11.067804 2.485000 -54.875000 # 5 -1769 643 5 0.000000 13.527316 3.905000 -58.224998 # 5 -1770 643 5 0.000000 14.757072 3.195000 -58.224998 # 5 +1769 643 6 0.000000 13.527316 3.905000 -58.224998 # 5 +1770 643 6 0.000000 14.757072 3.195000 -58.224998 # 5 1771 641 5 0.001250 14.757072 3.195000 -54.875000 # 5 1772 641 5 0.005086 13.527316 2.485000 -54.875000 # 5 -1773 643 5 0.000000 15.986829 3.905000 -58.224998 # 5 -1774 643 5 0.000000 17.216585 3.195000 -58.224998 # 5 +1773 643 6 0.000000 15.986829 3.905000 -58.224998 # 5 +1774 643 6 0.000000 17.216585 3.195000 -58.224998 # 5 1775 641 5 -0.008754 17.216585 3.195000 -54.875000 # 5 1776 641 5 -0.001144 15.986829 2.485000 -54.875000 # 5 -1777 643 5 0.000000 18.446341 3.905000 -58.224998 # 5 -1778 643 5 0.000000 19.676096 3.195000 -58.224998 # 5 +1777 643 6 0.000000 18.446341 3.905000 -58.224998 # 5 +1778 643 6 0.000000 19.676096 3.195000 -58.224998 # 5 1779 641 5 -0.006182 19.676096 3.195000 -54.875000 # 5 1780 641 5 -0.008547 18.446341 2.485000 -54.875000 # 5 -1781 643 5 0.000000 20.905853 3.905000 -58.224998 # 5 -1782 643 5 0.000000 22.135609 3.195000 -58.224998 # 5 +1781 643 6 0.000000 20.905853 3.905000 -58.224998 # 5 +1782 643 6 0.000000 22.135609 3.195000 -58.224998 # 5 1783 641 5 -0.000136 22.135609 3.195000 -54.875000 # 5 1784 641 5 -0.001686 20.905853 2.485000 -54.875000 # 5 -1785 643 5 0.000000 23.365364 3.905000 -58.224998 # 5 -1786 643 5 0.000000 24.595121 3.195000 -58.224998 # 5 +1785 643 6 0.000000 23.365364 3.905000 -58.224998 # 5 +1786 643 6 0.000000 24.595121 3.195000 -58.224998 # 5 1787 641 5 0.007455 24.595121 3.195000 -54.875000 # 5 1788 641 5 0.003996 23.365364 2.485000 -54.875000 # 5 -1789 643 5 0.000000 25.824877 3.905000 -58.224998 # 5 -1790 643 5 0.000000 27.054632 3.195000 -58.224998 # 5 +1789 643 6 0.000000 25.824877 3.905000 -58.224998 # 5 +1790 643 6 0.000000 27.054632 3.195000 -58.224998 # 5 1791 641 5 0.011764 27.054632 3.195000 -54.875000 # 5 1792 641 5 0.011886 25.824877 2.485000 -54.875000 # 5 -1793 643 5 0.000000 28.284389 3.905000 -58.224998 # 5 -1794 643 5 0.000000 29.514145 3.195000 -58.224998 # 5 +1793 643 6 0.000000 28.284389 3.905000 -58.224998 # 5 +1794 643 6 0.000000 29.514145 3.195000 -58.224998 # 5 1795 641 5 0.000651 29.514145 3.195000 -54.875000 # 5 1796 641 5 0.006646 28.284389 2.485000 -54.875000 # 5 -1797 643 5 0.000000 30.743900 3.905000 -58.224998 # 5 -1798 643 5 0.000000 31.973658 3.195000 -58.224998 # 5 +1797 643 6 0.000000 30.743900 3.905000 -58.224998 # 5 +1798 643 6 0.000000 31.973658 3.195000 -58.224998 # 5 1799 641 5 -0.004203 31.973658 3.195000 -54.875000 # 5 1800 641 5 -0.006245 30.743900 2.485000 -54.875000 # 5 -1801 643 5 0.000000 1.229756 5.325000 -58.224998 # 5 +1801 643 6 0.000000 1.229756 5.325000 -58.224998 # 5 1802 641 5 0.008550 1.229756 5.325000 -54.875000 # 5 -1803 643 5 0.000000 2.459512 6.035000 -58.224998 # 5 -1804 643 5 0.000000 3.689268 5.325000 -58.224998 # 5 +1803 643 6 0.000000 2.459512 6.035000 -58.224998 # 5 +1804 643 6 0.000000 3.689268 5.325000 -58.224998 # 5 1805 641 5 0.004636 3.689268 5.325000 -54.875000 # 5 1806 641 5 0.006617 2.459512 4.615000 -54.875000 # 5 -1807 643 5 0.000000 4.919024 6.035000 -58.224998 # 5 -1808 643 5 0.000000 6.148780 5.325000 -58.224998 # 5 +1807 643 6 0.000000 4.919024 6.035000 -58.224998 # 5 +1808 643 6 0.000000 6.148780 5.325000 -58.224998 # 5 1809 641 5 -0.001615 6.148780 5.325000 -54.875000 # 5 1810 641 5 0.002141 4.919024 4.615000 -54.875000 # 5 -1811 643 5 0.000000 7.378536 6.035000 -58.224998 # 5 -1812 643 5 0.000000 8.608293 5.325000 -58.224998 # 5 +1811 643 6 0.000000 7.378536 6.035000 -58.224998 # 5 +1812 643 6 0.000000 8.608293 5.325000 -58.224998 # 5 1813 641 5 -0.005838 8.608293 5.325000 -54.875000 # 5 1814 641 5 -0.003742 7.378536 4.615000 -54.875000 # 5 -1815 643 5 0.000000 9.838048 6.035000 -58.224998 # 5 -1816 643 5 0.000000 11.067804 5.325000 -58.224998 # 5 +1815 643 6 0.000000 9.838048 6.035000 -58.224998 # 5 +1816 643 6 0.000000 11.067804 5.325000 -58.224998 # 5 1817 641 5 -0.007155 11.067804 5.325000 -54.875000 # 5 1818 641 5 -0.007801 9.838048 4.615000 -54.875000 # 5 -1819 643 5 0.000000 12.297561 6.035000 -58.224998 # 5 -1820 643 5 0.000000 13.527316 5.325000 -58.224998 # 5 +1819 643 6 0.000000 12.297561 6.035000 -58.224998 # 5 +1820 643 6 0.000000 13.527316 5.325000 -58.224998 # 5 1821 641 5 -0.002605 13.527316 5.325000 -54.875000 # 5 1822 641 5 -0.004730 12.297561 4.615000 -54.875000 # 5 -1823 643 5 0.000000 14.757072 6.035000 -58.224998 # 5 -1824 643 5 0.000000 15.986829 5.325000 -58.224998 # 5 +1823 643 6 0.000000 14.757072 6.035000 -58.224998 # 5 +1824 643 6 0.000000 15.986829 5.325000 -58.224998 # 5 1825 641 5 -0.000732 15.986829 5.325000 -54.875000 # 5 1826 641 5 -0.001883 14.757072 4.615000 -54.875000 # 5 -1827 643 5 0.000000 17.216585 6.035000 -58.224998 # 5 -1828 643 5 0.000000 18.446341 5.325000 -58.224998 # 5 +1827 643 6 0.000000 17.216585 6.035000 -58.224998 # 5 +1828 643 6 0.000000 18.446341 5.325000 -58.224998 # 5 1829 641 5 0.000743 18.446341 5.325000 -54.875000 # 5 1830 641 5 -0.004118 17.216585 4.615000 -54.875000 # 5 -1831 643 5 0.000000 19.676096 6.035000 -58.224998 # 5 -1832 643 5 0.000000 20.905853 5.325000 -58.224998 # 5 +1831 643 6 0.000000 19.676096 6.035000 -58.224998 # 5 +1832 643 6 0.000000 20.905853 5.325000 -58.224998 # 5 1833 641 5 0.001093 20.905853 5.325000 -54.875000 # 5 1834 641 5 -0.002237 19.676096 4.615000 -54.875000 # 5 -1835 643 5 0.000000 22.135609 6.035000 -58.224998 # 5 -1836 643 5 0.000000 23.365364 5.325000 -58.224998 # 5 +1835 643 6 0.000000 22.135609 6.035000 -58.224998 # 5 +1836 643 6 0.000000 23.365364 5.325000 -58.224998 # 5 1837 641 5 0.000579 23.365364 5.325000 -54.875000 # 5 1838 641 5 -0.000424 22.135609 4.615000 -54.875000 # 5 -1839 643 5 0.000000 24.595121 6.035000 -58.224998 # 5 -1840 643 5 0.000000 25.824877 5.325000 -58.224998 # 5 +1839 643 6 0.000000 24.595121 6.035000 -58.224998 # 5 +1840 643 6 0.000000 25.824877 5.325000 -58.224998 # 5 1841 641 5 0.002589 25.824877 5.325000 -54.875000 # 5 1842 641 5 0.004117 24.595121 4.615000 -54.875000 # 5 -1843 643 5 0.000000 27.054632 6.035000 -58.224998 # 5 -1844 643 5 0.000000 28.284389 5.325000 -58.224998 # 5 +1843 643 6 0.000000 27.054632 6.035000 -58.224998 # 5 +1844 643 6 0.000000 28.284389 5.325000 -58.224998 # 5 1845 641 5 -0.000439 28.284389 5.325000 -54.875000 # 5 1846 641 5 0.005714 27.054632 4.615000 -54.875000 # 5 -1847 643 5 0.000000 29.514145 6.035000 -58.224998 # 5 -1848 643 5 0.000000 30.743900 5.325000 -58.224998 # 5 +1847 643 6 0.000000 29.514145 6.035000 -58.224998 # 5 +1848 643 6 0.000000 30.743900 5.325000 -58.224998 # 5 1849 641 5 0.000936 30.743900 5.325000 -54.875000 # 5 1850 641 5 0.000273 29.514145 4.615000 -54.875000 # 5 -1851 643 5 0.000000 31.973658 6.035000 -58.224998 # 5 +1851 643 6 0.000000 31.973658 6.035000 -58.224998 # 5 1852 641 5 0.003837 31.973658 4.615000 -54.875000 # 5 -1853 643 5 0.000000 1.229756 8.165000 -58.224998 # 5 -1854 643 5 0.000000 2.459512 7.455000 -58.224998 # 5 +1853 643 6 0.000000 1.229756 8.165000 -58.224998 # 5 +1854 643 6 0.000000 2.459512 7.455000 -58.224998 # 5 1855 641 5 0.005056 2.459512 7.455000 -54.875000 # 5 1856 641 5 0.009685 1.229756 6.745000 -54.875000 # 5 -1857 643 5 0.000000 3.689268 8.165000 -58.224998 # 5 -1858 643 5 0.000000 4.919024 7.455000 -58.224998 # 5 +1857 643 6 0.000000 3.689268 8.165000 -58.224998 # 5 +1858 643 6 0.000000 4.919024 7.455000 -58.224998 # 5 1859 641 5 -0.001063 4.919024 7.455000 -54.875000 # 5 1860 641 5 0.002508 3.689268 6.745000 -54.875000 # 5 -1861 643 5 0.000000 6.148780 8.165000 -58.224998 # 5 -1862 643 5 0.000000 7.378536 7.455000 -58.224998 # 5 +1861 643 6 0.000000 6.148780 8.165000 -58.224998 # 5 +1862 643 6 0.000000 7.378536 7.455000 -58.224998 # 5 1863 641 5 -0.000730 7.378536 7.455000 -54.875000 # 5 1864 641 5 -0.001948 6.148780 6.745000 -54.875000 # 5 -1865 643 5 0.000000 8.608293 8.165000 -58.224998 # 5 -1866 643 5 0.000000 9.838048 7.455000 -58.224998 # 5 +1865 643 6 0.000000 8.608293 8.165000 -58.224998 # 5 +1866 643 6 0.000000 9.838048 7.455000 -58.224998 # 5 1867 641 5 -0.002210 9.838048 7.455000 -54.875000 # 5 1868 641 5 -0.002657 8.608293 6.745000 -54.875000 # 5 -1869 643 5 0.000000 11.067804 8.165000 -58.224998 # 5 -1870 643 5 0.000000 12.297561 7.455000 -58.224998 # 5 +1869 643 6 0.000000 11.067804 8.165000 -58.224998 # 5 +1870 643 6 0.000000 12.297561 7.455000 -58.224998 # 5 1871 641 5 -0.003415 12.297561 7.455000 -54.875000 # 5 1872 641 5 -0.005292 11.067804 6.745000 -54.875000 # 5 -1873 643 5 0.000000 13.527316 8.165000 -58.224998 # 5 -1874 643 5 0.000000 14.757072 7.455000 -58.224998 # 5 +1873 643 6 0.000000 13.527316 8.165000 -58.224998 # 5 +1874 643 6 0.000000 14.757072 7.455000 -58.224998 # 5 1875 641 5 0.000678 14.757072 7.455000 -54.875000 # 5 1876 641 5 -0.002777 13.527316 6.745000 -54.875000 # 5 -1877 643 5 0.000000 15.986829 8.165000 -58.224998 # 5 -1878 643 5 0.000000 17.216585 7.455000 -58.224998 # 5 +1877 643 6 0.000000 15.986829 8.165000 -58.224998 # 5 +1878 643 6 0.000000 17.216585 7.455000 -58.224998 # 5 1879 641 5 0.009440 17.216585 7.455000 -54.875000 # 5 1880 641 5 0.002971 15.986829 6.745000 -54.875000 # 5 -1881 643 5 0.000000 18.446341 8.165000 -58.224998 # 5 -1882 643 5 0.000000 19.676096 7.455000 -58.224998 # 5 +1881 643 6 0.000000 18.446341 8.165000 -58.224998 # 5 +1882 643 6 0.000000 19.676096 7.455000 -58.224998 # 5 1883 641 5 0.010732 19.676096 7.455000 -54.875000 # 5 1884 641 5 0.010304 18.446341 6.745000 -54.875000 # 5 -1885 643 5 0.000000 20.905853 8.165000 -58.224998 # 5 -1886 643 5 0.000000 22.135609 7.455000 -58.224998 # 5 +1885 643 6 0.000000 20.905853 8.165000 -58.224998 # 5 +1886 643 6 0.000000 22.135609 7.455000 -58.224998 # 5 1887 641 5 0.001280 22.135609 7.455000 -54.875000 # 5 1888 641 5 0.004551 20.905853 6.745000 -54.875000 # 5 -1889 643 5 0.000000 23.365364 8.165000 -58.224998 # 5 -1890 643 5 0.000000 24.595121 7.455000 -58.224998 # 5 +1889 643 6 0.000000 23.365364 8.165000 -58.224998 # 5 +1890 643 6 0.000000 24.595121 7.455000 -58.224998 # 5 1891 641 5 -0.002971 24.595121 7.455000 -54.875000 # 5 1892 641 5 -0.000717 23.365364 6.745000 -54.875000 # 5 -1893 643 5 0.000000 25.824877 8.165000 -58.224998 # 5 -1894 643 5 0.000000 27.054632 7.455000 -58.224998 # 5 +1893 643 6 0.000000 25.824877 8.165000 -58.224998 # 5 +1894 643 6 0.000000 27.054632 7.455000 -58.224998 # 5 1895 641 5 -0.009147 27.054632 7.455000 -54.875000 # 5 1896 641 5 -0.003601 25.824877 6.745000 -54.875000 # 5 -1897 643 5 0.000000 28.284389 8.165000 -58.224998 # 5 -1898 643 5 0.000000 29.514145 7.455000 -58.224998 # 5 +1897 643 6 0.000000 28.284389 8.165000 -58.224998 # 5 +1898 643 6 0.000000 29.514145 7.455000 -58.224998 # 5 1899 641 5 -0.008823 29.514145 7.455000 -54.875000 # 5 1900 641 5 -0.008714 28.284389 6.745000 -54.875000 # 5 -1901 643 5 0.000000 30.743900 8.165000 -58.224998 # 5 -1902 643 5 0.000000 31.973658 7.455000 -58.224998 # 5 +1901 643 6 0.000000 30.743900 8.165000 -58.224998 # 5 +1902 643 6 0.000000 31.973658 7.455000 -58.224998 # 5 1903 641 5 0.004843 31.973658 7.455000 -54.875000 # 5 1904 641 5 -0.000116 30.743900 6.745000 -54.875000 # 5 -1905 643 5 0.000000 1.229756 9.585000 -58.224998 # 5 +1905 643 6 0.000000 1.229756 9.585000 -58.224998 # 5 1906 641 5 -0.001203 1.229756 9.585000 -54.875000 # 5 -1907 643 5 0.000000 2.459512 10.295000 -58.224998 # 5 -1908 643 5 0.000000 3.689268 9.585000 -58.224998 # 5 +1907 643 6 0.000000 2.459512 10.295000 -58.224998 # 5 +1908 643 6 0.000000 3.689268 9.585000 -58.224998 # 5 1909 641 5 -0.004563 3.689268 9.585000 -54.875000 # 5 1910 641 5 -0.000358 2.459512 8.875000 -54.875000 # 5 -1911 643 5 0.000000 4.919024 10.295000 -58.224998 # 5 -1912 643 5 0.000000 6.148780 9.585000 -58.224998 # 5 +1911 643 6 0.000000 4.919024 10.295000 -58.224998 # 5 +1912 643 6 0.000000 6.148780 9.585000 -58.224998 # 5 1913 641 5 0.000004 6.148780 9.585000 -54.875000 # 5 1914 641 5 -0.002674 4.919024 8.875000 -54.875000 # 5 -1915 643 5 0.000000 7.378536 10.295000 -58.224998 # 5 -1916 643 5 0.000000 8.608293 9.585000 -58.224998 # 5 +1915 643 6 0.000000 7.378536 10.295000 -58.224998 # 5 +1916 643 6 0.000000 8.608293 9.585000 -58.224998 # 5 1917 641 5 0.004455 8.608293 9.585000 -54.875000 # 5 1918 641 5 0.002541 7.378536 8.875000 -54.875000 # 5 -1919 643 5 0.000000 9.838048 10.295000 -58.224998 # 5 -1920 643 5 0.000000 11.067804 9.585000 -58.224998 # 5 +1919 643 6 0.000000 9.838048 10.295000 -58.224998 # 5 +1920 643 6 0.000000 11.067804 9.585000 -58.224998 # 5 1921 641 5 0.000248 11.067804 9.585000 -54.875000 # 5 1922 641 5 0.001632 9.838048 8.875000 -54.875000 # 5 -1923 643 5 0.000000 12.297561 10.295000 -58.224998 # 5 -1924 643 5 0.000000 13.527316 9.585000 -58.224998 # 5 +1923 643 6 0.000000 12.297561 10.295000 -58.224998 # 5 +1924 643 6 0.000000 13.527316 9.585000 -58.224998 # 5 1925 641 5 -0.001488 13.527316 9.585000 -54.875000 # 5 1926 641 5 -0.001732 12.297561 8.875000 -54.875000 # 5 -1927 643 5 0.000000 14.757072 10.295000 -58.224998 # 5 -1928 643 5 0.000000 15.986829 9.585000 -58.224998 # 5 +1927 643 6 0.000000 14.757072 10.295000 -58.224998 # 5 +1928 643 6 0.000000 15.986829 9.585000 -58.224998 # 5 1929 641 5 0.002363 15.986829 9.585000 -54.875000 # 5 1930 641 5 0.000638 14.757072 8.875000 -54.875000 # 5 -1931 643 5 0.000000 17.216585 10.295000 -58.224998 # 5 -1932 643 5 0.000000 18.446341 9.585000 -58.224998 # 5 +1931 643 6 0.000000 17.216585 10.295000 -58.224998 # 5 +1932 643 6 0.000000 18.446341 9.585000 -58.224998 # 5 1933 641 5 0.006632 18.446341 9.585000 -54.875000 # 5 1934 641 5 0.008486 17.216585 8.875000 -54.875000 # 5 -1935 643 5 0.000000 19.676096 10.295000 -58.224998 # 5 -1936 643 5 0.000000 20.905853 9.585000 -58.224998 # 5 +1935 643 6 0.000000 19.676096 10.295000 -58.224998 # 5 +1936 643 6 0.000000 20.905853 9.585000 -58.224998 # 5 1937 641 5 -0.001081 20.905853 9.585000 -54.875000 # 5 1938 641 5 0.007670 19.676096 8.875000 -54.875000 # 5 -1939 643 5 0.000000 22.135609 10.295000 -58.224998 # 5 -1940 643 5 0.000000 23.365364 9.585000 -58.224998 # 5 +1939 643 6 0.000000 22.135609 10.295000 -58.224998 # 5 +1940 643 6 0.000000 23.365364 9.585000 -58.224998 # 5 1941 641 5 -0.000533 23.365364 9.585000 -54.875000 # 5 1942 641 5 -0.000633 22.135609 8.875000 -54.875000 # 5 -1943 643 5 0.000000 24.595121 10.295000 -58.224998 # 5 -1944 643 5 0.000000 25.824877 9.585000 -58.224998 # 5 +1943 643 6 0.000000 24.595121 10.295000 -58.224998 # 5 +1944 643 6 0.000000 25.824877 9.585000 -58.224998 # 5 1945 641 5 -0.001969 25.824877 9.585000 -54.875000 # 5 1946 641 5 -0.001500 24.595121 8.875000 -54.875000 # 5 -1947 643 5 0.000000 27.054632 10.295000 -58.224998 # 5 -1948 643 5 0.000000 28.284389 9.585000 -58.224998 # 5 +1947 643 6 0.000000 27.054632 10.295000 -58.224998 # 5 +1948 643 6 0.000000 28.284389 9.585000 -58.224998 # 5 1949 641 5 -0.010794 28.284389 9.585000 -54.875000 # 5 1950 641 5 -0.008912 27.054632 8.875000 -54.875000 # 5 -1951 643 5 0.000000 29.514145 10.295000 -58.224998 # 5 -1952 643 5 0.000000 30.743900 9.585000 -58.224998 # 5 +1951 643 6 0.000000 29.514145 10.295000 -58.224998 # 5 +1952 643 6 0.000000 30.743900 9.585000 -58.224998 # 5 1953 641 5 -0.006916 30.743900 9.585000 -54.875000 # 5 1954 641 5 -0.011078 29.514145 8.875000 -54.875000 # 5 -1955 643 5 0.000000 31.973658 10.295000 -58.224998 # 5 +1955 643 6 0.000000 31.973658 10.295000 -58.224998 # 5 1956 641 5 -0.000838 31.973658 8.875000 -54.875000 # 5 -1957 643 5 0.000000 1.229756 12.425000 -58.224998 # 5 -1958 643 5 0.000000 2.459512 11.715001 -58.224998 # 5 +1957 643 6 0.000000 1.229756 12.425000 -58.224998 # 5 +1958 643 6 0.000000 2.459512 11.715001 -58.224998 # 5 1959 641 5 -0.007341 2.459512 11.715001 -54.875000 # 5 1960 641 5 -0.006195 1.229756 11.005000 -54.875000 # 5 -1961 643 5 0.000000 3.689268 12.425000 -58.224998 # 5 -1962 643 5 0.000000 4.919024 11.715001 -58.224998 # 5 +1961 643 6 0.000000 3.689268 12.425000 -58.224998 # 5 +1962 643 6 0.000000 4.919024 11.715001 -58.224998 # 5 1963 641 5 -0.004578 4.919024 11.715001 -54.875000 # 5 1964 641 5 -0.006829 3.689268 11.005000 -54.875000 # 5 -1965 643 5 0.000000 6.148780 12.425000 -58.224998 # 5 -1966 643 5 0.000000 7.378536 11.715001 -58.224998 # 5 +1965 643 6 0.000000 6.148780 12.425000 -58.224998 # 5 +1966 643 6 0.000000 7.378536 11.715001 -58.224998 # 5 1967 641 5 0.003036 7.378536 11.715001 -54.875000 # 5 1968 641 5 0.000159 6.148780 11.005000 -54.875000 # 5 -1969 643 5 0.000000 8.608293 12.425000 -58.224998 # 5 -1970 643 5 0.000000 9.838048 11.715001 -58.224998 # 5 +1969 643 6 0.000000 8.608293 12.425000 -58.224998 # 5 +1970 643 6 0.000000 9.838048 11.715001 -58.224998 # 5 1971 641 5 0.000897 9.838048 11.715001 -54.875000 # 5 1972 641 5 0.004621 8.608293 11.005000 -54.875000 # 5 -1973 643 5 0.000000 11.067804 12.425000 -58.224998 # 5 -1974 643 5 0.000000 12.297561 11.715001 -58.224998 # 5 +1973 643 6 0.000000 11.067804 12.425000 -58.224998 # 5 +1974 643 6 0.000000 12.297561 11.715001 -58.224998 # 5 1975 641 5 -0.003884 12.297561 11.715001 -54.875000 # 5 1976 641 5 -0.000606 11.067804 11.005000 -54.875000 # 5 -1977 643 5 0.000000 13.527316 12.425000 -58.224998 # 5 -1978 643 5 0.000000 14.757072 11.715001 -58.224998 # 5 +1977 643 6 0.000000 13.527316 12.425000 -58.224998 # 5 +1978 643 6 0.000000 14.757072 11.715001 -58.224998 # 5 1979 641 5 -0.003377 14.757072 11.715001 -54.875000 # 5 1980 641 5 -0.002753 13.527316 11.005000 -54.875000 # 5 -1981 643 5 0.000000 15.986829 12.425000 -58.224998 # 5 -1982 643 5 0.000000 17.216585 11.715001 -58.224998 # 5 +1981 643 6 0.000000 15.986829 12.425000 -58.224998 # 5 +1982 643 6 0.000000 17.216585 11.715001 -58.224998 # 5 1983 641 5 -0.002284 17.216585 11.715001 -54.875000 # 5 1984 641 5 -0.000813 15.986829 11.005000 -54.875000 # 5 -1985 643 5 0.000000 18.446341 12.425000 -58.224998 # 5 -1986 643 5 0.000000 19.676096 11.715001 -58.224998 # 5 +1985 643 6 0.000000 18.446341 12.425000 -58.224998 # 5 +1986 643 6 0.000000 19.676096 11.715001 -58.224998 # 5 1987 641 5 -0.005689 19.676096 11.715001 -54.875000 # 5 1988 641 5 -0.001327 18.446341 11.005000 -54.875000 # 5 -1989 643 5 0.000000 20.905853 12.425000 -58.224998 # 5 -1990 643 5 0.000000 22.135609 11.715001 -58.224998 # 5 +1989 643 6 0.000000 20.905853 12.425000 -58.224998 # 5 +1990 643 6 0.000000 22.135609 11.715001 -58.224998 # 5 1991 641 5 -0.001225 22.135609 11.715001 -54.875000 # 5 1992 641 5 -0.006269 20.905853 11.005000 -54.875000 # 5 -1993 643 5 0.000000 23.365364 12.425000 -58.224998 # 5 -1994 643 5 0.000000 24.595121 11.715001 -58.224998 # 5 +1993 643 6 0.000000 23.365364 12.425000 -58.224998 # 5 +1994 643 6 0.000000 24.595121 11.715001 -58.224998 # 5 1995 641 5 0.012030 24.595121 11.715001 -54.875000 # 5 1996 641 5 0.003991 23.365364 11.005000 -54.875000 # 5 -1997 643 5 0.000000 25.824877 12.425000 -58.224998 # 5 -1998 643 5 0.000000 27.054632 11.715001 -58.224998 # 5 +1997 643 6 0.000000 25.824877 12.425000 -58.224998 # 5 +1998 643 6 0.000000 27.054632 11.715001 -58.224998 # 5 1999 641 5 0.002808 27.054632 11.715001 -54.875000 # 5 2000 641 5 0.005501 25.824877 11.005000 -54.875000 # 5 -2001 643 5 0.000000 28.284389 12.425000 -58.224998 # 5 -2002 643 5 0.000000 29.514145 11.715001 -58.224998 # 5 +2001 643 6 0.000000 28.284389 12.425000 -58.224998 # 5 +2002 643 6 0.000000 29.514145 11.715001 -58.224998 # 5 2003 641 5 -0.006380 29.514145 11.715001 -54.875000 # 5 2004 641 5 -0.005915 28.284389 11.005000 -54.875000 # 5 -2005 643 5 0.000000 30.743900 12.425000 -58.224998 # 5 -2006 643 5 0.000000 31.973658 11.715001 -58.224998 # 5 +2005 643 6 0.000000 30.743900 12.425000 -58.224998 # 5 +2006 643 6 0.000000 31.973658 11.715001 -58.224998 # 5 2007 641 5 -0.006475 31.973658 11.715001 -54.875000 # 5 2008 641 5 -0.007286 30.743900 11.005000 -54.875000 # 5 -2009 643 5 0.000000 1.229756 13.845000 -58.224998 # 5 +2009 643 6 0.000000 1.229756 13.845000 -58.224998 # 5 2010 641 5 -0.005636 1.229756 13.845000 -54.875000 # 5 -2011 643 5 0.000000 2.459512 14.555000 -58.224998 # 5 -2012 643 5 0.000000 3.689268 13.845000 -58.224998 # 5 +2011 643 6 0.000000 2.459512 14.555000 -58.224998 # 5 +2012 643 6 0.000000 3.689268 13.845000 -58.224998 # 5 2013 641 5 -0.003389 3.689268 13.845000 -54.875000 # 5 2014 641 5 -0.006559 2.459512 13.135000 -54.875000 # 5 -2015 643 5 0.000000 4.919024 14.555000 -58.224998 # 5 -2016 643 5 0.000000 6.148780 13.845000 -58.224998 # 5 +2015 643 6 0.000000 4.919024 14.555000 -58.224998 # 5 +2016 643 6 0.000000 6.148780 13.845000 -58.224998 # 5 2017 641 5 0.002367 6.148780 13.845000 -54.875000 # 5 2018 641 5 -0.002424 4.919024 13.135000 -54.875000 # 5 -2019 643 5 0.000000 7.378536 14.555000 -58.224998 # 5 -2020 643 5 0.000000 8.608293 13.845000 -58.224998 # 5 +2019 643 6 0.000000 7.378536 14.555000 -58.224998 # 5 +2020 643 6 0.000000 8.608293 13.845000 -58.224998 # 5 2021 641 5 0.000402 8.608293 13.845000 -54.875000 # 5 2022 641 5 0.002615 7.378536 13.135000 -54.875000 # 5 -2023 643 5 0.000000 9.838048 14.555000 -58.224998 # 5 -2024 643 5 0.000000 11.067804 13.845000 -58.224998 # 5 +2023 643 6 0.000000 9.838048 14.555000 -58.224998 # 5 +2024 643 6 0.000000 11.067804 13.845000 -58.224998 # 5 2025 641 5 -0.009056 11.067804 13.845000 -54.875000 # 5 2026 641 5 -0.003350 9.838048 13.135000 -54.875000 # 5 -2027 643 5 0.000000 12.297561 14.555000 -58.224998 # 5 -2028 643 5 0.000000 13.527316 13.845000 -58.224998 # 5 +2027 643 6 0.000000 12.297561 14.555000 -58.224998 # 5 +2028 643 6 0.000000 13.527316 13.845000 -58.224998 # 5 2029 641 5 -0.006284 13.527316 13.845000 -54.875000 # 5 2030 641 5 -0.007513 12.297561 13.135000 -54.875000 # 5 -2031 643 5 0.000000 14.757072 14.555000 -58.224998 # 5 -2032 643 5 0.000000 15.986829 13.845000 -58.224998 # 5 +2031 643 6 0.000000 14.757072 14.555000 -58.224998 # 5 +2032 643 6 0.000000 15.986829 13.845000 -58.224998 # 5 2033 641 5 -0.003130 15.986829 13.845000 -54.875000 # 5 2034 641 5 -0.004061 14.757072 13.135000 -54.875000 # 5 -2035 643 5 0.000000 17.216585 14.555000 -58.224998 # 5 -2036 643 5 0.000000 18.446341 13.845000 -58.224998 # 5 +2035 643 6 0.000000 17.216585 14.555000 -58.224998 # 5 +2036 643 6 0.000000 18.446341 13.845000 -58.224998 # 5 2037 641 5 -0.005508 18.446341 13.845000 -54.875000 # 5 2038 641 5 -0.004163 17.216585 13.135000 -54.875000 # 5 -2039 643 5 0.000000 19.676096 14.555000 -58.224998 # 5 -2040 643 5 0.000000 20.905853 13.845000 -58.224998 # 5 +2039 643 6 0.000000 19.676096 14.555000 -58.224998 # 5 +2040 643 6 0.000000 20.905853 13.845000 -58.224998 # 5 2041 641 5 -0.004896 20.905853 13.845000 -54.875000 # 5 2042 641 5 -0.006983 19.676096 13.135000 -54.875000 # 5 -2043 643 5 0.000000 22.135609 14.555000 -58.224998 # 5 -2044 643 5 0.000000 23.365364 13.845000 -58.224998 # 5 +2043 643 6 0.000000 22.135609 14.555000 -58.224998 # 5 +2044 643 6 0.000000 23.365364 13.845000 -58.224998 # 5 2045 641 5 0.008255 23.365364 13.845000 -54.875000 # 5 2046 641 5 0.001284 22.135609 13.135000 -54.875000 # 5 -2047 643 5 0.000000 24.595121 14.555000 -58.224998 # 5 -2048 643 5 0.000000 25.824877 13.845000 -58.224998 # 5 +2047 643 6 0.000000 24.595121 14.555000 -58.224998 # 5 +2048 643 6 0.000000 25.824877 13.845000 -58.224998 # 5 2049 641 5 0.009224 25.824877 13.845000 -54.875000 # 5 2050 641 5 0.014893 24.595121 13.135000 -54.875000 # 5 -2051 643 5 0.000000 27.054632 14.555000 -58.224998 # 5 -2052 643 5 0.000000 28.284389 13.845000 -58.224998 # 5 +2051 643 6 0.000000 27.054632 14.555000 -58.224998 # 5 +2052 643 6 0.000000 28.284389 13.845000 -58.224998 # 5 2053 641 5 -0.001344 28.284389 13.845000 -54.875000 # 5 2054 641 5 0.004420 27.054632 13.135000 -54.875000 # 5 -2055 643 5 0.000000 29.514145 14.555000 -58.224998 # 5 -2056 643 5 0.000000 30.743900 13.845000 -58.224998 # 5 +2055 643 6 0.000000 29.514145 14.555000 -58.224998 # 5 +2056 643 6 0.000000 30.743900 13.845000 -58.224998 # 5 2057 641 5 -0.003552 30.743900 13.845000 -54.875000 # 5 2058 641 5 -0.003214 29.514145 13.135000 -54.875000 # 5 -2059 643 5 0.000000 31.973658 14.555000 -58.224998 # 5 +2059 643 6 0.000000 31.973658 14.555000 -58.224998 # 5 2060 641 5 -0.006139 31.973658 13.135000 -54.875000 # 5 -2061 643 5 0.000000 1.229756 16.684999 -58.224998 # 5 -2062 643 5 0.000000 2.459512 15.975000 -58.224998 # 5 +2061 643 6 0.000000 1.229756 16.684999 -58.224998 # 5 +2062 643 6 0.000000 2.459512 15.975000 -58.224998 # 5 2063 641 5 0.001574 2.459512 15.975000 -54.875000 # 5 2064 641 5 -0.000780 1.229756 15.265000 -54.875000 # 5 -2065 643 5 0.000000 3.689268 16.684999 -58.224998 # 5 -2066 643 5 0.000000 4.919024 15.975000 -58.224998 # 5 +2065 643 6 0.000000 3.689268 16.684999 -58.224998 # 5 +2066 643 6 0.000000 4.919024 15.975000 -58.224998 # 5 2067 641 5 0.007831 4.919024 15.975000 -54.875000 # 5 2068 641 5 0.001119 3.689268 15.265000 -54.875000 # 5 -2069 643 5 0.000000 6.148780 16.684999 -58.224998 # 5 -2070 643 5 0.000000 7.378536 15.975000 -58.224998 # 5 +2069 643 6 0.000000 6.148780 16.684999 -58.224998 # 5 +2070 643 6 0.000000 7.378536 15.975000 -58.224998 # 5 2071 641 5 0.011161 7.378536 15.975000 -54.875000 # 5 2072 641 5 0.008319 6.148780 15.265000 -54.875000 # 5 -2073 643 5 0.000000 8.608293 16.684999 -58.224998 # 5 -2074 643 5 0.000000 9.838048 15.975000 -58.224998 # 5 +2073 643 6 0.000000 8.608293 16.684999 -58.224998 # 5 +2074 643 6 0.000000 9.838048 15.975000 -58.224998 # 5 2075 641 5 -0.003084 9.838048 15.975000 -54.875000 # 5 2076 641 5 0.002350 8.608293 15.265000 -54.875000 # 5 -2077 643 5 0.000000 11.067804 16.684999 -58.224998 # 5 -2078 643 5 0.000000 12.297561 15.975000 -58.224998 # 5 +2077 643 6 0.000000 11.067804 16.684999 -58.224998 # 5 +2078 643 6 0.000000 12.297561 15.975000 -58.224998 # 5 2079 641 5 -0.005651 12.297561 15.975000 -54.875000 # 5 2080 641 5 -0.009897 11.067804 15.265000 -54.875000 # 5 -2081 643 5 0.000000 13.527316 16.684999 -58.224998 # 5 -2082 643 5 0.000000 14.757072 15.975000 -58.224998 # 5 +2081 643 6 0.000000 13.527316 16.684999 -58.224998 # 5 +2082 643 6 0.000000 14.757072 15.975000 -58.224998 # 5 2083 641 5 0.003052 14.757072 15.975000 -54.875000 # 5 2084 641 5 -0.003381 13.527316 15.265000 -54.875000 # 5 -2085 643 5 0.000000 15.986829 16.684999 -58.224998 # 5 -2086 643 5 0.000000 17.216585 15.975000 -58.224998 # 5 +2085 643 6 0.000000 15.986829 16.684999 -58.224998 # 5 +2086 643 6 0.000000 17.216585 15.975000 -58.224998 # 5 2087 641 5 0.000425 17.216585 15.975000 -54.875000 # 5 2088 641 5 0.000337 15.986829 15.265000 -54.875000 # 5 -2089 643 5 0.000000 18.446341 16.684999 -58.224998 # 5 -2090 643 5 0.000000 19.676096 15.975000 -58.224998 # 5 +2089 643 6 0.000000 18.446341 16.684999 -58.224998 # 5 +2090 643 6 0.000000 19.676096 15.975000 -58.224998 # 5 2091 641 5 -0.005275 19.676096 15.975000 -54.875000 # 5 2092 641 5 -0.004269 18.446341 15.265000 -54.875000 # 5 -2093 643 5 0.000000 20.905853 16.684999 -58.224998 # 5 -2094 643 5 0.000000 22.135609 15.975000 -58.224998 # 5 +2093 643 6 0.000000 20.905853 16.684999 -58.224998 # 5 +2094 643 6 0.000000 22.135609 15.975000 -58.224998 # 5 2095 641 5 -0.002293 22.135609 15.975000 -54.875000 # 5 2096 641 5 -0.004618 20.905853 15.265000 -54.875000 # 5 -2097 643 5 0.000000 23.365364 16.684999 -58.224998 # 5 -2098 643 5 0.000000 24.595121 15.975000 -58.224998 # 5 +2097 643 6 0.000000 23.365364 16.684999 -58.224998 # 5 +2098 643 6 0.000000 24.595121 15.975000 -58.224998 # 5 2099 641 5 -0.000050 24.595121 15.975000 -54.875000 # 5 2100 641 5 0.002728 23.365364 15.265000 -54.875000 # 5 -2101 643 5 0.000000 25.824877 16.684999 -58.224998 # 5 -2102 643 5 0.000000 27.054632 15.975000 -58.224998 # 5 +2101 643 6 0.000000 25.824877 16.684999 -58.224998 # 5 +2102 643 6 0.000000 27.054632 15.975000 -58.224998 # 5 2103 641 5 -0.006245 27.054632 15.975000 -54.875000 # 5 2104 641 5 0.000248 25.824877 15.265000 -54.875000 # 5 -2105 643 5 0.000000 28.284389 16.684999 -58.224998 # 5 -2106 643 5 0.000000 29.514145 15.975000 -58.224998 # 5 +2105 643 6 0.000000 28.284389 16.684999 -58.224998 # 5 +2106 643 6 0.000000 29.514145 15.975000 -58.224998 # 5 2107 641 5 0.000383 29.514145 15.975000 -54.875000 # 5 2108 641 5 -0.003405 28.284389 15.265000 -54.875000 # 5 -2109 643 5 0.000000 30.743900 16.684999 -58.224998 # 5 -2110 643 5 0.000000 31.973658 15.975000 -58.224998 # 5 +2109 643 6 0.000000 30.743900 16.684999 -58.224998 # 5 +2110 643 6 0.000000 31.973658 15.975000 -58.224998 # 5 2111 641 5 0.002854 31.973658 15.975000 -54.875000 # 5 2112 641 5 0.000745 30.743900 15.265000 -54.875000 # 5 -2113 643 5 0.000000 1.229756 18.105000 -58.224998 # 5 +2113 643 6 0.000000 1.229756 18.105000 -58.224998 # 5 2114 641 5 0.006231 1.229756 18.105000 -54.875000 # 5 -2115 643 5 0.000000 2.459512 18.815001 -58.224998 # 5 -2116 643 5 0.000000 3.689268 18.105000 -58.224998 # 5 +2115 643 6 0.000000 2.459512 18.815001 -58.224998 # 5 +2116 643 6 0.000000 3.689268 18.105000 -58.224998 # 5 2117 641 5 0.005054 3.689268 18.105000 -54.875000 # 5 2118 641 5 0.003812 2.459512 17.395000 -54.875000 # 5 -2119 643 5 0.000000 4.919024 18.815001 -58.224998 # 5 -2120 643 5 0.000000 6.148780 18.105000 -58.224998 # 5 +2119 643 6 0.000000 4.919024 18.815001 -58.224998 # 5 +2120 643 6 0.000000 6.148780 18.105000 -58.224998 # 5 2121 641 5 0.013249 6.148780 18.105000 -54.875000 # 5 2122 641 5 0.010130 4.919024 17.395000 -54.875000 # 5 -2123 643 5 0.000000 7.378536 18.815001 -58.224998 # 5 -2124 643 5 0.000000 8.608293 18.105000 -58.224998 # 5 +2123 643 6 0.000000 7.378536 18.815001 -58.224998 # 5 +2124 643 6 0.000000 8.608293 18.105000 -58.224998 # 5 2125 641 5 0.006670 8.608293 18.105000 -54.875000 # 5 2126 641 5 0.014021 7.378536 17.395000 -54.875000 # 5 -2127 643 5 0.000000 9.838048 18.815001 -58.224998 # 5 -2128 643 5 0.000000 11.067804 18.105000 -58.224998 # 5 +2127 643 6 0.000000 9.838048 18.815001 -58.224998 # 5 +2128 643 6 0.000000 11.067804 18.105000 -58.224998 # 5 2129 641 5 -0.002118 11.067804 18.105000 -54.875000 # 5 2130 641 5 -0.000411 9.838048 17.395000 -54.875000 # 5 -2131 643 5 0.000000 12.297561 18.815001 -58.224998 # 5 -2132 643 5 0.000000 13.527316 18.105000 -58.224998 # 5 +2131 643 6 0.000000 12.297561 18.815001 -58.224998 # 5 +2132 643 6 0.000000 13.527316 18.105000 -58.224998 # 5 2133 641 5 0.007999 13.527316 18.105000 -54.875000 # 5 2134 641 5 -0.000407 12.297561 17.395000 -54.875000 # 5 -2135 643 5 0.000000 14.757072 18.815001 -58.224998 # 5 -2136 643 5 0.000000 15.986829 18.105000 -58.224998 # 5 +2135 643 6 0.000000 14.757072 18.815001 -58.224998 # 5 +2136 643 6 0.000000 15.986829 18.105000 -58.224998 # 5 2137 641 5 0.009877 15.986829 18.105000 -54.875000 # 5 2138 641 5 0.009779 14.757072 17.395000 -54.875000 # 5 -2139 643 5 0.000000 17.216585 18.815001 -58.224998 # 5 -2140 643 5 0.000000 18.446341 18.105000 -58.224998 # 5 +2139 643 6 0.000000 17.216585 18.815001 -58.224998 # 5 +2140 643 6 0.000000 18.446341 18.105000 -58.224998 # 5 2141 641 5 0.000396 18.446341 18.105000 -54.875000 # 5 2142 641 5 0.003629 17.216585 17.395000 -54.875000 # 5 -2143 643 5 0.000000 19.676096 18.815001 -58.224998 # 5 -2144 643 5 0.000000 20.905853 18.105000 -58.224998 # 5 +2143 643 6 0.000000 19.676096 18.815001 -58.224998 # 5 +2144 643 6 0.000000 20.905853 18.105000 -58.224998 # 5 2145 641 5 -0.002504 20.905853 18.105000 -54.875000 # 5 2146 641 5 -0.003126 19.676096 17.395000 -54.875000 # 5 -2147 643 5 0.000000 22.135609 18.815001 -58.224998 # 5 -2148 643 5 0.000000 23.365364 18.105000 -58.224998 # 5 +2147 643 6 0.000000 22.135609 18.815001 -58.224998 # 5 +2148 643 6 0.000000 23.365364 18.105000 -58.224998 # 5 2149 641 5 -0.002268 23.365364 18.105000 -54.875000 # 5 2150 641 5 -0.002543 22.135609 17.395000 -54.875000 # 5 -2151 643 5 0.000000 24.595121 18.815001 -58.224998 # 5 -2152 643 5 0.000000 25.824877 18.105000 -58.224998 # 5 +2151 643 6 0.000000 24.595121 18.815001 -58.224998 # 5 +2152 643 6 0.000000 25.824877 18.105000 -58.224998 # 5 2153 641 5 -0.007529 25.824877 18.105000 -54.875000 # 5 2154 641 5 -0.004597 24.595121 17.395000 -54.875000 # 5 -2155 643 5 0.000000 27.054632 18.815001 -58.224998 # 5 -2156 643 5 0.000000 28.284389 18.105000 -58.224998 # 5 +2155 643 6 0.000000 27.054632 18.815001 -58.224998 # 5 +2156 643 6 0.000000 28.284389 18.105000 -58.224998 # 5 2157 641 5 -0.002070 28.284389 18.105000 -54.875000 # 5 2158 641 5 -0.008049 27.054632 17.395000 -54.875000 # 5 -2159 643 5 0.000000 29.514145 18.815001 -58.224998 # 5 -2160 643 5 0.000000 30.743900 18.105000 -58.224998 # 5 +2159 643 6 0.000000 29.514145 18.815001 -58.224998 # 5 +2160 643 6 0.000000 30.743900 18.105000 -58.224998 # 5 2161 641 5 0.009740 30.743900 18.105000 -54.875000 # 5 2162 641 5 0.003938 29.514145 17.395000 -54.875000 # 5 -2163 643 5 0.000000 31.973658 18.815001 -58.224998 # 5 +2163 643 6 0.000000 31.973658 18.815001 -58.224998 # 5 2164 641 5 0.008697 31.973658 17.395000 -54.875000 # 5 -2165 643 5 0.000000 1.229756 20.945002 -58.224998 # 5 -2166 643 5 0.000000 2.459512 20.235001 -58.224998 # 5 +2165 643 6 0.000000 1.229756 20.945002 -58.224998 # 5 +2166 643 6 0.000000 2.459512 20.235001 -58.224998 # 5 2167 641 5 0.000833 2.459512 20.235001 -54.875000 # 5 2168 641 5 0.005078 1.229756 19.525000 -54.875000 # 5 -2169 643 5 0.000000 3.689268 20.945002 -58.224998 # 5 -2170 643 5 0.000000 4.919024 20.235001 -58.224998 # 5 +2169 643 6 0.000000 3.689268 20.945002 -58.224998 # 5 +2170 643 6 0.000000 4.919024 20.235001 -58.224998 # 5 2171 641 5 0.002076 4.919024 20.235001 -54.875000 # 5 2172 641 5 0.002543 3.689268 19.525000 -54.875000 # 5 -2173 643 5 0.000000 6.148780 20.945002 -58.224998 # 5 -2174 643 5 0.000000 7.378536 20.235001 -58.224998 # 5 +2173 643 6 0.000000 6.148780 20.945002 -58.224998 # 5 +2174 643 6 0.000000 7.378536 20.235001 -58.224998 # 5 2175 641 5 0.003162 7.378536 20.235001 -54.875000 # 5 2176 641 5 0.006698 6.148780 19.525000 -54.875000 # 5 -2177 643 5 0.000000 8.608293 20.945002 -58.224998 # 5 -2178 643 5 0.000000 9.838048 20.235001 -58.224998 # 5 +2177 643 6 0.000000 8.608293 20.945002 -58.224998 # 5 +2178 643 6 0.000000 9.838048 20.235001 -58.224998 # 5 2179 641 5 -0.002118 9.838048 20.235001 -54.875000 # 5 2180 641 5 0.002728 8.608293 19.525000 -54.875000 # 5 -2181 643 5 0.000000 11.067804 20.945002 -58.224998 # 5 -2182 643 5 0.000000 12.297561 20.235001 -58.224998 # 5 +2181 643 6 0.000000 11.067804 20.945002 -58.224998 # 5 +2182 643 6 0.000000 12.297561 20.235001 -58.224998 # 5 2183 641 5 0.000686 12.297561 20.235001 -54.875000 # 5 2184 641 5 -0.000752 11.067804 19.525000 -54.875000 # 5 -2185 643 5 0.000000 13.527316 20.945002 -58.224998 # 5 -2186 643 5 0.000000 14.757072 20.235001 -58.224998 # 5 +2185 643 6 0.000000 13.527316 20.945002 -58.224998 # 5 +2186 643 6 0.000000 14.757072 20.235001 -58.224998 # 5 2187 641 5 0.005540 14.757072 20.235001 -54.875000 # 5 2188 641 5 0.006939 13.527316 19.525000 -54.875000 # 5 -2189 643 5 0.000000 15.986829 20.945002 -58.224998 # 5 -2190 643 5 0.000000 17.216585 20.235001 -58.224998 # 5 +2189 643 6 0.000000 15.986829 20.945002 -58.224998 # 5 +2190 643 6 0.000000 17.216585 20.235001 -58.224998 # 5 2191 641 5 0.000313 17.216585 20.235001 -54.875000 # 5 2192 641 5 0.006963 15.986829 19.525000 -54.875000 # 5 -2193 643 5 0.000000 18.446341 20.945002 -58.224998 # 5 -2194 643 5 0.000000 19.676096 20.235001 -58.224998 # 5 +2193 643 6 0.000000 18.446341 20.945002 -58.224998 # 5 +2194 643 6 0.000000 19.676096 20.235001 -58.224998 # 5 2195 641 5 -0.001275 19.676096 20.235001 -54.875000 # 5 2196 641 5 0.000026 18.446341 19.525000 -54.875000 # 5 -2197 643 5 0.000000 20.905853 20.945002 -58.224998 # 5 -2198 643 5 0.000000 22.135609 20.235001 -58.224998 # 5 +2197 643 6 0.000000 20.905853 20.945002 -58.224998 # 5 +2198 643 6 0.000000 22.135609 20.235001 -58.224998 # 5 2199 641 5 0.002140 22.135609 20.235001 -54.875000 # 5 2200 641 5 -0.000590 20.905853 19.525000 -54.875000 # 5 -2201 643 5 0.000000 23.365364 20.945002 -58.224998 # 5 -2202 643 5 0.000000 24.595121 20.235001 -58.224998 # 5 +2201 643 6 0.000000 23.365364 20.945002 -58.224998 # 5 +2202 643 6 0.000000 24.595121 20.235001 -58.224998 # 5 2203 641 5 0.001859 24.595121 20.235001 -54.875000 # 5 2204 641 5 0.000575 23.365364 19.525000 -54.875000 # 5 -2205 643 5 0.000000 25.824877 20.945002 -58.224998 # 5 -2206 643 5 0.000000 27.054632 20.235001 -58.224998 # 5 +2205 643 6 0.000000 25.824877 20.945002 -58.224998 # 5 +2206 643 6 0.000000 27.054632 20.235001 -58.224998 # 5 2207 641 5 -0.002327 27.054632 20.235001 -54.875000 # 5 2208 641 5 -0.003830 25.824877 19.525000 -54.875000 # 5 -2209 643 5 0.000000 28.284389 20.945002 -58.224998 # 5 -2210 643 5 0.000000 29.514145 20.235001 -58.224998 # 5 +2209 643 6 0.000000 28.284389 20.945002 -58.224998 # 5 +2210 643 6 0.000000 29.514145 20.235001 -58.224998 # 5 2211 641 5 0.003241 29.514145 20.235001 -54.875000 # 5 2212 641 5 -0.000728 28.284389 19.525000 -54.875000 # 5 -2213 643 5 0.000000 30.743900 20.945002 -58.224998 # 5 -2214 643 5 0.000000 31.973658 20.235001 -58.224998 # 5 +2213 643 6 0.000000 30.743900 20.945002 -58.224998 # 5 +2214 643 6 0.000000 31.973658 20.235001 -58.224998 # 5 2215 641 5 0.006229 31.973658 20.235001 -54.875000 # 5 2216 641 5 0.008059 30.743900 19.525000 -54.875000 # 5 -2217 643 5 0.000000 1.229756 22.365000 -58.224998 # 5 +2217 643 6 0.000000 1.229756 22.365000 -58.224998 # 5 2218 641 5 0.000847 1.229756 22.365000 -54.875000 # 5 -2219 643 5 0.000000 2.459512 23.075001 -58.224998 # 5 -2220 643 5 0.000000 3.689268 22.365000 -58.224998 # 5 +2219 643 6 0.000000 2.459512 23.075001 -58.224998 # 5 +2220 643 6 0.000000 3.689268 22.365000 -58.224998 # 5 2221 641 5 -0.001325 3.689268 22.365000 -54.875000 # 5 2222 641 5 -0.000438 2.459512 21.655001 -54.875000 # 5 -2223 643 5 0.000000 4.919024 23.075001 -58.224998 # 5 -2224 643 5 0.000000 6.148780 22.365000 -58.224998 # 5 +2223 643 6 0.000000 4.919024 23.075001 -58.224998 # 5 +2224 643 6 0.000000 6.148780 22.365000 -58.224998 # 5 2225 641 5 0.000098 6.148780 22.365000 -54.875000 # 5 2226 641 5 -0.000806 4.919024 21.655001 -54.875000 # 5 -2227 643 5 0.000000 7.378536 23.075001 -58.224998 # 5 -2228 643 5 0.000000 8.608293 22.365000 -58.224998 # 5 +2227 643 6 0.000000 7.378536 23.075001 -58.224998 # 5 +2228 643 6 0.000000 8.608293 22.365000 -58.224998 # 5 2229 641 5 -0.000639 8.608293 22.365000 -54.875000 # 5 2230 641 5 -0.000020 7.378536 21.655001 -54.875000 # 5 -2231 643 5 0.000000 9.838048 23.075001 -58.224998 # 5 -2232 643 5 0.000000 11.067804 22.365000 -58.224998 # 5 +2231 643 6 0.000000 9.838048 23.075001 -58.224998 # 5 +2232 643 6 0.000000 11.067804 22.365000 -58.224998 # 5 2233 641 5 -0.002278 11.067804 22.365000 -54.875000 # 5 2234 641 5 -0.002485 9.838048 21.655001 -54.875000 # 5 -2235 643 5 0.000000 12.297561 23.075001 -58.224998 # 5 -2236 643 5 0.000000 13.527316 22.365000 -58.224998 # 5 +2235 643 6 0.000000 12.297561 23.075001 -58.224998 # 5 +2236 643 6 0.000000 13.527316 22.365000 -58.224998 # 5 2237 641 5 -0.002978 13.527316 22.365000 -54.875000 # 5 2238 641 5 -0.001476 12.297561 21.655001 -54.875000 # 5 -2239 643 5 0.000000 14.757072 23.075001 -58.224998 # 5 -2240 643 5 0.000000 15.986829 22.365000 -58.224998 # 5 +2239 643 6 0.000000 14.757072 23.075001 -58.224998 # 5 +2240 643 6 0.000000 15.986829 22.365000 -58.224998 # 5 2241 641 5 -0.008032 15.986829 22.365000 -54.875000 # 5 2242 641 5 -0.002538 14.757072 21.655001 -54.875000 # 5 -2243 643 5 0.000000 17.216585 23.075001 -58.224998 # 5 -2244 643 5 0.000000 18.446341 22.365000 -58.224998 # 5 +2243 643 6 0.000000 17.216585 23.075001 -58.224998 # 5 +2244 643 6 0.000000 18.446341 22.365000 -58.224998 # 5 2245 641 5 -0.006260 18.446341 22.365000 -54.875000 # 5 2246 641 5 -0.006008 17.216585 21.655001 -54.875000 # 5 -2247 643 5 0.000000 19.676096 23.075001 -58.224998 # 5 -2248 643 5 0.000000 20.905853 22.365000 -58.224998 # 5 +2247 643 6 0.000000 19.676096 23.075001 -58.224998 # 5 +2248 643 6 0.000000 20.905853 22.365000 -58.224998 # 5 2249 641 5 0.000811 20.905853 22.365000 -54.875000 # 5 2250 641 5 -0.002102 19.676096 21.655001 -54.875000 # 5 -2251 643 5 0.000000 22.135609 23.075001 -58.224998 # 5 -2252 643 5 0.000000 23.365364 22.365000 -58.224998 # 5 +2251 643 6 0.000000 22.135609 23.075001 -58.224998 # 5 +2252 643 6 0.000000 23.365364 22.365000 -58.224998 # 5 2253 641 5 0.010056 23.365364 22.365000 -54.875000 # 5 2254 641 5 0.004824 22.135609 21.655001 -54.875000 # 5 -2255 643 5 0.000000 24.595121 23.075001 -58.224998 # 5 -2256 643 5 0.000000 25.824877 22.365000 -58.224998 # 5 +2255 643 6 0.000000 24.595121 23.075001 -58.224998 # 5 +2256 643 6 0.000000 25.824877 22.365000 -58.224998 # 5 2257 641 5 0.006494 25.824877 22.365000 -54.875000 # 5 2258 641 5 0.008689 24.595121 21.655001 -54.875000 # 5 -2259 643 5 0.000000 27.054632 23.075001 -58.224998 # 5 -2260 643 5 0.000000 28.284389 22.365000 -58.224998 # 5 +2259 643 6 0.000000 27.054632 23.075001 -58.224998 # 5 +2260 643 6 0.000000 28.284389 22.365000 -58.224998 # 5 2261 641 5 -0.001213 28.284389 22.365000 -54.875000 # 5 2262 641 5 0.000874 27.054632 21.655001 -54.875000 # 5 -2263 643 5 0.000000 29.514145 23.075001 -58.224998 # 5 -2264 643 5 0.000000 30.743900 22.365000 -58.224998 # 5 +2263 643 6 0.000000 29.514145 23.075001 -58.224998 # 5 +2264 643 6 0.000000 30.743900 22.365000 -58.224998 # 5 2265 641 5 0.000251 30.743900 22.365000 -54.875000 # 5 2266 641 5 -0.000260 29.514145 21.655001 -54.875000 # 5 -2267 643 5 0.000000 31.973658 23.075001 -58.224998 # 5 +2267 643 6 0.000000 31.973658 23.075001 -58.224998 # 5 2268 641 5 0.002191 31.973658 21.655001 -54.875000 # 5 -2269 643 5 0.000000 1.229756 25.205000 -58.224998 # 5 -2270 643 5 0.000000 2.459512 24.495001 -58.224998 # 5 +2269 643 6 0.000000 1.229756 25.205000 -58.224998 # 5 +2270 643 6 0.000000 2.459512 24.495001 -58.224998 # 5 2271 641 5 0.002056 2.459512 24.495001 -54.875000 # 5 2272 641 5 0.002481 1.229756 23.785000 -54.875000 # 5 -2273 643 5 0.000000 3.689268 25.205000 -58.224998 # 5 -2274 643 5 0.000000 4.919024 24.495001 -58.224998 # 5 +2273 643 6 0.000000 3.689268 25.205000 -58.224998 # 5 +2274 643 6 0.000000 4.919024 24.495001 -58.224998 # 5 2275 641 5 0.000969 4.919024 24.495001 -54.875000 # 5 2276 641 5 -0.000433 3.689268 23.785000 -54.875000 # 5 -2277 643 5 0.000000 6.148780 25.205000 -58.224998 # 5 -2278 643 5 0.000000 7.378536 24.495001 -58.224998 # 5 +2277 643 6 0.000000 6.148780 25.205000 -58.224998 # 5 +2278 643 6 0.000000 7.378536 24.495001 -58.224998 # 5 2279 641 5 0.006329 7.378536 24.495001 -54.875000 # 5 2280 641 5 0.001582 6.148780 23.785000 -54.875000 # 5 -2281 643 5 0.000000 8.608293 25.205000 -58.224998 # 5 -2282 643 5 0.000000 9.838048 24.495001 -58.224998 # 5 +2281 643 6 0.000000 8.608293 25.205000 -58.224998 # 5 +2282 643 6 0.000000 9.838048 24.495001 -58.224998 # 5 2283 641 5 0.004981 9.838048 24.495001 -54.875000 # 5 2284 641 5 0.004188 8.608293 23.785000 -54.875000 # 5 -2285 643 5 0.000000 11.067804 25.205000 -58.224998 # 5 -2286 643 5 0.000000 12.297561 24.495001 -58.224998 # 5 +2285 643 6 0.000000 11.067804 25.205000 -58.224998 # 5 +2286 643 6 0.000000 12.297561 24.495001 -58.224998 # 5 2287 641 5 -0.001260 12.297561 24.495001 -54.875000 # 5 2288 641 5 -0.000028 11.067804 23.785000 -54.875000 # 5 -2289 643 5 0.000000 13.527316 25.205000 -58.224998 # 5 -2290 643 5 0.000000 14.757072 24.495001 -58.224998 # 5 +2289 643 6 0.000000 13.527316 25.205000 -58.224998 # 5 +2290 643 6 0.000000 14.757072 24.495001 -58.224998 # 5 2291 641 5 -0.005709 14.757072 24.495001 -54.875000 # 5 2292 641 5 -0.004497 13.527316 23.785000 -54.875000 # 5 -2293 643 5 0.000000 15.986829 25.205000 -58.224998 # 5 -2294 643 5 0.000000 17.216585 24.495001 -58.224998 # 5 +2293 643 6 0.000000 15.986829 25.205000 -58.224998 # 5 +2294 643 6 0.000000 17.216585 24.495001 -58.224998 # 5 2295 641 5 -0.006480 17.216585 24.495001 -54.875000 # 5 2296 641 5 -0.009101 15.986829 23.785000 -54.875000 # 5 -2297 643 5 0.000000 18.446341 25.205000 -58.224998 # 5 -2298 643 5 0.000000 19.676096 24.495001 -58.224998 # 5 +2297 643 6 0.000000 18.446341 25.205000 -58.224998 # 5 +2298 643 6 0.000000 19.676096 24.495001 -58.224998 # 5 2299 641 5 -0.004734 19.676096 24.495001 -54.875000 # 5 2300 641 5 -0.005912 18.446341 23.785000 -54.875000 # 5 -2301 643 5 0.000000 20.905853 25.205000 -58.224998 # 5 -2302 643 5 0.000000 22.135609 24.495001 -58.224998 # 5 +2301 643 6 0.000000 20.905853 25.205000 -58.224998 # 5 +2302 643 6 0.000000 22.135609 24.495001 -58.224998 # 5 2303 641 5 -0.001646 22.135609 24.495001 -54.875000 # 5 2304 641 5 -0.002450 20.905853 23.785000 -54.875000 # 5 -2305 643 5 0.000000 23.365364 25.205000 -58.224998 # 5 -2306 643 5 0.000000 24.595121 24.495001 -58.224998 # 5 +2305 643 6 0.000000 23.365364 25.205000 -58.224998 # 5 +2306 643 6 0.000000 24.595121 24.495001 -58.224998 # 5 2307 641 5 0.005414 24.595121 24.495001 -54.875000 # 5 2308 641 5 0.007322 23.365364 23.785000 -54.875000 # 5 -2309 643 5 0.000000 25.824877 25.205000 -58.224998 # 5 -2310 643 5 0.000000 27.054632 24.495001 -58.224998 # 5 +2309 643 6 0.000000 25.824877 25.205000 -58.224998 # 5 +2310 643 6 0.000000 27.054632 24.495001 -58.224998 # 5 2311 641 5 -0.000631 27.054632 24.495001 -54.875000 # 5 2312 641 5 0.005698 25.824877 23.785000 -54.875000 # 5 -2313 643 5 0.000000 28.284389 25.205000 -58.224998 # 5 -2314 643 5 0.000000 29.514145 24.495001 -58.224998 # 5 +2313 643 6 0.000000 28.284389 25.205000 -58.224998 # 5 +2314 643 6 0.000000 29.514145 24.495001 -58.224998 # 5 2315 641 5 -0.002033 29.514145 24.495001 -54.875000 # 5 2316 641 5 -0.002141 28.284389 23.785000 -54.875000 # 5 -2317 643 5 0.000000 30.743900 25.205000 -58.224998 # 5 -2318 643 5 0.000000 31.973658 24.495001 -58.224998 # 5 +2317 643 6 0.000000 30.743900 25.205000 -58.224998 # 5 +2318 643 6 0.000000 31.973658 24.495001 -58.224998 # 5 2319 641 5 0.003109 31.973658 24.495001 -54.875000 # 5 2320 641 5 -0.000306 30.743900 23.785000 -54.875000 # 5 -2321 643 5 0.000000 1.229756 26.625000 -58.224998 # 5 +2321 643 6 0.000000 1.229756 26.625000 -58.224998 # 5 2322 641 5 0.007488 1.229756 26.625000 -54.875000 # 5 -2323 643 5 0.000000 2.459512 27.335001 -58.224998 # 5 -2324 643 5 0.000000 3.689268 26.625000 -58.224998 # 5 +2323 643 6 0.000000 2.459512 27.335001 -58.224998 # 5 +2324 643 6 0.000000 3.689268 26.625000 -58.224998 # 5 2325 641 5 -0.001935 3.689268 26.625000 -54.875000 # 5 2326 641 5 0.003202 2.459512 25.915003 -54.875000 # 5 -2327 643 5 0.000000 4.919024 27.335001 -58.224998 # 5 -2328 643 5 0.000000 6.148780 26.625000 -58.224998 # 5 +2327 643 6 0.000000 4.919024 27.335001 -58.224998 # 5 +2328 643 6 0.000000 6.148780 26.625000 -58.224998 # 5 2329 641 5 0.003198 6.148780 26.625000 -54.875000 # 5 2330 641 5 -0.000216 4.919024 25.915003 -54.875000 # 5 -2331 643 5 0.000000 7.378536 27.335001 -58.224998 # 5 -2332 643 5 0.000000 8.608293 26.625000 -58.224998 # 5 +2331 643 6 0.000000 7.378536 27.335001 -58.224998 # 5 +2332 643 6 0.000000 8.608293 26.625000 -58.224998 # 5 2333 641 5 0.011576 8.608293 26.625000 -54.875000 # 5 2334 641 5 0.009867 7.378536 25.915003 -54.875000 # 5 -2335 643 5 0.000000 9.838048 27.335001 -58.224998 # 5 -2336 643 5 0.000000 11.067804 26.625000 -58.224998 # 5 +2335 643 6 0.000000 9.838048 27.335001 -58.224998 # 5 +2336 643 6 0.000000 11.067804 26.625000 -58.224998 # 5 2337 641 5 0.003285 11.067804 26.625000 -54.875000 # 5 2338 641 5 0.008584 9.838048 25.915003 -54.875000 # 5 -2339 643 5 0.000000 12.297561 27.335001 -58.224998 # 5 -2340 643 5 0.000000 13.527316 26.625000 -58.224998 # 5 +2339 643 6 0.000000 12.297561 27.335001 -58.224998 # 5 +2340 643 6 0.000000 13.527316 26.625000 -58.224998 # 5 2341 641 5 -0.003316 13.527316 26.625000 -54.875000 # 5 2342 641 5 -0.000890 12.297561 25.915003 -54.875000 # 5 -2343 643 5 0.000000 14.757072 27.335001 -58.224998 # 5 -2344 643 5 0.000000 15.986829 26.625000 -58.224998 # 5 +2343 643 6 0.000000 14.757072 27.335001 -58.224998 # 5 +2344 643 6 0.000000 15.986829 26.625000 -58.224998 # 5 2345 641 5 -0.001762 15.986829 26.625000 -54.875000 # 5 2346 641 5 -0.003871 14.757072 25.915003 -54.875000 # 5 -2347 643 5 0.000000 17.216585 27.335001 -58.224998 # 5 -2348 643 5 0.000000 18.446341 26.625000 -58.224998 # 5 +2347 643 6 0.000000 17.216585 27.335001 -58.224998 # 5 +2348 643 6 0.000000 18.446341 26.625000 -58.224998 # 5 2349 641 5 0.000557 18.446341 26.625000 -54.875000 # 5 2350 641 5 -0.001206 17.216585 25.915003 -54.875000 # 5 -2351 643 5 0.000000 19.676096 27.335001 -58.224998 # 5 -2352 643 5 0.000000 20.905853 26.625000 -58.224998 # 5 +2351 643 6 0.000000 19.676096 27.335001 -58.224998 # 5 +2352 643 6 0.000000 20.905853 26.625000 -58.224998 # 5 2353 641 5 -0.007701 20.905853 26.625000 -54.875000 # 5 2354 641 5 -0.003700 19.676096 25.915003 -54.875000 # 5 -2355 643 5 0.000000 22.135609 27.335001 -58.224998 # 5 -2356 643 5 0.000000 23.365364 26.625000 -58.224998 # 5 +2355 643 6 0.000000 22.135609 27.335001 -58.224998 # 5 +2356 643 6 0.000000 23.365364 26.625000 -58.224998 # 5 2357 641 5 -0.007612 23.365364 26.625000 -54.875000 # 5 2358 641 5 -0.008315 22.135609 25.915003 -54.875000 # 5 -2359 643 5 0.000000 24.595121 27.335001 -58.224998 # 5 -2360 643 5 0.000000 25.824877 26.625000 -58.224998 # 5 +2359 643 6 0.000000 24.595121 27.335001 -58.224998 # 5 +2360 643 6 0.000000 25.824877 26.625000 -58.224998 # 5 2361 641 5 -0.003587 25.824877 26.625000 -54.875000 # 5 2362 641 5 -0.002191 24.595121 25.915003 -54.875000 # 5 -2363 643 5 0.000000 27.054632 27.335001 -58.224998 # 5 -2364 643 5 0.000000 28.284389 26.625000 -58.224998 # 5 +2363 643 6 0.000000 27.054632 27.335001 -58.224998 # 5 +2364 643 6 0.000000 28.284389 26.625000 -58.224998 # 5 2365 641 5 -0.003499 28.284389 26.625000 -54.875000 # 5 2366 641 5 -0.003007 27.054632 25.915003 -54.875000 # 5 -2367 643 5 0.000000 29.514145 27.335001 -58.224998 # 5 -2368 643 5 0.000000 30.743900 26.625000 -58.224998 # 5 +2367 643 6 0.000000 29.514145 27.335001 -58.224998 # 5 +2368 643 6 0.000000 30.743900 26.625000 -58.224998 # 5 2369 641 5 0.003394 30.743900 26.625000 -54.875000 # 5 2370 641 5 -0.001233 29.514145 25.915003 -54.875000 # 5 -2371 643 5 0.000000 31.973658 27.335001 -58.224998 # 5 +2371 643 6 0.000000 31.973658 27.335001 -58.224998 # 5 2372 641 5 0.006692 31.973658 25.915003 -54.875000 # 5 -2373 643 5 0.000000 1.229756 29.465000 -58.224998 # 5 -2374 643 5 0.000000 2.459512 28.754999 -58.224998 # 5 +2373 643 6 0.000000 1.229756 29.465000 -58.224998 # 5 +2374 643 6 0.000000 2.459512 28.754999 -58.224998 # 5 2375 641 5 -0.001831 2.459512 28.754999 -54.875000 # 5 2376 641 5 0.005599 1.229756 28.045000 -54.875000 # 5 -2377 643 5 0.000000 3.689268 29.465000 -58.224998 # 5 -2378 643 5 0.000000 4.919024 28.754999 -58.224998 # 5 +2377 643 6 0.000000 3.689268 29.465000 -58.224998 # 5 +2378 643 6 0.000000 4.919024 28.754999 -58.224998 # 5 2379 641 5 -0.008531 4.919024 28.754999 -54.875000 # 5 2380 641 5 -0.006260 3.689268 28.045000 -54.875000 # 5 -2381 643 5 0.000000 6.148780 29.465000 -58.224998 # 5 -2382 643 5 0.000000 7.378536 28.754999 -58.224998 # 5 +2381 643 6 0.000000 6.148780 29.465000 -58.224998 # 5 +2382 643 6 0.000000 7.378536 28.754999 -58.224998 # 5 2383 641 5 0.001326 7.378536 28.754999 -54.875000 # 5 2384 641 5 -0.001277 6.148780 28.045000 -54.875000 # 5 -2385 643 5 0.000000 8.608293 29.465000 -58.224998 # 5 -2386 643 5 0.000000 9.838048 28.754999 -58.224998 # 5 +2385 643 6 0.000000 8.608293 29.465000 -58.224998 # 5 +2386 643 6 0.000000 9.838048 28.754999 -58.224998 # 5 2387 641 5 0.003092 9.838048 28.754999 -54.875000 # 5 2388 641 5 0.006884 8.608293 28.045000 -54.875000 # 5 -2389 643 5 0.000000 11.067804 29.465000 -58.224998 # 5 -2390 643 5 0.000000 12.297561 28.754999 -58.224998 # 5 +2389 643 6 0.000000 11.067804 29.465000 -58.224998 # 5 +2390 643 6 0.000000 12.297561 28.754999 -58.224998 # 5 2391 641 5 -0.002576 12.297561 28.754999 -54.875000 # 5 2392 641 5 0.001806 11.067804 28.045000 -54.875000 # 5 -2393 643 5 0.000000 13.527316 29.465000 -58.224998 # 5 -2394 643 5 0.000000 14.757072 28.754999 -58.224998 # 5 +2393 643 6 0.000000 13.527316 29.465000 -58.224998 # 5 +2394 643 6 0.000000 14.757072 28.754999 -58.224998 # 5 2395 641 5 -0.004872 14.757072 28.754999 -54.875000 # 5 2396 641 5 -0.004103 13.527316 28.045000 -54.875000 # 5 -2397 643 5 0.000000 15.986829 29.465000 -58.224998 # 5 -2398 643 5 0.000000 17.216585 28.754999 -58.224998 # 5 +2397 643 6 0.000000 15.986829 29.465000 -58.224998 # 5 +2398 643 6 0.000000 17.216585 28.754999 -58.224998 # 5 2399 641 5 -0.000422 17.216585 28.754999 -54.875000 # 5 2400 641 5 -0.002198 15.986829 28.045000 -54.875000 # 5 -2401 643 5 0.000000 18.446341 29.465000 -58.224998 # 5 -2402 643 5 0.000000 19.676096 28.754999 -58.224998 # 5 +2401 643 6 0.000000 18.446341 29.465000 -58.224998 # 5 +2402 643 6 0.000000 19.676096 28.754999 -58.224998 # 5 2403 641 5 0.001379 19.676096 28.754999 -54.875000 # 5 2404 641 5 0.001819 18.446341 28.045000 -54.875000 # 5 -2405 643 5 0.000000 20.905853 29.465000 -58.224998 # 5 -2406 643 5 0.000000 22.135609 28.754999 -58.224998 # 5 +2405 643 6 0.000000 20.905853 29.465000 -58.224998 # 5 +2406 643 6 0.000000 22.135609 28.754999 -58.224998 # 5 2407 641 5 -0.005427 22.135609 28.754999 -54.875000 # 5 2408 641 5 -0.004095 20.905853 28.045000 -54.875000 # 5 -2409 643 5 0.000000 23.365364 29.465000 -58.224998 # 5 -2410 643 5 0.000000 24.595121 28.754999 -58.224998 # 5 +2409 643 6 0.000000 23.365364 29.465000 -58.224998 # 5 +2410 643 6 0.000000 24.595121 28.754999 -58.224998 # 5 2411 641 5 -0.004898 24.595121 28.754999 -54.875000 # 5 2412 641 5 -0.008527 23.365364 28.045000 -54.875000 # 5 -2413 643 5 0.000000 25.824877 29.465000 -58.224998 # 5 -2414 643 5 0.000000 27.054632 28.754999 -58.224998 # 5 +2413 643 6 0.000000 25.824877 29.465000 -58.224998 # 5 +2414 643 6 0.000000 27.054632 28.754999 -58.224998 # 5 2415 641 5 -0.003380 27.054632 28.754999 -54.875000 # 5 2416 641 5 -0.004711 25.824877 28.045000 -54.875000 # 5 -2417 643 5 0.000000 28.284389 29.465000 -58.224998 # 5 -2418 643 5 0.000000 29.514145 28.754999 -58.224998 # 5 +2417 643 6 0.000000 28.284389 29.465000 -58.224998 # 5 +2418 643 6 0.000000 29.514145 28.754999 -58.224998 # 5 2419 641 5 -0.000594 29.514145 28.754999 -54.875000 # 5 2420 641 5 -0.002774 28.284389 28.045000 -54.875000 # 5 -2421 643 5 0.000000 30.743900 29.465000 -58.224998 # 5 -2422 643 5 0.000000 31.973658 28.754999 -58.224998 # 5 +2421 643 6 0.000000 30.743900 29.465000 -58.224998 # 5 +2422 643 6 0.000000 31.973658 28.754999 -58.224998 # 5 2423 641 5 0.004889 31.973658 28.754999 -54.875000 # 5 2424 641 5 0.003245 30.743900 28.045000 -54.875000 # 5 -2425 643 5 0.000000 1.229756 30.885000 -58.224998 # 5 +2425 643 6 0.000000 1.229756 30.885000 -58.224998 # 5 2426 641 5 -0.002838 1.229756 30.885000 -54.875000 # 5 -2427 643 5 0.000000 2.459512 31.594999 -58.224998 # 5 -2428 643 5 0.000000 3.689268 30.885000 -58.224998 # 5 +2427 643 6 0.000000 2.459512 31.594999 -58.224998 # 5 +2428 643 6 0.000000 3.689268 30.885000 -58.224998 # 5 2429 641 5 -0.006812 3.689268 30.885000 -54.875000 # 5 2430 641 5 -0.004015 2.459512 30.174999 -54.875000 # 5 -2431 643 5 0.000000 4.919024 31.594999 -58.224998 # 5 -2432 643 5 0.000000 6.148780 30.885000 -58.224998 # 5 +2431 643 6 0.000000 4.919024 31.594999 -58.224998 # 5 +2432 643 6 0.000000 6.148780 30.885000 -58.224998 # 5 2433 641 5 -0.006069 6.148780 30.885000 -54.875000 # 5 2434 641 5 -0.008296 4.919024 30.174999 -54.875000 # 5 -2435 643 5 0.000000 7.378536 31.594999 -58.224998 # 5 -2436 643 5 0.000000 8.608293 30.885000 -58.224998 # 5 +2435 643 6 0.000000 7.378536 31.594999 -58.224998 # 5 +2436 643 6 0.000000 8.608293 30.885000 -58.224998 # 5 2437 641 5 -0.002255 8.608293 30.885000 -54.875000 # 5 2438 641 5 -0.003430 7.378536 30.174999 -54.875000 # 5 -2439 643 5 0.000000 9.838048 31.594999 -58.224998 # 5 -2440 643 5 0.000000 11.067804 30.885000 -58.224998 # 5 +2439 643 6 0.000000 9.838048 31.594999 -58.224998 # 5 +2440 643 6 0.000000 11.067804 30.885000 -58.224998 # 5 2441 641 5 -0.000229 11.067804 30.885000 -54.875000 # 5 2442 641 5 -0.000462 9.838048 30.174999 -54.875000 # 5 -2443 643 5 0.000000 12.297561 31.594999 -58.224998 # 5 -2444 643 5 0.000000 13.527316 30.885000 -58.224998 # 5 +2443 643 6 0.000000 12.297561 31.594999 -58.224998 # 5 +2444 643 6 0.000000 13.527316 30.885000 -58.224998 # 5 2445 641 5 -0.001512 13.527316 30.885000 -54.875000 # 5 2446 641 5 -0.001278 12.297561 30.174999 -54.875000 # 5 -2447 643 5 0.000000 14.757072 31.594999 -58.224998 # 5 -2448 643 5 0.000000 15.986829 30.885000 -58.224998 # 5 +2447 643 6 0.000000 14.757072 31.594999 -58.224998 # 5 +2448 643 6 0.000000 15.986829 30.885000 -58.224998 # 5 2449 641 5 -0.004102 15.986829 30.885000 -54.875000 # 5 2450 641 5 -0.004635 14.757072 30.174999 -54.875000 # 5 -2451 643 5 0.000000 17.216585 31.594999 -58.224998 # 5 -2452 643 5 0.000000 18.446341 30.885000 -58.224998 # 5 +2451 643 6 0.000000 17.216585 31.594999 -58.224998 # 5 +2452 643 6 0.000000 18.446341 30.885000 -58.224998 # 5 2453 641 5 0.004251 18.446341 30.885000 -54.875000 # 5 2454 641 5 -0.002159 17.216585 30.174999 -54.875000 # 5 -2455 643 5 0.000000 19.676096 31.594999 -58.224998 # 5 -2456 643 5 0.000000 20.905853 30.885000 -58.224998 # 5 +2455 643 6 0.000000 19.676096 31.594999 -58.224998 # 5 +2456 643 6 0.000000 20.905853 30.885000 -58.224998 # 5 2457 641 5 0.008685 20.905853 30.885000 -54.875000 # 5 2458 641 5 0.005523 19.676096 30.174999 -54.875000 # 5 -2459 643 5 0.000000 22.135609 31.594999 -58.224998 # 5 -2460 643 5 0.000000 23.365364 30.885000 -58.224998 # 5 +2459 643 6 0.000000 22.135609 31.594999 -58.224998 # 5 +2460 643 6 0.000000 23.365364 30.885000 -58.224998 # 5 2461 641 5 0.002572 23.365364 30.885000 -54.875000 # 5 2462 641 5 0.002376 22.135609 30.174999 -54.875000 # 5 -2463 643 5 0.000000 24.595121 31.594999 -58.224998 # 5 -2464 643 5 0.000000 25.824877 30.885000 -58.224998 # 5 +2463 643 6 0.000000 24.595121 31.594999 -58.224998 # 5 +2464 643 6 0.000000 25.824877 30.885000 -58.224998 # 5 2465 641 5 -0.000839 25.824877 30.885000 -54.875000 # 5 2466 641 5 -0.001646 24.595121 30.174999 -54.875000 # 5 -2467 643 5 0.000000 27.054632 31.594999 -58.224998 # 5 -2468 643 5 0.000000 28.284389 30.885000 -58.224998 # 5 +2467 643 6 0.000000 27.054632 31.594999 -58.224998 # 5 +2468 643 6 0.000000 28.284389 30.885000 -58.224998 # 5 2469 641 5 -0.002002 28.284389 30.885000 -54.875000 # 5 2470 641 5 -0.002164 27.054632 30.174999 -54.875000 # 5 -2471 643 5 0.000000 29.514145 31.594999 -58.224998 # 5 -2472 643 5 0.000000 30.743900 30.885000 -58.224998 # 5 +2471 643 6 0.000000 29.514145 31.594999 -58.224998 # 5 +2472 643 6 0.000000 30.743900 30.885000 -58.224998 # 5 2473 641 5 -0.002250 30.743900 30.885000 -54.875000 # 5 2474 641 5 -0.001397 29.514145 30.174999 -54.875000 # 5 -2475 643 5 0.000000 31.973658 31.594999 -58.224998 # 5 +2475 643 6 0.000000 31.973658 31.594999 -58.224998 # 5 2476 641 5 -0.000786 31.973658 30.174999 -54.875000 # 5 -2477 643 5 0.000000 1.229756 33.724998 -58.224998 # 5 -2478 643 5 0.000000 2.459512 33.014999 -58.224998 # 5 +2477 643 6 0.000000 1.229756 33.724998 -58.224998 # 5 +2478 643 6 0.000000 2.459512 33.014999 -58.224998 # 5 2479 641 5 -0.000772 2.459512 33.014999 -54.875000 # 5 2480 641 5 -0.005455 1.229756 32.305000 -54.875000 # 5 -2481 643 5 0.000000 3.689268 33.724998 -58.224998 # 5 -2482 643 5 0.000000 4.919024 33.014999 -58.224998 # 5 +2481 643 6 0.000000 3.689268 33.724998 -58.224998 # 5 +2482 643 6 0.000000 4.919024 33.014999 -58.224998 # 5 2483 641 5 0.003106 4.919024 33.014999 -54.875000 # 5 2484 641 5 -0.001614 3.689268 32.305000 -54.875000 # 5 -2485 643 5 0.000000 6.148780 33.724998 -58.224998 # 5 -2486 643 5 0.000000 7.378536 33.014999 -58.224998 # 5 +2485 643 6 0.000000 6.148780 33.724998 -58.224998 # 5 +2486 643 6 0.000000 7.378536 33.014999 -58.224998 # 5 2487 641 5 -0.000846 7.378536 33.014999 -54.875000 # 5 2488 641 5 -0.002162 6.148780 32.305000 -54.875000 # 5 -2489 643 5 0.000000 8.608293 33.724998 -58.224998 # 5 -2490 643 5 0.000000 9.838048 33.014999 -58.224998 # 5 +2489 643 6 0.000000 8.608293 33.724998 -58.224998 # 5 +2490 643 6 0.000000 9.838048 33.014999 -58.224998 # 5 2491 641 5 -0.000940 9.838048 33.014999 -54.875000 # 5 2492 641 5 -0.003071 8.608293 32.305000 -54.875000 # 5 -2493 643 5 0.000000 11.067804 33.724998 -58.224998 # 5 -2494 643 5 0.000000 12.297561 33.014999 -58.224998 # 5 +2493 643 6 0.000000 11.067804 33.724998 -58.224998 # 5 +2494 643 6 0.000000 12.297561 33.014999 -58.224998 # 5 2495 641 5 0.007028 12.297561 33.014999 -54.875000 # 5 2496 641 5 0.000774 11.067804 32.305000 -54.875000 # 5 -2497 643 5 0.000000 13.527316 33.724998 -58.224998 # 5 -2498 643 5 0.000000 14.757072 33.014999 -58.224998 # 5 +2497 643 6 0.000000 13.527316 33.724998 -58.224998 # 5 +2498 643 6 0.000000 14.757072 33.014999 -58.224998 # 5 2499 641 5 0.008285 14.757072 33.014999 -54.875000 # 5 2500 641 5 0.004584 13.527316 32.305000 -54.875000 # 5 -2501 643 5 0.000000 15.986829 33.724998 -58.224998 # 5 -2502 643 5 0.000000 17.216585 33.014999 -58.224998 # 5 +2501 643 6 0.000000 15.986829 33.724998 -58.224998 # 5 +2502 643 6 0.000000 17.216585 33.014999 -58.224998 # 5 2503 641 5 0.004904 17.216585 33.014999 -54.875000 # 5 2504 641 5 0.000781 15.986829 32.305000 -54.875000 # 5 -2505 643 5 0.000000 18.446341 33.724998 -58.224998 # 5 -2506 643 5 0.000000 19.676096 33.014999 -58.224998 # 5 +2505 643 6 0.000000 18.446341 33.724998 -58.224998 # 5 +2506 643 6 0.000000 19.676096 33.014999 -58.224998 # 5 2507 641 5 0.014678 19.676096 33.014999 -54.875000 # 5 2508 641 5 0.006950 18.446341 32.305000 -54.875000 # 5 -2509 643 5 0.000000 20.905853 33.724998 -58.224998 # 5 -2510 643 5 0.000000 22.135609 33.014999 -58.224998 # 5 +2509 643 6 0.000000 20.905853 33.724998 -58.224998 # 5 +2510 643 6 0.000000 22.135609 33.014999 -58.224998 # 5 2511 641 5 0.013213 22.135609 33.014999 -54.875000 # 5 2512 641 5 0.014441 20.905853 32.305000 -54.875000 # 5 -2513 643 5 0.000000 23.365364 33.724998 -58.224998 # 5 -2514 643 5 0.000000 24.595121 33.014999 -58.224998 # 5 +2513 643 6 0.000000 23.365364 33.724998 -58.224998 # 5 +2514 643 6 0.000000 24.595121 33.014999 -58.224998 # 5 2515 641 5 0.005259 24.595121 33.014999 -54.875000 # 5 2516 641 5 0.006529 23.365364 32.305000 -54.875000 # 5 -2517 643 5 0.000000 25.824877 33.724998 -58.224998 # 5 -2518 643 5 0.000000 27.054632 33.014999 -58.224998 # 5 +2517 643 6 0.000000 25.824877 33.724998 -58.224998 # 5 +2518 643 6 0.000000 27.054632 33.014999 -58.224998 # 5 2519 641 5 0.001456 27.054632 33.014999 -54.875000 # 5 2520 641 5 0.001437 25.824877 32.305000 -54.875000 # 5 -2521 643 5 0.000000 28.284389 33.724998 -58.224998 # 5 -2522 643 5 0.000000 29.514145 33.014999 -58.224998 # 5 +2521 643 6 0.000000 28.284389 33.724998 -58.224998 # 5 +2522 643 6 0.000000 29.514145 33.014999 -58.224998 # 5 2523 641 5 -0.003657 29.514145 33.014999 -54.875000 # 5 2524 641 5 -0.001334 28.284389 32.305000 -54.875000 # 5 -2525 643 5 0.000000 30.743900 33.724998 -58.224998 # 5 -2526 643 5 0.000000 31.973658 33.014999 -58.224998 # 5 +2525 643 6 0.000000 30.743900 33.724998 -58.224998 # 5 +2526 643 6 0.000000 31.973658 33.014999 -58.224998 # 5 2527 641 5 -0.007720 31.973658 33.014999 -54.875000 # 5 2528 641 5 -0.004950 30.743900 32.305000 -54.875000 # 5 2529 642 5 -0.000663 1.229756 1.065000 54.875008 # 5 @@ -2982,838 +2984,838 @@ Angle Coeffs # harmonic 2942 642 5 -0.006769 28.284389 32.305000 54.875008 # 5 2943 642 5 0.003066 31.973658 33.014999 54.875008 # 5 2944 642 5 0.001246 30.743900 32.305000 54.875008 # 5 -2945 644 5 0.000000 1.229756 1.065000 58.225006 # 5 -2946 646 5 0.000000 1.229756 1.065000 61.574997 # 5 -2947 644 5 0.000000 2.459512 1.775000 58.225006 # 5 -2948 644 5 0.000000 3.689268 1.065000 58.225006 # 5 -2949 646 5 0.000000 3.689268 1.065000 61.574997 # 5 -2950 646 5 0.000000 2.459512 0.355000 61.574997 # 5 -2951 644 5 0.000000 4.919024 1.775000 58.225006 # 5 -2952 644 5 0.000000 6.148780 1.065000 58.225006 # 5 -2953 646 5 0.000000 6.148780 1.065000 61.574997 # 5 -2954 646 5 0.000000 4.919024 0.355000 61.574997 # 5 -2955 644 5 0.000000 7.378536 1.775000 58.225006 # 5 -2956 644 5 0.000000 8.608293 1.065000 58.225006 # 5 -2957 646 5 0.000000 8.608293 1.065000 61.574997 # 5 -2958 646 5 0.000000 7.378536 0.355000 61.574997 # 5 -2959 644 5 0.000000 9.838048 1.775000 58.225006 # 5 -2960 644 5 0.000000 11.067804 1.065000 58.225006 # 5 -2961 646 5 0.000000 11.067804 1.065000 61.574997 # 5 -2962 646 5 0.000000 9.838048 0.355000 61.574997 # 5 -2963 644 5 0.000000 12.297561 1.775000 58.225006 # 5 -2964 644 5 0.000000 13.527316 1.065000 58.225006 # 5 -2965 646 5 0.000000 13.527316 1.065000 61.574997 # 5 -2966 646 5 0.000000 12.297561 0.355000 61.574997 # 5 -2967 644 5 0.000000 14.757072 1.775000 58.225006 # 5 -2968 644 5 0.000000 15.986829 1.065000 58.225006 # 5 -2969 646 5 0.000000 15.986829 1.065000 61.574997 # 5 -2970 646 5 0.000000 14.757072 0.355000 61.574997 # 5 -2971 644 5 0.000000 17.216585 1.775000 58.225006 # 5 -2972 644 5 0.000000 18.446341 1.065000 58.225006 # 5 -2973 646 5 0.000000 18.446341 1.065000 61.574997 # 5 -2974 646 5 0.000000 17.216585 0.355000 61.574997 # 5 -2975 644 5 0.000000 19.676096 1.775000 58.225006 # 5 -2976 644 5 0.000000 20.905853 1.065000 58.225006 # 5 -2977 646 5 0.000000 20.905853 1.065000 61.574997 # 5 -2978 646 5 0.000000 19.676096 0.355000 61.574997 # 5 -2979 644 5 0.000000 22.135609 1.775000 58.225006 # 5 -2980 644 5 0.000000 23.365364 1.065000 58.225006 # 5 -2981 646 5 0.000000 23.365364 1.065000 61.574997 # 5 -2982 646 5 0.000000 22.135609 0.355000 61.574997 # 5 -2983 644 5 0.000000 24.595121 1.775000 58.225006 # 5 -2984 644 5 0.000000 25.824877 1.065000 58.225006 # 5 -2985 646 5 0.000000 25.824877 1.065000 61.574997 # 5 -2986 646 5 0.000000 24.595121 0.355000 61.574997 # 5 -2987 644 5 0.000000 27.054632 1.775000 58.225006 # 5 -2988 644 5 0.000000 28.284389 1.065000 58.225006 # 5 -2989 646 5 0.000000 28.284389 1.065000 61.574997 # 5 -2990 646 5 0.000000 27.054632 0.355000 61.574997 # 5 -2991 644 5 0.000000 29.514145 1.775000 58.225006 # 5 -2992 644 5 0.000000 30.743900 1.065000 58.225006 # 5 -2993 646 5 0.000000 30.743900 1.065000 61.574997 # 5 -2994 646 5 0.000000 29.514145 0.355000 61.574997 # 5 -2995 644 5 0.000000 31.973658 1.775000 58.225006 # 5 -2996 646 5 0.000000 31.973658 0.355000 61.574997 # 5 -2997 644 5 0.000000 1.229756 3.905000 58.225006 # 5 -2998 644 5 0.000000 2.459512 3.195000 58.225006 # 5 -2999 646 5 0.000000 2.459512 3.195000 61.574997 # 5 -3000 646 5 0.000000 1.229756 2.485000 61.574997 # 5 -3001 644 5 0.000000 3.689268 3.905000 58.225006 # 5 -3002 644 5 0.000000 4.919024 3.195000 58.225006 # 5 -3003 646 5 0.000000 4.919024 3.195000 61.574997 # 5 -3004 646 5 0.000000 3.689268 2.485000 61.574997 # 5 -3005 644 5 0.000000 6.148780 3.905000 58.225006 # 5 -3006 644 5 0.000000 7.378536 3.195000 58.225006 # 5 -3007 646 5 0.000000 7.378536 3.195000 61.574997 # 5 -3008 646 5 0.000000 6.148780 2.485000 61.574997 # 5 -3009 644 5 0.000000 8.608293 3.905000 58.225006 # 5 -3010 644 5 0.000000 9.838048 3.195000 58.225006 # 5 -3011 646 5 0.000000 9.838048 3.195000 61.574997 # 5 -3012 646 5 0.000000 8.608293 2.485000 61.574997 # 5 -3013 644 5 0.000000 11.067804 3.905000 58.225006 # 5 -3014 644 5 0.000000 12.297561 3.195000 58.225006 # 5 -3015 646 5 0.000000 12.297561 3.195000 61.574997 # 5 -3016 646 5 0.000000 11.067804 2.485000 61.574997 # 5 -3017 644 5 0.000000 13.527316 3.905000 58.225006 # 5 -3018 644 5 0.000000 14.757072 3.195000 58.225006 # 5 -3019 646 5 0.000000 14.757072 3.195000 61.574997 # 5 -3020 646 5 0.000000 13.527316 2.485000 61.574997 # 5 -3021 644 5 0.000000 15.986829 3.905000 58.225006 # 5 -3022 644 5 0.000000 17.216585 3.195000 58.225006 # 5 -3023 646 5 0.000000 17.216585 3.195000 61.574997 # 5 -3024 646 5 0.000000 15.986829 2.485000 61.574997 # 5 -3025 644 5 0.000000 18.446341 3.905000 58.225006 # 5 -3026 644 5 0.000000 19.676096 3.195000 58.225006 # 5 -3027 646 5 0.000000 19.676096 3.195000 61.574997 # 5 -3028 646 5 0.000000 18.446341 2.485000 61.574997 # 5 -3029 644 5 0.000000 20.905853 3.905000 58.225006 # 5 -3030 644 5 0.000000 22.135609 3.195000 58.225006 # 5 -3031 646 5 0.000000 22.135609 3.195000 61.574997 # 5 -3032 646 5 0.000000 20.905853 2.485000 61.574997 # 5 -3033 644 5 0.000000 23.365364 3.905000 58.225006 # 5 -3034 644 5 0.000000 24.595121 3.195000 58.225006 # 5 -3035 646 5 0.000000 24.595121 3.195000 61.574997 # 5 -3036 646 5 0.000000 23.365364 2.485000 61.574997 # 5 -3037 644 5 0.000000 25.824877 3.905000 58.225006 # 5 -3038 644 5 0.000000 27.054632 3.195000 58.225006 # 5 -3039 646 5 0.000000 27.054632 3.195000 61.574997 # 5 -3040 646 5 0.000000 25.824877 2.485000 61.574997 # 5 -3041 644 5 0.000000 28.284389 3.905000 58.225006 # 5 -3042 644 5 0.000000 29.514145 3.195000 58.225006 # 5 -3043 646 5 0.000000 29.514145 3.195000 61.574997 # 5 -3044 646 5 0.000000 28.284389 2.485000 61.574997 # 5 -3045 644 5 0.000000 30.743900 3.905000 58.225006 # 5 -3046 644 5 0.000000 31.973658 3.195000 58.225006 # 5 -3047 646 5 0.000000 31.973658 3.195000 61.574997 # 5 -3048 646 5 0.000000 30.743900 2.485000 61.574997 # 5 -3049 644 5 0.000000 1.229756 5.325000 58.225006 # 5 -3050 646 5 0.000000 1.229756 5.325000 61.574997 # 5 -3051 644 5 0.000000 2.459512 6.035000 58.225006 # 5 -3052 644 5 0.000000 3.689268 5.325000 58.225006 # 5 -3053 646 5 0.000000 3.689268 5.325000 61.574997 # 5 -3054 646 5 0.000000 2.459512 4.615000 61.574997 # 5 -3055 644 5 0.000000 4.919024 6.035000 58.225006 # 5 -3056 644 5 0.000000 6.148780 5.325000 58.225006 # 5 -3057 646 5 0.000000 6.148780 5.325000 61.574997 # 5 -3058 646 5 0.000000 4.919024 4.615000 61.574997 # 5 -3059 644 5 0.000000 7.378536 6.035000 58.225006 # 5 -3060 644 5 0.000000 8.608293 5.325000 58.225006 # 5 -3061 646 5 0.000000 8.608293 5.325000 61.574997 # 5 -3062 646 5 0.000000 7.378536 4.615000 61.574997 # 5 -3063 644 5 0.000000 9.838048 6.035000 58.225006 # 5 -3064 644 5 0.000000 11.067804 5.325000 58.225006 # 5 -3065 646 5 0.000000 11.067804 5.325000 61.574997 # 5 -3066 646 5 0.000000 9.838048 4.615000 61.574997 # 5 -3067 644 5 0.000000 12.297561 6.035000 58.225006 # 5 -3068 644 5 0.000000 13.527316 5.325000 58.225006 # 5 -3069 646 5 0.000000 13.527316 5.325000 61.574997 # 5 -3070 646 5 0.000000 12.297561 4.615000 61.574997 # 5 -3071 644 5 0.000000 14.757072 6.035000 58.225006 # 5 -3072 644 5 0.000000 15.986829 5.325000 58.225006 # 5 -3073 646 5 0.000000 15.986829 5.325000 61.574997 # 5 -3074 646 5 0.000000 14.757072 4.615000 61.574997 # 5 -3075 644 5 0.000000 17.216585 6.035000 58.225006 # 5 -3076 644 5 0.000000 18.446341 5.325000 58.225006 # 5 -3077 646 5 0.000000 18.446341 5.325000 61.574997 # 5 -3078 646 5 0.000000 17.216585 4.615000 61.574997 # 5 -3079 644 5 0.000000 19.676096 6.035000 58.225006 # 5 -3080 644 5 0.000000 20.905853 5.325000 58.225006 # 5 -3081 646 5 0.000000 20.905853 5.325000 61.574997 # 5 -3082 646 5 0.000000 19.676096 4.615000 61.574997 # 5 -3083 644 5 0.000000 22.135609 6.035000 58.225006 # 5 -3084 644 5 0.000000 23.365364 5.325000 58.225006 # 5 -3085 646 5 0.000000 23.365364 5.325000 61.574997 # 5 -3086 646 5 0.000000 22.135609 4.615000 61.574997 # 5 -3087 644 5 0.000000 24.595121 6.035000 58.225006 # 5 -3088 644 5 0.000000 25.824877 5.325000 58.225006 # 5 -3089 646 5 0.000000 25.824877 5.325000 61.574997 # 5 -3090 646 5 0.000000 24.595121 4.615000 61.574997 # 5 -3091 644 5 0.000000 27.054632 6.035000 58.225006 # 5 -3092 644 5 0.000000 28.284389 5.325000 58.225006 # 5 -3093 646 5 0.000000 28.284389 5.325000 61.574997 # 5 -3094 646 5 0.000000 27.054632 4.615000 61.574997 # 5 -3095 644 5 0.000000 29.514145 6.035000 58.225006 # 5 -3096 644 5 0.000000 30.743900 5.325000 58.225006 # 5 -3097 646 5 0.000000 30.743900 5.325000 61.574997 # 5 -3098 646 5 0.000000 29.514145 4.615000 61.574997 # 5 -3099 644 5 0.000000 31.973658 6.035000 58.225006 # 5 -3100 646 5 0.000000 31.973658 4.615000 61.574997 # 5 -3101 644 5 0.000000 1.229756 8.165000 58.225006 # 5 -3102 644 5 0.000000 2.459512 7.455000 58.225006 # 5 -3103 646 5 0.000000 2.459512 7.455000 61.574997 # 5 -3104 646 5 0.000000 1.229756 6.745000 61.574997 # 5 -3105 644 5 0.000000 3.689268 8.165000 58.225006 # 5 -3106 644 5 0.000000 4.919024 7.455000 58.225006 # 5 -3107 646 5 0.000000 4.919024 7.455000 61.574997 # 5 -3108 646 5 0.000000 3.689268 6.745000 61.574997 # 5 -3109 644 5 0.000000 6.148780 8.165000 58.225006 # 5 -3110 644 5 0.000000 7.378536 7.455000 58.225006 # 5 -3111 646 5 0.000000 7.378536 7.455000 61.574997 # 5 -3112 646 5 0.000000 6.148780 6.745000 61.574997 # 5 -3113 644 5 0.000000 8.608293 8.165000 58.225006 # 5 -3114 644 5 0.000000 9.838048 7.455000 58.225006 # 5 -3115 646 5 0.000000 9.838048 7.455000 61.574997 # 5 -3116 646 5 0.000000 8.608293 6.745000 61.574997 # 5 -3117 644 5 0.000000 11.067804 8.165000 58.225006 # 5 -3118 644 5 0.000000 12.297561 7.455000 58.225006 # 5 -3119 646 5 0.000000 12.297561 7.455000 61.574997 # 5 -3120 646 5 0.000000 11.067804 6.745000 61.574997 # 5 -3121 644 5 0.000000 13.527316 8.165000 58.225006 # 5 -3122 644 5 0.000000 14.757072 7.455000 58.225006 # 5 -3123 646 5 0.000000 14.757072 7.455000 61.574997 # 5 -3124 646 5 0.000000 13.527316 6.745000 61.574997 # 5 -3125 644 5 0.000000 15.986829 8.165000 58.225006 # 5 -3126 644 5 0.000000 17.216585 7.455000 58.225006 # 5 -3127 646 5 0.000000 17.216585 7.455000 61.574997 # 5 -3128 646 5 0.000000 15.986829 6.745000 61.574997 # 5 -3129 644 5 0.000000 18.446341 8.165000 58.225006 # 5 -3130 644 5 0.000000 19.676096 7.455000 58.225006 # 5 -3131 646 5 0.000000 19.676096 7.455000 61.574997 # 5 -3132 646 5 0.000000 18.446341 6.745000 61.574997 # 5 -3133 644 5 0.000000 20.905853 8.165000 58.225006 # 5 -3134 644 5 0.000000 22.135609 7.455000 58.225006 # 5 -3135 646 5 0.000000 22.135609 7.455000 61.574997 # 5 -3136 646 5 0.000000 20.905853 6.745000 61.574997 # 5 -3137 644 5 0.000000 23.365364 8.165000 58.225006 # 5 -3138 644 5 0.000000 24.595121 7.455000 58.225006 # 5 -3139 646 5 0.000000 24.595121 7.455000 61.574997 # 5 -3140 646 5 0.000000 23.365364 6.745000 61.574997 # 5 -3141 644 5 0.000000 25.824877 8.165000 58.225006 # 5 -3142 644 5 0.000000 27.054632 7.455000 58.225006 # 5 -3143 646 5 0.000000 27.054632 7.455000 61.574997 # 5 -3144 646 5 0.000000 25.824877 6.745000 61.574997 # 5 -3145 644 5 0.000000 28.284389 8.165000 58.225006 # 5 -3146 644 5 0.000000 29.514145 7.455000 58.225006 # 5 -3147 646 5 0.000000 29.514145 7.455000 61.574997 # 5 -3148 646 5 0.000000 28.284389 6.745000 61.574997 # 5 -3149 644 5 0.000000 30.743900 8.165000 58.225006 # 5 -3150 644 5 0.000000 31.973658 7.455000 58.225006 # 5 -3151 646 5 0.000000 31.973658 7.455000 61.574997 # 5 -3152 646 5 0.000000 30.743900 6.745000 61.574997 # 5 -3153 644 5 0.000000 1.229756 9.585000 58.225006 # 5 -3154 646 5 0.000000 1.229756 9.585000 61.574997 # 5 -3155 644 5 0.000000 2.459512 10.295000 58.225006 # 5 -3156 644 5 0.000000 3.689268 9.585000 58.225006 # 5 -3157 646 5 0.000000 3.689268 9.585000 61.574997 # 5 -3158 646 5 0.000000 2.459512 8.875000 61.574997 # 5 -3159 644 5 0.000000 4.919024 10.295000 58.225006 # 5 -3160 644 5 0.000000 6.148780 9.585000 58.225006 # 5 -3161 646 5 0.000000 6.148780 9.585000 61.574997 # 5 -3162 646 5 0.000000 4.919024 8.875000 61.574997 # 5 -3163 644 5 0.000000 7.378536 10.295000 58.225006 # 5 -3164 644 5 0.000000 8.608293 9.585000 58.225006 # 5 -3165 646 5 0.000000 8.608293 9.585000 61.574997 # 5 -3166 646 5 0.000000 7.378536 8.875000 61.574997 # 5 -3167 644 5 0.000000 9.838048 10.295000 58.225006 # 5 -3168 644 5 0.000000 11.067804 9.585000 58.225006 # 5 -3169 646 5 0.000000 11.067804 9.585000 61.574997 # 5 -3170 646 5 0.000000 9.838048 8.875000 61.574997 # 5 -3171 644 5 0.000000 12.297561 10.295000 58.225006 # 5 -3172 644 5 0.000000 13.527316 9.585000 58.225006 # 5 -3173 646 5 0.000000 13.527316 9.585000 61.574997 # 5 -3174 646 5 0.000000 12.297561 8.875000 61.574997 # 5 -3175 644 5 0.000000 14.757072 10.295000 58.225006 # 5 -3176 644 5 0.000000 15.986829 9.585000 58.225006 # 5 -3177 646 5 0.000000 15.986829 9.585000 61.574997 # 5 -3178 646 5 0.000000 14.757072 8.875000 61.574997 # 5 -3179 644 5 0.000000 17.216585 10.295000 58.225006 # 5 -3180 644 5 0.000000 18.446341 9.585000 58.225006 # 5 -3181 646 5 0.000000 18.446341 9.585000 61.574997 # 5 -3182 646 5 0.000000 17.216585 8.875000 61.574997 # 5 -3183 644 5 0.000000 19.676096 10.295000 58.225006 # 5 -3184 644 5 0.000000 20.905853 9.585000 58.225006 # 5 -3185 646 5 0.000000 20.905853 9.585000 61.574997 # 5 -3186 646 5 0.000000 19.676096 8.875000 61.574997 # 5 -3187 644 5 0.000000 22.135609 10.295000 58.225006 # 5 -3188 644 5 0.000000 23.365364 9.585000 58.225006 # 5 -3189 646 5 0.000000 23.365364 9.585000 61.574997 # 5 -3190 646 5 0.000000 22.135609 8.875000 61.574997 # 5 -3191 644 5 0.000000 24.595121 10.295000 58.225006 # 5 -3192 644 5 0.000000 25.824877 9.585000 58.225006 # 5 -3193 646 5 0.000000 25.824877 9.585000 61.574997 # 5 -3194 646 5 0.000000 24.595121 8.875000 61.574997 # 5 -3195 644 5 0.000000 27.054632 10.295000 58.225006 # 5 -3196 644 5 0.000000 28.284389 9.585000 58.225006 # 5 -3197 646 5 0.000000 28.284389 9.585000 61.574997 # 5 -3198 646 5 0.000000 27.054632 8.875000 61.574997 # 5 -3199 644 5 0.000000 29.514145 10.295000 58.225006 # 5 -3200 644 5 0.000000 30.743900 9.585000 58.225006 # 5 -3201 646 5 0.000000 30.743900 9.585000 61.574997 # 5 -3202 646 5 0.000000 29.514145 8.875000 61.574997 # 5 -3203 644 5 0.000000 31.973658 10.295000 58.225006 # 5 -3204 646 5 0.000000 31.973658 8.875000 61.574997 # 5 -3205 644 5 0.000000 1.229756 12.425000 58.225006 # 5 -3206 644 5 0.000000 2.459512 11.715001 58.225006 # 5 -3207 646 5 0.000000 2.459512 11.715001 61.574997 # 5 -3208 646 5 0.000000 1.229756 11.005000 61.574997 # 5 -3209 644 5 0.000000 3.689268 12.425000 58.225006 # 5 -3210 644 5 0.000000 4.919024 11.715001 58.225006 # 5 -3211 646 5 0.000000 4.919024 11.715001 61.574997 # 5 -3212 646 5 0.000000 3.689268 11.005000 61.574997 # 5 -3213 644 5 0.000000 6.148780 12.425000 58.225006 # 5 -3214 644 5 0.000000 7.378536 11.715001 58.225006 # 5 -3215 646 5 0.000000 7.378536 11.715001 61.574997 # 5 -3216 646 5 0.000000 6.148780 11.005000 61.574997 # 5 -3217 644 5 0.000000 8.608293 12.425000 58.225006 # 5 -3218 644 5 0.000000 9.838048 11.715001 58.225006 # 5 -3219 646 5 0.000000 9.838048 11.715001 61.574997 # 5 -3220 646 5 0.000000 8.608293 11.005000 61.574997 # 5 -3221 644 5 0.000000 11.067804 12.425000 58.225006 # 5 -3222 644 5 0.000000 12.297561 11.715001 58.225006 # 5 -3223 646 5 0.000000 12.297561 11.715001 61.574997 # 5 -3224 646 5 0.000000 11.067804 11.005000 61.574997 # 5 -3225 644 5 0.000000 13.527316 12.425000 58.225006 # 5 -3226 644 5 0.000000 14.757072 11.715001 58.225006 # 5 -3227 646 5 0.000000 14.757072 11.715001 61.574997 # 5 -3228 646 5 0.000000 13.527316 11.005000 61.574997 # 5 -3229 644 5 0.000000 15.986829 12.425000 58.225006 # 5 -3230 644 5 0.000000 17.216585 11.715001 58.225006 # 5 -3231 646 5 0.000000 17.216585 11.715001 61.574997 # 5 -3232 646 5 0.000000 15.986829 11.005000 61.574997 # 5 -3233 644 5 0.000000 18.446341 12.425000 58.225006 # 5 -3234 644 5 0.000000 19.676096 11.715001 58.225006 # 5 -3235 646 5 0.000000 19.676096 11.715001 61.574997 # 5 -3236 646 5 0.000000 18.446341 11.005000 61.574997 # 5 -3237 644 5 0.000000 20.905853 12.425000 58.225006 # 5 -3238 644 5 0.000000 22.135609 11.715001 58.225006 # 5 -3239 646 5 0.000000 22.135609 11.715001 61.574997 # 5 -3240 646 5 0.000000 20.905853 11.005000 61.574997 # 5 -3241 644 5 0.000000 23.365364 12.425000 58.225006 # 5 -3242 644 5 0.000000 24.595121 11.715001 58.225006 # 5 -3243 646 5 0.000000 24.595121 11.715001 61.574997 # 5 -3244 646 5 0.000000 23.365364 11.005000 61.574997 # 5 -3245 644 5 0.000000 25.824877 12.425000 58.225006 # 5 -3246 644 5 0.000000 27.054632 11.715001 58.225006 # 5 -3247 646 5 0.000000 27.054632 11.715001 61.574997 # 5 -3248 646 5 0.000000 25.824877 11.005000 61.574997 # 5 -3249 644 5 0.000000 28.284389 12.425000 58.225006 # 5 -3250 644 5 0.000000 29.514145 11.715001 58.225006 # 5 -3251 646 5 0.000000 29.514145 11.715001 61.574997 # 5 -3252 646 5 0.000000 28.284389 11.005000 61.574997 # 5 -3253 644 5 0.000000 30.743900 12.425000 58.225006 # 5 -3254 644 5 0.000000 31.973658 11.715001 58.225006 # 5 -3255 646 5 0.000000 31.973658 11.715001 61.574997 # 5 -3256 646 5 0.000000 30.743900 11.005000 61.574997 # 5 -3257 644 5 0.000000 1.229756 13.845000 58.225006 # 5 -3258 646 5 0.000000 1.229756 13.845000 61.574997 # 5 -3259 644 5 0.000000 2.459512 14.555000 58.225006 # 5 -3260 644 5 0.000000 3.689268 13.845000 58.225006 # 5 -3261 646 5 0.000000 3.689268 13.845000 61.574997 # 5 -3262 646 5 0.000000 2.459512 13.135000 61.574997 # 5 -3263 644 5 0.000000 4.919024 14.555000 58.225006 # 5 -3264 644 5 0.000000 6.148780 13.845000 58.225006 # 5 -3265 646 5 0.000000 6.148780 13.845000 61.574997 # 5 -3266 646 5 0.000000 4.919024 13.135000 61.574997 # 5 -3267 644 5 0.000000 7.378536 14.555000 58.225006 # 5 -3268 644 5 0.000000 8.608293 13.845000 58.225006 # 5 -3269 646 5 0.000000 8.608293 13.845000 61.574997 # 5 -3270 646 5 0.000000 7.378536 13.135000 61.574997 # 5 -3271 644 5 0.000000 9.838048 14.555000 58.225006 # 5 -3272 644 5 0.000000 11.067804 13.845000 58.225006 # 5 -3273 646 5 0.000000 11.067804 13.845000 61.574997 # 5 -3274 646 5 0.000000 9.838048 13.135000 61.574997 # 5 -3275 644 5 0.000000 12.297561 14.555000 58.225006 # 5 -3276 644 5 0.000000 13.527316 13.845000 58.225006 # 5 -3277 646 5 0.000000 13.527316 13.845000 61.574997 # 5 -3278 646 5 0.000000 12.297561 13.135000 61.574997 # 5 -3279 644 5 0.000000 14.757072 14.555000 58.225006 # 5 -3280 644 5 0.000000 15.986829 13.845000 58.225006 # 5 -3281 646 5 0.000000 15.986829 13.845000 61.574997 # 5 -3282 646 5 0.000000 14.757072 13.135000 61.574997 # 5 -3283 644 5 0.000000 17.216585 14.555000 58.225006 # 5 -3284 644 5 0.000000 18.446341 13.845000 58.225006 # 5 -3285 646 5 0.000000 18.446341 13.845000 61.574997 # 5 -3286 646 5 0.000000 17.216585 13.135000 61.574997 # 5 -3287 644 5 0.000000 19.676096 14.555000 58.225006 # 5 -3288 644 5 0.000000 20.905853 13.845000 58.225006 # 5 -3289 646 5 0.000000 20.905853 13.845000 61.574997 # 5 -3290 646 5 0.000000 19.676096 13.135000 61.574997 # 5 -3291 644 5 0.000000 22.135609 14.555000 58.225006 # 5 -3292 644 5 0.000000 23.365364 13.845000 58.225006 # 5 -3293 646 5 0.000000 23.365364 13.845000 61.574997 # 5 -3294 646 5 0.000000 22.135609 13.135000 61.574997 # 5 -3295 644 5 0.000000 24.595121 14.555000 58.225006 # 5 -3296 644 5 0.000000 25.824877 13.845000 58.225006 # 5 -3297 646 5 0.000000 25.824877 13.845000 61.574997 # 5 -3298 646 5 0.000000 24.595121 13.135000 61.574997 # 5 -3299 644 5 0.000000 27.054632 14.555000 58.225006 # 5 -3300 644 5 0.000000 28.284389 13.845000 58.225006 # 5 -3301 646 5 0.000000 28.284389 13.845000 61.574997 # 5 -3302 646 5 0.000000 27.054632 13.135000 61.574997 # 5 -3303 644 5 0.000000 29.514145 14.555000 58.225006 # 5 -3304 644 5 0.000000 30.743900 13.845000 58.225006 # 5 -3305 646 5 0.000000 30.743900 13.845000 61.574997 # 5 -3306 646 5 0.000000 29.514145 13.135000 61.574997 # 5 -3307 644 5 0.000000 31.973658 14.555000 58.225006 # 5 -3308 646 5 0.000000 31.973658 13.135000 61.574997 # 5 -3309 644 5 0.000000 1.229756 16.684999 58.225006 # 5 -3310 644 5 0.000000 2.459512 15.975000 58.225006 # 5 -3311 646 5 0.000000 2.459512 15.975000 61.574997 # 5 -3312 646 5 0.000000 1.229756 15.265000 61.574997 # 5 -3313 644 5 0.000000 3.689268 16.684999 58.225006 # 5 -3314 644 5 0.000000 4.919024 15.975000 58.225006 # 5 -3315 646 5 0.000000 4.919024 15.975000 61.574997 # 5 -3316 646 5 0.000000 3.689268 15.265000 61.574997 # 5 -3317 644 5 0.000000 6.148780 16.684999 58.225006 # 5 -3318 644 5 0.000000 7.378536 15.975000 58.225006 # 5 -3319 646 5 0.000000 7.378536 15.975000 61.574997 # 5 -3320 646 5 0.000000 6.148780 15.265000 61.574997 # 5 -3321 644 5 0.000000 8.608293 16.684999 58.225006 # 5 -3322 644 5 0.000000 9.838048 15.975000 58.225006 # 5 -3323 646 5 0.000000 9.838048 15.975000 61.574997 # 5 -3324 646 5 0.000000 8.608293 15.265000 61.574997 # 5 -3325 644 5 0.000000 11.067804 16.684999 58.225006 # 5 -3326 644 5 0.000000 12.297561 15.975000 58.225006 # 5 -3327 646 5 0.000000 12.297561 15.975000 61.574997 # 5 -3328 646 5 0.000000 11.067804 15.265000 61.574997 # 5 -3329 644 5 0.000000 13.527316 16.684999 58.225006 # 5 -3330 644 5 0.000000 14.757072 15.975000 58.225006 # 5 -3331 646 5 0.000000 14.757072 15.975000 61.574997 # 5 -3332 646 5 0.000000 13.527316 15.265000 61.574997 # 5 -3333 644 5 0.000000 15.986829 16.684999 58.225006 # 5 -3334 644 5 0.000000 17.216585 15.975000 58.225006 # 5 -3335 646 5 0.000000 17.216585 15.975000 61.574997 # 5 -3336 646 5 0.000000 15.986829 15.265000 61.574997 # 5 -3337 644 5 0.000000 18.446341 16.684999 58.225006 # 5 -3338 644 5 0.000000 19.676096 15.975000 58.225006 # 5 -3339 646 5 0.000000 19.676096 15.975000 61.574997 # 5 -3340 646 5 0.000000 18.446341 15.265000 61.574997 # 5 -3341 644 5 0.000000 20.905853 16.684999 58.225006 # 5 -3342 644 5 0.000000 22.135609 15.975000 58.225006 # 5 -3343 646 5 0.000000 22.135609 15.975000 61.574997 # 5 -3344 646 5 0.000000 20.905853 15.265000 61.574997 # 5 -3345 644 5 0.000000 23.365364 16.684999 58.225006 # 5 -3346 644 5 0.000000 24.595121 15.975000 58.225006 # 5 -3347 646 5 0.000000 24.595121 15.975000 61.574997 # 5 -3348 646 5 0.000000 23.365364 15.265000 61.574997 # 5 -3349 644 5 0.000000 25.824877 16.684999 58.225006 # 5 -3350 644 5 0.000000 27.054632 15.975000 58.225006 # 5 -3351 646 5 0.000000 27.054632 15.975000 61.574997 # 5 -3352 646 5 0.000000 25.824877 15.265000 61.574997 # 5 -3353 644 5 0.000000 28.284389 16.684999 58.225006 # 5 -3354 644 5 0.000000 29.514145 15.975000 58.225006 # 5 -3355 646 5 0.000000 29.514145 15.975000 61.574997 # 5 -3356 646 5 0.000000 28.284389 15.265000 61.574997 # 5 -3357 644 5 0.000000 30.743900 16.684999 58.225006 # 5 -3358 644 5 0.000000 31.973658 15.975000 58.225006 # 5 -3359 646 5 0.000000 31.973658 15.975000 61.574997 # 5 -3360 646 5 0.000000 30.743900 15.265000 61.574997 # 5 -3361 644 5 0.000000 1.229756 18.105000 58.225006 # 5 -3362 646 5 0.000000 1.229756 18.105000 61.574997 # 5 -3363 644 5 0.000000 2.459512 18.815001 58.225006 # 5 -3364 644 5 0.000000 3.689268 18.105000 58.225006 # 5 -3365 646 5 0.000000 3.689268 18.105000 61.574997 # 5 -3366 646 5 0.000000 2.459512 17.395000 61.574997 # 5 -3367 644 5 0.000000 4.919024 18.815001 58.225006 # 5 -3368 644 5 0.000000 6.148780 18.105000 58.225006 # 5 -3369 646 5 0.000000 6.148780 18.105000 61.574997 # 5 -3370 646 5 0.000000 4.919024 17.395000 61.574997 # 5 -3371 644 5 0.000000 7.378536 18.815001 58.225006 # 5 -3372 644 5 0.000000 8.608293 18.105000 58.225006 # 5 -3373 646 5 0.000000 8.608293 18.105000 61.574997 # 5 -3374 646 5 0.000000 7.378536 17.395000 61.574997 # 5 -3375 644 5 0.000000 9.838048 18.815001 58.225006 # 5 -3376 644 5 0.000000 11.067804 18.105000 58.225006 # 5 -3377 646 5 0.000000 11.067804 18.105000 61.574997 # 5 -3378 646 5 0.000000 9.838048 17.395000 61.574997 # 5 -3379 644 5 0.000000 12.297561 18.815001 58.225006 # 5 -3380 644 5 0.000000 13.527316 18.105000 58.225006 # 5 -3381 646 5 0.000000 13.527316 18.105000 61.574997 # 5 -3382 646 5 0.000000 12.297561 17.395000 61.574997 # 5 -3383 644 5 0.000000 14.757072 18.815001 58.225006 # 5 -3384 644 5 0.000000 15.986829 18.105000 58.225006 # 5 -3385 646 5 0.000000 15.986829 18.105000 61.574997 # 5 -3386 646 5 0.000000 14.757072 17.395000 61.574997 # 5 -3387 644 5 0.000000 17.216585 18.815001 58.225006 # 5 -3388 644 5 0.000000 18.446341 18.105000 58.225006 # 5 -3389 646 5 0.000000 18.446341 18.105000 61.574997 # 5 -3390 646 5 0.000000 17.216585 17.395000 61.574997 # 5 -3391 644 5 0.000000 19.676096 18.815001 58.225006 # 5 -3392 644 5 0.000000 20.905853 18.105000 58.225006 # 5 -3393 646 5 0.000000 20.905853 18.105000 61.574997 # 5 -3394 646 5 0.000000 19.676096 17.395000 61.574997 # 5 -3395 644 5 0.000000 22.135609 18.815001 58.225006 # 5 -3396 644 5 0.000000 23.365364 18.105000 58.225006 # 5 -3397 646 5 0.000000 23.365364 18.105000 61.574997 # 5 -3398 646 5 0.000000 22.135609 17.395000 61.574997 # 5 -3399 644 5 0.000000 24.595121 18.815001 58.225006 # 5 -3400 644 5 0.000000 25.824877 18.105000 58.225006 # 5 -3401 646 5 0.000000 25.824877 18.105000 61.574997 # 5 -3402 646 5 0.000000 24.595121 17.395000 61.574997 # 5 -3403 644 5 0.000000 27.054632 18.815001 58.225006 # 5 -3404 644 5 0.000000 28.284389 18.105000 58.225006 # 5 -3405 646 5 0.000000 28.284389 18.105000 61.574997 # 5 -3406 646 5 0.000000 27.054632 17.395000 61.574997 # 5 -3407 644 5 0.000000 29.514145 18.815001 58.225006 # 5 -3408 644 5 0.000000 30.743900 18.105000 58.225006 # 5 -3409 646 5 0.000000 30.743900 18.105000 61.574997 # 5 -3410 646 5 0.000000 29.514145 17.395000 61.574997 # 5 -3411 644 5 0.000000 31.973658 18.815001 58.225006 # 5 -3412 646 5 0.000000 31.973658 17.395000 61.574997 # 5 -3413 644 5 0.000000 1.229756 20.945002 58.225006 # 5 -3414 644 5 0.000000 2.459512 20.235001 58.225006 # 5 -3415 646 5 0.000000 2.459512 20.235001 61.574997 # 5 -3416 646 5 0.000000 1.229756 19.525000 61.574997 # 5 -3417 644 5 0.000000 3.689268 20.945002 58.225006 # 5 -3418 644 5 0.000000 4.919024 20.235001 58.225006 # 5 -3419 646 5 0.000000 4.919024 20.235001 61.574997 # 5 -3420 646 5 0.000000 3.689268 19.525000 61.574997 # 5 -3421 644 5 0.000000 6.148780 20.945002 58.225006 # 5 -3422 644 5 0.000000 7.378536 20.235001 58.225006 # 5 -3423 646 5 0.000000 7.378536 20.235001 61.574997 # 5 -3424 646 5 0.000000 6.148780 19.525000 61.574997 # 5 -3425 644 5 0.000000 8.608293 20.945002 58.225006 # 5 -3426 644 5 0.000000 9.838048 20.235001 58.225006 # 5 -3427 646 5 0.000000 9.838048 20.235001 61.574997 # 5 -3428 646 5 0.000000 8.608293 19.525000 61.574997 # 5 -3429 644 5 0.000000 11.067804 20.945002 58.225006 # 5 -3430 644 5 0.000000 12.297561 20.235001 58.225006 # 5 -3431 646 5 0.000000 12.297561 20.235001 61.574997 # 5 -3432 646 5 0.000000 11.067804 19.525000 61.574997 # 5 -3433 644 5 0.000000 13.527316 20.945002 58.225006 # 5 -3434 644 5 0.000000 14.757072 20.235001 58.225006 # 5 -3435 646 5 0.000000 14.757072 20.235001 61.574997 # 5 -3436 646 5 0.000000 13.527316 19.525000 61.574997 # 5 -3437 644 5 0.000000 15.986829 20.945002 58.225006 # 5 -3438 644 5 0.000000 17.216585 20.235001 58.225006 # 5 -3439 646 5 0.000000 17.216585 20.235001 61.574997 # 5 -3440 646 5 0.000000 15.986829 19.525000 61.574997 # 5 -3441 644 5 0.000000 18.446341 20.945002 58.225006 # 5 -3442 644 5 0.000000 19.676096 20.235001 58.225006 # 5 -3443 646 5 0.000000 19.676096 20.235001 61.574997 # 5 -3444 646 5 0.000000 18.446341 19.525000 61.574997 # 5 -3445 644 5 0.000000 20.905853 20.945002 58.225006 # 5 -3446 644 5 0.000000 22.135609 20.235001 58.225006 # 5 -3447 646 5 0.000000 22.135609 20.235001 61.574997 # 5 -3448 646 5 0.000000 20.905853 19.525000 61.574997 # 5 -3449 644 5 0.000000 23.365364 20.945002 58.225006 # 5 -3450 644 5 0.000000 24.595121 20.235001 58.225006 # 5 -3451 646 5 0.000000 24.595121 20.235001 61.574997 # 5 -3452 646 5 0.000000 23.365364 19.525000 61.574997 # 5 -3453 644 5 0.000000 25.824877 20.945002 58.225006 # 5 -3454 644 5 0.000000 27.054632 20.235001 58.225006 # 5 -3455 646 5 0.000000 27.054632 20.235001 61.574997 # 5 -3456 646 5 0.000000 25.824877 19.525000 61.574997 # 5 -3457 644 5 0.000000 28.284389 20.945002 58.225006 # 5 -3458 644 5 0.000000 29.514145 20.235001 58.225006 # 5 -3459 646 5 0.000000 29.514145 20.235001 61.574997 # 5 -3460 646 5 0.000000 28.284389 19.525000 61.574997 # 5 -3461 644 5 0.000000 30.743900 20.945002 58.225006 # 5 -3462 644 5 0.000000 31.973658 20.235001 58.225006 # 5 -3463 646 5 0.000000 31.973658 20.235001 61.574997 # 5 -3464 646 5 0.000000 30.743900 19.525000 61.574997 # 5 -3465 644 5 0.000000 1.229756 22.365000 58.225006 # 5 -3466 646 5 0.000000 1.229756 22.365000 61.574997 # 5 -3467 644 5 0.000000 2.459512 23.075001 58.225006 # 5 -3468 644 5 0.000000 3.689268 22.365000 58.225006 # 5 -3469 646 5 0.000000 3.689268 22.365000 61.574997 # 5 -3470 646 5 0.000000 2.459512 21.655001 61.574997 # 5 -3471 644 5 0.000000 4.919024 23.075001 58.225006 # 5 -3472 644 5 0.000000 6.148780 22.365000 58.225006 # 5 -3473 646 5 0.000000 6.148780 22.365000 61.574997 # 5 -3474 646 5 0.000000 4.919024 21.655001 61.574997 # 5 -3475 644 5 0.000000 7.378536 23.075001 58.225006 # 5 -3476 644 5 0.000000 8.608293 22.365000 58.225006 # 5 -3477 646 5 0.000000 8.608293 22.365000 61.574997 # 5 -3478 646 5 0.000000 7.378536 21.655001 61.574997 # 5 -3479 644 5 0.000000 9.838048 23.075001 58.225006 # 5 -3480 644 5 0.000000 11.067804 22.365000 58.225006 # 5 -3481 646 5 0.000000 11.067804 22.365000 61.574997 # 5 -3482 646 5 0.000000 9.838048 21.655001 61.574997 # 5 -3483 644 5 0.000000 12.297561 23.075001 58.225006 # 5 -3484 644 5 0.000000 13.527316 22.365000 58.225006 # 5 -3485 646 5 0.000000 13.527316 22.365000 61.574997 # 5 -3486 646 5 0.000000 12.297561 21.655001 61.574997 # 5 -3487 644 5 0.000000 14.757072 23.075001 58.225006 # 5 -3488 644 5 0.000000 15.986829 22.365000 58.225006 # 5 -3489 646 5 0.000000 15.986829 22.365000 61.574997 # 5 -3490 646 5 0.000000 14.757072 21.655001 61.574997 # 5 -3491 644 5 0.000000 17.216585 23.075001 58.225006 # 5 -3492 644 5 0.000000 18.446341 22.365000 58.225006 # 5 -3493 646 5 0.000000 18.446341 22.365000 61.574997 # 5 -3494 646 5 0.000000 17.216585 21.655001 61.574997 # 5 -3495 644 5 0.000000 19.676096 23.075001 58.225006 # 5 -3496 644 5 0.000000 20.905853 22.365000 58.225006 # 5 -3497 646 5 0.000000 20.905853 22.365000 61.574997 # 5 -3498 646 5 0.000000 19.676096 21.655001 61.574997 # 5 -3499 644 5 0.000000 22.135609 23.075001 58.225006 # 5 -3500 644 5 0.000000 23.365364 22.365000 58.225006 # 5 -3501 646 5 0.000000 23.365364 22.365000 61.574997 # 5 -3502 646 5 0.000000 22.135609 21.655001 61.574997 # 5 -3503 644 5 0.000000 24.595121 23.075001 58.225006 # 5 -3504 644 5 0.000000 25.824877 22.365000 58.225006 # 5 -3505 646 5 0.000000 25.824877 22.365000 61.574997 # 5 -3506 646 5 0.000000 24.595121 21.655001 61.574997 # 5 -3507 644 5 0.000000 27.054632 23.075001 58.225006 # 5 -3508 644 5 0.000000 28.284389 22.365000 58.225006 # 5 -3509 646 5 0.000000 28.284389 22.365000 61.574997 # 5 -3510 646 5 0.000000 27.054632 21.655001 61.574997 # 5 -3511 644 5 0.000000 29.514145 23.075001 58.225006 # 5 -3512 644 5 0.000000 30.743900 22.365000 58.225006 # 5 -3513 646 5 0.000000 30.743900 22.365000 61.574997 # 5 -3514 646 5 0.000000 29.514145 21.655001 61.574997 # 5 -3515 644 5 0.000000 31.973658 23.075001 58.225006 # 5 -3516 646 5 0.000000 31.973658 21.655001 61.574997 # 5 -3517 644 5 0.000000 1.229756 25.205000 58.225006 # 5 -3518 644 5 0.000000 2.459512 24.495001 58.225006 # 5 -3519 646 5 0.000000 2.459512 24.495001 61.574997 # 5 -3520 646 5 0.000000 1.229756 23.785000 61.574997 # 5 -3521 644 5 0.000000 3.689268 25.205000 58.225006 # 5 -3522 644 5 0.000000 4.919024 24.495001 58.225006 # 5 -3523 646 5 0.000000 4.919024 24.495001 61.574997 # 5 -3524 646 5 0.000000 3.689268 23.785000 61.574997 # 5 -3525 644 5 0.000000 6.148780 25.205000 58.225006 # 5 -3526 644 5 0.000000 7.378536 24.495001 58.225006 # 5 -3527 646 5 0.000000 7.378536 24.495001 61.574997 # 5 -3528 646 5 0.000000 6.148780 23.785000 61.574997 # 5 -3529 644 5 0.000000 8.608293 25.205000 58.225006 # 5 -3530 644 5 0.000000 9.838048 24.495001 58.225006 # 5 -3531 646 5 0.000000 9.838048 24.495001 61.574997 # 5 -3532 646 5 0.000000 8.608293 23.785000 61.574997 # 5 -3533 644 5 0.000000 11.067804 25.205000 58.225006 # 5 -3534 644 5 0.000000 12.297561 24.495001 58.225006 # 5 -3535 646 5 0.000000 12.297561 24.495001 61.574997 # 5 -3536 646 5 0.000000 11.067804 23.785000 61.574997 # 5 -3537 644 5 0.000000 13.527316 25.205000 58.225006 # 5 -3538 644 5 0.000000 14.757072 24.495001 58.225006 # 5 -3539 646 5 0.000000 14.757072 24.495001 61.574997 # 5 -3540 646 5 0.000000 13.527316 23.785000 61.574997 # 5 -3541 644 5 0.000000 15.986829 25.205000 58.225006 # 5 -3542 644 5 0.000000 17.216585 24.495001 58.225006 # 5 -3543 646 5 0.000000 17.216585 24.495001 61.574997 # 5 -3544 646 5 0.000000 15.986829 23.785000 61.574997 # 5 -3545 644 5 0.000000 18.446341 25.205000 58.225006 # 5 -3546 644 5 0.000000 19.676096 24.495001 58.225006 # 5 -3547 646 5 0.000000 19.676096 24.495001 61.574997 # 5 -3548 646 5 0.000000 18.446341 23.785000 61.574997 # 5 -3549 644 5 0.000000 20.905853 25.205000 58.225006 # 5 -3550 644 5 0.000000 22.135609 24.495001 58.225006 # 5 -3551 646 5 0.000000 22.135609 24.495001 61.574997 # 5 -3552 646 5 0.000000 20.905853 23.785000 61.574997 # 5 -3553 644 5 0.000000 23.365364 25.205000 58.225006 # 5 -3554 644 5 0.000000 24.595121 24.495001 58.225006 # 5 -3555 646 5 0.000000 24.595121 24.495001 61.574997 # 5 -3556 646 5 0.000000 23.365364 23.785000 61.574997 # 5 -3557 644 5 0.000000 25.824877 25.205000 58.225006 # 5 -3558 644 5 0.000000 27.054632 24.495001 58.225006 # 5 -3559 646 5 0.000000 27.054632 24.495001 61.574997 # 5 -3560 646 5 0.000000 25.824877 23.785000 61.574997 # 5 -3561 644 5 0.000000 28.284389 25.205000 58.225006 # 5 -3562 644 5 0.000000 29.514145 24.495001 58.225006 # 5 -3563 646 5 0.000000 29.514145 24.495001 61.574997 # 5 -3564 646 5 0.000000 28.284389 23.785000 61.574997 # 5 -3565 644 5 0.000000 30.743900 25.205000 58.225006 # 5 -3566 644 5 0.000000 31.973658 24.495001 58.225006 # 5 -3567 646 5 0.000000 31.973658 24.495001 61.574997 # 5 -3568 646 5 0.000000 30.743900 23.785000 61.574997 # 5 -3569 644 5 0.000000 1.229756 26.625000 58.225006 # 5 -3570 646 5 0.000000 1.229756 26.625000 61.574997 # 5 -3571 644 5 0.000000 2.459512 27.335001 58.225006 # 5 -3572 644 5 0.000000 3.689268 26.625000 58.225006 # 5 -3573 646 5 0.000000 3.689268 26.625000 61.574997 # 5 -3574 646 5 0.000000 2.459512 25.915003 61.574997 # 5 -3575 644 5 0.000000 4.919024 27.335001 58.225006 # 5 -3576 644 5 0.000000 6.148780 26.625000 58.225006 # 5 -3577 646 5 0.000000 6.148780 26.625000 61.574997 # 5 -3578 646 5 0.000000 4.919024 25.915003 61.574997 # 5 -3579 644 5 0.000000 7.378536 27.335001 58.225006 # 5 -3580 644 5 0.000000 8.608293 26.625000 58.225006 # 5 -3581 646 5 0.000000 8.608293 26.625000 61.574997 # 5 -3582 646 5 0.000000 7.378536 25.915003 61.574997 # 5 -3583 644 5 0.000000 9.838048 27.335001 58.225006 # 5 -3584 644 5 0.000000 11.067804 26.625000 58.225006 # 5 -3585 646 5 0.000000 11.067804 26.625000 61.574997 # 5 -3586 646 5 0.000000 9.838048 25.915003 61.574997 # 5 -3587 644 5 0.000000 12.297561 27.335001 58.225006 # 5 -3588 644 5 0.000000 13.527316 26.625000 58.225006 # 5 -3589 646 5 0.000000 13.527316 26.625000 61.574997 # 5 -3590 646 5 0.000000 12.297561 25.915003 61.574997 # 5 -3591 644 5 0.000000 14.757072 27.335001 58.225006 # 5 -3592 644 5 0.000000 15.986829 26.625000 58.225006 # 5 -3593 646 5 0.000000 15.986829 26.625000 61.574997 # 5 -3594 646 5 0.000000 14.757072 25.915003 61.574997 # 5 -3595 644 5 0.000000 17.216585 27.335001 58.225006 # 5 -3596 644 5 0.000000 18.446341 26.625000 58.225006 # 5 -3597 646 5 0.000000 18.446341 26.625000 61.574997 # 5 -3598 646 5 0.000000 17.216585 25.915003 61.574997 # 5 -3599 644 5 0.000000 19.676096 27.335001 58.225006 # 5 -3600 644 5 0.000000 20.905853 26.625000 58.225006 # 5 -3601 646 5 0.000000 20.905853 26.625000 61.574997 # 5 -3602 646 5 0.000000 19.676096 25.915003 61.574997 # 5 -3603 644 5 0.000000 22.135609 27.335001 58.225006 # 5 -3604 644 5 0.000000 23.365364 26.625000 58.225006 # 5 -3605 646 5 0.000000 23.365364 26.625000 61.574997 # 5 -3606 646 5 0.000000 22.135609 25.915003 61.574997 # 5 -3607 644 5 0.000000 24.595121 27.335001 58.225006 # 5 -3608 644 5 0.000000 25.824877 26.625000 58.225006 # 5 -3609 646 5 0.000000 25.824877 26.625000 61.574997 # 5 -3610 646 5 0.000000 24.595121 25.915003 61.574997 # 5 -3611 644 5 0.000000 27.054632 27.335001 58.225006 # 5 -3612 644 5 0.000000 28.284389 26.625000 58.225006 # 5 -3613 646 5 0.000000 28.284389 26.625000 61.574997 # 5 -3614 646 5 0.000000 27.054632 25.915003 61.574997 # 5 -3615 644 5 0.000000 29.514145 27.335001 58.225006 # 5 -3616 644 5 0.000000 30.743900 26.625000 58.225006 # 5 -3617 646 5 0.000000 30.743900 26.625000 61.574997 # 5 -3618 646 5 0.000000 29.514145 25.915003 61.574997 # 5 -3619 644 5 0.000000 31.973658 27.335001 58.225006 # 5 -3620 646 5 0.000000 31.973658 25.915003 61.574997 # 5 -3621 644 5 0.000000 1.229756 29.465000 58.225006 # 5 -3622 644 5 0.000000 2.459512 28.754999 58.225006 # 5 -3623 646 5 0.000000 2.459512 28.754999 61.574997 # 5 -3624 646 5 0.000000 1.229756 28.045000 61.574997 # 5 -3625 644 5 0.000000 3.689268 29.465000 58.225006 # 5 -3626 644 5 0.000000 4.919024 28.754999 58.225006 # 5 -3627 646 5 0.000000 4.919024 28.754999 61.574997 # 5 -3628 646 5 0.000000 3.689268 28.045000 61.574997 # 5 -3629 644 5 0.000000 6.148780 29.465000 58.225006 # 5 -3630 644 5 0.000000 7.378536 28.754999 58.225006 # 5 -3631 646 5 0.000000 7.378536 28.754999 61.574997 # 5 -3632 646 5 0.000000 6.148780 28.045000 61.574997 # 5 -3633 644 5 0.000000 8.608293 29.465000 58.225006 # 5 -3634 644 5 0.000000 9.838048 28.754999 58.225006 # 5 -3635 646 5 0.000000 9.838048 28.754999 61.574997 # 5 -3636 646 5 0.000000 8.608293 28.045000 61.574997 # 5 -3637 644 5 0.000000 11.067804 29.465000 58.225006 # 5 -3638 644 5 0.000000 12.297561 28.754999 58.225006 # 5 -3639 646 5 0.000000 12.297561 28.754999 61.574997 # 5 -3640 646 5 0.000000 11.067804 28.045000 61.574997 # 5 -3641 644 5 0.000000 13.527316 29.465000 58.225006 # 5 -3642 644 5 0.000000 14.757072 28.754999 58.225006 # 5 -3643 646 5 0.000000 14.757072 28.754999 61.574997 # 5 -3644 646 5 0.000000 13.527316 28.045000 61.574997 # 5 -3645 644 5 0.000000 15.986829 29.465000 58.225006 # 5 -3646 644 5 0.000000 17.216585 28.754999 58.225006 # 5 -3647 646 5 0.000000 17.216585 28.754999 61.574997 # 5 -3648 646 5 0.000000 15.986829 28.045000 61.574997 # 5 -3649 644 5 0.000000 18.446341 29.465000 58.225006 # 5 -3650 644 5 0.000000 19.676096 28.754999 58.225006 # 5 -3651 646 5 0.000000 19.676096 28.754999 61.574997 # 5 -3652 646 5 0.000000 18.446341 28.045000 61.574997 # 5 -3653 644 5 0.000000 20.905853 29.465000 58.225006 # 5 -3654 644 5 0.000000 22.135609 28.754999 58.225006 # 5 -3655 646 5 0.000000 22.135609 28.754999 61.574997 # 5 -3656 646 5 0.000000 20.905853 28.045000 61.574997 # 5 -3657 644 5 0.000000 23.365364 29.465000 58.225006 # 5 -3658 644 5 0.000000 24.595121 28.754999 58.225006 # 5 -3659 646 5 0.000000 24.595121 28.754999 61.574997 # 5 -3660 646 5 0.000000 23.365364 28.045000 61.574997 # 5 -3661 644 5 0.000000 25.824877 29.465000 58.225006 # 5 -3662 644 5 0.000000 27.054632 28.754999 58.225006 # 5 -3663 646 5 0.000000 27.054632 28.754999 61.574997 # 5 -3664 646 5 0.000000 25.824877 28.045000 61.574997 # 5 -3665 644 5 0.000000 28.284389 29.465000 58.225006 # 5 -3666 644 5 0.000000 29.514145 28.754999 58.225006 # 5 -3667 646 5 0.000000 29.514145 28.754999 61.574997 # 5 -3668 646 5 0.000000 28.284389 28.045000 61.574997 # 5 -3669 644 5 0.000000 30.743900 29.465000 58.225006 # 5 -3670 644 5 0.000000 31.973658 28.754999 58.225006 # 5 -3671 646 5 0.000000 31.973658 28.754999 61.574997 # 5 -3672 646 5 0.000000 30.743900 28.045000 61.574997 # 5 -3673 644 5 0.000000 1.229756 30.885000 58.225006 # 5 -3674 646 5 0.000000 1.229756 30.885000 61.574997 # 5 -3675 644 5 0.000000 2.459512 31.594999 58.225006 # 5 -3676 644 5 0.000000 3.689268 30.885000 58.225006 # 5 -3677 646 5 0.000000 3.689268 30.885000 61.574997 # 5 -3678 646 5 0.000000 2.459512 30.174999 61.574997 # 5 -3679 644 5 0.000000 4.919024 31.594999 58.225006 # 5 -3680 644 5 0.000000 6.148780 30.885000 58.225006 # 5 -3681 646 5 0.000000 6.148780 30.885000 61.574997 # 5 -3682 646 5 0.000000 4.919024 30.174999 61.574997 # 5 -3683 644 5 0.000000 7.378536 31.594999 58.225006 # 5 -3684 644 5 0.000000 8.608293 30.885000 58.225006 # 5 -3685 646 5 0.000000 8.608293 30.885000 61.574997 # 5 -3686 646 5 0.000000 7.378536 30.174999 61.574997 # 5 -3687 644 5 0.000000 9.838048 31.594999 58.225006 # 5 -3688 644 5 0.000000 11.067804 30.885000 58.225006 # 5 -3689 646 5 0.000000 11.067804 30.885000 61.574997 # 5 -3690 646 5 0.000000 9.838048 30.174999 61.574997 # 5 -3691 644 5 0.000000 12.297561 31.594999 58.225006 # 5 -3692 644 5 0.000000 13.527316 30.885000 58.225006 # 5 -3693 646 5 0.000000 13.527316 30.885000 61.574997 # 5 -3694 646 5 0.000000 12.297561 30.174999 61.574997 # 5 -3695 644 5 0.000000 14.757072 31.594999 58.225006 # 5 -3696 644 5 0.000000 15.986829 30.885000 58.225006 # 5 -3697 646 5 0.000000 15.986829 30.885000 61.574997 # 5 -3698 646 5 0.000000 14.757072 30.174999 61.574997 # 5 -3699 644 5 0.000000 17.216585 31.594999 58.225006 # 5 -3700 644 5 0.000000 18.446341 30.885000 58.225006 # 5 -3701 646 5 0.000000 18.446341 30.885000 61.574997 # 5 -3702 646 5 0.000000 17.216585 30.174999 61.574997 # 5 -3703 644 5 0.000000 19.676096 31.594999 58.225006 # 5 -3704 644 5 0.000000 20.905853 30.885000 58.225006 # 5 -3705 646 5 0.000000 20.905853 30.885000 61.574997 # 5 -3706 646 5 0.000000 19.676096 30.174999 61.574997 # 5 -3707 644 5 0.000000 22.135609 31.594999 58.225006 # 5 -3708 644 5 0.000000 23.365364 30.885000 58.225006 # 5 -3709 646 5 0.000000 23.365364 30.885000 61.574997 # 5 -3710 646 5 0.000000 22.135609 30.174999 61.574997 # 5 -3711 644 5 0.000000 24.595121 31.594999 58.225006 # 5 -3712 644 5 0.000000 25.824877 30.885000 58.225006 # 5 -3713 646 5 0.000000 25.824877 30.885000 61.574997 # 5 -3714 646 5 0.000000 24.595121 30.174999 61.574997 # 5 -3715 644 5 0.000000 27.054632 31.594999 58.225006 # 5 -3716 644 5 0.000000 28.284389 30.885000 58.225006 # 5 -3717 646 5 0.000000 28.284389 30.885000 61.574997 # 5 -3718 646 5 0.000000 27.054632 30.174999 61.574997 # 5 -3719 644 5 0.000000 29.514145 31.594999 58.225006 # 5 -3720 644 5 0.000000 30.743900 30.885000 58.225006 # 5 -3721 646 5 0.000000 30.743900 30.885000 61.574997 # 5 -3722 646 5 0.000000 29.514145 30.174999 61.574997 # 5 -3723 644 5 0.000000 31.973658 31.594999 58.225006 # 5 -3724 646 5 0.000000 31.973658 30.174999 61.574997 # 5 -3725 644 5 0.000000 1.229756 33.724998 58.225006 # 5 -3726 644 5 0.000000 2.459512 33.014999 58.225006 # 5 -3727 646 5 0.000000 2.459512 33.014999 61.574997 # 5 -3728 646 5 0.000000 1.229756 32.305000 61.574997 # 5 -3729 644 5 0.000000 3.689268 33.724998 58.225006 # 5 -3730 644 5 0.000000 4.919024 33.014999 58.225006 # 5 -3731 646 5 0.000000 4.919024 33.014999 61.574997 # 5 -3732 646 5 0.000000 3.689268 32.305000 61.574997 # 5 -3733 644 5 0.000000 6.148780 33.724998 58.225006 # 5 -3734 644 5 0.000000 7.378536 33.014999 58.225006 # 5 -3735 646 5 0.000000 7.378536 33.014999 61.574997 # 5 -3736 646 5 0.000000 6.148780 32.305000 61.574997 # 5 -3737 644 5 0.000000 8.608293 33.724998 58.225006 # 5 -3738 644 5 0.000000 9.838048 33.014999 58.225006 # 5 -3739 646 5 0.000000 9.838048 33.014999 61.574997 # 5 -3740 646 5 0.000000 8.608293 32.305000 61.574997 # 5 -3741 644 5 0.000000 11.067804 33.724998 58.225006 # 5 -3742 644 5 0.000000 12.297561 33.014999 58.225006 # 5 -3743 646 5 0.000000 12.297561 33.014999 61.574997 # 5 -3744 646 5 0.000000 11.067804 32.305000 61.574997 # 5 -3745 644 5 0.000000 13.527316 33.724998 58.225006 # 5 -3746 644 5 0.000000 14.757072 33.014999 58.225006 # 5 -3747 646 5 0.000000 14.757072 33.014999 61.574997 # 5 -3748 646 5 0.000000 13.527316 32.305000 61.574997 # 5 -3749 644 5 0.000000 15.986829 33.724998 58.225006 # 5 -3750 644 5 0.000000 17.216585 33.014999 58.225006 # 5 -3751 646 5 0.000000 17.216585 33.014999 61.574997 # 5 -3752 646 5 0.000000 15.986829 32.305000 61.574997 # 5 -3753 644 5 0.000000 18.446341 33.724998 58.225006 # 5 -3754 644 5 0.000000 19.676096 33.014999 58.225006 # 5 -3755 646 5 0.000000 19.676096 33.014999 61.574997 # 5 -3756 646 5 0.000000 18.446341 32.305000 61.574997 # 5 -3757 644 5 0.000000 20.905853 33.724998 58.225006 # 5 -3758 644 5 0.000000 22.135609 33.014999 58.225006 # 5 -3759 646 5 0.000000 22.135609 33.014999 61.574997 # 5 -3760 646 5 0.000000 20.905853 32.305000 61.574997 # 5 -3761 644 5 0.000000 23.365364 33.724998 58.225006 # 5 -3762 644 5 0.000000 24.595121 33.014999 58.225006 # 5 -3763 646 5 0.000000 24.595121 33.014999 61.574997 # 5 -3764 646 5 0.000000 23.365364 32.305000 61.574997 # 5 -3765 644 5 0.000000 25.824877 33.724998 58.225006 # 5 -3766 644 5 0.000000 27.054632 33.014999 58.225006 # 5 -3767 646 5 0.000000 27.054632 33.014999 61.574997 # 5 -3768 646 5 0.000000 25.824877 32.305000 61.574997 # 5 -3769 644 5 0.000000 28.284389 33.724998 58.225006 # 5 -3770 644 5 0.000000 29.514145 33.014999 58.225006 # 5 -3771 646 5 0.000000 29.514145 33.014999 61.574997 # 5 -3772 646 5 0.000000 28.284389 32.305000 61.574997 # 5 -3773 644 5 0.000000 30.743900 33.724998 58.225006 # 5 -3774 644 5 0.000000 31.973658 33.014999 58.225006 # 5 -3775 646 5 0.000000 31.973658 33.014999 61.574997 # 5 -3776 646 5 0.000000 30.743900 32.305000 61.574997 # 5 +2945 644 6 0.000000 1.229756 1.065000 58.225006 # 5 +2946 646 6 0.000000 1.229756 1.065000 61.574997 # 5 +2947 644 6 0.000000 2.459512 1.775000 58.225006 # 5 +2948 644 6 0.000000 3.689268 1.065000 58.225006 # 5 +2949 646 6 0.000000 3.689268 1.065000 61.574997 # 5 +2950 646 6 0.000000 2.459512 0.355000 61.574997 # 5 +2951 644 6 0.000000 4.919024 1.775000 58.225006 # 5 +2952 644 6 0.000000 6.148780 1.065000 58.225006 # 5 +2953 646 6 0.000000 6.148780 1.065000 61.574997 # 5 +2954 646 6 0.000000 4.919024 0.355000 61.574997 # 5 +2955 644 6 0.000000 7.378536 1.775000 58.225006 # 5 +2956 644 6 0.000000 8.608293 1.065000 58.225006 # 5 +2957 646 6 0.000000 8.608293 1.065000 61.574997 # 5 +2958 646 6 0.000000 7.378536 0.355000 61.574997 # 5 +2959 644 6 0.000000 9.838048 1.775000 58.225006 # 5 +2960 644 6 0.000000 11.067804 1.065000 58.225006 # 5 +2961 646 6 0.000000 11.067804 1.065000 61.574997 # 5 +2962 646 6 0.000000 9.838048 0.355000 61.574997 # 5 +2963 644 6 0.000000 12.297561 1.775000 58.225006 # 5 +2964 644 6 0.000000 13.527316 1.065000 58.225006 # 5 +2965 646 6 0.000000 13.527316 1.065000 61.574997 # 5 +2966 646 6 0.000000 12.297561 0.355000 61.574997 # 5 +2967 644 6 0.000000 14.757072 1.775000 58.225006 # 5 +2968 644 6 0.000000 15.986829 1.065000 58.225006 # 5 +2969 646 6 0.000000 15.986829 1.065000 61.574997 # 5 +2970 646 6 0.000000 14.757072 0.355000 61.574997 # 5 +2971 644 6 0.000000 17.216585 1.775000 58.225006 # 5 +2972 644 6 0.000000 18.446341 1.065000 58.225006 # 5 +2973 646 6 0.000000 18.446341 1.065000 61.574997 # 5 +2974 646 6 0.000000 17.216585 0.355000 61.574997 # 5 +2975 644 6 0.000000 19.676096 1.775000 58.225006 # 5 +2976 644 6 0.000000 20.905853 1.065000 58.225006 # 5 +2977 646 6 0.000000 20.905853 1.065000 61.574997 # 5 +2978 646 6 0.000000 19.676096 0.355000 61.574997 # 5 +2979 644 6 0.000000 22.135609 1.775000 58.225006 # 5 +2980 644 6 0.000000 23.365364 1.065000 58.225006 # 5 +2981 646 6 0.000000 23.365364 1.065000 61.574997 # 5 +2982 646 6 0.000000 22.135609 0.355000 61.574997 # 5 +2983 644 6 0.000000 24.595121 1.775000 58.225006 # 5 +2984 644 6 0.000000 25.824877 1.065000 58.225006 # 5 +2985 646 6 0.000000 25.824877 1.065000 61.574997 # 5 +2986 646 6 0.000000 24.595121 0.355000 61.574997 # 5 +2987 644 6 0.000000 27.054632 1.775000 58.225006 # 5 +2988 644 6 0.000000 28.284389 1.065000 58.225006 # 5 +2989 646 6 0.000000 28.284389 1.065000 61.574997 # 5 +2990 646 6 0.000000 27.054632 0.355000 61.574997 # 5 +2991 644 6 0.000000 29.514145 1.775000 58.225006 # 5 +2992 644 6 0.000000 30.743900 1.065000 58.225006 # 5 +2993 646 6 0.000000 30.743900 1.065000 61.574997 # 5 +2994 646 6 0.000000 29.514145 0.355000 61.574997 # 5 +2995 644 6 0.000000 31.973658 1.775000 58.225006 # 5 +2996 646 6 0.000000 31.973658 0.355000 61.574997 # 5 +2997 644 6 0.000000 1.229756 3.905000 58.225006 # 5 +2998 644 6 0.000000 2.459512 3.195000 58.225006 # 5 +2999 646 6 0.000000 2.459512 3.195000 61.574997 # 5 +3000 646 6 0.000000 1.229756 2.485000 61.574997 # 5 +3001 644 6 0.000000 3.689268 3.905000 58.225006 # 5 +3002 644 6 0.000000 4.919024 3.195000 58.225006 # 5 +3003 646 6 0.000000 4.919024 3.195000 61.574997 # 5 +3004 646 6 0.000000 3.689268 2.485000 61.574997 # 5 +3005 644 6 0.000000 6.148780 3.905000 58.225006 # 5 +3006 644 6 0.000000 7.378536 3.195000 58.225006 # 5 +3007 646 6 0.000000 7.378536 3.195000 61.574997 # 5 +3008 646 6 0.000000 6.148780 2.485000 61.574997 # 5 +3009 644 6 0.000000 8.608293 3.905000 58.225006 # 5 +3010 644 6 0.000000 9.838048 3.195000 58.225006 # 5 +3011 646 6 0.000000 9.838048 3.195000 61.574997 # 5 +3012 646 6 0.000000 8.608293 2.485000 61.574997 # 5 +3013 644 6 0.000000 11.067804 3.905000 58.225006 # 5 +3014 644 6 0.000000 12.297561 3.195000 58.225006 # 5 +3015 646 6 0.000000 12.297561 3.195000 61.574997 # 5 +3016 646 6 0.000000 11.067804 2.485000 61.574997 # 5 +3017 644 6 0.000000 13.527316 3.905000 58.225006 # 5 +3018 644 6 0.000000 14.757072 3.195000 58.225006 # 5 +3019 646 6 0.000000 14.757072 3.195000 61.574997 # 5 +3020 646 6 0.000000 13.527316 2.485000 61.574997 # 5 +3021 644 6 0.000000 15.986829 3.905000 58.225006 # 5 +3022 644 6 0.000000 17.216585 3.195000 58.225006 # 5 +3023 646 6 0.000000 17.216585 3.195000 61.574997 # 5 +3024 646 6 0.000000 15.986829 2.485000 61.574997 # 5 +3025 644 6 0.000000 18.446341 3.905000 58.225006 # 5 +3026 644 6 0.000000 19.676096 3.195000 58.225006 # 5 +3027 646 6 0.000000 19.676096 3.195000 61.574997 # 5 +3028 646 6 0.000000 18.446341 2.485000 61.574997 # 5 +3029 644 6 0.000000 20.905853 3.905000 58.225006 # 5 +3030 644 6 0.000000 22.135609 3.195000 58.225006 # 5 +3031 646 6 0.000000 22.135609 3.195000 61.574997 # 5 +3032 646 6 0.000000 20.905853 2.485000 61.574997 # 5 +3033 644 6 0.000000 23.365364 3.905000 58.225006 # 5 +3034 644 6 0.000000 24.595121 3.195000 58.225006 # 5 +3035 646 6 0.000000 24.595121 3.195000 61.574997 # 5 +3036 646 6 0.000000 23.365364 2.485000 61.574997 # 5 +3037 644 6 0.000000 25.824877 3.905000 58.225006 # 5 +3038 644 6 0.000000 27.054632 3.195000 58.225006 # 5 +3039 646 6 0.000000 27.054632 3.195000 61.574997 # 5 +3040 646 6 0.000000 25.824877 2.485000 61.574997 # 5 +3041 644 6 0.000000 28.284389 3.905000 58.225006 # 5 +3042 644 6 0.000000 29.514145 3.195000 58.225006 # 5 +3043 646 6 0.000000 29.514145 3.195000 61.574997 # 5 +3044 646 6 0.000000 28.284389 2.485000 61.574997 # 5 +3045 644 6 0.000000 30.743900 3.905000 58.225006 # 5 +3046 644 6 0.000000 31.973658 3.195000 58.225006 # 5 +3047 646 6 0.000000 31.973658 3.195000 61.574997 # 5 +3048 646 6 0.000000 30.743900 2.485000 61.574997 # 5 +3049 644 6 0.000000 1.229756 5.325000 58.225006 # 5 +3050 646 6 0.000000 1.229756 5.325000 61.574997 # 5 +3051 644 6 0.000000 2.459512 6.035000 58.225006 # 5 +3052 644 6 0.000000 3.689268 5.325000 58.225006 # 5 +3053 646 6 0.000000 3.689268 5.325000 61.574997 # 5 +3054 646 6 0.000000 2.459512 4.615000 61.574997 # 5 +3055 644 6 0.000000 4.919024 6.035000 58.225006 # 5 +3056 644 6 0.000000 6.148780 5.325000 58.225006 # 5 +3057 646 6 0.000000 6.148780 5.325000 61.574997 # 5 +3058 646 6 0.000000 4.919024 4.615000 61.574997 # 5 +3059 644 6 0.000000 7.378536 6.035000 58.225006 # 5 +3060 644 6 0.000000 8.608293 5.325000 58.225006 # 5 +3061 646 6 0.000000 8.608293 5.325000 61.574997 # 5 +3062 646 6 0.000000 7.378536 4.615000 61.574997 # 5 +3063 644 6 0.000000 9.838048 6.035000 58.225006 # 5 +3064 644 6 0.000000 11.067804 5.325000 58.225006 # 5 +3065 646 6 0.000000 11.067804 5.325000 61.574997 # 5 +3066 646 6 0.000000 9.838048 4.615000 61.574997 # 5 +3067 644 6 0.000000 12.297561 6.035000 58.225006 # 5 +3068 644 6 0.000000 13.527316 5.325000 58.225006 # 5 +3069 646 6 0.000000 13.527316 5.325000 61.574997 # 5 +3070 646 6 0.000000 12.297561 4.615000 61.574997 # 5 +3071 644 6 0.000000 14.757072 6.035000 58.225006 # 5 +3072 644 6 0.000000 15.986829 5.325000 58.225006 # 5 +3073 646 6 0.000000 15.986829 5.325000 61.574997 # 5 +3074 646 6 0.000000 14.757072 4.615000 61.574997 # 5 +3075 644 6 0.000000 17.216585 6.035000 58.225006 # 5 +3076 644 6 0.000000 18.446341 5.325000 58.225006 # 5 +3077 646 6 0.000000 18.446341 5.325000 61.574997 # 5 +3078 646 6 0.000000 17.216585 4.615000 61.574997 # 5 +3079 644 6 0.000000 19.676096 6.035000 58.225006 # 5 +3080 644 6 0.000000 20.905853 5.325000 58.225006 # 5 +3081 646 6 0.000000 20.905853 5.325000 61.574997 # 5 +3082 646 6 0.000000 19.676096 4.615000 61.574997 # 5 +3083 644 6 0.000000 22.135609 6.035000 58.225006 # 5 +3084 644 6 0.000000 23.365364 5.325000 58.225006 # 5 +3085 646 6 0.000000 23.365364 5.325000 61.574997 # 5 +3086 646 6 0.000000 22.135609 4.615000 61.574997 # 5 +3087 644 6 0.000000 24.595121 6.035000 58.225006 # 5 +3088 644 6 0.000000 25.824877 5.325000 58.225006 # 5 +3089 646 6 0.000000 25.824877 5.325000 61.574997 # 5 +3090 646 6 0.000000 24.595121 4.615000 61.574997 # 5 +3091 644 6 0.000000 27.054632 6.035000 58.225006 # 5 +3092 644 6 0.000000 28.284389 5.325000 58.225006 # 5 +3093 646 6 0.000000 28.284389 5.325000 61.574997 # 5 +3094 646 6 0.000000 27.054632 4.615000 61.574997 # 5 +3095 644 6 0.000000 29.514145 6.035000 58.225006 # 5 +3096 644 6 0.000000 30.743900 5.325000 58.225006 # 5 +3097 646 6 0.000000 30.743900 5.325000 61.574997 # 5 +3098 646 6 0.000000 29.514145 4.615000 61.574997 # 5 +3099 644 6 0.000000 31.973658 6.035000 58.225006 # 5 +3100 646 6 0.000000 31.973658 4.615000 61.574997 # 5 +3101 644 6 0.000000 1.229756 8.165000 58.225006 # 5 +3102 644 6 0.000000 2.459512 7.455000 58.225006 # 5 +3103 646 6 0.000000 2.459512 7.455000 61.574997 # 5 +3104 646 6 0.000000 1.229756 6.745000 61.574997 # 5 +3105 644 6 0.000000 3.689268 8.165000 58.225006 # 5 +3106 644 6 0.000000 4.919024 7.455000 58.225006 # 5 +3107 646 6 0.000000 4.919024 7.455000 61.574997 # 5 +3108 646 6 0.000000 3.689268 6.745000 61.574997 # 5 +3109 644 6 0.000000 6.148780 8.165000 58.225006 # 5 +3110 644 6 0.000000 7.378536 7.455000 58.225006 # 5 +3111 646 6 0.000000 7.378536 7.455000 61.574997 # 5 +3112 646 6 0.000000 6.148780 6.745000 61.574997 # 5 +3113 644 6 0.000000 8.608293 8.165000 58.225006 # 5 +3114 644 6 0.000000 9.838048 7.455000 58.225006 # 5 +3115 646 6 0.000000 9.838048 7.455000 61.574997 # 5 +3116 646 6 0.000000 8.608293 6.745000 61.574997 # 5 +3117 644 6 0.000000 11.067804 8.165000 58.225006 # 5 +3118 644 6 0.000000 12.297561 7.455000 58.225006 # 5 +3119 646 6 0.000000 12.297561 7.455000 61.574997 # 5 +3120 646 6 0.000000 11.067804 6.745000 61.574997 # 5 +3121 644 6 0.000000 13.527316 8.165000 58.225006 # 5 +3122 644 6 0.000000 14.757072 7.455000 58.225006 # 5 +3123 646 6 0.000000 14.757072 7.455000 61.574997 # 5 +3124 646 6 0.000000 13.527316 6.745000 61.574997 # 5 +3125 644 6 0.000000 15.986829 8.165000 58.225006 # 5 +3126 644 6 0.000000 17.216585 7.455000 58.225006 # 5 +3127 646 6 0.000000 17.216585 7.455000 61.574997 # 5 +3128 646 6 0.000000 15.986829 6.745000 61.574997 # 5 +3129 644 6 0.000000 18.446341 8.165000 58.225006 # 5 +3130 644 6 0.000000 19.676096 7.455000 58.225006 # 5 +3131 646 6 0.000000 19.676096 7.455000 61.574997 # 5 +3132 646 6 0.000000 18.446341 6.745000 61.574997 # 5 +3133 644 6 0.000000 20.905853 8.165000 58.225006 # 5 +3134 644 6 0.000000 22.135609 7.455000 58.225006 # 5 +3135 646 6 0.000000 22.135609 7.455000 61.574997 # 5 +3136 646 6 0.000000 20.905853 6.745000 61.574997 # 5 +3137 644 6 0.000000 23.365364 8.165000 58.225006 # 5 +3138 644 6 0.000000 24.595121 7.455000 58.225006 # 5 +3139 646 6 0.000000 24.595121 7.455000 61.574997 # 5 +3140 646 6 0.000000 23.365364 6.745000 61.574997 # 5 +3141 644 6 0.000000 25.824877 8.165000 58.225006 # 5 +3142 644 6 0.000000 27.054632 7.455000 58.225006 # 5 +3143 646 6 0.000000 27.054632 7.455000 61.574997 # 5 +3144 646 6 0.000000 25.824877 6.745000 61.574997 # 5 +3145 644 6 0.000000 28.284389 8.165000 58.225006 # 5 +3146 644 6 0.000000 29.514145 7.455000 58.225006 # 5 +3147 646 6 0.000000 29.514145 7.455000 61.574997 # 5 +3148 646 6 0.000000 28.284389 6.745000 61.574997 # 5 +3149 644 6 0.000000 30.743900 8.165000 58.225006 # 5 +3150 644 6 0.000000 31.973658 7.455000 58.225006 # 5 +3151 646 6 0.000000 31.973658 7.455000 61.574997 # 5 +3152 646 6 0.000000 30.743900 6.745000 61.574997 # 5 +3153 644 6 0.000000 1.229756 9.585000 58.225006 # 5 +3154 646 6 0.000000 1.229756 9.585000 61.574997 # 5 +3155 644 6 0.000000 2.459512 10.295000 58.225006 # 5 +3156 644 6 0.000000 3.689268 9.585000 58.225006 # 5 +3157 646 6 0.000000 3.689268 9.585000 61.574997 # 5 +3158 646 6 0.000000 2.459512 8.875000 61.574997 # 5 +3159 644 6 0.000000 4.919024 10.295000 58.225006 # 5 +3160 644 6 0.000000 6.148780 9.585000 58.225006 # 5 +3161 646 6 0.000000 6.148780 9.585000 61.574997 # 5 +3162 646 6 0.000000 4.919024 8.875000 61.574997 # 5 +3163 644 6 0.000000 7.378536 10.295000 58.225006 # 5 +3164 644 6 0.000000 8.608293 9.585000 58.225006 # 5 +3165 646 6 0.000000 8.608293 9.585000 61.574997 # 5 +3166 646 6 0.000000 7.378536 8.875000 61.574997 # 5 +3167 644 6 0.000000 9.838048 10.295000 58.225006 # 5 +3168 644 6 0.000000 11.067804 9.585000 58.225006 # 5 +3169 646 6 0.000000 11.067804 9.585000 61.574997 # 5 +3170 646 6 0.000000 9.838048 8.875000 61.574997 # 5 +3171 644 6 0.000000 12.297561 10.295000 58.225006 # 5 +3172 644 6 0.000000 13.527316 9.585000 58.225006 # 5 +3173 646 6 0.000000 13.527316 9.585000 61.574997 # 5 +3174 646 6 0.000000 12.297561 8.875000 61.574997 # 5 +3175 644 6 0.000000 14.757072 10.295000 58.225006 # 5 +3176 644 6 0.000000 15.986829 9.585000 58.225006 # 5 +3177 646 6 0.000000 15.986829 9.585000 61.574997 # 5 +3178 646 6 0.000000 14.757072 8.875000 61.574997 # 5 +3179 644 6 0.000000 17.216585 10.295000 58.225006 # 5 +3180 644 6 0.000000 18.446341 9.585000 58.225006 # 5 +3181 646 6 0.000000 18.446341 9.585000 61.574997 # 5 +3182 646 6 0.000000 17.216585 8.875000 61.574997 # 5 +3183 644 6 0.000000 19.676096 10.295000 58.225006 # 5 +3184 644 6 0.000000 20.905853 9.585000 58.225006 # 5 +3185 646 6 0.000000 20.905853 9.585000 61.574997 # 5 +3186 646 6 0.000000 19.676096 8.875000 61.574997 # 5 +3187 644 6 0.000000 22.135609 10.295000 58.225006 # 5 +3188 644 6 0.000000 23.365364 9.585000 58.225006 # 5 +3189 646 6 0.000000 23.365364 9.585000 61.574997 # 5 +3190 646 6 0.000000 22.135609 8.875000 61.574997 # 5 +3191 644 6 0.000000 24.595121 10.295000 58.225006 # 5 +3192 644 6 0.000000 25.824877 9.585000 58.225006 # 5 +3193 646 6 0.000000 25.824877 9.585000 61.574997 # 5 +3194 646 6 0.000000 24.595121 8.875000 61.574997 # 5 +3195 644 6 0.000000 27.054632 10.295000 58.225006 # 5 +3196 644 6 0.000000 28.284389 9.585000 58.225006 # 5 +3197 646 6 0.000000 28.284389 9.585000 61.574997 # 5 +3198 646 6 0.000000 27.054632 8.875000 61.574997 # 5 +3199 644 6 0.000000 29.514145 10.295000 58.225006 # 5 +3200 644 6 0.000000 30.743900 9.585000 58.225006 # 5 +3201 646 6 0.000000 30.743900 9.585000 61.574997 # 5 +3202 646 6 0.000000 29.514145 8.875000 61.574997 # 5 +3203 644 6 0.000000 31.973658 10.295000 58.225006 # 5 +3204 646 6 0.000000 31.973658 8.875000 61.574997 # 5 +3205 644 6 0.000000 1.229756 12.425000 58.225006 # 5 +3206 644 6 0.000000 2.459512 11.715001 58.225006 # 5 +3207 646 6 0.000000 2.459512 11.715001 61.574997 # 5 +3208 646 6 0.000000 1.229756 11.005000 61.574997 # 5 +3209 644 6 0.000000 3.689268 12.425000 58.225006 # 5 +3210 644 6 0.000000 4.919024 11.715001 58.225006 # 5 +3211 646 6 0.000000 4.919024 11.715001 61.574997 # 5 +3212 646 6 0.000000 3.689268 11.005000 61.574997 # 5 +3213 644 6 0.000000 6.148780 12.425000 58.225006 # 5 +3214 644 6 0.000000 7.378536 11.715001 58.225006 # 5 +3215 646 6 0.000000 7.378536 11.715001 61.574997 # 5 +3216 646 6 0.000000 6.148780 11.005000 61.574997 # 5 +3217 644 6 0.000000 8.608293 12.425000 58.225006 # 5 +3218 644 6 0.000000 9.838048 11.715001 58.225006 # 5 +3219 646 6 0.000000 9.838048 11.715001 61.574997 # 5 +3220 646 6 0.000000 8.608293 11.005000 61.574997 # 5 +3221 644 6 0.000000 11.067804 12.425000 58.225006 # 5 +3222 644 6 0.000000 12.297561 11.715001 58.225006 # 5 +3223 646 6 0.000000 12.297561 11.715001 61.574997 # 5 +3224 646 6 0.000000 11.067804 11.005000 61.574997 # 5 +3225 644 6 0.000000 13.527316 12.425000 58.225006 # 5 +3226 644 6 0.000000 14.757072 11.715001 58.225006 # 5 +3227 646 6 0.000000 14.757072 11.715001 61.574997 # 5 +3228 646 6 0.000000 13.527316 11.005000 61.574997 # 5 +3229 644 6 0.000000 15.986829 12.425000 58.225006 # 5 +3230 644 6 0.000000 17.216585 11.715001 58.225006 # 5 +3231 646 6 0.000000 17.216585 11.715001 61.574997 # 5 +3232 646 6 0.000000 15.986829 11.005000 61.574997 # 5 +3233 644 6 0.000000 18.446341 12.425000 58.225006 # 5 +3234 644 6 0.000000 19.676096 11.715001 58.225006 # 5 +3235 646 6 0.000000 19.676096 11.715001 61.574997 # 5 +3236 646 6 0.000000 18.446341 11.005000 61.574997 # 5 +3237 644 6 0.000000 20.905853 12.425000 58.225006 # 5 +3238 644 6 0.000000 22.135609 11.715001 58.225006 # 5 +3239 646 6 0.000000 22.135609 11.715001 61.574997 # 5 +3240 646 6 0.000000 20.905853 11.005000 61.574997 # 5 +3241 644 6 0.000000 23.365364 12.425000 58.225006 # 5 +3242 644 6 0.000000 24.595121 11.715001 58.225006 # 5 +3243 646 6 0.000000 24.595121 11.715001 61.574997 # 5 +3244 646 6 0.000000 23.365364 11.005000 61.574997 # 5 +3245 644 6 0.000000 25.824877 12.425000 58.225006 # 5 +3246 644 6 0.000000 27.054632 11.715001 58.225006 # 5 +3247 646 6 0.000000 27.054632 11.715001 61.574997 # 5 +3248 646 6 0.000000 25.824877 11.005000 61.574997 # 5 +3249 644 6 0.000000 28.284389 12.425000 58.225006 # 5 +3250 644 6 0.000000 29.514145 11.715001 58.225006 # 5 +3251 646 6 0.000000 29.514145 11.715001 61.574997 # 5 +3252 646 6 0.000000 28.284389 11.005000 61.574997 # 5 +3253 644 6 0.000000 30.743900 12.425000 58.225006 # 5 +3254 644 6 0.000000 31.973658 11.715001 58.225006 # 5 +3255 646 6 0.000000 31.973658 11.715001 61.574997 # 5 +3256 646 6 0.000000 30.743900 11.005000 61.574997 # 5 +3257 644 6 0.000000 1.229756 13.845000 58.225006 # 5 +3258 646 6 0.000000 1.229756 13.845000 61.574997 # 5 +3259 644 6 0.000000 2.459512 14.555000 58.225006 # 5 +3260 644 6 0.000000 3.689268 13.845000 58.225006 # 5 +3261 646 6 0.000000 3.689268 13.845000 61.574997 # 5 +3262 646 6 0.000000 2.459512 13.135000 61.574997 # 5 +3263 644 6 0.000000 4.919024 14.555000 58.225006 # 5 +3264 644 6 0.000000 6.148780 13.845000 58.225006 # 5 +3265 646 6 0.000000 6.148780 13.845000 61.574997 # 5 +3266 646 6 0.000000 4.919024 13.135000 61.574997 # 5 +3267 644 6 0.000000 7.378536 14.555000 58.225006 # 5 +3268 644 6 0.000000 8.608293 13.845000 58.225006 # 5 +3269 646 6 0.000000 8.608293 13.845000 61.574997 # 5 +3270 646 6 0.000000 7.378536 13.135000 61.574997 # 5 +3271 644 6 0.000000 9.838048 14.555000 58.225006 # 5 +3272 644 6 0.000000 11.067804 13.845000 58.225006 # 5 +3273 646 6 0.000000 11.067804 13.845000 61.574997 # 5 +3274 646 6 0.000000 9.838048 13.135000 61.574997 # 5 +3275 644 6 0.000000 12.297561 14.555000 58.225006 # 5 +3276 644 6 0.000000 13.527316 13.845000 58.225006 # 5 +3277 646 6 0.000000 13.527316 13.845000 61.574997 # 5 +3278 646 6 0.000000 12.297561 13.135000 61.574997 # 5 +3279 644 6 0.000000 14.757072 14.555000 58.225006 # 5 +3280 644 6 0.000000 15.986829 13.845000 58.225006 # 5 +3281 646 6 0.000000 15.986829 13.845000 61.574997 # 5 +3282 646 6 0.000000 14.757072 13.135000 61.574997 # 5 +3283 644 6 0.000000 17.216585 14.555000 58.225006 # 5 +3284 644 6 0.000000 18.446341 13.845000 58.225006 # 5 +3285 646 6 0.000000 18.446341 13.845000 61.574997 # 5 +3286 646 6 0.000000 17.216585 13.135000 61.574997 # 5 +3287 644 6 0.000000 19.676096 14.555000 58.225006 # 5 +3288 644 6 0.000000 20.905853 13.845000 58.225006 # 5 +3289 646 6 0.000000 20.905853 13.845000 61.574997 # 5 +3290 646 6 0.000000 19.676096 13.135000 61.574997 # 5 +3291 644 6 0.000000 22.135609 14.555000 58.225006 # 5 +3292 644 6 0.000000 23.365364 13.845000 58.225006 # 5 +3293 646 6 0.000000 23.365364 13.845000 61.574997 # 5 +3294 646 6 0.000000 22.135609 13.135000 61.574997 # 5 +3295 644 6 0.000000 24.595121 14.555000 58.225006 # 5 +3296 644 6 0.000000 25.824877 13.845000 58.225006 # 5 +3297 646 6 0.000000 25.824877 13.845000 61.574997 # 5 +3298 646 6 0.000000 24.595121 13.135000 61.574997 # 5 +3299 644 6 0.000000 27.054632 14.555000 58.225006 # 5 +3300 644 6 0.000000 28.284389 13.845000 58.225006 # 5 +3301 646 6 0.000000 28.284389 13.845000 61.574997 # 5 +3302 646 6 0.000000 27.054632 13.135000 61.574997 # 5 +3303 644 6 0.000000 29.514145 14.555000 58.225006 # 5 +3304 644 6 0.000000 30.743900 13.845000 58.225006 # 5 +3305 646 6 0.000000 30.743900 13.845000 61.574997 # 5 +3306 646 6 0.000000 29.514145 13.135000 61.574997 # 5 +3307 644 6 0.000000 31.973658 14.555000 58.225006 # 5 +3308 646 6 0.000000 31.973658 13.135000 61.574997 # 5 +3309 644 6 0.000000 1.229756 16.684999 58.225006 # 5 +3310 644 6 0.000000 2.459512 15.975000 58.225006 # 5 +3311 646 6 0.000000 2.459512 15.975000 61.574997 # 5 +3312 646 6 0.000000 1.229756 15.265000 61.574997 # 5 +3313 644 6 0.000000 3.689268 16.684999 58.225006 # 5 +3314 644 6 0.000000 4.919024 15.975000 58.225006 # 5 +3315 646 6 0.000000 4.919024 15.975000 61.574997 # 5 +3316 646 6 0.000000 3.689268 15.265000 61.574997 # 5 +3317 644 6 0.000000 6.148780 16.684999 58.225006 # 5 +3318 644 6 0.000000 7.378536 15.975000 58.225006 # 5 +3319 646 6 0.000000 7.378536 15.975000 61.574997 # 5 +3320 646 6 0.000000 6.148780 15.265000 61.574997 # 5 +3321 644 6 0.000000 8.608293 16.684999 58.225006 # 5 +3322 644 6 0.000000 9.838048 15.975000 58.225006 # 5 +3323 646 6 0.000000 9.838048 15.975000 61.574997 # 5 +3324 646 6 0.000000 8.608293 15.265000 61.574997 # 5 +3325 644 6 0.000000 11.067804 16.684999 58.225006 # 5 +3326 644 6 0.000000 12.297561 15.975000 58.225006 # 5 +3327 646 6 0.000000 12.297561 15.975000 61.574997 # 5 +3328 646 6 0.000000 11.067804 15.265000 61.574997 # 5 +3329 644 6 0.000000 13.527316 16.684999 58.225006 # 5 +3330 644 6 0.000000 14.757072 15.975000 58.225006 # 5 +3331 646 6 0.000000 14.757072 15.975000 61.574997 # 5 +3332 646 6 0.000000 13.527316 15.265000 61.574997 # 5 +3333 644 6 0.000000 15.986829 16.684999 58.225006 # 5 +3334 644 6 0.000000 17.216585 15.975000 58.225006 # 5 +3335 646 6 0.000000 17.216585 15.975000 61.574997 # 5 +3336 646 6 0.000000 15.986829 15.265000 61.574997 # 5 +3337 644 6 0.000000 18.446341 16.684999 58.225006 # 5 +3338 644 6 0.000000 19.676096 15.975000 58.225006 # 5 +3339 646 6 0.000000 19.676096 15.975000 61.574997 # 5 +3340 646 6 0.000000 18.446341 15.265000 61.574997 # 5 +3341 644 6 0.000000 20.905853 16.684999 58.225006 # 5 +3342 644 6 0.000000 22.135609 15.975000 58.225006 # 5 +3343 646 6 0.000000 22.135609 15.975000 61.574997 # 5 +3344 646 6 0.000000 20.905853 15.265000 61.574997 # 5 +3345 644 6 0.000000 23.365364 16.684999 58.225006 # 5 +3346 644 6 0.000000 24.595121 15.975000 58.225006 # 5 +3347 646 6 0.000000 24.595121 15.975000 61.574997 # 5 +3348 646 6 0.000000 23.365364 15.265000 61.574997 # 5 +3349 644 6 0.000000 25.824877 16.684999 58.225006 # 5 +3350 644 6 0.000000 27.054632 15.975000 58.225006 # 5 +3351 646 6 0.000000 27.054632 15.975000 61.574997 # 5 +3352 646 6 0.000000 25.824877 15.265000 61.574997 # 5 +3353 644 6 0.000000 28.284389 16.684999 58.225006 # 5 +3354 644 6 0.000000 29.514145 15.975000 58.225006 # 5 +3355 646 6 0.000000 29.514145 15.975000 61.574997 # 5 +3356 646 6 0.000000 28.284389 15.265000 61.574997 # 5 +3357 644 6 0.000000 30.743900 16.684999 58.225006 # 5 +3358 644 6 0.000000 31.973658 15.975000 58.225006 # 5 +3359 646 6 0.000000 31.973658 15.975000 61.574997 # 5 +3360 646 6 0.000000 30.743900 15.265000 61.574997 # 5 +3361 644 6 0.000000 1.229756 18.105000 58.225006 # 5 +3362 646 6 0.000000 1.229756 18.105000 61.574997 # 5 +3363 644 6 0.000000 2.459512 18.815001 58.225006 # 5 +3364 644 6 0.000000 3.689268 18.105000 58.225006 # 5 +3365 646 6 0.000000 3.689268 18.105000 61.574997 # 5 +3366 646 6 0.000000 2.459512 17.395000 61.574997 # 5 +3367 644 6 0.000000 4.919024 18.815001 58.225006 # 5 +3368 644 6 0.000000 6.148780 18.105000 58.225006 # 5 +3369 646 6 0.000000 6.148780 18.105000 61.574997 # 5 +3370 646 6 0.000000 4.919024 17.395000 61.574997 # 5 +3371 644 6 0.000000 7.378536 18.815001 58.225006 # 5 +3372 644 6 0.000000 8.608293 18.105000 58.225006 # 5 +3373 646 6 0.000000 8.608293 18.105000 61.574997 # 5 +3374 646 6 0.000000 7.378536 17.395000 61.574997 # 5 +3375 644 6 0.000000 9.838048 18.815001 58.225006 # 5 +3376 644 6 0.000000 11.067804 18.105000 58.225006 # 5 +3377 646 6 0.000000 11.067804 18.105000 61.574997 # 5 +3378 646 6 0.000000 9.838048 17.395000 61.574997 # 5 +3379 644 6 0.000000 12.297561 18.815001 58.225006 # 5 +3380 644 6 0.000000 13.527316 18.105000 58.225006 # 5 +3381 646 6 0.000000 13.527316 18.105000 61.574997 # 5 +3382 646 6 0.000000 12.297561 17.395000 61.574997 # 5 +3383 644 6 0.000000 14.757072 18.815001 58.225006 # 5 +3384 644 6 0.000000 15.986829 18.105000 58.225006 # 5 +3385 646 6 0.000000 15.986829 18.105000 61.574997 # 5 +3386 646 6 0.000000 14.757072 17.395000 61.574997 # 5 +3387 644 6 0.000000 17.216585 18.815001 58.225006 # 5 +3388 644 6 0.000000 18.446341 18.105000 58.225006 # 5 +3389 646 6 0.000000 18.446341 18.105000 61.574997 # 5 +3390 646 6 0.000000 17.216585 17.395000 61.574997 # 5 +3391 644 6 0.000000 19.676096 18.815001 58.225006 # 5 +3392 644 6 0.000000 20.905853 18.105000 58.225006 # 5 +3393 646 6 0.000000 20.905853 18.105000 61.574997 # 5 +3394 646 6 0.000000 19.676096 17.395000 61.574997 # 5 +3395 644 6 0.000000 22.135609 18.815001 58.225006 # 5 +3396 644 6 0.000000 23.365364 18.105000 58.225006 # 5 +3397 646 6 0.000000 23.365364 18.105000 61.574997 # 5 +3398 646 6 0.000000 22.135609 17.395000 61.574997 # 5 +3399 644 6 0.000000 24.595121 18.815001 58.225006 # 5 +3400 644 6 0.000000 25.824877 18.105000 58.225006 # 5 +3401 646 6 0.000000 25.824877 18.105000 61.574997 # 5 +3402 646 6 0.000000 24.595121 17.395000 61.574997 # 5 +3403 644 6 0.000000 27.054632 18.815001 58.225006 # 5 +3404 644 6 0.000000 28.284389 18.105000 58.225006 # 5 +3405 646 6 0.000000 28.284389 18.105000 61.574997 # 5 +3406 646 6 0.000000 27.054632 17.395000 61.574997 # 5 +3407 644 6 0.000000 29.514145 18.815001 58.225006 # 5 +3408 644 6 0.000000 30.743900 18.105000 58.225006 # 5 +3409 646 6 0.000000 30.743900 18.105000 61.574997 # 5 +3410 646 6 0.000000 29.514145 17.395000 61.574997 # 5 +3411 644 6 0.000000 31.973658 18.815001 58.225006 # 5 +3412 646 6 0.000000 31.973658 17.395000 61.574997 # 5 +3413 644 6 0.000000 1.229756 20.945002 58.225006 # 5 +3414 644 6 0.000000 2.459512 20.235001 58.225006 # 5 +3415 646 6 0.000000 2.459512 20.235001 61.574997 # 5 +3416 646 6 0.000000 1.229756 19.525000 61.574997 # 5 +3417 644 6 0.000000 3.689268 20.945002 58.225006 # 5 +3418 644 6 0.000000 4.919024 20.235001 58.225006 # 5 +3419 646 6 0.000000 4.919024 20.235001 61.574997 # 5 +3420 646 6 0.000000 3.689268 19.525000 61.574997 # 5 +3421 644 6 0.000000 6.148780 20.945002 58.225006 # 5 +3422 644 6 0.000000 7.378536 20.235001 58.225006 # 5 +3423 646 6 0.000000 7.378536 20.235001 61.574997 # 5 +3424 646 6 0.000000 6.148780 19.525000 61.574997 # 5 +3425 644 6 0.000000 8.608293 20.945002 58.225006 # 5 +3426 644 6 0.000000 9.838048 20.235001 58.225006 # 5 +3427 646 6 0.000000 9.838048 20.235001 61.574997 # 5 +3428 646 6 0.000000 8.608293 19.525000 61.574997 # 5 +3429 644 6 0.000000 11.067804 20.945002 58.225006 # 5 +3430 644 6 0.000000 12.297561 20.235001 58.225006 # 5 +3431 646 6 0.000000 12.297561 20.235001 61.574997 # 5 +3432 646 6 0.000000 11.067804 19.525000 61.574997 # 5 +3433 644 6 0.000000 13.527316 20.945002 58.225006 # 5 +3434 644 6 0.000000 14.757072 20.235001 58.225006 # 5 +3435 646 6 0.000000 14.757072 20.235001 61.574997 # 5 +3436 646 6 0.000000 13.527316 19.525000 61.574997 # 5 +3437 644 6 0.000000 15.986829 20.945002 58.225006 # 5 +3438 644 6 0.000000 17.216585 20.235001 58.225006 # 5 +3439 646 6 0.000000 17.216585 20.235001 61.574997 # 5 +3440 646 6 0.000000 15.986829 19.525000 61.574997 # 5 +3441 644 6 0.000000 18.446341 20.945002 58.225006 # 5 +3442 644 6 0.000000 19.676096 20.235001 58.225006 # 5 +3443 646 6 0.000000 19.676096 20.235001 61.574997 # 5 +3444 646 6 0.000000 18.446341 19.525000 61.574997 # 5 +3445 644 6 0.000000 20.905853 20.945002 58.225006 # 5 +3446 644 6 0.000000 22.135609 20.235001 58.225006 # 5 +3447 646 6 0.000000 22.135609 20.235001 61.574997 # 5 +3448 646 6 0.000000 20.905853 19.525000 61.574997 # 5 +3449 644 6 0.000000 23.365364 20.945002 58.225006 # 5 +3450 644 6 0.000000 24.595121 20.235001 58.225006 # 5 +3451 646 6 0.000000 24.595121 20.235001 61.574997 # 5 +3452 646 6 0.000000 23.365364 19.525000 61.574997 # 5 +3453 644 6 0.000000 25.824877 20.945002 58.225006 # 5 +3454 644 6 0.000000 27.054632 20.235001 58.225006 # 5 +3455 646 6 0.000000 27.054632 20.235001 61.574997 # 5 +3456 646 6 0.000000 25.824877 19.525000 61.574997 # 5 +3457 644 6 0.000000 28.284389 20.945002 58.225006 # 5 +3458 644 6 0.000000 29.514145 20.235001 58.225006 # 5 +3459 646 6 0.000000 29.514145 20.235001 61.574997 # 5 +3460 646 6 0.000000 28.284389 19.525000 61.574997 # 5 +3461 644 6 0.000000 30.743900 20.945002 58.225006 # 5 +3462 644 6 0.000000 31.973658 20.235001 58.225006 # 5 +3463 646 6 0.000000 31.973658 20.235001 61.574997 # 5 +3464 646 6 0.000000 30.743900 19.525000 61.574997 # 5 +3465 644 6 0.000000 1.229756 22.365000 58.225006 # 5 +3466 646 6 0.000000 1.229756 22.365000 61.574997 # 5 +3467 644 6 0.000000 2.459512 23.075001 58.225006 # 5 +3468 644 6 0.000000 3.689268 22.365000 58.225006 # 5 +3469 646 6 0.000000 3.689268 22.365000 61.574997 # 5 +3470 646 6 0.000000 2.459512 21.655001 61.574997 # 5 +3471 644 6 0.000000 4.919024 23.075001 58.225006 # 5 +3472 644 6 0.000000 6.148780 22.365000 58.225006 # 5 +3473 646 6 0.000000 6.148780 22.365000 61.574997 # 5 +3474 646 6 0.000000 4.919024 21.655001 61.574997 # 5 +3475 644 6 0.000000 7.378536 23.075001 58.225006 # 5 +3476 644 6 0.000000 8.608293 22.365000 58.225006 # 5 +3477 646 6 0.000000 8.608293 22.365000 61.574997 # 5 +3478 646 6 0.000000 7.378536 21.655001 61.574997 # 5 +3479 644 6 0.000000 9.838048 23.075001 58.225006 # 5 +3480 644 6 0.000000 11.067804 22.365000 58.225006 # 5 +3481 646 6 0.000000 11.067804 22.365000 61.574997 # 5 +3482 646 6 0.000000 9.838048 21.655001 61.574997 # 5 +3483 644 6 0.000000 12.297561 23.075001 58.225006 # 5 +3484 644 6 0.000000 13.527316 22.365000 58.225006 # 5 +3485 646 6 0.000000 13.527316 22.365000 61.574997 # 5 +3486 646 6 0.000000 12.297561 21.655001 61.574997 # 5 +3487 644 6 0.000000 14.757072 23.075001 58.225006 # 5 +3488 644 6 0.000000 15.986829 22.365000 58.225006 # 5 +3489 646 6 0.000000 15.986829 22.365000 61.574997 # 5 +3490 646 6 0.000000 14.757072 21.655001 61.574997 # 5 +3491 644 6 0.000000 17.216585 23.075001 58.225006 # 5 +3492 644 6 0.000000 18.446341 22.365000 58.225006 # 5 +3493 646 6 0.000000 18.446341 22.365000 61.574997 # 5 +3494 646 6 0.000000 17.216585 21.655001 61.574997 # 5 +3495 644 6 0.000000 19.676096 23.075001 58.225006 # 5 +3496 644 6 0.000000 20.905853 22.365000 58.225006 # 5 +3497 646 6 0.000000 20.905853 22.365000 61.574997 # 5 +3498 646 6 0.000000 19.676096 21.655001 61.574997 # 5 +3499 644 6 0.000000 22.135609 23.075001 58.225006 # 5 +3500 644 6 0.000000 23.365364 22.365000 58.225006 # 5 +3501 646 6 0.000000 23.365364 22.365000 61.574997 # 5 +3502 646 6 0.000000 22.135609 21.655001 61.574997 # 5 +3503 644 6 0.000000 24.595121 23.075001 58.225006 # 5 +3504 644 6 0.000000 25.824877 22.365000 58.225006 # 5 +3505 646 6 0.000000 25.824877 22.365000 61.574997 # 5 +3506 646 6 0.000000 24.595121 21.655001 61.574997 # 5 +3507 644 6 0.000000 27.054632 23.075001 58.225006 # 5 +3508 644 6 0.000000 28.284389 22.365000 58.225006 # 5 +3509 646 6 0.000000 28.284389 22.365000 61.574997 # 5 +3510 646 6 0.000000 27.054632 21.655001 61.574997 # 5 +3511 644 6 0.000000 29.514145 23.075001 58.225006 # 5 +3512 644 6 0.000000 30.743900 22.365000 58.225006 # 5 +3513 646 6 0.000000 30.743900 22.365000 61.574997 # 5 +3514 646 6 0.000000 29.514145 21.655001 61.574997 # 5 +3515 644 6 0.000000 31.973658 23.075001 58.225006 # 5 +3516 646 6 0.000000 31.973658 21.655001 61.574997 # 5 +3517 644 6 0.000000 1.229756 25.205000 58.225006 # 5 +3518 644 6 0.000000 2.459512 24.495001 58.225006 # 5 +3519 646 6 0.000000 2.459512 24.495001 61.574997 # 5 +3520 646 6 0.000000 1.229756 23.785000 61.574997 # 5 +3521 644 6 0.000000 3.689268 25.205000 58.225006 # 5 +3522 644 6 0.000000 4.919024 24.495001 58.225006 # 5 +3523 646 6 0.000000 4.919024 24.495001 61.574997 # 5 +3524 646 6 0.000000 3.689268 23.785000 61.574997 # 5 +3525 644 6 0.000000 6.148780 25.205000 58.225006 # 5 +3526 644 6 0.000000 7.378536 24.495001 58.225006 # 5 +3527 646 6 0.000000 7.378536 24.495001 61.574997 # 5 +3528 646 6 0.000000 6.148780 23.785000 61.574997 # 5 +3529 644 6 0.000000 8.608293 25.205000 58.225006 # 5 +3530 644 6 0.000000 9.838048 24.495001 58.225006 # 5 +3531 646 6 0.000000 9.838048 24.495001 61.574997 # 5 +3532 646 6 0.000000 8.608293 23.785000 61.574997 # 5 +3533 644 6 0.000000 11.067804 25.205000 58.225006 # 5 +3534 644 6 0.000000 12.297561 24.495001 58.225006 # 5 +3535 646 6 0.000000 12.297561 24.495001 61.574997 # 5 +3536 646 6 0.000000 11.067804 23.785000 61.574997 # 5 +3537 644 6 0.000000 13.527316 25.205000 58.225006 # 5 +3538 644 6 0.000000 14.757072 24.495001 58.225006 # 5 +3539 646 6 0.000000 14.757072 24.495001 61.574997 # 5 +3540 646 6 0.000000 13.527316 23.785000 61.574997 # 5 +3541 644 6 0.000000 15.986829 25.205000 58.225006 # 5 +3542 644 6 0.000000 17.216585 24.495001 58.225006 # 5 +3543 646 6 0.000000 17.216585 24.495001 61.574997 # 5 +3544 646 6 0.000000 15.986829 23.785000 61.574997 # 5 +3545 644 6 0.000000 18.446341 25.205000 58.225006 # 5 +3546 644 6 0.000000 19.676096 24.495001 58.225006 # 5 +3547 646 6 0.000000 19.676096 24.495001 61.574997 # 5 +3548 646 6 0.000000 18.446341 23.785000 61.574997 # 5 +3549 644 6 0.000000 20.905853 25.205000 58.225006 # 5 +3550 644 6 0.000000 22.135609 24.495001 58.225006 # 5 +3551 646 6 0.000000 22.135609 24.495001 61.574997 # 5 +3552 646 6 0.000000 20.905853 23.785000 61.574997 # 5 +3553 644 6 0.000000 23.365364 25.205000 58.225006 # 5 +3554 644 6 0.000000 24.595121 24.495001 58.225006 # 5 +3555 646 6 0.000000 24.595121 24.495001 61.574997 # 5 +3556 646 6 0.000000 23.365364 23.785000 61.574997 # 5 +3557 644 6 0.000000 25.824877 25.205000 58.225006 # 5 +3558 644 6 0.000000 27.054632 24.495001 58.225006 # 5 +3559 646 6 0.000000 27.054632 24.495001 61.574997 # 5 +3560 646 6 0.000000 25.824877 23.785000 61.574997 # 5 +3561 644 6 0.000000 28.284389 25.205000 58.225006 # 5 +3562 644 6 0.000000 29.514145 24.495001 58.225006 # 5 +3563 646 6 0.000000 29.514145 24.495001 61.574997 # 5 +3564 646 6 0.000000 28.284389 23.785000 61.574997 # 5 +3565 644 6 0.000000 30.743900 25.205000 58.225006 # 5 +3566 644 6 0.000000 31.973658 24.495001 58.225006 # 5 +3567 646 6 0.000000 31.973658 24.495001 61.574997 # 5 +3568 646 6 0.000000 30.743900 23.785000 61.574997 # 5 +3569 644 6 0.000000 1.229756 26.625000 58.225006 # 5 +3570 646 6 0.000000 1.229756 26.625000 61.574997 # 5 +3571 644 6 0.000000 2.459512 27.335001 58.225006 # 5 +3572 644 6 0.000000 3.689268 26.625000 58.225006 # 5 +3573 646 6 0.000000 3.689268 26.625000 61.574997 # 5 +3574 646 6 0.000000 2.459512 25.915003 61.574997 # 5 +3575 644 6 0.000000 4.919024 27.335001 58.225006 # 5 +3576 644 6 0.000000 6.148780 26.625000 58.225006 # 5 +3577 646 6 0.000000 6.148780 26.625000 61.574997 # 5 +3578 646 6 0.000000 4.919024 25.915003 61.574997 # 5 +3579 644 6 0.000000 7.378536 27.335001 58.225006 # 5 +3580 644 6 0.000000 8.608293 26.625000 58.225006 # 5 +3581 646 6 0.000000 8.608293 26.625000 61.574997 # 5 +3582 646 6 0.000000 7.378536 25.915003 61.574997 # 5 +3583 644 6 0.000000 9.838048 27.335001 58.225006 # 5 +3584 644 6 0.000000 11.067804 26.625000 58.225006 # 5 +3585 646 6 0.000000 11.067804 26.625000 61.574997 # 5 +3586 646 6 0.000000 9.838048 25.915003 61.574997 # 5 +3587 644 6 0.000000 12.297561 27.335001 58.225006 # 5 +3588 644 6 0.000000 13.527316 26.625000 58.225006 # 5 +3589 646 6 0.000000 13.527316 26.625000 61.574997 # 5 +3590 646 6 0.000000 12.297561 25.915003 61.574997 # 5 +3591 644 6 0.000000 14.757072 27.335001 58.225006 # 5 +3592 644 6 0.000000 15.986829 26.625000 58.225006 # 5 +3593 646 6 0.000000 15.986829 26.625000 61.574997 # 5 +3594 646 6 0.000000 14.757072 25.915003 61.574997 # 5 +3595 644 6 0.000000 17.216585 27.335001 58.225006 # 5 +3596 644 6 0.000000 18.446341 26.625000 58.225006 # 5 +3597 646 6 0.000000 18.446341 26.625000 61.574997 # 5 +3598 646 6 0.000000 17.216585 25.915003 61.574997 # 5 +3599 644 6 0.000000 19.676096 27.335001 58.225006 # 5 +3600 644 6 0.000000 20.905853 26.625000 58.225006 # 5 +3601 646 6 0.000000 20.905853 26.625000 61.574997 # 5 +3602 646 6 0.000000 19.676096 25.915003 61.574997 # 5 +3603 644 6 0.000000 22.135609 27.335001 58.225006 # 5 +3604 644 6 0.000000 23.365364 26.625000 58.225006 # 5 +3605 646 6 0.000000 23.365364 26.625000 61.574997 # 5 +3606 646 6 0.000000 22.135609 25.915003 61.574997 # 5 +3607 644 6 0.000000 24.595121 27.335001 58.225006 # 5 +3608 644 6 0.000000 25.824877 26.625000 58.225006 # 5 +3609 646 6 0.000000 25.824877 26.625000 61.574997 # 5 +3610 646 6 0.000000 24.595121 25.915003 61.574997 # 5 +3611 644 6 0.000000 27.054632 27.335001 58.225006 # 5 +3612 644 6 0.000000 28.284389 26.625000 58.225006 # 5 +3613 646 6 0.000000 28.284389 26.625000 61.574997 # 5 +3614 646 6 0.000000 27.054632 25.915003 61.574997 # 5 +3615 644 6 0.000000 29.514145 27.335001 58.225006 # 5 +3616 644 6 0.000000 30.743900 26.625000 58.225006 # 5 +3617 646 6 0.000000 30.743900 26.625000 61.574997 # 5 +3618 646 6 0.000000 29.514145 25.915003 61.574997 # 5 +3619 644 6 0.000000 31.973658 27.335001 58.225006 # 5 +3620 646 6 0.000000 31.973658 25.915003 61.574997 # 5 +3621 644 6 0.000000 1.229756 29.465000 58.225006 # 5 +3622 644 6 0.000000 2.459512 28.754999 58.225006 # 5 +3623 646 6 0.000000 2.459512 28.754999 61.574997 # 5 +3624 646 6 0.000000 1.229756 28.045000 61.574997 # 5 +3625 644 6 0.000000 3.689268 29.465000 58.225006 # 5 +3626 644 6 0.000000 4.919024 28.754999 58.225006 # 5 +3627 646 6 0.000000 4.919024 28.754999 61.574997 # 5 +3628 646 6 0.000000 3.689268 28.045000 61.574997 # 5 +3629 644 6 0.000000 6.148780 29.465000 58.225006 # 5 +3630 644 6 0.000000 7.378536 28.754999 58.225006 # 5 +3631 646 6 0.000000 7.378536 28.754999 61.574997 # 5 +3632 646 6 0.000000 6.148780 28.045000 61.574997 # 5 +3633 644 6 0.000000 8.608293 29.465000 58.225006 # 5 +3634 644 6 0.000000 9.838048 28.754999 58.225006 # 5 +3635 646 6 0.000000 9.838048 28.754999 61.574997 # 5 +3636 646 6 0.000000 8.608293 28.045000 61.574997 # 5 +3637 644 6 0.000000 11.067804 29.465000 58.225006 # 5 +3638 644 6 0.000000 12.297561 28.754999 58.225006 # 5 +3639 646 6 0.000000 12.297561 28.754999 61.574997 # 5 +3640 646 6 0.000000 11.067804 28.045000 61.574997 # 5 +3641 644 6 0.000000 13.527316 29.465000 58.225006 # 5 +3642 644 6 0.000000 14.757072 28.754999 58.225006 # 5 +3643 646 6 0.000000 14.757072 28.754999 61.574997 # 5 +3644 646 6 0.000000 13.527316 28.045000 61.574997 # 5 +3645 644 6 0.000000 15.986829 29.465000 58.225006 # 5 +3646 644 6 0.000000 17.216585 28.754999 58.225006 # 5 +3647 646 6 0.000000 17.216585 28.754999 61.574997 # 5 +3648 646 6 0.000000 15.986829 28.045000 61.574997 # 5 +3649 644 6 0.000000 18.446341 29.465000 58.225006 # 5 +3650 644 6 0.000000 19.676096 28.754999 58.225006 # 5 +3651 646 6 0.000000 19.676096 28.754999 61.574997 # 5 +3652 646 6 0.000000 18.446341 28.045000 61.574997 # 5 +3653 644 6 0.000000 20.905853 29.465000 58.225006 # 5 +3654 644 6 0.000000 22.135609 28.754999 58.225006 # 5 +3655 646 6 0.000000 22.135609 28.754999 61.574997 # 5 +3656 646 6 0.000000 20.905853 28.045000 61.574997 # 5 +3657 644 6 0.000000 23.365364 29.465000 58.225006 # 5 +3658 644 6 0.000000 24.595121 28.754999 58.225006 # 5 +3659 646 6 0.000000 24.595121 28.754999 61.574997 # 5 +3660 646 6 0.000000 23.365364 28.045000 61.574997 # 5 +3661 644 6 0.000000 25.824877 29.465000 58.225006 # 5 +3662 644 6 0.000000 27.054632 28.754999 58.225006 # 5 +3663 646 6 0.000000 27.054632 28.754999 61.574997 # 5 +3664 646 6 0.000000 25.824877 28.045000 61.574997 # 5 +3665 644 6 0.000000 28.284389 29.465000 58.225006 # 5 +3666 644 6 0.000000 29.514145 28.754999 58.225006 # 5 +3667 646 6 0.000000 29.514145 28.754999 61.574997 # 5 +3668 646 6 0.000000 28.284389 28.045000 61.574997 # 5 +3669 644 6 0.000000 30.743900 29.465000 58.225006 # 5 +3670 644 6 0.000000 31.973658 28.754999 58.225006 # 5 +3671 646 6 0.000000 31.973658 28.754999 61.574997 # 5 +3672 646 6 0.000000 30.743900 28.045000 61.574997 # 5 +3673 644 6 0.000000 1.229756 30.885000 58.225006 # 5 +3674 646 6 0.000000 1.229756 30.885000 61.574997 # 5 +3675 644 6 0.000000 2.459512 31.594999 58.225006 # 5 +3676 644 6 0.000000 3.689268 30.885000 58.225006 # 5 +3677 646 6 0.000000 3.689268 30.885000 61.574997 # 5 +3678 646 6 0.000000 2.459512 30.174999 61.574997 # 5 +3679 644 6 0.000000 4.919024 31.594999 58.225006 # 5 +3680 644 6 0.000000 6.148780 30.885000 58.225006 # 5 +3681 646 6 0.000000 6.148780 30.885000 61.574997 # 5 +3682 646 6 0.000000 4.919024 30.174999 61.574997 # 5 +3683 644 6 0.000000 7.378536 31.594999 58.225006 # 5 +3684 644 6 0.000000 8.608293 30.885000 58.225006 # 5 +3685 646 6 0.000000 8.608293 30.885000 61.574997 # 5 +3686 646 6 0.000000 7.378536 30.174999 61.574997 # 5 +3687 644 6 0.000000 9.838048 31.594999 58.225006 # 5 +3688 644 6 0.000000 11.067804 30.885000 58.225006 # 5 +3689 646 6 0.000000 11.067804 30.885000 61.574997 # 5 +3690 646 6 0.000000 9.838048 30.174999 61.574997 # 5 +3691 644 6 0.000000 12.297561 31.594999 58.225006 # 5 +3692 644 6 0.000000 13.527316 30.885000 58.225006 # 5 +3693 646 6 0.000000 13.527316 30.885000 61.574997 # 5 +3694 646 6 0.000000 12.297561 30.174999 61.574997 # 5 +3695 644 6 0.000000 14.757072 31.594999 58.225006 # 5 +3696 644 6 0.000000 15.986829 30.885000 58.225006 # 5 +3697 646 6 0.000000 15.986829 30.885000 61.574997 # 5 +3698 646 6 0.000000 14.757072 30.174999 61.574997 # 5 +3699 644 6 0.000000 17.216585 31.594999 58.225006 # 5 +3700 644 6 0.000000 18.446341 30.885000 58.225006 # 5 +3701 646 6 0.000000 18.446341 30.885000 61.574997 # 5 +3702 646 6 0.000000 17.216585 30.174999 61.574997 # 5 +3703 644 6 0.000000 19.676096 31.594999 58.225006 # 5 +3704 644 6 0.000000 20.905853 30.885000 58.225006 # 5 +3705 646 6 0.000000 20.905853 30.885000 61.574997 # 5 +3706 646 6 0.000000 19.676096 30.174999 61.574997 # 5 +3707 644 6 0.000000 22.135609 31.594999 58.225006 # 5 +3708 644 6 0.000000 23.365364 30.885000 58.225006 # 5 +3709 646 6 0.000000 23.365364 30.885000 61.574997 # 5 +3710 646 6 0.000000 22.135609 30.174999 61.574997 # 5 +3711 644 6 0.000000 24.595121 31.594999 58.225006 # 5 +3712 644 6 0.000000 25.824877 30.885000 58.225006 # 5 +3713 646 6 0.000000 25.824877 30.885000 61.574997 # 5 +3714 646 6 0.000000 24.595121 30.174999 61.574997 # 5 +3715 644 6 0.000000 27.054632 31.594999 58.225006 # 5 +3716 644 6 0.000000 28.284389 30.885000 58.225006 # 5 +3717 646 6 0.000000 28.284389 30.885000 61.574997 # 5 +3718 646 6 0.000000 27.054632 30.174999 61.574997 # 5 +3719 644 6 0.000000 29.514145 31.594999 58.225006 # 5 +3720 644 6 0.000000 30.743900 30.885000 58.225006 # 5 +3721 646 6 0.000000 30.743900 30.885000 61.574997 # 5 +3722 646 6 0.000000 29.514145 30.174999 61.574997 # 5 +3723 644 6 0.000000 31.973658 31.594999 58.225006 # 5 +3724 646 6 0.000000 31.973658 30.174999 61.574997 # 5 +3725 644 6 0.000000 1.229756 33.724998 58.225006 # 5 +3726 644 6 0.000000 2.459512 33.014999 58.225006 # 5 +3727 646 6 0.000000 2.459512 33.014999 61.574997 # 5 +3728 646 6 0.000000 1.229756 32.305000 61.574997 # 5 +3729 644 6 0.000000 3.689268 33.724998 58.225006 # 5 +3730 644 6 0.000000 4.919024 33.014999 58.225006 # 5 +3731 646 6 0.000000 4.919024 33.014999 61.574997 # 5 +3732 646 6 0.000000 3.689268 32.305000 61.574997 # 5 +3733 644 6 0.000000 6.148780 33.724998 58.225006 # 5 +3734 644 6 0.000000 7.378536 33.014999 58.225006 # 5 +3735 646 6 0.000000 7.378536 33.014999 61.574997 # 5 +3736 646 6 0.000000 6.148780 32.305000 61.574997 # 5 +3737 644 6 0.000000 8.608293 33.724998 58.225006 # 5 +3738 644 6 0.000000 9.838048 33.014999 58.225006 # 5 +3739 646 6 0.000000 9.838048 33.014999 61.574997 # 5 +3740 646 6 0.000000 8.608293 32.305000 61.574997 # 5 +3741 644 6 0.000000 11.067804 33.724998 58.225006 # 5 +3742 644 6 0.000000 12.297561 33.014999 58.225006 # 5 +3743 646 6 0.000000 12.297561 33.014999 61.574997 # 5 +3744 646 6 0.000000 11.067804 32.305000 61.574997 # 5 +3745 644 6 0.000000 13.527316 33.724998 58.225006 # 5 +3746 644 6 0.000000 14.757072 33.014999 58.225006 # 5 +3747 646 6 0.000000 14.757072 33.014999 61.574997 # 5 +3748 646 6 0.000000 13.527316 32.305000 61.574997 # 5 +3749 644 6 0.000000 15.986829 33.724998 58.225006 # 5 +3750 644 6 0.000000 17.216585 33.014999 58.225006 # 5 +3751 646 6 0.000000 17.216585 33.014999 61.574997 # 5 +3752 646 6 0.000000 15.986829 32.305000 61.574997 # 5 +3753 644 6 0.000000 18.446341 33.724998 58.225006 # 5 +3754 644 6 0.000000 19.676096 33.014999 58.225006 # 5 +3755 646 6 0.000000 19.676096 33.014999 61.574997 # 5 +3756 646 6 0.000000 18.446341 32.305000 61.574997 # 5 +3757 644 6 0.000000 20.905853 33.724998 58.225006 # 5 +3758 644 6 0.000000 22.135609 33.014999 58.225006 # 5 +3759 646 6 0.000000 22.135609 33.014999 61.574997 # 5 +3760 646 6 0.000000 20.905853 32.305000 61.574997 # 5 +3761 644 6 0.000000 23.365364 33.724998 58.225006 # 5 +3762 644 6 0.000000 24.595121 33.014999 58.225006 # 5 +3763 646 6 0.000000 24.595121 33.014999 61.574997 # 5 +3764 646 6 0.000000 23.365364 32.305000 61.574997 # 5 +3765 644 6 0.000000 25.824877 33.724998 58.225006 # 5 +3766 644 6 0.000000 27.054632 33.014999 58.225006 # 5 +3767 646 6 0.000000 27.054632 33.014999 61.574997 # 5 +3768 646 6 0.000000 25.824877 32.305000 61.574997 # 5 +3769 644 6 0.000000 28.284389 33.724998 58.225006 # 5 +3770 644 6 0.000000 29.514145 33.014999 58.225006 # 5 +3771 646 6 0.000000 29.514145 33.014999 61.574997 # 5 +3772 646 6 0.000000 28.284389 32.305000 61.574997 # 5 +3773 644 6 0.000000 30.743900 33.724998 58.225006 # 5 +3774 644 6 0.000000 31.973658 33.014999 58.225006 # 5 +3775 646 6 0.000000 31.973658 33.014999 61.574997 # 5 +3776 646 6 0.000000 30.743900 32.305000 61.574997 # 5 Bonds diff --git a/examples/PACKAGES/electrode/graph-il/in.conq b/examples/PACKAGES/electrode/graph-il/in.conq index 088cf0a8ac..ea4685fa36 100644 --- a/examples/PACKAGES/electrode/graph-il/in.conq +++ b/examples/PACKAGES/electrode/graph-il/in.conq @@ -5,7 +5,7 @@ boundary p p f # slab calculation include settings.mod # styles, groups, computes and fixes kspace_modify slab 3.0 -fix conq bot electrode/conq -1.0 1.979 couple top 1.0 etypes 5 # conq doesn't take symm option +fix conq bot electrode/conq -1.0 1.979 couple top 1.0 etypes # conq doesn't take symm option thermo 50 thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop f_conq[1] f_conq[2] diff --git a/examples/PACKAGES/electrode/graph-il/in.conq2 b/examples/PACKAGES/electrode/graph-il/in.conq2 index 4f84322196..ad706bc50b 100644 --- a/examples/PACKAGES/electrode/graph-il/in.conq2 +++ b/examples/PACKAGES/electrode/graph-il/in.conq2 @@ -5,7 +5,7 @@ boundary p p f # slab calculation include settings.mod # styles, groups, computes and fixes kspace_modify slab 3.0 -fix conp bot electrode/conp v_vbot 1.979 couple top v_vtop etypes 5 +fix conp bot electrode/conp v_vbot 1.979 couple top v_vtop etypes variable qex_bot equal -1.0-f_conp[1][1] # difference between desired and 0V charge variable qex_top equal 1.0-f_conp[2][1] # difference between desired and 0V charge diff --git a/examples/PACKAGES/electrode/graph-il/in.etypes b/examples/PACKAGES/electrode/graph-il/in.etypes index 30edebdc77..b9a0c65979 100644 --- a/examples/PACKAGES/electrode/graph-il/in.etypes +++ b/examples/PACKAGES/electrode/graph-il/in.etypes @@ -5,7 +5,7 @@ boundary p p f # slab calculation include settings.mod # styles, groups, computes and fixes kspace_modify slab 3.0 -fix conp bot electrode/conp -1.0 1.979 couple top 1.0 symm on etypes 5 +fix conp bot electrode/conp -1.0 1.979 couple top 1.0 symm on etypes thermo 50 thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop diff --git a/examples/PACKAGES/electrode/graph-il/in.ffield b/examples/PACKAGES/electrode/graph-il/in.ffield index 3d07402ffd..66614899ec 100644 --- a/examples/PACKAGES/electrode/graph-il/in.ffield +++ b/examples/PACKAGES/electrode/graph-il/in.ffield @@ -4,7 +4,7 @@ boundary p p p # ffield uses periodic z-boundary and no slab include settings.mod # styles, groups, computes and fixes -fix conp bot electrode/conp -1.0 1.979 couple top 1.0 symm on etypes 5 ffield yes +fix conp bot electrode/conp -1.0 1.979 couple top 1.0 symm on etypes ffield yes thermo 50 thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop diff --git a/examples/PACKAGES/electrode/graph-il/in.ramp b/examples/PACKAGES/electrode/graph-il/in.ramp index da6053ff9d..12461bf455 100644 --- a/examples/PACKAGES/electrode/graph-il/in.ramp +++ b/examples/PACKAGES/electrode/graph-il/in.ramp @@ -6,7 +6,7 @@ include settings.mod # styles, groups, computes and fixes kspace_modify slab 3.0 variable v equal ramp(2,4) -fix conp bot electrode/conp 0.0 1.979 couple top v_v symm on etypes 5 +fix conp bot electrode/conp 0.0 1.979 couple top v_v symm on etypes thermo 50 thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop v_v diff --git a/examples/PACKAGES/electrode/graph-il/in.thermo b/examples/PACKAGES/electrode/graph-il/in.thermo index a1d75196c9..6ae29e2de1 100644 --- a/examples/PACKAGES/electrode/graph-il/in.thermo +++ b/examples/PACKAGES/electrode/graph-il/in.thermo @@ -6,9 +6,9 @@ include settings.mod # styles, groups, computes and fixes kspace_modify slab 3.0 unfix nvt # remove NVT thermostat included from "settings.mod" -fix conpthermo bot electrode/thermo -1.0 1.979 couple top 1.0 etypes 5 temp 500 100 7 # temp tau rng +fix conpthermo bot electrode/thermo -1.0 1.979 couple top 1.0 etypes temp 500 100 7 # temp tau rng # to compare to regular constant potential, switch previous line to this: -#fix conp bot electrode/conp -1.0 1.979 couple top 1.0 etypes 5 symm on +#fix conp bot electrode/conp -1.0 1.979 couple top 1.0 etypes symm on fix nve electrolyte nve # note ionic liquid does not reach 500K immediately diff --git a/src/ELECTRODE/fix_electrode_conp.cpp b/src/ELECTRODE/fix_electrode_conp.cpp index 8764a1e095..7776b01544 100644 --- a/src/ELECTRODE/fix_electrode_conp.cpp +++ b/src/ELECTRODE/fix_electrode_conp.cpp @@ -202,10 +202,6 @@ FixElectrodeConp::FixElectrodeConp(LAMMPS *lmp, int narg, char **arg) : error->all(FLERR, "Illegal fix electrode/conp command with read"); } } else if ((strcmp(arg[iarg], "etypes") == 0)) { - if (iarg + 2 > narg) error->all(FLERR, "Need one argument after etypes command"); - int ilo, ihi; - utils::bounds(FLERR, arg[++iarg], 1, atom->ntypes, ilo, ihi, error); - for (int i = ilo; i <= ihi; ++i) etypes.push_back(i); etypes_neighlists = true; } else if ((strcmp(arg[iarg], "temp") == 0)) { if (iarg + 4 > narg) error->all(FLERR, "Need three arguments after temp command"); @@ -1172,6 +1168,25 @@ void FixElectrodeConp::read_from_file(const std::string &input_file, double **ar void FixElectrodeConp::request_etypes_neighlists() { int const ntypes = atom->ntypes; + // construct etypes + int *mask = atom->mask; + int *type = atom->type; + auto elec = std::vector(ntypes, 0); + auto elyt = std::vector(ntypes, 0); + for (int i = 0; i < atom->nlocal; i++) { + if (mask[i] & groupbit) + elec[type[i] - 1] += 1; + else + elyt[type[i] - 1] += 1; + } + MPI_Allreduce(MPI_IN_PLACE, &elec.front(), ntypes, MPI_INT, MPI_SUM, world); + MPI_Allreduce(MPI_IN_PLACE, &elyt.front(), ntypes, MPI_INT, MPI_SUM, world); + etypes.clear(); + for (int i = 0; i < ntypes; i++) { + if (!elec[i] == !elyt[i]) error->all(FLERR, "Types overlap, cannot use etypes keyword"); + if (elec[i]) etypes.push_back(i + 1); + } + // construct skip arrays int *iskip_mat = new int[ntypes + 1]; int *iskip_vec = new int[ntypes + 1]; int **ijskip_mat; From e3d45b0df6e4b05b63248b0f2b7a6547b84b06e4 Mon Sep 17 00:00:00 2001 From: srtee Date: Wed, 31 Aug 2022 14:17:51 +1000 Subject: [PATCH 10/46] clean up --- src/ELECTRODE/fix_electrode_conp.cpp | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/src/ELECTRODE/fix_electrode_conp.cpp b/src/ELECTRODE/fix_electrode_conp.cpp index c4f9fab930..0d54b666ee 100644 --- a/src/ELECTRODE/fix_electrode_conp.cpp +++ b/src/ELECTRODE/fix_electrode_conp.cpp @@ -235,14 +235,6 @@ FixElectrodeConp::FixElectrodeConp(LAMMPS *lmp, int narg, char **arg) : ele_vector = new ElectrodeVector(lmp, igroup, igroup, eta, true); // error checks - int write_inv = 0; - int write_mat = 0; - if (comm->me == 0) { - write_inv = !!(f_inv); - write_mat = !!(f_mat); - } - MPI_Bcast(&write_inv, 1, MPI_INT, 0, world); - MPI_Bcast(&write_mat, 1, MPI_INT, 0, world); assert(groups.size() == group_bits.size()); assert(groups.size() == group_psi.size()); assert(groups.size() == group_psi_var_styles.size()); @@ -260,7 +252,6 @@ FixElectrodeConp::FixElectrodeConp(LAMMPS *lmp, int narg, char **arg) : if (read_mat || write_mat) error->all(FLERR, "Selected algorithm does not use matrix. Cannot read/write matrix."); } - if (need_array_compute) assert(igroup == array_compute->igroup); if (read_inv && read_mat) error->all(FLERR, "Cannot read matrix from two files"); if (write_mat && read_inv) error->all(FLERR, @@ -483,7 +474,7 @@ void FixElectrodeConp::setup_post_neighbor() evscale = force->qe2f / force->qqrd2e; ele_vector->setup(pair, vec_neighlist, timer_flag); - + // setup psi with target potentials iele_to_group = std::vector(ngroup, -1); sd_vectors = std::vector>(num_of_groups, std::vector(ngroup)); @@ -525,7 +516,7 @@ void FixElectrodeConp::setup_post_neighbor() if (tfflag) { array_compute->setup_tf(tf_types); } array_compute->compute_array(elastance, timer_flag); } - if (comm->me == 0 && write_mat) { // writing elastance? Y: write elastance + if (comm->me == 0 && write_mat) { // writing elastance? Y: write elastance auto f_mat = fopen(output_file_mat.c_str(), "w"); if (f_mat == nullptr) error->one(FLERR, From 62ac08073650657ceaf54097ee7985e714f05285 Mon Sep 17 00:00:00 2001 From: Ludwig Ahrens-Iwers Date: Fri, 2 Sep 2022 14:06:04 +0000 Subject: [PATCH 11/46] Conjugate gradient --- doc/src/fix_electrode_conp.rst | 16 +- .../PACKAGES/electrode/graph-il/.gitignore | 1 + .../PACKAGES/electrode/graph-il/algo_test.sh | 28 ++ src/ELECTRODE/electrode_matrix.cpp | 4 +- src/ELECTRODE/electrode_vector.cpp | 61 ++- src/ELECTRODE/electrode_vector.h | 6 + src/ELECTRODE/fix_electrode_conp.cpp | 428 +++++++++++++----- src/ELECTRODE/fix_electrode_conp.h | 32 +- src/ELECTRODE/fix_electrode_conq.cpp | 59 ++- src/ELECTRODE/fix_electrode_conq.h | 2 + src/ELECTRODE/pppm_electrode.cpp | 10 +- 11 files changed, 509 insertions(+), 138 deletions(-) create mode 100755 examples/PACKAGES/electrode/graph-il/algo_test.sh diff --git a/doc/src/fix_electrode_conp.rst b/doc/src/fix_electrode_conp.rst index ff51174d8e..02aa73ad54 100644 --- a/doc/src/fix_electrode_conp.rst +++ b/doc/src/fix_electrode_conp.rst @@ -40,6 +40,8 @@ Syntax .. parsed-literal:: + *algo mat_inv/mat_cg value/cg value* + specify the algorithm used to compute the electrode charges *symm(etry) on/off* turn on/off charge neutrality constraint for the electrodes *couple group-ID value* @@ -75,8 +77,13 @@ fix electrode/conp mode implements a constant potential method (CPM) via group-ID and optionally with the `couple` keyword are adapted to meet their respective potential at every time step. An arbitrary number of electrodes can be set but the respective groups may not overlap. Electrode charges have a Gaussian charge -distribution with reciprocal width eta. The energy minimization is achieved via -matrix inversion :ref:`(Wang) `. +distribution with reciprocal width eta. + +Three algorithms are available to minimize the energy: +via matrix inversion (*algo mat_inv*) :ref:`(Wang) `, or with the conjugate gradient +method either using a matrix for the electrode-electrode interaction (*algo +mat_cg value*) or computing the interaction directly (*algo cg value*). This +method requires a threshold value to set the accuracy. fix electrode/conq enforces a total charge specified in the input on each electrode. The energy is minimized w.r.t. the charge distribution within the electrode. @@ -84,7 +91,7 @@ minimized w.r.t. the charge distribution within the electrode. fix electrode/thermo implements a thermo-potentiostat :ref:`(Deissenbeck) `. Temperature and time constant of the thermo-potentiostat need to be specified using the temp keyword. Currently, only two electrodes are possible with -this style. +this style. This fix is not compatible with the conjugate gradient algorithms. For all three fixes, any potential (or charge for *conq*) can be specified as an equal-style variable prefixed with "v\_". For example, the following code will @@ -208,7 +215,8 @@ use *pppm/electrode* :ref:`(Ahrens-Iwers) `. Restrictions """""""""""" -Positions of electrode particles have to be immobilized at all times. +For algorithms that use a matrix for the electrode-electrode interactions, +positions of electrode particles have to be immobilized at all times. The parallelization for the fix works best if electrode atoms are evenly distributed across processors. For a system with two electrodes at the bottom diff --git a/examples/PACKAGES/electrode/graph-il/.gitignore b/examples/PACKAGES/electrode/graph-il/.gitignore index 8ee8bfa0f2..592bb61996 100644 --- a/examples/PACKAGES/electrode/graph-il/.gitignore +++ b/examples/PACKAGES/electrode/graph-il/.gitignore @@ -1 +1,2 @@ log.lammps* +in.temp diff --git a/examples/PACKAGES/electrode/graph-il/algo_test.sh b/examples/PACKAGES/electrode/graph-il/algo_test.sh new file mode 100755 index 0000000000..6106fe02dc --- /dev/null +++ b/examples/PACKAGES/electrode/graph-il/algo_test.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +LMP_BIN="$1" +NP="${2:-1}" +echo "MPI over $NP procs:" +for feat in conp etypes tf +do + echo "Using base input file in.$feat:" + echo "mat_inv, log excerpts:" + logfile="log.algo_test.$NP.$feat" + mpirun -np $NP $LMP_BIN -i in.$feat -l $logfile > /dev/null 2>&1 + grep -A2 'Per MPI rank' $logfile + grep -B1 'Loop time' $logfile + rm $logfile + for cgtype in mat_cg cg + do + for tol in 1e-4 1e-5 1e-6 + do + echo "$cgtype, tol = $tol, log excerpts:" + logfile="log.algo_test.$NP.$feat.$cgtype.$tol" + sed '/electrode/ s/$/ algo '"$cgtype"' '"$tol"'/' in.$feat > in.temp + mpirun -np $NP $LMP_BIN -i in.temp -l $logfile > /dev/null 2>&1 + grep -A2 'Per MPI rank' $logfile + grep -B1 'Loop time' $logfile + rm $logfile + done + done +done diff --git a/src/ELECTRODE/electrode_matrix.cpp b/src/ELECTRODE/electrode_matrix.cpp index eca497344b..7d941e80ce 100644 --- a/src/ELECTRODE/electrode_matrix.cpp +++ b/src/ELECTRODE/electrode_matrix.cpp @@ -82,7 +82,9 @@ void ElectrodeMatrix::compute_array(double **array, bool timer_flag) MPI_Barrier(world); if (timer_flag && (comm->me == 0)) utils::logmesg(lmp, fmt::format("KSpace time: {:.4g} s\n", MPI_Wtime() - kspace_time)); + //cout << array[0][0] << ", " << array[0][1] << endl; pair_contribution(array); + //cout << array[0][0] << ", " << array[0][1] << endl; self_contribution(array); electrode_kspace->compute_matrix_corr(&mpos[0], array); if (tfflag) tf_contribution(array); @@ -110,7 +112,7 @@ void ElectrodeMatrix::pair_contribution(double **array) int nlocal = atom->nlocal; int newton_pair = force->newton_pair; - double etaij = eta * eta / sqrt(2.0 * eta * eta); // see mw ewald theory eq. (29)-(30) + double const etaij = eta * eta / sqrt(2.0 * eta * eta); // see mw ewald theory eq. (29)-(30) // neighbor list will be ready because called from post_neighbor inum = list->inum; diff --git a/src/ELECTRODE/electrode_vector.cpp b/src/ELECTRODE/electrode_vector.cpp index c09bb19bb2..bb4c481716 100644 --- a/src/ELECTRODE/electrode_vector.cpp +++ b/src/ELECTRODE/electrode_vector.cpp @@ -25,10 +25,12 @@ #include "force.h" #include "group.h" #include "kspace.h" +#include "math_const.h" #include "neigh_list.h" #include "pair.h" using namespace LAMMPS_NS; +using namespace MathConst; ElectrodeVector::ElectrodeVector(LAMMPS *lmp, int sensor_group, int source_group, double eta, bool invert_source) : @@ -41,6 +43,7 @@ ElectrodeVector::ElectrodeVector(LAMMPS *lmp, int sensor_group, int source_group ngroup = group->count(igroup); source_grpbit = group->bitmask[source_group]; this->eta = eta; + tfflag = false; kspace_time_total = 0; pair_time_total = 0; @@ -76,6 +79,14 @@ void ElectrodeVector::setup(class Pair *fix_pair, class NeighList *fix_neighlist /* ---------------------------------------------------------------------- */ +void ElectrodeVector::setup_tf(const std::map &tf_types) +{ + tfflag = true; + this->tf_types = tf_types; +} + +/* ---------------------------------------------------------------------- */ + void ElectrodeVector::compute_vector(double *vector) { MPI_Barrier(world); @@ -83,6 +94,8 @@ void ElectrodeVector::compute_vector(double *vector) // pair double pair_start_time = MPI_Wtime(); pair_contribution(vector); + self_contribution(vector); + if (tfflag) tf_contribution(vector); MPI_Barrier(world); pair_time_total += MPI_Wtime() - pair_start_time; // kspace @@ -102,6 +115,7 @@ void ElectrodeVector::compute_vector(double *vector) void ElectrodeVector::pair_contribution(double *vector) { + //double const etaij = eta * eta / sqrt(2.0 * eta * eta); // see mw ewald theory eq. (29)-(30) double **x = atom->x; double *q = atom->q; int *type = atom->type; @@ -118,6 +132,7 @@ void ElectrodeVector::pair_contribution(double *vector) int const i = ilist[ii]; bool const i_in_sensor = (mask[i] & groupbit); bool const i_in_source = !!(mask[i] & source_grpbit) != invert_source; + if (!(i_in_sensor || i_in_source)) continue; double const xtmp = x[i][0]; double const ytmp = x[i][1]; double const ztmp = x[i][2]; @@ -141,12 +156,54 @@ void ElectrodeVector::pair_contribution(double *vector) double const rinv = 1.0 / r; double aij = rinv; aij *= ElectrodeMath::safe_erfc(g_ewald * r); + // TODO using etaij makes no difference? + //if (invert_source) aij -= ElectrodeMath::safe_erfc(eta * r) * rinv; + //else + //aij -= ElectrodeMath::safe_erfc(etaij * r) * rinv; if (i_in_sensor) { vector[i] += aij * q[j]; - } else if (j_in_sensor) { - vector[j] += aij * q[i]; + //} else if (j_in_sensor) { } + if (j_in_sensor && (!invert_source || !i_in_sensor)) { vector[j] += aij * q[i]; } } } } + +/* ---------------------------------------------------------------------- */ + +void ElectrodeVector::self_contribution(double *vector) +{ + int const inum = list->inum; + int *mask = atom->mask; + int *ilist = list->ilist; + double *q = atom->q; + + const double selfint = 2.0 / MY_PIS * g_ewald; + const double preta = MY_SQRT2 / MY_PIS; + + for (int ii = 0; ii < inum; ii++) { + int const i = ilist[ii]; + bool const i_in_sensor = (mask[i] & groupbit); + bool const i_in_source = !!(mask[i] & source_grpbit) != invert_source; + if (i_in_sensor && i_in_source) vector[i] += (preta * eta - selfint) * q[i]; + } +} + +/* ---------------------------------------------------------------------- */ + +void ElectrodeVector::tf_contribution(double *vector) +{ + int const inum = list->inum; + int *mask = atom->mask; + int *type = atom->type; + int *ilist = list->ilist; + double *q = atom->q; + + for (int ii = 0; ii < inum; ii++) { + int const i = ilist[ii]; + bool const i_in_sensor = (mask[i] & groupbit); + bool const i_in_source = !!(mask[i] & source_grpbit) != invert_source; + if (i_in_sensor && i_in_source) vector[i] += tf_types[type[i]] * q[i]; + } +} diff --git a/src/ELECTRODE/electrode_vector.h b/src/ELECTRODE/electrode_vector.h index f4cf533fe5..b241b6b434 100644 --- a/src/ELECTRODE/electrode_vector.h +++ b/src/ELECTRODE/electrode_vector.h @@ -19,6 +19,7 @@ #define LMP_ELECTRODE_VECTOR_H #include "pointers.h" +#include namespace LAMMPS_NS { @@ -27,6 +28,7 @@ class ElectrodeVector : protected Pointers { ElectrodeVector(class LAMMPS *, int, int, double, bool); ~ElectrodeVector() override; void setup(class Pair *, class NeighList *, bool); + void setup_tf(const std::map &); void compute_vector(double *); int igroup, source_group; @@ -36,11 +38,15 @@ class ElectrodeVector : protected Pointers { bigint ngroup; double **cutsq; double g_ewald, eta; + bool tfflag; + std::map tf_types; class Pair *pair; class NeighList *list; class ElectrodeKSpace *electrode_kspace; void pair_contribution(double *); + void self_contribution(double *); + void tf_contribution(double *); double kspace_time_total; double pair_time_total; diff --git a/src/ELECTRODE/fix_electrode_conp.cpp b/src/ELECTRODE/fix_electrode_conp.cpp index 7776b01544..da206707f1 100644 --- a/src/ELECTRODE/fix_electrode_conp.cpp +++ b/src/ELECTRODE/fix_electrode_conp.cpp @@ -40,7 +40,6 @@ #include "pointers.h" #include "text_file_reader.h" #include "variable.h" - #include #include @@ -70,10 +69,10 @@ static const char cite_fix_electrode[] = // fix fxupdate group1 electrode/conp pot1 eta couple group2 pot2 FixElectrodeConp::FixElectrodeConp(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg), f_inv(nullptr), f_mat(nullptr), f_vec(nullptr), array_compute(nullptr), - ele_vector(nullptr), capacitance(nullptr), elastance(nullptr), pair(nullptr), - mat_neighlist(nullptr), vec_neighlist(nullptr), recvcounts(nullptr), displs(nullptr), - iele_gathered(nullptr), buf_gathered(nullptr), potential_i(nullptr), potential_iele(nullptr), - charge_iele(nullptr) + elyt_vector(nullptr), elec_vector(nullptr), capacitance(nullptr), elastance(nullptr), + pair(nullptr), mat_neighlist(nullptr), vec_neighlist(nullptr), recvcounts(nullptr), + displs(nullptr), iele_gathered(nullptr), buf_gathered(nullptr), potential_i(nullptr), + potential_iele(nullptr) { if (lmp->citeme) lmp->citeme->add(cite_fix_electrode); // fix.h output flags @@ -86,6 +85,7 @@ FixElectrodeConp::FixElectrodeConp(LAMMPS *lmp, int narg, char **arg) : bool default_algo = true; algo = Algo::MATRIX_INV; matrix_algo = true; + cg_threshold = 0.; read_inv = read_mat = false; symm = false; ffield = false; @@ -98,6 +98,7 @@ FixElectrodeConp::FixElectrodeConp(LAMMPS *lmp, int narg, char **arg) : update_time = 0; mult_time = 0; + n_call = n_cg_step = 0; // read fix command fixname = std::string(arg[0]); @@ -150,19 +151,25 @@ FixElectrodeConp::FixElectrodeConp(LAMMPS *lmp, int narg, char **arg) : default_algo = false; if (iarg + 2 > narg) error->all(FLERR, "Need one argument after algo command"); char *algo_arg = arg[++iarg]; + bool cg_algo = false; if ((strcmp(algo_arg, "mat_inv") == 0)) { algo = Algo::MATRIX_INV; matrix_algo = true; } else if ((strcmp(algo_arg, "mat_cg") == 0)) { algo = Algo::MATRIX_CG; matrix_algo = true; + cg_algo = true; } else if ((strcmp(algo_arg, "cg") == 0)) { algo = Algo::CG; matrix_algo = false; + cg_algo = true; } else { error->all(FLERR, "Invalid argument after algo keyword"); } - + if (cg_algo) { + if (iarg + 2 > narg) error->all(FLERR, "Need one argument after algo *cg command"); + cg_threshold = utils::numeric(FLERR, arg[++iarg], false, lmp); + } } else if ((strncmp(arg[iarg], "write", 5) == 0)) { if (iarg + 2 > narg) error->all(FLERR, "Need one argument after write command"); if (comm->me == 0) { @@ -238,34 +245,38 @@ FixElectrodeConp::FixElectrodeConp(LAMMPS *lmp, int narg, char **arg) : if (igroup < 0) error->all(FLERR, "Failed to create union of groups"); // construct computes need_array_compute = !(read_inv || read_mat) && matrix_algo; - ele_vector = new ElectrodeVector(lmp, igroup, igroup, eta, true); + need_elec_vector = algo == Algo::CG; + elyt_vector = new ElectrodeVector(lmp, igroup, igroup, eta, true); + if (need_elec_vector) elec_vector = new ElectrodeVector(lmp, igroup, igroup, eta, false); if (need_array_compute) { array_compute = new ElectrodeMatrix(lmp, igroup, eta); } // error checks + write_vec = 0; int write_inv = 0; int write_mat = 0; if (comm->me == 0) { + write_vec = !!(f_inv); write_inv = !!(f_inv); write_mat = !!(f_mat); } + MPI_Bcast(&write_vec, 1, MPI_INT, 0, world); MPI_Bcast(&write_inv, 1, MPI_INT, 0, world); MPI_Bcast(&write_mat, 1, MPI_INT, 0, world); assert(groups.size() == group_bits.size()); assert(groups.size() == group_psi.size()); assert(groups.size() == group_psi_var_styles.size()); assert(groups.size() == group_psi_var_names.size()); - assert(igroup == ele_vector->igroup); + assert(igroup == elyt_vector->igroup); + if (need_elec_vector) assert(igroup == elec_vector->igroup); if (algo != Algo::MATRIX_INV) { if (read_inv || write_inv) error->all( FLERR, "Selected algorithm does not use inverted matrix. Cannot read/write inverted matrix."); - if (symm) - error->all(FLERR, "Setting 'symm on' compatible with matrix inversion algorithm, only"); } - if (!matrix_algo) { - if (read_mat || write_mat) - error->all(FLERR, "Selected algorithm does not use matrix. Cannot read/write matrix."); + if (!matrix_algo && (read_mat || write_mat || write_vec)) { + error->all(FLERR, + "Selected algorithm does not use matrix. Cannot read/write matrix or vector."); } if (need_array_compute) assert(igroup == array_compute->igroup); if (read_inv && read_mat) error->all(FLERR, "Cannot read matrix from two files"); @@ -302,13 +313,15 @@ FixElectrodeConp::FixElectrodeConp(LAMMPS *lmp, int narg, char **arg) : accel_interface = new ElectrodeAccelInterface(lmp); - memory->create(iele_gathered, ngroup, "FixElectrode:iele_gathered"); - memory->create(buf_gathered, ngroup, "FixElectrode:buf_gathered"); - memory->create(potential_iele, ngroup, "FixElectrode:potential_iele"); - memory->create(charge_iele, ngroup, "FixElectrode:charge_iele"); + if (matrix_algo) { + memory->create(iele_gathered, ngroup, "FixElectrode:iele_gathered"); + memory->create(buf_gathered, ngroup, "FixElectrode:buf_gathered"); + memory->create(potential_iele, ngroup, "FixElectrode:potential_iele"); + } atom->add_callback(Atom::GROW); // atomvec track local electrode atoms comm_reverse = 1; + comm_forward = 1; nlocalele = 0; @@ -489,22 +502,28 @@ void FixElectrodeConp::setup_post_neighbor() // pair and list setups: evscale = force->qe2f / force->qqrd2e; - ele_vector->setup(pair, vec_neighlist, timer_flag); + elyt_vector->setup(pair, vec_neighlist, timer_flag); + if (need_elec_vector) { + elec_vector->setup(pair, mat_neighlist, timer_flag); + if (tfflag) elec_vector->setup_tf(tf_types); + } if (need_array_compute) { if (etypes_neighlists) neighbor->build_one(mat_neighlist, 0); array_compute->setup(tag_to_iele, pair, mat_neighlist); if (tfflag) { array_compute->setup_tf(tf_types); } } // setup psi with target potentials - iele_to_group = std::vector(ngroup, -1); - sd_vectors = std::vector>(num_of_groups, std::vector(ngroup)); - sb_charges = std::vector(num_of_groups); - for (int i = 0; i < nlocal; i++) { - for (int g = 0; g < num_of_groups; g++) { - if (mask[i] & group_bits[g]) { iele_to_group[tag_to_iele[tag[i]]] = g; } + if (matrix_algo) { + iele_to_group = std::vector(ngroup, -1); + sd_vectors = std::vector>(num_of_groups, std::vector(ngroup)); + sb_charges = std::vector(num_of_groups); + for (int i = 0; i < nlocal; i++) { + for (int g = 0; g < num_of_groups; g++) { + if (mask[i] & group_bits[g]) { iele_to_group[tag_to_iele[tag[i]]] = g; } + } } + MPI_Allreduce(MPI_IN_PLACE, &iele_to_group.front(), ngroup, MPI_INT, MPI_MAX, world); } - MPI_Allreduce(MPI_IN_PLACE, &iele_to_group.front(), ngroup, MPI_INT, MPI_MAX, world); auto const order_matrix = [](std::vector order, double **mat) { size_t n = order.size(); @@ -564,17 +583,19 @@ void FixElectrodeConp::setup_post_neighbor() update_charges(); // write to files, ordered by group - memset(potential_i, 0, atom->nmax * sizeof(double)); - ele_vector->compute_vector(potential_i); - if (force->newton_pair) comm->reverse_comm(this); - buffer_and_gather(potential_i, potential_iele); - if (comm->me == 0) { - if (f_vec) { - std::vector> vec(ngroup, std::vector(1)); - for (int i = 0; i < ngroup; i++) { vec[group_idx[i]][0] = potential_iele[i]; } - write_to_file(f_vec, taglist_bygroup, vec); + if (write_vec) { + memset(potential_i, 0, atom->nmax * sizeof(double)); + elyt_vector->compute_vector(potential_i); + if (force->newton_pair) comm->reverse_comm(this); + gather_list_iele(); + buffer_and_gather(potential_i, potential_iele); + if (comm->me == 0) { + if (f_vec) { + std::vector> vec(ngroup, std::vector(1)); + for (int i = 0; i < ngroup; i++) { vec[group_idx[i]][0] = potential_iele[i]; } + write_to_file(f_vec, taglist_bygroup, vec); + } } - if (f_inv) { write_to_file(f_inv, taglist_bygroup, order_matrix(group_idx, capacitance)); } } } @@ -634,6 +655,10 @@ void FixElectrodeConp::symmetrize() void FixElectrodeConp::setup_pre_exchange() // create_taglist { + nlocalele_outdated = 1; // force regather + // + if (!matrix_algo) return; + int *mask = atom->mask; int const nlocal = atom->nlocal; int const nprocs = comm->nprocs; @@ -646,21 +671,21 @@ void FixElectrodeConp::setup_pre_exchange() // create_taglist taglist_bygroup = std::vector(); nlocalele = 0; for (int gbit : group_bits) { - std::vector taglist_local; + std::vector taglist_local_group; for (int i = 0; i < nlocal; i++) { if (mask[i] & gbit) { - taglist_local.push_back(tag[i]); + taglist_local_group.push_back(tag[i]); nlocalele++; } } // gather from all cpus for this group - int gnum_local = taglist_local.size(); + int gnum_local = taglist_local_group.size(); MPI_Allgather(&gnum_local, 1, MPI_INT, recvcounts, 1, MPI_INT, world); displs[0] = 0; for (int i = 1; i < nprocs; i++) { displs[i] = displs[i - 1] + recvcounts[i - 1]; } int const gnum = displs[nprocs - 1] + recvcounts[nprocs - 1]; std::vector taglist_all(gnum); - MPI_Allgatherv(&taglist_local.front(), gnum_local, MPI_LMP_TAGINT, &taglist_all.front(), + MPI_Allgatherv(&taglist_local_group.front(), gnum_local, MPI_LMP_TAGINT, &taglist_all.front(), recvcounts, displs, MPI_LMP_TAGINT, world); std::sort(taglist_all.begin(), taglist_all.end()); for (tagint t : taglist_all) taglist_bygroup.push_back(t); @@ -676,8 +701,6 @@ void FixElectrodeConp::setup_pre_exchange() // create_taglist tag_to_iele.insert(std::pair(taglist[i], i)); } - nlocalele_outdated = 1; // force regather - // group_idx allows mapping a vector that is sorted by taglist to being // ordered by taglist_bygroup group_idx = std::vector(taglist_bygroup.size()); @@ -778,6 +801,7 @@ int FixElectrodeConp::get_top_group() void FixElectrodeConp::update_charges() { + n_call++; MPI_Barrier(world); double start = MPI_Wtime(); if (atom->nmax > nmax) { @@ -786,52 +810,195 @@ void FixElectrodeConp::update_charges() memory->create(potential_i, nmax, "FixElectrode:potential_i"); } - std::fill(sb_charges.begin(), sb_charges.end(), 0.); double *q = atom->q; - int *mask = atom->mask; - tagint *tag = atom->tag; - int const nlocal = atom->nlocal; - int const nall = nlocal + atom->nghost; - memset(potential_i, 0, atom->nmax * sizeof(double)); - ele_vector->compute_vector(potential_i); - if (force->newton_pair) comm->reverse_comm(this); - buffer_and_gather(potential_i, potential_iele); - MPI_Barrier(world); + gather_list_iele(); pre_update(); - MPI_Barrier(world); - double mult_start = MPI_Wtime(); + auto q_local = std::vector(nlocalele, 0.); if (algo == Algo::MATRIX_INV) { + std::fill(sb_charges.begin(), sb_charges.end(), 0.); + memset(potential_i, 0, atom->nmax * sizeof(double)); + elyt_vector->compute_vector(potential_i); + if (force->newton_pair) comm->reverse_comm(this); + buffer_and_gather(potential_i, potential_iele); + MPI_Barrier(world); + double mult_start = MPI_Wtime(); for (int i_iele = 0; i_iele < nlocalele; i_iele++) { double q_tmp = 0; int const iele = list_iele[i_iele]; double *_noalias caprow = capacitance[iele]; for (int j = 0; j < ngroup; j++) { q_tmp -= caprow[j] * potential_iele[j]; } - buf_iele[i_iele] = q_tmp; + q_local[i_iele] = q_tmp; sb_charges[iele_to_group[iele]] += q_tmp; } - gather_elevec(charge_iele); MPI_Allreduce(MPI_IN_PLACE, &sb_charges.front(), num_of_groups, MPI_DOUBLE, MPI_SUM, world); - update_psi(); // use for equal-style and conq - for (int g = 0; g < num_of_groups; g++) - for (int j = 0; j < ngroup; j++) { charge_iele[j] += sd_vectors[g][j] * group_psi[g]; } + for (int j = 0; j < nlocalele; j++) q_local[j] += sd_vectors[g][list_iele[j]] * group_psi[g]; + MPI_Barrier(world); + mult_time += MPI_Wtime() - mult_start; + } else if (algo == Algo::MATRIX_CG || algo == Algo::CG) { // conjugate gradient algorithm + update_psi(); // update group_psi if equal-style + auto b = gather_elevec_local(elyt_vector); + for (int i = 0; i < nlocalele; i++) { + b[i] -= evscale * group_psi[iele_to_group_local[i]]; + q_local[i] = q[atom->map(taglist_local[i])]; // pre-condition with current charges + } + q_local = constraint_correction(q_local); + MPI_Barrier(world); + double mult_start = MPI_Wtime(); + auto a = ele_ele_interaction(q_local); + MPI_Barrier(world); + mult_time += MPI_Wtime() - mult_start; + auto r = add_nlocalele(b, a); + auto d = constraint_projection(r); + double dot_old = dot_nlocalele(r, d); + double delta = dot_old; + for (int k = 0; k < ngroup && delta > cg_threshold; k++, n_cg_step++) { + MPI_Barrier(world); + double mult_start_loop = MPI_Wtime(); + auto y = ele_ele_interaction(d); + MPI_Barrier(world); + mult_time += MPI_Wtime() - mult_start_loop; + double alpha = dot_old / -dot_nlocalele(d, y); + q_local = add_nlocalele(q_local, scale_vector(alpha, d)); + // prepare next step + if ((k + 1) % 20 == 0) { + // avoid shifting residual. TODO: apply constraint_correction? + a = ele_ele_interaction(q_local); + r = add_nlocalele(b, a); + } else { + r = add_nlocalele(r, scale_vector(alpha, y)); + } + auto p = constraint_projection(r); + double dot_new = dot_nlocalele(r, p); + d = add_nlocalele(p, scale_vector(dot_new / dot_old, d)); + delta = dot_nlocalele(r, d); + dot_old = dot_new; + } + if (delta > cg_threshold && comm->me == 0) error->warning(FLERR, "CG threshold not reached"); } else { error->all(FLERR, "This algorithm is not implemented, yet"); } - - for (int i = 0; i < nall; i++) { - if (!(groupbit & mask[i])) continue; - int const iele = tag_to_iele[tag[i]]; - q[i] = charge_iele[iele]; - } - - MPI_Barrier(world); - mult_time += MPI_Wtime() - mult_start; + set_charges(q_local); update_time += MPI_Wtime() - start; accel_interface->intel_pack_buffers(); } +std::vector FixElectrodeConp::ele_ele_interaction(std::vector q_local) +{ + assert(q_local.size() == nlocalele); + assert(algo == Algo::CG || algo == Algo::MATRIX_CG); + if (algo == Algo::CG) { + set_charges(q_local); + return gather_elevec_local(elec_vector); + } else { + return times_elastance(gather_ngroup(q_local)); + } +} + +/* ---------------------------------------------------------------------- */ + +void FixElectrodeConp::set_charges(std::vector q_local) +{ + assert(q_local.size() == nlocalele); + double *q = atom->q; + for (int i = 0; i < nlocalele; i++) q[atom->map(taglist_local[i])] = q_local[i]; + comm->forward_comm(this); +} + +/* ---------------------------------------------------------------------- */ + +std::vector FixElectrodeConp::gather_elevec_local(ElectrodeVector *vec) +{ + memset(potential_i, 0, atom->nmax * sizeof(double)); + vec->compute_vector(potential_i); + if (force->newton_pair) comm->reverse_comm(this); + auto a = std::vector(nlocalele, 0.); + for (int i = 0; i < nlocalele; i++) a[i] = potential_i[atom->map(taglist_local[i])]; + return a; +} + +/* ---------------------------------------------------------------------- */ + +std::vector FixElectrodeConp::gather_ngroup(std::vector x_local) +{ + auto x = std::vector(ngroup, 0.); + for (int i = 0; i < nlocalele; i++) { + int const iele = list_iele[i]; + x[iele] = x_local[i]; + } + MPI_Allreduce(MPI_IN_PLACE, &x.front(), ngroup, MPI_DOUBLE, MPI_SUM, world); + return x; +} + +/* ---------------------------------------------------------------------- + ensure total electrode charge is 0 if symm +------------------------------------------------------------------------- */ + +std::vector FixElectrodeConp::constraint_correction(std::vector x) +{ + return constraint_projection(x); +} + +/* ---------------------------------------------------------------------- + project into direction that conserves total charge (cf. Gingrich master thesis) +------------------------------------------------------------------------- */ + +std::vector FixElectrodeConp::constraint_projection(std::vector x) +{ + if (symm) { + double sum = 0.; + for (double xi : x) sum += xi; + MPI_Allreduce(MPI_IN_PLACE, &sum, 1, MPI_DOUBLE, MPI_SUM, world); + sum /= ngroup; + for (double &xi : x) xi -= sum; + } + return x; +} + +/* ---------------------------------------------------------------------- */ + +std::vector FixElectrodeConp::scale_vector(double alpha, std::vector x) +{ + for (double &xi : x) xi *= alpha; + return x; +} + +/* ---------------------------------------------------------------------- */ + +std::vector FixElectrodeConp::add_nlocalele(std::vector a, std::vector b) +{ + assert(a.size() == nlocalele && b.size() == nlocalele); + for (int i = 0; i < nlocalele; i++) a[i] += b[i]; + return a; +} + +/* ---------------------------------------------------------------------- */ + +double FixElectrodeConp::dot_nlocalele(std::vector a, std::vector b) +{ + assert(a.size() == nlocalele && b.size() == nlocalele); + double out = 0.; + for (int i = 0; i < nlocalele; i++) out += a[i] * b[i]; + MPI_Allreduce(MPI_IN_PLACE, &out, 1, MPI_DOUBLE, MPI_SUM, world); + return out; +} + +/* ---------------------------------------------------------------------- */ + +std::vector FixElectrodeConp::times_elastance(std::vector x) +{ + assert(x.size() == ngroup); + auto out = std::vector(nlocalele, 0.); + for (int i = 0; i < nlocalele; i++) { + double *_noalias row = elastance[list_iele[i]]; + double oi = 0; + for (int j = 0; j < ngroup; j++) oi += row[j] * x[j]; + out[i] = oi; + } + return out; +} + /* ---------------------------------------------------------------------- */ void FixElectrodeConp::update_psi() @@ -937,18 +1104,17 @@ double FixElectrodeConp::potential_energy(int eflag) double const qqrd2e = force->qqrd2e; int const nlocal = atom->nlocal; int *mask = atom->mask; - tagint *tag = atom->tag; double *q = atom->q; double energy = 0; - for (int i = 0; i < nlocal; i++) { + for (int i = 0, iele = 0; i < nlocal; i++) { if (groupbit & mask[i]) { - int const i_iele = tag_to_iele[tag[i]]; - double e = -qqrd2e * q[i] * group_psi[iele_to_group[i_iele]] * evscale; + double e = -qqrd2e * q[i] * group_psi[iele_to_group_local[iele]] * evscale; energy += e; if (eflag) { force->pair->ev_tally(i, i, nlocal, force->newton_pair, 0., e, 0, 0, 0, 0); // 0 evdwl, 0 fpair, 0 delxyz } + iele++; } } MPI_Allreduce(MPI_IN_PLACE, &energy, 1, MPI_DOUBLE, MPI_SUM, world); @@ -1063,22 +1229,29 @@ double FixElectrodeConp::gausscorr(int eflag, bool fflag) FixElectrodeConp::~FixElectrodeConp() { - if (timer_flag && (comm->me == 0)) { - utils::logmesg(lmp, fmt::format("Multiplication time: {:.4g} s\n", mult_time)); - utils::logmesg(lmp, fmt::format("Update time: {:.4g} s\n", update_time)); + if (comm->me == 0) { + if (timer_flag) { + utils::logmesg(lmp, fmt::format("Multiplication time: {:.4g} s\n", mult_time)); + utils::logmesg(lmp, fmt::format("Update time: {:.4g} s\n", update_time)); + } + if (algo == Algo::CG || algo == Algo::MATRIX_CG) + utils::logmesg( + lmp, fmt::format("Average conjugate gradient steps: {:.4g}\n", n_cg_step * 1. / n_call)); } if (modify->find_fix(id) != -1) // avoid segfault if derived fixes' ctor throws err atom->delete_callback(id, Atom::GROW); // atomvec track local electrode atoms - delete[] recvcounts; - delete[] displs; - memory->destroy(iele_gathered); - memory->destroy(buf_gathered); + if (matrix_algo) { + delete[] recvcounts; + delete[] displs; + memory->destroy(iele_gathered); + memory->destroy(buf_gathered); + memory->destroy(potential_iele); + } memory->destroy(potential_i); - memory->destroy(potential_iele); - memory->destroy(charge_iele); if (need_array_compute) delete array_compute; - delete ele_vector; + if (need_elec_vector) delete elec_vector; + delete elyt_vector; if (algo == Algo::MATRIX_INV) memory->destroy(capacitance); else if (matrix_algo) @@ -1212,11 +1385,16 @@ void FixElectrodeConp::request_etypes_neighlists() } } - if (!(read_inv || read_mat)) { + if (need_array_compute) { auto matReq = neighbor->add_request(this, NeighConst::REQ_OCCASIONAL); matReq->set_skip(iskip_mat, ijskip_mat); matReq->set_id(1); if (intelflag) matReq->enable_intel(); + } else if (need_elec_vector) { + auto matReq = neighbor->add_request(this); + matReq->set_skip(iskip_mat, ijskip_mat); + matReq->set_id(1); + if (intelflag) matReq->enable_intel(); } else { delete[] iskip_mat; memory->destroy(ijskip_mat); @@ -1254,26 +1432,40 @@ void FixElectrodeConp::gather_list_iele() int *mask = atom->mask; tagint *tag = atom->tag; int const nlocal = atom->nlocal; - list_iele.clear(); - list_iele.reserve(nlocalele); - for (int i = 0; i < nlocal; i++) { - if (mask[i] & groupbit) list_iele.push_back(tag_to_iele[tag[i]]); + if (matrix_algo) { + list_iele.clear(); + list_iele.reserve(nlocalele); } + taglist_local.clear(); + iele_to_group_local.clear(); + for (int i = 0, iele = 0; i < nlocal; i++) { + if (mask[i] & groupbit) { + tagint const t = tag[i]; + if (matrix_algo) list_iele.push_back(tag_to_iele[t]); + taglist_local.push_back(t); + for (int g = 0; g < num_of_groups; g++) + if (mask[i] & group_bits[g]) iele_to_group_local.push_back(g); + iele++; + } + } + nlocalele = static_cast(taglist_local.size()); // just for safety + assert(iele_to_group_local.size() == nlocalele); - nlocalele = static_cast(list_iele.size()); // just for safety + if (matrix_algo) { + MPI_Allgather(&nlocalele, 1, MPI_INT, recvcounts, 1, MPI_INT, world); + displs[0] = 0; + int const nprocs = comm->nprocs; + for (int i = 1; i < nprocs; i++) { displs[i] = displs[i - 1] + recvcounts[i - 1]; } - MPI_Allgather(&nlocalele, 1, MPI_INT, recvcounts, 1, MPI_INT, world); - displs[0] = 0; - int const nprocs = comm->nprocs; - for (int i = 1; i < nprocs; i++) { displs[i] = displs[i - 1] + recvcounts[i - 1]; } - - MPI_Allgatherv(&list_iele[0], nlocalele, MPI_INT, iele_gathered, recvcounts, displs, MPI_INT, - world); + MPI_Allgatherv(&list_iele[0], nlocalele, MPI_INT, iele_gathered, recvcounts, displs, MPI_INT, + world); + } nlocalele_outdated = 0; } void FixElectrodeConp::gather_elevec(double *elevec) { + assert(matrix_algo); MPI_Allgatherv(&buf_iele[0], nlocalele, MPI_DOUBLE, buf_gathered, recvcounts, displs, MPI_DOUBLE, world); @@ -1282,13 +1474,11 @@ void FixElectrodeConp::gather_elevec(double *elevec) void FixElectrodeConp::buffer_and_gather(double *ivec, double *elevec) { - gather_list_iele(); - + assert(matrix_algo); buf_iele.reserve(nlocalele); // avoid unexpected reallocs for (int i_iele = 0; i_iele < nlocalele; i_iele++) { buf_iele[i_iele] = ivec[atom->map(taglist[list_iele[i_iele]])]; } - gather_elevec(elevec); } @@ -1298,16 +1488,25 @@ double FixElectrodeConp::memory_usage() int const nmax = atom->nmax; double bytes = 0.0; bytes += nmax * (sizeof(double)); // potential_i - bytes += ngroup * - (sizeof(int) + 3 * sizeof(double)); // iele_gathered, buf_gathered, pot / charge_iele - if (matrix_algo) bytes += ngroup * ngroup * sizeof(double); // capacitance or elastance - bytes += nprocs * (2 * sizeof(int)); // displs, recvcounts - bytes += list_iele.capacity() * sizeof(int); - bytes += buf_iele.capacity() * sizeof(double); + if (matrix_algo) { + bytes += ngroup * (sizeof(int) + 2 * sizeof(double)); // iele_gathered, buf_gathered, pot + bytes += ngroup * ngroup * sizeof(double); // capacitance or elastance + bytes += list_iele.capacity() * sizeof(int); + bytes += buf_iele.capacity() * sizeof(double); + bytes += nprocs * (2 * sizeof(int)); // displs, recvcounts + bytes += (tag_to_iele.size() * (sizeof(int) + sizeof(void *)) + // data list + tag_to_iele.bucket_count() * (sizeof(void *) + sizeof(size_t))); // bucket index + bytes += taglist.capacity() * sizeof(tagint); + bytes += iele_to_group.capacity() * sizeof(int); + } + bytes += taglist_local.capacity() * sizeof(tagint); + bytes += iele_to_group_local.capacity() * sizeof(int); return bytes; } +/* ---------------------------------------------------------------------- */ + int FixElectrodeConp::pack_reverse_comm(int n, int first, double *buf) { int m = 0; @@ -1317,7 +1516,30 @@ int FixElectrodeConp::pack_reverse_comm(int n, int first, double *buf) return m; } +/* ---------------------------------------------------------------------- */ + void FixElectrodeConp::unpack_reverse_comm(int n, int *list, double *buf) { for (int i = 0; i < n; i++) { potential_i[list[i]] += buf[i]; } } + +/* ---------------------------------------------------------------------- */ + +int FixElectrodeConp::pack_forward_comm(int n, int *list, double *buf, int /*pbc_flag*/, + int * /*pbc*/) +{ + int m = 0; + for (int i = 0; i < n; i++) { + int const j = list[i]; + buf[m++] = atom->q[j]; + } + return m; +} + +/* ---------------------------------------------------------------------- */ + +void FixElectrodeConp::unpack_forward_comm(int n, int first, double *buf) +{ + int const last = first + n; + for (int i = first, m = 0; i < last; i++) atom->q[i] = buf[m++]; +} diff --git a/src/ELECTRODE/fix_electrode_conp.h b/src/ELECTRODE/fix_electrode_conp.h index 757991d282..e65b577e08 100644 --- a/src/ELECTRODE/fix_electrode_conp.h +++ b/src/ELECTRODE/fix_electrode_conp.h @@ -62,15 +62,20 @@ class FixElectrodeConp : public Fix { int pack_reverse_comm(int, int, double *) override; void unpack_reverse_comm(int, int *, double *) override; + int pack_forward_comm(int, int *, double *, int, int *) override; + void unpack_forward_comm(int, int, double *) override; protected: enum class Algo { MATRIX_INV, MATRIX_CG, CG }; enum class VarStyle { CONST, EQUAL }; virtual void update_psi(); virtual void pre_update(){}; + virtual std::vector constraint_projection(std::vector); + virtual std::vector constraint_correction(std::vector); virtual void compute_macro_matrices(); std::vector group_psi; std::vector group_bits; + std::vector groups; int num_of_groups; bigint ngroup; std::vector> sd_vectors; @@ -78,6 +83,7 @@ class FixElectrodeConp : public Fix { std::vector group_psi_var_ids; std::vector group_psi_var_styles; std::vector group_psi_var_names; + std::vector iele_to_group_local; bool symm; // symmetrize elastance for charge neutrality Algo algo; std::vector> macro_elastance; // used by conq @@ -91,15 +97,16 @@ class FixElectrodeConp : public Fix { private: FILE *f_inv, *f_mat, *f_vec; // files for capacitance, eleastance and vector + int write_vec; std::string input_file_inv, input_file_mat; class ElectrodeMatrix *array_compute; - class ElectrodeVector *ele_vector; - std::vector groups; + class ElectrodeVector *elyt_vector, *elec_vector; double **capacitance, **elastance; bool read_inv, read_mat; - bool matrix_algo, need_array_compute; - double eta; + bool matrix_algo, need_array_compute, need_elec_vector; + double eta, cg_threshold; double update_time, mult_time; + int n_cg_step, n_call; void create_taglist(); void invert(); void symmetrize(); @@ -124,12 +131,22 @@ class FixElectrodeConp : public Fix { bool tfflag; bool timer_flag; std::map tf_types; + // cg + std::vector ele_ele_interaction(std::vector); + std::vector scale_vector(double, std::vector); + std::vector add_nlocalele(std::vector, std::vector); + double dot_nlocalele(std::vector, std::vector); + std::vector times_elastance(std::vector); + std::vector gather_ngroup(std::vector); + std::vector gather_elevec_local(ElectrodeVector *); + void set_charges(std::vector); // fix-specific electrode ID storage system: - std::vector taglist; // global list: all tags in combined electrode group - std::vector taglist_bygroup; // taglist sorted by group - std::vector group_idx; // permutation taglist<->taglist_bygroup + std::vector taglist; // global list: all tags in combined electrode group + std::vector taglist_local; + std::vector taglist_bygroup; // taglist sorted by group + std::vector group_idx; // permutation taglist<->taglist_bygroup std::unordered_map tag_to_iele; // inverse of taglist: std::vector iele_to_group; // tag_to_iele[taglist[iele]] = iele @@ -143,7 +160,6 @@ class FixElectrodeConp : public Fix { double *buf_gathered; // buffer for MPIgathered buf_iele (NOT YET iele-ordered) double *potential_i; // potentials, i-indexed (0 for non-electrode atoms) double *potential_iele; // potentials ordered by iele - double *charge_iele; // charges ordered by iele void gather_list_iele(); // build iele_gathered void gather_elevec(double *); // gather buf_iele and rearrange into iele-order diff --git a/src/ELECTRODE/fix_electrode_conq.cpp b/src/ELECTRODE/fix_electrode_conq.cpp index 15716ec7a4..e0c6cd4cbd 100644 --- a/src/ELECTRODE/fix_electrode_conq.cpp +++ b/src/ELECTRODE/fix_electrode_conq.cpp @@ -19,15 +19,12 @@ #include "error.h" #include "fix_electrode_conp.h" +#include "group.h" #include "input.h" #include "variable.h" using namespace LAMMPS_NS; -#define SMALL 0.00001 - -// 0 1 2 3 4 -// fix fxupdate group1 electrode/conp pot1 eta couple group2 pot2 FixElectrodeConq::FixElectrodeConq(LAMMPS *lmp, int narg, char **arg) : FixElectrodeConp(lmp, narg, arg) { @@ -35,25 +32,59 @@ FixElectrodeConq::FixElectrodeConq(LAMMPS *lmp, int narg, char **arg) : group_q = group_psi; if (symm) error->all(FLERR, "Keyword symm on not allowed in electrode/conq"); - if (algo != Algo::MATRIX_INV) error->all(FLERR, "Algorithm not allowed in electrode/conq"); } void FixElectrodeConq::update_psi() { - // don't need MPI_Barrier because always preceded by MPI_Allreduce for (int g = 0; g < num_of_groups; g++) { if (group_psi_var_styles[g] == VarStyle::CONST) continue; group_q[g] = input->variable->compute_equal(group_psi_var_ids[g]); } + if (algo == Algo::MATRIX_INV) { + std::vector group_remainder_q(num_of_groups); + for (int g = 0; g < num_of_groups; g++) { group_remainder_q[g] = group_q[g] - sb_charges[g]; } - std::vector group_remainder_q(num_of_groups); - for (int g = 0; g < num_of_groups; g++) { group_remainder_q[g] = group_q[g] - sb_charges[g]; } - - for (int g = 0; g < num_of_groups; g++) { - double vtmp = 0; - for (int h = 0; h < num_of_groups; h++) { - vtmp += macro_elastance[g][h] * group_remainder_q[h]; + for (int g = 0; g < num_of_groups; g++) { + double vtmp = 0; + for (int h = 0; h < num_of_groups; h++) { + vtmp += macro_elastance[g][h] * group_remainder_q[h]; + } + group_psi[g] = vtmp; } - group_psi[g] = vtmp; + } else { + for (double &g : group_psi) g = 0; } } + +/* ---------------------------------------------------------------------- + Correct charge of each electrode to target charge by adding a homogeneous charge +------------------------------------------------------------------------- */ + +std::vector FixElectrodeConq::constraint_correction(std::vector x) +{ + int const n = x.size(); + auto sums = std::vector(num_of_groups, 0); + for (int i = 0; i < n; i++) sums[iele_to_group_local[i]] += x[i]; + MPI_Allreduce(MPI_IN_PLACE, &sums.front(), num_of_groups, MPI_DOUBLE, MPI_SUM, world); + for (int g = 0; g < num_of_groups; g++) { + sums[g] -= group_q[g]; + sums[g] /= group->count(groups[g]); + } + for (int i = 0; i < n; i++) x[i] -= sums[iele_to_group_local[i]]; + return x; +} + +/* ---------------------------------------------------------------------- + Project into direction that conserves charge of each electrode (cf. M. Shariff (1995)) +------------------------------------------------------------------------- */ + +std::vector FixElectrodeConq::constraint_projection(std::vector x) +{ + int const n = x.size(); + auto sums = std::vector(num_of_groups, 0); + for (int i = 0; i < n; i++) sums[iele_to_group_local[i]] += x[i]; + MPI_Allreduce(MPI_IN_PLACE, &sums.front(), num_of_groups, MPI_DOUBLE, MPI_SUM, world); + for (int g = 0; g < num_of_groups; g++) sums[g] /= group->count(groups[g]); + for (int i = 0; i < n; i++) x[i] -= sums[iele_to_group_local[i]]; + return x; +} diff --git a/src/ELECTRODE/fix_electrode_conq.h b/src/ELECTRODE/fix_electrode_conq.h index 2497d12996..38d9b50efa 100644 --- a/src/ELECTRODE/fix_electrode_conq.h +++ b/src/ELECTRODE/fix_electrode_conq.h @@ -34,6 +34,8 @@ class FixElectrodeConq : public FixElectrodeConp { public: FixElectrodeConq(class LAMMPS *, int, char **); void update_psi() override; + std::vector constraint_projection(std::vector) override; + std::vector constraint_correction(std::vector) override; private: std::vector group_q; diff --git a/src/ELECTRODE/pppm_electrode.cpp b/src/ELECTRODE/pppm_electrode.cpp index a0eef84389..80e055f72d 100644 --- a/src/ELECTRODE/pppm_electrode.cpp +++ b/src/ELECTRODE/pppm_electrode.cpp @@ -454,9 +454,10 @@ void PPPMElectrode::compute(int eflag, int vflag) start_compute(); - if (compute_vector_called) { - // electrolyte_density_brick is filled, so we can - // grab only electrode atoms + if (compute_vector_called && last_invert_source) { + // electrolyte_density_brick is filled, so we can grab only electrode atoms. + // Does not work for direct cg algorithm because electrode charges change after compute_vector. + // Therefore, only when last_invert_source true. // TODO: this is dangerous now that compute_vector's interface has been // changed since a compute could call an arbitrary source, needs tightening make_rho_in_brick(last_source_grpbit, density_brick, !last_invert_source); @@ -486,9 +487,6 @@ void PPPMElectrode::compute(int eflag, int vflag) // also performs per-atom calculations via poisson_peratom() poisson(); - // cout << "###" << endl - //<< "POISSON ENERGY: " << energy * 0.5 * volume << endl - //<< "###" << endl; // all procs communicate E-field values // to fill ghost cells surrounding their 3d bricks From fbaeb09516502813ec52cedcede63b6c2fd3091d Mon Sep 17 00:00:00 2001 From: srtee Date: Fri, 16 Sep 2022 15:46:59 +1000 Subject: [PATCH 12/46] fix whitespace --- src/ELECTRODE/fix_electrode_conp.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ELECTRODE/fix_electrode_conp.cpp b/src/ELECTRODE/fix_electrode_conp.cpp index f18b65bd9a..3bd9d02f25 100644 --- a/src/ELECTRODE/fix_electrode_conp.cpp +++ b/src/ELECTRODE/fix_electrode_conp.cpp @@ -68,7 +68,7 @@ static const char cite_fix_electrode[] = // 0 1 2 3 4 // fix fxupdate group1 electrode/conp pot1 eta couple group2 pot2 FixElectrodeConp::FixElectrodeConp(LAMMPS *lmp, int narg, char **arg) : - Fix(lmp, narg, arg), elec_vector(nullptr), elyt_vector(nullptr), + Fix(lmp, narg, arg), elec_vector(nullptr), elyt_vector(nullptr), capacitance(nullptr), elastance(nullptr), pair(nullptr), mat_neighlist(nullptr), vec_neighlist(nullptr), recvcounts(nullptr), displs(nullptr), iele_gathered(nullptr), buf_gathered(nullptr), potential_i(nullptr), potential_iele(nullptr) From e88ceabb83922eecb8872aba0ae87d6a97b4fab2 Mon Sep 17 00:00:00 2001 From: srtee Date: Fri, 16 Sep 2022 16:18:21 +1000 Subject: [PATCH 13/46] improved read/write matrix logic --- src/ELECTRODE/fix_electrode_conp.cpp | 78 ++++++++++++---------------- 1 file changed, 32 insertions(+), 46 deletions(-) diff --git a/src/ELECTRODE/fix_electrode_conp.cpp b/src/ELECTRODE/fix_electrode_conp.cpp index 3bd9d02f25..f657e75970 100644 --- a/src/ELECTRODE/fix_electrode_conp.cpp +++ b/src/ELECTRODE/fix_electrode_conp.cpp @@ -171,21 +171,17 @@ FixElectrodeConp::FixElectrodeConp(LAMMPS *lmp, int narg, char **arg) : } } else if ((strncmp(arg[iarg], "write", 5) == 0)) { if (iarg + 2 > narg) error->all(FLERR, "Need one argument after write command"); - if (comm->me == 0) { - if ((strcmp(arg[iarg], "write_inv") == 0)) { // capacitance matrix - write_inv = true; - output_file_inv = arg[++iarg]; - } else if ((strcmp(arg[iarg], "write_mat") == 0)) { // elastance matrix - write_mat = true; - output_file_mat = arg[++iarg]; - } else if ((strcmp(arg[iarg], "write_vec") == 0)) { // b vector - write_vec = true; - output_file_vec = arg[++iarg]; - } else { - error->all(FLERR, "Illegal fix electrode/conp command with write"); - } + if ((strcmp(arg[iarg], "write_inv") == 0)) { // capacitance matrix + write_inv = true; + output_file_inv = arg[++iarg]; + } else if ((strcmp(arg[iarg], "write_mat") == 0)) { // elastance matrix + write_mat = true; + output_file_mat = arg[++iarg]; + } else if ((strcmp(arg[iarg], "write_vec") == 0)) { // b vector + write_vec = true; + output_file_vec = arg[++iarg]; } else { - iarg++; + error->all(FLERR, "Illegal fix electrode/conp command with write"); } } else if ((strncmp(arg[iarg], "read", 4) == 0)) { if (iarg + 2 > narg) error->all(FLERR, "Need one argument after read command"); @@ -495,40 +491,30 @@ void FixElectrodeConp::setup_post_neighbor() if (matrix_algo) { memory->create(elastance, ngroup, ngroup, "fix_electrode:matrix"); - // reading capacitance? - // Y: assert MATRIX_INV; read capacitance - if (read_inv) { - assert(algo == Algo::MATRIX_INV); - capacitance = elastance; - elastance = nullptr; - read_from_file(input_file_inv, capacitance, "capacitance"); - } else { - // N: reading elastance? - if (read_mat) // Y: read elastance - read_from_file(input_file_mat, elastance, "elastance"); - else { // N: compute elastance - if (etypes_neighlists) neighbor->build_one(mat_neighlist, 0); - auto array_compute = std::unique_ptr(new ElectrodeMatrix(lmp, igroup, eta)); - array_compute->setup(tag_to_iele, pair, mat_neighlist); - if (tfflag) { array_compute->setup_tf(tf_types); } - array_compute->compute_array(elastance, timer_flag); - } - if (comm->me == 0 && write_mat) { // writing elastance? Y: write elastance - auto f_mat = fopen(output_file_mat.c_str(), "w"); - if (f_mat == nullptr) - error->one(FLERR, - fmt::format("Cannot open elastance matrix file {}: {}", output_file_mat, - utils::getsyserror())); - write_to_file(f_mat, taglist_bygroup, order_matrix(group_idx, capacitance)); - fclose(f_mat); - } + if (read_mat) + read_from_file(input_file_mat, elastance, "elastance"); + else { + if (etypes_neighlists) neighbor->build_one(mat_neighlist, 0); + auto array_compute = std::unique_ptr(new ElectrodeMatrix(lmp, igroup, eta)); + array_compute->setup(tag_to_iele, pair, mat_neighlist); + if (tfflag) { array_compute->setup_tf(tf_types); } + array_compute->compute_array(elastance, timer_flag); + } // write_mat before proceeding + if (comm->me == 0 && write_mat) { + auto f_mat = fopen(output_file_mat.c_str(), "w"); + if (f_mat == nullptr) + error->one(FLERR, + fmt::format("Cannot open elastance matrix file {}: {}", output_file_mat, + utils::getsyserror())); + write_to_file(f_mat, taglist_bygroup, order_matrix(group_idx, capacitance)); + fclose(f_mat); } if (algo == Algo::MATRIX_INV) { - if (!read_inv) { - capacitance = elastance; - elastance = nullptr; - invert(); - } + capacitance = elastance; + elastance = nullptr; + if (read_inv) + read_from_file(input_file_inv, capacitance, "capacitance"); + else invert(); if (symm) symmetrize(); // TODO: is this safe with read_inv? // build sd vectors and macro matrices MPI_Barrier(world); From da78a18754218ae0ea52d28bf6740554de291582 Mon Sep 17 00:00:00 2001 From: srtee Date: Fri, 16 Sep 2022 16:21:59 +1000 Subject: [PATCH 14/46] fixed elastance matrix writing --- src/ELECTRODE/fix_electrode_conp.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ELECTRODE/fix_electrode_conp.cpp b/src/ELECTRODE/fix_electrode_conp.cpp index f657e75970..90e674e1c3 100644 --- a/src/ELECTRODE/fix_electrode_conp.cpp +++ b/src/ELECTRODE/fix_electrode_conp.cpp @@ -506,7 +506,7 @@ void FixElectrodeConp::setup_post_neighbor() error->one(FLERR, fmt::format("Cannot open elastance matrix file {}: {}", output_file_mat, utils::getsyserror())); - write_to_file(f_mat, taglist_bygroup, order_matrix(group_idx, capacitance)); + write_to_file(f_mat, taglist_bygroup, order_matrix(group_idx, elastance)); fclose(f_mat); } if (algo == Algo::MATRIX_INV) { From b1afa8b767df15e29d87291c9caf124ce25f4a14 Mon Sep 17 00:00:00 2001 From: Ludwig Ahrens Date: Wed, 21 Sep 2022 14:24:26 +0200 Subject: [PATCH 15/46] Bugfix allocation for matrix algo in fix electrode --- src/ELECTRODE/fix_electrode_conp.cpp | 29 ++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/src/ELECTRODE/fix_electrode_conp.cpp b/src/ELECTRODE/fix_electrode_conp.cpp index 90e674e1c3..a111920e4c 100644 --- a/src/ELECTRODE/fix_electrode_conp.cpp +++ b/src/ELECTRODE/fix_electrode_conp.cpp @@ -40,6 +40,7 @@ #include "pointers.h" #include "text_file_reader.h" #include "variable.h" + #include #include @@ -68,10 +69,10 @@ static const char cite_fix_electrode[] = // 0 1 2 3 4 // fix fxupdate group1 electrode/conp pot1 eta couple group2 pot2 FixElectrodeConp::FixElectrodeConp(LAMMPS *lmp, int narg, char **arg) : - Fix(lmp, narg, arg), elec_vector(nullptr), elyt_vector(nullptr), - capacitance(nullptr), elastance(nullptr), pair(nullptr), - mat_neighlist(nullptr), vec_neighlist(nullptr), recvcounts(nullptr), displs(nullptr), - iele_gathered(nullptr), buf_gathered(nullptr), potential_i(nullptr), potential_iele(nullptr) + Fix(lmp, narg, arg), elyt_vector(nullptr), elec_vector(nullptr), capacitance(nullptr), + elastance(nullptr), pair(nullptr), mat_neighlist(nullptr), vec_neighlist(nullptr), + recvcounts(nullptr), displs(nullptr), iele_gathered(nullptr), buf_gathered(nullptr), + potential_i(nullptr), potential_iele(nullptr) { if (lmp->citeme) lmp->citeme->add(cite_fix_electrode); // fix.h output flags @@ -490,6 +491,17 @@ void FixElectrodeConp::setup_post_neighbor() }; if (matrix_algo) { + + sd_vectors = std::vector>(num_of_groups, std::vector(ngroup)); + sb_charges = std::vector(num_of_groups); + iele_to_group = std::vector(ngroup, -1); + for (int i = 0; i < nlocal; i++) { + for (int g = 0; g < num_of_groups; g++) { + if (mask[i] & group_bits[g]) { iele_to_group[tag_to_iele[tag[i]]] = g; } + } + } + MPI_Allreduce(MPI_IN_PLACE, &iele_to_group.front(), ngroup, MPI_INT, MPI_MAX, world); + memory->create(elastance, ngroup, ngroup, "fix_electrode:matrix"); if (read_mat) read_from_file(input_file_mat, elastance, "elastance"); @@ -499,7 +511,7 @@ void FixElectrodeConp::setup_post_neighbor() array_compute->setup(tag_to_iele, pair, mat_neighlist); if (tfflag) { array_compute->setup_tf(tf_types); } array_compute->compute_array(elastance, timer_flag); - } // write_mat before proceeding + } // write_mat before proceeding if (comm->me == 0 && write_mat) { auto f_mat = fopen(output_file_mat.c_str(), "w"); if (f_mat == nullptr) @@ -514,8 +526,9 @@ void FixElectrodeConp::setup_post_neighbor() elastance = nullptr; if (read_inv) read_from_file(input_file_inv, capacitance, "capacitance"); - else invert(); - if (symm) symmetrize(); // TODO: is this safe with read_inv? + else + invert(); + if (symm) symmetrize(); // TODO: is this safe with read_inv? // build sd vectors and macro matrices MPI_Barrier(world); double start = MPI_Wtime(); @@ -554,7 +567,7 @@ void FixElectrodeConp::setup_post_neighbor() } if (write_inv) { - if (comm->me == 0) { + if (comm->me == 0) { auto f_inv = fopen(output_file_inv.c_str(), "w"); if (f_inv == nullptr) error->one(FLERR, From e73a0e522f5c7994006298732cc0fa97910f79ab Mon Sep 17 00:00:00 2001 From: Ludwig Ahrens Date: Tue, 27 Sep 2022 14:21:00 +0200 Subject: [PATCH 16/46] Check if multiple electrode fixes --- src/ELECTRODE/fix_electrode_conp.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/ELECTRODE/fix_electrode_conp.cpp b/src/ELECTRODE/fix_electrode_conp.cpp index da206707f1..4dcca8d980 100644 --- a/src/ELECTRODE/fix_electrode_conp.cpp +++ b/src/ELECTRODE/fix_electrode_conp.cpp @@ -413,6 +413,12 @@ void FixElectrodeConp::init() } if (pair == nullptr) error->all(FLERR, "Fix electrode couldn't find a Coulombic pair style"); + // error if more than one fix electrode/* + int count = 0; + for (int i = 0; i < modify->nfix; i++) + if (strncmp(modify->fix[i]->style, "electrode", 9) == 0) count++; + if (count > 1) error->all(FLERR, "More than one fix electrode"); + // check for package intel accel_interface->intel_find_fix(); if (etypes_neighlists) From 0932434f55286e6326b7ef0049d2482662403c4b Mon Sep 17 00:00:00 2001 From: Ludwig Ahrens-Iwers Date: Fri, 7 Oct 2022 04:23:27 +0000 Subject: [PATCH 17/46] Apply 1 suggestion(s) to 1 file(s) --- src/ELECTRODE/fix_electrode_conp.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ELECTRODE/fix_electrode_conp.cpp b/src/ELECTRODE/fix_electrode_conp.cpp index a111920e4c..dba32f037c 100644 --- a/src/ELECTRODE/fix_electrode_conp.cpp +++ b/src/ELECTRODE/fix_electrode_conp.cpp @@ -505,7 +505,7 @@ void FixElectrodeConp::setup_post_neighbor() memory->create(elastance, ngroup, ngroup, "fix_electrode:matrix"); if (read_mat) read_from_file(input_file_mat, elastance, "elastance"); - else { + else if (!read_inv) { if (etypes_neighlists) neighbor->build_one(mat_neighlist, 0); auto array_compute = std::unique_ptr(new ElectrodeMatrix(lmp, igroup, eta)); array_compute->setup(tag_to_iele, pair, mat_neighlist); From 93037321719823ecb05805b88fb327c5632c0e7e Mon Sep 17 00:00:00 2001 From: Shern Ren Tee Date: Fri, 7 Oct 2022 15:08:40 +1000 Subject: [PATCH 18/46] fix-whitespace --- src/ELECTRODE/fix_electrode_conp.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ELECTRODE/fix_electrode_conp.cpp b/src/ELECTRODE/fix_electrode_conp.cpp index dba32f037c..6ff2c5cb92 100644 --- a/src/ELECTRODE/fix_electrode_conp.cpp +++ b/src/ELECTRODE/fix_electrode_conp.cpp @@ -505,7 +505,7 @@ void FixElectrodeConp::setup_post_neighbor() memory->create(elastance, ngroup, ngroup, "fix_electrode:matrix"); if (read_mat) read_from_file(input_file_mat, elastance, "elastance"); - else if (!read_inv) { + else if (!read_inv) { if (etypes_neighlists) neighbor->build_one(mat_neighlist, 0); auto array_compute = std::unique_ptr(new ElectrodeMatrix(lmp, igroup, eta)); array_compute->setup(tag_to_iele, pair, mat_neighlist); From 758412fd4665855b809ec4f6bde4c3fd4dca7aaf Mon Sep 17 00:00:00 2001 From: Ludwig Ahrens-Iwers Date: Fri, 7 Oct 2022 05:12:19 +0000 Subject: [PATCH 19/46] Electrostatic potential removed from ecoul --- src/ELECTRODE/fix_electrode_conp.cpp | 18 +- src/ELECTRODE/fix_electrode_conp.h | 7 +- src/ELECTRODE/fix_electrode_conq.cpp | 16 ++ src/ELECTRODE/fix_electrode_conq.h | 1 + .../tests/kspace-ewald_conp_charge.yaml | 185 +++++++++--------- .../tests/kspace-pppm_conp_charge.yaml | 185 +++++++++--------- 6 files changed, 215 insertions(+), 197 deletions(-) diff --git a/src/ELECTRODE/fix_electrode_conp.cpp b/src/ELECTRODE/fix_electrode_conp.cpp index 4dcca8d980..bdc082e80c 100644 --- a/src/ELECTRODE/fix_electrode_conp.cpp +++ b/src/ELECTRODE/fix_electrode_conp.cpp @@ -612,7 +612,8 @@ void FixElectrodeConp::setup_pre_reverse(int eflag, int /*vflag*/) // correct forces for initial timestep gausscorr(eflag, true); self_energy(eflag); - potential_energy(eflag); + // potential_energy(eflag); // not always part of the energy, depending on ensemble, therefore + // removed } /* ---------------------------------------------------------------------- */ @@ -737,7 +738,8 @@ void FixElectrodeConp::pre_reverse(int eflag, int /*vflag*/) { gausscorr(eflag, true); self_energy(eflag); - potential_energy(eflag); + //potential_energy(eflag); // not always part of the energy, depending on ensemble, therefore + // removed } /* ---------------------------------------------------------------------- */ @@ -881,6 +883,7 @@ void FixElectrodeConp::update_charges() delta = dot_nlocalele(r, d); dot_old = dot_new; } + recompute_potential(b, q_local); if (delta > cg_threshold && comm->me == 0) error->warning(FLERR, "CG threshold not reached"); } else { error->all(FLERR, "This algorithm is not implemented, yet"); @@ -1078,7 +1081,7 @@ void FixElectrodeConp::compute_macro_matrices() double FixElectrodeConp::compute_scalar() { - return potential_energy(0); + return potential_energy(); } /* ---------------------------------------------------------------------- */ @@ -1104,7 +1107,7 @@ double FixElectrodeConp::compute_array(int i, int j) /* ---------------------------------------------------------------------- */ -double FixElectrodeConp::potential_energy(int eflag) +double FixElectrodeConp::potential_energy() { // corrections to energy due to potential psi double const qqrd2e = force->qqrd2e; @@ -1114,12 +1117,7 @@ double FixElectrodeConp::potential_energy(int eflag) double energy = 0; for (int i = 0, iele = 0; i < nlocal; i++) { if (groupbit & mask[i]) { - double e = -qqrd2e * q[i] * group_psi[iele_to_group_local[iele]] * evscale; - energy += e; - if (eflag) { - force->pair->ev_tally(i, i, nlocal, force->newton_pair, 0., e, 0, 0, 0, - 0); // 0 evdwl, 0 fpair, 0 delxyz - } + energy -= qqrd2e * q[i] * group_psi[iele_to_group_local[iele]] * evscale; iele++; } } diff --git a/src/ELECTRODE/fix_electrode_conp.h b/src/ELECTRODE/fix_electrode_conp.h index e65b577e08..6b54ec4702 100644 --- a/src/ELECTRODE/fix_electrode_conp.h +++ b/src/ELECTRODE/fix_electrode_conp.h @@ -70,14 +70,17 @@ class FixElectrodeConp : public Fix { enum class VarStyle { CONST, EQUAL }; virtual void update_psi(); virtual void pre_update(){}; + virtual void recompute_potential(std::vector, std::vector){}; virtual std::vector constraint_projection(std::vector); virtual std::vector constraint_correction(std::vector); virtual void compute_macro_matrices(); + std::vector ele_ele_interaction(std::vector); std::vector group_psi; std::vector group_bits; std::vector groups; int num_of_groups; bigint ngroup; + double evscale; std::vector> sd_vectors; std::vector sb_charges; std::vector group_psi_var_ids; @@ -112,14 +115,13 @@ class FixElectrodeConp : public Fix { void symmetrize(); double gausscorr(int, bool); void update_charges(); - double potential_energy(int); + double potential_energy(); double self_energy(int); void write_to_file(FILE *, const std::vector &, const std::vector> &); void read_from_file(const std::string &input_file, double **, const std::string &); void compute_sd_vectors(); void compute_sd_vectors_ffield(); int groupnum_from_name(char *); - double evscale; class Pair *pair; class NeighList *mat_neighlist, *vec_neighlist; std::vector etypes; @@ -132,7 +134,6 @@ class FixElectrodeConp : public Fix { bool timer_flag; std::map tf_types; // cg - std::vector ele_ele_interaction(std::vector); std::vector scale_vector(double, std::vector); std::vector add_nlocalele(std::vector, std::vector); double dot_nlocalele(std::vector, std::vector); diff --git a/src/ELECTRODE/fix_electrode_conq.cpp b/src/ELECTRODE/fix_electrode_conq.cpp index e0c6cd4cbd..ad2f34f718 100644 --- a/src/ELECTRODE/fix_electrode_conq.cpp +++ b/src/ELECTRODE/fix_electrode_conq.cpp @@ -88,3 +88,19 @@ std::vector FixElectrodeConq::constraint_projection(std::vector for (int i = 0; i < n; i++) x[i] -= sums[iele_to_group_local[i]]; return x; } + +/* ---------------------------------------------------------------------- + Recompute group potential as average for output if using cg algo +------------------------------------------------------------------------- */ + +void FixElectrodeConq::recompute_potential(std::vector b, std::vector q_local) +{ + int const n = b.size(); + auto a = ele_ele_interaction(q_local); + auto psi_sums = std::vector(num_of_groups, 0); + for (int i = 0; i < n; i++) { + psi_sums[iele_to_group_local[i]] += (a[i] + b[i]) / evscale; + } + MPI_Allreduce(MPI_IN_PLACE, &psi_sums.front(), num_of_groups, MPI_DOUBLE, MPI_SUM, world); + for (int g = 0; g < num_of_groups; g++) group_psi[g] = psi_sums[g] / group->count(groups[g]); +} diff --git a/src/ELECTRODE/fix_electrode_conq.h b/src/ELECTRODE/fix_electrode_conq.h index 38d9b50efa..7bfdad62fb 100644 --- a/src/ELECTRODE/fix_electrode_conq.h +++ b/src/ELECTRODE/fix_electrode_conq.h @@ -34,6 +34,7 @@ class FixElectrodeConq : public FixElectrodeConp { public: FixElectrodeConq(class LAMMPS *, int, char **); void update_psi() override; + void recompute_potential(std::vector, std::vector) override; std::vector constraint_projection(std::vector) override; std::vector constraint_correction(std::vector) override; diff --git a/unittest/force-styles/tests/kspace-ewald_conp_charge.yaml b/unittest/force-styles/tests/kspace-ewald_conp_charge.yaml index 1a2a1db2f4..73fb252226 100644 --- a/unittest/force-styles/tests/kspace-ewald_conp_charge.yaml +++ b/unittest/force-styles/tests/kspace-ewald_conp_charge.yaml @@ -1,6 +1,7 @@ --- -lammps_version: 24 Dec 2020 -date_generated: Fri Nov 5 00:12:57 202 +lammps_version: 23 Jun 2022 +tags: generated +date_generated: Wed Sep 21 13:52:53 2022 epsilon: 1e-12 skip_tests: gpu kokkos_omp omp prerequisites: ! | @@ -23,101 +24,101 @@ pair_coeff: ! | extract: ! "" natoms: 44 init_vdwl: 0 -init_coul: -9.72959727118154 +init_coul: 2.215589572896434 init_stress: ! |2- 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 init_forces: ! |2 - 1 2.0780648532794574e-04 1.9949672015209092e-03 3.1005914149473983e+00 - 2 -1.6777235182686229e-02 2.1481432256291342e-03 3.0881659196467974e+00 - 3 6.0082164895560364e-04 5.1573260226633706e-03 3.1029192412328546e+00 - 4 -1.6728974802490627e-02 6.1174723156885305e-03 3.0909324782862337e+00 - 5 4.2029366155132364e-02 -2.3455526736195550e-03 -1.5659617577954639e+00 - 6 5.5635790919204925e-02 -2.4542947062522690e-03 -1.5693827709331338e+00 - 7 4.2014920784252015e-02 -7.5287470219124282e-04 -1.5671265392163825e+00 - 8 5.5808767852333477e-02 -9.9105389808567764e-04 -1.5707104957299394e+00 - 9 -5.0959878750421531e-02 -2.3630298689785432e-03 -1.5769250181497103e+00 - 10 -3.3526564930579102e-02 -2.3802275431283235e-03 -1.5617801011657177e+00 - 11 -5.1236396351794382e-02 -4.9531100598977304e-04 -1.5779995894034007e+00 - 12 -3.3740693032952136e-02 -1.0210406243571671e-03 -1.5630986537874154e+00 - 13 -1.1437102611352990e-03 -4.6454866413028723e-05 5.4282837980149275e-03 - 14 2.3914999373115440e-03 -1.6478680244651225e-04 2.9802178734319302e-02 - 15 3.9287193302652881e-05 -2.5715673267285195e-05 2.8944525105129492e-03 - 16 2.0458480716482371e-03 -1.2119161321908680e-04 3.3689550843809465e-02 - 17 -2.7146073277767458e-03 -8.2376243258224945e-04 2.6564130941474605e-02 - 18 1.3669692885198122e-03 -4.2357196145490015e-04 3.2396141113926726e-02 - 19 3.0143371860819919e-04 -8.6218593339584197e-04 2.6284521141350690e-02 - 20 1.1542435168435086e-03 -2.7252318260839162e-04 3.4237916528138131e-02 - 21 -1.2350056952573586e-03 4.8655691135364389e-04 5.9284283442393787e-03 - 22 2.3656743884722833e-03 9.6575340844312564e-04 2.9811074931784812e-02 - 23 4.6754986244969928e-05 3.0149464050351158e-04 3.4630785686112402e-03 - 24 2.0301227080749681e-03 6.3879578068684975e-04 3.3653437189053448e-02 - 25 -2.3656211013513085e-03 -8.0454594828768345e-04 2.8476980555362921e-02 - 26 1.1566723797446984e-03 -3.9614599888570650e-04 3.2873323713155919e-02 - 27 2.8784994028036509e-04 -8.3661697184444985e-04 2.8317655886021299e-02 - 28 9.3882364605486616e-04 -2.3327601777843430e-04 3.4334676606415655e-02 - 29 -4.7969977052125280e-04 -1.2933334305372763e-04 -1.2336987392568074e-02 - 30 6.4733118786855018e-05 -1.3190918849005555e-04 -1.2737933567178899e-02 - 31 2.4269094157913960e-04 -1.3093943526788605e-04 -1.2136133260084996e-02 - 32 1.7452552740941009e-04 -1.1792779046242482e-04 -1.4181538324619818e-02 - 33 -3.8366266481516418e-04 -7.1061854758754935e-05 -1.3699106365426129e-02 - 34 2.8849004082561659e-05 -5.7838605310673273e-05 -1.3764181266896892e-02 - 35 2.2648059665862354e-04 -7.2851385190898286e-05 -1.3537361892926624e-02 - 36 1.2929221129083783e-04 -4.2862960950054417e-05 -1.4926105930886916e-02 - 37 -4.7698025941706373e-04 2.9971529466656685e-04 -1.2393604822896297e-02 - 38 6.4231095731185554e-05 2.7548977518459893e-04 -1.2789498345723030e-02 - 39 2.4169204779864371e-04 3.0552093685810432e-04 -1.2193908285665970e-02 - 40 1.7324998349441787e-04 2.2898000918153319e-04 -1.4225267020837271e-02 - 41 -3.4345772150395259e-04 -9.8012060153888811e-05 -1.4482722052972288e-02 - 42 2.0345466940577996e-05 -8.5250083485344193e-05 -1.4497101004472081e-02 - 43 2.0917627239293082e-04 -1.0051271468149260e-04 -1.4335313646556430e-02 - 44 1.1456796622437166e-04 -6.7553675788590515e-05 -1.5543196158603997e-02 + 1 2.0780648532795694e-04 1.9949672015209204e-03 3.1005914149473996e+00 + 2 -1.6777235182686288e-02 2.1481432256290419e-03 3.0881659196467988e+00 + 3 6.0082164895554737e-04 5.1573260226633801e-03 3.1029192412328555e+00 + 4 -1.6728974802490675e-02 6.1174723156886242e-03 3.0909324782862346e+00 + 5 4.2029366155132378e-02 -2.3455526736195693e-03 -1.5659617577954634e+00 + 6 5.5635790919204904e-02 -2.4542947062522369e-03 -1.5693827709331334e+00 + 7 4.2014920784252008e-02 -7.5287470219125008e-04 -1.5671265392163820e+00 + 8 5.5808767852333470e-02 -9.9105389808573120e-04 -1.5707104957299389e+00 + 9 -5.0959878750421551e-02 -2.3630298689785601e-03 -1.5769250181497101e+00 + 10 -3.3526564930579039e-02 -2.3802275431282884e-03 -1.5617801011657175e+00 + 11 -5.1236396351794389e-02 -4.9531100598979201e-04 -1.5779995894034005e+00 + 12 -3.3740693032952060e-02 -1.0210406243572182e-03 -1.5630986537874150e+00 + 13 -1.1437102611353016e-03 -4.6454866413029015e-05 5.4282837980149448e-03 + 14 2.3914999373115431e-03 -1.6478680244651469e-04 2.9802178734319239e-02 + 15 3.9287193302652786e-05 -2.5715673267285659e-05 2.8944525105129479e-03 + 16 2.0458480716482328e-03 -1.2119161321908735e-04 3.3689550843809452e-02 + 17 -2.7146073277767471e-03 -8.2376243258224663e-04 2.6564130941474612e-02 + 18 1.3669692885198135e-03 -4.2357196145489820e-04 3.2396141113926739e-02 + 19 3.0143371860819995e-04 -8.6218593339583785e-04 2.6284521141350669e-02 + 20 1.1542435168435056e-03 -2.7252318260838826e-04 3.4237916528138110e-02 + 21 -1.2350056952573553e-03 4.8655691135364269e-04 5.9284283442393631e-03 + 22 2.3656743884722890e-03 9.6575340844312705e-04 2.9811074931784823e-02 + 23 4.6754986244969657e-05 3.0149464050350903e-04 3.4630785686112129e-03 + 24 2.0301227080749633e-03 6.3879578068684812e-04 3.3653437189053413e-02 + 25 -2.3656211013513076e-03 -8.0454594828768334e-04 2.8476980555362911e-02 + 26 1.1566723797447039e-03 -3.9614599888570504e-04 3.2873323713155905e-02 + 27 2.8784994028036400e-04 -8.3661697184444898e-04 2.8317655886021253e-02 + 28 9.3882364605486020e-04 -2.3327601777843495e-04 3.4334676606415648e-02 + 29 -4.7969977052124917e-04 -1.2933334305373028e-04 -1.2336987392568071e-02 + 30 6.4733118786851766e-05 -1.3190918849005797e-04 -1.2737933567178844e-02 + 31 2.4269094157913586e-04 -1.3093943526788584e-04 -1.2136133260085013e-02 + 32 1.7452552740941527e-04 -1.1792779046242341e-04 -1.4181538324619835e-02 + 33 -3.8366266481516803e-04 -7.1061854758754556e-05 -1.3699106365426135e-02 + 34 2.8849004082563746e-05 -5.7838605310673531e-05 -1.3764181266896890e-02 + 35 2.2648059665862587e-04 -7.2851385190891320e-05 -1.3537361892926607e-02 + 36 1.2929221129083645e-04 -4.2862960950045859e-05 -1.4926105930886896e-02 + 37 -4.7698025941707008e-04 2.9971529466656788e-04 -1.2393604822896313e-02 + 38 6.4231095731188766e-05 2.7548977518460050e-04 -1.2789498345723021e-02 + 39 2.4169204779864826e-04 3.0552093685810269e-04 -1.2193908285665961e-02 + 40 1.7324998349441456e-04 2.2898000918153004e-04 -1.4225267020837207e-02 + 41 -3.4345772150395188e-04 -9.8012060153887415e-05 -1.4482722052972283e-02 + 42 2.0345466940577010e-05 -8.5250083485342566e-05 -1.4497101004472062e-02 + 43 2.0917627239292995e-04 -1.0051271468149899e-04 -1.4335313646556430e-02 + 44 1.1456796622437295e-04 -6.7553675788598551e-05 -1.5543196158604005e-02 run_vdwl: 0 -run_coul: -29.2317829589917 +run_coul: 6.662694629990089 run_stress: ! |2- 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 run_forces: ! |2 - 1 2.4590612609440857e-04 1.9614041218568765e-03 3.0874291949281156e+00 - 2 -1.6646393233505169e-02 2.1136941574791466e-03 3.0751132981100078e+00 - 3 6.3535217476582122e-04 5.1012487117746679e-03 3.0897301317927286e+00 - 4 -1.6598677148313316e-02 6.0535154567108096e-03 3.0778495346381414e+00 - 5 4.2257888534897002e-02 -2.3028533365964912e-03 -1.5593100596807519e+00 - 6 5.5690508027606674e-02 -2.4104721624763751e-03 -1.5626897542440841e+00 - 7 4.2243973130370163e-02 -7.6153220413262529e-04 -1.5604618260035836e+00 - 8 5.5862703939049151e-02 -9.9825803703213855e-04 -1.5640031014325451e+00 - 9 -5.1059409954744270e-02 -2.3195553026588225e-03 -1.5701677851024036e+00 - 10 -3.3824298857146974e-02 -2.3375522139359138e-03 -1.5551647619109399e+00 - 11 -5.1334079184640349e-02 -5.0583705005138380e-04 -1.5712298444761110e+00 - 12 -3.4037363466305995e-02 -1.0275978089057552e-03 -1.5564691026885338e+00 - 13 -1.1767076011504490e-03 -4.7681963272732622e-05 5.6177800544716184e-03 - 14 2.3826294437743313e-03 -1.6349140124449456e-04 2.9836275824428979e-02 - 15 4.1635367214844019e-05 -2.7287283914684824e-05 3.0967012748694925e-03 - 16 2.0334138778396382e-03 -1.1986039772787435e-04 3.3679727731055237e-02 - 17 -2.7026084826568802e-03 -8.1815079485725501e-04 2.6574868248546425e-02 - 18 1.3603406762441217e-03 -4.1902595052937088e-04 3.2373613783594490e-02 - 19 2.9940467686437024e-04 -8.5646794759971156e-04 2.6296909514905112e-02 - 20 1.1469475577225445e-03 -2.6907093945665369e-04 3.4197589258157093e-02 - 21 -1.2662578686531173e-03 4.9770031968890372e-04 6.1141650873547280e-03 - 22 2.3568409810394990e-03 9.5671841592085414e-04 2.9844352492872525e-02 - 23 4.8965507374742707e-05 3.1616579858330206e-04 3.6613180489820344e-03 - 24 2.0177821554069235e-03 6.3083810187911375e-04 3.3643353017422446e-02 - 25 -2.3537455003017483e-03 -7.9846295760147750e-04 2.8468250829639490e-02 - 26 1.1507655048235946e-03 -3.9159985067611968e-04 3.2839870487003722e-02 - 27 2.8582562554448933e-04 -8.3038492818153140e-04 2.8309777443009301e-02 - 28 9.3274285761093460e-04 -2.2997823984283327e-04 3.4287630335266252e-02 - 29 -4.7502414048888631e-04 -1.2847214455389338e-04 -1.2453998829891082e-02 - 30 6.3675154563757683e-05 -1.3104204562344539e-04 -1.2848240218511109e-02 - 31 2.4068203429809321e-04 -1.3007692195448727e-04 -1.2254443488117104e-02 - 32 1.7286880375664635e-04 -1.1713944254614122e-04 -1.4279748536149259e-02 - 33 -3.7975304094097081e-04 -7.0481503989777163e-05 -1.3805675914786021e-02 - 34 2.8172580422571423e-05 -5.7414812953858361e-05 -1.3867744309035909e-02 - 35 2.2448042926710653e-04 -7.2258368796574102e-05 -1.3645037267085276e-02 - 36 1.2804302797391197e-04 -4.2547023166916530e-05 -1.5019384166440138e-02 - 37 -4.7231656130618325e-04 2.9759414220405499e-04 -1.2510308090752389e-02 - 38 6.3181133759038260e-05 2.7366531591578103e-04 -1.2899551129187765e-02 - 39 2.3968383978790071e-04 3.0338116638640056e-04 -1.2311919409216518e-02 - 40 1.7159804905743481e-04 2.2744508340905202e-04 -1.4323246783684990e-02 - 41 -3.3986046011853858e-04 -9.7274166717458487e-05 -1.4583591616566855e-02 - 42 1.9775995840423025e-05 -8.4675117269366511e-05 -1.4595729099929712e-02 - 43 2.0725822207231305e-04 -9.9764702521259281e-05 -1.4437236974797736e-02 - 44 1.1345006523014169e-04 -6.7103771021495711e-05 -1.5632251527466189e-02 + 1 2.4590612609445102e-04 1.9614041218568861e-03 3.0874291949281147e+00 + 2 -1.6646393233505193e-02 2.1136941574790400e-03 3.0751132981100078e+00 + 3 6.3535217476586373e-04 5.1012487117746350e-03 3.0897301317927290e+00 + 4 -1.6598677148313409e-02 6.0535154567108685e-03 3.0778495346381409e+00 + 5 4.2257888534896988e-02 -2.3028533365965051e-03 -1.5593100596807521e+00 + 6 5.5690508027606708e-02 -2.4104721624763235e-03 -1.5626897542440843e+00 + 7 4.2243973130370149e-02 -7.6153220413259775e-04 -1.5604618260035832e+00 + 8 5.5862703939049158e-02 -9.9825803703216718e-04 -1.5640031014325448e+00 + 9 -5.1059409954744304e-02 -2.3195553026588347e-03 -1.5701677851024036e+00 + 10 -3.3824298857146967e-02 -2.3375522139358631e-03 -1.5551647619109401e+00 + 11 -5.1334079184640377e-02 -5.0583705005136689e-04 -1.5712298444761112e+00 + 12 -3.4037363466305925e-02 -1.0275978089057873e-03 -1.5564691026885336e+00 + 13 -1.1767076011504501e-03 -4.7681963272732406e-05 5.6177800544716262e-03 + 14 2.3826294437743331e-03 -1.6349140124449633e-04 2.9836275824428962e-02 + 15 4.1635367214843796e-05 -2.7287283914685102e-05 3.0967012748694773e-03 + 16 2.0334138778396313e-03 -1.1986039772787527e-04 3.3679727731055195e-02 + 17 -2.7026084826568797e-03 -8.1815079485725360e-04 2.6574868248546435e-02 + 18 1.3603406762441243e-03 -4.1902595052936860e-04 3.2373613783594497e-02 + 19 2.9940467686436986e-04 -8.5646794759970863e-04 2.6296909514905095e-02 + 20 1.1469475577225402e-03 -2.6907093945665336e-04 3.4197589258157073e-02 + 21 -1.2662578686531134e-03 4.9770031968890231e-04 6.1141650873547037e-03 + 22 2.3568409810395020e-03 9.5671841592085381e-04 2.9844352492872490e-02 + 23 4.8965507374742117e-05 3.1616579858329929e-04 3.6613180489820005e-03 + 24 2.0177821554069170e-03 6.3083810187911310e-04 3.3643353017422439e-02 + 25 -2.3537455003017457e-03 -7.9846295760147956e-04 2.8468250829639500e-02 + 26 1.1507655048236000e-03 -3.9159985067612060e-04 3.2839870487003708e-02 + 27 2.8582562554448814e-04 -8.3038492818152999e-04 2.8309777443009273e-02 + 28 9.3274285761092680e-04 -2.2997823984283208e-04 3.4287630335266286e-02 + 29 -4.7502414048888327e-04 -1.2847214455389489e-04 -1.2453998829891042e-02 + 30 6.3675154563755000e-05 -1.3104204562344653e-04 -1.2848240218511071e-02 + 31 2.4068203429808906e-04 -1.3007692195448562e-04 -1.2254443488117142e-02 + 32 1.7286880375665112e-04 -1.1713944254614034e-04 -1.4279748536149278e-02 + 33 -3.7975304094097439e-04 -7.0481503989778179e-05 -1.3805675914786045e-02 + 34 2.8172580422574018e-05 -5.7414812953860394e-05 -1.3867744309035916e-02 + 35 2.2448042926710853e-04 -7.2258368796568220e-05 -1.3645037267085249e-02 + 36 1.2804302797390986e-04 -4.2547023166907131e-05 -1.5019384166440140e-02 + 37 -4.7231656130619122e-04 2.9759414220405656e-04 -1.2510308090752414e-02 + 38 6.3181133759042352e-05 2.7366531591578288e-04 -1.2899551129187765e-02 + 39 2.3968383978790597e-04 3.0338116638639894e-04 -1.2311919409216509e-02 + 40 1.7159804905743131e-04 2.2744508340904917e-04 -1.4323246783684936e-02 + 41 -3.3986046011853923e-04 -9.7274166717457145e-05 -1.4583591616566860e-02 + 42 1.9775995840422978e-05 -8.4675117269364898e-05 -1.4595729099929700e-02 + 43 2.0725822207231137e-04 -9.9764702521265135e-05 -1.4437236974797743e-02 + 44 1.1345006523014360e-04 -6.7103771021504086e-05 -1.5632251527466189e-02 ... diff --git a/unittest/force-styles/tests/kspace-pppm_conp_charge.yaml b/unittest/force-styles/tests/kspace-pppm_conp_charge.yaml index 6d853d5105..84148fc816 100644 --- a/unittest/force-styles/tests/kspace-pppm_conp_charge.yaml +++ b/unittest/force-styles/tests/kspace-pppm_conp_charge.yaml @@ -1,6 +1,7 @@ --- -lammps_version: 24 Dec 2020 -date_generated: Fri Nov 5 00:12:40 202 +lammps_version: 23 Jun 2022 +tags: generated +date_generated: Wed Sep 21 13:52:39 2022 epsilon: 3e-12 skip_tests: gpu kokkos_omp omp prerequisites: ! | @@ -23,101 +24,101 @@ pair_coeff: ! | extract: ! "" natoms: 44 init_vdwl: 0 -init_coul: -9.72956368457973 +init_coul: 2.2156402256727614 init_stress: ! |2- 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 init_forces: ! |2 - 1 2.0996096688295126e-04 1.9837586784578272e-03 3.1004822661058866e+00 - 2 -1.6783332510618091e-02 2.1368843599406237e-03 3.0880130470329270e+00 - 3 6.0300296042521109e-04 5.1688381279907485e-03 3.1028182137891149e+00 - 4 -1.6735061532951016e-02 6.1290626039691926e-03 3.0907879891042787e+00 - 5 4.2014131860757836e-02 -2.3478381081741447e-03 -1.5658874682481501e+00 - 6 5.5659823770659540e-02 -2.4566144388409850e-03 -1.5693278833316524e+00 - 7 4.1999624791768837e-02 -7.5066218795250591e-04 -1.5670569809441637e+00 - 8 5.5832732887661898e-02 -9.8883264742176792e-04 -1.5706605160409159e+00 - 9 -5.0976953599115873e-02 -2.3653810185280074e-03 -1.5768945194236084e+00 - 10 -3.3513771125456553e-02 -2.3824712764542819e-03 -1.5616806812004902e+00 - 11 -5.1253442064492727e-02 -4.9304425051537818e-04 -1.5779738349804437e+00 - 12 -3.3727836471637088e-02 -1.0188844490583485e-03 -1.5630041309277052e+00 - 13 -1.1453068449918205e-03 -4.7335833322796184e-05 5.4292779404649331e-03 - 14 2.3900993287279842e-03 -1.6878550058260658e-04 2.9808528147740300e-02 - 15 4.0078428215627337e-05 -2.6184607051202192e-05 2.8941780231020006e-03 - 16 2.0473353699190532e-03 -1.2552209515767705e-04 3.3684989110503084e-02 - 17 -2.7210216747432028e-03 -8.2349543008295031e-04 2.6567504438257228e-02 - 18 1.3656002828979577e-03 -4.2323438710338844e-04 3.2404938547366535e-02 - 19 3.0785575286292754e-04 -8.6186674263511386e-04 2.6288541663855258e-02 - 20 1.1555469330548341e-03 -2.7230960410720538e-04 3.4235148032534343e-02 - 21 -1.2368093613861519e-03 4.8760847861882637e-04 5.9296798954256739e-03 - 22 2.3643140421916180e-03 9.6975102599400538e-04 2.9817231402721682e-02 - 23 4.7705653522708732e-05 3.0203836842154747e-04 3.4631818106649424e-03 - 24 2.0316297431160302e-03 6.4335031755789838e-04 3.3648629802522902e-02 - 25 -2.3728144718995481e-03 -8.0497592536520177e-04 2.8474707915345371e-02 - 26 1.1555985481661933e-03 -3.9649433660109796e-04 3.2876098209196493e-02 - 27 2.9459292459149878e-04 -8.3700881746301588e-04 2.8316136079038639e-02 - 28 9.4027352090447108e-04 -2.3371025598546488e-04 3.4325153603153864e-02 - 29 -5.2133856931286019e-04 -1.4498587872629248e-04 -1.2345168780426352e-02 - 30 7.0344538924239534e-05 -1.4805754895658217e-04 -1.2765142487049404e-02 - 31 2.7857644686035454e-04 -1.4667349483299015e-04 -1.2140095836769556e-02 - 32 1.7479865631996264e-04 -1.3335074368636167e-04 -1.4152171307753283e-02 - 33 -4.2607366742485931e-04 -7.2661709209032147e-05 -1.3713642029394969e-02 - 34 3.4224570995903638e-05 -5.9352423088201352e-05 -1.3797063100154078e-02 - 35 2.6332638434852369e-04 -7.4573909050170282e-05 -1.3548481212572648e-02 - 36 1.2956589882656453e-04 -4.4469640559386482e-05 -1.4903750420442192e-02 - 37 -5.1855202137555002e-04 3.1768672664149710e-04 -1.2402413876589045e-02 - 38 6.9744637010105812e-05 2.9379923413403353e-04 -1.2817238930047804e-02 - 39 2.7753815671547596e-04 3.2364879063853820e-04 -1.2198687630220580e-02 - 40 1.7359211286247563e-04 2.4661766514411023e-04 -1.4196607980261162e-02 - 41 -3.8501793941197326e-04 -9.8818538537991004e-05 -1.4472863167957114e-02 - 42 2.5779944975445582e-05 -8.5975255466015518e-05 -1.4504933662725365e-02 - 43 2.4535595442147983e-04 -1.0127263490049160e-04 -1.4321758087879020e-02 - 44 1.1457678622968736e-04 -6.8200688092187251e-05 -1.5499407046729322e-02 + 1 2.0996096688279944e-04 1.9837586784580306e-03 3.1004822661058822e+00 + 2 -1.6783332510617883e-02 2.1368843599407611e-03 3.0880130470329230e+00 + 3 6.0300296042517466e-04 5.1688381279905342e-03 3.1028182137891114e+00 + 4 -1.6735061532950901e-02 6.1290626039690339e-03 3.0907879891042755e+00 + 5 4.2014131860757913e-02 -2.3478381081742388e-03 -1.5658874682481487e+00 + 6 5.5659823770659422e-02 -2.4566144388410410e-03 -1.5693278833316506e+00 + 7 4.1999624791768865e-02 -7.5066218795240259e-04 -1.5670569809441617e+00 + 8 5.5832732887661884e-02 -9.8883264742169940e-04 -1.5706605160409139e+00 + 9 -5.0976953599115804e-02 -2.3653810185280950e-03 -1.5768945194236066e+00 + 10 -3.3513771125456657e-02 -2.3824712764543426e-03 -1.5616806812004886e+00 + 11 -5.1253442064492741e-02 -4.9304425051529275e-04 -1.5779738349804424e+00 + 12 -3.3727836471637192e-02 -1.0188844490582761e-03 -1.5630041309277038e+00 + 13 -1.1453068449918257e-03 -4.7335833322794788e-05 5.4292779404649470e-03 + 14 2.3900993287279790e-03 -1.6878550058260119e-04 2.9808528147740175e-02 + 15 4.0078428215627730e-05 -2.6184607051201481e-05 2.8941780231019881e-03 + 16 2.0473353699190459e-03 -1.2552209515766962e-04 3.3684989110502959e-02 + 17 -2.7210216747431955e-03 -8.2349543008294359e-04 2.6567504438257068e-02 + 18 1.3656002828979516e-03 -4.2323438710338486e-04 3.2404938547366383e-02 + 19 3.0785575286292939e-04 -8.6186674263511191e-04 2.6288541663855129e-02 + 20 1.1555469330548321e-03 -2.7230960410720359e-04 3.4235148032534163e-02 + 21 -1.2368093613861506e-03 4.8760847861882366e-04 5.9296798954256557e-03 + 22 2.3643140421916085e-03 9.6975102599399746e-04 2.9817231402721564e-02 + 23 4.7705653522709085e-05 3.0203836842154655e-04 3.4631818106649337e-03 + 24 2.0316297431160258e-03 6.4335031755788927e-04 3.3648629802522749e-02 + 25 -2.3728144718995455e-03 -8.0497592536520339e-04 2.8474707915345274e-02 + 26 1.1555985481661916e-03 -3.9649433660109970e-04 3.2876098209196375e-02 + 27 2.9459292459149998e-04 -8.3700881746301306e-04 2.8316136079038545e-02 + 28 9.4027352090446912e-04 -2.3371025598546553e-04 3.4325153603153732e-02 + 29 -5.2133856931286127e-04 -1.4498587872629142e-04 -1.2345168780426297e-02 + 30 7.0344538924238829e-05 -1.4805754895657979e-04 -1.2765142487049358e-02 + 31 2.7857644686035687e-04 -1.4667349483298643e-04 -1.2140095836769501e-02 + 32 1.7479865631996218e-04 -1.3335074368636031e-04 -1.4152171307753206e-02 + 33 -4.2607366742485959e-04 -7.2661709209033136e-05 -1.3713642029394900e-02 + 34 3.4224570995904750e-05 -5.9352423088202727e-05 -1.3797063100154012e-02 + 35 2.6332638434852483e-04 -7.4573909050170201e-05 -1.3548481212572565e-02 + 36 1.2956589882656260e-04 -4.4469640559387641e-05 -1.4903750420442119e-02 + 37 -5.1855202137555164e-04 3.1768672664149645e-04 -1.2402413876588990e-02 + 38 6.9744637010106164e-05 2.9379923413403201e-04 -1.2817238930047764e-02 + 39 2.7753815671547851e-04 3.2364879063853462e-04 -1.2198687630220518e-02 + 40 1.7359211286247436e-04 2.4661766514410969e-04 -1.4196607980261094e-02 + 41 -3.8501793941197521e-04 -9.8818538537990245e-05 -1.4472863167957050e-02 + 42 2.5779944975443997e-05 -8.5975255466014692e-05 -1.4504933662725301e-02 + 43 2.4535595442148292e-04 -1.0127263490049206e-04 -1.4321758087878972e-02 + 44 1.1457678622968817e-04 -6.8200688092186871e-05 -1.5499407046729242e-02 run_vdwl: 0 -run_coul: -29.2316813907028 +run_coul: 6.662844717848837 run_stress: ! |2- 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 run_forces: ! |2 - 1 2.4838374656872917e-04 1.9503798034562394e-03 3.0873204052231711e+00 - 2 -1.6652792550963587e-02 2.1026197438205468e-03 3.0749612313228423e+00 - 3 6.3785681925855521e-04 5.1125747842692181e-03 3.0896293583134637e+00 - 4 -1.6605065971975544e-02 6.0649203428152273e-03 3.0777057441315332e+00 - 5 4.2242720963296253e-02 -2.3050719334345997e-03 -1.5592361839228910e+00 - 6 5.5714272244614393e-02 -2.4127241272197974e-03 -1.5626351053810144e+00 - 7 4.2228744507856290e-02 -7.5938680980838758e-04 -1.5603926173148726e+00 - 8 5.5886400463161380e-02 -9.9610508394886886e-04 -1.5639532943562695e+00 - 9 -5.1076260774663283e-02 -2.3218376339398067e-03 -1.5701372580807045e+00 - 10 -3.3811558405906050e-02 -2.3397301017438472e-03 -1.5550660295253036e+00 - 11 -5.1350900750795833e-02 -5.0363945411732182e-04 -1.5712039970018132e+00 - 12 -3.4024561045577724e-02 -1.0255079139097529e-03 -1.5563752017113677e+00 - 13 -1.1783355827329357e-03 -4.8584425213700541e-05 5.6187810005819136e-03 - 14 2.3812433011153179e-03 -1.6745821939574178e-04 2.9842604329757525e-02 - 15 4.2472634867315290e-05 -2.7784504406520025e-05 3.0964622176844463e-03 - 16 2.0348857368272374e-03 -1.2415016403438659e-04 3.3675205082768403e-02 - 17 -2.7089567432503694e-03 -8.1788662401764700e-04 2.6578231998707159e-02 - 18 1.3589859834844823e-03 -4.1869284075205470e-04 3.2382362625908795e-02 - 19 3.0575998684987125e-04 -8.5615261685325977e-04 2.6300918365183844e-02 - 20 1.1482382726252930e-03 -2.6885864047675070e-04 3.4194853807722400e-02 - 21 -1.2680891310638805e-03 4.9877122346546441e-04 6.1154164862940695e-03 - 22 2.3554944751877373e-03 9.6068685589810010e-04 2.9850487598267146e-02 - 23 4.9959016556343672e-05 3.1673714227676132e-04 3.6614479955528064e-03 - 24 2.0192733259603237e-03 6.3534849028299377e-04 3.3638585635455930e-02 - 25 -2.3608563352120492e-03 -7.9888874314704486e-04 2.8465994834953531e-02 - 26 1.1497012824588124e-03 -3.9194609517719160e-04 3.2842627585052991e-02 - 27 2.9249325092285021e-04 -8.3077344407106652e-04 2.8308269755484158e-02 - 28 9.3417705968603358e-04 -2.3040781495046122e-04 3.4278191255128265e-02 - 29 -5.1652528928022401e-04 -1.4404353042683055e-04 -1.2462150875064245e-02 - 30 6.9288940488796492e-05 -1.4710788156542428e-04 -1.2875332550432179e-02 - 31 2.7644608312646227e-04 -1.4573040212804457e-04 -1.2258366148270458e-02 - 32 1.7312052380602638e-04 -1.3246895843787410e-04 -1.4250473428514810e-02 - 33 -4.2201273060055671e-04 -7.2075937985440990e-05 -1.3820153961237674e-02 - 34 3.3549241776444101e-05 -5.8924381188893446e-05 -1.3900492261623532e-02 - 35 2.6119063773180910e-04 -7.3975274656909638e-05 -1.3656086631368750e-02 - 36 1.2829798186810346e-04 -4.4146305074977122e-05 -1.4997087695938112e-02 - 37 -5.1375024459660425e-04 3.1547360096918981e-04 -1.2519087424517244e-02 - 38 6.8697062203298376e-05 2.9188411177716024e-04 -1.2927175328444149e-02 - 39 2.7540798890579642e-04 3.2141722701931242e-04 -1.2316658300695400e-02 - 40 1.7191884579607675e-04 2.4497453169432552e-04 -1.4294679585099435e-02 - 41 -3.8125358429239026e-04 -9.8073404256391784e-05 -1.4573806404289288e-02 - 42 2.5208712883706910e-05 -8.5394829999054094e-05 -1.4603558816163324e-02 - 43 2.4329125095209290e-04 -1.0051714757303300e-04 -1.4423743772053532e-02 - 44 1.1343880007511680e-04 -6.7742613833467619e-05 -1.5588639087563610e-02 + 1 2.4838374656870440e-04 1.9503798034564181e-03 3.0873204052231675e+00 + 2 -1.6652792550963507e-02 2.1026197438206527e-03 3.0749612313228378e+00 + 3 6.3785681925848106e-04 5.1125747842690368e-03 3.0896293583134606e+00 + 4 -1.6605065971975488e-02 6.0649203428150876e-03 3.0777057441315305e+00 + 5 4.2242720963296274e-02 -2.3050719334346786e-03 -1.5592361839228894e+00 + 6 5.5714272244614366e-02 -2.4127241272198356e-03 -1.5626351053810128e+00 + 7 4.2228744507856318e-02 -7.5938680980830215e-04 -1.5603926173148708e+00 + 8 5.5886400463161408e-02 -9.9610508394880446e-04 -1.5639532943562677e+00 + 9 -5.1076260774663269e-02 -2.3218376339398856e-03 -1.5701372580807029e+00 + 10 -3.3811558405906099e-02 -2.3397301017438945e-03 -1.5550660295253020e+00 + 11 -5.1350900750795785e-02 -5.0363945411724615e-04 -1.5712039970018119e+00 + 12 -3.4024561045577786e-02 -1.0255079139096881e-03 -1.5563752017113657e+00 + 13 -1.1783355827329363e-03 -4.8584425213699084e-05 5.6187810005819084e-03 + 14 2.3812433011153062e-03 -1.6745821939573657e-04 2.9842604329757397e-02 + 15 4.2472634867315832e-05 -2.7784504406519571e-05 3.0964622176844602e-03 + 16 2.0348857368272344e-03 -1.2415016403438035e-04 3.3675205082768264e-02 + 17 -2.7089567432503573e-03 -8.1788662401764114e-04 2.6578231998707000e-02 + 18 1.3589859834844708e-03 -4.1869284075205220e-04 3.2382362625908642e-02 + 19 3.0575998684987288e-04 -8.5615261685325662e-04 2.6300918365183709e-02 + 20 1.1482382726252934e-03 -2.6885864047674810e-04 3.4194853807722227e-02 + 21 -1.2680891310638792e-03 4.9877122346546224e-04 6.1154164862940522e-03 + 22 2.3554944751877239e-03 9.6068685589809240e-04 2.9850487598267021e-02 + 23 4.9959016556344255e-05 3.1673714227676154e-04 3.6614479955528112e-03 + 24 2.0192733259603224e-03 6.3534849028298586e-04 3.3638585635455770e-02 + 25 -2.3608563352120440e-03 -7.9888874314704573e-04 2.8465994834953420e-02 + 26 1.1497012824588045e-03 -3.9194609517719160e-04 3.2842627585052867e-02 + 27 2.9249325092285189e-04 -8.3077344407106490e-04 2.8308269755484061e-02 + 28 9.3417705968603434e-04 -2.3040781495046246e-04 3.4278191255128133e-02 + 29 -5.1652528928022433e-04 -1.4404353042683099e-04 -1.2462150875064196e-02 + 30 6.9288940488795056e-05 -1.4710788156542239e-04 -1.2875332550432134e-02 + 31 2.7644608312646314e-04 -1.4573040212804145e-04 -1.2258366148270420e-02 + 32 1.7312052380602741e-04 -1.3246895843787418e-04 -1.4250473428514749e-02 + 33 -4.2201273060055557e-04 -7.2075937985441126e-05 -1.3820153961237609e-02 + 34 3.3549241776445280e-05 -5.8924381188893540e-05 -1.3900492261623465e-02 + 35 2.6119063773180797e-04 -7.3975274656908229e-05 -1.3656086631368676e-02 + 36 1.2829798186810219e-04 -4.4146305074977061e-05 -1.4997087695938056e-02 + 37 -5.1375024459660446e-04 3.1547360096919003e-04 -1.2519087424517190e-02 + 38 6.8697062203298403e-05 2.9188411177715840e-04 -1.2927175328444108e-02 + 39 2.7540798890579723e-04 3.2141722701930868e-04 -1.2316658300695350e-02 + 40 1.7191884579607650e-04 2.4497453169432579e-04 -1.4294679585099376e-02 + 41 -3.8125358429239129e-04 -9.8073404256391242e-05 -1.4573806404289218e-02 + 42 2.5208712883704254e-05 -8.5394829999053783e-05 -1.4603558816163261e-02 + 43 2.4329125095209453e-04 -1.0051714757303402e-04 -1.4423743772053488e-02 + 44 1.1343880007511943e-04 -6.7742613833467660e-05 -1.5588639087563531e-02 ... From 928bbee97c47745afccd2e6eb28ba96d3bacca04 Mon Sep 17 00:00:00 2001 From: Ludwig Ahrens Date: Fri, 7 Oct 2022 11:36:42 +0200 Subject: [PATCH 20/46] Use etaij for electrode-electrode interaction --- src/ELECTRODE/electrode_vector.cpp | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/ELECTRODE/electrode_vector.cpp b/src/ELECTRODE/electrode_vector.cpp index bb4c481716..4e55f2ef23 100644 --- a/src/ELECTRODE/electrode_vector.cpp +++ b/src/ELECTRODE/electrode_vector.cpp @@ -115,7 +115,7 @@ void ElectrodeVector::compute_vector(double *vector) void ElectrodeVector::pair_contribution(double *vector) { - //double const etaij = eta * eta / sqrt(2.0 * eta * eta); // see mw ewald theory eq. (29)-(30) + double const etaij = eta * eta / sqrt(2.0 * eta * eta); double **x = atom->x; double *q = atom->q; int *type = atom->type; @@ -156,11 +156,10 @@ void ElectrodeVector::pair_contribution(double *vector) double const rinv = 1.0 / r; double aij = rinv; aij *= ElectrodeMath::safe_erfc(g_ewald * r); - // TODO using etaij makes no difference? - //if (invert_source) - aij -= ElectrodeMath::safe_erfc(eta * r) * rinv; - //else - //aij -= ElectrodeMath::safe_erfc(etaij * r) * rinv; + if (invert_source) + aij -= ElectrodeMath::safe_erfc(eta * r) * rinv; + else + aij -= ElectrodeMath::safe_erfc(etaij * r) * rinv; if (i_in_sensor) { vector[i] += aij * q[j]; //} else if (j_in_sensor) { From 812fa5019669951287f51d490c08313bbf0fe210 Mon Sep 17 00:00:00 2001 From: Shern Tee Date: Mon, 10 Oct 2022 06:31:03 +0000 Subject: [PATCH 21/46] Apply 1 suggestion(s) to 1 file(s) --- src/ELECTRODE/electrode_vector.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ELECTRODE/electrode_vector.cpp b/src/ELECTRODE/electrode_vector.cpp index 4e55f2ef23..07797d7a46 100644 --- a/src/ELECTRODE/electrode_vector.cpp +++ b/src/ELECTRODE/electrode_vector.cpp @@ -115,7 +115,7 @@ void ElectrodeVector::compute_vector(double *vector) void ElectrodeVector::pair_contribution(double *vector) { - double const etaij = eta * eta / sqrt(2.0 * eta * eta); + double const etaij = eta * MY_ISQRT2; double **x = atom->x; double *q = atom->q; int *type = atom->type; From ea7e0fbb6c563cd78677f63de84169972d9b4304 Mon Sep 17 00:00:00 2001 From: Ludwig Ahrens-Iwers Date: Wed, 12 Oct 2022 07:01:44 +0000 Subject: [PATCH 22/46] Madelung benchmark --- examples/PACKAGES/electrode/README | 8 ++ .../PACKAGES/electrode/madelung/.gitignore | 2 + .../PACKAGES/electrode/madelung/data.au-elyt | 27 ++++++ examples/PACKAGES/electrode/madelung/eval.py | 53 +++++++++++ examples/PACKAGES/electrode/madelung/in.cg | 11 +++ .../PACKAGES/electrode/madelung/in.ewald-ew2d | 11 +++ .../electrode/madelung/in.ewald-ew3dc | 11 +++ .../electrode/madelung/in.ewald-ffield | 10 ++ .../PACKAGES/electrode/madelung/in.pppm-ew3dc | 11 +++ .../electrode/madelung/in.pppm-ffield | 10 ++ .../PACKAGES/electrode/madelung/plate_cap.py | 94 +++++++++++++++++++ .../PACKAGES/electrode/madelung/settings.mod | 22 +++++ examples/PACKAGES/electrode/madelung/test.sh | 23 +++++ 13 files changed, 293 insertions(+) create mode 100644 examples/PACKAGES/electrode/madelung/.gitignore create mode 100644 examples/PACKAGES/electrode/madelung/data.au-elyt create mode 100644 examples/PACKAGES/electrode/madelung/eval.py create mode 100644 examples/PACKAGES/electrode/madelung/in.cg create mode 100644 examples/PACKAGES/electrode/madelung/in.ewald-ew2d create mode 100644 examples/PACKAGES/electrode/madelung/in.ewald-ew3dc create mode 100644 examples/PACKAGES/electrode/madelung/in.ewald-ffield create mode 100644 examples/PACKAGES/electrode/madelung/in.pppm-ew3dc create mode 100644 examples/PACKAGES/electrode/madelung/in.pppm-ffield create mode 100755 examples/PACKAGES/electrode/madelung/plate_cap.py create mode 100644 examples/PACKAGES/electrode/madelung/settings.mod create mode 100644 examples/PACKAGES/electrode/madelung/test.sh diff --git a/examples/PACKAGES/electrode/README b/examples/PACKAGES/electrode/README index 652194670b..9ea994e3c3 100644 --- a/examples/PACKAGES/electrode/README +++ b/examples/PACKAGES/electrode/README @@ -22,6 +22,14 @@ au-aq/ in.ffield -- finite field method with fully periodic cell in.tf -- Thomas-Fermi metallicity model with more delocalized charges +madelung/ + data.au-elyt -- tiny electrodes with two electrolyte atoms in between + settings.mod -- common settings + in.* -- setup KSpace and fix electrode/conp + plate_cap.py -- compute reference energy and charges from Madelung style sum + eval.py -- compare output of reference and Lammps job (used by test.sh) + test.sh -- run all in.* files and check charge at 1 V and %difference from theoretical (last column) + # future work: # in.cylinder -- comparison of carbon nanotube to theoretical induced charge for charge near circular conductor diff --git a/examples/PACKAGES/electrode/madelung/.gitignore b/examples/PACKAGES/electrode/madelung/.gitignore new file mode 100644 index 0000000000..89d8d1a065 --- /dev/null +++ b/examples/PACKAGES/electrode/madelung/.gitignore @@ -0,0 +1,2 @@ +*.csv +*.txt diff --git a/examples/PACKAGES/electrode/madelung/data.au-elyt b/examples/PACKAGES/electrode/madelung/data.au-elyt new file mode 100644 index 0000000000..366e317378 --- /dev/null +++ b/examples/PACKAGES/electrode/madelung/data.au-elyt @@ -0,0 +1,27 @@ +LAMMPS data file via write_data, version 24 Dec 2020, timestep = 0 + +4 atoms +3 atom types + +0 1 xlo xhi +0 1 ylo yhi +-10 10 zlo zhi + +Masses + +1 196.966553 +2 196.966553 +3 1.0 + +Pair Coeffs # lj/cut/coul/long + +1 0 0 +2 0 0 +3 0 0 + +Atoms # full + +1 1 1 0.00 0.00 0.00 -2.00 # bottom electrode +2 2 2 0.00 0.00 0.00 2.00 # top electrode +3 3 3 0.50 0.00 0.00 -1.00 # bottom electrolyte +4 3 3 -0.50 0.00 0.00 1.00 # top electrolyte diff --git a/examples/PACKAGES/electrode/madelung/eval.py b/examples/PACKAGES/electrode/madelung/eval.py new file mode 100644 index 0000000000..2f5a355d9b --- /dev/null +++ b/examples/PACKAGES/electrode/madelung/eval.py @@ -0,0 +1,53 @@ +#!/usr/env/python3 + +import sys +import os.path as op + + +def rel_error(out, ref): + return 100 * abs((ref - out) / out) + + +assert len(sys.argv) == 5 + +with open(sys.argv[1]) as f: + ref_line = f.readlines()[-1].split(", ") +e_ref = float(ref_line[1]) +q_ref = float(ref_line[3]) +inv11_ref = float(ref_line[4]) +inv12_ref = float(ref_line[5]) +b1_ref = float(ref_line[6]) + +# out.csv +with open(sys.argv[2]) as f: + out_line = f.readlines()[-1].split(", ") +e_out = float(out_line[0]) +q_out = float(out_line[1]) + +out_lines = [("energy", e_ref, e_out), ("charge", q_ref, q_out)] + +# vec.csv +vec_file = "vec.csv" +if op.isfile(vec_file): + with open(sys.argv[4]) as f: + vec_line = f.readlines()[1:] + b1_out = float(vec_line[0]) + b2_out = float(vec_line[1]) + out_lines.append(("b1", b1_ref, b1_out)) + +# inv.csv +inv_file = "inv.csv" +if op.isfile(inv_file): + with open(inv_file) as f: + inv_line = f.readlines()[1].split() + inv11_out = float(inv_line[0]) + inv12_out = float(inv_line[1]) + out_lines.append(("inv11", inv11_ref, inv11_out)) + +lines = [] +for label, ref, out in out_lines: + error = rel_error(out, ref) + lines.append(f"{label}: {out:.5f}, {error:.5f}\n") + +with open("madelung.txt", 'a') as f: + f.writelines(lines) diff --git a/examples/PACKAGES/electrode/madelung/in.cg b/examples/PACKAGES/electrode/madelung/in.cg new file mode 100644 index 0000000000..39a90a1f29 --- /dev/null +++ b/examples/PACKAGES/electrode/madelung/in.cg @@ -0,0 +1,11 @@ +boundary p p f +kspace_style ewald/electrode 1.0e-8 +kspace_modify slab 8.0 # ew3dc + +include "settings.mod" # styles, computes, groups and fixes + +thermo_style custom step pe c_qbot c_qtop +fix conp bot electrode/conp 0 2 couple top 1 symm on algo cg 1e-6 + +run 0 + diff --git a/examples/PACKAGES/electrode/madelung/in.ewald-ew2d b/examples/PACKAGES/electrode/madelung/in.ewald-ew2d new file mode 100644 index 0000000000..2f54e747d1 --- /dev/null +++ b/examples/PACKAGES/electrode/madelung/in.ewald-ew2d @@ -0,0 +1,11 @@ +boundary p p f +kspace_style ewald/electrode 1.0e-8 +kspace_modify slab ew2d + +include "settings.mod" # styles, computes, groups and fixes + +thermo_style custom step pe c_qbot c_qtop +fix conp bot electrode/conp 0 2 couple top 1 symm on write_inv inv.csv write_vec vec.csv + +run 0 + diff --git a/examples/PACKAGES/electrode/madelung/in.ewald-ew3dc b/examples/PACKAGES/electrode/madelung/in.ewald-ew3dc new file mode 100644 index 0000000000..c89804ef11 --- /dev/null +++ b/examples/PACKAGES/electrode/madelung/in.ewald-ew3dc @@ -0,0 +1,11 @@ +boundary p p f +kspace_style ewald/electrode 1.0e-8 +kspace_modify slab 8.0 # ew3dc + +include "settings.mod" # styles, computes, groups and fixes + +thermo_style custom step pe c_qbot c_qtop +fix conp bot electrode/conp 0 2 couple top 1 symm on write_inv inv.csv write_vec vec.csv + +run 0 + diff --git a/examples/PACKAGES/electrode/madelung/in.ewald-ffield b/examples/PACKAGES/electrode/madelung/in.ewald-ffield new file mode 100644 index 0000000000..c30f82159b --- /dev/null +++ b/examples/PACKAGES/electrode/madelung/in.ewald-ffield @@ -0,0 +1,10 @@ +boundary p p p +kspace_style ewald/electrode 1.0e-8 + +include "settings.mod" # styles, computes, groups and fixes + +thermo_style custom step pe c_qbot c_qtop +fix conp bot electrode/conp 0 2 couple top 1 symm on ffield yes write_inv inv.csv write_vec vec.csv + +run 0 + diff --git a/examples/PACKAGES/electrode/madelung/in.pppm-ew3dc b/examples/PACKAGES/electrode/madelung/in.pppm-ew3dc new file mode 100644 index 0000000000..c36587af08 --- /dev/null +++ b/examples/PACKAGES/electrode/madelung/in.pppm-ew3dc @@ -0,0 +1,11 @@ +boundary p p f +kspace_style pppm/electrode 1.0e-10 +kspace_modify slab 8.0 # ew3dc + +include "settings.mod" # styles, computes, groups and fixes + +thermo_style custom step pe c_qbot c_qtop +fix conp bot electrode/conp 0 2 couple top 1 symm on write_inv inv.csv write_vec vec.csv + +run 0 + diff --git a/examples/PACKAGES/electrode/madelung/in.pppm-ffield b/examples/PACKAGES/electrode/madelung/in.pppm-ffield new file mode 100644 index 0000000000..e161485e6f --- /dev/null +++ b/examples/PACKAGES/electrode/madelung/in.pppm-ffield @@ -0,0 +1,10 @@ +boundary p p p +kspace_style pppm/electrode 1.0e-10 + +include "settings.mod" # styles, computes, groups and fixes + +thermo_style custom step pe c_qbot c_qtop +fix conp bot electrode/conp 0 2 couple top 1 symm on ffield yes write_inv inv.csv write_vec vec.csv + +run 0 + diff --git a/examples/PACKAGES/electrode/madelung/plate_cap.py b/examples/PACKAGES/electrode/madelung/plate_cap.py new file mode 100755 index 0000000000..62d52fe102 --- /dev/null +++ b/examples/PACKAGES/electrode/madelung/plate_cap.py @@ -0,0 +1,94 @@ +#!/usr/bin/env python3 + +import numpy as np +from scipy.special import erf + +ETA = 2 +SQRT2 = np.sqrt(2) +COULOMB = 332.06371 # Coulomb constant in Lammps 'real' units +QE2F = 23.060549 +LENGTH = 10000 # convergence parameter + + +def lattice(length): + """indices combinations of images in one quadrant""" + x = np.arange(length) # range(length) + y = np.arange(1, length) + return np.array(np.meshgrid(x, y)).T.reshape(-1, 2) + + +def a_element(r): + """Coulomb contribution of two Gaussians""" + return erf(ETA / SQRT2 * r) / r + + +def b_element(r, q): + """Coulomb contribution of a Gaussian with a point charge""" + return q * erf(ETA * r) / r + + +a = 1 # nearest neighbor distance i.e. lattice constant / sqrt(2) +x_elec = [-2, 2] +x_elyt = [-1, 1] +q_elyt = [0.5, -0.5] +distance_plates = x_elec[1] - x_elec[0] # distance between plates +v = np.array([-0.5, 0.5]) * (QE2F / COULOMB) + +# distances to images within electrode and to opposite electrode +distances = a * np.linalg.norm(lattice(LENGTH), axis=1) +opposite_distances = np.sqrt(np.square(distances) + distance_plates ** 2) + +# self interaction and within original box +A_11 = np.sqrt(2 / np.pi) * ETA +A_12 = erf(ETA * distance_plates / SQRT2) / distance_plates + +# interaction with periodic images +A_11 += 4 * np.sum(a_element(distances)) +A_12 += 4 * np.sum(a_element(opposite_distances)) +A = np.array([[A_11, A_12], [A_12, A_11]]) +inv = np.linalg.inv(A) +e = np.array([1, 1]) +inv -= np.matmul(inv, np.matmul(np.outer(e, e), inv)) / np.dot(e, np.dot(inv, e)) + +# electrode-electrolyte interaction +b = [] +for x in x_elec: + bi = 0 + for y, q in zip(x_elyt, q_elyt): + d = abs(y - x) + bi += b_element(d, q) + image_distances = np.sqrt(np.square(distances) + d ** 2) + bi += 4 * np.sum(b_element(image_distances, q)) + b.append(bi) +b = np.array(b) + +# electrolyte-electrolyte energy +elyt_11 = 4 * np.sum(1 / distances) +distance_elyt = x_elyt[1] - x_elyt[0] +elyt_12 = 1 / distance_elyt + 4 * np.sum( + 1 / np.sqrt(np.square(distances) + distance_elyt ** 2) +) +elyt = np.array([[elyt_11, elyt_12], [elyt_12, elyt_11]]) +energy_elyt = 0.5 * np.dot(q_elyt, np.dot(elyt, q_elyt)) + +# electrode charges and energy +q = np.dot(inv, v - b) +energy = COULOMB * (0.5 * np.dot(q, np.dot(A, q)) + np.dot(b, q) + energy_elyt) + +print( + "length, energy / kcal/mol, q1 / e, q2 / e, inv11 / A, inv12 / A, b1 / e/A, b2 / e/A" +) +print( + ", ".join( + [ + str(LENGTH), + f"{energy:.8f}", + f"{q[0]:.10f}", + f"{q[1]:.10f}", + f"{inv[0, 0]:.10f}", + f"{inv[0, 1]:.10f}", + f"{b[0]:.8f}", + f"{b[1]:.8f}", + ] + ) +) diff --git a/examples/PACKAGES/electrode/madelung/settings.mod b/examples/PACKAGES/electrode/madelung/settings.mod new file mode 100644 index 0000000000..aa1096ea81 --- /dev/null +++ b/examples/PACKAGES/electrode/madelung/settings.mod @@ -0,0 +1,22 @@ +# set boundary in main script because ffield is periodic +units real +# distribute electrode atoms among all processors: +if "$(extract_setting(world_size) % 2) == 0" then "processors * * 2" + +atom_style full +pair_style lj/cut/coul/long 12 + +read_data "data.au-elyt" + +group bot type 1 +group top type 2 + +# get electrode charges +variable q atom q +compute qbot bot reduce sum v_q +compute qtop top reduce sum v_q + +compute compute_pe all pe +variable vpe equal c_compute_pe +variable charge equal c_qtop +fix fxprint all print 1 "${vpe}, ${charge}" file "out.csv" diff --git a/examples/PACKAGES/electrode/madelung/test.sh b/examples/PACKAGES/electrode/madelung/test.sh new file mode 100644 index 0000000000..edac04f5b1 --- /dev/null +++ b/examples/PACKAGES/electrode/madelung/test.sh @@ -0,0 +1,23 @@ +#!/bin/bash -e + +lmpbin=$1 +if [ ! -f $lmpbin ]; then + echo "LAMMPS binary '$lmpbin' is not a file" + exit 1 +fi + +ref_out="plate_cap.csv" +if [ ! -f $ref_out ]; then + echo "Generating reference data" + python3 plate_cap.py > $ref_out +fi + +echo "Running Lammps inputs" +rm -rf madelung.txt && touch madelung.txt +for file in in.*; do + printf "\n$file\n" >> madelung.txt + rm -f out.csv inv.csv vec.csv + $lmpbin -i $file &> /dev/null + python3 eval.py $ref_out out.csv inv.csv vec.csv +done +cat madelung.txt From 5f285e6aa319698c411f0fa5ddbd74b7f9755cd8 Mon Sep 17 00:00:00 2001 From: Shern Tee Date: Wed, 12 Oct 2022 12:00:46 +0000 Subject: [PATCH 23/46] Update documentation Make documentation of ELECTRODE fixes more complete by listing more warnings and describing options more fully. Use utils::logical for toggle (on/off) options. With the changes in etypes to auto-detect electrode types it makes more sense to make it an on/off toggle as well, so that we don't have inconsistent keyword types. --- doc/src/fix_electrode_conp.rst | 258 +++++++++++++----- examples/PACKAGES/electrode/au-aq/in.ffield | 2 +- examples/PACKAGES/electrode/au-aq/in.tf | 2 +- examples/PACKAGES/electrode/graph-il/in.conq | 2 +- examples/PACKAGES/electrode/graph-il/in.conq2 | 2 +- .../PACKAGES/electrode/graph-il/in.etypes | 2 +- .../PACKAGES/electrode/graph-il/in.ffield | 2 +- examples/PACKAGES/electrode/graph-il/in.ramp | 2 +- .../PACKAGES/electrode/graph-il/in.thermo | 4 +- src/ELECTRODE/fix_electrode_conp.cpp | 27 +- 10 files changed, 206 insertions(+), 97 deletions(-) diff --git a/doc/src/fix_electrode_conp.rst b/doc/src/fix_electrode_conp.rst index 02aa73ad54..246b212b0e 100644 --- a/doc/src/fix_electrode_conp.rst +++ b/doc/src/fix_electrode_conp.rst @@ -31,26 +31,21 @@ Syntax * ID, group-ID are documented in fix command * mode = electrode/conp or electrode/conq or electrode/thermo -* potential = electrode potential (number, or equal-style variable) -* charge = electrode charge -* eta = reciprocal width of electrode charge smearing +* potential = electrode potential (can be an equal-style variable, see below) +* charge = electrode charge (can be an equal-style variable, see below) +* eta = reciprocal width of electrode charge Gaussian distribution * T_v = temperature of thermo-potentiostat * tau_v = time constant of thermo-potentiostat -* rng_v = integer used to initialize random number generator +* rng_v = integer used to initialize thermo-potentiostat random number generator +* Optional keywords and values: .. parsed-literal:: - *algo mat_inv/mat_cg value/cg value* + *algo mat_inv/mat_cg tol/cg tol* specify the algorithm used to compute the electrode charges - *symm(etry) on/off* - turn on/off charge neutrality constraint for the electrodes *couple group-ID value* group-ID = group of atoms treated as additional electrode value = electric potential or charge on this electrode - *etypes* - construct optimized neighbor lists (types of the electrode must be exclusive to them) - *ffield on/off* - turn on/off finite-field implementation *write_mat filename* write elastance matrix to file *write_inv filename* @@ -59,6 +54,12 @@ Syntax read elastance matrix from file *read_inv filename* read inverted matrix from file + *symm(etry) on/off* + turn on/off charge neutrality constraint for the electrodes + *ffield on/off* + turn on/off finite-field implementation + *etypes on/off* + turn on/off type-based optimized neighbor lists (electrode and electrolyte types may not overlap) Examples """""""" @@ -66,32 +67,81 @@ Examples .. code-block:: LAMMPS fix fxconp bot electrode/conp -1.0 1.805 couple top 1.0 couple ref 0.0 write_inv inv.csv symm on - fix fxconp electrodes electrode/conq 0.0 1.805 + fix fxconp electrodes electrode/conq 0.0 1.805 algo cg 1e-5 fix fxconp bot electrode/thermo -1.0 1.805 temp 298 100 couple top 1.0 Description """"""""""" -fix electrode/conp mode implements a constant potential method (CPM) -(:ref:`Siepmann `, :ref:`Reed `). Charges of groups specified -via group-ID and optionally with the `couple` keyword are adapted to meet their respective -potential at every time step. An arbitrary number of electrodes can be set but -the respective groups may not overlap. Electrode charges have a Gaussian charge -distribution with reciprocal width eta. +The *electrode* fixes implement the constant potential method (CPM) +(:ref:`Siepmann `, :ref:`Reed `), and modern variants, to +accurately model electrified, conductive electrodes. This is primarily useful +for studying electrode-electrolyte interfaces, especially at high potential +differences or ionicities, with non-planar electrodes such as nanostructures or +nanopores, and to study dynamic phenomena such as charging or discharging time +scales or conductivity or ionic diffusivities. -Three algorithms are available to minimize the energy: -via matrix inversion (*algo mat_inv*) :ref:`(Wang) `, or with the conjugate gradient -method either using a matrix for the electrode-electrode interaction (*algo -mat_cg value*) or computing the interaction directly (*algo cg value*). This -method requires a threshold value to set the accuracy. +Each *electrode* fix allows users to set additional electrostatic relationships +between the specified groups which model useful electrostatic configurations: -fix electrode/conq enforces a total charge specified in the input on each electrode. The energy is -minimized w.r.t. the charge distribution within the electrode. +* *electrode/conp* sets potentials or potential differences between electrodes -fix electrode/thermo implements a thermo-potentiostat :ref:`(Deissenbeck) -`. Temperature and time constant of the thermo-potentiostat need -to be specified using the temp keyword. Currently, only two electrodes are possible with -this style. This fix is not compatible with the conjugate gradient algorithms. + * (resulting in changing electrode total charges) + +* *electrode/conq* sets the total charge on each electrode + + * (resulting in changing electrode potentials) + +* *electrode/thermo* sets a thermopotentiostat :ref:`(Deissenbeck)` between two electrodes + + * (resulting in changing charges and potentials with appropriate average potential difference and thermal variance) + +The first group-ID provided to each fix specifies the first electrode group, and +more group(s) are added using the *couple* keyword for each additional group. +While *electrode/thermo* only accepts two groups, *electrode/conp* and +*electrode/conq* accept any number of groups, up to LAMMPS's internal +restrictions (see Restrictions below). Electrode groups must not overlap, i.e. +the fix will issue an error if any particle is detected to belong to at least +two electrode groups. + +CPM involves updating charges on groups of electrode particles, per time step, +so that the system's total energy is minimized with respect to those charges. +From basic electrostatics, this is equivalent to making each group conductive, +or imposing an equal electrostatic potential on every particle in the same group +(hence the name CPM). The charges are usually modelled as a Gaussian +distribution to make the charge-charge interaction matrix invertible +(:ref:`Gingrich `). The keyword *eta* specifies the distribution's +width in units of inverse length. + +Three algorithms are available to minimize the energy, varying in how matrices +are pre-calculated before a run to provide computational speedup. These +algorithms can be selected using the keyword *algo*: + +* *algo mat_inv* pre-calculates the capacitance matrix + and obtains the charge configuration in one matrix-vector calculation per time step + +* *algo mat_cg* pre-calculates the elastance matrix (inverse of capacitance matrix) + and obtains the charge configuration using a conjugate gradient solver + in multiple matrix-vector calculations per time step + +* *algo cg* does not perform any pre-calculation and obtains the charge configuration + using a conjugate gradient solver and multiple calculations of the electric potential per time step. + +For both *cg* methods, the command must specify the conjugate gradient +tolerance. *fix electrode/thermo* currently only supports the *mat_inv* +algorithm. + +For *fix electrode/conp*, the keyword *symm* can be set *on* (or *off*) to turn +on (or turn off) the constraint requiring total electrode charge to be zero. +With *symm off*, the potentials specified are absolute potentials, but the +charge configurations satisfying them may add up to an overall non-zero, varying +charge for the electrodes (and thus the simulation box). With *symm on*, the +total charge over all electrode groups is constrained to zero. + +The *symm* keyword is not allowed for *electrode/conq*, for which overall +neutrality is explicitly obeyed or violated by the user input, and for +*electrode/thermo*, for which overall neutrality is always automatically +imposed. For all three fixes, any potential (or charge for *conq*) can be specified as an equal-style variable prefixed with "v\_". For example, the following code will @@ -105,15 +155,16 @@ course of the simulation: Note that these fixes only parse their supplied variable name when starting a run, and so these fixes will accept equal-style variables defined *after* the -fix definition, including variables dependent on the fix's own output. For an -advanced example of this see the in.conq2 input file in the directory +fix definition, including variables dependent on the fix's own output. This is +useful, for example, in the fix's internal finite-field commands (see below). +For an advanced example of this see the in.conq2 input file in the directory examples/PACKAGES/electrode/graph-il. -This fix necessitates the use of a long range solver that calculates and provides the matrix -of electrode-electrode interactions and a vector of electrode-electrolyte -interactions. The Kspace styles *ewald/electrode*, *pppm/electrode* and -*pppm/electrode/intel* are created specifically for this task -:ref:`(Ahrens-Iwers) `. +This fix necessitates the use of a long range solver that calculates and +provides the matrix of electrode-electrode interactions and a vector of +electrode-electrolyte interactions. The Kspace styles *ewald/electrode*, +*pppm/electrode* and *pppm/electrode/intel* are created specifically for this +task :ref:`(Ahrens-Iwers) `. For systems with non-periodic boundaries in one or two directions dipole corrections are available with the :doc:`kspace_modify `. For @@ -135,6 +186,49 @@ moderate mesh size but requires more memory. kspace_modify amat onestep/twostep +For all versions of the fix, the keyword-value *ffield on* enables the +finite-field mode (:ref:`Dufils `, :ref:`Tee `), which uses an +electric field across a periodic cell instead of non-periodic boundary +conditions to impose a potential difference between the two electrodes bounding +the cell. The fix (with name *fix-ID*) detects which of the two electrodes is +"on top" (has the larger maximum *z*-coordinate among all particles). Assuming +the first electrode group is on top, it then issues the following commands +internally: + +.. code-block:: LAMMPS + + variable fix-ID_ffield_zfield equal (f_fix-ID[2]-f_fix-ID[1])/lz + efield fix-ID_efield all efield 0.0 0.0 v_fix-ID_ffield_zfield + +which implements the required electric field as the potential difference divided +by cell length. The internal commands use variable so that the electric field +will correctly vary with changing potentials in the correct way (for example +with equal-style potential difference or with *fix electrode/conq*). This +keyword requires two electrodes and will issue an error with any other number of +electrodes. + +For all versions of the fix, the keyword-value *etypes on* enables type-based +optimized neighbor lists. With this feature enabled, LAMMPS provides the fix +with an occasional neighborlist restricted to electrode-electrode interactions +for calculating the electrode matrix, and a perpetual neighborlist restricted to +electrode-electrolyte interactions for calculating the electrode potentials, +using particle types to list only desired interactions, and typically resulting +in 5--10\% less computational time. Without this feature the fix will simply +use the active pair style's neighborlist. This feature cannot be enabled if any +electrode particle has the same type as any electrolyte particle (which would be +unusual in a typical simulation) and the fix will issue an error in that case. + +.. + (if we merge the overlap_etypes branch) + This feature will provide minimal benefit if any electrode particle has the same type as any + electrolyte particle, since it will be impossible for LAMMPS to list only electrode-electrolyte + neighbor pairs and discard other neighbor pairs from the provided perpetual neighborlist. + + +Restart, fix_modify, output, run start/stop, minimize info +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + +This fix currently does not write any information to restart files. The *fix_modify tf* option enables the Thomas-Fermi metallicity model (:ref:`Scalfi `) and allows parameters to be set for each atom type. @@ -144,7 +238,8 @@ The *fix_modify tf* option enables the Thomas-Fermi metallicity model fix_modify ID tf type length voronoi -If this option is used parameters must be set for all atom types of the electrode. +If this option is used parameters must be set for all atom types of the +electrode. The *fix_modify timer* option turns on (off) additional timer outputs in the log file, for code developers to track optimization. @@ -156,8 +251,8 @@ file, for code developers to track optimization. ---------- These fixes compute a global (extensive) scalar, a global (intensive) vector, -and a global array, which can be accessed by various -:doc:`output commands `. +and a global array, which can be accessed by various :doc:`output commands +`. The global scalar outputs the energy added to the system by this fix, which is the negative of the total charge on each electrode multiplied by that @@ -167,48 +262,46 @@ The global vector outputs the potential on each electrode (and thus has *N* entries if the fix manages *N* electrode groups), in :doc:`units ` of electric field multiplied by distance (thus volts for *real* and *metal* units). The electrode groups' ordering follows the order in which they were input in the -fix command using *couple*. The global vector output is useful for -*fix electrode/conq* and *fix electrode/thermo*, -where potential is dynamically updated based on electrolyte configuration -instead of being directly set. +fix command using *couple*. The global vector output is useful for *fix +electrode/conq* and *fix electrode/thermo*, where potential is dynamically +updated based on electrolyte configuration instead of being directly set. The global array has *N* rows and *2N+1* columns, where the fix manages *N* electrode groups managed by the fix. For the *I*-th row of the array, the elements are: * array[I][1] = total charge that group *I* would have had *if it were at 0 V - applied potential* -* array[I][2 to *N* + 1] = the *N* entries of the *I*-th row of the electrode - capacitance matrix (definition follows) -* array[I][*N* + 2 to *2N* + 1] = the *N* entries of the *I*-th row of the electrode - elastance matrix (the inverse of the electrode capacitance matrix) + applied potential* * array[I][2 to *N* + 1] = the *N* entries of the *I*-th + row of the electrode capacitance matrix (definition follows) * array[I][*N* + + 2 to *2N* + 1] = the *N* entries of the *I*-th row of the electrode elastance + matrix (the inverse of the electrode capacitance matrix) The :math:`N \times N` electrode capacitance matrix, denoted :math:`\mathbf{C}` -in the following equation, summarizes how the total charge induced on each electrode -(:math:`\mathbf{Q}` as an *N*-vector) is related to the potential on each -electrode, :math:`\mathbf{V}`, and the charge-at-0V :math:`\mathbf{Q}_{0V}` +in the following equation, summarizes how the total charge induced on each +electrode (:math:`\mathbf{Q}` as an *N*-vector) is related to the potential on +each electrode, :math:`\mathbf{V}`, and the charge-at-0V :math:`\mathbf{Q}_{0V}` (which is influenced by the local electrolyte structure): .. math:: \mathbf{Q} = \mathbf{Q}_{0V} + \mathbf{C} \cdot \mathbf{V} -The charge-at-0V, electrode capacitance and elastance matrices are internally used to -calculate the potentials required to induce the specified total electrode charges -in *fix electrode/conq* and *fix electrode/thermo*. With the *symm on* option, -the electrode capacitance matrix would be singular, and thus its last row is -replaced with *N* copies of its top-left entry (:math:`\mathbf{C}_{11}`) for -invertibility. +The charge-at-0V, electrode capacitance and elastance matrices are internally +used to calculate the potentials required to induce the specified total +electrode charges in *fix electrode/conq* and *fix electrode/thermo*. With the +*symm on* option, the electrode capacitance matrix would be singular, and thus +its last row is replaced with *N* copies of its top-left entry +(:math:`\mathbf{C}_{11}`) for invertibility. The global array output is mainly useful for quickly determining the 'vacuum capacitance' of the system (capacitance with only electrodes, no electrolyte), and can also be used for advanced simulations setting the potential as some -function of the charge-at-0V (such as in the in.conq2 example mentioned above). +function of the charge-at-0V (such as the `in.conq2` example mentioned above). -Please cite :ref:`(Ahrens-Iwers2022) ` in any publication that uses -this implementation. -Please cite also the publication on the combination of the CPM with pppm if you -use *pppm/electrode* :ref:`(Ahrens-Iwers) `. +Please cite :ref:`(Ahrens-Iwers2022) ` in any publication that +uses this implementation. Please cite also the publication on the combination +of the CPM with PPPM if you use *pppm/electrode* :ref:`(Ahrens-Iwers) +`. ---------- @@ -218,6 +311,14 @@ Restrictions For algorithms that use a matrix for the electrode-electrode interactions, positions of electrode particles have to be immobilized at all times. +With *ffield off* (i.e. the default), the box geometry is expected to be +*z*-non-periodic (i.e. *boundary p p f*), and this fix will issue an error if +the box is *z*-periodic. With *ffield on*, the box geometry is expected to be +*z*-periodic, and this fix will issue an error if the box is *z*-non-periodic. + +TODO: will fix check if *kspace_modify slab* is enabled or does it silently give +wrong results? + The parallelization for the fix works best if electrode atoms are evenly distributed across processors. For a system with two electrodes at the bottom and top of the cell this can be achieved with *processors * * 2*, or with the @@ -230,6 +331,22 @@ line which avoids an error if the script is run on an odd number of processors (such as on just one processor for testing). +The fix creates an additional group named *[fix-ID]_group* which is the union of +all electrode groups supplied to LAMMPS. This additional group counts towards +LAMMPS's limitation on the total number of groups (currently 32), which may not +allow scripts that use that many groups to run with this fix. + +The matrix-based algorithms (*algo mat_inv* and *algo mat_cg*) currently store +an interaction matrix (either elastance or capacitance) of *N* by *N* doubles +for each MPI process. This memory requirement may be prohibitive for large +electrode groups. The fix will issue a warning if it expects to use more than +0.5 GiB of memory. + +Default +""""""" +The default keyword-option settings are *algo mat_inv*, *symm off*, *etypes off* +and *ffield off*. + ---------- .. include:: accel_styles.rst @@ -244,14 +361,14 @@ as on just one processor for testing). **(Reed)** Reed *et al.*, J. Chem. Phys. 126, 084704 (2007). -.. _Wang5: - -**(Wang)** Wang *et al.*, J. Chem. Phys. 141, 184102 (2014). - .. _Deissenbeck: **(Deissenbeck)** Deissenbeck *et al.*, Phys. Rev. Letters 126, 136803 (2021). +.. _Gingrich: + +**(Gingrich)** Gingrich, `MSc thesis` ` (2010). + .. _Ahrens-Iwers: **(Ahrens-Iwers)** Ahrens-Iwers and Meissner, J. Chem. Phys. 155, 104104 (2021). @@ -260,6 +377,14 @@ as on just one processor for testing). **(Hu)** Hu, J. Chem. Theory Comput. 10, 5254 (2014). +.. _Dufils: + +**(Dufils)** Dufils *et al.*, Phys. Rev. Letters 123, 195501 (2019). + +.. _Tee: + +**(Tee)** Tee and Searles, J. Chem. Phys. 156, 184101 (2022). + .. _Scalfi: **(Scalfi)** Scalfi *et al.*, J. Chem. Phys., 153, 174704 (2020). @@ -267,4 +392,3 @@ as on just one processor for testing). .. _Ahrens-Iwers2: **(Ahrens-Iwers2022)** Ahrens-Iwers *et al.*, J. Chem. Phys. 157, 084801 (2022). - diff --git a/examples/PACKAGES/electrode/au-aq/in.ffield b/examples/PACKAGES/electrode/au-aq/in.ffield index 35b053ea3a..de594f8c9a 100644 --- a/examples/PACKAGES/electrode/au-aq/in.ffield +++ b/examples/PACKAGES/electrode/au-aq/in.ffield @@ -4,7 +4,7 @@ boundary p p p # ffield uses periodic z-boundary and no slab include settings.mod # styles, groups, computes and fixes -fix conp bot electrode/conp -1.0 1.805132 couple top 1.0 symm on ffield yes etypes +fix conp bot electrode/conp -1.0 1.805132 couple top 1.0 symm on ffield yes etypes on thermo 50 thermo_style custom step temp c_ctemp epair etotal c_qtop c_qbot c_qztop c_qzbot diff --git a/examples/PACKAGES/electrode/au-aq/in.tf b/examples/PACKAGES/electrode/au-aq/in.tf index 48a226456b..23beb357d8 100644 --- a/examples/PACKAGES/electrode/au-aq/in.tf +++ b/examples/PACKAGES/electrode/au-aq/in.tf @@ -6,7 +6,7 @@ boundary p p p # ffield uses periodic z-boundary and no slab include settings.mod # styles, groups, computes and fixes -fix conp bot electrode/conp -1.0 1.805132 couple top 1.0 symm on ffield yes etypes +fix conp bot electrode/conp -1.0 1.805132 couple top 1.0 symm on ffield yes etypes on fix_modify conp tf 6 1.0 18.1715745 fix_modify conp tf 7 1.0 18.1715745 diff --git a/examples/PACKAGES/electrode/graph-il/in.conq b/examples/PACKAGES/electrode/graph-il/in.conq index ea4685fa36..9706ba3b9b 100644 --- a/examples/PACKAGES/electrode/graph-il/in.conq +++ b/examples/PACKAGES/electrode/graph-il/in.conq @@ -5,7 +5,7 @@ boundary p p f # slab calculation include settings.mod # styles, groups, computes and fixes kspace_modify slab 3.0 -fix conq bot electrode/conq -1.0 1.979 couple top 1.0 etypes # conq doesn't take symm option +fix conq bot electrode/conq -1.0 1.979 couple top 1.0 etypes on # conq doesn't take symm option thermo 50 thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop f_conq[1] f_conq[2] diff --git a/examples/PACKAGES/electrode/graph-il/in.conq2 b/examples/PACKAGES/electrode/graph-il/in.conq2 index ad706bc50b..d860bf6c1a 100644 --- a/examples/PACKAGES/electrode/graph-il/in.conq2 +++ b/examples/PACKAGES/electrode/graph-il/in.conq2 @@ -5,7 +5,7 @@ boundary p p f # slab calculation include settings.mod # styles, groups, computes and fixes kspace_modify slab 3.0 -fix conp bot electrode/conp v_vbot 1.979 couple top v_vtop etypes +fix conp bot electrode/conp v_vbot 1.979 couple top v_vtop etypes on variable qex_bot equal -1.0-f_conp[1][1] # difference between desired and 0V charge variable qex_top equal 1.0-f_conp[2][1] # difference between desired and 0V charge diff --git a/examples/PACKAGES/electrode/graph-il/in.etypes b/examples/PACKAGES/electrode/graph-il/in.etypes index b9a0c65979..990c8bb415 100644 --- a/examples/PACKAGES/electrode/graph-il/in.etypes +++ b/examples/PACKAGES/electrode/graph-il/in.etypes @@ -5,7 +5,7 @@ boundary p p f # slab calculation include settings.mod # styles, groups, computes and fixes kspace_modify slab 3.0 -fix conp bot electrode/conp -1.0 1.979 couple top 1.0 symm on etypes +fix conp bot electrode/conp -1.0 1.979 couple top 1.0 symm on etypes on thermo 50 thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop diff --git a/examples/PACKAGES/electrode/graph-il/in.ffield b/examples/PACKAGES/electrode/graph-il/in.ffield index 66614899ec..0771e91e62 100644 --- a/examples/PACKAGES/electrode/graph-il/in.ffield +++ b/examples/PACKAGES/electrode/graph-il/in.ffield @@ -4,7 +4,7 @@ boundary p p p # ffield uses periodic z-boundary and no slab include settings.mod # styles, groups, computes and fixes -fix conp bot electrode/conp -1.0 1.979 couple top 1.0 symm on etypes ffield yes +fix conp bot electrode/conp -1.0 1.979 couple top 1.0 symm on etypes on ffield yes thermo 50 thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop diff --git a/examples/PACKAGES/electrode/graph-il/in.ramp b/examples/PACKAGES/electrode/graph-il/in.ramp index 12461bf455..e4b897937d 100644 --- a/examples/PACKAGES/electrode/graph-il/in.ramp +++ b/examples/PACKAGES/electrode/graph-il/in.ramp @@ -6,7 +6,7 @@ include settings.mod # styles, groups, computes and fixes kspace_modify slab 3.0 variable v equal ramp(2,4) -fix conp bot electrode/conp 0.0 1.979 couple top v_v symm on etypes +fix conp bot electrode/conp 0.0 1.979 couple top v_v symm on etypes on thermo 50 thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop v_v diff --git a/examples/PACKAGES/electrode/graph-il/in.thermo b/examples/PACKAGES/electrode/graph-il/in.thermo index 6ae29e2de1..253dafc138 100644 --- a/examples/PACKAGES/electrode/graph-il/in.thermo +++ b/examples/PACKAGES/electrode/graph-il/in.thermo @@ -6,9 +6,9 @@ include settings.mod # styles, groups, computes and fixes kspace_modify slab 3.0 unfix nvt # remove NVT thermostat included from "settings.mod" -fix conpthermo bot electrode/thermo -1.0 1.979 couple top 1.0 etypes temp 500 100 7 # temp tau rng +fix conpthermo bot electrode/thermo -1.0 1.979 couple top 1.0 etypes on temp 500 100 7 # temp tau rng # to compare to regular constant potential, switch previous line to this: -#fix conp bot electrode/conp -1.0 1.979 couple top 1.0 etypes symm on +#fix conp bot electrode/conp -1.0 1.979 couple top 1.0 etypes on symm on fix nve electrolyte nve # note ionic liquid does not reach 500K immediately diff --git a/src/ELECTRODE/fix_electrode_conp.cpp b/src/ELECTRODE/fix_electrode_conp.cpp index 5157cf0286..0136217122 100644 --- a/src/ELECTRODE/fix_electrode_conp.cpp +++ b/src/ELECTRODE/fix_electrode_conp.cpp @@ -136,16 +136,6 @@ FixElectrodeConp::FixElectrodeConp(LAMMPS *lmp, int narg, char **arg) : group_psi_var_styles.push_back(VarStyle::CONST); group_psi.push_back(utils::numeric(FLERR, arg[iarg], false, lmp)); } - } else if ((strncmp(arg[iarg], "symm", 4) == 0)) { - if (iarg + 2 > narg) error->all(FLERR, "Need yes/no command after symm keyword"); - char *symm_arg = arg[++iarg]; - if ((strcmp(symm_arg, "yes") == 0) || (strcmp(symm_arg, "on") == 0)) { - symm = true; - } else if ((strcmp(symm_arg, "no") == 0) || (strcmp(symm_arg, "off") == 0)) { - symm = false; - } else { - error->all(FLERR, "Invalid argument after symm keyword"); - } } else if ((strcmp(arg[iarg], "algo") == 0)) { if (!default_algo) error->one(FLERR, fmt::format("Algorithm can be set once, only")); default_algo = false; @@ -195,8 +185,6 @@ FixElectrodeConp::FixElectrodeConp(LAMMPS *lmp, int narg, char **arg) : } else { error->all(FLERR, "Illegal fix electrode/conp command with read"); } - } else if ((strcmp(arg[iarg], "etypes") == 0)) { - etypes_neighlists = true; } else if ((strcmp(arg[iarg], "temp") == 0)) { if (iarg + 4 > narg) error->all(FLERR, "Need three arguments after temp command"); if (strcmp(this->style, "electrode/thermo") != 0) @@ -204,16 +192,13 @@ FixElectrodeConp::FixElectrodeConp(LAMMPS *lmp, int narg, char **arg) : thermo_temp = force->boltz / force->qe2f * utils::numeric(FLERR, arg[++iarg], false, lmp); thermo_time = utils::numeric(FLERR, arg[++iarg], false, lmp); thermo_init = utils::inumeric(FLERR, arg[++iarg], false, lmp); + // toggle parameters + } else if ((strcmp(arg[iarg], "etypes") == 0)) { + etypes_neighlists = utils::logical(FLERR, arg[++iarg], false, lmp); + } else if ((strncmp(arg[iarg], "symm", 4) == 0)) { + symm = utils::logical(FLERR, arg[++iarg], false, lmp); } else if ((strcmp(arg[iarg], "ffield") == 0)) { - if (iarg + 2 > narg) error->all(FLERR, "Need yes/no command after ffield keyword"); - char *ffield_arg = arg[++iarg]; - if ((strcmp(ffield_arg, "yes") == 0) || (strcmp(ffield_arg, "on") == 0)) { - ffield = true; - } else if ((strcmp(ffield_arg, "no") == 0) || (strcmp(ffield_arg, "off") == 0)) { - ffield = false; - } else { - error->all(FLERR, "Invalid argument after ffield keyword"); - } + ffield = utils::logical(FLERR, arg[++iarg], false, lmp); } else { error->all(FLERR, "Illegal fix electrode/conp command"); } From 264d9c4aae092d2e2966d54c02be18e3673ced17 Mon Sep 17 00:00:00 2001 From: Ludwig Ahrens Date: Mon, 10 Oct 2022 13:40:26 +0200 Subject: [PATCH 24/46] Piston example for ELECTRODE --- examples/PACKAGES/electrode/README | 10 +- examples/PACKAGES/electrode/piston/.gitignore | 2 + .../PACKAGES/electrode/piston/data.piston | 2128 +++++++++++++++++ examples/PACKAGES/electrode/piston/in.piston | 65 + 4 files changed, 2202 insertions(+), 3 deletions(-) create mode 100644 examples/PACKAGES/electrode/piston/.gitignore create mode 100644 examples/PACKAGES/electrode/piston/data.piston create mode 100644 examples/PACKAGES/electrode/piston/in.piston diff --git a/examples/PACKAGES/electrode/README b/examples/PACKAGES/electrode/README index 9ea994e3c3..b0c64d496b 100644 --- a/examples/PACKAGES/electrode/README +++ b/examples/PACKAGES/electrode/README @@ -1,14 +1,14 @@ These examples demonstrate the use of the ELECTRODE package for constant potential molecular dynamics. planar/ - au-vac.data -- gold electrodes with vacuum + data.au-vac -- gold electrodes with vacuum in.planar* -- comparison of gold electrodes with vacuum to theoretical capacitance of planar capacitor -- 5x, further labeled by long-range solver (ewald / pppm) and boundary correction (ew2d / ew3dc / ffield) -- the pppm-ew2d combination would not give correct results and will throw an error if selected test.sh -- run all in.planar files and check charge at 1.2V and %difference from theoretical (last column) graph-il/ - graph-il.data -- graphene electrodes with electrolyte (coarse-grained BMIm-PF6) + data.graph-il -- graphene electrodes with electrolyte (coarse-grained BMIm-PF6) in.conp -- reference run at constant potential in.etypes -- type-based smart neighborlists in.ffield -- finite field method with fully periodic cell @@ -18,7 +18,7 @@ graph-il/ in.thermo -- thermalize electrolyte with thermopotentiostat instead of NVT au-aq/ - au-aq.data -- gold electrodes with electrolyte (SPC water + NaCl) + data.au-aq -- gold electrodes with electrolyte (SPC water + NaCl) in.ffield -- finite field method with fully periodic cell in.tf -- Thomas-Fermi metallicity model with more delocalized charges @@ -30,6 +30,10 @@ madelung/ eval.py -- compare output of reference and Lammps job (used by test.sh) test.sh -- run all in.* files and check charge at 1 V and %difference from theoretical (last column) +piston/ + data.piston -- two electrodes with water + in.piston -- equilibrate distance between rigid electrodes + # future work: # in.cylinder -- comparison of carbon nanotube to theoretical induced charge for charge near circular conductor diff --git a/examples/PACKAGES/electrode/piston/.gitignore b/examples/PACKAGES/electrode/piston/.gitignore new file mode 100644 index 0000000000..9336c29266 --- /dev/null +++ b/examples/PACKAGES/electrode/piston/.gitignore @@ -0,0 +1,2 @@ +top_wall.csv +data.pistoned diff --git a/examples/PACKAGES/electrode/piston/data.piston b/examples/PACKAGES/electrode/piston/data.piston new file mode 100644 index 0000000000..815edff7ba --- /dev/null +++ b/examples/PACKAGES/electrode/piston/data.piston @@ -0,0 +1,2128 @@ +LAMMPS data file via write_data, version 23 Jun 2022, timestep = 5000 + +726 atoms +4 atom types +420 bonds +1 bond types +210 angles +1 angle types + +0 17.6494 xlo xhi +0 20.3798 ylo yhi +0 26.0000 zlo zhi + +Masses + +1 500 +2 196.97 +3 15.9994 +4 1.008 + +Pair Coeffs # lj/cut/coul/long + +1 0.069 2.78 +2 5.29 2.951 +3 0.1553 3.166 +4 0 0 + +Bond Coeffs # harmonic + +1 600 1 + +Angle Coeffs # harmonic + +1 75 109.47 + +Atoms # full + +49 25 2 0 0 0 2.4018 0 0 0 +50 25 2 0 1.4708 2.5475 2.4018 0 0 0 +51 26 2 0 0 5.0949 2.4018 0 0 0 +57 29 2 0 2.9416 0 2.4018 0 0 0 +58 29 2 0 4.4124 2.5475 2.4018 0 0 0 +59 30 2 0 2.9416 5.0949 2.4018 0 0 0 +65 33 2 0 5.8832 0 2.4018 0 0 0 +66 33 2 0 7.354000000000001 2.5475 2.4018 0 0 0 +67 34 2 0 5.8832 5.0949 2.4018 0 0 0 +243 97 4 0.4238 4.215372213007002 2.2225202484567896 5.2803935587652235 0 0 0 +52 26 2 0 1.4708 7.6424 2.4018 0 0 0 +53 27 2 0 0 10.1898 2.4018 0 0 0 +60 30 2 0 4.4124 7.6424 2.4018 0 0 0 +61 31 2 0 2.9416 10.1898 2.4018 0 0 0 +68 34 2 0 7.354000000000001 7.6424 2.4018 0 0 0 +69 35 2 0 5.8832 10.1898 2.4018 0 0 0 +387 145 4 0.4238 5.821325736406644 4.80211316415021 5.03726935778638 0 0 0 +260 103 4 0.4238 4.266650899557808 6.124697675258705 6.600494419311919 0 0 0 +277 109 3 -0.8476 1.1595300211865478 9.226136831721583 5.6374387660682395 0 0 0 +422 157 4 0.4238 5.186379561937092 9.246331162340214 5.010378323358909 0 0 0 +278 109 4 0.4238 0.16509455550271238 9.324889581001292 5.600728087976438 0 0 0 +421 157 3 -0.8476 4.267061402816361 8.96456307950511 5.285080645137098 0 0 0 +372 140 4 0.4238 7.72049151444727 3.1081049977971733 5.624439615628745 0 0 0 +241 97 3 -0.8476 4.979583082691343 1.5807071976248444 5.344102790419773 0 0 0 +367 139 3 -0.8476 3.3292653199701174 3.842283776550616 5.301650818590438 0 0 0 +368 139 4 0.4238 3.684070197838302 4.776085383558861 5.2555059732229505 0 0 0 +369 139 4 0.4238 2.4614244393932903 3.790665660238261 4.807496843609001 0 0 0 +237 95 4 0.4238 0.8688372424570395 0.5637480725652825 15.837861037745109 0 0 0 +242 97 4 0.4238 5.838317925620407 2.08972820515595 5.4030316190296865 0 0 0 +244 98 3 -0.8476 3.06007349186706 3.3156446548102743 7.800821206312822 0 0 0 +245 98 4 0.4238 3.292495500569735 3.349267797972537 6.828787504752208 0 0 0 +246 98 4 0.4238 3.244639762451247 4.205236417313474 8.21862706780732 0 0 0 +357 135 4 0.4238 5.599931101613284 2.8266561120576155 8.823939192896898 0 0 0 +248 99 4 0.4238 4.69094628305157 1.7475560287256833 10.940028326694172 0 0 0 +355 135 3 -0.8476 6.1056692668831944 3.4565727858406277 8.234503978839392 0 0 0 +370 140 3 -0.8476 8.260944365686607 2.344956325089386 5.9787203639370485 0 0 0 +5 3 1 0 0 10.1898 21.4018 0 0 0 +115 55 3 -0.8476 0.6685955791423209 1.1406007302132561 5.285707584884053 0 0 0 +117 55 4 0.4238 0.8471253049325846 2.1223521279380155 5.351215251536808 0 0 0 +337 129 3 -0.8476 3.5673781090835357 0.1584650058169618 11.855592597757308 0 1 0 +423 157 4 0.4238 3.5925256519953384 9.568512539363969 4.86052578384893 0 0 0 +388 146 3 -0.8476 4.577545906676629 5.911730949363624 8.247639703277793 0 0 0 +371 140 4 0.4238 8.763880514062548 2.641297854555424 6.790654426306619 0 0 0 +389 146 4 0.4238 5.229395912055183 5.212412787511029 8.540975963214175 0 0 0 +498 182 4 0.4238 8.708572501204229 1.6439616819374039 8.893386862511662 0 0 0 +499 183 3 -0.8476 8.788151456935827 1.747387315190607 11.831408961401284 0 0 0 +356 135 4 0.4238 7.087379176847249 3.3036660348840203 8.347928594928105 0 0 0 +235 95 3 -0.8476 1.101376037954613 0.60797910815167 14.866280241985807 0 0 0 +338 129 4 0.4238 3.086322043066555 0.17977406211341077 10.979161321324465 0 1 0 +101 50 4 0.4238 2.3452088829773485 1.679109649521978 7.998572278214729 0 0 0 +102 50 4 0.4238 1.7396190746664724 0.7815651122817325 6.776156174616777 0 0 0 +264 104 4 0.4238 1.314649046187711 7.151850339115251 5.356458350291402 0 0 0 +261 103 4 0.4238 4.344863408391302 7.229373831864509 5.400411210770298 0 0 0 +385 145 3 -0.8476 6.530003789922046 4.200582924498773 5.405965238572253 0 0 0 +386 145 4 0.4238 6.338765403718886 4.011523164034656 6.369128936305808 0 0 0 +390 146 4 0.4238 4.287287022740962 6.4497527910965 9.039019879824611 0 0 0 +259 103 3 -0.8476 4.571078813074718 6.29125568333872 5.662634084209634 0 0 0 +289 113 3 -0.8476 4.563599041145234 10.086229905664549 15.478505257325894 0 0 0 +262 104 3 -0.8476 0.9505514460098017 6.233602776791171 5.200720279695964 0 0 0 +234 94 4 0.4238 4.252305918517927 1.5104772744979198 15.776671832358746 0 0 0 +280 110 3 -0.8476 1.4649156019387215 8.625787955794543 8.210124183091255 0 0 0 +282 110 4 0.4238 1.2707547191832915 8.813324944957127 7.247247535393375 0 0 0 +404 151 4 0.4238 7.729904936627753 8.547350043185194 4.926160208837444 0 0 0 +405 151 4 0.4238 7.2770516978143425 8.988822091523867 6.431700948049315 0 0 0 +406 152 3 -0.8476 6.948766849242647 7.673937623994841 7.644671158708728 0 0 0 +407 152 4 0.4238 6.525795796205249 7.732575312342498 8.54891509101289 0 0 0 +408 152 4 0.4238 6.276846030142793 7.340427836539666 6.983389418751862 0 0 0 +281 110 4 0.4238 2.4144110839464337 8.86628530860492 8.41166651398434 0 0 0 +20 10 1 0 7.354000000000001 7.6424 21.4018 0 0 0 +403 151 3 -0.8476 7.1864312239576424 9.196956401727144 5.457807169763902 0 0 0 +140 63 4 0.4238 0.4912611771674119 5.483308431151843 7.32949919291062 0 0 0 +285 111 4 0.4238 2.222990438980817 7.758768979093943 9.602927616521612 0 0 0 +409 153 3 -0.8476 5.935160755403179 7.784141671985828 10.24740953450964 0 0 0 +410 153 4 0.4238 4.93909044392348 7.872166125675881 10.23761068803176 0 0 0 +283 111 3 -0.8476 2.9298247024233324 7.37829634209124 10.199271578404066 0 0 0 +284 111 4 0.4238 2.726159641339314 7.613476216764882 11.149646102042892 0 0 0 +300 116 4 0.4238 4.275274919124041 9.222842133138407 7.0364892960604974 0 0 0 +512 187 4 0.4238 8.159095215967982 5.212728585270325 5.862691743711303 0 0 0 +298 116 3 -0.8476 4.190494283036901 9.481049160440392 7.998852108176557 0 0 0 +13 7 1 0 2.9416 10.1898 21.4018 0 0 0 +167 72 4 0.4238 0.6888402225915744 9.490941300073734 17.687956507725275 0 0 0 +429 159 4 0.4238 6.704370008541906 9.570813638495862 9.75268746894169 0 0 0 +108 52 4 0.4238 0.4307356664021716 1.1201849372165382 13.39567680690473 0 0 0 +12 6 1 0 4.4124 7.6424 21.4018 0 0 0 +247 99 3 -0.8476 4.798369931390891 2.717477731578589 10.72159669011324 0 0 0 +249 99 4 0.4238 5.569724797087956 3.0916316888033455 11.236399566632782 0 0 0 +267 105 4 0.4238 3.62546649656917 4.334166934495396 11.516982003845238 0 0 0 +150 66 4 0.4238 0.3228287181315222 5.899276873013697 16.725238911862725 0 0 0 +232 94 3 -0.8476 4.980041500359598 0.8346261397826029 15.659938276309026 0 0 0 +103 51 3 -0.8476 1.3815948057839214 1.9892393072986618 10.960941799077768 0 0 0 +105 51 4 0.4238 2.0221030524072807 2.7460833084547516 11.091083546320654 0 0 0 +250 100 3 -0.8476 2.301722380036556 5.246668471215713 14.405023028095087 0 0 0 +251 100 4 0.4238 2.9853736210987964 5.6903907848833 14.984447511680715 0 0 0 +252 100 4 0.4238 1.395180212806813 5.361974054490418 14.811085553109534 0 0 0 +373 141 3 -0.8476 6.646815591730961 3.269837172643641 12.49061507590581 0 0 0 +374 141 4 0.4238 7.61695093879876 3.3495637297543572 12.261527610728375 0 0 0 +375 141 4 0.4238 6.481076944432454 2.390896252454289 12.937821497826814 0 0 0 +104 51 4 0.4238 0.6408775265357468 2.0608378879286913 11.628933096734032 0 0 0 +265 105 3 -0.8476 2.665829598310941 4.431310187121227 11.780914482870632 0 0 0 +144 64 4 0.4238 1.1190003692376955 5.0763854683727105 11.194475677541284 0 0 0 +229 93 3 -0.8476 5.942159660769991 0.7056663353811532 13.066706981458427 0 0 0 +266 105 4 0.4238 2.6102606372647403 4.846758214864171 12.688832882140309 0 0 0 +395 148 4 0.4238 6.791261132816323 5.2898024056276745 12.585701895393779 0 0 0 +496 182 3 -0.8476 8.656612808236074 2.6043956420410055 8.619768961623533 0 0 0 +358 136 3 -0.8476 7.858969118177482 4.323431351970546 15.158280395791389 0 0 0 +360 136 4 0.4238 7.311852997599627 4.141096884179606 14.341323716565022 0 0 0 +253 101 3 -0.8476 3.817665348062464 7.236922003920382 15.80944183548915 0 0 0 +17 9 1 0 5.8832 0 21.4018 0 0 0 +19 10 1 0 5.8832 5.0949 21.4018 0 0 0 +100 50 3 -0.8476 2.0394304158997083 0.7656654195905199 7.730022146575006 0 0 0 +178 76 3 -0.8476 5.452117716887525 9.18307317194898 13.15234900976541 0 0 0 +230 93 4 0.4238 5.059291011599534 0.38866725021142023 12.720218114220543 0 0 0 +231 93 4 0.4238 6.65052979327983 0.5320676483156337 12.382546751012228 0 0 0 +438 162 4 0.4238 7.136291463905622 9.772834868066683 17.139493058543497 0 0 0 +392 147 4 0.4238 8.38899132126725 5.8867041743537785 10.871264350514622 0 0 0 +111 53 4 0.4238 0.6985999830537806 1.3383536972275127 18.387030005691326 0 0 0 +180 76 4 0.4238 5.066448032980861 9.32084082718892 14.064642262682645 0 0 0 +233 94 4 0.4238 5.359631037926651 0.9094520875690633 14.737813568002778 0 0 0 +132 60 4 0.4238 0.8001204790197485 3.675543835266074 19.791162893511412 0 0 0 +286 112 3 -0.8476 3.0492447110060503 7.857786324043542 12.841804772376726 0 0 0 +287 112 4 0.4238 3.2098640427703793 7.07245726341082 13.43968410246133 0 0 0 +288 112 4 0.4238 3.8390372213919517 8.470176800208547 12.876525558331952 0 0 0 +394 148 3 -0.8476 7.2698038333003865 6.06308390013827 12.169729898590939 0 0 0 +396 148 4 0.4238 7.625134114087918 6.6608118801271505 12.888382847618582 0 0 0 +411 153 4 0.4238 6.2467858019307405 7.628185967709829 11.184729075452916 0 0 0 +166 72 3 -0.8476 0.0743206093292875 9.473569850066479 18.47666767184439 0 0 0 +159 69 4 0.4238 1.5369814113431812 8.581432976068813 12.91659053642449 0 0 0 +398 149 4 0.4238 8.017182850481422 8.5320782164775 15.13105927119312 0 0 0 +2 1 1 0 1.4708 2.5475 21.4018 0 0 0 +1 1 1 0 0 0 21.4018 0 0 0 +179 76 4 0.4238 5.808389160323009 10.05110184314008 12.80652118090145 0 0 0 +397 149 3 -0.8476 7.8632248442135975 8.280908077117292 14.175438467851688 0 0 0 +255 101 4 0.4238 4.224951823034336 7.092621650496108 16.711270553877267 0 0 0 +157 69 3 -0.8476 0.7114882871642291 9.135205749045086 12.807511759002331 0 0 0 +399 149 4 0.4238 7.140453712689584 8.855850348945147 13.791975805848095 0 0 0 +123 57 4 0.4238 0.1728626542764581 2.0181635873205455 9.55686086062765 0 0 0 +225 91 4 0.4238 7.816768412673801 0.8081877810287403 6.235830770216829 0 0 0 +21 11 1 0 5.8832 10.1898 21.4018 0 0 0 +417 155 4 0.4238 7.446840838580808 7.638526256652861 17.47844985435655 0 0 0 +362 137 4 0.4238 8.438368672558527 1.697843860243226 18.184511664154215 0 0 0 +129 59 4 0.4238 2.3771977665576043 1.8808184338387064 14.85662965445542 0 0 0 +359 136 4 0.4238 8.004317147899858 3.470311511692344 15.659339900839715 0 0 0 +128 59 4 0.4238 2.5853876652451317 3.4859493525534666 14.640206423330152 0 0 0 +256 102 3 -0.8476 3.36490296390101 2.609708506768986 18.019307140512538 0 0 0 +257 102 4 0.4238 2.989126363066441 2.6901816560721703 17.09609745176498 0 0 0 +258 102 4 0.4238 3.0647304195149228 1.7475126999269013 18.42736968436024 0 0 0 +382 144 3 -0.8476 6.308567838033942 2.476405458922918 18.00362734600325 0 0 0 +383 144 4 0.4238 6.593826337020496 3.427881594462966 17.888209006303875 0 0 0 +384 144 4 0.4238 5.361992496088107 2.3728369988438636 17.69822741313443 0 0 0 +272 107 4 0.4238 3.0726725732915128 4.603284898982291 18.635316954863068 0 0 0 +136 62 3 -0.8476 0.23948646424302802 3.6277413105394416 5.266501733024619 0 0 0 +365 138 4 0.4238 6.60152996763605 0.43507104006823966 18.019264498760286 0 0 0 +127 59 3 -0.8476 3.0145932097721304 2.643552260009665 14.96601392575784 0 0 0 +271 107 3 -0.8476 2.827278930096859 5.559554731210942 18.476163062225744 0 0 0 +158 69 4 0.4238 0.16630528129120115 9.089290910056087 13.644570644109479 0 0 0 +143 64 4 0.4238 0.11900142343143351 5.141919127824521 9.905160447540569 0 0 0 +415 155 3 -0.8476 7.9442542108115335 8.345727638599643 16.976009837116557 0 0 0 +4 2 1 0 1.4708 7.6424 21.4018 0 0 0 +276 108 4 0.4238 5.037529413861975 7.933581116564438 18.631487966790633 0 0 0 +254 101 4 0.4238 3.6649393772595342 8.214616238881469 15.66525877571223 0 0 0 +273 107 4 0.4238 1.8466314153892824 5.625798601756419 18.291929064604975 0 0 0 +612 220 4 0.4238 0.010930989959980764 2.2950979118534867 16.414655321355454 1 0 0 +402 150 4 0.4238 7.106876741389108 5.041237644705272 16.640202749296954 0 0 0 +401 150 4 0.4238 6.160816653506991 5.742470969945153 17.771516210789446 0 0 0 +400 150 3 -0.8476 6.996177466129156 5.214390702343716 17.618857043546885 0 0 0 +274 108 3 -0.8476 5.0193324614485215 7.043802573153883 18.17545833659005 0 0 0 +528 192 4 0.4238 8.623421722431294 5.7883736084345525 18.747118071306133 0 0 0 +275 108 4 0.4238 4.270941130836966 6.494210206303432 18.54675158901018 0 0 0 +130 60 3 -0.8476 0.30151484910318527 2.9901129901722614 19.260524594746823 0 0 0 +11 6 1 0 2.9416 5.0949 21.4018 0 0 0 +18 9 1 0 7.354000000000001 2.5475 21.4018 0 0 0 +3 2 1 0 0 5.0949 21.4018 0 0 0 +10 5 1 0 4.4124 2.5475 21.4018 0 0 0 +9 5 1 0 2.9416 0 21.4018 0 0 0 +418 156 3 -0.8476 4.815860863260777 9.600073631276539 19.091570737625037 0 0 0 +339 129 4 0.4238 2.9025423126390995 0.19480209169066873 12.601698136013006 0 1 0 +109 53 3 -0.8476 0.7320791233467872 0.6615070322554488 17.651667727097692 0 0 0 +165 71 4 0.4238 2.859472025585106 9.797582345892868 15.993242699480307 0 0 0 +142 64 3 -0.8476 0.16654348806994 5.167371806030668 10.903705304455558 0 0 0 +163 71 3 -0.8476 1.9414938951301373 9.863706489144873 16.384324307347644 0 0 0 +138 62 4 0.4238 0.46610741541910466 4.573831154626459 5.035076125954408 0 0 0 +110 53 4 0.4238 1.4763821044438006 0.016750063584620126 17.82574113464481 0 0 0 +148 66 3 -0.8476 0.2769703268883889 5.693561891799246 17.702776395141402 0 0 0 +168 72 4 0.4238 0.3851910025501984 8.779692776604824 19.126201816661716 0 0 0 +155 68 4 0.4238 0.10882260140155935 8.290546750038025 9.473605554039466 0 0 0 +419 156 4 0.4238 4.047967060581894 10.091196220875956 19.502834381376417 0 0 0 +279 109 4 0.4238 1.5891078696758345 10.112454310586116 5.464507454644324 0 0 0 +291 113 4 0.4238 5.063106516523704 9.955504370697694 16.334894862001168 0 0 0 +54 27 2 0 1.4708 12.7373 2.4018 0 0 0 +55 28 2 0 0 15.2847 2.4018 0 0 0 +62 31 2 0 4.4124 12.7373 2.4018 0 0 0 +63 32 2 0 2.9416 15.2847 2.4018 0 0 0 +70 35 2 0 7.354000000000001 12.7373 2.4018 0 0 0 +71 36 2 0 5.8832 15.2847 2.4018 0 0 0 +318 122 4 0.4238 2.4931000294030397 14.68049042504776 5.4920668045650025 0 0 0 +296 115 4 0.4238 2.208767730761098 12.293362577947239 5.072155343064113 0 0 0 +295 115 3 -0.8476 2.7410377681036264 11.51283534649287 5.39997510809189 0 0 0 +199 83 3 -0.8476 0.06129132430832457 15.968850902749507 14.273604552188592 0 0 0 +212 87 4 0.4238 0.3953399839920288 18.41963167641668 8.462803851856744 0 0 0 +56 28 2 0 1.4708 17.8322 2.4018 0 0 0 +64 32 2 0 4.4124 17.8322 2.4018 0 0 0 +72 36 2 0 7.354000000000001 17.8322 2.4018 0 0 0 +297 115 4 0.4238 3.5789798694053823 11.840523499251022 5.836407740178439 0 0 0 +316 122 3 -0.8476 1.631070916269115 14.178948300051426 5.418846200398046 0 0 0 +596 215 4 0.4238 7.109490500299251 16.657127794200864 15.625332570434084 0 0 0 +314 121 4 0.4238 4.490843993311033 14.308637759802288 5.7106306175219235 0 0 0 +317 122 4 0.4238 1.2228714849231572 14.08342483249297 6.326727512493262 0 0 0 +174 74 4 0.4238 0.10528366135845268 10.672156321950682 8.064974532168508 0 0 0 +424 158 3 -0.8476 5.101470449901436 12.351136442855362 8.772696925752863 0 0 0 +425 158 4 0.4238 5.649118560615081 11.587884372956601 9.115520413794723 0 0 0 +426 158 4 0.4238 5.518356916008868 13.214561207653139 9.056780336843094 0 0 0 +439 163 3 -0.8476 5.216895399703456 12.666087681674787 6.107919140409087 0 0 0 +440 163 4 0.4238 5.134428643535018 12.421224390109284 7.073963155217279 0 0 0 +441 163 4 0.4238 6.100613681787685 13.106659778250902 5.950000862088552 0 0 0 +443 164 4 0.4238 3.0179543685175823 12.072582679909768 8.848462487266309 0 0 0 +445 165 3 -0.8476 6.966218323718499 14.281372161941382 9.127169341964189 0 0 0 +447 165 4 0.4238 7.624646039950888 13.622453813299824 8.763439333415302 0 0 0 +460 170 3 -0.8476 7.231000148289769 14.474338072546802 5.1752234073088434 0 0 0 +566 205 4 0.4238 7.518646792922765 11.165670099715314 5.4767432294161615 0 0 0 +313 121 3 -0.8476 4.249374596810806 15.278291683142973 5.672357126140297 0 0 0 +446 165 4 0.4238 6.995056551501562 15.117996997967099 8.580152736531433 0 0 0 +442 164 3 -0.8476 2.144166379995316 11.593027145751554 8.767705401585385 0 0 0 +444 164 4 0.4238 1.865344831645564 11.254665778946087 9.666466135499824 0 0 0 +462 170 4 0.4238 6.776273488291953 15.331599425251477 5.4167323900106 0 0 0 +299 116 4 0.4238 4.0091104777731 10.462167685474132 8.065982115733604 0 0 0 +192 80 4 0.4238 1.3860580922058752 13.1436420054917 8.112211821661765 0 0 0 +223 91 3 -0.8476 7.52144010123177 20.2328986694854 6.260038148125913 0 -1 0 +567 205 4 0.4238 7.955736322443579 12.60235407524488 4.835245774032379 0 0 0 +305 118 4 0.4238 6.893786791944795 11.515500740653623 11.433469545335605 0 0 0 +461 170 4 0.4238 8.21976057692041 14.619771975490195 5.140557051180058 0 0 0 +164 71 4 0.4238 1.3048907045107163 10.192492429629349 15.686730789235462 0 0 0 +99 49 4 0.4238 1.0827619391029717 18.26873197575731 5.107129350002369 0 -1 0 +352 134 3 -0.8476 8.394595542324181 20.120875755975867 8.788527591447366 0 -1 0 +569 206 4 0.4238 8.682110941177735 16.514860767752086 8.0240313566335 0 0 0 +333 127 4 0.4238 2.504646078973971 17.96447094238861 6.618993185042102 0 0 0 +315 121 4 0.4238 5.057127339180615 15.813425143166752 5.425034770839435 0 0 0 +331 127 3 -0.8476 2.954653688178904 17.216242853434046 7.106485686197738 0 0 0 +332 127 4 0.4238 3.3551983060071806 16.58127747290928 6.445892087695467 0 0 0 +334 128 3 -0.8476 5.043566489540578 18.004186709137286 9.213366138097703 0 0 0 +335 128 4 0.4238 4.8534442245780065 17.08711847665592 9.563850392227947 0 0 0 +336 128 4 0.4238 4.502654882669719 18.164209712655897 8.387650033745803 0 0 0 +457 169 3 -0.8476 6.386951423593993 17.09407894375587 5.485002802094392 0 0 0 +458 169 4 0.4238 5.61892086420923 17.69724507997371 5.269782898552741 0 0 0 +459 169 4 0.4238 7.245351610676392 17.55200717248309 5.253808457823567 0 0 0 +587 212 4 0.4238 6.379917790162203 17.31978420187041 8.579723356366076 0 0 0 +319 123 3 -0.8476 2.0677114935593575 19.18609967444404 9.32533337014183 0 0 0 +320 123 4 0.4238 2.090368391204653 20.00813559780426 8.756348571129193 0 0 0 +97 49 3 -0.8476 1.7504097903352551 18.96219016666924 5.377983758614883 0 -1 0 +228 92 4 0.4238 3.581463417361676 19.071976505337624 5.184605072808598 0 -1 0 +588 212 4 0.4238 6.867012146053887 16.99579012623044 7.055127228361595 0 0 0 +586 212 3 -0.8476 7.025608428738302 16.797780868958256 8.022411877651955 0 0 0 +354 134 4 0.4238 7.827463202425872 20.019031781296853 7.971221332030429 0 -1 0 +226 92 3 -0.8476 4.562210484918086 19.26013212674296 5.1323305800502 0 -1 0 +193 81 3 -0.8476 0.8245833071004024 15.300666811708652 10.602945389409069 0 0 0 +321 123 4 0.4238 2.6437193555376313 18.479848078853944 8.913722343322581 0 0 0 +227 92 4 0.4238 4.712710077676816 20.248725681455316 5.1380374657472725 0 -1 0 +98 49 4 0.4238 1.3169099320926019 19.863308853601175 5.370047176076334 0 -1 0 +195 81 4 0.4238 1.045026299766095 16.23909236758004 10.868960098517407 0 0 0 +190 80 3 -0.8476 1.0673503147674046 14.085080247246221 8.002121033682439 0 0 0 +351 133 4 0.4238 8.779395441989571 18.67398725375506 5.871414963418736 0 -1 0 +341 130 4 0.4238 3.725862356405534 15.178378283914109 10.363935258652589 0 0 0 +238 96 3 -0.8476 2.946487702291966 19.844718958102625 18.430810194805673 0 -1 0 +561 203 4 0.4238 8.487062671012106 13.174506720978874 16.752807885129265 0 0 0 +14 7 1 0 4.4124 12.7373 21.4018 0 0 0 +306 118 4 0.4238 7.592713515283044 11.24309034151053 12.883959279040775 0 0 0 +302 117 4 0.4238 2.2917433244225363 12.480034374758912 11.089180564282227 0 0 0 +492 180 4 0.4238 7.2798614407449715 18.48354654936143 18.243027445798187 0 -1 0 +304 118 3 -0.8476 6.741312426600244 11.49049946331648 12.421460688803913 0 0 0 +183 77 4 0.4238 2.201548550563256 13.161992926349898 14.583303285425934 0 0 0 +301 117 3 -0.8476 2.6357063505321605 13.418277941169993 11.126442794024449 0 0 0 +177 75 4 0.4238 0.19204032170237526 11.327264418539333 10.849228099788682 0 0 0 +322 124 3 -0.8476 3.4867447532822444 14.045576532793149 13.647754803089441 0 0 0 +323 124 4 0.4238 3.1658011972240745 13.858651548000461 12.719286015494765 0 0 0 +324 124 4 0.4238 4.26580535268166 13.454389428056905 13.856470892541978 0 0 0 +448 166 3 -0.8476 6.579157498376083 14.52764103922264 11.879113428187129 0 0 0 +449 166 4 0.4238 6.675526155039823 14.266590458656776 10.918609993418364 0 0 0 +450 166 4 0.4238 6.551221579412191 13.704955354686108 12.446923268432739 0 0 0 +327 125 4 0.4238 3.061708014353232 15.519451541059949 14.566416364520057 0 0 0 +303 117 4 0.4238 1.8693136785662339 14.057151356098624 11.059487163386526 0 0 0 +182 77 4 0.4238 1.0148338056408361 13.058404785217737 15.700265397978635 0 0 0 +181 77 3 -0.8476 1.3760596420800968 12.666739304066796 14.85402984054153 0 0 0 +307 119 3 -0.8476 5.577590489353157 12.605116663955032 14.44720455247256 0 0 0 +308 119 4 0.4238 5.926057421748659 12.93507429329256 15.324530351358025 0 0 0 +309 119 4 0.4238 6.31821835851717 12.166755458317258 13.937978772621406 0 0 0 +290 113 4 0.4238 4.749002859603123 11.001502011390924 15.120870949373925 0 0 0 +24 12 1 0 7.354000000000001 17.8322 21.4018 0 0 0 +175 75 3 -0.8476 1.090507061728097 11.393348279515585 11.283267717479667 0 0 0 +240 96 4 0.4238 3.3222779866144156 19.188357866486633 17.77661393841368 0 -1 0 +214 88 3 -0.8476 1.0041440810762274 17.927962188247605 11.451026414053889 0 0 0 +463 171 3 -0.8476 6.478201880018026 18.231732824554882 14.915456188855625 0 0 0 +465 171 4 0.4238 7.331603333633061 18.73234587278177 15.060688869833879 0 0 0 +342 130 4 0.4238 5.151525977130013 15.419699471374381 11.122798860463224 0 0 0 +467 172 4 0.4238 7.373650730002787 16.12868172847659 12.292759417267117 0 0 0 +590 213 4 0.4238 7.725648904318353 19.422181263009772 10.259925608254184 0 0 0 +216 88 4 0.4238 1.4153466561258405 18.4878207590961 10.731671944033392 0 0 0 +468 172 4 0.4238 7.8682878047740346 17.628912068879078 11.878912178039954 0 0 0 +437 162 4 0.4238 7.1569382445566525 11.404678434047124 17.082162602372872 0 0 0 +589 213 3 -0.8476 7.357564300487368 19.16732661285633 11.154108379375014 0 0 0 +591 213 4 0.4238 6.413143304412662 18.85574473106839 11.049295698727546 0 0 0 +217 89 3 -0.8476 2.064286019730025 18.728445270950314 13.637846451800218 0 0 0 +236 95 4 0.4238 1.418715591647955 20.090858346659182 14.558337650277243 0 -1 0 +597 215 4 0.4238 8.70246632792204 16.46727080170849 15.93030620143767 0 0 0 +436 162 3 -0.8476 6.569742653568437 10.596838324126017 17.133110468886443 0 0 0 +215 88 4 0.4238 0.08715363937956366 18.269960061366785 11.65636997646002 0 0 0 +340 130 3 -0.8476 4.353122850014628 15.86964660354185 10.722672907024947 0 0 0 +464 171 4 0.4238 6.2701227645746105 18.204285930924424 13.93772904528681 0 0 0 +343 131 3 -0.8476 4.88784150983056 18.004372378244586 12.654559147182416 0 0 0 +345 131 4 0.4238 4.2421926520515125 18.749219219212854 12.486210891320729 0 0 0 +218 89 4 0.4238 1.6778928796021548 18.302424080386913 12.81979617913041 0 0 0 +344 131 4 0.4238 4.501475250618193 17.145800216306796 12.317549750824261 0 0 0 +219 89 4 0.4238 2.3393750095214916 18.017837434553265 14.285428506544493 0 0 0 +466 172 3 -0.8476 8.164454664814901 16.73625177658097 12.218680653823448 0 0 0 +552 200 4 0.4238 8.577169536694708 12.443351977855762 6.998753646239745 0 0 0 +224 91 4 0.4238 6.584978788736939 20.16475927385633 5.915949157194169 0 -1 0 +201 83 4 0.4238 0.9935726128790141 16.274863843792748 14.466501082610389 0 0 0 +170 73 4 0.4238 0.15705997876552483 12.519334239761646 4.630530335389882 0 0 0 +16 8 1 0 4.4124 17.8322 21.4018 0 0 0 +364 138 3 -0.8476 6.366307006108234 19.974586154222894 17.53080628881647 0 -1 0 +595 215 3 -0.8476 7.780662951582441 16.18863261155242 16.199824213366497 0 0 0 +293 114 4 0.4238 1.9703783268715727 12.276659478071428 18.69543152820229 0 0 0 +565 205 3 -0.8476 8.264468631172923 11.825293895949471 5.383754879656755 0 0 0 +294 114 4 0.4238 2.5190378334598873 11.012727617204137 17.81903228135006 0 0 0 +453 167 4 0.4238 4.835483104335401 17.279043988713962 17.46997800663247 0 0 0 +310 120 3 -0.8476 0.6065213206590157 14.217798272189098 17.358859661169866 0 0 0 +312 120 4 0.4238 0.1479468689007446 13.443270025706306 17.794537825304722 0 0 0 +328 126 3 -0.8476 4.244821463031273 14.002780695856922 18.50302264302004 0 0 0 +329 126 4 0.4238 3.8406651384614183 13.088860779050396 18.46549938220707 0 0 0 +330 126 4 0.4238 3.5359242101158874 14.671810290106164 18.726325291291452 0 0 0 +454 168 3 -0.8476 6.484450039595873 13.836390187869883 16.68928336195824 0 0 0 +455 168 4 0.4238 5.6319511436742085 13.867898528487181 17.211061921013215 0 0 0 +456 168 4 0.4238 6.932978435045694 14.729258702175622 16.729384499993166 0 0 0 +292 114 3 -0.8476 2.7860244782055217 11.834757104744316 18.322009695562482 0 0 0 +191 80 4 0.4238 0.9690093276172831 14.511009418156055 8.901517517950873 0 0 0 +239 96 4 0.4238 2.9923969244117603 19.459980091914108 19.35269336323246 0 -1 0 +176 75 4 0.4238 1.1646262863451595 10.702948035039366 12.002888355816044 0 0 0 +222 90 4 0.4238 0.1453878739340946 16.847889041005075 18.290254998907823 0 0 0 +346 132 3 -0.8476 5.656540959385894 16.438996625983226 18.654765488300594 0 0 0 +347 132 4 0.4238 6.617635439103294 16.701054655697625 18.74208254158271 0 0 0 +490 180 3 -0.8476 7.937659864014185 17.91834349940131 18.74087071091535 0 -1 0 +7 4 1 0 0 15.2847 21.4018 0 0 0 +23 12 1 0 5.8832 15.2847 21.4018 0 0 0 +326 125 4 0.4238 3.497310910343585 16.868229494682133 15.377387787061595 0 0 0 +451 167 3 -0.8476 4.4549813660146595 17.84619270794852 16.739525544730768 0 0 0 +6 3 1 0 1.4708 12.7373 21.4018 0 0 0 +325 125 3 -0.8476 2.7573430590165198 16.420499344018907 14.875406414758897 0 0 0 +452 167 4 0.4238 5.188875233615405 18.133558720493767 16.12404151631669 0 0 0 +348 132 4 0.4238 5.550868825582559 15.474284262611643 18.895936618194007 0 0 0 +472 174 3 -0.8476 2.080609622031638 16.35011037096637 18.27189638693749 0 0 0 +473 174 4 0.4238 1.9635393067535534 15.378703243526882 18.065346184779028 0 0 0 +474 174 4 0.4238 2.6071515105921335 16.78509131506686 17.541454495391882 0 0 0 +8 4 1 0 1.4708 17.8322 21.4018 0 0 0 +22 11 1 0 7.354000000000001 12.7373 21.4018 0 0 0 +15 8 1 0 2.9416 15.2847 21.4018 0 0 0 +366 138 4 0.4238 5.798440311007832 20.197486158530367 16.738440844421206 0 -1 0 +427 159 3 -0.8476 6.69880532212971 10.54685438717572 9.535169837784467 0 0 0 +428 159 4 0.4238 7.638372417732451 10.888386579014366 9.511300231205533 0 0 0 +491 180 4 0.4238 8.80852796828548 18.404704793089476 18.811876741226857 0 -1 0 +420 156 4 0.4238 5.295698243366386 10.204323718807027 18.45545874784971 0 0 0 +73 37 2 0 8.8248 0 2.4018 0 0 0 +74 37 2 0 10.2956 2.5475 2.4018 0 0 0 +75 38 2 0 8.8248 5.0949 2.4018 0 0 0 +81 41 2 0 11.7664 0 2.4018 0 0 0 +82 41 2 0 13.237200000000001 2.5475 2.4018 0 0 0 +83 42 2 0 11.7664 5.0949 2.4018 0 0 0 +89 45 2 0 14.708000000000002 0 2.4018 0 0 0 +90 45 2 0 16.178800000000003 2.5475 2.4018 0 0 0 +91 46 2 0 14.708000000000002 5.0949 2.4018 0 0 0 +44 22 1 0 16.178800000000003 7.6424 21.4018 0 0 0 +620 223 4 0.4238 14.50573307562817 3.3878102935088648 5.252599862542667 0 0 0 +431 160 4 0.4238 9.728730115312695 9.332074012330212 10.936077127438926 0 0 0 +119 56 4 0.4238 15.447689337407642 1.5804577157846718 6.2865858126131124 -1 0 0 +76 38 2 0 10.2956 7.6424 2.4018 0 0 0 +77 39 2 0 8.8248 10.1898 2.4018 0 0 0 +84 42 2 0 13.237200000000001 7.6424 2.4018 0 0 0 +85 43 2 0 11.7664 10.1898 2.4018 0 0 0 +92 46 2 0 16.178800000000003 7.6424 2.4018 0 0 0 +93 47 2 0 14.708000000000002 10.1898 2.4018 0 0 0 +125 58 4 0.4238 17.11980738695315 4.451613797715876 12.165175118415005 -1 0 0 +639 229 4 0.4238 12.240251955899847 6.329826917238441 6.3967366381970745 0 0 0 +621 223 4 0.4238 13.029328966637872 4.0377610045012355 4.998784080340424 0 0 0 +173 74 4 0.4238 16.379291133562425 10.123405568744293 7.376647193452647 -1 0 0 +475 175 3 -0.8476 10.238461486464052 0.672832311221596 5.291254220629026 0 0 0 +495 181 4 0.4238 10.87679348779582 2.802199547341775 5.12069937092746 0 0 0 +493 181 3 -0.8476 11.185778219804481 3.7303901733267684 5.328041508387651 0 0 0 +511 187 3 -0.8476 9.131405616083761 5.3896269313997776 6.015399717127127 0 0 0 +619 223 3 -0.8476 13.923837028776344 4.183349355513367 5.421465935555536 0 0 0 +118 56 3 -0.8476 15.48762876858227 1.9617212570246132 5.362982578990697 -1 0 0 +518 189 4 0.4238 11.338664336046872 3.4747961660093996 9.850526387435213 0 0 0 +643 231 3 -0.8476 14.965600376927245 5.243104974403139 7.730205989674371 0 0 0 +645 231 4 0.4238 14.354822391535658 4.6184020137875255 7.243691399839285 0 0 0 +120 56 4 0.4238 15.126526800635466 1.2948143897129842 4.711184645838061 -1 0 0 +121 57 3 -0.8476 17.152518579677942 2.4739895822142235 8.97063089765563 -1 0 0 +476 175 4 0.4238 9.541180180939875 1.362564867501539 5.4863632446361095 0 0 0 +514 188 3 -0.8476 12.708114465413592 3.17130683982108 8.893190601446161 0 0 0 +515 188 4 0.4238 12.655773634711728 2.1832397115286697 8.748333344050575 0 0 0 +503 184 4 0.4238 12.607089924550714 6.103512603430973 9.450598149442257 0 0 0 +644 231 4 0.4238 14.557652021400914 5.491235006156537 8.608846776033309 0 0 0 +269 106 4 0.4238 17.08703987118386 7.263949554768752 14.623663476105321 -1 0 0 +717 255 4 0.4238 16.385497451663372 1.2728758889145508 7.9333612062641965 0 1 0 +141 63 4 0.4238 16.65789297152239 5.185262771894378 7.945286202375017 -1 0 0 +614 221 4 0.4238 14.616703771621246 0.1698807512440305 15.409771368522266 0 0 0 +607 219 3 -0.8476 14.462344009394053 0.6793423116269275 11.105758826612533 0 0 0 +263 104 4 0.4238 17.603971760421423 6.278664588640379 5.123299856226946 -1 0 0 +517 189 3 -0.8476 10.525057194673842 3.444777251501295 10.431165937462886 0 0 0 +519 189 4 0.4238 10.151901971569751 4.367263784723073 10.530028483274075 0 0 0 +650 233 4 0.4238 16.32595622025606 9.996431981399743 15.08216287942173 0 0 0 +107 52 4 0.4238 16.48508153364432 1.008917763693127 13.063941417530929 -1 0 0 +622 224 3 -0.8476 13.023155884557012 0.2648033403280529 8.631455865220707 0 0 0 +715 255 3 -0.8476 15.724422789824505 0.5744355810299474 7.65920531052352 0 1 0 +391 147 3 -0.8476 9.082540858622865 5.558347954969397 10.230038063134518 0 0 0 +361 137 3 -0.8476 9.214720235266167 1.3881354284034537 17.635549705024292 0 0 0 +153 67 4 0.4238 15.514303418474737 8.911222468398579 6.3239595507849815 -1 0 0 +268 106 3 -0.8476 17.178718003054936 6.346562714800259 15.010957825663588 -1 0 0 +657 235 4 0.4238 12.69257310485967 8.656399307172993 5.490304167452206 0 0 0 +494 181 4 0.4238 10.394763594783074 4.307349988929852 5.5315482255405 0 0 0 +502 184 3 -0.8476 13.435863538080216 6.071669848095443 10.009275806774918 0 0 0 +134 61 4 0.4238 15.526141405856706 7.049612897749026 5.318680854660697 -1 0 0 +135 61 4 0.4238 15.359752009898337 5.431166049985472 5.458576672077275 -1 0 0 +152 67 4 0.4238 15.437613800409792 9.466214227562812 4.790098672249199 -1 0 0 +133 61 3 -0.8476 16.012555055979618 6.175884958124715 5.3198579388035085 -1 0 0 +529 193 3 -0.8476 9.945477389616554 8.593989390667373 5.3703337592043034 0 0 0 +530 193 4 0.4238 10.830803134583942 8.129083231957276 5.362532664653105 0 0 0 +637 229 3 -0.8476 12.039935590255379 6.836925636576696 5.558450155876346 0 0 0 +638 229 4 0.4238 11.7611145014945 6.1983514362614205 4.841176301201255 0 0 0 +640 230 3 -0.8476 15.240940503012244 7.949949003513103 7.640448987741966 0 0 0 +641 230 4 0.4238 15.067197170144015 6.9767975301569125 7.4894871837079595 0 0 0 +642 230 4 0.4238 15.576333535448201 8.088014520677106 8.572355333692744 0 0 0 +655 235 3 -0.8476 13.004191297158767 9.606164553080209 5.519298359494044 0 0 0 +658 236 3 -0.8476 11.876528733244868 5.552371914074833 7.850656850543071 0 0 0 +659 236 4 0.4238 10.92031489334279 5.822095381183537 7.964255007678089 0 0 0 +660 236 4 0.4238 11.939635326262486 4.55496989803981 7.815910631660994 0 0 0 +662 237 4 0.4238 11.620333917885795 8.504164003021943 8.40963187399265 0 0 0 +151 67 3 -0.8476 16.03819057141091 9.318646584332017 5.575930262743634 -1 0 0 +663 237 4 0.4238 13.127301801983382 9.126019958826273 8.314924676496526 0 0 0 +661 237 3 -0.8476 12.307488292062576 9.055159203837746 8.883154197644409 0 0 0 +531 193 4 0.4238 10.083868359208074 9.571840984562062 5.527352176750637 0 0 0 +534 194 4 0.4238 9.903180518846904 8.323485911225582 8.827414462645084 0 0 0 +413 154 4 0.4238 9.500948972456086 8.457833234630993 13.286341884407108 0 0 0 +381 143 4 0.4238 9.25769242644089 5.614493984745122 14.831340871663464 0 0 0 +270 106 4 0.4238 16.366933443538798 5.807408336477406 14.786639151039799 -1 0 0 +154 68 3 -0.8476 16.99564515461883 7.825770754486284 9.923561098870746 -1 0 0 +122 57 4 0.4238 17.608391302551865 3.1828981231631994 8.432459270415713 -1 0 0 +516 188 4 0.4238 13.517085702329528 3.3855360806551484 9.440613096708791 0 0 0 +124 58 3 -0.8476 16.411785830213912 4.148280735389562 12.802901194663619 -1 0 0 +624 224 4 0.4238 13.930126291479176 0.36753804060024686 8.222982748895415 0 0 0 +625 225 3 -0.8476 14.98428106603324 3.1890455063249252 10.406423101890848 0 0 0 +626 225 4 0.4238 15.472788614570758 3.7621967035661794 11.064342621682465 0 0 0 +627 225 4 0.4238 15.606046260807988 2.923235921084861 9.669705149828133 0 0 0 +608 219 4 0.4238 13.930757596432434 0.44163579570407824 10.292793523003274 0 0 0 +377 142 4 0.4238 12.191413440075609 2.1971291882237174 13.725508574031558 0 0 0 +376 142 3 -0.8476 11.65558853146204 1.831500263754434 14.486565464984404 0 0 0 +378 142 4 0.4238 11.36369072351205 0.899589288626599 14.271303321734832 0 0 0 +520 190 3 -0.8476 12.654935116333444 3.6144365733479766 12.268065679812521 0 0 0 +521 190 4 0.4238 11.720649462653876 3.57122933772116 11.914167525009528 0 0 0 +522 190 4 0.4238 13.296420425080491 3.7009542441951844 11.505824543044751 0 0 0 +647 232 4 0.4238 15.955697677783952 7.47002550095265 11.508808252165453 0 0 0 +126 58 4 0.4238 16.489825840404063 3.161179459230855 12.9426897223294 -1 0 0 +501 183 4 0.4238 9.500019848464866 2.3066110626092433 11.406540899686282 0 0 0 +488 179 4 0.4238 12.17030372050298 0.7347365280132854 16.12066335925784 0 0 0 +609 219 4 0.4238 14.578703663356569 1.671584479943298 11.149542546257239 0 0 0 +603 217 4 0.4238 11.844098243859511 0.24798117628765415 5.546779239647546 0 0 0 +532 194 3 -0.8476 9.727066780245151 7.525894857288054 8.250498118054495 0 0 0 +537 195 4 0.4238 12.353495091196978 8.848001055384623 10.531260597227744 0 0 0 +504 184 4 0.4238 13.246675776258947 6.465082555635054 10.908961608114506 0 0 0 +646 232 3 -0.8476 15.758715697764478 6.829369444853389 12.250939163039321 0 0 0 +687 245 4 0.4238 13.254943960064889 8.98514832345121 14.717409467578584 0 0 0 +146 65 4 0.4238 14.652546983604765 7.3398264390259955 13.545785541481697 -1 0 0 +380 143 4 0.4238 10.760236960465424 5.844866070057884 14.234753882452535 0 0 0 +535 195 3 -0.8476 12.587076651097272 8.862929127468593 11.503483145123583 0 0 0 +536 195 4 0.4238 13.460125268843678 9.334043107310453 11.629331253591983 0 0 0 +430 160 3 -0.8476 9.63301619971604 9.682111590306123 10.00424421655961 0 0 0 +414 154 4 0.4238 10.667668910810049 8.205038284877624 12.172121771003793 0 0 0 +648 232 4 0.4238 16.323707616262194 6.01126007339594 12.143787481881885 0 0 0 +664 238 3 -0.8476 15.330461270589563 9.619824689380026 11.886964236163928 0 0 0 +665 238 4 0.4238 16.025013219734323 9.420697234702951 11.195627803834094 0 0 0 +666 238 4 0.4238 15.776839584375885 9.835419118555443 12.755448957787719 0 0 0 +542 197 4 0.4238 12.47763089417775 5.391278871991881 12.590948896510838 0 0 0 +668 239 4 0.4238 10.413336106414118 7.400226207839401 16.247663943219738 0 0 0 +526 192 3 -0.8476 9.447018738683195 6.35393197064873 18.704317187302387 0 0 0 +649 233 3 -0.8476 16.345292431988536 9.017776208820443 14.877567003768547 0 0 0 +541 197 3 -0.8476 12.016680597307857 6.241846410000483 12.844050222113939 0 0 0 +543 197 4 0.4238 12.66065014496007 6.841229844165456 13.319490684104343 0 0 0 +651 233 4 0.4238 15.415559139821084 8.651303043411826 14.913545232779468 0 0 0 +669 239 4 0.4238 11.34531831324323 8.719230683730283 16.006284652834186 0 0 0 +149 66 4 0.4238 16.975003500909565 5.532110247630704 17.965140968283233 -1 0 0 +379 143 3 -0.8476 10.168526258313129 5.976248477845736 15.030126623655189 0 0 0 +106 52 3 -0.8476 17.32022414402993 1.5314939343212752 12.892328616929841 -1 0 0 +156 68 4 0.4238 17.114254909284774 6.836096950343959 9.8430753514597 -1 0 0 +487 179 3 -0.8476 12.871539431927152 0.18134475334640518 16.570136924346187 0 0 0 +611 220 4 0.4238 16.96786977839787 2.245308644288098 14.936600889020037 0 0 0 +685 245 3 -0.8476 12.688631671624949 9.72961967112852 15.07103912691135 0 0 0 +630 226 4 0.4238 15.005489989911132 4.091712021991173 14.617352112708947 0 0 0 +116 55 4 0.4238 17.331046353595866 0.9826632711330118 5.254290449184732 -1 0 0 +510 186 4 0.4238 15.043136745492426 2.223973733634678 18.677734674555186 0 0 0 +507 185 4 0.4238 10.788282772357693 1.779605101333772 18.310039048189257 0 0 0 +509 186 4 0.4238 13.570227172248117 1.540106317407538 18.849458994365822 0 0 0 +610 220 3 -0.8476 16.959627787799334 2.6999855176143948 15.827219251577725 0 0 0 +524 191 4 0.4238 11.854768366914618 3.452430035980569 15.450256070858579 0 0 0 +131 60 4 0.4238 17.17888673686221 3.4245764675653874 18.79661190206157 -1 0 0 +506 185 4 0.4238 11.540722657327938 2.5145731008392413 19.55915181769573 0 0 0 +489 179 4 0.4238 13.29333780055349 0.711147543182084 17.30593329652049 0 0 0 +631 227 3 -0.8476 11.748759389818904 5.063013473056592 18.56850313403675 0 0 0 +632 227 4 0.4238 11.960957525709071 4.455714804852932 17.802892076261333 0 0 0 +634 228 3 -0.8476 15.6973562742273 4.094358065071973 18.118279668716543 0 0 0 +635 228 4 0.4238 15.200352516122278 4.946573617303477 17.95482962688389 0 0 0 +636 228 4 0.4238 15.941572938384622 3.6777232570725373 17.24262353813765 0 0 0 +523 191 3 -0.8476 12.025408686455123 4.2674240629078986 16.00403092905008 0 0 0 +505 185 3 -0.8476 11.616803826099243 1.794144829149753 18.869808159253164 0 0 0 +508 186 3 -0.8476 14.45694832583151 1.4653954955160282 18.393230297892163 0 0 0 +412 154 3 -0.8476 9.987626209974833 8.856276442416524 12.50891731085676 0 0 0 +45 23 1 0 14.708000000000002 10.1898 21.4018 0 0 0 +29 15 1 0 8.8248 10.1898 21.4018 0 0 0 +37 19 1 0 11.7664 10.1898 21.4018 0 0 0 +363 137 4 0.4238 8.891032147766978 0.7695517256996456 16.91960209454339 0 0 0 +628 226 3 -0.8476 14.748942182135409 4.651847451132323 15.405026919073109 0 0 0 +527 192 4 0.4238 10.256276910280322 5.768136621974385 18.74843629367082 0 0 0 +667 239 3 -0.8476 10.905387100614663 8.145686126522445 16.697304386582232 0 0 0 +145 65 3 -0.8476 14.048109555524928 7.505942731370751 14.324926458054504 -1 0 0 +629 226 4 0.4238 13.867967023118094 4.341344535587499 15.76205819579822 0 0 0 +525 191 4 0.4238 11.256779264811215 4.900357966674289 15.91127680861615 0 0 0 +500 183 4 0.4238 9.15950919943577 0.8451278902796727 12.050549180997539 0 0 0 +545 198 4 0.4238 10.3859577066206 9.32968686167653 18.002672781508142 0 0 0 +28 14 1 0 10.2956 7.6424 21.4018 0 0 0 +633 227 4 0.4238 12.214801106517807 5.938217167406841 18.43879809995541 0 0 0 +497 182 4 0.4238 9.206145816141262 3.1591445027130947 9.244482576320312 0 0 0 +671 240 4 0.4238 16.163078642836908 9.331042302154946 18.053830807429286 0 0 0 +670 240 3 -0.8476 15.224817405813624 9.144645834839004 17.76241457163988 0 0 0 +653 234 4 0.4238 12.461479289342714 7.49574321439815 17.453786763044352 0 0 0 +147 65 4 0.4238 14.070920627669235 6.7167697480003925 14.938673698254686 -1 0 0 +652 234 3 -0.8476 13.365831688920437 7.170425167622884 17.730039683862234 0 0 0 +654 234 4 0.4238 13.989818710227668 7.9478252106615095 17.809353682794825 0 0 0 +393 147 4 0.4238 9.051160636566062 6.107653142449054 9.395005687203998 0 0 0 +544 198 3 -0.8476 10.251293605893514 9.465474225781529 18.984216631773542 0 0 0 +546 198 4 0.4238 10.085424935750423 8.582422467561342 19.42320172197676 0 0 0 +416 155 4 0.4238 8.874760748308521 8.41771418724447 17.335141447942494 0 0 0 +34 17 1 0 13.237200000000001 2.5475 21.4018 0 0 0 +35 18 1 0 11.7664 5.0949 21.4018 0 0 0 +41 21 1 0 14.708000000000002 0 21.4018 0 0 0 +33 17 1 0 11.7664 0 21.4018 0 0 0 +42 21 1 0 16.178800000000003 2.5475 21.4018 0 0 0 +27 14 1 0 8.8248 5.0949 21.4018 0 0 0 +26 13 1 0 10.2956 2.5475 21.4018 0 0 0 +25 13 1 0 8.8248 0 21.4018 0 0 0 +43 22 1 0 14.708000000000002 5.0949 21.4018 0 0 0 +36 18 1 0 13.237200000000001 7.6424 21.4018 0 0 0 +137 62 4 0.4238 17.029879343610318 3.6063203619230157 5.778017012581245 -1 0 0 +513 187 4 0.4238 9.250995043077497 6.321981494907824 6.356593907209222 0 0 0 +139 63 3 -0.8476 17.63872263347519 5.18172987619495 8.140121207137877 -1 0 0 +672 240 4 0.4238 14.623489504230498 9.874295254591855 18.088016695075755 0 0 0 +533 194 4 0.4238 8.836211864765245 7.62533107456142 7.807226210399083 0 0 0 +78 39 2 0 10.2956 12.7373 2.4018 0 0 0 +79 40 2 0 8.8248 15.2847 2.4018 0 0 0 +86 43 2 0 13.237200000000001 12.7373 2.4018 0 0 0 +87 44 2 0 11.7664 15.2847 2.4018 0 0 0 +94 47 2 0 16.178800000000003 12.7373 2.4018 0 0 0 +95 48 2 0 14.708000000000002 15.2847 2.4018 0 0 0 +585 211 4 0.4238 10.671104024076405 14.523096964758968 5.378452704872705 0 0 0 +48 24 1 0 16.178800000000003 17.8322 21.4018 0 0 0 +80 40 2 0 10.2956 17.8322 2.4018 0 0 0 +88 44 2 0 13.237200000000001 17.8322 2.4018 0 0 0 +96 48 2 0 16.178800000000003 17.8322 2.4018 0 0 0 +189 79 4 0.4238 16.330716326393684 14.430543197032055 5.378876353138224 -1 0 0 +605 218 4 0.4238 14.554608821922615 17.810049518496978 5.425575473887812 0 -1 0 +185 78 4 0.4238 17.278396096257584 11.245243170341306 18.628865108751647 -1 0 0 +675 241 4 0.4238 14.050256076460313 11.268910684157941 5.2547329010893895 0 0 0 +583 211 3 -0.8476 9.742398396942372 14.830929242522885 5.585204967619628 0 0 0 +549 199 4 0.4238 9.880935542031319 11.534228571969086 5.578833372236164 0 0 0 +673 241 3 -0.8476 14.423537036600743 12.196595024378954 5.246789504930352 0 0 0 +691 247 3 -0.8476 12.226887967387686 13.96808871865356 5.550461386630152 0 0 0 +693 247 4 0.4238 12.405744481804994 14.402639542495168 6.433170805482284 0 0 0 +547 199 3 -0.8476 10.800294514900852 11.144551884206534 5.524694081527026 0 0 0 +548 199 4 0.4238 11.330392659763318 11.635863314460998 4.833601517261942 0 0 0 +551 200 4 0.4238 9.824105888312557 12.904381406994865 7.947029932960728 0 0 0 +570 206 4 0.4238 10.107087940276514 16.351002395244187 8.804555207290619 0 0 0 +674 241 4 0.4238 15.412065550992372 12.156879839921826 5.101070493632253 0 0 0 +676 242 3 -0.8476 13.149488474276104 14.303592627625555 8.033435431397672 0 0 0 +677 242 4 0.4238 12.520481979817932 13.57565652491699 8.306308729587867 0 0 0 +678 242 4 0.4238 14.090526371000333 13.970499146782764 8.092565441363229 0 0 0 +692 247 4 0.4238 13.047259912639866 13.485037990235355 5.244435494901086 0 0 0 +694 248 3 -0.8476 15.75249070806157 13.230109644684827 8.352539134651927 0 0 0 +695 248 4 0.4238 15.765048403110793 13.302188135502202 9.349859068474089 0 0 0 +696 248 4 0.4238 16.001000584924615 12.299903472725656 8.082429196171498 0 0 0 +553 201 3 -0.8476 11.536188658610737 12.261247879197334 8.838365774200673 0 0 0 +698 249 4 0.4238 13.152747288257768 15.38647935865847 9.369905701535087 0 0 0 +584 211 4 0.4238 9.742750697211381 15.334499473693516 6.449159937664458 0 0 0 +481 177 3 -0.8476 9.712261912951215 19.81131724866128 12.731667155342551 0 -1 0 +194 81 4 0.4238 17.614132852196526 15.025554160136025 11.033027733588618 -1 0 0 +697 249 3 -0.8476 13.074278463395652 15.880587473655579 10.235757789681385 0 0 0 +686 245 4 0.4238 12.316495205151407 10.25704939957381 14.307276157481006 0 0 0 +555 201 4 0.4238 11.763969176938547 12.541287007486309 9.770940538585773 0 0 0 +40 20 1 0 13.237200000000001 17.8322 21.4018 0 0 0 +572 207 4 0.4238 11.357418534899173 15.825375084096414 10.447114897443656 0 0 0 +477 175 4 0.4238 9.796764568089872 20.173557848497314 5.112000475676461 0 -1 0 +571 207 3 -0.8476 10.469632050143648 16.285507194605774 10.45781595454496 0 0 0 +617 222 4 0.4238 12.604572827998943 19.11782192983119 17.014530479074676 0 -1 0 +207 85 4 0.4238 16.484804937847407 17.95784225793004 5.125866981859153 -1 0 0 +604 218 3 -0.8476 14.919490237883124 18.740081140997685 5.469195595814299 0 -1 0 +606 218 4 0.4238 14.163642529486074 19.392337426063147 5.526256978773244 0 -1 0 +350 133 4 0.4238 9.847135671811797 17.59617059112192 5.2673712576069285 0 -1 0 +710 253 4 0.4238 13.094622584847201 15.473320385701221 5.264938889383966 0 0 0 +711 253 4 0.4238 14.484370529808553 15.807813174434916 6.054458768321659 0 0 0 +187 79 3 -0.8476 16.06784358046388 15.038800971157187 6.127822756092875 -1 0 0 +568 206 3 -0.8476 9.639082982591818 16.241142337718703 7.927684555691646 0 0 0 +482 177 4 0.4238 9.013549408922476 19.282481790090376 12.249864431686571 0 -1 0 +188 79 4 0.4238 16.054578692186666 14.524902713402577 6.985572058160539 -1 0 0 +709 253 3 -0.8476 13.69574544303163 16.20540052832755 5.585422851670113 0 0 0 +478 176 3 -0.8476 10.743136222875439 19.021221793365413 9.459342719817577 0 -1 0 +712 254 3 -0.8476 11.355719422270928 17.596452138767013 6.330954333049798 0 0 0 +713 254 4 0.4238 12.147100443543675 17.026867143366314 6.10894120498237 0 0 0 +714 254 4 0.4238 10.85441011892559 17.187831247840155 7.0936593948775375 0 0 0 +208 86 3 -0.8476 14.978787616946535 17.883565352950576 9.85434485358232 -1 0 0 +699 249 4 0.4238 13.803457673737139 16.562083734382476 10.297891058072048 0 0 0 +479 176 4 0.4238 10.830380710808972 18.201250779709707 10.025060408971106 0 -1 0 +210 86 4 0.4238 15.707952472992298 17.95740770355826 9.174001558520414 -1 0 0 +602 217 4 0.4238 11.931270349438666 19.05745227984406 5.986204602865755 0 -1 0 +480 176 4 0.4238 11.526129474544906 19.622068656329446 9.620292714944727 0 -1 0 +557 202 4 0.4238 9.13318824506834 12.473014112086789 9.617393618763018 0 0 0 +213 87 4 0.4238 17.054061009047526 18.335028953897382 7.167418106968749 -1 0 0 +349 133 3 -0.8476 8.966699097700523 18.04564610258063 5.116362049366701 0 -1 0 +601 217 3 -0.8476 12.434259484055977 19.920257686140243 5.935521094437088 0 -1 0 +211 87 3 -0.8476 17.115549893879596 18.586909191454463 8.133221500466798 -1 0 0 +716 255 4 0.4238 16.090290545633202 20.047836677861607 7.8703494362293585 0 0 0 +30 15 1 0 10.2956 12.7373 21.4018 0 0 0 +690 246 4 0.4238 14.016938477330777 11.918951523221422 17.048776835745876 0 0 0 +434 161 4 0.4238 9.693823285321802 10.480006453901664 13.46319566455011 0 0 0 +540 196 4 0.4238 11.674280249267774 11.854940896867596 12.289264008634488 0 0 0 +680 243 4 0.4238 16.478424726320092 12.587026221666738 11.664932438859578 0 0 0 +573 207 4 0.4238 9.91378123849236 15.920061312053692 11.204461329475878 0 0 0 +206 85 4 0.4238 16.98469098124782 16.433732066685277 5.432182455531139 -1 0 0 +679 243 3 -0.8476 15.864399170116613 12.312379072571936 10.924971754919977 0 0 0 +576 208 4 0.4238 10.588873040032755 14.34942231890106 13.367757482470923 0 0 0 +681 243 4 0.4238 15.065045663212485 11.850484998300644 11.309273873923207 0 0 0 +682 244 3 -0.8476 11.962561506249118 13.401175001102121 11.265786491254556 0 0 0 +683 244 4 0.4238 12.689665893772041 14.081940340712748 11.35454258028487 0 0 0 +684 244 4 0.4238 11.13131903032003 13.74213974238264 11.704852521590375 0 0 0 +196 82 3 -0.8476 15.90285320510125 15.42041398579357 12.053244611285264 -1 0 0 +198 82 4 0.4238 15.999832561023927 16.415625842665293 12.065435578871838 -1 0 0 +574 208 3 -0.8476 9.846636628795936 14.258971167237283 12.703751701446874 0 0 0 +432 160 4 0.4238 9.611886226641284 10.6816890833237 10.024203718077358 0 0 0 +197 82 4 0.4238 14.93374208238936 15.179298400795396 12.105082391999241 -1 0 0 +722 257 4 0.4238 14.253751156061526 14.665978439852315 14.219280715412237 0 0 0 +161 70 4 0.4238 15.961388715819947 12.577197095769023 14.434148039917726 -1 0 0 +721 257 3 -0.8476 13.443073239250747 15.202875049727682 13.985735521948472 0 0 0 +160 70 3 -0.8476 16.454216814462317 11.857514503546295 13.945090378978806 -1 0 0 +704 251 4 0.4238 16.492568511985038 14.65856714257437 14.904602735163373 0 0 0 +703 251 3 -0.8476 15.686041018071307 14.126152016812876 15.161599817811231 0 0 0 +723 257 4 0.4238 12.626015554694403 14.73882329909381 14.327894460415154 0 0 0 +200 83 4 0.4238 17.636715194805177 15.712516898031126 13.309851169131049 -1 0 0 +38 19 1 0 13.237200000000001 12.7373 21.4018 0 0 0 +471 173 4 0.4238 9.213708826688599 20.10521736834987 14.484550560031712 0 0 0 +616 222 3 -0.8476 12.486553254914368 18.179588143054474 17.339782319012816 0 -1 0 +31 16 1 0 8.8248 15.2847 21.4018 0 0 0 +558 202 4 0.4238 9.279605746055639 12.744930098194228 11.220905704732532 0 0 0 +209 86 4 0.4238 15.284708839266862 18.288339711647406 10.716070154782482 -1 0 0 +483 177 4 0.4238 10.589194302513869 19.71123832755193 12.261588666928713 0 -1 0 +579 209 4 0.4238 10.632760498133948 13.609865246700785 15.254030959955827 0 0 0 +656 235 4 0.4238 12.233494486101138 10.203173043550326 5.742028409390008 0 0 0 +46 23 1 0 16.178800000000003 12.7373 21.4018 0 0 0 +484 178 3 -0.8476 12.271762944753268 19.3092318048306 12.256076031945002 0 -1 0 +615 221 4 0.4238 15.703698741359615 19.437734901664438 14.911128387672555 0 -1 0 +701 250 4 0.4238 13.053700403965204 18.01421232485029 15.235824244829562 0 0 0 +486 178 4 0.4238 12.412225411434237 18.822427821700416 13.118219979361202 0 -1 0 +700 250 3 -0.8476 12.581078466090279 17.797604551340076 14.381593843109357 0 0 0 +702 250 4 0.4238 12.86343717428936 16.892117653667498 14.064786282811827 0 0 0 +593 214 4 0.4238 10.887928434111936 17.45241601646232 14.457678355975723 0 0 0 +718 256 3 -0.8476 16.113357623734434 19.089754005358483 12.130203493412996 0 0 0 +719 256 4 0.4238 15.731103913455442 19.005687028005063 13.050428928782427 0 0 0 +720 256 4 0.4238 15.794398214315043 19.940882962764434 11.713256954907804 0 0 0 +613 221 3 -0.8476 15.20393210112 20.26432473888685 14.652318504384699 0 -1 0 +600 216 4 0.4238 11.084689407902278 20.20403610863822 18.935319345381465 0 0 0 +485 178 4 0.4238 13.154564554087738 19.610816229399713 11.895925918696058 0 -1 0 +725 258 4 0.4238 16.569141248743357 17.107301434712273 15.075566187079383 0 0 0 +592 214 3 -0.8476 9.926060900867862 17.181240442111783 14.493396631013495 0 0 0 +220 90 3 -0.8476 16.837656850141205 16.7365181467464 18.02286642685194 -1 0 0 +577 209 3 -0.8476 11.267255610418932 14.304356543589998 14.914770347189284 0 0 0 +470 173 4 0.4238 9.418934192592229 18.827095608845703 15.479997089330922 0 0 0 +171 73 4 0.4238 17.22712271937352 12.084163738213748 6.093958329052445 -1 0 0 +724 258 3 -0.8476 15.977787063732565 17.877537936292324 15.31439037709252 0 0 0 +550 200 3 -0.8476 8.843880574348374 12.707663008542877 7.9255787960182325 0 0 0 +169 73 3 -0.8476 17.083413201671984 12.018684981104961 5.106506979270466 -1 0 0 +469 173 3 -0.8476 9.217462584338872 19.805716438344422 15.438639192053397 0 0 0 +47 24 1 0 14.708000000000002 15.2847 21.4018 0 0 0 +559 203 3 -0.8476 9.222833651291937 12.570348717943896 16.44681031548591 0 0 0 +39 20 1 0 11.7664 15.2847 21.4018 0 0 0 +564 204 4 0.4238 10.658684166557238 11.127527387280814 18.825581164798123 0 0 0 +186 78 4 0.4238 16.813476582396806 12.459781548073602 19.616474951157276 -1 0 0 +562 204 3 -0.8476 11.056949526067399 12.030021626625789 18.661602869563605 0 0 0 +563 204 4 0.4238 11.995444943416727 11.925404905340534 18.332541014507754 0 0 0 +580 210 3 -0.8476 10.448406987200734 14.81229121924737 18.347689310309658 0 0 0 +581 210 4 0.4238 10.594160894470312 13.85617327263508 18.60184473713495 0 0 0 +688 246 3 -0.8476 14.074844739563572 11.94780328954529 18.04668201078806 0 0 0 +689 246 4 0.4238 14.666244972833242 12.704816564391312 18.324489833823254 0 0 0 +435 161 4 0.4238 9.27206118562732 11.312172644181144 14.803435651426073 0 0 0 +202 84 3 -0.8476 14.891958761149404 14.616331988006797 17.552943751811167 -1 0 0 +204 84 4 0.4238 15.2986183079614 15.412266337573367 18.00140379447663 -1 0 0 +705 251 4 0.4238 15.388384001542512 14.393411825883335 16.078099953945607 0 0 0 +582 210 4 0.4238 9.924481028531677 15.271693180004116 19.064942024378542 0 0 0 +554 201 4 0.4238 11.80070270348779 11.306403015389012 8.703073689133799 0 0 0 +184 78 3 -0.8476 17.059420129620797 12.219767137760014 18.677376986174107 -1 0 0 +203 84 4 0.4238 13.908189752082496 14.760435488661487 17.44601976433382 -1 0 0 +560 203 4 0.4238 9.873397808788084 12.432659786103576 17.19367613275572 0 0 0 +32 16 1 0 10.2956 17.8322 21.4018 0 0 0 +538 196 3 -0.8476 11.856530283653065 11.071714403050905 12.883689284791696 0 0 0 +114 54 4 0.4238 16.740507502986524 19.733888369270662 17.464290232566544 -1 -1 0 +599 216 4 0.4238 9.991486069185791 19.92760256842262 17.754168449921202 0 0 0 +594 214 4 0.4238 9.567365199734075 17.10189768486746 13.563319997919086 0 0 0 +618 222 4 0.4238 11.757625359421008 18.153169411832355 18.02386286343707 0 -1 0 +578 209 4 0.4238 11.784309790163105 14.686144949572663 15.680859504578684 0 0 0 +598 216 3 -0.8476 10.440809954127937 19.538278556913312 18.558242715539976 0 0 0 +221 90 4 0.4238 16.40504190396716 17.635193851231918 17.95057348248026 -1 0 0 +726 258 4 0.4238 15.623940228103091 17.751260116932656 16.24113010577946 0 0 0 +113 54 4 0.4238 15.274792861943855 19.90322500302785 18.164027337467978 -1 -1 0 +112 54 3 -0.8476 16.001763578512946 19.25472642761485 17.938275397726326 -1 -1 0 +706 252 3 -0.8476 12.551685935685516 15.457175848664178 16.910098217483355 0 0 0 +707 252 4 0.4238 12.845942592767507 16.407649029956072 16.81002937477236 0 0 0 +708 252 4 0.4238 11.708194957139375 15.424075280938515 17.446220729813266 0 0 0 +172 74 3 -0.8476 16.76433481998671 10.797863993354191 8.006605472672149 -1 0 0 +162 70 4 0.4238 17.435264857566406 11.950759692050937 14.114943325593048 -1 0 0 +353 134 4 0.4238 9.254987607694568 19.627508709431815 8.660795000969017 0 -1 0 +433 161 3 -0.8476 8.946978004577417 10.956312644342525 13.927259409798495 0 0 0 +205 85 3 -0.8476 17.26823301711381 17.39134990381299 5.381460419461074 -1 0 0 +556 202 3 -0.8476 8.92984528918619 12.114054866496765 10.528327709580134 0 0 0 +575 208 4 0.4238 9.085368583583021 14.84916727603299 12.972339380460301 0 0 0 +539 196 4 0.4238 11.878312138663802 10.235425564757355 12.335831573597769 0 0 0 +311 120 4 0.4238 17.61891096205037 14.985380485740194 17.287899468199146 -1 0 0 +623 224 4 0.4238 12.381880540841486 20.312082142119113 7.939939105861083 0 -1 0 + +Velocities + +49 0 0 0 +50 0 0 0 +51 0 0 0 +57 0 0 0 +58 0 0 0 +59 0 0 0 +65 0 0 0 +66 0 0 0 +67 0 0 0 +243 -0.002822231990877442 -0.0023052214061719707 0.009530247074424172 +52 0 0 0 +53 0 0 0 +60 0 0 0 +61 0 0 0 +68 0 0 0 +69 0 0 0 +387 0.02040683175844618 0.030113474205102974 -0.0006765655981871661 +260 0.017568072072126094 0.03499100077202979 0.005917376062361976 +277 0.004833784750961121 -0.00983323915389275 0.005100923381866167 +422 0.004448794740744859 0.0020408391736819425 -0.010275883348163031 +278 0.003719859102099544 -0.025495496257443982 -0.006461254346208349 +421 0.006340358780268348 0.0018558120884466683 -0.004128164084761198 +372 0.0026494365999797627 0.0002416167810091355 0.0012395336245644754 +241 0.00014861395742901305 -0.0005174394549237438 -0.008073847438556242 +367 1.8977919425869245e-05 -0.002868464457728128 0.00126126747148945 +368 0.021696731790194046 -0.011658449783557777 -0.010106304430098976 +369 -0.0039062155813656472 0.012545818714569952 0.006562477023364197 +237 -0.028078564390780818 0.004642075302683817 -0.0069978916624241095 +242 -0.0021337131990320645 0.0018399202445872026 0.004897830174432379 +244 -0.000635853912060899 -0.0003117027780749414 -0.007075749642614316 +245 -0.005541920902969381 0.0025149861461632337 -0.008146082429684204 +246 -0.019695456306746895 0.005140535300857363 -0.01023662976377297 +357 0.002776409122597718 -0.008408343533829422 -0.009812139883210476 +248 -0.006684000376662951 0.005731878005754331 0.010024448438371488 +355 0.0039628389974169075 0.00046045180285836514 0.0006669919797090927 +370 -0.0026366044952138763 -0.0023389228268249564 0.0037486821808728667 +5 0 0 0 +115 -0.0020402352082021387 0.0036677720131863276 -0.00802303077613984 +117 -0.0034464988542171884 0.0016938233529814452 0.0262953836422676 +337 0.0073633788430925 0.004509282303724596 -0.0007650594341553004 +423 0.0026959799397957645 -0.006812979157387598 -0.010685424784478047 +388 0.0015852098107365846 0.005259230015998264 0.002751026511287103 +371 0.005779711986636393 -0.0008353768785160366 -0.00198237878607976 +389 0.0031846943488478907 0.011642110703518128 0.014420711142016252 +498 -0.005164631476145359 0.010939168436109934 0.022352344522590478 +499 0.006886168281265468 -0.009108086281242952 0.003883120004951695 +356 0.004163620682770444 0.013138193062289373 0.016049265341384164 +235 -0.003179198694301041 -0.003692981204063803 -0.0014262247525664452 +338 0.00310168679193579 -0.008146882520727082 0.0012671826351908747 +101 -0.006659046138748814 -0.0008304393783897443 0.0018191140652219755 +102 0.02188289620486816 -0.0011844869068423447 -0.012098996861358865 +264 -0.012316318853493463 0.0005577946038971241 0.00507703390200475 +261 0.03604318154809298 0.009806231532263591 -0.0160720490780732 +385 -0.002687032468404485 0.002271728237296993 -0.0017646573286989264 +386 -0.012497380519527533 0.0041402170434657075 -0.0033535206200510353 +390 0.0022744866866548233 0.0194196424464606 -0.006615088105745522 +259 0.005872554698472103 0.006217209229585764 -0.002947062491945664 +289 0.005394136139617279 -0.0018490152341513514 -0.0017693122242661956 +262 -0.0016568568125734 -0.002825219529412475 6.382233586258925e-05 +234 -0.008949726380115033 -0.015331490021295458 -0.0038004764767583044 +280 0.0004636341960603261 0.0006221175752928897 -0.0005407374987479414 +282 0.015715623100300606 0.013923022667883546 -0.0010483024598094686 +404 -0.014410298273982824 -0.012668338419291134 -0.011323512960376125 +405 0.0023458245411136914 -0.01692821219885552 -0.005019559570698842 +406 -0.003252744961088347 0.003382257937125399 -0.0025557519964832082 +407 -0.016535773877968372 -0.010199818886584635 -0.007880710321119557 +408 0.003104693710013748 0.024588717619135 -0.019734253685727947 +281 0.0038133770520735583 -0.02336844480331769 0.012395796079644686 +20 0 0 0 +403 0.002095886803122054 -0.005917998223858474 -0.0026387005496362314 +140 0.005917114366454788 0.00013672823352229473 0.010728054627890327 +285 0.0020423077594681877 -0.017314949305267807 -0.0078038982086199755 +409 0.0011885270468256002 0.001311496780392462 -0.006250213859486361 +410 0.002137303664280779 0.011393840611042969 -0.012019296950139544 +283 0.008387724395267328 -0.0004268569909832637 -0.004571499974862614 +284 0.0037479866880654462 0.003123659347513404 -0.006442038358579766 +300 -0.0020886391612222007 0.0011952415753491992 -0.002123570749439468 +512 0.0034541512569677144 -0.015701250730296833 -0.0006847182789978021 +298 0.004687912913638835 0.00396454302748385 -0.002268901914386687 +13 0 0 0 +167 0.008372557569580531 0.0020909883643117043 0.013455188067349093 +429 -0.0010329283045439992 -0.010344906649571438 -0.014496032790783172 +108 -0.014271917085942332 -0.002526311480035533 0.010864999945330718 +12 0 0 0 +247 -0.0013223759091741563 0.003051151563170616 0.0008020438055177612 +249 0.005915134979981071 0.001695039449665328 -0.009036002276667511 +267 -5.203826288410304e-05 0.011088343189988381 -0.016122035385740748 +150 -0.003275619611567659 -0.013131930835458579 -0.0031684098600017235 +232 0.009245437451002687 0.003369086397482676 0.0014175603209244307 +103 -0.002149210018643365 -0.00674464019035111 -0.004041355781702086 +105 -0.0012281774976330689 -0.009203227586228503 0.005694364069998308 +250 0.0023070568946502463 -0.0006414185530465225 0.0005282073163470133 +251 0.0009555910616923369 -0.005715887362345588 0.0060110066067819165 +252 -0.0002510451393985372 0.007329026713063109 -0.007493424691042163 +373 -0.0008705678021523996 -0.0024088310901922145 0.004592015983896998 +374 -0.003931339219109338 -0.016247225888682645 -0.012914239606148408 +375 -0.007942244152822379 -0.0060302172125581005 -0.0052038457937996765 +104 -0.011833857212613298 -0.004127926432757908 -0.015035492259698087 +265 0.0031454031762572156 -0.00246737648579412 0.0005406656545775518 +144 0.003546031095210744 -0.0038350589651608004 -0.007439077765406193 +229 0.0008187621059599007 -0.003770569170131831 0.004015947506505133 +266 0.013521098905566343 -0.022659542063113915 0.010384028628807856 +395 0.016278537764752236 -0.007528312170464568 0.0019027200331366068 +496 -0.0032866997173605483 0.005189101573918263 0.0017819703307354775 +358 -0.00043662911478563993 0.002091132008949735 0.0008355855190060376 +360 0.0021562801326494166 0.028681859833282353 -0.006852502071007954 +253 -0.00018608464258926786 -0.0034350314595455243 0.0021609958688780114 +17 0 0 0 +19 0 0 0 +100 -0.0002459862160224302 -0.0009442792339078408 -0.005128196004024017 +178 0.001378807349484608 0.003432156861170504 -0.006405935735664396 +230 -0.0030347069514960433 0.007114919870044278 0.0038760141152567214 +231 -0.004881286924708873 0.007364944438314923 -0.004742740868794306 +438 0.0026473976068899737 0.0032581497864147906 -0.021751859248191313 +392 0.009407580846764031 0.018205934857776874 0.004335142576954614 +111 0.004714061424162619 0.018228957649179207 -0.019987299139746964 +180 -0.005959092296708947 0.00037040100063528216 -0.009037319032682158 +233 1.5171261964060061e-05 -0.0007245864250013526 -0.002712199050964378 +132 -0.015054402443154296 -0.009164801953985011 0.03124839324921733 +286 0.00862264629438526 0.0020470752961162246 0.0002795935159881998 +287 0.013349805236602987 0.007260122847025134 0.005863728567388524 +288 -0.009317184630367126 0.02402454627808293 0.022064072519289615 +394 0.00408114796092972 0.0001262048336044046 0.002093477769512995 +396 -0.0007520969450285531 0.0027296854694956307 0.002310697288151023 +411 -0.004901362171333696 0.008797804190475603 -0.0029696518702863454 +166 -0.0011991302113043027 -0.0010146518351967157 0.005937081132183463 +159 -0.006903688208656232 -0.0017269476722276214 -2.6136668986767914e-05 +398 0.004555640424819427 0.004736373435451135 0.0017147780498698957 +2 0 0 0 +1 0 0 0 +179 0.009297541728472438 0.0034242450328185875 0.0017120759413145345 +397 0.0023632897757542284 0.005237892508362889 0.0019341925178973478 +255 0.028991618925043962 0.0025163600128309017 -0.010074435274392352 +157 -0.0053419651087539205 0.0009093299635396 0.0015631418651845292 +399 -0.0015933703029870642 0.0024191444535809022 0.005177427562284777 +123 -0.0008028814835527645 0.003446217051215865 0.007263081739694155 +225 0.004043632558155959 -0.0008602569408086914 -0.011024515477927854 +21 0 0 0 +417 -0.011016708095062428 0.021016423008858746 0.027021942113397354 +362 0.014400211555475738 0.02036532596351461 0.002366284053437811 +129 0.011984788717614495 -0.0038818338418699625 -0.01144947359364502 +359 -0.003799527036142441 -0.013871544730852163 -0.025355097880908957 +128 -0.019621574593312444 0.00330829030739978 0.011297099869832166 +256 0.004485857776842822 -0.006190801167325729 -0.004114050717367789 +257 -0.022889246506700947 0.016462815613716802 0.008995511031478167 +258 -0.0006750115093414352 -0.006492045194607161 -0.008539585614011868 +382 -0.000597634904196285 0.0031190547022447047 -0.0005426010315562802 +383 -0.01634488230604647 0.012293073745882217 0.03664733161082087 +384 -0.0036208229605027634 0.002392346607545294 0.009122574124318885 +272 0.010142233404856617 -0.005047913831595099 0.003412889130966729 +136 0.004503784480935454 0.0038223968860329467 0.0018198636906331498 +365 0.016589402600688283 -0.010293926257802932 0.006087471580008456 +127 0.0011478788695262919 0.005150422624549264 -0.011206416984160349 +271 0.0017123135951122007 -0.007785939214365013 -7.337703803098046e-05 +158 -0.009529404427389821 -0.0065789591819548935 -0.0015910212988070281 +143 -0.0047281625879192395 0.03124515069332843 0.0007451703256053234 +415 -0.00379066481523338 -0.0026663767364489017 0.0007712027345475282 +4 0 0 0 +276 0.01443192294700282 1.2119192948378698e-05 0.007580423687662169 +254 0.008413254538567476 -0.0031806116939371324 -0.005176729835500755 +273 -0.00235887879677462 -0.014807869627375875 0.018953669816605245 +612 0.000553795366781067 -0.008063136654246279 -0.015050782989627462 +402 0.0025057881076196976 0.013005029946408737 0.0024227412749199197 +401 -0.01611939125183101 -0.026613207073318514 0.011389739053037555 +400 0.0020939366064105544 0.004274317448135537 0.0039088401021415455 +274 0.0033890835718365284 0.0034962426873985687 0.0012142356622953697 +528 -0.0013204856705111925 0.008273432022243156 -0.006824479683978935 +275 -0.002467493814982517 0.009567039269012681 -0.001628281796299501 +130 -0.002294452700115776 0.004794778503598961 0.0012428491729459905 +11 0 0 0 +18 0 0 0 +3 0 0 0 +10 0 0 0 +9 0 0 0 +418 0.001969443672537646 0.0035591095160348667 6.840845948225931e-05 +339 0.009449547392686573 -0.015527752503599964 0.0020519522114406832 +109 0.0009019933692628193 -0.0023637997904728007 -0.001195708615075569 +165 -0.0031442370830047028 -0.00860076308764216 -0.004385624526108252 +142 0.0014997158829675526 0.0023986615572450763 0.0012176499361465287 +163 0.0005529616736063511 0.0011520262220100132 0.0026876826981595578 +138 0.00835009874289962 0.005446113136637283 0.012245936278168302 +110 0.0058595694218395306 0.006330401993370779 0.009691789005782887 +148 0.0010484300933068299 0.003614731905265376 0.0005656354442996937 +168 -0.0035453252363009 0.0030591240603495603 0.01141478999979606 +155 -0.006081584053376349 0.013488305256955841 0.003122684449638359 +419 -0.0043326958772574465 -0.007672862505363698 0.001741431881340215 +279 -0.006987931517458088 -0.004463380651949984 0.0032168497927575978 +291 0.013070263333084142 -0.011043304766923914 -0.007667022379803992 +54 0 0 0 +55 0 0 0 +62 0 0 0 +63 0 0 0 +70 0 0 0 +71 0 0 0 +318 0.002855540774250541 -0.008706265392435268 0.016709087896323416 +296 -0.006827138825786998 -0.008250089563741453 -0.010023271445379432 +295 0.0028025143164420044 0.004503395179327505 0.004740427349136433 +199 -0.0004276652048611721 0.0021036436581905785 0.001894836691998127 +212 0.0030494069444099436 0.008059312371114956 -0.0015384303490254432 +56 0 0 0 +64 0 0 0 +72 0 0 0 +297 -0.00863611007915637 0.023794218238383708 0.012286597898870223 +316 -0.0027282969248329306 0.0034784826105371163 -0.0015550482433265614 +596 0.0022540588825489087 -0.0004558511768009074 0.0021113703320854186 +314 0.0022730308836219526 -0.003576104706675502 -0.018305547725501175 +317 -0.008818932993818982 -0.01614550769887922 -0.006312790795656888 +174 -0.003989108346691385 -0.0041463772148390655 -0.012133006782017853 +424 -0.002061853383746996 0.0060283608089820645 0.0003858189982856313 +425 0.004667869130489407 0.006734610704535739 -0.008810620526543933 +426 0.001800378488543691 0.006572078134776592 -0.006959939430260138 +439 0.003570594672782302 -0.0075541274141492564 0.0011385953818795792 +440 -0.018483500755499073 0.026077043148287158 0.007762026717706596 +441 -0.0035160639639977304 0.01017935880582407 0.010925510238252048 +443 0.002752891522179302 0.002359520536859665 0.004402033435474336 +445 0.005109753638480509 0.0020799917239666893 0.0006203039106678689 +447 -0.004833957539877676 -0.013635648993521989 0.011042274951983328 +460 0.004502332563078225 -0.007019778994064603 -0.0020909163924237063 +566 0.006856255802710405 -0.007670066707940605 0.016488680237282137 +313 -0.00032024264450880786 -0.0033268448173116097 0.004213963501884734 +446 0.008230377667680117 -0.012002220683816067 -0.020817049936810675 +442 0.00632326144690708 -0.0028844850223673168 -0.0030935507749222787 +444 -0.006310050738245053 0.007701816347405714 -0.0030374249791888914 +462 -0.014819125088095908 -0.011935071226326503 -0.021055826472684266 +299 -0.01677058520297861 0.00017554348774697463 -0.004683820806050938 +192 0.0029983763762283316 0.00016984782773855043 -0.01239756136002042 +223 -0.0004979047776757504 0.0008512078443138333 0.0008443921365999649 +567 -0.015144427531155595 -0.010095143190313405 -0.003938143744796693 +305 0.011789453157160831 0.0011848420902197377 -0.006893690590609019 +461 0.003728808485234629 0.005861362556647005 0.030227046338109683 +164 -0.006371415362340771 -0.01791438320080124 9.28678768006752e-06 +99 -0.008674754592385234 0.0028175274440473265 -0.0035583112811675274 +352 -0.0019487809489514367 0.0005924046979209127 0.003081154877279966 +569 -0.004017890676087473 -0.02815893688383933 0.002950938479936915 +333 -0.034231073878134635 -0.020187818196016755 -0.002800887564445431 +315 -0.010786280226653037 0.0008279905777623672 -0.02094968371962149 +331 -0.003989578895582793 -0.002515570144974486 -0.0036650894134105383 +332 0.016019028086450147 0.01092586031507103 -0.004489180590132138 +334 -0.0050160125646465294 -0.0018598829970539145 -0.0053845119970308665 +335 -0.028710921574646858 -0.0077694127337625445 -0.033636255583214404 +336 0.007057694179060937 0.03364290478740563 -0.006438555338777638 +457 -0.0005470346035113902 -0.003636024539138937 -0.004693496328677859 +458 -0.014508974750418497 -0.025372567016445004 -0.015913823359620972 +459 -0.010595826221479657 0.016269726791195215 -0.00272015023858062 +587 0.009304708374423524 0.01802080928685514 -0.00225021037130779 +319 -6.329541868364268e-05 0.0007604880730009239 0.003923874710400092 +320 -0.013692396245649933 -0.004691994559443151 -0.004472120236690682 +97 -0.0041811451372435054 -0.0016947454452144169 -0.003088595435702038 +228 0.0035068470044357877 -0.00722159557397858 0.012380633273355516 +588 -0.007410650883482608 -0.004122963242300341 -0.002857693802382625 +586 -0.007183335289483923 -0.0021087039116411354 -0.002484722594033302 +354 -0.005993845781479215 0.012873796518682281 0.004349877868201698 +226 0.0006083611726830203 0.0035042017699132974 -0.003614859636821342 +193 -0.005669407429393517 0.004100406563704109 0.0010676709282988433 +321 -0.0071014047941653355 -0.001969377469874544 -0.0012339450644901888 +227 -0.011610696838439318 0.005519782536646491 -0.033176739962523336 +98 0.004309616722914489 0.002296427992121968 -0.0120792319341143 +195 -0.022875726692808136 0.01247390549316612 -0.01427276806388248 +190 0.0018356261705295177 0.0009825184232487147 -0.002190550287520845 +351 0.012404406240632222 -0.0006226879763799463 -0.0007946612762221016 +341 0.009353367040698626 -0.02002743130988449 0.011758841508559133 +238 0.001140654521438526 0.001459298321068358 0.001042104126190775 +561 0.011113989685122774 0.022628295093003382 0.007122561809265144 +14 0 0 0 +306 -0.0038854100448435683 0.009898877676498599 0.002296497679251702 +302 0.006250906499575308 0.0006651428085952308 0.003150835151576138 +492 0.0014990461900945217 0.00451246124630026 0.016271728963465862 +304 -0.0007644313239277986 -0.0002378869841683528 -0.008863599759836709 +183 -0.004235930717635777 0.015135770004869582 -0.009430966156809679 +301 0.001407295695739688 0.0025883970140671473 -0.0005129121354970562 +177 0.008532161224650597 -0.006166551287122611 -0.017051347217575095 +322 -0.006036741936123908 0.006694507238557491 -0.008797210546742736 +323 -0.0005878788759916577 -0.0046750514109782345 -0.00838774267309369 +324 0.0010320404343721495 0.018535823894319074 -0.0017230633321379187 +448 -0.0016501872771886364 0.0013105394169198484 -0.0016886903769968596 +449 -0.0018265835047153955 0.028292021845375437 -0.009028321848105923 +450 -0.004808560034150565 -0.01472989321192729 -0.02510566175036757 +327 0.00646416913515833 0.006855393213799753 -0.005266755020241675 +303 -0.0015080760032872007 -0.001614212669020773 -0.0071983001830801295 +182 0.005208468193997556 0.0074887616117697425 -0.00011567499674279219 +181 0.0041917814790537 0.006276446506232434 1.3253856979742307e-05 +307 -0.001742158205026559 -0.003906781181025906 0.0037522031056115815 +308 -0.030670315452765617 0.011715162069613731 0.00940047271483485 +309 0.015594087693923099 -0.011118430703491443 0.03507873836369949 +290 -0.01822990251793187 0.01136554812614189 0.019784306732369923 +24 0 0 0 +175 0.0003997089801711392 0.005612968231817301 -0.001977491453552462 +240 0.0021550359085433833 -0.013887726897599147 0.017007464029105246 +214 -0.0030236250800941365 -0.007746304500505268 -0.003265469519951162 +463 -0.0030506716559674306 8.022641073809966e-05 0.001305001465203792 +465 0.011668743673717535 -0.022561344284648188 -0.006913272055741826 +342 0.00761335978819216 0.01725411685187947 0.0031665163313512263 +467 0.005429443080097707 0.00505311980836296 0.03253239780470216 +590 -0.007667081749785803 -0.012646854519747352 -0.007344849346264026 +216 -0.015420086265898867 -0.0011289370701770252 -0.005213310630267644 +468 -0.014944650251435999 0.012290176565218719 0.03445762183628464 +437 0.008170752455860762 0.003515568999353165 -0.012392634739661046 +589 0.002120429597512166 -0.00404409002311151 -0.0008524764743937817 +591 0.0023748900106734744 -0.00911858234514646 0.011898881278063407 +217 -0.002002123365953612 -0.0016868233396341733 -0.0009793648464728668 +236 0.024017051264351316 -0.0011740301473598094 0.019254633312972093 +597 0.0006978982547704831 0.008971611751512084 0.01620145805868815 +436 0.006073089779316558 0.005758616207831075 -0.0010603059361670737 +215 -0.001968651756097078 -0.013581535743139927 0.011191410586834654 +340 0.0005155521625423603 -0.003066135423754587 -0.005507656172976111 +464 -0.013672365051519688 0.006462804234922297 0.0034084160890599114 +343 0.006296604556438187 -0.004345465035479592 -0.002148122930183059 +345 0.012407457872537 -0.002470006777829203 -0.017291130429046578 +218 -0.015256436367871109 -0.017127300174924556 0.013286905082506264 +344 0.006957172847952071 -0.005066948994127098 -0.0010697045913517173 +219 0.0129990390246623 0.01038063493403641 0.005896687981359087 +466 0.002244198202014901 0.00548664713748076 0.0017161884024748234 +552 -0.022571692032816285 0.003080463860301062 0.004147492761917047 +224 0.0030068463673795505 -0.0004210343710353578 -0.008435186117653032 +201 0.0002611282610589362 -0.02171208956219141 0.03614342720217159 +170 -0.004091015625502559 0.006132229043273037 -0.007894232048875658 +16 0 0 0 +364 -0.0015161431784151442 -0.0016413835416760833 -0.00011269983298135968 +595 0.0004009832164706928 -0.005943467092534516 -0.00021490750932348881 +293 0.0029792186491364907 -0.00951830053221831 0.009805396617398226 +565 -0.0020216291381893706 0.0005759466603249998 0.0037816069669276407 +294 0.006110145852875226 -0.011587409875187532 0.014746336149031355 +453 0.010684183447769217 0.00966936228778118 0.01067799815316271 +310 0.0013110820976444488 6.690346346024489e-05 -0.0013484122248995742 +312 0.0021350124964415944 -0.009300676520635393 -0.017126176751746602 +328 -0.0012173744274507857 -0.0010004333693518076 7.454356672613982e-05 +329 -0.004393989551355606 -0.0006342382009824402 0.025248414291071577 +330 0.003200826537968669 0.006262041666898172 -0.007660542795091789 +454 -0.001848413897192655 -0.006087838419291344 -0.00212182078058685 +455 0.002625640706938784 -0.005389333951319389 0.005133907982892303 +456 0.006533480317251084 -0.010660519588964945 0.006259950572557032 +292 0.0025205821997437323 0.0005728266872274269 -0.0031633541265021726 +191 0.016238306710869115 -0.003915115089834756 0.0017136737961342124 +239 0.00990944273613697 0.02760052218964869 0.011501959077712662 +176 -0.003812401466461981 0.00870460277141486 0.0014222213445986018 +222 -0.00575985861173191 0.022102253315148642 0.02527855635069059 +346 0.0011312225860331724 -0.0012039193200392066 -0.004868828659936997 +347 0.0022739232260907067 -0.011436140880903854 0.013284463507981098 +490 -0.0005595459079784365 -0.006269611312179471 0.0067393847431723 +7 0 0 0 +23 0 0 0 +326 0.0012996293407948924 0.008854456872801352 -0.005816613812790807 +451 -0.0028561369319889804 -0.0017465825473428813 0.008900668566522418 +6 0 0 0 +325 0.0010562870027208723 0.0034255062969131894 -0.0006172205493860827 +452 -0.009426612957814726 0.015699509362869738 0.009239585598848264 +348 -0.013065067399225125 -0.0011186833550731684 -0.01072093470053397 +472 -7.897472416050894e-05 0.0031805716301914226 -0.007784430712320418 +473 -0.006914952611644003 0.002498006849629822 -0.0006741048128127044 +474 -0.0022767631580318 -0.004582678763273538 -0.013994347301896512 +8 0 0 0 +22 0 0 0 +15 0 0 0 +366 -0.007893398177358455 0.015115361966491036 0.009170509752392673 +427 -0.0003444825785329123 -0.007337801801584954 -0.0009778496983795068 +428 0.001284241023354871 -0.013260102504623554 -0.021443246975242775 +491 -0.001767046133691502 -0.006564287081459821 0.023503882347904403 +420 -0.003509122175633548 0.01305155283816234 0.004947689893280669 +73 0 0 0 +74 0 0 0 +75 0 0 0 +81 0 0 0 +82 0 0 0 +83 0 0 0 +89 0 0 0 +90 0 0 0 +91 0 0 0 +44 0 0 0 +620 -0.018208136394152405 -0.01636478757026537 0.005723871336844999 +431 -0.005947889870410918 0.00044174663691606093 0.006557506419947902 +119 0.024721347844244186 0.008261586757785296 0.00907322934727056 +76 0 0 0 +77 0 0 0 +84 0 0 0 +85 0 0 0 +92 0 0 0 +93 0 0 0 +125 0.00376014626516738 0.002210168316563869 0.002298583773418513 +639 0.022515309952399035 0.009411637442127493 -0.008062907963212114 +621 -0.006374910185946932 0.00955951852607432 0.003250334549828182 +173 -0.021441066526937017 0.008981863969610688 0.01224124107433771 +475 0.004198954420745654 0.00028100082518072285 9.383026152395088e-05 +495 -0.004241287562035139 -0.005785104432022318 0.000523166704738585 +493 9.348630210513032e-05 -0.006284687922454231 -0.003701310284386629 +511 0.0007148304951871003 0.004802516087996348 -0.006923741019514223 +619 -0.002075393845858219 -0.003045847479122124 -0.001524738632164393 +118 0.00683188131992754 0.003668598221419104 0.006404555705525047 +518 0.0007042053936607947 0.0037009655583541416 0.006413238235319736 +643 -0.0004247381946310078 -0.0020119972122199944 0.003487618986222057 +645 -0.0048948895131701985 0.012363718645768199 -0.00928544818799057 +120 -0.010236314365806192 0.0022623366455210496 0.017281073956898166 +121 -0.001238562526158577 0.001104413566869127 0.005942347097054137 +476 0.012182201173028576 -0.004728148764198684 0.046347192725480664 +514 0.0022983792918737627 0.0014437839560773938 0.0036109547751728994 +515 -0.019172556612093973 -0.0016311268294803955 0.03216642670953416 +503 -0.0069105541563097604 -0.015249937977793143 0.0052637590343377815 +644 -0.010719473881067676 0.0037551606817486853 -0.0029346406103394162 +269 -0.004657911325433949 -0.003131957474482315 -0.011666276096979261 +717 -0.007598678858223351 0.0022229145917488594 0.005743247797030988 +141 -0.005265179044891148 0.002032989406198283 -0.015312221016573192 +614 -0.009219001917256551 0.005407772759963249 -0.0029756043481738784 +607 -0.0022318262514579175 -0.0013437454041061285 0.0034819193316852786 +263 -0.0031337390415979646 -0.0155076302314032 0.01168936778694652 +517 -0.004222729742737883 -0.0015412935817472574 -0.000744868553385778 +519 -0.017834616810459846 -0.005708672219139421 -0.013654944035195295 +650 0.016098074211762008 0.0008317702866467745 -0.0070629490018340796 +107 -0.013373872234929177 0.015550080911235302 0.000476694292789935 +622 0.0049167825063810506 -0.0019646746434102656 -0.0004138217494473092 +715 -0.0018479214618609496 -0.00040031683451092646 -0.0013844650938375396 +391 -0.0037858640614263014 -0.005495674469386023 0.0021697837969133988 +361 0.005936878618776804 -0.0060340273998497115 0.005302669782661007 +153 0.009350169255480476 -0.010095254447887305 -0.00021295408316436036 +268 0.00016309797421927704 0.001379673676436866 -0.0021059918993536083 +657 0.00797165705335179 -0.006626095212976235 0.002974029917145391 +494 0.001148355736449653 0.0036909034525013456 -0.02786109619932466 +502 -0.004711785614046966 -0.0032981402250937784 0.0026900818002181955 +134 -0.006372075048389165 -0.0010597064275151555 0.032493616061931636 +135 0.012441386237017894 -0.006758027851359993 -0.01093456688317497 +152 -0.022588064290988544 0.00886667288447623 0.008279189884228825 +133 0.002463951400607453 0.003811161478952187 -0.0012055726394182785 +529 0.0011447538436001538 -0.0013248981429381148 -0.002691009401164175 +530 -0.012741704403083629 -0.027504642134544018 -0.015426630500459096 +637 0.0027262342808301856 0.003417848363641975 -0.006980165287281133 +638 0.013337262716142521 -0.004492669699077519 -0.004062142879164206 +640 0.007343968608723324 -0.0017944529921501285 -0.0034872458540833894 +641 -0.0028237421192901504 -0.0005068756058293126 -0.00012747376583541385 +642 0.011814745657888743 -0.0024688971419446265 -0.005000832651892577 +655 0.001627324356529187 -0.004482993080078517 0.000808734460992604 +658 0.004840904310899923 -0.0002765015435387103 0.007219927125603741 +659 0.0024123333017816587 -0.0008252092073925724 -0.012010079098928605 +660 0.006288891732283029 -0.00028621221044029935 0.01017292418448191 +662 0.00042341404767420534 0.004858867208208743 -0.0025731587003398884 +151 -0.007481030563338991 0.0042940249428423454 -0.004138492391462666 +663 0.005706463166013832 -0.005134244724722354 0.01594300643902129 +661 -0.0004834562555479056 -0.0025170072941784116 0.0073306297338467516 +531 0.031627589352554296 -0.006929272021968033 0.005196746262871528 +534 -0.005636380674033646 -0.017477660905108702 0.01583147823999135 +413 0.011989224814873311 0.005002345322903481 0.013751203817150124 +381 -0.004459092376404236 -0.0050190034979797115 0.004721607878339021 +270 0.005446123992737857 -0.006947452847301007 -0.0011899546998997536 +154 0.0014172994016706149 -0.0033421080124123727 -0.0015470569232849327 +122 0.0012375927763631494 -0.011554657426034941 -0.00867285237322033 +516 0.005271954403411166 -0.0006481966287883752 2.6812633073704167e-05 +124 -0.003754526570879154 0.004041520353836536 -0.005167280520955695 +624 0.0024348446654673915 -0.011410862941411113 -0.008303184235291208 +625 -0.0004068734138486256 -0.0024077577282892604 0.0022463102414447145 +626 -0.007682544160104886 -0.002868348151472689 0.00804166794901491 +627 0.0055724420133055515 0.004831244270910297 0.0046825571947010595 +608 0.00904173534830472 -0.009299908749254992 -0.0015525376365491403 +377 -0.00531515207456117 -0.0003352083340617145 0.008223828332509607 +376 -0.0009132380668384925 -0.0032370142105785536 0.00992592406478607 +378 -0.013491407056118503 0.0024474110437273286 0.002430454281174073 +520 0.0029167102188674267 0.004050524998543141 0.006939254966538985 +521 0.0022255023178218117 -0.02084496868773591 0.011833792105899514 +522 -0.0021754058603597605 0.0036037952857744453 0.0025967549113268523 +647 0.01725665770888626 0.00025618854275232135 -0.004371903448504005 +126 -0.001396907296059675 0.005466933409078029 0.0035397437049442407 +501 0.0020137754495144103 -0.020560911871733662 -0.01930454581812061 +488 -0.013992558802764758 0.007135432550136229 0.019787547208033468 +609 -0.017041781544970595 0.00036953593881046697 0.004304666740455674 +603 0.004263060495225364 -0.0025041678366056743 -0.010088965858195222 +532 0.005236924638911616 -0.007374489144160924 -0.0014032938229172295 +537 -0.017202023712709204 0.029719340341784754 -0.0001481723823312356 +504 -0.006971669314112023 -0.003848037969451082 0.0024547071196951505 +646 0.0044060144797029716 0.00577277956175787 -0.0030311005618453533 +687 0.0029962372948669712 -0.00155376186210015 -0.007657774465803122 +146 -0.03168109088721509 -0.02093657671158045 -0.017430408359101673 +380 -0.004133070694344155 -0.023055369912419688 -0.0014608727321119676 +535 -0.0019018091647201572 -0.0027235789258337646 -0.003324715729768929 +536 -0.0033834221238263347 -0.00067664325480983 -0.0006818536684817816 +430 0.004878146505217018 -0.0005940118847220873 0.005061681229495326 +414 0.009784993638197226 0.007374598436598287 0.010895484131701147 +648 -0.01014869121728334 -0.004687101881511565 0.00012350285801009922 +664 0.002748144375770029 0.0026032090370390745 0.0006037618161079066 +665 0.009943417517975731 0.0332171540183687 -0.0010053949941968945 +666 -0.005204025673966604 0.005025169562373523 0.004088145103267187 +542 -0.0022871310890402786 -0.009483481838644251 0.039038521784662036 +668 -0.002010112042516619 -0.007839349380007939 -0.00012454825026704687 +526 0.004326170016375512 0.0006520283975472351 0.0013000875562086272 +649 0.006012493069566269 -0.0015705317570891995 0.0034453344311484997 +541 0.002417893801822803 0.004953709857499055 -0.0011048403053594347 +543 -0.006442682634596088 0.005483003196258186 0.010230143159271812 +651 5.851794152747379e-05 0.012096329874549444 -0.010504851962064576 +669 0.024559577529554937 -0.02670525413183529 -0.0006593803661219533 +149 0.005052614171349867 -0.016830388877089375 0.0024188350050921904 +379 -0.003329235103452224 -0.003013750877183804 -0.00414482381276264 +106 -0.0049276728477274205 0.0020773265341779523 0.0005342135720872503 +156 0.011327442559981039 -0.0005332212400849956 -0.021654626738406565 +487 -0.0005451479807017357 0.007096858276882301 -0.001211298812154257 +611 -0.021960485084400877 0.000683067126064194 -0.004807437709543965 +685 0.0054027121027461185 -0.0020836334168693686 -0.002685455633487145 +630 -0.008822313536481361 -0.004845697584124013 0.008618144649607666 +116 -0.0018481495655891557 0.003288677485939496 -0.01203827513108651 +510 -0.032301904778016324 0.03266518347502736 -0.010524750287846713 +507 0.01026908212324152 -0.003027423216310613 -0.01339935367398813 +509 -0.012123990818602938 -0.010921177126252526 -0.01085126541231615 +610 -0.0018536013560426982 0.0019641033697579227 -0.005272154166504122 +524 0.0025126158748017494 -0.011386391297567867 0.010899004749210146 +131 0.013925658871889492 0.01863780388390729 -0.012821208349513039 +506 0.002798516823548351 0.015462304271963446 -0.01979101766979263 +489 0.018551315704509276 0.005579119527076206 -0.011093956324755981 +631 -0.00213217437222647 0.007731605502977125 -5.708562343811414e-05 +632 -0.016010702686313313 0.003032381845605066 -0.00016432383794700518 +634 0.0024411605772810775 0.004856927419569082 0.0033624694714103616 +635 -0.004217713091711203 -0.0006169550158152153 -0.004853283570280516 +636 -0.0053752383344858115 -0.008175815179565843 0.007388678311008392 +523 -0.0016045268195455857 -0.0005433703477544734 -0.003812789038354003 +505 0.001251686805937162 -0.00358100309984456 -3.8168118482729824e-05 +508 -0.0024350068053152494 0.0035688590735699585 0.005610509346455448 +412 -0.00022593016936094175 0.0005569123807237037 0.0038001159805280626 +45 0 0 0 +29 0 0 0 +37 0 0 0 +363 -0.011964726025106835 0.002432278732280362 0.006076559669061676 +628 0.0008364492726496631 0.0005774360309607983 0.007909972736732423 +527 -0.001525771217934407 -0.00663724790475885 0.012008066487640058 +667 -0.0045753428553175395 -0.005313933751263768 -0.0015147195617714066 +145 0.0030897905888227985 -0.0005725135249566786 0.00520175803564182 +629 -0.011793195181352264 0.02610618463611397 -0.0011129416403377994 +525 -0.022420806448309998 -0.022996093757596713 0.015105277643548942 +500 -0.004188727339036917 -0.019564310174631772 -0.020323389800299303 +545 0.011136831496755695 0.002952182290516256 0.0005637316061665317 +28 0 0 0 +633 -0.02960278783895163 0.018048758207440972 -0.02963510627545276 +497 -0.023527326541010283 0.0208568120165425 0.005687411209495451 +671 0.0023108185550983966 0.012908244135685297 -0.004180129514014733 +670 0.006465909962417871 -0.006214105452110799 -0.005385675478166314 +653 0.0005457560351153357 -0.005732993238943683 -0.023978676323071678 +147 0.0009543364532176592 -0.0005669825788105438 0.005288972927967759 +652 -0.0020809963981695528 0.004201341752230154 -0.0037182713882387905 +654 -0.009705191096746496 0.00993785708033847 0.0002582345573881968 +393 0.00014977536429222813 -0.016157391113790023 -0.005007396695791053 +544 -0.0007464408473846617 -0.0025274118460750926 -0.0003262638562050646 +546 0.0007482564200138334 -0.005738810532314362 -0.0062078641022687555 +416 -0.005855847757407431 0.007349365261206047 0.00415066632160293 +34 0 0 0 +35 0 0 0 +41 0 0 0 +33 0 0 0 +42 0 0 0 +27 0 0 0 +26 0 0 0 +25 0 0 0 +43 0 0 0 +36 0 0 0 +137 -0.01807013140598822 -0.002206759585164299 -0.036470288931081965 +513 -0.016634738109428417 0.007838661917040123 -0.009140157784366151 +139 -0.008963827399168726 0.005060486629698257 0.00333600682613603 +672 -0.007607605155630691 -0.01456975078088874 -0.012598143794359841 +533 0.010617840224744613 -0.002777497773010237 -0.011197727642067286 +78 0 0 0 +79 0 0 0 +86 0 0 0 +87 0 0 0 +94 0 0 0 +95 0 0 0 +585 0.005605752859388974 -0.010142526760761094 0.03727990234950359 +48 0 0 0 +80 0 0 0 +88 0 0 0 +96 0 0 0 +189 -0.0066352869894572225 0.00024265908697179757 -0.008154695950714637 +605 0.002150142719826519 0.005331502869050656 -0.010584005781348844 +185 -0.00394193505540348 -0.006302674919906286 0.0014182920779830875 +675 -0.0005415046250754363 -0.0017158463927637298 -0.004355857781192924 +583 0.0023731378694094554 -0.000649623218570412 0.008513088612560797 +549 0.011016693797627375 0.028511018549521542 -0.0014920139544244682 +673 0.002569391041646503 -0.002953874401980327 -0.0027483375366729244 +691 0.0019340855980439994 0.00033670287218828305 -0.002850215590991099 +693 -0.010246446382756453 -0.01757295812509763 0.008367118291182465 +547 -0.0014747922178342681 -0.0011664893969373193 -0.0006060539317155183 +548 0.011682558902498964 -0.025233418213810175 -0.007658772705311056 +551 0.001350153023456467 0.00022279379737177285 -0.025939803341241217 +570 -0.005131884633683738 -0.021071670171871774 0.006468261966454463 +674 0.005944688363822889 -0.007207689386530191 0.021342103282829653 +676 -0.0019462920513466076 0.004407790321609089 -0.0015620365885013808 +677 0.006715775323883596 0.002944114457622447 0.014542952323996265 +678 0.0002778779391768264 0.006297772905186056 -0.026565168661761288 +692 0.009268689356589333 0.014731647385365748 -0.006025572741709686 +694 -0.003961631162606319 -0.0013806200811878214 -0.0008172345637775933 +695 -0.007667502982246405 0.0030490460467132675 -0.001088289569629578 +696 0.008468651107356945 0.0005907165859080803 0.003859911467064242 +553 -0.00047604019730420217 -0.0006315561767963964 0.0010024200881167521 +698 -0.0020717511399018134 0.010002747658628137 -0.006096442037637733 +584 -0.016580812361012713 0.012511158150068527 0.0008511110478859006 +481 0.0005948587232964445 0.001010539994860156 -0.007444450185793666 +194 0.00014052509066614157 -0.005196283194920727 0.006780792332164644 +697 -0.0013789642648926277 0.0036795675853680348 -0.0024305337069368458 +686 0.004822045126303928 0.0025096147997947602 0.0007703584546722453 +555 0.017189293067074386 -0.0008847199219453851 -0.0032260555994972286 +40 0 0 0 +572 0.011836142232616654 0.016930917726623914 0.0054145245254328695 +477 -0.0023182861715013415 0.0010624526210653072 0.012226130441533083 +571 0.003380622710715224 0.0006712391588360674 -0.0004913569633634105 +617 0.014810694316454103 0.004926610428412379 0.01925291118216818 +207 -0.007590085971879394 -0.014703490219233173 -0.010578241152045156 +604 -0.002926332808910417 0.006517063988398441 0.006874331039776373 +606 -0.006711013892835755 0.0017538833490847003 0.01109190361787526 +350 -0.00791114708309395 -0.018510770014932714 -0.004815453363899084 +710 -0.0064427786804492244 0.007900704613316586 -0.004014534901828139 +711 -0.013659088845790259 -0.006353686711340907 0.014745080974907615 +187 0.009196546495462546 -0.0006436048533352592 -0.0018751511705191544 +568 0.00351338252872656 -0.000468923257277023 -0.0006920890468333366 +482 -0.004913558802329553 -0.004280135253253908 0.00633294127596329 +188 0.004540426836736988 -0.007097215069674514 -0.005805835450005286 +709 0.001925645254538778 0.0014380880583831747 -0.004930937336155932 +478 0.0010797933791857736 0.0025266095076614922 -0.004986957491084801 +712 0.0005301580092307634 0.007828721030901242 0.0017280526627498729 +713 0.00023845816884353593 0.00504266543517644 0.007841645749689477 +714 -0.018116868406079928 -0.001053639709884517 -0.015294935527253715 +208 0.0022479985060981176 -0.0014519851635401385 -0.004570555125416719 +699 -0.0011994729208893943 0.003087096701170354 0.00206825365641926 +479 0.017036064852232736 -0.008815895837007535 -0.023904033427918216 +210 0.0037407613528955865 0.0035360396633836435 -0.0024281379564064314 +602 0.0075099029288607545 0.00248142438114653 0.007042328134206083 +480 0.003606247195743753 0.0011315638494953186 -0.012091977160979392 +557 0.01799594238988353 0.0010119724239675647 0.001713299481119473 +213 8.142606683067033e-05 0.0018049324742849876 0.001148356581106332 +349 -0.0011981816039239028 -0.004139945811682951 -0.0012467355401650265 +601 0.004020873251639709 0.004241016472708001 0.002563273451182537 +211 0.0011912649917131756 0.0025005537615394933 0.0008960825230590572 +716 -0.001685592699635269 0.0011640365948642592 0.005066042148810565 +30 0 0 0 +690 -0.008258764473906464 -0.015659920241712057 -0.002035366592494931 +434 -0.015147993202601842 -0.008391160991570657 -0.00133837501844855 +540 -0.01070956669106575 -0.0009034196831042784 -0.005091934969456589 +680 0.013411542345369893 -0.01224680766604758 -0.007693285108323204 +573 0.001125174289584756 -0.017065312099830133 -0.010847897177433372 +206 0.0062792678126364024 -0.004920618337422227 0.015385751090398978 +679 0.003851754102318177 0.00014121255786835605 -0.004367045609373842 +576 -0.006859141335892818 0.013475175880741354 0.019291224624438694 +681 -0.0010155508996575868 0.011841568778219715 -0.00038192110946660176 +682 -0.0033380546085591783 0.0029410572005993175 -0.0007868866109149822 +683 -0.0171452686314646 0.02080647918819655 -0.02494529463235201 +684 -0.011351263294960242 0.003268021853032265 -0.016211941153317734 +196 -0.0011300226991530493 -0.0007258875281920439 -0.0011053990262034088 +198 0.0028989491941254233 -0.0011295577630334667 -0.00010020171672689361 +574 0.010329552867290752 0.002573691251766472 0.0016334142849459905 +432 0.011312228177704555 -0.00040924084403576723 0.0030694280639071577 +197 -0.004165427208999216 0.003771685867294356 -0.03660165966181166 +722 -0.000648338729561578 -6.679565631513779e-07 0.0002618774194506748 +161 0.01798142895193523 0.0020571194054308513 0.016038128295544164 +721 -0.0003920833445493075 -0.0011075276896324445 -0.003149117714578652 +160 0.0012524360201935448 5.8385753508661056e-05 0.002094782880919037 +704 0.008829418227424335 -0.014756395405287588 0.01498750148919691 +703 -0.0008587083092325698 -0.007226841972489215 0.0002064836414122881 +723 -0.0005749020356670792 0.0016998018058745072 0.00022422970383630792 +200 0.031146059326807876 -0.005877684895195546 0.001580489200077874 +38 0 0 0 +471 -0.002412379012618108 0.002859766574078075 0.004225099064154239 +616 0.0015868289649342174 -0.0007154336713301255 -0.0018420555864635155 +31 0 0 0 +558 0.0010017769942429495 0.0028748423486200923 0.0029530298960570274 +209 -0.011547394561373242 0.021473730893253655 -0.010467996459002728 +483 -0.0011483108990157148 -0.01775883938741853 -0.006642617216380664 +579 -0.004400467068591756 -0.004727848404823099 -0.017194937494532058 +656 -0.009323761806544907 -0.00582840436180242 -0.033605778143606546 +46 0 0 0 +484 -0.0020388281695896135 -0.0013637084095724807 0.0019497022250018388 +615 -0.0005601690839121759 0.006209015490306886 0.014137268169018329 +701 -0.0037809143963855028 -0.003501975583518593 0.00300447780062066 +486 0.007618907754277993 0.0056944910767996034 0.004370581324618608 +700 -0.0046612326215811906 0.0009000392673902709 0.00237179703020734 +702 0.00448352509306984 0.007779674344946335 -0.009149493097928028 +593 -0.0015941057753356155 0.014578054449146513 -0.01738511514299848 +718 -0.001339803046916652 -0.0010137548764877385 -0.0018600250448437623 +719 -0.0041288597035935 -0.006640144853355004 -0.0035284383329067825 +720 -0.00828186051332812 -0.003436384759437303 -0.0014846993389069985 +613 -0.0037516874821196923 0.0008032080553151717 0.0030109183271456704 +600 0.0015665561791694254 -0.006074023336013163 -0.011441956255009576 +485 -0.008520355267151752 0.019106678931441436 0.0032307036002293785 +725 -0.018859767151860926 -0.01208741183555489 -0.00951241905524379 +592 0.002697557535774519 0.0016443361599495928 9.002589005331697e-05 +220 0.001644969207029382 0.004361924552822558 0.006117664057252492 +577 -0.0004582090954931718 0.0006102606399476886 0.001105420556781803 +470 -0.0062849098259277645 -0.004641593303172789 -0.0046067188749420885 +171 0.0008636188674837649 0.017476464872149055 -0.002555116980647831 +724 0.0008894985940205911 0.0005834133379995128 -0.0014610090405300256 +550 0.0006896316396178657 0.0009143133831033406 -0.0019354784779200378 +169 -0.0002215997710391417 0.006458478087593333 -0.0016723848777001873 +469 -0.0069673897228099664 -0.004505481750238904 0.001926603834355063 +47 0 0 0 +559 -0.007572098022459057 0.0034063887331657805 0.00015950666002367757 +39 0 0 0 +564 0.0034478240574839806 0.000977567496075238 0.011370397005249621 +186 0.003307811358636357 0.0024005138798181575 -0.0058730609160886635 +562 0.00040069870388580273 0.000886838393600568 0.0035753479994040382 +563 0.0009622848371929641 0.0012466569522117086 0.005071231855063573 +580 -0.0008152164468272666 -0.002281961916018554 -0.00340540442179655 +581 0.008664526206245351 -0.003613339366634202 -0.013849180825236965 +688 -0.0007737260024269964 -0.0021109727959323214 -0.0028686896014043996 +689 0.01184941834518123 -0.006439014918069607 -0.01795905690960574 +435 0.009487793849062317 0.008077776372612812 -0.003825190621775344 +202 0.0018611302621018263 0.001042316838629044 0.0007915024393209877 +204 -0.010242398098511275 -0.00771714677539368 0.027343526182630737 +705 0.00415826355703768 -0.027463756463854967 0.007706011293389328 +582 0.010940242714444454 -0.010471175449668265 0.010439795907298415 +554 -0.0033734100682732042 -0.0007050045550250698 -0.004141877996055899 +184 0.00954182511554633 -0.0030756224799226724 -0.0028355764318479435 +203 -0.0004896914330753941 -0.010713189084407382 0.006448641517112284 +560 0.002811074841408279 -0.0031284342121008137 -0.01007923914596747 +32 0 0 0 +538 -0.0014460833289970435 0.007075092708989862 0.0025968213594936666 +114 -0.0012344875182377776 -0.013021613850333872 -0.01551117572690931 +599 -0.009486941638727845 -0.0017646423596571908 -0.0022232385848233835 +594 -0.019757837691149267 0.020460127715951404 0.007156004053852354 +618 -0.004117904664209404 -0.007129562600878678 -0.008167279502096409 +578 -0.013243998449868415 -0.007568779562563151 0.01379750777771968 +598 -0.00894340226085164 -0.0011454896373641877 -0.002227227468484275 +221 -0.013387813082014567 -0.0036068811506120473 -0.0033536813661818755 +726 -0.010423730766968823 -0.005077846457722445 -0.006545701921982794 +113 0.009053197578918851 0.02806209034029739 -0.0038652610892807708 +112 -0.003598585058077683 0.010797122998889751 0.004964748066429578 +706 -0.009230566219107101 -0.00019179937588319708 -0.005897156455629181 +707 -0.0186040820527444 0.0030286498517162874 -0.0027171798388519654 +708 0.0005970323997883637 -0.011672330092629255 0.008809894454709295 +172 -0.003969055528345896 0.004616418314061088 0.006244115578595084 +162 0.003904417477970175 -0.02252457850998945 -0.0007511502242897511 +353 -0.004813423204096107 -0.0019593482773551324 -0.006475119883457997 +433 -0.005628582184186051 0.0004681681306527026 0.0048841056399051425 +205 -0.0025719666702933358 -0.0031601909448657315 -0.00034608644411026354 +556 0.006202519606328875 0.003259859743020484 -2.0384837307811827e-05 +575 0.009296645991498211 0.0182167459357296 -0.03573768643543234 +539 0.03550184814237637 0.005236622576246589 0.006877977306907682 +311 -0.005741616851658933 -0.006067351756425933 -0.004516807655761214 +623 0.00555361268890784 -0.038847648348719455 0.016774210292904084 + +Bonds + +1 1 277 278 +2 1 277 279 +3 1 421 422 +4 1 421 423 +5 1 241 242 +6 1 241 243 +7 1 367 368 +8 1 367 369 +9 1 244 245 +10 1 244 246 +11 1 355 356 +12 1 355 357 +13 1 370 371 +14 1 370 372 +15 1 115 116 +16 1 115 117 +17 1 337 338 +18 1 337 339 +19 1 388 389 +20 1 388 390 +21 1 499 500 +22 1 499 501 +23 1 235 236 +24 1 235 237 +25 1 385 386 +26 1 385 387 +27 1 259 260 +28 1 259 261 +29 1 289 290 +30 1 289 291 +31 1 262 263 +32 1 262 264 +33 1 280 281 +34 1 280 282 +35 1 406 407 +36 1 406 408 +37 1 403 404 +38 1 403 405 +39 1 409 410 +40 1 409 411 +41 1 283 284 +42 1 283 285 +43 1 298 299 +44 1 298 300 +45 1 247 248 +46 1 247 249 +47 1 232 233 +48 1 232 234 +49 1 103 104 +50 1 103 105 +51 1 250 251 +52 1 250 252 +53 1 373 374 +54 1 373 375 +55 1 265 266 +56 1 265 267 +57 1 229 230 +58 1 229 231 +59 1 496 497 +60 1 496 498 +61 1 358 359 +62 1 358 360 +63 1 253 254 +64 1 253 255 +65 1 100 101 +66 1 100 102 +67 1 178 179 +68 1 178 180 +69 1 286 287 +70 1 286 288 +71 1 394 395 +72 1 394 396 +73 1 166 167 +74 1 166 168 +75 1 397 398 +76 1 397 399 +77 1 157 158 +78 1 157 159 +79 1 256 257 +80 1 256 258 +81 1 382 383 +82 1 382 384 +83 1 136 137 +84 1 136 138 +85 1 127 128 +86 1 127 129 +87 1 271 272 +88 1 271 273 +89 1 415 416 +90 1 415 417 +91 1 400 401 +92 1 400 402 +93 1 274 275 +94 1 274 276 +95 1 130 131 +96 1 130 132 +97 1 418 419 +98 1 418 420 +99 1 109 110 +100 1 109 111 +101 1 142 143 +102 1 142 144 +103 1 163 164 +104 1 163 165 +105 1 148 149 +106 1 148 150 +107 1 295 296 +108 1 295 297 +109 1 199 200 +110 1 199 201 +111 1 316 317 +112 1 316 318 +113 1 424 425 +114 1 424 426 +115 1 439 440 +116 1 439 441 +117 1 445 446 +118 1 445 447 +119 1 460 461 +120 1 460 462 +121 1 313 314 +122 1 313 315 +123 1 442 443 +124 1 442 444 +125 1 223 224 +126 1 223 225 +127 1 352 353 +128 1 352 354 +129 1 331 332 +130 1 331 333 +131 1 334 335 +132 1 334 336 +133 1 457 458 +134 1 457 459 +135 1 319 320 +136 1 319 321 +137 1 97 98 +138 1 97 99 +139 1 586 587 +140 1 586 588 +141 1 226 227 +142 1 226 228 +143 1 193 194 +144 1 193 195 +145 1 190 191 +146 1 190 192 +147 1 238 239 +148 1 238 240 +149 1 304 305 +150 1 304 306 +151 1 301 302 +152 1 301 303 +153 1 322 323 +154 1 322 324 +155 1 448 449 +156 1 448 450 +157 1 181 182 +158 1 181 183 +159 1 307 308 +160 1 307 309 +161 1 175 176 +162 1 175 177 +163 1 214 215 +164 1 214 216 +165 1 463 464 +166 1 463 465 +167 1 589 590 +168 1 589 591 +169 1 217 218 +170 1 217 219 +171 1 436 437 +172 1 436 438 +173 1 340 341 +174 1 340 342 +175 1 343 344 +176 1 343 345 +177 1 466 467 +178 1 466 468 +179 1 364 365 +180 1 364 366 +181 1 595 596 +182 1 595 597 +183 1 565 566 +184 1 565 567 +185 1 310 311 +186 1 310 312 +187 1 328 329 +188 1 328 330 +189 1 454 455 +190 1 454 456 +191 1 292 293 +192 1 292 294 +193 1 346 347 +194 1 346 348 +195 1 490 491 +196 1 490 492 +197 1 451 452 +198 1 451 453 +199 1 325 326 +200 1 325 327 +201 1 472 473 +202 1 472 474 +203 1 427 428 +204 1 427 429 +205 1 475 476 +206 1 475 477 +207 1 493 494 +208 1 493 495 +209 1 511 512 +210 1 511 513 +211 1 619 620 +212 1 619 621 +213 1 118 119 +214 1 118 120 +215 1 643 644 +216 1 643 645 +217 1 121 122 +218 1 121 123 +219 1 514 515 +220 1 514 516 +221 1 607 608 +222 1 607 609 +223 1 517 518 +224 1 517 519 +225 1 622 623 +226 1 622 624 +227 1 715 716 +228 1 715 717 +229 1 391 392 +230 1 391 393 +231 1 361 362 +232 1 361 363 +233 1 268 269 +234 1 268 270 +235 1 502 503 +236 1 502 504 +237 1 133 134 +238 1 133 135 +239 1 529 530 +240 1 529 531 +241 1 637 638 +242 1 637 639 +243 1 640 641 +244 1 640 642 +245 1 655 656 +246 1 655 657 +247 1 658 659 +248 1 658 660 +249 1 151 152 +250 1 151 153 +251 1 661 662 +252 1 661 663 +253 1 154 155 +254 1 154 156 +255 1 124 125 +256 1 124 126 +257 1 625 626 +258 1 625 627 +259 1 376 377 +260 1 376 378 +261 1 520 521 +262 1 520 522 +263 1 532 533 +264 1 532 534 +265 1 646 647 +266 1 646 648 +267 1 535 536 +268 1 535 537 +269 1 430 431 +270 1 430 432 +271 1 664 665 +272 1 664 666 +273 1 526 527 +274 1 526 528 +275 1 649 650 +276 1 649 651 +277 1 541 542 +278 1 541 543 +279 1 379 380 +280 1 379 381 +281 1 106 107 +282 1 106 108 +283 1 487 488 +284 1 487 489 +285 1 685 686 +286 1 685 687 +287 1 610 611 +288 1 610 612 +289 1 631 632 +290 1 631 633 +291 1 634 635 +292 1 634 636 +293 1 523 524 +294 1 523 525 +295 1 505 506 +296 1 505 507 +297 1 508 509 +298 1 508 510 +299 1 412 413 +300 1 412 414 +301 1 628 629 +302 1 628 630 +303 1 667 668 +304 1 667 669 +305 1 145 146 +306 1 145 147 +307 1 670 671 +308 1 670 672 +309 1 652 653 +310 1 652 654 +311 1 544 545 +312 1 544 546 +313 1 139 140 +314 1 139 141 +315 1 583 584 +316 1 583 585 +317 1 673 674 +318 1 673 675 +319 1 691 692 +320 1 691 693 +321 1 547 548 +322 1 547 549 +323 1 676 677 +324 1 676 678 +325 1 694 695 +326 1 694 696 +327 1 553 554 +328 1 553 555 +329 1 481 482 +330 1 481 483 +331 1 697 698 +332 1 697 699 +333 1 571 572 +334 1 571 573 +335 1 604 605 +336 1 604 606 +337 1 187 188 +338 1 187 189 +339 1 568 569 +340 1 568 570 +341 1 709 710 +342 1 709 711 +343 1 478 479 +344 1 478 480 +345 1 712 713 +346 1 712 714 +347 1 208 209 +348 1 208 210 +349 1 349 350 +350 1 349 351 +351 1 601 602 +352 1 601 603 +353 1 211 212 +354 1 211 213 +355 1 679 680 +356 1 679 681 +357 1 682 683 +358 1 682 684 +359 1 196 197 +360 1 196 198 +361 1 574 575 +362 1 574 576 +363 1 721 722 +364 1 721 723 +365 1 160 161 +366 1 160 162 +367 1 703 704 +368 1 703 705 +369 1 616 617 +370 1 616 618 +371 1 484 485 +372 1 484 486 +373 1 700 701 +374 1 700 702 +375 1 718 719 +376 1 718 720 +377 1 613 614 +378 1 613 615 +379 1 592 593 +380 1 592 594 +381 1 220 221 +382 1 220 222 +383 1 577 578 +384 1 577 579 +385 1 724 725 +386 1 724 726 +387 1 550 551 +388 1 550 552 +389 1 169 170 +390 1 169 171 +391 1 469 470 +392 1 469 471 +393 1 559 560 +394 1 559 561 +395 1 562 563 +396 1 562 564 +397 1 580 581 +398 1 580 582 +399 1 688 689 +400 1 688 690 +401 1 202 203 +402 1 202 204 +403 1 184 185 +404 1 184 186 +405 1 538 539 +406 1 538 540 +407 1 598 599 +408 1 598 600 +409 1 112 113 +410 1 112 114 +411 1 706 707 +412 1 706 708 +413 1 172 173 +414 1 172 174 +415 1 433 434 +416 1 433 435 +417 1 205 206 +418 1 205 207 +419 1 556 557 +420 1 556 558 + +Angles + +1 1 278 277 279 +2 1 422 421 423 +3 1 242 241 243 +4 1 368 367 369 +5 1 245 244 246 +6 1 356 355 357 +7 1 371 370 372 +8 1 116 115 117 +9 1 338 337 339 +10 1 389 388 390 +11 1 500 499 501 +12 1 236 235 237 +13 1 386 385 387 +14 1 260 259 261 +15 1 290 289 291 +16 1 263 262 264 +17 1 281 280 282 +18 1 407 406 408 +19 1 404 403 405 +20 1 410 409 411 +21 1 284 283 285 +22 1 299 298 300 +23 1 248 247 249 +24 1 233 232 234 +25 1 104 103 105 +26 1 251 250 252 +27 1 374 373 375 +28 1 266 265 267 +29 1 230 229 231 +30 1 497 496 498 +31 1 359 358 360 +32 1 254 253 255 +33 1 101 100 102 +34 1 179 178 180 +35 1 287 286 288 +36 1 395 394 396 +37 1 167 166 168 +38 1 398 397 399 +39 1 158 157 159 +40 1 257 256 258 +41 1 383 382 384 +42 1 137 136 138 +43 1 128 127 129 +44 1 272 271 273 +45 1 416 415 417 +46 1 401 400 402 +47 1 275 274 276 +48 1 131 130 132 +49 1 419 418 420 +50 1 110 109 111 +51 1 143 142 144 +52 1 164 163 165 +53 1 149 148 150 +54 1 296 295 297 +55 1 200 199 201 +56 1 317 316 318 +57 1 425 424 426 +58 1 440 439 441 +59 1 446 445 447 +60 1 461 460 462 +61 1 314 313 315 +62 1 443 442 444 +63 1 224 223 225 +64 1 353 352 354 +65 1 332 331 333 +66 1 335 334 336 +67 1 458 457 459 +68 1 320 319 321 +69 1 98 97 99 +70 1 587 586 588 +71 1 227 226 228 +72 1 194 193 195 +73 1 191 190 192 +74 1 239 238 240 +75 1 305 304 306 +76 1 302 301 303 +77 1 323 322 324 +78 1 449 448 450 +79 1 182 181 183 +80 1 308 307 309 +81 1 176 175 177 +82 1 215 214 216 +83 1 464 463 465 +84 1 590 589 591 +85 1 218 217 219 +86 1 437 436 438 +87 1 341 340 342 +88 1 344 343 345 +89 1 467 466 468 +90 1 365 364 366 +91 1 596 595 597 +92 1 566 565 567 +93 1 311 310 312 +94 1 329 328 330 +95 1 455 454 456 +96 1 293 292 294 +97 1 347 346 348 +98 1 491 490 492 +99 1 452 451 453 +100 1 326 325 327 +101 1 473 472 474 +102 1 428 427 429 +103 1 476 475 477 +104 1 494 493 495 +105 1 512 511 513 +106 1 620 619 621 +107 1 119 118 120 +108 1 644 643 645 +109 1 122 121 123 +110 1 515 514 516 +111 1 608 607 609 +112 1 518 517 519 +113 1 623 622 624 +114 1 716 715 717 +115 1 392 391 393 +116 1 362 361 363 +117 1 269 268 270 +118 1 503 502 504 +119 1 134 133 135 +120 1 530 529 531 +121 1 638 637 639 +122 1 641 640 642 +123 1 656 655 657 +124 1 659 658 660 +125 1 152 151 153 +126 1 662 661 663 +127 1 155 154 156 +128 1 125 124 126 +129 1 626 625 627 +130 1 377 376 378 +131 1 521 520 522 +132 1 533 532 534 +133 1 647 646 648 +134 1 536 535 537 +135 1 431 430 432 +136 1 665 664 666 +137 1 527 526 528 +138 1 650 649 651 +139 1 542 541 543 +140 1 380 379 381 +141 1 107 106 108 +142 1 488 487 489 +143 1 686 685 687 +144 1 611 610 612 +145 1 632 631 633 +146 1 635 634 636 +147 1 524 523 525 +148 1 506 505 507 +149 1 509 508 510 +150 1 413 412 414 +151 1 629 628 630 +152 1 668 667 669 +153 1 146 145 147 +154 1 671 670 672 +155 1 653 652 654 +156 1 545 544 546 +157 1 140 139 141 +158 1 584 583 585 +159 1 674 673 675 +160 1 692 691 693 +161 1 548 547 549 +162 1 677 676 678 +163 1 695 694 696 +164 1 554 553 555 +165 1 482 481 483 +166 1 698 697 699 +167 1 572 571 573 +168 1 605 604 606 +169 1 188 187 189 +170 1 569 568 570 +171 1 710 709 711 +172 1 479 478 480 +173 1 713 712 714 +174 1 209 208 210 +175 1 350 349 351 +176 1 602 601 603 +177 1 212 211 213 +178 1 680 679 681 +179 1 683 682 684 +180 1 197 196 198 +181 1 575 574 576 +182 1 722 721 723 +183 1 161 160 162 +184 1 704 703 705 +185 1 617 616 618 +186 1 485 484 486 +187 1 701 700 702 +188 1 719 718 720 +189 1 614 613 615 +190 1 593 592 594 +191 1 221 220 222 +192 1 578 577 579 +193 1 725 724 726 +194 1 551 550 552 +195 1 170 169 171 +196 1 470 469 471 +197 1 560 559 561 +198 1 563 562 564 +199 1 581 580 582 +200 1 689 688 690 +201 1 203 202 204 +202 1 185 184 186 +203 1 539 538 540 +204 1 599 598 600 +205 1 113 112 114 +206 1 707 706 708 +207 1 173 172 174 +208 1 434 433 435 +209 1 206 205 207 +210 1 557 556 558 diff --git a/examples/PACKAGES/electrode/piston/in.piston b/examples/PACKAGES/electrode/piston/in.piston new file mode 100644 index 0000000000..73f981fc8b --- /dev/null +++ b/examples/PACKAGES/electrode/piston/in.piston @@ -0,0 +1,65 @@ +# The intention is to find the average position of one wall at atmospheric +# pressure. The output is the wall position over time which can be used to +# find the average position for a run with fixed wall position. +# +# ----------------- Init Section ----------------- + +atom_style full +units real +boundary p p f +kspace_style pppm/electrode 1e-4 +kspace_modify slab 3.0 +pair_style lj/cut/coul/long 8 8 +bond_style harmonic +angle_style harmonic +if "$(extract_setting(world_size) % 2) == 0" then "processors * * 2" + +# ----------------- Atom Definition Section ----------------- + +read_data "data.piston" + +# ----------------- Settings Section ----------------- + +pair_coeff 1 1 0.069 2.78 +pair_coeff 2 2 5.29 2.951 +pair_coeff 3 3 0.1553 3.166 +pair_coeff 4 4 0.0 0.0 +bond_coeff 1 600.0 1.0 +angle_coeff 1 75.0 109.47 +group wall type 1 +group gold type 2 +group spce type 3:4 +group ele union wall gold +fix fRattleSPCE spce shake 0.0001 10 0 b 1 a 1 +pair_modify mix arithmetic + +# ----------------- Run Section ----------------- + +neigh_modify every 1 delay 0 +timestep 2 +fix fxnvt spce nvt temp 300 300 500 +fix fxforce_au gold setforce 0.0 0.0 0.0 + +# equilibrate z-coordinate of upper electrode while keeping the electrode rigid +fix fxforce_wa wall setforce 0.0 0.0 NULL +fix fxpressure wall aveforce 0 0 -0.005246 # atomspheric pressure: area/force->nktv2p +fix fxdrag wall viscous 100 +fix fxrigid wall rigid/nve single + +# maintain constant potential during equilibration +# 'algo cg' allows for moving electrodes +fix fxele ele electrode/conp 0.0 1.805 symm on algo cg 1e-4 + +# setup output and run +variable q atom q +compute qwa wall reduce sum v_q +compute qau gold reduce sum v_q +variable top_wall equal (bound(wall,zmin)) +compute temp_mobile spce temp +variable s equal step +fix fxprint all print 1000 "${s} ${top_wall}" file top_wall.csv screen no +thermo_style custom step c_temp_mobile c_qwa c_qau v_top_wall +thermo 5000 +run 100000 +write_data "data.pistoned" + From 37f4b557d94cfd1570845799a735b1ba78f351b8 Mon Sep 17 00:00:00 2001 From: srtee Date: Thu, 13 Oct 2022 22:14:03 +1000 Subject: [PATCH 25/46] remove algo keyword from in.conp --- examples/PACKAGES/electrode/graph-il/in.conp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/PACKAGES/electrode/graph-il/in.conp b/examples/PACKAGES/electrode/graph-il/in.conp index 3bb4954c00..ec26b1637f 100644 --- a/examples/PACKAGES/electrode/graph-il/in.conp +++ b/examples/PACKAGES/electrode/graph-il/in.conp @@ -5,7 +5,7 @@ boundary p p f # slab calculation include settings.mod # styles, groups, computes and fixes kspace_modify slab 3.0 -fix conp bot electrode/conp -1.0 1.979 couple top 1.0 symm on algo mat_inv +fix conp bot electrode/conp -1.0 1.979 couple top 1.0 symm on #algo mat_inv thermo 50 thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop From deb137db8a1a9b61b4b70417151c9265250fe1c1 Mon Sep 17 00:00:00 2001 From: Shern Tee Date: Tue, 18 Oct 2022 07:27:05 +0000 Subject: [PATCH 26/46] Refactor amatrix Computation of long-range A matrix with pppm is optimized. --- examples/PACKAGES/electrode/graph-il/in.conp | 2 +- .../PACKAGES/electrode/graph-il/settings.mod | 9 +- src/ELECTRODE/fix_electrode_conp.cpp | 2 +- src/ELECTRODE/pppm_electrode.cpp | 163 ++++++++++++------ src/ELECTRODE/pppm_electrode.h | 7 +- 5 files changed, 125 insertions(+), 58 deletions(-) diff --git a/examples/PACKAGES/electrode/graph-il/in.conp b/examples/PACKAGES/electrode/graph-il/in.conp index ec26b1637f..e5eec24da3 100644 --- a/examples/PACKAGES/electrode/graph-il/in.conp +++ b/examples/PACKAGES/electrode/graph-il/in.conp @@ -3,7 +3,7 @@ boundary p p f # slab calculation include settings.mod # styles, groups, computes and fixes -kspace_modify slab 3.0 +kspace_modify slab 3.0 # amat twostep fix conp bot electrode/conp -1.0 1.979 couple top 1.0 symm on #algo mat_inv diff --git a/examples/PACKAGES/electrode/graph-il/settings.mod b/examples/PACKAGES/electrode/graph-il/settings.mod index dcdaf7bfcd..ffbbfb1cc4 100644 --- a/examples/PACKAGES/electrode/graph-il/settings.mod +++ b/examples/PACKAGES/electrode/graph-il/settings.mod @@ -12,8 +12,13 @@ kspace_style pppm/electrode 1e-7 read_data "data.graph-il" -group bot molecule 641 -group top molecule 642 +# replicate 4 4 1 # test different sys sizes + +variable zpos atom "z > 0" +group zpos variable zpos +group ele type 5 +group top intersect ele zpos +group bot subtract ele top group bmi type 1 2 3 group electrolyte type 1 2 3 4 diff --git a/src/ELECTRODE/fix_electrode_conp.cpp b/src/ELECTRODE/fix_electrode_conp.cpp index 0136217122..65812435aa 100644 --- a/src/ELECTRODE/fix_electrode_conp.cpp +++ b/src/ELECTRODE/fix_electrode_conp.cpp @@ -686,7 +686,7 @@ void FixElectrodeConp::setup_pre_exchange() // create_taglist if (mem_needed > 0.5) error->warning(FLERR, fmt::format("Please ensure there is sufficient memory for fix electrode " - "(anticipated usage is {:.1f} per proc)", + "(anticipated usage is at least {:.1f} GiB per proc)", mem_needed)); } diff --git a/src/ELECTRODE/pppm_electrode.cpp b/src/ELECTRODE/pppm_electrode.cpp index 80e055f72d..e4fb575063 100644 --- a/src/ELECTRODE/pppm_electrode.cpp +++ b/src/ELECTRODE/pppm_electrode.cpp @@ -681,8 +681,10 @@ void PPPMElectrode::compute_matrix(bigint *imat, double **matrix, bool timer_fla // TODO replace compute with required setup compute(1, 0); - // fft green's function k -> r - std::vector greens_real((std::size_t) nz_pppm * ny_pppm * nx_pppm, 0.0); + // fft green's function k -> r (double) + double *greens_real; + memory->create(greens_real, nz_pppm * ny_pppm * nx_pppm, "pppm/electrode:greens_real"); + memset(greens_real, 0, nz_pppm * ny_pppm * nx_pppm * sizeof(double)); for (int i = 0, n = 0; i < nfft; i++) { work2[n++] = greensfn[i]; work2[n++] = ZEROF; @@ -694,13 +696,15 @@ void PPPMElectrode::compute_matrix(bigint *imat, double **matrix, bool timer_fla greens_real[ny_pppm * nx_pppm * k + nx_pppm * j + i] = work2[n]; n += 2; } - MPI_Allreduce(MPI_IN_PLACE, &greens_real.front(), nz_pppm * ny_pppm * nx_pppm, MPI_DOUBLE, + MPI_Allreduce(MPI_IN_PLACE, greens_real, nz_pppm * ny_pppm * nx_pppm, MPI_DOUBLE, MPI_SUM, world); int const nlocal = atom->nlocal; int nmat = std::count_if(&imat[0], &imat[nlocal], [](int x) { return x >= 0; }); MPI_Allreduce(MPI_IN_PLACE, &nmat, 1, MPI_INT, MPI_SUM, world); + + // gather x_ele double **x_ele; memory->create(x_ele, nmat, 3, "pppm/electrode:x_ele"); memset(&(x_ele[0][0]), 0, nmat * 3 * sizeof(double)); @@ -716,12 +720,13 @@ void PPPMElectrode::compute_matrix(bigint *imat, double **matrix, bool timer_fla one_step_multiplication(imat, greens_real, x_ele, matrix, nmat, timer_flag); else two_step_multiplication(imat, greens_real, x_ele, matrix, nmat, timer_flag); + memory->destroy(greens_real); memory->destroy(x_ele); } /* ----------------------------------------------------------------------*/ -void PPPMElectrode::one_step_multiplication(bigint *imat, const std::vector &greens_real, +void PPPMElectrode::one_step_multiplication(bigint *imat, double *greens_real, double **x_ele, double **matrix, int const nmat, bool timer_flag) { @@ -735,11 +740,19 @@ void PPPMElectrode::one_step_multiplication(bigint *imat, const std::vector>> rho1d_j( - nlocal, std::vector>(3, std::vector(order, 0))); + std::vector j_list; for (int j = 0; j < nlocal; j++) { int jpos = imat[j]; if (jpos < 0) continue; + j_list.push_back(j); + } + int const nj_local = j_list.size(); + + FFT_SCALAR *** rho1d_j; + memory->create(rho1d_j, nj_local, 3, order, "pppm/electrode:rho1d_j"); + + int jlist_pos = 0; // wouldn't it be nice if we could enumerate! + for (int j : j_list) { int njx = part2grid[j][0]; int njy = part2grid[j][1]; int njz = part2grid[j][2]; @@ -748,14 +761,19 @@ void PPPMElectrode::one_step_multiplication(bigint *imat, const std::vectorcreate(amesh, order6, "pppm/electrode:amesh"); for (int ipos = 0; ipos < nmat; ipos++) { double *_noalias xi_ele = x_ele[ipos]; // new calculation for nx, ny, nz because part2grid available for nlocal, @@ -767,44 +785,47 @@ void PPPMElectrode::one_step_multiplication(bigint *imat, const std::vectordestroy(amesh); + memory->destroy(rho1d_j); MPI_Barrier(world); if (timer_flag && (comm->me == 0)) utils::logmesg(lmp, fmt::format("Single step time: {:.4g} s\n", MPI_Wtime() - step1_time)); @@ -812,7 +833,37 @@ void PPPMElectrode::one_step_multiplication(bigint *imat, const std::vector &greens_real, +void PPPMElectrode::build_amesh(const int dx, // = njx - nix + const int dy, // = njy - niy + const int dz, // = njz - niz + double *amesh, double *greens_real) +{ + auto fmod = [](int x, int n) { // fast unsigned mod + int r = abs(x); + while (r >= n) r -= n; + return r; + }; + int ind_amesh = 0; + + for (int iz = 0; iz < order; iz++) + for (int jz = 0; jz < order; jz++) { + int const mz = fmod(dz + jz - iz, nz_pppm) * nx_pppm * ny_pppm; + for (int iy = 0; iy < order; iy++) + for (int jy = 0; jy < order; jy++) { + int const my = fmod(dy + jy - iy, ny_pppm) * nx_pppm; + for (int ix = 0; ix < order; ix++) + for (int jx = 0; jx < order; jx++) { + int const mx = fmod(dx + jx - ix, nx_pppm); + amesh[ind_amesh] = greens_real[mz + my + mx]; + ind_amesh++; + } + } + } +} + +/* ----------------------------------------------------------------------*/ + +void PPPMElectrode::two_step_multiplication(bigint *imat, double *greens_real, double **x_ele, double **matrix, int const nmat, bool timer_flag) { @@ -826,7 +877,16 @@ void PPPMElectrode::two_step_multiplication(bigint *imat, const std::vector> gw(nmat, std::vector(nxyz, 0.)); + + double ** gw; + memory->create(gw, nmat, nxyz, "pppm/electrode:gw"); + memset(&(gw[0][0]), 0, nmat * nxyz * sizeof(double)); + + auto fmod = [](int x, int n) { // fast unsigned mod + int r = abs(x); + while (r >= n) r -= n; + return r; + }; // loops over weights of electrode atoms and weights of complete grid // (nx,ny,nz) = global coords of grid pt to "lower left" of charge @@ -843,21 +903,21 @@ void PPPMElectrode::two_step_multiplication(bigint *imat, const std::vectorx; for (int i = 0; i < nlocal; i++) { @@ -907,6 +969,7 @@ void PPPMElectrode::two_step_multiplication(bigint *imat, const std::vectordestroy(gw); if (timer_flag && (comm->me == 0)) utils::logmesg(lmp, fmt::format("step 2 time: {:.4g} s\n", MPI_Wtime() - step2_time)); } diff --git a/src/ELECTRODE/pppm_electrode.h b/src/ELECTRODE/pppm_electrode.h index 4bfa05c65f..328d4b3a93 100644 --- a/src/ELECTRODE/pppm_electrode.h +++ b/src/ELECTRODE/pppm_electrode.h @@ -93,10 +93,9 @@ class PPPMElectrode : public PPPM, public ElectrodeKSpace { void start_compute(); void make_rho_in_brick(int, FFT_SCALAR ***, bool); void project_psi(double *, int); - void one_step_multiplication(bigint *, const std::vector &, double **, double **, - int const, bool); - void two_step_multiplication(bigint *, const std::vector &, double **, double **, - int const, bool); + void one_step_multiplication(bigint *, double *, double **, double **, int const, bool); + void two_step_multiplication(bigint *, double *, double **, double **, int const, bool); + void build_amesh(int, int, int, double *, double *); bool compute_vector_called; }; From 0654d6c8d6cc03b2744192cb76788a00a37f87a5 Mon Sep 17 00:00:00 2001 From: Shern Tee Date: Fri, 21 Oct 2022 08:24:19 +0000 Subject: [PATCH 27/46] Refactor A-matrix in INTEL (and base package) --- src/ELECTRODE/pppm_electrode.cpp | 44 ++++---- src/INTEL/pppm_electrode_intel.cpp | 168 +++++++++++++++++++---------- src/INTEL/pppm_electrode_intel.h | 7 +- 3 files changed, 132 insertions(+), 87 deletions(-) diff --git a/src/ELECTRODE/pppm_electrode.cpp b/src/ELECTRODE/pppm_electrode.cpp index e4fb575063..ff6ed9b693 100644 --- a/src/ELECTRODE/pppm_electrode.cpp +++ b/src/ELECTRODE/pppm_electrode.cpp @@ -20,7 +20,6 @@ #include "angle.h" #include "atom.h" #include "bond.h" -#include "boundary_correction.h" #include "citeme.h" #include "comm.h" #include "domain.h" @@ -696,8 +695,7 @@ void PPPMElectrode::compute_matrix(bigint *imat, double **matrix, bool timer_fla greens_real[ny_pppm * nx_pppm * k + nx_pppm * j + i] = work2[n]; n += 2; } - MPI_Allreduce(MPI_IN_PLACE, greens_real, nz_pppm * ny_pppm * nx_pppm, MPI_DOUBLE, - MPI_SUM, world); + MPI_Allreduce(MPI_IN_PLACE, greens_real, nz_pppm * ny_pppm * nx_pppm, MPI_DOUBLE, MPI_SUM, world); int const nlocal = atom->nlocal; int nmat = std::count_if(&imat[0], &imat[nlocal], [](int x) { return x >= 0; @@ -726,9 +724,8 @@ void PPPMElectrode::compute_matrix(bigint *imat, double **matrix, bool timer_fla /* ----------------------------------------------------------------------*/ -void PPPMElectrode::one_step_multiplication(bigint *imat, double *greens_real, - double **x_ele, double **matrix, int const nmat, - bool timer_flag) +void PPPMElectrode::one_step_multiplication(bigint *imat, double *greens_real, double **x_ele, + double **matrix, int const nmat, bool timer_flag) { // map green's function in real space from mesh to particle positions // with matrix multiplication 'W^T G W' in one steps. Uses less memory than @@ -748,11 +745,11 @@ void PPPMElectrode::one_step_multiplication(bigint *imat, double *greens_real, } int const nj_local = j_list.size(); - FFT_SCALAR *** rho1d_j; + FFT_SCALAR ***rho1d_j; memory->create(rho1d_j, nj_local, 3, order, "pppm/electrode:rho1d_j"); - int jlist_pos = 0; // wouldn't it be nice if we could enumerate! - for (int j : j_list) { + for (int jlist_pos = 0; jlist_pos < nj_local; jlist_pos++) { + int j = j_list[jlist_pos]; int njx = part2grid[j][0]; int njy = part2grid[j][1]; int njz = part2grid[j][2]; @@ -763,7 +760,6 @@ void PPPMElectrode::one_step_multiplication(bigint *imat, double *greens_real, for (int dim = 0; dim < 3; dim++) { for (int oi = 0; oi < order; oi++) { rho1d_j[jlist_pos][dim][oi] = rho1d[dim][oi + nlower]; } } - jlist_pos++; } // nested loops over weights of electrode atoms i and j @@ -787,11 +783,12 @@ void PPPMElectrode::one_step_multiplication(bigint *imat, double *greens_real, compute_rho1d(dix, diy, diz); int njx = -1; int njy = -1; - int njz = -1; // force initial build_amesh - jlist_pos = 0; // wouldn't it be nice if we could enumerate! - for (auto j : j_list) { + int njz = -1; // force initial build_amesh + for (int jlist_pos = 0; jlist_pos < nj_local; jlist_pos++) { + int j = j_list[jlist_pos]; int ind_amesh = 0; int jpos = imat[j]; + if ((ipos < jpos) == !((ipos - jpos) % 2)) continue; double aij = 0.; if (njx != part2grid[j][0] || njy != part2grid[j][1] || njz != part2grid[j][2]) { njx = part2grid[j][0]; @@ -799,14 +796,14 @@ void PPPMElectrode::one_step_multiplication(bigint *imat, double *greens_real, njz = part2grid[j][2]; build_amesh(njx - nix, njy - niy, njz - niz, amesh, greens_real); } - for (int ni = nlower; ni <= nupper; ni++) { + for (int ni = nlower; ni <= nupper; ni++) { // i's rho1d[dim] indexed from nlower to nupper FFT_SCALAR const iz0 = rho1d[2][ni]; - for (int nj = nlower; nj <= nupper; nj++) { - FFT_SCALAR const jz0 = rho1d_j[jlist_pos][2][nj - nlower]; + for (int nj = 0; nj < order; nj++) { // j's rho1d_j[][dim] indexed from 0 to order-1 + FFT_SCALAR const jz0 = rho1d_j[jlist_pos][2][nj]; for (int mi = nlower; mi <= nupper; mi++) { FFT_SCALAR const iy0 = iz0 * rho1d[1][mi]; - for (int mj = nlower; mj <= nupper; mj++) { - FFT_SCALAR const jy0 = jz0 * rho1d_j[jlist_pos][1][mj - nlower]; + for (int mj = 0; mj < order; mj++) { + FFT_SCALAR const jy0 = jz0 * rho1d_j[jlist_pos][1][mj]; for (int li = nlower; li <= nupper; li++) { FFT_SCALAR const ix0 = iy0 * rho1d[0][li]; double aij_xscan = 0.; @@ -821,7 +818,7 @@ void PPPMElectrode::one_step_multiplication(bigint *imat, double *greens_real, } } matrix[ipos][jpos] += aij / volume; - jlist_pos++; + if (ipos != jpos) matrix[jpos][ipos] += aij / volume; } } memory->destroy(amesh); @@ -836,7 +833,7 @@ void PPPMElectrode::one_step_multiplication(bigint *imat, double *greens_real, void PPPMElectrode::build_amesh(const int dx, // = njx - nix const int dy, // = njy - niy const int dz, // = njz - niz - double *amesh, double *greens_real) + double *amesh, double *const greens_real) { auto fmod = [](int x, int n) { // fast unsigned mod int r = abs(x); @@ -863,9 +860,8 @@ void PPPMElectrode::build_amesh(const int dx, // = njx - nix /* ----------------------------------------------------------------------*/ -void PPPMElectrode::two_step_multiplication(bigint *imat, double *greens_real, - double **x_ele, double **matrix, int const nmat, - bool timer_flag) +void PPPMElectrode::two_step_multiplication(bigint *imat, double *greens_real, double **x_ele, + double **matrix, int const nmat, bool timer_flag) { // map green's function in real space from mesh to particle positions // with matrix multiplication 'W^T G W' in two steps. gw is result of @@ -878,7 +874,7 @@ void PPPMElectrode::two_step_multiplication(bigint *imat, double *greens_real, int nz_ele = nzhi_out - nzlo_out + 1; // nz_pppm + order + 1; int nxyz = nx_ele * ny_ele * nz_ele; - double ** gw; + double **gw; memory->create(gw, nmat, nxyz, "pppm/electrode:gw"); memset(&(gw[0][0]), 0, nmat * nxyz * sizeof(double)); diff --git a/src/INTEL/pppm_electrode_intel.cpp b/src/INTEL/pppm_electrode_intel.cpp index cff6ff6b9a..f3f4775222 100644 --- a/src/INTEL/pppm_electrode_intel.cpp +++ b/src/INTEL/pppm_electrode_intel.cpp @@ -23,6 +23,7 @@ #include "angle.h" #include "atom.h" #include "bond.h" +#include "citeme.h" #include "comm.h" #include "domain.h" #include "error.h" @@ -65,10 +66,24 @@ enum : bool { ELECTRODE = true, ELECTROLYTE = false }; #define ONEF 1.0 #endif +static const char cite_pppm_electrode[] = + "kspace_style pppm/electrode command:\n\n" + "@article{Ahrens2021,\n" + "author = {Ahrens-Iwers, Ludwig J.V. and Mei{\\ss}ner, Robert H.},\n" + "doi = {10.1063/5.0063381},\n" + "title = {{Constant potential simulations on a mesh}},\n" + "journal = {Journal of Chemical Physics},\n" + "year = {2021}\n" + "volume = {155},\n" + "pages = {104104},\n" + "}\n"; + PPPMElectrodeIntel::PPPMElectrodeIntel(LAMMPS *lmp) : PPPMIntel(lmp), ElectrodeKSpace(), electrolyte_density_brick(nullptr), electrolyte_density_fft(nullptr) { + if (lmp->citeme) lmp->citeme->add(cite_pppm_electrode); + group_group_enable = 0; electrolyte_density_brick = nullptr; electrolyte_density_fft = nullptr; @@ -505,7 +520,9 @@ void PPPMElectrodeIntel::compute_matrix(bigint *imat, double **matrix, bool time compute(1, 0); // fft green's function k -> r - vector greens_real(nz_pppm * ny_pppm * nx_pppm, 0.); + double *greens_real; + memory->create(greens_real, nz_pppm * ny_pppm * nx_pppm, "pppm/electrode:greens_real"); + memset(greens_real, 0, nz_pppm * ny_pppm * nx_pppm * sizeof(double)); for (int i = 0, n = 0; i < nfft; i++) { work2[n++] = greensfn[i]; work2[n++] = ZEROF; @@ -517,8 +534,7 @@ void PPPMElectrodeIntel::compute_matrix(bigint *imat, double **matrix, bool time greens_real[ny_pppm * nx_pppm * k + nx_pppm * j + i] = work2[n]; n += 2; } - MPI_Allreduce(MPI_IN_PLACE, &greens_real.front(), nz_pppm * ny_pppm * nx_pppm, MPI_DOUBLE, - MPI_SUM, world); + MPI_Allreduce(MPI_IN_PLACE, greens_real, nz_pppm * ny_pppm * nx_pppm, MPI_DOUBLE, MPI_SUM, world); int const nlocal = atom->nlocal; int nmat = std::count_if(&imat[0], &imat[nlocal], [](int x) { return x >= 0; @@ -539,47 +555,50 @@ void PPPMElectrodeIntel::compute_matrix(bigint *imat, double **matrix, bool time one_step_multiplication(imat, greens_real, x_ele, matrix, nmat, timer_flag); else two_step_multiplication(imat, greens_real, x_ele, matrix, nmat, timer_flag); + memory->destroy(greens_real); memory->destroy(x_ele); } /* ----------------------------------------------------------------------*/ -void PPPMElectrodeIntel::one_step_multiplication(bigint *imat, vector greens_real, - double **x_ele, double **matrix, int const nmat, - bool timer_flag) +void PPPMElectrodeIntel::one_step_multiplication(bigint *imat, double *greens_real, double **x_ele, + double **matrix, int const nmat, bool timer_flag) { // map green's function in real space from mesh to particle positions // with matrix multiplication 'W^T G W' in one steps. Uses less memory than // two_step_multiplication // int const nlocal = atom->nlocal; - // double **x = atom->x; + double **x = atom->x; MPI_Barrier(world); double step1_time = MPI_Wtime(); // precalculate rho_1d for local electrode - vector>> rho1d_j(nlocal, - vector>(3, vector(order, 0))); - - _alignvar(FFT_SCALAR rho[3][INTEL_P3M_ALIGNED_MAXORDER], 64) = {0}; - + std::vector j_list; for (int j = 0; j < nlocal; j++) { int jpos = imat[j]; if (jpos < 0) continue; - double *_noalias xj = x_ele[jpos]; + j_list.push_back(j); + } + int const nj_local = j_list.size(); + + FFT_SCALAR ***rho1d_j; + memory->create(rho1d_j, nj_local, 3, order, "pppm/electrode:rho1d_j"); + + _alignvar(FFT_SCALAR rho[3][INTEL_P3M_ALIGNED_MAXORDER], 64) = {0}; + + for (int jlist_pos = 0; jlist_pos < nj_local; jlist_pos++) { + int j = j_list[jlist_pos]; int njx = part2grid[j][0]; int njy = part2grid[j][1]; int njz = part2grid[j][2]; - FFT_SCALAR djx = njx + shiftone - (xj[0] - boxlo[0]) * delxinv; - FFT_SCALAR djy = njy + shiftone - (xj[1] - boxlo[1]) * delyinv; - FFT_SCALAR djz = njz + shiftone - (xj[2] - boxlo[2]) * delzinv; + FFT_SCALAR const djx = njx + shiftone - (x[j][0] - boxlo[0]) * delxinv; + FFT_SCALAR const djy = njy + shiftone - (x[j][1] - boxlo[1]) * delyinv; + FFT_SCALAR const djz = njz + shiftone - (x[j][2] - boxlo[2]) * delzinv; if (_use_table) { - djx = djx * half_rho_scale + half_rho_scale_plus; - int idx = djx; - djy = djy * half_rho_scale + half_rho_scale_plus; - int idy = djy; - djz = djz * half_rho_scale + half_rho_scale_plus; - int idz = djz; + int idx = (int) (djx * half_rho_scale + half_rho_scale_plus); + int idy = (int) (djy * half_rho_scale + half_rho_scale_plus); + int idz = (int) (djz * half_rho_scale + half_rho_scale_plus); #if defined(LMP_SIMD_COMPILER) #pragma simd #endif @@ -607,7 +626,7 @@ void PPPMElectrodeIntel::one_step_multiplication(bigint *imat, vector gr } } for (int dim = 0; dim < 3; dim++) { - for (int oi = 0; oi < order; oi++) { rho1d_j[j][dim][oi] = (double) rho[dim][oi]; } + for (int oi = 0; oi < order; oi++) { rho1d_j[jlist_pos][dim][oi] = rho[dim][oi]; } } } @@ -615,6 +634,9 @@ void PPPMElectrodeIntel::one_step_multiplication(bigint *imat, vector gr // (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 + int const order2 = INTEL_P3M_ALIGNED_MAXORDER * INTEL_P3M_ALIGNED_MAXORDER; + int const order6 = order2 * order2 * order2; + _alignvar(double amesh[order6], 64) = {0}; for (int ipos = 0; ipos < nmat; ipos++) { double *_noalias xi_ele = x_ele[ipos]; // new calculation for nx, ny, nz because part2grid available for nlocal, @@ -626,12 +648,9 @@ void PPPMElectrodeIntel::one_step_multiplication(bigint *imat, vector gr FFT_SCALAR diy = niy + shiftone - (xi_ele[1] - boxlo[1]) * delyinv; FFT_SCALAR diz = niz + shiftone - (xi_ele[2] - boxlo[2]) * delzinv; if (_use_table) { - dix = dix * half_rho_scale + half_rho_scale_plus; - int idx = dix; - diy = diy * half_rho_scale + half_rho_scale_plus; - int idy = diy; - diz = diz * half_rho_scale + half_rho_scale_plus; - int idz = diz; + int idx = (int) (dix * half_rho_scale + half_rho_scale_plus); + int idy = (int) (diy * half_rho_scale + half_rho_scale_plus); + int idz = (int) (diz * half_rho_scale + half_rho_scale_plus); #if defined(LMP_SIMD_COMPILER) #pragma simd #endif @@ -658,54 +677,85 @@ void PPPMElectrodeIntel::one_step_multiplication(bigint *imat, vector gr rho[2][k - nlower] = r3; } } - for (int j = 0; j < nlocal; j++) { + int njx = -1; + int njy = -1; + int njz = -1; // force initial build_amesh + for (int jlist_pos = 0; jlist_pos < nj_local; jlist_pos++) { + int j = j_list[jlist_pos]; int jpos = imat[j]; - if (jpos < 0) continue; + if ((ipos < jpos) == !((ipos - jpos) % 2)) continue; double aij = 0.; - int njx = part2grid[j][0]; - int njy = part2grid[j][1]; - int njz = part2grid[j][2]; - for (int ni = nlower; ni <= nupper; ni++) { - double iz0 = rho[2][ni - nlower]; - int miz = ni + niz; - for (int mi = nlower; mi <= nupper; mi++) { - double iy0 = iz0 * rho[1][mi - nlower]; - int miy = mi + niy; - for (int li = nlower; li <= nupper; li++) { - int mix = li + nix; - double const ix0 = iy0 * rho[0][li - nlower]; - for (int nj = nlower; nj <= nupper; nj++) { - double jz0 = rho1d_j[j][2][nj - nlower]; - int mjz = nj + njz; - int mz = abs(mjz - miz) % nz_pppm; - for (int mj = nlower; mj <= nupper; mj++) { - double jy0 = jz0 * rho1d_j[j][1][mj - nlower]; - int mjy = mj + njy; - int my = abs(mjy - miy) % ny_pppm; - for (int lj = nlower; lj <= nupper; lj++) { - int mjx = lj + njx; - int mx = abs(mjx - mix) % nx_pppm; - double const jx0 = jy0 * rho1d_j[j][0][lj - nlower]; - aij += ix0 * jx0 * greens_real[mz * nx_pppm * ny_pppm + my * nx_pppm + mx]; + if (njx != part2grid[j][0] || njy != part2grid[j][1] || njz != part2grid[j][2]) { + njx = part2grid[j][0]; + njy = part2grid[j][1]; + njz = part2grid[j][2]; + build_amesh(njx - nix, njy - niy, njz - niz, amesh, greens_real); + } + int ind_amesh = 0; + for (int ni = 0; ni < order; ni++) { + FFT_SCALAR const iz0 = rho[2][ni]; + for (int nj = 0; nj < order; nj++) { + FFT_SCALAR const jz0 = rho1d_j[jlist_pos][2][nj]; + for (int mi = 0; mi < order; mi++) { + FFT_SCALAR const iy0 = iz0 * rho[1][mi]; + for (int mj = 0; mj < order; mj++) { + FFT_SCALAR const jy0 = jz0 * rho1d_j[jlist_pos][1][mj]; + for (int li = 0; li < order; li++) { + FFT_SCALAR const ix0 = iy0 * rho[0][li]; + double aij_xscan = 0.; + for (int lj = 0; lj < order; lj++) { + aij_xscan += amesh[ind_amesh] * rho1d_j[jlist_pos][0][lj]; + ind_amesh++; } + aij += (double) ix0 * jy0 * aij_xscan; } } } } } matrix[ipos][jpos] += aij / volume; + if (ipos != jpos) matrix[jpos][ipos] += aij / volume; } } MPI_Barrier(world); + memory->destroy(rho1d_j); if (timer_flag && (comm->me == 0)) utils::logmesg(lmp, fmt::format("Single step time: {:.4g} s\n", MPI_Wtime() - step1_time)); } /* ----------------------------------------------------------------------*/ -void PPPMElectrodeIntel::two_step_multiplication(bigint *imat, vector greens_real, - double **x_ele, double **matrix, int const nmat, - bool timer_flag) +void PPPMElectrodeIntel::build_amesh(const int dx, // = njx - nix + const int dy, // = njy - niy + const int dz, // = njz - niz + double *amesh, double *const greens_real) +{ + auto fmod = [](int x, int n) { // fast unsigned mod + int r = abs(x); + while (r >= n) r -= n; + return r; + }; + int ind_amesh = 0; + + for (int iz = 0; iz < order; iz++) + for (int jz = 0; jz < order; jz++) { + int const mz = fmod(dz + jz - iz, nz_pppm) * nx_pppm * ny_pppm; + for (int iy = 0; iy < order; iy++) + for (int jy = 0; jy < order; jy++) { + int const my = fmod(dy + jy - iy, ny_pppm) * nx_pppm; + for (int ix = 0; ix < order; ix++) + for (int jx = 0; jx < order; jx++) { + int const mx = fmod(dx + jx - ix, nx_pppm); + amesh[ind_amesh] = greens_real[mz + my + mx]; + ind_amesh++; + } + } + } +} +/* ----------------------------------------------------------------------*/ + +void PPPMElectrodeIntel::two_step_multiplication(bigint *imat, double *greens_real, double **x_ele, + double **matrix, int const nmat, bool timer_flag) { // map green's function in real space from mesh to particle positions // with matrix multiplication 'W^T G W' in two steps. gw is result of diff --git a/src/INTEL/pppm_electrode_intel.h b/src/INTEL/pppm_electrode_intel.h index 048b148496..472effd455 100644 --- a/src/INTEL/pppm_electrode_intel.h +++ b/src/INTEL/pppm_electrode_intel.h @@ -89,10 +89,9 @@ class PPPMElectrodeIntel : public PPPMIntel, public ElectrodeKSpace { project_psi(buffers, vec, sensor_grpbit); } - void one_step_multiplication(bigint *, std::vector, double **, double **, int const, - bool); - void two_step_multiplication(bigint *, std::vector, double **, double **, int const, - bool); + void one_step_multiplication(bigint *, double *, double **, double **, int const, bool); + void two_step_multiplication(bigint *, double *, double **, double **, int const, bool); + void build_amesh(int, int, int, double *, double *); bool compute_vector_called; }; From ac3dde957d710ae07a4d7840c38c764c2e3900d0 Mon Sep 17 00:00:00 2001 From: Ludwig Ahrens Date: Mon, 24 Oct 2022 11:52:10 +0200 Subject: [PATCH 28/46] Review old todos --- src/ELECTRODE/ewald_electrode.cpp | 9 ++++----- src/ELECTRODE/fix_electrode_conp.cpp | 25 +++++++++++++++++-------- src/ELECTRODE/pppm_electrode.cpp | 6 ++---- src/ELECTRODE/slab_2d.cpp | 2 +- src/ELECTRODE/slab_dipole.cpp | 1 - 5 files changed, 24 insertions(+), 19 deletions(-) diff --git a/src/ELECTRODE/ewald_electrode.cpp b/src/ELECTRODE/ewald_electrode.cpp index 4e47d955ef..bcc8ffb738 100644 --- a/src/ELECTRODE/ewald_electrode.cpp +++ b/src/ELECTRODE/ewald_electrode.cpp @@ -32,6 +32,7 @@ #include #include +#include using namespace LAMMPS_NS; using namespace MathConst; @@ -1007,7 +1008,8 @@ void EwaldElectrode::compute_matrix(bigint *imat, double **matrix, bool /* timer n++; } - // TODO check if ((bigint) kxmax+1)*ngroup overflows ... + if (((bigint) kxmax + 1) * ngroup > INT_MAX) + error->all(FLERR, "kmax is too large, integer overflows might occur."); memory->create(csx_all, ((bigint) kxmax + 1) * ngroup, "ewald/electrode:csx_all"); memory->create(snx_all, ((bigint) kxmax + 1) * ngroup, "ewald/electrode:snx_all"); @@ -1018,15 +1020,12 @@ void EwaldElectrode::compute_matrix(bigint *imat, double **matrix, bool /* timer memory->create(jmat, ngroup, "ewald/electrode:jmat"); - int *recvcounts, *displs; // TODO allgather requires int for displs but - // displs might overflow! + int *recvcounts, *displs; memory->create(recvcounts, nprocs, "ewald/electrode:recvcounts"); memory->create(displs, nprocs, "ewald/electrode:displs"); // gather subsets global cs and sn int n = (kxmax + 1) * ngrouplocal; - // TODO check if (kxmax+1)*ngrouplocal, etc. - // overflows int n! typically kxmax small MPI_Allgather(&n, 1, MPI_INT, recvcounts, 1, MPI_INT, world); displs[0] = 0; diff --git a/src/ELECTRODE/fix_electrode_conp.cpp b/src/ELECTRODE/fix_electrode_conp.cpp index 65812435aa..0a46cf76c4 100644 --- a/src/ELECTRODE/fix_electrode_conp.cpp +++ b/src/ELECTRODE/fix_electrode_conp.cpp @@ -47,6 +47,8 @@ using namespace LAMMPS_NS; using namespace MathConst; +#define SMALL 1e-16 + extern "C" { void dgetrf_(const int *M, const int *N, double *A, const int *lda, int *ipiv, int *info); void dgetri_(const int *N, double *A, const int *lda, const int *ipiv, double *work, @@ -519,7 +521,8 @@ void FixElectrodeConp::setup_post_neighbor() read_from_file(input_file_inv, capacitance, "capacitance"); else invert(); - if (symm) symmetrize(); // TODO: is this safe with read_inv? + if (symm) symmetrize(); + // build sd vectors and macro matrices MPI_Barrier(world); double start = MPI_Wtime(); @@ -608,6 +611,10 @@ void FixElectrodeConp::invert() void FixElectrodeConp::symmetrize() { // S matrix to enforce charge neutrality constraint + if (read_inv) + error->warning(FLERR, + "Symmetrizing matrix from file. Make sure the provided matrix has not been " + "symmetrized yet."); assert(algo == Algo::MATRIX_INV); std::vector AinvE(ngroup, 0.); double EAinvE = 0.0; @@ -836,7 +843,8 @@ void FixElectrodeConp::update_charges() q_local = add_nlocalele(q_local, scale_vector(alpha, d)); // prepare next step if ((k + 1) % 20 == 0) { - // avoid shifting residual. TODO: apply constraint_correction? + // avoid shifting residual. This rarely happens. + q_local = constraint_correction(q_local); a = ele_ele_interaction(q_local); r = add_nlocalele(b, a); } else { @@ -1003,13 +1011,13 @@ void FixElectrodeConp::compute_macro_matrices() macro_elastance = std::vector>(num_of_groups, std::vector(num_of_groups)); - // TODO: does determinant ever = 0 if !symm? what to do then? if (num_of_groups == 1) { macro_elastance[0][0] = 1 / macro_capacitance[0][0]; } else if (num_of_groups == 2) { - double detinv = 1 / - (macro_capacitance[0][0] * macro_capacitance[1][1] - - macro_capacitance[0][1] * macro_capacitance[1][0]); + double const det = macro_capacitance[0][0] * macro_capacitance[1][1] - + macro_capacitance[0][1] * macro_capacitance[1][0]; + if (fabs(det) < SMALL) error->all(FLERR, "ELECTRODE macro matrix inversion failed!"); + double const detinv = 1 / det; macro_elastance[0][0] = macro_capacitance[1][1] * detinv; macro_elastance[1][1] = macro_capacitance[0][0] * detinv; macro_elastance[0][1] = -macro_capacitance[0][1] * detinv; @@ -1032,7 +1040,7 @@ void FixElectrodeConp::compute_macro_matrices() int info_rf, info_ri; dgetrf_(&m, &n, &tmp.front(), &lda, &ipiv.front(), &info_rf); dgetri_(&n, &tmp.front(), &lda, &ipiv.front(), &work.front(), &lwork, &info_ri); - if (info_rf != 0 || info_ri != 0) error->all(FLERR, "CONP macro matrix inversion failed!"); + if (info_rf != 0 || info_ri != 0) error->all(FLERR, "ELECTRODE macro matrix inversion failed!"); for (int i = 0; i < num_of_groups; i++) { for (int j = 0; j < num_of_groups; j++) { int idx = i * num_of_groups + j; @@ -1262,7 +1270,8 @@ void FixElectrodeConp::read_from_file(const std::string &input_file, double **ar std::vector tags; try { TextFileReader reader(input_file, filetype); - reader.set_bufsize(ngroup * 20 + 4); + int bufsize = ngroup * 20 + 4; + reader.set_bufsize(bufsize > 100 ? bufsize : 100); // get line with tags auto values = reader.next_values(ngroup); diff --git a/src/ELECTRODE/pppm_electrode.cpp b/src/ELECTRODE/pppm_electrode.cpp index ff6ed9b693..db16c81987 100644 --- a/src/ELECTRODE/pppm_electrode.cpp +++ b/src/ELECTRODE/pppm_electrode.cpp @@ -337,7 +337,7 @@ void PPPMElectrode::setup() // fkx,fky,fkz for my FFT grid pts for (i = nxlo_fft; i <= nxhi_fft; i++) { - int per = i - nx_pppm * (2 * i / nx_pppm); // TODO int division intentional? + int per = i - nx_pppm * (2 * i / nx_pppm); fkx[i] = unitkx * per; } @@ -449,7 +449,6 @@ void PPPMElectrode::compute(int eflag, int vflag) // return if there are no charges - // if (qsqsum == 0.0) return; TODO move back in start_compute(); @@ -677,8 +676,7 @@ void PPPMElectrode::project_psi(double *vec, int sensor_grpbit) void PPPMElectrode::compute_matrix(bigint *imat, double **matrix, bool timer_flag) { - // TODO replace compute with required setup - compute(1, 0); + compute(1, 0); // make sure density bricks etc. are set up // fft green's function k -> r (double) double *greens_real; diff --git a/src/ELECTRODE/slab_2d.cpp b/src/ELECTRODE/slab_2d.cpp index 2c98a067f4..c4d2bfaec5 100644 --- a/src/ELECTRODE/slab_2d.cpp +++ b/src/ELECTRODE/slab_2d.cpp @@ -70,7 +70,7 @@ void Slab2d::compute_corr(double /*qsum*/, int eflag_atom, int eflag_global, dou } // per-atom energy; see eq. (20) in metalwalls ewald doc - if (eflag_atom) eatom[i] -= efact * q[i] * pot_ij; // TODO check if 0.5 factor + if (eflag_atom) eatom[i] -= efact * q[i] * pot_ij; if (eflag_global) e_keq0 -= q[i] * pot_ij; } if (eflag_global) { diff --git a/src/ELECTRODE/slab_dipole.cpp b/src/ELECTRODE/slab_dipole.cpp index 2e04a012fc..b871ce60b0 100644 --- a/src/ELECTRODE/slab_dipole.cpp +++ b/src/ELECTRODE/slab_dipole.cpp @@ -137,5 +137,4 @@ void SlabDipole::matrix_corr(bigint *imat, double **matrix) if (imat[i] != jmat[j]) matrix[jmat[j]][imat[i]] += aij; } } - // TODO add ELC corrections, needs sum over all kpoints but not (0,0) } From f5261b449a669191daad8ec08cded3860e95a651 Mon Sep 17 00:00:00 2001 From: Ludwig Ahrens Date: Mon, 14 Nov 2022 09:37:42 +0100 Subject: [PATCH 29/46] Remove setup from BoundaryCorrection --- src/ELECTRODE/boundary_correction.cpp | 26 +++++--------------------- src/ELECTRODE/boundary_correction.h | 14 ++------------ src/ELECTRODE/ewald_electrode.cpp | 3 +-- src/ELECTRODE/pppm_electrode.cpp | 7 ++----- src/ELECTRODE/slab_2d.cpp | 15 ++++++++++++--- src/ELECTRODE/slab_2d.h | 2 +- src/ELECTRODE/slab_dipole.cpp | 14 ++++++++++---- src/ELECTRODE/slab_dipole.h | 2 +- src/ELECTRODE/wire_dipole.cpp | 11 ++++++++--- src/ELECTRODE/wire_dipole.h | 2 +- src/INTEL/pppm_electrode_intel.cpp | 3 +-- 11 files changed, 44 insertions(+), 55 deletions(-) diff --git a/src/ELECTRODE/boundary_correction.cpp b/src/ELECTRODE/boundary_correction.cpp index feda3af4f9..8e622c170f 100644 --- a/src/ELECTRODE/boundary_correction.cpp +++ b/src/ELECTRODE/boundary_correction.cpp @@ -19,34 +19,18 @@ #include "atom.h" #include "comm.h" +#include "domain.h" #include "force.h" +#include "kspace.h" using namespace LAMMPS_NS; -// use EW3DC slab correction -// BoundaryCorrection::BoundaryCorrection(LAMMPS *lmp) : Pointers(lmp) {} -void BoundaryCorrection::setup(double x, double y, double z) +double BoundaryCorrection::get_volume() { - xprd_wire = x; - yprd_wire = y; - zprd_slab = z; - volume = x * y * z; - area = x * y; - qqrd2e = force->qqrd2e; - scale = 1.0; -} -void BoundaryCorrection::setup(double x, double y, double z, double g) -{ - xprd_wire = x; - yprd_wire = y; - zprd_slab = z; - volume = x * y * z; - area = x * y; - qqrd2e = force->qqrd2e; - scale = 1.0; - g_ewald = g; + return domain->xprd * force->kspace->wire_volfactor * domain->yprd * + force->kspace->wire_volfactor * domain->zprd * force->kspace->slab_volfactor; } std::vector BoundaryCorrection::gather_recvcounts(int n) diff --git a/src/ELECTRODE/boundary_correction.h b/src/ELECTRODE/boundary_correction.h index b729207b6c..3fec90f8d2 100644 --- a/src/ELECTRODE/boundary_correction.h +++ b/src/ELECTRODE/boundary_correction.h @@ -27,20 +27,10 @@ class BoundaryCorrection : protected Pointers { BoundaryCorrection(LAMMPS *); virtual void vector_corr(double *, int, int, bool){}; virtual void matrix_corr(bigint *, double **){}; - virtual void compute_corr(double, double, int, int, double &, double *){}; - void setup(double, double, double); - void setup(double, double, double, double); + virtual void compute_corr(double, int, int, double &, double *){}; protected: - double area; - double volume; - double xprd_wire; - double yprd_wire; - double zprd_slab; - double qqrd2e; - double scale; - double g_ewald; - + double get_volume(); std::vector gather_jmat(bigint *); std::vector gather_recvcounts(int); std::vector gather_displs(const std::vector &); diff --git a/src/ELECTRODE/ewald_electrode.cpp b/src/ELECTRODE/ewald_electrode.cpp index 8530befcb7..7df08948d0 100644 --- a/src/ELECTRODE/ewald_electrode.cpp +++ b/src/ELECTRODE/ewald_electrode.cpp @@ -302,7 +302,6 @@ void EwaldElectrode::setup() memory->create3d_offset(sn, -kmax, kmax, 3, nmax, "ewald/electrode:sn"); kmax_created = kmax; } - boundcorr->setup(xprd_wire, yprd_wire, zprd_slab, g_ewald); // pre-compute Ewald coefficients @@ -419,7 +418,7 @@ void EwaldElectrode::compute(int eflag, int vflag) for (int j = 0; j < 6; j++) vatom[i][j] *= q[i] * qscale; } - boundcorr->compute_corr(qsum, slab_volfactor, eflag_atom, eflag_global, energy, eatom); + boundcorr->compute_corr(qsum, eflag_atom, eflag_global, energy, eatom); } /* ---------------------------------------------------------------------- */ diff --git a/src/ELECTRODE/pppm_electrode.cpp b/src/ELECTRODE/pppm_electrode.cpp index b113cbfa47..6f1fd18332 100644 --- a/src/ELECTRODE/pppm_electrode.cpp +++ b/src/ELECTRODE/pppm_electrode.cpp @@ -322,8 +322,6 @@ void PPPMElectrode::setup() double zprd_slab = zprd * slab_volfactor; volume = xprd_wire * yprd_wire * zprd_slab; - boundcorr->setup(xprd_wire, yprd_wire, zprd_slab); - delxinv = nx_pppm / xprd_wire; delyinv = ny_pppm / yprd_wire; delzinv = nz_pppm / zprd_slab; @@ -449,7 +447,6 @@ void PPPMElectrode::compute(int eflag, int vflag) // return if there are no charges - start_compute(); if (compute_vector_called && last_invert_source) { @@ -563,7 +560,7 @@ void PPPMElectrode::compute(int eflag, int vflag) } } - boundcorr->compute_corr(qsum, slab_volfactor, eflag_atom, eflag_global, energy, eatom); + boundcorr->compute_corr(qsum, eflag_atom, eflag_global, energy, eatom); compute_vector_called = false; } @@ -676,7 +673,7 @@ void PPPMElectrode::project_psi(double *vec, int sensor_grpbit) void PPPMElectrode::compute_matrix(bigint *imat, double **matrix, bool timer_flag) { - compute(1, 0); // make sure density bricks etc. are set up + compute(1, 0); // make sure density bricks etc. are set up // fft green's function k -> r (double) double *greens_real; diff --git a/src/ELECTRODE/slab_2d.cpp b/src/ELECTRODE/slab_2d.cpp index c976daea9f..dac6001f9b 100644 --- a/src/ELECTRODE/slab_2d.cpp +++ b/src/ELECTRODE/slab_2d.cpp @@ -20,6 +20,8 @@ #include "atom.h" #include "comm.h" #include "domain.h" +#include "force.h" +#include "kspace.h" #include "math_const.h" #include "memory.h" @@ -32,13 +34,14 @@ using namespace MathConst; ------------------------------------------------------------------------- */ Slab2d::Slab2d(LAMMPS *lmp) : BoundaryCorrection(lmp){}; -void Slab2d::compute_corr(double /*qsum*/, double /*slab_volfactor*/, int eflag_atom, - int eflag_global, double &energy, double *eatom) +void Slab2d::compute_corr(double /*qsum*/, int eflag_atom, int eflag_global, double &energy, + double *eatom) { double *q = atom->q; double **x = atom->x; double **f = atom->f; int nlocal = atom->nlocal; + double const g_ewald = force->kspace->g_ewald; bigint natoms = atom->natoms; std::vector z = std::vector(nlocal); @@ -53,7 +56,9 @@ void Slab2d::compute_corr(double /*qsum*/, double /*slab_volfactor*/, int eflag_ &displs.front(), MPI_DOUBLE, world); const double g_ewald_inv = 1.0 / g_ewald; - const double qscale = qqrd2e * scale; + double const scale = 1.0; + const double qscale = force->qqrd2e * scale; + double const area = domain->xprd * domain->yprd; const double ffact = qscale * MY_2PI / area; const double efact = qscale * MY_PIS / area; double e_keq0 = 0; @@ -105,6 +110,8 @@ void Slab2d::vector_corr(double *vec, int sensor_grpbit, int source_grpbit, bool &recvcounts.front(), &displs.front(), MPI_DOUBLE, world); MPI_Allgatherv(&q_local.front(), n_electrolyte_local, MPI_DOUBLE, &q_all.front(), &recvcounts.front(), &displs.front(), MPI_DOUBLE, world); + double const g_ewald = force->kspace->g_ewald; + double const area = domain->xprd * domain->yprd; double const prefac = 2 * MY_PIS / area; for (int i = 0; i < nlocal; i++) { if (!(mask[i] & sensor_grpbit)) continue; @@ -148,8 +155,10 @@ void Slab2d::matrix_corr(bigint *imat, double **matrix) MPI_Allgatherv(&nprd_local.front(), ngrouplocal, MPI_DOUBLE, &nprd_all.front(), &recvcounts.front(), &displs.front(), MPI_DOUBLE, world); + double const g_ewald = force->kspace->g_ewald; const double g_ewald_inv = 1.0 / g_ewald; const double g_ewald_sq = g_ewald * g_ewald; + double const area = domain->xprd * domain->yprd; const double prefac = 2.0 * MY_PIS / area; std::vector jmat = gather_jmat(imat); for (int i = 0; i < nlocal; i++) { diff --git a/src/ELECTRODE/slab_2d.h b/src/ELECTRODE/slab_2d.h index 53bf57329d..544602cfab 100644 --- a/src/ELECTRODE/slab_2d.h +++ b/src/ELECTRODE/slab_2d.h @@ -27,7 +27,7 @@ class Slab2d : public BoundaryCorrection { Slab2d(LAMMPS *); void vector_corr(double *, int, int, bool) override; void matrix_corr(bigint *, double **) override; - void compute_corr(double, double, int, int, double &, double *) override; + void compute_corr(double, int, int, double &, double *) override; void setup(double); }; diff --git a/src/ELECTRODE/slab_dipole.cpp b/src/ELECTRODE/slab_dipole.cpp index 639e534ac8..773d2a6bd6 100644 --- a/src/ELECTRODE/slab_dipole.cpp +++ b/src/ELECTRODE/slab_dipole.cpp @@ -20,6 +20,8 @@ #include "atom.h" #include "comm.h" #include "domain.h" +#include "force.h" +#include "kspace.h" #include "math_const.h" using namespace LAMMPS_NS; @@ -37,13 +39,14 @@ using namespace MathConst; */ SlabDipole::SlabDipole(LAMMPS *lmp) : BoundaryCorrection(lmp){}; -void SlabDipole::compute_corr(double qsum, double slab_volfactor, int eflag_atom, int eflag_global, - double &energy, double *eatom) +void SlabDipole::compute_corr(double qsum, int eflag_atom, int eflag_global, double &energy, + double *eatom) { // compute local contribution to global dipole moment + double const volume = get_volume(); double *q = atom->q; double **x = atom->x; - double zprd_slab = domain->zprd * slab_volfactor; + double zprd_slab = domain->zprd * force->kspace->slab_volfactor; int nlocal = atom->nlocal; double dipole = 0.0; for (int i = 0; i < nlocal; i++) dipole += q[i] * x[i][2]; @@ -67,7 +70,8 @@ void SlabDipole::compute_corr(double qsum, double slab_volfactor, int eflag_atom double const e_slabcorr = MY_2PI * (dipole_all * dipole_all - qsum * dipole_r2 - qsum * qsum * zprd_slab * zprd_slab / 12.0) / volume; - double const qscale = qqrd2e * scale; + double const scale = 1.0; + double const qscale = force->qqrd2e * scale; if (eflag_global) energy += qscale * e_slabcorr; // per-atom energy @@ -87,6 +91,7 @@ void SlabDipole::compute_corr(double qsum, double slab_volfactor, int eflag_atom void SlabDipole::vector_corr(double *vec, int sensor_grpbit, int source_grpbit, bool invert_source) { + double const volume = get_volume(); int const nlocal = atom->nlocal; double **x = atom->x; double *q = atom->q; @@ -104,6 +109,7 @@ void SlabDipole::vector_corr(double *vec, int sensor_grpbit, int source_grpbit, void SlabDipole::matrix_corr(bigint *imat, double **matrix) { + double const volume = get_volume(); int nlocal = atom->nlocal; double **x = atom->x; diff --git a/src/ELECTRODE/slab_dipole.h b/src/ELECTRODE/slab_dipole.h index 677f71dd50..baa5fb5a4b 100644 --- a/src/ELECTRODE/slab_dipole.h +++ b/src/ELECTRODE/slab_dipole.h @@ -27,7 +27,7 @@ class SlabDipole : public BoundaryCorrection { SlabDipole(LAMMPS *); void vector_corr(double *, int, int, bool); void matrix_corr(bigint *, double **); - void compute_corr(double, double, int, int, double &, double *); + void compute_corr(double, int, int, double &, double *); void setup(double); }; diff --git a/src/ELECTRODE/wire_dipole.cpp b/src/ELECTRODE/wire_dipole.cpp index c113693d55..fc9cbc7014 100644 --- a/src/ELECTRODE/wire_dipole.cpp +++ b/src/ELECTRODE/wire_dipole.cpp @@ -20,6 +20,7 @@ #include "atom.h" #include "comm.h" #include "domain.h" +#include "force.h" #include "math_const.h" using namespace LAMMPS_NS; @@ -34,9 +35,10 @@ using namespace MathConst; */ WireDipole::WireDipole(LAMMPS *lmp) : BoundaryCorrection(lmp){}; -void WireDipole::compute_corr(double /*qsum*/, double /*slab_volfactor*/, int eflag_atom, - int eflag_global, double &energy, double *eatom) +void WireDipole::compute_corr(double /*qsum*/, int eflag_atom, int eflag_global, double &energy, + double *eatom) { + double const volume = get_volume(); double *q = atom->q; double **x = atom->x; int nlocal = atom->nlocal; @@ -72,7 +74,8 @@ void WireDipole::compute_corr(double /*qsum*/, double /*slab_volfactor*/, int ef // compute corrections const double e_wirecorr = MY_PI * (xdipole_all * xdipole_all + ydipole_all * ydipole_all) / volume; - const double qscale = qqrd2e * scale; + double const scale = 1.0; + const double qscale = force->qqrd2e * scale; if (eflag_global) energy += qscale * e_wirecorr; // per-atom energy @@ -94,6 +97,7 @@ void WireDipole::compute_corr(double /*qsum*/, double /*slab_volfactor*/, int ef void WireDipole::vector_corr(double *vec, int sensor_grpbit, int source_grpbit, bool invert_source) { + double const volume = get_volume(); int const nlocal = atom->nlocal; double **x = atom->x; double *q = atom->q; @@ -113,6 +117,7 @@ void WireDipole::vector_corr(double *vec, int sensor_grpbit, int source_grpbit, void WireDipole::matrix_corr(bigint *imat, double **matrix) { + double const volume = get_volume(); int nlocal = atom->nlocal; double **x = atom->x; diff --git a/src/ELECTRODE/wire_dipole.h b/src/ELECTRODE/wire_dipole.h index 70f596c0e8..649913cd13 100644 --- a/src/ELECTRODE/wire_dipole.h +++ b/src/ELECTRODE/wire_dipole.h @@ -27,7 +27,7 @@ class WireDipole : public BoundaryCorrection { WireDipole(LAMMPS *); void vector_corr(double *, int, int, bool); void matrix_corr(bigint *, double **); - void compute_corr(double, double, int, int, double &, double *); + void compute_corr(double, int, int, double &, double *); void setup(double); }; diff --git a/src/INTEL/pppm_electrode_intel.cpp b/src/INTEL/pppm_electrode_intel.cpp index 6dfa5e8f64..2dfe3beaf2 100644 --- a/src/INTEL/pppm_electrode_intel.cpp +++ b/src/INTEL/pppm_electrode_intel.cpp @@ -171,7 +171,6 @@ void PPPMElectrodeIntel::setup() prd[0] /= wire_volfactor; prd[1] /= wire_volfactor; - boundcorr->setup(xprd_wire, yprd_wire, zprd_slab); } void PPPMElectrodeIntel::compute(int eflag, int vflag) @@ -287,7 +286,7 @@ void PPPMElectrodeIntel::compute(int eflag, int vflag) slabflag = 0; // bypass compute_second's slabcorr() PPPMIntel::compute_second(eflag, vflag); slabflag = tempslabflag; - boundcorr->compute_corr(qsum, slab_volfactor, eflag_atom, eflag_global, energy, eatom); + boundcorr->compute_corr(qsum, eflag_atom, eflag_global, energy, eatom); compute_vector_called = false; } From e9c2608e76ca5e90eaeb5de1f9818d27a790621b Mon Sep 17 00:00:00 2001 From: Shern Ren Tee Date: Wed, 23 Nov 2022 15:08:31 +1000 Subject: [PATCH 30/46] delete boundcorr in deallocate() --- src/ELECTRODE/pppm_electrode.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ELECTRODE/pppm_electrode.cpp b/src/ELECTRODE/pppm_electrode.cpp index 6f1fd18332..5d0fa579a3 100644 --- a/src/ELECTRODE/pppm_electrode.cpp +++ b/src/ELECTRODE/pppm_electrode.cpp @@ -97,7 +97,6 @@ PPPMElectrode::~PPPMElectrode() if (copymode) return; deallocate(); - delete boundcorr; if (peratom_allocate_flag) deallocate_peratom(); if (group_allocate_flag) deallocate_groups(); memory->destroy(part2grid); @@ -999,6 +998,7 @@ void PPPMElectrode::allocate() void PPPMElectrode::deallocate() { + if (boundcorr != nullptr) delete boundcorr; memory->destroy3d_offset(electrolyte_density_brick, nzlo_out, nylo_out, nxlo_out); memory->destroy(electrolyte_density_fft); From 41f97430e1ded7281e566d4dc91969bcb0cfda4a Mon Sep 17 00:00:00 2001 From: Shern Ren Tee Date: Wed, 23 Nov 2022 15:20:11 +1000 Subject: [PATCH 31/46] fix leaks for ewald and pppm/intel --- src/ELECTRODE/ewald_electrode.cpp | 3 ++- src/ELECTRODE/pppm_electrode.cpp | 3 ++- src/INTEL/pppm_electrode_intel.cpp | 4 ++-- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/ELECTRODE/ewald_electrode.cpp b/src/ELECTRODE/ewald_electrode.cpp index 7df08948d0..a0a081deb0 100644 --- a/src/ELECTRODE/ewald_electrode.cpp +++ b/src/ELECTRODE/ewald_electrode.cpp @@ -41,7 +41,7 @@ using namespace MathConst; /* ---------------------------------------------------------------------- */ -EwaldElectrode::EwaldElectrode(LAMMPS *lmp) : Ewald(lmp) +EwaldElectrode::EwaldElectrode(LAMMPS *lmp) : Ewald(lmp), boundcorr(nullptr) { eikr_step = -1; } @@ -89,6 +89,7 @@ void EwaldElectrode::init() }; int periodicity_2d[] = {1, 1, 0}; int periodicity_1d[] = {0, 0, 1}; + if (boundcorr != nullptr) delete boundcorr; if (slabflag == 1) { // EW3Dc dipole correction if (!equal_periodicity(periodicity_2d)) diff --git a/src/ELECTRODE/pppm_electrode.cpp b/src/ELECTRODE/pppm_electrode.cpp index 5d0fa579a3..b43c804eb2 100644 --- a/src/ELECTRODE/pppm_electrode.cpp +++ b/src/ELECTRODE/pppm_electrode.cpp @@ -77,7 +77,8 @@ static const char cite_pppm_electrode[] = /* ---------------------------------------------------------------------- */ PPPMElectrode::PPPMElectrode(LAMMPS *lmp) : - PPPM(lmp), electrolyte_density_brick(nullptr), electrolyte_density_fft(nullptr) + PPPM(lmp), electrolyte_density_brick(nullptr), electrolyte_density_fft(nullptr), + boundcorr(nullptr) { if (lmp->citeme) lmp->citeme->add(cite_pppm_electrode); diff --git a/src/INTEL/pppm_electrode_intel.cpp b/src/INTEL/pppm_electrode_intel.cpp index 2dfe3beaf2..0927ebcc42 100644 --- a/src/INTEL/pppm_electrode_intel.cpp +++ b/src/INTEL/pppm_electrode_intel.cpp @@ -80,7 +80,7 @@ static const char cite_pppm_electrode[] = PPPMElectrodeIntel::PPPMElectrodeIntel(LAMMPS *lmp) : PPPMIntel(lmp), ElectrodeKSpace(), electrolyte_density_brick(nullptr), - electrolyte_density_fft(nullptr) + electrolyte_density_fft(nullptr), boundcorr(nullptr) { if (lmp->citeme) lmp->citeme->add(cite_pppm_electrode); @@ -98,7 +98,6 @@ PPPMElectrodeIntel::~PPPMElectrodeIntel() memory->destroy(electrolyte_density_fft); if ((differentiation_flag != 1) && !peratom_allocate_flag) memory->destroy3d_offset(u_brick, nzlo_out, nylo_out, nxlo_out); - delete boundcorr; } void PPPMElectrodeIntel::init() @@ -1148,6 +1147,7 @@ void PPPMElectrodeIntel::allocate_peratom() void PPPMElectrodeIntel::deallocate() { + if (boundcorr != nullptr) delete boundcorr; // duplicated to always deallocate u_brick memory->destroy3d_offset(density_brick, nzlo_out, nylo_out, nxlo_out); memory->destroy3d_offset(u_brick, nzlo_out, nylo_out, nxlo_out); From 2efd485bd0739e5104a10288de691907c41c8b7c Mon Sep 17 00:00:00 2001 From: Shern Ren Tee Date: Wed, 23 Nov 2022 15:42:44 +1000 Subject: [PATCH 32/46] update Intel buffers for calculations --- src/ELECTRODE/fix_electrode_conp.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/ELECTRODE/fix_electrode_conp.cpp b/src/ELECTRODE/fix_electrode_conp.cpp index 6ffec41b21..68ed58cbe5 100644 --- a/src/ELECTRODE/fix_electrode_conp.cpp +++ b/src/ELECTRODE/fix_electrode_conp.cpp @@ -793,6 +793,7 @@ void FixElectrodeConp::update_charges() double *q = atom->q; gather_list_iele(); pre_update(); + accel_interface->intel_pack_buffers(); // update buffers for pppmintel to compute potential auto q_local = std::vector(nlocalele, 0.); if (algo == Algo::MATRIX_INV) { std::fill(sb_charges.begin(), sb_charges.end(), 0.); @@ -886,6 +887,7 @@ void FixElectrodeConp::set_charges(std::vector q_local) double *q = atom->q; for (int i = 0; i < nlocalele; i++) q[atom->map(taglist_local[i])] = q_local[i]; comm->forward_comm(this); + accel_interface->intel_pack_buffers(); } /* ---------------------------------------------------------------------- */ From 32a3fc21bcc2c2b4d8e95f05761735971231e4c6 Mon Sep 17 00:00:00 2001 From: Shern Ren Tee Date: Tue, 22 Nov 2022 14:39:25 +1000 Subject: [PATCH 33/46] enable symm for conq and thermo --- examples/PACKAGES/electrode/graph-il/in.conq | 6 ++-- .../PACKAGES/electrode/graph-il/in.thermo | 2 +- src/ELECTRODE/fix_electrode_conq.cpp | 20 ++++++----- src/ELECTRODE/fix_electrode_thermo.cpp | 34 +++++++++---------- 4 files changed, 33 insertions(+), 29 deletions(-) diff --git a/examples/PACKAGES/electrode/graph-il/in.conq b/examples/PACKAGES/electrode/graph-il/in.conq index 9706ba3b9b..7f315a4b12 100644 --- a/examples/PACKAGES/electrode/graph-il/in.conq +++ b/examples/PACKAGES/electrode/graph-il/in.conq @@ -5,8 +5,10 @@ boundary p p f # slab calculation include settings.mod # styles, groups, computes and fixes kspace_modify slab 3.0 -fix conq bot electrode/conq -1.0 1.979 couple top 1.0 etypes on # conq doesn't take symm option +fix conq bot electrode/conq -1.0 1.979 couple top 1.0 etypes on # symm on +variable dv equal f_conq[2]-f_conq[1] +# symm on and off give different electrode potentials, but identical potential difference thermo 50 -thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop f_conq[1] f_conq[2] +thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop f_conq[1] f_conq[2] v_dv run 500 diff --git a/examples/PACKAGES/electrode/graph-il/in.thermo b/examples/PACKAGES/electrode/graph-il/in.thermo index 253dafc138..eed574bff6 100644 --- a/examples/PACKAGES/electrode/graph-il/in.thermo +++ b/examples/PACKAGES/electrode/graph-il/in.thermo @@ -6,7 +6,7 @@ include settings.mod # styles, groups, computes and fixes kspace_modify slab 3.0 unfix nvt # remove NVT thermostat included from "settings.mod" -fix conpthermo bot electrode/thermo -1.0 1.979 couple top 1.0 etypes on temp 500 100 7 # temp tau rng +fix conpthermo bot electrode/thermo -1.0 1.979 couple top 1.0 etypes on temp 500 100 7 symm on # temp tau rng # to compare to regular constant potential, switch previous line to this: #fix conp bot electrode/conp -1.0 1.979 couple top 1.0 etypes on symm on fix nve electrolyte nve diff --git a/src/ELECTRODE/fix_electrode_conq.cpp b/src/ELECTRODE/fix_electrode_conq.cpp index bad1500edf..ce2ba605f7 100644 --- a/src/ELECTRODE/fix_electrode_conq.cpp +++ b/src/ELECTRODE/fix_electrode_conq.cpp @@ -31,19 +31,25 @@ FixElectrodeConq::FixElectrodeConq(LAMMPS *lmp, int narg, char **arg) : // copy const-style values across because update_psi will change group_psi group_q = group_psi; - if (symm) error->all(FLERR, "Keyword symm on not allowed in electrode/conq"); + if (symm) { + if (num_of_groups == 1) + error->all(FLERR, "Keyword symm on not allowed in electrode/conq with only one electrode"); + error->warning(FLERR, + "Fix electrode/conq with keyword symm ignores the charge setting for the last " + "electrode listed"); + } } void FixElectrodeConq::update_psi() { - for (int g = 0; g < num_of_groups; g++) { + int const numsymm = num_of_groups - ((symm) ? 1 : 0); + for (int g = 0; g < numsymm; g++) { if (group_psi_var_styles[g] == VarStyle::CONST) continue; group_q[g] = input->variable->compute_equal(group_psi_var_ids[g]); } if (algo == Algo::MATRIX_INV) { - std::vector group_remainder_q(num_of_groups); - for (int g = 0; g < num_of_groups; g++) { group_remainder_q[g] = group_q[g] - sb_charges[g]; } - + std::vector group_remainder_q(num_of_groups, 0.); + for (int g = 0; g < numsymm; g++) { group_remainder_q[g] = group_q[g] - sb_charges[g]; } for (int g = 0; g < num_of_groups; g++) { double vtmp = 0; for (int h = 0; h < num_of_groups; h++) { @@ -98,9 +104,7 @@ void FixElectrodeConq::recompute_potential(std::vector b, std::vector(num_of_groups, 0); - for (int i = 0; i < n; i++) { - psi_sums[iele_to_group_local[i]] += (a[i] + b[i]) / evscale; - } + for (int i = 0; i < n; i++) { psi_sums[iele_to_group_local[i]] += (a[i] + b[i]) / evscale; } MPI_Allreduce(MPI_IN_PLACE, &psi_sums.front(), num_of_groups, MPI_DOUBLE, MPI_SUM, world); for (int g = 0; g < num_of_groups; g++) group_psi[g] = psi_sums[g] / group->count(groups[g]); } diff --git a/src/ELECTRODE/fix_electrode_thermo.cpp b/src/ELECTRODE/fix_electrode_thermo.cpp index a1ad9897bd..3bdf446f53 100644 --- a/src/ELECTRODE/fix_electrode_thermo.cpp +++ b/src/ELECTRODE/fix_electrode_thermo.cpp @@ -42,7 +42,6 @@ FixElectrodeThermo::FixElectrodeThermo(LAMMPS *lmp, int narg, char **arg) : error->all(FLERR, "Number of electrodes != two in electrode/thermo"); if (group_psi_var_styles[0] != group_psi_var_styles[1]) error->all(FLERR, "Potentials in electrode/thermo must have same style"); - if (symm) error->all(FLERR, "Keyword symm on not allowed in electrode/thermo"); if (algo != Algo::MATRIX_INV) error->all(FLERR, "Algorithm not allowed in electrode/thermo"); if (thermo_time < SMALL) error->all(FLERR, "Keyword temp not set or zero in electrode/thermo"); @@ -62,9 +61,12 @@ FixElectrodeThermo::~FixElectrodeThermo() void FixElectrodeThermo::compute_macro_matrices() { FixElectrodeConp::compute_macro_matrices(); - vac_cap = (macro_capacitance[0][0] * macro_capacitance[1][1] - - macro_capacitance[0][1] * macro_capacitance[0][1]) / - (macro_capacitance[0][0] + macro_capacitance[1][1] + 2 * macro_capacitance[0][1]); + if (symm) + vac_cap = macro_capacitance[0][0]; + else + vac_cap = (macro_capacitance[0][0] * macro_capacitance[1][1] - + macro_capacitance[0][1] * macro_capacitance[0][1]) / + (macro_capacitance[0][0] + macro_capacitance[1][1] + 2 * macro_capacitance[0][1]); } /* ----------------------------------------------------------------------- */ @@ -91,14 +93,11 @@ void FixElectrodeThermo::update_psi() double const dt = update->dt; // group_q_eff is charge that corresponds to potential after previous step - double group_q_eff[NUM_GROUPS] = {0., 0.}; - for (int g = 0; g < NUM_GROUPS; g++) { group_q_eff[g] = group_q_old[g] - sb_charges[g]; } - double group_psi_old[NUM_GROUPS] = {0., 0.}; - for (int g = 0; g < NUM_GROUPS; g++) { - double vtmp = 0; - for (int h = 0; h < NUM_GROUPS; h++) { vtmp += macro_elastance[g][h] * group_q_eff[h]; } - group_psi_old[g] = vtmp; - } + double const group_q_eff[NUM_GROUPS] = {group_q_old[0] - sb_charges[0], + (symm) ? 0. : group_q_old[1] - sb_charges[1]}; + double const group_psi_old[NUM_GROUPS] = { + macro_elastance[0][0] * group_q_eff[0] + macro_elastance[0][1] * group_q_eff[1], + macro_elastance[1][0] * group_q_eff[0] + macro_elastance[1][1] * group_q_eff[1]}; double const delta_psi = group_psi_old[1] - group_psi_old[0]; // target potential difference from input parameters @@ -113,11 +112,10 @@ void FixElectrodeThermo::update_psi() thermo_random->gaussian(); double const group_remainder_q[NUM_GROUPS] = {-delta_charge - sb_charges[0], - delta_charge - sb_charges[1]}; + (symm) ? 0. : delta_charge - sb_charges[1]}; - for (int g = 0; g < NUM_GROUPS; g++) { - double vtmp = 0; - for (int h = 0; h < NUM_GROUPS; h++) { vtmp += macro_elastance[g][h] * group_remainder_q[h]; } - group_psi[g] = vtmp; - } + group_psi[0] = + macro_elastance[0][0] * group_remainder_q[0] + macro_elastance[0][1] * group_remainder_q[1]; + group_psi[1] = + macro_elastance[1][0] * group_remainder_q[0] + macro_elastance[1][1] * group_remainder_q[1]; } From e58b71b0c9c9f86ac4e922eeee75d25f5aab14e6 Mon Sep 17 00:00:00 2001 From: Shern Ren Tee Date: Tue, 22 Nov 2022 14:43:18 +1000 Subject: [PATCH 34/46] issue warnings from only proc 0 --- src/ELECTRODE/fix_electrode_conp.cpp | 6 +++--- src/ELECTRODE/fix_electrode_conq.cpp | 7 ++++--- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/ELECTRODE/fix_electrode_conp.cpp b/src/ELECTRODE/fix_electrode_conp.cpp index 68ed58cbe5..73c029a61f 100644 --- a/src/ELECTRODE/fix_electrode_conp.cpp +++ b/src/ELECTRODE/fix_electrode_conp.cpp @@ -422,7 +422,7 @@ void FixElectrodeConp::post_constructor() input->variable->set(fmt::format("{} equal f_{}[{}]", var_vtop, fixname, 1 + top_group)); input->variable->set(fmt::format("{} equal (v_{}-v_{})/lz", var_efield, var_vbot, var_vtop)); // check for other efields and warn if found - if (modify->get_fix_by_style("efield").size() > 0) + if (modify->get_fix_by_style("efield").size() > 0 && comm->me == 0) error->warning(FLERR, "Other efield fixes found -- please make sure this is intended!"); // call fix command: // fix [varstem]_efield all efield 0.0 0.0 [var_vdiff]/lz @@ -611,7 +611,7 @@ void FixElectrodeConp::invert() void FixElectrodeConp::symmetrize() { // S matrix to enforce charge neutrality constraint - if (read_inv) + if (read_inv && comm->me == 0) error->warning(FLERR, "Symmetrizing matrix from file. Make sure the provided matrix has not been " "symmetrized yet."); @@ -690,7 +690,7 @@ void FixElectrodeConp::setup_pre_exchange() // create_taglist // if memory_usage > 0.5 GiB, warn with expected usage double mem_needed = memory_usage(); mem_needed /= (1024 * 1024 * 1024); // convert to GiB - if (mem_needed > 0.5) + if (mem_needed > 0.5 && comm->me == 0) error->warning(FLERR, fmt::format("Please ensure there is sufficient memory for fix electrode " "(anticipated usage is at least {:.1f} GiB per proc)", diff --git a/src/ELECTRODE/fix_electrode_conq.cpp b/src/ELECTRODE/fix_electrode_conq.cpp index ce2ba605f7..d3a1da2e62 100644 --- a/src/ELECTRODE/fix_electrode_conq.cpp +++ b/src/ELECTRODE/fix_electrode_conq.cpp @@ -34,9 +34,10 @@ FixElectrodeConq::FixElectrodeConq(LAMMPS *lmp, int narg, char **arg) : if (symm) { if (num_of_groups == 1) error->all(FLERR, "Keyword symm on not allowed in electrode/conq with only one electrode"); - error->warning(FLERR, - "Fix electrode/conq with keyword symm ignores the charge setting for the last " - "electrode listed"); + if (comm->me == 0) + error->warning(FLERR, + "Fix electrode/conq with keyword symm ignores the charge setting for the last " + "electrode listed"); } } From 9958c9dfd796561ee7581db134f7c0fd9843e9dd Mon Sep 17 00:00:00 2001 From: Shern Ren Tee Date: Tue, 22 Nov 2022 14:56:55 +1000 Subject: [PATCH 35/46] update documentation --- doc/src/fix_electrode_conp.rst | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/doc/src/fix_electrode_conp.rst b/doc/src/fix_electrode_conp.rst index 2b858f9da3..7c3c8e72fc 100644 --- a/doc/src/fix_electrode_conp.rst +++ b/doc/src/fix_electrode_conp.rst @@ -139,17 +139,22 @@ For both *cg* methods, the command must specify the conjugate gradient tolerance. *fix electrode/thermo* currently only supports the *mat_inv* algorithm. -For *fix electrode/conp*, the keyword *symm* can be set *on* (or *off*) to turn -on (or turn off) the constraint requiring total electrode charge to be zero. -With *symm off*, the potentials specified are absolute potentials, but the -charge configurations satisfying them may add up to an overall non-zero, varying +The keyword *symm* can be set *on* (or *off*) to turn on (or turn off) +the capacitance matrix constraint that sets total electrode charge to be zero. +This has slightly different effects for each *fix electrode* variant. +For *fix electrode/conp*, with *symm off*, the potentials specified are absolute potentials, +but the charge configurations satisfying them may add up to an overall non-zero, varying charge for the electrodes (and thus the simulation box). With *symm on*, the -total charge over all electrode groups is constrained to zero. +total charge over all electrode groups is constrained to zero, and +potential differences rather than absolute potentials are the physically relevant quantities. -The *symm* keyword is not allowed for *electrode/conq*, for which overall -neutrality is explicitly obeyed or violated by the user input, and for -*electrode/thermo*, for which overall neutrality is always automatically -imposed. +For *fix electrode/conq*, with *symm off*, overall neutrality is explicitly obeyed or +violated by the user input (which is not checked!). With *symm on*, overall neutrality +is ensured by ignoring the user-input charge for the last listed electrode (instead, +its charge will always be minus the total sum of all other electrode charges). For +*fix electrode/thermo*, overall neutrality is always automatically imposed for any setting +of *symm*, but *symm on* allows finite-field mode (*ffield on*, described below) +for faster simulations. For all three fixes, any potential (or charge for *conq*) can be specified as an equal-style variable prefixed with "v\_". For example, the following code will @@ -213,7 +218,8 @@ by cell length. The internal commands use variable so that the electric field will correctly vary with changing potentials in the correct way (for example with equal-style potential difference or with *fix electrode/conq*). This keyword requires two electrodes and will issue an error with any other number of -electrodes. +electrodes. This keyword requires electroneutrality to be imposed (*symm on*) +and will issue an error otherwise. For all versions of the fix, the keyword-value *etypes on* enables type-based optimized neighbor lists. With this feature enabled, LAMMPS provides the fix From e732fcacf3a31b413b714799fd4039d71ad707a3 Mon Sep 17 00:00:00 2001 From: Shern Ren Tee Date: Tue, 22 Nov 2022 14:57:52 +1000 Subject: [PATCH 36/46] include comm in electrode/conq --- src/ELECTRODE/fix_electrode_conq.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/ELECTRODE/fix_electrode_conq.cpp b/src/ELECTRODE/fix_electrode_conq.cpp index d3a1da2e62..bfb70beaba 100644 --- a/src/ELECTRODE/fix_electrode_conq.cpp +++ b/src/ELECTRODE/fix_electrode_conq.cpp @@ -17,6 +17,7 @@ #include "fix_electrode_conq.h" +#include "comm.h" #include "error.h" #include "fix_electrode_conp.h" #include "group.h" From 4c65d0c50e9ed97bb721b23175f442bf5c1c2e40 Mon Sep 17 00:00:00 2001 From: Shern Ren Tee Date: Mon, 28 Nov 2022 09:56:50 +1000 Subject: [PATCH 37/46] ignore last q for fix/electrode/conq with symm on and cg algos --- src/ELECTRODE/fix_electrode_conq.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/ELECTRODE/fix_electrode_conq.cpp b/src/ELECTRODE/fix_electrode_conq.cpp index bfb70beaba..40cb0082f6 100644 --- a/src/ELECTRODE/fix_electrode_conq.cpp +++ b/src/ELECTRODE/fix_electrode_conq.cpp @@ -39,15 +39,22 @@ FixElectrodeConq::FixElectrodeConq(LAMMPS *lmp, int narg, char **arg) : error->warning(FLERR, "Fix electrode/conq with keyword symm ignores the charge setting for the last " "electrode listed"); + if (algo != Algo::MATRIX_INV) { + double last_q = 0.; + for (int g = 0; g < num_of_groups - 1; g++) last_q -= group_q[g]; + group_q.back() = last_q; // needed for CG algos + } } } void FixElectrodeConq::update_psi() { int const numsymm = num_of_groups - ((symm) ? 1 : 0); + bool symm_update_back = false; for (int g = 0; g < numsymm; g++) { if (group_psi_var_styles[g] == VarStyle::CONST) continue; group_q[g] = input->variable->compute_equal(group_psi_var_ids[g]); + symm_update_back = true; } if (algo == Algo::MATRIX_INV) { std::vector group_remainder_q(num_of_groups, 0.); @@ -60,6 +67,11 @@ void FixElectrodeConq::update_psi() group_psi[g] = vtmp; } } else { + if (symm_update_back) { // needed for CG algos + double last_q = 0.; + for (int g = 0; g < num_of_groups - 1; g++) last_q -= group_q[g]; + group_q.back() = last_q; + } for (double &g : group_psi) g = 0; } } From 2e8fd7e31604c580566de89d7944f2e5d07f547c Mon Sep 17 00:00:00 2001 From: Shern Ren Tee Date: Mon, 28 Nov 2022 10:14:00 +1000 Subject: [PATCH 38/46] respect all q for fix/electrode/conq with symm off --- src/ELECTRODE/fix_electrode_conq.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ELECTRODE/fix_electrode_conq.cpp b/src/ELECTRODE/fix_electrode_conq.cpp index 40cb0082f6..0d3d1d2aaf 100644 --- a/src/ELECTRODE/fix_electrode_conq.cpp +++ b/src/ELECTRODE/fix_electrode_conq.cpp @@ -67,7 +67,7 @@ void FixElectrodeConq::update_psi() group_psi[g] = vtmp; } } else { - if (symm_update_back) { // needed for CG algos + if (symm && symm_update_back) { // needed for CG algos double last_q = 0.; for (int g = 0; g < num_of_groups - 1; g++) last_q -= group_q[g]; group_q.back() = last_q; From c7300f47b152be7941e38e18944772bbcaf3e998 Mon Sep 17 00:00:00 2001 From: srtee Date: Thu, 1 Dec 2022 11:17:49 +1000 Subject: [PATCH 39/46] replace logs for graph-il --- ...g++.1 => log.1Dec2022.graph-il-conp.g++.1} | 105 ++++++---- ...g++.4 => log.1Dec2022.graph-il-conp.g++.4} | 105 ++++++---- .../graph-il/log.1Dec2022.graph-il-conq.g++.1 | 186 +++++++++++++++++ .../graph-il/log.1Dec2022.graph-il-conq.g++.4 | 187 ++++++++++++++++++ ...++.1 => log.1Dec2022.graph-il-conq2.g++.1} | 103 ++++++---- ...++.4 => log.1Dec2022.graph-il-conq2.g++.4} | 105 ++++++---- ...+.1 => log.1Dec2022.graph-il-etypes.g++.1} | 101 +++++++--- ...+.4 => log.1Dec2022.graph-il-etypes.g++.4} | 103 ++++++---- ...+.1 => log.1Dec2022.graph-il-ffield.g++.1} | 103 ++++++---- ...+.4 => log.1Dec2022.graph-il-ffield.g++.4} | 105 ++++++---- ...g++.1 => log.1Dec2022.graph-il-ramp.g++.1} | 103 ++++++---- ...g++.4 => log.1Dec2022.graph-il-ramp.g++.4} | 105 ++++++---- ...+.1 => log.1Dec2022.graph-il-thermo.g++.1} | 105 ++++++---- ...+.4 => log.1Dec2022.graph-il-thermo.g++.4} | 105 ++++++---- .../log.27May2022.graph-il-conq.g++.1 | 147 -------------- .../log.27May2022.graph-il-conq.g++.4 | 148 -------------- 16 files changed, 1219 insertions(+), 697 deletions(-) rename examples/PACKAGES/electrode/graph-il/{log.26Apr2022.graph-il-conp.g++.1 => log.1Dec2022.graph-il-conp.g++.1} (51%) rename examples/PACKAGES/electrode/graph-il/{log.26Apr2022.graph-il-conp.g++.4 => log.1Dec2022.graph-il-conp.g++.4} (51%) create mode 100644 examples/PACKAGES/electrode/graph-il/log.1Dec2022.graph-il-conq.g++.1 create mode 100644 examples/PACKAGES/electrode/graph-il/log.1Dec2022.graph-il-conq.g++.4 rename examples/PACKAGES/electrode/graph-il/{log.27May2022.graph-il-conq2.g++.1 => log.1Dec2022.graph-il-conq2.g++.1} (54%) rename examples/PACKAGES/electrode/graph-il/{log.27May2022.graph-il-conq2.g++.4 => log.1Dec2022.graph-il-conq2.g++.4} (54%) rename examples/PACKAGES/electrode/graph-il/{log.26Apr2022.graph-il-etypes.g++.1 => log.1Dec2022.graph-il-etypes.g++.1} (54%) rename examples/PACKAGES/electrode/graph-il/{log.26Apr2022.graph-il-etypes.g++.4 => log.1Dec2022.graph-il-etypes.g++.4} (54%) rename examples/PACKAGES/electrode/graph-il/{log.26Apr2022.graph-il-ffield.g++.1 => log.1Dec2022.graph-il-ffield.g++.1} (54%) rename examples/PACKAGES/electrode/graph-il/{log.26Apr2022.graph-il-ffield.g++.4 => log.1Dec2022.graph-il-ffield.g++.4} (54%) rename examples/PACKAGES/electrode/graph-il/{log.26Apr2022.graph-il-ramp.g++.1 => log.1Dec2022.graph-il-ramp.g++.1} (52%) rename examples/PACKAGES/electrode/graph-il/{log.26Apr2022.graph-il-ramp.g++.4 => log.1Dec2022.graph-il-ramp.g++.4} (52%) rename examples/PACKAGES/electrode/graph-il/{log.26Apr2022.graph-il-thermo.g++.1 => log.1Dec2022.graph-il-thermo.g++.1} (55%) rename examples/PACKAGES/electrode/graph-il/{log.26Apr2022.graph-il-thermo.g++.4 => log.1Dec2022.graph-il-thermo.g++.4} (55%) delete mode 100644 examples/PACKAGES/electrode/graph-il/log.27May2022.graph-il-conq.g++.1 delete mode 100644 examples/PACKAGES/electrode/graph-il/log.27May2022.graph-il-conq.g++.4 diff --git a/examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-conp.g++.1 b/examples/PACKAGES/electrode/graph-il/log.1Dec2022.graph-il-conp.g++.1 similarity index 51% rename from examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-conp.g++.1 rename to examples/PACKAGES/electrode/graph-il/log.1Dec2022.graph-il-conp.g++.1 index 086f109958..c5cd2579af 100644 --- a/examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-conp.g++.1 +++ b/examples/PACKAGES/electrode/graph-il/log.1Dec2022.graph-il-conp.g++.1 @@ -1,4 +1,4 @@ -LAMMPS (24 Mar 2022) +LAMMPS (3 Nov 2022) # electrodes with constant potential # for graphene-ionic liquid supercapacitor @@ -37,13 +37,20 @@ Finding 1-2 1-3 1-4 neighbors ... 1 = max # of 1-3 neighbors 1 = max # of 1-4 neighbors 2 = max # of special neighbors - special bonds CPU = 0.001 seconds - read_data CPU = 0.036 seconds + special bonds CPU = 0.004 seconds + read_data CPU = 0.027 seconds -group bot molecule 641 -416 atoms in group bot -group top molecule 642 +# replicate 4 4 1 # test different sys sizes + +variable zpos atom "z > 0" +group zpos variable zpos +1891 atoms in group zpos +group ele type 5 +832 atoms in group ele +group top intersect ele zpos 416 atoms in group top +group bot subtract ele top +416 atoms in group bot group bmi type 1 2 3 960 atoms in group bmi @@ -52,24 +59,54 @@ group electrolyte type 1 2 3 4 fix nvt electrolyte nvt temp 500.0 500.0 100 fix shake bmi shake 1e-4 20 0 b 1 2 a 1 +Finding SHAKE clusters ... 0 = # of size 2 clusters 0 = # of size 3 clusters 0 = # of size 4 clusters 320 = # of frozen angles - find clusters CPU = 0.001 seconds + find clusters CPU = 0.005 seconds variable q atom q compute qtop top reduce sum v_q compute qbot bot reduce sum v_q compute ctemp electrolyte temp -kspace_modify slab 3.0 +kspace_modify slab 3.0 # amat twostep -fix conp bot electrode/conp -1.0 1.979 couple top 1.0 symm on +fix conp bot electrode/conp -1.0 1.979 couple top 1.0 symm on #algo mat_inv 832 atoms in group conp_group thermo 50 thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop run 500 + +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +Your simulation uses code contributions which should be cited: + +- kspace_style pppm/electrode command: + +@article{Ahrens2021, +author = {Ahrens-Iwers, Ludwig J.V. and Mei{\ss}ner, Robert H.}, +doi = {10.1063/5.0063381}, +title = {{Constant potential simulations on a mesh}}, +journal = {Journal of Chemical Physics}, +year = {2021} +volume = {155}, +pages = {104104}, +} +- fix electrode command: + +@article{Ahrens2022 +author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.}, +doi = {10.1063/5.0099239}, +title = {{ELECTRODE: An electrochemistry package for LAMMPS}}, +journal = {The Journal of Chemical Physics}, +year = {2022} +volume = {157}, +pages = {084801}, +} +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + PPPM/electrode initialization ... using 12-bit tables for long-range coulomb (src/kspace.cpp:342) G vector (1/distance) = 0.20904498 @@ -79,9 +116,9 @@ PPPM/electrode initialization ... estimated relative force accuracy = 1.1149519e-07 using double precision MKL FFT 3d grid and FFT values/proc = 307242 204800 - generated 10 of 10 mixed pair_coeff terms from geometric mixing rule +Generated 15 of 15 mixed pair_coeff terms from geometric mixing rule Neighbor list info ... - update every 1 steps, delay 10 steps, check yes + update: every = 1 steps, delay = 0 steps, check = yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 18 ghost atom cutoff = 18 @@ -97,35 +134,35 @@ Neighbor list info ... pair build: copy stencil: none bin: none -Per MPI rank memory allocation (min/avg/max) = 57.15 | 57.15 | 57.15 Mbytes +Per MPI rank memory allocation (min/avg/max) = 57.19 | 57.19 | 57.19 Mbytes Step Temp c_ctemp E_pair TotEng c_qbot c_qtop - 0 0 0 25137191 25137191 0.0085142912 -0.0085142912 + 0 0 0 25137190 25137190 0.0085142912 -0.0085142912 50 17.83755 64.26354 25137031 25137214 0.0045923944 -0.0045923944 - 100 48.393682 174.34846 25136774 25137273 -0.009514517 0.009514517 - 150 70.421272 253.7075 25136655 25137380 -0.033017005 0.033017005 - 200 82.204844 296.16031 25136667 25137514 -0.063668175 0.063668175 - 250 87.54223 315.38937 25136757 25137659 -0.096776257 0.096776257 - 300 91.704746 330.38571 25136865 25137810 -0.1283784 0.1283784 - 350 100.36017 361.56871 25136934 25137968 -0.15649799 0.15649799 - 400 111.37575 401.25467 25136986 25138133 -0.18065435 0.18065435 - 450 121.79848 438.80476 25137043 25138298 -0.19979365 0.19979365 - 500 126.95916 457.39718 25137145 25138453 -0.21037535 0.21037535 -Loop time of 103.439 on 1 procs for 500 steps with 3776 atoms + 100 48.393682 174.34846 25136775 25137273 -0.009514517 0.009514517 + 150 70.421272 253.7075 25136657 25137382 -0.033017005 0.033017005 + 200 82.204844 296.16031 25136670 25137517 -0.063668175 0.063668175 + 250 87.54223 315.38937 25136762 25137663 -0.096776257 0.096776257 + 300 91.704746 330.38571 25136871 25137816 -0.1283784 0.1283784 + 350 100.36017 361.56871 25136941 25137975 -0.15649799 0.15649799 + 400 111.37575 401.25467 25136994 25138141 -0.18065435 0.18065435 + 450 121.79848 438.80476 25137052 25138307 -0.19979365 0.19979365 + 500 126.95916 457.39718 25137155 25138463 -0.21037535 0.21037535 +Loop time of 91.5523 on 1 procs for 500 steps with 3776 atoms -Performance: 0.418 ns/day, 57.466 hours/ns, 4.834 timesteps/s -393.6% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 0.472 ns/day, 50.862 hours/ns, 5.461 timesteps/s, 20.622 katom-step/s +100.0% CPU use with 1 MPI tasks x no OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 19.309 | 19.309 | 19.309 | 0.0 | 18.67 -Bond | 0.0018867 | 0.0018867 | 0.0018867 | 0.0 | 0.00 -Kspace | 23.047 | 23.047 | 23.047 | 0.0 | 22.28 -Neigh | 0.25707 | 0.25707 | 0.25707 | 0.0 | 0.25 -Comm | 0.070734 | 0.070734 | 0.070734 | 0.0 | 0.07 -Output | 0.0023085 | 0.0023085 | 0.0023085 | 0.0 | 0.00 -Modify | 60.73 | 60.73 | 60.73 | 0.0 | 58.71 -Other | | 0.01994 | | | 0.02 +Pair | 18.906 | 18.906 | 18.906 | 0.0 | 20.65 +Bond | 0.0012922 | 0.0012922 | 0.0012922 | 0.0 | 0.00 +Kspace | 34.476 | 34.476 | 34.476 | 0.0 | 37.66 +Neigh | 0.26641 | 0.26641 | 0.26641 | 0.0 | 0.29 +Comm | 0.069067 | 0.069067 | 0.069067 | 0.0 | 0.08 +Output | 0.0021466 | 0.0021466 | 0.0021466 | 0.0 | 0.00 +Modify | 37.805 | 37.805 | 37.805 | 0.0 | 41.29 +Other | | 0.0271 | | | 0.03 Nlocal: 3776 ave 3776 max 3776 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -139,4 +176,4 @@ Ave neighs/atom = 457.18432 Ave special neighs/atom = 0.50847458 Neighbor list builds = 7 Dangerous builds = 0 -Total wall time: 0:03:10 +Total wall time: 0:01:48 diff --git a/examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-conp.g++.4 b/examples/PACKAGES/electrode/graph-il/log.1Dec2022.graph-il-conp.g++.4 similarity index 51% rename from examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-conp.g++.4 rename to examples/PACKAGES/electrode/graph-il/log.1Dec2022.graph-il-conp.g++.4 index f74768b08d..ba941705aa 100644 --- a/examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-conp.g++.4 +++ b/examples/PACKAGES/electrode/graph-il/log.1Dec2022.graph-il-conp.g++.4 @@ -1,4 +1,4 @@ -LAMMPS (24 Mar 2022) +LAMMPS (3 Nov 2022) # electrodes with constant potential # for graphene-ionic liquid supercapacitor @@ -38,13 +38,20 @@ Finding 1-2 1-3 1-4 neighbors ... 1 = max # of 1-3 neighbors 1 = max # of 1-4 neighbors 2 = max # of special neighbors - special bonds CPU = 0.001 seconds - read_data CPU = 0.014 seconds + special bonds CPU = 0.003 seconds + read_data CPU = 0.038 seconds -group bot molecule 641 -416 atoms in group bot -group top molecule 642 +# replicate 4 4 1 # test different sys sizes + +variable zpos atom "z > 0" +group zpos variable zpos +1891 atoms in group zpos +group ele type 5 +832 atoms in group ele +group top intersect ele zpos 416 atoms in group top +group bot subtract ele top +416 atoms in group bot group bmi type 1 2 3 960 atoms in group bmi @@ -53,24 +60,54 @@ group electrolyte type 1 2 3 4 fix nvt electrolyte nvt temp 500.0 500.0 100 fix shake bmi shake 1e-4 20 0 b 1 2 a 1 +Finding SHAKE clusters ... 0 = # of size 2 clusters 0 = # of size 3 clusters 0 = # of size 4 clusters 320 = # of frozen angles - find clusters CPU = 0.001 seconds + find clusters CPU = 0.003 seconds variable q atom q compute qtop top reduce sum v_q compute qbot bot reduce sum v_q compute ctemp electrolyte temp -kspace_modify slab 3.0 +kspace_modify slab 3.0 # amat twostep -fix conp bot electrode/conp -1.0 1.979 couple top 1.0 symm on +fix conp bot electrode/conp -1.0 1.979 couple top 1.0 symm on #algo mat_inv 832 atoms in group conp_group thermo 50 thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop run 500 + +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +Your simulation uses code contributions which should be cited: + +- kspace_style pppm/electrode command: + +@article{Ahrens2021, +author = {Ahrens-Iwers, Ludwig J.V. and Mei{\ss}ner, Robert H.}, +doi = {10.1063/5.0063381}, +title = {{Constant potential simulations on a mesh}}, +journal = {Journal of Chemical Physics}, +year = {2021} +volume = {155}, +pages = {104104}, +} +- fix electrode command: + +@article{Ahrens2022 +author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.}, +doi = {10.1063/5.0099239}, +title = {{ELECTRODE: An electrochemistry package for LAMMPS}}, +journal = {The Journal of Chemical Physics}, +year = {2022} +volume = {157}, +pages = {084801}, +} +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + PPPM/electrode initialization ... using 12-bit tables for long-range coulomb (src/kspace.cpp:342) G vector (1/distance) = 0.20904498 @@ -80,9 +117,9 @@ PPPM/electrode initialization ... estimated relative force accuracy = 1.1149519e-07 using double precision MKL FFT 3d grid and FFT values/proc = 151593 85504 - generated 10 of 10 mixed pair_coeff terms from geometric mixing rule +Generated 15 of 15 mixed pair_coeff terms from geometric mixing rule Neighbor list info ... - update every 1 steps, delay 10 steps, check yes + update: every = 1 steps, delay = 0 steps, check = yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 18 ghost atom cutoff = 18 @@ -98,35 +135,35 @@ Neighbor list info ... pair build: copy stencil: none bin: none -Per MPI rank memory allocation (min/avg/max) = 23.13 | 26.96 | 30.79 Mbytes +Per MPI rank memory allocation (min/avg/max) = 23.16 | 26.99 | 30.82 Mbytes Step Temp c_ctemp E_pair TotEng c_qbot c_qtop - 0 0 0 25137191 25137191 0.0085142912 -0.0085142912 + 0 0 0 25137190 25137190 0.0085142912 -0.0085142912 50 17.83755 64.26354 25137031 25137214 0.0045923944 -0.0045923944 - 100 48.393682 174.34846 25136774 25137273 -0.009514517 0.009514517 - 150 70.421272 253.7075 25136655 25137380 -0.033017005 0.033017005 - 200 82.204844 296.16031 25136667 25137514 -0.063668175 0.063668175 - 250 87.54223 315.38937 25136757 25137659 -0.096776257 0.096776257 - 300 91.704746 330.38571 25136865 25137810 -0.1283784 0.1283784 - 350 100.36017 361.56871 25136934 25137968 -0.15649799 0.15649799 - 400 111.37575 401.25467 25136986 25138133 -0.18065435 0.18065435 - 450 121.79848 438.80476 25137043 25138298 -0.19979365 0.19979365 - 500 126.95916 457.39718 25137145 25138453 -0.21037535 0.21037535 -Loop time of 49.6656 on 4 procs for 500 steps with 3776 atoms + 100 48.393682 174.34846 25136775 25137273 -0.009514517 0.009514517 + 150 70.421272 253.7075 25136657 25137382 -0.033017005 0.033017005 + 200 82.204844 296.16031 25136670 25137517 -0.063668175 0.063668175 + 250 87.54223 315.38937 25136762 25137663 -0.096776257 0.096776257 + 300 91.704746 330.38571 25136871 25137816 -0.1283784 0.1283784 + 350 100.36017 361.56871 25136941 25137975 -0.15649799 0.15649799 + 400 111.37575 401.25467 25136994 25138141 -0.18065435 0.18065435 + 450 121.79848 438.80476 25137052 25138307 -0.19979365 0.19979365 + 500 126.95916 457.39718 25137155 25138463 -0.21037535 0.21037535 +Loop time of 49.6413 on 4 procs for 500 steps with 3776 atoms -Performance: 0.870 ns/day, 27.592 hours/ns, 10.067 timesteps/s -95.1% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 0.870 ns/day, 27.578 hours/ns, 10.072 timesteps/s, 38.033 katom-step/s +76.3% CPU use with 4 MPI tasks x no OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 5.968 | 6.1677 | 6.382 | 6.5 | 12.42 -Bond | 0.00071151 | 0.00078617 | 0.00090387 | 0.0 | 0.00 -Kspace | 17.345 | 17.558 | 17.755 | 3.8 | 35.35 -Neigh | 0.10939 | 0.10945 | 0.10948 | 0.0 | 0.22 -Comm | 0.15295 | 0.15474 | 0.15699 | 0.4 | 0.31 -Output | 0.00074458 | 0.0010336 | 0.0018799 | 1.5 | 0.00 -Modify | 25.634 | 25.641 | 25.645 | 0.1 | 51.63 -Other | | 0.03276 | | | 0.07 +Pair | 5.3666 | 5.4998 | 5.6946 | 5.4 | 11.08 +Bond | 0.0011638 | 0.0012711 | 0.0014555 | 0.3 | 0.00 +Kspace | 24.047 | 24.241 | 24.374 | 2.6 | 48.83 +Neigh | 0.088235 | 0.088328 | 0.088432 | 0.0 | 0.18 +Comm | 0.30907 | 0.31913 | 0.32916 | 1.7 | 0.64 +Output | 0.0010669 | 0.0014463 | 0.0024232 | 1.5 | 0.00 +Modify | 19.435 | 19.445 | 19.454 | 0.2 | 39.17 +Other | | 0.04549 | | | 0.09 Nlocal: 944 ave 951 max 941 min Histogram: 1 2 0 0 0 0 0 0 0 1 @@ -140,4 +177,4 @@ Ave neighs/atom = 457.18432 Ave special neighs/atom = 0.50847458 Neighbor list builds = 7 Dangerous builds = 0 -Total wall time: 0:01:11 +Total wall time: 0:00:55 diff --git a/examples/PACKAGES/electrode/graph-il/log.1Dec2022.graph-il-conq.g++.1 b/examples/PACKAGES/electrode/graph-il/log.1Dec2022.graph-il-conq.g++.1 new file mode 100644 index 0000000000..c75238dc36 --- /dev/null +++ b/examples/PACKAGES/electrode/graph-il/log.1Dec2022.graph-il-conq.g++.1 @@ -0,0 +1,186 @@ +LAMMPS (3 Nov 2022) +# electrodes with constrained total charges +# for graphene-ionic liquid supercapacitor + +boundary p p f # slab calculation +include settings.mod # styles, groups, computes and fixes +# set boundary in main script because ffield is periodic +units real +# distribute electrode atoms among all processors: +if "$(extract_setting(world_size) % 2) == 0" then "processors * * 2" + +atom_style full +pair_style lj/cut/coul/long 16 +bond_style harmonic +angle_style harmonic +kspace_style pppm/electrode 1e-7 +# kspace_modify in main script because ffield is periodic + +read_data "data.graph-il" +Reading data file ... + orthogonal box = (0 0 -68) to (32.2 34.4 68) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 3776 atoms + scanning bonds ... + 2 = max bonds/atom + scanning angles ... + 1 = max angles/atom + reading bonds ... + 640 bonds + reading angles ... + 320 angles +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 0 0 + special bond factors coul: 0 0 0 + 2 = max # of 1-2 neighbors + 1 = max # of 1-3 neighbors + 1 = max # of 1-4 neighbors + 2 = max # of special neighbors + special bonds CPU = 0.002 seconds + read_data CPU = 0.023 seconds + +# replicate 4 4 1 # test different sys sizes + +variable zpos atom "z > 0" +group zpos variable zpos +1891 atoms in group zpos +group ele type 5 +832 atoms in group ele +group top intersect ele zpos +416 atoms in group top +group bot subtract ele top +416 atoms in group bot + +group bmi type 1 2 3 +960 atoms in group bmi +group electrolyte type 1 2 3 4 +1280 atoms in group electrolyte + +fix nvt electrolyte nvt temp 500.0 500.0 100 +fix shake bmi shake 1e-4 20 0 b 1 2 a 1 +Finding SHAKE clusters ... + 0 = # of size 2 clusters + 0 = # of size 3 clusters + 0 = # of size 4 clusters + 320 = # of frozen angles + find clusters CPU = 0.002 seconds + +variable q atom q +compute qtop top reduce sum v_q +compute qbot bot reduce sum v_q +compute ctemp electrolyte temp +kspace_modify slab 3.0 + +fix conq bot electrode/conq -1.0 1.979 couple top 1.0 etypes on # symm on +832 atoms in group conp_group +variable dv equal f_conq[2]-f_conq[1] +# symm on and off give different electrode potentials, but identical potential difference + +thermo 50 +thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop f_conq[1] f_conq[2] v_dv +run 500 + +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +Your simulation uses code contributions which should be cited: + +- kspace_style pppm/electrode command: + +@article{Ahrens2021, +author = {Ahrens-Iwers, Ludwig J.V. and Mei{\ss}ner, Robert H.}, +doi = {10.1063/5.0063381}, +title = {{Constant potential simulations on a mesh}}, +journal = {Journal of Chemical Physics}, +year = {2021} +volume = {155}, +pages = {104104}, +} +- fix electrode command: + +@article{Ahrens2022 +author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.}, +doi = {10.1063/5.0099239}, +title = {{ELECTRODE: An electrochemistry package for LAMMPS}}, +journal = {The Journal of Chemical Physics}, +year = {2022} +volume = {157}, +pages = {084801}, +} +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +PPPM/electrode initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:342) + G vector (1/distance) = 0.20904498 + grid = 32 32 200 + stencil order = 5 + estimated absolute RMS force accuracy = 3.7023506e-05 + estimated relative force accuracy = 1.1149519e-07 + using double precision MKL FFT + 3d grid and FFT values/proc = 307242 204800 +Generated 15 of 15 mixed pair_coeff terms from geometric mixing rule +Neighbor list info ... + update: every = 1 steps, delay = 0 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 18 + ghost atom cutoff = 18 + binsize = 9, bins = 4 4 16 + 3 neighbor lists, perpetual/occasional/extra = 2 1 0 + (1) pair lj/cut/coul/long, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d + bin: standard + (2) fix electrode/conq, occasional, skip from (1) + attributes: half, newton on + pair build: skip + stencil: none + bin: none + (3) fix electrode/conq, perpetual, skip from (1) + attributes: half, newton on + pair build: skip + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 54.25 | 54.25 | 54.25 Mbytes + Step Temp c_ctemp E_pair TotEng c_qbot c_qtop f_conq[1] f_conq[2] v_dv + 0 0 0 25137446 25137446 -1 1 -9.931852 10.097344 20.029196 + 50 20.206425 72.797911 25137263 25137472 -1 1 -9.4359366 9.5964514 19.032388 + 100 55.931663 201.50563 25136961 25137537 -1 1 -8.0440112 8.1861787 16.23019 + 150 81.389273 293.22204 25136818 25137656 -1 1 -6.1113109 6.2267114 12.338022 + 200 92.867946 334.57639 25136841 25137798 -1 1 -4.1857807 4.2740694 8.4598501 + 250 97.518304 351.33028 25136942 25137946 -1 1 -2.8383703 2.9101475 5.7485179 + 300 102.36577 368.79431 25137045 25138099 -1 1 -2.3831643 2.4461115 4.8292759 + 350 113.66597 409.50566 25137086 25138256 -1 1 -2.7083563 2.7457811 5.4541374 + 400 122.8443 442.57252 25137148 25138413 -1 1 -3.4311003 3.3941657 6.825266 + 450 128.63713 463.44243 25137235 25138560 -1 1 -4.132871 3.9852959 8.1181669 + 500 131.18361 472.61665 25137344 25138695 -1 1 -4.5104095 4.2567261 8.7671355 +Loop time of 89.4461 on 1 procs for 500 steps with 3776 atoms + +Performance: 0.483 ns/day, 49.692 hours/ns, 5.590 timesteps/s, 21.108 katom-step/s +100.0% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 19.404 | 19.404 | 19.404 | 0.0 | 21.69 +Bond | 0.0014902 | 0.0014902 | 0.0014902 | 0.0 | 0.00 +Kspace | 35.449 | 35.449 | 35.449 | 0.0 | 39.63 +Neigh | 0.26499 | 0.26499 | 0.26499 | 0.0 | 0.30 +Comm | 0.068497 | 0.068497 | 0.068497 | 0.0 | 0.08 +Output | 0.0023974 | 0.0023974 | 0.0023974 | 0.0 | 0.00 +Modify | 34.225 | 34.225 | 34.225 | 0.0 | 38.26 +Other | | 0.03044 | | | 0.03 + +Nlocal: 3776 ave 3776 max 3776 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 12510 ave 12510 max 12510 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 1.72559e+06 ave 1.72559e+06 max 1.72559e+06 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 1725588 +Ave neighs/atom = 456.98835 +Ave special neighs/atom = 0.50847458 +Neighbor list builds = 6 +Dangerous builds = 0 +Total wall time: 0:01:48 diff --git a/examples/PACKAGES/electrode/graph-il/log.1Dec2022.graph-il-conq.g++.4 b/examples/PACKAGES/electrode/graph-il/log.1Dec2022.graph-il-conq.g++.4 new file mode 100644 index 0000000000..65a143ad13 --- /dev/null +++ b/examples/PACKAGES/electrode/graph-il/log.1Dec2022.graph-il-conq.g++.4 @@ -0,0 +1,187 @@ +LAMMPS (3 Nov 2022) +# electrodes with constrained total charges +# for graphene-ionic liquid supercapacitor + +boundary p p f # slab calculation +include settings.mod # styles, groups, computes and fixes +# set boundary in main script because ffield is periodic +units real +# distribute electrode atoms among all processors: +if "$(extract_setting(world_size) % 2) == 0" then "processors * * 2" +processors * * 2 + +atom_style full +pair_style lj/cut/coul/long 16 +bond_style harmonic +angle_style harmonic +kspace_style pppm/electrode 1e-7 +# kspace_modify in main script because ffield is periodic + +read_data "data.graph-il" +Reading data file ... + orthogonal box = (0 0 -68) to (32.2 34.4 68) + 1 by 2 by 2 MPI processor grid + reading atoms ... + 3776 atoms + scanning bonds ... + 2 = max bonds/atom + scanning angles ... + 1 = max angles/atom + reading bonds ... + 640 bonds + reading angles ... + 320 angles +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 0 0 + special bond factors coul: 0 0 0 + 2 = max # of 1-2 neighbors + 1 = max # of 1-3 neighbors + 1 = max # of 1-4 neighbors + 2 = max # of special neighbors + special bonds CPU = 0.002 seconds + read_data CPU = 0.034 seconds + +# replicate 4 4 1 # test different sys sizes + +variable zpos atom "z > 0" +group zpos variable zpos +1891 atoms in group zpos +group ele type 5 +832 atoms in group ele +group top intersect ele zpos +416 atoms in group top +group bot subtract ele top +416 atoms in group bot + +group bmi type 1 2 3 +960 atoms in group bmi +group electrolyte type 1 2 3 4 +1280 atoms in group electrolyte + +fix nvt electrolyte nvt temp 500.0 500.0 100 +fix shake bmi shake 1e-4 20 0 b 1 2 a 1 +Finding SHAKE clusters ... + 0 = # of size 2 clusters + 0 = # of size 3 clusters + 0 = # of size 4 clusters + 320 = # of frozen angles + find clusters CPU = 0.002 seconds + +variable q atom q +compute qtop top reduce sum v_q +compute qbot bot reduce sum v_q +compute ctemp electrolyte temp +kspace_modify slab 3.0 + +fix conq bot electrode/conq -1.0 1.979 couple top 1.0 etypes on # symm on +832 atoms in group conp_group +variable dv equal f_conq[2]-f_conq[1] +# symm on and off give different electrode potentials, but identical potential difference + +thermo 50 +thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop f_conq[1] f_conq[2] v_dv +run 500 + +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +Your simulation uses code contributions which should be cited: + +- kspace_style pppm/electrode command: + +@article{Ahrens2021, +author = {Ahrens-Iwers, Ludwig J.V. and Mei{\ss}ner, Robert H.}, +doi = {10.1063/5.0063381}, +title = {{Constant potential simulations on a mesh}}, +journal = {Journal of Chemical Physics}, +year = {2021} +volume = {155}, +pages = {104104}, +} +- fix electrode command: + +@article{Ahrens2022 +author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.}, +doi = {10.1063/5.0099239}, +title = {{ELECTRODE: An electrochemistry package for LAMMPS}}, +journal = {The Journal of Chemical Physics}, +year = {2022} +volume = {157}, +pages = {084801}, +} +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +PPPM/electrode initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:342) + G vector (1/distance) = 0.20904498 + grid = 32 32 200 + stencil order = 5 + estimated absolute RMS force accuracy = 3.7023506e-05 + estimated relative force accuracy = 1.1149519e-07 + using double precision MKL FFT + 3d grid and FFT values/proc = 151593 85504 +Generated 15 of 15 mixed pair_coeff terms from geometric mixing rule +Neighbor list info ... + update: every = 1 steps, delay = 0 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 18 + ghost atom cutoff = 18 + binsize = 9, bins = 4 4 16 + 3 neighbor lists, perpetual/occasional/extra = 2 1 0 + (1) pair lj/cut/coul/long, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d + bin: standard + (2) fix electrode/conq, occasional, skip from (1) + attributes: half, newton on + pair build: skip + stencil: none + bin: none + (3) fix electrode/conq, perpetual, skip from (1) + attributes: half, newton on + pair build: skip + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 22.9 | 26.72 | 30.55 Mbytes + Step Temp c_ctemp E_pair TotEng c_qbot c_qtop f_conq[1] f_conq[2] v_dv + 0 0 0 25137446 25137446 -1 1 -9.931852 10.097344 20.029196 + 50 20.206425 72.797911 25137263 25137472 -1 1 -9.4359366 9.5964514 19.032388 + 100 55.931663 201.50563 25136961 25137537 -1 1 -8.0440112 8.1861787 16.23019 + 150 81.389273 293.22204 25136818 25137656 -1 1 -6.1113109 6.2267114 12.338022 + 200 92.867946 334.57639 25136841 25137798 -1 1 -4.1857807 4.2740694 8.4598501 + 250 97.518304 351.33028 25136942 25137946 -1 1 -2.8383703 2.9101475 5.7485179 + 300 102.36577 368.79431 25137045 25138099 -1 1 -2.3831643 2.4461115 4.8292759 + 350 113.66597 409.50566 25137086 25138256 -1 1 -2.7083563 2.7457811 5.4541374 + 400 122.8443 442.57252 25137148 25138413 -1 1 -3.4311003 3.3941657 6.825266 + 450 128.63713 463.44243 25137235 25138560 -1 1 -4.132871 3.9852959 8.1181669 + 500 131.18361 472.61665 25137344 25138695 -1 1 -4.5104095 4.2567261 8.7671355 +Loop time of 53.4299 on 4 procs for 500 steps with 3776 atoms + +Performance: 0.809 ns/day, 29.683 hours/ns, 9.358 timesteps/s, 35.336 katom-step/s +74.0% CPU use with 4 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 5.5806 | 5.8872 | 6.1547 | 8.8 | 11.02 +Bond | 0.0011404 | 0.0012245 | 0.0012898 | 0.2 | 0.00 +Kspace | 26.55 | 26.822 | 27.129 | 4.1 | 50.20 +Neigh | 0.098647 | 0.099673 | 0.10083 | 0.3 | 0.19 +Comm | 0.35493 | 0.37282 | 0.3909 | 2.1 | 0.70 +Output | 0.0012274 | 0.001617 | 0.0026374 | 1.5 | 0.00 +Modify | 20.172 | 20.188 | 20.203 | 0.3 | 37.78 +Other | | 0.05647 | | | 0.11 + +Nlocal: 944 ave 948 max 940 min +Histogram: 1 0 0 1 0 0 1 0 0 1 +Nghost: 5920.5 ave 5941 max 5899 min +Histogram: 1 0 0 0 1 1 0 0 0 1 +Neighs: 431397 ave 442329 max 421103 min +Histogram: 2 0 0 0 0 0 0 0 1 1 + +Total # of neighbors = 1725588 +Ave neighs/atom = 456.98835 +Ave special neighs/atom = 0.50847458 +Neighbor list builds = 6 +Dangerous builds = 0 +Total wall time: 0:00:59 diff --git a/examples/PACKAGES/electrode/graph-il/log.27May2022.graph-il-conq2.g++.1 b/examples/PACKAGES/electrode/graph-il/log.1Dec2022.graph-il-conq2.g++.1 similarity index 54% rename from examples/PACKAGES/electrode/graph-il/log.27May2022.graph-il-conq2.g++.1 rename to examples/PACKAGES/electrode/graph-il/log.1Dec2022.graph-il-conq2.g++.1 index 8d3e01ca93..a3eedd22c7 100644 --- a/examples/PACKAGES/electrode/graph-il/log.27May2022.graph-il-conq2.g++.1 +++ b/examples/PACKAGES/electrode/graph-il/log.1Dec2022.graph-il-conq2.g++.1 @@ -1,4 +1,4 @@ -LAMMPS (24 Mar 2022) +LAMMPS (3 Nov 2022) # electrodes with constrained total charges imposed from dynamically computed potentials # for graphene-ionic liquid supercapacitor @@ -37,13 +37,20 @@ Finding 1-2 1-3 1-4 neighbors ... 1 = max # of 1-3 neighbors 1 = max # of 1-4 neighbors 2 = max # of special neighbors - special bonds CPU = 0.001 seconds - read_data CPU = 0.013 seconds + special bonds CPU = 0.002 seconds + read_data CPU = 0.022 seconds -group bot molecule 641 -416 atoms in group bot -group top molecule 642 +# replicate 4 4 1 # test different sys sizes + +variable zpos atom "z > 0" +group zpos variable zpos +1891 atoms in group zpos +group ele type 5 +832 atoms in group ele +group top intersect ele zpos 416 atoms in group top +group bot subtract ele top +416 atoms in group bot group bmi type 1 2 3 960 atoms in group bmi @@ -52,6 +59,7 @@ group electrolyte type 1 2 3 4 fix nvt electrolyte nvt temp 500.0 500.0 100 fix shake bmi shake 1e-4 20 0 b 1 2 a 1 +Finding SHAKE clusters ... 0 = # of size 2 clusters 0 = # of size 3 clusters 0 = # of size 4 clusters @@ -64,7 +72,7 @@ compute qbot bot reduce sum v_q compute ctemp electrolyte temp kspace_modify slab 3.0 -fix conp bot electrode/conp v_vbot 1.979 couple top v_vtop etypes 5 +fix conp bot electrode/conp v_vbot 1.979 couple top v_vtop etypes on 832 atoms in group conp_group variable qex_bot equal -1.0-f_conp[1][1] # difference between desired and 0V charge @@ -79,6 +87,35 @@ variable vtop equal f_conp[2][4]*v_qex_bot+f_conp[2][5]*v_qex_top thermo 50 thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop v_vbot v_vtop run 500 + +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +Your simulation uses code contributions which should be cited: + +- kspace_style pppm/electrode command: + +@article{Ahrens2021, +author = {Ahrens-Iwers, Ludwig J.V. and Mei{\ss}ner, Robert H.}, +doi = {10.1063/5.0063381}, +title = {{Constant potential simulations on a mesh}}, +journal = {Journal of Chemical Physics}, +year = {2021} +volume = {155}, +pages = {104104}, +} +- fix electrode command: + +@article{Ahrens2022 +author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.}, +doi = {10.1063/5.0099239}, +title = {{ELECTRODE: An electrochemistry package for LAMMPS}}, +journal = {The Journal of Chemical Physics}, +year = {2022} +volume = {157}, +pages = {084801}, +} +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + PPPM/electrode initialization ... using 12-bit tables for long-range coulomb (src/kspace.cpp:342) G vector (1/distance) = 0.20904498 @@ -88,9 +125,9 @@ PPPM/electrode initialization ... estimated relative force accuracy = 1.1149519e-07 using double precision MKL FFT 3d grid and FFT values/proc = 307242 204800 - generated 10 of 10 mixed pair_coeff terms from geometric mixing rule +Generated 15 of 15 mixed pair_coeff terms from geometric mixing rule Neighbor list info ... - update every 1 steps, delay 10 steps, check yes + update: every = 1 steps, delay = 0 steps, check = yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 18 ghost atom cutoff = 18 @@ -111,35 +148,35 @@ Neighbor list info ... pair build: skip stencil: none bin: none -Per MPI rank memory allocation (min/avg/max) = 56.89 | 56.89 | 56.89 Mbytes +Per MPI rank memory allocation (min/avg/max) = 54.25 | 54.25 | 54.25 Mbytes Step Temp c_ctemp E_pair TotEng c_qbot c_qtop v_vbot v_vtop - 0 0 0 25136984 25136984 -1 1 -9.931852 10.097344 - 50 20.206425 72.797911 25136825 25137033 -1 1 -9.4359366 9.5964514 - 100 55.931663 201.50563 25136587 25137163 -1 1 -8.0440112 8.1861787 - 150 81.389273 293.22204 25136533 25137371 -1 1 -6.1113109 6.2267114 - 200 92.867946 334.57639 25136646 25137603 -1 1 -4.1857807 4.2740694 - 250 97.518304 351.33028 25136809 25137814 -1 1 -2.8383703 2.9101475 - 300 102.36577 368.79431 25136933 25137987 -1 1 -2.3831643 2.4461115 - 350 113.66597 409.50566 25136960 25138131 -1 1 -2.7083563 2.7457811 - 400 122.8443 442.57252 25136991 25138256 -1 1 -3.4311003 3.3941657 - 450 128.63713 463.44243 25137048 25138373 -1 1 -4.132871 3.9852959 - 500 131.18361 472.61665 25137142 25138493 -1 1 -4.5104095 4.2567261 -Loop time of 44.4233 on 1 procs for 500 steps with 3776 atoms + 0 0 0 25137446 25137446 -1 1 -9.931852 10.097344 + 50 20.206425 72.797911 25137263 25137472 -1 1 -9.4359366 9.5964514 + 100 55.931663 201.50563 25136961 25137537 -1 1 -8.0440112 8.1861787 + 150 81.389273 293.22204 25136818 25137656 -1 1 -6.1113109 6.2267114 + 200 92.867946 334.57639 25136841 25137798 -1 1 -4.1857807 4.2740694 + 250 97.518304 351.33028 25136942 25137946 -1 1 -2.8383703 2.9101475 + 300 102.36577 368.79431 25137045 25138099 -1 1 -2.3831643 2.4461115 + 350 113.66597 409.50566 25137086 25138256 -1 1 -2.7083563 2.7457811 + 400 122.8443 442.57252 25137148 25138413 -1 1 -3.4311003 3.3941657 + 450 128.63713 463.44243 25137235 25138560 -1 1 -4.132871 3.9852959 + 500 131.18361 472.61665 25137344 25138695 -1 1 -4.5104095 4.2567261 +Loop time of 85.5691 on 1 procs for 500 steps with 3776 atoms -Performance: 0.972 ns/day, 24.680 hours/ns, 11.255 timesteps/s -394.3% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 0.505 ns/day, 47.538 hours/ns, 5.843 timesteps/s, 22.064 katom-step/s +100.0% CPU use with 1 MPI tasks x no OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 15.812 | 15.812 | 15.812 | 0.0 | 35.59 -Bond | 0.00085223 | 0.00085223 | 0.00085223 | 0.0 | 0.00 -Kspace | 17.03 | 17.03 | 17.03 | 0.0 | 38.33 -Neigh | 0.20513 | 0.20513 | 0.20513 | 0.0 | 0.46 -Comm | 0.04065 | 0.04065 | 0.04065 | 0.0 | 0.09 -Output | 0.0016819 | 0.0016819 | 0.0016819 | 0.0 | 0.00 -Modify | 11.32 | 11.32 | 11.32 | 0.0 | 25.48 -Other | | 0.01313 | | | 0.03 +Pair | 18.558 | 18.558 | 18.558 | 0.0 | 21.69 +Bond | 0.001404 | 0.001404 | 0.001404 | 0.0 | 0.00 +Kspace | 33.78 | 33.78 | 33.78 | 0.0 | 39.48 +Neigh | 0.27017 | 0.27017 | 0.27017 | 0.0 | 0.32 +Comm | 0.067438 | 0.067438 | 0.067438 | 0.0 | 0.08 +Output | 0.0026656 | 0.0026656 | 0.0026656 | 0.0 | 0.00 +Modify | 32.86 | 32.86 | 32.86 | 0.0 | 38.40 +Other | | 0.02916 | | | 0.03 Nlocal: 3776 ave 3776 max 3776 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -153,4 +190,4 @@ Ave neighs/atom = 456.98835 Ave special neighs/atom = 0.50847458 Neighbor list builds = 6 Dangerous builds = 0 -Total wall time: 0:01:37 +Total wall time: 0:01:42 diff --git a/examples/PACKAGES/electrode/graph-il/log.27May2022.graph-il-conq2.g++.4 b/examples/PACKAGES/electrode/graph-il/log.1Dec2022.graph-il-conq2.g++.4 similarity index 54% rename from examples/PACKAGES/electrode/graph-il/log.27May2022.graph-il-conq2.g++.4 rename to examples/PACKAGES/electrode/graph-il/log.1Dec2022.graph-il-conq2.g++.4 index 0e95bee2ee..a0b182f3bb 100644 --- a/examples/PACKAGES/electrode/graph-il/log.27May2022.graph-il-conq2.g++.4 +++ b/examples/PACKAGES/electrode/graph-il/log.1Dec2022.graph-il-conq2.g++.4 @@ -1,4 +1,4 @@ -LAMMPS (24 Mar 2022) +LAMMPS (3 Nov 2022) # electrodes with constrained total charges imposed from dynamically computed potentials # for graphene-ionic liquid supercapacitor @@ -38,13 +38,20 @@ Finding 1-2 1-3 1-4 neighbors ... 1 = max # of 1-3 neighbors 1 = max # of 1-4 neighbors 2 = max # of special neighbors - special bonds CPU = 0.001 seconds - read_data CPU = 0.015 seconds + special bonds CPU = 0.005 seconds + read_data CPU = 0.044 seconds -group bot molecule 641 -416 atoms in group bot -group top molecule 642 +# replicate 4 4 1 # test different sys sizes + +variable zpos atom "z > 0" +group zpos variable zpos +1891 atoms in group zpos +group ele type 5 +832 atoms in group ele +group top intersect ele zpos 416 atoms in group top +group bot subtract ele top +416 atoms in group bot group bmi type 1 2 3 960 atoms in group bmi @@ -53,11 +60,12 @@ group electrolyte type 1 2 3 4 fix nvt electrolyte nvt temp 500.0 500.0 100 fix shake bmi shake 1e-4 20 0 b 1 2 a 1 +Finding SHAKE clusters ... 0 = # of size 2 clusters 0 = # of size 3 clusters 0 = # of size 4 clusters 320 = # of frozen angles - find clusters CPU = 0.001 seconds + find clusters CPU = 0.002 seconds variable q atom q compute qtop top reduce sum v_q @@ -65,7 +73,7 @@ compute qbot bot reduce sum v_q compute ctemp electrolyte temp kspace_modify slab 3.0 -fix conp bot electrode/conp v_vbot 1.979 couple top v_vtop etypes 5 +fix conp bot electrode/conp v_vbot 1.979 couple top v_vtop etypes on 832 atoms in group conp_group variable qex_bot equal -1.0-f_conp[1][1] # difference between desired and 0V charge @@ -80,6 +88,35 @@ variable vtop equal f_conp[2][4]*v_qex_bot+f_conp[2][5]*v_qex_top thermo 50 thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop v_vbot v_vtop run 500 + +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +Your simulation uses code contributions which should be cited: + +- kspace_style pppm/electrode command: + +@article{Ahrens2021, +author = {Ahrens-Iwers, Ludwig J.V. and Mei{\ss}ner, Robert H.}, +doi = {10.1063/5.0063381}, +title = {{Constant potential simulations on a mesh}}, +journal = {Journal of Chemical Physics}, +year = {2021} +volume = {155}, +pages = {104104}, +} +- fix electrode command: + +@article{Ahrens2022 +author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.}, +doi = {10.1063/5.0099239}, +title = {{ELECTRODE: An electrochemistry package for LAMMPS}}, +journal = {The Journal of Chemical Physics}, +year = {2022} +volume = {157}, +pages = {084801}, +} +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + PPPM/electrode initialization ... using 12-bit tables for long-range coulomb (src/kspace.cpp:342) G vector (1/distance) = 0.20904498 @@ -89,9 +126,9 @@ PPPM/electrode initialization ... estimated relative force accuracy = 1.1149519e-07 using double precision MKL FFT 3d grid and FFT values/proc = 151593 85504 - generated 10 of 10 mixed pair_coeff terms from geometric mixing rule +Generated 15 of 15 mixed pair_coeff terms from geometric mixing rule Neighbor list info ... - update every 1 steps, delay 10 steps, check yes + update: every = 1 steps, delay = 0 steps, check = yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 18 ghost atom cutoff = 18 @@ -112,35 +149,35 @@ Neighbor list info ... pair build: skip stencil: none bin: none -Per MPI rank memory allocation (min/avg/max) = 23.63 | 27.46 | 31.29 Mbytes +Per MPI rank memory allocation (min/avg/max) = 22.9 | 26.72 | 30.55 Mbytes Step Temp c_ctemp E_pair TotEng c_qbot c_qtop v_vbot v_vtop - 0 0 0 25136984 25136984 -1 1 -9.931852 10.097344 - 50 20.206425 72.797911 25136825 25137033 -1 1 -9.4359366 9.5964514 - 100 55.931663 201.50563 25136587 25137163 -1 1 -8.0440112 8.1861787 - 150 81.389273 293.22204 25136533 25137371 -1 1 -6.1113109 6.2267114 - 200 92.867946 334.57639 25136646 25137603 -1 1 -4.1857807 4.2740694 - 250 97.518304 351.33028 25136809 25137814 -1 1 -2.8383703 2.9101475 - 300 102.36577 368.79431 25136933 25137987 -1 1 -2.3831643 2.4461115 - 350 113.66597 409.50566 25136960 25138131 -1 1 -2.7083563 2.7457811 - 400 122.8443 442.57252 25136991 25138256 -1 1 -3.4311003 3.3941657 - 450 128.63713 463.44243 25137048 25138373 -1 1 -4.132871 3.9852959 - 500 131.18361 472.61665 25137142 25138493 -1 1 -4.5104095 4.2567261 -Loop time of 23.4081 on 4 procs for 500 steps with 3776 atoms + 0 0 0 25137446 25137446 -1 1 -9.931852 10.097344 + 50 20.206425 72.797911 25137263 25137472 -1 1 -9.4359366 9.5964514 + 100 55.931663 201.50563 25136961 25137537 -1 1 -8.0440112 8.1861787 + 150 81.389273 293.22204 25136818 25137656 -1 1 -6.1113109 6.2267114 + 200 92.867946 334.57639 25136841 25137798 -1 1 -4.1857807 4.2740694 + 250 97.518304 351.33028 25136942 25137946 -1 1 -2.8383703 2.9101475 + 300 102.36577 368.79431 25137045 25138099 -1 1 -2.3831643 2.4461115 + 350 113.66597 409.50566 25137086 25138256 -1 1 -2.7083563 2.7457811 + 400 122.8443 442.57252 25137148 25138413 -1 1 -3.4311003 3.3941657 + 450 128.63713 463.44243 25137235 25138560 -1 1 -4.132871 3.9852959 + 500 131.18361 472.61665 25137344 25138695 -1 1 -4.5104095 4.2567261 +Loop time of 54.0351 on 4 procs for 500 steps with 3776 atoms -Performance: 1.846 ns/day, 13.005 hours/ns, 21.360 timesteps/s -93.5% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 0.799 ns/day, 30.019 hours/ns, 9.253 timesteps/s, 34.940 katom-step/s +75.8% CPU use with 4 MPI tasks x no OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 4.1792 | 4.3002 | 4.4836 | 5.7 | 18.37 -Bond | 0.00045023 | 0.00053483 | 0.00058432 | 0.0 | 0.00 -Kspace | 12.016 | 12.199 | 12.32 | 3.4 | 52.11 -Neigh | 0.062683 | 0.062707 | 0.062734 | 0.0 | 0.27 -Comm | 0.086385 | 0.08861 | 0.090874 | 0.7 | 0.38 -Output | 0.00082773 | 0.0010401 | 0.0016576 | 1.1 | 0.00 -Modify | 6.7386 | 6.7413 | 6.7443 | 0.1 | 28.80 -Other | | 0.0151 | | | 0.06 +Pair | 6.5878 | 6.8799 | 7.1455 | 8.0 | 12.73 +Bond | 0.0011081 | 0.0014187 | 0.0018792 | 0.8 | 0.00 +Kspace | 25.907 | 26.173 | 26.464 | 4.1 | 48.44 +Neigh | 0.16417 | 0.16425 | 0.16438 | 0.0 | 0.30 +Comm | 0.34948 | 0.36296 | 0.37524 | 1.9 | 0.67 +Output | 0.0017398 | 0.0021707 | 0.0033966 | 1.5 | 0.00 +Modify | 20.392 | 20.403 | 20.416 | 0.2 | 37.76 +Other | | 0.04783 | | | 0.09 Nlocal: 944 ave 948 max 940 min Histogram: 1 0 0 1 0 0 1 0 0 1 @@ -154,4 +191,4 @@ Ave neighs/atom = 456.98835 Ave special neighs/atom = 0.50847458 Neighbor list builds = 6 Dangerous builds = 0 -Total wall time: 0:00:45 +Total wall time: 0:01:00 diff --git a/examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-etypes.g++.1 b/examples/PACKAGES/electrode/graph-il/log.1Dec2022.graph-il-etypes.g++.1 similarity index 54% rename from examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-etypes.g++.1 rename to examples/PACKAGES/electrode/graph-il/log.1Dec2022.graph-il-etypes.g++.1 index 3b2fe8b6a1..7fccf30e98 100644 --- a/examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-etypes.g++.1 +++ b/examples/PACKAGES/electrode/graph-il/log.1Dec2022.graph-il-etypes.g++.1 @@ -1,4 +1,4 @@ -LAMMPS (24 Mar 2022) +LAMMPS (3 Nov 2022) # electrodes with constant potential and smart neighborlists # for graphene-ionic liquid supercapacitor @@ -37,13 +37,20 @@ Finding 1-2 1-3 1-4 neighbors ... 1 = max # of 1-3 neighbors 1 = max # of 1-4 neighbors 2 = max # of special neighbors - special bonds CPU = 0.001 seconds - read_data CPU = 0.024 seconds + special bonds CPU = 0.002 seconds + read_data CPU = 0.021 seconds -group bot molecule 641 -416 atoms in group bot -group top molecule 642 +# replicate 4 4 1 # test different sys sizes + +variable zpos atom "z > 0" +group zpos variable zpos +1891 atoms in group zpos +group ele type 5 +832 atoms in group ele +group top intersect ele zpos 416 atoms in group top +group bot subtract ele top +416 atoms in group bot group bmi type 1 2 3 960 atoms in group bmi @@ -52,6 +59,7 @@ group electrolyte type 1 2 3 4 fix nvt electrolyte nvt temp 500.0 500.0 100 fix shake bmi shake 1e-4 20 0 b 1 2 a 1 +Finding SHAKE clusters ... 0 = # of size 2 clusters 0 = # of size 3 clusters 0 = # of size 4 clusters @@ -64,12 +72,41 @@ compute qbot bot reduce sum v_q compute ctemp electrolyte temp kspace_modify slab 3.0 -fix conp bot electrode/conp -1.0 1.979 couple top 1.0 symm on etypes 5 +fix conp bot electrode/conp -1.0 1.979 couple top 1.0 symm on etypes on 832 atoms in group conp_group thermo 50 thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop run 500 + +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +Your simulation uses code contributions which should be cited: + +- kspace_style pppm/electrode command: + +@article{Ahrens2021, +author = {Ahrens-Iwers, Ludwig J.V. and Mei{\ss}ner, Robert H.}, +doi = {10.1063/5.0063381}, +title = {{Constant potential simulations on a mesh}}, +journal = {Journal of Chemical Physics}, +year = {2021} +volume = {155}, +pages = {104104}, +} +- fix electrode command: + +@article{Ahrens2022 +author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.}, +doi = {10.1063/5.0099239}, +title = {{ELECTRODE: An electrochemistry package for LAMMPS}}, +journal = {The Journal of Chemical Physics}, +year = {2022} +volume = {157}, +pages = {084801}, +} +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + PPPM/electrode initialization ... using 12-bit tables for long-range coulomb (src/kspace.cpp:342) G vector (1/distance) = 0.20904498 @@ -79,9 +116,9 @@ PPPM/electrode initialization ... estimated relative force accuracy = 1.1149519e-07 using double precision MKL FFT 3d grid and FFT values/proc = 307242 204800 - generated 10 of 10 mixed pair_coeff terms from geometric mixing rule +Generated 15 of 15 mixed pair_coeff terms from geometric mixing rule Neighbor list info ... - update every 1 steps, delay 10 steps, check yes + update: every = 1 steps, delay = 0 steps, check = yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 18 ghost atom cutoff = 18 @@ -102,35 +139,35 @@ Neighbor list info ... pair build: skip stencil: none bin: none -Per MPI rank memory allocation (min/avg/max) = 56.89 | 56.89 | 56.89 Mbytes +Per MPI rank memory allocation (min/avg/max) = 54.25 | 54.25 | 54.25 Mbytes Step Temp c_ctemp E_pair TotEng c_qbot c_qtop - 0 0 0 25137191 25137191 0.0085142912 -0.0085142912 + 0 0 0 25137190 25137190 0.0085142912 -0.0085142912 50 17.83755 64.26354 25137031 25137214 0.0045923944 -0.0045923944 - 100 48.393682 174.34846 25136774 25137273 -0.009514517 0.009514517 - 150 70.421272 253.7075 25136655 25137380 -0.033017005 0.033017005 - 200 82.204844 296.16031 25136667 25137514 -0.063668175 0.063668175 - 250 87.54223 315.38937 25136757 25137659 -0.096776257 0.096776257 - 300 91.704746 330.38571 25136865 25137810 -0.1283784 0.1283784 - 350 100.36017 361.56871 25136934 25137968 -0.15649799 0.15649799 - 400 111.37575 401.25467 25136986 25138133 -0.18065435 0.18065435 - 450 121.79848 438.80476 25137043 25138298 -0.19979365 0.19979365 - 500 126.95916 457.39718 25137145 25138453 -0.21037535 0.21037535 -Loop time of 63.497 on 1 procs for 500 steps with 3776 atoms + 100 48.393682 174.34846 25136775 25137273 -0.009514517 0.009514517 + 150 70.421272 253.7075 25136657 25137382 -0.033017005 0.033017005 + 200 82.204844 296.16031 25136670 25137517 -0.063668175 0.063668175 + 250 87.54223 315.38937 25136762 25137663 -0.096776257 0.096776257 + 300 91.704746 330.38571 25136871 25137816 -0.1283784 0.1283784 + 350 100.36017 361.56871 25136942 25137975 -0.15649799 0.15649799 + 400 111.37575 401.25467 25136994 25138141 -0.18065435 0.18065435 + 450 121.79848 438.80476 25137052 25138307 -0.19979365 0.19979365 + 500 126.95916 457.39718 25137155 25138463 -0.21037535 0.21037535 +Loop time of 87.0709 on 1 procs for 500 steps with 3776 atoms -Performance: 0.680 ns/day, 35.276 hours/ns, 7.874 timesteps/s -393.9% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 0.496 ns/day, 48.373 hours/ns, 5.742 timesteps/s, 21.683 katom-step/s +100.0% CPU use with 1 MPI tasks x no OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 20.628 | 20.628 | 20.628 | 0.0 | 32.49 -Bond | 0.0019309 | 0.0019309 | 0.0019309 | 0.0 | 0.00 -Kspace | 23.61 | 23.61 | 23.61 | 0.0 | 37.18 -Neigh | 0.28156 | 0.28156 | 0.28156 | 0.0 | 0.44 -Comm | 0.061191 | 0.061191 | 0.061191 | 0.0 | 0.10 -Output | 0.0022666 | 0.0022666 | 0.0022666 | 0.0 | 0.00 -Modify | 18.891 | 18.891 | 18.891 | 0.0 | 29.75 -Other | | 0.02047 | | | 0.03 +Pair | 18.617 | 18.617 | 18.617 | 0.0 | 21.38 +Bond | 0.0014056 | 0.0014056 | 0.0014056 | 0.0 | 0.00 +Kspace | 34.856 | 34.856 | 34.856 | 0.0 | 40.03 +Neigh | 0.30015 | 0.30015 | 0.30015 | 0.0 | 0.34 +Comm | 0.065303 | 0.065303 | 0.065303 | 0.0 | 0.08 +Output | 0.0021663 | 0.0021663 | 0.0021663 | 0.0 | 0.00 +Modify | 33.201 | 33.201 | 33.201 | 0.0 | 38.13 +Other | | 0.0282 | | | 0.03 Nlocal: 3776 ave 3776 max 3776 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -144,4 +181,4 @@ Ave neighs/atom = 457.18432 Ave special neighs/atom = 0.50847458 Neighbor list builds = 7 Dangerous builds = 0 -Total wall time: 0:02:24 +Total wall time: 0:01:43 diff --git a/examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-etypes.g++.4 b/examples/PACKAGES/electrode/graph-il/log.1Dec2022.graph-il-etypes.g++.4 similarity index 54% rename from examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-etypes.g++.4 rename to examples/PACKAGES/electrode/graph-il/log.1Dec2022.graph-il-etypes.g++.4 index ed34a0c735..c0f4139689 100644 --- a/examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-etypes.g++.4 +++ b/examples/PACKAGES/electrode/graph-il/log.1Dec2022.graph-il-etypes.g++.4 @@ -1,4 +1,4 @@ -LAMMPS (24 Mar 2022) +LAMMPS (3 Nov 2022) # electrodes with constant potential and smart neighborlists # for graphene-ionic liquid supercapacitor @@ -38,13 +38,20 @@ Finding 1-2 1-3 1-4 neighbors ... 1 = max # of 1-3 neighbors 1 = max # of 1-4 neighbors 2 = max # of special neighbors - special bonds CPU = 0.001 seconds - read_data CPU = 0.016 seconds + special bonds CPU = 0.004 seconds + read_data CPU = 0.047 seconds -group bot molecule 641 -416 atoms in group bot -group top molecule 642 +# replicate 4 4 1 # test different sys sizes + +variable zpos atom "z > 0" +group zpos variable zpos +1891 atoms in group zpos +group ele type 5 +832 atoms in group ele +group top intersect ele zpos 416 atoms in group top +group bot subtract ele top +416 atoms in group bot group bmi type 1 2 3 960 atoms in group bmi @@ -53,11 +60,12 @@ group electrolyte type 1 2 3 4 fix nvt electrolyte nvt temp 500.0 500.0 100 fix shake bmi shake 1e-4 20 0 b 1 2 a 1 +Finding SHAKE clusters ... 0 = # of size 2 clusters 0 = # of size 3 clusters 0 = # of size 4 clusters 320 = # of frozen angles - find clusters CPU = 0.001 seconds + find clusters CPU = 0.005 seconds variable q atom q compute qtop top reduce sum v_q @@ -65,12 +73,41 @@ compute qbot bot reduce sum v_q compute ctemp electrolyte temp kspace_modify slab 3.0 -fix conp bot electrode/conp -1.0 1.979 couple top 1.0 symm on etypes 5 +fix conp bot electrode/conp -1.0 1.979 couple top 1.0 symm on etypes on 832 atoms in group conp_group thermo 50 thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop run 500 + +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +Your simulation uses code contributions which should be cited: + +- kspace_style pppm/electrode command: + +@article{Ahrens2021, +author = {Ahrens-Iwers, Ludwig J.V. and Mei{\ss}ner, Robert H.}, +doi = {10.1063/5.0063381}, +title = {{Constant potential simulations on a mesh}}, +journal = {Journal of Chemical Physics}, +year = {2021} +volume = {155}, +pages = {104104}, +} +- fix electrode command: + +@article{Ahrens2022 +author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.}, +doi = {10.1063/5.0099239}, +title = {{ELECTRODE: An electrochemistry package for LAMMPS}}, +journal = {The Journal of Chemical Physics}, +year = {2022} +volume = {157}, +pages = {084801}, +} +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + PPPM/electrode initialization ... using 12-bit tables for long-range coulomb (src/kspace.cpp:342) G vector (1/distance) = 0.20904498 @@ -80,9 +117,9 @@ PPPM/electrode initialization ... estimated relative force accuracy = 1.1149519e-07 using double precision MKL FFT 3d grid and FFT values/proc = 151593 85504 - generated 10 of 10 mixed pair_coeff terms from geometric mixing rule +Generated 15 of 15 mixed pair_coeff terms from geometric mixing rule Neighbor list info ... - update every 1 steps, delay 10 steps, check yes + update: every = 1 steps, delay = 0 steps, check = yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 18 ghost atom cutoff = 18 @@ -103,35 +140,35 @@ Neighbor list info ... pair build: skip stencil: none bin: none -Per MPI rank memory allocation (min/avg/max) = 23.63 | 27.46 | 31.29 Mbytes +Per MPI rank memory allocation (min/avg/max) = 22.9 | 26.72 | 30.55 Mbytes Step Temp c_ctemp E_pair TotEng c_qbot c_qtop - 0 0 0 25137191 25137191 0.0085142912 -0.0085142912 + 0 0 0 25137190 25137190 0.0085142912 -0.0085142912 50 17.83755 64.26354 25137031 25137214 0.0045923944 -0.0045923944 - 100 48.393682 174.34846 25136774 25137273 -0.009514517 0.009514517 - 150 70.421272 253.7075 25136655 25137380 -0.033017005 0.033017005 - 200 82.204844 296.16031 25136667 25137514 -0.063668175 0.063668175 - 250 87.54223 315.38937 25136757 25137659 -0.096776257 0.096776257 - 300 91.704746 330.38571 25136865 25137810 -0.1283784 0.1283784 - 350 100.36017 361.56871 25136934 25137968 -0.15649799 0.15649799 - 400 111.37575 401.25467 25136986 25138133 -0.18065435 0.18065435 - 450 121.79848 438.80476 25137043 25138298 -0.19979365 0.19979365 - 500 126.95916 457.39718 25137145 25138453 -0.21037535 0.21037535 -Loop time of 30.7883 on 4 procs for 500 steps with 3776 atoms + 100 48.393682 174.34846 25136775 25137273 -0.009514517 0.009514517 + 150 70.421272 253.7075 25136657 25137382 -0.033017005 0.033017005 + 200 82.204844 296.16031 25136670 25137517 -0.063668175 0.063668175 + 250 87.54223 315.38937 25136762 25137663 -0.096776257 0.096776257 + 300 91.704746 330.38571 25136871 25137816 -0.1283784 0.1283784 + 350 100.36017 361.56871 25136942 25137975 -0.15649799 0.15649799 + 400 111.37575 401.25467 25136994 25138141 -0.18065435 0.18065435 + 450 121.79848 438.80476 25137052 25138307 -0.19979365 0.19979365 + 500 126.95916 457.39718 25137155 25138463 -0.21037535 0.21037535 +Loop time of 48.4075 on 4 procs for 500 steps with 3776 atoms -Performance: 1.403 ns/day, 17.105 hours/ns, 16.240 timesteps/s -94.1% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 0.892 ns/day, 26.893 hours/ns, 10.329 timesteps/s, 39.002 katom-step/s +75.3% CPU use with 4 MPI tasks x no OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 6.5102 | 6.7303 | 6.9362 | 7.6 | 21.86 -Bond | 0.00064504 | 0.00071061 | 0.000779 | 0.0 | 0.00 -Kspace | 14.081 | 14.287 | 14.507 | 5.2 | 46.40 -Neigh | 0.11831 | 0.11841 | 0.11851 | 0.0 | 0.38 -Comm | 0.12216 | 0.12434 | 0.12651 | 0.6 | 0.40 -Output | 0.00083347 | 0.0010533 | 0.0017069 | 1.2 | 0.00 -Modify | 9.5052 | 9.5071 | 9.5093 | 0.1 | 30.88 -Other | | 0.01927 | | | 0.06 +Pair | 5.3095 | 5.5504 | 5.7923 | 8.2 | 11.47 +Bond | 0.0011128 | 0.0012414 | 0.0014028 | 0.3 | 0.00 +Kspace | 24.084 | 24.322 | 24.559 | 3.9 | 50.24 +Neigh | 0.093557 | 0.09408 | 0.094377 | 0.1 | 0.19 +Comm | 0.30394 | 0.31319 | 0.3225 | 1.6 | 0.65 +Output | 0.0012719 | 0.0015908 | 0.0024592 | 1.3 | 0.00 +Modify | 18.066 | 18.079 | 18.091 | 0.2 | 37.35 +Other | | 0.04692 | | | 0.10 Nlocal: 944 ave 951 max 941 min Histogram: 1 2 0 0 0 0 0 0 0 1 @@ -145,4 +182,4 @@ Ave neighs/atom = 457.18432 Ave special neighs/atom = 0.50847458 Neighbor list builds = 7 Dangerous builds = 0 -Total wall time: 0:00:56 +Total wall time: 0:00:54 diff --git a/examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-ffield.g++.1 b/examples/PACKAGES/electrode/graph-il/log.1Dec2022.graph-il-ffield.g++.1 similarity index 54% rename from examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-ffield.g++.1 rename to examples/PACKAGES/electrode/graph-il/log.1Dec2022.graph-il-ffield.g++.1 index b7c2eea523..2103f43dfd 100644 --- a/examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-ffield.g++.1 +++ b/examples/PACKAGES/electrode/graph-il/log.1Dec2022.graph-il-ffield.g++.1 @@ -1,4 +1,4 @@ -LAMMPS (24 Mar 2022) +LAMMPS (3 Nov 2022) # electrodes with constant potential using finite field # for z-periodic graphene-ionic liquid supercapacitor @@ -37,13 +37,20 @@ Finding 1-2 1-3 1-4 neighbors ... 1 = max # of 1-3 neighbors 1 = max # of 1-4 neighbors 2 = max # of special neighbors - special bonds CPU = 0.001 seconds - read_data CPU = 0.022 seconds + special bonds CPU = 0.002 seconds + read_data CPU = 0.021 seconds -group bot molecule 641 -416 atoms in group bot -group top molecule 642 +# replicate 4 4 1 # test different sys sizes + +variable zpos atom "z > 0" +group zpos variable zpos +1891 atoms in group zpos +group ele type 5 +832 atoms in group ele +group top intersect ele zpos 416 atoms in group top +group bot subtract ele top +416 atoms in group bot group bmi type 1 2 3 960 atoms in group bmi @@ -52,6 +59,7 @@ group electrolyte type 1 2 3 4 fix nvt electrolyte nvt temp 500.0 500.0 100 fix shake bmi shake 1e-4 20 0 b 1 2 a 1 +Finding SHAKE clusters ... 0 = # of size 2 clusters 0 = # of size 3 clusters 0 = # of size 4 clusters @@ -63,12 +71,41 @@ compute qtop top reduce sum v_q compute qbot bot reduce sum v_q compute ctemp electrolyte temp -fix conp bot electrode/conp -1.0 1.979 couple top 1.0 symm on etypes 5 ffield yes +fix conp bot electrode/conp -1.0 1.979 couple top 1.0 symm on etypes on ffield yes 832 atoms in group conp_group thermo 50 thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop run 500 + +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +Your simulation uses code contributions which should be cited: + +- kspace_style pppm/electrode command: + +@article{Ahrens2021, +author = {Ahrens-Iwers, Ludwig J.V. and Mei{\ss}ner, Robert H.}, +doi = {10.1063/5.0063381}, +title = {{Constant potential simulations on a mesh}}, +journal = {Journal of Chemical Physics}, +year = {2021} +volume = {155}, +pages = {104104}, +} +- fix electrode command: + +@article{Ahrens2022 +author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.}, +doi = {10.1063/5.0099239}, +title = {{ELECTRODE: An electrochemistry package for LAMMPS}}, +journal = {The Journal of Chemical Physics}, +year = {2022} +volume = {157}, +pages = {084801}, +} +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + PPPM/electrode initialization ... using 12-bit tables for long-range coulomb (src/kspace.cpp:342) G vector (1/distance) = 0.20949995 @@ -78,9 +115,9 @@ PPPM/electrode initialization ... estimated relative force accuracy = 1.0544465e-07 using double precision MKL FFT 3d grid and FFT values/proc = 147537 92160 - generated 10 of 10 mixed pair_coeff terms from geometric mixing rule +Generated 15 of 15 mixed pair_coeff terms from geometric mixing rule Neighbor list info ... - update every 1 steps, delay 10 steps, check yes + update: every = 1 steps, delay = 0 steps, check = yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 18 ghost atom cutoff = 18 @@ -101,35 +138,35 @@ Neighbor list info ... pair build: skip stencil: none bin: none -Per MPI rank memory allocation (min/avg/max) = 49.5 | 49.5 | 49.5 Mbytes +Per MPI rank memory allocation (min/avg/max) = 46.1 | 46.1 | 46.1 Mbytes Step Temp c_ctemp E_pair TotEng c_qbot c_qtop - 0 0 0 25137187 25137187 0.0085209384 -0.0085209384 - 50 17.837642 64.263873 25137027 25137211 0.0045513522 -0.0045513522 - 100 48.393984 174.34955 25136771 25137269 -0.0097291786 0.0097291786 - 150 70.421823 253.70949 25136651 25137377 -0.033522793 0.033522793 - 200 82.205535 296.1628 25136664 25137510 -0.064555648 0.064555648 - 250 87.542843 315.39158 25136754 25137655 -0.098075546 0.098075546 - 300 91.705733 330.38927 25136862 25137806 -0.13006751 0.13006751 - 350 100.36128 361.5727 25136930 25137964 -0.15852814 0.15852814 - 400 111.37586 401.25505 25136982 25138129 -0.18297207 0.18297207 - 450 121.79814 438.80351 25137039 25138294 -0.2023394 0.2023394 - 500 126.95882 457.39597 25137142 25138449 -0.21305221 0.21305221 -Loop time of 36.7618 on 1 procs for 500 steps with 3776 atoms + 0 0 0 25137186 25137186 0.0085209384 -0.0085209384 + 50 17.837642 64.263873 25137027 25137210 0.0045513522 -0.0045513522 + 100 48.393984 174.34955 25136771 25137270 -0.0097291786 0.0097291786 + 150 70.421823 253.70949 25136653 25137378 -0.033522793 0.033522793 + 200 82.205535 296.1628 25136667 25137513 -0.064555648 0.064555648 + 250 87.542843 315.39158 25136758 25137660 -0.098075546 0.098075546 + 300 91.705733 330.38927 25136868 25137812 -0.13006751 0.13006751 + 350 100.36128 361.5727 25136938 25137971 -0.15852814 0.15852814 + 400 111.37586 401.25505 25136990 25138137 -0.18297207 0.18297207 + 450 121.79814 438.80351 25137049 25138303 -0.2023394 0.2023394 + 500 126.95882 457.39597 25137151 25138459 -0.21305221 0.21305221 +Loop time of 53.8411 on 1 procs for 500 steps with 3776 atoms -Performance: 1.175 ns/day, 20.423 hours/ns, 13.601 timesteps/s -393.9% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 0.802 ns/day, 29.912 hours/ns, 9.287 timesteps/s, 35.066 katom-step/s +100.0% CPU use with 1 MPI tasks x no OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 19.737 | 19.737 | 19.737 | 0.0 | 53.69 -Bond | 0.00092668 | 0.00092668 | 0.00092668 | 0.0 | 0.00 -Kspace | 6.5854 | 6.5854 | 6.5854 | 0.0 | 17.91 -Neigh | 0.33914 | 0.33914 | 0.33914 | 0.0 | 0.92 -Comm | 0.090124 | 0.090124 | 0.090124 | 0.0 | 0.25 -Output | 0.0013975 | 0.0013975 | 0.0013975 | 0.0 | 0.00 -Modify | 9.9834 | 9.9834 | 9.9834 | 0.0 | 27.16 -Other | | 0.02455 | | | 0.07 +Pair | 19.843 | 19.843 | 19.843 | 0.0 | 36.85 +Bond | 0.0016963 | 0.0016963 | 0.0016963 | 0.0 | 0.00 +Kspace | 11.232 | 11.232 | 11.232 | 0.0 | 20.86 +Neigh | 0.39189 | 0.39189 | 0.39189 | 0.0 | 0.73 +Comm | 0.12348 | 0.12348 | 0.12348 | 0.0 | 0.23 +Output | 0.0017904 | 0.0017904 | 0.0017904 | 0.0 | 0.00 +Modify | 22.207 | 22.207 | 22.207 | 0.0 | 41.25 +Other | | 0.04008 | | | 0.07 Nlocal: 3776 ave 3776 max 3776 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -143,4 +180,4 @@ Ave neighs/atom = 493.56224 Ave special neighs/atom = 0.50847458 Neighbor list builds = 7 Dangerous builds = 0 -Total wall time: 0:01:39 +Total wall time: 0:01:10 diff --git a/examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-ffield.g++.4 b/examples/PACKAGES/electrode/graph-il/log.1Dec2022.graph-il-ffield.g++.4 similarity index 54% rename from examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-ffield.g++.4 rename to examples/PACKAGES/electrode/graph-il/log.1Dec2022.graph-il-ffield.g++.4 index 205c08d88e..223530d493 100644 --- a/examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-ffield.g++.4 +++ b/examples/PACKAGES/electrode/graph-il/log.1Dec2022.graph-il-ffield.g++.4 @@ -1,4 +1,4 @@ -LAMMPS (24 Mar 2022) +LAMMPS (3 Nov 2022) # electrodes with constant potential using finite field # for z-periodic graphene-ionic liquid supercapacitor @@ -38,13 +38,20 @@ Finding 1-2 1-3 1-4 neighbors ... 1 = max # of 1-3 neighbors 1 = max # of 1-4 neighbors 2 = max # of special neighbors - special bonds CPU = 0.001 seconds - read_data CPU = 0.016 seconds + special bonds CPU = 0.002 seconds + read_data CPU = 0.033 seconds -group bot molecule 641 -416 atoms in group bot -group top molecule 642 +# replicate 4 4 1 # test different sys sizes + +variable zpos atom "z > 0" +group zpos variable zpos +1891 atoms in group zpos +group ele type 5 +832 atoms in group ele +group top intersect ele zpos 416 atoms in group top +group bot subtract ele top +416 atoms in group bot group bmi type 1 2 3 960 atoms in group bmi @@ -53,23 +60,53 @@ group electrolyte type 1 2 3 4 fix nvt electrolyte nvt temp 500.0 500.0 100 fix shake bmi shake 1e-4 20 0 b 1 2 a 1 +Finding SHAKE clusters ... 0 = # of size 2 clusters 0 = # of size 3 clusters 0 = # of size 4 clusters 320 = # of frozen angles - find clusters CPU = 0.001 seconds + find clusters CPU = 0.002 seconds variable q atom q compute qtop top reduce sum v_q compute qbot bot reduce sum v_q compute ctemp electrolyte temp -fix conp bot electrode/conp -1.0 1.979 couple top 1.0 symm on etypes 5 ffield yes +fix conp bot electrode/conp -1.0 1.979 couple top 1.0 symm on etypes on ffield yes 832 atoms in group conp_group thermo 50 thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop run 500 + +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +Your simulation uses code contributions which should be cited: + +- kspace_style pppm/electrode command: + +@article{Ahrens2021, +author = {Ahrens-Iwers, Ludwig J.V. and Mei{\ss}ner, Robert H.}, +doi = {10.1063/5.0063381}, +title = {{Constant potential simulations on a mesh}}, +journal = {Journal of Chemical Physics}, +year = {2021} +volume = {155}, +pages = {104104}, +} +- fix electrode command: + +@article{Ahrens2022 +author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.}, +doi = {10.1063/5.0099239}, +title = {{ELECTRODE: An electrochemistry package for LAMMPS}}, +journal = {The Journal of Chemical Physics}, +year = {2022} +volume = {157}, +pages = {084801}, +} +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + PPPM/electrode initialization ... using 12-bit tables for long-range coulomb (src/kspace.cpp:342) G vector (1/distance) = 0.20949995 @@ -79,9 +116,9 @@ PPPM/electrode initialization ... estimated relative force accuracy = 1.0544465e-07 using double precision MKL FFT 3d grid and FFT values/proc = 46644 23552 - generated 10 of 10 mixed pair_coeff terms from geometric mixing rule +Generated 15 of 15 mixed pair_coeff terms from geometric mixing rule Neighbor list info ... - update every 1 steps, delay 10 steps, check yes + update: every = 1 steps, delay = 0 steps, check = yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 18 ghost atom cutoff = 18 @@ -102,35 +139,35 @@ Neighbor list info ... pair build: skip stencil: none bin: none -Per MPI rank memory allocation (min/avg/max) = 21.96 | 22.27 | 22.77 Mbytes +Per MPI rank memory allocation (min/avg/max) = 21.23 | 21.34 | 21.65 Mbytes Step Temp c_ctemp E_pair TotEng c_qbot c_qtop - 0 0 0 25137187 25137187 0.0085209384 -0.0085209384 - 50 17.837642 64.263873 25137027 25137211 0.0045513522 -0.0045513522 - 100 48.393984 174.34955 25136771 25137269 -0.0097291786 0.0097291786 - 150 70.421823 253.70949 25136651 25137377 -0.033522793 0.033522793 - 200 82.205535 296.1628 25136664 25137510 -0.064555648 0.064555648 - 250 87.542843 315.39158 25136754 25137655 -0.098075546 0.098075546 - 300 91.705733 330.38927 25136862 25137806 -0.13006751 0.13006751 - 350 100.36128 361.5727 25136930 25137964 -0.15852814 0.15852814 - 400 111.37586 401.25505 25136982 25138129 -0.18297207 0.18297207 - 450 121.79814 438.80351 25137039 25138294 -0.2023394 0.2023394 - 500 126.95882 457.39597 25137142 25138449 -0.21305221 0.21305221 -Loop time of 19.3932 on 4 procs for 500 steps with 3776 atoms + 0 0 0 25137186 25137186 0.0085209384 -0.0085209384 + 50 17.837642 64.263873 25137027 25137210 0.0045513522 -0.0045513522 + 100 48.393984 174.34955 25136771 25137270 -0.0097291786 0.0097291786 + 150 70.421823 253.70949 25136653 25137378 -0.033522793 0.033522793 + 200 82.205535 296.1628 25136667 25137513 -0.064555648 0.064555648 + 250 87.542843 315.39158 25136758 25137660 -0.098075546 0.098075546 + 300 91.705733 330.38927 25136868 25137812 -0.13006751 0.13006751 + 350 100.36128 361.5727 25136938 25137971 -0.15852814 0.15852814 + 400 111.37586 401.25505 25136990 25138137 -0.18297207 0.18297207 + 450 121.79814 438.80351 25137049 25138303 -0.2023394 0.2023394 + 500 126.95882 457.39597 25137151 25138459 -0.21305221 0.21305221 +Loop time of 26.2807 on 4 procs for 500 steps with 3776 atoms -Performance: 2.228 ns/day, 10.774 hours/ns, 25.782 timesteps/s -96.3% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 1.644 ns/day, 14.600 hours/ns, 19.025 timesteps/s, 71.840 katom-step/s +83.1% CPU use with 4 MPI tasks x no OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 7.1247 | 7.6399 | 8.1323 | 13.3 | 39.39 -Bond | 0.00072445 | 0.00077581 | 0.00085933 | 0.0 | 0.00 -Kspace | 5.098 | 5.5905 | 6.1036 | 15.6 | 28.83 -Neigh | 0.145 | 0.14517 | 0.14532 | 0.0 | 0.75 -Comm | 0.24683 | 0.25127 | 0.25907 | 1.0 | 1.30 -Output | 0.00084146 | 0.0011298 | 0.0019741 | 1.5 | 0.01 -Modify | 5.6957 | 5.7129 | 5.729 | 0.6 | 29.46 -Other | | 0.05153 | | | 0.27 +Pair | 5.8233 | 6.1941 | 6.6294 | 12.1 | 23.57 +Bond | 0.0010807 | 0.0011705 | 0.0013494 | 0.3 | 0.00 +Kspace | 8.0325 | 8.4703 | 8.8457 | 10.4 | 32.23 +Neigh | 0.14184 | 0.1421 | 0.14238 | 0.1 | 0.54 +Comm | 0.52248 | 0.54323 | 0.56352 | 2.7 | 2.07 +Output | 0.00079782 | 0.0011547 | 0.0021987 | 1.8 | 0.00 +Modify | 10.831 | 10.856 | 10.881 | 0.7 | 41.31 +Other | | 0.07293 | | | 0.28 Nlocal: 944 ave 951 max 941 min Histogram: 1 2 0 0 0 0 0 0 0 1 @@ -144,4 +181,4 @@ Ave neighs/atom = 493.56224 Ave special neighs/atom = 0.50847458 Neighbor list builds = 7 Dangerous builds = 0 -Total wall time: 0:00:44 +Total wall time: 0:00:32 diff --git a/examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-ramp.g++.1 b/examples/PACKAGES/electrode/graph-il/log.1Dec2022.graph-il-ramp.g++.1 similarity index 52% rename from examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-ramp.g++.1 rename to examples/PACKAGES/electrode/graph-il/log.1Dec2022.graph-il-ramp.g++.1 index 1dfcbac360..819a605f35 100644 --- a/examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-ramp.g++.1 +++ b/examples/PACKAGES/electrode/graph-il/log.1Dec2022.graph-il-ramp.g++.1 @@ -1,4 +1,4 @@ -LAMMPS (24 Mar 2022) +LAMMPS (3 Nov 2022) # electrodes with equal-style ramped (electrode-)constant potential # for graphene-ionic liquid supercapacitor @@ -37,13 +37,20 @@ Finding 1-2 1-3 1-4 neighbors ... 1 = max # of 1-3 neighbors 1 = max # of 1-4 neighbors 2 = max # of special neighbors - special bonds CPU = 0.001 seconds - read_data CPU = 0.014 seconds + special bonds CPU = 0.002 seconds + read_data CPU = 0.021 seconds -group bot molecule 641 -416 atoms in group bot -group top molecule 642 +# replicate 4 4 1 # test different sys sizes + +variable zpos atom "z > 0" +group zpos variable zpos +1891 atoms in group zpos +group ele type 5 +832 atoms in group ele +group top intersect ele zpos 416 atoms in group top +group bot subtract ele top +416 atoms in group bot group bmi type 1 2 3 960 atoms in group bmi @@ -52,6 +59,7 @@ group electrolyte type 1 2 3 4 fix nvt electrolyte nvt temp 500.0 500.0 100 fix shake bmi shake 1e-4 20 0 b 1 2 a 1 +Finding SHAKE clusters ... 0 = # of size 2 clusters 0 = # of size 3 clusters 0 = # of size 4 clusters @@ -65,12 +73,41 @@ compute ctemp electrolyte temp kspace_modify slab 3.0 variable v equal ramp(2,4) -fix conp bot electrode/conp 0.0 1.979 couple top v_v symm on etypes 5 +fix conp bot electrode/conp 0.0 1.979 couple top v_v symm on etypes on 832 atoms in group conp_group thermo 50 thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop v_v run 500 + +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +Your simulation uses code contributions which should be cited: + +- kspace_style pppm/electrode command: + +@article{Ahrens2021, +author = {Ahrens-Iwers, Ludwig J.V. and Mei{\ss}ner, Robert H.}, +doi = {10.1063/5.0063381}, +title = {{Constant potential simulations on a mesh}}, +journal = {Journal of Chemical Physics}, +year = {2021} +volume = {155}, +pages = {104104}, +} +- fix electrode command: + +@article{Ahrens2022 +author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.}, +doi = {10.1063/5.0099239}, +title = {{ELECTRODE: An electrochemistry package for LAMMPS}}, +journal = {The Journal of Chemical Physics}, +year = {2022} +volume = {157}, +pages = {084801}, +} +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + PPPM/electrode initialization ... using 12-bit tables for long-range coulomb (src/kspace.cpp:342) G vector (1/distance) = 0.20904498 @@ -80,9 +117,9 @@ PPPM/electrode initialization ... estimated relative force accuracy = 1.1149519e-07 using double precision MKL FFT 3d grid and FFT values/proc = 307242 204800 - generated 10 of 10 mixed pair_coeff terms from geometric mixing rule +Generated 15 of 15 mixed pair_coeff terms from geometric mixing rule Neighbor list info ... - update every 1 steps, delay 10 steps, check yes + update: every = 1 steps, delay = 0 steps, check = yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 18 ghost atom cutoff = 18 @@ -103,35 +140,35 @@ Neighbor list info ... pair build: skip stencil: none bin: none -Per MPI rank memory allocation (min/avg/max) = 56.89 | 56.89 | 56.89 Mbytes +Per MPI rank memory allocation (min/avg/max) = 54.25 | 54.25 | 54.25 Mbytes Step Temp c_ctemp E_pair TotEng c_qbot c_qtop v_v - 0 0 0 25137191 25137191 0.0085142912 -0.0085142912 2 - 50 17.839699 64.271283 25137031 25137214 -0.0067894391 0.0067894391 2.2 - 100 48.411618 174.41308 25136774 25137273 -0.033422174 0.033422174 2.4 - 150 70.478909 253.91515 25136654 25137380 -0.071583953 0.071583953 2.6 - 200 82.322716 296.58497 25136666 25137513 -0.11962095 0.11962095 2.8 - 250 87.739905 316.10153 25136754 25137658 -0.17281469 0.17281469 3 - 300 91.974584 331.35786 25136861 25137808 -0.22657123 0.22657123 3.2 - 350 100.73048 362.90284 25136928 25137965 -0.27817429 0.27817429 3.4 - 400 111.78597 402.73256 25136977 25138129 -0.32659395 0.32659395 3.6 - 450 122.14181 440.04167 25137033 25138291 -0.37054363 0.37054363 3.8 - 500 127.32331 458.70912 25137133 25138444 -0.40653009 0.40653009 4 -Loop time of 50.8569 on 1 procs for 500 steps with 3776 atoms + 0 0 0 25137190 25137190 0.0085142912 -0.0085142912 2 + 50 17.839699 64.271283 25137031 25137215 -0.0067894391 0.0067894391 2.2 + 100 48.411618 174.41308 25136776 25137275 -0.033422174 0.033422174 2.4 + 150 70.478909 253.91515 25136658 25137384 -0.071583953 0.071583953 2.6 + 200 82.322716 296.58497 25136673 25137521 -0.11962095 0.11962095 2.8 + 250 87.739905 316.10153 25136766 25137670 -0.17281469 0.17281469 3 + 300 91.974584 331.35786 25136877 25137825 -0.22657123 0.22657123 3.2 + 350 100.73048 362.90284 25136949 25137987 -0.27817429 0.27817429 3.4 + 400 111.78597 402.73256 25137004 25138156 -0.32659395 0.32659395 3.6 + 450 122.14181 440.04167 25137066 25138324 -0.37054363 0.37054363 3.8 + 500 127.32331 458.70912 25137171 25138482 -0.40653009 0.40653009 4 +Loop time of 87.6405 on 1 procs for 500 steps with 3776 atoms -Performance: 0.849 ns/day, 28.254 hours/ns, 9.831 timesteps/s -393.5% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 0.493 ns/day, 48.689 hours/ns, 5.705 timesteps/s, 21.543 katom-step/s +100.0% CPU use with 1 MPI tasks x no OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 18.166 | 18.166 | 18.166 | 0.0 | 35.72 -Bond | 0.00091918 | 0.00091918 | 0.00091918 | 0.0 | 0.00 -Kspace | 17.267 | 17.267 | 17.267 | 0.0 | 33.95 -Neigh | 0.27635 | 0.27635 | 0.27635 | 0.0 | 0.54 -Comm | 0.044714 | 0.044714 | 0.044714 | 0.0 | 0.09 -Output | 0.0018345 | 0.0018345 | 0.0018345 | 0.0 | 0.00 -Modify | 15.086 | 15.086 | 15.086 | 0.0 | 29.66 -Other | | 0.01409 | | | 0.03 +Pair | 18.484 | 18.484 | 18.484 | 0.0 | 21.09 +Bond | 0.0016824 | 0.0016824 | 0.0016824 | 0.0 | 0.00 +Kspace | 35.426 | 35.426 | 35.426 | 0.0 | 40.42 +Neigh | 0.30201 | 0.30201 | 0.30201 | 0.0 | 0.34 +Comm | 0.066546 | 0.066546 | 0.066546 | 0.0 | 0.08 +Output | 0.0022768 | 0.0022768 | 0.0022768 | 0.0 | 0.00 +Modify | 33.33 | 33.33 | 33.33 | 0.0 | 38.03 +Other | | 0.0286 | | | 0.03 Nlocal: 3776 ave 3776 max 3776 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -145,4 +182,4 @@ Ave neighs/atom = 457.17161 Ave special neighs/atom = 0.50847458 Neighbor list builds = 7 Dangerous builds = 0 -Total wall time: 0:01:50 +Total wall time: 0:01:44 diff --git a/examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-ramp.g++.4 b/examples/PACKAGES/electrode/graph-il/log.1Dec2022.graph-il-ramp.g++.4 similarity index 52% rename from examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-ramp.g++.4 rename to examples/PACKAGES/electrode/graph-il/log.1Dec2022.graph-il-ramp.g++.4 index ca7625acd6..9287a669db 100644 --- a/examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-ramp.g++.4 +++ b/examples/PACKAGES/electrode/graph-il/log.1Dec2022.graph-il-ramp.g++.4 @@ -1,4 +1,4 @@ -LAMMPS (24 Mar 2022) +LAMMPS (3 Nov 2022) # electrodes with equal-style ramped (electrode-)constant potential # for graphene-ionic liquid supercapacitor @@ -38,13 +38,20 @@ Finding 1-2 1-3 1-4 neighbors ... 1 = max # of 1-3 neighbors 1 = max # of 1-4 neighbors 2 = max # of special neighbors - special bonds CPU = 0.001 seconds - read_data CPU = 0.024 seconds + special bonds CPU = 0.003 seconds + read_data CPU = 0.034 seconds -group bot molecule 641 -416 atoms in group bot -group top molecule 642 +# replicate 4 4 1 # test different sys sizes + +variable zpos atom "z > 0" +group zpos variable zpos +1891 atoms in group zpos +group ele type 5 +832 atoms in group ele +group top intersect ele zpos 416 atoms in group top +group bot subtract ele top +416 atoms in group bot group bmi type 1 2 3 960 atoms in group bmi @@ -53,11 +60,12 @@ group electrolyte type 1 2 3 4 fix nvt electrolyte nvt temp 500.0 500.0 100 fix shake bmi shake 1e-4 20 0 b 1 2 a 1 +Finding SHAKE clusters ... 0 = # of size 2 clusters 0 = # of size 3 clusters 0 = # of size 4 clusters 320 = # of frozen angles - find clusters CPU = 0.001 seconds + find clusters CPU = 0.002 seconds variable q atom q compute qtop top reduce sum v_q @@ -66,12 +74,41 @@ compute ctemp electrolyte temp kspace_modify slab 3.0 variable v equal ramp(2,4) -fix conp bot electrode/conp 0.0 1.979 couple top v_v symm on etypes 5 +fix conp bot electrode/conp 0.0 1.979 couple top v_v symm on etypes on 832 atoms in group conp_group thermo 50 thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop v_v run 500 + +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +Your simulation uses code contributions which should be cited: + +- kspace_style pppm/electrode command: + +@article{Ahrens2021, +author = {Ahrens-Iwers, Ludwig J.V. and Mei{\ss}ner, Robert H.}, +doi = {10.1063/5.0063381}, +title = {{Constant potential simulations on a mesh}}, +journal = {Journal of Chemical Physics}, +year = {2021} +volume = {155}, +pages = {104104}, +} +- fix electrode command: + +@article{Ahrens2022 +author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.}, +doi = {10.1063/5.0099239}, +title = {{ELECTRODE: An electrochemistry package for LAMMPS}}, +journal = {The Journal of Chemical Physics}, +year = {2022} +volume = {157}, +pages = {084801}, +} +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + PPPM/electrode initialization ... using 12-bit tables for long-range coulomb (src/kspace.cpp:342) G vector (1/distance) = 0.20904498 @@ -81,9 +118,9 @@ PPPM/electrode initialization ... estimated relative force accuracy = 1.1149519e-07 using double precision MKL FFT 3d grid and FFT values/proc = 151593 85504 - generated 10 of 10 mixed pair_coeff terms from geometric mixing rule +Generated 15 of 15 mixed pair_coeff terms from geometric mixing rule Neighbor list info ... - update every 1 steps, delay 10 steps, check yes + update: every = 1 steps, delay = 0 steps, check = yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 18 ghost atom cutoff = 18 @@ -104,35 +141,35 @@ Neighbor list info ... pair build: skip stencil: none bin: none -Per MPI rank memory allocation (min/avg/max) = 23.63 | 27.46 | 31.29 Mbytes +Per MPI rank memory allocation (min/avg/max) = 22.9 | 26.72 | 30.55 Mbytes Step Temp c_ctemp E_pair TotEng c_qbot c_qtop v_v - 0 0 0 25137191 25137191 0.0085142912 -0.0085142912 2 - 50 17.839699 64.271283 25137031 25137214 -0.0067894391 0.0067894391 2.2 - 100 48.411618 174.41308 25136774 25137273 -0.033422174 0.033422174 2.4 - 150 70.478909 253.91515 25136654 25137380 -0.071583953 0.071583953 2.6 - 200 82.322716 296.58497 25136666 25137513 -0.11962095 0.11962095 2.8 - 250 87.739905 316.10153 25136754 25137658 -0.17281469 0.17281469 3 - 300 91.974584 331.35786 25136861 25137808 -0.22657123 0.22657123 3.2 - 350 100.73048 362.90284 25136928 25137965 -0.27817429 0.27817429 3.4 - 400 111.78597 402.73256 25136977 25138129 -0.32659395 0.32659395 3.6 - 450 122.14181 440.04167 25137033 25138291 -0.37054363 0.37054363 3.8 - 500 127.32331 458.70912 25137133 25138444 -0.40653009 0.40653009 4 -Loop time of 31.7642 on 4 procs for 500 steps with 3776 atoms + 0 0 0 25137190 25137190 0.0085142912 -0.0085142912 2 + 50 17.839699 64.271283 25137031 25137215 -0.0067894391 0.0067894391 2.2 + 100 48.411618 174.41308 25136776 25137275 -0.033422174 0.033422174 2.4 + 150 70.478909 253.91515 25136658 25137384 -0.071583953 0.071583953 2.6 + 200 82.322716 296.58497 25136673 25137521 -0.11962095 0.11962095 2.8 + 250 87.739905 316.10153 25136766 25137670 -0.17281469 0.17281469 3 + 300 91.974584 331.35786 25136877 25137825 -0.22657123 0.22657123 3.2 + 350 100.73048 362.90284 25136949 25137987 -0.27817429 0.27817429 3.4 + 400 111.78597 402.73256 25137004 25138156 -0.32659395 0.32659395 3.6 + 450 122.14181 440.04167 25137066 25138324 -0.37054363 0.37054363 3.8 + 500 127.32331 458.70912 25137171 25138482 -0.40653009 0.40653009 4 +Loop time of 49.2075 on 4 procs for 500 steps with 3776 atoms -Performance: 1.360 ns/day, 17.647 hours/ns, 15.741 timesteps/s -94.1% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 0.878 ns/day, 27.337 hours/ns, 10.161 timesteps/s, 38.368 katom-step/s +75.7% CPU use with 4 MPI tasks x no OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 6.7949 | 7.0359 | 7.3092 | 7.9 | 22.15 -Bond | 0.00069874 | 0.00073747 | 0.00077928 | 0.0 | 0.00 -Kspace | 14.375 | 14.648 | 14.89 | 5.5 | 46.12 -Neigh | 0.12057 | 0.1206 | 0.12062 | 0.0 | 0.38 -Comm | 0.13412 | 0.13439 | 0.13483 | 0.1 | 0.42 -Output | 0.0010019 | 0.0013088 | 0.0020937 | 1.3 | 0.00 -Modify | 9.8017 | 9.8025 | 9.8031 | 0.0 | 30.86 -Other | | 0.02036 | | | 0.06 +Pair | 5.7517 | 5.9151 | 6.0961 | 6.6 | 12.02 +Bond | 0.0011959 | 0.0013362 | 0.0014512 | 0.2 | 0.00 +Kspace | 24.223 | 24.404 | 24.566 | 3.2 | 49.59 +Neigh | 0.10283 | 0.10288 | 0.10301 | 0.0 | 0.21 +Comm | 0.30801 | 0.31944 | 0.33141 | 2.0 | 0.65 +Output | 0.0010416 | 0.0014127 | 0.0024086 | 1.5 | 0.00 +Modify | 18.405 | 18.418 | 18.432 | 0.3 | 37.43 +Other | | 0.04459 | | | 0.09 Nlocal: 944 ave 951 max 941 min Histogram: 1 2 0 0 0 0 0 0 0 1 @@ -146,4 +183,4 @@ Ave neighs/atom = 457.17161 Ave special neighs/atom = 0.50847458 Neighbor list builds = 7 Dangerous builds = 0 -Total wall time: 0:00:58 +Total wall time: 0:00:55 diff --git a/examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-thermo.g++.1 b/examples/PACKAGES/electrode/graph-il/log.1Dec2022.graph-il-thermo.g++.1 similarity index 55% rename from examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-thermo.g++.1 rename to examples/PACKAGES/electrode/graph-il/log.1Dec2022.graph-il-thermo.g++.1 index e6fe963222..42eeb1f97e 100644 --- a/examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-thermo.g++.1 +++ b/examples/PACKAGES/electrode/graph-il/log.1Dec2022.graph-il-thermo.g++.1 @@ -1,4 +1,4 @@ -LAMMPS (24 Mar 2022) +LAMMPS (3 Nov 2022) # electrodes with thermopotentiostat # for graphene-ionic liquid supercapacitor @@ -38,12 +38,19 @@ Finding 1-2 1-3 1-4 neighbors ... 1 = max # of 1-4 neighbors 2 = max # of special neighbors special bonds CPU = 0.002 seconds - read_data CPU = 0.024 seconds + read_data CPU = 0.021 seconds -group bot molecule 641 -416 atoms in group bot -group top molecule 642 +# replicate 4 4 1 # test different sys sizes + +variable zpos atom "z > 0" +group zpos variable zpos +1891 atoms in group zpos +group ele type 5 +832 atoms in group ele +group top intersect ele zpos 416 atoms in group top +group bot subtract ele top +416 atoms in group bot group bmi type 1 2 3 960 atoms in group bmi @@ -52,11 +59,12 @@ group electrolyte type 1 2 3 4 fix nvt electrolyte nvt temp 500.0 500.0 100 fix shake bmi shake 1e-4 20 0 b 1 2 a 1 +Finding SHAKE clusters ... 0 = # of size 2 clusters 0 = # of size 3 clusters 0 = # of size 4 clusters 320 = # of frozen angles - find clusters CPU = 0.000 seconds + find clusters CPU = 0.001 seconds variable q atom q compute qtop top reduce sum v_q @@ -65,10 +73,10 @@ compute ctemp electrolyte temp kspace_modify slab 3.0 unfix nvt # remove NVT thermostat included from "settings.mod" -fix conpthermo bot electrode/thermo -1.0 1.979 couple top 1.0 etypes 5 temp 500 100 7 # temp tau rng +fix conpthermo bot electrode/thermo -1.0 1.979 couple top 1.0 etypes on temp 500 100 7 symm on # temp tau rng 832 atoms in group conp_group # to compare to regular constant potential, switch previous line to this: -#fix conp bot electrode/conp -1.0 1.979 couple top 1.0 etypes 5 symm on +#fix conp bot electrode/conp -1.0 1.979 couple top 1.0 etypes on symm on fix nve electrolyte nve # note ionic liquid does not reach 500K immediately @@ -77,6 +85,35 @@ fix nve electrolyte nve thermo 50 thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop run 500 + +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +Your simulation uses code contributions which should be cited: + +- kspace_style pppm/electrode command: + +@article{Ahrens2021, +author = {Ahrens-Iwers, Ludwig J.V. and Mei{\ss}ner, Robert H.}, +doi = {10.1063/5.0063381}, +title = {{Constant potential simulations on a mesh}}, +journal = {Journal of Chemical Physics}, +year = {2021} +volume = {155}, +pages = {104104}, +} +- fix electrode command: + +@article{Ahrens2022 +author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.}, +doi = {10.1063/5.0099239}, +title = {{ELECTRODE: An electrochemistry package for LAMMPS}}, +journal = {The Journal of Chemical Physics}, +year = {2022} +volume = {157}, +pages = {084801}, +} +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + PPPM/electrode initialization ... using 12-bit tables for long-range coulomb (src/kspace.cpp:342) G vector (1/distance) = 0.20904498 @@ -86,9 +123,9 @@ PPPM/electrode initialization ... estimated relative force accuracy = 1.1149519e-07 using double precision MKL FFT 3d grid and FFT values/proc = 307242 204800 - generated 10 of 10 mixed pair_coeff terms from geometric mixing rule +Generated 15 of 15 mixed pair_coeff terms from geometric mixing rule Neighbor list info ... - update every 1 steps, delay 10 steps, check yes + update: every = 1 steps, delay = 0 steps, check = yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 18 ghost atom cutoff = 18 @@ -109,35 +146,35 @@ Neighbor list info ... pair build: skip stencil: none bin: none -Per MPI rank memory allocation (min/avg/max) = 56.89 | 56.89 | 56.89 Mbytes +Per MPI rank memory allocation (min/avg/max) = 54.25 | 54.25 | 54.25 Mbytes Step Temp c_ctemp E_pair TotEng c_qbot c_qtop - 0 0 0 25137187 25137187 0.12767613 -0.12767613 - 50 16.63971 59.94807 25137031 25137203 0.11714714 -0.11714714 - 100 40.785523 146.93846 25136782 25137202 0.1278358 -0.1278358 - 150 53.394067 192.3634 25136654 25137204 0.080257143 -0.080257143 - 200 56.419019 203.26143 25136624 25137205 0.024756489 -0.024756489 - 250 54.922935 197.87147 25136640 25137205 -0.024533719 0.024533719 - 300 52.884861 190.52888 25136660 25137205 -0.066341094 0.066341094 - 350 52.41676 188.84244 25136666 25137206 -0.089546252 0.089546252 - 400 54.366979 195.86852 25136646 25137206 -0.10239753 0.10239753 - 450 54.906542 197.81241 25136642 25137208 -0.099987401 0.099987401 - 500 54.33841 195.7656 25136642 25137201 -0.21295942 0.21295942 -Loop time of 49.9831 on 1 procs for 500 steps with 3776 atoms + 0 0 0 25137188 25137188 0.12767608 -0.12767608 + 50 16.63971 59.94807 25137031 25137202 0.11714711 -0.11714711 + 100 40.785523 146.93846 25136782 25137202 0.12783578 -0.12783578 + 150 53.394067 192.3634 25136653 25137203 0.080257127 -0.080257127 + 200 56.419019 203.26143 25136623 25137204 0.024756474 -0.024756474 + 250 54.922935 197.87147 25136641 25137206 -0.024533734 0.024533734 + 300 52.884861 190.52888 25136664 25137209 -0.066341109 0.066341109 + 350 52.41676 188.84244 25136670 25137210 -0.089546266 0.089546266 + 400 54.366979 195.86852 25136651 25137211 -0.10239755 0.10239755 + 450 54.906542 197.81241 25136645 25137210 -0.099987411 0.099987411 + 500 54.33841 195.7656 25136656 25137216 -0.21295943 0.21295943 +Loop time of 87.5281 on 1 procs for 500 steps with 3776 atoms -Performance: 0.864 ns/day, 27.768 hours/ns, 10.003 timesteps/s -393.3% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 0.494 ns/day, 48.627 hours/ns, 5.712 timesteps/s, 21.570 katom-step/s +100.0% CPU use with 1 MPI tasks x no OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 17.01 | 17.01 | 17.01 | 0.0 | 34.03 -Bond | 0.0010374 | 0.0010374 | 0.0010374 | 0.0 | 0.00 -Kspace | 18.096 | 18.096 | 18.096 | 0.0 | 36.20 -Neigh | 0.1828 | 0.1828 | 0.1828 | 0.0 | 0.37 -Comm | 0.043856 | 0.043856 | 0.043856 | 0.0 | 0.09 -Output | 0.0018373 | 0.0018373 | 0.0018373 | 0.0 | 0.00 -Modify | 14.632 | 14.632 | 14.632 | 0.0 | 29.27 -Other | | 0.01548 | | | 0.03 +Pair | 18.819 | 18.819 | 18.819 | 0.0 | 21.50 +Bond | 0.0014336 | 0.0014336 | 0.0014336 | 0.0 | 0.00 +Kspace | 34.891 | 34.891 | 34.891 | 0.0 | 39.86 +Neigh | 0.21542 | 0.21542 | 0.21542 | 0.0 | 0.25 +Comm | 0.063383 | 0.063383 | 0.063383 | 0.0 | 0.07 +Output | 0.0020476 | 0.0020476 | 0.0020476 | 0.0 | 0.00 +Modify | 33.507 | 33.507 | 33.507 | 0.0 | 38.28 +Other | | 0.0281 | | | 0.03 Nlocal: 3776 ave 3776 max 3776 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -151,4 +188,4 @@ Ave neighs/atom = 457.08845 Ave special neighs/atom = 0.50847458 Neighbor list builds = 5 Dangerous builds = 0 -Total wall time: 0:01:50 +Total wall time: 0:01:44 diff --git a/examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-thermo.g++.4 b/examples/PACKAGES/electrode/graph-il/log.1Dec2022.graph-il-thermo.g++.4 similarity index 55% rename from examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-thermo.g++.4 rename to examples/PACKAGES/electrode/graph-il/log.1Dec2022.graph-il-thermo.g++.4 index 006fe4d31b..200dc681df 100644 --- a/examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-thermo.g++.4 +++ b/examples/PACKAGES/electrode/graph-il/log.1Dec2022.graph-il-thermo.g++.4 @@ -1,4 +1,4 @@ -LAMMPS (24 Mar 2022) +LAMMPS (3 Nov 2022) # electrodes with thermopotentiostat # for graphene-ionic liquid supercapacitor @@ -39,12 +39,19 @@ Finding 1-2 1-3 1-4 neighbors ... 1 = max # of 1-4 neighbors 2 = max # of special neighbors special bonds CPU = 0.002 seconds - read_data CPU = 0.025 seconds + read_data CPU = 0.036 seconds -group bot molecule 641 -416 atoms in group bot -group top molecule 642 +# replicate 4 4 1 # test different sys sizes + +variable zpos atom "z > 0" +group zpos variable zpos +1891 atoms in group zpos +group ele type 5 +832 atoms in group ele +group top intersect ele zpos 416 atoms in group top +group bot subtract ele top +416 atoms in group bot group bmi type 1 2 3 960 atoms in group bmi @@ -53,11 +60,12 @@ group electrolyte type 1 2 3 4 fix nvt electrolyte nvt temp 500.0 500.0 100 fix shake bmi shake 1e-4 20 0 b 1 2 a 1 +Finding SHAKE clusters ... 0 = # of size 2 clusters 0 = # of size 3 clusters 0 = # of size 4 clusters 320 = # of frozen angles - find clusters CPU = 0.001 seconds + find clusters CPU = 0.005 seconds variable q atom q compute qtop top reduce sum v_q @@ -66,10 +74,10 @@ compute ctemp electrolyte temp kspace_modify slab 3.0 unfix nvt # remove NVT thermostat included from "settings.mod" -fix conpthermo bot electrode/thermo -1.0 1.979 couple top 1.0 etypes 5 temp 500 100 7 # temp tau rng +fix conpthermo bot electrode/thermo -1.0 1.979 couple top 1.0 etypes on temp 500 100 7 symm on # temp tau rng 832 atoms in group conp_group # to compare to regular constant potential, switch previous line to this: -#fix conp bot electrode/conp -1.0 1.979 couple top 1.0 etypes 5 symm on +#fix conp bot electrode/conp -1.0 1.979 couple top 1.0 etypes on symm on fix nve electrolyte nve # note ionic liquid does not reach 500K immediately @@ -78,6 +86,35 @@ fix nve electrolyte nve thermo 50 thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop run 500 + +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +Your simulation uses code contributions which should be cited: + +- kspace_style pppm/electrode command: + +@article{Ahrens2021, +author = {Ahrens-Iwers, Ludwig J.V. and Mei{\ss}ner, Robert H.}, +doi = {10.1063/5.0063381}, +title = {{Constant potential simulations on a mesh}}, +journal = {Journal of Chemical Physics}, +year = {2021} +volume = {155}, +pages = {104104}, +} +- fix electrode command: + +@article{Ahrens2022 +author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.}, +doi = {10.1063/5.0099239}, +title = {{ELECTRODE: An electrochemistry package for LAMMPS}}, +journal = {The Journal of Chemical Physics}, +year = {2022} +volume = {157}, +pages = {084801}, +} +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + PPPM/electrode initialization ... using 12-bit tables for long-range coulomb (src/kspace.cpp:342) G vector (1/distance) = 0.20904498 @@ -87,9 +124,9 @@ PPPM/electrode initialization ... estimated relative force accuracy = 1.1149519e-07 using double precision MKL FFT 3d grid and FFT values/proc = 151593 85504 - generated 10 of 10 mixed pair_coeff terms from geometric mixing rule +Generated 15 of 15 mixed pair_coeff terms from geometric mixing rule Neighbor list info ... - update every 1 steps, delay 10 steps, check yes + update: every = 1 steps, delay = 0 steps, check = yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 18 ghost atom cutoff = 18 @@ -110,35 +147,35 @@ Neighbor list info ... pair build: skip stencil: none bin: none -Per MPI rank memory allocation (min/avg/max) = 23.63 | 27.46 | 31.29 Mbytes +Per MPI rank memory allocation (min/avg/max) = 22.9 | 26.72 | 30.55 Mbytes Step Temp c_ctemp E_pair TotEng c_qbot c_qtop - 0 0 0 25137187 25137187 0.12767613 -0.12767613 - 50 16.63971 59.94807 25137031 25137203 0.11714714 -0.11714714 - 100 40.785523 146.93846 25136782 25137202 0.1278358 -0.1278358 - 150 53.394067 192.3634 25136654 25137204 0.080257143 -0.080257143 - 200 56.419019 203.26143 25136624 25137205 0.024756489 -0.024756489 - 250 54.922935 197.87147 25136640 25137205 -0.024533719 0.024533719 - 300 52.884861 190.52888 25136660 25137205 -0.066341094 0.066341094 - 350 52.41676 188.84244 25136666 25137206 -0.089546252 0.089546252 - 400 54.366979 195.86852 25136646 25137206 -0.10239753 0.10239753 - 450 54.906542 197.81241 25136642 25137208 -0.099987401 0.099987401 - 500 54.33841 195.7656 25136642 25137201 -0.21295942 0.21295942 -Loop time of 27.6772 on 4 procs for 500 steps with 3776 atoms + 0 0 0 25137188 25137188 0.12767608 -0.12767608 + 50 16.63971 59.94807 25137031 25137202 0.11714711 -0.11714711 + 100 40.785523 146.93846 25136782 25137202 0.12783578 -0.12783578 + 150 53.394067 192.3634 25136653 25137203 0.080257127 -0.080257127 + 200 56.419019 203.26143 25136623 25137204 0.024756474 -0.024756474 + 250 54.922935 197.87147 25136641 25137206 -0.024533734 0.024533734 + 300 52.884861 190.52888 25136664 25137209 -0.066341109 0.066341109 + 350 52.41676 188.84244 25136670 25137210 -0.089546266 0.089546266 + 400 54.366979 195.86852 25136651 25137211 -0.10239755 0.10239755 + 450 54.906542 197.81241 25136645 25137210 -0.099987411 0.099987411 + 500 54.33841 195.7656 25136656 25137216 -0.21295943 0.21295943 +Loop time of 49.2564 on 4 procs for 500 steps with 3776 atoms -Performance: 1.561 ns/day, 15.376 hours/ns, 18.065 timesteps/s -91.7% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 0.877 ns/day, 27.365 hours/ns, 10.151 timesteps/s, 38.330 katom-step/s +76.1% CPU use with 4 MPI tasks x no OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 4.6214 | 4.8032 | 4.9546 | 6.5 | 17.35 -Bond | 0.0005324 | 0.00060509 | 0.00069468 | 0.0 | 0.00 -Kspace | 13.883 | 14.034 | 14.216 | 3.8 | 50.71 -Neigh | 0.061704 | 0.061727 | 0.06176 | 0.0 | 0.22 -Comm | 0.10101 | 0.10374 | 0.10645 | 0.8 | 0.37 -Output | 0.00086818 | 0.0010909 | 0.001715 | 1.1 | 0.00 -Modify | 8.65 | 8.6524 | 8.6545 | 0.1 | 31.26 -Other | | 0.02055 | | | 0.07 +Pair | 5.6984 | 5.9083 | 6.1177 | 6.4 | 12.00 +Bond | 0.0011785 | 0.0012201 | 0.0013055 | 0.1 | 0.00 +Kspace | 24.311 | 24.519 | 24.729 | 3.1 | 49.78 +Neigh | 0.075406 | 0.075487 | 0.07556 | 0.0 | 0.15 +Comm | 0.29972 | 0.30943 | 0.31881 | 1.7 | 0.63 +Output | 0.0012474 | 0.001684 | 0.0027062 | 1.5 | 0.00 +Modify | 18.377 | 18.384 | 18.391 | 0.2 | 37.32 +Other | | 0.05679 | | | 0.12 Nlocal: 944 ave 951 max 940 min Histogram: 1 1 1 0 0 0 0 0 0 1 @@ -152,4 +189,4 @@ Ave neighs/atom = 457.08845 Ave special neighs/atom = 0.50847458 Neighbor list builds = 5 Dangerous builds = 0 -Total wall time: 0:00:50 +Total wall time: 0:00:55 diff --git a/examples/PACKAGES/electrode/graph-il/log.27May2022.graph-il-conq.g++.1 b/examples/PACKAGES/electrode/graph-il/log.27May2022.graph-il-conq.g++.1 deleted file mode 100644 index 0475fb07b6..0000000000 --- a/examples/PACKAGES/electrode/graph-il/log.27May2022.graph-il-conq.g++.1 +++ /dev/null @@ -1,147 +0,0 @@ -LAMMPS (24 Mar 2022) -# electrodes with constrained total charges -# for graphene-ionic liquid supercapacitor - -boundary p p f # slab calculation -include settings.mod # styles, groups, computes and fixes -# set boundary in main script because ffield is periodic -units real -# distribute electrode atoms among all processors: -if "$(extract_setting(world_size) % 2) == 0" then "processors * * 2" - -atom_style full -pair_style lj/cut/coul/long 16 -bond_style harmonic -angle_style harmonic -kspace_style pppm/electrode 1e-7 -# kspace_modify in main script because ffield is periodic - -read_data "data.graph-il" -Reading data file ... - orthogonal box = (0 0 -68) to (32.2 34.4 68) - 1 by 1 by 1 MPI processor grid - reading atoms ... - 3776 atoms - scanning bonds ... - 2 = max bonds/atom - scanning angles ... - 1 = max angles/atom - reading bonds ... - 640 bonds - reading angles ... - 320 angles -Finding 1-2 1-3 1-4 neighbors ... - special bond factors lj: 0 0 0 - special bond factors coul: 0 0 0 - 2 = max # of 1-2 neighbors - 1 = max # of 1-3 neighbors - 1 = max # of 1-4 neighbors - 2 = max # of special neighbors - special bonds CPU = 0.001 seconds - read_data CPU = 0.014 seconds - -group bot molecule 641 -416 atoms in group bot -group top molecule 642 -416 atoms in group top - -group bmi type 1 2 3 -960 atoms in group bmi -group electrolyte type 1 2 3 4 -1280 atoms in group electrolyte - -fix nvt electrolyte nvt temp 500.0 500.0 100 -fix shake bmi shake 1e-4 20 0 b 1 2 a 1 - 0 = # of size 2 clusters - 0 = # of size 3 clusters - 0 = # of size 4 clusters - 320 = # of frozen angles - find clusters CPU = 0.001 seconds - -variable q atom q -compute qtop top reduce sum v_q -compute qbot bot reduce sum v_q -compute ctemp electrolyte temp -kspace_modify slab 3.0 - -fix conq bot electrode/conq -1.0 1.979 couple top 1.0 etypes 5 # conq doesn't take symm option -832 atoms in group conp_group - -thermo 50 -thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop f_conq[1] f_conq[2] -run 500 -PPPM/electrode initialization ... - using 12-bit tables for long-range coulomb (src/kspace.cpp:342) - G vector (1/distance) = 0.20904498 - grid = 32 32 200 - stencil order = 5 - estimated absolute RMS force accuracy = 3.7023506e-05 - estimated relative force accuracy = 1.1149519e-07 - using double precision MKL FFT - 3d grid and FFT values/proc = 307242 204800 - generated 10 of 10 mixed pair_coeff terms from geometric mixing rule -Neighbor list info ... - update every 1 steps, delay 10 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 18 - ghost atom cutoff = 18 - binsize = 9, bins = 4 4 16 - 3 neighbor lists, perpetual/occasional/extra = 2 1 0 - (1) pair lj/cut/coul/long, perpetual - attributes: half, newton on - pair build: half/bin/newton - stencil: half/bin/3d - bin: standard - (2) fix electrode/conq, occasional, skip from (1) - attributes: half, newton on - pair build: skip - stencil: none - bin: none - (3) fix electrode/conq, perpetual, skip from (1) - attributes: half, newton on - pair build: skip - stencil: none - bin: none -Per MPI rank memory allocation (min/avg/max) = 56.89 | 56.89 | 56.89 Mbytes - Step Temp c_ctemp E_pair TotEng c_qbot c_qtop f_conq[1] f_conq[2] - 0 0 0 25136984 25136984 -1 1 -9.931852 10.097344 - 50 20.206425 72.797911 25136825 25137033 -1 1 -9.4359366 9.5964514 - 100 55.931663 201.50563 25136587 25137163 -1 1 -8.0440112 8.1861787 - 150 81.389273 293.22204 25136533 25137371 -1 1 -6.1113109 6.2267114 - 200 92.867946 334.57639 25136646 25137603 -1 1 -4.1857807 4.2740694 - 250 97.518304 351.33028 25136809 25137814 -1 1 -2.8383703 2.9101475 - 300 102.36577 368.79431 25136933 25137987 -1 1 -2.3831643 2.4461115 - 350 113.66597 409.50566 25136960 25138131 -1 1 -2.7083563 2.7457811 - 400 122.8443 442.57252 25136991 25138256 -1 1 -3.4311003 3.3941657 - 450 128.63713 463.44243 25137048 25138373 -1 1 -4.132871 3.9852959 - 500 131.18361 472.61665 25137142 25138493 -1 1 -4.5104095 4.2567261 -Loop time of 43.3117 on 1 procs for 500 steps with 3776 atoms - -Performance: 0.997 ns/day, 24.062 hours/ns, 11.544 timesteps/s -394.5% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 15.554 | 15.554 | 15.554 | 0.0 | 35.91 -Bond | 0.00094737 | 0.00094737 | 0.00094737 | 0.0 | 0.00 -Kspace | 16.502 | 16.502 | 16.502 | 0.0 | 38.10 -Neigh | 0.20285 | 0.20285 | 0.20285 | 0.0 | 0.47 -Comm | 0.039776 | 0.039776 | 0.039776 | 0.0 | 0.09 -Output | 0.0014342 | 0.0014342 | 0.0014342 | 0.0 | 0.00 -Modify | 10.998 | 10.998 | 10.998 | 0.0 | 25.39 -Other | | 0.01261 | | | 0.03 - -Nlocal: 3776 ave 3776 max 3776 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 12510 ave 12510 max 12510 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 1.72559e+06 ave 1.72559e+06 max 1.72559e+06 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 1725588 -Ave neighs/atom = 456.98835 -Ave special neighs/atom = 0.50847458 -Neighbor list builds = 6 -Dangerous builds = 0 -Total wall time: 0:01:38 diff --git a/examples/PACKAGES/electrode/graph-il/log.27May2022.graph-il-conq.g++.4 b/examples/PACKAGES/electrode/graph-il/log.27May2022.graph-il-conq.g++.4 deleted file mode 100644 index ba028200d9..0000000000 --- a/examples/PACKAGES/electrode/graph-il/log.27May2022.graph-il-conq.g++.4 +++ /dev/null @@ -1,148 +0,0 @@ -LAMMPS (24 Mar 2022) -# electrodes with constrained total charges -# for graphene-ionic liquid supercapacitor - -boundary p p f # slab calculation -include settings.mod # styles, groups, computes and fixes -# set boundary in main script because ffield is periodic -units real -# distribute electrode atoms among all processors: -if "$(extract_setting(world_size) % 2) == 0" then "processors * * 2" -processors * * 2 - -atom_style full -pair_style lj/cut/coul/long 16 -bond_style harmonic -angle_style harmonic -kspace_style pppm/electrode 1e-7 -# kspace_modify in main script because ffield is periodic - -read_data "data.graph-il" -Reading data file ... - orthogonal box = (0 0 -68) to (32.2 34.4 68) - 1 by 2 by 2 MPI processor grid - reading atoms ... - 3776 atoms - scanning bonds ... - 2 = max bonds/atom - scanning angles ... - 1 = max angles/atom - reading bonds ... - 640 bonds - reading angles ... - 320 angles -Finding 1-2 1-3 1-4 neighbors ... - special bond factors lj: 0 0 0 - special bond factors coul: 0 0 0 - 2 = max # of 1-2 neighbors - 1 = max # of 1-3 neighbors - 1 = max # of 1-4 neighbors - 2 = max # of special neighbors - special bonds CPU = 0.001 seconds - read_data CPU = 0.015 seconds - -group bot molecule 641 -416 atoms in group bot -group top molecule 642 -416 atoms in group top - -group bmi type 1 2 3 -960 atoms in group bmi -group electrolyte type 1 2 3 4 -1280 atoms in group electrolyte - -fix nvt electrolyte nvt temp 500.0 500.0 100 -fix shake bmi shake 1e-4 20 0 b 1 2 a 1 - 0 = # of size 2 clusters - 0 = # of size 3 clusters - 0 = # of size 4 clusters - 320 = # of frozen angles - find clusters CPU = 0.001 seconds - -variable q atom q -compute qtop top reduce sum v_q -compute qbot bot reduce sum v_q -compute ctemp electrolyte temp -kspace_modify slab 3.0 - -fix conq bot electrode/conq -1.0 1.979 couple top 1.0 etypes 5 # conq doesn't take symm option -832 atoms in group conp_group - -thermo 50 -thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop f_conq[1] f_conq[2] -run 500 -PPPM/electrode initialization ... - using 12-bit tables for long-range coulomb (src/kspace.cpp:342) - G vector (1/distance) = 0.20904498 - grid = 32 32 200 - stencil order = 5 - estimated absolute RMS force accuracy = 3.7023506e-05 - estimated relative force accuracy = 1.1149519e-07 - using double precision MKL FFT - 3d grid and FFT values/proc = 151593 85504 - generated 10 of 10 mixed pair_coeff terms from geometric mixing rule -Neighbor list info ... - update every 1 steps, delay 10 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 18 - ghost atom cutoff = 18 - binsize = 9, bins = 4 4 16 - 3 neighbor lists, perpetual/occasional/extra = 2 1 0 - (1) pair lj/cut/coul/long, perpetual - attributes: half, newton on - pair build: half/bin/newton - stencil: half/bin/3d - bin: standard - (2) fix electrode/conq, occasional, skip from (1) - attributes: half, newton on - pair build: skip - stencil: none - bin: none - (3) fix electrode/conq, perpetual, skip from (1) - attributes: half, newton on - pair build: skip - stencil: none - bin: none -Per MPI rank memory allocation (min/avg/max) = 23.63 | 27.46 | 31.29 Mbytes - Step Temp c_ctemp E_pair TotEng c_qbot c_qtop f_conq[1] f_conq[2] - 0 0 0 25136984 25136984 -1 1 -9.931852 10.097344 - 50 20.206425 72.797911 25136825 25137033 -1 1 -9.4359366 9.5964514 - 100 55.931663 201.50563 25136587 25137163 -1 1 -8.0440112 8.1861787 - 150 81.389273 293.22204 25136533 25137371 -1 1 -6.1113109 6.2267114 - 200 92.867946 334.57639 25136646 25137603 -1 1 -4.1857807 4.2740694 - 250 97.518304 351.33028 25136809 25137814 -1 1 -2.8383703 2.9101475 - 300 102.36577 368.79431 25136933 25137987 -1 1 -2.3831643 2.4461115 - 350 113.66597 409.50566 25136960 25138131 -1 1 -2.7083563 2.7457811 - 400 122.8443 442.57252 25136991 25138256 -1 1 -3.4311003 3.3941657 - 450 128.63713 463.44243 25137048 25138373 -1 1 -4.132871 3.9852959 - 500 131.18361 472.61665 25137142 25138493 -1 1 -4.5104095 4.2567261 -Loop time of 23.8659 on 4 procs for 500 steps with 3776 atoms - -Performance: 1.810 ns/day, 13.259 hours/ns, 20.950 timesteps/s -93.5% CPU use with 4 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 4.2231 | 4.3451 | 4.5145 | 5.6 | 18.21 -Bond | 0.00048756 | 0.00052807 | 0.00058913 | 0.0 | 0.00 -Kspace | 12.239 | 12.408 | 12.53 | 3.3 | 51.99 -Neigh | 0.062108 | 0.062136 | 0.062173 | 0.0 | 0.26 -Comm | 0.092261 | 0.096857 | 0.10111 | 1.1 | 0.41 -Output | 0.00063911 | 0.00082467 | 0.0013664 | 0.0 | 0.00 -Modify | 6.9315 | 6.9362 | 6.9417 | 0.2 | 29.06 -Other | | 0.01626 | | | 0.07 - -Nlocal: 944 ave 948 max 940 min -Histogram: 1 0 0 1 0 0 1 0 0 1 -Nghost: 5920.5 ave 5941 max 5899 min -Histogram: 1 0 0 0 1 1 0 0 0 1 -Neighs: 431397 ave 442329 max 421103 min -Histogram: 2 0 0 0 0 0 0 0 1 1 - -Total # of neighbors = 1725588 -Ave neighs/atom = 456.98835 -Ave special neighs/atom = 0.50847458 -Neighbor list builds = 6 -Dangerous builds = 0 -Total wall time: 0:00:44 From a733e4ddf9576871ad45c3a25b07ba6429c8b2ba Mon Sep 17 00:00:00 2001 From: srtee Date: Thu, 1 Dec 2022 11:46:51 +1000 Subject: [PATCH 40/46] replace au-aq logs --- ....g++.1 => log.1Dec2022.au-aq-ffield.g++.1} | 92 ++++++++++++------ ....g++.4 => log.1Dec2022.au-aq-ffield.g++.4} | 90 ++++++++++++------ ...q-tf.g++.1 => log.1Dec2022.au-aq-tf.g++.1} | 92 ++++++++++++------ ...q-tf.g++.4 => log.1Dec2022.au-aq-tf.g++.4} | 94 ++++++++++++------- 4 files changed, 244 insertions(+), 124 deletions(-) rename examples/PACKAGES/electrode/au-aq/{log.26Apr2022.au-aq-ffield.g++.1 => log.1Dec2022.au-aq-ffield.g++.1} (52%) rename examples/PACKAGES/electrode/au-aq/{log.26Apr2022.au-aq-ffield.g++.4 => log.1Dec2022.au-aq-ffield.g++.4} (53%) rename examples/PACKAGES/electrode/au-aq/{log.26Apr2022.au-aq-tf.g++.1 => log.1Dec2022.au-aq-tf.g++.1} (53%) rename examples/PACKAGES/electrode/au-aq/{log.26Apr2022.au-aq-tf.g++.4 => log.1Dec2022.au-aq-tf.g++.4} (53%) diff --git a/examples/PACKAGES/electrode/au-aq/log.26Apr2022.au-aq-ffield.g++.1 b/examples/PACKAGES/electrode/au-aq/log.1Dec2022.au-aq-ffield.g++.1 similarity index 52% rename from examples/PACKAGES/electrode/au-aq/log.26Apr2022.au-aq-ffield.g++.1 rename to examples/PACKAGES/electrode/au-aq/log.1Dec2022.au-aq-ffield.g++.1 index 76e15ebe53..2c43724875 100644 --- a/examples/PACKAGES/electrode/au-aq/log.26Apr2022.au-aq-ffield.g++.1 +++ b/examples/PACKAGES/electrode/au-aq/log.1Dec2022.au-aq-ffield.g++.1 @@ -1,4 +1,4 @@ -LAMMPS (24 Mar 2022) +LAMMPS (3 Nov 2022) # electrodes with constant potential using finite field # for z-periodic gold-saline electrochemical cell @@ -37,8 +37,8 @@ Finding 1-2 1-3 1-4 neighbors ... 1 = max # of 1-3 neighbors 1 = max # of 1-4 neighbors 2 = max # of special neighbors - special bonds CPU = 0.002 seconds - read_data CPU = 0.051 seconds + special bonds CPU = 0.006 seconds + read_data CPU = 0.097 seconds group bot type 6 1620 atoms in group bot @@ -52,11 +52,12 @@ group electrolyte type 1 2 3 4 5 fix nvt electrolyte nvt temp 298.0 298.0 241 fix shake SPC shake 1e-4 20 0 b 1 2 a 1 +Finding SHAKE clusters ... 0 = # of size 2 clusters 0 = # of size 3 clusters 0 = # of size 4 clusters 2160 = # of frozen angles - find clusters CPU = 0.002 seconds + find clusters CPU = 0.006 seconds variable q atom q variable qz atom q*(z-lz/2) @@ -67,12 +68,41 @@ compute qzbot bot reduce sum v_qz compute ctemp electrolyte temp -fix conp bot electrode/conp -1.0 1.805132 couple top 1.0 symm on ffield yes etypes 6*7 +fix conp bot electrode/conp -1.0 1.805132 couple top 1.0 symm on ffield yes etypes on 3240 atoms in group conp_group thermo 50 thermo_style custom step temp c_ctemp epair etotal c_qtop c_qbot c_qztop c_qzbot run 500 + +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +Your simulation uses code contributions which should be cited: + +- kspace_style pppm/electrode command: + +@article{Ahrens2021, +author = {Ahrens-Iwers, Ludwig J.V. and Mei{\ss}ner, Robert H.}, +doi = {10.1063/5.0063381}, +title = {{Constant potential simulations on a mesh}}, +journal = {Journal of Chemical Physics}, +year = {2021} +volume = {155}, +pages = {104104}, +} +- fix electrode command: + +@article{Ahrens2022 +author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.}, +doi = {10.1063/5.0099239}, +title = {{ELECTRODE: An electrochemistry package for LAMMPS}}, +journal = {The Journal of Chemical Physics}, +year = {2022} +volume = {157}, +pages = {084801}, +} +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + PPPM/electrode initialization ... using 12-bit tables for long-range coulomb (src/kspace.cpp:342) G vector (1/distance) = 0.24017705 @@ -82,9 +112,9 @@ PPPM/electrode initialization ... estimated relative force accuracy = 1.093542e-07 using double precision MKL FFT 3d grid and FFT values/proc = 472567 349920 - generated 21 of 21 mixed pair_coeff terms from geometric mixing rule +Generated 21 of 21 mixed pair_coeff terms from geometric mixing rule Neighbor list info ... - update every 1 steps, delay 10 steps, check yes + update: every = 1 steps, delay = 0 steps, check = yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 17 ghost atom cutoff = 17 @@ -105,35 +135,35 @@ Neighbor list info ... pair build: skip stencil: none bin: none -Per MPI rank memory allocation (min/avg/max) = 194.6 | 194.6 | 194.6 Mbytes +Per MPI rank memory allocation (min/avg/max) = 194.8 | 194.8 | 194.8 Mbytes Step Temp c_ctemp E_pair TotEng c_qtop c_qbot c_qztop c_qzbot - 0 171.61215 298.06731 -39212.819 -35306.164 4.1391573 -4.1391573 78.718381 131.56372 - 50 147.03139 255.37383 -39870.139 -36523.051 4.1312167 -4.1312167 78.563872 131.30255 - 100 149.89027 260.33932 -39878.859 -36466.689 4.0217834 -4.0217834 76.482548 127.82573 - 150 151.7382 263.54893 -39873.178 -36418.942 4.0469977 -4.0469977 76.967548 128.59855 - 200 151.7508 263.57081 -39827.015 -36372.492 4.1830375 -4.1830375 79.554159 132.93925 - 250 152.61146 265.06566 -39791.293 -36317.177 4.1835865 -4.1835865 79.56665 132.97185 - 300 153.51486 266.63475 -39751.841 -36257.16 4.1571861 -4.1571861 79.061431 132.12905 - 350 156.35115 271.561 -39754.955 -36195.708 4.3498059 -4.3498059 82.720202 138.28678 - 400 156.26118 271.40474 -39690.781 -36133.582 4.3444079 -4.3444079 82.619396 138.11873 - 450 158.54164 275.36558 -39681.083 -36071.97 4.2020488 -4.2020488 79.912674 133.55185 - 500 161.40138 280.33258 -39684.185 -36009.972 4.3021924 -4.3021924 81.807527 136.7464 -Loop time of 246.197 on 1 procs for 500 steps with 9798 atoms + 0 171.61215 298.06731 -39021.917 -35115.261 4.1391573 -4.1391573 78.718381 131.56372 + 50 147.03139 255.37383 -39679.603 -36332.515 4.1312167 -4.1312167 78.563872 131.30255 + 100 149.89027 260.33932 -39693.369 -36281.2 4.0217834 -4.0217834 76.482548 127.82573 + 150 151.7382 263.54893 -39686.526 -36232.29 4.0469977 -4.0469977 76.967548 128.59855 + 200 151.7508 263.57081 -39634.089 -36179.566 4.1830375 -4.1830375 79.554159 132.93925 + 250 152.61146 265.06566 -39598.341 -36124.226 4.1835865 -4.1835865 79.56665 132.97185 + 300 153.51486 266.63475 -39560.107 -36065.426 4.1571861 -4.1571861 79.06143 132.12905 + 350 156.35115 271.561 -39554.338 -35995.09 4.3498059 -4.3498059 82.720202 138.28678 + 400 156.26118 271.40474 -39490.412 -35933.213 4.344408 -4.344408 82.619398 138.11874 + 450 158.54163 275.36557 -39487.28 -35878.167 4.2020489 -4.2020489 79.912677 133.55186 + 500 161.40137 280.33257 -39485.763 -35811.55 4.3021927 -4.3021927 81.807532 136.74641 +Loop time of 146.959 on 1 procs for 500 steps with 9798 atoms -Performance: 0.175 ns/day, 136.776 hours/ns, 2.031 timesteps/s -356.3% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 0.294 ns/day, 81.644 hours/ns, 3.402 timesteps/s, 33.336 katom-step/s +100.0% CPU use with 1 MPI tasks x no OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 105.64 | 105.64 | 105.64 | 0.0 | 42.91 -Bond | 0.0010592 | 0.0010592 | 0.0010592 | 0.0 | 0.00 -Kspace | 37.643 | 37.643 | 37.643 | 0.0 | 15.29 -Neigh | 5.8827 | 5.8827 | 5.8827 | 0.0 | 2.39 -Comm | 0.18181 | 0.18181 | 0.18181 | 0.0 | 0.07 -Output | 0.0055762 | 0.0055762 | 0.0055762 | 0.0 | 0.00 -Modify | 96.78 | 96.78 | 96.78 | 0.0 | 39.31 -Other | | 0.06346 | | | 0.03 +Pair | 69.832 | 69.832 | 69.832 | 0.0 | 47.52 +Bond | 0.00091634 | 0.00091634 | 0.00091634 | 0.0 | 0.00 +Kspace | 33.817 | 33.817 | 33.817 | 0.0 | 23.01 +Neigh | 4.2067 | 4.2067 | 4.2067 | 0.0 | 2.86 +Comm | 0.12212 | 0.12212 | 0.12212 | 0.0 | 0.08 +Output | 0.0031896 | 0.0031896 | 0.0031896 | 0.0 | 0.00 +Modify | 38.92 | 38.92 | 38.92 | 0.0 | 26.48 +Other | | 0.05687 | | | 0.04 Nlocal: 9798 ave 9798 max 9798 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -147,4 +177,4 @@ Ave neighs/atom = 842.63544 Ave special neighs/atom = 1.3227189 Neighbor list builds = 22 Dangerous builds = 0 -Total wall time: 0:19:39 +Total wall time: 0:05:33 diff --git a/examples/PACKAGES/electrode/au-aq/log.26Apr2022.au-aq-ffield.g++.4 b/examples/PACKAGES/electrode/au-aq/log.1Dec2022.au-aq-ffield.g++.4 similarity index 53% rename from examples/PACKAGES/electrode/au-aq/log.26Apr2022.au-aq-ffield.g++.4 rename to examples/PACKAGES/electrode/au-aq/log.1Dec2022.au-aq-ffield.g++.4 index 685a71eb74..5a18629cab 100644 --- a/examples/PACKAGES/electrode/au-aq/log.26Apr2022.au-aq-ffield.g++.4 +++ b/examples/PACKAGES/electrode/au-aq/log.1Dec2022.au-aq-ffield.g++.4 @@ -1,4 +1,4 @@ -LAMMPS (24 Mar 2022) +LAMMPS (3 Nov 2022) # electrodes with constant potential using finite field # for z-periodic gold-saline electrochemical cell @@ -39,7 +39,7 @@ Finding 1-2 1-3 1-4 neighbors ... 1 = max # of 1-4 neighbors 2 = max # of special neighbors special bonds CPU = 0.002 seconds - read_data CPU = 0.149 seconds + read_data CPU = 0.118 seconds group bot type 6 1620 atoms in group bot @@ -53,11 +53,12 @@ group electrolyte type 1 2 3 4 5 fix nvt electrolyte nvt temp 298.0 298.0 241 fix shake SPC shake 1e-4 20 0 b 1 2 a 1 +Finding SHAKE clusters ... 0 = # of size 2 clusters 0 = # of size 3 clusters 0 = # of size 4 clusters 2160 = # of frozen angles - find clusters CPU = 0.003 seconds + find clusters CPU = 0.002 seconds variable q atom q variable qz atom q*(z-lz/2) @@ -68,12 +69,41 @@ compute qzbot bot reduce sum v_qz compute ctemp electrolyte temp -fix conp bot electrode/conp -1.0 1.805132 couple top 1.0 symm on ffield yes etypes 6*7 +fix conp bot electrode/conp -1.0 1.805132 couple top 1.0 symm on ffield yes etypes on 3240 atoms in group conp_group thermo 50 thermo_style custom step temp c_ctemp epair etotal c_qtop c_qbot c_qztop c_qzbot run 500 + +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +Your simulation uses code contributions which should be cited: + +- kspace_style pppm/electrode command: + +@article{Ahrens2021, +author = {Ahrens-Iwers, Ludwig J.V. and Mei{\ss}ner, Robert H.}, +doi = {10.1063/5.0063381}, +title = {{Constant potential simulations on a mesh}}, +journal = {Journal of Chemical Physics}, +year = {2021} +volume = {155}, +pages = {104104}, +} +- fix electrode command: + +@article{Ahrens2022 +author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.}, +doi = {10.1063/5.0099239}, +title = {{ELECTRODE: An electrochemistry package for LAMMPS}}, +journal = {The Journal of Chemical Physics}, +year = {2022} +volume = {157}, +pages = {084801}, +} +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + PPPM/electrode initialization ... using 12-bit tables for long-range coulomb (src/kspace.cpp:342) G vector (1/distance) = 0.24017705 @@ -83,9 +113,9 @@ PPPM/electrode initialization ... estimated relative force accuracy = 1.093542e-07 using double precision MKL FFT 3d grid and FFT values/proc = 138958 87480 - generated 21 of 21 mixed pair_coeff terms from geometric mixing rule +Generated 21 of 21 mixed pair_coeff terms from geometric mixing rule Neighbor list info ... - update every 1 steps, delay 10 steps, check yes + update: every = 1 steps, delay = 0 steps, check = yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 17 ghost atom cutoff = 17 @@ -106,35 +136,35 @@ Neighbor list info ... pair build: skip stencil: none bin: none -Per MPI rank memory allocation (min/avg/max) = 118.1 | 120.6 | 123.1 Mbytes +Per MPI rank memory allocation (min/avg/max) = 118.2 | 120.7 | 123.2 Mbytes Step Temp c_ctemp E_pair TotEng c_qtop c_qbot c_qztop c_qzbot - 0 171.61215 298.06731 -39212.819 -35306.164 4.1391573 -4.1391573 78.718381 131.56372 - 50 147.03139 255.37383 -39870.139 -36523.051 4.1312167 -4.1312167 78.563872 131.30255 - 100 149.89027 260.33932 -39878.859 -36466.689 4.0217834 -4.0217834 76.482548 127.82573 - 150 151.7382 263.54893 -39873.178 -36418.942 4.0469977 -4.0469977 76.967548 128.59855 - 200 151.7508 263.57081 -39827.015 -36372.492 4.1830375 -4.1830375 79.554159 132.93925 - 250 152.61146 265.06566 -39791.293 -36317.177 4.1835865 -4.1835865 79.56665 132.97185 - 300 153.51486 266.63475 -39751.841 -36257.16 4.1571861 -4.1571861 79.061431 132.12905 - 350 156.35115 271.561 -39754.955 -36195.708 4.3498059 -4.3498059 82.7202 138.28678 - 400 156.26118 271.40474 -39690.781 -36133.582 4.3444079 -4.3444079 82.619398 138.11873 - 450 158.54163 275.36558 -39681.083 -36071.97 4.2020488 -4.2020488 79.912675 133.55185 - 500 161.40138 280.33257 -39684.185 -36009.972 4.3021924 -4.3021924 81.807527 136.7464 -Loop time of 111.902 on 4 procs for 500 steps with 9798 atoms + 0 171.61215 298.06731 -39021.917 -35115.261 4.1391573 -4.1391573 78.718381 131.56372 + 50 147.03139 255.37383 -39679.603 -36332.515 4.1312167 -4.1312167 78.563872 131.30255 + 100 149.89027 260.33932 -39693.369 -36281.2 4.0217834 -4.0217834 76.482548 127.82573 + 150 151.7382 263.54893 -39686.526 -36232.29 4.0469977 -4.0469977 76.967548 128.59855 + 200 151.7508 263.57081 -39634.089 -36179.566 4.1830375 -4.1830375 79.554159 132.93925 + 250 152.61146 265.06566 -39598.341 -36124.226 4.1835864 -4.1835864 79.56665 132.97185 + 300 153.51486 266.63475 -39560.107 -36065.426 4.1571861 -4.1571861 79.06143 132.12905 + 350 156.35115 271.561 -39554.338 -35995.09 4.3498059 -4.3498059 82.720201 138.28678 + 400 156.26118 271.40474 -39490.412 -35933.213 4.3444079 -4.3444079 82.619397 138.11873 + 450 158.54163 275.36558 -39487.279 -35878.167 4.202049 -4.202049 79.912678 133.55186 + 500 161.40137 280.33256 -39485.763 -35811.55 4.3021925 -4.3021925 81.807529 136.7464 +Loop time of 97.2399 on 4 procs for 500 steps with 9798 atoms -Performance: 0.386 ns/day, 62.168 hours/ns, 4.468 timesteps/s -97.2% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 0.444 ns/day, 54.022 hours/ns, 5.142 timesteps/s, 50.381 katom-step/s +87.0% CPU use with 4 MPI tasks x no OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 21.816 | 31.136 | 40.866 | 166.5 | 27.82 -Bond | 0.00073413 | 0.00080346 | 0.00084203 | 0.0 | 0.00 -Kspace | 29.546 | 39.137 | 48.326 | 146.4 | 34.97 -Neigh | 2.5867 | 2.5872 | 2.5877 | 0.0 | 2.31 -Comm | 0.33289 | 0.33603 | 0.33791 | 0.3 | 0.30 -Output | 0.0022537 | 0.0030028 | 0.005192 | 2.3 | 0.00 -Modify | 38.498 | 38.635 | 38.77 | 2.2 | 34.53 -Other | | 0.06679 | | | 0.06 +Pair | 19.363 | 28.08 | 37.126 | 160.3 | 28.88 +Bond | 0.00094043 | 0.00096516 | 0.00098016 | 0.0 | 0.00 +Kspace | 31.655 | 40.554 | 49.143 | 131.3 | 41.71 +Neigh | 2.2289 | 2.2294 | 2.2297 | 0.0 | 2.29 +Comm | 0.5341 | 0.54079 | 0.5478 | 0.9 | 0.56 +Output | 0.0024141 | 0.0026943 | 0.0034176 | 0.8 | 0.00 +Modify | 25.6 | 25.755 | 25.908 | 2.8 | 26.49 +Other | | 0.07733 | | | 0.08 Nlocal: 2449.5 ave 2908 max 2012 min Histogram: 2 0 0 0 0 0 0 0 0 2 @@ -148,4 +178,4 @@ Ave neighs/atom = 842.63544 Ave special neighs/atom = 1.3227189 Neighbor list builds = 22 Dangerous builds = 0 -Total wall time: 0:07:48 +Total wall time: 0:03:03 diff --git a/examples/PACKAGES/electrode/au-aq/log.26Apr2022.au-aq-tf.g++.1 b/examples/PACKAGES/electrode/au-aq/log.1Dec2022.au-aq-tf.g++.1 similarity index 53% rename from examples/PACKAGES/electrode/au-aq/log.26Apr2022.au-aq-tf.g++.1 rename to examples/PACKAGES/electrode/au-aq/log.1Dec2022.au-aq-tf.g++.1 index 316e092c55..5ed60bc88a 100644 --- a/examples/PACKAGES/electrode/au-aq/log.26Apr2022.au-aq-tf.g++.1 +++ b/examples/PACKAGES/electrode/au-aq/log.1Dec2022.au-aq-tf.g++.1 @@ -1,4 +1,4 @@ -LAMMPS (24 Mar 2022) +LAMMPS (3 Nov 2022) # electrodes with constant potential using finite field # for z-periodic gold-saline electrochemical cell # using Thomas-Fermi metallicity model: electrode q and qz will be @@ -39,8 +39,8 @@ Finding 1-2 1-3 1-4 neighbors ... 1 = max # of 1-3 neighbors 1 = max # of 1-4 neighbors 2 = max # of special neighbors - special bonds CPU = 0.010 seconds - read_data CPU = 0.115 seconds + special bonds CPU = 0.003 seconds + read_data CPU = 0.065 seconds group bot type 6 1620 atoms in group bot @@ -54,11 +54,12 @@ group electrolyte type 1 2 3 4 5 fix nvt electrolyte nvt temp 298.0 298.0 241 fix shake SPC shake 1e-4 20 0 b 1 2 a 1 +Finding SHAKE clusters ... 0 = # of size 2 clusters 0 = # of size 3 clusters 0 = # of size 4 clusters 2160 = # of frozen angles - find clusters CPU = 0.010 seconds + find clusters CPU = 0.002 seconds variable q atom q variable qz atom q*(z-lz/2) @@ -69,7 +70,7 @@ compute qzbot bot reduce sum v_qz compute ctemp electrolyte temp -fix conp bot electrode/conp -1.0 1.805132 couple top 1.0 symm on ffield yes etypes 6*7 +fix conp bot electrode/conp -1.0 1.805132 couple top 1.0 symm on ffield yes etypes on 3240 atoms in group conp_group fix_modify conp tf 6 1.0 18.1715745 fix_modify conp tf 7 1.0 18.1715745 @@ -77,6 +78,35 @@ fix_modify conp tf 7 1.0 18.1715745 thermo 50 thermo_style custom step temp c_ctemp epair etotal c_qtop c_qbot c_qztop c_qzbot run 500 + +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +Your simulation uses code contributions which should be cited: + +- kspace_style pppm/electrode command: + +@article{Ahrens2021, +author = {Ahrens-Iwers, Ludwig J.V. and Mei{\ss}ner, Robert H.}, +doi = {10.1063/5.0063381}, +title = {{Constant potential simulations on a mesh}}, +journal = {Journal of Chemical Physics}, +year = {2021} +volume = {155}, +pages = {104104}, +} +- fix electrode command: + +@article{Ahrens2022 +author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.}, +doi = {10.1063/5.0099239}, +title = {{ELECTRODE: An electrochemistry package for LAMMPS}}, +journal = {The Journal of Chemical Physics}, +year = {2022} +volume = {157}, +pages = {084801}, +} +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + PPPM/electrode initialization ... using 12-bit tables for long-range coulomb (src/kspace.cpp:342) G vector (1/distance) = 0.24017705 @@ -86,9 +116,9 @@ PPPM/electrode initialization ... estimated relative force accuracy = 1.093542e-07 using double precision MKL FFT 3d grid and FFT values/proc = 472567 349920 - generated 21 of 21 mixed pair_coeff terms from geometric mixing rule +Generated 21 of 21 mixed pair_coeff terms from geometric mixing rule Neighbor list info ... - update every 1 steps, delay 10 steps, check yes + update: every = 1 steps, delay = 0 steps, check = yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 17 ghost atom cutoff = 17 @@ -109,35 +139,35 @@ Neighbor list info ... pair build: skip stencil: none bin: none -Per MPI rank memory allocation (min/avg/max) = 194.6 | 194.6 | 194.6 Mbytes +Per MPI rank memory allocation (min/avg/max) = 194.8 | 194.8 | 194.8 Mbytes Step Temp c_ctemp E_pair TotEng c_qtop c_qbot c_qztop c_qzbot - 0 171.61215 298.06731 -39190.106 -35283.45 4.0804484 -4.0804484 79.075127 131.20697 - 50 147.14308 255.56782 -39849.964 -36500.334 3.9990346 -3.9990346 77.497181 128.57759 - 100 149.94935 260.44194 -39857.533 -36444.019 3.8613914 -3.8613914 74.82985 124.15315 - 150 151.95924 263.93285 -39855.567 -36396.299 3.8677064 -3.8677064 74.957279 124.33201 - 200 151.66737 263.42591 -39802.585 -36349.961 3.99842 -3.99842 77.491015 128.54496 - 250 152.36874 264.64408 -39763.306 -36294.716 3.9925863 -3.9925863 77.379445 128.37226 - 300 153.83916 267.19802 -39737.075 -36235.012 3.94995 -3.94995 76.553896 127.00395 - 350 155.88897 270.75827 -39722.265 -36173.539 4.0598524 -4.0598524 78.679643 130.5394 - 400 156.51993 271.85415 -39674.759 -36111.669 4.1312899 -4.1312899 80.060369 132.83599 - 450 160.21339 278.26919 -39697.962 -36050.793 3.9068098 -3.9068098 75.713484 125.59216 - 500 161.63639 280.74075 -39669.412 -35989.849 3.9261656 -3.9261656 76.0806 126.22255 -Loop time of 280.183 on 1 procs for 500 steps with 9798 atoms + 0 171.61215 298.06731 -39001.911 -35095.255 4.0804484 -4.0804484 79.075127 131.20697 + 50 147.14308 255.56782 -39665.525 -36315.894 3.9990346 -3.9990346 77.497181 128.57759 + 100 149.94935 260.44194 -39679.441 -36265.927 3.8613914 -3.8613914 74.82985 124.15315 + 150 151.95924 263.93285 -39677.184 -36217.916 3.8677064 -3.8677064 74.957279 124.33201 + 200 151.66737 263.42591 -39618.173 -36165.549 3.99842 -3.99842 77.491015 128.54496 + 250 152.36874 264.64408 -39579.164 -36110.574 3.9925863 -3.9925863 77.379445 128.37226 + 300 153.83916 267.19802 -39554.899 -36052.836 3.94995 -3.94995 76.553896 127.00395 + 350 155.88897 270.75827 -39535.02 -35986.294 4.0598524 -4.0598524 78.679643 130.5394 + 400 156.51993 271.85415 -39484.219 -35921.13 4.1312898 -4.1312898 80.060368 132.83598 + 450 160.21339 278.26919 -39517.776 -35870.607 3.9068098 -3.9068098 75.713484 125.59216 + 500 161.63639 280.74075 -39488.333 -35808.771 3.9261656 -3.9261656 76.080599 126.22255 +Loop time of 185.804 on 1 procs for 500 steps with 9798 atoms -Performance: 0.154 ns/day, 155.657 hours/ns, 1.785 timesteps/s -341.9% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 0.233 ns/day, 103.225 hours/ns, 2.691 timesteps/s, 26.366 katom-step/s +100.0% CPU use with 1 MPI tasks x no OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 119.69 | 119.69 | 119.69 | 0.0 | 42.72 -Bond | 0.0010952 | 0.0010952 | 0.0010952 | 0.0 | 0.00 -Kspace | 42.137 | 42.137 | 42.137 | 0.0 | 15.04 -Neigh | 6.5403 | 6.5403 | 6.5403 | 0.0 | 2.33 -Comm | 0.19411 | 0.19411 | 0.19411 | 0.0 | 0.07 -Output | 0.0053644 | 0.0053644 | 0.0053644 | 0.0 | 0.00 -Modify | 111.54 | 111.54 | 111.54 | 0.0 | 39.81 -Other | | 0.07244 | | | 0.03 +Pair | 91 | 91 | 91 | 0.0 | 48.98 +Bond | 0.0010315 | 0.0010315 | 0.0010315 | 0.0 | 0.00 +Kspace | 40.32 | 40.32 | 40.32 | 0.0 | 21.70 +Neigh | 5.6505 | 5.6505 | 5.6505 | 0.0 | 3.04 +Comm | 0.15304 | 0.15304 | 0.15304 | 0.0 | 0.08 +Output | 0.0041829 | 0.0041829 | 0.0041829 | 0.0 | 0.00 +Modify | 48.607 | 48.607 | 48.607 | 0.0 | 26.16 +Other | | 0.06807 | | | 0.04 Nlocal: 9798 ave 9798 max 9798 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -151,4 +181,4 @@ Ave neighs/atom = 842.7079 Ave special neighs/atom = 1.3227189 Neighbor list builds = 23 Dangerous builds = 0 -Total wall time: 0:21:11 +Total wall time: 0:06:18 diff --git a/examples/PACKAGES/electrode/au-aq/log.26Apr2022.au-aq-tf.g++.4 b/examples/PACKAGES/electrode/au-aq/log.1Dec2022.au-aq-tf.g++.4 similarity index 53% rename from examples/PACKAGES/electrode/au-aq/log.26Apr2022.au-aq-tf.g++.4 rename to examples/PACKAGES/electrode/au-aq/log.1Dec2022.au-aq-tf.g++.4 index 450a6c1fda..9791c35b43 100644 --- a/examples/PACKAGES/electrode/au-aq/log.26Apr2022.au-aq-tf.g++.4 +++ b/examples/PACKAGES/electrode/au-aq/log.1Dec2022.au-aq-tf.g++.4 @@ -1,4 +1,4 @@ -LAMMPS (24 Mar 2022) +LAMMPS (3 Nov 2022) # electrodes with constant potential using finite field # for z-periodic gold-saline electrochemical cell # using Thomas-Fermi metallicity model: electrode q and qz will be @@ -41,7 +41,7 @@ Finding 1-2 1-3 1-4 neighbors ... 1 = max # of 1-4 neighbors 2 = max # of special neighbors special bonds CPU = 0.002 seconds - read_data CPU = 0.091 seconds + read_data CPU = 0.114 seconds group bot type 6 1620 atoms in group bot @@ -55,11 +55,12 @@ group electrolyte type 1 2 3 4 5 fix nvt electrolyte nvt temp 298.0 298.0 241 fix shake SPC shake 1e-4 20 0 b 1 2 a 1 +Finding SHAKE clusters ... 0 = # of size 2 clusters 0 = # of size 3 clusters 0 = # of size 4 clusters 2160 = # of frozen angles - find clusters CPU = 0.001 seconds + find clusters CPU = 0.002 seconds variable q atom q variable qz atom q*(z-lz/2) @@ -70,7 +71,7 @@ compute qzbot bot reduce sum v_qz compute ctemp electrolyte temp -fix conp bot electrode/conp -1.0 1.805132 couple top 1.0 symm on ffield yes etypes 6*7 +fix conp bot electrode/conp -1.0 1.805132 couple top 1.0 symm on ffield yes etypes on 3240 atoms in group conp_group fix_modify conp tf 6 1.0 18.1715745 fix_modify conp tf 7 1.0 18.1715745 @@ -78,6 +79,35 @@ fix_modify conp tf 7 1.0 18.1715745 thermo 50 thermo_style custom step temp c_ctemp epair etotal c_qtop c_qbot c_qztop c_qzbot run 500 + +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +Your simulation uses code contributions which should be cited: + +- kspace_style pppm/electrode command: + +@article{Ahrens2021, +author = {Ahrens-Iwers, Ludwig J.V. and Mei{\ss}ner, Robert H.}, +doi = {10.1063/5.0063381}, +title = {{Constant potential simulations on a mesh}}, +journal = {Journal of Chemical Physics}, +year = {2021} +volume = {155}, +pages = {104104}, +} +- fix electrode command: + +@article{Ahrens2022 +author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.}, +doi = {10.1063/5.0099239}, +title = {{ELECTRODE: An electrochemistry package for LAMMPS}}, +journal = {The Journal of Chemical Physics}, +year = {2022} +volume = {157}, +pages = {084801}, +} +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + PPPM/electrode initialization ... using 12-bit tables for long-range coulomb (src/kspace.cpp:342) G vector (1/distance) = 0.24017705 @@ -87,9 +117,9 @@ PPPM/electrode initialization ... estimated relative force accuracy = 1.093542e-07 using double precision MKL FFT 3d grid and FFT values/proc = 138958 87480 - generated 21 of 21 mixed pair_coeff terms from geometric mixing rule +Generated 21 of 21 mixed pair_coeff terms from geometric mixing rule Neighbor list info ... - update every 1 steps, delay 10 steps, check yes + update: every = 1 steps, delay = 0 steps, check = yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 17 ghost atom cutoff = 17 @@ -110,35 +140,35 @@ Neighbor list info ... pair build: skip stencil: none bin: none -Per MPI rank memory allocation (min/avg/max) = 118.1 | 120.6 | 123.1 Mbytes +Per MPI rank memory allocation (min/avg/max) = 118.2 | 120.7 | 123.2 Mbytes Step Temp c_ctemp E_pair TotEng c_qtop c_qbot c_qztop c_qzbot - 0 171.61215 298.06731 -39190.106 -35283.45 4.0804484 -4.0804484 79.075127 131.20697 - 50 147.14308 255.56782 -39849.964 -36500.334 3.9990346 -3.9990346 77.497181 128.57759 - 100 149.94935 260.44194 -39857.533 -36444.019 3.8613914 -3.8613914 74.82985 124.15315 - 150 151.95924 263.93285 -39855.567 -36396.299 3.8677064 -3.8677064 74.957279 124.33201 - 200 151.66737 263.42591 -39802.585 -36349.961 3.99842 -3.99842 77.491015 128.54496 - 250 152.36874 264.64408 -39763.306 -36294.716 3.9925863 -3.9925863 77.379445 128.37226 - 300 153.83916 267.19802 -39737.075 -36235.012 3.94995 -3.94995 76.553896 127.00395 - 350 155.88897 270.75827 -39722.265 -36173.539 4.0598524 -4.0598524 78.679643 130.5394 - 400 156.51993 271.85415 -39674.759 -36111.669 4.1312899 -4.1312899 80.060369 132.83599 - 450 160.21339 278.26919 -39697.962 -36050.793 3.9068098 -3.9068098 75.713485 125.59216 - 500 161.63639 280.74075 -39669.412 -35989.849 3.9261654 -3.9261654 76.080597 126.22255 -Loop time of 110.716 on 4 procs for 500 steps with 9798 atoms + 0 171.61215 298.06731 -39001.911 -35095.255 4.0804484 -4.0804484 79.075127 131.20697 + 50 147.14308 255.56782 -39665.525 -36315.894 3.9990346 -3.9990346 77.497181 128.57759 + 100 149.94935 260.44194 -39679.441 -36265.927 3.8613914 -3.8613914 74.82985 124.15315 + 150 151.95924 263.93285 -39677.184 -36217.916 3.8677064 -3.8677064 74.957279 124.33201 + 200 151.66737 263.42591 -39618.173 -36165.549 3.99842 -3.99842 77.491015 128.54496 + 250 152.36874 264.64408 -39579.163 -36110.574 3.9925863 -3.9925863 77.379445 128.37226 + 300 153.83916 267.19802 -39554.899 -36052.835 3.94995 -3.94995 76.553896 127.00395 + 350 155.88897 270.75826 -39535.02 -35986.294 4.0598523 -4.0598523 78.679642 130.5394 + 400 156.51993 271.85415 -39484.219 -35921.13 4.1312897 -4.1312897 80.060366 132.83598 + 450 160.21339 278.26919 -39517.776 -35870.607 3.9068099 -3.9068099 75.713486 125.59216 + 500 161.63639 280.74075 -39488.333 -35808.771 3.9261657 -3.9261657 76.080602 126.22256 +Loop time of 104.099 on 4 procs for 500 steps with 9798 atoms -Performance: 0.390 ns/day, 61.509 hours/ns, 4.516 timesteps/s -97.2% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 0.415 ns/day, 57.833 hours/ns, 4.803 timesteps/s, 47.061 katom-step/s +87.7% CPU use with 4 MPI tasks x no OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 21.17 | 30.449 | 39.65 | 164.9 | 27.50 -Bond | 0.0007313 | 0.00077537 | 0.00081477 | 0.0 | 0.00 -Kspace | 29.854 | 38.911 | 48.058 | 143.8 | 35.14 -Neigh | 2.7206 | 2.7213 | 2.722 | 0.0 | 2.46 -Comm | 0.33023 | 0.33225 | 0.33384 | 0.2 | 0.30 -Output | 0.0024528 | 0.0027565 | 0.0035754 | 0.9 | 0.00 -Modify | 38.091 | 38.233 | 38.365 | 2.1 | 34.53 -Other | | 0.06636 | | | 0.06 +Pair | 20.951 | 30.326 | 40.07 | 166.7 | 29.13 +Bond | 0.00098259 | 0.0010706 | 0.0011926 | 0.3 | 0.00 +Kspace | 33.465 | 43.037 | 52.268 | 137.5 | 41.34 +Neigh | 2.6007 | 2.6014 | 2.6021 | 0.0 | 2.50 +Comm | 0.57766 | 0.58318 | 0.58875 | 0.7 | 0.56 +Output | 0.0022277 | 0.0024765 | 0.0031841 | 0.8 | 0.00 +Modify | 27.292 | 27.47 | 27.647 | 3.1 | 26.39 +Other | | 0.0787 | | | 0.08 Nlocal: 2449.5 ave 2908 max 2017 min Histogram: 2 0 0 0 0 0 0 0 0 2 @@ -147,9 +177,9 @@ Histogram: 2 0 0 0 0 0 0 0 0 2 Neighs: 2.06421e+06 ave 2.7551e+06 max 1.40237e+06 min Histogram: 2 0 0 0 0 0 0 0 0 2 -Total # of neighbors = 8256853 -Ave neighs/atom = 842.708 +Total # of neighbors = 8256852 +Ave neighs/atom = 842.7079 Ave special neighs/atom = 1.3227189 Neighbor list builds = 23 Dangerous builds = 0 -Total wall time: 0:08:22 +Total wall time: 0:03:12 From 793987e0c3fba94196ea932c75749d1436c41e80 Mon Sep 17 00:00:00 2001 From: srtee Date: Thu, 1 Dec 2022 11:48:26 +1000 Subject: [PATCH 41/46] replace planar logs --- ...1 => log.1Dec2022.planar-ewald-ew2d.g++.1} | 50 ++++++++++----- ...4 => log.1Dec2022.planar-ewald-ew2d.g++.4} | 50 ++++++++++----- ... => log.1Dec2022.planar-ewald-ew3dc.g++.1} | 50 ++++++++++----- ... => log.1Dec2022.planar-ewald-ew3dc.g++.4} | 50 ++++++++++----- ...=> log.1Dec2022.planar-ewald-ffield.g++.1} | 48 +++++++++----- ...=> log.1Dec2022.planar-ewald-ffield.g++.4} | 50 ++++++++++----- ...1 => log.1Dec2022.planar-pppm-ew3dc.g++.1} | 63 ++++++++++++++----- ...4 => log.1Dec2022.planar-pppm-ew3dc.g++.4} | 63 ++++++++++++++----- ... => log.1Dec2022.planar-pppm-ffield.g++.1} | 61 +++++++++++++----- ... => log.1Dec2022.planar-pppm-ffield.g++.4} | 63 ++++++++++++++----- 10 files changed, 386 insertions(+), 162 deletions(-) rename examples/PACKAGES/electrode/planar/{log.26Apr2022.planar-ewald-ew2d.g++.1 => log.1Dec2022.planar-ewald-ew2d.g++.1} (76%) rename examples/PACKAGES/electrode/planar/{log.26Apr2022.planar-ewald-ew2d.g++.4 => log.1Dec2022.planar-ewald-ew2d.g++.4} (76%) rename examples/PACKAGES/electrode/planar/{log.26Apr2022.planar-ewald-ew3dc.g++.1 => log.1Dec2022.planar-ewald-ew3dc.g++.1} (76%) rename examples/PACKAGES/electrode/planar/{log.26Apr2022.planar-ewald-ew3dc.g++.4 => log.1Dec2022.planar-ewald-ew3dc.g++.4} (76%) rename examples/PACKAGES/electrode/planar/{log.26Apr2022.planar-ewald-ffield.g++.1 => log.1Dec2022.planar-ewald-ffield.g++.1} (77%) rename examples/PACKAGES/electrode/planar/{log.26Apr2022.planar-ewald-ffield.g++.4 => log.1Dec2022.planar-ewald-ffield.g++.4} (76%) rename examples/PACKAGES/electrode/planar/{log.26Apr2022.planar-pppm-ew3dc.g++.1 => log.1Dec2022.planar-pppm-ew3dc.g++.1} (73%) rename examples/PACKAGES/electrode/planar/{log.26Apr2022.planar-pppm-ew3dc.g++.4 => log.1Dec2022.planar-pppm-ew3dc.g++.4} (73%) rename examples/PACKAGES/electrode/planar/{log.26Apr2022.planar-pppm-ffield.g++.1 => log.1Dec2022.planar-pppm-ffield.g++.1} (73%) rename examples/PACKAGES/electrode/planar/{log.26Apr2022.planar-pppm-ffield.g++.4 => log.1Dec2022.planar-pppm-ffield.g++.4} (73%) diff --git a/examples/PACKAGES/electrode/planar/log.26Apr2022.planar-ewald-ew2d.g++.1 b/examples/PACKAGES/electrode/planar/log.1Dec2022.planar-ewald-ew2d.g++.1 similarity index 76% rename from examples/PACKAGES/electrode/planar/log.26Apr2022.planar-ewald-ew2d.g++.1 rename to examples/PACKAGES/electrode/planar/log.1Dec2022.planar-ewald-ew2d.g++.1 index b01114e64c..bc2cf5b1e3 100644 --- a/examples/PACKAGES/electrode/planar/log.26Apr2022.planar-ewald-ew2d.g++.1 +++ b/examples/PACKAGES/electrode/planar/log.1Dec2022.planar-ewald-ew2d.g++.1 @@ -1,4 +1,4 @@ -LAMMPS (24 Mar 2022) +LAMMPS (3 Nov 2022) boundary p p f kspace_style ewald/electrode 1.0e-7 kspace_modify slab ew2d @@ -28,8 +28,8 @@ Finding 1-2 1-3 1-4 neighbors ... 0 = max # of 1-3 neighbors 0 = max # of 1-4 neighbors 1 = max # of special neighbors - special bonds CPU = 0.000 seconds - read_data CPU = 0.006 seconds + special bonds CPU = 0.001 seconds + read_data CPU = 0.005 seconds group bot molecule 1 144 atoms in group bot @@ -67,6 +67,24 @@ thermo 1 thermo_style custom step v_v c_qbot c_qtop v_qtheory v_percdev run 10 + +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +Your simulation uses code contributions which should be cited: + +- fix electrode command: + +@article{Ahrens2022 +author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.}, +doi = {10.1063/5.0099239}, +title = {{ELECTRODE: An electrochemistry package for LAMMPS}}, +journal = {The Journal of Chemical Physics}, +year = {2022} +volume = {157}, +pages = {084801}, +} +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + WARNING: No fixes with time integration, atoms won't move (src/verlet.cpp:60) Ewald/electrode initialization ... WARNING: System is not charge neutral, net charge = 0.000219 (src/kspace.cpp:327) @@ -76,9 +94,9 @@ WARNING: System is not charge neutral, net charge = 0.000219 (src/kspace.cpp:327 estimated relative force accuracy = 1.2145309e-07 KSpace vectors: actual max1d max3d = 90 5 665 kxmax kymax kzmax = 3 3 5 - generated 1 of 1 mixed pair_coeff terms from geometric mixing rule +Generated 1 of 1 mixed pair_coeff terms from geometric mixing rule Neighbor list info ... - update every 1 steps, delay 10 steps, check yes + update: every = 1 steps, delay = 0 steps, check = yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 16 ghost atom cutoff = 16 @@ -94,7 +112,7 @@ Neighbor list info ... pair build: copy stencil: none bin: none -Per MPI rank memory allocation (min/avg/max) = 15.93 | 15.93 | 15.93 Mbytes +Per MPI rank memory allocation (min/avg/max) = 15.94 | 15.94 | 15.94 Mbytes Step v_v c_qbot c_qtop v_qtheory v_percdev 0 0 0 0 0 0 1 0.2 -0.030920491 0.030920491 0.031376826 -1.4543703 @@ -107,22 +125,22 @@ Per MPI rank memory allocation (min/avg/max) = 15.93 | 15.93 | 15.93 Mbytes 8 1.6 -0.24736393 0.24736393 0.25101461 -1.4543704 9 1.8 -0.27828442 0.27828442 0.28239144 -1.4543704 10 2 -0.30920491 0.30920491 0.31376826 -1.4543704 -Loop time of 0.0912872 on 1 procs for 10 steps with 288 atoms +Loop time of 0.0451804 on 1 procs for 10 steps with 288 atoms -Performance: 9.465 ns/day, 2.536 hours/ns, 109.544 timesteps/s -400.1% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 19.123 ns/day, 1.255 hours/ns, 221.335 timesteps/s, 63.744 katom-step/s +100.0% CPU use with 1 MPI tasks x no OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.0086713 | 0.0086713 | 0.0086713 | 0.0 | 9.50 -Bond | 3.759e-06 | 3.759e-06 | 3.759e-06 | 0.0 | 0.00 -Kspace | 0.04575 | 0.04575 | 0.04575 | 0.0 | 50.12 +Pair | 0.0046814 | 0.0046814 | 0.0046814 | 0.0 | 10.36 +Bond | 1.293e-06 | 1.293e-06 | 1.293e-06 | 0.0 | 0.00 +Kspace | 0.028302 | 0.028302 | 0.028302 | 0.0 | 62.64 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.00018224 | 0.00018224 | 0.00018224 | 0.0 | 0.20 -Output | 0.0027569 | 0.0027569 | 0.0027569 | 0.0 | 3.02 -Modify | 0.03386 | 0.03386 | 0.03386 | 0.0 | 37.09 -Other | | 6.314e-05 | | | 0.07 +Comm | 7.3611e-05 | 7.3611e-05 | 7.3611e-05 | 0.0 | 0.16 +Output | 0.001128 | 0.001128 | 0.001128 | 0.0 | 2.50 +Modify | 0.010919 | 0.010919 | 0.010919 | 0.0 | 24.17 +Other | | 7.567e-05 | | | 0.17 Nlocal: 288 ave 288 max 288 min Histogram: 1 0 0 0 0 0 0 0 0 0 diff --git a/examples/PACKAGES/electrode/planar/log.26Apr2022.planar-ewald-ew2d.g++.4 b/examples/PACKAGES/electrode/planar/log.1Dec2022.planar-ewald-ew2d.g++.4 similarity index 76% rename from examples/PACKAGES/electrode/planar/log.26Apr2022.planar-ewald-ew2d.g++.4 rename to examples/PACKAGES/electrode/planar/log.1Dec2022.planar-ewald-ew2d.g++.4 index 29a0d660a1..b5243e747c 100644 --- a/examples/PACKAGES/electrode/planar/log.26Apr2022.planar-ewald-ew2d.g++.4 +++ b/examples/PACKAGES/electrode/planar/log.1Dec2022.planar-ewald-ew2d.g++.4 @@ -1,4 +1,4 @@ -LAMMPS (24 Mar 2022) +LAMMPS (3 Nov 2022) boundary p p f kspace_style ewald/electrode 1.0e-7 kspace_modify slab ew2d @@ -29,8 +29,8 @@ Finding 1-2 1-3 1-4 neighbors ... 0 = max # of 1-3 neighbors 0 = max # of 1-4 neighbors 1 = max # of special neighbors - special bonds CPU = 0.001 seconds - read_data CPU = 0.008 seconds + special bonds CPU = 0.003 seconds + read_data CPU = 0.009 seconds group bot molecule 1 144 atoms in group bot @@ -68,6 +68,24 @@ thermo 1 thermo_style custom step v_v c_qbot c_qtop v_qtheory v_percdev run 10 + +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +Your simulation uses code contributions which should be cited: + +- fix electrode command: + +@article{Ahrens2022 +author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.}, +doi = {10.1063/5.0099239}, +title = {{ELECTRODE: An electrochemistry package for LAMMPS}}, +journal = {The Journal of Chemical Physics}, +year = {2022} +volume = {157}, +pages = {084801}, +} +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + WARNING: No fixes with time integration, atoms won't move (src/verlet.cpp:60) Ewald/electrode initialization ... WARNING: System is not charge neutral, net charge = 0.000219 (src/kspace.cpp:327) @@ -77,9 +95,9 @@ WARNING: System is not charge neutral, net charge = 0.000219 (src/kspace.cpp:327 estimated relative force accuracy = 1.2145309e-07 KSpace vectors: actual max1d max3d = 90 5 665 kxmax kymax kzmax = 3 3 5 - generated 1 of 1 mixed pair_coeff terms from geometric mixing rule +Generated 1 of 1 mixed pair_coeff terms from geometric mixing rule Neighbor list info ... - update every 1 steps, delay 10 steps, check yes + update: every = 1 steps, delay = 0 steps, check = yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 16 ghost atom cutoff = 16 @@ -95,7 +113,7 @@ Neighbor list info ... pair build: copy stencil: none bin: none -Per MPI rank memory allocation (min/avg/max) = 15.96 | 15.96 | 15.96 Mbytes +Per MPI rank memory allocation (min/avg/max) = 15.97 | 15.97 | 15.97 Mbytes Step v_v c_qbot c_qtop v_qtheory v_percdev 0 0 0 0 0 0 1 0.2 -0.030920491 0.030920491 0.031376826 -1.4543703 @@ -108,22 +126,22 @@ Per MPI rank memory allocation (min/avg/max) = 15.96 | 15.96 | 15.96 Mbytes 8 1.6 -0.24736393 0.24736393 0.25101461 -1.4543704 9 1.8 -0.27828442 0.27828442 0.28239144 -1.4543704 10 2 -0.30920491 0.30920491 0.31376826 -1.4543704 -Loop time of 0.0456609 on 4 procs for 10 steps with 288 atoms +Loop time of 0.022489 on 4 procs for 10 steps with 288 atoms -Performance: 18.922 ns/day, 1.268 hours/ns, 219.006 timesteps/s -86.7% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 38.419 ns/day, 0.625 hours/ns, 444.661 timesteps/s, 128.062 katom-step/s +91.6% CPU use with 4 MPI tasks x no OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.0019389 | 0.0024013 | 0.0030807 | 0.9 | 5.26 -Bond | 1.493e-06 | 1.7132e-06 | 1.935e-06 | 0.0 | 0.00 -Kspace | 0.016165 | 0.016695 | 0.017072 | 0.3 | 36.56 +Pair | 0.0011688 | 0.0013694 | 0.0016077 | 0.4 | 6.09 +Bond | 6.72e-07 | 7.59e-07 | 9.02e-07 | 0.0 | 0.00 +Kspace | 0.0077542 | 0.0093901 | 0.010384 | 1.0 | 41.75 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.0030891 | 0.0037595 | 0.0040145 | 0.6 | 8.23 -Output | 0.0024177 | 0.0027885 | 0.0037099 | 1.0 | 6.11 -Modify | 0.01944 | 0.019746 | 0.020327 | 0.2 | 43.24 -Other | | 0.0002691 | | | 0.59 +Comm | 0.0015392 | 0.0016945 | 0.00183 | 0.3 | 7.53 +Output | 0.00084374 | 0.0010929 | 0.0015437 | 0.8 | 4.86 +Modify | 0.007495 | 0.0084669 | 0.010081 | 1.1 | 37.65 +Other | | 0.0004745 | | | 2.11 Nlocal: 72 ave 72 max 72 min Histogram: 4 0 0 0 0 0 0 0 0 0 diff --git a/examples/PACKAGES/electrode/planar/log.26Apr2022.planar-ewald-ew3dc.g++.1 b/examples/PACKAGES/electrode/planar/log.1Dec2022.planar-ewald-ew3dc.g++.1 similarity index 76% rename from examples/PACKAGES/electrode/planar/log.26Apr2022.planar-ewald-ew3dc.g++.1 rename to examples/PACKAGES/electrode/planar/log.1Dec2022.planar-ewald-ew3dc.g++.1 index d5292ad6ef..bebd5aed4a 100644 --- a/examples/PACKAGES/electrode/planar/log.26Apr2022.planar-ewald-ew3dc.g++.1 +++ b/examples/PACKAGES/electrode/planar/log.1Dec2022.planar-ewald-ew3dc.g++.1 @@ -1,4 +1,4 @@ -LAMMPS (24 Mar 2022) +LAMMPS (3 Nov 2022) boundary p p f kspace_style ewald/electrode 1.0e-7 kspace_modify slab 3.0 # ew3dc @@ -28,8 +28,8 @@ Finding 1-2 1-3 1-4 neighbors ... 0 = max # of 1-3 neighbors 0 = max # of 1-4 neighbors 1 = max # of special neighbors - special bonds CPU = 0.000 seconds - read_data CPU = 0.007 seconds + special bonds CPU = 0.001 seconds + read_data CPU = 0.004 seconds group bot molecule 1 144 atoms in group bot @@ -67,6 +67,24 @@ thermo 1 thermo_style custom step v_v c_qbot c_qtop v_qtheory v_percdev run 10 + +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +Your simulation uses code contributions which should be cited: + +- fix electrode command: + +@article{Ahrens2022 +author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.}, +doi = {10.1063/5.0099239}, +title = {{ELECTRODE: An electrochemistry package for LAMMPS}}, +journal = {The Journal of Chemical Physics}, +year = {2022} +volume = {157}, +pages = {084801}, +} +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + WARNING: No fixes with time integration, atoms won't move (src/verlet.cpp:60) Ewald/electrode initialization ... WARNING: System is not charge neutral, net charge = 0.000219 (src/kspace.cpp:327) @@ -76,9 +94,9 @@ WARNING: System is not charge neutral, net charge = 0.000219 (src/kspace.cpp:327 estimated relative force accuracy = 9.3919471e-08 KSpace vectors: actual max1d max3d = 266 12 7812 kxmax kymax kzmax = 3 3 12 - generated 1 of 1 mixed pair_coeff terms from geometric mixing rule +Generated 1 of 1 mixed pair_coeff terms from geometric mixing rule Neighbor list info ... - update every 1 steps, delay 10 steps, check yes + update: every = 1 steps, delay = 0 steps, check = yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 16 ghost atom cutoff = 16 @@ -94,7 +112,7 @@ Neighbor list info ... pair build: copy stencil: none bin: none -Per MPI rank memory allocation (min/avg/max) = 27.27 | 27.27 | 27.27 Mbytes +Per MPI rank memory allocation (min/avg/max) = 27.29 | 27.29 | 27.29 Mbytes Step v_v c_qbot c_qtop v_qtheory v_percdev 0 0 0 0 0 0 1 0.2 -0.030925182 0.030925182 0.031376826 -1.4394194 @@ -107,22 +125,22 @@ Per MPI rank memory allocation (min/avg/max) = 27.27 | 27.27 | 27.27 Mbytes 8 1.6 -0.24740146 0.24740146 0.25101461 -1.4394195 9 1.8 -0.27832664 0.27832664 0.28239144 -1.4394195 10 2 -0.30925182 0.30925182 0.31376826 -1.4394195 -Loop time of 0.0672288 on 1 procs for 10 steps with 288 atoms +Loop time of 0.0243868 on 1 procs for 10 steps with 288 atoms -Performance: 12.852 ns/day, 1.867 hours/ns, 148.746 timesteps/s -400.4% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 35.429 ns/day, 0.677 hours/ns, 410.058 timesteps/s, 118.097 katom-step/s +100.0% CPU use with 1 MPI tasks x no OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.0071442 | 0.0071442 | 0.0071442 | 0.0 | 10.63 -Bond | 2.976e-06 | 2.976e-06 | 2.976e-06 | 0.0 | 0.00 -Kspace | 0.0097903 | 0.0097903 | 0.0097903 | 0.0 | 14.56 +Pair | 0.0041504 | 0.0041504 | 0.0041504 | 0.0 | 17.02 +Bond | 8.92e-07 | 8.92e-07 | 8.92e-07 | 0.0 | 0.00 +Kspace | 0.0046942 | 0.0046942 | 0.0046942 | 0.0 | 19.25 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.00023514 | 0.00023514 | 0.00023514 | 0.0 | 0.35 -Output | 0.0029795 | 0.0029795 | 0.0029795 | 0.0 | 4.43 -Modify | 0.047009 | 0.047009 | 0.047009 | 0.0 | 69.92 -Other | | 6.809e-05 | | | 0.10 +Comm | 6.7942e-05 | 6.7942e-05 | 6.7942e-05 | 0.0 | 0.28 +Output | 0.0010799 | 0.0010799 | 0.0010799 | 0.0 | 4.43 +Modify | 0.014311 | 0.014311 | 0.014311 | 0.0 | 58.69 +Other | | 8.199e-05 | | | 0.34 Nlocal: 288 ave 288 max 288 min Histogram: 1 0 0 0 0 0 0 0 0 0 diff --git a/examples/PACKAGES/electrode/planar/log.26Apr2022.planar-ewald-ew3dc.g++.4 b/examples/PACKAGES/electrode/planar/log.1Dec2022.planar-ewald-ew3dc.g++.4 similarity index 76% rename from examples/PACKAGES/electrode/planar/log.26Apr2022.planar-ewald-ew3dc.g++.4 rename to examples/PACKAGES/electrode/planar/log.1Dec2022.planar-ewald-ew3dc.g++.4 index 92c5bf3cea..9899edc256 100644 --- a/examples/PACKAGES/electrode/planar/log.26Apr2022.planar-ewald-ew3dc.g++.4 +++ b/examples/PACKAGES/electrode/planar/log.1Dec2022.planar-ewald-ew3dc.g++.4 @@ -1,4 +1,4 @@ -LAMMPS (24 Mar 2022) +LAMMPS (3 Nov 2022) boundary p p f kspace_style ewald/electrode 1.0e-7 kspace_modify slab 3.0 # ew3dc @@ -29,8 +29,8 @@ Finding 1-2 1-3 1-4 neighbors ... 0 = max # of 1-3 neighbors 0 = max # of 1-4 neighbors 1 = max # of special neighbors - special bonds CPU = 0.008 seconds - read_data CPU = 0.123 seconds + special bonds CPU = 0.003 seconds + read_data CPU = 0.007 seconds group bot molecule 1 144 atoms in group bot @@ -68,6 +68,24 @@ thermo 1 thermo_style custom step v_v c_qbot c_qtop v_qtheory v_percdev run 10 + +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +Your simulation uses code contributions which should be cited: + +- fix electrode command: + +@article{Ahrens2022 +author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.}, +doi = {10.1063/5.0099239}, +title = {{ELECTRODE: An electrochemistry package for LAMMPS}}, +journal = {The Journal of Chemical Physics}, +year = {2022} +volume = {157}, +pages = {084801}, +} +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + WARNING: No fixes with time integration, atoms won't move (src/verlet.cpp:60) Ewald/electrode initialization ... WARNING: System is not charge neutral, net charge = 0.000219 (src/kspace.cpp:327) @@ -77,9 +95,9 @@ WARNING: System is not charge neutral, net charge = 0.000219 (src/kspace.cpp:327 estimated relative force accuracy = 9.3919471e-08 KSpace vectors: actual max1d max3d = 266 12 7812 kxmax kymax kzmax = 3 3 12 - generated 1 of 1 mixed pair_coeff terms from geometric mixing rule +Generated 1 of 1 mixed pair_coeff terms from geometric mixing rule Neighbor list info ... - update every 1 steps, delay 10 steps, check yes + update: every = 1 steps, delay = 0 steps, check = yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 16 ghost atom cutoff = 16 @@ -95,7 +113,7 @@ Neighbor list info ... pair build: copy stencil: none bin: none -Per MPI rank memory allocation (min/avg/max) = 27.31 | 27.31 | 27.31 Mbytes +Per MPI rank memory allocation (min/avg/max) = 27.32 | 27.32 | 27.32 Mbytes Step v_v c_qbot c_qtop v_qtheory v_percdev 0 0 0 0 0 0 1 0.2 -0.030925182 0.030925182 0.031376826 -1.4394194 @@ -108,22 +126,22 @@ Per MPI rank memory allocation (min/avg/max) = 27.31 | 27.31 | 27.31 Mbytes 8 1.6 -0.24740146 0.24740146 0.25101461 -1.4394195 9 1.8 -0.27832664 0.27832664 0.28239144 -1.4394195 10 2 -0.30925182 0.30925182 0.31376826 -1.4394195 -Loop time of 0.0459561 on 4 procs for 10 steps with 288 atoms +Loop time of 0.0200123 on 4 procs for 10 steps with 288 atoms -Performance: 18.801 ns/day, 1.277 hours/ns, 217.599 timesteps/s -95.8% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 43.173 ns/day, 0.556 hours/ns, 499.692 timesteps/s, 143.911 katom-step/s +90.2% CPU use with 4 MPI tasks x no OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.0021527 | 0.0026891 | 0.0037845 | 1.3 | 5.85 -Bond | 1.303e-06 | 1.9462e-06 | 3.206e-06 | 0.0 | 0.00 -Kspace | 0.0066254 | 0.0077509 | 0.0083577 | 0.8 | 16.87 +Pair | 0.0014059 | 0.0015013 | 0.0015856 | 0.2 | 7.50 +Bond | 7.12e-07 | 8.9675e-07 | 1.19e-06 | 0.0 | 0.00 +Kspace | 0.0036091 | 0.0037586 | 0.0039024 | 0.2 | 18.78 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.00285 | 0.0057275 | 0.0067088 | 2.2 | 12.46 -Output | 0.0024325 | 0.0034682 | 0.0065316 | 3.0 | 7.55 -Modify | 0.025911 | 0.025969 | 0.026007 | 0.0 | 56.51 -Other | | 0.0003494 | | | 0.76 +Comm | 0.0017095 | 0.0017404 | 0.001775 | 0.1 | 8.70 +Output | 0.00092975 | 0.0010846 | 0.0015398 | 0.8 | 5.42 +Modify | 0.011292 | 0.011375 | 0.011438 | 0.1 | 56.84 +Other | | 0.0005509 | | | 2.75 Nlocal: 72 ave 72 max 72 min Histogram: 4 0 0 0 0 0 0 0 0 0 diff --git a/examples/PACKAGES/electrode/planar/log.26Apr2022.planar-ewald-ffield.g++.1 b/examples/PACKAGES/electrode/planar/log.1Dec2022.planar-ewald-ffield.g++.1 similarity index 77% rename from examples/PACKAGES/electrode/planar/log.26Apr2022.planar-ewald-ffield.g++.1 rename to examples/PACKAGES/electrode/planar/log.1Dec2022.planar-ewald-ffield.g++.1 index b0172323a3..3ea9920c7c 100644 --- a/examples/PACKAGES/electrode/planar/log.26Apr2022.planar-ewald-ffield.g++.1 +++ b/examples/PACKAGES/electrode/planar/log.1Dec2022.planar-ewald-ffield.g++.1 @@ -1,4 +1,4 @@ -LAMMPS (24 Mar 2022) +LAMMPS (3 Nov 2022) boundary p p p # finite field, fully periodic kspace_style ewald/electrode 1.0e-7 @@ -28,7 +28,7 @@ Finding 1-2 1-3 1-4 neighbors ... 0 = max # of 1-4 neighbors 1 = max # of special neighbors special bonds CPU = 0.001 seconds - read_data CPU = 0.010 seconds + read_data CPU = 0.004 seconds group bot molecule 1 144 atoms in group bot @@ -66,6 +66,24 @@ thermo 1 thermo_style custom step v_v c_qbot c_qtop v_qtheory v_percdev run 10 + +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +Your simulation uses code contributions which should be cited: + +- fix electrode command: + +@article{Ahrens2022 +author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.}, +doi = {10.1063/5.0099239}, +title = {{ELECTRODE: An electrochemistry package for LAMMPS}}, +journal = {The Journal of Chemical Physics}, +year = {2022} +volume = {157}, +pages = {084801}, +} +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + WARNING: No fixes with time integration, atoms won't move (src/verlet.cpp:60) Ewald/electrode initialization ... WARNING: System is not charge neutral, net charge = 0.000219 (src/kspace.cpp:327) @@ -75,9 +93,9 @@ WARNING: System is not charge neutral, net charge = 0.000219 (src/kspace.cpp:327 estimated relative force accuracy = 1.2145309e-07 KSpace vectors: actual max1d max3d = 95 5 665 kxmax kymax kzmax = 3 3 5 - generated 1 of 1 mixed pair_coeff terms from geometric mixing rule +Generated 1 of 1 mixed pair_coeff terms from geometric mixing rule Neighbor list info ... - update every 1 steps, delay 10 steps, check yes + update: every = 1 steps, delay = 0 steps, check = yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 16 ghost atom cutoff = 16 @@ -93,7 +111,7 @@ Neighbor list info ... pair build: copy stencil: none bin: none -Per MPI rank memory allocation (min/avg/max) = 16.01 | 16.01 | 16.01 Mbytes +Per MPI rank memory allocation (min/avg/max) = 16.02 | 16.02 | 16.02 Mbytes Step v_v c_qbot c_qtop v_qtheory v_percdev 0 0 0 0 0 0 1 0.2 -0.030908718 0.030908718 0.031376826 -1.491893 @@ -106,22 +124,22 @@ Per MPI rank memory allocation (min/avg/max) = 16.01 | 16.01 | 16.01 Mbytes 8 1.6 -0.24726974 0.24726974 0.25101461 -1.491893 9 1.8 -0.27817846 0.27817846 0.28239144 -1.491893 10 2 -0.30908718 0.30908718 0.31376826 -1.491893 -Loop time of 0.0481838 on 1 procs for 10 steps with 288 atoms +Loop time of 0.0147727 on 1 procs for 10 steps with 288 atoms -Performance: 17.931 ns/day, 1.338 hours/ns, 207.539 timesteps/s -390.7% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 58.486 ns/day, 0.410 hours/ns, 676.926 timesteps/s, 194.955 katom-step/s +75.1% CPU use with 1 MPI tasks x no OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.0071719 | 0.0071719 | 0.0071719 | 0.0 | 14.88 -Bond | 2.946e-06 | 2.946e-06 | 2.946e-06 | 0.0 | 0.01 -Kspace | 0.0038758 | 0.0038758 | 0.0038758 | 0.0 | 8.04 +Pair | 0.0035163 | 0.0035163 | 0.0035163 | 0.0 | 23.80 +Bond | 9.61e-07 | 9.61e-07 | 9.61e-07 | 0.0 | 0.01 +Kspace | 0.0018156 | 0.0018156 | 0.0018156 | 0.0 | 12.29 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.00053561 | 0.00053561 | 0.00053561 | 0.0 | 1.11 -Output | 0.0025385 | 0.0025385 | 0.0025385 | 0.0 | 5.27 -Modify | 0.033951 | 0.033951 | 0.033951 | 0.0 | 70.46 -Other | | 0.0001075 | | | 0.22 +Comm | 0.00012717 | 0.00012717 | 0.00012717 | 0.0 | 0.86 +Output | 0.00083495 | 0.00083495 | 0.00083495 | 0.0 | 5.65 +Modify | 0.0083949 | 0.0083949 | 0.0083949 | 0.0 | 56.83 +Other | | 8.273e-05 | | | 0.56 Nlocal: 288 ave 288 max 288 min Histogram: 1 0 0 0 0 0 0 0 0 0 diff --git a/examples/PACKAGES/electrode/planar/log.26Apr2022.planar-ewald-ffield.g++.4 b/examples/PACKAGES/electrode/planar/log.1Dec2022.planar-ewald-ffield.g++.4 similarity index 76% rename from examples/PACKAGES/electrode/planar/log.26Apr2022.planar-ewald-ffield.g++.4 rename to examples/PACKAGES/electrode/planar/log.1Dec2022.planar-ewald-ffield.g++.4 index b1ee1bec45..ef9c212755 100644 --- a/examples/PACKAGES/electrode/planar/log.26Apr2022.planar-ewald-ffield.g++.4 +++ b/examples/PACKAGES/electrode/planar/log.1Dec2022.planar-ewald-ffield.g++.4 @@ -1,4 +1,4 @@ -LAMMPS (24 Mar 2022) +LAMMPS (3 Nov 2022) boundary p p p # finite field, fully periodic kspace_style ewald/electrode 1.0e-7 @@ -28,8 +28,8 @@ Finding 1-2 1-3 1-4 neighbors ... 0 = max # of 1-3 neighbors 0 = max # of 1-4 neighbors 1 = max # of special neighbors - special bonds CPU = 0.001 seconds - read_data CPU = 0.026 seconds + special bonds CPU = 0.002 seconds + read_data CPU = 0.006 seconds group bot molecule 1 144 atoms in group bot @@ -67,6 +67,24 @@ thermo 1 thermo_style custom step v_v c_qbot c_qtop v_qtheory v_percdev run 10 + +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +Your simulation uses code contributions which should be cited: + +- fix electrode command: + +@article{Ahrens2022 +author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.}, +doi = {10.1063/5.0099239}, +title = {{ELECTRODE: An electrochemistry package for LAMMPS}}, +journal = {The Journal of Chemical Physics}, +year = {2022} +volume = {157}, +pages = {084801}, +} +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + WARNING: No fixes with time integration, atoms won't move (src/verlet.cpp:60) Ewald/electrode initialization ... WARNING: System is not charge neutral, net charge = 0.000219 (src/kspace.cpp:327) @@ -76,9 +94,9 @@ WARNING: System is not charge neutral, net charge = 0.000219 (src/kspace.cpp:327 estimated relative force accuracy = 1.2145309e-07 KSpace vectors: actual max1d max3d = 95 5 665 kxmax kymax kzmax = 3 3 5 - generated 1 of 1 mixed pair_coeff terms from geometric mixing rule +Generated 1 of 1 mixed pair_coeff terms from geometric mixing rule Neighbor list info ... - update every 1 steps, delay 10 steps, check yes + update: every = 1 steps, delay = 0 steps, check = yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 16 ghost atom cutoff = 16 @@ -94,7 +112,7 @@ Neighbor list info ... pair build: copy stencil: none bin: none -Per MPI rank memory allocation (min/avg/max) = 15.97 | 15.97 | 15.97 Mbytes +Per MPI rank memory allocation (min/avg/max) = 15.98 | 15.98 | 15.98 Mbytes Step v_v c_qbot c_qtop v_qtheory v_percdev 0 0 0 0 0 0 1 0.2 -0.030908718 0.030908718 0.031376826 -1.491893 @@ -107,22 +125,22 @@ Per MPI rank memory allocation (min/avg/max) = 15.97 | 15.97 | 15.97 Mbytes 8 1.6 -0.24726974 0.24726974 0.25101461 -1.491893 9 1.8 -0.27817846 0.27817846 0.28239144 -1.491893 10 2 -0.30908718 0.30908718 0.31376826 -1.491893 -Loop time of 0.0294825 on 4 procs for 10 steps with 288 atoms +Loop time of 0.0151333 on 4 procs for 10 steps with 288 atoms -Performance: 29.306 ns/day, 0.819 hours/ns, 339.184 timesteps/s -99.8% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 57.093 ns/day, 0.420 hours/ns, 660.794 timesteps/s, 190.309 katom-step/s +41.1% CPU use with 4 MPI tasks x no OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.0020718 | 0.0025674 | 0.0029431 | 0.7 | 8.71 -Bond | 1.423e-06 | 2.0293e-06 | 2.615e-06 | 0.0 | 0.01 -Kspace | 0.0028016 | 0.0031772 | 0.0035529 | 0.5 | 10.78 +Pair | 0.0014606 | 0.0015586 | 0.0016093 | 0.1 | 10.30 +Bond | 9.31e-07 | 1.0197e-06 | 1.084e-06 | 0.0 | 0.01 +Kspace | 0.0014157 | 0.0015231 | 0.0016295 | 0.2 | 10.06 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.0023552 | 0.0032209 | 0.0035502 | 0.9 | 10.92 -Output | 0.0011969 | 0.0016057 | 0.002676 | 1.5 | 5.45 -Modify | 0.018358 | 0.018553 | 0.018654 | 0.1 | 62.93 -Other | | 0.0003563 | | | 1.21 +Comm | 0.0019994 | 0.0020111 | 0.0020282 | 0.0 | 13.29 +Output | 0.00072893 | 0.00095378 | 0.0015177 | 0.0 | 6.30 +Modify | 0.0081934 | 0.0082729 | 0.0083794 | 0.1 | 54.67 +Other | | 0.0008128 | | | 5.37 Nlocal: 72 ave 72 max 72 min Histogram: 4 0 0 0 0 0 0 0 0 0 diff --git a/examples/PACKAGES/electrode/planar/log.26Apr2022.planar-pppm-ew3dc.g++.1 b/examples/PACKAGES/electrode/planar/log.1Dec2022.planar-pppm-ew3dc.g++.1 similarity index 73% rename from examples/PACKAGES/electrode/planar/log.26Apr2022.planar-pppm-ew3dc.g++.1 rename to examples/PACKAGES/electrode/planar/log.1Dec2022.planar-pppm-ew3dc.g++.1 index ff0ae7698a..2e5d18d09c 100644 --- a/examples/PACKAGES/electrode/planar/log.26Apr2022.planar-pppm-ew3dc.g++.1 +++ b/examples/PACKAGES/electrode/planar/log.1Dec2022.planar-pppm-ew3dc.g++.1 @@ -1,4 +1,4 @@ -LAMMPS (24 Mar 2022) +LAMMPS (3 Nov 2022) boundary p p f kspace_style pppm/electrode 1.0e-7 kspace_modify slab 3.0 @@ -28,8 +28,8 @@ Finding 1-2 1-3 1-4 neighbors ... 0 = max # of 1-3 neighbors 0 = max # of 1-4 neighbors 1 = max # of special neighbors - special bonds CPU = 0.000 seconds - read_data CPU = 0.007 seconds + special bonds CPU = 0.001 seconds + read_data CPU = 0.004 seconds group bot molecule 1 144 atoms in group bot @@ -67,6 +67,35 @@ thermo 1 thermo_style custom step v_v c_qbot c_qtop v_qtheory v_percdev run 10 + +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +Your simulation uses code contributions which should be cited: + +- kspace_style pppm/electrode command: + +@article{Ahrens2021, +author = {Ahrens-Iwers, Ludwig J.V. and Mei{\ss}ner, Robert H.}, +doi = {10.1063/5.0063381}, +title = {{Constant potential simulations on a mesh}}, +journal = {Journal of Chemical Physics}, +year = {2021} +volume = {155}, +pages = {104104}, +} +- fix electrode command: + +@article{Ahrens2022 +author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.}, +doi = {10.1063/5.0099239}, +title = {{ELECTRODE: An electrochemistry package for LAMMPS}}, +journal = {The Journal of Chemical Physics}, +year = {2022} +volume = {157}, +pages = {084801}, +} +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + WARNING: No fixes with time integration, atoms won't move (src/verlet.cpp:60) PPPM/electrode initialization ... WARNING: System is not charge neutral, net charge = 0.000219 (src/kspace.cpp:327) @@ -78,9 +107,9 @@ WARNING: System is not charge neutral, net charge = 0.000219 (src/kspace.cpp:327 estimated relative force accuracy = 8.4221827e-08 using double precision MKL FFT 3d grid and FFT values/proc = 4563 1600 - generated 1 of 1 mixed pair_coeff terms from geometric mixing rule +Generated 1 of 1 mixed pair_coeff terms from geometric mixing rule Neighbor list info ... - update every 1 steps, delay 10 steps, check yes + update: every = 1 steps, delay = 0 steps, check = yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 16 ghost atom cutoff = 16 @@ -97,7 +126,7 @@ Neighbor list info ... stencil: none bin: none WARNING: Using kspace solver on system with no charge (src/kspace.cpp:314) -Per MPI rank memory allocation (min/avg/max) = 7.93 | 7.93 | 7.93 Mbytes +Per MPI rank memory allocation (min/avg/max) = 7.942 | 7.942 | 7.942 Mbytes Step v_v c_qbot c_qtop v_qtheory v_percdev 0 0 0 0 0 0 1 0.2 -0.030912769 0.030912769 0.031376826 -1.4789807 @@ -110,22 +139,22 @@ Per MPI rank memory allocation (min/avg/max) = 7.93 | 7.93 | 7.93 Mbytes 8 1.6 -0.24730215 0.24730215 0.25101461 -1.4789807 9 1.8 -0.27821492 0.27821492 0.28239144 -1.4789807 10 2 -0.30912769 0.30912769 0.31376826 -1.4789807 -Loop time of 0.0784857 on 1 procs for 10 steps with 288 atoms +Loop time of 0.0176221 on 1 procs for 10 steps with 288 atoms -Performance: 11.008 ns/day, 2.180 hours/ns, 127.412 timesteps/s -400.0% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 49.029 ns/day, 0.490 hours/ns, 567.471 timesteps/s, 163.432 katom-step/s +100.0% CPU use with 1 MPI tasks x no OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.0075859 | 0.0075859 | 0.0075859 | 0.0 | 9.67 -Bond | 2.817e-06 | 2.817e-06 | 2.817e-06 | 0.0 | 0.00 -Kspace | 0.020841 | 0.020841 | 0.020841 | 0.0 | 26.55 +Pair | 0.0051407 | 0.0051407 | 0.0051407 | 0.0 | 29.17 +Bond | 9.92e-07 | 9.92e-07 | 9.92e-07 | 0.0 | 0.01 +Kspace | 0.0029456 | 0.0029456 | 0.0029456 | 0.0 | 16.72 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.00019415 | 0.00019415 | 0.00019415 | 0.0 | 0.25 -Output | 0.0032534 | 0.0032534 | 0.0032534 | 0.0 | 4.15 -Modify | 0.046545 | 0.046545 | 0.046545 | 0.0 | 59.30 -Other | | 6.246e-05 | | | 0.08 +Comm | 8.3497e-05 | 8.3497e-05 | 8.3497e-05 | 0.0 | 0.47 +Output | 0.0012832 | 0.0012832 | 0.0012832 | 0.0 | 7.28 +Modify | 0.0080737 | 0.0080737 | 0.0080737 | 0.0 | 45.82 +Other | | 9.442e-05 | | | 0.54 Nlocal: 288 ave 288 max 288 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -140,4 +169,4 @@ Ave special neighs/atom = 0 Neighbor list builds = 0 Dangerous builds = 0 -Total wall time: 0:00:10 +Total wall time: 0:00:01 diff --git a/examples/PACKAGES/electrode/planar/log.26Apr2022.planar-pppm-ew3dc.g++.4 b/examples/PACKAGES/electrode/planar/log.1Dec2022.planar-pppm-ew3dc.g++.4 similarity index 73% rename from examples/PACKAGES/electrode/planar/log.26Apr2022.planar-pppm-ew3dc.g++.4 rename to examples/PACKAGES/electrode/planar/log.1Dec2022.planar-pppm-ew3dc.g++.4 index 4fcb219a89..69950a5859 100644 --- a/examples/PACKAGES/electrode/planar/log.26Apr2022.planar-pppm-ew3dc.g++.4 +++ b/examples/PACKAGES/electrode/planar/log.1Dec2022.planar-pppm-ew3dc.g++.4 @@ -1,4 +1,4 @@ -LAMMPS (24 Mar 2022) +LAMMPS (3 Nov 2022) boundary p p f kspace_style pppm/electrode 1.0e-7 kspace_modify slab 3.0 @@ -29,8 +29,8 @@ Finding 1-2 1-3 1-4 neighbors ... 0 = max # of 1-3 neighbors 0 = max # of 1-4 neighbors 1 = max # of special neighbors - special bonds CPU = 0.000 seconds - read_data CPU = 0.014 seconds + special bonds CPU = 0.003 seconds + read_data CPU = 0.007 seconds group bot molecule 1 144 atoms in group bot @@ -68,6 +68,35 @@ thermo 1 thermo_style custom step v_v c_qbot c_qtop v_qtheory v_percdev run 10 + +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +Your simulation uses code contributions which should be cited: + +- kspace_style pppm/electrode command: + +@article{Ahrens2021, +author = {Ahrens-Iwers, Ludwig J.V. and Mei{\ss}ner, Robert H.}, +doi = {10.1063/5.0063381}, +title = {{Constant potential simulations on a mesh}}, +journal = {Journal of Chemical Physics}, +year = {2021} +volume = {155}, +pages = {104104}, +} +- fix electrode command: + +@article{Ahrens2022 +author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.}, +doi = {10.1063/5.0099239}, +title = {{ELECTRODE: An electrochemistry package for LAMMPS}}, +journal = {The Journal of Chemical Physics}, +year = {2022} +volume = {157}, +pages = {084801}, +} +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + WARNING: No fixes with time integration, atoms won't move (src/verlet.cpp:60) PPPM/electrode initialization ... WARNING: System is not charge neutral, net charge = 0.000219 (src/kspace.cpp:327) @@ -79,9 +108,9 @@ WARNING: System is not charge neutral, net charge = 0.000219 (src/kspace.cpp:327 estimated relative force accuracy = 8.4221827e-08 using double precision MKL FFT 3d grid and FFT values/proc = 2691 672 - generated 1 of 1 mixed pair_coeff terms from geometric mixing rule +Generated 1 of 1 mixed pair_coeff terms from geometric mixing rule Neighbor list info ... - update every 1 steps, delay 10 steps, check yes + update: every = 1 steps, delay = 0 steps, check = yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 16 ghost atom cutoff = 16 @@ -98,7 +127,7 @@ Neighbor list info ... stencil: none bin: none WARNING: Using kspace solver on system with no charge (src/kspace.cpp:314) -Per MPI rank memory allocation (min/avg/max) = 7.716 | 7.765 | 7.814 Mbytes +Per MPI rank memory allocation (min/avg/max) = 7.725 | 7.774 | 7.823 Mbytes Step v_v c_qbot c_qtop v_qtheory v_percdev 0 0 0 0 0 0 1 0.2 -0.030912769 0.030912769 0.031376826 -1.4789807 @@ -111,22 +140,22 @@ Per MPI rank memory allocation (min/avg/max) = 7.716 | 7.765 | 7.814 Mbytes 8 1.6 -0.24730215 0.24730215 0.25101461 -1.4789807 9 1.8 -0.27821492 0.27821492 0.28239144 -1.4789807 10 2 -0.30912769 0.30912769 0.31376826 -1.4789807 -Loop time of 0.0296999 on 4 procs for 10 steps with 288 atoms +Loop time of 0.0162257 on 4 procs for 10 steps with 288 atoms -Performance: 29.091 ns/day, 0.825 hours/ns, 336.701 timesteps/s -91.5% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 53.249 ns/day, 0.451 hours/ns, 616.306 timesteps/s, 177.496 katom-step/s +50.4% CPU use with 4 MPI tasks x no OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.0021578 | 0.0022153 | 0.0022978 | 0.1 | 7.46 -Bond | 1.161e-06 | 1.435e-06 | 1.943e-06 | 0.0 | 0.00 -Kspace | 0.0054884 | 0.0057437 | 0.0059072 | 0.2 | 19.34 +Pair | 0.0010955 | 0.0013022 | 0.0014351 | 0.3 | 8.03 +Bond | 6.13e-07 | 7.795e-07 | 1.031e-06 | 0.0 | 0.00 +Kspace | 0.0034606 | 0.003541 | 0.0036869 | 0.2 | 21.82 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.0015424 | 0.0025686 | 0.0031306 | 1.2 | 8.65 -Output | 0.0019229 | 0.0023315 | 0.0033526 | 1.2 | 7.85 -Modify | 0.016192 | 0.016494 | 0.016902 | 0.2 | 55.54 -Other | | 0.0003449 | | | 1.16 +Comm | 0.0015915 | 0.0017672 | 0.0019298 | 0.3 | 10.89 +Output | 0.00071528 | 0.00095256 | 0.001506 | 0.0 | 5.87 +Modify | 0.0080243 | 0.0080738 | 0.0081204 | 0.0 | 49.76 +Other | | 0.0005881 | | | 3.62 Nlocal: 72 ave 72 max 72 min Histogram: 4 0 0 0 0 0 0 0 0 0 @@ -141,4 +170,4 @@ Ave special neighs/atom = 0 Neighbor list builds = 0 Dangerous builds = 0 -Total wall time: 0:00:03 +Total wall time: 0:00:00 diff --git a/examples/PACKAGES/electrode/planar/log.26Apr2022.planar-pppm-ffield.g++.1 b/examples/PACKAGES/electrode/planar/log.1Dec2022.planar-pppm-ffield.g++.1 similarity index 73% rename from examples/PACKAGES/electrode/planar/log.26Apr2022.planar-pppm-ffield.g++.1 rename to examples/PACKAGES/electrode/planar/log.1Dec2022.planar-pppm-ffield.g++.1 index be13b1ca10..eb8d857fbe 100644 --- a/examples/PACKAGES/electrode/planar/log.26Apr2022.planar-pppm-ffield.g++.1 +++ b/examples/PACKAGES/electrode/planar/log.1Dec2022.planar-pppm-ffield.g++.1 @@ -1,4 +1,4 @@ -LAMMPS (24 Mar 2022) +LAMMPS (3 Nov 2022) boundary p p p # finite field, fully periodic kspace_style pppm/electrode 1.0e-7 @@ -28,7 +28,7 @@ Finding 1-2 1-3 1-4 neighbors ... 0 = max # of 1-4 neighbors 1 = max # of special neighbors special bonds CPU = 0.001 seconds - read_data CPU = 0.006 seconds + read_data CPU = 0.004 seconds group bot molecule 1 144 atoms in group bot @@ -66,6 +66,35 @@ thermo 1 thermo_style custom step v_v c_qbot c_qtop v_qtheory v_percdev run 10 + +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +Your simulation uses code contributions which should be cited: + +- kspace_style pppm/electrode command: + +@article{Ahrens2021, +author = {Ahrens-Iwers, Ludwig J.V. and Mei{\ss}ner, Robert H.}, +doi = {10.1063/5.0063381}, +title = {{Constant potential simulations on a mesh}}, +journal = {Journal of Chemical Physics}, +year = {2021} +volume = {155}, +pages = {104104}, +} +- fix electrode command: + +@article{Ahrens2022 +author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.}, +doi = {10.1063/5.0099239}, +title = {{ELECTRODE: An electrochemistry package for LAMMPS}}, +journal = {The Journal of Chemical Physics}, +year = {2022} +volume = {157}, +pages = {084801}, +} +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + WARNING: No fixes with time integration, atoms won't move (src/verlet.cpp:60) PPPM/electrode initialization ... WARNING: System is not charge neutral, net charge = 0.000219 (src/kspace.cpp:327) @@ -77,9 +106,9 @@ WARNING: System is not charge neutral, net charge = 0.000219 (src/kspace.cpp:327 estimated relative force accuracy = 5.4638319e-08 using double precision MKL FFT 3d grid and FFT values/proc = 2873 768 - generated 1 of 1 mixed pair_coeff terms from geometric mixing rule +Generated 1 of 1 mixed pair_coeff terms from geometric mixing rule Neighbor list info ... - update every 1 steps, delay 10 steps, check yes + update: every = 1 steps, delay = 0 steps, check = yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 16 ghost atom cutoff = 16 @@ -96,7 +125,7 @@ Neighbor list info ... stencil: none bin: none WARNING: Using kspace solver on system with no charge (src/kspace.cpp:314) -Per MPI rank memory allocation (min/avg/max) = 7.86 | 7.86 | 7.86 Mbytes +Per MPI rank memory allocation (min/avg/max) = 7.871 | 7.871 | 7.871 Mbytes Step v_v c_qbot c_qtop v_qtheory v_percdev 0 0 0 0 0 0 1 0.2 -0.030902 0.030902 0.031376826 -1.5133027 @@ -109,22 +138,22 @@ Per MPI rank memory allocation (min/avg/max) = 7.86 | 7.86 | 7.86 Mbytes 8 1.6 -0.247216 0.247216 0.25101461 -1.5133028 9 1.8 -0.278118 0.278118 0.28239144 -1.5133028 10 2 -0.30902 0.30902 0.31376826 -1.5133028 -Loop time of 0.054016 on 1 procs for 10 steps with 288 atoms +Loop time of 0.0150845 on 1 procs for 10 steps with 288 atoms -Performance: 15.995 ns/day, 1.500 hours/ns, 185.130 timesteps/s -400.3% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 57.277 ns/day, 0.419 hours/ns, 662.933 timesteps/s, 190.925 katom-step/s +90.5% CPU use with 1 MPI tasks x no OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.0081119 | 0.0081119 | 0.0081119 | 0.0 | 15.02 -Bond | 4.802e-06 | 4.802e-06 | 4.802e-06 | 0.0 | 0.01 -Kspace | 0.0053539 | 0.0053539 | 0.0053539 | 0.0 | 9.91 +Pair | 0.0052281 | 0.0052281 | 0.0052281 | 0.0 | 34.66 +Bond | 9.72e-07 | 9.72e-07 | 9.72e-07 | 0.0 | 0.01 +Kspace | 0.0017267 | 0.0017267 | 0.0017267 | 0.0 | 11.45 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.00052577 | 0.00052577 | 0.00052577 | 0.0 | 0.97 -Output | 0.0033476 | 0.0033476 | 0.0033476 | 0.0 | 6.20 -Modify | 0.036562 | 0.036562 | 0.036562 | 0.0 | 67.69 -Other | | 0.0001102 | | | 0.20 +Comm | 0.00016423 | 0.00016423 | 0.00016423 | 0.0 | 1.09 +Output | 0.0010211 | 0.0010211 | 0.0010211 | 0.0 | 6.77 +Modify | 0.0068532 | 0.0068532 | 0.0068532 | 0.0 | 45.43 +Other | | 9.022e-05 | | | 0.60 Nlocal: 288 ave 288 max 288 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -138,4 +167,4 @@ Ave neighs/atom = 92 Ave special neighs/atom = 0 Neighbor list builds = 0 Dangerous builds = 0 -Total wall time: 0:00:09 +Total wall time: 0:00:01 diff --git a/examples/PACKAGES/electrode/planar/log.26Apr2022.planar-pppm-ffield.g++.4 b/examples/PACKAGES/electrode/planar/log.1Dec2022.planar-pppm-ffield.g++.4 similarity index 73% rename from examples/PACKAGES/electrode/planar/log.26Apr2022.planar-pppm-ffield.g++.4 rename to examples/PACKAGES/electrode/planar/log.1Dec2022.planar-pppm-ffield.g++.4 index 619ed2bc48..75b20bb7f2 100644 --- a/examples/PACKAGES/electrode/planar/log.26Apr2022.planar-pppm-ffield.g++.4 +++ b/examples/PACKAGES/electrode/planar/log.1Dec2022.planar-pppm-ffield.g++.4 @@ -1,4 +1,4 @@ -LAMMPS (24 Mar 2022) +LAMMPS (3 Nov 2022) boundary p p p # finite field, fully periodic kspace_style pppm/electrode 1.0e-7 @@ -28,8 +28,8 @@ Finding 1-2 1-3 1-4 neighbors ... 0 = max # of 1-3 neighbors 0 = max # of 1-4 neighbors 1 = max # of special neighbors - special bonds CPU = 0.001 seconds - read_data CPU = 0.022 seconds + special bonds CPU = 0.002 seconds + read_data CPU = 0.006 seconds group bot molecule 1 144 atoms in group bot @@ -67,6 +67,35 @@ thermo 1 thermo_style custom step v_v c_qbot c_qtop v_qtheory v_percdev run 10 + +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +Your simulation uses code contributions which should be cited: + +- kspace_style pppm/electrode command: + +@article{Ahrens2021, +author = {Ahrens-Iwers, Ludwig J.V. and Mei{\ss}ner, Robert H.}, +doi = {10.1063/5.0063381}, +title = {{Constant potential simulations on a mesh}}, +journal = {Journal of Chemical Physics}, +year = {2021} +volume = {155}, +pages = {104104}, +} +- fix electrode command: + +@article{Ahrens2022 +author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.}, +doi = {10.1063/5.0099239}, +title = {{ELECTRODE: An electrochemistry package for LAMMPS}}, +journal = {The Journal of Chemical Physics}, +year = {2022} +volume = {157}, +pages = {084801}, +} +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + WARNING: No fixes with time integration, atoms won't move (src/verlet.cpp:60) PPPM/electrode initialization ... WARNING: System is not charge neutral, net charge = 0.000219 (src/kspace.cpp:327) @@ -78,9 +107,9 @@ WARNING: System is not charge neutral, net charge = 0.000219 (src/kspace.cpp:327 estimated relative force accuracy = 5.4638319e-08 using double precision MKL FFT 3d grid and FFT values/proc = 1287 192 - generated 1 of 1 mixed pair_coeff terms from geometric mixing rule +Generated 1 of 1 mixed pair_coeff terms from geometric mixing rule Neighbor list info ... - update every 1 steps, delay 10 steps, check yes + update: every = 1 steps, delay = 0 steps, check = yes max neighbors/atom: 2000, page size: 100000 master list distance cutoff = 16 ghost atom cutoff = 16 @@ -97,7 +126,7 @@ Neighbor list info ... stencil: none bin: none WARNING: Using kspace solver on system with no charge (src/kspace.cpp:314) -Per MPI rank memory allocation (min/avg/max) = 7.712 | 7.712 | 7.712 Mbytes +Per MPI rank memory allocation (min/avg/max) = 7.721 | 7.721 | 7.721 Mbytes Step v_v c_qbot c_qtop v_qtheory v_percdev 0 0 0 0 0 0 1 0.2 -0.030902 0.030902 0.031376826 -1.5133027 @@ -110,22 +139,22 @@ Per MPI rank memory allocation (min/avg/max) = 7.712 | 7.712 | 7.712 Mbytes 8 1.6 -0.247216 0.247216 0.25101461 -1.5133028 9 1.8 -0.278118 0.278118 0.28239144 -1.5133028 10 2 -0.30902 0.30902 0.31376826 -1.5133028 -Loop time of 0.0301351 on 4 procs for 10 steps with 288 atoms +Loop time of 0.0169132 on 4 procs for 10 steps with 288 atoms -Performance: 28.671 ns/day, 0.837 hours/ns, 331.839 timesteps/s -99.8% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 51.084 ns/day, 0.470 hours/ns, 591.252 timesteps/s, 170.281 katom-step/s +49.8% CPU use with 4 MPI tasks x no OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.0020768 | 0.0022701 | 0.0024074 | 0.3 | 7.53 -Bond | 1.271e-06 | 2.2107e-06 | 4.237e-06 | 0.0 | 0.01 -Kspace | 0.0039171 | 0.0040631 | 0.0042468 | 0.2 | 13.48 +Pair | 0.00098343 | 0.0013515 | 0.0015461 | 0.6 | 7.99 +Bond | 6.21e-07 | 6.81e-07 | 7.3e-07 | 0.0 | 0.00 +Kspace | 0.0036673 | 0.0038144 | 0.004106 | 0.3 | 22.55 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.0020711 | 0.0032953 | 0.0038884 | 1.3 | 10.93 -Output | 0.0013425 | 0.001877 | 0.0031692 | 1.7 | 6.23 -Modify | 0.018076 | 0.018252 | 0.018479 | 0.1 | 60.57 -Other | | 0.0003755 | | | 1.25 +Comm | 0.0015601 | 0.0016528 | 0.0017294 | 0.2 | 9.77 +Output | 0.00072013 | 0.00087465 | 0.0012429 | 0.0 | 5.17 +Modify | 0.0086712 | 0.0087641 | 0.0089049 | 0.1 | 51.82 +Other | | 0.0004551 | | | 2.69 Nlocal: 72 ave 72 max 72 min Histogram: 4 0 0 0 0 0 0 0 0 0 @@ -139,4 +168,4 @@ Ave neighs/atom = 92 Ave special neighs/atom = 0 Neighbor list builds = 0 Dangerous builds = 0 -Total wall time: 0:00:03 +Total wall time: 0:00:00 From ad68eb8a59bcc66a21db1c5b8b83b5d6798500b4 Mon Sep 17 00:00:00 2001 From: srtee Date: Thu, 1 Dec 2022 16:34:09 +1000 Subject: [PATCH 42/46] add piston logs --- .../electrode/piston/data.piston.final | 2128 +++++++++++++++++ examples/PACKAGES/electrode/piston/in.piston | 2 +- .../piston/log.1Dec2022.piston.g++.1 | 223 ++ .../piston/log.1Dec2022.piston.g++.4 | 224 ++ 4 files changed, 2576 insertions(+), 1 deletion(-) create mode 100644 examples/PACKAGES/electrode/piston/data.piston.final create mode 100644 examples/PACKAGES/electrode/piston/log.1Dec2022.piston.g++.1 create mode 100644 examples/PACKAGES/electrode/piston/log.1Dec2022.piston.g++.4 diff --git a/examples/PACKAGES/electrode/piston/data.piston.final b/examples/PACKAGES/electrode/piston/data.piston.final new file mode 100644 index 0000000000..8549261a3f --- /dev/null +++ b/examples/PACKAGES/electrode/piston/data.piston.final @@ -0,0 +1,2128 @@ +LAMMPS data file via write_data, version 3 Nov 2022, timestep = 100000 + +726 atoms +4 atom types +420 bonds +1 bond types +210 angles +1 angle types + +0 17.6494 xlo xhi +0 20.3798 ylo yhi +0 26 zlo zhi + +Masses + +1 500 +2 196.97 +3 15.9994 +4 1.008 + +Pair Coeffs # lj/cut/coul/long + +1 0.069 2.78 +2 5.29 2.951 +3 0.1553 3.166 +4 0 0 + +Bond Coeffs # harmonic + +1 600 1 + +Angle Coeffs # harmonic + +1 75 109.47 + +Atoms # full + +49 25 2 0.008543040314262548 0 0 2.4018 0 0 0 +50 25 2 0.0160448240953976 1.4708 2.5475 2.4018 0 0 0 +51 26 2 -0.0079256875305239 0 5.0949 2.4018 0 0 0 +57 29 2 -0.005227878579680007 2.9416 0 2.4018 0 0 0 +58 29 2 0.01534182829253148 4.4124 2.5475 2.4018 0 0 0 +59 30 2 0.005249625623138609 2.9416 5.0949 2.4018 0 0 0 +676 242 3 -0.8476 2.819460981381933 5.027845836373835 5.552858700712285 1 0 0 +677 242 4 0.4238 3.6237064095951212 5.498057979630644 5.1894159030362905 1 0 0 +678 242 4 0.4238 3.0474931330566792 4.071918834795528 5.737806475295655 1 0 0 +709 253 3 -0.8476 3.326005069719568 2.1405935467748485 5.508189818283542 1 1 0 +195 81 4 0.4238 0.9649465875607126 4.340812162842168 5.657183047543541 0 0 0 +193 81 3 -0.8476 0.07822017262197362 3.9629228426194305 5.3908801998879925 0 0 0 +194 81 4 0.4238 0.11965319368873736 2.964163951647319 5.41854519664211 0 0 0 +103 51 3 -0.8476 6.804813198264613 5.084871250040471 11.277692419576146 1 0 0 +710 253 4 0.4238 2.3404190574558714 1.9714070000250485 5.508878140894409 1 1 0 +713 254 4 0.4238 9.064078450490644 2.446520257897097 5.3348626027546535 0 1 0 +65 33 2 0.01159205120014908 5.8832 0 2.4018 0 0 0 +66 33 2 0.01814012345205012 7.354000000000001 2.5475 2.4018 0 0 0 +67 34 2 0.001406594129736151 5.8832 5.0949 2.4018 0 0 0 +73 37 2 0.007725405338865237 8.8248 0 2.4018 0 0 0 +74 37 2 0.01259870480846824 10.2956 2.5475 2.4018 0 0 0 +75 38 2 -0.0004634638718638646 8.8248 5.0949 2.4018 0 0 0 +712 254 3 -0.8476 8.802633903527065 3.406390680517518 5.233373245990451 0 1 0 +714 254 4 0.4238 9.596656647074049 3.988446812598421 5.408709008648956 0 1 0 +604 218 3 -0.8476 10.053718350737668 0.9458152116350096 5.395407376762871 0 0 0 +189 79 4 0.4238 7.4156883111781475 3.478062124305858 6.469061899326572 -1 1 0 +170 73 4 0.4238 11.80947244959249 4.900763207760851 5.38132073658318 -1 0 0 +315 121 4 0.4238 12.776759773328315 8.761973185109612 12.512691519633954 0 0 0 +605 218 4 0.4238 11.02536148980741 0.7580225920428326 5.251723453806732 0 0 0 +116 55 4 0.4238 6.860405297106715 1.6714006503015966 5.673388843698673 -1 0 0 +388 146 3 -0.8476 13.766836983830515 3.9827224990972567 5.330985943540624 0 -1 0 +389 146 4 0.4238 13.425795558197045 3.8960741688633775 6.267033057995917 0 -1 0 +586 212 3 -0.8476 12.99172583601213 0.9627880677417303 5.186804494815568 0 1 0 +81 41 2 -0.006484897416350773 11.7664 0 2.4018 0 0 0 +82 41 2 0.008703081094077752 13.237200000000001 2.5475 2.4018 0 0 0 +83 42 2 0.00416546498595383 11.7664 5.0949 2.4018 0 0 0 +89 45 2 -0.01428117869162144 14.708000000000002 0 2.4018 0 0 0 +90 45 2 0.008098914705004666 16.178800000000003 2.5475 2.4018 0 0 0 +91 46 2 -0.02631301835063423 14.708000000000002 5.0949 2.4018 0 0 0 +601 217 3 -0.8476 14.580700057086469 2.470074704951404 9.549553516230905 0 0 0 +602 217 4 0.4238 13.852177407353523 2.485606699806581 10.234399813568656 0 0 0 +107 52 4 0.4238 1.7753325684361263 5.260464281758941 12.927518370297552 0 0 0 +603 217 4 0.4238 15.320102605212748 3.0795550665438127 9.835591885333054 0 0 0 +378 142 4 0.4238 15.457095569986127 9.173371129323348 12.171458596416667 0 -1 0 +422 157 4 0.4238 4.786861348572543 7.318978962263422 5.502857747714512 0 0 0 +52 26 2 -0.01097199601095499 1.4708 7.6424 2.4018 0 0 0 +53 27 2 0.01511923962052951 0 10.1898 2.4018 0 0 0 +60 30 2 -0.006773385603520778 4.4124 7.6424 2.4018 0 0 0 +61 31 2 -0.0006618884891667937 2.9416 10.1898 2.4018 0 0 0 +316 122 3 -0.8476 13.376991964874126 9.733980167782747 5.2443510947274685 -1 0 0 +423 157 4 0.4238 6.118596559257136 6.376695231617992 5.575034452052516 0 0 0 +421 157 3 -0.8476 5.134517216890271 6.414178710640228 5.748768298079106 0 0 0 +643 231 3 -0.8476 3.1763474635956395 8.886111555148053 5.282080436718036 1 0 0 +644 231 4 0.4238 2.513118087318634 8.218141042299745 4.944523274214661 1 0 0 +581 210 4 0.4238 1.9210593488372454 5.953179684029002 6.41990460669887 1 2 0 +426 158 4 0.4238 15.617845693245721 0.24896899149304588 12.27982548992809 0 0 0 +582 210 4 0.4238 0.738973409880735 7.079488872493541 6.392936823978947 1 2 0 +299 116 4 0.4238 1.8742478531098932 0.3995180953106482 9.934219884593341 0 0 0 +691 247 3 -0.8476 7.689714173805594 6.217320019017989 5.258073041482447 0 0 0 +693 247 4 0.4238 8.37284176321211 6.235548870214623 5.9881454257142686 0 0 0 +369 139 4 0.4238 8.495516986476424 8.433565798354097 5.028752451013381 0 0 0 +300 116 4 0.4238 2.911599743969392 1.5040316802567835 10.542971525540692 0 0 0 +367 139 3 -0.8476 8.981733107973055 8.98237922473984 5.708751536331027 0 0 0 +368 139 4 0.4238 9.966826030721563 8.844561146157186 5.605781099266854 0 0 0 +68 34 2 -0.005353421945912079 7.354000000000001 7.6424 2.4018 0 0 0 +69 35 2 -0.02242224817485722 5.8832 10.1898 2.4018 0 0 0 +76 38 2 -0.008749553110635829 10.2956 7.6424 2.4018 0 0 0 +77 39 2 -0.001587975150694571 8.8248 10.1898 2.4018 0 0 0 +169 73 3 -0.8476 10.86775468338433 5.19328586965271 5.547456960295855 -1 0 0 +171 73 4 0.4238 10.800651355284717 6.183975873079292 5.42898775849054 -1 0 0 +425 158 4 0.4238 16.365686839954538 1.6918548567498142 12.120323120019671 0 0 0 +543 197 4 0.4238 15.74455376269356 5.985972014656273 4.244902593730374 1 -1 0 +522 190 4 0.4238 12.358773694396177 8.241027948029787 5.4342692843409335 0 0 0 +541 197 3 -0.8476 15.948040102134595 5.877893730968188 5.217997046194076 1 -1 0 +520 190 3 -0.8476 11.521538237363735 7.820855042448146 5.784258984209179 0 0 0 +521 190 4 0.4238 11.640196773280092 7.596913910660865 6.751612100022279 0 0 0 +213 87 4 0.4238 16.94869795729418 7.658694530040734 4.96211922323137 -1 1 0 +84 42 2 -0.02253342595559467 13.237200000000001 7.6424 2.4018 0 0 0 +85 43 2 -0.02386325442458492 11.7664 10.1898 2.4018 0 0 0 +92 46 2 -0.03395260336333754 16.178800000000003 7.6424 2.4018 0 0 0 +93 47 2 -0.02530118571584997 14.708000000000002 10.1898 2.4018 0 0 0 +211 87 3 -0.8476 17.523577595505472 8.373665168921514 5.360027780919543 -1 1 0 +212 87 4 0.4238 17.0831513845729 9.262879118182907 5.236238106470797 -1 1 0 +205 85 3 -0.8476 5.522367248324516 5.082933874779558 8.132800488002275 0 0 0 +207 85 4 0.4238 4.856839636565012 5.040433764778345 8.877963749174969 0 0 0 +206 85 4 0.4238 5.248881626300537 5.7908645558964675 7.4816162727356925 0 0 0 +188 79 4 0.4238 6.497322905499542 3.778149013994996 7.785564626115502 -1 1 0 +104 51 4 0.4238 6.975223059984354 6.057718294907826 11.434323932547846 1 0 0 +240 96 4 0.4238 15.907149183138676 1.5390029324335393 8.501706376153551 0 0 0 +186 78 4 0.4238 10.809679491055352 4.82920260257931 12.234285165918621 -1 0 0 +627 225 4 0.4238 1.142311523721859 0.5701072346557061 5.407977967350236 1 0 0 +679 243 3 -0.8476 14.388344112145468 5.895841187409739 12.553492598002434 0 0 0 +298 116 3 -0.8476 2.249658462135075 0.7910692719529153 10.774314024535329 0 0 0 +498 182 4 0.4238 3.1782299333534842 4.421584435342713 10.843305251025729 0 0 0 +242 97 4 0.4238 0.11372454909840307 4.5608406751586585 8.512959914844476 1 0 0 +497 182 4 0.4238 3.635093197649102 3.6372270746257795 9.485847319495857 0 0 0 +496 182 3 -0.8476 3.891719288381077 4.3420728032109785 10.147162657393025 0 0 0 +243 97 4 0.4238 1.166929713515916 3.3148448925475837 8.443094046894181 1 0 0 +653 234 4 0.4238 7.986724447375092 9.58663088134249 7.078331051080797 0 -1 0 +291 113 4 0.4238 1.3902648936489443 6.574700931558314 8.627083040419217 2 0 0 +476 175 4 0.4238 10.873396710796088 3.7503648821895377 7.099886667034369 0 0 0 +626 225 4 0.4238 17.341387780659073 1.3131579087511918 5.302792549204005 0 0 0 +187 79 3 -0.8476 6.972728954372332 3.0679623101137263 7.266310623507446 -1 1 0 +198 82 4 0.4238 11.676864533923228 2.4008557059764484 11.887821076968272 0 1 0 +477 175 4 0.4238 11.028257394545655 2.35049554258184 6.2734372961507034 0 0 0 +385 145 3 -0.8476 9.464341047888412 3.3817188372167357 10.216775935923458 0 0 0 +432 160 4 0.4238 7.4158023596883 5.242602008656209 8.911704625300178 1 0 0 +386 145 4 0.4238 9.834023311752183 3.1577521519269993 11.118538449130567 0 0 0 +387 145 4 0.4238 8.839522007452976 2.6580907515237095 9.923575914839613 0 0 0 +431 160 4 0.4238 8.97937772550123 4.855861822733754 9.180574759645397 1 0 0 +430 160 3 -0.8476 8.360641109810988 5.4265820345806866 8.640716144277553 1 0 0 +475 175 3 -0.8476 11.185122253842481 2.80161992224134 7.152006656534362 0 0 0 +577 209 3 -0.8476 11.892138326574036 4.606875557740573 8.77639055263619 0 0 0 +578 209 4 0.4238 11.15205283743665 4.662613397329064 9.446591004081876 0 0 0 +579 209 4 0.4238 11.806616036319609 3.757706369789849 8.255238997490805 0 0 0 +282 110 4 0.4238 11.993978725584078 0.6955935520855357 10.362669416358116 1 -1 0 +281 110 4 0.4238 13.246870870022725 0.7932688823507881 11.405429138463369 1 -1 0 +280 110 3 -0.8476 12.399897412926068 1.230819260076083 11.103456814170583 1 -1 0 +576 208 4 0.4238 7.424477420107739 1.9205433206111677 8.347065650914391 0 0 0 +115 55 3 -0.8476 6.566829197641645 0.7852168728409362 5.314930190030221 -1 0 0 +117 55 4 0.4238 7.3699037409564365 0.24315040972892277 5.0674680046309595 -1 0 0 +654 234 4 0.4238 6.5231563540652955 9.334766916189148 7.757419217563333 0 -1 0 +196 82 3 -0.8476 11.325205678636125 3.0960265761644146 12.514778502806406 0 1 0 +353 134 4 0.4238 10.34648669613546 9.717097284025227 12.21531953491664 1 -1 0 +575 208 4 0.4238 6.8621106467674515 0.6153612624236356 9.151348490167914 0 0 0 +390 146 4 0.4238 14.71592873372509 4.297162424310161 5.349801109951233 0 -1 0 +468 172 4 0.4238 14.334820367346975 9.458375422451784 9.389857451086156 0 1 0 +680 243 4 0.4238 14.420209860242771 5.620779336744502 11.592592717412877 0 0 0 +401 150 4 0.4238 13.58439176144119 5.20555361726743 9.602450324228725 0 0 0 +241 97 3 -0.8476 0.3452523216688656 3.6651747745441994 8.892669971959721 1 0 0 +400 150 3 -0.8476 14.455722458405065 5.628055139668128 9.852004866869082 0 0 0 +562 204 3 -0.8476 16.641350343283886 4.083296189715342 10.989056663280612 0 0 0 +563 204 4 0.4238 16.037770379422128 4.850987807509285 10.773784577109874 0 0 0 +564 204 4 0.4238 17.178401412678653 3.844498107566038 10.180011679572727 0 0 0 +687 245 4 0.4238 16.714761709756484 4.337732009968187 12.639387839102408 0 0 0 +467 172 4 0.4238 13.346114040811248 9.313588789790407 10.681417293752048 0 1 0 +666 238 4 0.4238 4.34126756117676 8.905137414158627 6.516509692747207 0 0 0 +664 238 3 -0.8476 4.751093055532058 9.063792850376354 7.414773021734108 0 0 0 +637 229 3 -0.8476 0.7471877141074242 8.354301697005937 11.535489275372338 1 -1 0 +290 113 4 0.4238 1.5797294433316216 5.599705770675408 9.923275349951421 2 0 0 +652 234 3 -0.8476 7.361488829472968 9.878076947823384 7.802307315600979 0 -1 0 +402 150 4 0.4238 14.817635634485477 6.133309514160487 9.068590593856563 0 0 0 +257 102 4 0.4238 2.654784049830047 9.360773717063745 10.840199367879586 1 0 0 +256 102 3 -0.8476 2.7861525988520546 9.125527207512318 9.87717977353219 1 0 0 +424 158 3 -0.8476 16.282645750155215 0.8737366464771422 12.689346105039219 0 0 0 +665 238 4 0.4238 4.161382545837657 8.676258785766425 8.123335852134215 0 0 0 +122 57 4 0.4238 7.825760402756952 0.4118083408578644 10.770069138315867 0 0 0 +258 102 4 0.4238 2.6507626673715956 8.142581237775797 9.752715909565804 1 0 0 +466 172 3 -0.8476 13.51508294943025 9.818693918214702 9.83505984792318 0 1 0 +377 142 4 0.4238 17.080578433321772 9.22752863551317 12.004131277448275 0 -1 0 +105 51 4 0.4238 5.853746057457844 4.953910172266563 10.997832121722793 1 0 0 +580 210 3 -0.8476 1.3210642970676016 6.5207610408534675 6.98369360583625 1 2 0 +638 229 4 0.4238 0.9970176405359414 7.548196505367084 10.999036348164699 1 -1 0 +717 255 4 0.4238 12.39024162854418 0.28840285676654837 6.591412796748799 1 1 0 +352 134 3 -0.8476 11.226526547688243 9.242192984029268 12.216220312698256 1 -1 0 +137 62 4 0.4238 2.027815877839267 1.8732362417553365 7.987025431651223 0 0 0 +692 247 4 0.4238 7.786529711776536 5.3723882747118985 4.732032313657794 0 0 0 +645 231 4 0.4238 2.8214978665553723 9.809957726487395 5.138560233155634 1 0 0 +185 78 4 0.4238 10.316334741569422 6.044854419256892 11.261952987588222 -1 0 0 +292 114 3 -0.8476 5.67656046565693 9.596732521658042 10.995975339349497 0 0 0 +294 114 4 0.4238 4.789939140622079 9.742378050555555 11.434941355604284 0 0 0 +574 208 3 -0.8476 7.516492206466037 1.3710743960569696 9.177498905408314 0 0 0 +711 253 4 0.4238 3.810396593432228 1.2880838486682353 5.311739399800884 1 1 0 +437 162 4 0.4238 6.860466827809697 8.422553075168016 11.337314477776795 1 0 0 +436 162 3 -0.8476 7.571135241081482 7.730803749388945 11.465517092648946 1 0 0 +588 212 4 0.4238 13.498663213828278 0.38996264096399363 4.542687820493753 0 1 0 +438 162 4 0.4238 8.31154777226707 7.888534002434359 10.812132835679304 1 0 0 +701 250 4 0.4238 9.286513797831446 6.646575924029509 9.147658317438076 2 -1 0 +700 250 3 -0.8476 9.643385938511667 7.47449461758298 9.580320183736939 2 -1 0 +513 187 4 0.4238 1.8185112493161812 10.053298043923604 8.893843011592004 1 0 0 +106 52 3 -0.8476 2.266275159877156 4.688670030017356 12.270229177579722 0 0 0 +702 250 4 0.4238 10.60077224354893 7.600272590312019 9.32033378097907 2 -1 0 +138 62 4 0.4238 3.3080664559545965 2.543423811679406 7.226477171885048 0 0 0 +542 197 4 0.4238 16.61438869395917 5.142214492766869 5.339474575210934 1 -1 0 +376 142 3 -0.8476 16.267806197381876 9.752608027087469 12.256508250931114 0 -1 0 +639 229 4 0.4238 1.2657862555275905 8.359520313997795 12.390492314175315 1 -1 0 +524 191 4 0.4238 13.000197848284115 7.591623195457351 8.231720539306574 0 -1 0 +360 136 4 0.4238 16.927450088881905 9.623013099606048 8.250041448548666 0 0 0 +359 136 4 0.4238 16.11845308444977 9.867127694636144 6.852701508709072 0 0 0 +358 136 3 -0.8476 16.050165493006663 9.508888830997453 7.78383224839627 0 0 0 +289 113 3 -0.8476 1.4110503224699262 6.539558634958015 9.626249498776556 2 0 0 +384 144 4 0.4238 2.493028840280995 9.719794300761412 12.910496964228098 0 -1 0 +406 152 3 -0.8476 15.247929159060655 7.012234071819868 7.773022011622398 0 0 0 +408 152 4 0.4238 15.48816222034174 6.532006856700564 6.929416156188867 0 0 0 +523 191 3 -0.8476 12.082020144652011 7.21880883213217 8.365736806678662 0 -1 0 +407 152 4 0.4238 15.63244454689617 7.93511971351192 7.752267289359093 0 0 0 +525 191 4 0.4238 12.142278624301815 6.233249103608379 8.523992954763008 0 -1 0 +625 225 3 -0.8476 0.6808462683385743 1.4551937786169056 5.347366251301949 1 0 0 +136 62 3 -0.8476 2.697762074389062 2.615104290660337 8.015394827891544 0 0 0 +587 212 4 0.4238 13.566186954572455 1.7288682835758 5.475103447756109 0 1 0 +184 78 3 -0.8476 10.806213490399747 5.820732453607262 12.104443472749216 -1 0 0 +404 151 4 0.4238 0.19226097555573238 0.6070051864264498 8.178840137751594 1 0 0 +313 121 3 -0.8476 13.713176980186857 8.464536347918953 12.326518306939699 0 0 0 +238 96 3 -0.8476 16.147179753895433 0.6588013419307613 8.092271913343968 0 0 0 +461 170 4 0.4238 9.724872597026858 0.5544258850846108 9.053145916541903 0 0 0 +354 134 4 0.4238 11.073991971501862 8.257853428140294 12.30459990822289 1 -1 0 +314 121 4 0.4238 13.814688248066297 7.503222137375749 12.582601723500172 0 0 0 +403 151 3 -0.8476 1.1872556285218714 0.5093445341888718 8.200033176326532 1 0 0 +698 249 4 0.4238 15.55803239857769 0.7459365278981882 6.259847956511043 0 1 0 +114 54 4 0.4238 7.782158286850564 4.869601692703211 12.807668425470919 0 -1 0 +697 249 3 -0.8476 15.855429109033778 0.4369326727389228 5.356480411028421 0 1 0 +606 218 4 0.4238 9.544775439662294 0.08501982626141869 5.398561718648435 0 0 0 +317 122 4 0.4238 13.333479801593976 9.740943665116738 4.24532200523119 -1 0 0 +108 52 4 0.4238 2.6709587275475806 3.9072302649054578 12.745192231166719 0 0 0 +382 144 3 -0.8476 3.147429286024961 10.109636142426924 12.262589634326233 0 -1 0 +219 89 4 0.4238 6.364020207274239 2.520405553770681 12.99540340928131 0 1 0 +670 240 3 -0.8476 6.773533755134105 3.717038175159099 16.491590206755482 1 1 0 +396 148 4 0.4238 5.803462923264418 5.197637234493128 18.99743460565577 1 0 0 +395 148 4 0.4238 6.231119807997449 5.430041501948986 17.438676906564567 1 0 0 +394 148 3 -0.8476 5.703165163684741 5.798066954915367 18.20406962093302 1 0 0 +204 84 4 0.4238 0.9285041127500067 6.081115753960207 17.765142563298816 0 0 0 +608 219 4 0.4238 3.4847098211944805 4.983851303239975 16.51022523448973 2 0 0 +203 84 4 0.4238 2.239308631405881 6.936298376846396 18.23106240529696 0 0 0 +202 84 3 -0.8476 1.7977361263740537 6.4724758132065725 17.4630234950725 0 0 0 +486 178 4 0.4238 1.5196084362896762 6.12225022226849 15.824399106036145 2 -1 0 +347 132 4 0.4238 3.6682462328407848 1.7981456998993772 14.104840128555262 0 0 0 +45 23 1 0.006123381361742108 14.708000000000002 10.1898 23.449863020791625 0 0 0 +471 173 4 0.4238 1.169657196352889 2.3243122122885453 14.225856073802426 1 0 0 +348 132 4 0.4238 3.2986057185518605 3.2227066069571335 14.81238521553265 0 0 0 +275 108 4 0.4238 3.030667138719297 2.590837305059514 17.506935704777117 0 1 0 +346 132 3 -0.8476 3.0631397880047393 2.5935970488364877 14.071588140230032 0 0 0 +572 207 4 0.4238 5.938146311728662 1.1988717244542944 18.449373741134067 2 0 0 +338 129 4 0.4238 3.072928503496896 1.7841590474751556 19.542649762121915 1 1 0 +485 178 4 0.4238 0.47678333061827677 5.47396748641097 14.747888473867437 2 -1 0 +571 207 3 -0.8476 5.4801718917026605 1.015513120679157 17.579521025148217 2 0 0 +591 213 4 0.4238 1.6285162972905645 3.4120124953752153 19.93620754678186 1 0 0 +589 213 3 -0.8476 0.8251068536873744 3.8954462084678685 20.28381032825206 1 0 0 +607 219 3 -0.8476 3.867930772442749 4.066191566694831 16.405134372982015 2 0 0 +609 219 4 0.4238 4.806032103818568 4.055085076366629 16.75132234398619 2 0 0 +180 76 4 0.4238 6.828372582015677 7.87413160734309 14.827932072927481 1 0 0 +274 108 3 -0.8476 2.2754290519199434 2.0804855419940176 17.918224542873194 0 1 0 +686 245 4 0.4238 17.05951378440882 3.718092322788279 14.110381025997988 0 0 0 +671 240 4 0.4238 7.723844896306422 3.5324942522771177 16.240882591061286 1 1 0 +672 240 4 0.4238 6.164914683475686 3.1703614971042993 15.916500506334968 1 1 0 +112 54 3 -0.8476 8.040671566798173 4.854493140691428 13.773559856960954 0 -1 0 +681 243 4 0.4238 14.923807986964198 5.253612199100808 13.101965411111607 0 0 0 +113 54 4 0.4238 7.6698060149863725 5.662965420048592 14.230545447349645 0 -1 0 +344 131 4 0.4238 10.95474300812148 4.0896914619293145 14.970342975126565 1 0 0 +343 131 3 -0.8476 10.063394350235356 3.7363576006086254 15.254338082590541 1 0 0 +345 131 4 0.4238 9.34090547780924 4.213383582128138 14.753881815078818 1 0 0 +255 101 4 0.4238 10.85824303556981 3.0901798958905475 17.415063203472258 1 1 0 +254 101 4 0.4238 10.431165704841273 2.7912121126124174 18.962593602768095 1 1 0 +309 119 4 0.4238 9.657908807892223 1.9712599592283588 15.351618323136861 0 0 0 +253 101 3 -0.8476 11.154265512428617 3.1439882841524334 18.368727773437268 1 1 0 +479 176 4 0.4238 5.403795086006659 1.4149877692142259 20.021771864299765 0 -1 0 +109 53 3 -0.8476 8.600205030653099 2.2462808893047232 19.821549314151852 -1 -1 0 +480 176 4 0.4238 6.258921142430334 0.1412548703721989 20.581229029437516 0 -1 0 +375 141 4 0.4238 9.117868061991976 1.036566241068436 18.751587159762384 1 0 0 +44 22 1 -0.0001812904321965569 16.178800000000003 7.6424 23.449863020791625 0 0 0 +110 53 4 0.4238 7.727663154061957 1.8390933537663159 20.091493343399456 -1 -1 0 +307 119 3 -0.8476 9.343792417931972 1.0220586309221074 15.332862776937171 0 0 0 +685 245 3 -0.8476 16.514983914712488 4.396701916152739 13.617453660612183 0 0 0 +635 228 4 0.4238 14.934439265290866 2.288341571568405 19.356194526021124 -1 1 0 +636 228 4 0.4238 16.2158222895273 2.6797206531874846 18.422648696940644 -1 1 0 +271 107 3 -0.8476 14.384906263459381 5.231528110011023 18.211019803516685 0 0 0 +722 257 4 0.4238 0.7841546606140447 3.2030543524924195 17.73657679021505 1 0 0 +481 177 3 -0.8476 12.581138481752648 4.859708235311564 14.646852856409735 0 -1 0 +721 257 3 -0.8476 17.60844845622247 3.454378290202139 17.230572913673747 0 0 0 +483 177 4 0.4238 13.160238723845719 4.100628436368969 14.944244840432273 0 -1 0 +723 257 4 0.4238 17.606644439674373 2.9907645897973025 16.344535049328133 0 0 0 +482 177 4 0.4238 13.012070955214067 5.324546157865892 13.873402918227042 0 -1 0 +210 86 4 0.4238 15.870038382436055 6.148820952871613 19.006015180550836 0 0 0 +208 86 3 -0.8476 16.865547237935143 6.098380167171903 19.086141002575904 0 0 0 +469 173 3 -0.8476 0.24099730438873146 2.3625139757391653 14.594820907791535 1 0 0 +209 86 4 0.4238 17.139292025421696 5.150302069211487 19.248054676505525 0 0 0 +688 246 3 -0.8476 14.623886499778722 3.6932990280304163 15.732807373833925 0 0 0 +690 246 4 0.4238 14.619196195132695 3.9139495349394897 16.70815146361856 0 0 0 +634 228 3 -0.8476 15.93174987773314 2.3544851495071337 19.324605678443945 -1 1 0 +689 246 4 0.4238 15.265375999751216 4.295738562336769 15.257869634602969 0 0 0 +662 237 4 0.4238 4.978031757165134 0.7547617838359337 14.20344931791269 0 0 0 +149 66 4 0.4238 6.142925343814942 8.825398894478063 19.325397902096977 1 -1 0 +590 213 4 0.4238 0.07861235173383108 3.2446527141465413 20.422437871943448 1 0 0 +433 161 3 -0.8476 13.453174159881309 1.2429493424526434 18.58612891404859 1 0 0 +435 161 4 0.4238 13.569356144672101 0.9791538990920698 17.628571988252272 1 0 0 +102 50 4 0.4238 6.712168198770753 6.861720337029987 19.24687390403485 2 0 0 +140 63 4 0.4238 14.018366924616625 9.69491277775119 14.008138262339143 -2 -1 0 +417 155 4 0.4238 5.208444868460392 7.220217558553598 16.73639408130369 0 0 0 +415 155 3 -0.8476 5.290910423508213 8.090179521588407 16.250219145720393 0 0 0 +416 155 4 0.4238 4.571517941560458 8.713170942042227 16.557394543089575 0 0 0 +459 169 4 0.4238 1.274864904832181 9.57147587035769 16.73714616564885 1 0 0 +217 89 3 -0.8476 6.03252642387316 1.682543967490432 13.429110083925117 0 1 0 +478 176 3 -0.8476 6.321181520041977 1.0326296477116548 20.13225702561793 0 -1 0 +361 137 3 -0.8476 1.6007303313238133 8.59744641622387 14.087757338010231 1 -1 0 +197 82 4 0.4238 11.189299229444917 2.6912260959037098 13.419027842857094 0 1 0 +650 233 4 0.4238 14.003306552648727 1.5742686356038393 16.043690746479285 1 0 0 +488 179 4 0.4238 14.200182875506746 9.953534892777244 19.839371915250766 1 -1 0 +484 178 3 -0.8476 1.310019783094791 6.016938649674422 14.852293828373476 2 -1 0 +661 237 3 -0.8476 4.352879610820145 0.25944931473696636 14.80665155844631 0 0 0 +363 137 4 0.4238 1.959463608305586 9.151048377028488 14.839313627996184 1 -1 0 +100 50 3 -0.8476 7.520229491829531 7.3048366120870165 19.635059688498004 2 0 0 +707 252 4 0.4238 11.76043130595752 9.939320694789002 19.71667383739911 0 1 0 +178 76 3 -0.8476 7.517489493276682 7.333706134334132 14.345168774847096 1 0 0 +684 244 4 0.4238 17.28192914942711 9.812564778400814 18.086534426021203 0 1 0 +36 18 1 -0.0179910439504863 13.237200000000001 7.6424 23.449863020791625 0 0 0 +276 108 4 0.4238 2.207595987778979 1.1805886699543764 17.487427077013713 0 1 0 +214 88 3 -0.8476 8.637264772060341 8.061628662502454 16.90108297131685 -1 0 0 +216 88 4 0.4238 9.630438446102557 8.174027520932198 16.932331381504746 -1 0 0 +539 196 4 0.4238 9.695497532266977 6.886264199273172 14.189789226002413 2 0 0 +538 196 3 -0.8476 10.563020232995258 6.775061520800534 14.674598753985302 2 0 0 +252 100 4 0.4238 7.685168241584919 9.610566187163585 16.889892309335206 0 0 0 +228 92 4 0.4238 11.050503228858997 8.010373029173316 15.663121686944693 0 -1 0 +226 92 3 -0.8476 11.28429273467671 8.543911989710573 16.475943851978776 0 -1 0 +227 92 4 0.4238 11.344287050217062 9.512148354407193 16.233205016457113 0 -1 0 +540 196 4 0.4238 11.161666855372657 6.168261200879016 14.151701557933738 2 0 0 +596 215 4 0.4238 12.771065336519738 7.748494590220643 16.220536748708703 1 -1 0 +215 88 4 0.4238 8.374011229887373 7.6671090745462545 16.020711214547347 -1 0 0 +234 94 4 0.4238 16.576430424719607 0.5062309843763978 19.13844592766813 0 0 0 +706 252 3 -0.8476 12.36193947812822 9.160747667168573 19.537751621413815 0 1 0 +708 252 4 0.4238 11.865171027143662 8.469425792189265 19.01306505088366 0 1 0 +373 141 3 -0.8476 9.412620718118959 0.35565490575707015 18.08114998455027 1 0 0 +272 107 4 0.4238 13.96923862413299 5.521984167683582 19.072911164078484 0 0 0 +273 107 4 0.4238 14.169684339674113 5.896953089438392 17.496254328798827 0 0 0 +362 137 4 0.4238 1.6305502404987111 7.6307855704072995 14.342077627004548 1 -1 0 +597 215 4 0.4238 13.155595108591708 6.281716998754621 15.614461099800554 1 -1 0 +519 189 4 0.4238 0.25052520571656256 7.410000747569126 19.453385808828934 1 0 0 +682 244 3 -0.8476 17.37568243426495 9.11353756111006 17.377610598188703 0 1 0 +161 70 4 0.4238 0.4276393931068581 9.645404130294276 19.94966591203612 1 0 0 +683 244 4 0.4238 16.762775639163923 8.349640967386419 17.579621185009074 0 1 0 +339 129 4 0.4238 2.953255533740337 0.7273765470433621 20.781809824703732 1 1 0 +470 173 4 0.4238 17.313495807482283 1.701791190164049 14.11457782420363 0 0 0 +595 215 3 -0.8476 13.434254199843643 7.000670331013912 16.25121582144323 1 -1 0 +649 233 3 -0.8476 13.730521799815536 0.614769911259436 16.114057992895944 1 0 0 +179 76 4 0.4238 7.376399341193584 7.418181342250472 13.358780560554386 1 0 0 +308 119 4 0.4238 9.328524040796328 0.6575663281326254 16.263946795393448 0 0 0 +663 237 4 0.4238 4.505521910089192 0.5457888494359412 15.752543276886664 0 0 0 +337 129 3 -0.8476 3.514575860727707 1.4477360756662245 20.37437556806391 1 1 0 +327 125 4 0.4238 4.963020305736973 4.844213183983858 21.800104413199907 0 1 0 +325 125 3 -0.8476 5.413526513655491 4.683300538459343 20.92195188291159 0 1 0 +326 125 4 0.4238 6.356823537007404 4.39129241653594 21.079824846511343 0 1 0 +535 195 3 -0.8476 2.983237344424761 5.852992742968334 19.86140129850823 1 0 0 +537 195 4 0.4238 3.8877052935337013 5.573139871228802 20.183303829725734 1 0 0 +2 1 1 0.01681964573718448 1.4708000000000014 2.5475000000000003 23.449863020791625 0 0 0 +1 1 1 0.009530892217576416 1.7763568394002505e-15 1.7763568394002505e-15 23.449863020791625 0 0 0 +11 6 1 -0.01524214201230506 2.941600000000001 5.094900000000001 23.449863020791625 0 0 0 +3 2 1 0.01449029221643637 1.7763568394002505e-15 5.094900000000001 23.449863020791625 0 0 0 +10 5 1 0.00691884776850595 4.4124 2.5474999999999994 23.449863020791625 0 0 0 +9 5 1 0.0195314219644623 2.9415999999999993 1.7763568394002505e-15 23.449863020791625 0 0 0 +536 195 4 0.4238 2.319795753718221 5.1326684425952385 20.063837216279858 1 0 0 +516 188 4 0.4238 8.108138722594667 5.927016819163718 20.411810376184487 1 -1 0 +111 53 4 0.4238 8.496355497036129 3.238090310367132 19.747187863764335 -1 -1 0 +515 188 4 0.4238 9.362944894589518 4.883962319684104 20.47605173012904 1 -1 0 +514 188 3 -0.8476 8.36740867133632 4.961263964951319 20.421886089225346 1 -1 0 +168 72 4 0.4238 11.376288543712512 4.443050222600666 19.712926478310834 0 0 0 +166 72 3 -0.8476 11.119316529543537 5.1744679228851975 20.344587376759364 0 0 0 +17 9 1 -0.0001196702448092049 5.8832 0 23.449863020791625 0 0 0 +19 10 1 -0.04577843504398507 5.8832 5.094900000000001 23.449863020791625 0 0 0 +18 9 1 0.005448749793554232 7.354000000000001 2.5474999999999994 23.449863020791625 0 0 0 +27 14 1 0.01621780275369726 8.8248 5.094900000000001 23.449863020791625 0 0 0 +26 13 1 0.009139377486030886 10.2956 2.5474999999999994 23.449863020791625 0 0 0 +25 13 1 0.005843126768876098 8.8248 0 23.449863020791625 0 0 0 +434 161 4 0.4238 12.577274249871005 1.7121343654934205 18.69868691361602 1 0 0 +41 21 1 -0.0175826914366148 14.708 0 23.449863020791625 0 0 0 +42 21 1 0.003543843405838151 16.178800000000003 2.5474999999999994 23.449863020791625 0 0 0 +43 22 1 -0.008930438763612256 14.708000000000002 5.0949 23.449863020791625 0 0 0 +33 17 1 -0.01319754578259268 11.7664 1.7763568394002505e-15 23.449863020791625 0 0 0 +35 18 1 0.005624883561307313 11.7664 5.094900000000001 23.449863020791625 0 0 0 +34 17 1 -0.001833361793814021 13.237200000000001 2.5474999999999994 23.449863020791625 0 0 0 +518 189 4 0.4238 1.7262219883909424 7.436086788297749 20.15214607725663 1 0 0 +101 50 4 0.4238 8.106166655216015 7.636318994291072 18.895600145997378 2 0 0 +517 189 3 -0.8476 0.8975282537764131 7.9667901703236526 19.974321127200675 1 0 0 +150 66 4 0.4238 4.649148498694868 8.243938426512141 19.63710700967118 1 -1 0 +37 19 1 0.008059123604893179 11.7664 10.1898 23.449863020791625 0 0 0 +13 7 1 0.003562500361631949 2.941600000000001 10.1898 23.449863020791625 0 0 0 +4 2 1 0.01118045101209775 1.4708000000000006 7.6424 23.449863020791625 0 0 0 +12 6 1 -0.008187862475270539 4.4124 7.6424 23.449863020791625 0 0 0 +148 66 3 -0.8476 5.168232450516505 9.047906137187535 19.346953256748833 1 -1 0 +5 3 1 0.01564426943939494 1.7763568394002505e-15 10.1898 23.449863020791625 0 0 0 +167 72 4 0.4238 11.942045323115195 5.649130151908711 20.657340273077285 0 0 0 +328 126 3 -0.8476 13.536656944721523 6.706920305720269 20.30923123396737 0 1 0 +329 126 4 0.4238 14.033035625445095 6.901107759295683 21.155340398492882 0 1 0 +330 126 4 0.4238 13.32248868402487 7.565726120598325 19.84383926291113 0 1 0 +28 14 1 0.005135353479473132 10.2956 7.6424 23.449863020791625 0 0 0 +29 15 1 -0.01709114553122559 8.8248 10.1898 23.449863020791625 0 0 0 +20 10 1 0.004420735120240576 7.354000000000001 7.6424 23.449863020791625 0 0 0 +21 11 1 -8.295950892680149e-05 5.8832 10.1898 23.449863020791625 0 0 0 +457 169 3 -0.8476 2.137690785024048 9.831264578841258 16.303498875411698 1 0 0 +573 207 4 0.4238 5.848305837212314 0.1762190034544807 17.17943778184179 2 0 0 +651 233 4 0.4238 14.491471777300028 0.03037914374267814 15.83219648354528 1 0 0 +218 89 4 0.4238 6.5919786085182075 0.9091158018046296 13.131077697911964 0 1 0 +54 27 2 0.009538003210554242 1.4708 12.7373 2.4018 0 0 0 +55 28 2 -0.003172379929243049 0 15.2847 2.4018 0 0 0 +62 31 2 -0.00186117057999337 4.4124 12.7373 2.4018 0 0 0 +63 32 2 0.00758887481169554 2.9416 15.2847 2.4018 0 0 0 +192 80 4 0.4238 4.794387147708667 14.909075171120765 5.419182095600811 0 0 0 +119 56 4 0.4238 3.2500817867314398 11.832800805491306 6.2682928485004785 0 -1 0 +118 56 3 -0.8476 2.709695006424336 11.627182945371326 5.452384520275485 0 -1 0 +191 80 4 0.4238 3.8571863060224443 13.57325796518277 5.356927851433144 0 0 0 +190 80 3 -0.8476 3.8530200194608413 14.572485850889231 5.396004384825564 0 0 0 +98 49 4 0.4238 2.2766564815872377 15.778957767705766 5.556621305001019 1 0 0 +120 56 4 0.4238 1.8997669381619913 12.21338080817393 5.432566828266767 0 -1 0 +97 49 3 -0.8476 1.6582359104391984 16.291326734509507 6.152472357053496 1 0 0 +244 98 3 -0.8476 0.3924528377280096 13.052383693685869 5.275030660375085 0 -1 0 +99 49 4 0.4238 1.9764418005425044 16.22605313800913 7.098245454454695 1 0 0 +631 227 3 -0.8476 8.778943735028687 10.474788944453667 12.685594012363595 -1 0 0 +295 115 3 -0.8476 6.836426798704437 14.252095160705379 5.316785643293747 0 0 0 +296 115 4 0.4238 6.3380790395823565 13.385929350133972 5.27926186731909 0 0 0 +336 128 4 0.4238 9.504568664514785 15.01506830678913 4.725006859909346 0 0 0 +70 35 2 0.01569918460207732 7.354000000000001 12.7373 2.4018 0 0 0 +71 36 2 0.01622723354682065 5.8832 15.2847 2.4018 0 0 0 +78 39 2 0.01233699237017652 10.2956 12.7373 2.4018 0 0 0 +79 40 2 -0.0123167339477786 8.8248 15.2847 2.4018 0 0 0 +334 128 3 -0.8476 9.804960251945063 14.585282143844777 5.576505038341256 0 0 0 +335 128 4 0.4238 10.764689305944286 14.811244909035093 5.743428161519318 0 0 0 +656 235 4 0.4238 11.274876877297288 11.589128799416661 6.812142647899859 0 0 0 +655 235 3 -0.8476 11.388256990917405 11.907831882964768 5.871092838018554 0 0 0 +657 235 4 0.4238 10.511574676431575 12.241068556600506 5.524131235030396 0 0 0 +331 127 3 -0.8476 8.647876026470513 11.72968917644971 5.372752090789252 0 0 0 +225 91 4 0.4238 13.252704815948258 12.484966119923902 5.4991907056523175 -1 -1 0 +223 91 3 -0.8476 14.108667496093203 12.961787209464076 5.699123243872336 -1 -1 0 +86 43 2 0.004517062113848894 13.237200000000001 12.7373 2.4018 0 0 0 +87 44 2 0.001691435347730985 11.7664 15.2847 2.4018 0 0 0 +94 47 2 0.00685931941051703 16.178800000000003 12.7373 2.4018 0 0 0 +95 48 2 0.006949345406057055 14.708000000000002 15.2847 2.4018 0 0 0 +246 98 4 0.4238 0.38146479586720616 13.911666462643149 4.763645752254332 0 -1 0 +224 91 4 0.4238 14.421312095518909 12.71496419083952 6.616368538934622 -1 -1 0 +283 111 3 -0.8476 15.628193884175449 15.67958654625237 5.712183668752193 -1 0 0 +285 111 4 0.4238 15.20823137338435 14.77263604396369 5.744946721536371 -1 0 0 +284 111 4 0.4238 15.39730073469381 16.18406388803546 6.544167099225616 -1 0 0 +135 61 4 0.4238 17.181734297894028 11.50938194605289 5.376919239592664 -1 0 0 +128 59 4 0.4238 12.510696850559 13.400814682569763 12.12154569673403 0 0 0 +641 230 4 0.4238 16.460174864867515 11.555259291722754 11.513987660535511 1 0 0 +694 248 3 -0.8476 5.646664121771563 12.003829343647613 5.265517005823366 1 0 0 +508 186 3 -0.8476 11.874631242554559 19.183954362495257 12.757848230170808 -1 0 0 +365 138 4 0.4238 6.888120955508712 13.350278100146872 11.983484682294058 0 -1 0 +56 28 2 -0.007346483191423765 1.4708 17.8322 2.4018 0 0 0 +64 32 2 -0.007040366496871621 4.4124 17.8322 2.4018 0 0 0 +264 104 4 0.4238 2.890774254525348 19.395952063865504 5.416360014788498 0 -1 0 +262 104 3 -0.8476 1.9229167571391381 19.551713032251147 5.613835629405332 0 -1 0 +303 117 4 0.4238 12.119648008726836 10.348886671661969 8.982817094596912 0 0 0 +263 104 4 0.4238 1.3632164588516946 19.027705040806982 4.971845369641502 0 -1 0 +696 248 4 0.4238 4.931090248366684 11.920720405779006 5.959093966041219 1 0 0 +555 201 4 0.4238 0.1476370801517249 17.587643965474964 5.9820586175388515 1 -1 0 +460 170 3 -0.8476 10.511653292375941 20.36092252510843 9.28183703745981 0 -1 0 +357 135 4 0.4238 5.30802705175001 20.077669929184395 5.47750029282528 0 -1 0 +355 135 3 -0.8476 4.502197418039438 19.485574693167184 5.469578450808493 0 -1 0 +642 230 4 0.4238 17.59514938340467 12.494288109655482 10.809223899354208 1 0 0 +440 163 4 0.4238 6.746420411262218 15.956533676323577 5.22022015080474 0 0 0 +441 163 4 0.4238 5.7446670540994935 16.848265237800078 6.151849013066668 0 0 0 +248 99 4 0.4238 0.19491065621647194 15.263151600771593 12.384493561505723 1 0 0 +439 163 3 -0.8476 6.316582565899266 16.852550879871938 5.331546912613838 0 0 0 +72 36 2 0.007179830066346712 7.354000000000001 17.8322 2.4018 0 0 0 +80 40 2 0.009767193963479517 10.2956 17.8322 2.4018 0 0 0 +593 214 4 0.4238 7.884845767551953 18.242346210560054 5.215564680586794 1 0 0 +592 214 3 -0.8476 8.441708788539396 19.06278952840712 5.34509407825288 1 0 0 +594 214 4 0.4238 9.407518236319975 18.806924915027857 5.3868767845437215 1 0 0 +229 93 3 -0.8476 11.002931909959898 17.85349899482245 5.534832624443298 -1 -1 0 +356 135 4 0.4238 4.727932098205787 18.62143419085674 5.019794724809724 0 -1 0 +443 164 4 0.4238 12.40229864797583 14.881890635527546 6.532324378182912 -1 0 0 +230 93 4 0.4238 11.272239561806135 18.40387542301247 6.325124179849419 -1 -1 0 +442 164 3 -0.8476 12.249392559907344 15.43317503022671 5.712134600968626 -1 0 0 +444 164 4 0.4238 13.129546035940322 15.725685437724305 5.338276770112374 -1 0 0 +231 93 4 0.4238 11.438767335047864 16.955174113268875 5.59016816824532 -1 -1 0 +88 44 2 -0.004661733698708054 13.237200000000001 17.8322 2.4018 0 0 0 +96 48 2 0.004146602187371051 16.178800000000003 17.8322 2.4018 0 0 0 +553 201 3 -0.8476 17.01816778562073 17.995397600438885 5.50550827227041 0 -1 0 +554 201 4 0.4238 16.440634429393626 17.270603716767287 5.129835074976055 0 -1 0 +699 249 4 0.4238 15.700109015732405 19.83239470687886 5.2730815881929605 0 0 0 +247 99 3 -0.8476 17.336782813381703 15.9758100387841 12.86878129068549 0 0 0 +527 192 4 0.4238 8.400400049346944 19.554495577047934 12.685963916073062 0 -1 0 +245 98 4 0.4238 0.14624632377865007 13.228544728434645 6.228106595314394 0 -1 0 +633 227 4 0.4238 7.8446313240677465 10.215293497567252 12.929977075896192 -1 0 0 +123 57 4 0.4238 7.0746556208220435 19.34524620318107 10.872591375491558 0 -1 0 +724 258 3 -0.8476 4.234176441183506 12.039368920513985 7.672701195843418 1 -1 0 +725 258 4 0.4238 4.137223358179028 11.154093396315286 8.127551251299957 1 -1 0 +342 130 4 0.4238 3.3490444756314663 14.507070913866091 7.917816047124389 1 0 0 +340 130 3 -0.8476 2.475251769304553 14.763988319874148 8.330709130564067 1 0 0 +341 130 4 0.4238 2.5667527473696508 14.772232456574866 9.326480518807314 1 0 0 +364 138 3 -0.8476 6.231328463002679 12.764543730928395 11.508572517819397 0 -1 0 +726 258 4 0.4238 4.70687708932946 12.676759931947513 8.28121621344766 1 -1 0 +503 184 4 0.4238 0.626740782878561 12.112155305683151 8.36175181603283 2 0 0 +502 184 3 -0.8476 0.3530019095059348 13.026562250348038 8.063539643828118 2 0 0 +504 184 4 0.4238 1.1590491426400296 13.616383360322493 8.014514200238665 2 0 0 +413 154 4 0.4238 10.310246047781114 12.645425170155443 9.649734635743975 -1 -1 0 +278 109 4 0.4238 2.0689926172355833 13.226423725069202 11.044416560097394 1 0 0 +270 106 4 0.4238 14.518258075018746 16.25012768269104 11.329980010628349 -1 0 0 +719 256 4 0.4238 14.442688875729713 18.00809488214158 8.65135922354247 0 0 0 +132 60 4 0.4238 13.719412563278548 19.25471490200023 12.012858419540821 0 -1 0 +297 115 4 0.4238 7.758248037390944 14.09126118228873 5.669459107658047 0 0 0 +392 147 4 0.4238 8.440775970159434 10.837303720059037 8.832462502385212 1 -1 0 +260 103 4 0.4238 6.064521948562677 13.07373599605862 9.675228220765085 1 0 0 +548 199 4 0.4238 8.329731669573114 16.02435016298476 8.300652493750043 0 0 0 +302 117 4 0.4238 10.534927101610386 10.641668809892366 8.71905928310815 0 0 0 +259 103 3 -0.8476 6.039295026524322 13.683249827267247 8.882849726337565 1 0 0 +261 103 4 0.4238 6.968645563455479 13.97585610861691 8.65769716313075 1 0 0 +640 230 3 -0.8476 16.65021625418278 12.46084907650203 11.134783599664194 1 0 0 +532 194 3 -0.8476 8.625524965508806 14.111716138349044 7.926539176924266 1 -1 0 +235 95 3 -0.8476 2.8058865877200936 17.909202481046883 10.86408017002096 1 -1 0 +533 194 4 0.4238 9.285608328477988 13.74349101780916 8.581291434167639 1 -1 0 +534 194 4 0.4238 9.031378094953077 14.119395432885998 7.012632675162272 1 -1 0 +621 223 4 0.4238 11.759447009759235 16.637770265234245 8.125266626319792 0 -1 0 +121 57 3 -0.8476 7.405164265328445 20.132366073683155 11.393370019265204 0 -1 0 +269 106 4 0.4238 15.69906664349124 15.938606379638701 12.414079729103287 -1 0 0 +265 105 3 -0.8476 13.858511390467266 12.2257643539824 11.862964948226105 1 -1 0 +547 199 3 -0.8476 8.479300024438404 16.994101102650657 8.493567490661286 0 0 0 +619 223 3 -0.8476 11.181389829059919 17.28631938477271 8.620479805635687 0 -1 0 +279 109 4 0.4238 2.3342044958643817 11.616099100570484 10.98832580613683 1 0 0 +293 114 4 0.4238 5.974133299119694 10.444262483041067 10.556494238721228 0 0 0 +695 248 4 0.4238 5.440253808833983 11.395549814498784 4.499102405585278 1 0 0 +494 181 4 0.4238 14.091170402355985 15.83372339966198 8.056796739388613 0 -1 0 +131 60 4 0.4238 14.375504558444222 19.40171818823153 10.52471778468597 0 -1 0 +715 255 3 -0.8476 12.148806693669629 19.94644025668999 7.2400816171341615 1 0 0 +239 96 4 0.4238 15.531142815012778 20.3309642839673 8.438322792523895 0 -1 0 +414 154 4 0.4238 10.783851523474887 13.801560969805426 10.70124633178135 -1 -1 0 +648 232 4 0.4238 13.545815145696485 13.70677775084171 8.047430920645967 1 -1 0 +646 232 3 -0.8476 12.89354184562956 14.45291909331316 8.180909241857698 1 -1 0 +565 205 3 -0.8476 16.571290714132587 15.380788191495872 9.978390686128293 0 0 0 +566 205 4 0.4238 16.486697788555325 14.396887548242892 10.135820192964106 0 0 0 +544 198 3 -0.8476 14.802744123952923 12.494905050684105 8.220714343430616 0 0 0 +546 198 4 0.4238 15.69958392914293 12.648272017127166 8.635636336988226 0 0 0 +545 198 4 0.4238 14.327341303672132 11.766564694345089 8.71418549827662 0 0 0 +495 181 4 0.4238 15.64406667138792 16.008563289169672 8.530685968345766 0 -1 0 +647 232 4 0.4238 12.174548141627941 14.158466532425988 8.81047248263604 1 -1 0 +493 181 3 -0.8476 14.888021746634598 16.43755314652351 8.036353729476255 0 -1 0 +301 117 3 -0.8476 11.444178994842403 10.634235762851835 8.302874111374269 0 0 0 +127 59 3 -0.8476 11.835398099674071 14.130588554568469 12.228336617000755 0 0 0 +266 105 4 0.4238 13.437837209675466 11.718053793881642 11.111124693406984 1 -1 0 +391 147 3 -0.8476 9.099036309266321 11.055510230198061 9.552934514493218 1 -1 0 +465 171 4 0.4238 4.507962365618935 16.739930651989027 12.02419305834093 1 1 0 +333 127 4 0.4238 7.671719130956259 11.719916025379499 5.589601145029327 0 0 0 +366 138 4 0.4238 5.3810066147385625 12.723574451940152 12.033239886655569 0 -1 0 +267 105 4 0.4238 14.695595476843678 12.667206008724747 11.539822065683758 1 -1 0 +157 69 3 -0.8476 5.628213484046431 19.7062241141079 8.476653698924062 0 -1 0 +412 154 3 -0.8476 10.588274339586592 13.60163970345705 9.74115068987977 -1 -1 0 +393 147 4 0.4238 8.752170977546312 10.727795337016143 10.43173357510416 1 -1 0 +405 151 4 0.4238 1.4893493439895436 20.379210451086568 7.3946095610145495 1 -1 0 +448 166 3 -0.8476 2.31094841939137 15.22894706649686 11.40418724815192 1 -1 0 +449 166 4 0.4238 2.4578750502157516 15.152016401940413 12.390338787322065 1 -1 0 +584 211 4 0.4238 7.457640650200761 17.192133224007062 11.208629944424919 0 0 0 +585 211 4 0.4238 7.4183339086411015 17.350678325691767 9.583838609015473 0 0 0 +318 122 4 0.4238 12.677059363876626 10.345851943535926 5.612738242773594 -1 0 0 +450 166 4 0.4238 2.5278285080124174 16.1586189746941 11.106405599802631 1 -1 0 +159 69 4 0.4238 5.396739043963939 19.542646637149865 7.517663044565708 0 -1 0 +277 109 3 -0.8476 1.9668284394083102 12.400955373279421 10.489290044953318 1 0 0 +174 74 4 0.4238 2.093131136233991 20.2908531347256 12.509936900888619 1 -1 0 +158 69 4 0.4238 5.72722641111533 18.830742461490534 8.949654740651088 0 -1 0 +236 95 4 0.4238 2.955886959156451 18.56642796559528 10.125462919315872 1 -1 0 +332 127 4 0.4238 8.992796984842672 10.791435697737592 5.34607589753084 0 0 0 +567 205 4 0.4238 17.492436254495992 15.680156746258747 10.227126720885458 0 0 0 +268 106 3 -0.8476 14.72205779127257 15.84637768385046 12.22186102297119 -1 0 0 +144 64 4 0.4238 11.609867542673534 17.63780259318367 11.964952217223086 0 -1 0 +143 64 4 0.4238 10.437547809860437 16.53467569974479 11.690352189869234 0 -1 0 +620 223 4 0.4238 11.248363625488201 17.110068003656618 9.60254814088919 0 -1 0 +142 64 3 -0.8476 11.326107809904766 16.875494366073085 11.383255826277036 0 -1 0 +129 59 4 0.4238 12.300763358612933 15.015557263662124 12.2446824789516 0 0 0 +549 199 4 0.4238 9.422230282072096 17.23756950681282 8.266389738781958 0 0 0 +583 211 3 -0.8476 6.97427468797035 17.61248426688647 10.440734635242483 0 0 0 +718 256 3 -0.8476 13.966610727938773 18.787186536259128 9.059246432430188 0 0 0 +237 95 4 0.4238 2.482978017919997 18.391152324186773 11.678608951138568 1 -1 0 +462 170 4 0.4238 10.307703252681602 19.40879670268801 9.05410643052076 0 -1 0 +130 60 3 -0.8476 14.46327699006248 19.66514390094484 11.485397145457227 0 -1 0 +720 256 4 0.4238 13.217661837076776 19.070863155758513 8.460408162150607 0 0 0 +383 144 4 0.4238 3.5533021915261043 10.935137256889309 12.654783731389125 0 -1 0 +133 61 3 -0.8476 16.51149780470187 10.788229938237286 5.201627541800947 -1 0 0 +511 187 3 -0.8476 1.1543831961823052 10.310487624376274 8.191850041914243 1 0 0 +134 61 4 0.4238 15.632698323193418 11.200996122194294 4.9621749152925725 -1 0 0 +716 255 4 0.4238 11.626630842918797 20.339515205022618 7.996935994482277 1 0 0 +512 187 4 0.4238 1.567722559344666 10.205106901475968 7.287390743726031 1 0 0 +509 186 4 0.4238 10.912595818989244 19.417924622524666 12.89837775340388 -1 0 0 +568 206 3 -0.8476 6.485313610696203 14.44523352047762 16.559346762808755 1 0 0 +569 206 4 0.4238 5.877025478161448 14.853591461355627 17.239958916387955 1 0 0 +304 118 3 -0.8476 3.972168127351238 15.654660056945955 17.403540948690193 1 -1 0 +305 118 4 0.4238 3.3854131498127042 14.920622411377614 17.06162240739048 1 -1 0 +418 156 3 -0.8476 2.2734537776824832 13.394090298029402 17.756318894272294 0 0 0 +306 118 4 0.4238 3.723466580375299 16.51489113835542 16.958399519713794 1 -1 0 +501 183 4 0.4238 2.8455782661452247 12.338053980852902 14.176040664713545 0 -1 0 +445 165 3 -0.8476 5.729110891648391 12.122083027826067 15.433974986322738 1 -1 0 +463 171 3 -0.8476 4.549155758711698 16.77122254564855 13.022854621887307 1 1 0 +172 74 3 -0.8476 2.0677673094230764 19.527911145364634 13.155909715455525 1 -1 0 +489 179 4 0.4238 14.886763033339717 10.902943702023924 18.70189284494204 1 -1 0 +419 156 4 0.4238 1.6504734693675003 13.234408025086623 18.52208606851008 0 0 0 +446 165 4 0.4238 5.710179429818999 13.041573185918448 15.82663266450181 1 -1 0 +420 156 4 0.4238 3.1335652597928223 12.910968687196343 17.92004363905744 0 0 0 +499 183 3 -0.8476 3.6979504775468945 12.369149009344994 13.654029663057878 0 -1 0 +500 183 4 0.4238 4.473726698288414 12.401810668166792 14.284194212701715 0 -1 0 +250 100 3 -0.8476 7.609604863953975 10.606171102951322 16.945230673113805 0 0 0 +147 65 4 0.4238 13.61668681394621 19.964324916590904 19.533511237350798 0 -1 0 +146 65 4 0.4238 12.536466740647986 19.339889174664197 20.586997674791956 0 -1 0 +570 206 4 0.4238 7.376196607403398 14.262759769403841 16.97532363052286 1 0 0 +323 124 4 0.4238 8.730985930270878 15.01364577963519 18.921207974437056 1 1 0 +324 124 4 0.4238 9.459353552713571 15.212836705232725 17.473301605982858 1 1 0 +322 124 3 -0.8476 8.813624638926065 14.65274321341759 17.992272333045058 1 1 0 +200 83 4 0.4238 10.388442485410472 11.91097015701038 16.806022211892135 -1 0 0 +623 224 4 0.4238 6.927586929691289 14.247240193752283 14.41222893771625 1 -1 0 +551 200 4 0.4238 12.247394341229853 11.259529069604119 14.84681275368594 1 0 0 +201 83 4 0.4238 9.71192070215314 12.977793729481439 17.840834618671714 -1 0 0 +199 83 3 -0.8476 9.899149161698215 12.010006135076521 17.672503104553247 -1 0 0 +312 120 4 0.4238 11.79495765458046 13.369509996222956 18.772893074029064 -1 0 0 +624 224 4 0.4238 7.897178590463072 15.319195662378577 13.652340180508801 1 -1 0 +350 133 4 0.4238 16.208874637827858 18.83362085868009 21.47129005078417 0 -1 0 +126 58 4 0.4238 8.88511907083734 13.272142299537386 13.66818822412786 0 -1 0 +622 224 3 -0.8476 7.593373444769949 14.366747565469286 13.67571894110038 1 -1 0 +550 200 3 -0.8476 11.432996415804167 11.567553927000933 15.33862353821482 1 0 0 +552 200 4 0.4238 10.76952107398665 11.935576775479335 14.687194082211969 1 0 0 +124 58 3 -0.8476 9.764955887504145 12.797152211212811 13.684703994662227 0 -1 0 +145 65 3 -0.8476 13.361959064058402 19.150230676335642 20.05540166992056 0 -1 0 +40 20 1 -0.006425533623795996 13.237200000000001 17.832199999999997 23.449863020791625 0 0 0 +599 216 4 0.4238 15.202481084467259 12.24900078170297 16.690922642575146 0 1 0 +251 100 4 0.4238 8.439342401574516 10.980938867010675 17.358856275145612 0 0 0 +704 251 4 0.4238 16.305154322814072 16.042350718561647 17.631988502422384 1 0 0 +703 251 3 -0.8476 16.0883225484333 16.255856181651623 16.67941162794245 1 0 0 +705 251 4 0.4238 15.715587557055152 15.442833175152185 16.232124973929633 1 0 0 +48 24 1 -0.02029044178834072 16.178800000000003 17.8322 23.449863020791625 0 0 0 +559 203 3 -0.8476 15.105531419639098 13.835234878317607 15.170664799706675 0 -1 0 +561 203 4 0.4238 14.406014847882542 14.34932009538237 14.674283203645347 0 -1 0 +675 241 4 0.4238 17.437788579674944 14.421546806543976 19.79224658208944 1 -1 0 +222 90 4 0.4238 15.365101969084085 15.332074787573918 19.959893780942252 0 0 0 +598 216 3 -0.8476 14.485446191543312 11.647768322089009 17.04360100536762 0 1 0 +177 75 4 0.4238 3.61134855335209 11.579252278014556 19.453192026472223 0 -1 0 +310 120 3 -0.8476 12.381985872710548 13.80369947515285 18.089607987476125 -1 0 0 +458 169 4 0.4238 2.6933087112285694 10.351514807091242 16.952058213771583 1 0 0 +139 63 3 -0.8476 13.691362264873232 10.627931433301129 14.158294798087477 -2 -1 0 +614 221 4 0.4238 11.61650220566129 15.485182333983216 17.966722851607205 1 -1 0 +600 216 4 0.4238 13.914747640475733 11.329877307455188 16.286467756847514 0 1 0 +617 222 4 0.4238 13.259523186751528 14.51825781874507 19.356416644998088 0 -1 0 +311 120 4 0.4238 12.776789012062968 13.102786397427105 17.495594179094766 -1 0 0 +530 193 4 0.4238 1.6281735604033576 12.886011322673935 16.268039063851113 1 0 0 +141 63 4 0.4238 13.630765327041322 11.105034290734396 13.28153613591018 -2 -1 0 +531 193 4 0.4238 0.4467031724535419 12.527812716084183 15.199183538889944 1 0 0 +399 149 4 0.4238 6.486830695241165 16.029581701860693 15.666779418386291 0 -1 0 +380 143 4 0.4238 3.5853869202872657 18.660092474563687 18.603647711199425 1 -1 0 +464 171 4 0.4238 4.023461569086171 16.009792558697868 13.40215734502378 1 1 0 +428 159 4 0.4238 9.469055750500404 10.667524387442267 20.937661270126558 1 -1 0 +397 149 3 -0.8476 6.413895340325838 16.8360319627653 15.07998984725994 0 -1 0 +319 123 3 -0.8476 0.7829907556311054 16.744941337967973 15.272421110502437 1 0 0 +398 149 4 0.4238 5.749127839593244 16.66081301160753 14.353776938898731 0 -1 0 +528 192 4 0.4238 8.975850745071186 20.350056923475165 13.990790392092903 0 -1 0 +321 123 4 0.4238 0.12521342288041218 16.277401530292295 15.862964127879662 1 0 0 +490 180 3 -0.8476 3.125563432540245 18.468684529246257 16.74556745319216 1 -1 0 +491 180 4 0.4238 3.575636793388386 18.624126139932855 15.8662072375943 1 -1 0 +492 180 4 0.4238 2.578632077563288 19.27047397837691 16.986406012030017 1 -1 0 +659 236 4 0.4238 1.0298389225267837 20.168025384298502 20.026919057347232 2 -1 0 +249 99 4 0.4238 0.16814848071124128 16.21206933125259 13.713202558066024 1 0 0 +164 71 4 0.4238 0.5299522359953556 20.257624996360576 17.55648066935482 0 -1 0 +162 70 4 0.4238 16.66913392996693 10.45829253707763 19.795901801640834 0 0 0 +371 140 4 0.4238 11.056255566760345 16.598270748160388 15.718911806822456 0 -1 0 +370 140 3 -0.8476 11.298560558575987 16.404137638756527 14.768331949474652 0 -1 0 +610 220 3 -0.8476 9.182998099495135 16.844324083314575 13.063635808058317 1 -1 0 +154 68 3 -0.8476 9.372552675513472 16.050092330482723 20.09128772182719 0 0 0 +155 68 4 0.4238 9.045313534743997 16.990624622451623 20.000103598074276 0 0 0 +156 68 4 0.4238 10.11796075622463 15.89226417482912 19.443632058888397 0 0 0 +612 220 4 0.4238 9.912940585757283 16.62881769597969 13.71228285972464 1 -1 0 +183 77 4 0.4238 7.463961847985207 18.60237515839614 19.98843047486115 0 -1 0 +629 226 4 0.4238 6.710399312260268 18.123336806911855 16.079630988721004 1 -1 0 +182 77 4 0.4238 7.757164552671424 18.810844945497134 18.395570465863837 0 -1 0 +181 77 3 -0.8476 8.125126014517141 18.452044538789227 19.253401321364763 0 -1 0 +611 220 4 0.4238 8.931884466842028 17.808185361298875 13.152595651819967 1 -1 0 +628 226 3 -0.8476 6.9796091824851425 18.952004521134636 16.570383047183572 1 -1 0 +630 226 4 0.4238 7.708609412032784 19.4156379445819 16.06679113644326 1 -1 0 +487 179 3 -0.8476 15.066619024936566 10.249951535799466 19.437593400150895 1 -1 0 +526 192 3 -0.8476 9.129233109396537 19.581112471942753 13.37014199224269 0 -1 0 +151 67 3 -0.8476 17.426283060222275 19.58522448708249 14.435121464885997 -2 -2 0 +160 70 3 -0.8476 0.01506610403255687 10.548473719534147 19.830294631268465 1 0 0 +351 133 4 0.4238 15.056477500508233 18.63959592950024 20.330692470756837 0 -1 0 +372 140 4 0.4238 12.170052868259033 16.843340153646995 14.550139731531836 0 -1 0 +473 174 4 0.4238 14.26517035940876 17.98252701799394 14.507717382131688 0 -1 0 +669 239 4 0.4238 15.647005666799474 17.715015917343795 16.152341030706786 1 0 0 +220 90 3 -0.8476 16.219792055920426 15.707023482600887 19.60084001936226 0 0 0 +221 90 4 0.4238 16.33803818547856 16.64326825776226 19.931693947174367 0 0 0 +349 133 3 -0.8476 16.000726312606744 18.426710693303725 20.581851466927844 0 -1 0 +176 75 4 0.4238 4.728802867281302 10.760075907012997 18.588971835799967 0 -1 0 +472 174 3 -0.8476 13.537149582394218 17.542196784550853 13.982262808143558 0 -1 0 +286 112 3 -0.8476 12.565689798467716 18.517223262424135 17.37055509192227 0 -1 0 +287 112 4 0.4238 12.767092649586525 18.693595832778726 18.334054128623215 0 -1 0 +288 112 4 0.4238 13.312023375950227 18.86734630158713 16.80451492455031 0 -1 0 +667 239 3 -0.8476 15.34738402069065 18.575704886300255 15.74070654907211 1 0 0 +557 202 4 0.4238 2.0877847893502692 15.917637143334856 14.598779519777349 1 0 0 +668 239 4 0.4238 16.102271316982648 18.97804359363653 15.222758820554837 1 0 0 +233 94 4 0.4238 16.939408664150182 19.300736366917782 19.285818625681394 0 -1 0 +232 94 3 -0.8476 17.251185745369266 20.17960735549295 18.92473073318461 0 -1 0 +556 202 3 -0.8476 2.5142033450925534 15.10859384094593 14.194283647198105 1 0 0 +613 221 3 -0.8476 11.029798398400157 16.24252383347896 17.67998671968566 1 -1 0 +615 221 4 0.4238 11.597398207517758 17.002005745636787 17.362143868985218 1 -1 0 +447 165 4 0.4238 6.2756188615712825 11.521571558695248 16.017683721626977 1 -1 0 +453 167 4 0.4238 3.215029455130721 15.987095453067399 19.079850682663047 0 0 0 +452 167 4 0.4238 2.0544632500236664 15.323519686230991 20.017604338312154 0 0 0 +451 167 3 -0.8476 2.772338132809199 16.01844856447551 19.975979335062384 0 0 0 +427 159 3 -0.8476 10.261611448686569 11.049130758551382 20.462021892602714 1 -1 0 +429 159 4 0.4238 10.007428161019474 11.279799732432494 19.52277538343466 1 -1 0 +14 7 1 0.003164654221259076 4.4124 12.7373 23.449863020791625 0 0 0 +7 4 1 0.009893054359739757 1.7763568394002505e-15 15.2847 23.449863020791625 0 0 0 +6 3 1 0.007054820838538483 1.4708000000000014 12.7373 23.449863020791625 0 0 0 +15 8 1 0.01742682861283385 2.941600000000001 15.2847 23.449863020791625 0 0 0 +410 153 4 0.4238 10.111531319873574 14.412553872150411 20.82849386163515 1 -1 0 +411 153 4 0.4238 10.469141456583753 12.84237118855151 21.09917747701026 1 -1 0 +23 12 1 0.002267061274119069 5.8832 15.2847 23.449863020791625 0 0 0 +22 11 1 -0.00588542885415537 7.354000000000001 12.7373 23.449863020791625 0 0 0 +31 16 1 0.004565600593305302 8.8248 15.2847 23.449863020791625 0 0 0 +30 15 1 -0.005925222637524864 10.2956 12.737299999999998 23.449863020791625 0 0 0 +409 153 3 -0.8476 10.837769824697997 13.725395752659518 20.80869263231772 1 -1 0 +674 241 4 0.4238 0.39525518297454587 12.95332622295135 20.169962624276398 2 -1 0 +673 241 3 -0.8476 0.6270046999503937 13.886923561797822 19.896670228457296 2 -1 0 +616 222 3 -0.8476 13.68828360729474 14.607480608256637 20.25542035696146 0 -1 0 +618 222 4 0.4238 12.980122773618541 14.639356060980928 20.960754364272496 0 -1 0 +47 24 1 0.007459299037120008 14.708000000000002 15.284699999999999 23.449863020791625 0 0 0 +39 20 1 0.003376862325317847 11.7664 15.2847 23.449863020791625 0 0 0 +46 23 1 0.009768162996603134 16.178800000000003 12.737299999999998 23.449863020791625 0 0 0 +38 19 1 0.011451708519644 13.237200000000001 12.7373 23.449863020791625 0 0 0 +529 193 3 -0.8476 1.4045836747088354 12.797677923854442 15.297364918402971 1 0 0 +379 143 3 -0.8476 3.6479330411961883 18.493128836123883 19.58762503197076 1 -1 0 +165 71 4 0.4238 0.6364380304987282 20.088673926904107 15.935757183747858 0 -1 0 +660 236 4 0.4238 2.12389322021301 19.263967819272075 20.834602549240042 2 -1 0 +658 236 3 -0.8476 1.5737386108979707 20.098541840243776 20.86318845039298 2 -1 0 +560 203 4 0.4238 15.394781076902573 13.050765407651904 14.622081620313322 0 -1 0 +381 143 4 0.4238 3.2550133288406142 17.598298120219788 19.799504375422842 1 -1 0 +125 58 4 0.4238 10.47743096516406 13.402844176984058 13.330419032611076 0 -1 0 +506 185 4 0.4238 17.00798692793307 10.56073453324316 15.263209711132241 -1 0 0 +8 4 1 0.007878856031568425 1.4708000000000023 17.8322 23.449863020791625 0 0 0 +16 8 1 -0.02162051739161995 4.412400000000001 17.8322 23.449863020791625 0 0 0 +454 168 3 -0.8476 6.1211530914480035 18.877217060758102 21.057303091018483 1 0 0 +455 168 4 0.4238 6.016004433060814 18.378364098649328 21.91758892263117 1 0 0 +456 168 4 0.4238 5.249585193480707 18.883650340743063 20.567064277406875 1 0 0 +24 12 1 -0.02105358127656316 7.354000000000001 17.8322 23.449863020791625 0 0 0 +32 16 1 -8.633878219141563e-05 10.2956 17.8322 23.449863020791625 0 0 0 +474 174 4 0.4238 13.940539993728047 16.977316374214087 13.262406896868265 0 -1 0 +320 123 4 0.4238 0.45185935575146113 17.666250404746776 15.068591299890938 1 0 0 +173 74 4 0.4238 2.7498380997441414 19.67489584208449 13.872273730507478 1 -1 0 +175 75 3 -0.8476 4.212203814165672 11.613788132755259 18.65457863001542 0 -1 0 +152 67 4 0.4238 0.6848929361146843 19.37421734773228 14.07318618999465 -1 -2 0 +505 185 3 -0.8476 16.758143951478264 11.211629355559246 14.546329703315896 -1 0 0 +558 202 4 0.4238 2.2322174055594726 14.29431286166049 14.701660067407344 1 0 0 +510 186 4 0.4238 12.208040730030191 18.659648620639253 13.541393467576771 -1 0 0 +374 141 4 0.4238 9.497589320200765 19.8441690425366 18.526563503706242 1 -1 0 +153 67 4 0.4238 16.840552768523775 19.914595574397616 13.694556413474471 -2 -2 0 +163 71 3 -0.8476 1.137603810251879 20.333101852965335 16.765870695643105 0 -1 0 +507 185 4 0.4238 16.68943419233681 10.7331700931247 13.670909273297896 -1 0 0 +632 227 4 0.4238 9.059492914790276 11.263838240899624 13.232125352935022 -1 0 0 + +Velocities + +49 0 0 0 +50 0 0 0 +51 0 0 0 +57 0 0 0 +58 0 0 0 +59 0 0 0 +676 0.0021411732266066546 -0.0031466597050466686 0.006950385069113567 +677 0.00471300605204294 -0.010676608272384733 0.0027534373566423364 +678 -0.008823855984279599 -0.007959499471369818 -0.004534651421080043 +709 0.005380424876014373 0.006307583340186229 -0.0018881938332245358 +195 0.0035011066672069953 -0.018982633794167522 0.013387657244058954 +193 -0.0016243730866856681 -0.0009043410307212374 0.00442651336838353 +194 -0.016844359613345537 -0.0020052459554273784 -0.01311294231282549 +103 0.0015806838149129447 0.002560824201124871 0.0047168491592377345 +710 0.007830390266471615 -0.009204470955483884 0.04052260106336803 +713 -0.011412032208487173 -0.0013968159548142917 -0.01011897403656863 +65 0 0 0 +66 0 0 0 +67 0 0 0 +73 0 0 0 +74 0 0 0 +75 0 0 0 +712 0.00439112600296801 0.00360710731488533 -0.0039525073869872964 +714 0.014803144807230072 -0.010674744767348688 -0.003430825293082879 +604 -0.00011827390695045583 -0.006806704613944644 0.0027321887706147296 +189 0.008154941183069432 0.00402238852258463 0.006084124951427027 +170 0.0013361044299764954 -0.00017168208250770554 -0.006118458408511565 +315 0.0037328380509703343 0.017096489497345373 0.013207513139570021 +605 0.003503171355645862 0.00393175960965181 0.01269038834140635 +116 -0.009757167707959114 0.010598646892323519 -0.010231402748289127 +388 0.001747370305520368 0.0018503925217209565 -0.0005923969541604404 +389 -0.02015066489450734 -0.008493989807482257 -0.009473043666461643 +586 0.0050721953206553675 -0.002995629227084019 -0.0022560086328735564 +81 0 0 0 +82 0 0 0 +83 0 0 0 +89 0 0 0 +90 0 0 0 +91 0 0 0 +601 0.0013661096020166409 -0.003796167035264375 0.0063671190647323125 +602 -0.008528174022195655 0.008966924162453272 -0.0044782466696049895 +107 0.002028194218827179 -0.012365773885091972 0.011299553506975946 +603 -0.0030874748643350066 0.0020597842518737266 0.005359799428542693 +378 -0.009420735022443168 0.009599931914543234 -0.009184011191465311 +422 0.0010193233677437787 0.005769570923430941 -0.0006033266822692004 +52 0 0 0 +53 0 0 0 +60 0 0 0 +61 0 0 0 +316 0.002099526043199114 -0.0045408329717682855 -0.0028575294101176726 +423 -0.0017639729433514052 0.002384599378075939 0.006405279839456641 +421 -0.0026843238108787987 0.0046959324815539945 0.0006610392109797653 +643 -0.003182764168498806 -0.002245164669701677 -0.0020501158160216556 +644 -0.02278045268171879 0.008802300249148224 0.014781779450300365 +581 0.014810628036019674 0.0056131550207308666 0.001138473889555862 +426 -0.01183599814307284 -0.0030118119812299515 0.011634339637079983 +582 0.011911283072524504 0.002506814749779835 -0.001888380076239702 +299 0.00994979834473168 -0.0096597572982869 0.006175710613675385 +691 -0.0026712809298204015 0.005580991440600302 -0.005608206061799583 +693 -0.014851955236401738 0.019823950564919104 0.005329652535995544 +369 -0.014885149160620455 0.006101800275190467 0.006812320026047257 +300 0.0008158139232951453 0.00232745268131941 0.00015792455194356278 +367 -0.0049456849226559435 0.008314528563211335 -0.002138833331259298 +368 -0.005849586902335537 0.016404409742447917 -0.023365351477116908 +68 0 0 0 +69 0 0 0 +76 0 0 0 +77 0 0 0 +169 0.005590524540675908 0.007794464783479033 0.003654628816346811 +171 0.012286139005426607 0.008057541351814898 0.0020922247023472014 +425 -0.016526775746840687 -0.0019895804930743877 -0.0012848640610859466 +543 -0.008403263122905095 -0.010110530886943685 0.0016250745100911436 +522 -0.00235343490059379 -0.005821725621201975 -0.014831986110216069 +541 -0.002052849658527383 0.001446847447984322 0.0015600130792332112 +520 0.0005441812914655316 0.0020611556729780707 0.0017969804508576564 +521 0.01905794717342043 -0.002386834191950047 -0.0014130319315243112 +213 -0.0036990379004162195 0.008707625631414345 -0.019663536410738924 +84 0 0 0 +85 0 0 0 +92 0 0 0 +93 0 0 0 +211 -0.005623424343732137 0.00041450752084430637 -0.00187652360271947 +212 0.006534163449200209 0.005670602877114846 -0.0069945707656233055 +205 0.008555811513959347 -0.002709371287039603 0.0014234983072410974 +207 0.01677499159222979 -0.003385261115317942 0.008761159144685641 +206 -0.0001887616937573145 -0.004069535594198049 0.0036374306485813203 +188 0.0030565470233890027 0.008303749761324268 0.0014899500510024226 +104 0.0036813924474077115 0.007994502590776614 -0.03313731805992863 +240 0.010056751094400922 -0.013332457722194798 0.036809456838136606 +186 -0.0012950439927692653 0.002894648277169305 0.006583342682271782 +627 -0.011158521584990703 -0.0009662710867750767 0.006042395691770004 +679 0.006444076291197415 -0.0014424205891745063 -0.0014998614075233054 +298 0.001415424120738642 0.003068364998106709 0.004182110752503899 +498 0.0015425122749562377 0.016719318190993645 -0.007505001561501574 +242 -0.02456132712089157 -0.00499984312835767 -0.017843586754103514 +497 0.007139149173339814 -0.0145879096307924 0.012441864775946854 +496 0.0010186556613462456 0.005655575482822908 -0.006762667135991682 +243 -0.007715796816331542 0.008719348744647202 -0.007300486873615359 +653 0.010449033256064723 0.004309437854212114 0.000935271957518078 +291 0.004183977929022222 0.0034791720281195566 0.008654935223702453 +476 0.016439414220948263 -0.0010854446635568742 -0.046096342306847136 +626 -0.004396560653690805 0.010758464422674686 -0.0049427779061986445 +187 -0.004442223772804815 0.0047589723343784175 -0.0006148440280884378 +198 -0.017122202248149542 0.004671830831065398 -0.021591592448874278 +477 0.0040737641278782745 -0.04058404020647128 0.019242920253909494 +385 0.007886786472273232 0.0013311289547582469 -0.006409370965421947 +432 -0.005112477606678751 0.009856086607739475 0.0027357065631810756 +386 0.02463926635147559 0.016683088148706424 -0.009438473091688007 +387 -0.00010606347230315728 -0.0020318345731269952 0.018980717561988752 +431 -0.007493012343989028 -0.00807857236319325 -0.009881982085251819 +430 -0.004524910755669161 0.0069218123924701105 0.0028532664656262 +475 0.0005240789999880052 -0.0036600642125827463 0.0005837376117434307 +577 -0.00039257654752591074 0.006216233007986547 0.002821290791104702 +578 0.020057630069978766 -0.004246264624556574 0.02613706699373874 +579 -0.007622100966699831 0.0073994147205036324 0.0020110299310591565 +282 0.0008362717929222001 0.0042467846601403755 0.0027792731068598457 +281 -0.0022527029426062414 0.003975642769665842 0.006531907364618286 +280 -0.0020932155844553303 0.003303421993385573 0.005106114099904367 +576 -0.021795680954640875 0.00033248379966947404 0.0035909079681866697 +115 0.0009651319566518861 0.001613687366934229 0.0031050301198059047 +117 0.007092275821736963 0.016601328333389103 -0.010174399596936017 +654 0.006666123396093453 0.0034820782549897476 -0.007548491071939311 +196 -0.007724650614744938 -0.004434335618261068 -0.006100969448446816 +353 0.0012893706598156962 -0.003696189678514886 0.006810683602718142 +575 -0.00015451142420669985 -0.007903206226872591 0.0053590040277165804 +390 0.0019318952353184432 -3.915485612460652e-05 0.02512946163532081 +468 -0.02149606396352213 -0.014627346139848459 -0.02322137074184742 +680 0.0021316175435442384 -0.006654962178855455 -0.0001873582646005704 +401 0.010401215314564395 -0.01960362072239097 -0.01515973547470601 +241 -0.005230192439982171 0.007020204461620798 -0.0013500646300778566 +400 -0.006812157761295941 0.009089711854151245 -0.0036543826545893435 +562 0.0019804650115473567 -0.00028603596969985575 0.005858052848098717 +563 -0.01218620597672023 -0.015524824921392979 -0.008793186490164185 +564 -0.008935569769710614 -0.019371477501039753 0.004169465211802351 +687 -0.02132702946477968 0.002624497943599152 -0.009338031127366477 +467 0.012537198784621843 0.002965885297784254 0.004720391558890157 +666 0.00798795194024716 -0.030319685798422914 -0.0020188158019839183 +664 0.004749322796011822 -0.0043766561886238765 -0.0049774737380464725 +637 0.00588099891901965 -0.001216339123192569 -0.0026242446564109594 +290 0.014516979272844701 0.0015897248385656547 0.005707976744589011 +652 0.006850034980395777 0.0026782797648557486 -0.0015069280546491383 +402 -0.0034976084774069804 0.004535202116435988 -0.005087829093657203 +257 0.0012607025312018137 -0.009368212646836838 0.006968118390459642 +256 -0.0018478117849684223 0.002025941765796813 0.003727441819147934 +424 -0.006901245522197137 -0.0013303335985025966 0.0011059441800063592 +665 -0.004108673022343136 0.02756341408187244 0.004998477269975495 +122 0.03325733328895117 -0.009837145275822285 0.010300807091427751 +258 0.02352477625978478 -0.000800587290288175 -0.002937467081773502 +466 0.0008211706166287764 0.0037786952682420934 0.0028864889717026224 +377 -0.006791525954268541 -0.012741664603392176 0.008960836876523243 +105 0.0075254897454936276 -0.004097719399251073 -0.012147216735037885 +580 0.0037274873834820628 -0.00451385869218868 -0.0005479283373083121 +638 0.02378979194655618 0.01258017180535563 -0.014888606022849447 +717 0.0008536852916907268 0.00758135276550789 0.00866904087809462 +352 0.0013677093267280443 -0.0035327394727749832 -0.0021756600763700967 +137 -0.004025571305218045 -0.0011771198658975714 -0.0028210853387310437 +692 0.0019285659783500123 -0.007498396388372936 0.016327933902900025 +645 -0.006334167147176737 0.0026932034532357765 0.03810632174272965 +185 -0.0258016499999917 0.002966337289661987 0.0192775032868555 +292 0.0032239529951158365 -0.002940539950527776 0.005128379648619589 +294 -0.002882030968976172 -0.009999674767135671 -0.004996218559394716 +574 -0.0017098010265335615 -0.006233341003337626 -0.003130881298453147 +711 0.011550634037340288 0.005661405841651928 0.016230520184342886 +437 0.016623543237673673 0.021126526281754876 0.01525697145973429 +436 0.0011580833433645576 0.001866769096270803 -0.0020668982892715054 +588 0.003788053246840207 0.004318290540820436 -0.009756708962759054 +438 0.002778859820834817 -0.0006615532270598109 -0.0008258015725774891 +701 -0.0077340127867783545 -0.0012750504303974512 -0.0015549160015513451 +700 0.0003771746026641942 -0.005971056101101204 0.00048713541643599623 +513 -0.007685562035241124 -0.003451884123490726 0.011140761717829488 +106 0.0012167401758591842 0.0005190446916700595 -0.0005689566549062379 +702 0.0012360073361495057 -0.014010782072965118 -0.00023435212022074399 +138 -0.00844580607399001 0.002622106272118458 -0.006828542248324802 +542 0.004462053398768184 0.00798739986184309 0.005271563844807477 +376 -0.002635850208642133 -0.0009250576279445919 -0.0022212103610827097 +639 -0.009436328867848297 -0.013749239756427646 0.006593851052360545 +524 -0.005123725178539699 0.015426884373031625 -0.01834347769166834 +360 -0.004178590839375953 0.012772866811974804 0.009637982488128747 +359 0.001703407707272143 0.009108089839648342 0.0055708198881699615 +358 -0.00036687245580791145 0.005831964931051857 0.004159047388106057 +289 -0.001595283063915116 -0.00038607006533445217 0.008644630517419101 +384 -0.0025783811970427543 -0.010842560568130202 0.0002485575154442456 +406 0.008334788236422419 0.0010503441284235345 -0.0023800280127281867 +408 -0.008249724433327414 0.0125860312627397 -0.013608031710222075 +523 0.002630732510263263 0.003918200827993626 0.002970183260485006 +407 0.0010126932985940003 0.004105264448148497 -0.0008185914388617361 +525 0.015007331123588413 -0.002998296737147837 -0.044921726699770494 +625 -0.003508771931501176 0.0027372555782873113 0.0013339734432499892 +136 -0.005107835457616012 -0.00017978248743965154 -0.003988644887833829 +587 0.0006181639400713768 0.001490404492305943 -0.005441807772501442 +184 0.006119642789751914 0.002129260802961511 0.000355130366432989 +404 0.0055448536095734375 0.0007743654867219097 0.016037969196716063 +313 -0.004078044888590166 0.0008247081419541478 -0.0005316362965100083 +238 0.0018177803681502889 0.001226893367767893 0.0007423981284663952 +461 0.0009318635511549625 -4.928350118386009e-05 0.0045466223791930825 +354 0.001972954579596857 -0.0043780296240654385 -0.01077371477183407 +314 -0.009623735019970261 0.00665798742211111 0.02408146022132393 +403 0.006589710410456089 0.007960810210289698 -0.0020320127654004315 +698 0.00031058122010607815 -0.010174080916795681 0.006501436501535736 +114 0.013755765119664892 -0.013815807900815349 -0.008433355002016293 +697 0.0007293039474806055 -0.0017923216167614411 0.003822203247328284 +606 0.008037094668825863 -0.011716121615248383 -0.01219235266766627 +317 -0.014708949199744841 0.009643525399184418 -0.0020141933611741514 +108 0.03603925575757461 0.012858477843299815 -0.009808108963212754 +382 -0.0028195334564676882 -0.0005791679751282715 0.00626241480650448 +219 -0.01247120825189971 0.0030987939456600623 -0.01140054054306225 +670 -0.0009417370514361473 -0.00047014470829927983 -0.002823228428905164 +396 -0.005706783431449613 -0.011306512585110057 -0.009211332176758109 +395 -0.023204652307578223 -0.011850758133780951 -0.014161496708519091 +394 0.0029623638021562065 -7.495431979780323e-05 -0.0017703271435133582 +204 -0.009868889536072716 0.02769142115737454 0.0017278949223337818 +608 -0.00450536239188671 0.002161396364473985 -0.014865545157464521 +203 0.0030390793343812923 0.007253293998996769 0.002638515417395934 +202 0.002472172566760438 0.0031112304950174172 0.005448652165971851 +486 0.0032226946473274958 0.027815340414288316 -0.0050285190432157985 +347 0.011618224126060037 0.010964925075023732 -0.006653010163344175 +45 0 0 2.5892839001447932e-05 +471 -0.007037423015746189 -0.003782108828722424 -0.011604084450051443 +348 -0.007877981592598695 0.00414031561501778 -0.0030371587615563864 +275 0.0027899592485585616 -0.011786738734745311 0.0008697111063236321 +346 0.0014770373743619686 0.003355855691268311 -0.005340974682633985 +572 -0.0025855405956535737 -0.007377959785635259 0.005585381444125606 +338 -0.0070240134955776665 0.004933198476666814 0.0002829725739334517 +485 -0.005851182975421713 0.013136051886263062 0.012654523591979782 +571 0.00834830199522675 -0.0009831706646230961 -0.0015188720646701576 +591 -0.014367954804647138 -0.0282607848831299 -0.0021645959273891365 +589 0.004702184319895896 0.0032133515813428256 -0.002238551119579548 +607 -0.0077765081012144705 -0.000563208567949008 -0.0033449827357436538 +609 0.00272424910864701 0.008195494864301909 -0.03137225773080429 +180 0.0008690738597768954 0.005018713025200337 -0.002945938694498902 +274 -0.005699313791818707 -0.004759962610832066 -0.005872756565232799 +686 0.008217894207660833 -0.0100983629438411 -0.021635270384703958 +671 -0.00024128230687570196 -0.021572647010253177 0.015357674519379468 +672 -0.0012462607034635857 -0.007069689753832631 0.00381563953963042 +112 0.005190774999806905 -0.005729811432305558 -0.0060176087276321245 +681 0.0007714432326670715 -0.004259570858526994 0.0008648677556282801 +113 0.0043631901827183815 7.2629853515748496e-06 -0.016906736065202134 +344 0.0006884579264700855 0.010742221645104114 0.011459152479148704 +343 0.0008499678995289771 -0.0009767427603578425 -0.0031023296178217664 +345 0.0020361124741315505 -0.0003990095428137886 -0.004264505629606172 +255 -0.007269101324618613 0.011421184414796655 0.003680445929695058 +254 0.006698925536045348 -0.0016114719270781995 0.005001912184894123 +309 0.0026873735966253492 -0.003516917240483255 -0.017190081722208775 +253 0.0010722910362563373 0.004038576864854738 0.0014868195441214305 +479 -0.013992183831219059 -0.02537860894898881 -0.00897013602536543 +109 0.002777209346426365 -0.001936144063141461 -0.0069405893687318095 +480 0.018491401867564334 -0.003446569057091999 -0.009085032649696024 +375 0.01146247831539809 -0.002217879718471049 0.0033766238753439658 +44 0 0 2.5892839001447936e-05 +110 0.0019920646548702734 -0.006687944878399153 -0.016768903427213912 +307 -0.0002242679944927341 -0.0028719408963667494 0.001806513745984584 +685 -0.0005070695650422137 -0.004796427068777599 -0.004675336978463182 +635 -0.006874160125070285 -0.0014608020876715408 -0.02409078032412396 +636 0.010895677030626532 -0.0037324590359100168 -0.00047381957852790586 +271 -0.0006627518310477532 -0.0006417588443855544 -0.000925908330851208 +722 -0.008255845250114668 0.00023297165630569398 0.0024535094545625113 +481 -0.005629526983345739 -0.0031242149927506956 0.0037214577831749165 +721 -0.001593152923256278 -0.0007609137655317765 -0.008921595727198363 +483 0.0018748021123651613 -0.0041152897635225805 -0.013180944449052353 +723 0.014252615954590953 0.004118554178258352 -0.011499683175531865 +482 -0.007456018443800531 0.022105815174257835 0.017712618439186752 +210 -0.0015471256324352317 -0.013597641088573208 -0.006216934372877166 +208 -0.0014177674098368779 0.0004455926366301616 0.00017918089607261745 +469 -0.0005997161956485187 0.004690227452983195 0.003880946509081852 +209 0.012946439616943303 0.0003010845740829233 -0.024955441077315038 +688 0.004244333938104657 0.00088687279816499 0.00042834367934795574 +690 -0.01615279858740688 0.013008480696852221 -0.002485959767769533 +634 -0.006715643473882907 0.005128315157175796 -0.0028461075943380623 +689 -0.02883305567581292 0.033940126886677344 -0.002767256806642573 +662 -0.01022324961652937 0.02459966582402962 0.007784567790126536 +149 0.003448328041689386 -0.006877133198457014 0.003969592342967052 +590 -0.02195059781319254 0.033237536847323716 -0.006017526921710795 +433 0.00272180042867418 0.005464940336619222 -0.007183585266666167 +435 -0.00997731338770566 0.018353157147169678 -0.012308600735794373 +102 -0.004933393112589753 -0.0014184896165212457 0.00282315695425379 +140 0.0037442461642616855 0.0008981125403190698 0.017717716926278767 +417 0.008997384653293916 -0.0007344093814239228 0.006883529345814865 +415 0.0010928032033067465 -0.005899521475255703 -0.0035861446547572782 +416 0.010512486392201103 -0.00010648666874990137 0.006727460050107925 +459 0.019803011405952094 -0.03588714256147905 0.008839860703799078 +217 0.0019975096609847784 0.007198832692135352 0.007528959939583509 +478 -0.003112488499603424 0.003929662738660447 0.0028623819844919673 +361 0.0006999918066639268 -0.004357350629198427 0.00022328947844429584 +197 0.0056318114382033204 -0.01769689459774823 -0.010011278507051987 +650 -0.013351051426644498 0.005724197454670781 -0.007295403538761586 +488 -0.0020278193298860344 -0.014631550395182694 0.006454598682826132 +484 0.0007862864811946282 0.005692991164955517 -0.0020259406411123064 +661 0.0014175655249771993 0.002025210035311634 0.0015878833296731276 +363 0.005742013891446284 -0.008837413122760119 0.0011588715258481145 +100 -0.0018359970011427253 -0.0034868726137758537 -0.0012239581668545684 +707 -0.009434545254390386 0.004083690301746898 1.2720907411063185e-05 +178 0.0002213341038015743 0.00042280505641683046 0.0012455284523796245 +684 -0.0016857583723109088 0.01457015268967376 -0.01248668591187947 +36 0 0 2.5892839001447932e-05 +276 -0.01288304297198337 -0.0024180918894788875 -0.009445007106884281 +214 0.0040375473866697525 0.004832098072512322 -0.0011350282263338225 +216 0.003281923037182911 0.012991080014267777 -0.00640293960536805 +539 0.005431350013191119 -0.02106556848906726 -0.00764575525773749 +538 0.004112938902306128 -0.002290109903302108 -0.0010714133951981704 +252 0.014720479077525389 -0.004278515844677452 0.00617407962447848 +228 -0.02651274201810521 0.006169895153203455 0.0026039557167579757 +226 -0.005986759492118269 -0.002624851477283382 0.002437497167111253 +227 0.037359535164647996 -0.005692341539956028 0.0007690705251742958 +540 0.029556683797969833 0.028216009622947624 -0.007637203209894227 +596 -0.000697425483047941 0.001418504974987797 0.0025860571290182237 +215 0.0019872688713270963 0.009030373521039053 -0.0024074898093308073 +234 -0.013734641718106119 -0.006668468740782935 -0.01326772362636071 +706 -0.0074752312033302334 0.005036319412231939 0.0023954321652624308 +708 -0.0008425953758246843 0.009181695196824482 -0.009248661735532846 +373 0.004422144964975159 -0.0017838198122578036 -0.00018027826543031534 +272 0.013275855183390188 0.014396950748917418 0.0007514222935930509 +273 0.005974305377988905 -0.0017929350389151585 -0.004011080458908929 +362 0.005928696718884773 -0.0061635334731560834 -0.0070875384379755196 +597 -0.011587275738507787 -0.0026775845755159858 0.005599952012635736 +519 -0.010602493961103342 0.01561109572005503 -0.004366769028339268 +682 0.001983241531391707 0.0001436343494854703 0.002165088698424475 +161 0.009978689554182 0.001974367386088278 -0.005346935314707327 +683 -0.011175053949123178 0.011604486671463417 0.005680469507150669 +339 0.011317559380578967 -0.013840330482369045 -0.013807747849132778 +470 -0.012260116006234724 0.0029555761306863846 0.02022738168370677 +595 -0.0012887047489432875 0.0007223671835801802 -0.0028794772050928733 +649 -0.001959620111970716 0.0027086652664905795 -0.004508497780011865 +179 -0.008134269078556558 -0.018166688138021095 0.0007578460469746819 +308 0.0220712849298707 0.00809270514744733 0.0063544521946541635 +663 -0.018587653237992264 0.008058025396004323 0.003021049320538634 +337 0.0009033685485476928 -0.0015102179823566727 -0.0064849412993145715 +327 0.00783068755116193 -0.006919671129723819 0.007255760426290675 +325 0.0014839226012046617 -0.004293646082977329 0.003541697150309064 +326 0.009138500341898103 0.016222223033475605 -0.004576555598052157 +535 0.005511650342351115 0.003976008787370079 -0.0035332740014495886 +537 0.00039714859735720515 -0.0034221246954245044 0.004417018509094299 +2 0 0 2.5892839001447915e-05 +1 0 0 2.5892839001447912e-05 +11 0 0 2.5892839001447912e-05 +3 0 0 2.589283900144791e-05 +10 0 0 2.589283900144792e-05 +9 0 0 2.5892839001447915e-05 +536 -0.008139619366591666 0.023305802200695613 0.020099395824835317 +516 -0.01472371433290118 -0.00947034405699238 -0.006759743057624231 +111 -0.0005643300911320225 -0.00203649367262994 -0.0031700572161786175 +515 0.0021658009569283476 0.013002309599111122 0.023091810824977285 +514 0.002194248370768298 -0.00477869990315876 -0.001376235961931239 +168 -0.007642051948728814 0.0025148703254984145 -0.0010089913229547366 +166 -0.0018884353605177553 0.00853020828258679 -0.005584376923825304 +17 0 0 2.5892839001447922e-05 +19 0 0 2.589283900144792e-05 +18 0 0 2.5892839001447925e-05 +27 0 0 2.5892839001447922e-05 +26 0 0 2.589283900144793e-05 +25 0 0 2.5892839001447925e-05 +434 -0.0131141501224289 -0.029735168306092356 0.018069386056516087 +41 0 0 2.5892839001447936e-05 +42 0 0 2.589283900144794e-05 +43 0 0 2.5892839001447932e-05 +33 0 0 2.5892839001447932e-05 +35 0 0 2.589283900144793e-05 +34 0 0 2.5892839001447936e-05 +518 -0.003364650601080657 -0.0025510701028415793 -0.019031077701915526 +101 0.0066056761815660925 -0.025335359921442018 -0.0042522676779589135 +517 -0.0042150036150125966 0.003039265084075177 0.001234238912865041 +150 -0.003263779481471764 -0.006968079925877713 -0.0285427305003533 +37 0 0 2.589283900144793e-05 +13 0 0 2.5892839001447912e-05 +4 0 0 2.5892839001447912e-05 +12 0 0 2.5892839001447915e-05 +148 0.004337680509183382 -0.0024120213706328784 -0.0023459000779718947 +5 0 0 2.589283900144791e-05 +167 0.0022761530768332797 0.0009747010232492098 -0.004993243345757521 +328 0.004462110300378782 0.003171460897117234 0.0013533076822872438 +329 -0.0028078357210696643 0.0006206344128711716 0.006200475106646407 +330 0.030738960581955917 0.003287330484129426 -0.010708188876434703 +28 0 0 2.5892839001447925e-05 +29 0 0 2.5892839001447922e-05 +20 0 0 2.5892839001447922e-05 +21 0 0 2.589283900144792e-05 +457 0.006550818533058792 -0.001884276384381016 0.003039243394733296 +573 0.013975969924696937 0.0024199182318704903 -0.0034702509100560364 +651 0.015420309153338693 0.010283570358113264 0.02634159883149936 +218 -0.003395956296838163 0.00547325260028855 0.0019942972776871965 +54 0 0 0 +55 0 0 0 +62 0 0 0 +63 0 0 0 +192 -0.004363758761444326 0.00951161221484961 0.017129944705041603 +119 -0.004701077453742114 -8.296328219091687e-05 -0.0009688745560292821 +118 -0.0009314150513423432 0.00027605062629613427 -0.0035150783233501826 +191 0.00680583753605197 0.003167173243801115 -0.015417719909486413 +190 -0.0014967223491699952 0.0025908878048932016 -0.002402175301537957 +98 -0.009260175858086675 -0.028226198550552986 0.007567183856183354 +120 -0.0034806697031884997 -0.003298183743718096 -0.004362434174689871 +97 0.005989233619364602 0.0023803823609934273 -0.0030417661760985806 +244 0.0017880362939288001 0.00422352421710819 0.0005606753077441453 +99 -0.006220115534110591 -0.002045805635333923 0.0006476194511692398 +631 -0.0033826096876896855 -0.002181941878393241 0.0025269093094629474 +295 0.0006648861314364348 -0.003931280096251278 -0.0026803518350101033 +296 0.0062929742791497266 -0.006194372009187594 -0.024124245716887833 +336 -2.5155253934298795e-05 -0.00267261595791318 -0.014156428435828225 +70 0 0 0 +71 0 0 0 +78 0 0 0 +79 0 0 0 +334 0.0001249108228848411 0.009592140759049824 -0.008055311762730182 +335 -0.008933120836296046 0.03861648264199437 0.005139262991883574 +656 -0.012795486572600556 0.01001730917412183 0.010504777975066928 +655 0.0002453631990046368 -0.008270009402721512 0.005790081828127683 +657 0.0059063953119072934 -0.011220436899447496 -0.011461093784466869 +331 -0.001861800330708783 -0.004080943128134591 -0.006024367439539751 +225 0.008847588531356471 -0.005432354583684017 -0.017291462941727266 +223 0.0018512701070779799 0.002105046598030068 -0.0050342839053457425 +86 0 0 0 +87 0 0 0 +94 0 0 0 +95 0 0 0 +246 0.019304488124036106 0.012412888772496453 0.01389232978530525 +224 0.011417823406336933 -0.02584104798241233 -0.01586969560916166 +283 -0.000656343011071711 0.0008016291011868049 -0.003620593475455601 +285 0.0051281146563605 -0.002140065887603185 -0.011749359473630993 +284 0.002108917603863087 -0.010745428739586635 0.004067661946326833 +135 -0.0019613502216042204 0.0060261613203991815 -0.005145175930284868 +128 -0.01091600795889493 -0.005359155172554258 0.0011735199042172864 +641 -0.0047721234085586475 -0.00089548417111443 -0.02881249647727017 +694 0.004306853434289274 -0.0003461190629024837 0.002613610137021579 +508 0.0038336193257742066 0.004428638671902145 -0.002578190874375256 +365 -0.0008789666156448981 -0.01647416448186925 0.005405726875929458 +56 0 0 0 +64 0 0 0 +264 -0.005069066816637629 0.008594012902267328 -0.004896454013501075 +262 -0.00411559201856892 0.0055846035307135136 0.0022939832937934027 +303 -0.012248995229285456 -0.02038598577770783 -0.0067506409467423655 +263 -0.007203606603798386 0.00015673233657838596 0.009479088778907655 +696 -0.002403944998986855 0.012547542006427242 -0.0025721085279788183 +555 0.010313716462669934 0.017093518256946594 -0.0007535353716470382 +460 0.004762464388993355 0.0035128765813662345 0.0002544426222686458 +357 0.0026975244838181372 0.0006296683369134417 -0.004187815650450881 +355 0.0009889367525614406 0.0028571604624972836 0.0044422297391537215 +642 0.011684188963247771 0.02173040302358248 0.027637684910990796 +440 0.004733172069375852 -0.0006744085975210469 0.015964767016019198 +441 0.019273424633345186 0.02031857101103021 0.01136636551406023 +248 0.005408140991082604 0.01948553192838653 -0.01769576815856515 +439 0.0021888008868001167 0.00022281918895093757 -0.0005699233777872146 +72 0 0 0 +80 0 0 0 +593 -0.010764868078727771 0.0004632189843140992 0.03371192356674729 +592 -0.0012510047155927621 -0.0013228538172386057 0.0030004231674896093 +594 -0.003138799668445178 -0.009265431891145101 -0.0035030936801646703 +229 -0.004015308077517968 0.002304541027168982 0.0018452763612786536 +356 -0.00439289027906843 -0.0003181501233854808 0.007804079534610549 +443 0.01501004287837676 0.01274826059103139 -0.0008103413168549527 +230 -0.0033363552955116165 0.0011395679198842948 0.002421577058286637 +442 0.004590428851528285 -0.00016647082324879346 -0.007536939151246863 +444 -0.0004709522261627252 0.0007916817345592208 -0.01857710544198639 +231 -0.005563876064052946 0.001516515443061688 0.0011917788782933065 +88 0 0 0 +96 0 0 0 +553 0.002310850563285711 0.0038622245684212407 0.001063744581887175 +554 0.020520241141740107 -0.005768318995011451 -0.008503556427794993 +699 0.009769647936468813 -0.0026398354232907723 -0.0019420937862542735 +247 -0.0005440687793801106 0.00533274551270155 -0.003116117624827588 +527 0.0018514500777837737 -0.009230378273878258 -0.0060158525133069156 +245 0.005556414067735625 -0.0055651124084785675 0.0033327958619201684 +633 -0.006228493799001829 -0.0025536564906557587 -0.008694681481617547 +123 -0.0013254634442550768 0.0063472029134561585 -0.011594854053242773 +724 0.009989087181242503 -0.005372152351255475 -0.0018551724238006096 +725 0.028063127915331425 0.0036594616018658425 0.019379030908003192 +342 0.0006491711315738201 0.016203183514455405 0.0023688436726023014 +340 -0.00433735839176797 -0.000495918764211808 0.002257318744322688 +341 -0.0006929018962787288 0.015189606179435388 0.0018137275128837062 +364 -0.00882244249614916 0.0034576704590505883 -0.00811983159685899 +726 -0.01855210191687358 0.024009648567330344 -0.010178733951576051 +503 0.014134059605139943 -0.004326106316946778 -0.001926850902735659 +502 0.003759520085920061 -0.005572417624353865 0.0038047544622829043 +504 -0.003935710721857757 0.005577813760648028 0.013790854542965157 +413 -0.021593565939491674 0.003234704353097422 0.011974405473584714 +278 0.00883327301294058 -0.013449834793822607 0.020644593756055547 +270 0.00781868067364934 0.002754459504676058 -0.0010544004588571533 +719 0.006398783376387078 0.001946288912145545 0.022229144951245915 +132 0.007832425765429163 0.011404797448368427 0.015400661765000056 +297 0.0038792006849247243 -0.007593554626325106 -0.012809257149632622 +392 -0.011715180257929931 -1.176189615249834e-05 0.009633360116141418 +260 -0.009423773124827882 -0.023186194647239755 -0.02190022720812517 +548 0.009629883272752136 0.006774886139507993 -0.020907198728238808 +302 -0.007841165533640462 0.003026014956910295 -0.00703538244890269 +259 -0.003426942147231846 0.0014749707614869303 -0.003444717877250437 +261 0.0006945604695285328 -0.010576783124679686 -0.0020734669000596877 +640 -0.0008886178358934431 0.0060434330372213935 -0.010383480842809305 +532 8.241792411033156e-05 0.006040661450994054 -0.002463893772382022 +235 0.0007038770519582305 0.0067292095538841615 -0.0028443681465380494 +533 -0.0002129926328668816 0.00488451374048223 -0.0028066827071909287 +534 0.007064961280930333 0.025232242617842127 0.0008574875214082739 +621 0.011287366443141251 -0.003449176508228183 0.017928382611092662 +121 0.0007022815589027053 -0.000892538811671254 -0.0018627823896997114 +269 0.00469009840256279 0.0015241035513903975 0.001984306143110744 +265 -0.0054586758884403105 0.002131291238446908 0.001153323924828889 +547 -0.0011175811849537705 0.004103087625132249 0.00078716134613171 +619 0.0003632578854721528 0.005362253640767787 -0.006417849782413687 +279 0.011624081133984786 -0.011774327315428757 -0.014995684102348524 +293 -0.0017466342827571289 -0.002552253740249767 0.002528434692005852 +695 -0.004911630333401857 0.008651651256560356 -0.0020402912967414214 +494 0.005776310030291935 -0.000219217384465697 -0.0012280489592709103 +131 -0.018436321747528253 -0.021208301175051184 0.0006884707536230596 +715 0.006546258488425628 -0.005755050576697564 -0.0039883518170252905 +239 0.011588133086593538 -0.011846815428878082 -0.00881463043856705 +414 0.010325867114536506 -0.0006113612193524784 0.0017105622669241444 +648 -0.0026558023935934014 -0.009616362543538188 0.010264407433954103 +646 -0.0003042619186802288 -0.006311024166021424 0.0031010083811757994 +565 0.0007394748342163842 0.004516477559592657 0.00033539363242210933 +566 0.002090696563890277 0.0033273332142688904 -0.006266252541019348 +544 0.0007700118900610095 -0.001389627444945187 -0.004115546441642321 +546 -0.008050688006328074 0.023127963394541477 0.006164274038600667 +545 0.005924140141637715 0.001350652630120117 0.004941780161927939 +495 0.0069079619862543245 -0.007627704476709708 -0.0021154124154080375 +647 -0.00017732064807360345 0.002645796003071014 0.007429648590994952 +493 0.008654158253716833 -0.004029112678793171 -0.0016991226950217582 +301 -0.00533271211616937 0.007677255432536089 -0.0016339575663828834 +127 -0.0017719186381853886 0.003534213331123468 -0.0014256780429603613 +266 -0.0005212803553580399 -0.010749716358853169 0.007192928429952392 +391 -0.002578132714595172 0.0014365390200574261 0.0008211021077538514 +465 0.016880882832760326 -0.01067083624985097 -0.00022780999411606596 +333 -0.002918705357704968 -0.01118788463028499 -0.011006638219927969 +366 -0.0034141036467909827 -0.01084067671589307 -0.0004984580617246783 +267 0.006279258266850698 -0.018295845749178304 0.003999927664413487 +157 -0.0032474639721635297 -0.002071067218862699 0.005146248544668708 +412 0.0010230248589894202 -0.002669542251526284 0.004046648042845933 +393 0.003984235524416656 0.01206305025975438 0.007338917088694135 +405 -0.0055971864668224415 -0.001835879479675777 -0.0003608610575552909 +448 0.004430595048261473 -0.005005222921986947 -0.0018506673587511161 +449 0.01637776697980032 -0.014127790377349642 -0.00434461965343095 +584 0.013793791431671172 -0.009326091804055824 -0.01747981576570497 +585 -0.008359394537154218 0.009831653490172253 -0.015131425117590833 +318 0.014260723165817455 -0.002876736345312385 0.01741120858595613 +450 0.016867039987388758 -0.006826024777415599 0.0014250845205727915 +159 -0.0020686816783562546 0.023218708679260347 0.0005679898884230374 +277 -0.00031624432316685767 -0.003276417788006159 0.007206583965036211 +174 0.02232250253907675 -0.01231852993148094 -0.010546896918912205 +158 0.009085924338852294 -0.014728147944420766 -0.020912169525047947 +236 0.006765120985488478 0.005926831661173007 -0.002318291635240894 +332 0.0042747818750445725 -0.0017899782198140476 -0.007971038141225751 +567 0.002235629448123555 0.003016503143010697 -0.003392544405989525 +268 0.004011420131944795 0.008377084166031164 0.002316053989518986 +144 -0.012024612981489083 0.005361811091711969 -0.0014672866723572583 +143 -0.0073730174733633545 0.0040880726939264795 -0.0165900644982253 +620 -0.0065142327069454865 0.035190802650504636 -0.0006640427681044298 +142 0.0028419016591640558 -0.004087187698190576 0.0037294719979222247 +129 0.008463487923697903 -0.0015510850454567688 -0.015170037898573475 +549 -0.0025830067012953825 0.01852116530899133 0.010385008510639499 +583 0.004268963968694046 0.0010471359047598279 -0.005851219475190436 +718 0.0006430494717885148 0.007923101925764318 0.004010379569037137 +237 0.014352864654346011 0.01020811390215342 0.00047127720322738515 +462 0.005064298161311936 0.0015423027868889188 0.008335104423218753 +130 0.004406284567008871 -0.00860513254615911 -0.004879385522234749 +720 0.00393831447904276 -0.006119628459627095 -0.006764066218979042 +383 0.004218653914705313 -0.01202327645784736 0.022980672819351747 +133 -0.00102039624254495 0.002371407198966068 0.0067364713751238425 +511 0.003912741513012298 0.00101552438914296 0.0018958766721141054 +134 -0.0033610434450266286 -0.0026284616742153787 0.00674072004379062 +716 0.010566057481285352 -0.02176428147337611 0.007168160969202919 +512 0.01634597212601708 -0.0002926570645188546 0.007738629495829494 +509 0.0011140510641293316 0.0007182760943427564 -0.014628144005186052 +568 -0.0039044314646687196 -0.006830451357868171 -0.0022373549345757774 +569 -0.0013290493571988461 0.004839537419246563 -0.006910692862670655 +304 0.0054736539006658485 -0.004960430228645577 -0.001968166657216059 +305 -0.012109090513145905 0.00577200024652643 0.005396896203310628 +418 -2.437543145425559e-05 -0.005689015414779892 -0.002258568108083334 +306 0.011459516326170439 0.0007872800806459576 0.005803298963212287 +501 -0.009350152887850311 0.003677986993344379 -0.011989987989375296 +445 -0.0008290701903718754 0.005643282980849799 0.0002485307221862214 +463 0.0004729541684906896 -0.0009865037215842994 0.0002106726307666064 +172 0.004731719855505472 -0.0030321314569809483 -0.0003530081265682011 +489 -0.014429505694453698 0.009455042753152534 0.01903652416959836 +419 0.0025409339530107623 -0.002879625146716656 0.0003702102460500956 +446 -0.00021411000691779435 0.00955825379875846 -0.00885753338160607 +420 0.007536051380740864 0.010381989365120456 0.005336366205111886 +499 -0.0006342662881036965 -0.00023501992000385272 0.0020560303434147245 +500 -0.01195099663304182 0.028212202950552916 0.014770929928671189 +250 0.007361035395654199 -0.004690688159251201 0.003061239445099873 +147 -0.009310962727936977 0.020391157953635785 0.03074647165589922 +146 -3.6811505540478325e-05 -0.017980254752765046 0.017302450341036273 +570 -0.0017712854514889199 0.0019656582840076615 -0.002982248494982292 +323 0.02025520719624794 0.00437956264756661 -0.0018309996628302016 +324 -0.014124442777214079 0.011549999461420518 -0.018237952404482057 +322 0.0016068916953904174 0.006306614444237204 -0.004315464210736402 +200 0.021753072613096884 0.018573023333333702 0.004427859217421257 +623 0.011452678250841558 -0.007224569524583359 0.0027236085578886244 +551 -0.014919499049456707 -0.01686470199682272 -0.009390344835571803 +201 -0.023111043546362873 0.00020560246955362896 -0.006295323851049318 +199 0.0004815918368625051 0.004853422247417755 -0.006061618709908838 +312 0.0008481996440953347 -0.006155473605828348 -0.0017282663370451403 +624 0.001586490607358962 0.004010243402294628 0.0059810887166708345 +350 -0.009760147323275311 -0.016632875743950715 0.016528153602606437 +126 -0.006532699294053725 -0.012656386469316777 0.0068195173267290715 +622 0.0024139583689417247 0.003498498050067583 -0.003655007006662313 +550 -0.0012162513220406828 -0.0033011033267567416 0.004819001835822252 +552 -0.00924649718960619 0.0013741774004242453 0.015653387667881418 +124 0.0001705708408269096 -0.000550279279659424 -0.0013377042655839796 +145 -0.002334830495624088 0.002793853156377406 0.006506801380971504 +40 0 0 2.589283900144793e-05 +599 0.0023217932209911667 -0.01835053819969972 -0.013463199934529201 +251 0.002581923394498151 0.0023298657256145133 0.006255129412513726 +704 -0.005296929928288727 0.01607189461778198 0.010179684267012322 +703 0.0034655840261788758 0.005574906464163651 0.005889701146370732 +705 0.010861930940493255 -0.0003350694921833778 0.01044180291497366 +48 0 0 2.5892839001447932e-05 +559 -0.005483933645194205 -0.0012780353966408038 0.0023721586219114825 +561 0.01337950290190957 0.0044607660522192946 -0.01823291897146361 +675 0.0031193771284579496 0.00217714638874969 7.001676744408073e-06 +222 -0.006345175465281138 0.004820356905560499 0.023282345551168215 +598 -0.0007217641988605089 -0.007385715555506205 -0.0009079271908534197 +177 -0.01851185003563661 -0.00016629752608533365 -0.012976887019520758 +310 0.0012985833227644886 -0.001566855158339641 0.001579031386051685 +458 0.0039239799167950645 -0.007481014210507378 0.009788403085109105 +139 0.00033494528818851267 0.0024585397677852625 0.000660401833580898 +614 -0.0009389256816982662 0.011828643953531368 0.018676419298217065 +600 -0.018094474476051486 0.00023445740586081488 0.008899796958011633 +617 -0.009036194427037533 -0.0025641807901169078 0.005251509094796726 +311 0.0010927413625261679 0.0024725292678410946 -0.0033258539523485773 +530 -0.009543198468485899 0.009194738162092713 0.002932821352048649 +141 0.007530076713547185 -0.010772382425474793 -0.007049312864075332 +531 0.01346275911311354 -0.015519264000711233 -0.013983233267324877 +399 -0.015794023221716955 0.013361754155793227 0.023184548477482157 +380 -0.00016532393637421034 0.005396941650961916 0.003706037154930361 +464 -0.009720016666000888 0.005508521851143906 -0.0010447395388278984 +428 -0.0032295145570997628 0.0073242509948272215 -0.008762443779130127 +397 -0.0019383749400236328 -0.004608215655716036 -0.0033540348251192864 +319 -0.0009038475895158715 0.0004032373568885917 -0.0008893950154038688 +398 0.0008784454978576588 -0.019930509233584276 -0.0023402740275860765 +528 -0.017149344935718215 0.0053125553694975455 -0.0062739095024969055 +321 0.011291342491685402 0.011778478494356572 0.02157510722031055 +490 0.003460299667122343 0.0005008872223548776 -0.003928509480568708 +491 -0.02042787598151604 0.009606293972625789 -0.014609420256501925 +492 -0.01179479155292874 -0.013123603914816054 0.006317741927870814 +659 -0.0069325446438758135 0.001872758468936734 -0.001820683375806924 +249 -0.003689403614427041 -0.009541231217973603 0.0028290387567211457 +164 -0.006400690048675919 -0.013877760093602321 -0.002977622020994794 +162 -0.004855407125325768 -0.01879111496764322 0.020518095513515515 +371 0.0186329030963466 -0.0030361600806192253 0.01127947927515273 +370 -0.006645327540014044 0.0013620044066288777 0.0040028544483149825 +610 0.002198658185540671 -0.005517799631155318 -0.0021977580020232164 +154 -0.0040921640552195535 0.004469932541531453 -0.004074017062258021 +155 0.00946262378435491 0.008912303180476127 -0.007853976504644958 +156 -0.007160039514904957 -0.009309817752610663 -0.004347645837647768 +612 -0.01853211573078728 -0.01727473985951407 0.017215191641891617 +183 -0.004442865646352574 -0.003400423991540166 -0.0018621889463709465 +629 0.020458137445744262 -0.0005441012285127372 -0.016121405666884327 +182 0.010414879082570251 0.030332837986610725 0.005191185967407049 +181 -0.004080198053479511 -0.0019011724834973821 -0.001840667647736802 +611 0.012212859606390776 -0.0026124264131294 -0.005669832465189566 +628 0.0001792339331808534 -0.002433089326052819 -0.001805358970649801 +630 -0.015366679651799057 0.027336154517751083 0.0030786076245146897 +487 -0.006612908041425593 -0.010557716751849671 -0.0004398534728532736 +526 -0.0028150615039515803 0.004044411001066752 -0.0013644193865672359 +151 -0.008568566244765728 0.0059744557184639255 -0.000627104807162225 +160 -0.005288304762918362 -0.004980091259974818 -0.0052020664728392955 +351 -0.014050712299375443 -0.02358677864502768 0.022078468617912066 +372 -0.010000271327845013 -0.0017495788438303597 -0.015743229425643938 +473 -0.008545742194336561 0.03299533080814433 -0.006554398847784694 +669 0.009323919846092737 -0.005503137113750206 -0.01757154792744392 +220 -0.010802030745763268 -0.003946674830891448 0.003347466106919407 +221 0.0031078719584793097 -0.0026986854685907176 -0.005051678138139105 +349 -0.0028467913154277976 0.00619549728782877 0.004513308653347061 +176 0.014573690185444051 0.005701141194454324 0.02429670540436278 +472 0.0034704444931731564 -0.0004223936528461586 0.004682456493386929 +286 -0.0007227944529852624 0.0002044846821905628 0.0005275546923425382 +287 -0.013787536809725281 0.0027725652215363646 0.0028043383019355616 +288 0.013467067943699075 -0.013607004090118587 0.010562692707514431 +667 -0.0033231615840826375 -0.0026754997278682718 -0.0025810158998434453 +557 0.00480046414868641 0.0036381648364985485 0.011568695731040347 +668 -0.010354343669844574 0.01551276249617225 0.001263283616141959 +233 0.018175533457414624 0.0017013730890884599 -0.000542455897216258 +232 0.0005655337868856603 0.005109144050052834 -0.0075456339065252485 +556 -0.002652573873678528 0.0017686267932879897 0.007383198916898972 +613 -0.0015918424196763945 0.004086688266801507 -0.0008860298641209033 +615 -0.0020836681424838757 -0.0005735018872513953 -0.013310568326146311 +447 0.01139703322386246 0.014688114003843386 -0.0018920048987641955 +453 -0.004830305681658932 0.02052395365578583 -0.006460118140426627 +452 -0.006659826339694623 0.0003543348655607981 -0.022845001543426367 +451 -0.005502850804956584 0.00025572828917443384 -0.005940030711587164 +427 0.006878068518221622 -0.00885399992822085 -0.004941337405656671 +429 0.016310095429692206 -0.004246153250381018 -0.0063539068368046086 +14 0 0 2.5892839001447915e-05 +7 0 0 2.5892839001447905e-05 +6 0 0 2.5892839001447912e-05 +15 0 0 2.589283900144791e-05 +410 0.0036773579068940594 0.005088334412447784 -0.00010670193844646754 +411 -0.013294041272967414 0.0018927422415192015 0.004022854780372532 +23 0 0 2.5892839001447915e-05 +22 0 0 2.5892839001447922e-05 +31 0 0 2.589283900144792e-05 +30 0 0 2.5892839001447925e-05 +409 -0.0033332525225770564 -0.00245864319500691 0.003352617057588178 +674 -0.0020876963116493253 0.0012720696117521837 0.004777046069219144 +673 0.001440207298745793 0.0006711067607754656 0.005750751000129193 +616 0.0034399261571874833 -0.0006771518251561286 -0.0008689301882926043 +618 0.011960174137895753 0.02757908212908868 0.006623095130093759 +47 0 0 2.589283900144793e-05 +39 0 0 2.5892839001447925e-05 +46 0 0 2.5892839001447936e-05 +38 0 0 2.5892839001447932e-05 +529 0.005442778008874495 0.007503881077571631 -0.00033589800355411745 +379 -0.001314351775643973 0.002379695621041653 0.003275885323478339 +165 0.00884464006202344 0.015924976929959245 -0.005078073570798919 +660 0.011025274705486485 0.007784764248372991 -0.019723554911707096 +658 -0.0017037660488597379 -0.0011580239500757668 -0.005506394723447372 +560 0.005991317348670128 -0.0022661168537082676 0.009892255799050512 +381 0.012417376249213864 -0.004828502113807977 -0.0018726878888628074 +125 -0.013873333040961978 0.004406736093524685 -0.021053266887589718 +506 -0.026262892601657484 -0.0021543522170194944 0.00442906465538162 +8 0 0 2.589283900144791e-05 +16 0 0 2.5892839001447912e-05 +454 -0.00010663947966301035 -0.005040601246033902 -0.0006922370547977346 +455 0.02289550486644541 -0.006075060916417402 0.0014647034106781431 +456 -0.0058551014431358 -0.028688264965094145 0.009412476538204347 +24 0 0 2.589283900144792e-05 +32 0 0 2.5892839001447922e-05 +474 0.018709003929338164 0.009713859155058282 0.005249922845235266 +320 0.020360034496335867 0.014864835586975439 0.030731515192935176 +173 -0.00013434925230160102 -0.003339721540542993 0.004399850614784226 +175 0.00477366431159889 0.0011728150452943586 0.0044527343392776805 +152 0.0025786212815767234 0.029696509429575725 0.013830328539275497 +505 -0.0004092230325628855 0.007490307555796668 0.004255257179335567 +558 -0.008265759925745195 0.00204552967410164 0.004668247385046733 +510 -0.0053380401606728245 0.0015521061958218008 -0.0005550030486493117 +374 0.02765868826006261 0.0017903292061302555 0.0026621329108467906 +153 -0.001037157082329749 0.005658079883762745 -0.006765436155795196 +163 2.534136430269839e-06 0.0043915276877542625 0.003615456878949748 +507 0.011440010041486237 0.01571871212288878 -0.001231948945091482 +632 -0.009407051140085434 -0.003481475839385426 0.0075372754448969695 + +Bonds + +1 1 676 677 +2 1 676 678 +3 1 709 710 +4 1 709 711 +5 1 193 194 +6 1 193 195 +7 1 103 104 +8 1 103 105 +9 1 712 713 +10 1 712 714 +11 1 604 605 +12 1 604 606 +13 1 388 389 +14 1 388 390 +15 1 586 587 +16 1 586 588 +17 1 601 602 +18 1 601 603 +19 1 316 317 +20 1 316 318 +21 1 421 422 +22 1 421 423 +23 1 643 644 +24 1 643 645 +25 1 691 692 +26 1 691 693 +27 1 367 368 +28 1 367 369 +29 1 169 170 +30 1 169 171 +31 1 541 542 +32 1 541 543 +33 1 520 521 +34 1 520 522 +35 1 211 212 +36 1 211 213 +37 1 205 206 +38 1 205 207 +39 1 679 680 +40 1 679 681 +41 1 298 299 +42 1 298 300 +43 1 496 497 +44 1 496 498 +45 1 187 188 +46 1 187 189 +47 1 385 386 +48 1 385 387 +49 1 430 431 +50 1 430 432 +51 1 475 476 +52 1 475 477 +53 1 577 578 +54 1 577 579 +55 1 280 281 +56 1 280 282 +57 1 115 116 +58 1 115 117 +59 1 196 197 +60 1 196 198 +61 1 241 242 +62 1 241 243 +63 1 400 401 +64 1 400 402 +65 1 562 563 +66 1 562 564 +67 1 664 665 +68 1 664 666 +69 1 637 638 +70 1 637 639 +71 1 652 653 +72 1 652 654 +73 1 256 257 +74 1 256 258 +75 1 424 425 +76 1 424 426 +77 1 466 467 +78 1 466 468 +79 1 580 581 +80 1 580 582 +81 1 352 353 +82 1 352 354 +83 1 292 293 +84 1 292 294 +85 1 574 575 +86 1 574 576 +87 1 436 437 +88 1 436 438 +89 1 700 701 +90 1 700 702 +91 1 106 107 +92 1 106 108 +93 1 376 377 +94 1 376 378 +95 1 358 359 +96 1 358 360 +97 1 289 290 +98 1 289 291 +99 1 406 407 +100 1 406 408 +101 1 523 524 +102 1 523 525 +103 1 625 626 +104 1 625 627 +105 1 136 137 +106 1 136 138 +107 1 184 185 +108 1 184 186 +109 1 313 314 +110 1 313 315 +111 1 238 239 +112 1 238 240 +113 1 403 404 +114 1 403 405 +115 1 697 698 +116 1 697 699 +117 1 382 383 +118 1 382 384 +119 1 670 671 +120 1 670 672 +121 1 394 395 +122 1 394 396 +123 1 202 203 +124 1 202 204 +125 1 346 347 +126 1 346 348 +127 1 571 572 +128 1 571 573 +129 1 589 590 +130 1 589 591 +131 1 607 608 +132 1 607 609 +133 1 274 275 +134 1 274 276 +135 1 112 113 +136 1 112 114 +137 1 343 344 +138 1 343 345 +139 1 253 254 +140 1 253 255 +141 1 109 110 +142 1 109 111 +143 1 307 308 +144 1 307 309 +145 1 685 686 +146 1 685 687 +147 1 271 272 +148 1 271 273 +149 1 481 482 +150 1 481 483 +151 1 721 722 +152 1 721 723 +153 1 208 209 +154 1 208 210 +155 1 469 470 +156 1 469 471 +157 1 688 689 +158 1 688 690 +159 1 634 635 +160 1 634 636 +161 1 433 434 +162 1 433 435 +163 1 415 416 +164 1 415 417 +165 1 217 218 +166 1 217 219 +167 1 478 479 +168 1 478 480 +169 1 361 362 +170 1 361 363 +171 1 484 485 +172 1 484 486 +173 1 661 662 +174 1 661 663 +175 1 100 101 +176 1 100 102 +177 1 178 179 +178 1 178 180 +179 1 214 215 +180 1 214 216 +181 1 538 539 +182 1 538 540 +183 1 226 227 +184 1 226 228 +185 1 706 707 +186 1 706 708 +187 1 373 374 +188 1 373 375 +189 1 682 683 +190 1 682 684 +191 1 595 596 +192 1 595 597 +193 1 649 650 +194 1 649 651 +195 1 337 338 +196 1 337 339 +197 1 325 326 +198 1 325 327 +199 1 535 536 +200 1 535 537 +201 1 514 515 +202 1 514 516 +203 1 166 167 +204 1 166 168 +205 1 517 518 +206 1 517 519 +207 1 148 149 +208 1 148 150 +209 1 328 329 +210 1 328 330 +211 1 457 458 +212 1 457 459 +213 1 118 119 +214 1 118 120 +215 1 190 191 +216 1 190 192 +217 1 97 98 +218 1 97 99 +219 1 244 245 +220 1 244 246 +221 1 631 632 +222 1 631 633 +223 1 295 296 +224 1 295 297 +225 1 334 335 +226 1 334 336 +227 1 655 656 +228 1 655 657 +229 1 331 332 +230 1 331 333 +231 1 223 224 +232 1 223 225 +233 1 283 284 +234 1 283 285 +235 1 694 695 +236 1 694 696 +237 1 508 509 +238 1 508 510 +239 1 262 263 +240 1 262 264 +241 1 460 461 +242 1 460 462 +243 1 355 356 +244 1 355 357 +245 1 439 440 +246 1 439 441 +247 1 592 593 +248 1 592 594 +249 1 229 230 +250 1 229 231 +251 1 442 443 +252 1 442 444 +253 1 553 554 +254 1 553 555 +255 1 247 248 +256 1 247 249 +257 1 724 725 +258 1 724 726 +259 1 340 341 +260 1 340 342 +261 1 364 365 +262 1 364 366 +263 1 502 503 +264 1 502 504 +265 1 259 260 +266 1 259 261 +267 1 640 641 +268 1 640 642 +269 1 532 533 +270 1 532 534 +271 1 235 236 +272 1 235 237 +273 1 121 122 +274 1 121 123 +275 1 265 266 +276 1 265 267 +277 1 547 548 +278 1 547 549 +279 1 619 620 +280 1 619 621 +281 1 715 716 +282 1 715 717 +283 1 646 647 +284 1 646 648 +285 1 565 566 +286 1 565 567 +287 1 544 545 +288 1 544 546 +289 1 493 494 +290 1 493 495 +291 1 301 302 +292 1 301 303 +293 1 127 128 +294 1 127 129 +295 1 391 392 +296 1 391 393 +297 1 157 158 +298 1 157 159 +299 1 412 413 +300 1 412 414 +301 1 448 449 +302 1 448 450 +303 1 277 278 +304 1 277 279 +305 1 268 269 +306 1 268 270 +307 1 142 143 +308 1 142 144 +309 1 583 584 +310 1 583 585 +311 1 718 719 +312 1 718 720 +313 1 130 131 +314 1 130 132 +315 1 133 134 +316 1 133 135 +317 1 511 512 +318 1 511 513 +319 1 568 569 +320 1 568 570 +321 1 304 305 +322 1 304 306 +323 1 418 419 +324 1 418 420 +325 1 445 446 +326 1 445 447 +327 1 463 464 +328 1 463 465 +329 1 172 173 +330 1 172 174 +331 1 499 500 +332 1 499 501 +333 1 250 251 +334 1 250 252 +335 1 322 323 +336 1 322 324 +337 1 199 200 +338 1 199 201 +339 1 622 623 +340 1 622 624 +341 1 550 551 +342 1 550 552 +343 1 124 125 +344 1 124 126 +345 1 145 146 +346 1 145 147 +347 1 703 704 +348 1 703 705 +349 1 559 560 +350 1 559 561 +351 1 598 599 +352 1 598 600 +353 1 310 311 +354 1 310 312 +355 1 139 140 +356 1 139 141 +357 1 397 398 +358 1 397 399 +359 1 319 320 +360 1 319 321 +361 1 490 491 +362 1 490 492 +363 1 370 371 +364 1 370 372 +365 1 610 611 +366 1 610 612 +367 1 154 155 +368 1 154 156 +369 1 181 182 +370 1 181 183 +371 1 628 629 +372 1 628 630 +373 1 487 488 +374 1 487 489 +375 1 526 527 +376 1 526 528 +377 1 151 152 +378 1 151 153 +379 1 160 161 +380 1 160 162 +381 1 220 221 +382 1 220 222 +383 1 349 350 +384 1 349 351 +385 1 472 473 +386 1 472 474 +387 1 286 287 +388 1 286 288 +389 1 667 668 +390 1 667 669 +391 1 232 233 +392 1 232 234 +393 1 556 557 +394 1 556 558 +395 1 613 614 +396 1 613 615 +397 1 451 452 +398 1 451 453 +399 1 427 428 +400 1 427 429 +401 1 409 410 +402 1 409 411 +403 1 673 674 +404 1 673 675 +405 1 616 617 +406 1 616 618 +407 1 529 530 +408 1 529 531 +409 1 379 380 +410 1 379 381 +411 1 658 659 +412 1 658 660 +413 1 454 455 +414 1 454 456 +415 1 175 176 +416 1 175 177 +417 1 505 506 +418 1 505 507 +419 1 163 164 +420 1 163 165 + +Angles + +1 1 677 676 678 +2 1 710 709 711 +3 1 194 193 195 +4 1 104 103 105 +5 1 713 712 714 +6 1 605 604 606 +7 1 389 388 390 +8 1 587 586 588 +9 1 602 601 603 +10 1 317 316 318 +11 1 422 421 423 +12 1 644 643 645 +13 1 692 691 693 +14 1 368 367 369 +15 1 170 169 171 +16 1 542 541 543 +17 1 521 520 522 +18 1 212 211 213 +19 1 206 205 207 +20 1 680 679 681 +21 1 299 298 300 +22 1 497 496 498 +23 1 188 187 189 +24 1 386 385 387 +25 1 431 430 432 +26 1 476 475 477 +27 1 578 577 579 +28 1 281 280 282 +29 1 116 115 117 +30 1 197 196 198 +31 1 242 241 243 +32 1 401 400 402 +33 1 563 562 564 +34 1 665 664 666 +35 1 638 637 639 +36 1 653 652 654 +37 1 257 256 258 +38 1 425 424 426 +39 1 467 466 468 +40 1 581 580 582 +41 1 353 352 354 +42 1 293 292 294 +43 1 575 574 576 +44 1 437 436 438 +45 1 701 700 702 +46 1 107 106 108 +47 1 377 376 378 +48 1 359 358 360 +49 1 290 289 291 +50 1 407 406 408 +51 1 524 523 525 +52 1 626 625 627 +53 1 137 136 138 +54 1 185 184 186 +55 1 314 313 315 +56 1 239 238 240 +57 1 404 403 405 +58 1 698 697 699 +59 1 383 382 384 +60 1 671 670 672 +61 1 395 394 396 +62 1 203 202 204 +63 1 347 346 348 +64 1 572 571 573 +65 1 590 589 591 +66 1 608 607 609 +67 1 275 274 276 +68 1 113 112 114 +69 1 344 343 345 +70 1 254 253 255 +71 1 110 109 111 +72 1 308 307 309 +73 1 686 685 687 +74 1 272 271 273 +75 1 482 481 483 +76 1 722 721 723 +77 1 209 208 210 +78 1 470 469 471 +79 1 689 688 690 +80 1 635 634 636 +81 1 434 433 435 +82 1 416 415 417 +83 1 218 217 219 +84 1 479 478 480 +85 1 362 361 363 +86 1 485 484 486 +87 1 662 661 663 +88 1 101 100 102 +89 1 179 178 180 +90 1 215 214 216 +91 1 539 538 540 +92 1 227 226 228 +93 1 707 706 708 +94 1 374 373 375 +95 1 683 682 684 +96 1 596 595 597 +97 1 650 649 651 +98 1 338 337 339 +99 1 326 325 327 +100 1 536 535 537 +101 1 515 514 516 +102 1 167 166 168 +103 1 518 517 519 +104 1 149 148 150 +105 1 329 328 330 +106 1 458 457 459 +107 1 119 118 120 +108 1 191 190 192 +109 1 98 97 99 +110 1 245 244 246 +111 1 632 631 633 +112 1 296 295 297 +113 1 335 334 336 +114 1 656 655 657 +115 1 332 331 333 +116 1 224 223 225 +117 1 284 283 285 +118 1 695 694 696 +119 1 509 508 510 +120 1 263 262 264 +121 1 461 460 462 +122 1 356 355 357 +123 1 440 439 441 +124 1 593 592 594 +125 1 230 229 231 +126 1 443 442 444 +127 1 554 553 555 +128 1 248 247 249 +129 1 725 724 726 +130 1 341 340 342 +131 1 365 364 366 +132 1 503 502 504 +133 1 260 259 261 +134 1 641 640 642 +135 1 533 532 534 +136 1 236 235 237 +137 1 122 121 123 +138 1 266 265 267 +139 1 548 547 549 +140 1 620 619 621 +141 1 716 715 717 +142 1 647 646 648 +143 1 566 565 567 +144 1 545 544 546 +145 1 494 493 495 +146 1 302 301 303 +147 1 128 127 129 +148 1 392 391 393 +149 1 158 157 159 +150 1 413 412 414 +151 1 449 448 450 +152 1 278 277 279 +153 1 269 268 270 +154 1 143 142 144 +155 1 584 583 585 +156 1 719 718 720 +157 1 131 130 132 +158 1 134 133 135 +159 1 512 511 513 +160 1 569 568 570 +161 1 305 304 306 +162 1 419 418 420 +163 1 446 445 447 +164 1 464 463 465 +165 1 173 172 174 +166 1 500 499 501 +167 1 251 250 252 +168 1 323 322 324 +169 1 200 199 201 +170 1 623 622 624 +171 1 551 550 552 +172 1 125 124 126 +173 1 146 145 147 +174 1 704 703 705 +175 1 560 559 561 +176 1 599 598 600 +177 1 311 310 312 +178 1 140 139 141 +179 1 398 397 399 +180 1 320 319 321 +181 1 491 490 492 +182 1 371 370 372 +183 1 611 610 612 +184 1 155 154 156 +185 1 182 181 183 +186 1 629 628 630 +187 1 488 487 489 +188 1 527 526 528 +189 1 152 151 153 +190 1 161 160 162 +191 1 221 220 222 +192 1 350 349 351 +193 1 473 472 474 +194 1 287 286 288 +195 1 668 667 669 +196 1 233 232 234 +197 1 557 556 558 +198 1 614 613 615 +199 1 452 451 453 +200 1 428 427 429 +201 1 410 409 411 +202 1 674 673 675 +203 1 617 616 618 +204 1 530 529 531 +205 1 380 379 381 +206 1 659 658 660 +207 1 455 454 456 +208 1 176 175 177 +209 1 506 505 507 +210 1 164 163 165 diff --git a/examples/PACKAGES/electrode/piston/in.piston b/examples/PACKAGES/electrode/piston/in.piston index 73f981fc8b..35b4790935 100644 --- a/examples/PACKAGES/electrode/piston/in.piston +++ b/examples/PACKAGES/electrode/piston/in.piston @@ -61,5 +61,5 @@ fix fxprint all print 1000 "${s} ${top_wall}" file top_wall.csv screen no thermo_style custom step c_temp_mobile c_qwa c_qau v_top_wall thermo 5000 run 100000 -write_data "data.pistoned" +write_data "data.piston.final" diff --git a/examples/PACKAGES/electrode/piston/log.1Dec2022.piston.g++.1 b/examples/PACKAGES/electrode/piston/log.1Dec2022.piston.g++.1 new file mode 100644 index 0000000000..a5b6d4cd4f --- /dev/null +++ b/examples/PACKAGES/electrode/piston/log.1Dec2022.piston.g++.1 @@ -0,0 +1,223 @@ +LAMMPS (3 Nov 2022) +# The intention is to find the average position of one wall at atmospheric +# pressure. The output is the wall position over time which can be used to +# find the average position for a run with fixed wall position. +# +# ----------------- Init Section ----------------- + +atom_style full +units real +boundary p p f +kspace_style pppm/electrode 1e-4 +kspace_modify slab 3.0 +pair_style lj/cut/coul/long 8 8 +bond_style harmonic +angle_style harmonic +if "$(extract_setting(world_size) % 2) == 0" then "processors * * 2" + +# ----------------- Atom Definition Section ----------------- + +read_data "data.piston" +Reading data file ... + orthogonal box = (0 0 0) to (17.6494 20.3798 26) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 726 atoms + reading velocities ... + 726 velocities + scanning bonds ... + 2 = max bonds/atom + scanning angles ... + 1 = max angles/atom + reading bonds ... + 420 bonds + reading angles ... + 210 angles +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 0 0 + special bond factors coul: 0 0 0 + 2 = max # of 1-2 neighbors + 1 = max # of 1-3 neighbors + 1 = max # of 1-4 neighbors + 2 = max # of special neighbors + special bonds CPU = 0.001 seconds + read_data CPU = 0.011 seconds + +# ----------------- Settings Section ----------------- + +pair_coeff 1 1 0.069 2.78 +pair_coeff 2 2 5.29 2.951 +pair_coeff 3 3 0.1553 3.166 +pair_coeff 4 4 0.0 0.0 +bond_coeff 1 600.0 1.0 +angle_coeff 1 75.0 109.47 +group wall type 1 +48 atoms in group wall +group gold type 2 +48 atoms in group gold +group spce type 3:4 +630 atoms in group spce +group ele union wall gold +96 atoms in group ele +fix fRattleSPCE spce shake 0.0001 10 0 b 1 a 1 +Finding SHAKE clusters ... + 0 = # of size 2 clusters + 0 = # of size 3 clusters + 0 = # of size 4 clusters + 210 = # of frozen angles + find clusters CPU = 0.000 seconds +pair_modify mix arithmetic + +# ----------------- Run Section ----------------- + +neigh_modify every 1 delay 0 +timestep 2 +fix fxnvt spce nvt temp 300 300 500 +fix fxforce_au gold setforce 0.0 0.0 0.0 + +# equilibrate z-coordinate of upper electrode while keeping the electrode rigid +fix fxforce_wa wall setforce 0.0 0.0 NULL +fix fxpressure wall aveforce 0 0 -0.005246 # atomspheric pressure: area/force->nktv2p +fix fxdrag wall viscous 100 +fix fxrigid wall rigid/nve single + 1 rigid bodies with 48 atoms + +# maintain constant potential during equilibration +# 'algo cg' allows for moving electrodes +fix fxele ele electrode/conp 0.0 1.805 symm on algo cg 1e-4 +96 atoms in group conp_group + +# setup output and run +variable q atom q +compute qwa wall reduce sum v_q +compute qau gold reduce sum v_q +variable top_wall equal (bound(wall,zmin)) +compute temp_mobile spce temp +variable s equal step +fix fxprint all print 1000 "${s} ${top_wall}" file top_wall.csv screen no +thermo_style custom step c_temp_mobile c_qwa c_qau v_top_wall +thermo 5000 +run 100000 + +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +Your simulation uses code contributions which should be cited: + +- kspace_style pppm/electrode command: + +@article{Ahrens2021, +author = {Ahrens-Iwers, Ludwig J.V. and Mei{\ss}ner, Robert H.}, +doi = {10.1063/5.0063381}, +title = {{Constant potential simulations on a mesh}}, +journal = {Journal of Chemical Physics}, +year = {2021} +volume = {155}, +pages = {104104}, +} +- fix electrode command: + +@article{Ahrens2022 +author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.}, +doi = {10.1063/5.0099239}, +title = {{ELECTRODE: An electrochemistry package for LAMMPS}}, +journal = {The Journal of Chemical Physics}, +year = {2022} +volume = {157}, +pages = {084801}, +} +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +PPPM/electrode initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:342) + G vector (1/distance) = 0.32814871 + grid = 12 15 36 + stencil order = 5 + estimated absolute RMS force accuracy = 0.02930901 + estimated relative force accuracy = 8.8263214e-05 + using double precision MKL FFT + 3d grid and FFT values/proc = 15884 6480 +Generated 6 of 6 mixed pair_coeff terms from arithmetic mixing rule +Neighbor list info ... + update: every = 1 steps, delay = 0 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 10 + ghost atom cutoff = 10 + binsize = 5, bins = 4 5 6 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair lj/cut/coul/long, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d + bin: standard + (2) fix electrode/conp, perpetual, copy from (1) + attributes: half, newton on + pair build: copy + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 11.7 | 11.7 | 11.7 Mbytes + Step c_temp_mobile c_qwa c_qau v_top_wall + 0 303.38967 -0.042963484 0.042963484 21.4018 + 5000 285.08828 -0.26105255 0.26105255 25.155629 + 10000 323.19176 -0.26264003 0.26264003 24.541676 + 15000 310.479 -0.27318148 0.27318148 23.141522 + 20000 295.18544 -0.11313444 0.11313444 23.828735 + 25000 295.38607 -0.25433086 0.25433086 23.673314 + 30000 288.0613 -0.30099901 0.30099901 23.438086 + 35000 278.5591 -0.15823576 0.15823576 24.311915 + 40000 303.95751 -0.19941381 0.19941381 23.69594 + 45000 279.026 -0.1659962 0.1659962 23.588604 + 50000 298.79278 -0.28866703 0.28866703 23.372508 + 55000 301.03353 -0.078370381 0.078370381 23.192985 + 60000 306.77965 -0.12807205 0.12807205 23.968574 + 65000 309.86008 -0.27162663 0.27162663 23.616704 + 70000 287.31116 -0.029751882 0.029751882 23.667495 + 75000 312.48654 -0.10759866 0.10759866 23.504105 + 80000 309.94267 -0.2558548 0.2558548 23.810576 + 85000 328.04389 -0.1575471 0.1575471 24.013437 + 90000 302.9806 -0.032002164 0.032002164 24.264432 + 95000 294.20804 -0.27797238 0.27797238 23.291758 + 100000 307.63019 -0.19047448 0.19047448 23.632147 +Loop time of 530.844 on 1 procs for 100000 steps with 726 atoms + +Performance: 32.552 ns/day, 0.737 hours/ns, 188.379 timesteps/s, 136.763 katom-step/s +100.0% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 190.47 | 190.47 | 190.47 | 0.0 | 35.88 +Bond | 0.10754 | 0.10754 | 0.10754 | 0.0 | 0.02 +Kspace | 73.179 | 73.179 | 73.179 | 0.0 | 13.79 +Neigh | 24.209 | 24.209 | 24.209 | 0.0 | 4.56 +Comm | 1.6857 | 1.6857 | 1.6857 | 0.0 | 0.32 +Output | 0.0016861 | 0.0016861 | 0.0016861 | 0.0 | 0.00 +Modify | 240.23 | 240.23 | 240.23 | 0.0 | 45.26 +Other | | 0.9595 | | | 0.18 + +Nlocal: 726 ave 726 max 726 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 2335 ave 2335 max 2335 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 120271 ave 120271 max 120271 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 120271 +Ave neighs/atom = 165.66253 +Ave special neighs/atom = 1.7355372 +Neighbor list builds = 7722 +Dangerous builds = 0 +write_data "data.piston.final" +System init for write_data ... +PPPM/electrode initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:342) + G vector (1/distance) = 0.32814871 + grid = 12 15 36 + stencil order = 5 + estimated absolute RMS force accuracy = 0.029311365 + estimated relative force accuracy = 8.8270304e-05 + using double precision MKL FFT + 3d grid and FFT values/proc = 15884 6480 +Generated 6 of 6 mixed pair_coeff terms from arithmetic mixing rule + +Average conjugate gradient steps: 1.981 +Total wall time: 0:08:50 diff --git a/examples/PACKAGES/electrode/piston/log.1Dec2022.piston.g++.4 b/examples/PACKAGES/electrode/piston/log.1Dec2022.piston.g++.4 new file mode 100644 index 0000000000..ffb6bcc61c --- /dev/null +++ b/examples/PACKAGES/electrode/piston/log.1Dec2022.piston.g++.4 @@ -0,0 +1,224 @@ +LAMMPS (3 Nov 2022) +# The intention is to find the average position of one wall at atmospheric +# pressure. The output is the wall position over time which can be used to +# find the average position for a run with fixed wall position. +# +# ----------------- Init Section ----------------- + +atom_style full +units real +boundary p p f +kspace_style pppm/electrode 1e-4 +kspace_modify slab 3.0 +pair_style lj/cut/coul/long 8 8 +bond_style harmonic +angle_style harmonic +if "$(extract_setting(world_size) % 2) == 0" then "processors * * 2" +processors * * 2 + +# ----------------- Atom Definition Section ----------------- + +read_data "data.piston" +Reading data file ... + orthogonal box = (0 0 0) to (17.6494 20.3798 26) + 1 by 2 by 2 MPI processor grid + reading atoms ... + 726 atoms + reading velocities ... + 726 velocities + scanning bonds ... + 2 = max bonds/atom + scanning angles ... + 1 = max angles/atom + reading bonds ... + 420 bonds + reading angles ... + 210 angles +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 0 0 + special bond factors coul: 0 0 0 + 2 = max # of 1-2 neighbors + 1 = max # of 1-3 neighbors + 1 = max # of 1-4 neighbors + 2 = max # of special neighbors + special bonds CPU = 0.001 seconds + read_data CPU = 0.017 seconds + +# ----------------- Settings Section ----------------- + +pair_coeff 1 1 0.069 2.78 +pair_coeff 2 2 5.29 2.951 +pair_coeff 3 3 0.1553 3.166 +pair_coeff 4 4 0.0 0.0 +bond_coeff 1 600.0 1.0 +angle_coeff 1 75.0 109.47 +group wall type 1 +48 atoms in group wall +group gold type 2 +48 atoms in group gold +group spce type 3:4 +630 atoms in group spce +group ele union wall gold +96 atoms in group ele +fix fRattleSPCE spce shake 0.0001 10 0 b 1 a 1 +Finding SHAKE clusters ... + 0 = # of size 2 clusters + 0 = # of size 3 clusters + 0 = # of size 4 clusters + 210 = # of frozen angles + find clusters CPU = 0.002 seconds +pair_modify mix arithmetic + +# ----------------- Run Section ----------------- + +neigh_modify every 1 delay 0 +timestep 2 +fix fxnvt spce nvt temp 300 300 500 +fix fxforce_au gold setforce 0.0 0.0 0.0 + +# equilibrate z-coordinate of upper electrode while keeping the electrode rigid +fix fxforce_wa wall setforce 0.0 0.0 NULL +fix fxpressure wall aveforce 0 0 -0.005246 # atomspheric pressure: area/force->nktv2p +fix fxdrag wall viscous 100 +fix fxrigid wall rigid/nve single + 1 rigid bodies with 48 atoms + +# maintain constant potential during equilibration +# 'algo cg' allows for moving electrodes +fix fxele ele electrode/conp 0.0 1.805 symm on algo cg 1e-4 +96 atoms in group conp_group + +# setup output and run +variable q atom q +compute qwa wall reduce sum v_q +compute qau gold reduce sum v_q +variable top_wall equal (bound(wall,zmin)) +compute temp_mobile spce temp +variable s equal step +fix fxprint all print 1000 "${s} ${top_wall}" file top_wall.csv screen no +thermo_style custom step c_temp_mobile c_qwa c_qau v_top_wall +thermo 5000 +run 100000 + +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +Your simulation uses code contributions which should be cited: + +- kspace_style pppm/electrode command: + +@article{Ahrens2021, +author = {Ahrens-Iwers, Ludwig J.V. and Mei{\ss}ner, Robert H.}, +doi = {10.1063/5.0063381}, +title = {{Constant potential simulations on a mesh}}, +journal = {Journal of Chemical Physics}, +year = {2021} +volume = {155}, +pages = {104104}, +} +- fix electrode command: + +@article{Ahrens2022 +author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.}, +doi = {10.1063/5.0099239}, +title = {{ELECTRODE: An electrochemistry package for LAMMPS}}, +journal = {The Journal of Chemical Physics}, +year = {2022} +volume = {157}, +pages = {084801}, +} +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +PPPM/electrode initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:342) + G vector (1/distance) = 0.32814871 + grid = 12 15 36 + stencil order = 5 + estimated absolute RMS force accuracy = 0.02930901 + estimated relative force accuracy = 8.8263214e-05 + using double precision MKL FFT + 3d grid and FFT values/proc = 8512 2880 +Generated 6 of 6 mixed pair_coeff terms from arithmetic mixing rule +Neighbor list info ... + update: every = 1 steps, delay = 0 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 10 + ghost atom cutoff = 10 + binsize = 5, bins = 4 5 6 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair lj/cut/coul/long, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d + bin: standard + (2) fix electrode/conp, perpetual, copy from (1) + attributes: half, newton on + pair build: copy + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 10.06 | 10.22 | 10.41 Mbytes + Step c_temp_mobile c_qwa c_qau v_top_wall + 0 303.38967 -0.042963484 0.042963484 21.4018 + 5000 292.03027 -0.19040435 0.19040435 24.581338 + 10000 309.52764 -0.48308301 0.48308301 23.776985 + 15000 295.00243 -0.16591109 0.16591109 23.672038 + 20000 293.5536 -0.086669084 0.086669084 23.426455 + 25000 303.0079 -0.16488112 0.16488112 23.862966 + 30000 306.31463 -0.23192653 0.23192653 23.819882 + 35000 303.66268 -0.2317907 0.2317907 23.495344 + 40000 301.39435 -0.34661329 0.34661329 23.657835 + 45000 291.61205 -0.30539427 0.30539427 23.437303 + 50000 298.65319 -0.096107034 0.096107034 23.57809 + 55000 282.65069 -0.14943539 0.14943539 23.823728 + 60000 310.64182 -0.17418813 0.17418813 23.286959 + 65000 308.47141 -0.02075662 0.02075662 23.91313 + 70000 292.5186 -0.080163162 0.080163162 23.96283 + 75000 270.13928 -0.029528648 0.029528648 23.488972 + 80000 322.10914 0.030761045 -0.030761045 23.47592 + 85000 310.60347 -0.24069996 0.24069996 23.987091 + 90000 294.35695 -0.070458235 0.070458235 23.397929 + 95000 308.69043 -0.2652581 0.2652581 23.473813 + 100000 318.71883 0.024035956 -0.024035956 23.449863 +Loop time of 590.232 on 4 procs for 100000 steps with 726 atoms + +Performance: 29.277 ns/day, 0.820 hours/ns, 169.425 timesteps/s, 123.003 katom-step/s +72.5% CPU use with 4 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 57.391 | 75.867 | 96.292 | 212.1 | 12.85 +Bond | 0.10177 | 0.11042 | 0.12415 | 2.7 | 0.02 +Kspace | 102.79 | 123.16 | 141.5 | 165.7 | 20.87 +Neigh | 12.808 | 12.895 | 12.982 | 2.3 | 2.18 +Comm | 18.885 | 19.973 | 21.064 | 24.0 | 3.38 +Output | 0.0022573 | 0.0022749 | 0.0023225 | 0.1 | 0.00 +Modify | 355.89 | 356.74 | 357.61 | 4.2 | 60.44 +Other | | 1.478 | | | 0.25 + +Nlocal: 181.5 ave 207 max 169 min +Histogram: 2 0 1 0 0 0 0 0 0 1 +Nghost: 1961.5 ave 1984 max 1926 min +Histogram: 1 0 0 0 0 0 1 0 1 1 +Neighs: 30051 ave 41646 max 20775 min +Histogram: 1 1 0 0 0 0 1 0 0 1 + +Total # of neighbors = 120204 +Ave neighs/atom = 165.57025 +Ave special neighs/atom = 1.7355372 +Neighbor list builds = 7663 +Dangerous builds = 0 +write_data "data.piston.final" +System init for write_data ... +PPPM/electrode initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:342) + G vector (1/distance) = 0.32814871 + grid = 12 15 36 + stencil order = 5 + estimated absolute RMS force accuracy = 0.029311028 + estimated relative force accuracy = 8.8269289e-05 + using double precision MKL FFT + 3d grid and FFT values/proc = 8512 2880 +Generated 6 of 6 mixed pair_coeff terms from arithmetic mixing rule + +Average conjugate gradient steps: 1.982 +Total wall time: 0:09:50 From 8951aceecb2f381da9c3d8c25853118b029a3807 Mon Sep 17 00:00:00 2001 From: srtee Date: Thu, 1 Dec 2022 16:35:57 +1000 Subject: [PATCH 43/46] add madelung logs --- .../madelung/log.1Dec2022.madelung-cg.g++.1 | 131 ++++++++++++++++ .../log.1Dec2022.madelung-ewald-ew2d.g++.1 | 130 ++++++++++++++++ .../log.1Dec2022.madelung-ewald-ew3dc.g++.1 | 130 ++++++++++++++++ .../log.1Dec2022.madelung-ewald-ffield.g++.1 | 129 ++++++++++++++++ .../log.1Dec2022.madelung-pppm-ew3dc.g++.1 | 143 ++++++++++++++++++ .../log.1Dec2022.madelung-pppm-ffield.g++.1 | 142 +++++++++++++++++ 6 files changed, 805 insertions(+) create mode 100644 examples/PACKAGES/electrode/madelung/log.1Dec2022.madelung-cg.g++.1 create mode 100644 examples/PACKAGES/electrode/madelung/log.1Dec2022.madelung-ewald-ew2d.g++.1 create mode 100644 examples/PACKAGES/electrode/madelung/log.1Dec2022.madelung-ewald-ew3dc.g++.1 create mode 100644 examples/PACKAGES/electrode/madelung/log.1Dec2022.madelung-ewald-ffield.g++.1 create mode 100644 examples/PACKAGES/electrode/madelung/log.1Dec2022.madelung-pppm-ew3dc.g++.1 create mode 100644 examples/PACKAGES/electrode/madelung/log.1Dec2022.madelung-pppm-ffield.g++.1 diff --git a/examples/PACKAGES/electrode/madelung/log.1Dec2022.madelung-cg.g++.1 b/examples/PACKAGES/electrode/madelung/log.1Dec2022.madelung-cg.g++.1 new file mode 100644 index 0000000000..a0cd4d959c --- /dev/null +++ b/examples/PACKAGES/electrode/madelung/log.1Dec2022.madelung-cg.g++.1 @@ -0,0 +1,131 @@ +LAMMPS (3 Nov 2022) +boundary p p f +kspace_style ewald/electrode 1.0e-8 +kspace_modify slab 8.0 # ew3dc + +include "settings.mod" # styles, computes, groups and fixes +# set boundary in main script because ffield is periodic +units real +# distribute electrode atoms among all processors: +if "$(extract_setting(world_size) % 2) == 0" then "processors * * 2" + +atom_style full +pair_style lj/cut/coul/long 12 + +read_data "data.au-elyt" +Reading data file ... + orthogonal box = (0 0 -10) to (1 1 10) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 4 atoms +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 0 0 + special bond factors coul: 0 0 0 + 0 = max # of 1-2 neighbors + 0 = max # of 1-3 neighbors + 0 = max # of 1-4 neighbors + 1 = max # of special neighbors + special bonds CPU = 0.001 seconds + read_data CPU = 0.003 seconds + +group bot type 1 +1 atoms in group bot +group top type 2 +1 atoms in group top + +# get electrode charges +variable q atom q +compute qbot bot reduce sum v_q +compute qtop top reduce sum v_q + +compute compute_pe all pe +variable vpe equal c_compute_pe +variable charge equal c_qtop +fix fxprint all print 1 "${vpe}, ${charge}" file "out.csv" + +thermo_style custom step pe c_qbot c_qtop +fix conp bot electrode/conp 0 2 couple top 1 symm on algo cg 1e-6 +2 atoms in group conp_group + +run 0 + +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +Your simulation uses code contributions which should be cited: + +- fix electrode command: + +@article{Ahrens2022 +author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.}, +doi = {10.1063/5.0099239}, +title = {{ELECTRODE: An electrochemistry package for LAMMPS}}, +journal = {The Journal of Chemical Physics}, +year = {2022} +volume = {157}, +pages = {084801}, +} +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +WARNING: No fixes with time integration, atoms won't move (src/verlet.cpp:60) +Ewald/electrode initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:342) +WARNING: For better accuracy use 'pair_modify table 0' (src/kspace.cpp:365) + G vector (1/distance) = 0.32261103 + estimated absolute RMS force accuracy = 3.8272011e-06 + estimated relative force accuracy = 1.1525502e-08 + KSpace vectors: actual max1d max3d = 52 50 515150 + kxmax kymax kzmax = 1 1 50 +Generated 3 of 3 mixed pair_coeff terms from geometric mixing rule +Neighbor list info ... + update: every = 1 steps, delay = 0 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 14 + ghost atom cutoff = 14 + binsize = 7, bins = 1 1 3 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair lj/cut/coul/long, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d + bin: standard + (2) fix electrode/conp, perpetual, copy from (1) + attributes: half, newton on + pair build: copy + stencil: none + bin: none +WARNING: Proc sub-domain size < neighbor skin, could lead to lost atoms (src/domain.cpp:966) +139.943964815502, 0.279214485147241 +Per MPI rank memory allocation (min/avg/max) = 144.1 | 144.1 | 144.1 Mbytes + Step PotEng c_qbot c_qtop + 0 139.94396 -0.27921449 0.27921449 +Loop time of 1.092e-06 on 1 procs for 0 steps with 4 atoms + +91.6% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0 | 0 | 0 | 0.0 | 0.00 +Bond | 0 | 0 | 0 | 0.0 | 0.00 +Kspace | 0 | 0 | 0 | 0.0 | 0.00 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0 | 0 | 0 | 0.0 | 0.00 +Output | 0 | 0 | 0 | 0.0 | 0.00 +Modify | 0 | 0 | 0 | 0.0 | 0.00 +Other | | 1.092e-06 | | |100.00 + +Nlocal: 4 ave 4 max 4 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 3596 ave 3596 max 3596 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 4790 ave 4790 max 4790 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 4790 +Ave neighs/atom = 1197.5 +Ave special neighs/atom = 0 +Neighbor list builds = 0 +Dangerous builds = 0 + +Average conjugate gradient steps: 1 +Total wall time: 0:00:00 diff --git a/examples/PACKAGES/electrode/madelung/log.1Dec2022.madelung-ewald-ew2d.g++.1 b/examples/PACKAGES/electrode/madelung/log.1Dec2022.madelung-ewald-ew2d.g++.1 new file mode 100644 index 0000000000..ff0a8550cd --- /dev/null +++ b/examples/PACKAGES/electrode/madelung/log.1Dec2022.madelung-ewald-ew2d.g++.1 @@ -0,0 +1,130 @@ +LAMMPS (3 Nov 2022) +boundary p p f +kspace_style ewald/electrode 1.0e-8 +kspace_modify slab ew2d + +include "settings.mod" # styles, computes, groups and fixes +# set boundary in main script because ffield is periodic +units real +# distribute electrode atoms among all processors: +if "$(extract_setting(world_size) % 2) == 0" then "processors * * 2" + +atom_style full +pair_style lj/cut/coul/long 12 + +read_data "data.au-elyt" +Reading data file ... + orthogonal box = (0 0 -10) to (1 1 10) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 4 atoms +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 0 0 + special bond factors coul: 0 0 0 + 0 = max # of 1-2 neighbors + 0 = max # of 1-3 neighbors + 0 = max # of 1-4 neighbors + 1 = max # of special neighbors + special bonds CPU = 0.001 seconds + read_data CPU = 0.002 seconds + +group bot type 1 +1 atoms in group bot +group top type 2 +1 atoms in group top + +# get electrode charges +variable q atom q +compute qbot bot reduce sum v_q +compute qtop top reduce sum v_q + +compute compute_pe all pe +variable vpe equal c_compute_pe +variable charge equal c_qtop +fix fxprint all print 1 "${vpe}, ${charge}" file "out.csv" + +thermo_style custom step pe c_qbot c_qtop +fix conp bot electrode/conp 0 2 couple top 1 symm on write_inv inv.csv write_vec vec.csv +2 atoms in group conp_group + +run 0 + +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +Your simulation uses code contributions which should be cited: + +- fix electrode command: + +@article{Ahrens2022 +author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.}, +doi = {10.1063/5.0099239}, +title = {{ELECTRODE: An electrochemistry package for LAMMPS}}, +journal = {The Journal of Chemical Physics}, +year = {2022} +volume = {157}, +pages = {084801}, +} +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +WARNING: No fixes with time integration, atoms won't move (src/verlet.cpp:60) +Ewald/electrode initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:342) +WARNING: For better accuracy use 'pair_modify table 0' (src/kspace.cpp:365) + G vector (1/distance) = 0.32261103 + estimated absolute RMS force accuracy = 9.9990544e-06 + estimated relative force accuracy = 3.0111855e-08 + KSpace vectors: actual max1d max3d = 2 8 2456 + kxmax kymax kzmax = 1 1 8 +Generated 3 of 3 mixed pair_coeff terms from geometric mixing rule +Neighbor list info ... + update: every = 1 steps, delay = 0 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 14 + ghost atom cutoff = 14 + binsize = 7, bins = 1 1 3 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair lj/cut/coul/long, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d + bin: standard + (2) fix electrode/conp, perpetual, copy from (1) + attributes: half, newton on + pair build: copy + stencil: none + bin: none +WARNING: Proc sub-domain size < neighbor skin, could lead to lost atoms (src/domain.cpp:966) +139.946125020193, 0.279214126709814 +Per MPI rank memory allocation (min/avg/max) = 20.42 | 20.42 | 20.42 Mbytes + Step PotEng c_qbot c_qtop + 0 139.94613 -0.27921413 0.27921413 +Loop time of 1.082e-06 on 1 procs for 0 steps with 4 atoms + +0.0% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0 | 0 | 0 | 0.0 | 0.00 +Bond | 0 | 0 | 0 | 0.0 | 0.00 +Kspace | 0 | 0 | 0 | 0.0 | 0.00 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0 | 0 | 0 | 0.0 | 0.00 +Output | 0 | 0 | 0 | 0.0 | 0.00 +Modify | 0 | 0 | 0 | 0.0 | 0.00 +Other | | 1.082e-06 | | |100.00 + +Nlocal: 4 ave 4 max 4 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 3596 ave 3596 max 3596 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 4790 ave 4790 max 4790 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 4790 +Ave neighs/atom = 1197.5 +Ave special neighs/atom = 0 +Neighbor list builds = 0 +Dangerous builds = 0 + +Total wall time: 0:00:00 diff --git a/examples/PACKAGES/electrode/madelung/log.1Dec2022.madelung-ewald-ew3dc.g++.1 b/examples/PACKAGES/electrode/madelung/log.1Dec2022.madelung-ewald-ew3dc.g++.1 new file mode 100644 index 0000000000..5374b09ff1 --- /dev/null +++ b/examples/PACKAGES/electrode/madelung/log.1Dec2022.madelung-ewald-ew3dc.g++.1 @@ -0,0 +1,130 @@ +LAMMPS (3 Nov 2022) +boundary p p f +kspace_style ewald/electrode 1.0e-8 +kspace_modify slab 8.0 # ew3dc + +include "settings.mod" # styles, computes, groups and fixes +# set boundary in main script because ffield is periodic +units real +# distribute electrode atoms among all processors: +if "$(extract_setting(world_size) % 2) == 0" then "processors * * 2" + +atom_style full +pair_style lj/cut/coul/long 12 + +read_data "data.au-elyt" +Reading data file ... + orthogonal box = (0 0 -10) to (1 1 10) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 4 atoms +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 0 0 + special bond factors coul: 0 0 0 + 0 = max # of 1-2 neighbors + 0 = max # of 1-3 neighbors + 0 = max # of 1-4 neighbors + 1 = max # of special neighbors + special bonds CPU = 0.001 seconds + read_data CPU = 0.003 seconds + +group bot type 1 +1 atoms in group bot +group top type 2 +1 atoms in group top + +# get electrode charges +variable q atom q +compute qbot bot reduce sum v_q +compute qtop top reduce sum v_q + +compute compute_pe all pe +variable vpe equal c_compute_pe +variable charge equal c_qtop +fix fxprint all print 1 "${vpe}, ${charge}" file "out.csv" + +thermo_style custom step pe c_qbot c_qtop +fix conp bot electrode/conp 0 2 couple top 1 symm on write_inv inv.csv write_vec vec.csv +2 atoms in group conp_group + +run 0 + +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +Your simulation uses code contributions which should be cited: + +- fix electrode command: + +@article{Ahrens2022 +author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.}, +doi = {10.1063/5.0099239}, +title = {{ELECTRODE: An electrochemistry package for LAMMPS}}, +journal = {The Journal of Chemical Physics}, +year = {2022} +volume = {157}, +pages = {084801}, +} +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +WARNING: No fixes with time integration, atoms won't move (src/verlet.cpp:60) +Ewald/electrode initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:342) +WARNING: For better accuracy use 'pair_modify table 0' (src/kspace.cpp:365) + G vector (1/distance) = 0.32261103 + estimated absolute RMS force accuracy = 3.8272011e-06 + estimated relative force accuracy = 1.1525502e-08 + KSpace vectors: actual max1d max3d = 52 50 515150 + kxmax kymax kzmax = 1 1 50 +Generated 3 of 3 mixed pair_coeff terms from geometric mixing rule +Neighbor list info ... + update: every = 1 steps, delay = 0 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 14 + ghost atom cutoff = 14 + binsize = 7, bins = 1 1 3 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair lj/cut/coul/long, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d + bin: standard + (2) fix electrode/conp, perpetual, copy from (1) + attributes: half, newton on + pair build: copy + stencil: none + bin: none +WARNING: Proc sub-domain size < neighbor skin, could lead to lost atoms (src/domain.cpp:966) +139.943964815502, 0.279214485147238 +Per MPI rank memory allocation (min/avg/max) = 144.1 | 144.1 | 144.1 Mbytes + Step PotEng c_qbot c_qtop + 0 139.94396 -0.27921449 0.27921449 +Loop time of 7.31e-07 on 1 procs for 0 steps with 4 atoms + +0.0% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0 | 0 | 0 | 0.0 | 0.00 +Bond | 0 | 0 | 0 | 0.0 | 0.00 +Kspace | 0 | 0 | 0 | 0.0 | 0.00 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0 | 0 | 0 | 0.0 | 0.00 +Output | 0 | 0 | 0 | 0.0 | 0.00 +Modify | 0 | 0 | 0 | 0.0 | 0.00 +Other | | 7.31e-07 | | |100.00 + +Nlocal: 4 ave 4 max 4 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 3596 ave 3596 max 3596 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 4790 ave 4790 max 4790 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 4790 +Ave neighs/atom = 1197.5 +Ave special neighs/atom = 0 +Neighbor list builds = 0 +Dangerous builds = 0 + +Total wall time: 0:00:00 diff --git a/examples/PACKAGES/electrode/madelung/log.1Dec2022.madelung-ewald-ffield.g++.1 b/examples/PACKAGES/electrode/madelung/log.1Dec2022.madelung-ewald-ffield.g++.1 new file mode 100644 index 0000000000..ea3799809d --- /dev/null +++ b/examples/PACKAGES/electrode/madelung/log.1Dec2022.madelung-ewald-ffield.g++.1 @@ -0,0 +1,129 @@ +LAMMPS (3 Nov 2022) +boundary p p p +kspace_style ewald/electrode 1.0e-8 + +include "settings.mod" # styles, computes, groups and fixes +# set boundary in main script because ffield is periodic +units real +# distribute electrode atoms among all processors: +if "$(extract_setting(world_size) % 2) == 0" then "processors * * 2" + +atom_style full +pair_style lj/cut/coul/long 12 + +read_data "data.au-elyt" +Reading data file ... + orthogonal box = (0 0 -10) to (1 1 10) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 4 atoms +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 0 0 + special bond factors coul: 0 0 0 + 0 = max # of 1-2 neighbors + 0 = max # of 1-3 neighbors + 0 = max # of 1-4 neighbors + 1 = max # of special neighbors + special bonds CPU = 0.001 seconds + read_data CPU = 0.002 seconds + +group bot type 1 +1 atoms in group bot +group top type 2 +1 atoms in group top + +# get electrode charges +variable q atom q +compute qbot bot reduce sum v_q +compute qtop top reduce sum v_q + +compute compute_pe all pe +variable vpe equal c_compute_pe +variable charge equal c_qtop +fix fxprint all print 1 "${vpe}, ${charge}" file "out.csv" + +thermo_style custom step pe c_qbot c_qtop +fix conp bot electrode/conp 0 2 couple top 1 symm on ffield yes write_inv inv.csv write_vec vec.csv +2 atoms in group conp_group + +run 0 + +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +Your simulation uses code contributions which should be cited: + +- fix electrode command: + +@article{Ahrens2022 +author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.}, +doi = {10.1063/5.0099239}, +title = {{ELECTRODE: An electrochemistry package for LAMMPS}}, +journal = {The Journal of Chemical Physics}, +year = {2022} +volume = {157}, +pages = {084801}, +} +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +WARNING: No fixes with time integration, atoms won't move (src/verlet.cpp:60) +Ewald/electrode initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:342) +WARNING: For better accuracy use 'pair_modify table 0' (src/kspace.cpp:365) + G vector (1/distance) = 0.32261103 + estimated absolute RMS force accuracy = 9.9990544e-06 + estimated relative force accuracy = 3.0111855e-08 + KSpace vectors: actual max1d max3d = 10 8 2456 + kxmax kymax kzmax = 1 1 8 +Generated 3 of 3 mixed pair_coeff terms from geometric mixing rule +Neighbor list info ... + update: every = 1 steps, delay = 0 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 14 + ghost atom cutoff = 14 + binsize = 7, bins = 1 1 3 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair lj/cut/coul/long, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d + bin: standard + (2) fix electrode/conp, perpetual, copy from (1) + attributes: half, newton on + pair build: copy + stencil: none + bin: none +WARNING: Proc sub-domain size < neighbor skin, could lead to lost atoms (src/domain.cpp:966) +138.299024320284, 0.287160231879378 +Per MPI rank memory allocation (min/avg/max) = 21.19 | 21.19 | 21.19 Mbytes + Step PotEng c_qbot c_qtop + 0 138.29902 -0.28716023 0.28716023 +Loop time of 1.804e-06 on 1 procs for 0 steps with 4 atoms + +55.4% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0 | 0 | 0 | 0.0 | 0.00 +Bond | 0 | 0 | 0 | 0.0 | 0.00 +Kspace | 0 | 0 | 0 | 0.0 | 0.00 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0 | 0 | 0 | 0.0 | 0.00 +Output | 0 | 0 | 0 | 0.0 | 0.00 +Modify | 0 | 0 | 0 | 0.0 | 0.00 +Other | | 1.804e-06 | | |100.00 + +Nlocal: 4 ave 4 max 4 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 10796 ave 10796 max 10796 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 4790 ave 4790 max 4790 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 4790 +Ave neighs/atom = 1197.5 +Ave special neighs/atom = 0 +Neighbor list builds = 0 +Dangerous builds = 0 + +Total wall time: 0:00:00 diff --git a/examples/PACKAGES/electrode/madelung/log.1Dec2022.madelung-pppm-ew3dc.g++.1 b/examples/PACKAGES/electrode/madelung/log.1Dec2022.madelung-pppm-ew3dc.g++.1 new file mode 100644 index 0000000000..a3961bd3cb --- /dev/null +++ b/examples/PACKAGES/electrode/madelung/log.1Dec2022.madelung-pppm-ew3dc.g++.1 @@ -0,0 +1,143 @@ +LAMMPS (3 Nov 2022) +boundary p p f +kspace_style pppm/electrode 1.0e-10 +kspace_modify slab 8.0 # ew3dc + +include "settings.mod" # styles, computes, groups and fixes +# set boundary in main script because ffield is periodic +units real +# distribute electrode atoms among all processors: +if "$(extract_setting(world_size) % 2) == 0" then "processors * * 2" + +atom_style full +pair_style lj/cut/coul/long 12 + +read_data "data.au-elyt" +Reading data file ... + orthogonal box = (0 0 -10) to (1 1 10) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 4 atoms +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 0 0 + special bond factors coul: 0 0 0 + 0 = max # of 1-2 neighbors + 0 = max # of 1-3 neighbors + 0 = max # of 1-4 neighbors + 1 = max # of special neighbors + special bonds CPU = 0.001 seconds + read_data CPU = 0.003 seconds + +group bot type 1 +1 atoms in group bot +group top type 2 +1 atoms in group top + +# get electrode charges +variable q atom q +compute qbot bot reduce sum v_q +compute qtop top reduce sum v_q + +compute compute_pe all pe +variable vpe equal c_compute_pe +variable charge equal c_qtop +fix fxprint all print 1 "${vpe}, ${charge}" file "out.csv" + +thermo_style custom step pe c_qbot c_qtop +fix conp bot electrode/conp 0 2 couple top 1 symm on write_inv inv.csv write_vec vec.csv +2 atoms in group conp_group + +run 0 + +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +Your simulation uses code contributions which should be cited: + +- kspace_style pppm/electrode command: + +@article{Ahrens2021, +author = {Ahrens-Iwers, Ludwig J.V. and Mei{\ss}ner, Robert H.}, +doi = {10.1063/5.0063381}, +title = {{Constant potential simulations on a mesh}}, +journal = {Journal of Chemical Physics}, +year = {2021} +volume = {155}, +pages = {104104}, +} +- fix electrode command: + +@article{Ahrens2022 +author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.}, +doi = {10.1063/5.0099239}, +title = {{ELECTRODE: An electrochemistry package for LAMMPS}}, +journal = {The Journal of Chemical Physics}, +year = {2022} +volume = {157}, +pages = {084801}, +} +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +WARNING: No fixes with time integration, atoms won't move (src/verlet.cpp:60) +PPPM/electrode initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:342) +WARNING: For better accuracy use 'pair_modify table 0' (src/kspace.cpp:365) + G vector (1/distance) = 0.37216302 + grid = 12 12 375 + stencil order = 5 + estimated absolute RMS force accuracy = 9.4312865e-06 + estimated relative force accuracy = 2.8402039e-08 + using double precision MKL FFT + 3d grid and FFT values/proc = 637099 54000 +Generated 3 of 3 mixed pair_coeff terms from geometric mixing rule +Neighbor list info ... + update: every = 1 steps, delay = 0 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 14 + ghost atom cutoff = 14 + binsize = 7, bins = 1 1 3 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair lj/cut/coul/long, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d + bin: standard + (2) fix electrode/conp, perpetual, copy from (1) + attributes: half, newton on + pair build: copy + stencil: none + bin: none +WARNING: Proc sub-domain size < neighbor skin, could lead to lost atoms (src/domain.cpp:966) +139.946107219358, 0.279214187928028 +Per MPI rank memory allocation (min/avg/max) = 40.22 | 40.22 | 40.22 Mbytes + Step PotEng c_qbot c_qtop + 0 139.94611 -0.27921419 0.27921419 +Loop time of 8.32e-07 on 1 procs for 0 steps with 4 atoms + +0.0% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0 | 0 | 0 | 0.0 | 0.00 +Bond | 0 | 0 | 0 | 0.0 | 0.00 +Kspace | 0 | 0 | 0 | 0.0 | 0.00 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0 | 0 | 0 | 0.0 | 0.00 +Output | 0 | 0 | 0 | 0.0 | 0.00 +Modify | 0 | 0 | 0 | 0.0 | 0.00 +Other | | 8.32e-07 | | |100.00 + +Nlocal: 4 ave 4 max 4 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 3596 ave 3596 max 3596 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 4790 ave 4790 max 4790 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 4790 +Ave neighs/atom = 1197.5 +Ave special neighs/atom = 0 +Neighbor list builds = 0 +Dangerous builds = 0 + +Total wall time: 0:00:00 diff --git a/examples/PACKAGES/electrode/madelung/log.1Dec2022.madelung-pppm-ffield.g++.1 b/examples/PACKAGES/electrode/madelung/log.1Dec2022.madelung-pppm-ffield.g++.1 new file mode 100644 index 0000000000..64664e7443 --- /dev/null +++ b/examples/PACKAGES/electrode/madelung/log.1Dec2022.madelung-pppm-ffield.g++.1 @@ -0,0 +1,142 @@ +LAMMPS (3 Nov 2022) +boundary p p p +kspace_style pppm/electrode 1.0e-10 + +include "settings.mod" # styles, computes, groups and fixes +# set boundary in main script because ffield is periodic +units real +# distribute electrode atoms among all processors: +if "$(extract_setting(world_size) % 2) == 0" then "processors * * 2" + +atom_style full +pair_style lj/cut/coul/long 12 + +read_data "data.au-elyt" +Reading data file ... + orthogonal box = (0 0 -10) to (1 1 10) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 4 atoms +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 0 0 + special bond factors coul: 0 0 0 + 0 = max # of 1-2 neighbors + 0 = max # of 1-3 neighbors + 0 = max # of 1-4 neighbors + 1 = max # of special neighbors + special bonds CPU = 0.001 seconds + read_data CPU = 0.002 seconds + +group bot type 1 +1 atoms in group bot +group top type 2 +1 atoms in group top + +# get electrode charges +variable q atom q +compute qbot bot reduce sum v_q +compute qtop top reduce sum v_q + +compute compute_pe all pe +variable vpe equal c_compute_pe +variable charge equal c_qtop +fix fxprint all print 1 "${vpe}, ${charge}" file "out.csv" + +thermo_style custom step pe c_qbot c_qtop +fix conp bot electrode/conp 0 2 couple top 1 symm on ffield yes write_inv inv.csv write_vec vec.csv +2 atoms in group conp_group + +run 0 + +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +Your simulation uses code contributions which should be cited: + +- kspace_style pppm/electrode command: + +@article{Ahrens2021, +author = {Ahrens-Iwers, Ludwig J.V. and Mei{\ss}ner, Robert H.}, +doi = {10.1063/5.0063381}, +title = {{Constant potential simulations on a mesh}}, +journal = {Journal of Chemical Physics}, +year = {2021} +volume = {155}, +pages = {104104}, +} +- fix electrode command: + +@article{Ahrens2022 +author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.}, +doi = {10.1063/5.0099239}, +title = {{ELECTRODE: An electrochemistry package for LAMMPS}}, +journal = {The Journal of Chemical Physics}, +year = {2022} +volume = {157}, +pages = {084801}, +} +CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE + +WARNING: No fixes with time integration, atoms won't move (src/verlet.cpp:60) +PPPM/electrode initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:342) +WARNING: For better accuracy use 'pair_modify table 0' (src/kspace.cpp:365) + G vector (1/distance) = 0.37297537 + grid = 12 12 90 + stencil order = 5 + estimated absolute RMS force accuracy = 9.4312758e-06 + estimated relative force accuracy = 2.8402007e-08 + using double precision MKL FFT + 3d grid and FFT values/proc = 174824 12960 +Generated 3 of 3 mixed pair_coeff terms from geometric mixing rule +Neighbor list info ... + update: every = 1 steps, delay = 0 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 14 + ghost atom cutoff = 14 + binsize = 7, bins = 1 1 3 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair lj/cut/coul/long, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d + bin: standard + (2) fix electrode/conp, perpetual, copy from (1) + attributes: half, newton on + pair build: copy + stencil: none + bin: none +WARNING: Proc sub-domain size < neighbor skin, could lead to lost atoms (src/domain.cpp:966) +138.298994634846, 0.287160247352281 +Per MPI rank memory allocation (min/avg/max) = 16.7 | 16.7 | 16.7 Mbytes + Step PotEng c_qbot c_qtop + 0 138.29899 -0.28716025 0.28716025 +Loop time of 1.022e-06 on 1 procs for 0 steps with 4 atoms + +0.0% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0 | 0 | 0 | 0.0 | 0.00 +Bond | 0 | 0 | 0 | 0.0 | 0.00 +Kspace | 0 | 0 | 0 | 0.0 | 0.00 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0 | 0 | 0 | 0.0 | 0.00 +Output | 0 | 0 | 0 | 0.0 | 0.00 +Modify | 0 | 0 | 0 | 0.0 | 0.00 +Other | | 1.022e-06 | | |100.00 + +Nlocal: 4 ave 4 max 4 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 10796 ave 10796 max 10796 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 4790 ave 4790 max 4790 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 4790 +Ave neighs/atom = 1197.5 +Ave special neighs/atom = 0 +Neighbor list builds = 0 +Dangerous builds = 0 + +Total wall time: 0:00:00 From 792635d1a98f0ac11ebe9db6c4c0fa6aa5a17565 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 2 Dec 2022 10:42:40 -0500 Subject: [PATCH 44/46] address spelling issues --- doc/src/fix_electrode_conp.rst | 17 +++++------------ doc/utils/sphinx-config/false_positives.txt | 10 ++++++++++ 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/doc/src/fix_electrode_conp.rst b/doc/src/fix_electrode_conp.rst index 7c3c8e72fc..3786294127 100644 --- a/doc/src/fix_electrode_conp.rst +++ b/doc/src/fix_electrode_conp.rst @@ -171,7 +171,7 @@ run, and so these fixes will accept equal-style variables defined *after* the fix definition, including variables dependent on the fix's own output. This is useful, for example, in the fix's internal finite-field commands (see below). For an advanced example of this see the in.conq2 input file in the directory -examples/PACKAGES/electrode/graph-il. +``examples/PACKAGES/electrode/graph-il``. This fix necessitates the use of a long range solver that calculates and provides the matrix of electrode-electrode interactions and a vector of @@ -223,22 +223,15 @@ and will issue an error otherwise. For all versions of the fix, the keyword-value *etypes on* enables type-based optimized neighbor lists. With this feature enabled, LAMMPS provides the fix -with an occasional neighborlist restricted to electrode-electrode interactions -for calculating the electrode matrix, and a perpetual neighborlist restricted to +with an occasional neighbor list restricted to electrode-electrode interactions +for calculating the electrode matrix, and a perpetual neighbor list restricted to electrode-electrolyte interactions for calculating the electrode potentials, using particle types to list only desired interactions, and typically resulting in 5--10\% less computational time. Without this feature the fix will simply -use the active pair style's neighborlist. This feature cannot be enabled if any +use the active pair style's neighbor list. This feature cannot be enabled if any electrode particle has the same type as any electrolyte particle (which would be unusual in a typical simulation) and the fix will issue an error in that case. -.. - (if we merge the overlap_etypes branch) - This feature will provide minimal benefit if any electrode particle has the same type as any - electrolyte particle, since it will be impossible for LAMMPS to list only electrode-electrolyte - neighbor pairs and discard other neighbor pairs from the provided perpetual neighborlist. - - Restart, fix_modify, output, run start/stop, minimize info """"""""""""""""""""""""""""""""""""""""""""""""""""""""""" @@ -310,7 +303,7 @@ its last row is replaced with *N* copies of its top-left entry The global array output is mainly useful for quickly determining the 'vacuum capacitance' of the system (capacitance with only electrodes, no electrolyte), and can also be used for advanced simulations setting the potential as some -function of the charge-at-0V (such as the `in.conq2` example mentioned above). +function of the charge-at-0V (such as the ``in.conq2`` example mentioned above). Please cite :ref:`(Ahrens-Iwers2022) ` in any publication that uses this implementation. Please cite also the publication on the combination diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index 9e8fb042a0..f8a7dad40d 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -738,6 +738,7 @@ diel Dietz differentiable diffusively +diffusivities diffusivity dihedral dihedrals @@ -819,6 +820,7 @@ du dU Ducastelle Dudarev +Dufils Duin Dullweber dumpfile @@ -906,6 +908,7 @@ elastance Electroneg electronegative electronegativity +electroneutrality Eleftheriou ElementN elementset @@ -1510,6 +1513,9 @@ inumeric inv invariants inversed +invertible +invertibility +ionicities ionizable ionocovalent iostreams @@ -2277,6 +2283,8 @@ nanometer nanometers nanoparticle nanoparticles +nanopores +nanostructures nanotube Nanotube nanotubes @@ -3155,6 +3163,7 @@ sdpd SDPD se seagreen +Searless Secor sectoring sed @@ -3470,6 +3479,7 @@ thermo thermochemical thermochemistry thermodynamically +thermopotentiostat Thermophysical thermostatted thermostatting From a96d4101eae54852706c9fc5006b051828184b87 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 4 Dec 2022 16:06:30 -0500 Subject: [PATCH 45/46] small doc updates, add version tags, rewrap paragraphs --- doc/src/Packages_details.rst | 2 +- doc/src/fix_electrode_conp.rst | 290 +++++++++++--------- doc/utils/sphinx-config/false_positives.txt | 2 +- 3 files changed, 157 insertions(+), 137 deletions(-) diff --git a/doc/src/Packages_details.rst b/doc/src/Packages_details.rst index 2a3f5fc391..fc3f0253a1 100644 --- a/doc/src/Packages_details.rst +++ b/doc/src/Packages_details.rst @@ -865,7 +865,7 @@ ELECTRODE package The ELECTRODE package allows the user to enforce a constant potential method for groups of atoms that interact with the remaining atoms as electrolyte. -**Authors:** The ELECTRODE library is written and maintained by Ludwig +**Authors:** The ELECTRODE package is written and maintained by Ludwig Ahrens-Iwers (TUHH, Hamburg, Germany), Shern Tee (UQ, Brisbane, Australia) and Robert Meissner (TUHH, Hamburg, Germany). diff --git a/doc/src/fix_electrode_conp.rst b/doc/src/fix_electrode_conp.rst index 3786294127..9da8dcbdf9 100644 --- a/doc/src/fix_electrode_conp.rst +++ b/doc/src/fix_electrode_conp.rst @@ -23,7 +23,7 @@ Accelerator Variant: *electrode/thermo/intel* Syntax """""" -.. parsed-literal:: +.. code-block:: LAMMPS fix ID group-ID style args keyword value ... @@ -82,15 +82,17 @@ Description """"""""""" The *electrode* fixes implement the constant potential method (CPM) -(:ref:`Siepmann `, :ref:`Reed `), and modern variants, to -accurately model electrified, conductive electrodes. This is primarily useful -for studying electrode-electrolyte interfaces, especially at high potential -differences or ionicities, with non-planar electrodes such as nanostructures or -nanopores, and to study dynamic phenomena such as charging or discharging time -scales or conductivity or ionic diffusivities. +(:ref:`Siepmann `, :ref:`Reed `), and modern variants, +to accurately model electrified, conductive electrodes. This is +primarily useful for studying electrode-electrolyte interfaces, +especially at high potential differences or ionicities, with non-planar +electrodes such as nanostructures or nanopores, and to study dynamic +phenomena such as charging or discharging time scales or conductivity or +ionic diffusivities. -Each *electrode* fix allows users to set additional electrostatic relationships -between the specified groups which model useful electrostatic configurations: +Each *electrode* fix allows users to set additional electrostatic +relationships between the specified groups which model useful +electrostatic configurations: * *electrode/conp* sets potentials or potential differences between electrodes @@ -100,89 +102,99 @@ between the specified groups which model useful electrostatic configurations: * (resulting in changing electrode potentials) -* *electrode/thermo* sets a thermopotentiostat :ref:`(Deissenbeck)` between two electrodes +* *electrode/thermo* sets a thermopotentiostat + :ref:`(Deissenbeck)` between two electrodes - * (resulting in changing charges and potentials with appropriate average potential difference and thermal variance) + * (resulting in changing charges and potentials with appropriate + average potential difference and thermal variance) -The first group-ID provided to each fix specifies the first electrode group, and -more group(s) are added using the *couple* keyword for each additional group. -While *electrode/thermo* only accepts two groups, *electrode/conp* and -*electrode/conq* accept any number of groups, up to LAMMPS's internal -restrictions (see Restrictions below). Electrode groups must not overlap, i.e. -the fix will issue an error if any particle is detected to belong to at least -two electrode groups. +The first group-ID provided to each fix specifies the first electrode +group, and more group(s) are added using the *couple* keyword for each +additional group. While *electrode/thermo* only accepts two groups, +*electrode/conp* and *electrode/conq* accept any number of groups, up to +LAMMPS's internal restrictions (see Restrictions below). Electrode +groups must not overlap, i.e. the fix will issue an error if any +particle is detected to belong to at least two electrode groups. -CPM involves updating charges on groups of electrode particles, per time step, -so that the system's total energy is minimized with respect to those charges. -From basic electrostatics, this is equivalent to making each group conductive, -or imposing an equal electrostatic potential on every particle in the same group -(hence the name CPM). The charges are usually modelled as a Gaussian -distribution to make the charge-charge interaction matrix invertible -(:ref:`Gingrich `). The keyword *eta* specifies the distribution's -width in units of inverse length. +CPM involves updating charges on groups of electrode particles, per time +step, so that the system's total energy is minimized with respect to +those charges. From basic electrostatics, this is equivalent to making +each group conductive, or imposing an equal electrostatic potential on +every particle in the same group (hence the name CPM). The charges are +usually modelled as a Gaussian distribution to make the charge-charge +interaction matrix invertible (:ref:`Gingrich `). The keyword +*eta* specifies the distribution's width in units of inverse length. -Three algorithms are available to minimize the energy, varying in how matrices -are pre-calculated before a run to provide computational speedup. These -algorithms can be selected using the keyword *algo*: +.. versionadded:: TBD -* *algo mat_inv* pre-calculates the capacitance matrix - and obtains the charge configuration in one matrix-vector calculation per time step +Three algorithms are available to minimize the energy, varying in how +matrices are pre-calculated before a run to provide computational +speedup. These algorithms can be selected using the keyword *algo*: -* *algo mat_cg* pre-calculates the elastance matrix (inverse of capacitance matrix) - and obtains the charge configuration using a conjugate gradient solver - in multiple matrix-vector calculations per time step +* *algo mat_inv* pre-calculates the capacitance matrix and obtains the + charge configuration in one matrix-vector calculation per time step -* *algo cg* does not perform any pre-calculation and obtains the charge configuration - using a conjugate gradient solver and multiple calculations of the electric potential per time step. +* *algo mat_cg* pre-calculates the elastance matrix (inverse of + capacitance matrix) and obtains the charge configuration using a + conjugate gradient solver in multiple matrix-vector calculations per + time step + +* *algo cg* does not perform any pre-calculation and obtains the charge + configuration using a conjugate gradient solver and multiple + calculations of the electric potential per time step. For both *cg* methods, the command must specify the conjugate gradient tolerance. *fix electrode/thermo* currently only supports the *mat_inv* algorithm. The keyword *symm* can be set *on* (or *off*) to turn on (or turn off) -the capacitance matrix constraint that sets total electrode charge to be zero. -This has slightly different effects for each *fix electrode* variant. -For *fix electrode/conp*, with *symm off*, the potentials specified are absolute potentials, -but the charge configurations satisfying them may add up to an overall non-zero, varying -charge for the electrodes (and thus the simulation box). With *symm on*, the -total charge over all electrode groups is constrained to zero, and -potential differences rather than absolute potentials are the physically relevant quantities. +the capacitance matrix constraint that sets total electrode charge to be +zero. This has slightly different effects for each *fix electrode* +variant. For *fix electrode/conp*, with *symm off*, the potentials +specified are absolute potentials, but the charge configurations +satisfying them may add up to an overall non-zero, varying charge for +the electrodes (and thus the simulation box). With *symm on*, the total +charge over all electrode groups is constrained to zero, and potential +differences rather than absolute potentials are the physically relevant +quantities. -For *fix electrode/conq*, with *symm off*, overall neutrality is explicitly obeyed or -violated by the user input (which is not checked!). With *symm on*, overall neutrality -is ensured by ignoring the user-input charge for the last listed electrode (instead, -its charge will always be minus the total sum of all other electrode charges). For -*fix electrode/thermo*, overall neutrality is always automatically imposed for any setting -of *symm*, but *symm on* allows finite-field mode (*ffield on*, described below) -for faster simulations. +For *fix electrode/conq*, with *symm off*, overall neutrality is +explicitly obeyed or violated by the user input (which is not +checked!). With *symm on*, overall neutrality is ensured by ignoring the +user-input charge for the last listed electrode (instead, its charge +will always be minus the total sum of all other electrode charges). For +*fix electrode/thermo*, overall neutrality is always automatically +imposed for any setting of *symm*, but *symm on* allows finite-field +mode (*ffield on*, described below) for faster simulations. -For all three fixes, any potential (or charge for *conq*) can be specified as an -equal-style variable prefixed with "v\_". For example, the following code will -ramp the potential difference between electrodes from 0.0V to 2.0V over the -course of the simulation: +For all three fixes, any potential (or charge for *conq*) can be +specified as an equal-style variable prefixed with "v\_". For example, +the following code will ramp the potential difference between electrodes +from 0.0V to 2.0V over the course of the simulation: .. code-block:: LAMMPS fix fxconp bot electrode/conp 0.0 1.805 couple top v_v symm on variable v equal ramp(0.0, 2.0) -Note that these fixes only parse their supplied variable name when starting a -run, and so these fixes will accept equal-style variables defined *after* the -fix definition, including variables dependent on the fix's own output. This is -useful, for example, in the fix's internal finite-field commands (see below). -For an advanced example of this see the in.conq2 input file in the directory +Note that these fixes only parse their supplied variable name when +starting a run, and so these fixes will accept equal-style variables +defined *after* the fix definition, including variables dependent on the +fix's own output. This is useful, for example, in the fix's internal +finite-field commands (see below). For an advanced example of this see +the in.conq2 input file in the directory ``examples/PACKAGES/electrode/graph-il``. This fix necessitates the use of a long range solver that calculates and provides the matrix of electrode-electrode interactions and a vector of -electrode-electrolyte interactions. The Kspace styles *ewald/electrode*, -*pppm/electrode* and *pppm/electrode/intel* are created specifically for this -task :ref:`(Ahrens-Iwers) `. +electrode-electrolyte interactions. The Kspace styles +*ewald/electrode*, *pppm/electrode* and *pppm/electrode/intel* are +created specifically for this task :ref:`(Ahrens-Iwers) `. For systems with non-periodic boundaries in one or two directions dipole -corrections are available with the :doc:`kspace_modify `. For -ewald/electrode a two-dimensional Ewald summation :ref:`(Hu) ` can be used -by setting "slab ew2d": +corrections are available with the :doc:`kspace_modify `. +For ewald/electrode a two-dimensional Ewald summation :ref:`(Hu) ` +can be used by setting "slab ew2d": .. code-block:: LAMMPS @@ -190,47 +202,52 @@ by setting "slab ew2d": kspace_modify wire kspace_modify slab ew2d -Two implementations for the calculation of the elastance matrix are available -with pppm and can be selected using the *amat onestep/twostep* keyword. -*onestep* is the default; *twostep* can be faster for large electrodes and a -moderate mesh size but requires more memory. +Two implementations for the calculation of the elastance matrix are +available with pppm and can be selected using the *amat onestep/twostep* +keyword. *onestep* is the default; *twostep* can be faster for large +electrodes and a moderate mesh size but requires more memory. .. code-block:: LAMMPS kspace_modify amat onestep/twostep For all versions of the fix, the keyword-value *ffield on* enables the -finite-field mode (:ref:`Dufils `, :ref:`Tee `), which uses an -electric field across a periodic cell instead of non-periodic boundary -conditions to impose a potential difference between the two electrodes bounding -the cell. The fix (with name *fix-ID*) detects which of the two electrodes is -"on top" (has the larger maximum *z*-coordinate among all particles). Assuming -the first electrode group is on top, it then issues the following commands -internally: +finite-field mode (:ref:`Dufils `, :ref:`Tee `), which uses +an electric field across a periodic cell instead of non-periodic +boundary conditions to impose a potential difference between the two +electrodes bounding the cell. The fix (with name *fix-ID*) detects which +of the two electrodes is "on top" (has the larger maximum *z*-coordinate +among all particles). Assuming the first electrode group is on top, it +then issues the following commands internally: .. code-block:: LAMMPS variable fix-ID_ffield_zfield equal (f_fix-ID[2]-f_fix-ID[1])/lz efield fix-ID_efield all efield 0.0 0.0 v_fix-ID_ffield_zfield -which implements the required electric field as the potential difference divided -by cell length. The internal commands use variable so that the electric field -will correctly vary with changing potentials in the correct way (for example -with equal-style potential difference or with *fix electrode/conq*). This -keyword requires two electrodes and will issue an error with any other number of -electrodes. This keyword requires electroneutrality to be imposed (*symm on*) -and will issue an error otherwise. +which implements the required electric field as the potential difference +divided by cell length. The internal commands use variable so that the +electric field will correctly vary with changing potentials in the +correct way (for example with equal-style potential difference or with +*fix electrode/conq*). This keyword requires two electrodes and will +issue an error with any other number of electrodes. This keyword +requires electroneutrality to be imposed (*symm on*) and will issue an +error otherwise. -For all versions of the fix, the keyword-value *etypes on* enables type-based -optimized neighbor lists. With this feature enabled, LAMMPS provides the fix -with an occasional neighbor list restricted to electrode-electrode interactions -for calculating the electrode matrix, and a perpetual neighbor list restricted to -electrode-electrolyte interactions for calculating the electrode potentials, -using particle types to list only desired interactions, and typically resulting -in 5--10\% less computational time. Without this feature the fix will simply -use the active pair style's neighbor list. This feature cannot be enabled if any -electrode particle has the same type as any electrolyte particle (which would be -unusual in a typical simulation) and the fix will issue an error in that case. +.. versionchanged:: TBD + +For all versions of the fix, the keyword-value *etypes on* enables +type-based optimized neighbor lists. With this feature enabled, LAMMPS +provides the fix with an occasional neighbor list restricted to +electrode-electrode interactions for calculating the electrode matrix, +and a perpetual neighbor list restricted to electrode-electrolyte +interactions for calculating the electrode potentials, using particle +types to list only desired interactions, and typically resulting in +5--10\% less computational time. Without this feature the fix will +simply use the active pair style's neighbor list. This feature cannot +be enabled if any electrode particle has the same type as any +electrolyte particle (which would be unusual in a typical simulation) +and the fix will issue an error in that case. Restart, fix_modify, output, run start/stop, minimize info """"""""""""""""""""""""""""""""""""""""""""""""""""""""""" @@ -257,31 +274,33 @@ file, for code developers to track optimization. ---------- -These fixes compute a global (extensive) scalar, a global (intensive) vector, -and a global array, which can be accessed by various :doc:`output commands -`. +These fixes compute a global (extensive) scalar, a global (intensive) +vector, and a global array, which can be accessed by various +:doc:`output commands `. -The global scalar outputs the energy added to the system by this fix, which is -the negative of the total charge on each electrode multiplied by that -electrode's potential. +The global scalar outputs the energy added to the system by this fix, +which is the negative of the total charge on each electrode multiplied +by that electrode's potential. -The global vector outputs the potential on each electrode (and thus has *N* -entries if the fix manages *N* electrode groups), in :doc:`units ` of -electric field multiplied by distance (thus volts for *real* and *metal* units). -The electrode groups' ordering follows the order in which they were input in the -fix command using *couple*. The global vector output is useful for *fix -electrode/conq* and *fix electrode/thermo*, where potential is dynamically -updated based on electrolyte configuration instead of being directly set. +The global vector outputs the potential on each electrode (and thus has +*N* entries if the fix manages *N* electrode groups), in :doc:`units +` of electric field multiplied by distance (thus volts for *real* +and *metal* units). The electrode groups' ordering follows the order in +which they were input in the fix command using *couple*. The global +vector output is useful for *fix electrode/conq* and *fix +electrode/thermo*, where potential is dynamically updated based on +electrolyte configuration instead of being directly set. -The global array has *N* rows and *2N+1* columns, where the fix manages *N* -electrode groups managed by the fix. For the *I*-th row of the array, the -elements are: +The global array has *N* rows and *2N+1* columns, where the fix manages +*N* electrode groups managed by the fix. For the *I*-th row of the +array, the elements are: -* array[I][1] = total charge that group *I* would have had *if it were at 0 V - applied potential* * array[I][2 to *N* + 1] = the *N* entries of the *I*-th - row of the electrode capacitance matrix (definition follows) * array[I][*N* + - 2 to *2N* + 1] = the *N* entries of the *I*-th row of the electrode elastance - matrix (the inverse of the electrode capacitance matrix) +* array[I][1] = total charge that group *I* would have had *if it were + at 0 V applied potential* * array[I][2 to *N* + 1] = the *N* entries + of the *I*-th row of the electrode capacitance matrix (definition + follows) * array[I][*N* + 2 to *2N* + 1] = the *N* entries of the + *I*-th row of the electrode elastance matrix (the inverse of the + electrode capacitance matrix) The :math:`N \times N` electrode capacitance matrix, denoted :math:`\mathbf{C}` in the following equation, summarizes how the total charge induced on each @@ -315,16 +334,15 @@ of the CPM with PPPM if you use *pppm/electrode* :ref:`(Ahrens-Iwers) Restrictions """""""""""" -For algorithms that use a matrix for the electrode-electrode interactions, -positions of electrode particles have to be immobilized at all times. +For algorithms that use a matrix for the electrode-electrode +interactions, positions of electrode particles have to be immobilized at +all times. With *ffield off* (i.e. the default), the box geometry is expected to be -*z*-non-periodic (i.e. *boundary p p f*), and this fix will issue an error if -the box is *z*-periodic. With *ffield on*, the box geometry is expected to be -*z*-periodic, and this fix will issue an error if the box is *z*-non-periodic. - -TODO: will fix check if *kspace_modify slab* is enabled or does it silently give -wrong results? +*z*-non-periodic (i.e. *boundary p p f*), and this fix will issue an +error if the box is *z*-periodic. With *ffield on*, the box geometry is +expected to be *z*-periodic, and this fix will issue an error if the box +is *z*-non-periodic. The parallelization for the fix works best if electrode atoms are evenly distributed across processors. For a system with two electrodes at the bottom @@ -335,24 +353,26 @@ line if "$(extract_setting(world_size) % 2) == 0" then "processors * * 2" -which avoids an error if the script is run on an odd number of processors (such -as on just one processor for testing). +which avoids an error if the script is run on an odd number of +processors (such as on just one processor for testing). -The fix creates an additional group named *[fix-ID]_group* which is the union of -all electrode groups supplied to LAMMPS. This additional group counts towards -LAMMPS's limitation on the total number of groups (currently 32), which may not -allow scripts that use that many groups to run with this fix. +The fix creates an additional group named *[fix-ID]_group* which is the +union of all electrode groups supplied to LAMMPS. This additional group +counts towards LAMMPS's limitation on the total number of groups +(currently 32), which may not allow scripts that use that many groups to +run with this fix. -The matrix-based algorithms (*algo mat_inv* and *algo mat_cg*) currently store -an interaction matrix (either elastance or capacitance) of *N* by *N* doubles -for each MPI process. This memory requirement may be prohibitive for large -electrode groups. The fix will issue a warning if it expects to use more than -0.5 GiB of memory. +The matrix-based algorithms (*algo mat_inv* and *algo mat_cg*) currently +store an interaction matrix (either elastance or capacitance) of *N* by +*N* doubles for each MPI process. This memory requirement may be +prohibitive for large electrode groups. The fix will issue a warning if +it expects to use more than 0.5 GiB of memory. Default """"""" -The default keyword-option settings are *algo mat_inv*, *symm off*, *etypes off* -and *ffield off*. + +The default keyword-option settings are *algo mat_inv*, *symm off*, +*etypes off* and *ffield off*. ---------- diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index f8a7dad40d..e3350709bb 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -3163,7 +3163,7 @@ sdpd SDPD se seagreen -Searless +Searles Secor sectoring sed From d49840e8d5b3379d75d334df9fded4baef8bdde5 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 4 Dec 2022 16:10:02 -0500 Subject: [PATCH 46/46] rename doc file for all electrode fixes to fix_electrode.rst --- doc/src/Commands_fix.rst | 6 +++--- doc/src/Packages_details.rst | 2 +- doc/src/Packages_list.rst | 2 +- doc/src/fix.rst | 6 +++--- doc/src/{fix_electrode_conp.rst => fix_electrode.rst} | 0 doc/src/kspace_style.rst | 2 +- 6 files changed, 9 insertions(+), 9 deletions(-) rename doc/src/{fix_electrode_conp.rst => fix_electrode.rst} (100%) diff --git a/doc/src/Commands_fix.rst b/doc/src/Commands_fix.rst index c5c2fb7cba..f9ff8355ba 100644 --- a/doc/src/Commands_fix.rst +++ b/doc/src/Commands_fix.rst @@ -69,9 +69,9 @@ OPT. * :doc:`edpd/source ` * :doc:`efield ` * :doc:`ehex ` - * :doc:`electrode/conp (i) ` - * :doc:`electrode/conq (i) ` - * :doc:`electrode/thermo (i) ` + * :doc:`electrode/conp (i) ` + * :doc:`electrode/conq (i) ` + * :doc:`electrode/thermo (i) ` * :doc:`electron/stopping ` * :doc:`electron/stopping/fit ` * :doc:`enforce2d (k) ` diff --git a/doc/src/Packages_details.rst b/doc/src/Packages_details.rst index fc3f0253a1..54dfc95bdb 100644 --- a/doc/src/Packages_details.rst +++ b/doc/src/Packages_details.rst @@ -878,7 +878,7 @@ This package has :ref:`specific installation instructions ` on the **Supporting info:** -* :doc:`fix electrode/conp ` +* :doc:`fix electrode/conp ` ---------- diff --git a/doc/src/Packages_list.rst b/doc/src/Packages_list.rst index cfe0460d05..905a4ea232 100644 --- a/doc/src/Packages_list.rst +++ b/doc/src/Packages_list.rst @@ -155,7 +155,7 @@ whether an extra library is needed to build and use the package: - no * - :ref:`ELECTRODE ` - electrode charges to match potential - - :doc:`fix electrode/conp ` + - :doc:`fix electrode/conp ` - PACKAGES/electrode - no * - :ref:`EXTRA-COMPUTE ` diff --git a/doc/src/fix.rst b/doc/src/fix.rst index 333e920bd9..5b4505459e 100644 --- a/doc/src/fix.rst +++ b/doc/src/fix.rst @@ -216,9 +216,9 @@ accelerated styles exist. * :doc:`edpd/source ` - add heat source to eDPD simulations * :doc:`efield ` - impose electric field on system * :doc:`ehex ` - enhanced heat exchange algorithm -* :doc:`electrode/conp ` - impose electric potential -* :doc:`electrode/conq ` - impose total electric charge -* :doc:`electrode/thermo ` - apply thermo-potentiostat +* :doc:`electrode/conp ` - impose electric potential +* :doc:`electrode/conq ` - impose total electric charge +* :doc:`electrode/thermo ` - apply thermo-potentiostat * :doc:`electron/stopping ` - electronic stopping power as a friction force * :doc:`electron/stopping/fit ` - electronic stopping power as a friction force * :doc:`enforce2d ` - zero out *z*-dimension velocity and force diff --git a/doc/src/fix_electrode_conp.rst b/doc/src/fix_electrode.rst similarity index 100% rename from doc/src/fix_electrode_conp.rst rename to doc/src/fix_electrode.rst diff --git a/doc/src/kspace_style.rst b/doc/src/kspace_style.rst index cbaa82d547..38a6fce375 100644 --- a/doc/src/kspace_style.rst +++ b/doc/src/kspace_style.rst @@ -283,7 +283,7 @@ parameters and how to choose them is described in ---------- The *electrode* styles add methods that are required for the constant potential -method implemented in :doc:`fix electrode/* `. The styles +method implemented in :doc:`fix electrode/* `. The styles *ewald/electrode*, *pppm/electrode* and *pppm/electrode/intel* are available. These styles do not support the `kspace_modify slab nozforce` command.