diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index b856b3a8dd..116812b649 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -37,6 +37,7 @@ src/MESONT/* @iafoss src/ML-HDNNP/* @singraber src/ML-IAP/* @athomps src/ML-PACE/* @yury-lysogorskiy +src/ML-POD/* @exapde @rohskopf src/MOFFF/* @hheenen src/MOLFILE/* @akohlmey src/NETCDF/* @pastewka @@ -63,6 +64,8 @@ src/MANYBODY/pair_atm.* @sergeylishchuk src/REPLICA/*_grem.* @dstelter92 src/EXTRA-COMPUTE/compute_stress_mop*.* @RomainVermorel src/MISC/*_tracker.* @jtclemm +src/MC/fix_gcmc.* @athomps +src/MC/fix_sgcmc.* @athomps # core LAMMPS classes src/lammps.* @sjplimp diff --git a/.github/workflows/compile-msvc.yml b/.github/workflows/compile-msvc.yml index ee4044b2cd..2fa2b4fcee 100644 --- a/.github/workflows/compile-msvc.yml +++ b/.github/workflows/compile-msvc.yml @@ -26,7 +26,7 @@ jobs: - name: Select Python version uses: actions/setup-python@v4 with: - python-version: '3.10' + python-version: '3.11' - name: Building LAMMPS via CMake shell: bash @@ -37,6 +37,8 @@ jobs: nuget install MSMPIDIST cmake -C cmake/presets/windows.cmake \ -D PKG_PYTHON=on \ + -D WITH_PNG=off \ + -D WITH_JPEG=off \ -S cmake -B build \ -D BUILD_SHARED_LIBS=on \ -D LAMMPS_EXCEPTIONS=on \ diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 24522b6480..ec142af426 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -266,6 +266,7 @@ set(STANDARD_PACKAGES ML-QUIP ML-RANN ML-SNAP + ML-POD MOFFF MOLECULE MOLFILE @@ -432,7 +433,7 @@ if(BUILD_OMP) target_link_libraries(lmp PRIVATE OpenMP::OpenMP_CXX) endif() -if(PKG_MSCG OR PKG_ATC OR PKG_AWPMD OR PKG_ML-QUIP OR PKG_LATTE OR PKG_ELECTRODE) +if(PKG_MSCG OR PKG_ATC OR PKG_AWPMD OR PKG_ML-QUIP OR PKG_ML-POD OR PKG_LATTE OR PKG_ELECTRODE) enable_language(C) if (NOT USE_INTERNAL_LINALG) find_package(LAPACK) @@ -638,7 +639,7 @@ foreach(PKG_LIB POEMS ATC AWPMD H5MD MESONT) endif() endforeach() -if(PKG_ELECTRODE) +if(PKG_ELECTRODE OR PKG_ML-POD) target_link_libraries(lammps PRIVATE ${LAPACK_LIBRARIES}) endif() @@ -667,7 +668,7 @@ endif() # packages which selectively include variants based on enabled styles # e.g. accelerator packages ###################################################################### -foreach(PKG_WITH_INCL CORESHELL DPD-SMOOTH MISC PHONON QEQ OPENMP KOKKOS OPT INTEL GPU) +foreach(PKG_WITH_INCL CORESHELL DPD-SMOOTH MC MISC PHONON QEQ OPENMP KOKKOS OPT INTEL GPU) if(PKG_${PKG_WITH_INCL}) include(Packages/${PKG_WITH_INCL}) endif() diff --git a/cmake/Modules/Packages/MC.cmake b/cmake/Modules/Packages/MC.cmake new file mode 100644 index 0000000000..f162254558 --- /dev/null +++ b/cmake/Modules/Packages/MC.cmake @@ -0,0 +1,9 @@ +# fix sgcmc may only be installed if also the EAM pair style from MANYBODY is installed +if(NOT PKG_MANYBODY) + get_property(LAMMPS_FIX_HEADERS GLOBAL PROPERTY FIX) + list(REMOVE_ITEM LAMMPS_FIX_HEADERS ${LAMMPS_SOURCE_DIR}/MC/fix_sgcmc.h) + set_property(GLOBAL PROPERTY FIX "${LAMMPS_FIX_HEADERS}") + get_target_property(LAMMPS_SOURCES lammps SOURCES) + list(REMOVE_ITEM LAMMPS_SOURCES ${LAMMPS_SOURCE_DIR}/MC/fix_sgcmc.cpp) + set_property(TARGET lammps PROPERTY SOURCES "${LAMMPS_SOURCES}") +endif() diff --git a/cmake/presets/all_off.cmake b/cmake/presets/all_off.cmake index 3a7c58eaa3..9127305528 100644 --- a/cmake/presets/all_off.cmake +++ b/cmake/presets/all_off.cmake @@ -56,6 +56,7 @@ set(ALL_PACKAGES ML-HDNNP ML-IAP ML-PACE + ML-POD ML-QUIP ML-RANN ML-SNAP diff --git a/cmake/presets/all_on.cmake b/cmake/presets/all_on.cmake index 8229baf652..0a001bdc56 100644 --- a/cmake/presets/all_on.cmake +++ b/cmake/presets/all_on.cmake @@ -58,6 +58,7 @@ set(ALL_PACKAGES ML-HDNNP ML-IAP ML-PACE + ML-POD ML-QUIP ML-RANN ML-SNAP diff --git a/cmake/presets/mingw-cross.cmake b/cmake/presets/mingw-cross.cmake index c5d9a7bb89..2d74657394 100644 --- a/cmake/presets/mingw-cross.cmake +++ b/cmake/presets/mingw-cross.cmake @@ -47,6 +47,7 @@ set(WIN_PACKAGES MISC ML-HDNNP ML-IAP + ML-POD ML-RANN ML-SNAP MOFFF diff --git a/cmake/presets/most.cmake b/cmake/presets/most.cmake index 4b26a51e23..5dd9a2b78b 100644 --- a/cmake/presets/most.cmake +++ b/cmake/presets/most.cmake @@ -41,6 +41,7 @@ set(ALL_PACKAGES MEAM MISC ML-IAP + ML-POD ML-SNAP MOFFF MOLECULE diff --git a/doc/src/Build_extras.rst b/doc/src/Build_extras.rst index 8a5eeaa485..910dccbb8a 100644 --- a/doc/src/Build_extras.rst +++ b/doc/src/Build_extras.rst @@ -36,6 +36,7 @@ This is the list of packages that may require additional steps. * :ref:`AWPMD ` * :ref:`COLVARS ` * :ref:`COMPRESS ` + * :ref:`ELECTRODE ` * :ref:`GPU ` * :ref:`H5MD ` * :ref:`INTEL ` @@ -48,6 +49,7 @@ This is the list of packages that may require additional steps. * :ref:`ML-HDNNP ` * :ref:`ML-IAP ` * :ref:`ML-PACE ` + * :ref:`ML-POD ` * :ref:`ML-QUIP ` * :ref:`MOLFILE ` * :ref:`MSCG ` @@ -1411,6 +1413,49 @@ at: `https://github.com/ICAMS/lammps-user-pace/ ` * :doc:`bond_write ` * :doc:`boundary ` - * :doc:`box ` * :doc:`change_box ` * :doc:`clear ` * :doc:`comm_modify ` @@ -90,8 +89,7 @@ table above. * :doc:`region ` * :doc:`replicate ` * :doc:`rerun ` - * :doc:`reset_atom_ids ` - * :doc:`reset_mol_ids ` + * :doc:`reset_atoms ` * :doc:`reset_timestep ` * :doc:`restart ` * :doc:`run ` @@ -127,6 +125,7 @@ additional letter in parenthesis: k = KOKKOS. * :doc:`group2ndx ` * :doc:`hyper ` * :doc:`kim ` + * :doc:`fitpod ` * :doc:`mdi ` * :doc:`ndx2group ` * :doc:`neb ` diff --git a/doc/src/Commands_category.rst b/doc/src/Commands_category.rst index 4a08d040b7..7ac747e8fc 100644 --- a/doc/src/Commands_category.rst +++ b/doc/src/Commands_category.rst @@ -25,7 +25,6 @@ Setup simulation box: :columns: 4 * :doc:`boundary ` - * :doc:`box ` * :doc:`change_box ` * :doc:`create_box ` * :doc:`dimension ` diff --git a/doc/src/Commands_fix.rst b/doc/src/Commands_fix.rst index c5c2fb7cba..ff6e402a2e 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) ` @@ -213,6 +213,7 @@ OPT. * :doc:`saed/vtk ` * :doc:`setforce (k) ` * :doc:`setforce/spin ` + * :doc:`sgcmc ` * :doc:`shake (k) ` * :doc:`shardlow (k) ` * :doc:`smd ` diff --git a/doc/src/Commands_pair.rst b/doc/src/Commands_pair.rst index 23930f3f04..3f5deef24a 100644 --- a/doc/src/Commands_pair.rst +++ b/doc/src/Commands_pair.rst @@ -237,6 +237,7 @@ OPT. * :doc:`oxrna2/coaxstk ` * :doc:`pace (k) ` * :doc:`pace/extrapolation ` + * :doc:`pod ` * :doc:`peri/eps ` * :doc:`peri/lps (o) ` * :doc:`peri/pmb (o) ` diff --git a/doc/src/Commands_removed.rst b/doc/src/Commands_removed.rst index 1000d11e29..6d7e7619bd 100644 --- a/doc/src/Commands_removed.rst +++ b/doc/src/Commands_removed.rst @@ -2,14 +2,17 @@ Removed commands and packages ============================= This page lists LAMMPS commands and packages that have been removed from -the distribution and provides suggestions for alternatives or replacements. -LAMMPS has special dummy styles implemented, that will stop LAMMPS and -print a suitable error message in most cases, when a style/command is used -that has been removed. +the distribution and provides suggestions for alternatives or +replacements. LAMMPS has special dummy styles implemented, that will +stop LAMMPS and print a suitable error message in most cases, when a +style/command is used that has been removed or will replace the command +with the direct alternative (if available) and print a warning. Fix ave/spatial and fix ave/spatial/sphere ------------------------------------------ +.. deprecated:: 11Dec2015 + The fixes ave/spatial and ave/spatial/sphere have been removed from LAMMPS since they were superseded by the more general and extensible "chunk infrastructure". Here the system is partitioned in one of many possible @@ -17,10 +20,23 @@ ways through the :doc:`compute chunk/atom ` command and then averaging is done using :doc:`fix ave/chunk `. Please refer to the :doc:`chunk HOWTO ` section for an overview. -Reset_ids command ------------------ +Box command +----------- -The reset_ids command has been renamed to :doc:`reset_atom_ids `. +.. deprecated:: TBD + +The *box* command has been removed and the LAMMPS code changed so it won't +be needed. If present, LAMMPS will ignore the command and print a warning. + +Reset_ids, reset_atom_ids, reset_mol_ids commands +------------------------------------------------- + +.. deprecated:: TBD + +The *reset_ids*, *reset_atom_ids*, and *reset_mol_ids* commands have +been folded into the :doc:`reset_atoms ` command. If +present, LAMMPS will replace the commands accordingly and print a +warning. MEAM package ------------ @@ -30,18 +46,21 @@ The code in the :ref:`MEAM package ` is a translation of the Fortran code of MEAM into C++, which removes several restrictions (e.g. there can be multiple instances in hybrid pair styles) and allows for some optimizations leading to better performance. The pair style -:doc:`meam ` has the exact same syntax. +:doc:`meam ` has the exact same syntax. For a transition +period the C++ version of MEAM was called USER-MEAMC so it could +coexist with the Fortran version. REAX package ------------ The REAX package has been removed since it was superseded by the -:ref:`REAXFF package `. The REAXFF -package has been tested to yield equivalent results to the REAX package, -offers better performance, supports OpenMP multi-threading via OPENMP, -and GPU and threading parallelization through KOKKOS. The new pair styles -are not syntax compatible with the removed reax pair style, so input -files will have to be adapted. +:ref:`REAXFF package `. The REAXFF package has been tested +to yield equivalent results to the REAX package, offers better +performance, supports OpenMP multi-threading via OPENMP, and GPU and +threading parallelization through KOKKOS. The new pair styles are not +syntax compatible with the removed reax pair style, so input files will +have to be adapted. The REAXFF package was originally called +USER-REAXC. USER-CUDA package ----------------- @@ -60,5 +79,6 @@ restart2data tool The functionality of the restart2data tool has been folded into the LAMMPS executable directly instead of having a separate tool. A combination of the commands :doc:`read_restart ` and -:doc:`write_data ` can be used to the same effect. For added -convenience this conversion can also be triggered by :doc:`command line flags ` +:doc:`write_data ` can be used to the same effect. For +added convenience this conversion can also be triggered by +:doc:`command line flags ` diff --git a/doc/src/Developer_code_design.rst b/doc/src/Developer_code_design.rst index 820ad47fba..786bd51c26 100644 --- a/doc/src/Developer_code_design.rst +++ b/doc/src/Developer_code_design.rst @@ -50,7 +50,7 @@ parallel each MPI process creates such an instance. This can be seen in the ``main.cpp`` file where the core steps of running a LAMMPS simulation are the following 3 lines of code: -.. code-block:: C++ +.. code-block:: c++ LAMMPS *lammps = new LAMMPS(argc, argv, lammps_comm); lammps->input->file(); @@ -78,7 +78,7 @@ LAMMPS makes extensive use of the object oriented programming (OOP) principles of *compositing* and *inheritance*. Classes like the ``LAMMPS`` class are a **composite** containing pointers to instances of other classes like ``Atom``, ``Comm``, ``Force``, ``Neighbor``, -``Modify``, and so on. Each of these classes implement certain +``Modify``, and so on. Each of these classes implements certain functionality by storing and manipulating data related to the simulation and providing member functions that trigger certain actions. Some of those classes like ``Force`` are themselves @@ -87,9 +87,9 @@ interactions. Similarly the ``Modify`` class contains a list of ``Fix`` and ``Compute`` classes. If the input commands that correspond to these classes include the word *style*, then LAMMPS stores only a single instance of that class. E.g. *atom_style*, -*comm_style*, *pair_style*, *bond_style*. It the input command does -not include the word *style*, there can be many instances of that -class defined. E.g. *region*, *fix*, *compute*, *dump*. +*comm_style*, *pair_style*, *bond_style*. If the input command does +**not** include the word *style*, then there may be many instances of +that class defined, for example *region*, *fix*, *compute*, *dump*. **Inheritance** enables creation of *derived* classes that can share common functionality in their base class while providing a consistent @@ -232,7 +232,7 @@ macro ``PairStyle()`` will associate the style name "lj/cut" with a factory function creating an instance of the ``PairLJCut`` class. -.. code-block:: C++ +.. code-block:: c++ // from force.h typedef Pair *(*PairCreator)(LAMMPS *); @@ -360,7 +360,7 @@ characters; "{:<8}" would do this as left aligned, "{:^8}" as centered, argument type must be compatible or else the {fmt} formatting code will throw an exception. Some format string examples are given below: -.. code-block:: C +.. code-block:: c++ auto mesg = fmt::format(" CPU time: {:4d}:{:02d}:{:02d}\n", cpuh, cpum, cpus); mesg = fmt::format("{:<8s}| {:<10.5g} | {:<10.5g} | {:<10.5g} |{:6.1f} |{:6.2f}\n", diff --git a/doc/src/Developer_notes.rst b/doc/src/Developer_notes.rst index 2b3375265f..a781737d6f 100644 --- a/doc/src/Developer_notes.rst +++ b/doc/src/Developer_notes.rst @@ -105,7 +105,7 @@ list, where each pair of atoms is listed only once (except when the pairs straddling sub-domains or periodic boundaries will be listed twice). Thus these are the default settings when a neighbor list request is created in: -.. code-block:: C++ +.. code-block:: c++ void Pair::init_style() { @@ -129,7 +129,7 @@ neighbor list request to the specific needs of a style an additional request flag is needed. The :doc:`tersoff ` pair style, for example, needs a "full" neighbor list: -.. code-block:: C++ +.. code-block:: c++ void PairTersoff::init_style() { @@ -141,7 +141,7 @@ When a pair style supports r-RESPA time integration with different cutoff region the request flag may depend on the corresponding r-RESPA settings. Here an example from pair style lj/cut: -.. code-block:: C++ +.. code-block:: c++ void PairLJCut::init_style() { @@ -160,7 +160,7 @@ Granular pair styles need neighbor lists based on particle sizes and not cutoff and also may require to have the list of previous neighbors available ("history"). For example with: -.. code-block:: C++ +.. code-block:: c++ if (use_history) neighbor->add_request(this, NeighConst::REQ_SIZE | NeighConst::REQ_HISTORY); else neighbor->add_request(this, NeighConst::REQ_SIZE); @@ -170,7 +170,7 @@ settings each request can set an id which is then used in the corresponding ``init_list()`` function to assign it to the suitable pointer variable. This is done for example by the :doc:`pair style meam `: -.. code-block:: C++ +.. code-block:: c++ void PairMEAM::init_style() { @@ -189,7 +189,7 @@ just once) and this can also be indicated by a flag. As an example here is the request from the ``FixPeriNeigh`` class which is created internally by :doc:`Peridynamics pair styles `: -.. code-block:: C++ +.. code-block:: c++ neighbor->add_request(this, NeighConst::REQ_FULL | NeighConst::REQ_OCCASIONAL); @@ -198,7 +198,7 @@ than what is usually inferred from the pair style settings (largest cutoff of all pair styles plus neighbor list skin). The following is used in the :doc:`compute rdf ` command implementation: -.. code-block:: C++ +.. code-block:: c++ if (cutflag) neighbor->add_request(this, NeighConst::REQ_OCCASIONAL)->set_cutoff(mycutneigh); @@ -212,7 +212,7 @@ for printing the neighbor list summary the name of the requesting command should be set. Below is the request from the :doc:`delete atoms ` command: -.. code-block:: C++ +.. code-block:: c++ neighbor->add_request(this, "delete_atoms", NeighConst::REQ_FULL); diff --git a/doc/src/Developer_plugins.rst b/doc/src/Developer_plugins.rst index 36fdd010b3..dd5431507e 100644 --- a/doc/src/Developer_plugins.rst +++ b/doc/src/Developer_plugins.rst @@ -95,7 +95,7 @@ a class ``PairMorse2`` in the files ``pair_morse2.h`` and ``pair_morse2.cpp`` with the factory function and initialization function would look like this: -.. code-block:: C++ +.. code-block:: c++ #include "lammpsplugin.h" #include "version.h" @@ -141,7 +141,7 @@ list of argument strings), then the pointer type is ``lammpsplugin_factory2`` and it must be assigned to the *creator.v2* member of the plugin struct. Below is an example for that: -.. code-block:: C++ +.. code-block:: c++ #include "lammpsplugin.h" #include "version.h" @@ -176,7 +176,7 @@ demonstrated in the following example, which also shows that the implementation of the plugin class may be within the same source file as the plugin interface code: -.. code-block:: C++ +.. code-block:: c++ #include "lammpsplugin.h" diff --git a/doc/src/Developer_unittest.rst b/doc/src/Developer_unittest.rst index 820e911a8f..69e29263a6 100644 --- a/doc/src/Developer_unittest.rst +++ b/doc/src/Developer_unittest.rst @@ -194,7 +194,7 @@ macro. These tests operate by capturing the screen output when executing the failing command and then comparing that with a provided regular expression string pattern. Example: -.. code-block:: C++ +.. code-block:: c++ TEST_F(SimpleCommandsTest, UnknownCommand) { @@ -226,9 +226,9 @@ The following test programs are currently available: * - ``test_kim_commands.cpp`` - KimCommands - Tests for several commands from the :ref:`KIM package ` - * - ``test_reset_ids.cpp`` - - ResetIDs - - Tests to validate the :doc:`reset_atom_ids ` and :doc:`reset_mol_ids ` commands + * - ``test_reset_atoms.cpp`` + - ResetAtoms + - Tests to validate the :doc:`reset_atoms ` sub-commands Tests for the C-style library interface @@ -249,7 +249,7 @@ MPI support. These include tests where LAMMPS is run in multi-partition mode or only on a subset of the MPI world communicator. The CMake script code for adding this kind of test looks like this: -.. code-block:: CMake +.. code-block:: cmake if (BUILD_MPI) add_executable(test_library_mpi test_library_mpi.cpp) diff --git a/doc/src/Developer_updating.rst b/doc/src/Developer_updating.rst index 90a138d2cf..c02d6763de 100644 --- a/doc/src/Developer_updating.rst +++ b/doc/src/Developer_updating.rst @@ -61,7 +61,7 @@ header file needs to be updated accordingly. Old: -.. code-block:: C++ +.. code-block:: c++ int PairEAM::pack_comm(int n, int *list, double *buf, int pbc_flag, int *pbc) { @@ -75,7 +75,7 @@ Old: New: -.. code-block:: C++ +.. code-block:: c++ int PairEAM::pack_forward_comm(int n, int *list, double *buf, int pbc_flag, int *pbc) { @@ -112,14 +112,14 @@ Example from a pair style: Old: -.. code-block:: C++ +.. code-block:: c++ if (eflag || vflag) ev_setup(eflag, vflag); else evflag = vflag_fdotr = eflag_global = eflag_atom = 0; New: -.. code-block:: C++ +.. code-block:: c++ ev_init(eflag, vflag); @@ -142,14 +142,14 @@ when they are called from only one or a subset of the MPI processes. Old: -.. code-block:: C++ +.. code-block:: c++ val = force->numeric(FLERR, arg[1]); num = force->inumeric(FLERR, arg[2]); New: -.. code-block:: C++ +.. code-block:: c++ val = utils::numeric(FLERR, true, arg[1], lmp); num = utils::inumeric(FLERR, false, arg[2], lmp); @@ -183,14 +183,14 @@ copy them around for simulations. Old: -.. code-block:: C++ +.. code-block:: c++ fp = force->open_potential(filename); fp = fopen(filename, "r"); New: -.. code-block:: C++ +.. code-block:: c++ fp = utils::open_potential(filename, lmp); @@ -207,7 +207,7 @@ Example: Old: -.. code-block:: C++ +.. code-block:: c++ if (fptr == NULL) { char str[128]; @@ -217,7 +217,7 @@ Old: New: -.. code-block:: C++ +.. code-block:: c++ if (fptr == nullptr) error->one(FLERR, "Cannot open AEAM potential file {}: {}", filename, utils::getsyserror()); @@ -237,7 +237,7 @@ an example from the ``FixWallReflect`` class: Old: -.. code-block:: C++ +.. code-block:: c++ FixWallReflect(class LAMMPS *, int, char **); virtual ~FixWallReflect(); @@ -247,7 +247,7 @@ Old: New: -.. code-block:: C++ +.. code-block:: c++ FixWallReflect(class LAMMPS *, int, char **); ~FixWallReflect() override; @@ -271,7 +271,7 @@ the type of the "this" pointer argument. Old: -.. code-block:: C++ +.. code-block:: c++ comm->forward_comm_pair(this); comm->forward_comm_fix(this); @@ -284,7 +284,7 @@ Old: New: -.. code-block:: C++ +.. code-block:: c++ comm->forward_comm(this); comm->reverse_comm(this); @@ -304,7 +304,7 @@ requests can be :doc:`found here `. Example from the Old: -.. code-block:: C++ +.. code-block:: c++ int irequest = neighbor->request(this,instance_me); neighbor->requests[irequest]->pair = 0; @@ -317,7 +317,7 @@ Old: New: -.. code-block:: C++ +.. code-block:: c++ auto req = neighbor->add_request(this, NeighConst::REQ_OCCASIONAL); if (cutflag) req->set_cutoff(mycutneigh); @@ -340,7 +340,7 @@ these are internal fixes, there is no user visible change. Old: -.. code-block:: C++ +.. code-block:: c++ #include "fix_store.h" @@ -351,7 +351,7 @@ Old: New: -.. code-block:: C++ +.. code-block:: c++ #include "fix_store_peratom.h" @@ -362,7 +362,7 @@ New: Old: -.. code-block:: C++ +.. code-block:: c++ #include "fix_store.h" @@ -373,7 +373,7 @@ Old: New: -.. code-block:: C++ +.. code-block:: c++ #include "fix_store_global.h" @@ -396,7 +396,7 @@ the dump directly. Example: Old: -.. code-block:: C++ +.. code-block:: c++ int idump = output->find_dump(arg[iarg+1]); if (idump < 0) @@ -412,7 +412,7 @@ Old: New: -.. code-block:: C++ +.. code-block:: c++ auto idump = output->get_dump_by_id(arg[iarg+1]); if (!idump) error->all(FLERR,"Dump ID {} in hyper command does not exist", arg[iarg+1]); diff --git a/doc/src/Developer_utils.rst b/doc/src/Developer_utils.rst index b92d817d87..2ff75e8ee5 100644 --- a/doc/src/Developer_utils.rst +++ b/doc/src/Developer_utils.rst @@ -133,6 +133,9 @@ and parsing files or arguments. .. doxygenfunction:: trim_comment :project: progguide +.. doxygenfunction:: strip_style_suffix + :project: progguide + .. doxygenfunction:: star_subst :project: progguide @@ -317,7 +320,7 @@ are all "whitespace" characters, i.e. the space character, the tabulator character, the carriage return character, the linefeed character, and the form feed character. -.. code-block:: C++ +.. code-block:: c++ :caption: Tokenizer class example listing entries of the PATH environment variable #include "tokenizer.h" @@ -349,7 +352,7 @@ tokenizer into a ``try`` / ``catch`` block to handle errors. The when a (type of) number is requested as next token that is not compatible with the string representing the next word. -.. code-block:: C++ +.. code-block:: c++ :caption: ValueTokenizer class example with exception handling #include "tokenizer.h" @@ -427,7 +430,7 @@ one or two array indices "[]" with numbers > 0. A typical code segment would look like this: -.. code-block:: C++ +.. code-block:: c++ :caption: Usage example for ArgInfo class int nvalues = 0; @@ -476,7 +479,7 @@ open the file, and will call the :cpp:class:`LAMMPS_NS::Error` class in case of failures to read or to convert numbers, so that LAMMPS will be aborted. -.. code-block:: C++ +.. code-block:: c++ :caption: Use of PotentialFileReader class in pair style coul/streitz PotentialFileReader reader(lmp, file, "coul/streitz"); @@ -555,7 +558,7 @@ chunk size needs to be known in advance, 2) with :cpp:func:`MyPage::vget() its size is registered later with :cpp:func:`MyPage::vgot() `. -.. code-block:: C++ +.. code-block:: c++ :caption: Example of using :cpp:class:`MyPage ` #include "my_page.h" diff --git a/doc/src/Developer_write.rst b/doc/src/Developer_write.rst index bdc6559060..c374ec2e77 100644 --- a/doc/src/Developer_write.rst +++ b/doc/src/Developer_write.rst @@ -26,7 +26,7 @@ constructor with the signature: ``FixPrintVel(class LAMMPS *, int, char **)``. Every fix must be registered in LAMMPS by writing the following lines of code in the header before include guards: -.. code-block:: c +.. code-block:: c++ #ifdef FIX_CLASS // clang-format off @@ -47,7 +47,7 @@ keyword when it parses the input script. Let's write a simple fix which will print the average velocity at the end of each timestep. First of all, implement a constructor: -.. code-block:: C++ +.. code-block:: c++ FixPrintVel::FixPrintVel(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg) @@ -72,7 +72,7 @@ in the Fix class called ``nevery`` which specifies how often the method The next method we need to implement is ``setmask()``: -.. code-block:: C++ +.. code-block:: c++ int FixPrintVel::setmask() { @@ -87,7 +87,7 @@ during execution. The constant ``END_OF_STEP`` corresponds to the are called during a timestep and the order in which they are called are shown in the previous section. -.. code-block:: C++ +.. code-block:: c++ void FixPrintVel::end_of_step() { @@ -143,7 +143,7 @@ The group membership information of an atom is contained in the *mask* property of and atom and the bit corresponding to a given group is stored in the groupbit variable which is defined in Fix base class: -.. code-block:: C++ +.. code-block:: c++ for (int i = 0; i < nlocal; ++i) { if (atom->mask[i] & groupbit) { @@ -174,7 +174,7 @@ to store positions of atoms from previous timestep, we need to add ``double** xold`` to the header file. Than add allocation code to the constructor: -.. code-block:: C++ +.. code-block:: c++ FixSavePos::FixSavePos(LAMMPS *lmp, int narg, char **arg), xold(nullptr) { @@ -190,7 +190,7 @@ to the constructor: Implement the aforementioned methods: -.. code-block:: C++ +.. code-block:: c++ double FixSavePos::memory_usage() { diff --git a/doc/src/Howto_pylammps.rst b/doc/src/Howto_pylammps.rst index 6c788e2365..a182d4a050 100644 --- a/doc/src/Howto_pylammps.rst +++ b/doc/src/Howto_pylammps.rst @@ -152,14 +152,14 @@ Creating a new instance of PyLammps To create a PyLammps object you need to first import the class from the lammps module. By using the default constructor, a new *lammps* instance is created. -.. code-block:: Python +.. code-block:: python from lammps import PyLammps L = PyLammps() You can also initialize PyLammps on top of this existing *lammps* object: -.. code-block:: Python +.. code-block:: python from lammps import lammps, PyLammps lmp = lammps() @@ -180,14 +180,14 @@ For instance, let's take the following LAMMPS command: In the original interface this command can be executed with the following Python code if *L* was a lammps instance: -.. code-block:: Python +.. code-block:: python L.command("region box block 0 10 0 5 -0.5 0.5") With the PyLammps interface, any command can be split up into arbitrary parts separated by white-space, passed as individual arguments to a region method. -.. code-block:: Python +.. code-block:: python L.region("box block", 0, 10, 0, 5, -0.5, 0.5) @@ -199,14 +199,14 @@ The benefit of this approach is avoiding redundant command calls and easier parameterization. In the original interface parameterization needed to be done manually by creating formatted strings. -.. code-block:: Python +.. code-block:: python L.command("region box block %f %f %f %f %f %f" % (xlo, xhi, ylo, yhi, zlo, zhi)) In contrast, methods of PyLammps accept parameters directly and will convert them automatically to a final command string. -.. code-block:: Python +.. code-block:: python L.region("box block", xlo, xhi, ylo, yhi, zlo, zhi) @@ -256,7 +256,7 @@ LAMMPS variables can be both defined and accessed via the PyLammps interface. To define a variable you can use the :doc:`variable ` command: -.. code-block:: Python +.. code-block:: python L.variable("a index 2") @@ -265,14 +265,14 @@ A dictionary of all variables is returned by L.variables you can access an individual variable by retrieving a variable object from the L.variables dictionary by name -.. code-block:: Python +.. code-block:: python a = L.variables['a'] The variable value can then be easily read and written by accessing the value property of this object. -.. code-block:: Python +.. code-block:: python print(a.value) a.value = 4 @@ -284,7 +284,7 @@ LAMMPS expressions can be immediately evaluated by using the eval method. The passed string parameter can be any expression containing global thermo values, variables, compute or fix data. -.. code-block:: Python +.. code-block:: python result = L.eval("ke") # kinetic energy result = L.eval("pe") # potential energy @@ -298,7 +298,7 @@ All atoms in the current simulation can be accessed by using the L.atoms list. Each element of this list is an object which exposes its properties (id, type, position, velocity, force, etc.). -.. code-block:: Python +.. code-block:: python # access first atom L.atoms[0].id @@ -311,7 +311,7 @@ position, velocity, force, etc.). Some properties can also be used to set: -.. code-block:: Python +.. code-block:: python # set position in 2D simulation L.atoms[0].position = (1.0, 0.0) @@ -328,7 +328,7 @@ after a run via the L.runs list. This list contains a growing list of run data. The first element is the output of the first run, the second element that of the second run. -.. code-block:: Python +.. code-block:: python L.run(1000) L.runs[0] # data of first 1000 time steps @@ -339,14 +339,14 @@ the second run. Each run contains a dictionary of all trajectories. Each trajectory is accessible through its thermo name: -.. code-block:: Python +.. code-block:: python L.runs[0].thermo.Step # list of time steps in first run L.runs[0].thermo.Ke # list of kinetic energy values in first run Together with matplotlib plotting data out of LAMMPS becomes simple: -.. code-block:: Python +.. code-block:: python import matplotlib.plot as plt steps = L.runs[0].thermo.Step @@ -406,7 +406,7 @@ Four atoms are placed in the simulation and the dihedral potential is applied on them using a datafile. Then one of the atoms is rotated along the central axis by setting its position from Python, which changes the dihedral angle. -.. code-block:: Python +.. code-block:: python phi = [d \* math.pi / 180 for d in range(360)] @@ -439,7 +439,7 @@ Initially, a 2D system is created in a state with minimal energy. It is then disordered by moving each atom by a random delta. -.. code-block:: Python +.. code-block:: python random.seed(27848) deltaperturb = 0.2 @@ -458,7 +458,7 @@ It is then disordered by moving each atom by a random delta. Finally, the Monte Carlo algorithm is implemented in Python. It continuously moves random atoms by a random delta and only accepts certain moves. -.. code-block:: Python +.. code-block:: python estart = L.eval("pe") elast = estart @@ -517,7 +517,7 @@ PyLammps can be run in parallel using mpi4py. This python package can be install The following is a short example which reads in an existing LAMMPS input file and executes it in parallel. You can find in.melt in the examples/melt folder. -.. code-block:: Python +.. code-block:: python from mpi4py import MPI from lammps import PyLammps diff --git a/doc/src/Howto_structured_data.rst b/doc/src/Howto_structured_data.rst index 18a5dfd775..3fe630a120 100644 --- a/doc/src/Howto_structured_data.rst +++ b/doc/src/Howto_structured_data.rst @@ -43,7 +43,7 @@ JSON "ke": $(ke) }""" file current_state.json screen no -.. code-block:: JSON +.. code-block:: json :caption: current_state.json { diff --git a/doc/src/Howto_triclinic.rst b/doc/src/Howto_triclinic.rst index 5e952709c9..dd0a949f68 100644 --- a/doc/src/Howto_triclinic.rst +++ b/doc/src/Howto_triclinic.rst @@ -144,11 +144,6 @@ does not change the atom positions due to non-periodicity. In this mode, if you tilt the system to extreme angles, the simulation will simply become inefficient, due to the highly skewed simulation box. -The limitation on not creating a simulation box with a tilt factor -skewing the box more than half the distance of the parallel box length -can be overridden via the :doc:`box ` command. Setting the *tilt* -keyword to *large* allows any tilt factors to be specified. - Box flips that may occur using the :doc:`fix deform ` or :doc:`fix npt ` commands can be turned off using the *flip no* option with either of the commands. diff --git a/doc/src/Library_config.rst b/doc/src/Library_config.rst index 04b12f35de..481edcee7c 100644 --- a/doc/src/Library_config.rst +++ b/doc/src/Library_config.rst @@ -39,7 +39,7 @@ crashes within LAMMPS may be recovered from by enabling :ref:`exceptions `, avoiding them proactively is a safer approach. -.. code-block:: C +.. code-block:: c :caption: Example for using configuration settings functions #include "library.h" diff --git a/doc/src/Library_create.rst b/doc/src/Library_create.rst index 8ccc2e80ce..546db9b3be 100644 --- a/doc/src/Library_create.rst +++ b/doc/src/Library_create.rst @@ -22,7 +22,7 @@ as the "handle" argument in subsequent function calls until that instance is destroyed by calling :cpp:func:`lammps_close`. Here is a simple example demonstrating its use: -.. code-block:: C +.. code-block:: c #include "library.h" #include diff --git a/doc/src/Library_execute.rst b/doc/src/Library_execute.rst index 201d9c01b0..44b601ba4c 100644 --- a/doc/src/Library_execute.rst +++ b/doc/src/Library_execute.rst @@ -30,7 +30,7 @@ be included in the file or strings, and expansion of variables with ``${name}`` or ``$(expression)`` syntax is performed. Below is a short example using some of these functions. -.. code-block:: C +.. code-block:: c /* define to make the otherwise hidden prototype for "lammps_open()" visible */ #define LAMMPS_LIB_MPI diff --git a/doc/src/Library_properties.rst b/doc/src/Library_properties.rst index dfd72adc95..b3a8f9ea5a 100644 --- a/doc/src/Library_properties.rst +++ b/doc/src/Library_properties.rst @@ -32,7 +32,7 @@ indexed accordingly. Per-atom data can change sizes and ordering at every neighbor list rebuild or atom sort event as atoms migrate between sub-domains and processors. -.. code-block:: C +.. code-block:: c #include "library.h" #include diff --git a/doc/src/Modify_bond.rst b/doc/src/Modify_bond.rst index 682237b8bd..58b08de81b 100644 --- a/doc/src/Modify_bond.rst +++ b/doc/src/Modify_bond.rst @@ -13,24 +13,65 @@ Here is a brief description of common methods you define in your new derived class. See bond.h, angle.h, dihedral.h, and improper.h for details and specific additional methods. -+-----------------------+---------------------------------------------------------------------------------------+ -| init | check if all coefficients are set, calls *init_style* (optional) | -+-----------------------+---------------------------------------------------------------------------------------+ -| init_style | check if style specific conditions are met (optional) | -+-----------------------+---------------------------------------------------------------------------------------+ -| compute | compute the molecular interactions (required) | -+-----------------------+---------------------------------------------------------------------------------------+ -| settings | apply global settings for all types (optional) | -+-----------------------+---------------------------------------------------------------------------------------+ -| coeff | set coefficients for one type (required) | -+-----------------------+---------------------------------------------------------------------------------------+ -| equilibrium_distance | length of bond, used by SHAKE (required, bond only) | -+-----------------------+---------------------------------------------------------------------------------------+ -| equilibrium_angle | opening of angle, used by SHAKE (required, angle only) | -+-----------------------+---------------------------------------------------------------------------------------+ -| write & read_restart | writes/reads coeffs to restart files (required) | -+-----------------------+---------------------------------------------------------------------------------------+ -| single | force (bond only) and energy of a single bond or angle (required, bond or angle only) | -+-----------------------+---------------------------------------------------------------------------------------+ -| memory_usage | tally memory allocated by the style (optional) | -+-----------------------+---------------------------------------------------------------------------------------+ ++-----------------------+---------------------------------------------------------------------+ +| Required | "pure" methods that *must* be overridden in a derived class | ++=======================+=====================================================================+ +| compute | compute the molecular interactions for all listed items | ++-----------------------+---------------------------------------------------------------------+ +| coeff | set coefficients for one type | ++-----------------------+---------------------------------------------------------------------+ +| equilibrium_distance | length of bond, used by SHAKE (bond styles only) | ++-----------------------+---------------------------------------------------------------------+ +| equilibrium_angle | opening of angle, used by SHAKE (angle styles only) | ++-----------------------+---------------------------------------------------------------------+ +| write & read_restart | writes/reads coeffs to restart files | ++-----------------------+---------------------------------------------------------------------+ +| single | force/r (bond styles only) and energy of a single bond or angle | ++-----------------------+---------------------------------------------------------------------+ + + ++--------------------------------+----------------------------------------------------------------------+ +| Optional | methods that have a default or dummy implementation | ++================================+======================================================================+ +| init | check if all coefficients are set, calls init_style() | ++--------------------------------+----------------------------------------------------------------------+ +| init_style | check if style specific conditions are met | ++--------------------------------+----------------------------------------------------------------------+ +| settings | apply global settings for all types | ++--------------------------------+----------------------------------------------------------------------+ +| write & read_restart_settings | writes/reads global style settings to restart files | ++--------------------------------+----------------------------------------------------------------------+ +| write_data | write corresponding Coeffs section(s) in data file | ++--------------------------------+----------------------------------------------------------------------+ +| memory_usage | tally memory allocated by the style | ++--------------------------------+----------------------------------------------------------------------+ +| extract | provide access to internal data (bond or angle styles only) | ++--------------------------------+----------------------------------------------------------------------+ +| reinit | reset all type-based parameters, called by fix adapt (bonds only) | ++--------------------------------+----------------------------------------------------------------------+ +| pack & unpack_forward_comm | copy data to and from buffer in forward communication (bonds only) | ++--------------------------------+----------------------------------------------------------------------+ +| pack & unpack_reverse_comm | copy data to and from buffer in reverse communication (bonds only) | ++--------------------------------+----------------------------------------------------------------------+ + +Here is a list of flags or settings that should be set in the +constructor of the derived class when they differ from the default +setting. + ++---------------------------------+------------------------------------------------------------------------------+---------+ +| Name of flag | Description | default | ++=================================+==============================================================================+=========+ +| writedata | 1 if write_data() is implemented | 1 | ++---------------------------------+------------------------------------------------------------------------------+---------+ +| single_extra | number of extra single values calculated (bond styles only) | 0 | ++---------------------------------+------------------------------------------------------------------------------+---------+ +| partial_flag | 1 if bond type can be set to 0 and deleted (bond styles only) | 0 | ++---------------------------------+------------------------------------------------------------------------------+---------+ +| reinitflag | 1 if style has reinit() and is compatible with fix adapt | 1 | ++---------------------------------+------------------------------------------------------------------------------+---------+ +| comm_forward | size of buffer (in doubles) for forward communication (bond styles only) | 0 | ++---------------------------------+------------------------------------------------------------------------------+---------+ +| comm_reverse | size of buffer (in doubles) for reverse communication (bond styles only) | 0 | ++---------------------------------+------------------------------------------------------------------------------+---------+ +| comm_reverse_off | size of buffer for reverse communication with newton off (bond styles only) | 0 | ++---------------------------------+------------------------------------------------------------------------------+---------+ diff --git a/doc/src/Modify_pair.rst b/doc/src/Modify_pair.rst index 6913204504..38f5ade567 100644 --- a/doc/src/Modify_pair.rst +++ b/doc/src/Modify_pair.rst @@ -1,35 +1,121 @@ Pair styles =========== -Classes that compute pairwise interactions are derived from the Pair -class. In LAMMPS, pairwise calculation include many-body potentials -such as EAM or Tersoff where particles interact without a static bond -topology. New styles can be created to add new pair potentials to -LAMMPS. +Classes that compute pairwise non-bonded interactions are derived from +the Pair class. In LAMMPS, pairwise calculation include many-body +potentials such as EAM, Tersoff, or ReaxFF where particles interact +without an explicit bond topology but include interactions beyond +pairwise non-bonded contributions. New styles can be created to add +support for additional pair potentials to LAMMPS. When the +modifications are small, sometimes it is more effective to derive from +an existing pair style class. This latter approach is also used by +:doc:`Accelerator packages ` where the accelerated style +names differ from their base classes by an appended suffix. -Pair_lj_cut.cpp is a simple example of a Pair class, though it -includes some optional methods to enable its use with rRESPA. +The file ``src/pair_lj_cut.cpp`` is an example of a Pair class with a +very simple potential function. It includes several optional methods to +enable its use with :doc:`run_style respa ` and :doc:`compute +group/group `. -Here is a brief description of the class methods in pair.h: +Here is a brief list of some the class methods in the Pair class that +*must* be or *may* be overridden in a derived class. +---------------------------------+---------------------------------------------------------------------+ +| Required | "pure" methods that *must* be overridden in a derived class | ++=================================+=====================================================================+ | compute | workhorse routine that computes pairwise interactions | +---------------------------------+---------------------------------------------------------------------+ -| settings | reads the input script line with arguments you define | +| settings | processes the arguments to the pair_style command | +---------------------------------+---------------------------------------------------------------------+ -| coeff | set coefficients for one i,j type pair | -+---------------------------------+---------------------------------------------------------------------+ -| init_one | perform initialization for one i,j type pair | -+---------------------------------+---------------------------------------------------------------------+ -| init_style | initialization specific to this pair style | -+---------------------------------+---------------------------------------------------------------------+ -| write & read_restart | write/read i,j pair coeffs to restart files | -+---------------------------------+---------------------------------------------------------------------+ -| write & read_restart_settings | write/read global settings to restart files | -+---------------------------------+---------------------------------------------------------------------+ -| single | force/r and energy of a single pairwise interaction between 2 atoms | -+---------------------------------+---------------------------------------------------------------------+ -| compute_inner/middle/outer | versions of compute used by rRESPA | +| coeff | set coefficients for one i,j type pair, called from pair_coeff | +---------------------------------+---------------------------------------------------------------------+ -The inner/middle/outer routines are optional. ++---------------------------------+----------------------------------------------------------------------+ +| Optional | methods that have a default or dummy implementation | ++=================================+======================================================================+ +| init_one | perform initialization for one i,j type pair | ++---------------------------------+----------------------------------------------------------------------+ +| init_style | style initialization: request neighbor list(s), error checks | ++---------------------------------+----------------------------------------------------------------------+ +| init_list | Neighbor class callback function to pass neighbor list to pair style | ++---------------------------------+----------------------------------------------------------------------+ +| single | force/r and energy of a single pairwise interaction between 2 atoms | ++---------------------------------+----------------------------------------------------------------------+ +| compute_inner/middle/outer | versions of compute used by rRESPA | ++---------------------------------+----------------------------------------------------------------------+ +| memory_usage | return estimated amount of memory used by the pair style | ++---------------------------------+----------------------------------------------------------------------+ +| modify_params | process arguments to pair_modify command | ++---------------------------------+----------------------------------------------------------------------+ +| extract | provide access to internal scalar or per-type data like cutoffs | ++---------------------------------+----------------------------------------------------------------------+ +| extract_peratom | provide access to internal per-atom data | ++---------------------------------+----------------------------------------------------------------------+ +| setup | initialization at the beginning of a run | ++---------------------------------+----------------------------------------------------------------------+ +| finish | called at the end of a run, e.g. to print | ++---------------------------------+----------------------------------------------------------------------+ +| write & read_restart | write/read i,j pair coeffs to restart files | ++---------------------------------+----------------------------------------------------------------------+ +| write & read_restart_settings | write/read global settings to restart files | ++---------------------------------+----------------------------------------------------------------------+ +| write_data | write Pair Coeffs section to data file | ++---------------------------------+----------------------------------------------------------------------+ +| write_data_all | write PairIJ Coeffs section to data file | ++---------------------------------+----------------------------------------------------------------------+ +| pack & unpack_forward_comm | copy data to and from buffer if style uses forward communication | ++---------------------------------+----------------------------------------------------------------------+ +| pack & unpack_reverse_comm | copy data to and from buffer if style uses reverse communication | ++---------------------------------+----------------------------------------------------------------------+ +| reinit | reset all type-based parameters, called by fix adapt for example | ++---------------------------------+----------------------------------------------------------------------+ +| reset_dt | called when the time step is changed by timestep or fix reset/dt | ++---------------------------------+----------------------------------------------------------------------+ + +Here is a list of flags or settings that should be set in the +constructor of the derived pair class when they differ from the default +setting. + ++---------------------------------+-------------------------------------------------------------+---------+ +| Name of flag | Description | default | ++=================================+=============================================================+=========+ +| single_enable | 1 if single() method is implemented, 0 if missing | 1 | ++---------------------------------+-------------------------------------------------------------+---------+ +| respa_enable | 1 if pair style has compute_inner/middle/outer() | 0 | ++---------------------------------+-------------------------------------------------------------+---------+ +| restartinfo | 1 if pair style writes its settings to a restart | 1 | ++---------------------------------+-------------------------------------------------------------+---------+ +| one_coeff | 1 if only a pair_coeff * * command is allowed | 0 | ++---------------------------------+-------------------------------------------------------------+---------+ +| manybody_flag | 1 if pair style is a manybody potential | 0 | ++---------------------------------+-------------------------------------------------------------+---------+ +| unit_convert_flag | value != 0 indicates support for unit conversion | 0 | ++---------------------------------+-------------------------------------------------------------+---------+ +| no_virial_fdotr_compute | 1 if pair style does not call virial_fdotr_compute() | 0 | ++---------------------------------+-------------------------------------------------------------+---------+ +| writedata | 1 if write_data() and write_data_all() are implemented | 0 | ++---------------------------------+-------------------------------------------------------------+---------+ +| comm_forward | size of buffer (in doubles) for forward communication | 0 | ++---------------------------------+-------------------------------------------------------------+---------+ +| comm_reverse | size of buffer (in doubles) for reverse communication | 0 | ++---------------------------------+-------------------------------------------------------------+---------+ +| ghostneigh | 1 if cutghost is set and style uses neighbors of ghosts | 0 | ++---------------------------------+-------------------------------------------------------------+---------+ +| finitecutflag | 1 if cutoff depends on diameter of atoms | 0 | ++---------------------------------+-------------------------------------------------------------+---------+ +| reinitflag | 1 if style has reinit() and is compatible with fix adapt | 0 | ++---------------------------------+-------------------------------------------------------------+---------+ +| ewaldflag | 1 if compatible with kspace_style ewald | 0 | ++---------------------------------+-------------------------------------------------------------+---------+ +| pppmflag | 1 if compatible with kspace_style pppm | 0 | ++---------------------------------+-------------------------------------------------------------+---------+ +| msmflag | 1 if compatible with kspace_style msm | 0 | ++---------------------------------+-------------------------------------------------------------+---------+ +| dispersionflag | 1 if compatible with ewald/disp or pppm/disp | 0 | ++---------------------------------+-------------------------------------------------------------+---------+ +| tip4pflag | 1 if compatible with kspace_style pppm/tip4p | 0 | ++---------------------------------+-------------------------------------------------------------+---------+ +| dipoleflag | 1 if compatible with dipole kspace_style | 0 | ++---------------------------------+-------------------------------------------------------------+---------+ +| spinflag | 1 if compatible with spin kspace_style | 0 | ++---------------------------------+-------------------------------------------------------------+---------+ diff --git a/doc/src/Packages_details.rst b/doc/src/Packages_details.rst index 2a3f5fc391..d90ee68b75 100644 --- a/doc/src/Packages_details.rst +++ b/doc/src/Packages_details.rst @@ -80,6 +80,7 @@ page gives those details. * :ref:`ML-HDNNP ` * :ref:`ML-IAP ` * :ref:`ML-PACE ` + * :ref:`ML-POD ` * :ref:`ML-QUIP ` * :ref:`ML-RANN ` * :ref:`ML-SNAP ` @@ -865,7 +866,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). @@ -878,7 +879,7 @@ This package has :ref:`specific installation instructions ` on the **Supporting info:** -* :doc:`fix electrode/conp ` +* :doc:`fix electrode/conp ` ---------- @@ -1485,8 +1486,9 @@ MC package Several fixes and a pair style that have Monte Carlo (MC) or MC-like attributes. These include fixes for creating, breaking, and swapping -bonds, for performing atomic swaps, and performing grand-canonical MC -(GCMC) or similar processes in conjunction with dynamics. +bonds, for performing atomic swaps, and performing grand canonical +MC (GCMC), semi-grand canonical MC (SGCMC), or similar processes in +conjunction with molecular dynamics (MD). **Supporting info:** @@ -1498,6 +1500,7 @@ bonds, for performing atomic swaps, and performing grand-canonical MC * :doc:`fix bond/swap ` * :doc:`fix charge/regulation ` * :doc:`fix gcmc ` +* :doc:`fix sgcmc ` * :doc:`fix tfmc ` * :doc:`fix widom ` * :doc:`pair_style dsmc ` @@ -1796,6 +1799,39 @@ This package has :ref:`specific installation instructions ` on the ---------- +.. _PKG-ML-POD: + +ML-POD package +------------------- + +**Contents:** + +A pair style and fitpod style for Proper Orthogonal Descriptors +(POD). POD is a methodology for deriving descriptors based on the proper +orthogonal decomposition. The ML-POD package provides an efficient +implementation for running simulations with POD potentials, along with +fitting the potentials natively in LAMMPS. + +**Authors:** + +Ngoc Cuong Nguyen (MIT), Andrew Rohskopf (Sandia) + +.. versionadded:: TBD + +**Install:** + +This package has :ref:`specific installation instructions ` on the +:doc:`Build extras ` page. + +**Supporting info:** + +* src/ML-POD: filenames -> commands +* :doc:`pair_style pod ` +* :doc:`command_style fitpod ` +* examples/PACKAGES/pod + +---------- + .. _PKG-ML-QUIP: ML-QUIP package diff --git a/doc/src/Packages_list.rst b/doc/src/Packages_list.rst index cfe0460d05..ac0ba7728e 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 ` @@ -298,6 +298,11 @@ whether an extra library is needed to build and use the package: - :doc:`pair pace ` - PACKAGES/pace - ext + * - :ref:`ML-POD ` + - Proper orthogonal decomposition potentials + - :doc:`pair pod ` + - pod + - ext * - :ref:`ML-QUIP ` - QUIP/libatoms interface - :doc:`pair_style quip ` diff --git a/doc/src/Python_atoms.rst b/doc/src/Python_atoms.rst index be0d4ff800..2cb5c695e8 100644 --- a/doc/src/Python_atoms.rst +++ b/doc/src/Python_atoms.rst @@ -58,7 +58,7 @@ against invalid accesses. Each element of this list is a :py:class:`Atom ` or :py:class:`Atom2D ` object. The attributes of these objects provide access to their data (id, type, position, velocity, force, etc.): - .. code-block:: Python + .. code-block:: python # access first atom L.atoms[0].id @@ -71,7 +71,7 @@ against invalid accesses. Some attributes can be changed: - .. code-block:: Python + .. code-block:: python # set position in 2D simulation L.atoms[0].position = (1.0, 0.0) diff --git a/doc/src/Python_config.rst b/doc/src/Python_config.rst index 38f0ef0baf..ccbc74a46c 100644 --- a/doc/src/Python_config.rst +++ b/doc/src/Python_config.rst @@ -4,7 +4,7 @@ Configuration information The following methods can be used to query the LAMMPS library about compile time settings and included packages and styles. -.. code-block:: Python +.. code-block:: python :caption: Example for using configuration settings functions from lammps import lammps diff --git a/doc/src/Python_create.rst b/doc/src/Python_create.rst index ec4241f36a..939aad2f32 100644 --- a/doc/src/Python_create.rst +++ b/doc/src/Python_create.rst @@ -74,7 +74,7 @@ Here are simple examples using all three Python interfaces: :py:class:`PyLammps ` objects can also be created on top of an existing :py:class:`lammps ` object: - .. code-block:: Python + .. code-block:: python from lammps import lammps, PyLammps ... @@ -113,7 +113,7 @@ Here are simple examples using all three Python interfaces: You can also initialize IPyLammps on top of an existing :py:class:`lammps` or :py:class:`PyLammps` object: - .. code-block:: Python + .. code-block:: python from lammps import lammps, IPyLammps ... @@ -142,7 +142,7 @@ the MPI and/or Kokkos environment if enabled and active. Note that you can create multiple LAMMPS objects in your Python script, and coordinate and run multiple simulations, e.g. -.. code-block:: Python +.. code-block:: python from lammps import lammps lmp1 = lammps() diff --git a/doc/src/Python_error.rst b/doc/src/Python_error.rst index 744a8dd3de..5dbd940723 100644 --- a/doc/src/Python_error.rst +++ b/doc/src/Python_error.rst @@ -7,7 +7,7 @@ current Python process with an error message. C++ exceptions allow capturing them on the C++ side and rethrowing them on the Python side. This way LAMMPS errors can be handled through the Python exception handling mechanism. -.. code-block:: Python +.. code-block:: python from lammps import lammps, MPIAbortException diff --git a/doc/src/Python_execute.rst b/doc/src/Python_execute.rst index 59faa34438..01cf0e920f 100644 --- a/doc/src/Python_execute.rst +++ b/doc/src/Python_execute.rst @@ -60,7 +60,7 @@ it is possible to "compute" what the next LAMMPS command should be. can be executed using with the lammps API with the following Python code if ``lmp`` is an instance of :py:class:`lammps `: - .. code-block:: Python + .. code-block:: python from lammps import lammps @@ -73,7 +73,7 @@ it is possible to "compute" what the next LAMMPS command should be. The arguments of the command can be passed as one string, or individually. - .. code-block:: Python + .. code-block:: python from lammps import PyLammps @@ -93,14 +93,14 @@ it is possible to "compute" what the next LAMMPS command should be. parameterization. In the lammps API parameterization needed to be done manually by creating formatted command strings. - .. code-block:: Python + .. code-block:: python lmp.command("region box block %f %f %f %f %f %f" % (xlo, xhi, ylo, yhi, zlo, zhi)) In contrast, methods of PyLammps accept parameters directly and will convert them automatically to a final command string. - .. code-block:: Python + .. code-block:: python L.region("box block", xlo, xhi, ylo, yhi, zlo, zhi) diff --git a/doc/src/Python_launch.rst b/doc/src/Python_launch.rst index 500a107977..96e43a2d95 100644 --- a/doc/src/Python_launch.rst +++ b/doc/src/Python_launch.rst @@ -56,7 +56,7 @@ and you should see the same output as if you had typed Note that without the mpi4py specific lines from ``test.py`` -.. code-block:: Python +.. code-block:: python from lammps import lammps lmp = lammps() diff --git a/doc/src/Python_objects.rst b/doc/src/Python_objects.rst index 4a1496632e..6e3a329a27 100644 --- a/doc/src/Python_objects.rst +++ b/doc/src/Python_objects.rst @@ -76,7 +76,7 @@ computes, fixes, or variables in LAMMPS using the :py:mod:`lammps` module. To define a variable you can use the :doc:`variable ` command: - .. code-block:: Python + .. code-block:: python L.variable("a index 2") @@ -85,14 +85,14 @@ computes, fixes, or variables in LAMMPS using the :py:mod:`lammps` module. you can access an individual variable by retrieving a variable object from the ``L.variables`` dictionary by name - .. code-block:: Python + .. code-block:: python a = L.variables['a'] The variable value can then be easily read and written by accessing the value property of this object. - .. code-block:: Python + .. code-block:: python print(a.value) a.value = 4 diff --git a/doc/src/Python_properties.rst b/doc/src/Python_properties.rst index 02af03bbb8..227a729622 100644 --- a/doc/src/Python_properties.rst +++ b/doc/src/Python_properties.rst @@ -105,7 +105,7 @@ against invalid accesses. variables, compute or fix data (see :doc:`Howto_output`): - .. code-block:: Python + .. code-block:: python result = L.eval("ke") # kinetic energy result = L.eval("pe") # potential energy diff --git a/doc/src/Python_scatter.rst b/doc/src/Python_scatter.rst index 113b98d354..002a36cc98 100644 --- a/doc/src/Python_scatter.rst +++ b/doc/src/Python_scatter.rst @@ -1,7 +1,7 @@ Scatter/gather operations ========================= -.. code-block:: Python +.. code-block:: python data = lmp.gather_atoms(name,type,count) # return per-atom property of all atoms gathered into data, ordered by atom ID # name = "x", "charge", "type", etc @@ -42,7 +42,7 @@ For the scatter methods, the array of coordinates passed to must be a ctypes vector of ints or doubles, allocated and initialized something like this: -.. code-block:: Python +.. code-block:: python from ctypes import c_double natoms = lmp.get_natoms() diff --git a/doc/src/Run_options.rst b/doc/src/Run_options.rst index f7bb652ea9..73fc37183e 100644 --- a/doc/src/Run_options.rst +++ b/doc/src/Run_options.rst @@ -262,6 +262,8 @@ Disable generating a citation reminder (see above) at all. **-nonbuf** +.. versionadded:: 15Sep2022 + Turn off buffering for screen and logfile output. For performance reasons, output to the screen and logfile is usually buffered, i.e. output is only written to a file if its buffer - typically 4096 bytes - diff --git a/doc/src/Tools.rst b/doc/src/Tools.rst index b70c7677e0..73ca11e689 100644 --- a/doc/src/Tools.rst +++ b/doc/src/Tools.rst @@ -57,7 +57,7 @@ Pre-processing tools * :ref:`msi2lmp ` * :ref:`polybond ` * :ref:`stl_bin2txt ` - + * :ref:`tabulate ` Post-processing tools ===================== @@ -1159,13 +1159,27 @@ For illustration purposes below is a part of the Tcl example script. ---------- +.. _tabulate: + +tabulate tool +-------------- + +.. versionadded:: TBD + +The ``tabulate`` folder contains Python scripts scripts to generate tabulated +potential files for LAMMPS. The bulk of the code is in the ``tabulate`` module +in the ``tabulate.py`` file. Some example files demonstrating its use are +included. See the README file for more information. + +---------- + .. _vim: vim tool ------------------ -The files in the tools/vim directory are add-ons to the VIM editor -that allow easier editing of LAMMPS input scripts. See the README.txt +The files in the ``tools/vim`` directory are add-ons to the VIM editor +that allow easier editing of LAMMPS input scripts. See the ``README.txt`` file for details. These files were provided by Gerolf Ziegenhain (gerolf at diff --git a/doc/src/angle_gaussian.rst b/doc/src/angle_gaussian.rst index f0a50938e4..6b102a693b 100644 --- a/doc/src/angle_gaussian.rst +++ b/doc/src/angle_gaussian.rst @@ -25,23 +25,25 @@ The *gaussian* angle style uses the potential: .. math:: - E = -k_B T ln\left(\sum_{i=1}^{n} \frac{A_i}{w_i \sqrt{\pi/2}} exp\left( \frac{-(\theta-\theta_{i})^2}{w_i^2})\right) \right) + E = -k_B T ln\left(\sum_{i=1}^{n} \frac{A_i}{w_i \sqrt{\pi/2}} exp\left( \frac{-2(\theta-\theta_{i})^2}{w_i^2}\right) \right) + +This analytical form is a suitable potential for obtaining mesoscale +effective force fields which can reproduce target atomistic +distributions :ref:`(Milano) `. -This analytical form is a suitable potential for obtaining -mesoscale effective force fields which can reproduce target atomistic distributions :ref:`(Milano) ` The following coefficients must be defined for each angle type via the :doc:`angle_coeff ` command as in the example above, or in the data file or restart files read by the :doc:`read_data ` or :doc:`read_restart ` commands: -* T temperature at which the potential was derived +* :math:`T` temperature at which the potential was derived * :math:`n` (integer >=1) -* :math:`A_1` (-) -* :math:`w_1` (-) +* :math:`A_1` (> 0, radians) +* :math:`w_1` (> 0, radians) * :math:`\theta_1` (degrees) * ... -* :math:`A_n` (-) -* :math:`w_n` (-) +* :math:`A_n` (> 0, radians) +* :math:`w_n` (> 0, radians) * :math:`\theta_n` (degrees) diff --git a/doc/src/angle_table.rst b/doc/src/angle_table.rst index b8aeae780b..c0faa3f046 100644 --- a/doc/src/angle_table.rst +++ b/doc/src/angle_table.rst @@ -59,6 +59,10 @@ format of this file is described below. ---------- +Suitable tables for use with this angle style can be created using the +Python code in the ``tools/tabulate`` folder of the LAMMPS source code +distribution. + The format of a tabulated file is as follows (without the parenthesized comments): diff --git a/doc/src/bond_bpm_rotational.rst b/doc/src/bond_bpm_rotational.rst index fb1db04b27..d9d0f160fb 100644 --- a/doc/src/bond_bpm_rotational.rst +++ b/doc/src/bond_bpm_rotational.rst @@ -69,7 +69,7 @@ which is proportional to the tangential shear displacement with a stiffness of :math:`k_s`. This tangential force also induces a torque. In addition, bending and twisting torques are also applied to particles which are proportional to angular bending and twisting -displacements with stiffnesses of :math`k_b` and :math:`k_t', +displacements with stiffnesses of :math:`k_b` and :math:`k_t`, respectively. Details on the calculations of shear displacements and angular displacements can be found in :ref:`(Wang) ` and :ref:`(Wang and Mora) `. diff --git a/doc/src/bond_gaussian.rst b/doc/src/bond_gaussian.rst index 9fbcf4778c..74e5b973eb 100644 --- a/doc/src/bond_gaussian.rst +++ b/doc/src/bond_gaussian.rst @@ -25,33 +25,34 @@ The *gaussian* bond style uses the potential: .. math:: - E = -k_B T ln\left(\sum_{i=1}^{n} \frac{A_i}{w_i \sqrt{\pi/2}} exp\left( \frac{-(r-r_{i})^2}{w_i^2})\right) \right) + E = -k_B T ln\left(\sum_{i=1}^{n} \frac{A_i}{w_i \sqrt{\pi/2}} exp\left( \frac{-2(r-r_{i})^2}{w_i^2}\right)\right) -This analytical form is a suitable potential for obtaining -mesoscale effective force fields which can reproduce target atomistic distributions :ref:`(Milano) ` +This analytical form is a suitable potential for obtaining mesoscale +effective force fields which can reproduce target atomistic +distributions :ref:`(Milano) ` The following coefficients must be defined for each bond type via the :doc:`bond_coeff ` command as in the example above, or in the data file or restart files read by the :doc:`read_data ` or :doc:`read_restart ` commands: -* T temperature at which the potential was derived +* :math:`T` temperature at which the potential was derived * :math:`n` (integer >=1) -* :math:`A_1` (-) -* :math:`w_1` (-) -* :math:`r_1` (length) +* :math:`A_1` (> 0, distance) +* :math:`w_1` (> 0, distance) +* :math:`r_1` (>= 0, distance) * ... -* :math:`A_n` (-) -* :math:`w_n` (-) -* :math:`r_n` (length) +* :math:`A_n` (> 0, distance) +* :math:`w_n` (> 0, distance) +* :math:`r_n` (>= 0, distance) Restrictions """""""""""" This bond style can only be used if LAMMPS was built with the -EXTRA-MOLECULE package. See the :doc:`Build package ` doc -page for more info. +EXTRA-MOLECULE package. See the :doc:`Build package ` +doc page for more info. Related commands """""""""""""""" diff --git a/doc/src/bond_table.rst b/doc/src/bond_table.rst index 898503b951..51e677d74a 100644 --- a/doc/src/bond_table.rst +++ b/doc/src/bond_table.rst @@ -59,6 +59,13 @@ this file is described below. ---------- +Suitable tables for use with this bond style can be created by LAMMPS +itself from existing bond styles using the :doc:`bond_write +` command. This can be useful to have a template file for +testing the bond style settings and to build a compatible custom file. +Another option to generate tables is the Python code in the +``tools/tabulate`` folder of the LAMMPS source code distribution. + The format of a tabulated file is as follows (without the parenthesized comments): @@ -149,7 +156,8 @@ info. Related commands """""""""""""""" -:doc:`bond_coeff `, :doc:`delete_bonds ` +:doc:`bond_coeff `, :doc:`delete_bonds `, +:doc:`bond_write ` Default """"""" diff --git a/doc/src/box.rst b/doc/src/box.rst deleted file mode 100644 index 096a171249..0000000000 --- a/doc/src/box.rst +++ /dev/null @@ -1,70 +0,0 @@ -.. index:: box - -box command -=========== - -Syntax -"""""" - -.. code-block:: LAMMPS - - box keyword value ... - -* one or more keyword/value pairs may be appended -* keyword = *tilt* - - .. parsed-literal:: - - *tilt* value = *small* or *large* - -Examples -"""""""" - -.. code-block:: LAMMPS - - box tilt large - box tilt small - -Description -""""""""""" - -Set attributes of the simulation box. - -For triclinic (non-orthogonal) simulation boxes, the *tilt* keyword -allows simulation domains to be created with arbitrary tilt factors, -e.g. via the :doc:`create_box ` or -:doc:`read_data ` commands. Tilt factors determine how -skewed the triclinic box is; see the :doc:`Howto triclinic ` page for a discussion of triclinic -boxes in LAMMPS. - -LAMMPS normally requires that no tilt factor can skew the box more -than half the distance of the parallel box length, which is the first -dimension in the tilt factor (x for xz). If *tilt* is set to -*small*, which is the default, then an error will be -generated if a box is created which exceeds this limit. If *tilt* -is set to *large*, then no limit is enforced. You can create -a box with any tilt factors you wish. - -Note that if a simulation box has a large tilt factor, LAMMPS will run -less efficiently, due to the large volume of communication needed to -acquire ghost atoms around a processor's irregular-shaped sub-domain. -For extreme values of tilt, LAMMPS may also lose atoms and generate an -error. - -Restrictions -"""""""""""" - -This command cannot be used after the simulation box is defined by a -:doc:`read_data ` or :doc:`create_box ` command or -:doc:`read_restart ` command. - -Related commands -"""""""""""""""" - -none - - -Default -""""""" - -The default value is tilt = small. diff --git a/doc/src/commands_list.rst b/doc/src/commands_list.rst index ee032bfd9e..ff2502189d 100644 --- a/doc/src/commands_list.rst +++ b/doc/src/commands_list.rst @@ -13,7 +13,6 @@ Commands bond_style bond_write boundary - box change_box clear comm_modify @@ -43,6 +42,7 @@ Commands echo fix fix_modify + fitpod_command group group2ndx hyper @@ -90,8 +90,7 @@ Commands region replicate rerun - reset_atom_ids - reset_mol_ids + reset_atoms reset_timestep restart run diff --git a/doc/src/compute_pair_local.rst b/doc/src/compute_pair_local.rst index bcfec11f80..dace280dee 100644 --- a/doc/src/compute_pair_local.rst +++ b/doc/src/compute_pair_local.rst @@ -59,7 +59,7 @@ commands. The value *dist* is the distance between the pair of atoms. The values *dx*, *dy*, and *dz* are the :math:`(x,y,z)` components of the *distance* between the pair of atoms. This value is always the -distance from the atom of lower to the one with the higher id. +distance from the atom of higher to the one with the lower atom ID. The value *eng* is the interaction energy for the pair of atoms. diff --git a/doc/src/create_box.rst b/doc/src/create_box.rst index 889a57605d..f930ecea83 100644 --- a/doc/src/create_box.rst +++ b/doc/src/create_box.rst @@ -66,20 +66,21 @@ positive or negative values and are called "tilt factors" because they are the amount of displacement applied to faces of an originally orthogonal box to transform it into the parallelepiped. -By default, a *prism* region used with the create_box command must -have tilt factors :math:`(xy,xz,yz)` that do not skew the box more than half +By default, a *prism* region used with the create_box command must have +tilt factors :math:`(xy,xz,yz)` that do not skew the box more than half the distance of the parallel box length. For example, if :math:`x_\text{lo} = 2` and :math:`x_\text{hi} = 12`, then the :math:`x` -box length is 10 and the :math:`xy` tilt factor must be between :math:`-5` and -:math:`5`. Similarly, both :math:`xz` and :math:`yz` must be between -:math:`-(x_\text{hi}-x_\text{lo})/2` and :math:`+(y_\text{hi}-y_\text{lo})/2`. -Note that this is not a limitation, since if the maximum tilt factor is 5 (as -in this example), then configurations with tilt :math:`= \dots, -15`, -:math:`-5`, :math:`5`, :math:`15`, :math:`25, \dots` -are all geometrically equivalent. If you wish to define a box with tilt -factors that exceed these limits, you can use the :doc:`box tilt ` -command, with a setting of *large*\ ; a setting of *small* is the -default. +box length is 10 and the :math:`xy` tilt factor must be between +:math:`-5` and :math:`5`. Similarly, both :math:`xz` and :math:`yz` +must be between :math:`-(x_\text{hi}-x_\text{lo})/2` and +:math:`+(y_\text{hi}-y_\text{lo})/2`. Note that this is not a +limitation, since if the maximum tilt factor is 5 (as in this example), +then configurations with tilt :math:`= \dots, -15`, :math:`-5`, +:math:`5`, :math:`15`, :math:`25, \dots` are all geometrically +equivalent. Simulations with large tilt factors will run inefficiently, +since they require more ghost atoms and thus more communication. With +very large tilt factors, LAMMPS will eventually produce incorrect +trajectories and stop with errors due to lost atoms or similar. See the :doc:`Howto triclinic ` page for a geometric description of triclinic boxes, as defined by LAMMPS, and diff --git a/doc/src/delete_atoms.rst b/doc/src/delete_atoms.rst index 2fdd152196..c863d0c7d2 100644 --- a/doc/src/delete_atoms.rst +++ b/doc/src/delete_atoms.rst @@ -135,7 +135,7 @@ number of atoms in the system. Note that this is not done for molecular systems (see the :doc:`atom_style ` command), regardless of the *compress* setting, since it would foul up the bond connectivity that has already been assigned. However, the -:doc:`reset_atom_ids ` command can be used after this +:doc:`reset_atoms id ` command can be used after this command to accomplish the same thing. Note that the re-assignment of IDs is not really a compression, where @@ -203,7 +203,7 @@ using molecule template files via the :doc:`molecule ` and Related commands """""""""""""""" -:doc:`create_atoms `, :doc:`reset_atom_ids ` +:doc:`create_atoms `, :doc:`reset_atoms id ` Default """"""" diff --git a/doc/src/dihedral_table.rst b/doc/src/dihedral_table.rst index e0830b523c..5e8d589c55 100644 --- a/doc/src/dihedral_table.rst +++ b/doc/src/dihedral_table.rst @@ -114,6 +114,10 @@ below. ---------- +Suitable tables for use with this dihedral style can be created using +the Python code in the ``tools/tabulate`` folder of the LAMMPS source +code distribution. + The format of a tabulated file is as follows (without the parenthesized comments). It can begin with one or more comment or blank lines. diff --git a/doc/src/dump_image.rst b/doc/src/dump_image.rst index bc2373afac..c9e838b7cf 100644 --- a/doc/src/dump_image.rst +++ b/doc/src/dump_image.rst @@ -69,7 +69,7 @@ Syntax yes/no = do or do not draw simulation box lines diam = diameter of box lines as fraction of shortest box length *axes* values = axes length diam = draw xyz axes - axes = *yes* or *no = do or do not draw xyz axes lines next to simulation box + axes = *yes* or *no* = do or do not draw xyz axes lines next to simulation box length = length of axes lines as fraction of respective box lengths diam = diameter of axes lines as fraction of shortest box length *subbox* values = lines diam = draw outline of processor sub-domains diff --git a/doc/src/fitpod_command.rst b/doc/src/fitpod_command.rst new file mode 100644 index 0000000000..9670bf5dd2 --- /dev/null +++ b/doc/src/fitpod_command.rst @@ -0,0 +1,745 @@ +.. index:: fitpod + +fitpod command +====================== + +Syntax +"""""" + +.. parsed-literal:: + + fitpod Ta_param.pod Ta_data.pod + +* fitpod = style name of this command +* Ta_param.pod = an input file that describes proper orthogonal descriptors (PODs) +* Ta_data.pod = an input file that specifies DFT data used to fit a POD potential + +Examples +"""""""" + +.. code-block:: LAMMPS + + fitpod Ta_param.pod Ta_data.pod + +Description +""""""""""" +.. versionadded:: TBD + +Fit a machine-learning interatomic potential (ML-IAP) based on proper +orthogonal descriptors (POD). Two input files are required for this +command. The first input file describes a POD potential parameter +settings, while the second input file specifies the DFT data used for +the fitting procedure. + +The table below has one-line descriptions of all the keywords that can +be used in the first input file (i.e. ``Ta_param.pod`` in the example +above): + +.. list-table:: + :header-rows: 1 + :widths: auto + + * - Keyword + - Default + - Type + - Description + * - species + - (none) + - STRING + - Chemical symbols for all elements in the system and have to match XYZ training files. + * - pbc + - 1 1 1 + - INT + - three integer constants specify boundary conditions + * - rin + - 1.0 + - REAL + - a real number specifies the inner cut-off radius + * - rcut + - 5.0 + - REAL + - a real number specifies the outer cut-off radius + * - bessel_polynomial_degree + - 3 + - INT + - the maximum degree of Bessel polynomials + * - inverse_polynomial_degree + - 6 + - INT + - the maximum degree of inverse radial basis functions + * - onebody + - 1 + - BOOL + - turns on/off one-body potential + * - twobody_number_radial_basis_functions + - 6 + - INT + - number of radial basis functions for two-body potential + * - threebody_number_radial_basis_functions + - 5 + - INT + - number of radial basis functions for three-body potential + * - threebody_number_angular_basis_functions + - 5 + - INT + - number of angular basis functions for three-body potential + * - fourbody_snap_twojmax + - 0 + - INT + - band limit for SNAP bispectrum components (0,2,4,6,8... allowed) + * - fourbody_snap_chemflag + - 0 + - BOOL + - turns on/off the explicit multi-element variant of the SNAP bispectrum components + * - quadratic_pod_potential + - 0 + - BOOL + - turns on/off quadratic POD potential + +All keywords except *species* have default values. If a keyword is not +set in the input file, its default value is used. The next table +describes all keywords that can be used in the second input file +(i.e. ``Ta_data.pod`` in the example above): + +.. list-table:: + :header-rows: 1 + :widths: auto + + * - Keyword + - Default + - Type + - Description + * - file_format + - extxyz + - STRING + - only the extended xyz format (extxyz) is currently supported + * - file_extension + - xyz + - STRING + - extension of the data files + * - path_to_training_data_set + - (none) + - STRING + - specifies the path to training data files in double quotes + * - path_to_test_data_set + - "" + - STRING + - specifies the path to test data files in double quotes + * - fraction_training_data_set + - 1.0 + - REAL + - a real number (<= 1.0) specifies the fraction of the training set used to fit POD + * - randomize_training_data_set + - 0 + - BOOL + - turns on/off randomization of the training set + * - fitting_weight_energy + - 100.0 + - REAL + - a real constant specifies the weight for energy in the least-squares fit + * - fitting_weight_force + - 1.0 + - REAL + - a real constant specifies the weight for force in the least-squares fit + * - fitting_regularization_parameter + - 1.0e-10 + - REAL + - a real constant specifies the regularization parameter in the least-squares fit + * - error_analysis_for_training_data_set + - 0 + - BOOL + - turns on/off error analysis for the training data set + * - error_analysis_for_test_data_set + - 0 + - BOOL + - turns on/off error analysis for the test data set + * - basename_for_output_files + - pod + - STRING + - a basename string added to the output files + * - precision_for_pod_coefficients + - 8 + - INT + - number of digits after the decimal points for numbers in the coefficient file + +All keywords except *path_to_training_data_set* have default values. If +a keyword is not set in the input file, its default value is used. After +successful training, a number of output files are produced, if enabled: + +* ``_training_errors.pod`` reports the errors in energy and forces for the training data set +* ``_training_analysis.pod`` reports detailed errors for all training configurations +* ``_test_errors.pod`` reports errors for the test data set +* ``_test_analysis.pod`` reports detailed errors for all test configurations +* ``_coefficients.pod`` contains the coefficients of the POD potential + +After training the POD potential, ``Ta_param.pod`` and ``_coefficients.pod`` +are the two files needed to use the POD potential in LAMMPS. See +:doc:`pair_style pod ` for using the POD potential. Examples +about training and using POD potentials are found in the directory +lammps/examples/PACKAGES/pod. + +Parameterized Potential Energy Surface +"""""""""""""""""""""""""""""""""""""" + +We consider a multi-element system of *N* atoms with :math:`N_{\rm e}` +unique elements. We denote by :math:`\boldsymbol r_n` and :math:`Z_n` +position vector and type of an atom *n* in the system, +respectively. Note that we have :math:`Z_n \in \{1, \ldots, N_{\rm e} +\}`, :math:`\boldsymbol R = (\boldsymbol r_1, \boldsymbol r_2, \ldots, +\boldsymbol r_N) \in \mathbb{R}^{3N}`, and :math:`\boldsymbol Z = (Z_1, +Z_2, \ldots, Z_N) \in \mathbb{N}^{N}`. The potential energy surface +(PES) of the system can be expressed as a many-body expansion of the +form + +.. math:: + + E(\boldsymbol R, \boldsymbol Z, \boldsymbol{\eta}, \boldsymbol{\mu}) \ = \ & \sum_{i} V^{(1)}(\boldsymbol r_i, Z_i, \boldsymbol \mu^{(1)} ) + \frac12 \sum_{i,j} V^{(2)}(\boldsymbol r_i, \boldsymbol r_j, Z_i, Z_j, \boldsymbol \eta, \boldsymbol \mu^{(2)}) \\ + & + \frac16 \sum_{i,j,k} V^{(3)}(\boldsymbol r_i, \boldsymbol r_j, \boldsymbol r_k, Z_i, Z_j, Z_k, \boldsymbol \eta, \boldsymbol \mu^{(3)}) + \ldots + +where :math:`V^{(1)}` is the one-body potential often used for +representing external field or energy of isolated elements, and the +higher-body potentials :math:`V^{(2)}, V^{(3)}, \ldots` are symmetric, +uniquely defined, and zero if two or more indices take identical values. +The superscript on each potential denotes its body order. Each *q*-body +potential :math:`V^{(q)}` depends on :math:`\boldsymbol \mu^{(q)}` which +are sets of parameters to fit the PES. Note that :math:`\boldsymbol \mu` +is a collection of all potential parameters :math:`\boldsymbol +\mu^{(1)}`, :math:`\boldsymbol \mu^{(2)}`, :math:`\boldsymbol +\mu^{(3)}`, etc, and that :math:`\boldsymbol \eta` is a set of +hyper-parameters such as inner cut-off radius :math:`r_{\rm in}` and +outer cut-off radius :math:`r_{\rm cut}`. + +Interatomic potentials rely on parameters to learn relationship between +atomic environments and interactions. Since interatomic potentials are +approximations by nature, their parameters need to be set to some +reference values or fitted against data by necessity. Typically, +potential fitting finds optimal parameters, :math:`\boldsymbol \mu^*`, +to minimize a certain loss function of the predicted quantities and +data. Since the fitted potential depends on the data set used to fit it, +different data sets will yield different optimal parameters and thus +different fitted potentials. When fitting the same functional form on +*Q* different data sets, we would obtain *Q* different optimized +potentials, :math:`E(\boldsymbol R,\boldsymbol Z, \boldsymbol \eta, +\boldsymbol \mu_q^*), 1 \le q \le Q`. Consequently, there exist many +different sets of optimized parameters for empirical interatomic +potentials. + +Instead of optimizing the potential parameters, inspired by the reduced +basis method :ref:`(Grepl) ` for parameterized partial +differential equations, we view the parameterized PES as a parametric +manifold of potential energies + +.. math:: + + \mathcal{M} = \{E(\boldsymbol R, \boldsymbol Z, \boldsymbol \eta, \boldsymbol \mu) \ | \ \boldsymbol \mu \in \Omega^{\boldsymbol \mu} \} + +where :math:`\Omega^{\boldsymbol \mu}` is a parameter domain in which +:math:`\boldsymbol \mu` resides. The parametric manifold +:math:`\mathcal{M}` contains potential energy surfaces for all values of +:math:`\boldsymbol \mu \in \Omega^{\boldsymbol \mu}`. Therefore, the +parametric manifold yields a much richer and more transferable atomic +representation than any particular individual PES :math:`E(\boldsymbol +R, \boldsymbol Z, \boldsymbol \eta, \boldsymbol \mu^*)`. + +We propose specific forms of the parameterized potentials for one-body, +two-body, and three-body interactions. We apply the Karhunen-Loeve +expansion to snapshots of the parameterized potentials to obtain sets of +orthogonal basis functions. These basis functions are aggregated +according to the chemical elements of atoms, thus leading to +multi-element proper orthogonal descriptors. + +Proper Orthogonal Descriptors +""""""""""""""""""""""""""""" + +Proper orthogonal descriptors are finger prints characterizing the +radial and angular distribution of a system of atoms. The detailed +mathematical definition is given in the paper by Nguyen and Rohskopf +:ref:`(Nguyen) `. + +The descriptors for the one-body interaction are used to capture energy +of isolated elements and defined as follows + +.. math:: + + D_{ip}^{(1)} = \left\{ + \begin{array}{ll} + 1, & \mbox{if } Z_i = p \\ + 0, & \mbox{if } Z_i \neq p + \end{array} + \right. + +for :math:`1 \le i \le N, 1 \le p \le N_{\rm e}`. The number of one-body +descriptors per atom is equal to the number of elements. The one-body +descriptors are independent of atom positions, but dependent on atom +types. The one-body descriptors are active only when the keyword +*onebody* is set to 1. + +We adopt the usual assumption that the direct interaction between two +atoms vanishes smoothly when their distance is greater than the outer +cutoff distance :math:`r_{\rm cut}`. Furthermore, we assume that two +atoms can not get closer than the inner cutoff distance :math:`r_{\rm +in}` due to the Pauli repulsion principle. Let :math:`r \in (r_{\rm in}, +r_{\rm cut})`, we introduce the following parameterized radial functions + +.. math:: + + \phi(r, r_{\rm in}, r_{\rm cut}, \alpha, \beta) = \frac{\sin (\alpha \pi x) }{r - r_{\rm in}}, \qquad \varphi(r, \gamma) = \frac{1}{r^\gamma} , + +where the scaled distance function :math:`x` is defined below to enrich the two-body manifold + +.. math:: + + x(r, r_{\rm in}, r_{\rm cut}, \beta) = \frac{e^{-\beta(r - r_{\rm in})/(r_{\rm cut} - r_{\rm in})} - 1}{e^{-\beta} - 1} . + +We introduce the following function as a convex combination of the two functions + +.. math:: + + \psi(r, r_{\rm in}, r_{\rm cut}, \alpha, \beta, \gamma, \kappa) = \kappa \phi(r, r_{\rm in}, r_{\rm cut}, \alpha, \beta) + (1- \kappa) \varphi(r, \gamma) . + +We see that :math:`\psi` is a function of distance :math:`r`, cut-off +distances :math:`r_{\rm in}` and :math:`r_{\rm cut}`, and parameters +:math:`\alpha, \beta, \gamma, \kappa`. Together these parameters allow +the function :math:`\psi` to characterize a diverse spectrum of two-body +interactions within the cut-off interval :math:`(r_{\rm in}, r_{\rm +cut})`. + +Next, we introduce the following parameterized potential + +.. math:: + + W^{(2)}(r_{ij}, \boldsymbol \eta, \boldsymbol \mu^{(2)}) = f_{\rm c}(r_{ij}, \boldsymbol \eta) \psi(r_{ij}, \boldsymbol \eta, \boldsymbol \mu^{(2)}) + +where :math:`\eta_1 = r_{\rm in}, \eta_2 = r_{\rm cut}, \mu_1^{(2)} = +\alpha, \mu_2^{(2)} = \beta, \mu_3^{(2)} = \gamma`, and +:math:`\mu_4^{(2)} = \kappa`. Here the cut-off function :math:`f_{\rm +c}(r_{ij}, \boldsymbol \eta)` proposed in [refs] is used to ensure the +smooth vanishing of the potential and its derivative for :math:`r_{ij} +\ge r_{\rm cut}`: + +.. math:: + + f_{\rm c}(r_{ij}, r_{\rm in}, r_{\rm cut}) = \exp \left(1 -\frac{1}{\sqrt{\left(1 - \frac{(r-r_{\rm in})^3}{(r_{\rm cut} - r_{\rm in})^3} \right)^2 + 10^{-6}}} \right) + +Based on the parameterized potential, we form a set of snapshots as +follows. We assume that we are given :math:`N_{\rm s}` parameter tuples +:math:`\boldsymbol \mu^{(2)}_\ell, 1 \le \ell \le N_{\rm s}`. We +introduce the following set of snapshots on :math:`(r_{\rm in}, r_{\rm +cut})`: + +.. math:: + + \xi_\ell(r_{ij}, \boldsymbol \eta) = W^{(2)}(r_{ij}, \boldsymbol \eta, \boldsymbol \mu^{(2)}_\ell), \quad \ell = 1, \ldots, N_{\rm s} . + +To ensure adequate sampling of the PES for different parameters, we +choose :math:`N_{\rm s}` parameter points :math:`\boldsymbol +\mu^{(2)}_\ell = (\alpha_\ell, \beta_\ell, \gamma_\ell, \kappa_\ell), 1 +\le \ell \le N_{\rm s}` as follows. The parameters :math:`\alpha \in [1, +N_\alpha]` and :math:`\gamma \in [1, N_\gamma]` are integers, where +:math:`N_\alpha` and :math:`N_\gamma` are the highest degrees for +:math:`\alpha` and :math:`\gamma`, respectively. We next choose +:math:`N_\beta` different values of :math:`\beta` in the interval +:math:`[\beta_{\min}, \beta_{\max}]`, where :math:`\beta_{\min} = 0` and +:math:`\beta_{\max} = 4`. The parameter :math:`\kappa` can be set either +0 or 1. Hence, the total number of parameter points is :math:`N_{\rm s} += N_\alpha N_\beta + N_\gamma`. Although :math:`N_\alpha, N_\beta, +N_\gamma` can be chosen conservatively large, we find that +:math:`N_\alpha = 6, N_\beta = 3, N_\gamma = 8` are adequate for most +problems. Note that :math:`N_\alpha` and :math:`N_\gamma` correspond to +*bessel_polynomial_degree* and *inverse_polynomial_degree*, +respectively. + +We employ the Karhunen-Loeve (KL) expansion to generate an orthogonal +basis set which is known to be optimal for representation of the +snapshot family :math:`\{\xi_\ell\}_{\ell=1}^{N_{\rm s}}`. The two-body +orthogonal basis functions are computed as follows + +.. math:: + + U^{(2)}_m(r_{ij}, \boldsymbol \eta) = \sum_{\ell = 1}^{N_{\rm s}} A_{\ell m}(\boldsymbol \eta) \, \xi_\ell(r_{ij}, \boldsymbol \eta), \qquad m = 1, \ldots, N_{\rm 2b} , + +where the matrix :math:`\boldsymbol A \in \mathbb{R}^{N_{\rm s} \times +N_{\rm s}}` consists of eigenvectors of the eigenvalue problem + +.. math:: + + \boldsymbol C \boldsymbol a = \lambda \boldsymbol a + +with the entries of :math:`\boldsymbol C \in \mathbb{R}^{N_{\rm s} \times N_{\rm s}}` being given by + +.. math:: + + C_{ij} = \frac{1}{N_{\rm s}} \int_{r_{\rm in}}^{r_{\rm cut}} \xi_i(x, \boldsymbol \eta) \xi_j(x, \boldsymbol \eta) dx, \quad 1 \le i, j \le N_{\rm s} + +Note that the eigenvalues :math:`\lambda_\ell, 1 \le \ell \le N_{\rm +s}`, are ordered such that :math:`\lambda_1 \ge \lambda_2 \ge \ldots \ge +\lambda_{N_{\rm s}}`, and that the matrix :math:`\boldsymbol A` is +pe-computed and stored for any given :math:`\boldsymbol \eta`. Owing to +the rapid convergence of the KL expansion, only a small number of +orthogonal basis functions is needed to obtain accurate +approximation. The value of :math:`N_{\rm 2b}` corresponds to +*twobody_number_radial_basis_functions*. + +The two-body proper orthogonal descriptors at each atom *i* are computed +by summing the orthogonal basis functions over the neighbors of atom *i* +and numerating on the atom types as follows + +.. math:: + + D^{(2)}_{im l(p, q) }(\boldsymbol \eta) = \left\{ + \begin{array}{ll} + \displaystyle \sum_{\{j | Z_j = q\}} U^{(2)}_m(r_{ij}, \boldsymbol \eta), & \mbox{if } Z_i = p \\ + 0, & \mbox{if } Z_i \neq p + \end{array} + \right. + +for :math:`1 \le i \le N, 1 \le m \le N_{\rm 2b}, 1 \le q, p \le N_{\rm +e}`. Here :math:`l(p,q)` is a symmetric index mapping such that + +.. math:: + + l(p,q) = \left\{ + \begin{array}{ll} + q + (p-1) N_{\rm e} - p(p-1)/2, & \mbox{if } q \ge p \\ + p + (q-1) N_{\rm e} - q(q-1)/2, & \mbox{if } q < p . + \end{array} + \right. + +The number of two-body descriptors per atom is thus :math:`N_{\rm 2b} +N_{\rm e}(N_{\rm e}+1)/2`. + +It is important to note that the orthogonal basis functions do not +depend on the atomic numbers :math:`Z_i` and :math:`Z_j`. Therefore, the +cost of evaluating the basis functions and their derivatives with +respect to :math:`r_{ij}` is independent of the number of elements +:math:`N_{\rm e}`. Consequently, even though the two-body proper +orthogonal descriptors depend on :math:`\boldsymbol Z`, their +computational complexity is independent of :math:`N_{\rm e}`. + +In order to provide proper orthogonal descriptors for three-body +interactions, we need to introduce a three-body parameterized +potential. In particular, the three-body potential is defined as a +product of radial and angular functions as follows + +.. math:: + + W^{(3)}(r_{ij}, r_{ik}, \theta_{ijk}, \boldsymbol \eta, \boldsymbol \mu^{(3)}) = \psi(r_{ij}, r_{\rm min}, r_{\rm max}, \alpha, \beta, \gamma, \kappa) f_{\rm c}(r_{ij}, r_{\rm min}, r_{\rm max}) \\ + \psi(r_{ik}, r_{\rm min}, r_{\rm max}, \alpha, \beta, \gamma, \kappa) f_{\rm c}(r_{ik}, r_{\rm min}, r_{\rm max}) \\ + \cos (\sigma \theta_{ijk} + \zeta) + +where :math:`\sigma` is the periodic multiplicity, :math:`\zeta` is the +equilibrium angle, :math:`\boldsymbol \mu^{(3)} = (\alpha, \beta, +\gamma, \kappa, \sigma, \zeta)`. The three-body potential provides an +angular fingerprint of the atomic environment through the bond angles +:math:`\theta_{ijk}` formed with each pair of neighbors :math:`j` and +:math:`k`. Compared to the two-body potential, the three-body potential +has two extra parameters :math:`(\sigma, \zeta)` associated with the +angular component. + +Let :math:`\boldsymbol \varrho = (\alpha, \beta, \gamma, \kappa)`. We +assume that we are given :math:`L_{\rm r}` parameter tuples +:math:`\boldsymbol \varrho_\ell, 1 \le \ell \le L_{\rm r}`. We +introduce the following set of snapshots on :math:`(r_{\min}, +r_{\max})`: + +.. math:: + + \zeta_\ell(r_{ij}, r_{\rm min}, r_{\rm max} ) = \psi(r_{ij}, r_{\rm min}, r_{\rm max}, \boldsymbol \varrho_\ell) f_{\rm c}(r_{ij}, r_{\rm min}, r_{\rm max}), \quad 1 \le \ell \le L_{\rm r} . + +We apply the Karhunen-Loeve (KL) expansion to this set of snapshots to +obtain orthogonal basis functions as follows + +.. math:: + + U^{r}_m(r_{ij}, r_{\rm min}, r_{\rm max} ) = \sum_{\ell = 1}^{L_{\rm r}} A_{\ell m} \, \zeta_\ell(r_{ij}, r_{\rm min}, r_{\rm max} ), \qquad m = 1, \ldots, N_{\rm r} , + +where the matrix :math:`\boldsymbol A \in \mathbb{R}^{L_{\rm r} \times L_{\rm r}}` consists +of eigenvectors of the eigenvalue problem. For the parameterized angular function, +we consider angular basis functions + +.. math:: + + U^{a}_n(\theta_{ijk}) = \cos ((n-1) \theta_{ijk}), \qquad n = 1,\ldots, N_{\rm a}, + +where :math:`N_{\rm a}` is the number of angular basis functions. The orthogonal +basis functions for the parameterized potential are computed as follows + +.. math:: + + U^{(3)}_{mn}(r_{ij}, r_{ik}, \theta_{ijk}, \boldsymbol \eta) = U^{r}_m(r_{ij}, \boldsymbol \eta) U^{r}_m(r_{ik}, \boldsymbol \eta) U^{a}_n(\theta_{ijk}), + +for :math:`1 \le m \le N_{\rm r}, 1 \le n \le N_{\rm a}`. The number of three-body +orthogonal basis functions is equal to :math:`N_{\rm 3b} = N_{\rm r} N_{\rm a}` and +independent of the number of elements. The value of :math:`N_{\rm r}` corresponds to +*threebody_number_radial_basis_functions*, while that of :math:`N_{\rm a}` to +*threebody_number_angular_basis_functions*. + +The three-body proper orthogonal descriptors at each atom *i* +are obtained by summing over the neighbors *j* and *k* of atom *i* as + +.. math:: + + D^{(3)}_{imn \ell(p, q, s)}(\boldsymbol \eta) = \left\{ + \begin{array}{ll} + \displaystyle \sum_{\{j | Z_j = q\}} \sum_{\{k | Z_k = s\}} U^{(3)}_{mn}(r_{ij}, r_{ik}, \theta_{ijk}, \boldsymbol \eta), & \mbox{if } Z_i = p \\ + 0, & \mbox{if } Z_i \neq p + \end{array} + \right. + +for :math:`1 \le i \le N, 1 \le m \le N_{\rm r}, 1 \le n \le N_{\rm a}, 1 \le q, p, s \le N_{\rm e}`, +where + +.. math:: + + \ell(p,q,s) = \left\{ + \begin{array}{ll} + s + (q-1) N_{\rm e} - q(q-1)/2 + (p-1)N_{\rm e}(1+N_{\rm e})/2 , & \mbox{if } s \ge q \\ + q + (s-1) N_{\rm e} - s(s-1)/2 + (p-1)N_{\rm e}(1+N_{\rm e})/2, & \mbox{if } s < q . + \end{array} + \right. + +The number of three-body descriptors per atom is thus :math:`N_{\rm 3b} N_{\rm e}^2(N_{\rm e}+1)/2`. +While the number of three-body PODs is cubic function of the number of elements, +the computational complexity of the three-body PODs is independent of the number of elements. + +Four-Body SNAP Descriptors +"""""""""""""""""""""""""" + +In addition to the proper orthogonal descriptors described above, we also employ +the spectral neighbor analysis potential (SNAP) descriptors. SNAP uses bispectrum components +to characterize the local neighborhood of each atom in a very general way. The mathematical definition +of the bispectrum calculation and its derivatives w.r.t. atom positions is described in +:doc:`compute snap `. In SNAP, the +total energy is decomposed into a sum over atom energies. The energy of +atom *i* is expressed as a weighted sum over bispectrum components. + +.. math:: + + E_i^{\rm SNAP} = \sum_{k=1}^{N_{\rm 4b}} \sum_{p=1}^{N_{\rm e}} c_{kp}^{(4)} D_{ikp}^{(4)} + + +where the SNAP descriptors are related to the bispectrum components by + +.. math:: + + D^{(4)}_{ikp} = \left\{ + \begin{array}{ll} + \displaystyle B_{ik}, & \mbox{if } Z_i = p \\ + 0, & \mbox{if } Z_i \neq p + \end{array} + \right. + +Here :math:`B_{ik}` is the *k*\ -th bispectrum component of atom *i*. The number of +bispectrum components :math:`N_{\rm 4b}` depends on the value of *fourbody_snap_twojmax* :math:`= 2 J_{\rm max}` +and *fourbody_snap_chemflag*. If *fourbody_snap_chemflag* = 0 +then :math:`N_{\rm 4b} = (J_{\rm max}+1)(J_{\rm max}+2)(J_{\rm max}+1.5)/3`. +If *fourbody_snap_chemflag* = 1 then :math:`N_{\rm 4b} = N_{\rm e}^3 (J_{\rm max}+1)(J_{\rm max}+2)(J_{\rm max}+1.5)/3`. +The bispectrum calculation is described in more detail in :doc:`compute sna/atom `. + +Linear Proper Orthogonal Descriptor Potentials +"""""""""""""""""""""""""""""""""""""""""""""" + +The proper orthogonal descriptors and SNAP descriptors are used to define the atomic energies +in the following expansion + +.. math:: + + E_{i}(\boldsymbol \eta) = \sum_{p=1}^{N_{\rm e}} c^{(1)}_p D^{(1)}_{ip} + \sum_{m=1}^{N_{\rm 2b}} \sum_{l=1}^{N_{\rm e}(N_{\rm e}+1)/2} c^{(2)}_{ml} D^{(2)}_{iml}(\boldsymbol \eta) + \sum_{m=1}^{N_{\rm r}} \sum_{n=1}^{N_{\rm a}} \sum_{\ell=1}^{N_{\rm e}^2(N_{\rm e}+1)/2} c^{(3)}_{mn\ell} D^{(3)}_{imn\ell}(\boldsymbol \eta) + \sum_{k=1}^{N_{\rm 4b}} \sum_{p=1}^{N_{\rm e}} c_{kp}^{(4)} D_{ikp}^{(4)}(\boldsymbol \eta), + +where :math:`D^{(1)}_{ip}, D^{(2)}_{iml}, D^{(3)}_{imn\ell}, D^{(4)}_{ikp}` are the one-body, two-body, three-body, four-body descriptors, +respectively, and :math:`c^{(1)}_p, c^{(2)}_{ml}, c^{(3)}_{mn\ell}, c^{(4)}_{kp}` are their respective expansion +coefficients. In a more compact notation that implies summation over descriptor indices +the atomic energies can be written as + +.. math:: + + E_i(\boldsymbol \eta) = \sum_{m=1}^{N_{\rm e}} c^{(1)}_m D^{(1)}_{im} + \sum_{m=1}^{N_{\rm d}^{(2)}} c^{(2)}_k D^{(2)}_{im} + \sum_{m=1}^{N_{\rm d}^{(3)}} c^{(3)}_m D^{(3)}_{im} + \sum_{m=1}^{N_{\rm d}^{(4)}} c^{(4)}_m D^{(4)}_{im} + +where :math:`N_{\rm d}^{(2)} = N_{\rm 2b} N_{\rm e} (N_{\rm e}+1)/2`, +:math:`N_{\rm d}^{(3)} = N_{\rm 3b} N_{\rm e}^2 (N_{\rm e}+1)/2`, and +:math:`N_{\rm d}^{(4)} = N_{\rm 4b} N_{\rm e}` are +the number of two-body, three-body, and four-body descriptors, respectively. + +The potential energy is then obtained by summing local atomic energies :math:`E_i` +for all atoms :math:`i` in the system + +.. math:: + + E(\boldsymbol \eta) = \sum_{i}^N E_{i}(\boldsymbol \eta) + +Because the descriptors are one-body, two-body, and three-body terms, +the resulting POD potential is a three-body PES. We can express the potential +energy as a linear combination of the global descriptors as follows + +.. math:: + + E(\boldsymbol \eta) = \sum_{m=1}^{N_{\rm e}} c^{(1)}_m d^{(1)}_{m} + \sum_{m=1}^{N_{\rm d}^{(2)}} c^{(2)}_m d^{(2)}_{m} + \sum_{m=1}^{N_{\rm d}^{(3)}} c^{(3)}_m d^{(3)}_{m} + \sum_{m=1}^{N_{\rm d}^{(4)}} c^{(4)}_m d^{(4)}_{m} + +where the global descriptors are given by + +.. math:: + + d_{m}^{(1)}(\boldsymbol \eta) = \sum_{i=1}^N D_{im}^{(1)}(\boldsymbol \eta), \quad d_{m}^{(2)}(\boldsymbol \eta) = \sum_{i=1}^N D_{im}^{(2)}(\boldsymbol \eta), \quad d_{m}^{(3)}(\boldsymbol \eta) = \sum_{i=1}^N D_{im}^{(3)}(\boldsymbol \eta), \quad d_{m}^{(4)}(\boldsymbol \eta) = \sum_{i=1}^N D_{im}^{(4)}(\boldsymbol \eta) + +Hence, we obtain the atomic forces as + +.. math:: + + \boldsymbol F = -\nabla E(\boldsymbol \eta) = - \sum_{m=1}^{N_{\rm d}^{(2)}} c^{(2)}_m \nabla d_m^{(2)} - \sum_{m=1}^{N_{\rm d}^{(3)}} c^{(3)}_m \nabla d_m^{(3)} - \sum_{m=1}^{N_{\rm d}^{(4)}} c^{(4)}_m \nabla d_m^{(4)} + +where :math:`\nabla d_m^{(2)}`, :math:`\nabla d_m^{(3)}` and :math:`\nabla d_m^{(4)}` are derivatives of the two-body +three-body, and four-body global descriptors with respect to atom positions, respectively. +Note that since the first-body global descriptors are constant, their derivatives are zero. + +Quadratic Proper Orthogonal Descriptor Potentials +""""""""""""""""""""""""""""""""""""""""""""""""" + +We recall two-body PODs :math:`D^{(2)}_{ik}, 1 \le k \le N_{\rm d}^{(2)}`, +and three-body PODs :math:`D^{(3)}_{im}, 1 \le m \le N_{\rm d}^{(3)}`, +with :math:`N_{\rm d}^{(2)} = N_{\rm 2b} N_{\rm e} (N_{\rm e}+1)/2` and +:math:`N_{\rm d}^{(3)} = N_{\rm 3b} N_{\rm e}^2 (N_{\rm e}+1)/2` being +the number of descriptors per atom for the two-body PODs and three-body PODs, +respectively. We employ them to define a new set of atomic descriptors as follows + +.. math:: + + D^{(2*3)}_{ikm} = \frac{1}{2N}\left( D^{(2)}_{ik} \sum_{j=1}^N D^{(3)}_{jm} + D^{(3)}_{im} \sum_{j=1}^N D^{(2)}_{jk} \right) + +for :math:`1 \le i \le N, 1 \le k \le N_{\rm d}^{(2)}, 1 \le m \le N_{\rm d}^{(3)}`. +The new descriptors are four-body because they involve central atom :math:`i` together +with three neighbors :math:`j, k` and :math:`l`. The total number of new descriptors per atom is equal to + +.. math:: + + N_{\rm d}^{(2*3)} = N_{\rm d}^{(2)} * N_{\rm d}^{(3)} = N_{\rm 2b} N_{\rm 3b} N_{\rm e}^3 (N_{\rm e}+1)^2/4 . + +The new global descriptors are calculated as + +.. math:: + + d^{(2*3)}_{km} = \sum_{i=1}^N D^{(2*3)}_{ikm} = \left( \sum_{i=1}^N D^{(2)}_{ik} \right) \left( \sum_{i=1}^N D^{(3)}_{im} \right) = d^{(2)}_{k} d^{(3)}_m, + +for :math:`1 \le k \le N_{\rm d}^{(2)}, 1 \le m \le N_{\rm d}^{(3)}`. Hence, the gradient +of the new global descriptors with respect to atom positions is calculated as + +.. math:: + + \nabla d^{(2*3)}_{km} = d^{(3)}_m \nabla d^{(2)}_{k} + d^{(2)}_{k} \nabla d^{(3)}_m, \quad 1 \le k \le N_{\rm d}^{(2)}, 1 \le m \le N_{\rm d}^{(3)} . + +The quadratic POD potential is defined as a linear combination of the +original and new global descriptors as follows + +.. math:: + + E^{(2*3)} = \sum_{k=1}^{N_{\rm 2d}^{(2*3)}} \sum_{m=1}^{N_{\rm 3d}^{(2*3)}} c^{(2*3)}_{km} d^{(2*3)}_{km} . + +It thus follows that + +.. math:: + + E^{(2*3)} = 0.5 \sum_{k=1}^{N_{\rm 2d}^{(2*3)}} \left( \sum_{m=1}^{N_{\rm 3d}^{(2*3)}} c^{(2*3)}_{km} d_m^{(3)} \right) d_k^{(2)} + 0.5 \sum_{m=1}^{N_{\rm 3d}^{(2*3)}} \left( \sum_{k=1}^{N_{\rm 2d}^{(2*3)}} c^{(2*3)}_{km} d_k^{(2)} \right) d_m^{(3)} , + +which is simplified to + +.. math:: + + E^{(2*3)} = 0.5 \sum_{k=1}^{N_{\rm 2d}^{(2*3)}} b_k^{(2)} d_k^{(2)} + 0.5 \sum_{m=1}^{N_{\rm 3d}^{(2*3)}} b_m^{(3)} d_m^{(3)} + +where + +.. math:: + + b_k^{(2)} & = \sum_{m=1}^{N_{\rm 3d}^{(2*3)}} c^{(2*3)}_{km} d_m^{(3)}, \quad k = 1,\ldots, N_{\rm 2d}^{(2*3)}, \\ + b_m^{(3)} & = \sum_{k=1}^{N_{\rm 2d}^{(2*3)}} c^{(2*3)}_{km} d_k^{(2)}, \quad m = 1,\ldots, N_{\rm 3d}^{(2*3)} . + +The quadratic POD potential results in the following atomic forces + +.. math:: + + \boldsymbol F^{(2*3)} = - \sum_{k=1}^{N_{\rm 2d}^{(2*3)}} \sum_{m=1}^{N_{\rm 3d}^{(2*3)}} c^{(2*3)}_{km} \nabla d^{(2*3)}_{km} . + +It can be shown that + +.. math:: + + \boldsymbol F^{(2*3)} = - \sum_{k=1}^{N_{\rm 2d}^{(2*3)}} b^{(2)}_k \nabla d_k^{(2)} - \sum_{m=1}^{N_{\rm 3d}^{(2*3)}} b^{(3)}_m \nabla d_m^{(3)} . + +The calculation of the atomic forces for the quadratic POD potential +only requires the extra calculation of :math:`b_k^{(2)}` and :math:`b_m^{(3)}` which can be negligible. +As a result, the quadratic POD potential does not increase the computational complexity. + + +Training +"""""""" + +POD potentials are trained using the least-squares regression against +density functional theory (DFT) data. Let :math:`J` be the number of +training configurations, with :math:`N_j` being the number of atoms in +the j-th configuration. Let :math:`\{E^{\star}_j\}_{j=1}^{J}` and +:math:`\{\boldsymbol F^{\star}_j\}_{j=1}^{J}` be the DFT energies and +forces for :math:`J` configurations. Next, we calculate the global +descriptors and their derivatives for all training configurations. Let +:math:`d_{jm}, 1 \le m \le M`, be the global descriptors associated with +the j-th configuration, where :math:`M` is the number of global +descriptors. We then form a matrix :math:`\boldsymbol A \in +\mathbb{R}^{J \times M}` with entries :math:`A_{jm} = d_{jm}/ N_j` for +:math:`j=1,\ldots,J` and :math:`m=1,\ldots,M`. Moreover, we form a +matrix :math:`\boldsymbol B \in \mathbb{R}^{\mathcal{N} \times M}` by +stacking the derivatives of the global descriptors for all training +configurations from top to bottom, where :math:`\mathcal{N} = +3\sum_{j=1}^{J} N_j`. + +The coefficient vector :math:`\boldsymbol c` of the POD potential is +found by solving the following least-squares problem + +.. math:: + + {\min}_{\boldsymbol c \in \mathbb{R}^{M}} \ w_E \|\boldsymbol A(\boldsymbol \eta) \boldsymbol c - \bar{\boldsymbol E}^{\star} \|^2 + w_F \|\boldsymbol B(\boldsymbol \eta) \boldsymbol c + \boldsymbol F^{\star} \|^2 + w_R \|\boldsymbol c \|^2, + +where :math:`w_E` and :math:`w_F` are weights for the energy +(*fitting_weight_energy*) and force (*fitting_weight_force*), +respectively; and :math:`w_R` is the regularization parameter (*fitting_regularization_parameter*). Here :math:`\bar{\boldsymbol E}^{\star} \in +\mathbb{R}^{J}` is a vector of with entries :math:`\bar{E}^{\star}_j = +E^{\star}_j/N_j` and :math:`\boldsymbol F^{\star}` is a vector of +:math:`\mathcal{N}` entries obtained by stacking :math:`\{\boldsymbol +F^{\star}_j\}_{j=1}^{J}` from top to bottom. + +The training procedure is the same for both the linear and quadratic POD +potentials. However, since the quadratic POD potential has a +significantly larger number of the global descriptors, it is more +expensive to train the linear POD potential. This is because the +training of the quadratic POD potential still requires us to calculate +and store the quadratic global descriptors and their +gradient. Furthermore, the quadratic POD potential may require more +training data in order to prevent over-fitting. In order to reduce the +computational cost of fitting the quadratic POD potential and avoid +over-fitting, we can use subsets of two-body and three-body PODs for +constructing the new descriptors. + + +Restrictions +"""""""""""" + +This command is part of the ML-POD package. It is only enabled if +LAMMPS was built with that package. See the :doc:`Build package +` page for more info. + +Related commands +"""""""""""""""" + +:doc:`pair_style pod ` + +Default +""""""" + +The keyword defaults are also given in the description of the input files. + +---------- + +.. _Grepl20072: + +**(Grepl)** Grepl, Maday, Nguyen, and Patera, ESAIM: Mathematical Modelling and Numerical Analysis 41(3), 575-605, (2007). + +.. _Nguyen20222: + +**(Nguyen)** Nguyen and Rohskopf, arXiv preprint arXiv:2209.02362 (2022). diff --git a/doc/src/fix.rst b/doc/src/fix.rst index 333e920bd9..bd3c2eca8e 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 @@ -360,6 +360,7 @@ accelerated styles exist. * :doc:`saed/vtk ` - time-average the intensities from :doc:`compute saed ` * :doc:`setforce ` - set the force on each atom * :doc:`setforce/spin ` - set magnetic precession vectors on each atom +* :doc:`sgcmc ` - fix for hybrid semi-grand canonical MD/MC simulations * :doc:`shake ` - SHAKE constraints on bonds and/or angles * :doc:`shardlow ` - integration of DPD equations of motion using the Shardlow splitting * :doc:`smd ` - applied a steered MD force to a group diff --git a/doc/src/fix_ave_spatial.rst b/doc/src/fix_ave_spatial.rst new file mode 100644 index 0000000000..96d87bd8db --- /dev/null +++ b/doc/src/fix_ave_spatial.rst @@ -0,0 +1,9 @@ +Fix ave/spatial command +======================= + +.. meta:: + :http-equiv=Refresh: 5; url='https://docs.lammps.org/Commands_removed.html#fix-ave-spatial-and-fix-ave-spatial-sphere' + +.. deprecated:: 11Dec2015 + +The `fix ave/spatial` command has been superseded by :doc:`fix ave/chunk `. diff --git a/doc/src/fix_ave_spatial_sphere.rst b/doc/src/fix_ave_spatial_sphere.rst new file mode 100644 index 0000000000..a3cacc4115 --- /dev/null +++ b/doc/src/fix_ave_spatial_sphere.rst @@ -0,0 +1,9 @@ +Fix ave/spatial command +======================= + +.. meta:: + :http-equiv=Refresh: 5; url='https://docs.lammps.org/Commands_removed.html#fix-ave-spatial-and-fix-ave-spatial-sphere' + +.. deprecated:: 11Dec2015 + +The `fix ave/spatial/sphere` command has been superseded by :doc:`fix ave/chunk `. diff --git a/doc/src/fix_bond_react.rst b/doc/src/fix_bond_react.rst index c557d2617d..4377d9d946 100644 --- a/doc/src/fix_bond_react.rst +++ b/doc/src/fix_bond_react.rst @@ -42,13 +42,16 @@ Syntax * template-ID(post-reacted) = ID of a molecule template containing post-reaction topology * map_file = name of file specifying corresponding atom-IDs in the pre- and post-reacted templates * zero or more individual keyword/value pairs may be appended to each react argument -* individual_keyword = *prob* or *max_rxn* or *stabilize_steps* or *custom_charges* or *molecule* or *modify_create* +* individual_keyword = *prob* or *rate_limit* or *max_rxn* or *stabilize_steps* or *custom_charges* or *rescale_charges* or *molecule* or *modify_create* .. parsed-literal:: *prob* values = fraction seed fraction = initiate reaction with this probability if otherwise eligible seed = random number seed (positive integer) + *rate_limit* = Nlimit Nsteps + Nlimit = maximum number of reactions allowed to occur within interval + Nsteps = the interval (number of timesteps) over which to count reactions *max_rxn* value = N N = maximum number of reactions allowed to occur *stabilize_steps* value = timesteps @@ -56,6 +59,9 @@ Syntax *custom_charges* value = *no* or fragment-ID *no* = update all atomic charges (default) fragment-ID = ID of molecule fragment whose charges are updated + *rescale_charges* value = *no* or *yes* + *no* = do not rescale atomic charges (default) + *yes* = rescale charges such that total charge does not change during reaction *molecule* value = *off* or *inter* or *intra* *off* = allow both inter- and intramolecular reactions (default) *inter* = search for reactions between molecules with different IDs @@ -171,12 +177,12 @@ due to the internal dynamic grouping performed by fix bond/react. If the group-ID is an existing static group, react-group-IDs should also be specified as this static group or a subset. -The *reset_mol_ids* keyword invokes the :doc:`reset_mol_ids ` -command after a reaction occurs, to ensure that molecule IDs are -consistent with the new bond topology. The group-ID used for -:doc:`reset_mol_ids ` is the group-ID for this fix. -Resetting molecule IDs is necessarily a global operation, so it can -be slow for very large systems. +The *reset_mol_ids* keyword invokes the :doc:`reset_atoms mol +` command after a reaction occurs, to ensure that +molecule IDs are consistent with the new bond topology. The group-ID +used for :doc:`reset_atoms mol ` is the group-ID for this +fix. Resetting molecule IDs is necessarily a global operation, so it +can be slow for very large systems. The following comments pertain to each *react* argument (in other words, they can be customized for each reaction, or reaction step): @@ -514,28 +520,40 @@ example, the molecule fragment could consist of only the backbone atoms of a polymer chain. This constraint can be used to enforce a specific relative position and orientation between reacting molecules. +.. versionchanged:: TBD + The constraint of type "custom" has the following syntax: .. parsed-literal:: custom *varstring* -where "custom" is the required keyword, and *varstring* is a -variable expression. The expression must be a valid equal-style -variable formula that can be read by the :doc:`variable ` command, +where 'custom' is the required keyword, and *varstring* is a variable +expression. The expression must be a valid equal-style variable +formula that can be read by the :doc:`variable ` command, after any special reaction functions are evaluated. If the resulting expression is zero, the reaction is prevented from occurring; -otherwise, it is permitted to occur. There are two special reaction -functions available, "rxnsum" and "rxnave". These functions operate -over the atoms in a given reaction site, and have one mandatory -argument and one optional argument. The mandatory argument is the -identifier for an atom-style variable. The second, optional argument -is the name of a molecule fragment in the pre-reaction template, and -can be used to operate over a subset of atoms in the reaction site. -The "rxnsum" function sums the atom-style variable over the reaction -site, while the "rxnave" returns the average value. For example, a -constraint on the total potential energy of atoms involved in the -reaction can be imposed as follows: +otherwise, it is permitted to occur. There are three special reaction +functions available, 'rxnbond', 'rxnsum', and 'rxnave'. The 'rxnbond' +function allows per-bond values to be included in the variable strings +of the custom constraint. The 'rxnbond' function has two mandatory +arguments. The first argument is the ID of a previously defined +'compute bond/local' command. This 'compute bond/local' must compute +only one value, e.g. bond force. This value is returned by the +'rxnbond' function. The second argument is the name of a molecule +fragment in the pre-reaction template. The fragment must contain +exactly two atoms, corresponding to the atoms involved in the bond +whose value should be calculated. An example of a constraint that uses +the force experienced by a bond is provided below. The 'rxnsum' and +'rxnave' functions operate over the atoms in a given reaction site, +and have one mandatory argument and one optional argument. The +mandatory argument is the identifier for an atom-style variable. The +second, optional argument is the name of a molecule fragment in the +pre-reaction template, and can be used to operate over a subset of +atoms in the reaction site. The 'rxnsum' function sums the atom-style +variable over the reaction site, while the 'rxnave' returns the +average value. For example, a constraint on the total potential energy +of atoms involved in the reaction can be imposed as follows: .. code-block:: LAMMPS @@ -547,11 +565,32 @@ reaction can be imposed as follows: custom "rxnsum(v_my_pe) > 100" # in Constraints section of map file The above example prevents the reaction from occurring unless the -total potential energy of the reaction site is above 100. The variable -expression can be interpreted as the probability of the reaction -occurring by using an inequality and the :doc:`random(x,y,z) ` -function available for equal-style variables, similar to the 'arrhenius' -constraint above. +total potential energy of the reaction site is above 100. As a second +example, this time using the 'rxnbond' function, consider a modified +Arrhenius constraint that depends on the bond force of a specific bond: + +.. code-block:: LAMMPS + + # in LAMMPS input script + + compute bondforce all bond/local force + + compute ke_atom all ke/atom + variable ke atom c_ke_atom + + variable E_a equal 100.0 # activation energy + variable l0 equal 1.0 # characteristic length + + +.. code-block:: LAMMPS + + # in Constraints section of map file + + custom "exp(-(v_E_a-rxnbond(c_bondforce,bond1frag)*v_l0)/(2/3*rxnave(v_ke))) < random(0,1,12345)" + +By using an inequality and the 'random(x,y,z)' function, the left-hand +side can be interpreted as the probability of the reaction occurring, +similar to the 'arrhenius' constraint above. By default, all constraints must be satisfied for the reaction to occur. In other words, constraints are evaluated as a series of @@ -598,6 +637,15 @@ eligible reaction only occurs if the random number is less than the fraction. Up to :math:`N` reactions are permitted to occur, as optionally specified by the *max_rxn* keyword. +.. versionadded:: TBD + +The *rate_limit* keyword can enforce an upper limit on the overall +rate of the reaction. The number of reaction occurrences is limited to +Nlimit within an interval of Nsteps timesteps. No reactions are +permitted to occur within the first Nsteps timesteps of the first run +after reading a data file. Nlimit can be specified with an equal-style +:doc:`variable `. + The *stabilize_steps* keyword allows for the specification of how many time steps a reaction site is stabilized before being returned to the overall system thermostat. In order to produce the most physical @@ -616,6 +664,19 @@ charges are updated to those specified by the post-reaction template fragment defined in the pre-reaction molecule template. In this case, only the atomic charges of atoms in the molecule fragment are updated. +.. versionadded:: TBD + +The *rescale_charges* keyword can be used to ensure the total charge +of the system does not change as reactions occur. When the argument is +set to *yes*\ , a fixed value is added to the charges of post-reaction +atoms such that their total charge equals that of the pre-reaction +site. If only a subset of atomic charges are updated via the +*custom_charges* keyword, this rescaling is applied to the subset. +This keyword could be useful for systems that contain different +molecules with the same reactive site, if the partial charges on the +reaction site vary from molecule to molecule, or when removing +reaction by-products. + The *molecule* keyword can be used to force the reaction to be intermolecular, intramolecular or either. When the value is set to *off*\ , molecule IDs are not considered when searching for reactions diff --git a/doc/src/fix_electrode.rst b/doc/src/fix_electrode.rst new file mode 100644 index 0000000000..9da8dcbdf9 --- /dev/null +++ b/doc/src/fix_electrode.rst @@ -0,0 +1,421 @@ +.. index:: fix electrode/conp +.. index:: fix electrode/conq +.. index:: fix electrode/thermo +.. index:: fix electrode/conp/intel +.. index:: fix electrode/conq/intel +.. index:: fix electrode/thermo/intel + +fix electrode/conp command +========================== + +Accelerator Variant: *electrode/conp/intel* + +fix electrode/conq command +========================== + +Accelerator Variant: *electrode/conq/intel* + +fix electrode/thermo command +============================ + +Accelerator Variant: *electrode/thermo/intel* + +Syntax +"""""" + +.. code-block:: LAMMPS + + fix ID group-ID style args keyword value ... + +* ID, group-ID are documented in :doc:`fix ` command +* style = *electrode/conp* or *electrode/conq* or *electrode/thermo* +* args = arguments used by a particular style + + .. parsed-literal:: + + *electrode/conp* args = potential eta + *electrode/conq* args = charge eta + *electrode/thermo* args = potential eta *temp* values + potential = electrode potential + charge = electrode charge + eta = reciprocal width of electrode charge smearing + *temp* values = T_v tau_v rng_v + T_v = temperature of thermo-potentiostat + tau_v = time constant of thermo-potentiostat + rng_v = integer used to initialize random number generator + +* zero or more keyword/value pairs may be appended +* keyword = *algo* or *symm* or *couple* or *etypes* or *ffield* or *write_mat* or *write_inv* or *read_mat* or *read_inv* + +.. parsed-literal:: + + *algo* values = *mat_inv* or *mat_cg* tol or *cg* tol + specify the algorithm used to compute the electrode charges + *symm* value = *on* or *off* + turn on/off charge neutrality constraint for the electrodes + *couple* values = group-ID val + group-ID = group of atoms treated as additional electrode + val = electric potential or charge on this electrode + *etypes* value = *on* or *off* + turn on/off type-based optimized neighbor lists (electrode and electrolyte types may not overlap) + *ffield* value = *on* or *off* + turn on/off finite-field implementation + *write_mat* value = filename + filename = file to which to write elastance matrix + *write_inv* value = filename + filename = file to which to write inverted matrix + *read_mat* value = filename + filename = file from which to read elastance matrix + *read_inv* value = filename + filename = file from which to read inverted matrix + +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 algo cg 1e-5 + fix fxconp bot electrode/thermo -1.0 1.805 temp 298 100 couple top 1.0 + +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. + +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 + + * (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. + +.. versionadded:: TBD + +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. + +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. + +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: + +.. 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 +``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) `. + +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": + +.. code-block:: LAMMPS + + kspace_modify slab + 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. + +.. 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: + +.. 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. + +.. 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 +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + +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. + +.. code-block:: LAMMPS + + fix_modify ID tf type length voronoi + + +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. + +.. code-block:: LAMMPS + + fix_modify ID timer on/off + +---------- + +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] = 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 +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 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). + +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 +"""""""""""" + +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. + +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 +line + +.. code-block:: LAMMPS + + 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). + +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 + +---------- + +.. _Siepmann: + +**(Siepmann)** Siepmann and Sprik, J. Chem. Phys. 102, 511 (1995). + +.. _Reed3: + +**(Reed)** Reed *et al.*, J. Chem. Phys. 126, 084704 (2007). + +.. _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). + +.. _Hu: + +**(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). + +.. _Ahrens-Iwers2: + +**(Ahrens-Iwers2022)** Ahrens-Iwers *et al.*, J. Chem. Phys. 157, 084801 (2022). diff --git a/doc/src/fix_electrode_conp.rst b/doc/src/fix_electrode_conp.rst deleted file mode 100644 index e070433c07..0000000000 --- a/doc/src/fix_electrode_conp.rst +++ /dev/null @@ -1,230 +0,0 @@ -.. index:: fix electrode/conp -.. index:: fix electrode/conq -.. index:: fix electrode/thermo -.. index:: fix electrode/conp/intel -.. index:: fix electrode/conq/intel -.. index:: fix electrode/thermo/intel - -fix electrode/conp command -========================== - -Accelerator Variant: *electrode/conp/intel* - -fix electrode/conq command -========================== - -Accelerator Variant: *electrode/conq/intel* - -fix electrode/thermo command -============================ - -Accelerator Variant: *electrode/thermo/intel* - -Syntax -"""""" - -.. parsed-literal:: - - fix ID group-ID style args keyword value ... - -* ID, group-ID are documented in :doc:`fix ` command -* style = *electrode/conp* or *electrode/conq* or *electrode/thermo* -* args = arguments used by a particular style - - .. parsed-literal:: - - *electrode/conp* args = potential eta - *electrode/conq* args = charge eta - *electrode/thermo* args = potential eta *temp* values - potential = electrode potential - charge = electrode charge - eta = reciprocal width of electrode charge smearing - *temp* values = T_v tau_v rng_v - T_v = temperature of thermo-potentiostat - tau_v = time constant of thermo-potentiostat - rng_v = integer used to initialize random number generator - -* zero or more keyword/value pairs may be appended -* keyword = *symm* or *couple* or *etypes* or *ffield* or *write_mat* or *write_inv* or *read_mat* or *read_inv* - -.. parsed-literal:: - - *symm* value = *on* or *off* - turn on/off charge neutrality constraint for the electrodes - *couple* values = group-ID val - group-ID = group of atoms treated as additional electrode - val = electric potential or charge on this electrode - *etypes* values = type - type = atom type (can be a range) exclusive to the electrode for optimized neighbor lists - *ffield* value = *on* or *off* - turn on/off finite-field implementation - *write_mat* value = filename - filename = file to which to write elastance matrix - *write_inv* value = filename - filename = file to which to write inverted matrix - *read_mat* value = filename - filename = file from which to read elastance matrix - *read_inv* value = filename - filename = file from which to read inverted matrix - -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 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 energy minimization is achieved via -matrix inversion :ref:`(Wang) `. - -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. - -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 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 -ewald/electrode a two-dimensional Ewald summation :ref:`(Hu) ` can be used -by setting "slab ew2d": - -.. code-block:: LAMMPS - - kspace_modify slab - 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. - -.. code-block:: LAMMPS - - kspace_modify amat onestep/twostep - - -The *fix_modify tf* option enables the Thomas-Fermi metallicity model -(:ref:`Scalfi `) and allows parameters to be set for each atom type. - -.. code-block:: LAMMPS - - fix_modify ID tf type length voronoi - - -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. - -.. code-block:: LAMMPS - - 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 - - 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 - -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: - -.. 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): - -.. math:: - - \mathbf{Q} = \mathbf{Q}_{SB} + \mathbf{MC} \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). - -.. warning:: - - 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 -and top of the cell this can be achieved with *processors * * 2*, or with the -line - -.. code-block:: LAMMPS - - 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). - ----------- - -.. include:: accel_styles.rst - ----------- - -.. _Siepmann: - -**(Siepmann)** Siepmann and Sprik, J. Chem. Phys. 102, 511 (1995). - -.. _Reed3: - -**(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). - -.. _Ahrens-Iwers: - -**(Ahrens-Iwers)** Ahrens-Iwers and Meissner, J. Chem. Phys. 155, 104104 (2021). - -.. _Hu: - -**(Hu)** Hu, J. Chem. Theory Comput. 10, 5254 (2014). - -.. _Scalfi: - -**(Scalfi)** Scalfi *et al.*, J. Chem. Phys., 153, 174704 (2020). - diff --git a/doc/src/fix_ipi.rst b/doc/src/fix_ipi.rst index 6a6ff9aa87..5e13d25971 100644 --- a/doc/src/fix_ipi.rst +++ b/doc/src/fix_ipi.rst @@ -90,6 +90,12 @@ coordinates are transferred. However, one could use this strategy to define an external potential acting on the atoms that are moved by i-PI. +Since the i-PI code uses atomic units internally, this fix needs to +convert LAMMPS data to and from its :doc:`specified units ` +accordingly when communicating with i-PI. This is not possible for +reduced units ("units lj") and thus *fix ipi* will stop with an error in +this case. + This fix is part of the MISC package. It is only enabled if LAMMPS was built with that package. See the :doc:`Build package ` page for more info. diff --git a/doc/src/fix_nh_uef.rst b/doc/src/fix_nh_uef.rst index 83cf88b11f..cf20d56ce7 100644 --- a/doc/src/fix_nh_uef.rst +++ b/doc/src/fix_nh_uef.rst @@ -44,19 +44,23 @@ Examples Description """"""""""" -This fix can be used to simulate non-equilibrium molecular dynamics -(NEMD) under diagonal flow fields, including uniaxial and bi-axial -flow. Simulations under continuous extensional flow may be carried -out for an indefinite amount of time. It is an implementation of the -boundary conditions from :ref:`(Dobson) `, and also uses numerical +These fixes can be used to simulate non-equilibrium molecular dynamics +(NEMD) under diagonal flow fields, including uniaxial and bi-axial flow. +Simulations under continuous extensional flow may be carried out for an +indefinite amount of time. It is an implementation of the boundary +conditions from :ref:`(Dobson) `, and also uses numerical lattice reduction as was proposed by :ref:`(Hunt) `. The lattice -reduction algorithm is from :ref:`(Semaev) `. The fix is intended for -simulations of homogeneous flows, and integrates the SLLOD equations -of motion, originally proposed by Hoover and Ladd (see :ref:`(Evans and Morriss) `). Additional detail about this implementation can be -found in :ref:`(Nicholson and Rutledge) `. +reduction algorithm is from :ref:`(Semaev) `. The fix is +intended for simulations of homogeneous flows, and integrates the SLLOD +equations of motion, originally proposed by Hoover and Ladd (see +:ref:`(Evans and Morriss) `). Additional detail about this +implementation can be found in :ref:`(Nicholson and Rutledge) +`. Note that NEMD simulations of a continuously strained system can be -performed using the :doc:`fix deform `, :doc:`fix nvt/sllod `, and :doc:`compute temp/deform ` commands. +performed using the :doc:`fix deform `, :doc:`fix nvt/sllod +`, and :doc:`compute temp/deform ` +commands. The applied flow field is set by the *eps* keyword. The values *edot_x* and *edot_y* correspond to the strain rates in the xx and yy @@ -73,11 +77,11 @@ to -(*edot_x* + *edot_y*). The boundary conditions require a simulation box that does not have a consistent alignment relative to the applied flow field. Since LAMMPS utilizes an upper-triangular simulation box, it is not possible to -express the evolving simulation box in the same coordinate system as -the flow field. This fix keeps track of two coordinate systems: the -flow frame, and the upper triangular LAMMPS frame. The coordinate -systems are related to each other through the QR decomposition, as is -illustrated in the image below. +express the evolving simulation box in the same coordinate system as the +flow field. These fixes keep track of two coordinate systems: the flow +frame, and the upper triangular LAMMPS frame. The coordinate systems are +related to each other through the QR decomposition, as is illustrated in +the image below. .. image:: JPG/uef_frames.jpg :align: center @@ -99,12 +103,12 @@ using the dump command will be in the LAMMPS frame unless the ---------- Temperature control is achieved with the default Nose-Hoover style -thermostat documented in :doc:`fix npt `. When this fix is +thermostat documented in :doc:`fix nvt `. When this fix is active, only the peculiar velocity of each atom is stored, defined as -the velocity relative to the streaming velocity. This is in contrast -to :doc:`fix nvt/sllod `, which uses a lab-frame -velocity, and removes the contribution from the streaming velocity in -order to compute the temperature. +the velocity relative to the streaming velocity. This is in contrast to +:doc:`fix nvt/sllod `, which uses a lab-frame velocity, +and removes the contribution from the streaming velocity in order to +compute the temperature. Pressure control is achieved using the default Nose-Hoover barostat documented in :doc:`fix npt `. There are two ways to control the @@ -156,8 +160,8 @@ The following commands will not work: ---------- -These fix computes a temperature and pressure each timestep. To do -this, it creates its own computes of style "temp/uef" and +These fixes compute a temperature and pressure each timestep. To do +this, they create their own computes of style "temp/uef" and "pressure/uef", as if one of these two sets of commands had been issued: @@ -169,18 +173,19 @@ issued: compute fix-ID_temp all temp/uef compute fix-ID_press all pressure/uef fix-ID_temp -See the :doc:`compute temp/uef ` and :doc:`compute pressure/uef ` commands for details. Note -that the IDs of the new computes are the fix-ID + underscore + "temp" -or fix_ID + underscore + "press". +See the :doc:`compute temp/uef ` and :doc:`compute +pressure/uef ` commands for details. Note that +the IDs of the new computes are the fix-ID + underscore + "temp" or +fix_ID + underscore + "press". Restart, fix_modify, output, run start/stop, minimize info """"""""""""""""""""""""""""""""""""""""""""""""""""""""""" The fix writes the state of all the thermostat and barostat variables, -as well as the cumulative strain applied, to :doc:`binary restart files `. See the :doc:`read_restart ` command -for info on how to re-specify a fix in an input script that reads a -restart file, so that the operation of the fix continues in an -uninterrupted fashion. +as well as the cumulative strain applied, to :doc:`binary restart files +`. See the :doc:`read_restart ` command for info +on how to re-specify a fix in an input script that reads a restart file, +so that the operation of the fix continues in an uninterrupted fashion. .. note:: @@ -189,43 +194,41 @@ uninterrupted fashion. not contain the cumulative applied strain, will this keyword be necessary. -This fix can be used with the :doc:`fix_modify ` *temp* and -*press* options. The temperature and pressure computes used must be of -type *temp/uef* and *pressure/uef*\ . +These fixes can be used with the :doc:`fix_modify ` *temp* +and *press* options. The temperature and pressure computes used must be +of type *temp/uef* and *pressure/uef*\ . -This fix computes the same global scalar and vector quantities as :doc:`fix npt `. +These fixes compute the same global scalar and vector quantities as +:doc:`fix nvt andnpt `. -The fix is not invoked during :doc:`energy minimization `. +These fixes are not invoked during :doc:`energy minimization `. Restrictions """""""""""" -This fix is part of the UEF package. It is only enabled if LAMMPS -was built with that package. See the :doc:`Build package ` page for more info. +These fixes are part of the UEF package. They are only enabled if LAMMPS +was built with that package. See the :doc:`Build package +` page for more info. Due to requirements of the boundary conditions, when the *strain* keyword is set to zero (or unset), the initial simulation box must be cubic and have style triclinic. If the box is initially of type ortho, use :doc:`change_box ` before invoking the fix. -.. note:: - - When resuming from restart files, you may need to use :doc:`box tilt - large ` since LAMMPS has internal criteria from lattice - reduction that are not the same as the criteria in the numerical - lattice reduction algorithm. - Related commands """""""""""""""" -:doc:`fix nvt `, :doc:`fix nvt/sllod `, :doc:`compute temp/uef `, :doc:`compute pressure/uef `, :doc:`dump cfg/uef ` +:doc:`fix nvt `, :doc:`fix npt `, `fix nvt/sllod +:doc:`, `compute temp/uef `, +:doc::doc:`compute pressure/uef `, `dump cfg/uef +:doc:` Default """"""" -The default keyword values specific to this fix are exy = xyz, strain -= 0 0. The remaining defaults are the same as for :doc:`fix npt ` -except tchain = 1. The reason for this change is given in +The default keyword values specific to these fixes are exy = xyz, strain += 0 0. The remaining defaults are the same as for :doc:`fix nvt or npt +` except tchain = 1. The reason for this change is given in :doc:`fix nvt/sllod `. ---------- diff --git a/doc/src/fix_pimd.rst b/doc/src/fix_pimd.rst index 9735284280..838b9812ad 100644 --- a/doc/src/fix_pimd.rst +++ b/doc/src/fix_pimd.rst @@ -156,6 +156,8 @@ This fix is part of the REPLICA package. It is only enabled if LAMMPS was built with that package. See the :doc:`Build package ` page for more info. +Fix pid cannot be used with :doc:`lj units `. + A PIMD simulation can be initialized with a single data file read via the :doc:`read_data ` command. However, this means all quasi-beads in a ring polymer will have identical positions and diff --git a/doc/src/fix_sgcmc.rst b/doc/src/fix_sgcmc.rst new file mode 100644 index 0000000000..214c461a7c --- /dev/null +++ b/doc/src/fix_sgcmc.rst @@ -0,0 +1,188 @@ +.. index:: fix sgcmc + +fix sgcmc command +================= + +Syntax +"""""" + +.. parsed-literal:: + + fix ID group-ID sgcmc every_nsteps swap_fraction temperature deltamu ... + +* ID, group-ID are documented in :doc:`fix ` command +* sgcmc = style name of this fix command +* every_nsteps = number of MD steps between MC cycles +* swap_fraction = fraction of a full MC cycle carried out at each call (a value of 1.0 will perform as many trial moves as there are atoms) +* temperature = temperature that enters Boltzmann factor in Metropolis criterion (usually the same as MD temperature) +* deltamu = chemical potential difference(s) (`N-1` values must be provided, with `N` being the number of elements) +* Zero or more keyword/value pairs may be appended to fix definition line: + + .. parsed-literal:: + + keyword = *variance* or *randseed* or *window_moves* or *window_size* + *variance* kappa conc1 [conc2] ... [concN] + kappa = variance constraint parameter + conc1,conc2,... = target concentration(s) in the range 0.0-1.0 (*N-1* values must be provided, with *N* being the number of elements) + *randseed* N + N = seed for pseudo random number generator + *window_moves* N + N = number of times sampling window is moved during one MC cycle + *window_size* frac + frac = size of sampling window (must be between 0.5 and 1.0) + + +Examples +"""""""" + +.. code-block:: LAMMPS + + fix mc all sgcmc 50 0.1 400.0 -0.55 + fix vc all sgcmc 20 0.2 700.0 -0.7 randseed 324234 variance 2000.0 0.05 + fix 2 all sgcmc 20 0.1 700.0 -0.7 window_moves 20 + +Description +""""""""""" + +.. versionadded:: TBD + +This command allows to carry out parallel hybrid molecular +dynamics/Monte Carlo (MD/MC) simulations using the algorithms described +in :ref:`(Sadigh1) `. Simulations can be carried out in either +the semi-grand canonical (SGC) or variance constrained semi-grand +canonical (VC-SGC) ensemble :ref:`(Sadigh2) `. Only atom type +swaps are performed by the SGCMC fix. Relaxations are accounted for by +the molecular dynamics integration steps. + +This fix can be used with standard multi-element EAM potentials +(:doc:`pair styles eam/alloy or eam/fs `) + +The SGCMC fix can handle Finnis/Sinclair type EAM potentials where +:math:`\rho(r)` is atom-type specific, such that different elements can +contribute differently to the total electron density at an atomic site +depending on the identity of the element at that atomic site. + +------------ + +If this fix is applied, the regular MD simulation will be interrupted in +defined intervals to carry out a fraction of a Monte Carlo (MC) +cycle. The interval is set using the parameter *every_nsteps* which +determines how many MD integrator steps are taken between subsequent +calls to the MC routine. + +It is possible to carry out pure lattice MC simulations by setting +*every_nsteps* to 1 and not defining an integration fix such as NVE, +NPT etc. In that case, the particles will not move and only the MC +routine will be called to perform atom type swaps. + +The parameter *swap_fraction* determines how many MC trial steps are carried +out every time the MC routine is entered. It is measured in units of full MC +cycles where one full cycle, *swap_fraction=1*, corresponds to as many MC +trial steps as there are atoms. + +------------ + +The parameter *temperature* specifies the temperature that is used +to evaluate the Metropolis acceptance criterion. While it usually +should be set to the same value as the MD temperature there are cases +when it can be useful to use two different values for at least part of +the simulation, e.g., to speed up equilibration at low temperatures. + +------------ + +The parameter *deltamu* is used to set the chemical potential difference +in the SGC MC algorithm (see Eq. 16 in :ref:`Sadigh1 `). By +convention it is the difference of the chemical potentials of elements +`B`, `C` ..., with respect to element A. When the simulation includes +`N` elements, `N-1` values must be specified. + +------------ + +The variance-constrained SGC MC algorithm is activated if the keyword +*variance* is used. In that case the fix parameter *deltamu* determines +the effective average constraint in the parallel VC-SGC MC algorithm +(parameter :math:`\delta\mu_0` in Eq. (20) of :ref:`Sadigh1 +`). The parameter *kappa* specifies the variance constraint +(see Eqs. (20-21) in :ref:`Sadigh1 `). + +The parameter *conc* sets the target concentration (parameter +:math:`c_0` in Eqs. (20-21) of :ref:`Sadigh1 `). The atomic +concentrations refer to components `B`, `C` ..., with `A` being set +automatically. When the simulation includes `N` elements, `N-1` +concentration values must be specified. + +------------ + +There are several technical parameters that can be set via optional flags. + +*randseed* is expected to be a positive integer number and is used +to initialize the random number generator on each processor. + +*window_size* controls the size of the sampling window in a parallel MC +simulation. The size has to lie between 0.5 and 1.0. Normally, this +parameter should be left unspecified which instructs the code to choose +the optimal window size automatically (see Sect. III.B and Figure 6 in +:ref:`Sadigh1 ` for details). + +The number of times the window is moved during a MC cycle is set using +the parameter *window_moves* (see Sect. III.B in :ref:`Sadigh1 +` for details). + +------------ + +Restart, fix_modify, output, run start/stop, minimize info +========================================================== + +No information about this fix is written to restart files. + +The MC routine keeps track of the global concentration(s) as well as the +number of accepted and rejected trial swaps during each MC step. These +values are provided by the sgcmc fix in the form of a global vector that +can be accessed by various :doc:`output commands ` +components of the vector represent the following quantities: + +* 1 = The absolute number of accepted trial swaps during the last MC step +* 2 = The absolute number of rejected trial swaps during the last MC step +* 3 = The current global concentration of species *A* (= number of atoms of type 1 / total number of atoms) +* 4 = The current global concentration of species *B* (= number of atoms of type 2 / total number of atoms) +* ... +* N+2: The current global concentration of species *X* (= number of atoms of type *N* / total number of atoms) + +Restrictions +============ + +This fix is part of the MC package. It is only enabled if LAMMPS was +built with that package. See the :doc:`Build package ` +page for more info. + +At present the fix provides optimized subroutines for EAM type +potentials (see above) that calculate potential energy changes due to +*local* atom type swaps very efficiently. Other potentials are +supported by using the generic potential functions. This, however, will +lead to exceedingly slow simulations since it implies that the +energy of the *entire* system is recomputed at each MC trial step. If +other potentials are to be used it is strongly recommended to modify and +optimize the existing generic potential functions for this purpose. +Also, the generic energy calculation can not be used for parallel +execution i.e. it only works with a single MPI process. + +------------ + +Default +======= + +The optional parameters default to the following values: + +* *randseed* = 324234 +* *window_moves* = 8 +* *window_size* = automatic + +------------ + +.. _Sadigh1: + +**(Sadigh1)** B. Sadigh, P. Erhart, A. Stukowski, A. Caro, E. Martinez, and L. Zepeda-Ruiz, Phys. Rev. B **85**, 184203 (2012) + +.. _Sadigh2: + +**(Sadigh2)** B. Sadigh and P. Erhart, Phys. Rev. B **86**, 134204 (2012) 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. diff --git a/doc/src/pair_coul.rst b/doc/src/pair_coul.rst index 4e0793467b..f22bc974b0 100644 --- a/doc/src/pair_coul.rst +++ b/doc/src/pair_coul.rst @@ -174,11 +174,11 @@ shifted force model described in :ref:`Fennell `, given by: E = q_iq_j \left[ \frac{\mbox{erfc} (\alpha r)}{r} - \frac{\mbox{erfc} (\alpha r_c)}{r_c} + \left( \frac{\mbox{erfc} (\alpha r_c)}{r_c^2} + \frac{2\alpha}{\sqrt{\pi}}\frac{\exp (-\alpha^2 r^2_c)}{r_c} \right)(r-r_c) \right] \qquad r < r_c -where :math:`\alpha` is the damping parameter and erfc() is the -complementary error-function. The potential corrects issues in the -Wolf model (described below) to provide consistent forces and energies -(the Wolf potential is not differentiable at the cutoff) and smooth -decay to zero. +where :math:`\alpha` is the damping parameter and *erfc()* is the +complementary error-function. The potential corrects issues in the Wolf +model (described below) to provide consistent forces and energies (the +Wolf potential is not differentiable at the cutoff) and smooth decay to +zero. ---------- @@ -192,30 +192,32 @@ summation method, described in :ref:`Wolf `, given by: \frac{1}{2} \sum_{j \neq i} \frac{q_i q_j {\rm erf}(\alpha r_{ij})}{r_{ij}} \qquad r < r_c -where :math:`\alpha` is the damping parameter, and erc() and erfc() are -error-function and complementary error-function terms. This potential -is essentially a short-range, spherically-truncated, +where :math:`\alpha` is the damping parameter, and *erf()* and *erfc()* +are error-function and complementary error-function terms. This +potential is essentially a short-range, spherically-truncated, charge-neutralized, shifted, pairwise *1/r* summation. With a manipulation of adding and subtracting a self term (for i = j) to the -first and second term on the right-hand-side, respectively, and a -small enough :math:`\alpha` damping parameter, the second term shrinks and -the potential becomes a rapidly-converging real-space summation. With -a long enough cutoff and small enough :math:`\alpha` parameter, the energy and -forces calculated by the Wolf summation method approach those of the +first and second term on the right-hand-side, respectively, and a small +enough :math:`\alpha` damping parameter, the second term shrinks and the +potential becomes a rapidly-converging real-space summation. With a +long enough cutoff and small enough :math:`\alpha` parameter, the energy +and forces calculated by the Wolf summation method approach those of the Ewald sum. So it is a means of getting effective long-range interactions with a short-range potential. ---------- -Style *coul/streitz* is the Coulomb pair interaction defined as part -of the Streitz-Mintmire potential, as described in :ref:`this paper `, in which charge distribution about an atom is modeled -as a Slater 1\ *s* orbital. More details can be found in the referenced +Style *coul/streitz* is the Coulomb pair interaction defined as part of +the Streitz-Mintmire potential, as described in :ref:`this paper +`, in which charge distribution about an atom is modeled as a +Slater 1\ *s* orbital. More details can be found in the referenced paper. To fully reproduce the published Streitz-Mintmire potential, -which is a variable charge potential, style *coul/streitz* must be -used with :doc:`pair_style eam/alloy ` (or some other -short-range potential that has been parameterized appropriately) via -the :doc:`pair_style hybrid/overlay ` command. Likewise, -charge equilibration must be performed via the :doc:`fix qeq/slater ` command. For example: +which is a variable charge potential, style *coul/streitz* must be used +with :doc:`pair_style eam/alloy ` (or some other short-range +potential that has been parameterized appropriately) via the +:doc:`pair_style hybrid/overlay ` command. Likewise, +charge equilibration must be performed via the :doc:`fix qeq/slater +` command. For example: .. code-block:: LAMMPS diff --git a/doc/src/pair_pod.rst b/doc/src/pair_pod.rst new file mode 100644 index 0000000000..0aa6250dab --- /dev/null +++ b/doc/src/pair_pod.rst @@ -0,0 +1,97 @@ +.. index:: pair_style pod + +pair_style pod command +======================== + +Syntax +"""""" + +.. code-block:: LAMMPS + + pair_style pod + +Examples +"""""""" + +.. code-block:: LAMMPS + + pair_style pod + pair_coeff * * Ta_param.pod Ta_coefficients.pod Ta + +Description +""""""""""" + +.. versionadded:: TBD + +Pair style *pod* defines the proper orthogonal descriptor (POD) +potential :ref:`(Nguyen) `. The mathematical definition of +the POD potential is described from :doc:`fitpod `, which is +used to fit the POD potential to *ab initio* energy and force data. + +Only a single pair_coeff command is used with the *pod* style which +specifies a POD parameter file followed by a coefficient file. + +The coefficient file (``Ta_coefficients.pod``) contains coefficients for the +POD potential. The top of the coefficient file can contain any number of +blank and comment lines (start with #), but follows a strict format +after that. The first non-blank non-comment line must contain: + +* POD_coefficients: *ncoeff* + +This is followed by *ncoeff* coefficients, one per line. The coefficient +file is generated after training the POD potential using :doc:`fitpod +`. + +The POD parameter file (``Ta_param.pod``) can contain blank and comment lines +(start with #) anywhere. Each non-blank non-comment line must contain +one keyword/value pair. See :doc:`fitpod ` for the description +of all the keywords that can be assigned in the parameter file. + +As an example, if a LAMMPS indium phosphide simulation has 4 atoms +types, with the first two being indium and the third and fourth being +phophorous, the pair_coeff command would look like this: + +.. code-block:: LAMMPS + + pair_coeff * * pod InP_param.pod InP_coefficients.pod In In P P + +The first 2 arguments must be \* \* so as to span all LAMMPS atom types. +The two filenames are for the parameter and coefficient files, respectively. +The two trailing 'In' arguments map LAMMPS atom types 1 and 2 to the +POD 'In' element. The two trailing 'P' arguments map LAMMPS atom types +3 and 4 to the POD 'P' element. + +If a POD mapping value is specified as NULL, the mapping is not +performed. This can be used when a *pod* potential is used as part of +the *hybrid* pair style. The NULL values are placeholders for atom +types that will be used with other potentials. + +Examples about training and using POD potentials are found in the +directory lammps/examples/PACKAGES/pod. + +---------- + +Restrictions +"""""""""""" + +This style is part of the ML-POD package. It is only enabled if LAMMPS +was built with that package. See the :doc:`Build package +` page for more info. + +This pair style does not compute per-atom energies and per-atom stresses. + +Related commands +"""""""""""""""" + +:doc:`fitpod `, + +Default +""""""" + +none + +---------- + +.. _Nguyen20221: + +**(Nguyen)** Nguyen and Rohskopf, arXiv preprint arXiv:2209.02362 (2022). diff --git a/doc/src/pair_style.rst b/doc/src/pair_style.rst index 2249eb3c58..48daf34f17 100644 --- a/doc/src/pair_style.rst +++ b/doc/src/pair_style.rst @@ -314,6 +314,7 @@ accelerated styles exist. * :doc:`oxrna2/xstk ` - * :doc:`pace ` - Atomic Cluster Expansion (ACE) machine-learning potential * :doc:`pace/extrapolation ` - Atomic Cluster Expansion (ACE) machine-learning potential with extrapolation grades +* :doc:`pod ` - Proper orthogonal decomposition (POD) machine-learning potential * :doc:`peri/eps ` - peridynamic EPS potential * :doc:`peri/lps ` - peridynamic LPS potential * :doc:`peri/pmb ` - peridynamic PMB potential diff --git a/doc/src/pair_sw.rst b/doc/src/pair_sw.rst index 579e4c6f3f..7b4e52c3d9 100644 --- a/doc/src/pair_sw.rst +++ b/doc/src/pair_sw.rst @@ -176,9 +176,13 @@ are placeholders for atom types that will be used with other potentials. .. note:: - When the *threebody off* keyword is used, multiple pair_coeff commands may - be used to specific the pairs of atoms which don't require three-body term. - In these cases, the first 2 arguments are not required to be \* \*. + When the *threebody off* keyword is used, multiple pair_coeff + commands may be used to specific the pairs of atoms which don't + require three-body term. In these cases, the first 2 arguments are + not required to be \* \*, the potential parameter file is only read + by the first :doc:`pair_coeff command ` and the element + to atom type mappings must be consistent across all *pair_coeff* + statements. If not LAMMPS will abort with an error. Stillinger-Weber files in the *potentials* directory of the LAMMPS distribution have a ".sw" suffix. Lines that are not blank or diff --git a/doc/src/pair_table.rst b/doc/src/pair_table.rst index 79eb8f5b42..e5b05a3a23 100644 --- a/doc/src/pair_table.rst +++ b/doc/src/pair_table.rst @@ -120,6 +120,13 @@ best effect: ---------- +Suitable tables in the correct format for use with these pair styles can +be created by LAMMPS itself using the :doc:`pair_write ` +command. In combination with the :doc:`pair style python ` +this can be a powerful mechanism to implement and test tables for use +with LAMMPS. Another option to generate tables is the Python code in +the ``tools/tabulate`` folder of the LAMMPS source code distribution. + The format of a tabulated file has an (optional) header followed by a series of one or more sections, defined as follows (without the parenthesized comments). The header must start with a `#` character diff --git a/doc/src/pair_tracker.rst b/doc/src/pair_tracker.rst index 04967e952d..e34bedca2c 100644 --- a/doc/src/pair_tracker.rst +++ b/doc/src/pair_tracker.rst @@ -174,8 +174,8 @@ the specified attribute. Restrictions """""""""""" -This fix is part of the MISC package. It is only enabled if LAMMPS -was built with that package. See the :doc:`Build package +This pair style is part of the MISC package. It is only enabled if +LAMMPS was built with that package. See the :doc:`Build package ` page for more info. This pair style is currently incompatible with granular pair styles diff --git a/doc/src/pair_ylz.rst b/doc/src/pair_ylz.rst index 5c3738f509..17cf0ca639 100644 --- a/doc/src/pair_ylz.rst +++ b/doc/src/pair_ylz.rst @@ -82,7 +82,7 @@ mixing as described below: * :math:`\epsilon` = well depth (energy units) * :math:`\sigma` = minimum effective particle radii (distance units) -* :math:`\zeta` = tune parameter for the slope of the attractive branch +* :math:`\zeta` = tuning parameter for the slope of the attractive branch * :math:`\mu` = parameter related to bending rigidity * :math:`\beta` = parameter related to the spontaneous curvature * cutoff (distance units) diff --git a/doc/src/python.rst b/doc/src/python.rst index aad2f636d3..5316fb28a5 100644 --- a/doc/src/python.rst +++ b/doc/src/python.rst @@ -8,14 +8,25 @@ Syntax .. parsed-literal:: - python func keyword args ... + python mode keyword args ... -* func = name of Python function -* one or more keyword/args pairs must be appended +* mode = *source* or name of Python function + + if mode is *source*: .. parsed-literal:: - keyword = *invoke* or *input* or *return* or *format* or *length* or *file* or *here* or *exists* or *source* + keyword = *here* or name of a *Python file* + *here* arg = inline + inline = one or more lines of Python code which defines func + must be a single argument, typically enclosed between triple quotes + *Python file* = name of a file with Python code which will be executed immediately + +* if *mode* is the name of a Python function, one or more keywords with/without arguments must be appended + + .. parsed-literal:: + + keyword = *invoke* or *input* or *return* or *format* or *length* or *file* or *here* or *exists* *invoke* arg = none = invoke the previously defined Python function *input* args = N i1 i2 ... iN N = # of inputs to function @@ -24,7 +35,7 @@ Syntax SELF = reference to LAMMPS itself which can be accessed by Python function variable = v_name, where name = name of LAMMPS variable, e.g. v_abc *return* arg = varReturn - varReturn = v_name = LAMMPS variable name which return value of function will be assigned to + varReturn = v_name = LAMMPS variable name which the return value of the Python function will be assigned to *format* arg = fstring with M characters M = N if no return value, where N = # of inputs M = N+1 if there is a return value @@ -38,10 +49,6 @@ Syntax inline = one or more lines of Python code which defines func must be a single argument, typically enclosed between triple quotes *exists* arg = none = Python code has been loaded by previous python command - *source* arg = *filename* or *inline* - filename = file of Python code which will be executed immediately - inline = one or more lines of Python code which will be executed immediately - must be a single argument, typically enclosed between triple quotes Examples """""""" @@ -70,80 +77,105 @@ Examples lmp.command("pair_style lj/cut ${cut}") # LAMMPS commands lmp.command("pair_coeff * * 1.0 1.0") lmp.command("run 100") - """ + """ + + python source funcdef.py + + python source here "from lammps import lammps" + Description """"""""""" -Define a Python function or execute a previously defined function or -execute some arbitrary python code. +The *python* command allows interfacing LAMMPS with an embedded Python +interpreter and enables either executing arbitrary python code in that +interpreter, registering a Python function for future execution (as a +python style variable, from a fix interfaced with python, or for direct +invocation), or invoking such a previously registered function. + Arguments, including LAMMPS variables, can be passed to the function -from the LAMMPS input script and a value returned by the Python -function to a LAMMPS variable. The Python code for the function can -be included directly in the input script or in a separate Python file. -The function can be standard Python code or it can make "callbacks" to -LAMMPS through its library interface to query or set internal values -within LAMMPS. This is a powerful mechanism for performing complex -operations in a LAMMPS input script that are not possible with the -simple input script and variable syntax which LAMMPS defines. Thus -your input script can operate more like a true programming language. +from the LAMMPS input script and a value returned by the Python function +assigned to a LAMMPS variable. The Python code for the function can be included +directly in the input script or in a separate Python file. The function +can be standard Python code or it can make "callbacks" to LAMMPS through +its library interface to query or set internal values within LAMMPS. +This is a powerful mechanism for performing complex operations in a +LAMMPS input script that are not possible with the simple input script +and variable syntax which LAMMPS defines. Thus your input script can +operate more like a true programming language. Use of this command requires building LAMMPS with the PYTHON package which links to the Python library so that the Python interpreter is embedded in LAMMPS. More details about this process are given below. There are two ways to invoke a Python function once it has been -defined. One is using the *invoke* keyword. The other is to assign +registered. One is using the *invoke* keyword. The other is to assign the function to a :doc:`python-style variable ` defined in -your input script. Whenever the variable is evaluated, it will -execute the Python function to assign a value to the variable. Note -that variables can be evaluated in many different ways within LAMMPS. -They can be substituted for directly in an input script. Or they can -be passed to various commands as arguments, so that the variable is -evaluated during a simulation run. +your input script. Whenever the variable is evaluated, it will execute +the Python function to assign a value to the variable. Note that +variables can be evaluated in many different ways within LAMMPS. They +can be substituted with their result directly in an input script, or +they can be passed to various commands as arguments, so that the +variable is evaluated during a simulation run. -A broader overview of how Python can be used with LAMMPS is given on -the :doc:`Python ` doc page. There is an examples/python -directory which illustrates use of the python command. +A broader overview of how Python can be used with LAMMPS is given in the +:doc:`Use Python with LAMMPS ` section of the +documentation. There also is an ``examples/python`` directory which +illustrates use of the python command. ---------- -The *func* setting specifies the name of the Python function. The -code for the function is defined using the *file* or *here* keywords -as explained below. In case of the *source* keyword, the name of -the function is ignored. +The first argument of the *python* command is either the *source* +keyword or the name of a Python function. This defines the mode +of the python command. + +.. versionchanged:: TBD + +If the *source* keyword is used, it is followed by either a file name or +the *here* keyword. No other keywords can be used. The *here* keyword +is followed by a string with python commands, either on a single line +enclosed in quotes, or as multiple lines enclosed in triple quotes. +These Python commands will be passed to the python interpreter and +executed immediately without registering a Python function for future +execution. The code will be loaded into and run in the "main" module of +the Python interpreter. This allows running arbitrary Python code at +any time while processing the LAMMPS input file. This can be used to +pre-load Python modules, initialize global variables, define functions +or classes, or perform operations using the python programming language. +The Python code will be executed in parallel on all MPI processes. No +arguments can be passed. + +In all other cases, the first argument is the name of a Python function +that will be registered with LAMMPS for future execution. The function +may already be defined (see *exists* keyword) or must be defined using +the *file* or *here* keywords as explained below. If the *invoke* keyword is used, no other keywords can be used, and a -previous python command must have defined the Python function +previous *python* command must have registered the Python function referenced by this command. This invokes the Python function with the -previously defined arguments and return value processed as explained -below. You can invoke the function as many times as you wish in your -input script. - -If the *source* keyword is used, no other keywords can be used. -The argument can be a filename or a string with python commands, -either on a single line enclosed in quotes, or as multiple lines -enclosed in triple quotes. These python commands will be passed -to the python interpreter and executed immediately without registering -a python function for future execution. +previously defined arguments and the return value is processed as +explained below. You can invoke the function as many times as you wish +in your input script. The *input* keyword defines how many arguments *N* the Python function -expects. If it takes no arguments, then the *input* keyword should -not be used. Each argument can be specified directly as a value, -e.g. 6 or 3.14159 or abc (a string of characters). The type of each +expects. If it takes no arguments, then the *input* keyword should not +be used. Each argument can be specified directly as a value, e.g. '6' +or '3.14159' or 'abc' (a string of characters). The type of each argument is specified by the *format* keyword as explained below, so that Python will know how to interpret the value. If the word SELF is used for an argument it has a special meaning. A pointer is passed to -the Python function which it converts into a reference to LAMMPS -itself. This enables the function to call back to LAMMPS through its -library interface as explained below. This allows the Python function -to query or set values internal to LAMMPS which can affect the -subsequent execution of the input script. A LAMMPS variable can also -be used as an argument, specified as v_name, where "name" is the name -of the variable. Any style of LAMMPS variable can be used, as defined -by the :doc:`variable ` command. Each time the Python -function is invoked, the LAMMPS variable is evaluated and its value is -passed to the Python function. +the Python function which it can convert into a reference to LAMMPS +itself using the :doc:`LAMMPS Python module `. This +enables the function to call back to LAMMPS through its library +interface as explained below. This allows the Python function to query +or set values internal to LAMMPS which can affect the subsequent +execution of the input script. A LAMMPS variable can also be used as an +argument, specified as v_name, where "name" is the name of the variable. +Any style of LAMMPS variable returning a scalar or a string can be used, +as defined by the :doc:`variable ` command. The *format* +keyword must be used to set the type of data that is passed to Python. +Each time the Python function is invoked, the LAMMPS variable is +evaluated and its value is passed to the Python function. The *return* keyword is only needed if the Python function returns a value. The specified *varReturn* must be of the form v_name, where @@ -153,8 +185,9 @@ numeric or string value, as specified by the *format* keyword. As explained on the :doc:`variable ` doc page, the definition of a python-style variable associates a Python function name with the -variable. This must match the *func* setting for this command. For -example these two commands would be self-consistent: +variable. This must match the *Python function name* first argument of +the *python* command. For example these two commands would be +consistent: .. code-block:: LAMMPS @@ -163,21 +196,22 @@ example these two commands would be self-consistent: The two commands can appear in either order in the input script so long as both are specified before the Python function is invoked for -the first time. +the first time. Afterwards, the variable 'foo' is associated with +the Python function 'myMultiply'. -The *format* keyword must be used if the *input* or *return* keyword -is used. It defines an *fstring* with M characters, where M = sum of +The *format* keyword must be used if the *input* or *return* keywords +are used. It defines an *fstring* with M characters, where M = sum of number of inputs and outputs. The order of characters corresponds to the N inputs, followed by the return value (if it exists). Each character must be one of the following: "i" for integer, "f" for -floating point, "s" for string, or "p" for SELF. Each character -defines the type of the corresponding input or output value of the -Python function and affects the type conversion that is performed -internally as data is passed back and forth between LAMMPS and Python. -Note that it is permissible to use a :doc:`python-style variable ` in a LAMMPS command that allows for an -equal-style variable as an argument, but only if the output of the -Python function is flagged as a numeric value ("i" or "f") via the -*format* keyword. +floating point, "s" for string, or "p" for SELF. Each character defines +the type of the corresponding input or output value of the Python +function and affects the type conversion that is performed internally as +data is passed back and forth between LAMMPS and Python. Note that it +is permissible to use a :doc:`python-style variable ` in a +LAMMPS command that allows for an equal-style variable as an argument, +but only if the output of the Python function is flagged as a numeric +value ("i" or "f") via the *format* keyword. If the *return* keyword is used and the *format* keyword specifies the output as a string, then the default maximum length of that string is @@ -192,12 +226,13 @@ truncated. Either the *file*, *here*, or *exists* keyword must be used, but only one of them. These keywords specify what Python code to load into the -Python interpreter. The *file* keyword gives the name of a file, -which should end with a ".py" suffix, which contains Python code. The -code will be immediately loaded into and run in the "main" module of -the Python interpreter. Note that Python code which contains a -function definition does not "execute" the function when it is run; it -simply defines the function so that it can be invoked later. +Python interpreter. The *file* keyword gives the name of a file +containing Python code, which should end with a ".py" suffix. The code +will be immediately loaded into and run in the "main" module of the +Python interpreter. The Python code will be executed in parallel on all +MPI processes. Note that Python code which contains a function +definition does not "execute" the function when it is run; it simply +defines the function so that it can be invoked later. The *here* keyword does the same thing, except that the Python code follows as a single argument to the *here* keyword. This can be done @@ -208,14 +243,15 @@ proper indentation, blank lines, and comments, as desired. See the how triple quotes can be used as part of input script syntax. The *exists* keyword takes no argument. It means that Python code -containing the required Python function defined by the *func* setting, -is assumed to have been previously loaded by another python command. +containing the required Python function with the given name has already +been executed, for example by a *python source* command or in the same +file that was used previously with the *file* keyword. -Note that the Python code that is loaded and run must contain a -function with the specified *func* name. To operate properly when -later invoked, the function code must match the *input* and -*return* and *format* keywords specified by the python command. -Otherwise Python will generate an error. +Note that the Python code that is loaded and run must contain a function +with the specified function name. To operate properly when later +invoked, the function code must match the *input* and *return* and +*format* keywords specified by the python command. Otherwise Python +will generate an error. ---------- @@ -225,19 +261,19 @@ LAMMPS. Whether you load Python code from a file or directly from your input script, via the *file* and *here* keywords, the code can be identical. It must be indented properly as Python requires. It can contain -comments or blank lines. If the code is in your input script, it -cannot however contain triple-quoted Python strings, since that will -conflict with the triple-quote parsing that the LAMMPS input script -performs. +comments or blank lines. If the code is in your input script, it cannot +however contain triple-quoted Python strings, since that will conflict +with the triple-quote parsing that the LAMMPS input script performs. All the Python code you specify via one or more python commands is -loaded into the Python "main" module, i.e. __main__. The code can -define global variables or statements that are outside of function -definitions. It can contain multiple functions, only one of which -matches the *func* setting in the python command. This means you can -use the *file* keyword once to load several functions, and the -*exists* keyword thereafter in subsequent python commands to access -the other functions previously loaded. +loaded into the Python "main" module, i.e. ``__name__ == '__main__'``. +The code can define global variables, define global functions, define +classes or execute statements that are outside of function definitions. +It can contain multiple functions, only one of which matches the *func* +setting in the python command. This means you can use the *file* +keyword once to load several functions, and the *exists* keyword +thereafter in subsequent python commands to register the other functions +that were previously loaded with LAMMPS. A Python function you define (or more generally, the code you load) can import other Python modules or classes, it can make calls to other @@ -264,12 +300,13 @@ outside the function: nvaluelast = nvalue return nvalue -Nsteplast stores the previous timestep the function was invoked -(passed as an argument to the function). Nvaluelast stores the return -value computed on the last function invocation. If the function is -invoked again on the same timestep, the previous value is simply -returned, without re-computing it. The "global" statement inside the -Python function allows it to overwrite the global variables. +The variable 'nsteplast' stores the previous timestep the function was +invoked (passed as an argument to the function). The variable +'nvaluelast' stores the return value computed on the last function +invocation. If the function is invoked again on the same timestep, the +previous value is simply returned, without re-computing it. The +"global" statement inside the Python function allows it to overwrite the +global variables from within the local context of the function. Note that if you load Python code multiple times (via multiple python commands), you can overwrite previously loaded variables and functions @@ -285,19 +322,39 @@ copy of the Python function(s) you define. There is no connection between the Python interpreters running on different processors. This implies three important things. -First, if you put a print statement in your Python function, you will -see P copies of the output, when running on P processors. If the -prints occur at (nearly) the same time, the P copies of the output may -be mixed together. Welcome to the world of parallel programming and -debugging. +First, if you put a print or other statement creating output to the +screen in your Python function, you will see P copies of the output, +when running on P processors. If the prints occur at (nearly) the same +time, the P copies of the output may be mixed together. When loading +the LAMMPS Python module into the embedded Python interpreter, it is +possible to pass the pointer to the current LAMMPS class instance and +via the Python interface to the LAMMPS library interface, it is possible +to determine the MPI rank of the current process and thus adapt the +Python code so that output will only appear on MPI rank 0. The +following LAMMPS input demonstrates how this could be done. The text +'Hello, LAMMPS!' should be printed only once, even when running LAMMPS +in parallel. -Second, if your Python code loads modules that are not pre-loaded by -the Python library, then it will load the module from disk. This may -be a bottleneck if 1000s of processors try to load a module at the -same time. On some large supercomputers, loading of modules from disk -by Python may be disabled. In this case you would need to pre-build a -Python library that has the required modules pre-loaded and link -LAMMPS with that library. +.. code-block:: LAMMPS + + python python_hello input 1 SELF format p here """ + def python_hello(handle): + from lammps import lammps + lmp = lammps(ptr=handle) + me = lmp.extract_setting('world_rank') + if me == 0: + print('Hello, LAMMPS!') + """ + + python python_hello invoke + +If your Python code loads Python modules that are not pre-loaded by the +Python library, then it will load the module from disk. This may be a +bottleneck if 1000s of processors try to load a module at the same time. +On some large supercomputers, loading of modules from disk by Python may +be disabled. In this case you would need to pre-build a Python library +that has the required modules pre-loaded and link LAMMPS with that +library. Third, if your Python code calls back to LAMMPS (discussed in the next section) and causes LAMMPS to perform an MPI operation requires @@ -315,22 +372,21 @@ Python function is as follows: .. code-block:: python - def foo(lmpptr,...): + def foo(handle,...): from lammps import lammps - lmp = lammps(ptr=lmpptr) + lmp = lammps(ptr=handle) lmp.command('print "Hello from inside Python"') ... -The function definition must include a variable (lmpptr in this case) -which corresponds to SELF in the python command. The first line of the -function imports the :doc:`"lammps" Python module `. -The second line creates a Python object ``lmp`` which -wraps the instance of LAMMPS that called the function. The "ptr=lmpptr" -argument is what makes that happen. The third line invokes the -command() function in the LAMMPS library interface. It takes a single -string argument which is a LAMMPS input script command for LAMMPS to -execute, the same as if it appeared in your input script. In this case, -LAMMPS should output +The function definition must include a variable ('handle' in this case) +which corresponds to SELF in the *python* command. The first line of +the function imports the :doc:`"lammps" Python module `. +The second line creates a Python object ``lmp`` which wraps the instance +of LAMMPS that called the function. The 'ptr=handle' argument is what +makes that happen. The third line invokes the command() function in the +LAMMPS library interface. It takes a single string argument which is a +LAMMPS input script command for LAMMPS to execute, the same as if it +appeared in your input script. In this case, LAMMPS should output .. parsed-literal:: @@ -344,8 +400,8 @@ The :doc:`Python_head` page describes the syntax for how Python wraps the various functions included in the LAMMPS library interface. -A more interesting example is in the examples/python/in.python script -which loads and runs the following function from examples/python/funcs.py: +A more interesting example is in the ``examples/python/in.python`` script +which loads and runs the following function from ``examples/python/funcs.py``: .. code-block:: python @@ -495,24 +551,35 @@ Restrictions """""""""""" This command is part of the PYTHON package. It is only enabled if -LAMMPS was built with that package. See the :doc:`Build package ` page for more info. +LAMMPS was built with that package. See the :doc:`Build package +` page for more info. -Building LAMMPS with the PYTHON package will link LAMMPS with the -Python library on your system. Settings to enable this are in the +Building LAMMPS with the PYTHON package will link LAMMPS with the Python +library on your system. Settings to enable this are in the lib/python/Makefile.lammps file. See the lib/python/README file for information on those settings. -If you use Python code which calls back to LAMMPS, via the SELF input argument -explained above, there is an extra step required when building LAMMPS. LAMMPS -must also be built as a shared library and your Python function must be able to -load the :doc:`"lammps" Python module ` that wraps the LAMMPS -library interface. These are the same steps required to use Python by itself -to wrap LAMMPS. Details on these steps are explained on the :doc:`Python -` doc page. Note that it is important that the stand-alone LAMMPS -executable and the LAMMPS shared library be consistent (built from the same -source code files) in order for this to work. If the two have been built at +If you use Python code which calls back to LAMMPS, via the SELF input +argument explained above, there is an extra step required when building +LAMMPS. LAMMPS must also be built as a shared library and your Python +function must be able to load the :doc:`"lammps" Python module +` that wraps the LAMMPS library interface. These are the +same steps required to use Python by itself to wrap LAMMPS. Details on +these steps are explained on the :doc:`Python ` doc page. +Note that it is important that the stand-alone LAMMPS executable and the +LAMMPS shared library be consistent (built from the same source code +files) in order for this to work. If the two have been built at different times using different source files, problems may occur. +Another limitation of calling back to Python from the LAMMPS module +using the *python* command in a LAMMPS input is that both, the Python +interpreter and LAMMPS, must be linked to the same Python runtime as a +shared library. If the Python interpreter is linked to Python +statically (which seems to happen with Conda) then loading the shared +LAMMPS library will create a second python "main" module that hides the +one from the Python interpreter and all previous defined function and +global variables will become invisible. + Related commands """""""""""""""" diff --git a/doc/src/read_data.rst b/doc/src/read_data.rst index 961b92c83e..453208ed3f 100644 --- a/doc/src/read_data.rst +++ b/doc/src/read_data.rst @@ -340,16 +340,20 @@ and are called "tilt factors" because they are the amount of displacement applied to faces of an originally orthogonal box to transform it into the parallelepiped. -By default, the tilt factors (xy,xz,yz) can not skew the box more than -half the distance of the corresponding parallel box length. For -example, if xlo = 2 and xhi = 12, then the x box length is 10 and the -xy tilt factor must be between -5 and 5. Similarly, both xz and yz -must be between -(xhi-xlo)/2 and +(yhi-ylo)/2. Note that this is not -a limitation, since if the maximum tilt factor is 5 (as in this -example), then configurations with tilt = ..., -15, -5, 5, 15, 25, -... are all geometrically equivalent. If you wish to define a box -with tilt factors that exceed these limits, you can use the :doc:`box tilt ` command, with a setting of *large*\ ; a setting of -*small* is the default. +The tilt factors (xy,xz,yz) should not skew the box more than half the +distance of the corresponding parallel box length. For example, if +:math:`x_\text{lo} = 2` and :math:`x_\text{hi} = 12`, then the :math:`x` +box length is 10 and the :math:`xy` tilt factor must be between +:math:`-5` and :math:`5`. Similarly, both :math:`xz` and :math:`yz` +must be between :math:`-(x_\text{hi}-x_\text{lo})/2` and +:math:`+(y_\text{hi}-y_\text{lo})/2`. Note that this is not a +limitation, since if the maximum tilt factor is 5 (as in this example), +then configurations with tilt :math:`= \dots, -15`, :math:`-5`, +:math:`5`, :math:`15`, :math:`25, \dots` are all geometrically +equivalent. Simulations with large tilt factors will run inefficiently, +since they require more ghost atoms and thus more communication. With +very large tilt factors, LAMMPS will eventually produce incorrect +trajectories and stop with errors due to lost atoms or similar. See the :doc:`Howto triclinic ` page for a geometric description of triclinic boxes, as defined by LAMMPS, and diff --git a/doc/src/reset_atom_ids.rst b/doc/src/reset_atom_ids.rst deleted file mode 100644 index e83d65d546..0000000000 --- a/doc/src/reset_atom_ids.rst +++ /dev/null @@ -1,94 +0,0 @@ -.. index:: reset_atom_ids - -reset_atom_ids command -====================== - -Syntax -"""""" - -.. code-block:: LAMMPS - - reset_atom_ids keyword values ... - - * zero or more keyword/value pairs may be appended - * keyword = *sort* - -.. parsed-literal:: - - *sort* value = *yes* or *no* - -Examples -"""""""" - -.. code-block:: LAMMPS - - reset_atom_ids - reset_atom_ids sort yes - -Description -""""""""""" - -Reset atom IDs for the system, including all the global IDs stored -for bond, angle, dihedral, improper topology data. This will -create a set of IDs that are numbered contiguously from 1 to N -for a N atoms system. - -This can be useful to do after performing a "delete_atoms" command for -a molecular system. The delete_atoms compress yes option will not -perform this operation due to the existence of bond topology. It can -also be useful to do after any simulation which has lost atoms, -e.g. due to atoms moving outside a simulation box with fixed -boundaries (see the "boundary command"), or due to evaporation (see -the "fix evaporate" command). - -If the *sort* keyword is used with a setting of *yes*, then the -assignment of new atom IDs will be the same no matter how many -processors LAMMPS is running on. This is done by first doing a -spatial sort of all the atoms into bins and sorting them within each -bin. Because the set of bins is independent of the number of -processors, this enables a consistent assignment of new IDs to each -atom. - -This can be useful to do after using the "create_atoms" command and/or -"replicate" command. In general those commands do not guarantee -assignment of the same atom ID to the same physical atom when LAMMPS -is run on different numbers of processors. Enforcing consistent IDs -can be useful for debugging or comparing output from two different -runs. - -Note that the spatial sort requires communication of atom IDs and -coordinates between processors in an all-to-all manner. This is done -efficiently in LAMMPS, but it is more expensive than how atom IDs are -reset without sorting. - -Note that whether sorting or not, the resetting of IDs is not a -compression, where gaps in atom IDs are removed by decrementing atom -IDs that are larger. Instead the IDs for all atoms are erased, and -new IDs are assigned so that the atoms owned by an individual -processor have consecutive IDs, as the :doc:`create_atoms -` command explains. - -.. note:: - - If this command is used before a :doc:`pair style ` is - defined, an error about bond topology atom IDs not being found may - result. This is because the cutoff distance for ghost atom - communication was not sufficient to find atoms in bonds, angles, etc - that are owned by other processors. The :doc:`comm_modify cutoff ` command can be used to correct this issue. - Or you can define a pair style before using this command. If you do - the former, you should unset the comm_modify cutoff after using - reset_atom_ids so that subsequent communication is not inefficient. - -Restrictions -"""""""""""" -none - -Related commands -"""""""""""""""" - -:doc:`delete_atoms ` - -Default -""""""" - -By default, *sort* is no. diff --git a/doc/src/reset_atoms.rst b/doc/src/reset_atoms.rst new file mode 100644 index 0000000000..8643eaf725 --- /dev/null +++ b/doc/src/reset_atoms.rst @@ -0,0 +1,283 @@ +.. index:: reset_atoms + +reset_atoms command +=================== + +Syntax +"""""" + +.. code-block:: LAMMPS + + reset_atoms property arguments ... + +* property = *id* or *image* or *mol* +* additional arguments depend on the property + + .. code-block:: LAMMPS + + reset_atoms id keyword value ... + + * zero or more keyword/value pairs can be appended + * keyword = *sort* + + .. parsed-literal:: + + *sort* value = *yes* or *no* + + .. code-block:: LAMMPS + + reset_atoms image group-ID + + * group-ID = ID of group of atoms whose image flags will be reset + + .. code-block:: LAMMPS + + reset atoms mol group-ID keyword value ... + + * group-ID = ID of group of atoms whose molecule IDs will be reset + * zero or more keyword/value pairs can be appended + * keyword = *compress* or *offset* or *single* + + .. parsed-literal:: + + *compress* value = *yes* or *no* + *offset* value = *Noffset* >= -1 + *single* value = *yes* or *no* to treat single atoms (no bonds) as molecules + + +Examples +"""""""" + +.. code-block:: LAMMPS + + reset_atoms id + reset_atoms id sort yes + reset_atoms image all + reset_atoms image mobile + reset_atoms mol all + reset_atoms mol all offset 10 single yes + reset_atoms mol solvent compress yes offset 100 + reset_atoms mol solvent compress no + + +Description +""""""""""" + +.. versionadded:: TBD + +The *reset_atoms* command resets the values of a specified atom +property. In contrast to the set command, it does this in a +collective manner which resets the values for many atoms in a +self-consistent way. This is often useful when the simulated system +has undergone significant modifications like adding or removing atoms +or molecules, joining data files, changing bonds, or large-scale +diffusion. + +The new values can be thought of as a *reset*, similar to values atoms +would have if a new data file were being read or a new simulation +performed. Note that the set command also resets atom properties to +new values, but it treats each atom independently. + +The *property* setting can be *id* or *image* or *mol*. For *id*, the +IDs of all the atoms are reset to contiguous values. For *image*, the +image flags of atoms in the specified *group-ID* are reset so that at +least one atom in each molecule is in the simulation box (image flag = +0). For *mol*, the molecule IDs of all atoms are reset to contiguous +values. + +More details on these operations and their arguments or optional +keyword/value settings are given below. + +---------- + +*Property id* + +Reset atom IDs for the entire system, including all the global IDs +stored for bond, angle, dihedral, improper topology data. This will +create a set of IDs that are numbered contiguously from 1 to N for a N +atoms system. + +This can be useful to do after performing a "delete_atoms" command for +a molecular system. The delete_atoms compress yes option will not +perform this operation due to the existence of bond topology. It can +also be useful to do after any simulation which has lost atoms, +e.g. due to atoms moving outside a simulation box with fixed +boundaries (see the "boundary command"), or due to evaporation (see +the "fix evaporate" command). + +If the *sort* keyword is used with a setting of *yes*, then the +assignment of new atom IDs will be the same no matter how many +processors LAMMPS is running on. This is done by first doing a +spatial sort of all the atoms into bins and sorting them within each +bin. Because the set of bins is independent of the number of +processors, this enables a consistent assignment of new IDs to each +atom. + +This can be useful to do after using the "create_atoms" command and/or +"replicate" command. In general those commands do not guarantee +assignment of the same atom ID to the same physical atom when LAMMPS +is run on different numbers of processors. Enforcing consistent IDs +can be useful for debugging or comparing output from two different +runs. + +Note that the spatial sort requires communication of atom IDs and +coordinates between processors in an all-to-all manner. This is done +efficiently in LAMMPS, but it is more expensive than how atom IDs are +reset without sorting. + +Note that whether sorting or not, the resetting of IDs is not a +compression, where gaps in atom IDs are removed by decrementing atom +IDs that are larger. Instead the IDs for all atoms are erased, and +new IDs are assigned so that the atoms owned by an individual +processor have consecutive IDs, as the :doc:`create_atoms +` command explains. + +.. note:: + + If this command is used before a :doc:`pair style ` is + defined, an error about bond topology atom IDs not being found may + result. This is because the cutoff distance for ghost atom + communication was not sufficient to find atoms in bonds, angles, etc + that are owned by other processors. The :doc:`comm_modify cutoff + ` command can be used to correct this issue. Or you can + define a pair style before using this command. If you do the former, + you should unset the *comm_modify cutoff* after using *reset + atoms id* so that subsequent communication is not inefficient. + +---------- + +*Property image* + +Reset the image flags of atoms so that at least one atom in each +molecule has an image flag of 0. Molecular topology is respected so +that if the molecule straddles a periodic simulation box boundary, the +images flags of all atoms in the molecule will be consistent. This +avoids inconsistent image flags that could result from resetting all +image flags to zero with the :doc:`set ` command. + +.. note:: + + If the system has no bonds, there is no reason to use this command, + since image flags for different atoms do not need to be + consistent. Use the :doc:`set ` command with its *image* + keyword instead. + +Only image flags for atoms in the specified *group-ID* are reset; all +others remain unchanged. No check is made for whether the group +covers complete molecule fragments and thus whether the command will +result in inconsistent image flags. + +Molecular fragments are identified by the algorithm used by the +:doc:`compute fragment/atom ` command. For each +fragment the average of the largest and the smallest image flag in +each direction across all atoms in the fragment is computed and +subtracted from the current image flag in the same direction. + +This can be a useful operation to perform after running longer +equilibration runs of mobile systems where molecules would pass +through the system multiple times and thus produce non-zero image +flags. + +.. note:: + + Same as explained for the :doc:`compute fragment/atom + ` command, molecules are identified using the + current bond topology. This will **not** account for bonds broken by + the :doc:`bond_style quartic ` command, because this + bond style does not perform a full update of the bond topology data + structures within LAMMPS. In that case, using the :doc:`delete_bonds + all bond 0 remove ` will permanently delete such + broken bonds and should thus be used first. + +---------- + +*Property mol* + +Reset molecule IDs for a specified group of atoms based on current +bond connectivity. This will typically create a new set of molecule +IDs for atoms in the group. Only molecule IDs for atoms in the +specified *group-ID* are reset; molecule IDs for atoms not in the +group are not changed. + +For purposes of this operation, molecules are identified by the current +bond connectivity in the system, which may or may not be consistent with +the current molecule IDs. A molecule in this context is a set of atoms +connected to each other with explicit bonds. The specific algorithm +used is the one of :doc:`compute fragment/atom ` +Once the molecules are identified and a new molecule ID computed for +each, this command will update the current molecule ID for all atoms in +the group with the new molecule ID. Note that if the group excludes +atoms within molecules, one (physical) molecule may become two or more +(logical) molecules. For example if the group excludes atoms in the +middle of a linear chain, then each end of the chain is considered an +independent molecule and will be assigned a different molecule ID. + +This can be a useful operation to perform after running reactive +molecular dynamics run with :doc:`fix bond/react `, +:doc:`fix bond/create `, or :doc:`fix bond/break +`, all of which can change molecule topologies. It can +also be useful after molecules have been deleted with the +:doc:`delete_atoms ` command or after a simulation which +has lost molecules, e.g. via the :doc:`fix evaporate ` +command. + +The *compress* keyword determines how new molecule IDs are computed. If +the setting is *yes* (the default) and there are N molecules in the +group, the new molecule IDs will be a set of N contiguous values. See +the *offset* keyword for details on selecting the range of these values. +If the setting is *no*, the molecule ID of every atom in the molecule +will be set to the smallest atom ID of any atom in the molecule. + +The *single* keyword determines whether single atoms (not bonded to +another atom) are treated as one-atom molecules or not, based on the +*yes* or *no* setting. If the setting is *no* (the default), their +molecule IDs are set to 0. This setting can be important if the new +molecule IDs will be used as input to other commands such as +:doc:`compute chunk/atom molecule ` or :doc:`fix +rigid molecule `. + +The *offset* keyword is only used if the *compress* setting is *yes*. +Its default value is *Noffset* = -1. In that case, if the specified +group is *all*, then the new compressed molecule IDs will range from 1 +to N. If the specified group is not *all* and the largest molecule ID +of atoms outside that group is M, then the new compressed molecule IDs will +range from M+1 to M+N, to avoid collision with existing molecule +IDs. If an *Noffset* >= 0 is specified, then the new compressed +molecule IDs will range from *Noffset*\ +1 to *Noffset*\ +N. If the group +is not *all* there may be collisions with the molecule IDs of other atoms. + +.. note:: + + Same as explained for the :doc:`compute fragment/atom + ` command, molecules are identified using the + current bond topology. This will **not** account for bonds broken by + the :doc:`bond_style quartic ` command, because this + bond style does not perform a full update of the bond topology data + structures within LAMMPS. In that case, using the :doc:`delete_bonds + all bond 0 remove ` will permanently delete such broken + bonds and should thus be used first. + + +Restrictions +"""""""""""" + +The *image* property can only be used when the atom style supports bonds. + +Related commands +"""""""""""""""" + +:doc:`compute fragment/atom ` +:doc:`fix bond/react `, +:doc:`fix bond/create `, +:doc:`fix bond/break `, +:doc:`fix evaporate `, +:doc:`delete_atoms `, +:doc:`delete_bonds ` + +Defaults +"""""""" + +For property *id*, the default keyword setting is sort = no. + +For property *mol*, the default keyword settings are compress = yes, +single = no, and offset = -1. diff --git a/doc/src/reset_mol_ids.rst b/doc/src/reset_mol_ids.rst deleted file mode 100644 index 0d6063b3ef..0000000000 --- a/doc/src/reset_mol_ids.rst +++ /dev/null @@ -1,116 +0,0 @@ -.. index:: reset_mol_ids - -reset_mol_ids command -===================== - -Syntax -"""""" - -.. parsed-literal:: - - reset_mol_ids group-ID keyword value ... - -* group-ID = ID of group of atoms whose molecule IDs will be reset -* zero or more keyword/value pairs may be appended -* keyword = *compress* or *offset* or *single* - - .. parsed-literal:: - - *compress* value = *yes* or *no* - *offset* value = *Noffset* >= -1 - *single* value = *yes* or *no* to treat single atoms (no bonds) as molecules - -Examples -"""""""" - -.. code-block:: LAMMPS - - reset_mol_ids all - reset_mol_ids all offset 10 single yes - reset_mol_ids solvent compress yes offset 100 - reset_mol_ids solvent compress no - -Description -""""""""""" - -Reset molecule IDs for a group of atoms based on current bond -connectivity. This will typically create a new set of molecule IDs -for atoms in the group. Only molecule IDs for atoms in the specified -group are reset; molecule IDs for atoms not in the group are not -changed. - -For purposes of this operation, molecules are identified by the current -bond connectivity in the system, which may or may not be consistent with -the current molecule IDs. A molecule in this context is a set of atoms -connected to each other with explicit bonds. The specific algorithm -used is the one of :doc:`compute fragment/atom ` -Once the molecules are identified and a new molecule ID computed for -each, this command will update the current molecule ID for all atoms in -the group with the new molecule ID. Note that if the group excludes -atoms within molecules, one (physical) molecule may become two or more -(logical) molecules. For example if the group excludes atoms in the -middle of a linear chain, then each end of the chain is considered an -independent molecule and will be assigned a different molecule ID. - -This can be a useful operation to perform after running reactive -molecular dynamics run with :doc:`fix bond/react `, -:doc:`fix bond/create `, or :doc:`fix bond/break -`, all of which can change molecule topologies. It can -also be useful after molecules have been deleted with the -:doc:`delete_atoms ` command or after a simulation which -has lost molecules, e.g. via the :doc:`fix evaporate ` -command. - -The *compress* keyword determines how new molecule IDs are computed. If -the setting is *yes* (the default) and there are N molecules in the -group, the new molecule IDs will be a set of N contiguous values. See -the *offset* keyword for details on selecting the range of these values. -If the setting is *no*, the molecule ID of every atom in the molecule -will be set to the smallest atom ID of any atom in the molecule. - -The *single* keyword determines whether single atoms (not bonded to -another atom) are treated as one-atom molecules or not, based on the -*yes* or *no* setting. If the setting is *no* (the default), their -molecule IDs are set to 0. This setting can be important if the new -molecule IDs will be used as input to other commands such as -:doc:`compute chunk/atom molecule ` or :doc:`fix -rigid molecule `. - -The *offset* keyword is only used if the *compress* setting is *yes*. -Its default value is *Noffset* = -1. In that case, if the specified -group is *all*, then the new compressed molecule IDs will range from 1 -to N. If the specified group is not *all* and the largest molecule ID -of atoms outside that group is M, then the new compressed molecule IDs will -range from M+1 to M+N, to avoid collision with existing molecule -IDs. If an *Noffset* >= 0 is specified, then the new compressed -molecule IDs will range from *Noffset*\ +1 to *Noffset*\ +N. If the group -is not *all* there may be collisions with the molecule IDs of other atoms. - -.. note:: - - The same as explained for the :doc:`compute fragment/atom - ` command, molecules are identified using the - current bond topology. This will not account for bonds broken by - the :doc:`bond_style quartic ` command because it - does not perform a full update of the bond topology data structures - within LAMMPS. - -Restrictions -"""""""""""" -none - -Related commands -"""""""""""""""" - -:doc:`reset_atom_ids `, :doc:`fix bond/react `, -:doc:`fix bond/create `, -:doc:`fix bond/break `, -:doc:`fix evaporate `, -:doc:`delete_atoms `, -:doc:`compute fragment/atom ` - -Default -""""""" - -The default keyword settings are compress = yes, single = no, and -offset = -1. diff --git a/doc/utils/check-packages.py b/doc/utils/check-packages.py old mode 100755 new mode 100644 diff --git a/doc/utils/check-styles.py b/doc/utils/check-styles.py old mode 100755 new mode 100644 diff --git a/doc/utils/converters/lammpsdoc/doc_anchor_check.py b/doc/utils/converters/lammpsdoc/doc_anchor_check.py old mode 100755 new mode 100644 diff --git a/doc/utils/converters/lammpsdoc/rst_anchor_check.py b/doc/utils/converters/lammpsdoc/rst_anchor_check.py old mode 100755 new mode 100644 diff --git a/doc/utils/converters/lammpsdoc/txt2html.py b/doc/utils/converters/lammpsdoc/txt2html.py old mode 100755 new mode 100644 diff --git a/doc/utils/converters/lammpsdoc/txt2rst.py b/doc/utils/converters/lammpsdoc/txt2rst.py old mode 100755 new mode 100644 diff --git a/doc/utils/fixup_headers.py b/doc/utils/fixup_headers.py old mode 100755 new mode 100644 diff --git a/doc/utils/sphinx-config/LAMMPSLexer.py b/doc/utils/sphinx-config/LAMMPSLexer.py index 524d7bf1fa..c8826a9ed6 100644 --- a/doc/utils/sphinx-config/LAMMPSLexer.py +++ b/doc/utils/sphinx-config/LAMMPSLexer.py @@ -1,25 +1,33 @@ from pygments.lexer import RegexLexer, words, include, default from pygments.token import * -LAMMPS_COMMANDS = ("angle_coeff", "angle_style", "atom_modify", "atom_style", -"balance", "bond_coeff", "bond_style", "bond_write", "boundary", "box", -"clear", "comm_modify", "comm_style", -"compute_modify", "create_atoms", "create_bonds", "create_box", "delete_atoms", -"delete_bonds", "dielectric", "dihedral_coeff", "dihedral_style", "dimension", -"displace_atoms", "dump_modify", "dynamical_matrix", "echo", "elif", "else", -"fix_modify", "group2ndx", "hyper", "if", "improper_coeff", -"improper_style", "include", "info", "jump", "kim", -"kspace_modify", "kspace_style", "label", "labelmap", "lattice", "log", -"mass", "mdi", "message", "minimize", "min_modify", "min_style", "molecule", -"ndx2group", "neb", "neb/spin", "neighbor", "neigh_modify", "newton", "next", -"package", "pair_coeff", "pair_modify", "pair_style", "pair_write", -"partition", "prd", "print", "processors", "python", "quit", "read_data", -"read_dump", "read_restart", "replicate", "rerun", "reset_ids", -"reset_timestep", "restart", "run", "run_style", "server", "set", "shell", -"special_bonds", "suffix", "tad", "temper", "temper/grem", "temper/npt", "then", -"thermo", "thermo_modify", "thermo_style", "third_order", "timer", "timestep", -"units", "velocity", "write_coeff", -"write_data", "write_restart") +LAMMPS_COMMANDS = ("angle_coeff", "angle_style", "atom_modify", + "atom_style", "balance", "bond_coeff", "bond_style", + "bond_write", "boundary", "clear", "comm_modify", + "comm_style", "compute_modify", "create_atoms", + "create_bonds", "create_box", "delete_atoms", + "delete_bonds", "dielectric", "dihedral_coeff", + "dihedral_style", "dimension", "displace_atoms", + "dump_modify", "dynamical_matrix", "echo", "elif", + "else", "fix_modify", "group2ndx", "hyper", "if", + "improper_coeff", "improper_style", "include", + "info", "jump", "kim", "kspace_modify", + "kspace_style", "label", "labelmap", "lattice", + "log", "mass", "mdi", "message", "minimize", + "min_modify", "min_style", "molecule", "ndx2group", + "neb", "neb/spin", "neighbor", "neigh_modify", + "newton", "next", "package", "pair_coeff", + "pair_modify", "pair_style", "pair_write", + "partition", "plugin", "prd", "print", "processors", + "python", "quit", "read_data", "read_dump", + "read_restart", "replicate", "rerun", "reset_atoms", + "reset_timestep", "restart", "run", "run_style", + "server", "set", "shell", "special_bonds", "suffix", + "tad", "temper", "temper/grem", "temper/npt", "then", + "thermo", "thermo_modify", "thermo_style", + "third_order", "timer", "timestep", "units", + "velocity", "write_coeff", "write_data", + "write_restart") #fix ID group-ID style args #compute ID group-ID style args diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index 61c1d45ba7..faf8afdb31 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -228,6 +228,7 @@ Bartels Bartelt barycenter barye +basename Bashford bashrc Baskes @@ -256,6 +257,7 @@ berlin Berne Bertotti Bessarab +bessel Beutler Bext Bfrac @@ -447,6 +449,7 @@ checkbox checkmark checkqeq checksum +chemflag chemistries Chemnitz Cheng @@ -608,6 +611,7 @@ curv Cusentino customIDs cutbond +cutghost cuthi cutinner cutlo @@ -688,6 +692,7 @@ delocalized Delong delr deltaHf +deltamu dem Dendrimer dendritic @@ -738,6 +743,7 @@ diel Dietz differentiable diffusively +diffusivities diffusivity dihedral dihedrals @@ -749,6 +755,7 @@ dimensionality dimensioned dimgray dipolar +dipoleflag dir Direc dirname @@ -757,6 +764,7 @@ discretization discretized discretizing disp +dispersionflag dissipative Dissipative distharm @@ -819,6 +827,7 @@ du dU Ducastelle Dudarev +Dufils Duin Dullweber dumpfile @@ -906,6 +915,7 @@ elastance Electroneg electronegative electronegativity +electroneutrality Eleftheriou ElementN elementset @@ -971,7 +981,6 @@ equilization equipartitioning eradius erate -erc Ercolessi Erdmann erf @@ -1022,12 +1031,14 @@ evirials ew ewald Ewald +ewaldflag excitations excv exe executables extep extrema +extxyz exy ey ez @@ -1094,8 +1105,10 @@ Fincham Fint fingerprintconstants fingerprintsperelement +finitecutflag Finnis Fiorin +fitpod fixID fj Fji @@ -1138,6 +1151,7 @@ Forschungszentrum fortran Fortran Fosado +fourbody fourier fp fphi @@ -1271,6 +1285,7 @@ greenyellow Greffet grem gREM +Grepl Grest Grigera Grimme @@ -1510,6 +1525,9 @@ inumeric inv invariants inversed +invertible +invertibility +ionicities ionizable ionocovalent iostreams @@ -1629,6 +1647,7 @@ Kalia Kamberaj Kantorovich Kapfer +Karhunen Karls Karlsruhe Karniadakis @@ -1883,6 +1902,7 @@ ln localhost localTemp localvectors +Loeve Loewen logfile logfreq @@ -1934,6 +1954,7 @@ Mackrodt MacOS Macromolecules macroparticle +Maday Madura Magda Magdeburg @@ -2198,6 +2219,7 @@ msd msi MSI msm +msmflag msse msst Mtchell @@ -2248,6 +2270,7 @@ MxN myCompute myIndex mylammps +myMultiply MyPool mysocket mySpin @@ -2276,6 +2299,8 @@ nanometer nanometers nanoparticle nanoparticles +nanopores +nanostructures nanotube Nanotube nanotubes @@ -2359,6 +2384,7 @@ Ng nghost Nghost Ngpu +ngpus Ngyuen nh nharmonic @@ -2384,6 +2410,7 @@ nktv nl nlayers nlen +Nlimit nlines Nlines nlo @@ -2473,7 +2500,9 @@ nsq Nstart nstats Nstep -Nsteplast +Nsteps +nsteps +nsteplast Nstop nsub Nsw @@ -2503,7 +2532,7 @@ numpy Numpy Nurdin Nvalue -Nvaluelast +nvaluelast Nvalues nvc nvcc @@ -2547,6 +2576,7 @@ Omelyan omp OMP oneAPI +onebody onelevel oneway onlysalt @@ -2628,6 +2658,7 @@ Pastewka pathangle pathname pathnames +Patera Patomtrans Pattnaik Pavese @@ -2769,6 +2800,7 @@ PowerShell ppme ppn pppm +pppmflag Prakash Praprotnik prd @@ -2923,6 +2955,7 @@ Rcmx Rcmy Rco Rcut +rcut rcutfac rdc rdf @@ -2948,6 +2981,7 @@ refactoring reflectionstyle Reinders reinit +reinitflag relaxbox relink relres @@ -3015,6 +3049,7 @@ Rij RIj Rik Rin +rin Rinaldi Rino RiRj @@ -3090,6 +3125,7 @@ Rutuparna rx rxd rxnave +rxnbond rxnsum ry Ryckaert @@ -3150,6 +3186,7 @@ sdpd SDPD se seagreen +Searles Secor sectoring sed @@ -3178,6 +3215,7 @@ setvel sfftw sfree Sg +sgcmc Shan Shanno Shapeev @@ -3280,6 +3318,7 @@ SPH spica SPICA Spickermann +spinflag splined spparks Sprik @@ -3465,6 +3504,7 @@ thermo thermochemical thermochemistry thermodynamically +thermopotentiostat Thermophysical thermostatted thermostatting @@ -3832,6 +3872,7 @@ workflows Workum Worley Wriggers +writedata Wuppertal Wurtzite www diff --git a/examples/PACKAGES/electrode/README b/examples/PACKAGES/electrode/README index 652194670b..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,10 +18,22 @@ 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 +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) + +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/au-aq/in.ffield b/examples/PACKAGES/electrode/au-aq/in.ffield index 094fc39144..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 6*7 +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 d73efd10fc..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 6*7 +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/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 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/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.conp b/examples/PACKAGES/electrode/graph-il/in.conp index 12fcd88541..e5eec24da3 100644 --- a/examples/PACKAGES/electrode/graph-il/in.conp +++ b/examples/PACKAGES/electrode/graph-il/in.conp @@ -3,9 +3,9 @@ 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 +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/examples/PACKAGES/electrode/graph-il/in.conq b/examples/PACKAGES/electrode/graph-il/in.conq index 08429924d4..7f315a4b12 100644 --- a/examples/PACKAGES/electrode/graph-il/in.conq +++ b/examples/PACKAGES/electrode/graph-il/in.conq @@ -5,14 +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 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 +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 v_vbot v_vtop +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.conq2 b/examples/PACKAGES/electrode/graph-il/in.conq2 index 46c9ecbf99..d860bf6c1a 100644 --- a/examples/PACKAGES/electrode/graph-il/in.conq2 +++ b/examples/PACKAGES/electrode/graph-il/in.conq2 @@ -5,30 +5,16 @@ 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 on -# 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/in.etypes b/examples/PACKAGES/electrode/graph-il/in.etypes index 30edebdc77..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 5 +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 3d07402ffd..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 5 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 da6053ff9d..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 5 +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 a1d75196c9..eed574bff6 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 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 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 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.1Dec2022.graph-il-conq2.g++.1 b/examples/PACKAGES/electrode/graph-il/log.1Dec2022.graph-il-conq2.g++.1 new file mode 100644 index 0000000000..a3eedd22c7 --- /dev/null +++ b/examples/PACKAGES/electrode/graph-il/log.1Dec2022.graph-il-conq2.g++.1 @@ -0,0 +1,193 @@ +LAMMPS (3 Nov 2022) +# electrodes with constrained total charges imposed from dynamically computed potentials +# 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.022 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.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 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 +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][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 +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/conp, occasional, skip from (1) + attributes: half, newton on + pair build: skip + stencil: none + bin: none + (3) fix electrode/conp, 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 v_vbot v_vtop + 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.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 | 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 +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:42 diff --git a/examples/PACKAGES/electrode/graph-il/log.1Dec2022.graph-il-conq2.g++.4 b/examples/PACKAGES/electrode/graph-il/log.1Dec2022.graph-il-conq2.g++.4 new file mode 100644 index 0000000000..a0b182f3bb --- /dev/null +++ b/examples/PACKAGES/electrode/graph-il/log.1Dec2022.graph-il-conq2.g++.4 @@ -0,0 +1,194 @@ +LAMMPS (3 Nov 2022) +# electrodes with constrained total charges imposed from dynamically computed potentials +# 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.005 seconds + read_data CPU = 0.044 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 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 +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][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 +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/conp, occasional, skip from (1) + attributes: half, newton on + pair build: skip + stencil: none + bin: none + (3) fix electrode/conp, 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 v_vbot v_vtop + 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: 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 | 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 +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: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.26Apr2022.graph-il-conq.g++.1 b/examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-conq.g++.1 deleted file mode 100644 index 5722e357ec..0000000000 --- a/examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-conq.g++.1 +++ /dev/null @@ -1,153 +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.012 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.000 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 - -# 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 -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 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 48.9361 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 - -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 - -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:43 diff --git a/examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-conq.g++.4 b/examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-conq.g++.4 deleted file mode 100644 index 96343114e6..0000000000 --- a/examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-conq.g++.4 +++ /dev/null @@ -1,154 +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.020 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 - -# 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 -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 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 28.8336 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 - -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 - -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:51 diff --git a/examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-conq2.g++.1 b/examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-conq2.g++.1 deleted file mode 100644 index 4465ed311d..0000000000 --- a/examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-conq2.g++.1 +++ /dev/null @@ -1,170 +0,0 @@ -LAMMPS (24 Mar 2022) -# electrodes with constrained total charges imposed from dynamically computed potentials -# 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.031 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 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 - -# 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 - -thermo 50 -thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop v_vbot v_vtop -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/conp, occasional, skip from (1) - attributes: half, newton on - pair build: skip - stencil: none - bin: none - (3) fix electrode/conp, 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 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 62.9692 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 - -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 - -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:02:26 diff --git a/examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-conq2.g++.4 b/examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-conq2.g++.4 deleted file mode 100644 index cf8ddf60a3..0000000000 --- a/examples/PACKAGES/electrode/graph-il/log.26Apr2022.graph-il-conq2.g++.4 +++ /dev/null @@ -1,171 +0,0 @@ -LAMMPS (24 Mar 2022) -# electrodes with constrained total charges imposed from dynamically computed potentials -# 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.019 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 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 - -# 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 - -thermo 50 -thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop v_vbot v_vtop -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/conp, occasional, skip from (1) - attributes: half, newton on - pair build: skip - stencil: none - bin: none - (3) fix electrode/conp, 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 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 33.4031 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 - -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 - -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:01:01 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/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/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 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 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/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 new file mode 100644 index 0000000000..35b4790935 --- /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.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 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 diff --git a/examples/PACKAGES/fep/CC-CO/fep01/data.0.lmp b/examples/PACKAGES/fep/CC-CO/fep01/data.0.lmp new file mode 120000 index 0000000000..5c33e53300 --- /dev/null +++ b/examples/PACKAGES/fep/CC-CO/fep01/data.0.lmp @@ -0,0 +1 @@ +../mols/data.0.lmp \ No newline at end of file diff --git a/examples/PACKAGES/fep/CC-CO/fep10/data.1.lmp b/examples/PACKAGES/fep/CC-CO/fep10/data.1.lmp new file mode 120000 index 0000000000..4222a38b76 --- /dev/null +++ b/examples/PACKAGES/fep/CC-CO/fep10/data.1.lmp @@ -0,0 +1 @@ +../mols/data.1.lmp \ No newline at end of file diff --git a/examples/PACKAGES/fep/CH4-CF4/bar01/data.0.lmp b/examples/PACKAGES/fep/CH4-CF4/bar01/data.0.lmp new file mode 120000 index 0000000000..5c33e53300 --- /dev/null +++ b/examples/PACKAGES/fep/CH4-CF4/bar01/data.0.lmp @@ -0,0 +1 @@ +../mols/data.0.lmp \ No newline at end of file diff --git a/examples/PACKAGES/fep/CH4-CF4/bar10/data.1.lmp b/examples/PACKAGES/fep/CH4-CF4/bar10/data.1.lmp new file mode 120000 index 0000000000..4222a38b76 --- /dev/null +++ b/examples/PACKAGES/fep/CH4-CF4/bar10/data.1.lmp @@ -0,0 +1 @@ +../mols/data.1.lmp \ No newline at end of file diff --git a/examples/PACKAGES/fep/CH4-CF4/fep01/data.0.lmp b/examples/PACKAGES/fep/CH4-CF4/fep01/data.0.lmp new file mode 120000 index 0000000000..5c33e53300 --- /dev/null +++ b/examples/PACKAGES/fep/CH4-CF4/fep01/data.0.lmp @@ -0,0 +1 @@ +../mols/data.0.lmp \ No newline at end of file diff --git a/examples/PACKAGES/fep/CH4-CF4/fep10/data.1.lmp b/examples/PACKAGES/fep/CH4-CF4/fep10/data.1.lmp new file mode 120000 index 0000000000..4222a38b76 --- /dev/null +++ b/examples/PACKAGES/fep/CH4-CF4/fep10/data.1.lmp @@ -0,0 +1 @@ +../mols/data.1.lmp \ No newline at end of file diff --git a/examples/PACKAGES/fep/CH4hyd/fdti01/data.lmp b/examples/PACKAGES/fep/CH4hyd/fdti01/data.lmp new file mode 120000 index 0000000000..73cccaf269 --- /dev/null +++ b/examples/PACKAGES/fep/CH4hyd/fdti01/data.lmp @@ -0,0 +1 @@ +../mols/data.lmp \ No newline at end of file diff --git a/examples/PACKAGES/fep/CH4hyd/fdti10/data.lmp b/examples/PACKAGES/fep/CH4hyd/fdti10/data.lmp new file mode 120000 index 0000000000..73cccaf269 --- /dev/null +++ b/examples/PACKAGES/fep/CH4hyd/fdti10/data.lmp @@ -0,0 +1 @@ +../mols/data.lmp \ No newline at end of file diff --git a/examples/PACKAGES/fep/CH4hyd/fep01/data.lmp b/examples/PACKAGES/fep/CH4hyd/fep01/data.lmp new file mode 120000 index 0000000000..73cccaf269 --- /dev/null +++ b/examples/PACKAGES/fep/CH4hyd/fep01/data.lmp @@ -0,0 +1 @@ +../mols/data.lmp \ No newline at end of file diff --git a/examples/PACKAGES/fep/CH4hyd/fep10/data.lmp b/examples/PACKAGES/fep/CH4hyd/fep10/data.lmp new file mode 120000 index 0000000000..73cccaf269 --- /dev/null +++ b/examples/PACKAGES/fep/CH4hyd/fep10/data.lmp @@ -0,0 +1 @@ +../mols/data.lmp \ No newline at end of file diff --git a/examples/PACKAGES/fep/SPCEhyd/fep01/data.lmp b/examples/PACKAGES/fep/SPCEhyd/fep01/data.lmp new file mode 120000 index 0000000000..73cccaf269 --- /dev/null +++ b/examples/PACKAGES/fep/SPCEhyd/fep01/data.lmp @@ -0,0 +1 @@ +../mols/data.lmp \ No newline at end of file diff --git a/examples/PACKAGES/fep/SPCEhyd/fep10/data.lmp b/examples/PACKAGES/fep/SPCEhyd/fep10/data.lmp new file mode 120000 index 0000000000..73cccaf269 --- /dev/null +++ b/examples/PACKAGES/fep/SPCEhyd/fep10/data.lmp @@ -0,0 +1 @@ +../mols/data.lmp \ No newline at end of file diff --git a/examples/PACKAGES/pod/README.md b/examples/PACKAGES/pod/README.md new file mode 100644 index 0000000000..2c6db69200 --- /dev/null +++ b/examples/PACKAGES/pod/README.md @@ -0,0 +1,21 @@ +### Compile LAMMPS/POD + +Go to `lammps` directory and build with the POD package: + + cd path/to/lammps + mkdir build-pod + cd build-pod + cmake -C ../cmake/presets/basic.cmake -D PKG_ML-POD=on ../cmake + cmake --build . + +### Fit a POD potential for tantalum + +Go to `lammps/examples/PACKAGES/pod/Ta` directory and run + + lmp -in in.podfit + +See the README in `lammps/examples/PACKAGES/pod/Ta` for instructions on how to run MD with the potential. + +### Examples for other materials + +See [https://github.com/cesmix-mit/pod-examples](https://github.com/cesmix-mit/pod-examples) diff --git a/examples/PACKAGES/pod/Ta/README.md b/examples/PACKAGES/pod/Ta/README.md new file mode 100644 index 0000000000..031698550c --- /dev/null +++ b/examples/PACKAGES/pod/Ta/README.md @@ -0,0 +1,15 @@ +### POD example for Ta + +We will fit a potential to the `Ta` training data in the `XYZ` directory, which houses `.xyz` files +of the training data taken from [the FitSNAP repo](https://github.com/FitSNAP/FitSNAP/tree/master/examples/Ta_XYZ/XYZ) + +Fit POD with + + lmp -in in.fitpod + +This creates `Ta_coefficients.pod` for the linear model, which we can use to run MD with + + lmp -in in.pod + + + diff --git a/examples/PACKAGES/pod/Ta/Ta_coeff.pod b/examples/PACKAGES/pod/Ta/Ta_coeff.pod new file mode 120000 index 0000000000..ddf9c1426d --- /dev/null +++ b/examples/PACKAGES/pod/Ta/Ta_coeff.pod @@ -0,0 +1 @@ +../../../../potentials/Ta_coeff.pod \ No newline at end of file diff --git a/examples/PACKAGES/pod/Ta/Ta_coefficients.pod b/examples/PACKAGES/pod/Ta/Ta_coefficients.pod new file mode 100644 index 0000000000..c8943bb889 --- /dev/null +++ b/examples/PACKAGES/pod/Ta/Ta_coefficients.pod @@ -0,0 +1,33 @@ +POD_coefficients: 32 +-4.44242 +4.10219 +-2.36987 +-3.92184 +0.83796 +-0.79457 +0.26230 +-21.24294 +-15.38460 +-38.44056 +8.29872 +-42.54514 +2.79976 +3.76109 +5.23499 +0.04878 +2.96006 +0.09101 +-0.19257 +-0.24326 +-0.16735 +0.53738 +0.02236 +-0.00154 +0.02488 +-0.00565 +0.07672 +-0.05894 +-0.05604 +-0.12664 +0.11723 +0.00262 diff --git a/examples/PACKAGES/pod/Ta/Ta_data.pod b/examples/PACKAGES/pod/Ta/Ta_data.pod new file mode 100644 index 0000000000..0933f3e79a --- /dev/null +++ b/examples/PACKAGES/pod/Ta/Ta_data.pod @@ -0,0 +1,20 @@ +file_format extxyz +file_extension xyz + +path_to_training_data_set "XYZ" +path_to_test_data_set "XYZ" + +fitting_weight_energy 100.0 +fitting_weight_force 1.0 +fitting_regularization_parameter 1e-10 + +error_analysis_for_training_data_set 1 +error_analysis_for_test_data_set 0 + +# Add the following basename to the name of output files +basename_for_output_files Ta + +# number of digits after the decimal point for pod coefficients +precision_for_pod_coefficients 5 + + diff --git a/examples/PACKAGES/pod/Ta/Ta_param.pod b/examples/PACKAGES/pod/Ta/Ta_param.pod new file mode 100644 index 0000000000..00c01b01a6 --- /dev/null +++ b/examples/PACKAGES/pod/Ta/Ta_param.pod @@ -0,0 +1,32 @@ +# DATE: 2022-11-30 UNITS: metal CONTRIBUTOR: Ngoc Cuong Nguyen, exapde@gmail.com CITATION: https://arxiv.org/abs/2209.02362 +# chemical element symbols +species Ta + +# periodic boundary conditions +pbc 1 1 1 + +# inner cut-off radius +rin 1.0 + +# outer cut-off radius +rcut 5.0 + +# polynomial degrees for radial basis functions +bessel_polynomial_degree 3 +inverse_polynomial_degree 6 + +# one-body potential +onebody 1 + +# two-body linear POD potential +twobody_number_radial_basis_functions 6 + +# three-body linear POD potential +threebody_number_radial_basis_functions 5 +threebody_number_angular_basis_functions 5 + +# four-body linear SNAP potential +fourbody_snap_twojmax 0 + +# quadratic POD potential +quadratic_pod_potential 0 diff --git a/examples/PACKAGES/pod/Ta/Ta_training_analysis.pod b/examples/PACKAGES/pod/Ta/Ta_training_analysis.pod new file mode 100644 index 0000000000..d5bbec1cb8 --- /dev/null +++ b/examples/PACKAGES/pod/Ta/Ta_training_analysis.pod @@ -0,0 +1,387 @@ +# Displaced_A15.xyz + config # atoms energy DFT energy energy error force DFT force force error + 1 64 -753.4412087 -754.220443 0.01217553565 7.734608752 8.398670477 0.1147177501 + 2 64 -752.99206 -753.865255 0.01364367179 8.845831302 9.134430545 0.128875643 + 3 64 -753.3230789 -754.0221 0.01092220404 8.320493902 9.017261102 0.1155421197 + 4 64 -753.5972757 -754.279613 0.01066151964 7.709417685 8.381725092 0.1058659753 + 5 64 -753.0554721 -753.777209 0.01127713895 8.89827564 9.478314477 0.1191609049 + 6 64 -753.3515905 -754.048643 0.01089144564 7.808950564 8.465317938 0.1128142237 + 7 64 -753.6515992 -754.317603 0.01040630929 7.441773668 8.127690491 0.1024025645 + 8 64 -753.3305668 -753.969161 0.009978033993 8.524333384 9.425464952 0.1066300011 + 9 64 -753.3982699 -754.141988 0.01162059587 8.165654685 8.821346913 0.1141641875 +# Displaced_BCC.xyz + config # atoms energy DFT energy energy error force DFT force force error + 10 54 -631.72742 -631.019667 0.01310653789 15.42892812 16.625876 0.264811012 + 11 54 -632.2725892 -631.719595 0.01024063328 14.51788198 15.58666626 0.2236637006 + 12 54 -631.9431698 -631.386255 0.01031323642 15.21539049 15.92378883 0.2259171686 + 13 54 -633.0728554 -632.575826 0.009204247811 13.38472946 14.55977162 0.2050161952 + 14 54 -630.8933737 -630.450212 0.008206698429 16.5539163 16.96340726 0.2366453149 + 15 54 -632.0739208 -631.669379 0.007491515673 15.23887638 16.05757315 0.2280333831 + 16 54 -632.8030856 -632.431277 0.006885343815 14.21127984 14.69810718 0.2026063598 + 17 54 -631.6814096 -630.960068 0.01335817778 14.70924474 15.99073148 0.2283605143 + 18 54 -625.0410285 -623.378198 0.03079315656 23.39224423 24.67640432 0.3504654115 +# Displaced_FCC.xyz + config # atoms energy DFT energy energy error force DFT force force error + 19 48 -555.9696753 -555.899463 0.001462755232 6.079460735 6.084617063 0.07083484607 + 20 48 -555.9506355 -555.922478 0.0005866147697 6.28112122 6.297071211 0.09285822038 + 21 48 -555.8344979 -555.800269 0.0007131011841 6.153574445 6.021098636 0.08137696888 + 22 48 -556.2639568 -556.196151 0.001412620461 5.066504178 5.127955094 0.08649299664 + 23 48 -555.6269121 -555.488929 0.002874647697 6.848109842 7.050223459 0.08116202322 + 24 48 -556.1089332 -556.027926 0.001687649405 5.662035842 5.611881174 0.07953916327 + 25 48 -556.0580873 -555.968399 0.001868505799 5.879931332 5.979217189 0.07470196866 + 26 48 -556.0083267 -556.047132 0.0008084440258 5.752828608 5.544452585 0.08224848502 + 27 48 -555.82441 -555.747848 0.001595040721 6.367423657 6.47892568 0.09497869851 +# Elastic_BCC.xyz + config # atoms energy DFT energy energy error force DFT force force error + 28 2 -23.68353253 -23.689367 0.002917237243 0.0006486347527 0.0006222748589 7.696560647e-06 + 29 2 -23.68281295 -23.689888 0.003537526523 0.0006442481331 0.0006166052222 7.353613433e-06 + 30 2 -23.68293438 -23.689996 0.00353080996 0.0009115876426 0.0008810425642 1.183334558e-05 + 31 2 -23.68108003 -23.690957 0.004938485589 1.044193546e-06 0 4.166083011e-07 + 32 2 -23.67919793 -23.690521 0.005661535829 0.0006261455712 0.0005982273815 7.573309962e-06 + 33 2 -23.67785535 -23.69038 0.006262326378 0.0006219476538 0.0005925723585 8.098703345e-06 + 34 2 -23.68415292 -23.689202 0.00252453823 0.0006520193214 0.0006279363025 7.128171198e-06 + 35 2 -23.68169552 -23.690482 0.004393238412 0.0009021557258 0.0008640138888 1.329061297e-05 + 36 2 -23.68301023 -23.689902 0.003445886213 0.0006432418939 0.0006152154094 8.589463686e-06 + 37 2 -23.68063814 -23.690563 0.004962429905 0.0006318669831 0.0006038725031 7.463726891e-06 + 38 2 -23.68337588 -23.690207 0.003415557958 0.001118071502 0.00107369735 1.811741272e-05 + 39 2 -23.68369233 -23.689285 0.00279633424 0.0009215683923 0.000890013483 1.127366011e-05 + 40 2 -23.68344234 -23.689768 0.003162828655 0.001120158205 0.001080249045 1.630224161e-05 + 41 2 -23.68224173 -23.68968 0.003719136062 0.0009070521506 0.0008680034562 1.339908745e-05 + 42 2 -23.68259685 -23.690074 0.003738573623 0.00143649564 0.001373818765 2.432187597e-05 + 43 2 -23.68469428 -23.688108 0.001706858485 0.0006587619148 0.0006336134468 7.932733886e-06 + 44 2 -23.68405177 -23.689241 0.002594615211 0.0009223784492 0.0008880101351 1.189350098e-05 + 45 2 -23.68384626 -23.68952 0.002836868987 0.0009181252225 0.0008860011287 1.116431522e-05 + 46 2 -23.68524763 -23.686278 0.0005151850612 0.0006668258323 0.0006406777661 8.585622872e-06 + 47 2 -23.67629396 -23.690097 0.006901518594 0.0008737523828 0.0008410160522 1.125104926e-05 + 48 2 -23.67835169 -23.690811 0.006229654604 0.0008814028122 0.0008500070588 1.103963422e-05 + 49 2 -23.67981574 -23.690266 0.005225130991 0.001091936388 0.001044322747 1.944706281e-05 + 50 2 -23.68209703 -23.690597 0.004249983197 0.001105769275 0.001050833003 2.242828166e-05 + 51 2 -23.68050418 -23.690673 0.005084408246 0.000631172526 0.0006038907186 7.85857762e-06 + 52 2 -23.68185505 -23.690551 0.00434797299 0.0009022813915 0.0008590064028 1.486707593e-05 + 53 2 -23.68191508 -23.690693 0.004388958442 0.0009013677777 0.0008590110593 1.516503239e-05 + 54 2 -23.68097184 -23.69021 0.004619081961 0.0009000307855 0.0008730051546 9.670733045e-06 + 55 2 -23.68426495 -23.688943 0.002339025274 0.0009232115961 0.0008800306813 1.619629586e-05 + 56 2 -23.67842316 -23.690136 0.00585641942 0.0006239138245 0.000593996633 8.394193459e-06 + 57 2 -23.6849427 -23.687444 0.001250651312 0.0009347957747 0.000903059245 1.290489522e-05 + 58 2 -23.6836322 -23.689801 0.003084401813 0.0009160470298 0.0008740011442 1.424271291e-05 + 59 2 -23.6814842 -23.690408 0.00446190038 8.690218922e-07 0 3.245696982e-07 + 60 2 -23.68115817 -23.690362 0.004601914896 0.0006345480975 0.0006067503605 9.377221837e-06 + 61 2 -23.67229452 -23.688881 0.008293240443 0.0008566684404 0.0008250054545 1.108928728e-05 + 62 2 -23.6791352 -23.690515 0.005689901939 0.001534883496 0.001475779794 2.12469595e-05 + 63 2 -23.67786743 -23.690551 0.006341785918 0.0006228264143 0.0005996599036 7.295416678e-06 + 64 2 -23.68316372 -23.689487 0.003161641446 0.0006469755816 0.0006194384554 7.530154689e-06 + 65 2 -23.6834063 -23.68986 0.003226849907 0.0009142334935 0.0008860124153 1.052672488e-05 + 66 2 -23.68377813 -23.689288 0.002754934411 0.00145229412 0.001396479144 1.7028268e-05 + 67 2 -23.67700773 -23.690457 0.006724637324 0.0006187196638 0.0005939831647 7.080762894e-06 + 68 2 -23.67552804 -23.689792 0.007131981721 0.0008698720997 0.0008340587509 1.418233126e-05 + 69 2 -23.67583966 -23.690006 0.007083167889 0.0006146073806 0.0005897694465 8.070657469e-06 + 70 2 -23.6777397 -23.690571 0.006415648131 0.0006207500925 0.0005939781141 7.401996527e-06 + 71 2 -23.68270064 -23.690213 0.003756180649 0.001112284016 0.001084315452 1.142137177e-05 + 72 2 -23.67870666 -23.690617 0.005955171449 0.0006250314539 0.0006024682564 6.623275773e-06 + 73 2 -23.68231586 -23.689761 0.00372256923 0.0009095463313 0.0008790688255 1.222939687e-05 + 74 2 -23.67673328 -23.69027 0.006768359835 7.188704984e-07 0 2.129270719e-07 + 75 2 -23.68164707 -23.690599 0.004475963334 0.0006376044826 0.0006137752031 6.574310078e-06 + 76 2 -23.67997815 -23.69061 0.00531592353 9.698202065e-07 0 3.958704534e-07 + 77 2 -23.68008634 -23.690603 0.005258328411 0.0008923489326 0.0008590331775 1.256831367e-05 + 78 2 -23.68488966 -23.687908 0.001509170978 0.0009340324028 0.0009010105438 1.204104822e-05 + 79 2 -23.6795094 -23.690688 0.005589299031 0.0008890828456 0.0008470064935 1.419626566e-05 + 80 2 -23.68316126 -23.689988 0.003413372454 0.0006451612224 0.0006194465272 7.422528504e-06 + 81 2 -23.68321956 -23.689613 0.003196718897 0.000912899593 0.0008740732235 1.539555522e-05 + 82 2 -23.68181374 -23.690678 0.004432127652 0.0006373963006 0.0006123757017 7.454253264e-06 + 83 2 -23.68196226 -23.69017 0.004103870298 0.0009041773842 0.0008750051428 9.854119735e-06 + 84 2 -23.68483517 -23.687892 0.001528413806 0.001142179928 0.001112070142 1.229243027e-05 + 85 2 -23.68271169 -23.690132 0.003710155487 0.0009085291666 0.000868018433 1.49999647e-05 + 86 2 -23.68018066 -23.690843 0.005331170668 0.0006305009468 0.0006081134763 5.908815719e-06 + 87 2 -23.67957976 -23.690598 0.005509118787 0.001259431767 0.001217674833 1.243374729e-05 + 88 2 -23.67869549 -23.690656 0.005980257091 0.0006251939788 0.0006024765556 7.130239281e-06 + 89 2 -23.67884961 -23.690254 0.005702197143 0.001084797449 0.001043496047 1.68662339e-05 + 90 2 -23.67961701 -23.690694 0.005538492834 0.0006273834422 0.0006010740387 8.134278748e-06 + 91 2 -23.68202458 -23.690097 0.004036211359 0.0009041492449 0.0008730234819 1.169617364e-05 + 92 2 -23.68476212 -23.688402 0.001819942156 0.0006575509652 0.000632180354 7.746949898e-06 + 93 2 -23.68425036 -23.688669 0.002209320265 0.001133553123 0.001092474256 1.677033392e-05 + 94 2 -23.68017683 -23.690538 0.005180583191 0.0008923392716 0.0008610145179 1.053989885e-05 + 95 2 -23.68290142 -23.689722 0.003410287964 0.0006465597037 0.0006251287867 7.275875005e-06 + 96 2 -23.6789537 -23.690581 0.005813649829 7.452601434e-07 0 2.355432866e-07 + 97 2 -23.6840847 -23.688755 0.002335150427 0.0006519723076 0.0006251143895 8.250788079e-06 + 98 2 -23.67367881 -23.689312 0.007816596299 0.0008618264365 0.0008290597083 1.323477647e-05 + 99 2 -23.68489152 -23.687388 0.001248238956 0.001145929445 0.001120237475 1.049029355e-05 + 100 2 -23.68174648 -23.690664 0.004458761579 0.0006367386055 0.0006109402589 6.270984334e-06 + 101 2 -23.67450636 -23.68941 0.007451817634 0.0006119997091 0.0005883553348 7.715800123e-06 + 102 2 -23.68321442 -23.690035 0.003410290658 0.0009128748923 0.0008810062429 1.106310227e-05 + 103 2 -23.67584952 -23.690015 0.007082738579 0.0008706222251 0.0008450195264 9.898495893e-06 + 104 2 -23.67856154 -23.690752 0.006095232174 0.0006245583967 0.0005996415596 7.0338752e-06 + 105 2 -23.68297614 -23.689825 0.00342442945 0.0009134966073 0.0008800215906 1.147892484e-05 + 106 2 -23.67876135 -23.690562 0.00590032283 0.0008849512172 0.0008560011682 1.005528708e-05 + 107 2 -23.67874342 -23.690622 0.005939288687 0.0008835043772 0.0008390017878 1.530603189e-05 + 108 2 -23.6843441 -23.688764 0.002209950671 0.0009250850126 0.0008910185183 1.254407066e-05 + 109 2 -23.68340608 -23.690011 0.003302460748 0.0006464901241 0.0006194287691 7.216590251e-06 + 110 2 -23.68476306 -23.687696 0.001466471271 0.001143422035 0.001087589996 2.279977174e-05 + 111 2 -23.67977853 -23.691019 0.005620235289 0.000888876189 0.0008540035129 1.1779733e-05 + 112 2 -23.68440001 -23.689025 0.002312496017 6.723949117e-07 0 2.64867667e-07 + 113 2 -23.68208689 -23.689952 0.003932553163 7.386834034e-07 0 2.881506548e-07 + 114 2 -23.67935439 -23.69061 0.005627806505 0.0008872685213 0.0008580011655 1.019979918e-05 + 115 2 -23.68099138 -23.690595 0.004801812376 0.0008956193373 0.0008680069124 9.843191999e-06 + 116 2 -23.67743565 -23.690231 0.006397673953 0.0006194343635 0.0005925892338 8.542917156e-06 + 117 2 -23.67809541 -23.690469 0.006186797078 0.0008802359765 0.0008500294113 1.182654414e-05 + 118 2 -23.68279142 -23.690482 0.003845288647 0.0009078436148 0.0008740102974 1.225600095e-05 + 119 2 -23.67443144 -23.689613 0.007590778784 0.0008650318724 0.0008320192305 1.23538989e-05 + 120 2 -23.68501591 -23.687426 0.001205043668 0.001145633567 0.00109577735 2.03694619e-05 + 121 2 -23.68302307 -23.689562 0.003269464306 0.0006474095532 0.0006265237426 6.532536014e-06 + 122 2 -23.68134549 -23.6904 0.004527256823 4.272990719e-07 0 1.732352794e-07 + 123 2 -23.67843015 -23.690561 0.006065426647 0.0006235069318 0.0005982273815 6.816496585e-06 + 124 2 -23.67292129 -23.689107 0.008092853971 0.0008589766346 0.0008180073349 1.439377155e-05 + 125 2 -23.68123551 -23.690145 0.004454742608 0.0009009679944 0.0008740766557 1.132072203e-05 + 126 2 -23.67777646 -23.690482 0.006352769316 0.0006215821083 0.0005939983165 8.362048689e-06 + 127 2 -23.68318209 -23.689864 0.003340952886 0.0009142894487 0.0008860124153 1.044271435e-05 +# Elastic_FCC.xyz + config # atoms energy DFT energy energy error force DFT force force error + 128 4 -46.449456 -46.437936 0.002880000611 0.0007088173441 0.001265949446 0.0001573706237 + 129 4 -46.45317307 -46.438504 0.003667267825 0.0007210982328 0.001492549497 0.0002032393675 + 130 4 -46.44686167 -46.436378 0.002620918523 0.0004870837365 0.000810592376 0.0001107544174 + 131 4 -46.45357979 -46.441551 0.003007196305 0.0008634182131 0.001283675193 0.0001231453909 + 132 4 -46.42409677 -46.416957 0.001784942313 0.0007481922079 0.001186145859 0.0001205918882 + 133 4 -46.45078882 -46.440495 0.002573455911 0.0007289008721 0.001212440514 0.0001119490174 + 134 4 -46.4501363 -46.437972 0.003041076136 0.001116532125 0.002358226452 0.0003166808771 + 135 4 -46.46241981 -46.44586 0.004139951293 0.001077737689 0.002033949852 0.0002702964015 + 136 4 -46.44743429 -46.435744 0.002922571394 0.0008383971706 0.001690849491 0.0002711013554 + 137 4 -46.45237555 -46.438209 0.003541637787 0.0007039962535 0.001160049999 0.0001096430557 + 138 4 -46.43645451 -46.42629 0.002541127472 0.0004839683449 0.0005297018029 1.480491546e-05 + 139 4 -46.45466199 -46.443301 0.002840247268 0.0008590849412 0.001818421568 0.0002395191538 + 140 4 -46.4513559 -46.439002 0.003088474484 0.000980675092 0.001416973535 0.0001142710898 + 141 4 -46.44224357 -46.432438 0.00245139227 0.0008958100898 0.001010469198 5.862303988e-05 + 142 4 -46.41846428 -46.412654 0.001452568802 0.001104791425 0.001801959766 0.0001900084105 + 143 4 -46.45594552 -46.443231 0.003178629143 0.0006959928784 0.001691590967 0.0002104366356 + 144 4 -46.44141177 -46.431513 0.00247469212 0.001149659372 0.001680544852 0.0001329997122 + 145 4 -46.44458344 -46.435608 0.00224385943 0.0007110215089 0.0009593039143 5.831382606e-05 + 146 4 -46.45129649 -46.437689 0.003401871689 0.0007271142738 0.001217708504 0.0001414871092 + 147 4 -46.43755262 -46.428447 0.002276404472 0.0008708378565 0.002060081552 0.0003082033743 + 148 4 -46.44295113 -46.432255 0.00267403188 0.0005315813764 0.0006274201144 5.596270268e-05 + 149 4 -46.45482154 -46.442315 0.003126635324 0.0008653689406 0.002424436842 0.0004107290683 + 150 4 -46.44918467 -46.436613 0.003142918309 0.0004839663128 0.0005321240457 3.890880543e-05 + 151 4 -46.44094809 -46.430825 0.002530772174 0.0007559646277 0.001399987143 0.0001669802678 + 152 4 -46.44335614 -46.43312 0.002559035587 0.0004859700309 0.0007272771136 6.315695513e-05 + 153 4 -46.44518607 -46.434347 0.002709767129 0.0007148497795 0.001284451634 0.0001580665901 + 154 4 -46.43969219 -46.430573 0.002279798333 0.00072875179 0.001315746176 0.000142372977 + 155 4 -46.46201856 -46.445665 0.004088390852 0.0008369246217 0.00180789159 0.0002715757049 + 156 4 -46.44738266 -46.435898 0.002871166201 0.0007118215897 0.001869300939 0.0002650888178 + 157 4 -46.45279209 -46.442107 0.00267127163 0.0005099355574 0.0006020930161 3.155335447e-05 + 158 4 -46.44687446 -46.434432 0.003110615714 0.0008364031703 0.001092982159 9.484366005e-05 + 159 4 -46.45033825 -46.436308 0.003507562522 0.000995428139 0.001839150891 0.0002479613631 + 160 4 -46.43248168 -46.423938 0.002135919949 0.0007772193879 0.001463463016 0.0001986681069 + 161 4 -46.43702199 -46.428115 0.002226747981 0.0005418219957 0.0008584497656 9.283863381e-05 + 162 4 -46.43553597 -46.4269 0.002158992752 0.001008467413 0.001845719914 0.00024455962 + 163 4 -46.43191737 -46.421142 0.002693841371 0.0009169914298 0.001309150106 9.335100097e-05 + 164 4 -46.44107961 -46.432233 0.002211651338 0.0006944670911 0.0007253109678 2.446203898e-05 + 165 4 -46.44097784 -46.429408 0.002892459649 0.0007189999753 0.001068327665 9.331287519e-05 + 166 4 -46.45970672 -46.445145 0.003640430606 0.0008323398895 0.001776038288 0.000241778013 + 167 4 -46.44583143 -46.435868 0.002490857628 0.001007239475 0.002376074704 0.0003893124404 + 168 4 -46.4515773 -46.439663 0.002978574612 0.0004764710524 0.001119403413 0.0001156692402 + 169 4 -46.43612447 -46.428287 0.00195936642 0.001036891264 0.001277000392 6.942055774e-05 + 170 4 -46.4323966 -46.424584 0.001953149801 0.0005497544117 0.0008032957114 5.852281957e-05 + 171 4 -46.41884421 -46.413045 0.001449803236 0.0009011718881 0.001248322074 7.333380516e-05 + 172 4 -46.44596985 -46.436994 0.002243961387 0.0008480487041 0.001331939188 0.0001689650386 + 173 4 -46.45736434 -46.443604 0.003440085706 0.0007046835731 0.001177046303 0.000122309487 + 174 4 -46.4531541 -46.439718 0.003359024693 6.718665553e-07 0 1.784212673e-07 + 175 4 -46.44922127 -46.435527 0.003423566396 0.0008698447035 0.0009338393866 5.635428662e-05 + 176 4 -46.44518705 -46.434787 0.002600012526 0.0008890985417 0.00117329195 6.906839261e-05 + 177 4 -46.44789017 -46.434929 0.00324029173 0.001006522874 0.001349491756 8.807224523e-05 + 178 4 -46.43673847 -46.426499 0.002559868692 0.0009134543991 0.001248937949 9.133606536e-05 + 179 4 -46.44932495 -46.437025 0.003074986544 0.0006805240432 0.000938418883 7.446008431e-05 + 180 4 -46.43885209 -46.428937 0.002478772296 0.0009031344997 0.001286352984 0.0001081690229 + 181 4 -46.45413306 -46.442516 0.002904263993 0.000506604563 0.00094855469 0.0001414866709 + 182 4 -46.44060244 -46.428736 0.002966609134 0.0007579010233 0.001424321593 0.0001681832084 + 183 4 -46.44430426 -46.433359 0.002736316202 0.0008950557387 0.001276381604 0.0001027241271 + 184 4 -46.45260002 -46.438799 0.00345025532 0.0006868717473 0.0008186940821 3.675916237e-05 + 185 4 -46.45478935 -46.441993 0.003199088629 0.000703010985 0.001887735151 0.0002666518851 + 186 4 -46.44949137 -46.439033 0.002614591408 0.0006795560995 0.000821568013 5.214373405e-05 + 187 4 -46.44856954 -46.436967 0.002900635979 0.000860448627 0.001482323514 0.0001802503616 + 188 4 -46.43759968 -46.427245 0.00258867094 0.0008795521813 0.001293885621 0.0001012099865 + 189 4 -46.45133388 -46.438046 0.003321969731 0.0009940752633 0.001627288542 0.0001741528671 + 190 4 -46.42813695 -46.420083 0.002013486722 0.001161998446 0.002395244873 0.0003650969018 + 191 4 -46.46060362 -46.445247 0.003839154837 0.0006909751141 0.001219330964 0.0001271217748 + 192 4 -46.45903895 -46.446044 0.003248736964 0.0006847065621 0.001305329077 0.0001398957152 + 193 4 -46.44724817 -46.434472 0.003194042613 0.0007061519125 0.0008323340675 6.681050285e-05 + 194 4 -46.45649776 -46.44458 0.002979439009 0.0004998748498 0.0009744208536 8.547729233e-05 + 195 4 -46.45403889 -46.441776 0.003065721535 0.0008652918641 0.001339231869 0.0001389938291 + 196 4 -46.44933689 -46.436389 0.003236972034 0.001007551549 0.001786741168 0.0002029508895 + 197 4 -46.459873 -46.446416 0.00336425035 0.0004914989987 0.0006588778339 6.549510811e-05 + 198 4 -46.46569473 -46.449806 0.003972183676 0.000943305002 0.002135055034 0.0003137851731 + 199 4 -46.43467991 -46.427189 0.00187272638 0.0007726175275 0.001050788276 7.135568315e-05 + 200 4 -46.43621938 -46.427857 0.002090594118 0.0007686546978 0.001487666629 0.0001823668299 + 201 4 -46.45576365 -46.44004 0.003930912967 0.0005030079851 0.000757202747 5.770676907e-05 + 202 4 -46.4483913 -46.437214 0.002794325435 0.0007102028538 0.001505586265 0.000179529909 + 203 4 -46.43168209 -46.422628 0.002263521917 0.0007374332623 0.001601713458 0.0002609325883 + 204 4 -46.45732644 -46.443535 0.00344786022 0.0009811025521 0.001590304373 0.0001690672254 + 205 4 -46.45144079 -46.439922 0.002879696366 0.0008698700101 0.001530493385 0.0001528171002 + 206 4 -46.44960522 -46.437675 0.002982555611 0.00112440729 0.002440246094 0.0004061057502 + 207 4 -46.45839808 -46.445558 0.003210018941 0.0006780842253 0.00113392416 0.0001196075532 + 208 4 -46.45130112 -46.439106 0.003048781046 0.0009934671927 0.001830731002 0.000245168776 + 209 4 -46.45826105 -46.443073 0.003797013279 0.0004759445984 0.0005766870902 2.863834812e-05 + 210 4 -46.4536082 -46.4397 0.003477049491 0.0006982622456 0.001204174406 0.0001154782847 + 211 4 -46.44819434 -46.436374 0.002955085327 0.0007363684621 0.001461656594 0.0002277550157 + 212 4 -46.43668282 -46.426557 0.00253145389 0.0007326220467 0.001359624213 0.0001251472548 + 213 4 -46.44485583 -46.434009 0.002711707903 0.000870647096 0.001391131194 0.0001541542453 + 214 4 -46.44732696 -46.436262 0.002766239028 0.001116549362 0.002503347159 0.0003211377445 + 215 4 -46.44414241 -46.434505 0.002409352177 0.0008685662223 0.001041637173 4.942106462e-05 + 216 4 -46.45095913 -46.438768 0.003047783488 0.0008482298138 0.001098285027 8.657909629e-05 + 217 4 -46.45111242 -46.440254 0.002714605501 0.0004892442432 0.0006069892915 5.824568303e-05 + 218 4 -46.43463407 -46.42286 0.002943517186 0.0004976409931 0.0007365242698 7.564906264e-05 + 219 4 -46.42611144 -46.418078 0.002008360417 0.001053243552 0.002028412187 0.0002473380313 + 220 4 -46.45344976 -46.440513 0.003234189608 0.0007024129954 0.001158189967 0.0001371889048 + 221 4 -46.41584187 -46.409824 0.001504467167 0.0007558580012 0.001759573812 0.0002386003087 + 222 4 -46.45494987 -46.440329 0.003655216631 0.0005034620022 0.0009534044263 0.0001064495091 + 223 4 -46.45000759 -46.43773 0.003069396495 0.0006831478015 0.000926180328 7.390298375e-05 + 224 4 -46.42538863 -46.416525 0.002215907169 0.0005605993692 0.0007573664899 5.946405938e-05 + 225 4 -46.45386072 -46.440293 0.003391930454 0.0006980795454 0.0007725386722 1.864508071e-05 + 226 4 -46.4527969 -46.43839 0.003601726069 0.0005103417187 0.0005612022808 1.656002337e-05 + 227 4 -46.45374294 -46.438916 0.00370673382 0.0006956794369 0.001650878554 0.0002154167998 +# GSF_110.xyz + config # atoms energy DFT energy energy error force DFT force force error + 228 24 -278.7403996 -279.068761 0.01368172569 2.282668754 1.756353161 0.04745635589 + 229 24 -279.902595 -279.784296 0.004929123883 0.9479314831 0.9057668891 0.02403120774 + 230 24 -279.9942014 -279.901657 0.003856015841 0.2795933118 0.001565946359 0.01120665859 + 231 24 -279.6335344 -279.584238 0.002054016532 1.573004204 1.035572248 0.05514377891 + 232 24 -279.9025974 -279.784283 0.004929767703 0.947921084 0.9056396189 0.02406018404 + 233 24 -279.1817177 -279.302158 0.005018345952 2.388096516 1.771965137 0.06275542538 + 234 24 -279.5900705 -279.55564 0.001434605813 1.950503627 1.405626506 0.05370441115 + 235 24 -279.0106063 -279.246939 0.00984719392 1.577003357 0.4813964151 0.08190583543 + 236 24 -279.1817217 -279.302157 0.005018138375 2.388094324 1.771953347 0.06275588675 + 237 24 -279.0107548 -279.246935 0.009840841347 1.576191869 0.4809484798 0.0819682416 + 238 24 -279.9941671 -279.896025 0.004089255845 0.2809227604 0.01060549839 0.01118927817 + 239 24 -279.6337951 -279.584237 0.002064919631 1.571895405 1.035836121 0.05510997377 + 240 24 -278.8616595 -279.124427 0.0109486445 2.383512182 1.809545887 0.06232801199 + 241 24 -279.2927133 -279.379366 0.003610531084 1.779238829 0.8982692706 0.07658702105 + 242 24 -279.292656 -279.37937 0.003613082676 1.779203263 0.898081355 0.0765940488 + 243 24 -278.8616573 -279.124427 0.01094873842 2.383511745 1.809523374 0.06232387507 + 244 24 -279.9942014 -279.901657 0.003856015842 0.27959331 0.001570374478 0.01120603916 + 245 24 -279.9072278 -279.79264 0.004774491325 0.8361247356 0.8392614852 0.02418251879 + 246 24 -279.9941671 -279.896025 0.004089255843 0.2809227622 0.01060243293 0.01118973247 + 247 24 -278.8973689 -279.206496 0.01288029691 1.390234609 0.005326518563 0.06648378416 + 248 24 -279.590075 -279.55564 0.001434791018 1.950495712 1.4056319 0.05370353355 + 249 24 -279.9072386 -279.79264 0.004774943229 0.8361385582 0.8392625708 0.02418484015 +# GSF_112.xyz + config # atoms energy DFT energy energy error force DFT force force error + 250 30 -345.1428414 -345.175835 0.001099787279 2.717783384 1.057395322 0.1393371019 + 251 30 -346.8213325 -346.361714 0.01532061701 1.6320981 1.220284939 0.1010819808 + 252 30 -346.3061373 -345.795524 0.01702044399 2.435031121 2.112860875 0.1171529224 + 253 30 -344.8834516 -345.164602 0.009371679669 3.314987489 1.765832199 0.1576958872 + 254 30 -346.9668291 -346.593523 0.01244353764 1.327935537 0.01148867129 0.08670065177 + 255 30 -346.7938009 -346.396186 0.01325383111 1.743989434 0.9954683928 0.09783463277 + 256 30 -345.0939055 -345.319406 0.007516682785 3.756566851 1.772040852 0.1806000978 + 257 30 -345.6468551 -345.594794 0.00173536844 3.432645857 1.516014157 0.1670589876 + 258 30 -346.2843474 -345.98566 0.00995624537 2.709563559 1.406252265 0.1356658489 + 259 30 -345.7058793 -345.383994 0.01072951129 2.464665654 0.963574308 0.13389942 + 260 30 -346.9664564 -346.582564 0.01279641284 1.32870642 0.0126740587 0.08670344939 + 261 30 -345.3305431 -345.452139 0.004053195139 4.515828739 2.787719406 0.1519418929 + 262 30 -346.966836 -346.593523 0.01244376534 1.327919807 0.01148834 0.08669988209 + 263 30 -345.5935851 -345.281949 0.01038786965 2.922665543 1.873142686 0.1300383724 + 264 30 -346.157169 -345.928661 0.007616932828 3.42803556 2.100874472 0.1330089569 + 265 30 -344.6836135 -345.111657 0.01426811685 4.87813643 3.358068319 0.1517605655 + 266 30 -346.8140968 -346.367123 0.01489912587 1.700448289 1.335797131 0.1014030448 + 267 30 -346.9664062 -346.582565 0.0127947081 1.328695393 0.01254743735 0.08670444025 + 268 30 -344.5284456 -344.91356 0.012837147 4.30679737 3.441834403 0.1293440404 + 269 30 -346.3471173 -345.836703 0.01701381162 2.177883948 1.608769148 0.1178087924 + 270 30 -344.9135302 -344.984307 0.002359225817 3.517317775 2.542628782 0.122092966 + 271 30 -346.7846048 -346.393931 0.01302245877 1.941770224 1.211680725 0.09898842713 +# Liquid.xyz + config # atoms energy DFT energy energy error force DFT force force error + 272 100 -1104.74829 -1105.601723 0.008534329546 31.13590643 31.39853886 0.5826598142 + 273 100 -1099.007356 -1099.673012 0.006656557481 34.30763539 32.03167218 0.6355970492 + 274 100 -1123.744375 -1121.31506 0.0242931528 23.69463257 20.81076453 0.4843518851 +# Surface.xyz + config # atoms energy DFT energy energy error force DFT force force error + 275 24 -279.9941674 -279.911828 0.003430809358 0.2809230273 0.002753093533 0.01155715982 + 276 48 -551.0953781 -555.359452 0.08883487284 6.541312712 0.003020630398 0.1949601982 + 277 40 -458.209131 -459.216162 0.02517577443 5.605061426 5.0461364 0.1098503638 + 278 40 -459.8554229 -461.144076 0.03221632783 2.691145822 0.005582740008 0.08174930001 + 279 24 -279.8970746 -279.635146 0.01091369091 1.238573481 1.288799837 0.008644383713 + 280 30 -346.9668295 -346.592525 0.01247681774 1.32793475 0.008446203407 0.08664452133 + 281 30 -345.8871537 -345.744506 0.004754921864 3.992236552 3.124961367 0.08594721633 +# Volume_A15.xyz + config # atoms energy DFT energy energy error force DFT force force error + 282 8 -66.46788051 -66.990732 0.06535643627 9.752469663e-15 0 1.665479097e-15 + 283 8 -72.67646146 -72.957807 0.03516819273 2.586146435e-14 0 4.592824963e-15 + 284 8 -94.20621366 -94.145745 0.00755858243 1.888003685e-14 0 2.536262854e-15 + 285 8 -94.43981933 -94.554682 0.01435783313 5.386472433e-15 0 7.930900378e-16 + 286 8 -79.39814886 -79.438363 0.005026767697 2.732255702e-14 0 4.777139332e-15 + 287 8 -69.38946962 -69.627817 0.02979342197 4.097415198e-15 0 6.093939011e-16 + 288 8 -83.05531805 -82.604907 0.05630138147 5.707505975e-15 0 9.444123724e-16 + 289 8 14.36690687 14.89048 0.0654466408 4.4225873e-14 0 6.966360359e-15 + 290 8 -94.13472519 -94.367599 0.02910922586 1.366361161e-14 0 1.887762444e-15 + 291 8 -89.38757156 -89.248227 0.01741807051 7.77370779e-15 0 1.130389185e-15 + 292 8 -87.49741165 -87.211997 0.03567683079 6.822093797e-15 0 9.11308066e-16 + 293 8 -93.42285179 -93.66897 0.03076477666 2.411445427e-15 0 4.058488494e-16 + 294 8 -8.05187323 -7.989166 0.007838403786 7.012640574e-14 0 1.102472786e-14 + 295 8 -85.3779751 -84.982834 0.04939263793 2.716993442e-15 0 4.647613313e-16 + 296 8 -92.37490481 -92.536373 0.0201835236 1.315958485e-14 0 1.882608652e-15 + 297 8 -26.56925158 -26.77612 0.02585855302 5.079538464e-14 0 8.697279448e-15 + 298 8 -77.90929192 -77.544107 0.04564811452 4.172342826e-15 0 7.131159089e-16 + 299 8 -80.55632181 -80.114217 0.05526310126 7.985686614e-15 0 1.195874996e-15 + 300 8 -41.83202596 -42.143041 0.03887688062 4.657987766e-14 0 8.540891409e-15 + 301 8 -91.02235339 -91.040671 0.002289700674 5.29233855e-15 0 8.086702604e-16 + 302 8 -84.76781055 -84.499231 0.03357244376 3.520461367e-14 0 6.70250169e-15 + 303 8 -60.71236154 -61.825173 0.1391014324 7.011275997e-15 0 1.104512893e-15 + 304 8 -91.5794594 -91.156873 0.05282330009 3.722647197e-15 0 6.096739866e-16 + 305 8 -54.28408457 -54.658744 0.04683242815 1.027218023e-13 0 1.699815447e-14 + 306 8 -72.29317827 -72.277255 0.00199040924 2.147214247e-15 0 3.631173776e-16 + 307 8 -75.14428628 -74.923334 0.02761903549 4.875315485e-15 0 8.058016421e-16 + 308 8 -64.41647714 -64.798066 0.04769860741 8.515566542e-15 0 1.300175245e-15 + 309 8 -93.29905733 -93.048342 0.03133941583 1.392455458e-14 0 1.75636545e-15 + 310 8 -63.56375833 -64.38702 0.1029077093 3.169925692e-15 0 4.425351867e-16 + 311 8 -88.81067445 -88.352871 0.05722543104 1.824573667e-14 0 3.223116218e-15 +# Volume_BCC.xyz + config # atoms energy DFT energy energy error force DFT force force error + 312 2 -16.38936242 -16.763625 0.1871312901 8.438105833e-16 0 3.261280135e-16 + 313 2 16.19675433 16.314145 0.05869533665 6.012211515e-14 0 2.140301825e-14 + 314 2 -21.24238574 -21.209071 0.01665736942 3.105315998e-15 0 1.031580172e-15 + 315 2 -15.80560502 -15.780524 0.01254051028 3.075772419e-14 0 1.04682611e-14 + 316 2 -19.05526774 -19.002205 0.02653137193 5.049484454e-15 0 1.840167643e-15 + 317 2 -22.67434567 -22.620568 0.02688883674 8.42211374e-16 0 2.844946501e-16 + 318 2 4.04311049 4.096885 0.02688725502 1.697721462e-14 0 5.111651843e-15 + 319 2 56.2105911 56.26276 0.02608445186 2.167345189e-13 0 8.162180947e-14 + 320 2 -22.55797904 -22.585113 0.01356697915 1.62710774e-15 0 5.666763355e-16 + 321 2 -21.75972417 -21.795501 0.0178884163 1.403784713e-15 0 3.978299172e-16 + 322 2 33.30678917 33.110078 0.09835558332 4.389819223e-14 0 1.229051583e-14 + 323 2 -20.82125169 -20.885998 0.0323731563 1.078546098e-15 0 2.960594732e-16 + 324 2 -23.55239721 -23.601336 0.02446939304 1.098352585e-15 0 3.53350523e-16 + 325 2 -23.17147126 -23.207313 0.01792086946 1.690886327e-15 0 6.164070796e-16 + 326 2 -19.78146338 -19.898089 0.05831281177 3.071791199e-15 0 1.188863822e-15 + 327 2 -23.45038238 -23.405474 0.02245418985 1.35097431e-15 0 4.949744318e-16 + 328 2 -4.653232293 -4.781324 0.06404585371 8.217105136e-15 0 2.951342874e-15 + 329 2 -18.67517238 -18.864936 0.09488180756 5.14040454e-16 0 1.896631e-16 + 330 2 -17.53439276 -17.813086 0.1393466189 6.912475817e-16 0 2.521131452e-16 + 331 2 -11.04889659 -11.197201 0.07415220345 1.082601284e-14 0 4.046820749e-15 + 332 2 -23.68489671 -23.696705 0.00590414498 1.843452652e-15 0 5.315481851e-16 +# Volume_FCC.xyz + config # atoms energy DFT energy energy error force DFT force force error + 333 4 -19.13390887 -19.075994 0.01447871809 1.517335469e-14 0 3.900232098e-15 + 334 4 -35.26038882 -34.873619 0.0966924543 3.754176171e-16 0 8.829019691e-17 + 335 4 -43.93272346 -43.950003 0.004319884817 1.957527644e-15 0 4.836987292e-16 + 336 4 -41.03733831 -40.991909 0.01135732773 2.229474894e-15 0 5.093220406e-16 + 337 4 -43.4228254 -43.453929 0.00777589967 2.787997321e-14 0 8.011425939e-15 + 338 4 -42.67289278 -42.686077 0.003296054 9.84568285e-16 0 2.229119667e-16 + 339 4 -33.58842759 -33.224653 0.09094364633 5.773580884e-16 0 1.303933813e-16 + 340 4 -27.01189372 -26.862709 0.03729618105 5.151726288e-15 0 1.109453787e-15 + 341 4 -25.59030438 -25.519883 0.01760534598 2.863765244e-16 0 7.531591092e-17 + 342 4 3.441093749 3.463071 0.005494312716 2.696629063e-14 0 6.828072631e-15 + 343 4 -31.9073245 -31.59595 0.07784362479 8.890859753e-16 0 1.682681772e-16 + 344 4 -45.06068744 -45.100466 0.009944641012 1.71159984e-15 0 3.996665291e-16 + 345 4 -46.03981427 -46.052258 0.0031109323 1.705627547e-15 0 4.273202162e-16 + 346 4 -30.24326213 -30.001189 0.06051828302 8.403226845e-16 0 2.104797818e-16 + 347 4 -22.957351 -22.8504 0.02673775024 6.125121657e-16 0 1.416690839e-16 + 348 4 -9.130654755 -9.164691 0.008509061334 1.894766019e-14 0 4.742914684e-15 + 349 4 -24.21746226 -24.150343 0.01677981454 1.777054657e-16 0 4.452456922e-17 + 350 4 -46.44761241 -46.426795 0.005204351765 2.043289244e-15 0 5.31981866e-16 + 351 4 -28.62111495 -28.451145 0.04249248833 8.802221276e-15 0 2.537755885e-15 + 352 4 40.31615798 40.341566 0.006352005141 2.120221165e-14 0 5.59689556e-15 + 353 4 19.51151427 19.617912 0.02659943252 6.461385682e-14 0 1.647388493e-14 + 354 4 -27.06356399 -26.954384 0.02729499736 3.089999778e-16 0 7.849623729e-17 + 355 4 -46.3678929 -46.323696 0.01104922394 2.195905041e-15 0 5.105869431e-16 + 356 4 -45.87221055 -45.828947 0.01081588677 1.843344298e-15 0 4.174901166e-16 + 357 4 -38.47076405 -38.16029 0.0776185126 2.683812325e-15 0 6.998163623e-16 + 358 4 -33.06813795 -32.919741 0.03709923634 1.577584492e-14 0 4.412991963e-15 + 359 4 -41.34431995 -41.272675 0.01791123821 2.234618078e-15 0 5.98499928e-16 + 360 4 -39.95757678 -39.753322 0.05106369446 1.172665551e-15 0 2.900618248e-16 + 361 4 -37.66252943 -37.547435 0.02877360828 6.430065721e-15 0 1.652468671e-15 + 362 4 -36.89659259 -36.52595 0.09266064636 3.213653781e-15 0 8.769027171e-16 + 363 4 -45.03250721 -45.016087 0.004105053074 1.112789617e-15 0 2.434395278e-16 diff --git a/examples/PACKAGES/pod/Ta/Ta_training_errors.pod b/examples/PACKAGES/pod/Ta/Ta_training_errors.pod new file mode 100644 index 0000000000..39b7af3723 --- /dev/null +++ b/examples/PACKAGES/pod/Ta/Ta_training_errors.pod @@ -0,0 +1,20 @@ +**************** Begin of Error Analysis for the Training Data Set **************** +--------------------------------------------------------------------------------------------------- + File | # configs | # atoms | MAE energy | RMSE energy | MAE force | RMSE force +--------------------------------------------------------------------------------------------------- +Displaced_A15.xyz 9 576 0.011286 0.011334 0.113353 0.141650 +Displaced_BCC.xyz 9 486 0.012178 0.014005 0.240613 0.312191 +Displaced_FCC.xyz 9 432 0.001445 0.001591 0.082688 0.103800 +Elastic_BCC.xyz 100 200 0.004452 0.004783 0.000010 0.000013 +Elastic_FCC.xyz 100 400 0.002865 0.002923 0.000146 0.000207 +GSF_110.xyz 22 528 0.005804 0.006853 0.047276 0.097819 +GSF_112.xyz 22 660 0.010588 0.011555 0.123342 0.191090 +Liquid.xyz 3 300 0.013161 0.015355 0.567536 0.757847 +Surface.xyz 7 236 0.025400 0.037555 0.096121 0.295623 +Volume_A15.xyz 30 240 0.039281 0.048678 0.000000 0.000000 +Volume_BCC.xyz 21 42 0.049766 0.067554 0.000000 0.000000 +Volume_FCC.xyz 31 124 0.030056 0.041738 0.000000 0.000000 +--------------------------------------------------------------------------------------------------- +All files 363 4224 0.012917 0.025797 0.122473 0.260052 +--------------------------------------------------------------------------------------------------- +**************** End of Error Analysis for the Training Data Set **************** diff --git a/examples/PACKAGES/pod/Ta/XYZ/Displaced_A15.xyz b/examples/PACKAGES/pod/Ta/XYZ/Displaced_A15.xyz new file mode 100644 index 0000000000..b144703144 --- /dev/null +++ b/examples/PACKAGES/pod/Ta/XYZ/Displaced_A15.xyz @@ -0,0 +1,594 @@ +64 +Lattice="10.6000003815 0.0 0.0 0.0 10.6000003815 0.0 0.0 0.0 10.6000003815" Properties=species:S:1:pos:R:3:forces:R:3 energy=-754.220443 stress="23963.03 -518.08 331.99 -518.08 26158.899999999998 289.93 331.99 289.93 26014.94" +Ta 10.54497 10.54551 10.5956 0.738379 0.48581 0.018519 +Ta 2.6058 2.59577 2.66276 0.983004 0.695353 -0.423917 +Ta 1.29338 2.62737 0.06659 0.967488 0.116743 -0.589823 +Ta 3.97859 2.60074 0.05226 -0.084389 0.137046 -0.423367 +Ta 0.06826 1.26322 2.67108 -0.470328 1.296441 -0.423078 +Ta 0.03489 4.006 2.58088 -0.263493 -1.182047 0.521328 +Ta 2.60404 0.03209 1.27573 0.332524 -0.382338 0.466834 +Ta 2.61384 0.03978 4.00017 0.19652 -0.552756 -0.617059 +Ta 5.26731 10.53909 0.0525 0.340753 0.932737 -1.082711 +Ta 8.00375 2.64902 2.69207 -0.352834 -0.034069 -0.546853 +Ta 6.64426 2.6613 10.54 0.209447 -0.170553 0.255905 +Ta 9.33824 2.64457 0.03106 -1.248523 0.1324 -0.277314 +Ta 5.3522 1.2665 2.5671 -0.296298 1.327488 0.591352 +Ta 5.27655 4.04903 2.65011 0.225842 -1.705193 -0.220596 +Ta 7.9997 10.54384 1.3323 -0.602859 0.598417 0.360383 +Ta 7.97961 10.59814 4.02363 -0.487819 0.018537 -0.681676 +Ta 0.07703 5.36114 0.02699 -0.850702 -0.481463 -0.618219 +Ta 2.6646 7.93725 2.60955 -0.375888 0.3131 0.609637 +Ta 1.40379 7.96668 10.52251 -1.425719 -0.081346 0.714056 +Ta 3.99035 7.99423 10.59771 -0.152265 -0.539619 0.318009 +Ta 0.04355 6.56889 2.62727 -0.178473 1.482119 0.427439 +Ta 0.00703 9.28757 2.68364 0.269104 -1.208309 -0.327712 +Ta 2.56957 5.34141 1.33893 0.850349 -0.517951 0.275559 +Ta 2.72447 5.25375 4.04037 -0.588363 0.226576 -0.96233 +Ta 10.53684 10.5759 5.2221 0.629328 0.101208 1.170955 +Ta 2.66913 2.7096 7.94723 0.175608 -0.725726 0.018084 +Ta 1.35438 2.68364 5.23358 -0.672848 -0.376194 0.690747 +Ta 3.92914 2.57652 5.21831 1.314233 0.49323 0.453261 +Ta 0.08152 1.31737 7.90103 -0.403463 -0.248525 0.230807 +Ta 0.01596 3.94268 7.99393 -0.081478 0.863863 -0.071733 +Ta 2.6785 10.52779 6.63557 -0.387653 0.744336 -0.69563 +Ta 2.57563 10.5398 9.20066 0.204661 1.016501 1.272453 +Ta 5.28026 5.2908 10.53874 0.210489 -0.369673 0.610136 +Ta 8.02116 8.00301 2.56791 -0.618631 -0.801014 1.16881 +Ta 6.56126 7.9104 0.04457 1.247918 -0.045758 -0.325354 +Ta 9.26485 7.95508 10.58594 0.342738 -0.215167 -0.069832 +Ta 5.26103 6.62842 2.63265 0.441032 0.314676 -0.03073 +Ta 5.28955 9.23968 2.5673 0.215784 0.14419 0.976532 +Ta 8.00221 5.33276 1.34132 -0.277749 -0.258368 -0.418189 +Ta 7.91864 5.28423 3.97891 0.132647 0.303744 -0.143621 +Ta 5.27037 0.01177 5.31967 0.293403 0.10204 -0.586267 +Ta 7.97577 2.58846 7.90284 -0.0766 0.318418 0.741565 +Ta 6.67111 2.70945 5.31433 -1.193866 -0.235149 -0.180348 +Ta 9.29025 2.58105 5.29066 0.286858 0.294859 0.204099 +Ta 5.2532 1.26795 7.91799 0.289819 0.925706 0.429944 +Ta 5.32703 4.04747 7.87622 0.177769 -1.251772 0.201923 +Ta 7.8991 10.56576 6.68405 0.011121 0.010154 -0.513286 +Ta 8.01539 10.54873 9.32177 -0.770371 0.244167 -0.539961 +Ta 10.59055 5.23373 5.29112 -0.122463 0.783939 0.309844 +Ta 2.7178 8.02017 8.01996 -0.833015 -1.143659 -1.244648 +Ta 1.28755 7.95382 5.35947 0.318174 -0.327947 -0.137883 +Ta 3.98149 8.00712 5.27935 -0.672169 -0.306686 0.158866 +Ta 0.04771 6.7013 8.02541 0.000928 -1.568952 -0.556323 +Ta 10.53454 9.27538 7.94586 0.490919 0.513788 -0.187133 +Ta 2.60384 5.37826 6.65237 0.107427 -0.010953 -0.135414 +Ta 2.65026 5.25782 9.27591 0.0403 0.521312 0.035425 +Ta 5.30975 5.33548 5.25863 -0.196083 -0.020488 0.519869 +Ta 7.98152 7.93147 7.94727 -0.52423 -0.25306 0.358801 +Ta 6.58336 7.99956 5.3353 0.546995 -0.296434 -0.355434 +Ta 9.20518 8.00165 5.34211 0.753656 -0.424927 -0.364529 +Ta 5.28813 6.67781 8.01704 0.382562 -1.149823 -0.614214 +Ta 5.2968 9.20687 7.96818 0.395589 1.452637 -0.053896 +Ta 7.90382 5.25794 6.62358 0.295654 0.152651 -0.023568 +Ta 8.00072 5.28621 9.26356 -0.210447 -0.178269 0.331507 +64 +Lattice = "10.6000003815 0.0 0.0 0.0 10.6000003815 0.0 0.0 0.0 10.6000003815" Properties=species:S:1:pos:R:3:forces:R:3 energy=-753.865255 stress="25885.719999999998 -817.02 -36.62 -817.02 23024.370000000003 -107.14 -36.62 -107.14 29257.940000000002" +Ta 0.04908 0.00115 10.57826 -0.437757 -0.090743 0.15803 +Ta 2.61654 2.71455 2.72901 0.449605 -0.435267 -0.828991 +Ta 1.39595 2.61446 10.52477 -2.072616 -0.051825 0.877711 +Ta 3.90381 2.6756 0.06766 2.144694 -0.090086 0.075882 +Ta 0.05742 1.31249 2.58872 -0.607352 0.532786 0.378598 +Ta 0.05697 4.05163 2.67585 -0.777264 -1.885963 -0.048956 +Ta 2.58852 10.55529 1.39238 0.39704 0.642203 -1.068312 +Ta 2.6599 0.00552 4.01733 0.064098 0.179003 -0.177005 +Ta 5.26427 10.58342 10.56227 -0.033574 0.346172 0.680676 +Ta 7.89236 2.6016 2.71779 0.82825 0.497825 -0.656618 +Ta 6.6321 2.63976 10.53024 -0.906833 -0.010611 0.365963 +Ta 9.21243 2.59505 0.06665 1.376958 0.080901 -0.441221 +Ta 5.30011 1.36599 2.71012 -0.451121 -0.806818 -0.284864 +Ta 5.34341 4.00547 2.68181 -0.579497 -0.053233 -0.287661 +Ta 8.03029 10.56076 1.30843 -0.336212 0.217222 0.347111 +Ta 7.92561 0.06228 3.97753 0.289092 -0.611239 0.468926 +Ta 0.03512 5.22736 0.04735 -0.453067 0.31946 -0.683277 +Ta 2.66581 7.98939 2.66641 -0.662165 -0.149468 -0.087742 +Ta 1.29579 7.92632 10.58792 0.533672 -0.070014 0.096584 +Ta 3.93283 7.88849 0.0809 -0.020345 0.48243 -0.397113 +Ta 10.5959 6.57196 2.63734 -0.21413 1.634343 -0.170283 +Ta 10.56437 9.25635 2.72679 0.039077 -0.10791 -0.719333 +Ta 2.72037 5.31366 1.24606 -0.29128 0.032642 2.069655 +Ta 2.69611 5.37769 3.9661 0.124193 -0.201649 -0.71097 +Ta 0.07372 10.52817 5.29093 -0.789865 0.878036 0.020208 +Ta 2.61857 2.70351 8.02211 0.56874 -0.164877 -0.950145 +Ta 1.31355 2.72095 5.3785 -0.076491 -0.288 -0.243411 +Ta 3.89644 2.57087 5.2537 1.240837 0.47266 0.656808 +Ta 10.58888 1.30214 7.86943 0.255233 0.272119 0.455833 +Ta 0.04887 4.01408 7.90126 -0.289007 -0.346757 0.12366 +Ta 2.72928 0.06945 6.66193 -0.685761 -0.244829 -0.502888 +Ta 2.58101 0.04872 9.23137 0.339459 -0.233213 1.335765 +Ta 5.34108 5.36912 0.05283 -0.013471 -0.867347 -0.774099 +Ta 7.88186 7.9551 2.72317 0.734048 0.105961 -1.272735 +Ta 6.55598 7.99717 10.53185 1.370203 -0.182535 0.648941 +Ta 9.31791 7.96193 0.00269 -1.127055 -0.301221 0.303103 +Ta 5.24453 6.70165 2.62389 0.229886 -1.204827 0.172016 +Ta 5.32205 9.27675 2.72023 -0.32778 1.003783 -0.614408 +Ta 7.86861 5.30945 1.31803 0.764624 -0.183537 -0.038771 +Ta 7.92333 5.29865 3.91698 0.625441 0.03111 0.856974 +Ta 5.25271 10.51825 5.34383 0.561912 0.756882 -0.236387 +Ta 8.0222 2.60801 7.87152 -0.458387 0.66717 1.04408 +Ta 6.60212 2.59356 5.37931 0.070225 0.10084 -0.482484 +Ta 9.30602 2.68963 5.26783 -0.344876 -0.18676 -0.015312 +Ta 5.34458 1.3199 7.96406 -0.207209 0.12974 -0.023385 +Ta 5.27345 3.97769 7.88365 0.225407 0.210336 0.49958 +Ta 7.90209 0.06243 6.6921 0.296301 -0.597326 -1.321812 +Ta 7.9791 10.56722 9.28911 -0.274024 0.193096 0.130562 +Ta 0.08155 5.37803 5.24262 -1.153238 -0.394578 0.405264 +Ta 2.69772 8.006 7.99419 -0.445287 -0.699603 -0.114074 +Ta 1.38725 7.96453 5.37281 -1.117986 -0.159911 -0.252436 +Ta 3.9138 7.92522 5.25427 1.483723 -0.15328 0.336593 +Ta 10.54558 6.64409 7.90011 0.381189 -0.437364 0.391497 +Ta 0.0414 9.23222 7.94529 -0.069632 0.550601 0.135542 +Ta 2.6176 5.26509 6.55154 0.497368 0.356473 1.817883 +Ta 2.67779 5.27183 9.34564 -0.09738 0.356697 -2.092389 +Ta 5.37167 5.22358 5.28383 -1.082933 0.58337 0.189313 +Ta 7.97831 7.95033 7.98746 -0.334998 -0.148464 -0.752988 +Ta 6.58772 7.97118 5.22845 0.250508 -0.279802 0.963668 +Ta 9.29703 7.96398 5.22074 -0.269342 -0.065478 0.796032 +Ta 5.35894 6.66603 8.02645 -0.160453 -0.945482 -0.543903 +Ta 5.25491 9.2658 7.91135 0.540075 0.33829 0.275545 +Ta 7.86723 5.29649 6.61035 0.852005 0.19428 0.109663 +Ta 8.01927 5.21862 9.29005 -0.365475 0.483588 -0.393695 +64 +Lattice = "10.6000003815 0.0 0.0 0.0 10.6000003815 0.0 0.0 0.0 10.6000003815" Properties=species:S:1:pos:R:3:forces:R:3 energy=-754.0221 stress="26594.42 1368.85 19.48 1368.85 26417.43 -1442.27 19.48 -1442.27 23937.75" +Ta 10.59872 10.5966 0.05505 -0.231571 0.031614 -0.560153 +Ta 2.72054 2.66769 2.56793 -0.779697 -0.12909 0.784258 +Ta 1.2783 2.60895 0.03547 0.744629 0.548126 -0.214124 +Ta 3.95508 2.65628 10.5551 -0.165396 0.001128 0.026529 +Ta 0.03293 1.39934 2.6967 0.072305 -0.873594 -0.208971 +Ta 10.5651 4.05678 2.65596 0.527021 -1.331302 0.031311 +Ta 2.60171 10.52714 1.285 0.350354 0.537482 0.600499 +Ta 2.68709 10.58122 3.91851 -0.372039 0.361715 0.809071 +Ta 5.31795 0.08026 0.03906 -0.106989 -0.635521 -0.720814 +Ta 8.02486 2.64122 2.59891 -0.739467 0.359337 0.641206 +Ta 6.60369 2.73118 0.06843 0.678906 -0.310297 -0.697991 +Ta 9.30745 2.57138 10.58055 -1.01243 0.693756 -0.108245 +Ta 5.35248 1.38217 2.58572 -0.13929 -0.071214 0.685498 +Ta 5.27678 4.05493 2.58839 0.361124 -1.418968 0.248615 +Ta 7.97704 10.56983 1.33943 -0.226745 0.137547 0.385956 +Ta 7.9205 10.58925 4.02197 -0.097537 0.228845 -1.559747 +Ta 10.58688 5.37691 0.04598 -0.241278 -0.869238 -0.792618 +Ta 2.56928 7.98994 2.68334 0.744667 -0.548988 -0.270704 +Ta 1.26784 7.95054 0.01116 0.281468 0.07337 -0.236417 +Ta 3.9146 8.01616 10.55414 0.995063 -0.220303 0.353326 +Ta 10.54844 6.60413 2.59023 0.147364 1.01708 0.40752 +Ta 10.5757 9.25815 2.63489 -0.140904 0.492732 0.101556 +Ta 2.66105 5.2801 1.30191 -0.364702 0.402682 -0.011419 +Ta 2.6432 5.35885 3.92681 -0.227023 -0.472196 0.151009 +Ta 10.53608 10.55781 5.26416 1.288203 0.545609 0.251638 +Ta 2.60772 2.73015 7.98088 0.261788 -1.092199 -0.8427 +Ta 1.24268 2.58441 5.28609 1.180704 0.409883 0.0645 +Ta 3.99146 2.5757 5.25407 -0.757243 0.334145 0.121851 +Ta 10.51746 1.40756 8.00795 0.326733 -1.91194 -0.281886 +Ta 0.00974 3.9413 7.96949 -0.442991 1.619821 -0.172523 +Ta 2.7025 10.58938 6.62226 -0.427598 0.249852 0.029935 +Ta 2.67552 0.00093 9.32012 -0.030321 0.09604 -1.176661 +Ta 5.21931 5.28624 10.52268 0.567659 0.751713 1.05061 +Ta 7.92372 7.92335 2.69137 -0.276611 0.573618 -0.487148 +Ta 6.67129 7.91947 0.00781 -1.67251 0.193902 0.064344 +Ta 9.22152 8.02659 0.00287 0.769306 -0.25307 0.030428 +Ta 5.33288 6.56827 2.67559 -0.356132 1.879818 -0.275818 +Ta 5.21843 9.3313 2.61368 0.313957 -1.184708 0.134729 +Ta 7.93465 5.34206 1.38987 -0.27093 -0.232294 -1.254009 +Ta 7.94771 5.35777 3.99603 -0.441572 -0.509412 0.402878 +Ta 5.28258 10.54181 5.27443 0.165589 0.546578 -0.181307 +Ta 7.87019 2.58685 7.88448 0.864444 0.720171 0.90474 +Ta 6.61351 2.69961 5.33299 -0.298459 -0.117041 -0.655843 +Ta 9.20963 2.61413 5.29428 0.646321 0.352518 0.003302 +Ta 5.381 1.3824 7.94181 -1.162347 -0.755975 0.017657 +Ta 5.28467 4.01816 7.99502 0.024319 -0.640279 -0.524219 +Ta 8.00243 10.5584 6.55969 -0.64714 0.462493 1.495007 +Ta 7.92724 0.03497 9.30326 0.221614 -0.134477 -0.661187 +Ta 10.55391 5.32768 5.23195 0.476568 -0.381016 0.980462 +Ta 2.64406 7.95567 7.93345 0.001297 0.120229 0.191712 +Ta 1.2986 7.9027 5.33624 0.708615 0.289977 -0.158132 +Ta 4.04604 7.87659 5.36207 -1.974177 0.710669 -0.438506 +Ta 0.04337 6.69689 8.01066 -0.426712 -1.619512 -0.55647 +Ta 10.54014 9.26136 7.89857 0.447195 1.282555 0.234867 +Ta 2.68344 5.29148 6.55058 -0.713159 0.045261 0.661323 +Ta 2.61535 5.26646 9.22004 -0.124682 0.621019 0.504493 +Ta 5.22677 5.33996 5.32711 1.047955 -1.01859 -0.083156 +Ta 7.93781 8.02504 7.94133 -0.089305 -0.92943 0.174588 +Ta 6.58943 7.89688 5.28857 1.109411 0.43459 0.232028 +Ta 9.26138 8.02661 5.25779 -0.279333 -0.594174 0.435718 +Ta 5.27411 6.62462 8.02195 0.25952 0.675178 -0.659935 +Ta 5.30985 9.30627 7.88256 -0.174466 -0.148032 0.732729 +Ta 7.99384 5.30652 6.67382 -0.405756 0.105152 -0.448951 +Ta 7.89346 5.23521 9.29012 0.232414 0.496659 0.293761 +64 +Lattice = "10.6000003815 0.0 0.0 0.0 10.6000003815 0.0 0.0 0.0 10.6000003815" Properties=species:S:1:pos:R:3:forces:R:3 energy=-754.279613 stress="23907.050000000003 444.79 -765.15 444.79 24515.940000000002 375.59 -765.15 375.59 27487.829999999998" +Ta 0.00046 10.54735 10.58932 0.114704 0.911029 0.002417 +Ta 2.73129 2.71027 2.64805 -1.312269 -0.768934 0.192601 +Ta 1.30416 2.70676 0.05081 -0.549542 -0.385376 -0.090451 +Ta 3.9224 2.56802 0.05914 1.338111 0.432571 -0.522326 +Ta 10.52754 1.32714 2.64946 0.526452 0.497736 0.118023 +Ta 10.58917 3.98207 2.62548 0.027974 -0.098405 0.015828 +Ta 2.64792 0.02452 1.38081 -0.204416 -0.141407 -1.100083 +Ta 2.59488 0.05512 3.95199 0.552837 -0.178236 0.473214 +Ta 5.22138 10.52799 0.03746 0.576453 0.970244 -0.579639 +Ta 7.88634 2.63138 2.61996 0.902337 0.559648 1.080475 +Ta 6.69452 2.7219 0.06773 -2.02583 -0.335157 -0.878841 +Ta 9.21373 2.71014 0.05862 1.514389 -0.315085 -0.524943 +Ta 5.3281 1.39418 2.60417 -0.26237 -1.230172 0.420769 +Ta 5.2637 3.95414 2.69271 0.464892 1.262082 -0.270578 +Ta 7.90795 0.06254 1.39383 0.167236 -0.202524 -1.058609 +Ta 7.94511 10.51799 3.98105 0.185425 0.426977 0.087026 +Ta 10.57577 5.37732 10.54307 0.605017 -0.422613 0.786988 +Ta 2.70528 7.92008 2.71672 -0.16284 0.53844 -0.654288 +Ta 1.40108 7.96156 10.56262 -1.21314 -0.180661 0.475699 +Ta 3.94259 7.88815 10.51865 0.693466 0.102031 0.668128 +Ta 0.05295 6.61799 2.66959 -0.152823 0.384734 -0.111952 +Ta 0.0041 9.32626 2.60831 0.291126 -0.868362 0.393931 +Ta 2.66819 5.248 1.34131 -0.179205 0.374746 -1.338983 +Ta 2.57134 5.28818 3.89302 0.254849 0.332843 1.641299 +Ta 0.08271 0.0036 5.29844 -1.048937 -0.101097 -0.319135 +Ta 2.56753 2.70781 8.0214 1.017266 -0.740171 -0.566662 +Ta 1.30891 2.64281 5.34837 0.403908 0.226225 -0.301649 +Ta 3.96187 2.73119 5.27973 0.36121 -0.332647 0.382172 +Ta 1e-05 1.31854 7.9193 -0.134684 -0.420557 0.336931 +Ta 10.58062 3.94546 7.96883 0.091943 0.393742 -0.089206 +Ta 2.60743 10.5971 6.59487 0.481207 0.365851 0.394927 +Ta 2.59982 0.05852 9.25312 0.155387 -0.327875 0.594672 +Ta 5.343 5.33735 10.58109 -0.354201 -0.481611 0.070778 +Ta 8.0183 7.97031 2.57959 -0.638975 -0.537484 0.627877 +Ta 6.56415 8.01596 10.54595 1.046228 -0.215805 0.200416 +Ta 9.3142 8.00708 0.07335 -0.389686 -0.132571 -0.908238 +Ta 5.28371 6.62455 2.60926 0.349202 0.295946 0.196375 +Ta 5.365 9.35513 2.65232 -0.276908 -1.072093 0.33487 +Ta 7.99421 5.27285 1.26512 -0.338816 0.417402 0.989409 +Ta 7.93677 5.32858 3.96514 -0.064889 -0.126317 0.026895 +Ta 5.29831 0.06384 5.34991 -0.237157 -0.294846 -0.502816 +Ta 7.98101 2.63404 7.9256 -0.201557 -0.256297 0.618786 +Ta 6.68687 2.58375 5.27465 -0.880538 0.491034 0.225753 +Ta 9.31724 2.59345 5.36746 -0.514197 0.139552 -0.594594 +Ta 5.30469 1.39236 7.90055 -0.241299 -1.127636 0.542064 +Ta 5.36637 3.96474 7.94588 -0.457508 0.623304 -0.045721 +Ta 7.96852 10.54416 6.59542 0.045419 0.456297 0.883036 +Ta 8.01553 0.03504 9.33832 -0.703646 -0.11872 -0.79377 +Ta 10.53751 5.2766 5.33019 0.186467 0.354842 -0.464356 +Ta 2.67185 7.99879 7.94992 -0.462825 -0.70472 -0.660751 +Ta 1.32425 7.97625 5.27971 -0.162279 -0.301471 0.211964 +Ta 3.99685 7.99185 5.33585 0.128267 -0.133747 -0.138891 +Ta 0.00789 6.57979 7.98241 0.224508 0.703879 -0.465686 +Ta 10.56258 9.24146 7.92821 0.298346 0.405066 0.164699 +Ta 2.62183 5.25654 6.57113 0.142704 0.580891 0.073062 +Ta 2.62673 5.24695 9.20881 0.295489 0.626384 1.099379 +Ta 5.2818 5.28462 5.32566 0.254473 0.449594 -0.359163 +Ta 7.95127 7.97098 7.89566 -0.109482 -0.099213 1.128432 +Ta 6.69889 8.00506 5.30113 -1.722141 -0.416627 -0.484246 +Ta 9.22006 8.02217 5.33119 1.590079 -0.664694 -0.530738 +Ta 5.3507 6.64908 7.93434 -0.272774 -0.59058 -0.047159 +Ta 5.22906 9.26778 7.99824 0.577132 0.931079 -0.408552 +Ta 7.96263 5.26515 6.66322 -0.184291 0.081851 -0.89845 +Ta 8.00683 5.33642 9.24793 -0.405275 -0.01231 0.25158 +64 +Lattice = "10.6000003815 0.0 0.0 0.0 10.6000003815 0.0 0.0 0.0 10.6000003815" Properties=species:S:1:pos:R:3:forces:R:3 energy=-753.777209 stress="31083.73 984.91 488.79 984.91 26853.05 -530.71 488.79 -530.71 21811.85" +Ta 0.03525 10.52946 0.01429 -0.625379 0.911584 -0.075876 +Ta 2.67988 2.6352 2.61064 -0.661 -0.104938 -0.074584 +Ta 1.30583 2.57403 10.55611 0.849169 0.350685 0.363742 +Ta 4.00357 2.65046 10.56488 -0.371611 0.087052 0.454216 +Ta 10.52633 1.38198 2.61375 0.406758 -1.451427 0.208757 +Ta 10.54339 3.93177 2.72703 0.391892 1.412298 -0.627514 +Ta 2.58523 10.55385 1.26507 0.409709 0.248799 1.81949 +Ta 2.68419 10.52194 4.02925 -0.316157 0.395146 -0.68287 +Ta 5.29632 0.02098 0.06019 0.094853 -0.22889 -0.089408 +Ta 7.9287 2.71315 2.57282 -0.40564 -1.092393 0.813413 +Ta 6.67221 2.56974 0.00085 -0.173428 0.384871 -0.232145 +Ta 9.35654 2.72035 0.02716 -1.448984 -0.868833 -0.407862 +Ta 5.28199 1.31545 2.71612 0.152676 -0.534988 -0.278452 +Ta 5.26218 3.92161 2.73258 0.236803 1.45327 -0.477397 +Ta 7.88956 10.53727 1.30155 0.542005 0.588247 1.124571 +Ta 7.90476 0.00491 4.03502 0.380439 0.303044 -0.981143 +Ta 0.01924 5.23985 0.02933 -0.216606 0.960671 0.012022 +Ta 2.63713 7.91332 2.57939 0.523618 0.457949 1.047743 +Ta 1.37591 7.98252 0.01161 -1.00541 -0.53207 -0.247965 +Ta 3.99074 7.99253 0.04105 0.630076 -0.445038 -0.609834 +Ta 0.06165 6.69839 2.59091 -0.637693 -1.500703 0.322027 +Ta 0.07693 9.27396 2.65088 -0.570248 0.946341 0.238964 +Ta 2.59233 5.37207 1.32243 0.660887 -0.556262 -0.409585 +Ta 2.576 5.32148 3.95475 0.669967 -0.454444 -0.141432 +Ta 10.57478 0.07838 5.30752 0.449309 -0.650528 0.069289 +Ta 2.68594 2.63787 8.02554 -0.925537 0.246259 -1.307471 +Ta 1.24534 2.6968 5.22637 0.880334 -0.170862 0.583158 +Ta 3.93645 2.66917 5.2391 0.126178 -0.08166 0.623252 +Ta 10.54417 1.38182 8.01183 0.881527 -1.210399 -0.267108 +Ta 0.00692 3.97458 7.93648 0.063896 0.736295 0.030003 +Ta 2.65183 10.59292 6.70102 -0.082168 0.001127 -0.769984 +Ta 2.70713 0.0237 9.32486 -0.216517 -0.079276 -0.963173 +Ta 5.32479 5.24418 0.01275 -0.313338 0.484215 0.061675 +Ta 7.97361 7.99989 2.66237 0.19173 -0.45925 0.057363 +Ta 6.68168 8.00545 10.53048 -1.274863 -0.575919 0.727629 +Ta 9.25988 8.00096 10.54122 0.923261 -0.776426 0.71368 +Ta 5.36822 6.70209 2.70369 -0.41461 -1.998428 -0.32579 +Ta 5.22169 9.20816 2.62305 0.467098 1.708569 0.377559 +Ta 7.90622 5.28573 1.40537 0.361428 0.577965 -1.113915 +Ta 7.91678 5.27023 4.0071 0.348505 0.46978 0.347783 +Ta 5.35908 0.08115 5.27632 -0.722672 -0.863673 0.500885 +Ta 8.00681 2.60911 7.87611 -0.950848 0.649728 1.17634 +Ta 6.63107 2.65234 5.3649 -0.782252 0.346241 -0.630632 +Ta 9.21464 2.71799 5.26365 0.65968 -0.244425 -0.123044 +Ta 5.22432 1.25125 8.02611 0.739331 1.510791 -0.273571 +Ta 5.22168 3.92029 7.91312 0.722496 0.766488 0.226631 +Ta 8.01588 0.04144 6.68445 -0.372854 -0.445221 -0.493611 +Ta 7.96204 10.55369 9.32548 -0.03274 0.375548 -0.623519 +Ta 0.01039 5.30368 5.2336 -0.715394 0.046629 0.901905 +Ta 2.5862 7.96502 7.96459 0.830832 -0.094714 -0.350325 +Ta 1.28578 7.88946 5.26227 1.126795 0.658952 0.004566 +Ta 3.96511 7.98863 5.30323 -0.273909 0.013132 -0.023712 +Ta 0.00505 6.67243 8.01234 -0.065254 -1.564213 -0.39785 +Ta 10.5258 9.23159 7.95484 0.714286 1.608236 -0.153688 +Ta 2.60834 5.24378 6.55963 0.476601 0.174876 0.899274 +Ta 2.60865 5.35101 9.24068 0.460063 -0.232332 0.21727 +Ta 5.34566 5.33553 5.26912 -1.0005 -0.062573 0.768202 +Ta 8.01116 7.98477 7.98864 -0.941009 -0.538031 -0.670857 +Ta 6.61332 7.98663 5.33587 0.694566 -0.00045 -0.06064 +Ta 9.34421 7.88519 5.33887 -1.50427 0.871847 -0.00909 +Ta 5.30405 6.66664 7.973 -0.127756 -0.408974 -0.168376 +Ta 5.3561 9.34104 7.93015 -0.198165 -1.429389 0.216524 +Ta 7.87231 5.36354 6.69962 0.402284 -0.367694 -0.602329 +Ta 7.98446 5.25368 9.3376 -0.122238 0.277788 -0.243182 +64 +Lattice = "10.6000003815 0.0 0.0 0.0 10.6000003815 0.0 0.0 0.0 10.6000003815" Properties=species:S:1:pos:R:3:forces:R:3 energy=-754.048643 stress="27656.57 549.87 1164.0900000000001 549.87 24561.93 -1132.43 1164.0900000000001 -1132.43 25335.96" +Ta 10.58466 10.52281 10.54428 0.51911 1.030769 0.289199 +Ta 2.58906 2.62515 2.58331 0.980313 0.465455 0.986329 +Ta 1.33407 2.72467 0.03386 -0.636192 -0.969554 -0.333663 +Ta 3.90797 2.72086 10.53991 1.707244 -0.292948 0.571866 +Ta 0.07897 1.2643 2.65645 -0.600839 0.915626 -0.026383 +Ta 0.02729 3.96468 2.62566 -0.026464 0.178205 0.595013 +Ta 2.71828 0.03582 1.37493 -0.503659 -0.164847 -1.238234 +Ta 2.71013 0.01388 3.94029 -0.26741 0.122146 0.391015 +Ta 5.24382 0.05221 10.59611 0.985051 -0.524959 -0.239796 +Ta 8.00676 2.68277 2.72931 -0.040705 0.112169 -1.076862 +Ta 6.67012 2.581 0.05294 -0.795944 0.604015 0.013416 +Ta 9.2906 2.70214 10.5277 0.106867 -0.725536 0.830297 +Ta 5.31566 1.36303 2.63231 0.204579 -0.39964 0.160289 +Ta 5.36545 3.97557 2.63811 -0.35758 0.374857 -0.341338 +Ta 7.9635 0.07881 1.30941 -0.122693 -0.323484 0.045005 +Ta 8.01171 0.06526 3.99574 -0.213713 -0.382574 -0.612077 +Ta 10.5812 5.22205 0.06058 0.340369 1.238874 -0.422064 +Ta 2.58751 8.02506 2.67969 0.836087 -0.974582 -0.640712 +Ta 1.32816 7.92066 10.55287 0.3286 -0.149546 0.174414 +Ta 3.98668 7.91992 10.56445 -0.068023 0.343984 0.387619 +Ta 0.00065 6.67904 2.65936 -0.006212 -0.780593 0.078132 +Ta 0.05141 9.2904 2.64974 -0.390999 -0.009998 -0.048165 +Ta 2.65941 5.21716 1.36289 0.011633 0.757694 -0.318475 +Ta 2.67774 5.34503 4.02694 -0.206769 -0.188612 -0.829644 +Ta 0.07746 0.06322 5.35824 -0.166456 -0.826729 -0.728653 +Ta 2.67942 2.71807 8.01719 -0.311027 -0.729342 -0.903137 +Ta 1.37014 2.70616 5.31634 0.189855 -0.02996 -0.111687 +Ta 4.04242 2.65384 5.28532 -0.699395 0.065315 0.059883 +Ta 10.59566 1.39908 7.95465 0.507488 -1.93197 -0.080117 +Ta 10.51853 3.8922 7.91939 1.002489 2.435127 0.268143 +Ta 2.65129 0.0155 6.54214 0.056264 0.079221 1.857275 +Ta 2.68757 10.53742 9.30663 -0.393454 0.179293 -0.909888 +Ta 5.29366 5.33327 10.53757 0.377812 -0.518568 1.064217 +Ta 7.98799 8.02663 2.73107 -0.740413 -0.111466 -0.791724 +Ta 6.6836 7.95804 10.58871 -0.388073 0.234483 0.294061 +Ta 9.35116 7.96667 0.00673 -1.079729 -0.437475 -0.039029 +Ta 5.25103 6.63708 2.69902 0.341543 0.027342 -0.389479 +Ta 5.25134 9.28648 2.56753 0.545209 0.148316 0.627297 +Ta 7.99616 5.36815 1.3789 -0.304224 -0.13761 -0.04399 +Ta 8.00478 5.33099 4.04177 -0.265505 0.058703 -0.773223 +Ta 5.22309 0.05914 5.36259 1.064104 -0.650463 -0.956514 +Ta 8.03289 2.6841 7.99696 -1.569866 -0.680329 -0.545113 +Ta 6.70134 2.63641 5.29151 -0.518892 -0.054631 0.294653 +Ta 9.34008 2.57975 5.27834 -0.212974 0.581599 0.407505 +Ta 5.33316 1.27506 7.87414 0.002254 0.772406 0.627475 +Ta 5.282 3.94794 7.95331 0.365483 0.009532 -0.297329 +Ta 7.97216 0.0105 6.56218 -0.240616 0.092446 0.728274 +Ta 7.98286 10.57054 9.20843 -0.453634 0.391321 0.804177 +Ta 10.56331 5.32515 5.33591 0.676252 -0.554028 -0.273297 +Ta 2.56725 7.87047 7.92346 0.604213 1.153472 0.121871 +Ta 1.36329 7.87424 5.25876 -0.744927 0.627803 0.197684 +Ta 3.93049 7.97524 5.31529 0.833261 -0.289114 0.024624 +Ta 10.56491 6.65054 7.9509 0.112086 -1.05201 0.24323 +Ta 10.52371 9.29522 7.88036 0.696909 0.308497 0.359001 +Ta 2.71757 5.32353 6.61689 -0.32555 -0.351803 0.120067 +Ta 2.58315 5.3638 9.27005 0.352622 -0.422829 0.437931 +Ta 5.33722 5.23801 5.24924 0.119477 0.777101 0.795433 +Ta 8.00365 8.00131 7.92453 -0.798715 -0.83498 -0.04946 +Ta 6.57048 8.03185 5.31737 0.602944 -0.604804 0.027757 +Ta 9.2991 7.92465 5.23581 -0.427437 0.491553 0.583332 +Ta 5.29905 6.5928 8.01852 -0.005096 0.425504 -0.692783 +Ta 5.2848 9.23686 8.0324 0.055915 0.11712 -0.271961 +Ta 7.94377 5.22663 6.66616 -0.103255 0.624955 0.0228 +Ta 8.02399 5.3012 9.33589 -0.539595 0.360082 -0.504485 +64 +Lattice = "10.6000003815 0.0 0.0 0.0 10.6000003815 0.0 0.0 0.0 10.6000003815" Properties=species:S:1:pos:R:3:forces:R:3 energy=-754.317603 stress="19468.33 -58.66 -1082.3899999999999 -58.66 27430.38 -1004.03 -1082.3899999999999 -1004.03 27246.98" +Ta 10.59125 10.59066 0.01705 -0.118141 -0.145557 -0.396942 +Ta 2.66355 2.56976 2.70172 0.219448 0.641719 -0.568891 +Ta 1.28225 2.66379 0.00075 0.804753 -0.213095 0.055931 +Ta 3.97426 2.68113 0.01584 -0.5516 -0.108225 0.097343 +Ta 0.04505 1.26937 2.60223 -0.282662 0.758456 0.398993 +Ta 0.00712 3.91022 2.683 -0.114677 0.106269 -0.518987 +Ta 2.72684 10.52432 1.35392 -0.726917 0.472688 -0.797823 +Ta 2.65771 10.58165 3.96524 -0.077037 0.011007 0.534617 +Ta 5.24942 0.01366 0.0772 0.258031 -0.214153 -1.051703 +Ta 7.94389 2.70276 2.58372 -0.034901 -0.786039 0.846874 +Ta 6.56897 2.63238 10.53781 0.820741 0.17553 0.316927 +Ta 9.25697 2.71824 0.03107 -0.141547 -0.541217 -0.295988 +Ta 5.2811 1.27529 2.68805 0.271914 1.289542 0.153822 +Ta 5.37617 4.03137 2.57831 -0.516957 -1.627578 0.618851 +Ta 7.91828 10.57185 1.29744 0.139377 0.343182 0.085819 +Ta 8.00764 10.55181 3.96506 -0.357185 0.552583 -0.126678 +Ta 0.0118 5.32177 10.55352 -0.219509 -0.620513 0.913793 +Ta 2.71308 7.96819 2.68219 -0.885887 -0.647834 -0.964512 +Ta 1.27335 7.87586 10.56985 0.732069 0.426178 0.624024 +Ta 3.92708 7.97831 10.57169 0.265397 -0.23012 0.239314 +Ta 10.58762 6.54896 2.70874 0.212568 1.24841 -0.75972 +Ta 0.00758 9.30089 2.66982 0.165843 -1.183907 0.012866 +Ta 2.61456 5.29021 1.37992 0.244522 -0.196185 -0.940657 +Ta 2.62758 5.2723 4.00316 0.333512 0.04522 -0.140777 +Ta 10.5382 10.57206 5.35381 0.701913 0.154249 -0.479572 +Ta 2.69884 2.72252 7.98246 -0.500546 -0.903317 -0.62617 +Ta 1.28389 2.59056 5.26081 0.772419 0.170547 0.489784 +Ta 4.01712 2.69857 5.29807 -0.593672 -0.373102 0.08628 +Ta 0.0291 1.26201 7.95665 -0.228249 1.225911 0.153224 +Ta 0.01323 4.01408 7.91542 -0.130807 -1.640213 -0.047405 +Ta 2.6335 0.07389 6.60337 -0.001447 -0.190083 0.039412 +Ta 2.62747 0.02086 9.22021 -0.039118 0.087686 0.983273 +Ta 5.37311 5.37921 0.00104 -0.959972 -0.838327 0.018335 +Ta 7.9566 8.01813 2.65235 0.04766 -0.892332 -0.496011 +Ta 6.57317 7.93825 10.57796 0.775293 0.395418 -0.12899 +Ta 9.2694 7.88151 10.53712 -0.581566 0.421257 0.44285 +Ta 5.22009 6.55334 2.65222 0.48966 1.629995 -0.065174 +Ta 5.33963 9.271 2.62989 0.037846 -0.612714 0.384536 +Ta 8.02119 5.29672 1.35359 -0.362251 0.224738 -0.893573 +Ta 7.94827 5.36972 3.97268 0.104266 -0.263664 0.222094 +Ta 5.3297 10.56835 5.37217 -0.099087 0.370321 -0.98499 +Ta 7.91532 2.64246 8.00295 0.680096 -0.069447 -0.387023 +Ta 6.62199 2.68295 5.3771 0.284007 -0.162815 -0.500346 +Ta 9.2514 2.68433 5.35239 -0.118786 -0.470272 -0.408554 +Ta 5.32938 1.27255 7.97134 -0.303978 0.286044 0.13783 +Ta 5.30418 3.93812 7.93568 0.040155 0.762457 0.076378 +Ta 7.95987 10.54938 6.61642 -0.218528 0.46405 0.105442 +Ta 7.87538 0.02651 9.23341 0.304713 -0.390603 0.650333 +Ta 0.01871 5.23215 5.21873 -0.275057 0.30265 1.189576 +Ta 2.58005 8.01801 8.00091 0.903103 -0.811538 -0.942974 +Ta 1.35622 7.90716 5.21911 -0.69223 0.095275 0.734107 +Ta 3.91664 8.00527 5.23273 1.355059 -0.299637 0.764864 +Ta 0.05597 6.54262 7.99991 -0.53468 1.450745 -0.817521 +Ta 0.05678 9.22328 7.97883 -0.723123 0.147795 -0.085492 +Ta 2.66025 5.35371 6.64491 0.12943 -0.14096 -0.631864 +Ta 2.64384 5.23012 9.2296 0.184014 0.70864 1.326423 +Ta 5.34418 5.35604 5.295 -0.670333 -0.337693 0.183358 +Ta 7.96554 7.96325 7.88581 0.240713 -0.060137 0.461609 +Ta 6.67445 7.93954 5.26624 -0.870954 0.115388 0.099246 +Ta 9.32253 7.94305 5.27672 -0.121051 -0.177459 -0.101598 +Ta 5.37998 6.62136 8.01604 -0.697928 -0.125018 -0.551236 +Ta 5.23732 9.22012 7.8725 0.142822 0.596726 0.634521 +Ta 7.90914 5.35867 6.63564 0.470037 -0.554497 -0.783277 +Ta 7.8945 5.29107 9.20052 0.619005 0.147575 1.411797 +64 +Lattice = "10.6000003815 0.0 0.0 0.0 10.6000003815 0.0 0.0 0.0 10.6000003815" Properties=species:S:1:pos:R:3:forces:R:3 energy=-753.969161 stress="24114.940000000002 317.58 426.17 317.58 28035.48 -838.5899999999999 426.17 -838.5899999999999 25020.420000000002" +Ta 10.59947 10.59661 10.52413 -0.226907 -0.080536 0.902052 +Ta 2.59454 2.65092 2.68446 0.776819 0.171288 -0.551025 +Ta 1.33041 2.674 10.58143 0.176394 -0.183256 0.204614 +Ta 3.95295 2.58315 10.54506 0.854273 0.68598 0.610189 +Ta 10.59883 1.31774 2.66978 -0.091936 0.35913 -0.579748 +Ta 10.57967 3.96662 2.60593 0.084104 0.473431 0.095227 +Ta 2.59254 0.00678 1.31972 0.598698 0.099657 -0.823976 +Ta 2.59169 0.03133 3.90382 0.425043 -0.081448 1.419933 +Ta 5.37939 0.04023 0.07113 -1.005574 -0.469543 -0.545443 +Ta 7.94984 2.73234 2.65636 0.080843 -0.503649 -0.229292 +Ta 6.7035 2.71875 10.57105 -1.075835 -0.284081 0.217795 +Ta 9.33869 2.66536 10.5534 -0.645726 -0.07901 0.309219 +Ta 5.38144 1.37363 2.59678 -0.660687 -0.7539 0.448111 +Ta 5.27263 3.99656 2.66272 0.021249 -0.323657 0.146107 +Ta 7.96657 0.06435 1.30009 0.116005 -0.264227 0.267969 +Ta 7.99235 0.04847 3.89505 -0.241556 -0.152596 0.888561 +Ta 0.0218 5.29659 10.5698 0.190539 -0.014165 0.267054 +Ta 2.73175 8.00138 2.71285 -1.053594 -0.284418 -0.953258 +Ta 1.31806 7.96372 10.54256 -0.136246 -0.133944 0.366015 +Ta 3.91844 7.96217 10.56452 0.996651 0.062808 0.124581 +Ta 0.03602 6.66478 2.64422 0.197253 -0.463833 -0.145331 +Ta 10.5258 9.31439 2.65344 0.724814 -0.437657 -0.379722 +Ta 2.66149 5.31748 1.25965 -0.022671 0.017877 1.049002 +Ta 2.71043 5.3142 3.96356 -0.229855 -0.004722 -0.591605 +Ta 0.01714 0.02895 5.25397 -0.154714 -0.160145 0.666203 +Ta 2.64597 2.62331 8.00147 0.380032 0.718636 -0.704725 +Ta 1.34375 2.63266 5.31467 0.392862 -0.03449 -0.003614 +Ta 4.01969 2.72066 5.33483 -1.339879 -0.221236 -0.290386 +Ta 0.05334 1.28072 7.94153 -0.439149 1.033607 -0.306897 +Ta 10.56225 3.9163 7.87893 0.077647 0.175986 0.172003 +Ta 2.67491 10.58095 6.65598 -0.034472 0.357047 -1.370013 +Ta 2.61935 0.04143 9.225 0.449865 -0.403463 1.302128 +Ta 5.37858 5.37062 0.02738 -0.971327 -1.005554 -0.649326 +Ta 8.01211 7.93604 2.73 -0.650844 -0.187724 -0.927616 +Ta 6.6093 7.90613 0.06492 0.276128 0.710737 -0.478142 +Ta 9.28311 7.87808 10.53355 -0.273083 0.488493 0.413712 +Ta 5.22651 6.57935 2.58919 0.641086 0.512876 0.520235 +Ta 5.36331 9.19414 2.65024 0.022943 1.480425 0.177898 +Ta 7.9726 5.27207 1.2508 0.18907 0.389324 1.308572 +Ta 7.89187 5.26738 3.98139 0.703866 0.272666 -0.675214 +Ta 5.30786 0.02387 5.37311 -0.441452 -0.182156 -1.394336 +Ta 7.90554 2.64139 7.96721 0.778455 0.069504 -0.485925 +Ta 6.54626 2.62801 5.34703 1.838904 0.098736 -0.497372 +Ta 9.30386 2.63489 5.25676 -1.018893 -0.04522 0.187076 +Ta 5.34196 1.30641 7.91047 -0.440112 1.103483 0.738039 +Ta 5.33435 4.01755 7.93742 -0.433146 -1.463369 0.322362 +Ta 7.87923 10.59827 6.57191 0.570104 -0.011791 0.650285 +Ta 7.91667 0.07787 9.29291 0.417554 -0.726222 -0.85977 +Ta 0.00407 5.21804 5.29085 -0.306761 0.830359 -0.270748 +Ta 2.64244 8.01096 7.89122 -0.154505 -0.65194 -0.071913 +Ta 1.27073 7.96757 5.24059 1.78038 -0.289728 0.312266 +Ta 4.05652 7.94422 5.24628 -1.766243 -0.059655 0.397705 +Ta 10.55504 6.5449 8.02866 0.326135 1.292787 -0.813062 +Ta 10.54757 9.32356 7.97367 0.218025 -1.545104 -0.663048 +Ta 2.57132 5.31124 6.54943 0.638753 -0.09298 1.309355 +Ta 2.70552 5.36844 9.25923 -0.31279 -0.257789 -0.758911 +Ta 5.37917 5.32156 5.36422 -1.051024 0.088554 -0.982928 +Ta 7.96636 7.91391 7.89315 -0.365514 0.575159 0.279003 +Ta 6.60266 8.02328 5.30029 1.44818 -0.312672 -0.021217 +Ta 9.34959 7.99431 5.26212 -1.787702 -0.359966 0.327963 +Ta 5.27917 6.54337 7.93235 -0.08343 2.464228 0.472227 +Ta 5.31647 9.3383 7.99422 -0.013579 -1.711441 -0.018178 +Ta 7.90244 5.24771 6.59897 0.734729 0.047141 0.508435 +Ta 7.93795 5.34891 9.25032 0.301803 -0.342634 -0.33915 +64 +Lattice = "10.6000003815 0.0 0.0 0.0 10.6000003815 0.0 0.0 0.0 10.6000003815" Properties=species:S:1:pos:R:3:forces:R:3 energy=-754.141988 stress="22301.33 -285.37 -20.8 -285.37 25600.899999999998 162.91 -20.8 162.91 28086.86" +Ta 10.53107 10.5509 0.0015 0.70485 0.845648 -0.070019 +Ta 2.70215 2.61155 2.65638 -0.286099 0.325604 -0.074327 +Ta 1.39743 2.61545 0.05847 -1.474313 -0.095142 -0.280113 +Ta 3.97713 2.68268 10.5346 0.156378 -0.098493 0.356179 +Ta 0.03222 1.38317 2.60891 -0.081506 -1.587414 0.159126 +Ta 10.56764 3.92107 2.7266 0.259373 1.331992 -0.73363 +Ta 2.59022 10.55975 1.32456 0.049236 0.371753 0.102809 +Ta 2.70858 0.00916 4.05153 -0.701193 -0.070601 -1.695173 +Ta 5.26413 10.53793 0.03804 0.195324 0.197551 -0.279303 +Ta 7.92699 2.58218 2.67357 -0.196352 0.687631 -0.299411 +Ta 6.56938 2.58335 0.00915 0.481385 0.355506 0.054864 +Ta 9.21553 2.70158 0.00339 1.079668 -0.370583 0.25622 +Ta 5.29644 1.25773 2.66315 0.219113 1.844104 -0.251113 +Ta 5.25049 4.05699 2.72857 0.405022 -1.35655 -0.365109 +Ta 7.95797 0.00795 1.26652 -0.349291 -0.012386 0.95892 +Ta 7.95876 0.0029 3.97425 -0.085176 -0.246415 0.146522 +Ta 0.00111 5.29169 0.0101 0.244936 -0.074089 0.083447 +Ta 2.62824 7.99165 2.57985 0.090964 -0.453594 0.8187 +Ta 1.27056 8.03072 0.02474 0.413629 -0.598829 -0.229027 +Ta 3.95298 7.86756 0.04116 0.152752 0.468204 -0.422925 +Ta 10.52695 6.6817 2.6853 0.300417 -1.266839 -0.375852 +Ta 0.02498 9.27815 2.68712 -0.304899 0.803536 -0.158136 +Ta 2.65962 5.24127 1.35865 -0.043804 0.363366 -0.570782 +Ta 2.68315 5.34774 4.00482 -0.286335 -0.186484 -0.056142 +Ta 10.59249 0.03152 5.33264 0.313027 -0.429223 -0.38406 +Ta 2.58832 2.58393 7.94631 0.844596 0.451826 -0.031232 +Ta 1.37297 2.61641 5.29619 -0.990905 0.328928 -0.096763 +Ta 3.95207 2.62642 5.27401 1.187182 0.414363 0.303667 +Ta 0.01362 1.29568 7.93105 -0.217583 0.454567 0.400647 +Ta 0.06717 3.99538 7.88147 -0.472589 -0.121955 0.480331 +Ta 2.72677 10.57217 6.60708 -0.58854 0.058778 0.860541 +Ta 2.713 10.58575 9.24417 -0.506506 0.039032 0.567002 +Ta 5.30308 5.35945 0.05831 -0.152176 -0.937176 -0.30934 +Ta 7.87019 7.94183 2.57359 1.036899 0.327117 1.33664 +Ta 6.65928 7.9017 0.0785 -1.124811 0.536497 -0.907975 +Ta 9.22504 7.86881 10.58464 0.924083 0.364728 -0.065373 +Ta 5.29923 6.68288 2.66667 -0.266393 -0.338893 0.356213 +Ta 5.34057 9.3156 2.71909 -0.369711 -1.091863 -0.151577 +Ta 7.9974 5.33778 1.31662 -0.337005 -0.510079 -0.103385 +Ta 8.0053 5.25623 3.92597 -0.472408 0.14717 1.386647 +Ta 5.25104 0.03317 5.26596 1.390735 -0.14389 0.946126 +Ta 7.98045 2.60832 7.99115 0.289511 0.923595 -0.088863 +Ta 6.70353 2.60779 5.33602 -1.549564 0.47403 -0.141706 +Ta 9.2746 2.58651 5.33229 0.918837 0.547058 -0.191653 +Ta 5.38008 1.39809 7.98274 -0.530078 -0.860802 -0.130916 +Ta 5.33862 3.99447 7.94033 -0.428322 -0.31397 0.179289 +Ta 7.95961 0.05884 6.68706 -0.114391 -0.600564 -1.150373 +Ta 7.95876 0.02794 9.26141 -0.363392 -0.320188 0.423549 +Ta 0.06343 5.2606 5.22321 -0.328214 0.242764 0.905362 +Ta 2.68463 7.97169 7.9776 -0.420291 -0.285961 -0.011666 +Ta 1.29864 7.91228 5.24043 0.869986 0.358854 0.269282 +Ta 3.95071 8.01668 5.34254 0.539614 -0.279841 -0.051604 +Ta 10.52651 6.66919 7.95196 0.773319 -0.746678 -0.127338 +Ta 10.55688 9.28857 7.96148 0.62099 -0.258731 -0.038343 +Ta 2.70803 5.32339 6.70382 -0.389582 -0.121461 -1.219023 +Ta 2.57492 5.22962 9.24619 0.509556 0.339673 1.192371 +Ta 5.22267 5.3038 5.33156 1.3354 0.250454 0.009213 +Ta 7.98999 7.90061 7.96163 -0.945486 0.84251 -0.352597 +Ta 6.68533 8.02176 5.30974 -0.632817 -0.296567 -0.005138 +Ta 9.34825 7.99677 5.29878 -1.180526 -0.264671 -0.130746 +Ta 5.33163 6.57634 7.98884 -0.009265 1.176676 -0.00019 +Ta 5.29614 9.34403 7.95803 0.264039 -1.003617 -0.12967 +Ta 8.00726 5.27369 6.70227 -0.286454 -0.101025 -2.091338 +Ta 7.97483 5.326 9.24028 -0.084847 -0.42894 1.218267 diff --git a/examples/PACKAGES/pod/Ta/XYZ/Displaced_BCC.xyz b/examples/PACKAGES/pod/Ta/XYZ/Displaced_BCC.xyz new file mode 100644 index 0000000000..f2de497d5e --- /dev/null +++ b/examples/PACKAGES/pod/Ta/XYZ/Displaced_BCC.xyz @@ -0,0 +1,504 @@ +54 +Lattice = "9.96000003815 0.0 0.0 0.0 9.96000003815 0.0 0.0 0.0 9.96000003815" Properties=species:S:1:pos:R:3:forces:R:3 energy=-631.019667 stress="48457.11 -1136.2 -2351.6499999999996 -1136.2 49582.49 -508.49999999999994 -2351.6499999999996 -508.49999999999994 49591.75" +Ta 0.03088 9.94467 0.03567 -0.612376 -0.402684 -1.345349 +Ta 1.76644 1.66184 1.44089 -1.2057 1.054325 2.428563 +Ta 3.15336 9.91786 0.09806 1.832799 -0.872674 -1.263279 +Ta 9.90797 3.4076 9.86152 0.297218 -1.020932 0.904226 +Ta 3.35029 3.41556 0.08196 -0.474781 -0.303924 -0.630438 +Ta 9.87659 0.24016 3.2897 1.017582 -2.732856 0.243285 +Ta 3.19754 9.8139 3.31195 1.086563 0.951134 0.062863 +Ta 0.08403 3.3137 3.13958 -0.885405 -1.158694 1.624432 +Ta 3.39974 3.48704 3.44694 -0.379616 -1.521174 -1.132181 +Ta 5.07318 1.57764 1.57293 -1.924629 1.561628 0.647121 +Ta 6.63264 0.09181 0.15115 -0.072574 -1.323405 -2.650495 +Ta 8.39478 1.48796 1.58174 -0.843688 3.259658 -0.417314 +Ta 6.7258 3.35837 9.78756 -1.038348 -0.281612 2.282876 +Ta 6.62212 0.16031 3.16166 -0.465928 -0.905667 2.675349 +Ta 6.62042 3.31664 3.31262 0.200967 -0.07823 0.521868 +Ta 1.54439 4.91527 1.83097 0.997719 1.072497 -2.393149 +Ta 9.86899 6.74766 0.03204 0.130914 -0.582942 0.03917 +Ta 1.53276 8.30182 1.78092 0.418129 0.388694 -1.393579 +Ta 3.20199 6.66207 0.08252 0.203286 -0.527057 -0.549649 +Ta 9.8179 6.83547 3.1511 0.116081 -1.993238 2.124523 +Ta 3.2641 6.51799 3.20131 0.251868 1.623578 1.121764 +Ta 5.01293 5.01666 1.65694 -0.60696 -1.008076 -0.05693 +Ta 8.3041 4.93065 1.67994 -0.477682 0.619238 -0.426472 +Ta 4.92858 8.36431 1.64619 -0.219331 -0.900422 0.085838 +Ta 6.45171 6.49288 9.86487 2.179344 0.818455 1.969854 +Ta 8.17019 8.46521 1.78178 0.066493 -1.369324 -1.060782 +Ta 6.49459 6.44867 3.32152 1.495401 1.861587 -0.033194 +Ta 1.68005 1.47471 4.81754 0.149108 1.822933 1.469216 +Ta 9.84583 0.19765 6.76751 0.42718 -1.609424 -1.224098 +Ta 1.69522 1.63512 8.38002 0.084742 0.557896 -0.456487 +Ta 3.48664 0.05215 6.57542 -1.934503 -0.752789 1.48785 +Ta 0.12798 3.32081 6.73112 -1.229494 -0.484439 -1.358874 +Ta 3.10095 3.36454 6.48278 1.921122 -0.938531 0.820666 +Ta 4.85343 1.62817 5.0425 1.234126 0.870681 -0.99265 +Ta 8.36737 1.67732 5.00314 -0.975535 1.13482 0.108656 +Ta 4.90899 1.80105 8.38128 -0.039766 -0.878359 -0.651697 +Ta 6.62609 9.89334 6.61756 -0.816596 1.409513 -0.309355 +Ta 8.0983 1.79178 8.16645 1.859748 -1.248881 0.899404 +Ta 6.55346 3.46095 6.83157 0.395776 -0.669972 -2.721461 +Ta 1.66233 5.09512 5.00854 -0.671291 0.362604 -0.539021 +Ta 1.62699 8.17655 5.00487 -0.188259 1.341073 -0.158559 +Ta 1.55751 4.87741 8.21882 1.446618 1.907859 1.214679 +Ta 0.00182 6.68339 6.71874 -0.827626 -0.053836 -0.695514 +Ta 1.55288 8.27814 8.30093 0.682118 0.586247 -0.235491 +Ta 3.53869 6.81025 6.55411 -2.996765 -1.824506 1.97593 +Ta 4.93422 5.11727 5.01126 0.811714 -1.188027 0.493333 +Ta 8.47308 4.97388 4.90308 -0.996458 0.210843 0.346855 +Ta 4.85618 8.3031 5.00957 1.943666 0.394624 -1.649648 +Ta 8.16403 8.34109 4.92427 0.91047 0.263158 0.079445 +Ta 4.93491 4.96157 8.29899 -1.172036 0.51008 -0.179543 +Ta 8.30629 4.96656 8.34881 0.344097 1.095134 -0.874028 +Ta 5.1789 8.11229 8.35024 -3.233148 3.075485 0.666856 +Ta 6.73281 6.78612 6.82621 -0.949494 -3.102187 -3.614177 +Ta 8.11993 8.34071 8.16079 2.733141 0.980114 2.718789 +54 +Lattice = "9.96000003815 0.0 0.0 0.0 9.96000003815 0.0 0.0 0.0 9.96000003815" Properties=species:S:1:pos:R:3:forces:R:3 energy=-631.719595 stress="44221.5 1652.1999999999998 85.95 1652.1999999999998 46661.8 2659.1800000000003 85.95 2659.1800000000003 45398.76" +Ta 9.88176 9.87945 0.1862 0.078511 0.774502 -3.074145 +Ta 1.72277 1.64067 1.45897 -0.388557 1.148359 1.788807 +Ta 3.29248 9.91934 0.1304 0.320177 -0.192327 -1.925714 +Ta 9.9322 3.28625 9.92067 0.151826 0.305556 0.342341 +Ta 3.39626 3.47237 0.027 -1.172443 -1.196633 -0.381029 +Ta 9.82641 0.17857 3.34651 1.471988 -1.800854 -0.398222 +Ta 3.18421 9.75374 3.20228 1.172612 2.338131 1.461522 +Ta 0.0643 3.32106 3.21026 -0.524353 -0.677178 0.569751 +Ta 3.36095 3.52794 3.46046 0.265224 -1.853189 -1.194265 +Ta 5.05551 1.59902 1.56265 -1.305786 1.821863 0.915691 +Ta 6.55573 0.10614 0.0715 0.473027 -1.331628 -1.56567 +Ta 8.32355 1.55377 1.58678 -0.34357 2.420135 0.231492 +Ta 6.79062 3.46987 9.80057 -2.578904 -2.079435 2.539246 +Ta 6.65472 0.19462 3.23542 -0.854033 -1.11806 1.182547 +Ta 6.68241 3.29629 3.38474 -0.467825 0.142616 -0.130294 +Ta 1.6702 4.89369 1.79281 -0.731988 0.661803 -1.877031 +Ta 9.93781 6.83545 0.11497 -0.079074 -1.393283 -0.700726 +Ta 1.55467 8.44593 1.70683 -0.318713 -2.059723 0.143176 +Ta 3.12799 6.70462 0.09695 0.649317 -0.982046 -0.987759 +Ta 9.87365 6.726 3.29089 0.358887 -0.808113 0.020022 +Ta 3.21735 6.54561 3.18977 1.043621 1.493821 1.154247 +Ta 5.01268 5.00658 1.62783 -0.475689 -0.239773 0.337642 +Ta 8.30126 4.99697 1.66463 -0.164073 0.238569 0.134521 +Ta 4.9138 8.33572 1.62276 0.337469 -0.531079 0.293633 +Ta 6.4397 6.55776 9.88777 1.902994 0.646598 1.055407 +Ta 8.2046 8.46737 1.69724 -0.705785 -1.624672 0.59768 +Ta 6.47327 6.53333 3.348 1.087057 0.860747 -0.071448 +Ta 1.63781 1.56651 4.86513 0.303333 0.759117 0.988318 +Ta 9.7163 0.09312 6.79336 1.972395 -0.68173 -1.740951 +Ta 1.61582 1.57397 8.30893 0.534301 0.691166 0.33332 +Ta 3.49451 0.05066 6.70224 -2.318362 -0.853012 0.193493 +Ta 9.94977 3.38199 6.78886 -0.299979 -1.645948 -1.888923 +Ta 3.18672 3.36165 6.43952 0.586136 -0.962061 1.644513 +Ta 4.89114 1.58583 5.10545 0.895504 0.96948 -1.159718 +Ta 8.35054 1.66148 5.06446 -0.650427 1.385707 -0.230145 +Ta 4.86816 1.73116 8.31179 0.899776 0.423663 0.126451 +Ta 6.68153 9.92387 6.63426 -0.794656 0.815228 0.039522 +Ta 8.19213 1.74268 8.29407 0.709237 -0.766675 0.419655 +Ta 6.68538 3.41569 6.73237 -1.039762 -0.942693 -1.573563 +Ta 1.62301 5.03369 4.94072 -0.479437 0.708177 0.454442 +Ta 1.67811 8.17661 4.94845 -0.43286 1.033108 0.702773 +Ta 1.50449 4.90497 8.12727 2.157996 1.39217 2.121635 +Ta 9.95522 6.68722 6.7223 -1.207088 -1.014513 -2.023602 +Ta 1.45061 8.21644 8.20658 1.867458 1.404377 0.979038 +Ta 3.56471 6.75841 6.62207 -3.094311 -0.309955 1.003355 +Ta 4.86687 5.12412 5.14144 1.869234 -0.95749 -1.296573 +Ta 8.38876 4.88961 4.89775 -0.647449 1.012711 0.567511 +Ta 4.92136 8.45113 5.01625 0.770451 -1.088974 -1.090266 +Ta 8.20783 8.3489 4.81321 0.21963 0.005286 1.165586 +Ta 4.94875 4.9618 8.28572 -0.426832 0.599091 -0.345599 +Ta 8.20464 4.88251 8.34235 2.170673 2.829715 -0.757157 +Ta 5.07191 8.2117 8.40225 -1.362796 1.673933 -0.46401 +Ta 6.76974 6.82114 6.74241 -1.906068 -2.251947 -1.927455 +Ta 8.24859 8.29304 8.12672 0.501988 0.80736 3.296928 +54 +Lattice = "9.96000003815 0.0 0.0 0.0 9.96000003815 0.0 0.0 0.0 9.96000003815" Properties=species:S:1:pos:R:3:forces:R:3 energy=-631.386255 stress="48618.67 -1616.79 -530.36 -1616.79 47533.82 1218.01 -530.36 1218.01 48883.18" +Ta 9.92016 0.01438 0.03854 0.556788 -0.67783 -1.5106 +Ta 1.82311 1.70936 1.41659 -1.918774 0.138683 2.301326 +Ta 3.28553 9.91893 0.14739 0.748737 -0.469771 -1.769605 +Ta 9.87507 3.32337 9.83154 0.793708 -0.519091 0.991363 +Ta 3.3031 3.46518 0.07875 0.443248 -0.426577 -0.905273 +Ta 9.95947 0.08218 3.34696 0.739427 -0.726997 -0.766983 +Ta 3.1684 9.75979 3.2356 1.642308 1.605642 1.000091 +Ta 0.02998 3.22821 3.21978 0.370247 0.48123 0.316324 +Ta 3.32428 3.45789 3.46471 0.337827 -1.517721 -1.355537 +Ta 5.13331 1.59317 1.61007 -2.537997 2.199599 0.12697 +Ta 6.66564 0.10058 0.15795 -0.170102 -1.253786 -3.131771 +Ta 8.39979 1.53376 1.55197 -0.736293 2.568367 0.959357 +Ta 6.699 3.46643 9.78218 -1.357883 -2.290461 2.801884 +Ta 6.55739 0.19963 3.22195 1.010984 -1.898276 1.569223 +Ta 6.6614 3.19875 3.40136 0.28987 0.883996 -0.281886 +Ta 1.65474 4.95752 1.79601 -0.834231 0.053286 -1.593869 +Ta 9.95302 6.80511 0.03196 -0.079769 -1.229448 0.075092 +Ta 1.56181 8.37445 1.75774 0.103273 -1.036598 -1.620168 +Ta 3.25788 6.58258 9.89943 -0.15681 0.002856 0.109545 +Ta 9.81575 6.84635 3.22839 0.491934 -1.902197 0.607502 +Ta 3.26659 6.5421 3.20775 1.051845 1.685557 0.716388 +Ta 4.961 4.94444 1.67842 0.154733 0.132572 -0.385023 +Ta 8.39914 5.00135 1.64081 -0.85754 -0.046821 0.044073 +Ta 4.981 8.40495 1.52317 -0.154277 -1.618489 1.137429 +Ta 6.59095 6.57229 9.81082 0.516853 -0.031072 2.168022 +Ta 8.23079 8.50453 1.71947 -0.19104 -1.640479 -0.218034 +Ta 6.5189 6.4527 3.26946 1.051143 1.341567 0.195318 +Ta 1.69996 1.52396 4.92178 -0.286649 1.057284 0.327442 +Ta 9.71449 0.20654 6.76983 2.454386 -2.330371 -0.861132 +Ta 1.75395 1.54634 8.40434 -0.369274 0.99695 -0.846145 +Ta 3.36184 9.91466 6.55661 -0.545145 -0.225476 0.969587 +Ta 0.07017 3.38145 6.72746 -0.97093 -1.700112 -1.838196 +Ta 3.188 3.32611 6.41893 0.788188 -0.658484 1.70621 +Ta 4.88158 1.53321 4.98105 0.344727 0.704928 0.157548 +Ta 8.47411 1.59131 4.94665 -1.939704 1.794052 0.479038 +Ta 4.88901 1.78086 8.34967 0.243383 -0.808705 -0.52527 +Ta 6.73425 9.77434 6.70175 -1.485362 1.795728 -1.262133 +Ta 8.06248 1.71241 8.15301 1.263397 0.222212 1.789119 +Ta 6.58956 3.39493 6.70849 -0.327807 -0.793748 -1.979357 +Ta 1.72658 5.14855 4.93998 -1.319359 -0.168591 0.474034 +Ta 1.56142 8.14402 4.97342 0.414502 1.370212 0.309023 +Ta 1.49024 4.85879 8.1549 2.112914 2.183214 1.555991 +Ta 9.89805 6.74264 6.68864 -0.638427 -1.761151 -1.247128 +Ta 1.51881 8.19293 8.20586 1.126883 1.771936 0.731665 +Ta 3.53422 6.78757 6.63995 -2.202411 -1.241629 0.531987 +Ta 4.91797 5.05055 5.07395 0.97697 -0.452695 -0.680973 +Ta 8.37523 4.90856 4.86905 -0.569914 0.544987 0.445982 +Ta 4.96025 8.30839 4.98936 0.640131 -0.024991 -0.918091 +Ta 8.25393 8.41481 4.85824 -0.321351 -0.771339 0.862505 +Ta 4.98338 4.92238 8.25755 -1.037048 0.701643 -0.025492 +Ta 8.20041 4.82836 8.34047 1.93369 2.92161 -1.499861 +Ta 5.14911 8.22565 8.35035 -2.453675 1.564843 0.655552 +Ta 6.67583 6.74955 6.82036 -0.298729 -2.031929 -2.821342 +Ta 8.24568 8.22146 8.24391 1.158405 1.531882 1.928281 +54 +Lattice = "9.96000003815 0.0 0.0 0.0 9.96000003815 0.0 0.0 0.0 9.96000003815" Properties=species:S:1:pos:R:3:forces:R:3 energy=-632.575826 stress="37007.6 -3335.61 -654.2900000000001 -3335.61 41350.14000000001 729.9499999999999 -654.2900000000001 729.9499999999999 42032.22" +Ta 9.89658 0.05915 0.05605 1.036339 -0.553602 -1.509413 +Ta 1.84029 1.75247 1.5692 -1.142381 -0.38124 0.773395 +Ta 3.2103 9.87745 0.03021 0.881726 0.55755 -0.326543 +Ta 0.02515 3.41269 9.87251 -0.122739 -0.795043 1.221499 +Ta 3.43008 3.44154 0.03351 -1.7763 -1.011632 -0.445853 +Ta 9.87697 0.19214 3.32206 1.584106 -2.293162 0.196284 +Ta 3.22174 9.87812 3.28991 0.769286 0.831055 0.301207 +Ta 0.1052 3.26647 3.18262 -0.190214 0.336725 0.865636 +Ta 3.41777 3.41426 3.37277 -0.455402 -0.720753 -0.151548 +Ta 5.17196 1.58588 1.62527 -2.939961 2.107641 0.562846 +Ta 6.60208 0.22971 0.08742 0.803627 -2.595707 -2.375381 +Ta 8.43127 1.4925 1.61697 -1.259463 3.750632 -0.106891 +Ta 6.76348 3.3785 9.80186 -2.03401 -1.195377 2.585494 +Ta 6.65909 0.1949 3.2601 -0.56741 -1.409525 1.503945 +Ta 6.6316 3.23626 3.37906 0.319 0.938546 -0.113448 +Ta 1.62284 5.00729 1.75386 -0.237159 -0.599216 -1.433498 +Ta 9.93301 6.82006 0.07168 -0.603293 -1.11764 -0.086884 +Ta 1.52042 8.42173 1.76252 0.366653 -0.814026 -0.80013 +Ta 3.21357 6.59587 0.05473 -0.149533 0.25932 -0.610436 +Ta 9.80178 6.73879 3.20649 0.278464 -0.754372 0.931782 +Ta 3.18872 6.5548 3.14659 1.331155 1.227953 1.549942 +Ta 4.90812 4.89326 1.56359 1.415424 1.204801 1.175799 +Ta 8.30391 4.92482 1.63948 -0.141538 0.852068 0.296628 +Ta 4.96767 8.43868 1.50927 -0.390065 -1.085888 1.127117 +Ta 6.58605 6.61068 9.88944 0.61683 -0.473365 1.726223 +Ta 8.16049 8.53247 1.75295 0.195242 -1.799944 -0.538088 +Ta 6.52605 6.5329 3.27653 0.530753 0.627982 -0.045421 +Ta 1.62199 1.50417 4.93639 0.838566 1.316864 0.614038 +Ta 9.80755 0.13028 6.79412 0.867567 -1.141378 -1.30953 +Ta 1.7363 1.62901 8.31191 -0.210323 0.210696 0.384316 +Ta 3.35607 9.88966 6.63602 -0.80484 0.044494 0.395101 +Ta 0.10319 3.2834 6.73662 -1.43873 -0.584218 -1.316375 +Ta 3.23105 3.25793 6.54382 0.621854 0.133901 0.243236 +Ta 4.92957 1.63938 4.99734 0.279261 -0.276038 0.237899 +Ta 8.42481 1.65711 4.95454 -1.326796 1.057458 1.098206 +Ta 4.84069 1.75925 8.38234 0.745716 -0.829046 -0.859739 +Ta 6.64597 9.80629 6.69075 -0.741154 2.128175 -0.430751 +Ta 8.19543 1.78177 8.30388 1.200953 -1.19775 -0.25616 +Ta 6.57343 3.34206 6.80779 0.135786 -0.186078 -2.215599 +Ta 1.6324 5.02772 5.04564 -0.039204 0.36717 -0.650982 +Ta 1.56954 8.11698 4.93801 0.230278 1.550094 0.24251 +Ta 1.44091 4.90529 8.17235 2.716493 1.617542 1.20799 +Ta 9.93346 6.67194 6.71914 -1.022256 -0.17536 -0.867865 +Ta 1.47975 8.31024 8.36713 1.004335 0.238704 -0.734919 +Ta 3.48998 6.76276 6.56515 -1.924801 -0.712464 1.159232 +Ta 4.9581 5.06922 5.0693 0.337345 -0.924942 -0.538749 +Ta 8.40596 4.88849 4.85949 -0.874232 0.467588 0.615094 +Ta 4.91272 8.41158 4.96637 0.732014 -1.112804 -0.699182 +Ta 8.15337 8.43609 4.86865 0.839591 -1.003948 0.68469 +Ta 4.9461 4.9089 8.30806 -0.155864 1.182133 -0.492917 +Ta 8.17416 4.94211 8.40779 2.376142 1.640431 -1.638172 +Ta 5.14706 8.15632 8.46125 -2.44524 1.8416 -0.879395 +Ta 6.73636 6.72505 6.79496 -1.106421 -1.283292 -2.272742 +Ta 8.21344 8.32047 8.22695 1.044823 0.536684 2.006502 +54 +Lattice = "9.96000003815 0.0 0.0 0.0 9.96000003815 0.0 0.0 0.0 9.96000003815" Properties=species:S:1:pos:R:3:forces:R:3 energy=-630.450212 stress="54872.520000000004 561.84 254.42 561.84 57576.3 3236.46 254.42 3236.46 52454.13" +Ta 9.94993 0.02472 0.14274 0.055475 -0.868863 -2.639446 +Ta 1.73941 1.62931 1.49216 0.133385 0.958345 1.334282 +Ta 3.27456 9.84431 0.06714 0.152037 0.685105 -1.338688 +Ta 9.89722 3.30899 9.8442 0.882932 -0.580173 1.896163 +Ta 3.39949 3.43937 0.07444 -1.252525 -0.603574 -1.126923 +Ta 9.95738 0.18394 3.26338 0.661235 -1.926241 0.911392 +Ta 3.30019 9.78645 3.22208 0.028724 1.660063 1.023838 +Ta 0.13719 3.26818 3.17619 -0.70546 0.166489 0.836621 +Ta 3.35898 3.53996 3.45643 -0.084938 -1.979508 -0.962122 +Ta 5.04991 1.63426 1.4814 -1.341163 1.468593 1.819665 +Ta 6.63167 0.11405 0.21537 -0.12109 -1.761401 -4.075404 +Ta 8.31494 1.42157 1.60574 0.368731 4.528905 0.569883 +Ta 6.74419 3.49221 9.84811 -2.007412 -2.167313 2.65689 +Ta 6.63412 0.20045 3.26587 -0.684628 -1.087473 1.050812 +Ta 6.74149 3.29744 3.34049 -0.536207 0.257368 0.20051 +Ta 1.65629 4.91473 1.70491 -0.099545 0.910351 -0.802777 +Ta 9.8848 6.82698 0.05792 0.376337 -1.495085 -0.415922 +Ta 1.52902 8.3382 1.76782 0.639344 -0.53398 -1.01794 +Ta 3.2842 6.59888 0.05835 -0.561013 0.262988 -0.786249 +Ta 9.8388 6.70884 3.26058 0.554427 -0.634265 0.300656 +Ta 3.29697 6.67135 3.2332 0.752046 -0.215397 0.311965 +Ta 4.97002 4.96577 1.62011 0.05044 0.104913 0.434502 +Ta 8.33172 4.99905 1.67588 -0.034233 0.026594 -0.111203 +Ta 4.97516 8.44565 1.55002 -0.020779 -1.935482 0.889879 +Ta 6.57558 6.51621 9.81153 1.066759 1.429994 2.384917 +Ta 8.25006 8.48199 1.74936 -0.452919 -1.834688 -0.031687 +Ta 6.44899 6.4711 3.23262 1.703195 1.475113 0.740876 +Ta 1.66863 1.57808 4.93069 0.431628 0.338513 0.161788 +Ta 9.72144 0.20932 6.75785 1.958848 -2.154971 -0.993231 +Ta 1.63635 1.60616 8.35046 0.463086 0.37157 -0.091186 +Ta 3.48302 0.00215 6.71334 -1.509435 -0.172883 0.010894 +Ta 9.93596 3.25148 6.70143 0.237451 -0.065117 -1.344746 +Ta 3.08129 3.29628 6.51691 2.160928 -0.13483 0.507974 +Ta 4.96743 1.5573 5.07437 0.055528 1.049799 -0.152912 +Ta 8.45292 1.6707 5.00536 -1.761269 1.037855 -0.291955 +Ta 4.94629 1.85995 8.30452 -0.162188 -1.40003 0.218906 +Ta 6.73739 9.79788 6.73002 -1.360293 2.553733 -1.038778 +Ta 8.13299 1.84164 8.23538 1.255041 -2.346864 1.564886 +Ta 6.66656 3.37782 6.84701 -0.835313 0.379035 -3.422381 +Ta 1.68024 5.12154 4.98734 -0.660796 0.080462 0.142574 +Ta 1.60982 8.10644 4.87313 0.325313 1.774663 1.223699 +Ta 1.43945 4.82885 8.10227 2.085236 1.993105 1.922899 +Ta 9.9461 6.81388 6.73985 -0.837177 -1.923205 -1.883599 +Ta 1.46223 8.29911 8.22847 1.981531 0.926889 0.882329 +Ta 3.56097 6.69411 6.63008 -2.368401 -0.099926 0.349055 +Ta 4.97662 5.05599 5.0457 0.641095 -0.663324 -0.062532 +Ta 8.47313 4.93262 4.89931 -1.205654 0.412649 0.354766 +Ta 4.99461 8.38381 5.00182 0.283353 -0.567275 -0.555014 +Ta 8.15164 8.40758 4.84002 1.070067 -0.7384 0.47295 +Ta 5.02489 5.02411 8.3462 -1.295414 -0.424201 -1.125591 +Ta 8.29233 4.81641 8.42543 1.342299 3.650693 -2.347555 +Ta 5.13768 8.20531 8.35183 -1.942023 1.3521 0.356008 +Ta 6.7424 6.82181 6.74362 -1.121731 -2.790179 -1.913012 +Ta 8.24574 8.2733 8.18525 1.245134 1.248761 2.999274 +54 +Lattice = "9.96000003815 0.0 0.0 0.0 9.96000003815 0.0 0.0 0.0 9.96000003815" Properties=species:S:1:pos:R:3:forces:R:3 energy=-631.669379 stress="43133.57 -1318.24 471.24 -1318.24 48697.43 3329.94 471.24 3329.94 47363.12" +Ta 9.94799 9.88693 0.10122 -0.263284 1.216688 -1.883794 +Ta 1.86889 1.76555 1.56581 -1.932894 -0.197466 0.799563 +Ta 3.18914 9.88171 0.13041 0.610905 0.517831 -1.648338 +Ta 9.92665 3.38968 9.84955 0.317542 -1.257416 1.688263 +Ta 3.43358 3.54499 0.1688 -1.726787 -2.050304 -2.386849 +Ta 9.82474 0.16394 3.32778 2.216383 -1.538245 -0.264099 +Ta 3.17727 9.89254 3.26737 1.70172 0.460024 0.157384 +Ta 0.07445 3.24025 3.20793 -0.069552 0.434181 0.546568 +Ta 3.36565 3.516 3.35675 0.112956 -1.917705 -0.223914 +Ta 5.16123 1.6239 1.55508 -3.303498 2.564182 1.651578 +Ta 6.55575 0.21191 0.17217 1.231731 -2.686607 -3.911866 +Ta 8.29508 1.55441 1.6632 0.089146 2.52746 -0.701653 +Ta 6.73309 3.48714 9.89848 -2.274779 -2.67868 1.66594 +Ta 6.59035 0.09173 3.21496 -0.0633 -0.576713 2.012973 +Ta 6.64791 3.2176 3.34745 0.160139 1.027979 0.160616 +Ta 1.65171 4.94471 1.7425 -0.713082 0.706387 -1.212205 +Ta 9.93323 6.79042 0.0161 -0.225077 -1.132914 -0.016869 +Ta 1.4431 8.3808 1.76113 1.378961 -0.749711 -0.52572 +Ta 3.21108 6.66508 0.00376 -0.00978 -0.476703 -0.29896 +Ta 9.81714 6.70548 3.17335 0.208961 -0.701521 1.301811 +Ta 3.21572 6.591 3.22023 1.033304 1.008256 0.532303 +Ta 4.91106 4.93792 1.58572 1.678571 2.009249 1.603115 +Ta 8.26464 4.94698 1.60854 0.497683 0.531052 0.869356 +Ta 4.90809 8.44903 1.49243 0.088267 -1.613979 1.633781 +Ta 6.59154 6.59584 9.95944 0.505361 0.227865 0.830287 +Ta 8.21527 8.54264 1.72812 -0.429569 -2.313543 -0.559364 +Ta 6.55385 6.57757 3.26324 0.271827 0.622681 0.181604 +Ta 1.75661 1.52675 4.84155 -0.633945 1.321519 1.006441 +Ta 9.87636 0.21376 6.70268 0.45418 -1.893615 -0.40218 +Ta 1.6521 1.61415 8.35169 0.600238 0.373907 0.119151 +Ta 3.44156 0.04311 6.6096 -1.495661 -0.599002 0.704379 +Ta 0.09339 3.37032 6.65029 -1.099312 -1.412438 -0.819685 +Ta 3.18042 3.28906 6.45515 0.992949 0.211285 1.220556 +Ta 5.00918 1.65807 5.12559 0.127178 -0.0364 -1.088507 +Ta 8.38565 1.61267 4.93819 -1.405672 1.604515 0.911956 +Ta 4.81649 1.82535 8.27026 1.005288 -0.428096 0.38029 +Ta 6.74177 9.88632 6.6854 -1.192978 0.733832 -0.379597 +Ta 8.06265 1.81199 8.23079 2.096046 -1.128412 0.494263 +Ta 6.62079 3.42161 6.7044 -0.241025 -0.422289 -1.432335 +Ta 1.71584 5.10974 5.01063 -0.952074 0.094302 -0.330628 +Ta 1.6423 8.21258 4.88283 -0.325763 0.887706 0.945961 +Ta 1.49636 4.82702 8.22043 2.120092 2.257811 0.840294 +Ta 9.95578 6.72188 6.72066 -0.190571 -0.973108 -1.045394 +Ta 1.57396 8.29892 8.32339 0.49698 0.587894 -0.638339 +Ta 3.53534 6.71052 6.61516 -2.080422 -0.439087 0.577691 +Ta 4.91158 5.00762 4.99897 1.141976 -0.039622 -0.08708 +Ta 8.42976 4.87775 4.88036 -0.952974 0.858021 0.171909 +Ta 4.90384 8.41136 4.98652 0.894637 -0.884584 -0.741048 +Ta 8.2864 8.42598 4.87128 -0.087899 -0.922239 0.910409 +Ta 5.03024 4.97737 8.34689 -1.018587 0.572925 -0.691072 +Ta 8.23151 4.84154 8.4374 1.578619 3.115272 -2.575512 +Ta 5.1302 8.08126 8.35768 -1.750753 2.547363 0.298061 +Ta 6.65325 6.73813 6.7005 0.162071 -1.670992 -1.976694 +Ta 8.2436 8.19187 8.19738 0.665528 1.721207 1.625195 +54 +Lattice = "9.96000003815 0.0 0.0 0.0 9.96000003815 0.0 0.0 0.0 9.96000003815" Properties=species:S:1:pos:R:3:forces:R:3 energy=-632.431277 stress="39332.07 -484.03000000000003 -591.5 -484.03000000000003 42463.85 -935.67 -591.5 -935.67 44557.78" +Ta 0.01093 0.07201 0.09451 -0.133033 -0.624676 -1.390718 +Ta 1.86279 1.76064 1.51659 -1.592195 -0.069139 1.205785 +Ta 3.2078 9.79995 0.13153 0.540433 1.454104 -1.58264 +Ta 9.85766 3.40762 9.89988 1.024661 -1.342485 0.791698 +Ta 3.38902 3.43935 0.04627 -0.448466 -0.286011 -0.80136 +Ta 9.90188 0.13348 3.29636 1.537302 -1.039386 0.836358 +Ta 3.22408 9.86832 3.24936 1.3552 0.851114 0.539138 +Ta 0.12559 3.29783 3.20677 -1.020326 -0.682337 1.223972 +Ta 3.36531 3.39767 3.43601 0.009962 -0.529326 -1.103499 +Ta 5.15746 1.68746 1.60975 -2.532105 1.453447 0.682011 +Ta 6.67484 0.22558 0.19511 -0.045042 -2.082264 -2.946332 +Ta 8.39432 1.57083 1.68829 -0.326523 2.974804 -0.552053 +Ta 6.7901 3.4905 9.84778 -2.280421 -1.914956 1.902637 +Ta 6.66098 0.16369 3.1821 -0.458515 -1.404543 2.285847 +Ta 6.68975 3.33374 3.35351 -0.189956 -0.055081 0.175264 +Ta 1.51952 4.8757 1.72333 1.250032 1.568243 -1.070974 +Ta 9.93504 6.80931 0.00911 -0.545334 -1.102829 0.05256 +Ta 1.53614 8.31731 1.75831 0.412055 0.075595 -1.050824 +Ta 3.19933 6.67436 9.9199 -0.185239 -1.027413 0.207555 +Ta 9.87719 6.84896 3.30936 0.023055 -2.415004 0.073182 +Ta 3.27549 6.6063 3.18917 0.469425 0.419811 0.76263 +Ta 5.00755 4.96297 1.63652 -0.168999 0.238458 0.154223 +Ta 8.27314 4.95228 1.66284 0.330644 1.338439 0.511823 +Ta 4.91774 8.42919 1.48115 0.474143 -1.326573 1.888404 +Ta 6.55832 6.62377 9.94221 1.26809 -0.236095 1.051695 +Ta 8.27021 8.49129 1.78853 -0.55743 -1.432265 -0.989698 +Ta 6.39844 6.56795 3.35477 1.561076 0.83826 -0.364502 +Ta 1.77582 1.5455 4.9351 -1.060253 0.494227 0.023332 +Ta 9.87126 0.15154 6.74741 0.212135 -1.347122 -0.696834 +Ta 1.74456 1.52234 8.31732 0.085858 1.095537 0.038296 +Ta 3.45815 9.88882 6.55866 -1.684608 0.594275 1.383549 +Ta 0.03304 3.29479 6.73355 -0.261879 -0.877624 -1.394156 +Ta 3.18079 3.30298 6.42253 1.207944 0.171277 1.336295 +Ta 4.9603 1.57723 4.99617 0.634253 0.567922 -0.173103 +Ta 8.3559 1.62409 5.03154 -0.530634 1.162549 -0.066204 +Ta 4.7903 1.73365 8.2792 1.03526 -0.144088 0.183756 +Ta 6.74404 9.77079 6.64995 -1.450453 2.324287 -0.166798 +Ta 8.09234 1.79785 8.24264 1.673615 -1.361805 0.313033 +Ta 6.57421 3.42967 6.77064 0.019605 -0.880931 -1.798564 +Ta 1.57913 5.11576 4.95243 0.306594 -0.25138 -0.080154 +Ta 1.69273 8.20716 4.92075 -0.341052 1.046973 0.557303 +Ta 1.43354 4.91751 8.16401 2.287861 1.338427 1.255018 +Ta 0.01425 6.67723 6.65523 -1.147897 -0.077148 -0.417608 +Ta 1.58291 8.27957 8.26309 0.342823 0.685693 0.016051 +Ta 3.42748 6.83665 6.641 -1.510001 -2.239526 0.838695 +Ta 4.97343 5.04097 5.00585 -0.037888 -0.412025 0.456637 +Ta 8.4039 4.8646 4.9179 -0.583261 0.965744 0.28682 +Ta 4.91928 8.3318 5.11892 1.250045 -0.399127 -2.452135 +Ta 8.20159 8.28199 4.88507 0.813012 0.601139 0.388164 +Ta 5.04212 4.99253 8.32778 -1.424968 0.603147 -0.546645 +Ta 8.29629 4.88656 8.35075 0.628928 2.792969 -1.330955 +Ta 5.08862 8.21773 8.50315 -0.984696 1.400694 -1.476016 +Ta 6.79769 6.74824 6.68609 -1.854116 -2.150746 -0.908504 +Ta 8.1091 8.29833 8.26479 2.601277 0.654768 1.938542 +54 +Lattice = "9.96000003815 0.0 0.0 0.0 9.96000003815 0.0 0.0 0.0 9.96000003815" Properties=species:S:1:pos:R:3:forces:R:3 energy=-630.960068 stress="47457.030000000006 -1005.83 -232.22 -1005.83 51553.91 452.42 -232.22 452.42 48272.9" +Ta 0.05485 9.94068 0.04882 -0.759723 0.349463 -1.073784 +Ta 1.85805 1.77201 1.5217 -1.724392 -0.312777 1.581767 +Ta 3.16512 9.83319 0.13832 1.061743 0.568667 -1.386846 +Ta 9.93006 3.33808 9.91253 -0.064995 -0.093866 0.630283 +Ta 3.35014 3.4521 0.05567 -0.390836 -0.380588 -0.755337 +Ta 9.83256 0.11516 3.3997 1.419777 -1.102908 -0.922237 +Ta 3.23053 9.80404 3.17024 0.958769 1.69459 1.532703 +Ta 0.01161 3.22748 3.27368 0.022937 0.373478 0.292145 +Ta 3.35601 3.5215 3.45824 0.330549 -1.676711 -0.671565 +Ta 5.17312 1.6729 1.58962 -2.671903 1.121811 0.197691 +Ta 6.67768 0.12311 0.12029 -0.440876 -1.26923 -2.349462 +Ta 8.34051 1.56504 1.62363 0.168904 1.957241 -0.015229 +Ta 6.78008 3.36169 9.8788 -1.638783 -0.833959 1.395422 +Ta 6.60936 0.19924 3.21319 -0.445878 -1.774358 1.382608 +Ta 6.66488 3.23598 3.33678 -0.05205 1.041637 0.440105 +Ta 1.55882 4.89699 1.83484 0.420221 0.664634 -1.787995 +Ta 9.92966 6.74077 0.07931 -0.240379 -0.888703 -0.594008 +Ta 1.46294 8.36123 1.80347 1.383538 -0.598636 -1.619561 +Ta 3.27604 6.65474 9.90339 -0.790555 -1.047873 0.411754 +Ta 9.88531 6.85002 3.21939 -0.582286 -2.052939 1.256318 +Ta 3.29061 6.52643 3.19139 0.073936 1.783087 1.280681 +Ta 4.89996 4.99982 1.70189 1.223371 -0.15804 -0.71227 +Ta 8.31065 5.01116 1.69232 -0.087953 0.030026 -0.109796 +Ta 4.88784 8.33857 1.51732 0.850961 -0.596673 1.090247 +Ta 6.50104 6.53275 9.80774 2.177734 -0.433205 2.899269 +Ta 8.2643 8.49938 1.67302 -0.503687 -1.58688 0.09942 +Ta 6.55463 6.57827 3.32912 0.424308 0.463881 -0.236654 +Ta 1.62393 1.56011 4.84451 0.739422 0.750623 1.039514 +Ta 9.83601 0.23425 6.80872 1.000448 -2.657832 -1.896794 +Ta 1.61133 1.59769 8.41214 1.032998 0.937424 -0.476098 +Ta 3.35598 0.02593 6.56637 -1.123068 -0.410917 1.065083 +Ta 0.09395 3.33379 6.73292 -1.590772 -1.594874 -2.032464 +Ta 3.10315 3.36912 6.45924 1.749889 -0.890546 1.008948 +Ta 4.94948 1.60844 5.13297 0.326327 0.438573 -0.854681 +Ta 8.3112 1.6084 4.98866 -0.787743 1.376575 0.740112 +Ta 4.84637 1.81183 8.24772 0.358933 -1.184604 0.522666 +Ta 6.65846 9.76479 6.73502 -0.922055 2.08298 -0.978385 +Ta 8.20906 1.73062 8.14887 0.457034 -0.533352 2.19381 +Ta 6.58641 3.34768 6.84906 -0.07115 -0.232275 -3.047979 +Ta 1.68643 5.13518 4.9899 -0.983213 0.345899 0.008163 +Ta 1.66974 8.17852 4.94291 -0.25579 1.350395 0.365493 +Ta 1.47384 4.8564 8.10261 2.294153 2.563508 2.527259 +Ta 9.88912 6.80164 6.77309 -0.120678 -1.620395 -1.826051 +Ta 1.55837 8.19547 8.30267 0.878074 1.467856 0.015021 +Ta 3.56356 6.83284 6.56625 -2.486358 -1.682642 1.765681 +Ta 4.99706 5.12232 5.11423 0.43805 -1.159229 -0.988294 +Ta 8.4671 4.91132 4.92219 -1.21811 0.738609 0.182139 +Ta 4.87329 8.34516 4.9908 1.555301 0.282701 -1.632594 +Ta 8.1534 8.37445 4.79401 0.515688 -0.19719 1.530097 +Ta 5.00952 4.94855 8.26218 -1.33193 0.185129 -0.033086 +Ta 8.21481 4.8505 8.29903 1.753267 2.042376 0.013681 +Ta 5.14988 8.12501 8.49478 -2.325196 2.631836 -1.723209 +Ta 6.79841 6.70737 6.74515 -1.373171 -1.292054 -2.073736 +Ta 8.2086 8.27306 8.2346 1.367197 1.020256 2.330032 +54 +Lattice = "9.96000003815 0.0 0.0 0.0 9.96000003815 0.0 0.0 0.0 9.96000003815" Properties=species:S:1:pos:R:3:forces:R:3 energy=-623.378198 stress="80008.25 -785.4100000000001 1601.25 -785.4100000000001 86520.39 4960.87 1601.25 4960.87 85233.93000000001" +Ta 9.95615 9.94979 0.16514 -0.137356 -0.028883 -3.40463 +Ta 1.87163 1.71307 1.41378 -1.76357 0.590114 2.267852 +Ta 3.17989 9.83685 0.10642 1.277421 0.225697 -1.841016 +Ta 9.90024 3.33884 9.82529 0.735381 -0.941566 1.77777 +Ta 3.4188 3.54303 0.14009 -1.606974 -1.518343 -1.948061 +Ta 9.8553 0.24533 3.33787 2.112303 -3.154318 -0.288821 +Ta 3.17514 9.74142 3.2 1.589191 1.94113 1.194543 +Ta 0.11128 3.26365 3.15053 -0.364264 -0.441607 0.999143 +Ta 3.37385 3.56077 3.43718 -0.10161 -1.946969 -0.790652 +Ta 5.20458 1.63365 1.50672 -4.374578 3.807338 1.826632 +Ta 6.57608 0.24353 0.2053 1.355941 -3.643228 -5.429459 +Ta 8.39734 1.42414 1.60164 -0.6903 5.287807 -0.169411 +Ta 6.79744 3.4915 9.76717 -3.482997 -2.71942 3.817554 +Ta 6.57033 0.23978 3.13517 0.116586 -1.988113 3.629484 +Ta 6.72113 3.22949 3.3633 -0.338679 0.658098 0.181119 +Ta 1.57149 4.94775 1.80091 0.075728 0.493399 -1.98724 +Ta 9.92064 6.87072 0.13795 -0.725063 -1.775537 -0.966934 +Ta 1.41785 8.41983 1.76001 1.411759 -1.132459 -0.69594 +Ta 3.14851 6.64163 0.03349 0.008652 -0.525052 -0.43074 +Ta 9.7788 6.83849 3.18243 0.240296 -2.124804 1.273631 +Ta 3.16533 6.57739 3.14068 1.48579 1.371308 1.35272 +Ta 4.90709 4.92946 1.61468 1.153866 1.203555 0.949633 +Ta 8.33316 4.92031 1.59073 -0.391861 0.974553 0.849438 +Ta 4.9596 8.47655 1.51542 -0.546245 -2.139501 1.15131 +Ta 6.44823 6.51342 9.85247 2.586298 -0.265344 3.052647 +Ta 8.17315 8.54045 1.75264 -0.705353 -2.252394 -0.493293 +Ta 6.39303 6.44322 3.27828 1.523627 1.285888 -0.061445 +Ta 1.70938 1.43709 4.84222 0.306581 1.628448 1.044131 +Ta 9.71238 0.24769 6.81385 1.995125 -2.589965 -0.973181 +Ta 1.68921 1.55889 8.35846 0.351955 0.61258 -0.208928 +Ta 3.47749 9.92814 6.63177 -2.081328 0.048903 1.244886 +Ta 0.07656 3.32278 6.77536 -1.946033 -1.979053 -2.885009 +Ta 3.07793 3.27871 6.40803 1.81774 -0.328617 1.303887 +Ta 4.90115 1.58004 5.10411 0.818241 0.705137 -0.829745 +Ta 8.43888 1.56841 5.00344 -2.225694 2.689319 0.426868 +Ta 4.81957 1.88977 8.30861 0.398342 -1.185455 -0.079158 +Ta 6.73863 9.78981 6.71678 -2.05864 2.854477 -1.371358 +Ta 8.05528 1.82891 8.19103 1.951662 -1.704639 1.321716 +Ta 6.59394 3.44619 6.83462 -0.445378 -0.730496 -3.696673 +Ta 1.65312 5.15331 5.0431 -0.703206 0.151193 -0.646398 +Ta 1.60774 8.12544 4.90328 -0.101304 1.629949 1.006095 +Ta 1.42058 4.79056 8.10344 3.354131 3.342928 2.609888 +Ta 9.92554 6.78882 6.73898 -1.110388 -1.85868 -1.874234 +Ta 1.4639 8.19238 8.28284 1.738894 1.866439 0.339074 +Ta 3.56301 6.81221 6.61544 -3.063945 -1.111905 1.132298 +Ta 4.934 5.10947 5.11506 0.832308 -0.890416 -0.494106 +Ta 8.45728 4.85519 4.78408 -1.053171 0.965832 0.968872 +Ta 4.91173 8.4049 5.06479 1.33012 -0.900003 -2.085329 +Ta 8.16172 8.38305 4.77586 0.217903 -0.195045 1.235079 +Ta 4.96219 4.997 8.25034 -1.340837 0.253721 -0.064669 +Ta 8.22081 4.83811 8.40873 2.589217 4.367823 -2.571794 +Ta 5.19313 8.07977 8.4862 -3.823089 3.630743 -0.94626 +Ta 6.77011 6.85567 6.82197 -2.081899 -4.511915 -4.402203 +Ta 8.12043 8.25909 8.1457 3.888707 1.997353 4.680418 diff --git a/examples/PACKAGES/pod/Ta/XYZ/Displaced_FCC.xyz b/examples/PACKAGES/pod/Ta/XYZ/Displaced_FCC.xyz new file mode 100644 index 0000000000..e1fbb58bbc --- /dev/null +++ b/examples/PACKAGES/pod/Ta/XYZ/Displaced_FCC.xyz @@ -0,0 +1,450 @@ +48 +Lattice = "8.39999961853 0.0 0.0 0.0 8.39999961853 0.0 0.0 0.0 12.6000003815" Properties=species:S:1:pos:R:3:forces:R:3 energy=-555.899463 stress="44324.590000000004 -88.44 -112.43 -88.44 44600.920000000006 281.49 -112.43 281.49 42648.37" +Ta 8.39872 8.3966 0.05505 0.06463 0.245549 -0.122629 +Ta 2.17054 2.11769 12.51793 -1.187171 -0.130259 0.732895 +Ta 2.0533 8.35895 2.13547 0.233297 0.276883 -0.580405 +Ta 8.38008 2.10628 2.0551 0.08252 -0.095821 -0.260646 +Ta 4.23293 0.07434 0.0467 -0.277801 -0.575764 -0.709591 +Ta 6.2651 2.18178 0.00596 0.79823 -0.246753 -0.159608 +Ta 6.25171 8.32714 2.06 0.878956 0.397963 0.635148 +Ta 4.23709 2.08122 2.04351 -0.562206 0.342387 0.661272 +Ta 0.01795 4.28026 0.03906 0.03593 -0.753743 -0.492226 +Ta 2.17486 6.29122 12.54891 -0.292549 0.564337 0.480079 +Ta 2.07869 4.28118 2.16843 0.802077 -0.587367 -0.741571 +Ta 0.03245 6.22138 2.08055 -0.303096 1.061223 0.205298 +Ta 0.05248 0.05717 4.13572 -0.808599 -0.191264 0.378476 +Ta 2.07678 2.17993 4.13839 0.013435 -0.436677 0.322097 +Ta 2.12704 8.36983 6.31443 -0.47643 0.64169 -0.334506 +Ta 8.3705 2.08925 6.34697 0.005647 -0.087278 -0.862051 +Ta 8.38688 0.07691 8.44598 -0.055963 -0.649155 -0.697661 +Ta 2.01928 2.13994 8.43334 1.328975 0.162973 -0.03981 +Ta 2.04284 0.00054 10.51116 0.153873 0.277763 0.303457 +Ta 8.3396 2.16616 10.45414 0.471147 -0.416926 1.590978 +Ta 4.14844 4.17913 12.54023 0.538274 0.344873 0.560429 +Ta 6.2757 6.28315 12.58489 -0.093969 -0.269964 -0.315362 +Ta 6.31105 4.1801 2.07691 -0.802185 0.349566 -0.345139 +Ta 4.1932 6.35885 2.05181 -0.289199 -0.820619 0.167236 +Ta 4.13608 8.35781 4.16416 0.306789 0.418729 -0.132841 +Ta 6.25772 2.18015 4.23088 0.265817 -1.013408 -0.174927 +Ta 6.21768 8.33441 6.28609 0.203365 0.059608 -0.446274 +Ta 4.21646 2.0257 6.25407 -0.176754 0.397415 0.650479 +Ta 4.11746 0.08256 8.45795 0.186491 -0.410856 0.068111 +Ta 6.30974 2.0663 8.41949 -0.752342 -0.087175 -0.586156 +Ta 6.3525 8.38938 10.49726 -0.44574 0.07188 0.558282 +Ta 4.22552 2.10093 10.54512 -0.02775 -0.023834 -0.918408 +Ta 8.31931 4.18624 4.12268 0.353673 0.002916 1.279805 +Ta 2.07372 6.27335 4.24137 -0.117409 -0.2389 0.08123 +Ta 2.14629 4.16947 6.30781 -0.615193 -0.022235 0.165676 +Ta 8.34652 6.37659 6.30287 0.054827 -0.339782 -0.192988 +Ta 0.03288 4.14327 8.42559 -0.136471 1.054922 -0.681011 +Ta 2.01843 6.3563 8.36368 0.358704 -0.63918 0.366829 +Ta 2.08465 4.24206 10.56487 -0.018445 0.035124 -1.175245 +Ta 8.39771 6.35777 10.52103 -0.075528 -0.463245 -0.015453 +Ta 4.18258 4.14181 4.17443 0.116808 0.364647 -0.254759 +Ta 6.22019 6.23685 4.13448 0.381966 0.454078 0.397164 +Ta 6.28851 4.24961 6.33299 0.186246 0.002802 0.096346 +Ta 4.13463 6.26413 6.29428 0.495766 0.350443 0.359588 +Ta 4.281 4.2574 8.39181 -0.903776 -0.621644 0.379359 +Ta 6.28467 6.34316 8.44502 0.157149 0.143513 -0.095499 +Ta 6.35243 4.1584 10.43469 -0.364583 0.937808 0.436386 +Ta 4.17724 6.33497 10.52826 0.308567 0.162755 -0.541855 +48 +Lattice = "8.39999961853 0.0 0.0 0.0 8.39999961853 0.0 0.0 0.0 12.6000003815" Properties=species:S:1:pos:R:3:forces:R:3 energy=-555.922478 stress="44249.71 -651.04 -186.65 -651.04 44112.909999999996 -1023.35 -186.65 -1023.35 43244.3" +Ta 0.06343 8.3606 12.52321 -0.696701 0.940785 0.465297 +Ta 2.13463 2.12169 0.0276 -1.12333 0.576705 -0.026641 +Ta 2.07364 8.36228 2.04043 -0.26239 0.268211 0.488051 +Ta 8.37571 2.16668 2.14254 0.418469 -0.605551 -0.528424 +Ta 4.12651 0.04419 0.00196 0.983012 -0.612252 -0.323205 +Ta 6.25688 2.11357 0.01148 0.864439 -0.555613 0.554016 +Ta 6.35803 0.02339 2.17882 0.004319 -0.071235 -0.60434 +Ta 4.12492 2.02962 2.07119 0.768236 0.704677 0.998809 +Ta 8.32267 4.2038 0.03156 0.384971 -0.156549 -0.15821 +Ta 2.13999 6.25061 0.01163 0.206046 -0.408259 -0.573426 +Ta 2.16033 4.27176 2.10974 -0.144662 -0.316522 0.257436 +Ta 0.07325 6.34677 2.09878 -0.79538 -0.463238 0.011227 +Ta 0.03163 8.35134 4.23884 0.243806 0.858804 0.059427 +Ta 2.09614 2.16903 4.20803 0.184215 -0.612876 -0.414497 +Ta 2.15726 8.37369 6.37727 -0.165489 0.100422 -0.659123 +Ta 0.02483 2.126 6.26528 -0.175983 -0.609909 0.638816 +Ta 8.38466 8.32281 8.34428 0.169266 -0.211404 0.509213 +Ta 2.03906 2.07515 8.33331 0.465788 0.459079 0.436569 +Ta 2.10907 0.07467 10.53386 0.194596 0.006574 -0.731867 +Ta 8.33297 2.17086 10.43991 0.550055 -0.386364 0.529968 +Ta 4.27897 4.1393 0.00645 0.009889 0.528282 0.483017 +Ta 6.32729 6.28968 12.57566 -0.264177 0.642002 0.143135 +Ta 6.36828 4.23582 2.14993 -0.643207 -0.021355 0.110192 +Ta 4.26013 6.31388 2.06529 0.111216 0.212384 0.388281 +Ta 4.14382 0.05221 4.19611 0.133795 -0.272342 0.110067 +Ta 6.35676 2.13277 4.27931 -0.64253 -0.80079 -0.286094 +Ta 6.34512 8.331 6.35294 -0.428755 0.834939 -0.239901 +Ta 4.2156 2.15214 6.2277 0.270035 -0.158319 0.779826 +Ta 4.21566 0.03803 8.38231 0.083944 0.274668 0.537654 +Ta 6.36545 2.10057 8.38811 -0.533646 0.09587 -0.966206 +Ta 6.3135 0.07881 10.48441 -0.274002 -0.668893 0.02457 +Ta 4.26171 2.16526 10.52074 -0.418059 -0.459074 -0.898808 +Ta 8.3812 4.12205 4.26058 0.319127 1.186909 -0.691015 +Ta 2.03751 6.37506 4.22969 0.912322 -0.679112 -0.028629 +Ta 2.10316 4.17066 6.25287 0.262251 0.67613 0.437224 +Ta 0.01168 6.26992 6.26445 0.470148 -0.110432 0.580066 +Ta 0.00065 4.25404 8.40936 0.720462 0.320078 -0.095225 +Ta 2.15141 6.3154 8.39974 -0.210605 -0.239741 0.525179 +Ta 2.10941 4.11716 10.53789 -0.294631 0.328036 -0.2806 +Ta 0.02774 6.34503 10.55194 0.052179 -0.561462 -0.610592 +Ta 4.27746 4.26322 4.25824 -0.303269 -0.080042 -0.881987 +Ta 6.32942 6.36807 4.26719 -0.071872 -0.096612 -0.894702 +Ta 6.34514 4.25616 6.31634 -0.236463 -0.645396 0.127271 +Ta 4.26742 6.30384 6.28532 -1.015367 0.203758 -0.319441 +Ta 4.19566 4.27408 8.40465 -0.669454 -1.290586 -0.449496 +Ta 6.21853 6.2172 8.36939 0.704437 1.092583 0.697829 +Ta 6.30129 4.2155 10.41714 0.33095 0.1172 0.467289 +Ta 4.23757 6.23742 10.53163 -0.447998 0.665832 0.302002 +48 +Lattice = "8.39999961853 0.0 0.0 0.0 8.39999961853 0.0 0.0 0.0 12.6000003815" Properties=species:S:1:pos:R:3:forces:R:3 energy=-555.800269 stress="44944.52 20.43 -53.49 20.43 46278.61 29.84 -53.49 29.84 42171.32" +Ta 8.39366 0.03327 12.53757 0.281471 -0.21858 0.714835 +Ta 2.13799 2.17663 0.08107 -0.242623 -0.691544 -0.821606 +Ta 2.1586 0.00804 2.08871 -0.840779 0.227491 0.043738 +Ta 0.07616 2.11667 2.10673 -0.564953 -0.14659 -0.53106 +Ta 4.15103 0.01208 0.04902 0.594481 0.453625 -0.068399 +Ta 6.25134 2.11148 12.51753 0.377615 -0.192108 1.200692 +Ta 6.34616 0.06815 2.1539 0.172975 -0.678259 -0.601449 +Ta 4.25478 2.13099 2.16677 0.103092 -0.008648 -0.297252 +Ta 8.32309 4.25914 0.06259 0.571757 -0.370889 -0.326093 +Ta 2.18289 6.3341 0.04696 -0.829016 -0.174777 -0.58409 +Ta 2.17634 4.18641 2.09151 -0.422429 0.255137 0.485834 +Ta 0.06508 6.22975 2.07834 -0.463567 0.907706 -0.064984 +Ta 0.03316 8.35006 4.12414 -0.730534 -0.238153 0.413363 +Ta 2.082 2.07294 4.20331 0.425673 -0.20545 -0.321985 +Ta 2.12216 0.0105 6.23718 0.020646 -0.010904 0.435072 +Ta 0.03286 2.07054 6.23343 -0.520711 -0.034403 0.247056 +Ta 8.36331 0.02515 8.43591 0.078206 -0.188894 -0.203212 +Ta 2.01725 2.02047 8.37346 0.945609 0.479423 0.375213 +Ta 2.13829 8.32424 10.45876 -0.581344 1.386424 0.908562 +Ta 8.35549 2.12524 10.51529 0.852839 -0.295749 0.265562 +Ta 4.16491 4.22554 0.0009 0.715672 -0.095676 -0.213922 +Ta 6.22371 6.32022 12.53036 0.187246 0.040385 0.908943 +Ta 6.36757 4.22353 2.09189 -0.874971 0.203062 0.00729 +Ta 4.13315 6.3638 2.09505 0.977658 -0.635482 0.37092 +Ta 4.23722 8.33801 4.14924 0.176574 0.229478 0.507526 +Ta 6.35365 2.15131 4.17453 0.12327 -0.302231 0.057467 +Ta 6.24548 0.08185 6.31737 0.13665 -0.415086 -0.30141 +Ta 4.2241 2.07465 6.23581 0.013977 0.192163 0.497879 +Ta 4.19905 8.3678 8.46852 0.198161 0.792819 -0.702669 +Ta 6.2848 2.06186 8.4824 -0.027942 0.482082 -0.848532 +Ta 6.29377 8.32663 10.54116 0.105969 0.400999 0.031916 +Ta 4.27399 2.1012 10.56089 -1.346927 0.176649 -0.650846 +Ta 0.04908 4.20115 4.17826 0.10887 0.65821 0.312297 +Ta 2.06654 6.36455 4.27901 0.165742 -0.555047 -0.271572 +Ta 2.17095 4.16446 6.22477 -0.421266 -0.000369 0.715516 +Ta 8.32881 6.3256 6.36766 0.454331 0.163972 -0.301611 +Ta 0.05742 4.18749 8.33872 0.082852 0.081218 0.003436 +Ta 2.15697 6.37663 8.42585 -0.958747 -0.720851 -0.438235 +Ta 2.03852 4.15529 10.56738 0.183579 0.144348 -0.516283 +Ta 0.0099 6.30552 10.54233 0.385985 -0.309035 -0.170827 +Ta 4.16427 4.18342 4.16227 0.140605 0.544738 -0.035124 +Ta 6.24236 6.2516 4.26779 0.391419 0.304507 -0.502905 +Ta 6.3071 4.18976 6.23024 -0.166338 -0.369336 0.911871 +Ta 4.13743 6.24505 6.36665 0.716072 0.416956 -0.252837 +Ta 4.20011 4.24099 8.46012 -0.222169 -0.850244 0.096683 +Ta 6.34341 6.33047 8.43181 -0.209113 -0.500978 -0.235576 +Ta 6.38029 4.16076 10.48343 -0.380969 0.906191 -0.2817 +Ta 4.17561 6.36228 10.50253 0.115399 -1.2383 0.032512 +48 +Lattice = "8.39999961853 0.0 0.0 0.0 8.39999961853 0.0 0.0 0.0 12.6000003815" Properties=species:S:1:pos:R:3:forces:R:3 energy=-556.196151 stress="44094.64 176.91000000000003 257.40000000000003 176.91000000000003 41950.53 439.89 257.40000000000003 439.89 40028.060000000005" +Ta 8.37577 0.07732 12.54307 0.193396 -0.499329 -0.077718 +Ta 2.15528 2.07008 0.06672 -0.32228 0.17168 -0.769823 +Ta 2.17608 0.01156 2.06262 -0.575545 -0.144242 0.553705 +Ta 8.36759 2.03815 2.01865 0.158421 0.357495 0.477149 +Ta 4.25295 8.39299 0.01959 -0.129413 -0.3983 -0.769823 +Ta 6.3041 2.15126 12.55831 -0.100908 -0.537014 0.579287 +Ta 6.31819 8.348 2.11631 -0.47465 0.826061 -0.151195 +Ta 4.12134 2.08818 2.01802 1.198272 0.44388 0.857287 +Ta 0.08271 4.2036 12.59844 -0.118028 0.163914 0.431759 +Ta 2.01753 6.35781 0.0714 0.494708 -0.055352 -1.028673 +Ta 2.08391 4.19281 2.14837 -0.158375 0.168457 0.181091 +Ta 8.38687 6.38119 2.07973 0.392875 -0.502905 0.230173 +Ta 1e-05 8.39354 4.1693 0.107276 0.205353 0.093359 +Ta 2.08062 2.07046 4.21883 0.026291 0.31706 0.006631 +Ta 2.05743 8.3971 6.26987 -0.209663 0.356146 0.194858 +Ta 8.34982 2.15852 6.27812 0.272828 -0.518433 0.131469 +Ta 0.043 0.03735 8.38109 -0.323399 0.174941 0.265006 +Ta 2.1683 2.12031 8.32959 -0.372149 0.123767 0.247418 +Ta 2.03915 0.06596 10.44595 0.608304 -0.370142 0.153462 +Ta 0.0392 2.15708 10.57335 -0.077003 -0.470665 -0.584646 +Ta 4.18371 4.19955 12.55926 -0.371136 0.959833 0.363516 +Ta 6.365 6.38013 0.00232 -0.186193 -0.847087 -0.020211 +Ta 6.34421 4.17285 2.04012 -0.364574 0.228708 0.09004 +Ta 4.18677 6.32858 2.09014 0.198032 -0.567994 -0.060119 +Ta 4.19831 0.06384 4.24991 0.200299 -0.125509 -0.197675 +Ta 6.33101 2.08404 4.1756 -0.576465 0.148029 -0.203471 +Ta 6.36187 8.33375 6.27465 0.032174 0.074865 0.331846 +Ta 4.24224 2.04345 6.36746 0.424152 0.728418 -0.803879 +Ta 4.20469 0.06736 8.35055 -0.071691 -0.324778 0.714795 +Ta 6.36637 2.08974 8.39588 -0.27761 0.003974 0.2077 +Ta 6.31852 8.34416 10.47042 0.145941 0.789314 -0.172407 +Ta 4.26553 2.13504 10.56332 -0.447518 -0.543415 -0.681653 +Ta 8.33751 4.1766 4.23019 0.47446 0.317403 -0.677715 +Ta 2.12185 6.34879 4.19992 -0.160765 -0.306315 -0.189165 +Ta 2.09925 4.22625 6.27971 0.035143 -0.18736 -0.177238 +Ta 0.02185 6.34185 6.33585 -0.259106 -0.451908 -0.098487 +Ta 0.00789 4.15479 8.43241 -0.172733 -0.036282 -0.42258 +Ta 2.06258 6.26646 8.37821 0.360506 0.29163 0.464662 +Ta 2.07183 4.15654 10.44613 0.797909 0.375531 0.441052 +Ta 8.37673 6.24695 10.43381 0.470094 0.350637 0.295661 +Ta 4.1818 4.18462 4.22566 0.403165 -0.221054 0.018898 +Ta 6.30127 6.32098 4.14566 -0.247024 -0.429369 0.397465 +Ta 6.37389 4.25506 6.30113 -0.825718 0.356737 0.021921 +Ta 4.14506 6.37217 6.33119 0.524226 -0.464019 -0.33404 +Ta 4.2507 4.22408 8.38434 -0.07311 -0.474256 -0.097241 +Ta 6.22906 6.29278 8.44824 0.607511 0.08044 -0.657565 +Ta 6.31263 4.16515 10.53822 -0.023348 0.504182 -0.060435 +Ta 4.25683 6.33642 10.47293 -1.207578 -0.04273 0.485548 +48 +Lattice = "8.39999961853 0.0 0.0 0.0 8.39999961853 0.0 0.0 0.0 12.6000003815" Properties=species:S:1:pos:R:3:forces:R:3 energy=-555.488929 stress="49282.159999999996 -336.55 1149.4 -336.55 47874.28 103.05 1149.4 103.05 42424.24" +Ta 0.03512 8.32736 0.04735 0.195543 1.082051 -0.703584 +Ta 2.11581 2.13939 0.01641 0.073477 -0.45744 0.514192 +Ta 2.07079 8.37632 2.08792 0.676688 0.377328 0.179098 +Ta 8.35783 2.03849 2.1809 0.908543 1.149934 -0.889987 +Ta 4.1959 8.34696 12.58734 -0.535175 0.46913 0.038878 +Ta 6.26437 2.08135 0.07679 0.299386 0.583712 -0.602461 +Ta 6.37037 0.01366 2.02106 -1.294312 -0.635008 0.710817 +Ta 4.24611 2.17769 2.0911 -0.680948 -0.985152 -0.181143 +Ta 0.07372 4.12817 12.59093 -0.441435 0.019262 0.248804 +Ta 2.06857 6.35351 0.07211 0.019431 -0.602725 -1.010885 +Ta 2.08855 4.27095 2.1785 0.282438 -0.433272 -0.555293 +Ta 8.32144 6.22087 2.0537 0.410783 0.004178 0.562681 +Ta 8.38888 8.37714 4.11943 0.308962 -0.309358 1.164082 +Ta 2.14887 2.13908 4.15126 -0.277118 -0.404867 0.461854 +Ta 2.17928 0.06945 6.33693 -0.935206 0.091758 0.125678 +Ta 8.33101 2.14872 6.25637 0.561863 -0.262483 -0.416106 +Ta 0.04108 0.06912 8.45283 -0.702254 -0.942391 -0.611289 +Ta 2.03186 2.1051 8.47317 0.838748 0.336408 -1.260827 +Ta 2.03098 0.04717 10.43185 0.916049 -0.870293 0.557485 +Ta 0.04291 2.11193 10.50269 -1.3273 0.203866 0.673734 +Ta 4.14453 4.27665 12.57389 -0.213966 -0.473756 0.070353 +Ta 6.32205 6.30175 0.07023 -0.132763 -0.567711 -0.903952 +Ta 6.21861 4.20945 2.09303 0.67931 0.016608 -0.165874 +Ta 4.17333 6.29865 2.04198 0.497926 0.362234 0.845656 +Ta 4.15271 8.31825 4.24383 0.677104 0.920677 -1.089099 +Ta 6.3722 2.05801 4.12152 -0.64023 -0.357381 0.702795 +Ta 6.27712 8.34356 6.37931 0.466257 0.752415 -0.704172 +Ta 4.23102 2.13963 6.26783 -0.008734 -0.194259 0.29676 +Ta 4.24458 8.3949 8.41406 -0.466657 0.049088 0.415361 +Ta 6.27345 2.10269 8.33365 0.108823 0.031661 0.455912 +Ta 6.25209 0.06243 10.5671 0.797058 -0.392281 -0.266682 +Ta 4.2291 2.06722 10.51411 -0.167331 0.154586 0.125317 +Ta 0.08155 4.27803 4.14262 -0.411464 -0.432115 0.501631 +Ta 2.14772 6.356 4.24419 -0.424297 -0.329112 -0.005029 +Ta 2.16225 4.21453 6.37281 -0.085025 -0.301886 -0.275683 +Ta 8.3388 6.27522 6.25427 0.960965 0.503338 0.576671 +Ta 8.34558 4.21909 8.35011 -0.19525 0.229496 0.190219 +Ta 2.1414 6.25722 8.39529 -0.406155 0.495631 -0.072931 +Ta 2.0676 4.16509 10.42654 0.162024 0.547732 0.361796 +Ta 0.02779 6.27183 10.57064 -0.481675 -0.102235 -0.668364 +Ta 4.27167 4.12358 4.18383 -0.624257 0.830488 0.131313 +Ta 6.32831 6.30033 4.23746 -0.368349 0.352357 -1.043225 +Ta 6.26272 4.22118 6.22845 0.153851 -0.400134 0.035347 +Ta 4.22203 6.31398 6.22074 -0.268132 -0.584423 0.698344 +Ta 4.25894 4.24103 8.47645 -0.353687 -0.638133 -0.793996 +Ta 6.25491 6.2908 8.36135 0.799557 0.331093 0.79638 +Ta 6.21723 4.19649 10.48535 1.309309 -0.431997 0.676066 +Ta 4.26927 6.21862 10.51505 -0.662374 1.213381 0.103354 +48 +Lattice = "8.39999961853 0.0 0.0 0.0 8.39999961853 0.0 0.0 0.0 12.6000003815" Properties=species:S:1:pos:R:3:forces:R:3 energy=-556.027926 stress="43564.39 -49.54 -99.3 -49.54 45432.35 275.06 -99.3 275.06 40185.14" +Ta 8.34497 8.34551 12.5956 0.712799 0.267536 -0.153036 +Ta 2.0558 2.04577 0.01276 0.261385 -0.290707 -0.127804 +Ta 2.06838 8.37737 2.16659 0.672547 0.395646 -1.312629 +Ta 0.00359 2.05074 2.15226 -0.320824 0.421623 -0.432403 +Ta 4.26826 8.33822 0.02108 -0.755392 0.804853 0.059577 +Ta 6.33489 2.131 12.53088 -0.426566 -0.592698 0.445778 +Ta 6.25404 0.03209 2.05073 0.258429 0.220942 0.825671 +Ta 4.16384 2.13978 2.12517 0.060709 -0.255028 -0.249772 +Ta 8.36731 4.13909 0.0525 0.331667 0.645722 -0.10797 +Ta 2.15375 6.29902 0.04207 -0.223718 0.33025 -0.423847 +Ta 2.11926 4.2113 2.04 0.077389 -0.274763 0.060731 +Ta 0.06324 6.29457 2.13106 -0.639548 -0.256039 -0.611666 +Ta 0.0522 8.3415 4.1171 -0.688958 0.522915 0.942873 +Ta 2.07655 2.17403 4.20011 -0.235656 -0.209697 0.072817 +Ta 2.1497 8.34384 6.3073 -0.390747 0.045154 -0.212304 +Ta 0.02961 2.09814 6.34863 -0.334421 -0.350008 -0.633984 +Ta 0.07703 0.06114 8.42699 -0.48162 -0.529725 -0.105918 +Ta 2.1146 2.08725 8.35955 0.000134 0.091763 0.144876 +Ta 2.17879 0.01668 10.42251 -0.327921 -0.945931 0.74699 +Ta 0.01535 2.14423 10.49771 0.421563 -0.107154 0.042196 +Ta 4.24355 4.14389 12.57727 -0.490707 -0.151469 0.150492 +Ta 6.30703 6.31257 0.03364 0.317513 -0.514173 0.21469 +Ta 6.21957 4.24141 2.11393 0.747501 -0.932063 -0.27685 +Ta 4.27447 6.25375 2.16537 -0.54996 0.359185 -0.634042 +Ta 4.13684 8.3759 4.1221 0.976955 0.422783 0.46928 +Ta 6.31913 2.1596 4.19723 -0.042125 -0.448326 0.0636 +Ta 6.32938 0.03364 6.23358 0.112289 -0.022674 -0.410219 +Ta 4.15414 2.02652 6.21831 0.551165 0.522365 0.208895 +Ta 4.28152 8.39237 8.35103 -0.247267 -0.367146 -0.056108 +Ta 6.31596 2.06768 8.44393 -0.115638 0.184021 -0.398675 +Ta 6.3285 8.32779 10.51057 -0.165051 0.47747 -0.199364 +Ta 4.12563 2.0398 10.42566 0.443476 0.125337 0.61432 +Ta 8.38026 4.1908 4.13874 0.589643 0.264679 0.088241 +Ta 2.17116 6.35301 4.11791 -0.570772 -1.315435 0.985555 +Ta 2.03626 4.1604 6.34457 0.154161 0.572819 -0.628519 +Ta 8.38985 6.30508 6.28594 0.326379 0.413925 -0.417146 +Ta 8.36103 4.20342 8.38265 -0.217143 0.101356 0.728482 +Ta 2.08955 6.26468 8.3173 0.243414 0.178383 0.814981 +Ta 2.15221 4.23276 10.51632 -0.473082 0.143977 0.127608 +Ta 8.36864 6.28423 10.50391 0.518348 -0.281377 0.03593 +Ta 4.17037 4.21177 4.21967 -0.156993 -0.293509 0.422478 +Ta 6.32577 6.23846 4.15284 0.005152 0.74102 0.318444 +Ta 6.34611 4.25945 6.31433 -0.335588 -0.895129 0.197851 +Ta 4.21525 6.23105 6.29066 0.022941 0.346622 -0.028249 +Ta 4.1532 4.14295 8.36799 0.730355 0.232327 -0.123611 +Ta 6.32703 6.37247 8.32622 -0.158654 -0.470012 0.487803 +Ta 6.2491 4.16576 10.55905 0.217972 0.346985 -0.975743 +Ta 4.26539 6.24873 10.54677 -0.405539 0.323408 -0.750301 +48 +Lattice = "8.39999961853 0.0 0.0 0.0 8.39999961853 0.0 0.0 0.0 12.6000003815" Properties=species:S:1:pos:R:3:forces:R:3 energy=-555.968399 stress="43047.68 454.90999999999997 -179.26 454.90999999999997 45952.240000000005 326.2 -179.26 326.2 41269.62" +Ta 8.33107 8.3509 0.0015 0.920711 0.047635 0.466085 +Ta 2.15215 2.06155 0.00638 0.013766 0.114377 0.114976 +Ta 2.17243 8.36545 2.15847 -0.432619 0.744561 -0.543999 +Ta 0.00213 2.13268 2.0346 0.046002 -1.061264 0.961179 +Ta 4.23222 0.05817 12.55891 -0.409962 -0.778639 -0.063284 +Ta 6.26764 2.04607 0.0766 -0.214809 0.598564 -0.689581 +Ta 6.24022 8.35975 2.09956 0.446009 0.343529 0.506397 +Ta 4.25858 2.10916 2.17653 -0.950565 0.012664 -0.279387 +Ta 8.36413 4.13793 0.03804 0.227157 0.360461 -0.615113 +Ta 2.07699 6.23218 0.02357 -0.035908 0.836465 0.1878 +Ta 2.04438 4.13335 2.10915 0.215365 0.362086 -0.128602 +Ta 8.34053 6.35158 2.10339 0.192164 -0.413234 -0.37135 +Ta 8.39644 8.33273 4.21315 -0.029012 0.821143 -0.309048 +Ta 2.05049 2.18199 4.27857 -0.15645 -0.41091 -0.813722 +Ta 2.10797 0.00795 6.24152 -0.317156 -0.701413 0.424479 +Ta 0.00876 2.1029 6.29925 -0.221688 -0.231517 -0.287747 +Ta 0.00111 8.39169 8.41011 0.358727 -0.010756 -0.601951 +Ta 2.07824 2.14165 8.32985 0.262314 -0.445469 0.887731 +Ta 2.04556 0.08072 10.52474 0.5264 -0.285219 -0.083721 +Ta 8.37798 2.01756 10.54116 -0.140639 1.218338 -0.186234 +Ta 4.12695 4.2567 0.0353 0.753601 -0.317693 0.037295 +Ta 6.32498 6.30315 0.03712 -0.388071 -0.337876 -0.313802 +Ta 6.30962 4.14127 2.13365 -0.135269 0.601454 0.056099 +Ta 4.23315 6.34774 2.12982 -0.212883 -0.527314 -0.160335 +Ta 4.19249 0.03152 4.23264 -0.076723 -0.943434 0.376392 +Ta 6.23832 2.03393 4.19631 1.15411 0.515942 0.335054 +Ta 6.34797 8.36641 6.29619 -0.34515 0.166198 -0.034551 +Ta 4.17707 2.07642 6.27401 0.591806 0.420296 0.519899 +Ta 4.21362 8.37068 8.38105 -0.080896 0.523146 -0.053202 +Ta 6.36717 2.12038 8.33147 -0.401482 -0.340538 0.569328 +Ta 6.37677 8.37217 10.48208 -0.574779 0.057651 -0.218756 +Ta 4.263 2.08575 10.46917 0.085217 0.16737 -0.392696 +Ta 0.00308 4.25945 4.25831 -0.216132 -0.940307 -0.693366 +Ta 2.02019 6.29183 4.12359 0.782573 -0.22301 0.653063 +Ta 2.13428 4.1517 6.3785 0.043308 1.139429 -0.121789 +Ta 8.35004 6.21881 6.28464 1.158421 0.740718 0.664429 +Ta 8.39923 4.25788 8.41667 0.108854 -0.46318 0.567778 +Ta 2.14057 6.3406 8.46909 -0.263525 0.035096 -0.867844 +Ta 2.1474 4.23778 10.49162 -0.289223 -1.035858 0.015625 +Ta 0.0553 6.25623 10.45097 -0.282479 0.0763 0.811523 +Ta 4.15104 4.23317 4.16596 0.281648 0.167552 0.379349 +Ta 6.33045 6.25832 4.24115 -0.699707 0.07144 -0.17646 +Ta 6.37853 4.15779 6.33602 -1.073636 -0.112077 -0.599552 +Ta 4.1996 6.23651 6.33229 -0.262227 0.289885 -0.585827 +Ta 4.28008 4.27309 8.43274 -0.041823 -0.686192 -0.088247 +Ta 6.33862 6.31947 8.39033 -0.051946 -0.054734 0.085119 +Ta 6.30961 4.25884 10.56206 0.075121 -0.542769 0.057588 +Ta 4.20876 6.32794 10.48641 0.061486 0.431101 0.602978 +48 +Lattice = "8.39999961853 0.0 0.0 0.0 8.39999961853 0.0 0.0 0.0 12.6000003815" Properties=species:S:1:pos:R:3:forces:R:3 energy=-556.047132 stress="42983.7 837.4200000000001 145.2 837.4200000000001 43867.59 -1054.67 145.2 -1054.67 42053.840000000004" +Ta 8.35391 0.02768 12.53195 0.2996 0.097159 -0.189691 +Ta 2.09406 2.10567 12.58345 -0.566566 -0.276803 -0.258138 +Ta 2.0736 8.3527 2.13624 0.431138 0.069631 -0.176146 +Ta 0.07104 2.02659 2.16207 -0.798628 0.179308 -0.911212 +Ta 4.24337 0.07189 0.06066 -0.667104 -1.01187 -0.253714 +Ta 6.24014 2.08636 12.54857 0.783637 0.195082 0.154676 +Ta 6.33344 8.39148 2.02558 -0.303788 0.247493 1.015414 +Ta 4.16535 2.06646 2.04504 0.073468 0.186828 0.468777 +Ta 8.32677 4.23996 0.02711 0.81379 -0.478646 0.053713 +Ta 2.08781 6.37504 12.59133 0.032354 -0.135994 0.303608 +Ta 2.06443 4.14688 2.08857 -0.166601 0.775039 -0.532869 +Ta 8.38638 6.37661 2.05779 -0.182172 -0.557039 0.479008 +Ta 8.37411 8.39962 4.27195 0.241148 -0.01589 -0.246337 +Ta 2.10985 2.13127 4.13256 0.516219 -0.39379 1.293154 +Ta 2.14384 0.00652 6.34882 0.125171 0.286979 -0.653648 +Ta 8.34346 2.03521 6.31512 0.018758 0.590464 0.348758 +Ta 0.03525 8.32946 8.41429 -0.219143 0.55592 0.013803 +Ta 2.12988 2.0852 8.36064 -0.099944 0.308003 0.252642 +Ta 2.08083 8.32403 10.45611 0.15963 0.438777 0.611576 +Ta 0.02857 2.10046 10.46488 0.00465 0.06223 -0.163579 +Ta 4.12633 4.25698 12.56375 -0.253803 -0.345212 0.164038 +Ta 6.24339 6.25677 0.07703 0.214297 0.405605 -0.193076 +Ta 6.23523 4.15385 2.04007 0.673655 -0.032667 0.435699 +Ta 4.23419 6.22194 2.15425 -0.259175 0.88278 -0.155619 +Ta 4.19632 0.02098 4.26019 0.256837 0.15204 -0.517119 +Ta 6.2787 2.16315 4.12282 -0.232405 -0.499866 0.253482 +Ta 6.34721 8.31974 6.30085 -0.979334 0.910385 0.303536 +Ta 4.28154 2.17035 6.32716 -0.15794 -0.615192 -0.1244 +Ta 4.18199 8.39045 8.46612 0.325504 0.011668 -0.623247 +Ta 6.26218 2.04661 8.48258 0.1676 0.725305 -0.25923 +Ta 6.23956 8.33727 10.47655 0.418626 0.454527 0.207051 +Ta 4.15476 2.10491 10.56002 -0.313925 0.116788 -0.527027 +Ta 0.01924 4.13985 4.22933 -0.14445 0.528571 -0.009114 +Ta 2.08713 6.26332 4.12939 -0.556542 0.338386 0.377019 +Ta 2.15091 4.23252 6.31161 -0.453388 -0.485864 -0.240866 +Ta 0.01574 6.34253 6.34105 0.560159 -0.626169 -0.553544 +Ta 0.06165 4.27339 8.34091 -0.693509 -0.695001 0.015426 +Ta 2.17693 6.29896 8.40088 -0.096806 0.060357 0.058203 +Ta 2.04233 4.27207 10.49743 -0.170105 0.047304 0.328134 +Ta 8.326 6.32148 10.47975 0.051179 -0.370901 0.321938 +Ta 4.17478 4.27838 4.20752 -0.040763 -0.935827 -0.576582 +Ta 6.33594 6.28787 4.27554 0.307038 0.027247 -1.208419 +Ta 6.22034 4.2468 6.22637 0.65603 -0.422269 1.121308 +Ta 4.16145 6.31917 6.2391 0.094184 0.321459 0.407157 +Ta 4.14417 4.25682 8.46183 0.755121 -0.328996 0.17207 +Ta 6.30692 6.29958 8.38648 -0.576112 -0.600141 0.013593 +Ta 6.30183 4.19292 10.57602 0.207371 0.051704 -0.883456 +Ta 4.25713 6.3237 10.54986 -0.254962 -0.198902 0.083246 +48 +Lattice = "8.39999961853 0.0 0.0 0.0 8.39999961853 0.0 0.0 0.0 12.6000003815" Properties=species:S:1:pos:R:3:forces:R:3 energy=-555.747848 stress="44613.38 397.28000000000003 -242.23 397.28000000000003 46401.21 -102.86 -242.23 -102.86 43613.280000000006" +Ta 0.02479 8.34418 0.01275 -0.16642 0.336623 -0.17578 +Ta 2.12361 2.14989 0.01237 -0.405458 -0.253401 -0.541818 +Ta 2.15668 0.05545 2.03048 -1.000877 -0.537193 0.264476 +Ta 8.38488 2.15096 2.04122 -0.226412 -0.742284 -0.216619 +Ta 4.26822 0.07709 0.05369 -1.051454 -0.974093 -0.658846 +Ta 6.22169 2.03316 12.57305 1.255557 0.920651 0.507841 +Ta 6.25622 8.38573 2.18037 0.795872 0.410847 -0.509558 +Ta 4.16678 2.07023 2.1321 0.423587 0.619136 0.258117 +Ta 0.05908 4.28115 12.57632 -0.514548 -0.229495 0.223581 +Ta 2.15681 6.25911 12.52611 -0.187265 0.793507 0.590029 +Ta 2.10607 4.20234 2.1649 -0.204517 0.52787 -0.182255 +Ta 8.33964 6.36799 2.06365 0.524674 -0.464522 0.434211 +Ta 8.32432 8.32625 4.27611 0.592658 0.021054 -0.297495 +Ta 2.02168 2.04529 4.16312 0.026264 -0.221166 0.743869 +Ta 2.16588 0.04144 6.35945 -0.460731 -0.235445 -0.58949 +Ta 0.01204 2.05369 6.35048 0.259091 0.326814 -0.495643 +Ta 0.01039 0.00368 8.3336 -0.673018 -0.236784 0.607724 +Ta 2.0362 2.11502 8.41459 0.695682 0.392328 0.347056 +Ta 2.06078 8.33946 10.46227 0.422497 0.624614 0.395156 +Ta 8.39011 2.13863 10.50323 0.037882 -0.407402 0.601189 +Ta 4.20505 4.24743 0.06234 -0.328867 -0.887587 -0.011584 +Ta 6.2258 6.25659 0.00484 0.425855 0.635452 0.199651 +Ta 6.25834 4.14378 2.03463 0.154989 0.155997 0.516394 +Ta 4.15865 6.35101 2.06568 0.13635 -0.562846 0.542472 +Ta 4.24566 0.03553 4.16912 -0.27687 0.238692 0.561637 +Ta 6.36116 2.13477 4.23864 -0.0672 0.263837 -0.212871 +Ta 6.28832 0.03663 6.33587 -0.054626 -0.825117 0.073016 +Ta 4.26921 2.03519 6.33887 -0.525339 0.940356 -0.102505 +Ta 4.20405 0.04164 8.423 0.312009 0.161766 0.440029 +Ta 6.3561 2.16604 8.38015 -0.556637 -0.443675 0.656518 +Ta 6.22231 0.06354 10.57462 0.749122 -0.629719 -0.896467 +Ta 4.23446 2.05368 10.5626 -0.759888 0.841158 -0.975855 +Ta 0.00046 4.14735 4.18932 0.123745 1.012572 -0.167229 +Ta 2.18129 6.36027 4.19805 -0.666359 0.064525 -0.022031 +Ta 2.07916 4.25676 6.35081 0.158957 -0.818787 -0.400517 +Ta 8.3474 6.21802 6.35914 0.325132 0.928801 -0.633002 +Ta 8.32754 4.20214 8.39946 0.837886 0.30854 0.750161 +Ta 2.08917 6.30707 8.37548 -0.142599 -0.403183 0.505543 +Ta 2.09792 4.22452 10.55581 0.108204 -0.342607 -0.998745 +Ta 8.34488 6.35512 10.47699 0.002323 -0.149774 0.008416 +Ta 4.12138 4.12799 4.23746 0.523048 0.17672 0.272443 +Ta 6.23634 6.28138 4.16996 -0.092966 -0.776434 0.306905 +Ta 6.36952 4.2719 6.36773 -1.008562 -0.323291 -1.151597 +Ta 4.13873 6.36014 6.35862 0.771311 -0.156347 -0.591177 +Ta 4.2281 4.26918 8.35417 -0.447945 -1.108738 0.194339 +Ta 6.2637 6.27914 8.44271 -0.036946 0.834555 0.001538 +Ta 6.25795 4.26254 10.56883 0.196157 -0.749479 0.01619 +Ta 4.19511 6.21799 10.50605 -0.003346 0.942955 -0.187417 diff --git a/examples/PACKAGES/pod/Ta/XYZ/Elastic_BCC.xyz b/examples/PACKAGES/pod/Ta/XYZ/Elastic_BCC.xyz new file mode 100644 index 0000000000..ba2d560f43 --- /dev/null +++ b/examples/PACKAGES/pod/Ta/XYZ/Elastic_BCC.xyz @@ -0,0 +1,400 @@ +2 +Lattice = "3.31180000305 0.0 0.0 0.0131999999285 3.32649993896 0.0 -0.00789999961853 -0.00710000004619 3.30480003357" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.689367 stress="4063.55 -2978.6600000000003 1761.76 -2978.6600000000003 -667.64 1596.31 1761.76 1596.31 6346.89" +Ta 0.0 0.0 0.0 -0.00044 3e-06 -2e-06 +Ta 1.6585 1.6597 1.6524 0.00044 -3e-06 2e-06 +2 +Lattice = "3.31170010567 0.0 0.0 -0.00419999985024 3.30890011787 0.0 -0.00920000020415 -0.0154999997467 3.328799963" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.689888 stress="1032.59 906.63 2045.1999999999998 906.63 1918.6499999999999 3453.7599999999998 2045.1999999999998 3453.7599999999998 -4437.12" +Ta 0.0 0.0 0.0 -0.000436 -1e-06 -2e-06 +Ta 1.6491 1.6467 1.6644 0.000436 1e-06 2e-06 +2 +Lattice = "3.3111000061 0.0 0.0 0.00810000021011 3.3273999691 0.0 -0.00889999978244 0.00870000012219 3.31040000916" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.689996 stress="1447.25 -1793.1 1960.95 -1793.1 -3771.35 -1928.0900000000001 1960.95 -1928.0900000000001 1685.23" +Ta 0.0 0.0 0.0 0.000438 -0.000443 5e-06 +Ta 1.6552 1.668 1.6552 -0.000438 0.000443 -5e-06 +2 +Lattice = "3.32399988174 0.0 0.0 -0.00179999996908 3.32139992714 0.0 -0.00359999993816 -0.00600000005215 3.31699991226" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.690957 stress="-9165.53 392.27 787.5 392.27 -8350.429999999998 1310.7 787.5 1310.7 -6953.2" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 1.6593 1.6577 1.6585 0.0 0.0 0.0 +2 +Lattice = "3.31089997292 0.0 0.0 0.0124000003561 3.32559990883 0.0 -0.001200000057 -0.0124000003561 3.3341999054" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.690521 stress="-8949.18 -2681.52 276.69 -2681.52 -13545.81 2724.27 276.69 2724.27 -16201.730000000001" +Ta 0.0 0.0 0.0 -0.000423 3e-06 0.0 +Ta 1.661 1.6566 1.6671 0.000423 -3e-06 0.0 +2 +Lattice = "3.30999994278 0.0 0.0 0.0110999997705 3.33330011368 0.0 0.00200000009499 -0.00749999983236 3.33319997787" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.69038 stress="-11410.16 -2387.02 -421.38 -2387.02 -18621.670000000002 1636.99 -421.38 1636.99 -18577.07" +Ta 0.0 0.0 0.0 0.000419 -3e-06 -1e-06 +Ta 1.6616 1.6629 1.6666 -0.000419 3e-06 1e-06 +2 +Lattice = "3.31480002403 0.0 0.0 -0.00130000000354 3.30679988861 0.0 0.0152000002563 -0.00179999996908 3.31760001183" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.689202 stress="4967.67 296.10999999999996 -3428.94 296.10999999999996 7593.91 406.16 -3428.94 406.16 4075.8900000000003" +Ta 0.0 0.0 0.0 0.000444 0.0 -4e-06 +Ta 1.6644 1.6525 1.6588 -0.000444 0.0 4e-06 +2 +Lattice = "3.30529999733 0.0 0.0 -0.00170000002254 3.32520008087 0.0 0.00170000002254 -0.00829999987036 3.32640004158" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.690482 stress="-550.9 376.95 -376.77 376.95 -6880.99 1848.91 -376.77 1848.91 -7253.42" +Ta 0.0 0.0 0.0 0.00043 -0.000434 -2e-06 +Ta 1.6527 1.6584 1.6632 -0.00043 0.000434 2e-06 +2 +Lattice = "3.32270002365 0.0 0.0 -0.00240000011399 3.32060003281 0.0 -0.0148999998346 0.00600000005215 3.30489993095" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.689902 stress="-1938.73 553.61 3301.04 553.61 -1240.33 -1332.82 3301.04 -1332.82 3793.0" +Ta 0.0 0.0 0.0 -4e-06 2e-06 -0.000435 +Ta 1.6527 1.6633 1.6524 4e-06 -2e-06 0.000435 +2 +Lattice = "3.3232998848 0.0 0.0 0.00380000006407 3.30970001221 0.0 -0.0163000002503 -0.00340000004508 3.33060002327" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.690563 stress="-9502.029999999999 -833.58 3604.52 -833.58 -5183.259999999999 750.48 3604.52 750.48 -11765.68" +Ta 0.0 0.0 0.0 -1e-06 0.000427 1e-06 +Ta 1.6554 1.6532 1.6653 1e-06 -0.000427 -1e-06 +2 +Lattice = "3.31620001793 0.0 0.0 0.00319999991916 3.31369996071 0.0 -0.00190000003204 0.00400000018999 3.31730008125" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.690207 stress="617.27 -708.54 421.95 -708.54 1415.16 -887.75 421.95 -887.75 266.22" +Ta 0.0 0.0 0.0 -0.000437 -0.000438 0.00044 +Ta 1.6587 1.6588 1.6587 0.000437 0.000438 -0.00044 +2 +Lattice = "3.32719993591 0.0 0.0 0.00240000011399 3.30349993706 0.0 0.00430000014603 -0.0038999998942 3.31030011177" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.689285 stress="138.79 -534.2 -967.78 -534.2 7805.76 865.88 -967.78 865.88 5611.4" +Ta 0.0 0.0 0.0 0.000447 -2e-06 -0.000443 +Ta 1.667 1.6498 1.6551 -0.000447 2e-06 0.000443 +2 +Lattice = "3.3218998909 0.0 0.0 0.00930000003427 3.30679988861 0.0 0.0109000001103 0.00510000018403 3.31669998169" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.689768 stress="-340.25 -2080.88 -2448.95 -2080.88 4545.72 -1144.55 -2448.95 -1144.55 1351.01" +Ta 0.0 0.0 0.0 -0.000442 -0.000437 0.000444 +Ta 1.671 1.6559 1.6584 0.000442 0.000437 -0.000444 +2 +Lattice = "3.31170010567 0.0 0.0 0.0164999999106 3.3343000412 0.0 -9.99999974738e-05 0.0138999996707 3.30570006371" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.68968 stress="-50.55 -3689.6800000000003 -1.47 -3689.6800000000003 -7274.5199999999995 -3083.4 -1.47 -3083.4 1889.91" +Ta 0.0 0.0 0.0 -0.000435 1e-06 0.000433 +Ta 1.664 1.6741 1.6529 0.000435 -1e-06 -0.000433 +2 +Lattice = "3.32259988785 0.0 0.0 0.0109999999404 3.30929994583 0.0 -0.0142000000924 -0.0140000004321 3.32019996643" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.690074 stress="-3803.7000000000003 -2463.9700000000003 3178.14 -2463.9700000000003 463.82 3109.52 3178.14 3109.52 -3014.8100000000004" +Ta 0.0 0.0 0.0 0.000872 0.000428 1.1e-05 +Ta 1.6598 1.6477 1.6601 -0.000872 -0.000428 -1.1e-05 +2 +Lattice = "3.31579995155 0.0 0.0 0.0163000002503 3.31240010262 0.0 0.00620000017807 -0.00879999995232 3.30360007286" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.688108 stress="8273.59 -3695.21 -1386.53 -3695.21 9410.130000000001 1972.81 -1386.53 1972.81 12301.0" +Ta 0.0 0.0 0.0 0.000448 -5e-06 -2e-06 +Ta 1.6692 1.6518 1.6518 -0.000448 5e-06 2e-06 +2 +Lattice = "3.31279993057 0.0 0.0 0.000699999975041 3.3220000267 0.0 -0.00209999992512 0.00410000002012 3.30430006981" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.689241 stress="5705.93 -155.59 468.56 -155.59 2710.42 -920.27 468.56 -920.27 8460.77" +Ta 0.0 0.0 0.0 -1e-06 0.000446 -0.000442 +Ta 1.6557 1.6631 1.6521 1e-06 -0.000446 0.000442 +2 +Lattice = "3.31509995461 0.0 0.0 -0.0077999997884 3.31060004234 0.0 0.0136000001803 -0.0110999997705 3.31699991226" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.68952 stress="3143.69 1764.0800000000002 -3057.7000000000003 1764.0800000000002 4618.12 2493.02 -3057.7000000000003 2493.02 2546.3" +Ta 0.0 0.0 0.0 0.000443 0.000443 -1e-06 +Ta 1.6605 1.6498 1.6585 -0.000443 -0.000443 1e-06 +2 +Lattice = "3.30970001221 0.0 0.0 -0.0141000002623 3.30669999123 0.0 -0.00380000006407 -0.0109999999404 3.30399990082" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.686278 stress="15948.689999999999 3229.23 856.13 3229.23 16943.010000000002 2508.75 856.13 2508.75 17860.57" +Ta 0.0 0.0 0.0 -4e-06 -0.000453 -3e-06 +Ta 1.6459 1.6478 1.652 4e-06 0.000453 3e-06 +2 +Lattice = "3.31279993057 0.0 0.0 0.00680000009015 3.33550000191 0.0 -0.00949999969453 -0.00449999980628 3.33489990234" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.690097 stress="-15440.51 -1462.0800000000002 2035.5400000000002 -1462.0800000000002 -22399.3 982.8 2035.5400000000002 982.8 -22219.22" +Ta 0.0 0.0 0.0 0.000418 -1e-06 0.000423 +Ta 1.6551 1.6655 1.6675 -0.000418 1e-06 -0.000423 +2 +Lattice = "3.33060002327 0.0 0.0 -0.00740000000224 3.32299995422 0.0 0.00570000009611 0.00219999998808 3.32229995728" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.690811 stress="-17578.07 1606.3700000000001 -1235.27 1606.3700000000001 -15218.79 -469.97 -1235.27 -469.97 -14998.810000000001" +Ta 0.0 0.0 0.0 0.000426 2e-06 -0.000424 +Ta 1.6645 1.6626 1.6611 -0.000426 -2e-06 0.000424 +2 +Lattice = "3.30460000038 0.0 0.0 0.00960000045598 3.32699990273 0.0 -0.0129000004381 0.00889999978244 3.33470010757" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.690266 stress="-4850.61 -2063.29 2800.95 -2063.29 -11849.39 -1958.39 2800.95 -1958.39 -14262.01" +Ta 0.0 0.0 0.0 0.000423 -0.00043 -0.000426 +Ta 1.6507 1.6679 1.6673 -0.000423 0.00043 0.000426 +2 +Lattice = "3.3166000843 0.0 0.0 0.00989999994636 3.32179999352 0.0 0.00899999961257 0.00829999987036 3.3178999424" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.690597 stress="-3926.0299999999997 -2198.55 -1990.1100000000001 -2198.55 -5568.17 -1841.1599999999999 -1990.1100000000001 -1841.1599999999999 -4321.4800000000005" +Ta 0.0 0.0 0.0 0.000428 0.00043 0.000429 +Ta 1.6678 1.6651 1.659 -0.000428 -0.00043 -0.000429 +2 +Lattice = "3.32559990883 0.0 0.0 0.0149999996647 3.32439994812 0.0 -0.0102000003681 -0.00879999995232 3.31529998779" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.690673 stress="-11060.560000000001 -3311.08 2234.96 -3311.08 -10663.09 1930.59 2234.96 1930.59 -7793.1" +Ta 0.0 0.0 0.0 3e-06 2e-06 0.000427 +Ta 1.6652 1.6578 1.6577 -3e-06 -2e-06 -0.000427 +2 +Lattice = "3.32710003853 0.0 0.0 0.0142999999225 3.31200003624 0.0 0.00529999984428 -0.00150000001304 3.3180000782" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.690551 stress="-7626.490000000001 -3148.54 -1170.5 -3148.54 -2813.94 319.88 -1170.5 319.88 -4708.87" +Ta 0.0 0.0 0.0 -0.000431 -0.000428 1e-06 +Ta 1.6733 1.6552 1.659 0.000431 0.000428 -1e-06 +2 +Lattice = "3.3218998909 0.0 0.0 0.00829999987036 3.31850004196 0.0 0.0119000002742 0.00230000005104 3.31710004807" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.690693 stress="-6193.7300000000005 -1837.26 -2623.8700000000003 -1837.26 -5083.38 -517.81 -2623.8700000000003 -517.81 -4646.26" +Ta 0.0 0.0 0.0 -0.00043 3e-06 -0.000429 +Ta 1.671 1.6604 1.6585 0.00043 -3e-06 0.000429 +2 +Lattice = "3.32940006256 0.0 0.0 -0.00769999995828 3.30390000343 0.0 -0.0120000001043 0.0147000001743 3.32710003853" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.69021 stress="-9842.3 1710.3600000000001 2678.2400000000002 1710.3600000000001 -1794.44 -3224.8100000000004 2678.2400000000002 -3224.8100000000004 -9105.6" +Ta 0.0 0.0 0.0 -0.000437 2e-06 -0.000436 +Ta 1.6548 1.6593 1.6635 0.000437 -2e-06 0.000436 +2 +Lattice = "3.30669999123 0.0 0.0 -0.0122999995947 3.31839990616 0.0 0.00789999961853 -0.0104999998584 3.31259989738" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.688943 stress="8333.89 2780.83 -1785.3000000000002 2780.83 4535.25 2375.9700000000003 -1785.3000000000002 2375.9700000000003 6440.179999999999" +Ta 0.0 0.0 0.0 0.000439 -0.000441 -5e-06 +Ta 1.6512 1.6539 1.6563 -0.000439 0.000441 5e-06 +2 +Lattice = "3.33619999886 0.0 0.0 0.00150000001304 3.30669999123 0.0 0.0163000002503 0.0137999998406 3.33039999008" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.690136 stress="-18003.329999999998 -360.51 -3576.72 -360.51 -8835.43 -2976.33 -3576.72 -2976.33 -16192.060000000001" +Ta 0.0 0.0 0.0 0.0 0.00042 -4e-06 +Ta 1.677 1.6603 1.6652 0.0 -0.00042 4e-06 +2 +Lattice = "3.30349993706 0.0 0.0 0.0162000004202 3.30900001526 0.0 -0.00700000021607 0.00680000009015 3.31489992142" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.687444 stress="14486.06 -3661.95 1582.35 -3661.95 12701.029999999999 -1541.32 1582.35 -1541.32 10767.84" +Ta 0.0 0.0 0.0 -0.00045 7e-06 -0.000453 +Ta 1.6563 1.6579 1.6574 0.00045 -7e-06 0.000453 +2 +Lattice = "3.31089997292 0.0 0.0 -0.00889999978244 3.31270003319 0.0 0.00829999987036 0.00520000001416 3.32080006599" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.689801 stress="3684.26 1974.24 -1852.3799999999999 1974.24 3114.35 -1156.8400000000001 -1852.3799999999999 -1156.8400000000001 502.12999999999994" +Ta 0.0 0.0 0.0 0.000437 -0.000437 -1e-06 +Ta 1.6552 1.6589 1.6604 -0.000437 0.000437 1e-06 +2 +Lattice = "3.31879997253 0.0 0.0 -0.0110999997705 3.31049990654 0.0 -0.0164999999106 -0.00410000002012 3.32960009575" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.690408 stress="-5855.900000000001 2413.85 3653.84 2413.85 -3177.2999999999997 882.09 3653.84 882.09 -9230.779999999999" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 1.6456 1.6532 1.6648 0.0 0.0 0.0 +2 +Lattice = "3.33170008659 0.0 0.0 0.00689999992028 3.3178999424 0.0 -0.0148000000045 0.0147000001743 3.31089997292" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.690362 stress="-10662.19 -1488.5900000000001 3240.34 -1488.5900000000001 -6300.3099999999995 -3192.45 3240.34 -3192.45 -4075.9999999999995" +Ta 0.0 0.0 0.0 4e-06 -4e-06 0.000429 +Ta 1.6619 1.6663 1.6555 -4e-06 4e-06 -0.000429 +2 +Lattice = "3.3343000412 0.0 0.0 0.00540000014007 3.32949995995 0.0 -0.0140000004321 -0.00460000010207 3.33520007133" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.688881 stress="-29339.85 -1153.21 2967.17 -1153.21 -27876.05 983.26 2967.17 983.26 -29592.94" +Ta 0.0 0.0 0.0 -0.000413 0.000412 -2e-06 +Ta 1.6628 1.6625 1.6676 0.000413 -0.000412 2e-06 +2 +Lattice = "3.31089997292 0.0 0.0 0.0131999999285 3.32349991798 0.0 -0.00669999979436 -0.00520000001416 3.33629989624" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.690515 stress="-8945.37 -2854.2900000000004 1466.4299999999998 -2854.2900000000004 -12870.23 1153.96 1466.4299999999998 1153.96 -16851.88" +Ta 0.0 0.0 0.0 0.000847 -0.000435 -0.000427 +Ta 1.6588 1.6591 1.6681 -0.000847 0.000435 0.000427 +2 +Lattice = "3.33450007439 0.0 0.0 0.0136000001803 3.32259988785 0.0 0.00700000021607 0.00400000018999 3.32060003281" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.690551 stress="-19623.16 -2954.7799999999997 -1523.28 -2954.7799999999997 -15920.310000000001 -868.95 -1523.28 -868.95 -15295.98" +Ta 0.0 0.0 0.0 -0.000424 4e-06 2e-06 +Ta 1.6775 1.6633 1.6603 0.000424 -4e-06 -2e-06 +2 +Lattice = "3.30719995499 0.0 0.0 0.00600000005215 3.30640006065 0.0 -0.00870000012219 -0.00480000022799 3.33119988441" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.689487 stress="4760.94 -1330.3100000000002 1958.3200000000002 -1330.3100000000002 5030.59 1081.68 1958.3200000000002 1081.68 -2959.67" +Ta 0.0 0.0 0.0 0.000438 -2e-06 2e-06 +Ta 1.6523 1.6508 1.6656 -0.000438 2e-06 -2e-06 +2 +Lattice = "3.32150006294 0.0 0.0 -0.000699999975041 3.30979990959 0.0 0.0129000004381 -0.0104000000283 3.31489992142" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.68986 stress="-609.8 175.89 -2883.99 175.89 3169.7000000000003 2312.35 -2883.99 2312.35 1528.81" +Ta 0.0 0.0 0.0 0.000444 -3e-06 -0.000442 +Ta 1.6669 1.6497 1.6574 -0.000444 3e-06 0.000442 +2 +Lattice = "3.30480003357 0.0 0.0 -0.00669999979436 3.31340003014 0.0 -0.00689999992028 0.0142999999225 3.3234000206" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.689288 stress="7065.76 1506.72 1557.04 1506.72 4265.53 -3227.4500000000003 1557.04 -3227.4500000000003 1046.89" +Ta 0.0 0.0 0.0 -0.000881 -0.000446 0.0 +Ta 1.6455 1.6638 1.6617 0.000881 0.000446 0.0 +2 +Lattice = "3.32389998436 0.0 0.0 -0.00850000046194 3.32249999046 0.0 -0.00889999978244 -0.00329999998212 3.33500003815" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.690457 stress="-18069.48 1814.44 1923.43 1814.44 -17623.8 707.29 1923.43 707.29 -21466.73" +Ta 0.0 0.0 0.0 -0.00042 -2e-06 -2e-06 +Ta 1.6532 1.6596 1.6675 0.00042 2e-06 2e-06 +2 +Lattice = "3.33189988136 0.0 0.0 0.0142999999225 3.31990003586 0.0 -0.00710000004619 -0.0148999998346 3.33529996872" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.689792 stress="-23150.59 -3063.23 1550.5800000000002 -3063.23 -19490.46 3197.18 1550.5800000000002 3197.18 -24167.48" +Ta 0.0 0.0 0.0 0.000417 -7e-06 -0.000417 +Ta 1.6696 1.6525 1.6676 -0.000417 7e-06 0.000417 +2 +Lattice = "3.33060002327 0.0 0.0 -0.0143999997526 3.32369995117 0.0 -0.00139999995008 -0.0136000001803 3.33200001717" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.690006 stress="-22406.35 3075.85 283.12 3075.85 -20306.539999999997 2912.28 283.12 2912.28 -22816.16" +Ta 0.0 0.0 0.0 -4e-06 -0.000417 -3e-06 +Ta 1.6574 1.655 1.666 4e-06 0.000417 3e-06 +2 +Lattice = "3.3259999752 0.0 0.0 -0.00749999983236 3.33489990234 0.0 -0.0097000002861 0.00089999998454 3.31710004807" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.690571 stress="-17118.0 1635.28 2081.98 1635.28 -19844.84 -203.19 2081.98 -203.19 -14345.72" +Ta 0.0 0.0 0.0 2e-06 -1e-06 0.00042 +Ta 1.6544 1.6679 1.6586 -2e-06 1e-06 -0.00042 +2 +Lattice = "3.31739997864 0.0 0.0 -0.0156999994069 3.31970000267 0.0 0.00499999988824 0.0146000003442 3.31509995461" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.690213 stress="-2208.17 3473.14 -1080.09 3473.14 -2950.43 -3225.5600000000004 -1080.09 -3225.5600000000004 -1446.74" +Ta 0.0 0.0 0.0 -0.000442 -0.000445 0.000441 +Ta 1.6533 1.6671 1.6576 0.000442 0.000445 -0.000441 +2 +Lattice = "3.31410002708 0.0 0.0 0.0126000000164 3.32780003548 0.0 0.00749999983236 -0.00620000017807 3.33170008659" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.690617 stress="-11356.33 -2713.87 -1615.29 -2713.87 -15605.029999999999 1345.96 -1615.29 1345.96 -16800.52" +Ta 0.0 0.0 0.0 -2e-06 2e-06 0.000426 +Ta 1.6671 1.6608 1.6659 2e-06 -2e-06 -0.000426 +2 +Lattice = "3.33410000801 0.0 0.0 -0.00949999969453 3.30469989777 0.0 -0.0119000002742 -0.00879999995232 3.31220006943" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.689761 stress="-6865.599999999999 2087.9500000000003 2646.9 2087.9500000000003 2545.62 1920.39 2646.9 1920.39 148.10000000000002" +Ta 0.0 0.0 0.0 0.000443 0.000436 6e-06 +Ta 1.6564 1.648 1.6561 -0.000443 -0.000436 -6e-06 +2 +Lattice = "3.32760000229 0.0 0.0 -0.00190000003204 3.31820011139 0.0 0.000500000023749 -0.0155999995768 3.33640003204" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.69027 stress="-19541.46 406.28 -110.74000000000001 406.28 -16673.960000000003 3361.5 -110.74000000000001 3361.5 -22262.14" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 1.6631 1.6513 1.6682 0.0 0.0 0.0 +2 +Lattice = "3.30819988251 0.0 0.0 0.00719999987632 3.32559990883 0.0 0.00159999995958 0.00719999987632 3.32410001755" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.690599 stress="-1982.3500000000001 -1585.1200000000001 -358.04999999999995 -1585.1200000000001 -7502.34 -1599.04 -358.04999999999995 -1599.04 -7019.8099999999995" +Ta 0.0 0.0 0.0 0.0 -2e-06 0.000434 +Ta 1.6585 1.6664 1.6621 0.0 2e-06 -0.000434 +2 +Lattice = "3.31769990921 0.0 0.0 -0.00579999992624 3.31699991226 0.0 0.00889999978244 0.0162000004202 3.3327999115" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.69061 stress="-9577.12 1230.78 -1945.3100000000002 1230.78 -9380.55 -3550.1800000000003 -1945.3100000000002 -3550.1800000000003 -14308.38" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 1.6604 1.6666 1.6664 0.0 0.0 0.0 +2 +Lattice = "3.31329989433 0.0 0.0 -0.000399999989895 3.31690001488 0.0 0.0135000003502 0.0 3.33590006828" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.690603 stress="-7520.4800000000005 87.73 -2963.21 87.73 -8622.48 0.69 -2963.21 0.69 -14592.02" +Ta 0.0 0.0 0.0 -4e-06 -0.000427 0.000432 +Ta 1.6632 1.6584 1.668 4e-06 0.000427 -0.000432 +2 +Lattice = "3.31369996071 0.0 0.0 -0.00350000010803 3.30380010605 0.0 -0.00719999987632 -0.0097000002861 3.31170010567" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.687908 stress="10264.31 780.75 1638.34 780.75 13511.390000000001 2195.65 1638.34 2195.65 10923.89" +Ta 0.0 0.0 0.0 -3e-06 -0.00045 -0.000451 +Ta 1.6515 1.647 1.6558 3e-06 0.00045 0.000451 +2 +Lattice = "3.31100010872 0.0 0.0 0.00730000017211 3.32240009308 0.0 0.00260000000708 0.00310000008903 3.33559989929" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.690688 stress="-8159.87 -1578.8500000000001 -569.48 -1578.8500000000001 -11732.89 -685.38 -569.48 -685.38 -15843.04" +Ta 0.0 0.0 0.0 -0.000422 -0.000425 1e-06 +Ta 1.6604 1.6627 1.6678 0.000422 0.000425 -1e-06 +2 +Lattice = "3.32010006905 0.0 0.0 0.0153999999166 3.31189990044 0.0 0.00710000004619 -0.0116999996826 3.3164999485" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.689988 stress="-1287.79 -3409.17 -1564.98 -3409.17 1359.31 2585.44 -1564.98 2585.44 -98.57000000000001" +Ta 0.0 0.0 0.0 -2e-06 3e-06 0.000438 +Ta 1.6713 1.6501 1.6583 2e-06 -3e-06 -0.000438 +2 +Lattice = "3.31150007248 0.0 0.0 -0.0038999998942 3.30809998512 0.0 0.0154999997467 -0.0133999995887 3.32680010796" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.689613 stress="2542.36 898.2 -3478.91 898.2 3649.25 3002.21 -3478.91 3002.21 -2359.93" +Ta 0.0 0.0 0.0 0.000437 -0.000437 -8e-06 +Ta 1.6616 1.6473 1.6634 -0.000437 0.000437 8e-06 +2 +Lattice = "3.31990003586 0.0 0.0 0.0131000000983 3.32010006905 0.0 -0.00529999984428 0.00910000037402 3.31820011139" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.690678 stress="-5888.5 -2879.58 1153.4 -2879.58 -5946.5 -1998.02 1153.4 -1998.02 -5325.56" +Ta 0.0 0.0 0.0 -0.000433 3e-06 -2e-06 +Ta 1.6638 1.6646 1.6591 0.000433 -3e-06 2e-06 +2 +Lattice = "3.3194000721 0.0 0.0 -0.00700000021607 3.3289000988 0.0 0.0137000000104 -0.0137999998406 3.3069999218" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.69017 stress="-4282.71 1592.26 -3010.8799999999997 1592.26 -7298.28 3048.75 -3010.8799999999997 3048.75 -325.23" +Ta 0.0 0.0 0.0 0.000436 0.000439 0.0 +Ta 1.6631 1.6576 1.6535 -0.000436 -0.000439 0.0 +2 +Lattice = "3.30819988251 0.0 0.0 -0.0120000001043 3.30579996109 0.0 -0.00590000022203 -0.0113000003621 3.31590008736" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.687892 stress="11705.5 2699.26 1327.81 2699.26 12498.38 2559.92 1327.81 2559.92 9195.539999999999" +Ta 0.0 0.0 0.0 -0.000453 -0.000454 -0.000455 +Ta 1.6451 1.6472 1.6579 0.000453 0.000454 0.000455 +2 +Lattice = "3.32249999046 0.0 0.0 -0.0121999997646 3.30819988251 0.0 0.0137999998406 -0.00240000011399 3.320499897" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.690132 stress="-3343.01 2704.11 -3081.23 2704.11 1270.1899999999998 549.12 -3081.23 549.12 -2672.32" +Ta 0.0 0.0 0.0 -0.000434 -4e-06 -0.000434 +Ta 1.662 1.6529 1.6602 0.000434 4e-06 0.000434 +2 +Lattice = "3.31189990044 0.0 0.0 -0.00439999997616 3.32540011406 0.0 -0.0063000000082 0.00219999998808 3.32909989357" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.690843 stress="-7235.45 958.77 1373.71 958.77 -11469.4 -487.27 1373.71 -487.27 -12631.220000000001" +Ta 0.0 0.0 0.0 -1e-06 0.0 -0.00043 +Ta 1.6506 1.6638 1.6645 1e-06 0.0 0.00043 +2 +Lattice = "3.33640003204 0.0 0.0 0.0120000001043 3.31399989128 0.0 0.00639999983832 -0.00499999988824 3.31839990616" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.690598 stress="-16030.460000000001 -2615.3 -1399.57 -2615.3 -9011.369999999999 1069.71 -1399.57 1069.71 -10383.800000000001" +Ta 0.0 0.0 0.0 -0.000861 6e-06 3e-06 +Ta 1.6773 1.6545 1.6592 0.000861 -6e-06 -3e-06 +2 +Lattice = "3.31769990921 0.0 0.0 -0.00949999969453 3.32529997826 0.0 0.0105999996886 0.00949999969453 3.33109998703" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.690656 stress="-12733.07 2033.6599999999999 -2291.25 2033.6599999999999 -15085.44 -2061.68 -2291.25 -2061.68 -16870.989999999998" +Ta 0.0 0.0 0.0 -3e-06 -2e-06 0.000426 +Ta 1.6594 1.6674 1.6656 3e-06 2e-06 -0.000426 +2 +Lattice = "3.32620000839 0.0 0.0 0.00270000007004 3.30970001221 0.0 0.01600000076 0.0155999995768 3.33610010147" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.690254 stress="-14323.800000000001 -620.5899999999999 -3515.58 -620.5899999999999 -9188.58 -3392.86 -3515.58 -3392.86 -17392.0" +Ta 0.0 0.0 0.0 -0.000423 0.000427 -0.000428 +Ta 1.6724 1.6627 1.668 0.000423 -0.000427 0.000428 +2 +Lattice = "3.31920003891 0.0 0.0 -0.00730000017211 3.32259988785 0.0 -0.0133999995887 -0.0131999999285 3.32820010185" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.690694 stress="-11276.81 1552.73 2911.96 1552.73 -12332.94 2876.65 2911.96 2876.65 -14073.7" +Ta 0.0 0.0 0.0 0.000425 2e-06 4e-06 +Ta 1.6493 1.6547 1.6641 -0.000425 -2e-06 -4e-06 +2 +Lattice = "3.33060002327 0.0 0.0 0.00170000002254 3.30550003052 0.0 -0.0154999997467 -0.0108000002801 3.31830000877" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.690097 stress="-7398.2 -404.2 3456.2400000000002 -404.2 607.84 2374.71 3456.2400000000002 2374.71 -3477.02" +Ta 0.0 0.0 0.0 4e-06 0.000435 0.000438 +Ta 1.6584 1.6474 1.6592 -4e-06 -0.000435 -0.000438 +2 +Lattice = "3.30870008469 0.0 0.0 0.00079999997979 3.3125 0.0 0.0129000004381 -0.0046999999322 3.3111000061" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.688402 stress="10344.23 -170.68 -2918.0299999999997 -170.68 9114.35 1063.15 -2918.0299999999997 1063.15 9572.1" +Ta 0.0 0.0 0.0 4e-06 -1e-06 -0.000447 +Ta 1.6612 1.6539 1.6555 -4e-06 1e-06 0.000447 +2 +Lattice = "3.32299995422 0.0 0.0 -0.00439999997616 3.3085000515 0.0 0.00289999996312 0.0137999998406 3.304500103" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.688669 stress="3910.4 988.25 -648.7 988.25 8614.3 -3085.0 -648.7 -3085.0 9933.490000000002" +Ta 0.0 0.0 0.0 0.000445 -0.000447 0.000446 +Ta 1.6608 1.6611 1.6523 -0.000445 0.000447 -0.000446 +2 +Lattice = "3.31419992447 0.0 0.0 -0.0108000002801 3.31520009041 0.0 0.0114000001922 -0.00249999994412 3.33610010147" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.690538 stress="-7515.75 2343.1000000000004 -2512.81 2343.1000000000004 -7800.79 565.26 -2512.81 565.26 -14362.84" +Ta 0.0 0.0 0.0 0.0 0.000428 0.000433 +Ta 1.6574 1.6564 1.6681 0.0 -0.000428 -0.000433 +2 +Lattice = "3.30870008469 0.0 0.0 -0.0105999996886 3.31060004234 0.0 0.00710000004619 -0.0164000000805 3.32909989357" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.689722 stress="2494.02 2358.67 -1602.8700000000001 2358.67 1865.98 3675.35 -1602.8700000000001 3675.35 -4043.8799999999997" +Ta 0.0 0.0 0.0 -2e-06 5e-06 0.000442 +Ta 1.6526 1.6471 1.6646 2e-06 -5e-06 -0.000442 +2 +Lattice = "3.33130002022 0.0 0.0 0.0153999999166 3.3259999752 0.0 0.00669999979436 0.00999999977648 3.31539988518" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.690581 stress="-16296.82 -3376.3999999999996 -1468.21 -3376.3999999999996 -14640.43 -2166.98 -1468.21 -2166.98 -11322.16" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 1.6767 1.668 1.6577 0.0 0.0 0.0 +2 +Lattice = "3.30430006981 0.0 0.0 0.0136000001803 3.32470011711 0.0 0.00740000000224 0.00650000013411 3.3083999157" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.688755 stress="9299.8 -3078.46 -1660.51 -3078.46 2679.5 -1477.71 -1660.51 -1477.71 7991.16" +Ta 0.0 0.0 0.0 0.000442 -4e-06 -2e-06 +Ta 1.6627 1.6656 1.6542 -0.000442 4e-06 2e-06 +2 +Lattice = "3.3273999691 0.0 0.0 0.0126999998465 3.33459997177 0.0 -0.00460000010207 0.0146000003442 3.33229994774" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.689312 stress="-25105.09 -2688.4 959.13 -2688.4 -27291.81 -3105.23 959.13 -3105.23 -26574.49" +Ta 0.0 0.0 0.0 0.000414 -7e-06 0.000415 +Ta 1.6678 1.6746 1.6662 -0.000414 7e-06 -0.000415 +2 +Lattice = "3.30520009995 0.0 0.0 -0.0137000000104 3.31570005417 0.0 -0.0162000004202 -0.0124000003561 3.30730009079" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.687388 stress="13516.93 3087.18 3651.46 3087.18 10100.35 2802.34 3651.46 2802.34 12865.9" +Ta 0.0 0.0 0.0 -0.000456 -0.000459 -0.000457 +Ta 1.6376 1.6516 1.6536 0.000456 0.000459 0.000457 +2 +Lattice = "3.31599998474 0.0 0.0 0.000699999975041 3.31730008125 0.0 0.000600000028498 -0.0154999997467 3.32500004768" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.690664 stress="-4661.23 -151.07000000000002 -130.38 -151.07000000000002 -5113.86 3419.6 -130.38 3419.6 -7531.63" +Ta 0.0 0.0 0.0 -0.000432 0.0 0.0 +Ta 1.6586 1.6509 1.6625 0.000432 0.0 0.0 +2 +Lattice = "3.3273999691 0.0 0.0 -0.0148999998346 3.32949995995 0.0 0.0137000000104 0.0154999997467 3.33450007439" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.68941 stress="-23795.190000000002 3133.63 -2900.7000000000003 3133.63 -24418.25 -3288.91 -2900.7000000000003 -3288.91 -25917.71" +Ta 0.0 0.0 0.0 3e-06 4e-06 -0.000416 +Ta 1.6631 1.6725 1.6672 -3e-06 -4e-06 0.000416 +2 +Lattice = "3.32439994812 0.0 0.0 0.00760000012815 3.31010007858 0.0 0.00590000022203 0.0038999998942 3.31290006638" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.690035 stress="-2106.9399999999996 -1695.3400000000001 -1317.1299999999999 -1695.3400000000001 2496.5299999999997 -868.58 -1317.1299999999999 -868.58 1598.99" +Ta 0.0 0.0 0.0 -0.000442 1e-06 0.000439 +Ta 1.6689 1.657 1.6565 0.000442 -1e-06 -0.000439 +2 +Lattice = "3.32430005074 0.0 0.0 0.00910000037402 3.3289000988 0.0 -0.00740000000224 0.01600000076 3.33310008049" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.690015 stress="-20472.059999999998 -1926.96 1574.3700000000001 -1926.96 -21891.98 -3433.3999999999996 1574.3700000000001 -3433.3999999999996 -23153.19" +Ta 0.0 0.0 0.0 4e-06 -0.000422 0.000423 +Ta 1.663 1.6724 1.6666 -4e-06 0.000422 -0.000423 +2 +Lattice = "3.32279992104 0.0 0.0 0.0130000002682 3.32789993286 0.0 -0.00899999961257 -0.001200000057 3.32439994812" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.690752 stress="-14810.21 -2823.7999999999997 1946.96 -2823.7999999999997 -16361.699999999999 271.0 1946.96 271.0 -15278.02" +Ta 0.0 0.0 0.0 -3e-06 0.000424 0.0 +Ta 1.6634 1.6634 1.6622 3e-06 -0.000424 0.0 +2 +Lattice = "3.30900001526 0.0 0.0 -0.0046999999322 3.33019995689 0.0 -0.00850000046194 0.00170000002254 3.30809998512" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.689825 stress="2936.71 1055.66 1878.49 1055.66 -3856.89 -383.2 1878.49 -383.2 3236.96" +Ta 0.0 0.0 0.0 -1e-06 0.000443 -0.000437 +Ta 1.6479 1.666 1.654 1e-06 -0.000443 0.000437 +2 +Lattice = "3.32730007172 0.0 0.0 -0.0148000000045 3.31719994545 0.0 0.00960000045598 -0.0111999996006 3.32929992676" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.690562 stress="-15582.82 3214.2400000000002 -2112.58 3214.2400000000002 -12428.97 2441.49 -2112.58 2441.49 -16168.56" +Ta 0.0 0.0 0.0 -0.000428 -1e-06 0.000428 +Ta 1.661 1.653 1.6647 0.000428 1e-06 -0.000428 +2 +Lattice = "3.31780004501 0.0 0.0 -0.0141000002623 3.31990003586 0.0 -0.000199999994948 -0.00460000010207 3.33559989929" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.690622 stress="-12368.81 3035.58 36.589999999999996 3035.58 -13009.29 1003.22 36.589999999999996 1003.22 -17869.59" +Ta 0.0 0.0 0.0 0.000419 -0.00042 -1e-06 +Ta 1.6518 1.6576 1.6678 -0.000419 0.00042 1e-06 +2 +Lattice = "3.31019997597 0.0 0.0 0.0127999996766 3.32069993019 0.0 0.0063000000082 -0.00170000002254 3.30509996414" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.688764 stress="8054.89 -2896.21 -1408.45 -2896.21 4644.51 375.59999999999997 -1408.45 375.59999999999997 9733.77" +Ta 0.0 0.0 0.0 -0.000446 4e-06 0.000445 +Ta 1.6646 1.6595 1.6526 0.000446 -4e-06 -0.000445 +2 +Lattice = "3.31080007553 0.0 0.0 -0.00319999991916 3.31229996681 0.0 -0.00240000011399 0.00359999993816 3.32299995422" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.690011 stress="2899.77 713.48 536.4100000000001 713.48 2419.23 -804.18 536.4100000000001 -804.18 -1023.68" +Ta 0.0 0.0 0.0 1e-06 0.000438 -1e-06 +Ta 1.6526 1.658 1.6615 -1e-06 -0.000438 1e-06 +2 +Lattice = "3.30539989471 0.0 0.0 0.00359999993816 3.31970000267 0.0 -0.0097000002861 -0.0120000001043 3.30390000343" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.687696 stress="13108.67 -840.56 2187.26 -840.56 8404.43 2733.05 2187.26 2733.05 13609.949999999999" +Ta 0.0 0.0 0.0 0.000444 0.000447 -0.000441 +Ta 1.6497 1.6539 1.6519 -0.000444 -0.000447 0.000441 +2 +Lattice = "3.31929993629 0.0 0.0 0.00240000011399 3.32459998131 0.0 0.00540000014007 0.00109999999404 3.32540011406" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.691019 stress="-10964.99 -525.81 -1177.09 -525.81 -12623.84 -241.71 -1177.09 -241.71 -12870.95" +Ta 0.0 0.0 0.0 0.000426 -0.000428 -1e-06 +Ta 1.6636 1.6628 1.6627 -0.000426 0.000428 1e-06 +2 +Lattice = "3.31080007553 0.0 0.0 0.00350000010803 3.31130003929 0.0 -0.0135000003502 0.00310000008903 3.31500005722" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.689025 stress="7287.55 -782.66 3041.1000000000004 -782.66 7135.919999999999 -692.63 3041.1000000000004 -692.63 5936.740000000001" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 1.6504 1.6572 1.6575 0.0 0.0 0.0 +2 +Lattice = "3.30800008774 0.0 0.0 -0.00200000009499 3.33439993858 0.0 0.0111999996006 0.0130000002682 3.31060004234" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.689952 stress="508.71 421.52 -2451.6800000000003 421.52 -7909.360000000001 -2885.62 -2451.6800000000003 -2885.62 -315.85999999999996" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 1.6586 1.6737 1.6553 0.0 0.0 0.0 +2 +Lattice = "3.3289000988 0.0 0.0 0.00820000004023 3.32640004158 0.0 -0.0105999996886 -0.0156999994069 3.31559991837" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.69061 stress="-14693.78 -1821.97 2311.93 -1821.97 -13931.74 3407.2 2311.93 3407.2 -10544.75" +Ta 0.0 0.0 0.0 0.000429 -0.000429 -1e-06 +Ta 1.6633 1.6553 1.6578 -0.000429 0.000429 1e-06 +2 +Lattice = "3.32290005684 0.0 0.0 0.0154999997467 3.31669998169 0.0 0.00870000012219 0.0142000000924 3.32319998741" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.690595 stress="-9023.58 -3411.2599999999998 -1934.4099999999999 -3411.2599999999998 -7071.44 -3121.81 -1934.4099999999999 -3121.81 -9087.630000000001" +Ta 0.0 0.0 0.0 0.000435 -0.000433 2e-06 +Ta 1.6736 1.6654 1.6616 -0.000435 0.000433 -2e-06 +2 +Lattice = "3.3303000927 0.0 0.0 0.0146000003442 3.31329989433 0.0 0.0110999997705 0.00760000012815 3.33520007133" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.690231 stress="-18800.98 -3140.71 -2429.11 -3140.71 -13532.06 -1652.97 -2429.11 -1652.97 -20281.1" +Ta 0.0 0.0 0.0 4e-06 -0.000419 2e-06 +Ta 1.678 1.6604 1.6676 -4e-06 0.000419 -2e-06 +2 +Lattice = "3.33489990234 0.0 0.0 0.0162000004202 3.32060003281 0.0 -0.00230000005104 0.01070000045 3.32109999657" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.690469 stress="-19225.86 -3508.14 482.12 -3508.14 -14795.67 -2294.36 482.12 -2294.36 -14933.130000000001" +Ta 0.0 0.0 0.0 -5e-06 0.000425 -0.000425 +Ta 1.6744 1.6657 1.6605 5e-06 -0.000425 0.000425 +2 +Lattice = "3.31529998779 0.0 0.0 -0.00449999980628 3.31590008736 0.0 -0.00150000001304 -0.0077999997884 3.32039999962" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.690482 stress="-1223.53 989.7099999999999 330.42 989.7099999999999 -1425.84 1726.31 330.42 1726.31 -2854.88" +Ta 0.0 0.0 0.0 0.000437 0.000437 3e-06 +Ta 1.6547 1.6541 1.6602 -0.000437 -0.000437 -3e-06 +2 +Lattice = "3.33599996567 0.0 0.0 0.0127999996766 3.31879997253 0.0 0.0046999999322 0.00219999998808 3.33610010147" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.689613 stress="-26129.239999999998 -2719.4500000000003 -1009.22 -2719.4500000000003 -20885.58 -474.41 -1009.22 -474.41 -26139.41" +Ta 0.0 0.0 0.0 0.000416 -4e-06 0.000416 +Ta 1.6768 1.6605 1.6681 -0.000416 4e-06 -0.000416 +2 +Lattice = "3.30529999733 0.0 0.0 -0.0137000000104 3.31130003929 0.0 -0.0113000003621 -0.00879999995232 3.31049990654" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.687426 stress="14036.429999999998 3100.8300000000004 2557.21 3100.8300000000004 12085.73 1993.28 2557.21 1993.28 12358.140000000001" +Ta 0.0 0.0 0.0 0.000442 -0.00045 -0.00045 +Ta 1.6402 1.6512 1.6552 -0.000442 0.00045 0.00045 +2 +Lattice = "3.30550003052 0.0 0.0 -0.00620000017807 3.30990004539 0.0 0.0144999995828 -0.00209999992512 3.33089995384" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.689562 stress="4550.63 1373.71 -3248.75 1373.71 3169.0 478.2 -3248.75 478.2 -3584.6" +Ta 0.0 0.0 0.0 4e-06 -1e-06 -0.000443 +Ta 1.6569 1.6539 1.6654 -4e-06 1e-06 0.000443 +2 +Lattice = "3.31920003891 0.0 0.0 0.0109999999404 3.31369996071 0.0 0.0155999995768 0.0151000004262 3.3273999691" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.6904 stress="-6656.91 -2444.4 -3459.77 -2444.4 -4902.92 -3339.7000000000003 -3459.77 -3339.7000000000003 -9220.65" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 1.6729 1.6644 1.6637 0.0 0.0 0.0 +2 +Lattice = "3.32829999924 0.0 0.0 0.00159999995958 3.32319998741 0.0 0.0164999999106 -0.0138999996707 3.32419991493" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.690561 stress="-16787.82 -307.25 -3575.27 -307.25 -15202.7 3000.58 -3575.27 3000.58 -15509.24" +Ta 0.0 0.0 0.0 0.0 0.000423 3e-06 +Ta 1.6732 1.6547 1.6621 0.0 -0.000423 -3e-06 +2 +Lattice = "3.33509993553 0.0 0.0 0.0 3.32529997826 0.0 0.00889999978244 0.0130000002682 3.33629989624" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.689107 stress="-28509.83 -17.12 -1893.91 -17.12 -25562.52 -2751.32 -1893.91 -2751.32 -28867.920000000002" +Ta 0.0 0.0 0.0 -2e-06 0.000408 0.00041 +Ta 1.672 1.6692 1.6682 2e-06 -0.000408 -0.00041 +2 +Lattice = "3.33400011063 0.0 0.0 -0.0162000004202 3.30960011482 0.0 -0.0131000000983 -0.0115000000224 3.31579995155" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.690145 stress="-10872.289999999999 3539.75 2881.95 3539.75 -3120.2999999999997 2484.82 2881.95 2484.82 -5070.15" +Ta 0.0 0.0 0.0 -0.00044 -0.000434 -7e-06 +Ta 1.6523 1.649 1.6579 0.00044 0.000434 7e-06 +2 +Lattice = "3.32870006561 0.0 0.0 0.00930000003427 3.33170008659 0.0 -0.00400000018999 -0.0147000001743 3.31769990921" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.690482 stress="-17992.4 -2032.8300000000002 873.85 -2032.8300000000002 -18940.809999999998 3171.19 873.85 3171.19 -14593.14" +Ta 0.0 0.0 0.0 1e-06 4e-06 0.00042 +Ta 1.667 1.6585 1.6589 -1e-06 -4e-06 -0.00042 +2 +Lattice = "3.32459998131 0.0 0.0 -0.00170000002254 3.30690002441 0.0 0.0126000000164 0.00930000003427 3.31570005417" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.689864 stress="-2068.5699999999997 357.16999999999996 -2815.44 357.16999999999996 3633.85 -2059.7599999999998 -2815.44 -2059.7599999999998 802.9" +Ta 0.0 0.0 0.0 0.000444 3e-06 -0.000442 +Ta 1.6678 1.6581 1.6578 -0.000444 -3e-06 0.000442 diff --git a/examples/PACKAGES/pod/Ta/XYZ/Elastic_FCC.xyz b/examples/PACKAGES/pod/Ta/XYZ/Elastic_FCC.xyz new file mode 100644 index 0000000000..b0f70e3e0c --- /dev/null +++ b/examples/PACKAGES/pod/Ta/XYZ/Elastic_FCC.xyz @@ -0,0 +1,600 @@ +4 +Lattice = "4.20979976654 0.0 0.0 0.00079999997979 4.19229984283 0.0 0.00139999995008 -0.00289999996312 4.20120000839" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.437936 stress="32125.329999999998 -282.22 -267.48 -282.22 28704.550000000003 301.20000000000005 -267.48 301.20000000000005 19406.25" +Ta 2.1056 -0.0014 2.1006 -0.00024 -0.000831 -4.2e-05 +Ta 2.1053 2.0961 0.0 0.00024 0.000831 4.2e-05 +Ta 0.0011 2.0947 2.1006 0.000211 -2.8e-05 -7.8e-05 +Ta 0.0 0.0 0.0 -0.000211 2.8e-05 7.8e-05 +4 +Lattice = "4.21169996262 0.0 0.0 -0.0197000000626 4.18310022354 0.0 0.0122999995947 -0.0172000005841 4.21549987793" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.438504 stress="28580.99 4661.44 -2537.73 4661.44 21736.13 3777.39 -2537.73 3777.39 15422.61" +Ta 2.112 -0.0086 2.1078 -8.5e-05 0.000609 -0.000432 +Ta 2.096 2.0916 0.0 8.5e-05 -0.000609 0.000432 +Ta -0.0037 2.083 2.1078 -7.9e-05 -0.000591 -0.00044 +Ta 0.0 0.0 0.0 7.9e-05 0.000591 0.00044 +4 +Lattice = "4.20760011673 0.0 0.0 0.00839999970049 4.19579982758 0.0 -0.0108000002801 0.00989999994636 4.19500017166" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.436378 stress="32906.770000000004 -1998.4299999999998 2448.51 -1998.4299999999998 31390.95 -2209.73 2448.51 -2209.73 20534.55" +Ta 2.1068 4.2007 2.0975 4.9e-05 0.00037 -0.000158 +Ta 2.108 2.0979 0.0 -4.9e-05 -0.00037 0.000158 +Ta -0.0012 2.1028 2.0975 4.9e-05 0.00037 -0.000158 +Ta 0.0 0.0 0.0 -4.9e-05 -0.00037 0.000158 +4 +Lattice = "4.21610021591 0.0 0.0 -0.0186000000685 4.20079994202 0.0 -0.0110999997705 -0.0149999996647 4.195499897" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.441551 stress="27882.2 4157.13 2708.72 4157.13 24066.9 3156.97 2708.72 3156.97 13737.52" +Ta 2.0839 4.1933 2.0977 6.8e-05 -4.7e-05 0.000367 +Ta 2.0987 2.1004 0.0 0.000703 0.000158 -0.000404 +Ta -0.0148 2.0929 2.0977 -0.000703 -0.000158 0.000404 +Ta 0.0 0.0 0.0 -6.8e-05 4.7e-05 -0.000367 +4 +Lattice = "4.18009996414 0.0 0.0 -0.00079999997979 4.19099998474 0.0 -0.00109999999404 -0.0186000000685 4.19029998779" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.416957 stress="47483.73 251.66 89.96 251.66 51115.740000000005 3817.67 89.96 3817.67 39271.009999999995" +Ta 2.0895 -0.0093 2.0952 -0.000287 7.5e-05 -0.000462 +Ta 2.0896 2.0955 0.0 0.000287 -7.5e-05 0.000462 +Ta 4.1791 2.0862 2.0952 0.00038 6.8e-05 -0.000503 +Ta 0.0 0.0 0.0 -0.00038 -6.8e-05 0.000503 +4 +Lattice = "4.21759986877 0.0 0.0 0.00989999994636 4.20160007477 0.0 -0.0164999999106 0.000600000028498 4.1861000061" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.440495 stress="30412.84 -2230.41 3936.28 -2230.41 27956.19 -314.22 3936.28 -314.22 16511.39" +Ta 2.1006 0.0003 2.093 -0.000512 -1.6e-05 0.000315 +Ta 2.1138 2.1008 0.0 -0.000516 -1.4e-05 -0.000327 +Ta 4.2143 2.1011 2.093 0.000516 1.4e-05 0.000327 +Ta 0.0 0.0 0.0 0.000512 1.6e-05 -0.000315 +4 +Lattice = "4.20800018311 0.0 0.0 -0.00609999988228 4.19269990921 0.0 0.0185000002384 0.00510000018403 4.20429992676" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.437972 stress="30692.39 1017.5300000000001 -3953.9 1017.5300000000001 27371.22 -937.5 -3953.9 -937.5 18526.5" +Ta 2.1071 4.1952 2.1022 0.000867 0.001178 -0.000599 +Ta 2.101 2.0964 0.0 -0.000867 -0.001178 0.000599 +Ta 4.2142 2.0989 2.1022 -3.6e-05 -0.000335 -0.000411 +Ta 0.0 0.0 0.0 3.6e-05 0.000335 0.000411 +4 +Lattice = "4.20389986038 0.0 0.0 0.0109999999404 4.21560001373 0.0 -0.0149999996647 -0.0195000004023 4.21710014343" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.44586 stress="13322.5 -1851.3999999999999 2698.2400000000002 -1851.3999999999999 15084.53 4168.71 2698.2400000000002 4168.71 3183.15" +Ta 2.0944 -0.0097 2.1085 0.000605 -0.001004 0.000354 +Ta 2.1075 2.1078 0.0 -0.000787 0.00036 -0.000493 +Ta 4.2019 2.098 2.1085 0.000145 0.000977 0.000593 +Ta 0.0 0.0 0.0 3.7e-05 -0.000333 -0.000454 +4 +Lattice = "4.20989990234 0.0 0.0 0.0194000005722 4.18979978561 0.0 0.0187999997288 -0.00710000004619 4.1998000145" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.435744 stress="32866.979999999996 -4705.08 -4510.19 -4705.08 27538.81 1684.04 -4510.19 1684.04 19619.25" +Ta 2.1338 4.1862 2.0999 -0.000654 0.000551 -0.000151 +Ta 2.1146 2.0949 0.0 0.000654 -0.000551 0.000151 +Ta 0.0191 2.0913 2.0999 0.000168 0.00073 -0.000338 +Ta 0.0 0.0 0.0 -0.000168 -0.00073 0.000338 +4 +Lattice = "4.20370006561 0.0 0.0 -0.00999999977648 4.18909978867 0.0 0.0038999998942 0.0115999998525 4.21619987488" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.438209 stress="27954.8 2323.13 -793.2399999999999 2323.13 23969.38 -2424.6400000000003 -793.2399999999999 -2424.6400000000003 15680.8" +Ta 2.1038 0.0058 2.1081 0.000328 -0.000478 -1.9e-05 +Ta 2.0969 2.0945 0.0 -0.000328 0.000478 1.9e-05 +Ta -0.003 2.1003 2.1081 -0.000328 0.000478 1.9e-05 +Ta 0.0 0.0 0.0 0.000328 -0.000478 -1.9e-05 +4 +Lattice = "4.19409990311 0.0 0.0 -0.00949999969453 4.18279981613 0.0 -0.00359999993816 0.0146000003442 4.20279979706" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.42629 stress="40994.259999999995 1984.0500000000002 678.41 1984.0500000000002 38515.95 -2950.21 678.41 -2950.21 30369.28" +Ta 2.0953 0.0073 2.1014 -0.000264 2.1e-05 -3e-06 +Ta 2.0923 2.0914 0.0 0.000264 -2.1e-05 3e-06 +Ta -0.0065 2.0987 2.1014 -0.000264 2.1e-05 -3e-06 +Ta 0.0 0.0 0.0 0.000264 -2.1e-05 3e-06 +4 +Lattice = "4.21500015259 0.0 0.0 0.00240000011399 4.2077999115 0.0 0.00559999980032 -0.00430000014603 4.19150018692" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.443301 stress="25318.89 -582.25 -1370.1399999999999 -582.25 24260.940000000002 1009.18 -1370.1399999999999 1009.18 11853.45" +Ta 2.1103 -0.0021 2.0957 2.5e-05 -0.00092 0.000616 +Ta 2.1087 2.1039 0.0 -3.1e-05 0.000243 -0.000622 +Ta 0.004 2.1017 2.0957 4e-05 0.000897 0.000626 +Ta 0.0 0.0 0.0 -3.4e-05 -0.00022 -0.000621 +4 +Lattice = "4.21619987488 0.0 0.0 -0.0207000002265 4.1875 0.0 -0.00230000005104 0.00730000017211 4.20310020447" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.439002 stress="30242.61 4765.59 418.83 4765.59 23708.24 -1576.43 418.83 -1576.43 16414.149999999998" +Ta 2.0863 4.1911 2.1015 -0.00067 0.000288 0.000472 +Ta 2.0977 2.0937 0.0 0.000637 0.000248 -0.000453 +Ta 4.2047 2.0974 2.1015 6.7e-05 -0.00028 0.000455 +Ta 0.0 0.0 0.0 -3.3e-05 -0.000255 -0.000474 +4 +Lattice = "4.21169996262 0.0 0.0 -0.0137999998406 4.18540000916 0.0 0.00350000010803 0.016799999401 4.19210004807" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.432438 stress="38865.54 2976.27 -1187.3700000000001 2976.27 32433.36 -3670.5899999999997 -1187.3700000000001 -3670.5899999999997 24012.71" +Ta 2.0938 4.1938 2.0961 0.000109 1.5e-05 -0.000266 +Ta 2.0989 2.0927 0.0 0.000626 -5.5e-05 0.000181 +Ta -0.0051 2.1011 2.0961 -0.000626 5.5e-05 -0.000181 +Ta 0.0 0.0 0.0 -0.000109 -1.5e-05 0.000266 +4 +Lattice = "4.18310022354 0.0 0.0 -0.00300000002608 4.18790006638 0.0 0.0161000005901 -0.0153999999166 4.18289995193" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.412654 stress="53423.5 705.21 -3760.97 705.21 56329.25 3452.61 -3760.97 3452.61 44823.36" +Ta 2.0996 -0.0077 2.0915 0.000209 0.000715 -0.000359 +Ta 2.09 2.094 0.0 0.000554 -0.000722 0.000333 +Ta 0.0066 2.0863 2.0915 -0.000628 -0.000725 -0.000262 +Ta 0.0 0.0 0.0 -0.000135 0.000731 0.000288 +4 +Lattice = "4.19859981537 0.0 0.0 -0.00520000001416 4.21680021286 0.0 -0.000199999994948 0.00190000003204 4.20230007172" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.443231 stress="21408.78 997.66 2.63 997.66 23951.809999999998 -420.08 2.63 -420.08 10910.34" +Ta 2.094 4.2177 2.1012 -4.8e-05 0.000221 -0.000815 +Ta 2.0967 2.1084 0.0 4.8e-05 -0.000221 0.000815 +Ta 4.1959 2.1093 2.1012 -4.8e-05 0.000221 -0.000815 +Ta 0.0 0.0 0.0 4.8e-05 -0.000221 0.000815 +4 +Lattice = "4.21309995651 0.0 0.0 0.00989999994636 4.17939996719 0.0 -0.0111999996006 -0.0109000001103 4.19469976425" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.431513 stress="38571.840000000004 -2057.94 2001.0400000000002 -2057.94 31128.620000000003 2212.8199999999997 2001.0400000000002 2212.8199999999997 25395.620000000003" +Ta 2.101 -0.0054 2.0973 -0.000812 -0.000699 0.000382 +Ta 2.1115 2.0897 0.0 -5.2e-05 0.000172 -0.000317 +Ta 4.2124 2.0842 2.0973 0.000823 0.000706 0.000273 +Ta 0.0 0.0 0.0 4.1e-05 -0.000179 -0.000337 +4 +Lattice = "4.21220016479 0.0 0.0 0.00730000017211 4.19630002975 0.0 0.00209999992512 -0.0115000000224 4.18480014801" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.435608 stress="35907.1 -1805.28 -643.2900000000001 -1805.28 32898.1 2687.74 -643.2900000000001 2687.74 21620.26" +Ta 2.1144 4.1905 2.0924 0.000371 0.000304 -3e-06 +Ta 2.1097 2.0981 0.0 0.000371 0.000304 -3e-06 +Ta 0.0047 2.0924 2.0924 -0.000371 -0.000304 3e-06 +Ta 0.0 0.0 0.0 -0.000371 -0.000304 3e-06 +4 +Lattice = "4.18069982529 0.0 0.0 -0.0109000001103 4.21169996262 0.0 -0.00529999984428 0.00520000001416 4.21330022812" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.437689 stress="23769.33 2509.14 1235.52 2509.14 31281.32 -1087.23 1235.52 -1087.23 17393.4" +Ta 2.0768 4.2143 2.1067 -0.000106 -0.000368 -0.000493 +Ta 2.0849 2.1058 0.0 0.000106 0.000368 0.000493 +Ta 4.1726 2.1084 2.1067 0.000104 0.000319 -0.000489 +Ta 0.0 0.0 0.0 -0.000104 -0.000319 0.000489 +4 +Lattice = "4.18959999084 0.0 0.0 0.0164999999106 4.20200014114 0.0 0.00899999961257 -0.0188999995589 4.19029998779" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.428447 stress="39131.659999999996 -3973.89 -2296.86 -3973.89 42258.21 4597.84 -2296.86 4597.84 29361.260000000002" +Ta 2.0993 -0.0094 2.0951 0.000613 -0.000529 0.000975 +Ta 2.1031 2.101 0.0 -0.000613 0.000529 -0.000975 +Ta 0.0128 2.0916 2.0951 -0.000208 -0.000185 0.000662 +Ta 0.0 0.0 0.0 0.000208 0.000185 -0.000662 +4 +Lattice = "4.18120002747 0.0 0.0 -0.000399999989895 4.21000003815 0.0 0.00460000010207 0.0187999997288 4.19910001755" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.432255 stress="29757.62 -182.62 -536.07 -182.62 36285.020000000004 -3344.74 -536.07 -3344.74 22592.0" +Ta 2.0929 0.0094 2.0995 -0.00013 1.7e-05 0.000285 +Ta 2.0904 2.105 0.0 0.00013 -1.7e-05 -0.000285 +Ta 0.0021 2.1144 2.0995 -0.00013 1.7e-05 0.000285 +Ta 0.0 0.0 0.0 0.00013 -1.7e-05 -0.000285 +4 +Lattice = "4.21250009537 0.0 0.0 -0.0190999992192 4.2062997818 0.0 0.0172000005841 0.0121999997646 4.1968998909" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.442315 stress="24536.86 4406.19 -4080.28 4406.19 23952.329999999998 -2854.26 -4080.28 -2854.26 11636.13" +Ta 2.1149 0.0061 2.0984 -0.00079 -0.000901 0.000821 +Ta 2.0967 2.1031 0.0 0.00079 0.000901 -0.000821 +Ta -0.0009 2.1092 2.0984 -0.00026 0.000434 0.000757 +Ta 0.0 0.0 0.0 0.00026 -0.000434 -0.000757 +4 +Lattice = "4.18179988861 0.0 0.0 0.0136000001803 4.21280002594 0.0 0.00310000008903 -0.0118000004441 4.20720005035" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.436613 stress="25874.06 -3205.31 -821.0 -3205.31 32985.54 2726.66 -821.0 2726.66 19695.18" +Ta 2.0925 -0.0059 2.1036 -0.000254 -3.3e-05 -7.2e-05 +Ta 2.0977 2.1064 0.0 0.000254 3.3e-05 7.2e-05 +Ta 0.0084 2.1005 2.1036 -0.000254 -3.3e-05 -7.2e-05 +Ta 0.0 0.0 0.0 0.000254 3.3e-05 7.2e-05 +4 +Lattice = "4.20440006256 0.0 0.0 -0.00430000014603 4.18720006943 0.0 0.0116999996826 0.0206000003964 4.19589996338" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.430825 stress="38754.51 1016.0100000000001 -2801.6 1016.0100000000001 34556.35 -4530.67 -2801.6 -4530.67 26227.129999999997" +Ta 2.108 0.0103 2.0979 0.000384 -3.4e-05 0.000554 +Ta 2.1 2.0936 0.0 0.000373 -0.000115 -0.00061 +Ta 0.0037 2.1039 2.0979 -0.000373 0.000115 0.00061 +Ta 0.0 0.0 0.0 -0.000384 3.4e-05 -0.000554 +4 +Lattice = "4.1888999939 0.0 0.0 0.0038999998942 4.20720005035 0.0 -0.0144999995828 0.0156999994069 4.19560003281" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.43312 stress="29781.53 -523.96 3434.8399999999997 -523.96 33821.21 -3382.98 3434.8399999999997 -3382.98 20448.34" +Ta 2.0911 4.215 2.0978 2.8e-05 0.00036 4.3e-05 +Ta 2.0964 2.1036 0.0 -2.8e-05 -0.00036 -4.3e-05 +Ta -0.0053 2.1114 2.0978 2.8e-05 0.00036 4.3e-05 +Ta 0.0 0.0 0.0 -2.8e-05 -0.00036 -4.3e-05 +4 +Lattice = "4.21330022812 0.0 0.0 0.000699999975041 4.1810002327 0.0 0.0054999999702 -0.00949999969453 4.19969987869" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.434347 stress="37957.909999999996 -320.79 -1076.83 -320.79 30562.539999999997 2073.23 -1076.83 2073.23 23518.02" +Ta 2.1094 -0.0047 2.0998 -8.7e-05 -0.000391 0.000502 +Ta 2.107 2.0905 0.0 8.7e-05 0.000391 -0.000502 +Ta 0.0031 2.0858 2.0998 -8.7e-05 -0.000391 0.000502 +Ta 0.0 0.0 0.0 8.7e-05 0.000391 -0.000502 +4 +Lattice = "4.20370006561 0.0 0.0 0.00340000004508 4.18830013275 0.0 -0.00089999998454 0.00980000011623 4.19320011139" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.430573 stress="38159.329999999994 -261.17 350.0 -261.17 35372.36 -2364.75 350.0 -2364.75 25174.510000000002" +Ta 2.1014 0.0049 2.0966 0.000389 -0.00053 2.4e-05 +Ta 2.1036 2.0941 0.0 -0.000389 0.00053 -2.4e-05 +Ta 0.0013 2.099 2.0966 -0.000389 0.00053 -2.4e-05 +Ta 0.0 0.0 0.0 0.000389 -0.00053 2.4e-05 +4 +Lattice = "4.20860004425 0.0 0.0 -0.00989999994636 4.20669984818 0.0 -0.0154999997467 0.00520000001416 4.21969985962" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.445665 stress="14174.23 2425.32 3028.21 2425.32 15030.34 -809.6999999999999 3028.21 -809.6999999999999 2911.0299999999997" +Ta 2.0966 0.0026 2.1098 -0.000412 -0.000614 0.000581 +Ta 2.0994 2.1033 0.0 -0.00059 0.000627 -0.000659 +Ta 4.1959 2.1059 2.1098 0.000541 0.000424 0.000445 +Ta 0.0 0.0 0.0 0.000461 -0.000437 -0.000367 +4 +Lattice = "4.19920015335 0.0 0.0 0.0185000002384 4.19920015335 0.0 -0.0126000000164 0.00540000014007 4.20139980316" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.435898 stress="32203.23 -4272.68 2945.41 -4272.68 31706.99 -1474.9 2945.41 -1474.9 21250.72" +Ta 2.0933 0.0027 2.1007 0.00043 -1.3e-05 0.000192 +Ta 2.1088 2.0996 0.0 0.00122 -8.7e-05 -0.000171 +Ta 0.003 2.1023 2.1007 -0.00122 8.7e-05 0.000171 +Ta 0.0 0.0 0.0 -0.00043 1.3e-05 -0.000192 +4 +Lattice = "4.2108001709 0.0 0.0 0.0163000002503 4.21479988098 0.0 0.01070000045 0.00499999988824 4.18380022049" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.442107 stress="28916.579999999998 -3579.5699999999997 -2277.82 -3579.5699999999997 29458.98 -1392.66 -2277.82 -1392.66 14592.84" +Ta 2.1108 0.0025 2.0919 -0.000298 4e-05 1.5e-05 +Ta 2.1136 2.1074 0.0 -0.000298 4e-05 1.5e-05 +Ta 0.0135 2.1099 2.0919 0.000298 -4e-05 -1.5e-05 +Ta 0.0 0.0 0.0 0.000298 -4e-05 -1.5e-05 +4 +Lattice = "4.19960021973 0.0 0.0 0.00079999997979 4.18790006638 0.0 -0.0054999999702 0.00499999988824 4.21040010452" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.434432 stress="33222.78 -147.47 1254.14 -147.47 29633.84 -1145.8 1254.14 -1145.8 20687.69" +Ta 2.097 0.0025 2.1052 0.00033 -1.2e-05 0.000134 +Ta 2.1002 2.094 0.0 -0.000357 -0.00057 -0.000134 +Ta 4.1972 2.0964 2.1052 0.000357 0.00057 0.000134 +Ta 0.0 0.0 0.0 -0.00033 1.2e-05 -0.000134 +4 +Lattice = "4.18860006332 0.0 0.0 0.00829999987036 4.19880008698 0.0 0.00680000009015 -0.0104999998584 4.21710014343" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.436308 stress="26865.34 -1570.0700000000002 -1633.81 -1570.0700000000002 30088.280000000002 2199.78 -1633.81 2199.78 18762.14" +Ta 2.0977 -0.0052 2.1086 0.000219 -0.000492 -0.000515 +Ta 2.0984 2.0994 0.0 0.000816 0.000404 0.000554 +Ta 0.0076 2.0942 2.1086 -0.000816 -0.000404 -0.000554 +Ta 0.0 0.0 0.0 -0.000219 0.000492 0.000515 +4 +Lattice = "4.1999001503 0.0 0.0 0.01600000076 4.18179988861 0.0 0.0184000004083 0.00219999998808 4.19189977646" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.423938 stress="45156.3 -3736.32 -4044.29 -3736.32 42163.939999999995 -272.71000000000004 -4044.29 -272.71000000000004 33401.829999999994" +Ta 2.1091 0.0011 2.0959 0.00063 0.000124 0.000424 +Ta 2.1079 2.0909 0.0 0.000645 0.000127 -0.000216 +Ta 0.0172 2.092 2.0959 -0.000645 -0.000127 0.000216 +Ta 0.0 0.0 0.0 -0.00063 -0.000124 -0.000424 +4 +Lattice = "4.18540000916 0.0 0.0 0.00910000037402 4.20340013504 0.0 -0.00449999980628 0.0206000003964 4.19199991226" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.428115 stress="33159.950000000004 -2037.96 1037.3300000000002 -2037.96 36902.979999999996 -4264.8 1037.3300000000002 -4264.8 24342.199999999997" +Ta 2.0905 0.0103 2.096 -0.000408 0.000133 9e-06 +Ta 2.0973 2.1017 0.0 -0.000408 0.000133 9e-06 +Ta 0.0023 2.112 2.096 0.000408 -0.000133 -9e-06 +Ta 0.0 0.0 0.0 0.000408 -0.000133 -9e-06 +4 +Lattice = "4.20219993591 0.0 0.0 -0.0137000000104 4.18510007858 0.0 0.0170000009239 0.000399999989895 4.19110012054" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.4269 stress="42344.0 2996.3700000000003 -4106.58 2996.3700000000003 39499.920000000006 161.89000000000001 -4106.58 161.89000000000001 29485.66" +Ta 2.1096 0.0002 2.0955 3.6e-05 -2.9e-05 0.000575 +Ta 2.0943 2.0925 0.0 -0.000498 0.000956 -0.000492 +Ta 0.0017 2.0928 2.0955 5e-06 -0.000949 0.000486 +Ta 0.0 0.0 0.0 0.000457 2.2e-05 -0.000569 +4 +Lattice = "4.18289995193 0.0 0.0 0.00159999995958 4.179500103 0.0 -0.00310000008903 0.0133999995887 4.209400177" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.421142 stress="44099.57 -461.53 789.15 -461.53 41820.810000000005 -2469.31 789.15 -2469.31 34193.81" +Ta 2.0899 0.0067 2.1047 0.000191 0.000394 1e-06 +Ta 2.0922 2.0898 0.0 0.000613 -0.00044 1.7e-05 +Ta -0.0007 2.0965 2.1047 -0.000794 -0.000378 -7e-06 +Ta 0.0 0.0 0.0 -1e-05 0.000423 -1e-05 +4 +Lattice = "4.21260023117 0.0 0.0 0.0207000002265 4.19000005722 0.0 0.00159999995958 -0.00769999995828 4.18440008163" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.432233 stress="39750.03 -4610.75 -478.2 -4610.75 34854.11 1877.37 -478.2 1877.37 25710.550000000003" +Ta 2.1071 -0.0038 2.0922 0.000289 -0.000207 -3e-06 +Ta 2.1167 2.095 0.0 -0.000289 0.000207 3e-06 +Ta 0.0112 2.0912 2.0922 -0.000287 -0.000233 1e-06 +Ta 0.0 0.0 0.0 0.000287 0.000233 -1e-06 +4 +Lattice = "4.19710016251 0.0 0.0 0.017899999395 4.18270015717 0.0 -0.00960000045598 -0.01600000076 4.20739984512" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.429408 stress="37387.92 -3190.48 1878.9499999999998 -3190.48 32357.480000000003 3103.4700000000003 1878.9499999999998 3103.4700000000003 25220.76" +Ta 2.0938 -0.008 2.1037 -0.000335 0.000327 5.2e-05 +Ta 2.1075 2.0914 0.0 0.000335 -0.000327 -5.2e-05 +Ta 0.0042 2.0834 2.1037 -0.000324 -0.000492 4.2e-05 +Ta 0.0 0.0 0.0 0.000324 0.000492 -4.2e-05 +4 +Lattice = "4.21169996262 0.0 0.0 -0.00689999992028 4.20370006561 0.0 0.00150000001304 -0.00920000020415 4.21269989014" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.445145 stress="18335.4 1673.0 -228.65 1673.0 16239.820000000002 2082.03 -228.65 2082.03 6136.77" +Ta 2.0997 4.1991 2.1063 6.7e-05 -0.000114 0.000643 +Ta 2.1024 2.1018 0.0 -9e-05 0.000831 -0.000669 +Ta -0.0027 2.0973 2.1063 9e-05 -0.000831 0.000669 +Ta 0.0 0.0 0.0 -6.7e-05 0.000114 -0.000643 +4 +Lattice = "4.19729995728 0.0 0.0 0.00370000000112 4.20749998093 0.0 0.0143999997526 -0.00310000008903 4.19150018692" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.435868 stress="32126.109999999997 -1008.08 -3338.91 -1008.08 34042.35 685.31 -3338.91 685.31 21906.06" +Ta 2.1095 4.2059 2.0958 0.000735 0.000174 -0.00065 +Ta 2.1005 2.1037 0.0 0.000783 0.000746 0.000651 +Ta 0.0091 2.1022 2.0958 -0.00125 -0.00074 -0.00065 +Ta 0.0 0.0 0.0 -0.000268 -0.00018 0.00065 +4 +Lattice = "4.18669986725 0.0 0.0 0.018200000748 4.22060012817 0.0 0.00449999980628 -0.00139999995008 4.19939994812" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.439663 stress="24909.960000000003 -4206.58 -1004.1899999999999 -4206.58 31036.64 543.86 -1004.1899999999999 543.86 16832.42" +Ta 2.0956 -0.0007 2.0997 0.000559 -2.8e-05 1e-06 +Ta 2.1025 2.1103 0.0 -0.000559 2.8e-05 -1e-06 +Ta 0.0114 2.1096 2.0997 -0.000559 2.8e-05 -1e-06 +Ta 0.0 0.0 0.0 0.000559 -2.8e-05 1e-06 +4 +Lattice = "4.1998000145 0.0 0.0 -0.0163000002503 4.19570016861 0.0 0.01070000045 -0.0124000003561 4.18389987946" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.428287 stress="41731.25 3757.21 -2445.36 3757.21 41051.920000000006 2856.2799999999997 -2445.36 2856.2799999999997 30297.370000000003" +Ta 2.1053 -0.0062 2.092 -0.00054 -0.000412 -0.000306 +Ta 2.0917 2.0978 0.0 0.00054 0.000412 0.000306 +Ta 4.197 2.0916 2.092 2.3e-05 0.0004 -0.000316 +Ta 0.0 0.0 0.0 -2.3e-05 -0.0004 0.000316 +4 +Lattice = "4.1970000267 0.0 0.0 0.0194000005722 4.1888999939 0.0 -0.00179999996908 -0.0136000001803 4.18779993057" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.424584 stress="44875.270000000004 -4458.47 289.83 -4458.47 43234.76 3197.07 289.83 3197.07 33469.479999999996" +Ta 2.0976 -0.0068 2.0939 5.4e-05 -0.000398 -1e-06 +Ta 2.1082 2.0944 0.0 -5.4e-05 0.000398 1e-06 +Ta 0.0088 2.0876 2.0939 -5.4e-05 0.000398 1e-06 +Ta 0.0 0.0 0.0 5.4e-05 -0.000398 -1e-06 +4 +Lattice = "4.18450021744 0.0 0.0 0.0130000002682 4.18849992752 0.0 -0.0195000004023 -0.00370000000112 4.18139982224" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.413045 stress="50367.32 -3261.88 3822.1099999999997 -3261.88 50402.17 705.52 3822.1099999999997 705.52 39882.66" +Ta 2.0825 -0.0018 2.0907 -5.1e-05 -0.000344 -1e-06 +Ta 2.0988 2.0943 0.0 -0.000738 -0.000336 2.6e-05 +Ta 4.1812 2.0924 2.0907 0.000738 0.000336 -2.6e-05 +Ta 0.0 0.0 0.0 5.1e-05 0.000344 1e-06 +4 +Lattice = "4.20609998703 0.0 0.0 0.0121999997646 4.20860004425 0.0 0.0104000000283 0.00490000005811 4.1810002327" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.436994 stress="32291.899999999998 -2490.73 -2201.86 -2490.73 33006.25 -463.13 -2201.86 -463.13 19860.08" +Ta 2.1204 4.211 2.0905 0.000646 0.000444 0.000147 +Ta 2.1092 2.1043 0.0 -0.000646 -0.000444 -0.000147 +Ta 0.0113 2.1067 2.0905 0.000171 0.000448 0.000145 +Ta 0.0 0.0 0.0 -0.000171 -0.000448 -0.000145 +4 +Lattice = "4.1939997673 0.0 0.0 -0.0175999999046 4.21909999847 0.0 -0.00359999993816 0.00300000002608 4.2079000473" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.443604 stress="18084.66 3671.56 781.26 3671.56 24730.91 -432.39 781.26 -432.39 9828.4" +Ta 2.0776 4.2206 2.104 0.000117 0.000438 -0.0005 +Ta 2.0882 2.1096 0.0 -0.000117 -0.000438 0.0005 +Ta -0.0106 2.1111 2.104 -1.1e-05 -0.000248 -0.000419 +Ta 0.0 0.0 0.0 1.1e-05 0.000248 0.000419 +4 +Lattice = "4.19670009613 0.0 0.0 0.0144999995828 4.20499992371 0.0 -0.0154999997467 -0.00319999991916 4.21000003815" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.439718 stress="23536.32 -3142.14 3304.68 -3142.14 26048.2 678.5 3304.68 678.5 13870.050000000001" +Ta 2.0906 -0.0016 2.105 0.0 0.0 0.0 +Ta 2.1056 2.1025 0.0 0.0 0.0 0.0 +Ta -0.0005 2.1009 2.105 0.0 0.0 0.0 +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +4 +Lattice = "4.18400001526 0.0 0.0 -0.00139999995008 4.20389986038 0.0 -0.0186000000685 -0.0144999995828 4.21430015564" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.435527 stress="26601.199999999997 224.89999999999998 3984.39 224.89999999999998 32506.140000000003 3199.5499999999997 3984.39 3199.5499999999997 20323.48" +Ta 2.0813 4.1966 2.1072 -5.7e-05 0.000574 -0.000235 +Ta 2.0913 2.102 0.0 5.7e-05 -0.000574 0.000235 +Ta -0.01 2.0947 2.1072 7.8e-05 -6.3e-05 -0.000195 +Ta 0.0 0.0 0.0 -7.8e-05 6.3e-05 0.000195 +4 +Lattice = "4.1810002327 0.0 0.0 0.00600000005215 4.22009992599 0.0 -0.00669999979436 -0.0204000007361 4.19239997864" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.434787 stress="30521.97 -1467.91 1403.6 -1467.91 38595.36 4398.91 1403.6 4398.91 23894.760000000002" +Ta 2.0872 -0.0102 2.0962 -0.000704 0.000292 6e-05 +Ta 2.0935 2.1101 0.0 -0.000115 -0.000301 -1e-06 +Ta 4.1806 2.0999 2.0962 0.000704 -0.000292 -6e-05 +Ta 0.0 0.0 0.0 0.000115 0.000301 1e-06 +4 +Lattice = "4.2076997757 0.0 0.0 -0.00329999998212 4.18240022659 0.0 0.0197999998927 -0.0142999999225 4.20949983597" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.434929 stress="33106.05 400.43 -4376.98 400.43 26345.52 2747.71 -4376.98 2747.71 20304.05" +Ta 2.1104 4.1752 2.1048 0.000619 0.000224 -0.00034 +Ta 2.1022 2.0912 0.0 0.000185 -0.00027 0.000324 +Ta 0.0083 2.084 2.1048 -0.000828 0.000293 -0.000329 +Ta 0.0 0.0 0.0 2.4e-05 -0.000248 0.000344 +4 +Lattice = "4.18709993362 0.0 0.0 -0.0137000000104 4.19210004807 0.0 -0.0206000003964 -0.00300000002608 4.2013001442" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.426499 stress="39883.59 3131.64 4730.58 3131.64 40703.380000000005 736.94 4730.58 736.94 30183.84" +Ta 2.0695 4.1906 2.1006 0.000281 -0.00046 0.000374 +Ta 2.0867 2.096 0.0 -0.000281 0.00046 -0.000374 +Ta 4.1699 2.0945 2.1006 0.000239 0.000426 0.000333 +Ta 0.0 0.0 0.0 -0.000239 -0.000426 -0.000333 +4 +Lattice = "4.19180011749 0.0 0.0 0.00350000010803 4.20699977875 0.0 0.0201999992132 -0.0141000002623 4.20459985733" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.437025 stress="28895.21 -1353.89 -4533.7300000000005 -1353.89 33286.0 2779.0699999999997 -4533.7300000000005 2779.0699999999997 20380.649999999998" +Ta 2.1095 4.1999 2.1023 0.000444 0.000256 2.5e-05 +Ta 2.0977 2.1035 0.0 -0.000444 -0.000256 -2.5e-05 +Ta 0.0119 2.0964 2.1023 -0.000371 0.000196 3.1e-05 +Ta 0.0 0.0 0.0 0.000371 -0.000196 -3.1e-05 +4 +Lattice = "4.19680023193 0.0 0.0 -0.019999999553 4.19010019302 0.0 0.0148000000045 0.00449999980628 4.19729995728" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.428937 stress="38946.02 4281.84 -3402.34 4281.84 36868.95 -1152.93 -3402.34 -1152.93 27927.85" +Ta 2.0858 4.1923 2.0986 -3.4e-05 0.000667 0.000439 +Ta 2.0884 2.0951 0.0 3.4e-05 -0.000667 -0.000439 +Ta -0.0026 2.0973 2.0986 -7.3e-05 -0.000101 0.000416 +Ta 0.0 0.0 0.0 7.3e-05 0.000101 -0.000416 +4 +Lattice = "4.21390008926 0.0 0.0 -0.0159000009298 4.2077999115 0.0 -0.0115000000224 0.00680000009015 4.19169998169" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.442516 stress="26548.37 3415.7000000000003 2464.46 3415.7000000000003 25895.34 -1426.55 2464.46 -1426.55 12731.93" +Ta 2.1012 0.0034 2.0958 -0.000117 -0.000115 0.000445 +Ta 2.099 2.1039 0.0 0.000117 0.000115 -0.000445 +Ta 4.2002 2.1073 2.0958 -0.000117 -0.000115 0.000445 +Ta 0.0 0.0 0.0 0.000117 0.000115 -0.000445 +4 +Lattice = "4.18620014191 0.0 0.0 0.00319999991916 4.18989992142 0.0 0.00359999993816 0.0201999992132 4.21029996872" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.428736 stress="36533.26 -472.27000000000004 -599.63 -472.27000000000004 38503.49 -4878.59 -599.63 -4878.59 28242.54" +Ta 2.0949 0.0101 2.1051 7.8e-05 0.000472 0.000488 +Ta 2.0947 2.095 0.0 -7.8e-05 -0.000472 -0.000488 +Ta 0.0034 2.1051 2.1051 3e-06 -0.000581 0.000458 +Ta 0.0 0.0 0.0 -3e-06 0.000581 -0.000458 +4 +Lattice = "4.18650007248 0.0 0.0 -0.020300000906 4.20889997482 0.0 0.0177999995649 -0.0108000002801 4.19799995422" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.433359 stress="31456.3 4402.04 -3820.04 4402.04 36583.71000000001 2243.03 -3820.04 2243.03 23228.44" +Ta 2.1021 -0.0054 2.099 0.000683 0.000409 2.2e-05 +Ta 2.0831 2.1045 0.0 0.000136 -0.000401 -3.2e-05 +Ta -0.0012 2.0991 2.099 -0.000683 -0.000409 -2.2e-05 +Ta 0.0 0.0 0.0 -0.000136 0.000401 3.2e-05 +4 +Lattice = "4.18569993973 0.0 0.0 -0.0201999992132 4.21250009537 0.0 0.0132999997586 -0.0038999998942 4.21120023727" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.438799 stress="22841.29 4506.599999999999 -2944.67 4506.599999999999 28994.420000000002 787.89 -2944.67 787.89 15742.92" +Ta 2.0793 4.2105 2.1056 0.00025 0.000338 -9e-06 +Ta 2.0828 2.1062 0.0 -0.000222 0.00033 -1.1e-05 +Ta -0.0034 2.1043 2.1056 -0.00025 -0.000338 9e-06 +Ta 0.0 0.0 0.0 0.000222 -0.00033 1.1e-05 +4 +Lattice = "4.20319986343 0.0 0.0 0.0133999995887 4.21220016479 0.0 0.0153000000864 0.016799999401 4.20030021667" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.441993 stress="22767.3 -2987.04 -3341.07 -2987.04 24394.9 -3697.02 -3341.07 -3697.02 11782.27" +Ta 2.1226 4.2206 2.1002 0.000406 4.3e-05 -0.000851 +Ta 2.1083 2.1061 0.0 -0.000406 -4.3e-05 0.000851 +Ta 4.2175 2.1145 2.1002 0.000406 4.3e-05 -0.000851 +Ta 0.0 0.0 0.0 -0.000406 -4.3e-05 0.000851 +4 +Lattice = "4.20020008087 0.0 0.0 0.0159000009298 4.21250009537 0.0 0.00839999970049 0.00270000007004 4.19059991837" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.439033 stress="31311.34 -2962.04 -2118.77 -2962.04 33332.84 -497.0 -2118.77 -497.0 19397.95" +Ta 2.1043 0.0014 2.0953 -0.000169 -0.000336 2e-06 +Ta 2.108 2.1063 0.0 0.000307 -0.000319 4e-06 +Ta 4.2123 2.1076 2.0953 0.000169 0.000336 -2e-06 +Ta 0.0 0.0 0.0 -0.000307 0.000319 -4e-06 +4 +Lattice = "4.19460010529 0.0 0.0 -0.00380000006407 4.20300006866 0.0 0.00710000004619 0.00289999996312 4.20419979095" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.436967 stress="28199.07 1077.27 -1364.09 1077.27 30335.760000000002 -742.39 -1364.09 -742.39 18938.510000000002" +Ta 2.1009 0.0015 2.1021 -0.000397 -0.000899 -0.000183 +Ta 2.0954 2.1015 0.0 0.000341 0.000174 0.00019 +Ta 0.0017 2.1029 2.1021 -0.000267 0.000862 -0.0002 +Ta 0.0 0.0 0.0 0.000324 -0.000137 0.000193 +4 +Lattice = "4.19649982452 0.0 0.0 0.0170000009239 4.18389987946 0.0 0.000500000023749 0.0197000000626 4.20139980316" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.427245 stress="39200.850000000006 -3187.19 -498.29 -3187.19 36589.530000000006 -4530.76 -498.29 -4530.76 27001.34" +Ta 2.0985 0.0099 2.1007 1e-05 -0.00045 2.8e-05 +Ta 2.1067 2.092 0.0 0.000706 -0.000365 -4.5e-05 +Ta 0.0088 2.1018 2.1007 -0.000706 0.000365 4.5e-05 +Ta 0.0 0.0 0.0 -1e-05 0.00045 -2.8e-05 +4 +Lattice = "4.19409990311 0.0 0.0 -0.0157999992371 4.20200014114 0.0 -0.00249999994412 -0.00449999980628 4.21129989624" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.438046 stress="26136.06 3578.57 621.48 3578.57 27841.36 1030.6 621.48 1030.6 16177.720000000001" +Ta 2.08 4.1997 2.1057 0.000264 0.000278 -0.000459 +Ta 2.0891 2.101 0.0 0.000831 -0.000264 0.000454 +Ta -0.0091 2.0987 2.1057 -0.000831 0.000264 -0.000454 +Ta 0.0 0.0 0.0 -0.000264 -0.000278 0.000459 +4 +Lattice = "4.18219995499 0.0 0.0 -0.0186999998987 4.19169998169 0.0 0.00850000046194 -0.00270000007004 4.19329977036" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.420083 stress="45896.659999999996 4350.44 -1715.56 4350.44 48179.94 571.0699999999999 -1715.56 571.0699999999999 36393.41" +Ta 2.0766 4.1903 2.0967 0.00046 0.001197 -0.000615 +Ta 2.0818 2.0959 0.0 -0.00046 -0.001197 0.000615 +Ta 4.1771 2.0945 2.0967 -0.000243 -0.00048 -0.000746 +Ta 0.0 0.0 0.0 0.000243 0.00048 0.000746 +4 +Lattice = "4.21379995346 0.0 0.0 -0.00889999978244 4.20090007782 0.0 0.00829999987036 -0.0121999997646 4.2157998085" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.445247 stress="17199.95 2060.92 -1868.0 2060.92 14754.65 2656.7 -1868.0 2656.7 4564.79" +Ta 2.111 -0.0061 2.1079 0.000429 -0.000346 -2e-05 +Ta 2.1024 2.1004 0.0 0.000445 0.000491 -1.1e-05 +Ta 4.2135 2.0943 2.1079 -0.000429 0.000346 2e-05 +Ta 0.0 0.0 0.0 -0.000445 -0.000491 1.1e-05 +4 +Lattice = "4.2171998024 0.0 0.0 -0.00249999994412 4.21280002594 0.0 0.0010000000475 -0.0208000000566 4.19570016861" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.446044 stress="19496.41 709.2 -122.84 709.2 18308.6 4583.75 -122.84 4583.75 6100.4" +Ta 2.1091 -0.0104 2.0979 0.000565 1.3e-05 -0.000312 +Ta 2.1074 2.1064 0.0 -0.000565 -1.3e-05 0.000312 +Ta -0.0007 2.096 2.0979 -0.000564 -1.2e-05 -0.000342 +Ta 0.0 0.0 0.0 0.000564 1.2e-05 0.000342 +4 +Lattice = "4.20889997482 0.0 0.0 0.0163000002503 4.17980003357 0.0 -0.00310000008903 -0.017899999395 4.2093000412" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.434472 stress="34887.090000000004 -3559.16 445.12 -3559.16 27517.510000000002 4000.3399999999997 445.12 4000.3399999999997 21214.9" +Ta 2.1029 -0.0089 2.1046 -4.5e-05 -0.000191 0.000367 +Ta 2.1126 2.0899 0.0 4.5e-05 0.000191 -0.000367 +Ta 4.2155 2.081 2.1046 -4.5e-05 -0.000191 0.000367 +Ta 0.0 0.0 0.0 4.5e-05 0.000191 -0.000367 +4 +Lattice = "4.21549987793 0.0 0.0 -0.0132999997586 4.21330022812 0.0 -0.0054999999702 0.0157999992371 4.18979978561" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.44458 stress="23231.31 2911.85 1091.22 2911.85 22696.98 -3466.5499999999997 1091.22 -3466.5499999999997 9663.7" +Ta 2.105 0.0079 2.0949 1.3e-05 0.000487 6e-06 +Ta 2.1011 2.1067 0.0 -1.3e-05 -0.000487 -6e-06 +Ta -0.0094 2.1146 2.0949 -1.3e-05 -0.000487 -6e-06 +Ta 0.0 0.0 0.0 1.3e-05 0.000487 6e-06 +4 +Lattice = "4.20329999924 0.0 0.0 0.0104000000283 4.2093000412 0.0 0.00359999993816 -0.00270000007004 4.20109987259" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.441776 stress="25420.61 -1768.14 -1189.8899999999999 -1768.14 27462.18 568.28 -1189.8899999999999 568.28 14665.82" +Ta 2.1139 4.2079 2.1005 -0.00054 0.0004 0.000307 +Ta 2.1069 2.1046 0.0 -0.000437 0.000188 -0.000353 +Ta 0.007 2.1033 2.1005 0.000437 -0.000188 0.000353 +Ta 0.0 0.0 0.0 0.00054 -0.0004 -0.000307 +4 +Lattice = "4.19390010834 0.0 0.0 -0.0154999997467 4.20030021667 0.0 0.0118000004441 -0.017100000754 4.2093000412" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.436389 stress="28175.18 3461.97 -2554.14 3461.97 29398.74 3490.6600000000003 -2554.14 3490.6600000000003 18104.420000000002" +Ta 2.1028 -0.0085 2.1047 0.000405 -0.000951 -0.000355 +Ta 2.0892 2.1001 0.0 -0.000405 0.000951 0.000355 +Ta 4.192 2.0916 2.1047 0.000387 0.000179 -0.000469 +Ta 0.0 0.0 0.0 -0.000387 -0.000179 0.000469 +4 +Lattice = "4.2079000473 0.0 0.0 -0.0097000002861 4.21920013428 0.0 -0.00490000005811 -0.00999999977648 4.20109987259" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.446416 stress="19209.399999999998 2025.1299999999999 1589.1299999999999 2025.1299999999999 20626.989999999998 2446.81 1589.1299999999999 2446.81 6438.570000000001" +Ta 2.1015 -0.005 2.1006 -2.8e-05 -0.000105 -0.000311 +Ta 2.0991 2.1096 0.0 2.8e-05 0.000105 0.000311 +Ta -0.0073 2.1046 2.1006 -2.8e-05 -0.000105 -0.000311 +Ta 0.0 0.0 0.0 2.8e-05 0.000105 0.000311 +4 +Lattice = "4.21920013428 0.0 0.0 0.00370000000112 4.21530008316 0.0 -0.001200000057 -9.99999974738e-05 4.21350002289" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.449806 stress="9066.92 -618.3199999999999 80.69 -618.3199999999999 8795.18 242.32000000000002 80.69 242.32000000000002 -3831.06" +Ta 2.109 0.0 2.1067 -0.000377 -0.000342 0.00055 +Ta 2.1115 2.1077 0.0 -0.001167 -0.000182 -0.000568 +Ta 4.2204 2.1076 2.1067 0.001167 0.000182 0.000568 +Ta 0.0 0.0 0.0 0.000377 0.000342 -0.00055 +4 +Lattice = "4.20060014725 0.0 0.0 0.00680000009015 4.19710016251 0.0 -0.0146000003442 0.0186000000685 4.17910003662" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.427189 stress="44173.07 -1484.73 3360.38 -1484.73 43201.93 -4284.93 3360.38 -4284.93 31256.18" +Ta 2.0998 4.2064 2.0896 -2.2e-05 -0.000426 -0.000366 +Ta 2.1037 2.0985 0.0 2.2e-05 0.000426 0.000366 +Ta -0.0039 2.1078 2.0896 -2.5e-05 0.000364 -0.000321 +Ta 0.0 0.0 0.0 2.5e-05 -0.000364 0.000321 +4 +Lattice = "4.18919992447 0.0 0.0 0.0135000003502 4.20279979706 0.0 -0.0119000002742 0.00999999977648 4.1875" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.427857 stress="39322.19 -2611.56 2676.7 -2611.56 42055.02 -2182.03 2676.7 -2182.03 28576.71" +Ta 2.1022 4.2078 2.0938 -0.000527 -0.000167 -0.000317 +Ta 2.1014 2.1014 0.0 -0.000703 1.2e-05 0.000454 +Ta 0.0008 2.1064 2.0938 0.000703 -1.2e-05 -0.000454 +Ta 0.0 0.0 0.0 0.000527 0.000167 0.000317 +4 +Lattice = "4.2079000473 0.0 0.0 -0.00980000011623 4.18940019608 0.0 0.0206000003964 0.0189999993891 4.21960020065" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.44004 stress="24518.6 2270.46 -4602.22 2270.46 19823.78 -4164.55 -4602.22 -4164.55 12729.210000000001" +Ta 2.1142 0.0095 2.1098 0.000377 -3.3e-05 1.1e-05 +Ta 2.099 2.0947 0.0 0.000377 -3.3e-05 1.1e-05 +Ta 0.0054 2.1042 2.1098 -0.000377 3.3e-05 -1.1e-05 +Ta 0.0 0.0 0.0 -0.000377 3.3e-05 -1.1e-05 +4 +Lattice = "4.18559980392 0.0 0.0 -0.0141000002623 4.21939992905 0.0 0.00270000007004 -0.0183000005782 4.19519996643" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.437214 stress="27548.75 3217.5699999999997 -517.42 3217.5699999999997 33898.46 4094.8900000000003 -517.42 4094.8900000000003 19872.68" +Ta 2.0941 -0.0091 2.0976 0.00078 -0.000197 -3.2e-05 +Ta 2.0857 2.1097 0.0 0.000496 0.000489 5e-06 +Ta -0.0057 2.1006 2.0976 -0.000496 -0.000489 -5e-06 +Ta 0.0 0.0 0.0 -0.00078 0.000197 3.2e-05 +4 +Lattice = "4.18179988861 0.0 0.0 -0.00949999969453 4.19159984589 0.0 0.0148000000045 0.00139999995008 4.19890022278" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.422628 stress="43385.56 2136.82 -3260.5400000000004 2136.82 46015.15 -518.6500000000001 -3260.5400000000004 -518.6500000000001 33939.47" +Ta 2.0888 4.1923 2.0995 -0.000281 -0.00027 -0.000582 +Ta 2.0861 2.0958 0.0 0.000281 0.00027 0.000582 +Ta 4.1844 2.0965 2.0995 0.000629 0.000286 -0.000561 +Ta 0.0 0.0 0.0 -0.000629 -0.000286 0.000561 +4 +Lattice = "4.20370006561 0.0 0.0 -0.0200999993831 4.21630001068 0.0 -0.0164000000805 -0.0195000004023 4.20209980011" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.443535 stress="20218.039999999997 4818.6900000000005 3580.07 4818.6900000000005 21841.62 4429.02 3580.07 4429.02 8549.369999999999" +Ta 2.0736 4.2065 2.1011 -0.000398 0.000783 -0.000458 +Ta 2.0918 2.1082 0.0 0.000398 -0.000783 0.000458 +Ta -0.0182 2.0984 2.1011 -0.000248 -0.000173 -0.000438 +Ta 0.0 0.0 0.0 0.000248 0.000173 0.000438 +4 +Lattice = "4.20109987259 0.0 0.0 0.00289999996312 4.2077999115 0.0 0.00179999996908 0.00260000000708 4.19890022278" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.439922 stress="27455.690000000002 -990.9599999999999 -176.72 -990.9599999999999 29472.14 -256.46000000000004 -176.72 -256.46000000000004 15890.19" +Ta 2.1015 0.0013 2.0994 -0.000776 -9.4e-05 0.000494 +Ta 2.102 2.1039 0.0 -0.00018 1.1e-05 -0.000461 +Ta 4.2034 2.1052 2.0994 0.000991 9.2e-05 0.000337 +Ta 0.0 0.0 0.0 -3.5e-05 -9e-06 -0.00037 +4 +Lattice = "4.20909976959 0.0 0.0 0.00279999990016 4.19089984894 0.0 0.0129000004381 0.0113000003621 4.20370006561" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.437675 stress="30559.32 -328.34999999999997 -2999.48 -328.34999999999997 26504.989999999998 -2563.55 -2999.48 -2563.55 18218.93" +Ta 2.1138 4.1965 2.1019 0.000516 0.001068 -0.000754 +Ta 2.1059 2.0955 0.0 0.000599 -0.000983 0.000746 +Ta 0.0079 2.1011 2.1019 -0.000833 -0.000415 -0.000718 +Ta 0.0 0.0 0.0 -0.000282 0.000331 0.000726 +4 +Lattice = "4.21960020065 0.0 0.0 -0.0164999999106 4.20809984207 0.0 0.00209999992512 -0.0104999998584 4.19619989395" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.445558 stress="21138.43 3552.79 -295.98 3552.79 19496.949999999997 2230.2599999999998 -295.98 2230.2599999999998 7402.18" +Ta 2.0944 4.2028 2.0981 -0.000489 0.000278 7.1e-05 +Ta 2.1016 2.104 0.0 -0.000489 0.000278 7.1e-05 +Ta -0.0072 2.0988 2.0981 0.000489 -0.000278 -7.1e-05 +Ta 0.0 0.0 0.0 0.000489 -0.000278 -7.1e-05 +4 +Lattice = "4.18620014191 0.0 0.0 0.0142000000924 4.21759986877 0.0 0.00529999984428 0.000699999975041 4.20249986649" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.439106 stress="24311.969999999998 -3207.16 -1065.08 -3207.16 30723.109999999997 -53.699999999999996 -1065.08 -53.699999999999996 16577.88" +Ta 2.11 4.2179 2.1012 -0.000734 0.000343 0.000586 +Ta 2.1002 2.1088 0.0 -0.000395 -0.000327 -0.000614 +Ta 4.1959 2.1091 2.1012 0.000856 0.000318 0.000602 +Ta 0.0 0.0 0.0 0.000273 -0.000334 -0.000574 +4 +Lattice = "4.19910001755 0.0 0.0 -0.0100999996066 4.21040010452 0.0 0.0163000002503 0.0195000004023 4.21479988098" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.443073 stress="21214.73 1620.02 -3139.49 1620.02 23804.07 -3361.12 -3139.49 -3361.12 11182.08" +Ta 2.0976 4.2201 2.1074 1.7e-05 0.000287 -2.2e-05 +Ta 2.0945 2.1052 0.0 -1.7e-05 -0.000287 2.2e-05 +Ta 4.2022 2.1149 2.1074 1.7e-05 0.000287 -2.2e-05 +Ta 0.0 0.0 0.0 -1.7e-05 -0.000287 2.2e-05 +4 +Lattice = "4.20900011063 0.0 0.0 -0.0132999997586 4.19000005722 0.0 -0.00510000018403 0.0116999996826 4.21299982071" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.4397 stress="27256.09 2922.24 1093.0500000000002 2922.24 22439.64 -2593.18 1093.0500000000002 -2593.18 14372.06" +Ta 2.102 0.0059 2.1065 -0.000435 -0.000338 0.0 +Ta 2.0979 2.095 0.0 -0.000572 0.000306 2.7e-05 +Ta -0.0092 2.1009 2.1065 0.000572 -0.000306 -2.7e-05 +Ta 0.0 0.0 0.0 0.000435 0.000338 0.0 +4 +Lattice = "4.18540000916 0.0 0.0 0.00499999988824 4.21269989014 0.0 -0.0170000009239 -0.0157999992371 4.20230007172" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.436374 stress="29413.82 -848.39 3021.03 -848.39 35818.05 3586.5499999999997 3021.03 3586.5499999999997 22359.57" +Ta 2.0892 4.2048 2.1011 0.000247 -0.000509 0.000473 +Ta 2.0952 2.1063 0.0 -0.000247 0.000509 -0.000473 +Ta 4.1794 2.0984 2.1011 0.000198 0.000499 0.000486 +Ta 0.0 0.0 0.0 -0.000198 -0.000499 -0.000486 +4 +Lattice = "4.19089984894 0.0 0.0 0.00889999978244 4.18580007553 0.0 -0.00769999995828 -0.00370000000112 4.20340013504" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.426557 stress="41786.9 -1592.19 1901.3 -1592.19 40672.780000000006 565.31 1901.3 565.31 31476.21" +Ta 2.0916 -0.0018 2.1017 9.5e-05 -0.000938 -7.3e-05 +Ta 2.0999 2.0929 0.0 -9e-06 0.000173 9e-06 +Ta 0.0006 2.091 2.1017 -9.5e-05 0.000938 7.3e-05 +Ta 0.0 0.0 0.0 9e-06 -0.000173 -9e-06 +4 +Lattice = "4.1985001564 0.0 0.0 -0.0179999992251 4.19869995117 0.0 -0.00079999997979 0.0184000004083 4.19780015945" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.434009 stress="33693.26 4132.23 124.97999999999999 4132.23 32953.46 -4050.66 124.97999999999999 -4050.66 22096.65" +Ta 2.0988 0.0092 2.0989 0.000663 0.000517 0.000224 +Ta 2.0903 2.0994 0.0 -0.000663 -0.000517 -0.000224 +Ta -0.0094 2.1086 2.0989 1.4e-05 -0.000453 7.2e-05 +Ta 0.0 0.0 0.0 -1.4e-05 0.000453 -7.2e-05 +4 +Lattice = "4.20100021362 0.0 0.0 -0.00910000037402 4.19759988785 0.0 -0.00689999992028 0.00609999988228 4.20090007782" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.436262 stress="32759.129999999997 2409.49 1583.58 2409.49 32101.69 -912.27 1583.58 -912.27 21073.66" +Ta 2.088 4.2006 2.1005 -0.001062 0.001392 -0.000497 +Ta 2.0959 2.0988 0.0 0.000982 -0.000276 0.000312 +Ta -0.008 2.1019 2.1005 -4.7e-05 -0.001302 -6.7e-05 +Ta 0.0 0.0 0.0 0.000128 0.000186 0.000252 +4 +Lattice = "4.21759986877 0.0 0.0 0.0156999994069 4.18800020218 0.0 0.00659999996424 0.0181000009179 4.18650007248" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.434505 stress="37654.36 -3876.7999999999997 -1440.8799999999999 -3876.7999999999997 32519.67 -4103.17 -1440.8799999999999 -4103.17 23829.38" +Ta 2.1278 4.197 2.0932 -0.000269 0.000298 0.000324 +Ta 2.1166 2.094 0.0 0.000269 -0.000298 -0.000324 +Ta 4.2287 2.103 2.0932 0.000297 0.000285 0.000327 +Ta 0.0 0.0 0.0 -0.000297 -0.000285 -0.000327 +4 +Lattice = "4.19199991226 0.0 0.0 0.01070000045 4.21519994736 0.0 -0.0195000004023 0.0172000005841 4.19929981232" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.438768 stress="27465.83 -1845.49 4487.129999999999 -1845.49 32725.54 -3897.0099999999998 4487.129999999999 -3897.0099999999998 17774.13" +Ta 2.0863 0.0086 2.0996 -0.000554 6.9e-05 0.000378 +Ta 2.1013 2.1076 0.0 0.000554 -6.9e-05 -0.000378 +Ta 4.1876 2.1162 2.0996 -9.3e-05 3.9e-05 0.000372 +Ta 0.0 0.0 0.0 9.3e-05 -3.9e-05 -0.000372 +4 +Lattice = "4.20120000839 0.0 0.0 -0.00980000011623 4.21460008621 0.0 0.0137000000104 -0.0104000000283 4.19080018997" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.440254 stress="26850.75 1979.56 -3070.84 1979.56 30335.71 2128.91 -3070.84 2128.91 16599.23" +Ta 2.1074 -0.0052 2.0954 0.000286 -4.3e-05 -9.2e-05 +Ta 2.0957 2.1073 0.0 -0.000286 4.3e-05 9.2e-05 +Ta 4.2031 2.1021 2.0954 0.000286 -4.3e-05 -9.2e-05 +Ta 0.0 0.0 0.0 -0.000286 4.3e-05 9.2e-05 +4 +Lattice = "4.18440008163 0.0 0.0 -0.0175000000745 4.18079996109 0.0 -0.0194000005722 0.0108000002801 4.21099996567" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.42286 stress="40368.11 3432.0 3719.6699999999996 3432.0 39974.420000000006 -1873.58 3719.6699999999996 -1873.58 31423.030000000002" +Ta 2.0825 0.0054 2.1055 -0.000359 6e-05 5.6e-05 +Ta 2.0834 2.0904 0.0 0.000359 -6e-05 -5.6e-05 +Ta 4.1659 2.0958 2.1055 0.000359 -6e-05 -5.6e-05 +Ta 0.0 0.0 0.0 -0.000359 6e-05 5.6e-05 +4 +Lattice = "4.18879985809 0.0 0.0 -0.0208000000566 4.18480014801 0.0 -0.00730000017211 -0.0186999998987 4.19089984894" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.418078 stress="45790.12 4993.91 1730.1100000000001 4993.91 45930.82 3649.4300000000003 1730.1100000000001 3649.4300000000003 35583.67" +Ta 2.0907 -0.0093 2.0955 0.000623 -0.000961 -0.000332 +Ta 2.084 2.0924 0.0 -0.000626 -0.000189 0.000487 +Ta 4.1747 2.083 2.0955 0.000372 0.001139 -0.000549 +Ta 0.0 0.0 0.0 -0.000369 1e-05 0.000393 +4 +Lattice = "4.19479990005 0.0 0.0 -0.00620000017807 4.21269989014 0.0 -0.01600000076 -0.0153000000864 4.20469999313" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.440513 stress="22841.39 1639.92 3610.02 1639.92 27085.86 3356.16 3610.02 3356.16 13927.91" +Ta 2.0894 -0.0076 2.1024 -0.000112 -0.000351 -0.000518 +Ta 2.0943 2.1064 0.0 0.00016 -0.000267 0.000412 +Ta -0.0111 2.0987 2.1024 -0.00016 0.000267 -0.000412 +Ta 0.0 0.0 0.0 0.000112 0.000351 0.000518 +4 +Lattice = "4.18660020828 0.0 0.0 -0.0172000005841 4.17999982834 0.0 -0.0137000000104 0.0121999997646 4.18389987946" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.409824 stress="54573.9 3803.25 2849.0 3803.25 53362.96 -2844.54 2849.0 -2844.54 43325.58" +Ta 2.0692 4.1861 2.092 0.000705 -1.8e-05 -0.000526 +Ta 2.0847 2.09 0.0 -0.000705 1.8e-05 0.000526 +Ta 4.1711 2.0961 2.092 0.000705 -1.8e-05 -0.000526 +Ta 0.0 0.0 0.0 -0.000705 1.8e-05 0.000526 +4 +Lattice = "4.20060014725 0.0 0.0 0.00219999998808 4.19719982147 0.0 -0.0162000004202 -0.00079999997979 4.21750020981" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.440329 stress="24420.449999999997 -556.41 3615.46 -556.41 22664.89 379.38 3615.46 379.38 13111.85" +Ta 2.0922 -0.0004 2.1088 1.1e-05 9e-05 -0.000468 +Ta 2.1014 2.0986 0.0 -1.1e-05 -9e-05 0.000468 +Ta -0.007 2.0982 2.1088 1.1e-05 9e-05 -0.000468 +Ta 0.0 0.0 0.0 -1.1e-05 -9e-05 0.000468 +4 +Lattice = "4.19640016556 0.0 0.0 0.00889999978244 4.20380020142 0.0 -0.0110999997705 0.0162000004202 4.20480012894" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.43773 stress="26565.65 -1735.6799999999998 2480.6400000000003 -1735.6799999999998 28315.010000000002 -3741.6200000000003 2480.6400000000003 -3741.6200000000003 17263.329999999998" +Ta 2.0927 0.0081 2.1024 -0.00063 -0.000147 2e-05 +Ta 2.1026 2.1019 0.0 0.00063 0.000147 -2e-05 +Ta -0.0011 2.11 2.1024 9.4e-05 3.4e-05 -2e-06 +Ta 0.0 0.0 0.0 -9.4e-05 -3.4e-05 2e-06 +4 +Lattice = "4.18130016327 0.0 0.0 0.0177999995649 4.18319988251 0.0 -0.00340000004508 -0.0187999997288 4.19859981537" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.416525 stress="45103.520000000004 -3012.21 864.34 -3012.21 46101.13 4242.0 864.34 4242.0 36460.39" +Ta 2.089 -0.0094 2.0993 -0.000372 -6.9e-05 -1.6e-05 +Ta 2.0996 2.0916 0.0 -0.000372 -6.9e-05 -1.6e-05 +Ta 0.0072 2.0822 2.0993 0.000372 6.9e-05 1.6e-05 +Ta 0.0 0.0 0.0 0.000372 6.9e-05 1.6e-05 +4 +Lattice = "4.19229984283 0.0 0.0 0.001200000057 4.20900011063 0.0 -0.0151000004262 -0.00659999996424 4.21150016785" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.440293 stress="27393.899999999998 -151.45 2769.0 -151.45 30944.28 1878.31 2769.0 1878.31 18332.49" +Ta 2.0886 -0.0033 2.1058 -0.00024 0.0 -0.000304 +Ta 2.0967 2.1045 0.0 0.00024 0.0 0.000304 +Ta 4.1853 2.1012 2.1058 0.000234 0.0 -0.000306 +Ta 0.0 0.0 0.0 -0.000234 0.0 0.000306 +4 +Lattice = "4.18419981003 0.0 0.0 0.0206000003964 4.209400177 0.0 -0.0109999999404 -0.00480000022799 4.21589994431" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.43839 stress="21338.170000000002 -4162.9 2184.87 -4162.9 28153.19 1038.1 2184.87 1038.1 15498.07" +Ta 2.1072 4.207 2.1079 -1.6e-05 9e-06 0.00028 +Ta 2.1024 2.1047 0.0 1.6e-05 -9e-06 -0.00028 +Ta 4.189 2.1023 2.1079 -1.6e-05 9e-06 0.00028 +Ta 0.0 0.0 0.0 1.6e-05 -9e-06 -0.00028 +4 +Lattice = "4.17980003357 0.0 0.0 0.00789999961853 4.21220016479 0.0 0.0197000000626 -0.00270000007004 4.2185997963" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.438916 stress="20722.52 -1865.4599999999998 -4386.49 -1865.4599999999998 29240.06 779.2900000000001 -4386.49 779.2900000000001 15461.880000000001" +Ta 2.0998 -0.0013 2.1093 -0.00064 -0.000286 9e-05 +Ta 2.0939 2.1061 0.0 -0.000872 0.000312 -7.4e-05 +Ta 4.1936 2.1048 2.1093 0.000872 -0.000312 7.4e-05 +Ta 0.0 0.0 0.0 0.00064 0.000286 -9e-05 diff --git a/examples/PACKAGES/pod/Ta/XYZ/GSF_110.xyz b/examples/PACKAGES/pod/Ta/XYZ/GSF_110.xyz new file mode 100644 index 0000000000..378878ef80 --- /dev/null +++ b/examples/PACKAGES/pod/Ta/XYZ/GSF_110.xyz @@ -0,0 +1,572 @@ +24 +Lattice = "4.69519042969 0.0 0.0 0.0 3.31999993324 0.0 0.0 0.0 53.1199989319" Properties=species:S:1:pos:R:3:forces:R:3 energy=-279.068761 stress="-2699.74 -3225.67 0.0 -3225.67 -11966.73 0.0 0.0 0.0 8811.74" +Ta 2.34759 1.66 0.09121 0.0 0.0 0.002389 +Ta 0.0 0.0 0.09121 0.0 0.0 0.002389 +Ta 0.0 1.66 2.3361 0.0 0.0 -0.010927 +Ta 2.34759 0.0 2.3361 0.0 0.0 -0.010927 +Ta 2.34759 1.66 4.68536 0.0 0.0 -0.004142 +Ta 0.0 0.0 4.68536 0.0 0.0 -0.004142 +Ta 0.0 1.66 7.03392 0.0 0.0 0.078092 +Ta 2.34759 0.0 7.03392 0.0 0.0 0.078092 +Ta 2.34759 1.66 9.38594 0.0 0.0 -0.152903 +Ta 0.0 0.0 9.38594 0.0 0.0 -0.152903 +Ta 0.0 1.66 11.73648 0.0 0.0 -0.861147 +Ta 2.34759 0.0 11.73648 0.0 0.0 -0.861147 +Ta 3.52139 2.49 14.08712 0.0 0.0 0.861147 +Ta 1.1738 0.83 14.08712 0.0 0.0 0.861147 +Ta 1.1738 2.49 16.43764 0.0 0.0 0.152903 +Ta 3.52139 0.83 16.43764 0.0 0.0 0.152903 +Ta 3.52139 2.49 18.78966 0.0 0.0 -0.078092 +Ta 1.1738 0.83 18.78966 0.0 0.0 -0.078092 +Ta 1.1738 2.49 21.13823 0.0 0.0 0.004142 +Ta 3.52139 0.83 21.13823 0.0 0.0 0.004142 +Ta 3.52139 2.49 23.48739 0.0 0.0 0.010927 +Ta 1.1738 0.83 23.48739 0.0 0.0 0.010927 +Ta 1.1738 2.49 25.73229 0.0 0.0 -0.002389 +Ta 3.52139 0.83 25.73229 0.0 0.0 -0.002389 +24 +Lattice = "4.69519042969 0.0 0.0 0.0 3.31999993324 0.0 0.0 0.0 53.1199989319" Properties=species:S:1:pos:R:3:forces:R:3 energy=-279.784296 stress="-9310.84 -724.11 -1802.3100000000002 -724.11 -7581.28 -1731.35 -1802.3100000000002 -1731.35 -145.04" +Ta 2.34759 1.66 0.09121 -0.000195 -0.00161 0.000812 +Ta 0.0 0.0 0.09121 -0.000195 -0.00161 0.000812 +Ta 0.0 1.66 2.3361 -0.000284 0.000353 -0.002185 +Ta 2.34759 0.0 2.3361 -0.000284 0.000353 -0.002185 +Ta 2.34759 1.66 4.68536 0.008799 -0.00141 -0.002306 +Ta 0.0 0.0 4.68536 0.008799 -0.00141 -0.002306 +Ta 0.0 1.66 7.03392 -0.006695 0.021282 0.017658 +Ta 2.34759 0.0 7.03392 -0.006695 0.021282 0.017658 +Ta 2.34759 1.66 9.38594 -0.014885 -0.089566 0.000145 +Ta 0.0 0.0 9.38594 -0.014885 -0.089566 0.000145 +Ta 0.0 1.66 11.73648 0.220002 0.367425 -0.11205 +Ta 2.34759 0.0 11.73648 0.220002 0.367425 -0.11205 +Ta 2.58235 1.826 14.08712 -0.220002 -0.367425 0.11205 +Ta 0.23476 0.166 14.08712 -0.220002 -0.367425 0.11205 +Ta 0.23476 1.826 16.43764 0.014885 0.089566 -0.000145 +Ta 2.58235 0.166 16.43764 0.014885 0.089566 -0.000145 +Ta 2.58235 1.826 18.78966 0.006695 -0.021282 -0.017658 +Ta 0.23476 0.166 18.78966 0.006695 -0.021282 -0.017658 +Ta 0.23476 1.826 21.13823 -0.008799 0.00141 0.002306 +Ta 2.58235 0.166 21.13823 -0.008799 0.00141 0.002306 +Ta 2.58235 1.826 23.48739 0.000284 -0.000353 0.002185 +Ta 0.23476 0.166 23.48739 0.000284 -0.000353 0.002185 +Ta 0.23476 1.826 25.73229 0.000195 0.00161 -0.000812 +Ta 2.58235 0.166 25.73229 0.000195 0.00161 -0.000812 +24 +Lattice = "4.69519042969 0.0 0.0 0.0 3.31999993324 0.0 0.0 0.0 53.1199989319" Properties=species:S:1:pos:R:3:forces:R:3 energy=-279.901657 stress="-9711.95 0.0 0.0 0.0 -7971.759999999999 0.0 0.0 0.0 -387.39" +Ta 2.34759 1.66 0.09122 0.0 0.0 -2.1e-05 +Ta 0.0 0.0 0.09122 0.0 0.0 -2.1e-05 +Ta 0.0 1.66 2.33609 0.0 0.0 0.000332 +Ta 2.34759 0.0 2.33609 0.0 0.0 0.000332 +Ta 2.34759 1.66 4.68537 0.0 0.0 0.000393 +Ta 0.0 0.0 4.68537 0.0 0.0 0.000393 +Ta 0.0 1.66 7.03419 0.0 0.0 8.4e-05 +Ta 2.34759 0.0 7.03419 0.0 0.0 8.4e-05 +Ta 2.34759 1.66 9.38555 0.0 0.0 -0.000286 +Ta 0.0 0.0 9.38555 0.0 0.0 -0.000286 +Ta 0.0 1.66 11.73665 0.0 0.0 -0.000509 +Ta 2.34759 0.0 11.73665 0.0 0.0 -0.000509 +Ta 4.69519 0.0 14.08695 0.0 0.0 0.000509 +Ta 2.3476 1.66 14.08695 0.0 0.0 0.000509 +Ta 2.3476 0.0 16.43803 0.0 0.0 0.000286 +Ta 4.69519 1.66 16.43803 0.0 0.0 0.000286 +Ta 4.69519 0.0 18.78939 0.0 0.0 -8.4e-05 +Ta 2.3476 1.66 18.78939 0.0 0.0 -8.4e-05 +Ta 2.3476 0.0 21.13822 0.0 0.0 -0.000393 +Ta 4.69519 1.66 21.13822 0.0 0.0 -0.000393 +Ta 4.69519 0.0 23.4874 0.0 0.0 -0.000332 +Ta 2.3476 1.66 23.4874 0.0 0.0 -0.000332 +Ta 2.3476 0.0 25.73228 0.0 0.0 2.1e-05 +Ta 4.69519 1.66 25.73228 0.0 0.0 2.1e-05 +24 +Lattice = "4.69519042969 0.0 0.0 0.0 3.31999993324 0.0 0.0 0.0 53.1199989319" Properties=species:S:1:pos:R:3:forces:R:3 energy=-279.584238 stress="-8455.84 -1472.71 2162.92 -1472.71 -8121.589999999999 1800.64 2162.92 1800.64 -338.96" +Ta 2.34759 1.66 0.07452 -0.000101 0.002118 -0.001067 +Ta 0.0 0.0 0.07452 -0.000101 0.002118 -0.001067 +Ta 0.0 1.66 2.31914 0.000559 -0.002302 0.001125 +Ta 2.34759 0.0 2.31914 0.000559 -0.002302 0.001125 +Ta 2.34759 1.66 4.6683 -0.011564 0.001165 -0.001122 +Ta 0.0 0.0 4.6683 -0.011564 0.001165 -0.001122 +Ta 0.0 1.66 7.0214 0.010839 -0.033575 -0.000333 +Ta 2.34759 0.0 7.0214 0.010839 -0.033575 -0.000333 +Ta 2.34759 1.66 9.36328 0.008027 0.132954 0.000561 +Ta 0.0 0.0 9.36328 0.008027 0.132954 0.000561 +Ta 0.0 1.66 11.70268 -0.232266 -0.441609 -0.001106 +Ta 2.34759 0.0 11.70268 -0.232266 -0.441609 -0.001106 +Ta 4.22567 2.988 14.12092 0.232266 0.441609 0.001106 +Ta 1.87808 1.328 14.12092 0.232266 0.441609 0.001106 +Ta 1.87808 2.988 16.4603 -0.008027 -0.132954 -0.000561 +Ta 4.22567 1.328 16.4603 -0.008027 -0.132954 -0.000561 +Ta 4.22567 2.988 18.80218 -0.010839 0.033575 0.000333 +Ta 1.87808 1.328 18.80218 -0.010839 0.033575 0.000333 +Ta 1.87808 2.988 21.15529 0.011564 -0.001165 0.001122 +Ta 4.22567 1.328 21.15529 0.011564 -0.001165 0.001122 +Ta 4.22567 2.988 23.50435 -0.000559 0.002302 -0.001125 +Ta 1.87808 1.328 23.50435 -0.000559 0.002302 -0.001125 +Ta 1.87808 2.988 25.74898 0.000101 -0.002118 0.001067 +Ta 4.22567 1.328 25.74898 0.000101 -0.002118 0.001067 +24 +Lattice = "4.69519042969 0.0 0.0 0.0 3.31999993324 0.0 0.0 0.0 53.1199989319" Properties=species:S:1:pos:R:3:forces:R:3 energy=-279.784283 stress="-9315.08 -723.62 1802.65 -723.62 -7584.349999999999 1731.7800000000002 1802.65 1731.7800000000002 -137.97" +Ta 2.34759 1.66 0.09121 0.000196 0.00161 0.000943 +Ta 0.0 0.0 0.09121 0.000196 0.00161 0.000943 +Ta 0.0 1.66 2.3361 0.000284 -0.000353 -0.002245 +Ta 2.34759 0.0 2.3361 0.000284 -0.000353 -0.002245 +Ta 2.34759 1.66 4.68536 -0.008799 0.00141 -0.002392 +Ta 0.0 0.0 4.68536 -0.008799 0.00141 -0.002392 +Ta 0.0 1.66 7.03392 0.006694 -0.021282 0.017465 +Ta 2.34759 0.0 7.03392 0.006694 -0.021282 0.017465 +Ta 2.34759 1.66 9.38594 0.014872 0.089556 -4.7e-05 +Ta 0.0 0.0 9.38594 0.014872 0.089556 -4.7e-05 +Ta 0.0 1.66 11.73648 -0.219937 -0.367391 -0.112068 +Ta 2.34759 0.0 11.73648 -0.219937 -0.367391 -0.112068 +Ta 4.46043 3.154 14.08712 0.219937 0.367391 0.112068 +Ta 2.11284 1.494 14.08712 0.219937 0.367391 0.112068 +Ta 2.11284 3.154 16.43764 -0.014872 -0.089556 4.7e-05 +Ta 4.46043 1.494 16.43764 -0.014872 -0.089556 4.7e-05 +Ta 4.46043 3.154 18.78966 -0.006694 0.021282 -0.017465 +Ta 2.11284 1.494 18.78966 -0.006694 0.021282 -0.017465 +Ta 2.11284 3.154 21.13823 0.008799 -0.00141 0.002392 +Ta 4.46043 1.494 21.13823 0.008799 -0.00141 0.002392 +Ta 4.46043 3.154 23.48739 -0.000284 0.000353 0.002245 +Ta 2.11284 1.494 23.48739 -0.000284 0.000353 0.002245 +Ta 2.11284 3.154 25.73229 -0.000196 -0.00161 -0.000943 +Ta 4.46043 1.494 25.73229 -0.000196 -0.00161 -0.000943 +24 +Lattice = "4.69519042969 0.0 0.0 0.0 3.31999993324 0.0 0.0 0.0 53.1199989319" Properties=species:S:1:pos:R:3:forces:R:3 energy=-279.302158 stress="-5999.0 -2091.5499999999997 -2060.3199999999997 -2091.5499999999997 -8316.509999999998 -1933.87 -2060.3199999999997 -1933.87 4767.089999999999" +Ta 2.34759 1.66 0.09121 0.000338 -0.000764 0.003013 +Ta 0.0 0.0 0.09121 0.000338 -0.000764 0.003013 +Ta 0.0 1.66 2.3361 -0.000192 0.002217 -0.008533 +Ta 2.34759 0.0 2.3361 -0.000192 0.002217 -0.008533 +Ta 2.34759 1.66 4.68536 0.007402 -0.005681 -0.01113 +Ta 0.0 0.0 4.68536 0.007402 -0.005681 -0.01113 +Ta 0.0 1.66 7.03392 -0.010084 0.035505 0.068653 +Ta 2.34759 0.0 7.03392 -0.010084 0.035505 0.068653 +Ta 2.34759 1.66 9.38594 0.009421 -0.162853 -0.055133 +Ta 0.0 0.0 9.38594 0.009421 -0.162853 -0.055133 +Ta 0.0 1.66 11.73648 0.194592 0.543144 -0.645035 +Ta 2.34759 0.0 11.73648 0.194592 0.543144 -0.645035 +Ta 3.05187 2.158 14.08712 -0.194592 -0.543144 0.645035 +Ta 0.70428 0.498 14.08712 -0.194592 -0.543144 0.645035 +Ta 0.70428 2.158 16.43764 -0.009421 0.162853 0.055133 +Ta 3.05187 0.498 16.43764 -0.009421 0.162853 0.055133 +Ta 3.05187 2.158 18.78966 0.010084 -0.035505 -0.068653 +Ta 0.70428 0.498 18.78966 0.010084 -0.035505 -0.068653 +Ta 0.70428 2.158 21.13823 -0.007402 0.005681 0.01113 +Ta 3.05187 0.498 21.13823 -0.007402 0.005681 0.01113 +Ta 3.05187 2.158 23.48739 0.000192 -0.002217 0.008533 +Ta 0.70428 0.498 23.48739 0.000192 -0.002217 0.008533 +Ta 0.70428 2.158 25.73229 -0.000338 0.000764 -0.003013 +Ta 3.05187 0.498 25.73229 -0.000338 0.000764 -0.003013 +24 +Lattice = "4.69519042969 0.0 0.0 0.0 3.31999993324 0.0 0.0 0.0 53.1199989319" Properties=species:S:1:pos:R:3:forces:R:3 energy=-279.55564 stress="-7951.990000000001 -1470.47 -2323.28 -1470.47 -7087.54 -2242.19 -2323.28 -2242.19 1393.38" +Ta 2.34759 1.66 0.09121 6.8e-05 -0.00218 0.002247 +Ta 0.0 0.0 0.09121 6.8e-05 -0.00218 0.002247 +Ta 0.0 1.66 2.3361 -0.000373 0.001531 -0.005318 +Ta 2.34759 0.0 2.3361 -0.000373 0.001531 -0.005318 +Ta 2.34759 1.66 4.68536 0.011743 -0.002192 -0.00859 +Ta 0.0 0.0 4.68536 0.011743 -0.002192 -0.00859 +Ta 0.0 1.66 7.03392 -0.010535 0.038081 0.052269 +Ta 2.34759 0.0 7.03392 -0.010535 0.038081 0.052269 +Ta 2.34759 1.66 9.38594 -0.00905 -0.147322 -0.015198 +Ta 0.0 0.0 9.38594 -0.00905 -0.147322 -0.015198 +Ta 0.0 1.66 11.73648 0.255618 0.52958 -0.348689 +Ta 2.34759 0.0 11.73648 0.255618 0.52958 -0.348689 +Ta 2.81711 1.992 14.08712 -0.255618 -0.52958 0.348689 +Ta 0.46952 0.332 14.08712 -0.255618 -0.52958 0.348689 +Ta 0.46952 1.992 16.43764 0.00905 0.147322 0.015198 +Ta 2.81711 0.332 16.43764 0.00905 0.147322 0.015198 +Ta 2.81711 1.992 18.78966 0.010535 -0.038081 -0.052269 +Ta 0.46952 0.332 18.78966 0.010535 -0.038081 -0.052269 +Ta 0.46952 1.992 21.13823 -0.011743 0.002192 0.00859 +Ta 2.81711 0.332 21.13823 -0.011743 0.002192 0.00859 +Ta 2.81711 1.992 23.48739 0.000373 -0.001531 0.005318 +Ta 0.46952 0.332 23.48739 0.000373 -0.001531 0.005318 +Ta 0.46952 1.992 25.73229 -6.8e-05 0.00218 -0.002247 +Ta 2.81711 0.332 25.73229 -6.8e-05 0.00218 -0.002247 +24 +Lattice = "4.69519042969 0.0 0.0 0.0 3.31999993324 0.0 0.0 0.0 53.1199989319" Properties=species:S:1:pos:R:3:forces:R:3 energy=-279.246939 stress="-7247.110000000001 -2088.01 900.26 -2088.01 -12867.95 522.24 900.26 522.24 -343.87" +Ta 2.34759 1.66 0.0313 -0.000299 2.9e-05 0.000555 +Ta 0.0 0.0 0.0313 -0.000299 2.9e-05 0.000555 +Ta 0.0 1.66 2.27588 0.000225 -0.001627 0.00115 +Ta 2.34759 0.0 2.27588 0.000225 -0.001627 0.00115 +Ta 2.34759 1.66 4.62506 -0.002747 0.002713 0.000254 +Ta 0.0 0.0 4.62506 -0.002747 0.002713 0.000254 +Ta 0.0 1.66 6.98061 0.004373 -0.018318 9.6e-05 +Ta 2.34759 0.0 6.98061 0.004373 -0.018318 9.6e-05 +Ta 2.34759 1.66 9.31312 -0.010337 0.080996 -2e-06 +Ta 0.0 0.0 9.31312 -0.010337 0.080996 -2e-06 +Ta 0.0 1.66 11.6666 -0.064509 -0.216178 0.000109 +Ta 2.34759 0.0 11.6666 -0.064509 -0.216178 0.000109 +Ta 3.75615 2.656 14.157 0.064509 0.216178 -0.000109 +Ta 1.40856 0.996 14.157 0.064509 0.216178 -0.000109 +Ta 1.40856 2.656 16.51046 0.010337 -0.080996 2e-06 +Ta 3.75615 0.996 16.51046 0.010337 -0.080996 2e-06 +Ta 3.75615 2.656 18.84297 -0.004373 0.018318 -9.6e-05 +Ta 1.40856 0.996 18.84297 -0.004373 0.018318 -9.6e-05 +Ta 1.40856 2.656 21.19853 0.002747 -0.002713 -0.000254 +Ta 3.75615 0.996 21.19853 0.002747 -0.002713 -0.000254 +Ta 3.75615 2.656 23.54761 -0.000225 0.001627 -0.00115 +Ta 1.40856 0.996 23.54761 -0.000225 0.001627 -0.00115 +Ta 1.40856 2.656 25.7922 0.000299 -2.9e-05 -0.000555 +Ta 3.75615 0.996 25.7922 0.000299 -2.9e-05 -0.000555 +24 +Lattice = "4.69519042969 0.0 0.0 0.0 3.31999993324 0.0 0.0 0.0 53.1199989319" Properties=species:S:1:pos:R:3:forces:R:3 energy=-279.302157 stress="-5999.4800000000005 -2091.2000000000003 2059.81 -2091.2000000000003 -8317.08 1933.52 2059.81 1933.52 4766.58" +Ta 2.34759 1.66 0.09121 -0.000338 0.000764 0.003027 +Ta 0.0 0.0 0.09121 -0.000338 0.000764 0.003027 +Ta 0.0 1.66 2.3361 0.000192 -0.002217 -0.008526 +Ta 2.34759 0.0 2.3361 0.000192 -0.002217 -0.008526 +Ta 2.34759 1.66 4.68536 -0.007402 0.005681 -0.011124 +Ta 0.0 0.0 4.68536 -0.007402 0.005681 -0.011124 +Ta 0.0 1.66 7.03392 0.010084 -0.035505 0.068661 +Ta 2.34759 0.0 7.03392 0.010084 -0.035505 0.068661 +Ta 2.34759 1.66 9.38594 -0.009421 0.162854 -0.055124 +Ta 0.0 0.0 9.38594 -0.009421 0.162854 -0.055124 +Ta 0.0 1.66 11.73648 -0.194591 -0.543144 -0.645027 +Ta 2.34759 0.0 11.73648 -0.194591 -0.543144 -0.645027 +Ta 3.99091 2.822 14.08712 0.194591 0.543144 0.645027 +Ta 1.64332 1.162 14.08712 0.194591 0.543144 0.645027 +Ta 1.64332 2.822 16.43764 0.009421 -0.162854 0.055124 +Ta 3.99091 1.162 16.43764 0.009421 -0.162854 0.055124 +Ta 3.99091 2.822 18.78966 -0.010084 0.035505 -0.068661 +Ta 1.64332 1.162 18.78966 -0.010084 0.035505 -0.068661 +Ta 1.64332 2.822 21.13823 0.007402 -0.005681 0.011124 +Ta 3.99091 1.162 21.13823 0.007402 -0.005681 0.011124 +Ta 3.99091 2.822 23.48739 -0.000192 0.002217 0.008526 +Ta 1.64332 1.162 23.48739 -0.000192 0.002217 0.008526 +Ta 1.64332 2.822 25.73229 0.000338 -0.000764 -0.003027 +Ta 3.99091 1.162 25.73229 0.000338 -0.000764 -0.003027 +24 +Lattice = "4.69519042969 0.0 0.0 0.0 3.31999993324 0.0 0.0 0.0 53.1199989319" Properties=species:S:1:pos:R:3:forces:R:3 energy=-279.246935 stress="-7243.7300000000005 -2085.2 -898.75 -2085.2 -12860.99 -521.24 -898.75 -521.24 -339.14" +Ta 2.34759 1.66 0.03138 0.000299 -3.1e-05 0.000674 +Ta 0.0 0.0 0.03138 0.000299 -3.1e-05 0.000674 +Ta 0.0 1.66 2.276 -0.000225 0.001628 -0.00088 +Ta 2.34759 0.0 2.276 -0.000225 0.001628 -0.00088 +Ta 2.34759 1.66 4.62485 0.002741 -0.002715 0.000469 +Ta 0.0 0.0 4.62485 0.002741 -0.002715 0.000469 +Ta 0.0 1.66 6.98003 -0.004361 0.018297 0.002362 +Ta 2.34759 0.0 6.98003 -0.004361 0.018297 0.002362 +Ta 2.34759 1.66 9.31271 0.010328 -0.080927 0.000615 +Ta 0.0 0.0 9.31271 0.010328 -0.080927 0.000615 +Ta 0.0 1.66 11.66645 0.064416 0.215971 0.000489 +Ta 2.34759 0.0 11.66645 0.064416 0.215971 0.000489 +Ta 3.28663 2.324 14.15715 -0.064416 -0.215971 -0.000489 +Ta 0.93904 0.664 14.15715 -0.064416 -0.215971 -0.000489 +Ta 0.93904 2.324 16.51087 -0.010328 0.080927 -0.000615 +Ta 3.28663 0.664 16.51087 -0.010328 0.080927 -0.000615 +Ta 3.28663 2.324 18.84355 0.004361 -0.018297 -0.002362 +Ta 0.93904 0.664 18.84355 0.004361 -0.018297 -0.002362 +Ta 0.93904 2.324 21.19874 -0.002741 0.002715 -0.000469 +Ta 3.28663 0.664 21.19874 -0.002741 0.002715 -0.000469 +Ta 3.28663 2.324 23.54749 0.000225 -0.001628 0.00088 +Ta 0.93904 0.664 23.54749 0.000225 -0.001628 0.00088 +Ta 0.93904 2.324 25.79212 -0.000299 3.1e-05 -0.000674 +Ta 3.28663 0.664 25.79212 -0.000299 3.1e-05 -0.000674 +24 +Lattice = "4.69519042969 0.0 0.0 0.0 3.31999993324 0.0 0.0 0.0 53.1199989319" Properties=species:S:1:pos:R:3:forces:R:3 energy=-279.896025 stress="-9869.42 0.0 0.0 0.0 -8124.2 0.0 0.0 0.0 -554.5600000000001" +Ta 2.34759 1.66 0.09121 0.0 0.0 0.000102 +Ta 0.0 0.0 0.09121 0.0 0.0 0.000102 +Ta 0.0 1.66 2.3361 0.0 0.0 -0.000104 +Ta 2.34759 0.0 2.3361 0.0 0.0 -0.000104 +Ta 2.34759 1.66 4.68536 0.0 0.0 0.000115 +Ta 0.0 0.0 4.68536 0.0 0.0 0.000115 +Ta 0.0 1.66 7.03392 0.0 0.0 0.002828 +Ta 2.34759 0.0 7.03392 0.0 0.0 0.002828 +Ta 2.34759 1.66 9.38594 0.0 0.0 -0.004132 +Ta 0.0 0.0 9.38594 0.0 0.0 -0.004132 +Ta 0.0 1.66 11.73648 0.0 0.0 0.001736 +Ta 2.34759 0.0 11.73648 0.0 0.0 0.001736 +Ta 2.34759 1.66 14.08712 0.0 0.0 -0.001736 +Ta 0.0 0.0 14.08712 0.0 0.0 -0.001736 +Ta 0.0 1.66 16.43764 0.0 0.0 0.004132 +Ta 2.34759 0.0 16.43764 0.0 0.0 0.004132 +Ta 2.34759 1.66 18.78966 0.0 0.0 -0.002828 +Ta 0.0 0.0 18.78966 0.0 0.0 -0.002828 +Ta 0.0 1.66 21.13823 0.0 0.0 -0.000115 +Ta 2.34759 0.0 21.13823 0.0 0.0 -0.000115 +Ta 2.34759 1.66 23.48739 0.0 0.0 0.000104 +Ta 0.0 0.0 23.48739 0.0 0.0 0.000104 +Ta 0.0 1.66 25.73229 0.0 0.0 -0.000102 +Ta 2.34759 0.0 25.73229 0.0 0.0 -0.000102 +24 +Lattice = "4.69519042969 0.0 0.0 0.0 3.31999993324 0.0 0.0 0.0 53.1199989319" Properties=species:S:1:pos:R:3:forces:R:3 energy=-279.584237 stress="-8428.63 -1472.9 -2164.32 -1472.9 -8091.21 -1800.0100000000002 -2164.32 -1800.0100000000002 -288.22999999999996" +Ta 2.34759 1.66 0.07506 0.000102 -0.002133 -0.000914 +Ta 0.0 0.0 0.07506 0.000102 -0.002133 -0.000914 +Ta 0.0 1.66 2.31974 -0.000559 0.002291 0.000397 +Ta 2.34759 0.0 2.31974 -0.000559 0.002291 0.000397 +Ta 2.34759 1.66 4.6688 0.011573 -0.001165 -0.000831 +Ta 0.0 0.0 4.6688 0.011573 -0.001165 -0.000831 +Ta 0.0 1.66 7.02184 -0.010852 0.033591 -0.000593 +Ta 2.34759 0.0 7.02184 -0.010852 0.033591 -0.000593 +Ta 2.34759 1.66 9.36366 -0.008031 -0.133014 -0.000394 +Ta 0.0 0.0 9.36366 -0.008031 -0.133014 -0.000394 +Ta 0.0 1.66 11.70273 0.232392 0.441681 -0.000156 +Ta 2.34759 0.0 11.70273 0.232392 0.441681 -0.000156 +Ta 2.81711 1.992 14.12087 -0.232392 -0.441681 0.000156 +Ta 0.46952 0.332 14.12087 -0.232392 -0.441681 0.000156 +Ta 0.46952 1.992 16.45992 0.008031 0.133014 0.000394 +Ta 2.81711 0.332 16.45992 0.008031 0.133014 0.000394 +Ta 2.81711 1.992 18.80174 0.010852 -0.033591 0.000593 +Ta 0.46952 0.332 18.80174 0.010852 -0.033591 0.000593 +Ta 0.46952 1.992 21.15479 -0.011573 0.001165 0.000831 +Ta 2.81711 0.332 21.15479 -0.011573 0.001165 0.000831 +Ta 2.81711 1.992 23.50375 0.000559 -0.002291 -0.000397 +Ta 0.46952 0.332 23.50375 0.000559 -0.002291 -0.000397 +Ta 0.46952 1.992 25.74844 -0.000102 0.002133 0.000914 +Ta 2.81711 0.332 25.74844 -0.000102 0.002133 0.000914 +24 +Lattice = "4.69519042969 0.0 0.0 0.0 3.31999993324 0.0 0.0 0.0 53.1199989319" Properties=species:S:1:pos:R:3:forces:R:3 energy=-279.124427 stress="-3757.0899999999997 -2887.24 902.0 -2887.24 -10640.1 866.64 902.0 866.64 7774.740000000001" +Ta 2.34759 1.66 0.09121 -0.000483 -0.000237 0.002307 +Ta 0.0 0.0 0.09121 -0.000483 -0.000237 0.002307 +Ta 0.0 1.66 2.3361 8.9e-05 -0.001539 -0.010324 +Ta 2.34759 0.0 2.3361 8.9e-05 -0.001539 -0.010324 +Ta 2.34759 1.66 4.68536 -0.003111 0.003535 -0.007613 +Ta 0.0 0.0 4.68536 -0.003111 0.003535 -0.007613 +Ta 0.0 1.66 7.03392 0.007146 -0.021127 0.073738 +Ta 2.34759 0.0 7.03392 0.007146 -0.021127 0.073738 +Ta 2.34759 1.66 9.38594 -0.013663 0.107342 -0.116996 +Ta 0.0 0.0 9.38594 -0.013663 0.107342 -0.116996 +Ta 0.0 1.66 11.73648 -0.067743 -0.32857 -0.821304 +Ta 2.34759 0.0 11.73648 -0.067743 -0.32857 -0.821304 +Ta 3.75615 2.656 14.08712 0.067743 0.32857 0.821304 +Ta 1.40856 0.996 14.08712 0.067743 0.32857 0.821304 +Ta 1.40856 2.656 16.43764 0.013663 -0.107342 0.116996 +Ta 3.75615 0.996 16.43764 0.013663 -0.107342 0.116996 +Ta 3.75615 2.656 18.78966 -0.007146 0.021127 -0.073738 +Ta 1.40856 0.996 18.78966 -0.007146 0.021127 -0.073738 +Ta 1.40856 2.656 21.13823 0.003111 -0.003535 0.007613 +Ta 3.75615 0.996 21.13823 0.003111 -0.003535 0.007613 +Ta 3.75615 2.656 23.48739 -8.9e-05 0.001539 0.010324 +Ta 1.40856 0.996 23.48739 -8.9e-05 0.001539 0.010324 +Ta 1.40856 2.656 25.73229 0.000483 0.000237 -0.002307 +Ta 3.75615 0.996 25.73229 0.000483 0.000237 -0.002307 +24 +Lattice = "4.69519042969 0.0 0.0 0.0 3.31999993324 0.0 0.0 0.0 53.1199989319" Properties=species:S:1:pos:R:3:forces:R:3 energy=-279.379366 stress="-7763.09 -1797.51 1889.74 -1797.51 -10164.59 1320.57 1889.74 1320.57 34.12" +Ta 2.34759 1.66 0.05376 -0.000259 0.002166 -0.001263 +Ta 0.0 0.0 0.05376 -0.000259 0.002166 -0.001263 +Ta 0.0 1.66 2.29821 0.000506 -0.00178 0.000245 +Ta 2.34759 0.0 2.29821 0.000506 -0.00178 0.000245 +Ta 2.34759 1.66 4.64698 -0.007327 0.004782 -0.001824 +Ta 0.0 0.0 4.64698 -0.007327 0.004782 -0.001824 +Ta 0.0 1.66 7.00162 0.008163 -0.030937 -0.001313 +Ta 2.34759 0.0 7.00162 0.008163 -0.030937 -0.001313 +Ta 2.34759 1.66 9.33764 -0.007098 0.132381 -0.001661 +Ta 0.0 0.0 9.33764 -0.007098 0.132381 -0.001661 +Ta 0.0 1.66 11.67998 -0.168672 -0.393164 0.000838 +Ta 2.34759 0.0 11.67998 -0.168672 -0.393164 0.000838 +Ta 3.99091 2.822 14.14362 0.168672 0.393164 -0.000838 +Ta 1.64332 1.162 14.14362 0.168672 0.393164 -0.000838 +Ta 1.64332 2.822 16.48594 0.007098 -0.132381 0.001661 +Ta 3.99091 1.162 16.48594 0.007098 -0.132381 0.001661 +Ta 3.99091 2.822 18.82196 -0.008163 0.030937 0.001313 +Ta 1.64332 1.162 18.82196 -0.008163 0.030937 0.001313 +Ta 1.64332 2.822 21.17661 0.007327 -0.004782 0.001824 +Ta 3.99091 1.162 21.17661 0.007327 -0.004782 0.001824 +Ta 3.99091 2.822 23.52528 -0.000506 0.00178 -0.000245 +Ta 1.64332 1.162 23.52528 -0.000506 0.00178 -0.000245 +Ta 1.64332 2.822 25.76974 0.000259 -0.002166 0.001263 +Ta 3.99091 1.162 25.76974 0.000259 -0.002166 0.001263 +24 +Lattice = "4.69519042969 0.0 0.0 0.0 3.31999993324 0.0 0.0 0.0 53.1199989319" Properties=species:S:1:pos:R:3:forces:R:3 energy=-279.37937 stress="-7778.34 -1797.1200000000001 -1889.07 -1797.1200000000001 -10180.85 -1319.78 -1889.07 -1319.78 5.64" +Ta 2.34759 1.66 0.0535 0.000258 -0.00217 -0.000937 +Ta 0.0 0.0 0.0535 0.000258 -0.00217 -0.000937 +Ta 0.0 1.66 2.29801 -0.000506 0.00178 -2.1e-05 +Ta 2.34759 0.0 2.29801 -0.000506 0.00178 -2.1e-05 +Ta 2.34759 1.66 4.64678 0.007324 -0.004781 -0.001649 +Ta 0.0 0.0 4.64678 0.007324 -0.004781 -0.001649 +Ta 0.0 1.66 7.00147 -0.00816 0.030933 -0.001233 +Ta 2.34759 0.0 7.00147 -0.00816 0.030933 -0.001233 +Ta 2.34759 1.66 9.33754 0.0071 -0.132353 -0.001629 +Ta 0.0 0.0 9.33754 0.0071 -0.132353 -0.001629 +Ta 0.0 1.66 11.67995 0.168627 0.393088 0.00081 +Ta 2.34759 0.0 11.67995 0.168627 0.393088 0.00081 +Ta 3.05187 2.158 14.14365 -0.168627 -0.393088 -0.00081 +Ta 0.70428 0.498 14.14365 -0.168627 -0.393088 -0.00081 +Ta 0.70428 2.158 16.48604 -0.0071 0.132353 0.001629 +Ta 3.05187 0.498 16.48604 -0.0071 0.132353 0.001629 +Ta 3.05187 2.158 18.82211 0.00816 -0.030933 0.001233 +Ta 0.70428 0.498 18.82211 0.00816 -0.030933 0.001233 +Ta 0.70428 2.158 21.17681 -0.007324 0.004781 0.001649 +Ta 3.05187 0.498 21.17681 -0.007324 0.004781 0.001649 +Ta 3.05187 2.158 23.52548 0.000506 -0.00178 2.1e-05 +Ta 0.70428 0.498 23.52548 0.000506 -0.00178 2.1e-05 +Ta 0.70428 2.158 25.77 -0.000258 0.00217 0.000937 +Ta 3.05187 0.498 25.77 -0.000258 0.00217 0.000937 +24 +Lattice = "4.69519042969 0.0 0.0 0.0 3.31999993324 0.0 0.0 0.0 53.1199989319" Properties=species:S:1:pos:R:3:forces:R:3 energy=-279.124427 stress="-3756.4 -2886.7400000000002 -901.71 -2886.7400000000002 -10639.47 -867.12 -901.71 -867.12 7774.14" +Ta 2.34759 1.66 0.09121 0.000483 0.000237 0.002314 +Ta 0.0 0.0 0.09121 0.000483 0.000237 0.002314 +Ta 0.0 1.66 2.3361 -8.8e-05 0.001538 -0.010267 +Ta 2.34759 0.0 2.3361 -8.8e-05 0.001538 -0.010267 +Ta 2.34759 1.66 4.68536 0.003111 -0.003535 -0.007607 +Ta 0.0 0.0 4.68536 0.003111 -0.003535 -0.007607 +Ta 0.0 1.66 7.03392 -0.007146 0.021127 0.073723 +Ta 2.34759 0.0 7.03392 -0.007146 0.021127 0.073723 +Ta 2.34759 1.66 9.38594 0.013663 -0.10734 -0.116992 +Ta 0.0 0.0 9.38594 0.013663 -0.10734 -0.116992 +Ta 0.0 1.66 11.73648 0.067747 0.328568 -0.821295 +Ta 2.34759 0.0 11.73648 0.067747 0.328568 -0.821295 +Ta 3.28663 2.324 14.08712 -0.067747 -0.328568 0.821295 +Ta 0.93904 0.664 14.08712 -0.067747 -0.328568 0.821295 +Ta 0.93904 2.324 16.43764 -0.013663 0.10734 0.116992 +Ta 3.28663 0.664 16.43764 -0.013663 0.10734 0.116992 +Ta 3.28663 2.324 18.78966 0.007146 -0.021127 -0.073723 +Ta 0.93904 0.664 18.78966 0.007146 -0.021127 -0.073723 +Ta 0.93904 2.324 21.13823 -0.003111 0.003535 0.007607 +Ta 3.28663 0.664 21.13823 -0.003111 0.003535 0.007607 +Ta 3.28663 2.324 23.48739 8.8e-05 -0.001538 0.010267 +Ta 0.93904 0.664 23.48739 8.8e-05 -0.001538 0.010267 +Ta 0.93904 2.324 25.73229 -0.000483 -0.000237 -0.002314 +Ta 3.28663 0.664 25.73229 -0.000483 -0.000237 -0.002314 +24 +Lattice = "4.69519042969 0.0 0.0 0.0 3.31999993324 0.0 0.0 0.0 53.1199989319" Properties=species:S:1:pos:R:3:forces:R:3 energy=-279.901657 stress="-9712.87 0.0 0.0 0.0 -7972.25 0.0 0.0 0.0 -388.31" +Ta 2.34759 1.66 0.09122 0.0 0.0 -1.6e-05 +Ta 0.0 0.0 0.09122 0.0 0.0 -1.6e-05 +Ta 0.0 1.66 2.33609 0.0 0.0 0.000319 +Ta 2.34759 0.0 2.33609 0.0 0.0 0.000319 +Ta 2.34759 1.66 4.68537 0.0 0.0 0.0004 +Ta 0.0 0.0 4.68537 0.0 0.0 0.0004 +Ta 0.0 1.66 7.03419 0.0 0.0 9.3e-05 +Ta 2.34759 0.0 7.03419 0.0 0.0 9.3e-05 +Ta 2.34759 1.66 9.38555 0.0 0.0 -0.000298 +Ta 0.0 0.0 9.38555 0.0 0.0 -0.000298 +Ta 0.0 1.66 11.73665 0.0 0.0 -0.000507 +Ta 2.34759 0.0 11.73665 0.0 0.0 -0.000507 +Ta 2.34759 1.66 14.08695 0.0 0.0 0.000507 +Ta 0.0 0.0 14.08695 0.0 0.0 0.000507 +Ta 0.0 1.66 16.43803 0.0 0.0 0.000298 +Ta 2.34759 0.0 16.43803 0.0 0.0 0.000298 +Ta 2.34759 1.66 18.78939 0.0 0.0 -9.3e-05 +Ta 0.0 0.0 18.78939 0.0 0.0 -9.3e-05 +Ta 0.0 1.66 21.13822 0.0 0.0 -0.0004 +Ta 2.34759 0.0 21.13822 0.0 0.0 -0.0004 +Ta 2.34759 1.66 23.4874 0.0 0.0 -0.000319 +Ta 0.0 0.0 23.4874 0.0 0.0 -0.000319 +Ta 0.0 1.66 25.73228 0.0 0.0 1.6e-05 +Ta 2.34759 0.0 25.73228 0.0 0.0 1.6e-05 +24 +Lattice = "4.69519042969 0.0 0.0 0.0 3.31999993324 0.0 0.0 0.0 53.1199989319" Properties=species:S:1:pos:R:3:forces:R:3 energy=-279.79264 stress="-9277.630000000001 -706.52 -1762.12 -706.52 -7720.29 -1609.51 -1762.12 -1609.51 -420.21999999999997" +Ta 2.34759 1.66 0.0871 -0.000184 -0.001656 0.000674 +Ta 0.0 0.0 0.0871 -0.000184 -0.001656 0.000674 +Ta 0.0 1.66 2.332 -0.000294 0.000423 0.000306 +Ta 2.34759 0.0 2.332 -0.000294 0.000423 0.000306 +Ta 2.34759 1.66 4.68156 0.008643 -0.001357 -0.001853 +Ta 0.0 0.0 4.68156 0.008643 -0.001357 -0.001853 +Ta 0.0 1.66 7.03137 -0.006924 0.020397 -0.000275 +Ta 2.34759 0.0 7.03137 -0.006924 0.020397 -0.000275 +Ta 2.34759 1.66 9.38022 -0.01463 -0.087628 0.000622 +Ta 0.0 0.0 9.38022 -0.01463 -0.087628 0.000622 +Ta 0.0 1.66 11.72434 0.214497 0.348769 -0.000686 +Ta 2.34759 0.0 11.72434 0.214497 0.348769 -0.000686 +Ta 2.58235 1.826 14.09926 -0.214497 -0.348769 0.000686 +Ta 0.23476 0.166 14.09926 -0.214497 -0.348769 0.000686 +Ta 0.23476 1.826 16.44336 0.01463 0.087628 -0.000622 +Ta 2.58235 0.166 16.44336 0.01463 0.087628 -0.000622 +Ta 2.58235 1.826 18.79221 0.006924 -0.020397 0.000275 +Ta 0.23476 0.166 18.79221 0.006924 -0.020397 0.000275 +Ta 0.23476 1.826 21.14203 -0.008643 0.001357 0.001853 +Ta 2.58235 0.166 21.14203 -0.008643 0.001357 0.001853 +Ta 2.58235 1.826 23.49149 0.000294 -0.000423 -0.000306 +Ta 0.23476 0.166 23.49149 0.000294 -0.000423 -0.000306 +Ta 0.23476 1.826 25.7364 0.000184 0.001656 -0.000674 +Ta 2.58235 0.166 25.7364 0.000184 0.001656 -0.000674 +24 +Lattice = "4.69519042969 0.0 0.0 0.0 3.31999993324 0.0 0.0 0.0 53.1199989319" Properties=species:S:1:pos:R:3:forces:R:3 energy=-279.896025 stress="-9868.86 0.0 0.0 0.0 -8124.259999999999 0.0 0.0 0.0 -554.9" +Ta 2.34759 1.66 0.09121 0.0 0.0 0.000107 +Ta 0.0 0.0 0.09121 0.0 0.0 0.000107 +Ta 0.0 1.66 2.3361 0.0 0.0 -9.8e-05 +Ta 2.34759 0.0 2.3361 0.0 0.0 -9.8e-05 +Ta 2.34759 1.66 4.68536 0.0 0.0 0.000111 +Ta 0.0 0.0 4.68536 0.0 0.0 0.000111 +Ta 0.0 1.66 7.03392 0.0 0.0 0.002832 +Ta 2.34759 0.0 7.03392 0.0 0.0 0.002832 +Ta 2.34759 1.66 9.38594 0.0 0.0 -0.004127 +Ta 0.0 0.0 9.38594 0.0 0.0 -0.004127 +Ta 0.0 1.66 11.73648 0.0 0.0 0.001737 +Ta 2.34759 0.0 11.73648 0.0 0.0 0.001737 +Ta 4.69519 0.0 14.08712 0.0 0.0 -0.001737 +Ta 2.3476 1.66 14.08712 0.0 0.0 -0.001737 +Ta 2.3476 0.0 16.43764 0.0 0.0 0.004127 +Ta 4.69519 1.66 16.43764 0.0 0.0 0.004127 +Ta 4.69519 0.0 18.78966 0.0 0.0 -0.002832 +Ta 2.3476 1.66 18.78966 0.0 0.0 -0.002832 +Ta 2.3476 0.0 21.13823 0.0 0.0 -0.000111 +Ta 4.69519 1.66 21.13823 0.0 0.0 -0.000111 +Ta 4.69519 0.0 23.48739 0.0 0.0 9.8e-05 +Ta 2.3476 1.66 23.48739 0.0 0.0 9.8e-05 +Ta 2.3476 0.0 25.73229 0.0 0.0 -0.000107 +Ta 4.69519 1.66 25.73229 0.0 0.0 -0.000107 +24 +Lattice = "4.69519042969 0.0 0.0 0.0 3.31999993324 0.0 0.0 0.0 53.1199989319" Properties=species:S:1:pos:R:3:forces:R:3 energy=-279.206496 stress="-6761.16 -2211.9399999999996 0.0 -2211.9399999999996 -14026.06 0.0 0.0 0.0 -201.45" +Ta 2.34759 1.66 0.026 0.0 0.0 -0.000166 +Ta 0.0 0.0 0.026 0.0 0.0 -0.000166 +Ta 0.0 1.66 2.2705 0.0 0.0 -0.000442 +Ta 2.34759 0.0 2.2705 0.0 0.0 -0.000442 +Ta 2.34759 1.66 4.61955 0.0 0.0 -0.001018 +Ta 0.0 0.0 4.61955 0.0 0.0 -0.001018 +Ta 0.0 1.66 6.97451 0.0 0.0 0.001141 +Ta 2.34759 0.0 6.97451 0.0 0.0 0.001141 +Ta 2.34759 1.66 9.30496 0.0 0.0 0.000143 +Ta 0.0 0.0 9.30496 0.0 0.0 0.000143 +Ta 0.0 1.66 11.66343 0.0 0.0 0.002124 +Ta 2.34759 0.0 11.66343 0.0 0.0 0.002124 +Ta 3.52139 2.49 14.16017 0.0 0.0 -0.002124 +Ta 1.1738 0.83 14.16017 0.0 0.0 -0.002124 +Ta 1.1738 2.49 16.51862 0.0 0.0 -0.000143 +Ta 3.52139 0.83 16.51862 0.0 0.0 -0.000143 +Ta 3.52139 2.49 18.84907 0.0 0.0 -0.001141 +Ta 1.1738 0.83 18.84907 0.0 0.0 -0.001141 +Ta 1.1738 2.49 21.20404 0.0 0.0 0.001018 +Ta 3.52139 0.83 21.20404 0.0 0.0 0.001018 +Ta 3.52139 2.49 23.55299 0.0 0.0 0.000442 +Ta 1.1738 0.83 23.55299 0.0 0.0 0.000442 +Ta 1.1738 2.49 25.7975 0.0 0.0 0.000166 +Ta 3.52139 0.83 25.7975 0.0 0.0 0.000166 +24 +Lattice = "4.69519042969 0.0 0.0 0.0 3.31999993324 0.0 0.0 0.0 53.1199989319" Properties=species:S:1:pos:R:3:forces:R:3 energy=-279.55564 stress="-7951.26 -1470.33 2322.88 -1470.33 -7086.45 2241.6200000000003 2322.88 2241.6200000000003 1394.24" +Ta 2.34759 1.66 0.09121 -6.8e-05 0.00218 0.002238 +Ta 0.0 0.0 0.09121 -6.8e-05 0.00218 0.002238 +Ta 0.0 1.66 2.3361 0.000372 -0.001531 -0.005316 +Ta 2.34759 0.0 2.3361 0.000372 -0.001531 -0.005316 +Ta 2.34759 1.66 4.68536 -0.011743 0.002192 -0.008604 +Ta 0.0 0.0 4.68536 -0.011743 0.002192 -0.008604 +Ta 0.0 1.66 7.03392 0.010535 -0.038081 0.05226 +Ta 2.34759 0.0 7.03392 0.010535 -0.038081 0.05226 +Ta 2.34759 1.66 9.38594 0.00905 0.147322 -0.015204 +Ta 0.0 0.0 9.38594 0.00905 0.147322 -0.015204 +Ta 0.0 1.66 11.73648 -0.255617 -0.52958 -0.348696 +Ta 2.34759 0.0 11.73648 -0.255617 -0.52958 -0.348696 +Ta 4.22567 2.988 14.08712 0.255617 0.52958 0.348696 +Ta 1.87808 1.328 14.08712 0.255617 0.52958 0.348696 +Ta 1.87808 2.988 16.43764 -0.00905 -0.147322 0.015204 +Ta 4.22567 1.328 16.43764 -0.00905 -0.147322 0.015204 +Ta 4.22567 2.988 18.78966 -0.010535 0.038081 -0.05226 +Ta 1.87808 1.328 18.78966 -0.010535 0.038081 -0.05226 +Ta 1.87808 2.988 21.13823 0.011743 -0.002192 0.008604 +Ta 4.22567 1.328 21.13823 0.011743 -0.002192 0.008604 +Ta 4.22567 2.988 23.48739 -0.000372 0.001531 0.005316 +Ta 1.87808 1.328 23.48739 -0.000372 0.001531 0.005316 +Ta 1.87808 2.988 25.73229 6.8e-05 -0.00218 -0.002238 +Ta 4.22567 1.328 25.73229 6.8e-05 -0.00218 -0.002238 +24 +Lattice = "4.69519042969 0.0 0.0 0.0 3.31999993324 0.0 0.0 0.0 53.1199989319" Properties=species:S:1:pos:R:3:forces:R:3 energy=-279.79264 stress="-9276.56 -705.96 1761.7 -705.96 -7718.9800000000005 1609.3500000000001 1761.7 1609.3500000000001 -417.65000000000003" +Ta 2.34759 1.66 0.08713 0.000184 0.001656 0.000681 +Ta 0.0 0.0 0.08713 0.000184 0.001656 0.000681 +Ta 0.0 1.66 2.33202 0.000294 -0.000424 0.000309 +Ta 2.34759 0.0 2.33202 0.000294 -0.000424 0.000309 +Ta 2.34759 1.66 4.68158 -0.008643 0.001357 -0.001844 +Ta 0.0 0.0 4.68158 -0.008643 0.001357 -0.001844 +Ta 0.0 1.66 7.03138 0.006924 -0.020398 -0.000267 +Ta 2.34759 0.0 7.03138 0.006924 -0.020398 -0.000267 +Ta 2.34759 1.66 9.38023 0.01463 0.087629 0.00063 +Ta 0.0 0.0 9.38023 0.01463 0.087629 0.00063 +Ta 0.0 1.66 11.72434 -0.214496 -0.34877 -0.000676 +Ta 2.34759 0.0 11.72434 -0.214496 -0.34877 -0.000676 +Ta 4.46043 3.154 14.09926 0.214496 0.34877 0.000676 +Ta 2.11284 1.494 14.09926 0.214496 0.34877 0.000676 +Ta 2.11284 3.154 16.44335 -0.01463 -0.087629 -0.00063 +Ta 4.46043 1.494 16.44335 -0.01463 -0.087629 -0.00063 +Ta 4.46043 3.154 18.7922 -0.006924 0.020398 0.000267 +Ta 2.11284 1.494 18.7922 -0.006924 0.020398 0.000267 +Ta 2.11284 3.154 21.14201 0.008643 -0.001357 0.001844 +Ta 4.46043 1.494 21.14201 0.008643 -0.001357 0.001844 +Ta 4.46043 3.154 23.49147 -0.000294 0.000424 -0.000309 +Ta 2.11284 1.494 23.49147 -0.000294 0.000424 -0.000309 +Ta 2.11284 3.154 25.73637 -0.000184 -0.001656 -0.000681 +Ta 4.46043 1.494 25.73637 -0.000184 -0.001656 -0.000681 diff --git a/examples/PACKAGES/pod/Ta/XYZ/GSF_112.xyz b/examples/PACKAGES/pod/Ta/XYZ/GSF_112.xyz new file mode 100644 index 0000000000..71e317e259 --- /dev/null +++ b/examples/PACKAGES/pod/Ta/XYZ/GSF_112.xyz @@ -0,0 +1,704 @@ +30 +Lattice = "5.75041007996 0.0 0.0 0.0 4.69518995285 0.0 0.0 0.0 39.8400001526" Properties=species:S:1:pos:R:3:forces:R:3 energy=-345.175835 stress="-13147.16 0.0 -3780.86 0.0 -8634.359999999999 0.0 -3780.86 0.0 -262.94" +Ta 0.9892 0.0 2.67612 0.024552 0.0 -0.00195 +Ta 0.00727 2.34759 4.02628 0.020645 0.0 9.3e-05 +Ta 2.88247 2.34759 4.02628 0.020645 0.0 9.3e-05 +Ta 0.17997 0.0 0.13381 0.04617 0.0 -0.000386 +Ta 3.05517 0.0 0.13381 0.04617 0.0 -0.000386 +Ta 1.87083 2.34759 1.2728 -0.032821 0.0 -0.001196 +Ta 4.74604 2.34759 1.2728 -0.032821 0.0 -0.001196 +Ta 3.86441 0.0 2.67612 0.024552 0.0 -0.00195 +Ta 0.94648 2.34759 6.72012 0.031811 0.0 0.000572 +Ta 0.00117 0.0 8.09323 0.426675 0.0 0.000202 +Ta 2.87637 0.0 8.09323 0.426675 0.0 0.000202 +Ta 1.91123 0.0 5.35809 -0.1254 0.0 0.000587 +Ta 4.78644 0.0 5.35809 -0.1254 0.0 0.000587 +Ta 3.82169 2.34759 6.72012 0.031811 0.0 0.000572 +Ta 1.9168 2.34759 9.40413 -0.175762 0.0 0.000278 +Ta 4.79201 2.34759 9.40413 -0.175762 0.0 0.000278 +Ta 2.10731 0.0 10.91795 0.187758 0.0 0.000468 +Ta 1.162 2.34759 12.2439 -0.520663 0.0 0.000295 +Ta 4.0372 2.34759 12.2439 -0.520663 0.0 0.000295 +Ta 4.98252 0.0 10.91795 0.187758 0.0 0.000468 +Ta 2.10121 2.34759 14.96595 0.131217 0.0 0.000175 +Ta 1.11928 0.0 16.30656 -0.015432 0.0 6e-06 +Ta 3.99448 0.0 16.30656 -0.015432 0.0 6e-06 +Ta 3.11285 2.34759 17.71541 0.007977 0.0 0.000401 +Ta 0.23765 2.34759 17.71541 0.007977 0.0 0.000401 +Ta 3.07245 0.0 13.62798 0.021452 0.0 0.000107 +Ta 0.19725 0.0 13.62798 0.021452 0.0 0.000107 +Ta 4.97642 2.34759 14.96595 0.131217 0.0 0.000175 +Ta 1.92851 0.0 18.85304 -0.028176 0.0 0.00035 +Ta 4.80372 0.0 18.85304 -0.028176 0.0 0.00035 +30 +Lattice = "5.75041007996 0.0 0.0 0.0 4.69518995285 0.0 0.0 0.0 39.8400001526" Properties=species:S:1:pos:R:3:forces:R:3 energy=-346.361714 stress="-10339.27 0.0 -4235.839999999999 0.0 -10300.0 0.0 -4235.839999999999 0.0 -143.8" +Ta 0.9892 0.0 2.71788 0.039491 0.0 -0.003174 +Ta 0.00727 2.34759 4.0686 -0.006941 0.0 0.000225 +Ta 2.88247 2.34759 4.0686 -0.006941 0.0 0.000225 +Ta 0.17997 0.0 0.18084 0.006017 0.0 -0.000536 +Ta 3.05517 0.0 0.18084 0.006017 0.0 -0.000536 +Ta 1.87083 2.34759 1.32379 -0.009843 0.0 -0.001904 +Ta 4.74604 2.34759 1.32379 -0.009843 0.0 -0.001904 +Ta 3.86441 0.0 2.71788 0.039491 0.0 -0.003174 +Ta 0.94648 2.34759 6.76401 0.031952 0.0 0.001417 +Ta 0.00117 0.0 8.13836 0.170121 0.0 0.00142 +Ta 2.87637 0.0 8.13836 0.170121 0.0 0.00142 +Ta 1.91123 0.0 5.41435 -0.068665 0.0 0.001093 +Ta 4.78644 0.0 5.41435 -0.068665 0.0 0.001093 +Ta 3.82169 2.34759 6.76401 0.031952 0.0 0.001417 +Ta 1.9168 2.34759 9.47269 0.56983 0.0 0.001115 +Ta 4.79201 2.34759 9.47269 0.56983 0.0 0.001115 +Ta 1.24475 0.0 10.85237 -0.591123 0.0 0.000193 +Ta 0.29944 2.34759 12.20261 -0.170693 0.0 -0.00076 +Ta 3.17464 2.34759 12.20261 -0.170693 0.0 -0.00076 +Ta 4.11996 0.0 10.85237 -0.591123 0.0 0.000193 +Ta 1.23865 2.34759 14.90362 0.062003 0.0 -0.000147 +Ta 0.25672 0.0 16.25811 0.014238 0.0 6.7e-05 +Ta 3.13192 0.0 16.25811 0.014238 0.0 6.7e-05 +Ta 2.25029 2.34759 17.65366 -0.022348 0.0 0.000828 +Ta 5.1255 2.34759 17.65366 -0.022348 0.0 0.000828 +Ta 2.20989 0.0 13.56973 -0.01066 0.0 -0.000183 +Ta 5.0851 0.0 13.56973 -0.01066 0.0 -0.000183 +Ta 4.11386 2.34759 14.90362 0.062003 0.0 -0.000147 +Ta 1.06595 0.0 18.79472 -0.01338 0.0 0.000344 +Ta 3.94116 0.0 18.79472 -0.01338 0.0 0.000344 +30 +Lattice = "5.75041007996 0.0 0.0 0.0 4.69518995285 0.0 0.0 0.0 39.8400001526" Properties=species:S:1:pos:R:3:forces:R:3 energy=-345.795524 stress="-11480.130000000001 0.0 -5932.89 0.0 -5542.72 0.0 -5932.89 0.0 3462.38" +Ta 0.9892 0.0 2.7203 0.054393 0.0 0.051613 +Ta 0.00727 2.34759 4.07239 0.011422 0.0 0.01044 +Ta 2.88247 2.34759 4.07239 0.011422 0.0 0.01044 +Ta 0.17997 0.0 0.18449 0.010146 0.0 -0.022298 +Ta 3.05517 0.0 0.18449 0.010146 0.0 -0.022298 +Ta 1.87083 2.34759 1.32776 -0.011079 0.0 -0.021669 +Ta 4.74604 2.34759 1.32776 -0.011079 0.0 -0.021669 +Ta 3.86441 0.0 2.7203 0.054393 0.0 0.051613 +Ta 0.94648 2.34759 6.77133 0.038911 0.0 -0.069106 +Ta 0.00117 0.0 8.1367 0.287747 0.0 -0.1262 +Ta 2.87637 0.0 8.1367 0.287747 0.0 -0.1262 +Ta 1.91123 0.0 5.41489 -0.141892 0.0 0.03774 +Ta 4.78644 0.0 5.41489 -0.141892 0.0 0.03774 +Ta 3.82169 2.34759 6.77133 0.038911 0.0 -0.069106 +Ta 1.9168 2.34759 9.48769 0.847487 0.0 -0.484094 +Ta 4.79201 2.34759 9.48769 0.847487 0.0 -0.484094 +Ta 1.53227 0.0 10.83871 -0.88891 0.0 0.460491 +Ta 0.58696 2.34759 12.20409 -0.291722 0.0 0.122028 +Ta 3.46216 2.34759 12.20409 -0.291722 0.0 0.122028 +Ta 4.40748 0.0 10.83871 -0.88891 0.0 0.460491 +Ta 1.52617 2.34759 14.90296 0.134409 0.0 -0.060843 +Ta 0.54424 0.0 16.25507 -0.007639 0.0 -0.054033 +Ta 3.41944 0.0 16.25507 -0.007639 0.0 -0.054033 +Ta 2.53781 2.34759 17.64762 -0.034954 0.0 0.011635 +Ta 5.41302 2.34759 17.64762 -0.034954 0.0 0.011635 +Ta 2.49741 0.0 13.56045 -0.007731 0.0 0.131746 +Ta 5.37262 0.0 13.56045 -0.007731 0.0 0.131746 +Ta 4.40138 2.34759 14.90296 0.134409 0.0 -0.060843 +Ta 1.35347 0.0 18.79091 -0.000588 0.0 0.012548 +Ta 4.22868 0.0 18.79091 -0.000588 0.0 0.012548 +30 +Lattice = "5.75041007996 0.0 0.0 0.0 4.69518995285 0.0 0.0 0.0 39.8400001526" Properties=species:S:1:pos:R:3:forces:R:3 energy=-345.164602 stress="-11863.390000000001 0.0 -2699.1299999999997 0.0 -8952.85 0.0 -2699.1299999999997 0.0 -224.73000000000002" +Ta 0.9892 0.0 2.67528 0.007638 0.0 0.001035 +Ta 0.00727 2.34759 4.02882 0.030305 0.0 -0.001775 +Ta 2.88247 2.34759 4.02882 0.030305 0.0 -0.001775 +Ta 0.17997 0.0 0.13405 0.029187 0.0 -0.000966 +Ta 3.05517 0.0 0.13405 0.029187 0.0 -0.000966 +Ta 1.87083 2.34759 1.27454 -0.02274 0.0 0.00023 +Ta 4.74604 2.34759 1.27454 -0.02274 0.0 0.00023 +Ta 3.86441 0.0 2.67528 0.007638 0.0 0.001035 +Ta 0.94648 2.34759 6.72231 -0.027764 0.0 -0.000181 +Ta 0.00117 0.0 8.09205 0.529066 0.0 -0.000552 +Ta 2.87637 0.0 8.09205 0.529066 0.0 -0.000552 +Ta 1.91123 0.0 5.3597 -0.091215 0.0 -0.000447 +Ta 4.78644 0.0 5.3597 -0.091215 0.0 -0.000447 +Ta 3.82169 2.34759 6.72231 -0.027764 0.0 -0.000181 +Ta 1.9168 2.34759 9.39558 -0.613631 0.0 -0.000278 +Ta 4.79201 2.34759 9.39558 -0.613631 0.0 -0.000278 +Ta 2.39483 0.0 10.92856 0.685544 0.0 -0.000982 +Ta 1.44952 2.34759 12.2419 -0.636467 0.0 0.000459 +Ta 4.32472 2.34759 12.2419 -0.636467 0.0 0.000459 +Ta 5.27004 0.0 10.92856 0.685544 0.0 -0.000982 +Ta 2.38873 2.34759 14.96563 0.083017 0.0 0.000884 +Ta 1.4068 0.0 16.30385 -0.037081 0.0 0.000794 +Ta 4.282 0.0 16.30385 -0.037081 0.0 0.000794 +Ta 3.40038 2.34759 17.71704 0.037388 0.0 0.000623 +Ta 0.52518 2.34759 17.71704 0.037388 0.0 0.000623 +Ta 3.35997 0.0 13.62371 0.068589 0.0 -0.000292 +Ta 0.48477 0.0 13.62371 0.068589 0.0 -0.000292 +Ta 5.26394 2.34759 14.96563 0.083017 0.0 0.000884 +Ta 2.21604 0.0 18.85233 -0.041835 0.0 0.001449 +Ta 5.09124 0.0 18.85233 -0.041835 0.0 0.001449 +30 +Lattice = "5.75041007996 0.0 0.0 0.0 4.69518995285 0.0 0.0 0.0 39.8400001526" Properties=species:S:1:pos:R:3:forces:R:3 energy=-346.593523 stress="-9414.98 0.0 -281.99 0.0 -11857.62 0.0 -281.99 0.0 174.60999999999999" +Ta 0.9892 0.0 2.7203 0.00126 0.0 -0.000952 +Ta 0.00727 2.34759 4.07239 0.002425 0.0 -0.000721 +Ta 2.88247 2.34759 4.07239 0.002425 0.0 -0.000721 +Ta 0.17997 0.0 0.18449 0.003483 0.0 -0.001569 +Ta 3.05517 0.0 0.18449 0.003483 0.0 -0.001569 +Ta 1.87083 2.34759 1.32776 -0.001158 0.0 -0.001292 +Ta 4.74604 2.34759 1.32776 -0.001158 0.0 -0.001292 +Ta 3.86441 0.0 2.7203 0.00126 0.0 -0.000952 +Ta 0.94648 2.34759 6.77133 -0.000275 0.0 -0.000556 +Ta 0.00117 0.0 8.1367 0.001745 0.0 0.000187 +Ta 2.87637 0.0 8.1367 0.001745 0.0 0.000187 +Ta 1.91123 0.0 5.41489 0.00171 0.0 -0.000333 +Ta 4.78644 0.0 5.41489 0.00171 0.0 -0.000333 +Ta 3.82169 2.34759 6.77133 -0.000275 0.0 -0.000556 +Ta 1.9168 2.34759 9.48769 0.0 0.0 0.0 +Ta 4.79201 2.34759 9.48769 0.0 0.0 0.0 +Ta 0.95723 0.0 10.83871 -0.001745 0.0 -0.000187 +Ta 0.01192 2.34759 12.20409 0.000275 0.0 0.000556 +Ta 2.88712 2.34759 12.20409 0.000275 0.0 0.000556 +Ta 3.83244 0.0 10.83871 -0.001745 0.0 -0.000187 +Ta 0.95113 2.34759 14.90296 -0.002425 0.0 0.000721 +Ta 5.71961 0.0 16.25507 -0.00126 0.0 0.000952 +Ta 2.8444 0.0 16.25507 -0.00126 0.0 0.000952 +Ta 1.96277 2.34759 17.64762 0.001158 0.0 0.001292 +Ta 4.83798 2.34759 17.64762 0.001158 0.0 0.001292 +Ta 1.92237 0.0 13.56045 -0.00171 0.0 0.000333 +Ta 4.79758 0.0 13.56045 -0.00171 0.0 0.000333 +Ta 3.82634 2.34759 14.90296 -0.002425 0.0 0.000721 +Ta 0.77843 0.0 18.79091 -0.003483 0.0 0.001569 +Ta 3.65364 0.0 18.79091 -0.003483 0.0 0.001569 +30 +Lattice = "5.75041007996 0.0 0.0 0.0 4.69518995285 0.0 0.0 0.0 39.8400001526" Properties=species:S:1:pos:R:3:forces:R:3 energy=-346.396186 stress="-10475.46 0.0 3307.63 0.0 -12303.68 0.0 3307.63 0.0 -222.97" +Ta 0.9892 0.0 2.7089 -0.03377 0.0 0.000745 +Ta 0.00727 2.34759 4.06352 0.026744 0.0 -0.000861 +Ta 2.88247 2.34759 4.06352 0.026744 0.0 -0.000861 +Ta 0.17997 0.0 0.17306 0.009028 0.0 8.9e-05 +Ta 3.05517 0.0 0.17306 0.009028 0.0 8.9e-05 +Ta 1.87083 2.34759 1.31619 -0.000498 0.0 -6.9e-05 +Ta 4.74604 2.34759 1.31619 -0.000498 0.0 -6.9e-05 +Ta 3.86441 0.0 2.7089 -0.03377 0.0 0.000745 +Ta 0.94648 2.34759 6.76338 -0.065394 0.0 0.000752 +Ta 0.00117 0.0 8.1099 -0.098249 0.0 -0.002005 +Ta 2.87637 0.0 8.1099 -0.098249 0.0 -0.002005 +Ta 1.91123 0.0 5.40302 0.044662 0.0 -0.00054 +Ta 4.78644 0.0 5.40302 0.044662 0.0 -0.00054 +Ta 3.82169 2.34759 6.76338 -0.065394 0.0 0.000752 +Ta 1.9168 2.34759 9.48192 -0.476879 0.0 0.000537 +Ta 4.79201 2.34759 9.48192 -0.476879 0.0 0.000537 +Ta 3.54491 0.0 10.84588 0.484374 0.0 -0.000329 +Ta 2.59961 2.34759 12.23162 0.102585 0.0 0.000934 +Ta 5.47481 2.34759 12.23162 0.102585 0.0 0.000934 +Ta 0.66971 0.0 10.84588 0.484374 0.0 -0.000329 +Ta 3.53881 2.34759 14.91622 -0.038582 0.0 0.000491 +Ta 2.55688 0.0 16.2663 -0.029184 0.0 8.5e-05 +Ta 5.43208 0.0 16.2663 -0.029184 0.0 8.5e-05 +Ta 4.55046 2.34759 17.66134 0.026269 0.0 -0.000704 +Ta 1.67526 2.34759 17.66134 0.026269 0.0 -0.000704 +Ta 4.51005 0.0 13.57023 0.044788 0.0 0.000159 +Ta 1.63485 0.0 13.57023 0.044788 0.0 0.000159 +Ta 0.66361 2.34759 14.91622 -0.038582 0.0 0.000491 +Ta 3.36612 0.0 18.80388 0.004104 0.0 0.000717 +Ta 0.49092 0.0 18.80388 0.004104 0.0 0.000717 +30 +Lattice = "5.75041007996 0.0 0.0 0.0 4.69518995285 0.0 0.0 0.0 39.8400001526" Properties=species:S:1:pos:R:3:forces:R:3 energy=-345.319406 stress="-11416.52 0.0 -757.17 0.0 -9138.949999999999 0.0 -757.17 0.0 -340.37" +Ta 0.9892 0.0 2.6792 -0.016362 0.0 0.000549 +Ta 0.00727 2.34759 4.0346 0.061621 0.0 0.000282 +Ta 2.88247 2.34759 4.0346 0.061621 0.0 0.000282 +Ta 0.17997 0.0 0.13955 0.017834 0.0 -0.000235 +Ta 3.05517 0.0 0.13955 0.017834 0.0 -0.000235 +Ta 1.87083 2.34759 1.28166 -0.013104 0.0 -5.3e-05 +Ta 4.74604 2.34759 1.28166 -0.013104 0.0 -5.3e-05 +Ta 3.86441 0.0 2.6792 -0.016362 0.0 0.000549 +Ta 0.94648 2.34759 6.7292 -0.109435 0.0 -0.002041 +Ta 0.00117 0.0 8.07884 0.457863 0.0 0.000169 +Ta 2.87637 0.0 8.07884 0.457863 0.0 0.000169 +Ta 1.91123 0.0 5.36942 -0.062934 0.0 -0.000236 +Ta 4.78644 0.0 5.36942 -0.062934 0.0 -0.000236 +Ta 3.82169 2.34759 6.7292 -0.109435 0.0 -0.002041 +Ta 1.9168 2.34759 9.41051 -0.711692 0.0 0.000101 +Ta 4.79201 2.34759 9.41051 -0.711692 0.0 0.000101 +Ta 2.68235 0.0 10.91706 0.761406 0.0 -0.00084 +Ta 1.73705 2.34759 12.25543 -0.48479 0.0 0.001087 +Ta 4.61225 2.34759 12.25543 -0.48479 0.0 0.001087 +Ta 5.55756 0.0 10.91706 0.761406 0.0 -0.00084 +Ta 2.67625 2.34759 14.95587 0.044573 0.0 0.001069 +Ta 1.69432 0.0 16.29727 -0.054726 0.0 0.000221 +Ta 4.56952 0.0 16.29727 -0.054726 0.0 0.000221 +Ta 3.6879 2.34759 17.70919 0.045804 0.0 -0.000493 +Ta 0.8127 2.34759 17.70919 0.045804 0.0 -0.000493 +Ta 3.64749 0.0 13.61175 0.101011 0.0 0.001537 +Ta 0.77229 0.0 13.61175 0.101011 0.0 0.001537 +Ta 5.55146 2.34759 14.95587 0.044573 0.0 0.001069 +Ta 2.50356 0.0 18.84582 -0.037068 0.0 -0.001117 +Ta 5.37876 0.0 18.84582 -0.037068 0.0 -0.001117 +30 +Lattice = "5.75041007996 0.0 0.0 0.0 4.69518995285 0.0 0.0 0.0 39.8400001526" Properties=species:S:1:pos:R:3:forces:R:3 energy=-345.594794 stress="-11819.76 0.0 1952.92 0.0 -9519.769999999999 0.0 1952.92 0.0 -130.88" +Ta 0.9892 0.0 2.68665 -0.031396 0.0 0.000256 +Ta 0.00727 2.34759 4.04268 0.07751 0.0 -0.000764 +Ta 2.88247 2.34759 4.04268 0.07751 0.0 -0.000764 +Ta 0.17997 0.0 0.14906 0.014641 0.0 -0.00412 +Ta 3.05517 0.0 0.14906 0.014641 0.0 -0.00412 +Ta 1.87083 2.34759 1.29212 -0.010131 0.0 -0.002448 +Ta 4.74604 2.34759 1.29212 -0.010131 0.0 -0.002448 +Ta 3.86441 0.0 2.68665 -0.031396 0.0 0.000256 +Ta 0.94648 2.34759 6.73839 -0.134831 0.0 0.001428 +Ta 0.00117 0.0 8.07155 0.239952 0.0 0.002962 +Ta 2.87637 0.0 8.07155 0.239952 0.0 0.002962 +Ta 1.91123 0.0 5.38052 -0.030029 0.0 -0.000509 +Ta 4.78644 0.0 5.38052 -0.030029 0.0 -0.000509 +Ta 3.82169 2.34759 6.73839 -0.134831 0.0 0.001428 +Ta 1.9168 2.34759 9.43202 -0.708973 0.0 0.000446 +Ta 4.79201 2.34759 9.43202 -0.708973 0.0 0.000446 +Ta 2.96987 0.0 10.89606 0.708813 0.0 0.000528 +Ta 2.02457 2.34759 12.26428 -0.203649 0.0 0.002064 +Ta 4.89977 2.34759 12.26428 -0.203649 0.0 0.002064 +Ta 0.09467 0.0 10.89606 0.708813 0.0 0.000528 +Ta 2.96377 2.34759 14.9433 0.014742 0.0 -0.000587 +Ta 1.98184 0.0 16.28932 -0.077212 0.0 0.001835 +Ta 4.85704 0.0 16.28932 -0.077212 0.0 0.001835 +Ta 3.97542 2.34759 17.69607 0.052551 0.0 -9.3e-05 +Ta 1.10022 2.34759 17.69607 0.052551 0.0 -9.3e-05 +Ta 3.93501 0.0 13.59778 0.097817 0.0 0.000127 +Ta 1.05981 0.0 13.59778 0.097817 0.0 0.000127 +Ta 0.08857 2.34759 14.9433 0.014742 0.0 -0.000587 +Ta 2.79108 0.0 18.83554 -0.009805 0.0 -0.001124 +Ta 5.66629 0.0 18.83554 -0.009805 0.0 -0.001124 +30 +Lattice = "5.75041007996 0.0 0.0 0.0 4.69518995285 0.0 0.0 0.0 39.8400001526" Properties=species:S:1:pos:R:3:forces:R:3 energy=-345.98566 stress="-11481.859999999999 0.0 3919.02 0.0 -10708.259999999998 0.0 3919.02 0.0 -234.91" +Ta 0.9892 0.0 2.69672 -0.042372 0.0 -0.001938 +Ta 0.00727 2.34759 4.05296 0.05908 0.0 0.000592 +Ta 2.88247 2.34759 4.05296 0.05908 0.0 0.000592 +Ta 0.17997 0.0 0.16008 0.012695 0.0 0.000742 +Ta 3.05517 0.0 0.16008 0.012695 0.0 0.000742 +Ta 1.87083 2.34759 1.30375 -0.006266 0.0 -0.00108 +Ta 4.74604 2.34759 1.30375 -0.006266 0.0 -0.00108 +Ta 3.86441 0.0 2.69672 -0.042372 0.0 -0.001938 +Ta 0.94648 2.34759 6.75108 -0.115544 0.0 0.001071 +Ta 0.00117 0.0 8.08344 0.015442 0.0 7e-06 +Ta 2.87637 0.0 8.08344 0.015442 0.0 7e-06 +Ta 1.91123 0.0 5.39189 0.017023 0.0 -0.000768 +Ta 4.78644 0.0 5.39189 0.017023 0.0 -0.000768 +Ta 3.82169 2.34759 6.75108 -0.115544 0.0 0.001071 +Ta 1.9168 2.34759 9.45911 -0.69384 0.0 0.000691 +Ta 4.79201 2.34759 9.45911 -0.69384 0.0 0.000691 +Ta 3.25739 0.0 10.86943 0.687279 0.0 -0.000892 +Ta 2.31209 2.34759 12.25603 0.025406 0.0 0.001977 +Ta 5.18729 2.34759 12.25603 0.025406 0.0 0.001977 +Ta 0.38219 0.0 10.86943 0.687279 0.0 -0.000892 +Ta 3.25129 2.34759 14.92962 -0.021568 0.0 -0.000155 +Ta 2.26936 0.0 16.27869 -0.069625 0.0 6e-05 +Ta 5.14456 0.0 16.27869 -0.069625 0.0 6e-05 +Ta 4.26294 2.34759 17.67903 0.042589 0.0 -0.000517 +Ta 1.38774 2.34759 17.67903 0.042589 0.0 -0.000517 +Ta 4.22253 0.0 13.58337 0.088627 0.0 -0.000326 +Ta 1.34733 0.0 13.58337 0.088627 0.0 -0.000326 +Ta 0.37609 2.34759 14.92962 -0.021568 0.0 -0.000155 +Ta 3.0786 0.0 18.82016 0.001073 0.0 0.000537 +Ta 0.2034 0.0 18.82016 0.001073 0.0 0.000537 +30 +Lattice = "5.75041007996 0.0 0.0 0.0 4.69518995285 0.0 0.0 0.0 39.8400001526" Properties=species:S:1:pos:R:3:forces:R:3 energy=-345.383994 stress="-14034.28 0.0 -4327.110000000001 0.0 -7778.13 0.0 -4327.110000000001 0.0 -145.71" +Ta 0.9892 0.0 2.68561 0.041017 0.0 -0.001969 +Ta 0.00727 2.34759 4.03469 0.0126 0.0 -0.000764 +Ta 2.88247 2.34759 4.03469 0.0126 0.0 -0.000764 +Ta 0.17997 0.0 0.14398 0.044685 0.0 -0.000337 +Ta 3.05517 0.0 0.14398 0.044685 0.0 -0.000337 +Ta 1.87083 2.34759 1.28198 -0.034873 0.0 -0.000989 +Ta 4.74604 2.34759 1.28198 -0.034873 0.0 -0.000989 +Ta 3.86441 0.0 2.68561 0.041017 0.0 -0.001969 +Ta 0.94648 2.34759 6.72523 0.015472 0.0 9.3e-05 +Ta 0.00117 0.0 8.09686 0.374311 0.0 -0.000718 +Ta 2.87637 0.0 8.09686 0.374311 0.0 -0.000718 +Ta 1.91123 0.0 5.37077 -0.13875 0.0 0.000234 +Ta 4.78644 0.0 5.37077 -0.13875 0.0 0.000234 +Ta 3.82169 2.34759 6.72523 0.015472 0.0 9.3e-05 +Ta 1.9168 2.34759 9.42312 0.226851 0.0 -0.000505 +Ta 4.79201 2.34759 9.42312 0.226851 0.0 -0.000505 +Ta 1.81979 0.0 10.90137 -0.264136 0.0 0.001111 +Ta 0.87448 2.34759 12.24514 -0.397596 0.0 -1.3e-05 +Ta 3.74968 2.34759 12.24514 -0.397596 0.0 -1.3e-05 +Ta 4.695 0.0 10.90137 -0.264136 0.0 0.001111 +Ta 1.81369 2.34759 14.95092 0.137584 0.0 0.001218 +Ta 0.83176 0.0 16.29656 -0.006289 0.0 -0.001428 +Ta 3.70696 0.0 16.29656 -0.006289 0.0 -0.001428 +Ta 2.82533 2.34759 17.69976 -0.018746 0.0 0.000228 +Ta 5.70054 2.34759 17.69976 -0.018746 0.0 0.000228 +Ta 2.78493 0.0 13.62057 0.025174 0.0 0.001582 +Ta 5.66014 0.0 13.62057 0.025174 0.0 0.001582 +Ta 4.6889 2.34759 14.95092 0.137584 0.0 0.001218 +Ta 1.64099 0.0 18.83881 -0.017303 0.0 0.002258 +Ta 4.5162 0.0 18.83881 -0.017303 0.0 0.002258 +30 +Lattice = "5.75041007996 0.0 0.0 0.0 4.69518995285 0.0 0.0 0.0 39.8400001526" Properties=species:S:1:pos:R:3:forces:R:3 energy=-346.582564 stress="-9591.91 0.0 -296.03000000000003 0.0 -12027.84 0.0 -296.03000000000003 0.0 -17.44" +Ta 0.9892 0.0 2.72001 0.001297 0.0 -0.000868 +Ta 0.00727 2.34759 4.07221 0.002338 0.0 -0.000918 +Ta 2.88247 2.34759 4.07221 0.002338 0.0 -0.000918 +Ta 0.17997 0.0 0.18416 0.004037 0.0 -0.001343 +Ta 3.05517 0.0 0.18416 0.004037 0.0 -0.001343 +Ta 1.87083 2.34759 1.32742 -0.00151 0.0 -0.00104 +Ta 4.74604 2.34759 1.32742 -0.00151 0.0 -0.00104 +Ta 3.86441 0.0 2.72001 0.001297 0.0 -0.000868 +Ta 0.94648 2.34759 6.77122 -0.000493 0.0 -5.2e-05 +Ta 0.00117 0.0 8.13674 0.002006 0.0 -0.000634 +Ta 2.87637 0.0 8.13674 0.002006 0.0 -0.000634 +Ta 1.91123 0.0 5.41485 0.001966 0.0 -0.001189 +Ta 4.78644 0.0 5.41485 0.001966 0.0 -0.001189 +Ta 3.82169 2.34759 6.77122 -0.000493 0.0 -5.2e-05 +Ta 1.9168 2.34759 9.48769 0.0 0.0 0.0 +Ta 4.79201 2.34759 9.48769 0.0 0.0 0.0 +Ta 3.83244 0.0 10.83867 -0.002006 0.0 0.000634 +Ta 2.88713 2.34759 12.2042 0.000493 0.0 5.2e-05 +Ta 0.01192 2.34759 12.2042 0.000493 0.0 5.2e-05 +Ta 0.95723 0.0 10.83867 -0.002006 0.0 0.000634 +Ta 3.82633 2.34759 14.90314 -0.002338 0.0 0.000918 +Ta 2.8444 0.0 16.25536 -0.001297 0.0 0.000868 +Ta 5.7196 0.0 16.25536 -0.001297 0.0 0.000868 +Ta 4.83798 2.34759 17.64796 0.00151 0.0 0.00104 +Ta 1.96278 2.34759 17.64796 0.00151 0.0 0.00104 +Ta 4.79758 0.0 13.56049 -0.001966 0.0 0.001189 +Ta 1.92238 0.0 13.56049 -0.001966 0.0 0.001189 +Ta 0.95113 2.34759 14.90314 -0.002338 0.0 0.000918 +Ta 3.65364 0.0 18.79124 -0.004037 0.0 0.001343 +Ta 0.77844 0.0 18.79124 -0.004037 0.0 0.001343 +30 +Lattice = "5.75041007996 0.0 0.0 0.0 4.69518995285 0.0 0.0 0.0 39.8400001526" Properties=species:S:1:pos:R:3:forces:R:3 energy=-345.452139 stress="-8486.44 0.0 2195.0699999999997 0.0 -6268.24 0.0 2195.0699999999997 0.0 6817.8099999999995" +Ta 0.9892 0.0 2.7203 -0.023223 0.0 0.001016 +Ta 0.00727 2.34759 4.07239 0.069003 0.0 0.068642 +Ta 2.88247 2.34759 4.07239 0.069003 0.0 0.068642 +Ta 0.17997 0.0 0.18449 0.005805 0.0 -0.024588 +Ta 3.05517 0.0 0.18449 0.005805 0.0 -0.024588 +Ta 1.87083 2.34759 1.32776 -0.003386 0.0 0.004796 +Ta 4.74604 2.34759 1.32776 -0.003386 0.0 0.004796 +Ta 3.86441 0.0 2.7203 -0.023223 0.0 0.001016 +Ta 0.94648 2.34759 6.77133 -0.15941 0.0 0.086585 +Ta 0.00117 0.0 8.1367 0.254346 0.0 -0.687398 +Ta 2.87637 0.0 8.1367 0.254346 0.0 -0.687398 +Ta 1.91123 0.0 5.41489 -0.007273 0.0 0.083064 +Ta 4.78644 0.0 5.41489 -0.007273 0.0 0.083064 +Ta 3.82169 2.34759 6.77133 -0.15941 0.0 0.086585 +Ta 1.9168 2.34759 9.48769 -0.854831 0.0 -0.81341 +Ta 4.79201 2.34759 9.48769 -0.854831 0.0 -0.81341 +Ta 2.96987 0.0 10.83871 0.856404 0.0 0.869919 +Ta 2.02457 2.34759 12.20409 -0.204616 0.0 0.570902 +Ta 4.89977 2.34759 12.20409 -0.204616 0.0 0.570902 +Ta 0.09467 0.0 10.83871 0.856404 0.0 0.869919 +Ta 2.96377 2.34759 14.90296 -0.014831 0.0 -0.080565 +Ta 1.98184 0.0 16.25507 -0.069492 0.0 -0.116436 +Ta 4.85704 0.0 16.25507 -0.069492 0.0 -0.116436 +Ta 3.97542 2.34759 17.64762 0.035331 0.0 0.046498 +Ta 1.10022 2.34759 17.64762 0.035331 0.0 0.046498 +Ta 3.93501 0.0 13.56045 0.105163 0.0 -0.067164 +Ta 1.05981 0.0 13.56045 0.105163 0.0 -0.067164 +Ta 0.08857 2.34759 14.90296 -0.014831 0.0 -0.080565 +Ta 2.79108 0.0 18.79091 0.011012 0.0 0.058138 +Ta 5.66629 0.0 18.79091 0.011012 0.0 0.058138 +30 +Lattice = "5.75041007996 0.0 0.0 0.0 4.69518995285 0.0 0.0 0.0 39.8400001526" Properties=species:S:1:pos:R:3:forces:R:3 energy=-346.593523 stress="-9415.82 0.0 -282.14 0.0 -11858.18 0.0 -282.14 0.0 174.85" +Ta 0.9892 0.0 2.7203 0.00126 0.0 -0.000951 +Ta 0.00727 2.34759 4.07239 0.002425 0.0 -0.000721 +Ta 2.88247 2.34759 4.07239 0.002425 0.0 -0.000721 +Ta 0.17997 0.0 0.18449 0.003483 0.0 -0.001569 +Ta 3.05517 0.0 0.18449 0.003483 0.0 -0.001569 +Ta 1.87083 2.34759 1.32776 -0.001158 0.0 -0.001292 +Ta 4.74604 2.34759 1.32776 -0.001158 0.0 -0.001292 +Ta 3.86441 0.0 2.7203 0.00126 0.0 -0.000951 +Ta 0.94648 2.34759 6.77133 -0.000275 0.0 -0.000556 +Ta 0.00117 0.0 8.1367 0.001745 0.0 0.000187 +Ta 2.87637 0.0 8.1367 0.001745 0.0 0.000187 +Ta 1.91123 0.0 5.41489 0.00171 0.0 -0.000333 +Ta 4.78644 0.0 5.41489 0.00171 0.0 -0.000333 +Ta 3.82169 2.34759 6.77133 -0.000275 0.0 -0.000556 +Ta 1.9168 2.34759 9.48769 0.0 0.0 0.0 +Ta 4.79201 2.34759 9.48769 0.0 0.0 0.0 +Ta 3.83244 0.0 10.83871 -0.001745 0.0 -0.000187 +Ta 2.88713 2.34759 12.20409 0.000275 0.0 0.000556 +Ta 0.01192 2.34759 12.20409 0.000275 0.0 0.000556 +Ta 0.95723 0.0 10.83871 -0.001745 0.0 -0.000187 +Ta 3.82633 2.34759 14.90296 -0.002425 0.0 0.000721 +Ta 2.8444 0.0 16.25507 -0.00126 0.0 0.000951 +Ta 5.7196 0.0 16.25507 -0.00126 0.0 0.000951 +Ta 4.83798 2.34759 17.64762 0.001158 0.0 0.001292 +Ta 1.96278 2.34759 17.64762 0.001158 0.0 0.001292 +Ta 4.79758 0.0 13.56045 -0.00171 0.0 0.000333 +Ta 1.92238 0.0 13.56045 -0.00171 0.0 0.000333 +Ta 0.95113 2.34759 14.90296 -0.002425 0.0 0.000721 +Ta 3.65364 0.0 18.79091 -0.003483 0.0 0.001569 +Ta 0.77844 0.0 18.79091 -0.003483 0.0 0.001569 +30 +Lattice = "5.75041007996 0.0 0.0 0.0 4.69518995285 0.0 0.0 0.0 39.8400001526" Properties=species:S:1:pos:R:3:forces:R:3 energy=-345.281949 stress="-11560.39 0.0 -4653.08 0.0 -2434.16 0.0 -4653.08 0.0 6566.94" +Ta 0.9892 0.0 2.7203 0.050194 0.0 0.096189 +Ta 0.00727 2.34759 4.07239 0.024666 0.0 0.022454 +Ta 2.88247 2.34759 4.07239 0.024666 0.0 0.022454 +Ta 0.17997 0.0 0.18449 0.022221 0.0 -0.035876 +Ta 3.05517 0.0 0.18449 0.022221 0.0 -0.035876 +Ta 1.87083 2.34759 1.32776 -0.018007 0.0 -0.028654 +Ta 4.74604 2.34759 1.32776 -0.018007 0.0 -0.028654 +Ta 3.86441 0.0 2.7203 0.050194 0.0 0.096189 +Ta 0.94648 2.34759 6.77133 0.035097 0.0 -0.05687 +Ta 0.00117 0.0 8.1367 0.39639 0.0 -0.242712 +Ta 2.87637 0.0 8.1367 0.39639 0.0 -0.242712 +Ta 1.91123 0.0 5.41489 -0.174932 0.0 -0.025096 +Ta 4.78644 0.0 5.41489 -0.174932 0.0 -0.025096 +Ta 3.82169 2.34759 6.77133 0.035097 0.0 -0.05687 +Ta 1.9168 2.34759 9.48769 0.314196 0.0 -0.724221 +Ta 4.79201 2.34759 9.48769 0.314196 0.0 -0.724221 +Ta 1.81979 0.0 10.83871 -0.356224 0.0 0.668088 +Ta 0.87448 2.34759 12.20409 -0.414394 0.0 0.224563 +Ta 3.74968 2.34759 12.20409 -0.414394 0.0 0.224563 +Ta 4.695 0.0 10.83871 -0.356224 0.0 0.668088 +Ta 1.81369 2.34759 14.90296 0.168267 0.0 -0.014012 +Ta 0.83176 0.0 16.25507 -0.017608 0.0 -0.08784 +Ta 3.70696 0.0 16.25507 -0.017608 0.0 -0.08784 +Ta 2.82533 2.34759 17.64762 -0.037555 0.0 0.00518 +Ta 5.70054 2.34759 17.64762 -0.037555 0.0 0.00518 +Ta 2.78493 0.0 13.56045 0.011122 0.0 0.171223 +Ta 5.66014 0.0 13.56045 0.011122 0.0 0.171223 +Ta 4.6889 2.34759 14.90296 0.168267 0.0 -0.014012 +Ta 1.64099 0.0 18.79091 -0.003433 0.0 0.027583 +Ta 4.5162 0.0 18.79091 -0.003433 0.0 0.027583 +30 +Lattice = "5.75041007996 0.0 0.0 0.0 4.69518995285 0.0 0.0 0.0 39.8400001526" Properties=species:S:1:pos:R:3:forces:R:3 energy=-345.928661 stress="-9145.630000000001 0.0 4495.89 0.0 -8704.09 0.0 4495.89 0.0 4121.84" +Ta 0.9892 0.0 2.7203 -0.037192 0.0 -0.008535 +Ta 0.00727 2.34759 4.07239 0.046799 0.0 0.059571 +Ta 2.88247 2.34759 4.07239 0.046799 0.0 0.059571 +Ta 0.17997 0.0 0.18449 0.009422 0.0 -0.012097 +Ta 3.05517 0.0 0.18449 0.009422 0.0 -0.012097 +Ta 1.87083 2.34759 1.32776 -0.005981 0.0 0.006654 +Ta 4.74604 2.34759 1.32776 -0.005981 0.0 0.006654 +Ta 3.86441 0.0 2.7203 -0.037192 0.0 -0.008535 +Ta 0.94648 2.34759 6.77133 -0.141158 0.0 0.065062 +Ta 0.00117 0.0 8.1367 -0.005041 0.0 -0.535781 +Ta 2.87637 0.0 8.1367 -0.005041 0.0 -0.535781 +Ta 1.91123 0.0 5.41489 0.047966 0.0 0.052967 +Ta 4.78644 0.0 5.41489 0.047966 0.0 0.052967 +Ta 3.82169 2.34759 6.77133 -0.141158 0.0 0.065062 +Ta 1.9168 2.34759 9.48769 -0.807767 0.0 -0.37656 +Ta 4.79201 2.34759 9.48769 -0.807767 0.0 -0.37656 +Ta 3.25739 0.0 10.83871 0.80662 0.0 0.413175 +Ta 2.31209 2.34759 12.20409 0.049763 0.0 0.478936 +Ta 5.18729 2.34759 12.20409 0.049763 0.0 0.478936 +Ta 0.38219 0.0 10.83871 0.80662 0.0 0.413175 +Ta 3.25129 2.34759 14.90296 -0.059966 0.0 -0.070617 +Ta 2.26936 0.0 16.25507 -0.058332 0.0 -0.070148 +Ta 5.14456 0.0 16.25507 -0.058332 0.0 -0.070148 +Ta 4.26294 2.34759 17.64762 0.034688 0.0 0.021628 +Ta 1.38774 2.34759 17.64762 0.034688 0.0 0.021628 +Ta 4.22253 0.0 13.56045 0.107399 0.0 -0.061704 +Ta 1.34733 0.0 13.56045 0.107399 0.0 -0.061704 +Ta 0.37609 2.34759 14.90296 -0.059966 0.0 -0.070617 +Ta 3.0786 0.0 18.79091 0.01278 0.0 0.037448 +Ta 0.2034 0.0 18.79091 0.01278 0.0 0.037448 +30 +Lattice = "5.75041007996 0.0 0.0 0.0 4.69518995285 0.0 0.0 0.0 39.8400001526" Properties=species:S:1:pos:R:3:forces:R:3 energy=-345.111657 stress="-8100.32 0.0 -1129.41 0.0 -4564.69 0.0 -1129.41 0.0 8777.64" +Ta 0.9892 0.0 2.7203 -0.002999 0.0 0.02667 +Ta 0.00727 2.34759 4.07239 0.054882 0.0 0.061699 +Ta 2.88247 2.34759 4.07239 0.054882 0.0 0.061699 +Ta 0.17997 0.0 0.18449 -0.00101 0.0 -0.031388 +Ta 3.05517 0.0 0.18449 -0.00101 0.0 -0.031388 +Ta 1.87083 2.34759 1.32776 0.002281 0.0 -0.002797 +Ta 4.74604 2.34759 1.32776 0.002281 0.0 -0.002797 +Ta 3.86441 0.0 2.7203 -0.002999 0.0 0.02667 +Ta 0.94648 2.34759 6.77133 -0.115569 0.0 0.063165 +Ta 0.00117 0.0 8.1367 0.538925 0.0 -0.581219 +Ta 2.87637 0.0 8.1367 0.538925 0.0 -0.581219 +Ta 1.91123 0.0 5.41489 -0.062838 0.0 0.038873 +Ta 4.78644 0.0 5.41489 -0.062838 0.0 0.038873 +Ta 3.82169 2.34759 6.77133 -0.115569 0.0 0.063165 +Ta 1.9168 2.34759 9.48769 -0.888421 0.0 -1.156719 +Ta 4.79201 2.34759 9.48769 -0.888421 0.0 -1.156719 +Ta 2.68235 0.0 10.83871 0.933927 0.0 1.205226 +Ta 1.73705 2.34759 12.20409 -0.549392 0.0 0.428428 +Ta 4.61225 2.34759 12.20409 -0.549392 0.0 0.428428 +Ta 5.55756 0.0 10.83871 0.933927 0.0 1.205226 +Ta 2.67625 2.34759 14.90296 0.046884 0.0 -0.018316 +Ta 1.69432 0.0 16.25507 -0.058853 0.0 -0.140323 +Ta 4.56952 0.0 16.25507 -0.058853 0.0 -0.140323 +Ta 3.6879 2.34759 17.64762 0.020235 0.0 0.058633 +Ta 0.8127 2.34759 17.64762 0.020235 0.0 0.058633 +Ta 3.64749 0.0 13.56045 0.091771 0.0 -0.007909 +Ta 0.77229 0.0 13.56045 0.091771 0.0 -0.007909 +Ta 5.55146 2.34759 14.90296 0.046884 0.0 -0.018316 +Ta 2.50356 0.0 18.79091 -0.009823 0.0 0.055977 +Ta 5.37876 0.0 18.79091 -0.009823 0.0 0.055977 +30 +Lattice = "5.75041007996 0.0 0.0 0.0 4.69518995285 0.0 0.0 0.0 39.8400001526" Properties=species:S:1:pos:R:3:forces:R:3 energy=-346.367123 stress="-9925.11 0.0 -4252.58 0.0 -9690.35 0.0 -4252.58 0.0 528.8000000000001" +Ta 0.9892 0.0 2.7203 0.036893 0.0 0.011121 +Ta 0.00727 2.34759 4.07239 0.003739 0.0 -0.008403 +Ta 2.88247 2.34759 4.07239 0.003739 0.0 -0.008403 +Ta 0.17997 0.0 0.18449 0.001677 0.0 -0.008529 +Ta 3.05517 0.0 0.18449 0.001677 0.0 -0.008529 +Ta 1.87083 2.34759 1.32776 -0.006125 0.0 -0.007305 +Ta 4.74604 2.34759 1.32776 -0.006125 0.0 -0.007305 +Ta 3.86441 0.0 2.7203 0.036893 0.0 0.011121 +Ta 0.94648 2.34759 6.77133 0.047105 0.0 -0.045187 +Ta 0.00117 0.0 8.1367 0.149771 0.0 0.043481 +Ta 2.87637 0.0 8.1367 0.149771 0.0 0.043481 +Ta 1.91123 0.0 5.41489 -0.082659 0.0 0.037224 +Ta 4.78644 0.0 5.41489 -0.082659 0.0 0.037224 +Ta 3.82169 2.34759 6.77133 0.047105 0.0 -0.045187 +Ta 1.9168 2.34759 9.48769 0.609504 0.0 -0.160261 +Ta 4.79201 2.34759 9.48769 0.609504 0.0 -0.160261 +Ta 1.24475 0.0 10.83871 -0.628777 0.0 0.151816 +Ta 0.29944 2.34759 12.20409 -0.151337 0.0 -0.040462 +Ta 3.17464 2.34759 12.20409 -0.151337 0.0 -0.040462 +Ta 4.11996 0.0 10.83871 -0.628777 0.0 0.151816 +Ta 1.23865 2.34759 14.90296 0.077509 0.0 -0.040594 +Ta 0.25672 0.0 16.25507 0.005483 0.0 -0.00975 +Ta 3.13192 0.0 16.25507 0.005483 0.0 -0.00975 +Ta 2.25029 2.34759 17.64762 -0.026269 0.0 0.012323 +Ta 5.1255 2.34759 17.64762 -0.026269 0.0 0.012323 +Ta 2.20989 0.0 13.56045 -0.027306 0.0 0.063713 +Ta 5.0851 0.0 13.56045 -0.027306 0.0 0.063713 +Ta 4.11386 2.34759 14.90296 0.077509 0.0 -0.040594 +Ta 1.06595 0.0 18.79091 -0.009208 0.0 0.000812 +Ta 3.94116 0.0 18.79091 -0.009208 0.0 0.000812 +30 +Lattice = "5.75041007996 0.0 0.0 0.0 4.69518995285 0.0 0.0 0.0 39.8400001526" Properties=species:S:1:pos:R:3:forces:R:3 energy=-346.582565 stress="-9596.72 0.0 -296.27 0.0 -12032.57 0.0 -296.27 0.0 -26.450000000000003" +Ta 0.9892 0.0 2.71997 0.001254 0.0 -0.000998 +Ta 0.00727 2.34759 4.07216 0.002375 0.0 -0.000846 +Ta 2.88247 2.34759 4.07216 0.002375 0.0 -0.000846 +Ta 0.17997 0.0 0.18409 0.004062 0.0 -0.001188 +Ta 3.05517 0.0 0.18409 0.004062 0.0 -0.001188 +Ta 1.87083 2.34759 1.32736 -0.001515 0.0 -0.001063 +Ta 4.74604 2.34759 1.32736 -0.001515 0.0 -0.001063 +Ta 3.86441 0.0 2.71997 0.001254 0.0 -0.000998 +Ta 0.94648 2.34759 6.77121 -0.000474 0.0 -0.000276 +Ta 0.00117 0.0 8.13671 0.001992 0.0 -0.000431 +Ta 2.87637 0.0 8.13671 0.001992 0.0 -0.000431 +Ta 1.91123 0.0 5.41479 0.001951 0.0 -0.000915 +Ta 4.78644 0.0 5.41479 0.001951 0.0 -0.000915 +Ta 3.82169 2.34759 6.77121 -0.000474 0.0 -0.000276 +Ta 1.9168 2.34759 9.48769 0.0 0.0 0.0 +Ta 4.79201 2.34759 9.48769 0.0 0.0 0.0 +Ta 0.95723 0.0 10.8387 -0.001992 0.0 0.000431 +Ta 0.01192 2.34759 12.20421 0.000474 0.0 0.000276 +Ta 2.88712 2.34759 12.20421 0.000474 0.0 0.000276 +Ta 3.83244 0.0 10.8387 -0.001992 0.0 0.000431 +Ta 0.95113 2.34759 14.90319 -0.002375 0.0 0.000846 +Ta 5.71961 0.0 16.2554 -0.001254 0.0 0.000998 +Ta 2.8444 0.0 16.2554 -0.001254 0.0 0.000998 +Ta 1.96277 2.34759 17.64802 0.001515 0.0 0.001063 +Ta 4.83798 2.34759 17.64802 0.001515 0.0 0.001063 +Ta 1.92237 0.0 13.56055 -0.001951 0.0 0.000915 +Ta 4.79758 0.0 13.56055 -0.001951 0.0 0.000915 +Ta 3.82634 2.34759 14.90319 -0.002375 0.0 0.000846 +Ta 0.77843 0.0 18.79131 -0.004062 0.0 0.001188 +Ta 3.65364 0.0 18.79131 -0.004062 0.0 0.001188 +30 +Lattice = "5.75041007996 0.0 0.0 0.0 4.69518995285 0.0 0.0 0.0 39.8400001526" Properties=species:S:1:pos:R:3:forces:R:3 energy=-344.91356 stress="-9331.87 0.0 -3483.6 0.0 -3070.65 0.0 -3483.6 0.0 10023.91" +Ta 0.9892 0.0 2.7203 0.020761 0.0 0.069829 +Ta 0.00727 2.34759 4.07239 0.031416 0.0 0.042888 +Ta 2.88247 2.34759 4.07239 0.031416 0.0 0.042888 +Ta 0.17997 0.0 0.18449 0.008231 0.0 -0.040672 +Ta 3.05517 0.0 0.18449 0.008231 0.0 -0.040672 +Ta 1.87083 2.34759 1.32776 -0.006968 0.0 -0.013357 +Ta 4.74604 2.34759 1.32776 -0.006968 0.0 -0.013357 +Ta 3.86441 0.0 2.7203 0.020761 0.0 0.069829 +Ta 0.94648 2.34759 6.77133 -0.012614 0.0 0.0322 +Ta 0.00117 0.0 8.1367 0.6286 0.0 -0.362527 +Ta 2.87637 0.0 8.1367 0.6286 0.0 -0.362527 +Ta 1.91123 0.0 5.41489 -0.117602 0.0 -0.047411 +Ta 4.78644 0.0 5.41489 -0.117602 0.0 -0.047411 +Ta 3.82169 2.34759 6.77133 -0.012614 0.0 0.0322 +Ta 1.9168 2.34759 9.48769 -0.731669 0.0 -1.341165 +Ta 4.79201 2.34759 9.48769 -0.731669 0.0 -1.341165 +Ta 2.39483 0.0 10.83871 0.796655 0.0 1.335154 +Ta 1.44952 2.34759 12.20409 -0.719661 0.0 0.218469 +Ta 4.32472 2.34759 12.20409 -0.719661 0.0 0.218469 +Ta 5.27004 0.0 10.83871 0.796655 0.0 1.335154 +Ta 2.38873 2.34759 14.90296 0.115505 0.0 0.057838 +Ta 1.4068 0.0 16.25507 -0.048364 0.0 -0.136512 +Ta 4.282 0.0 16.25507 -0.048364 0.0 -0.136512 +Ta 3.40038 2.34759 17.64762 0.008342 0.0 0.049918 +Ta 0.52518 2.34759 17.64762 0.008342 0.0 0.049918 +Ta 3.35997 0.0 13.56045 0.043395 0.0 0.085984 +Ta 0.48477 0.0 13.56045 0.043395 0.0 0.085984 +Ta 5.26394 2.34759 14.90296 0.115505 0.0 0.057838 +Ta 2.21604 0.0 18.79091 -0.016029 0.0 0.049364 +Ta 5.09124 0.0 18.79091 -0.016029 0.0 0.049364 +30 +Lattice = "5.75041007996 0.0 0.0 0.0 4.69518995285 0.0 0.0 0.0 39.8400001526" Properties=species:S:1:pos:R:3:forces:R:3 energy=-345.836703 stress="-13121.27 0.0 -5634.91 0.0 -8850.33 0.0 -5634.91 0.0 -251.82" +Ta 0.9892 0.0 2.69946 0.050014 0.0 0.000282 +Ta 0.00727 2.34759 4.05025 0.000899 0.0 -0.000628 +Ta 2.88247 2.34759 4.05025 0.000899 0.0 -0.000628 +Ta 0.17997 0.0 0.16024 0.025286 0.0 -0.000329 +Ta 3.05517 0.0 0.16024 0.025286 0.0 -0.000329 +Ta 1.87083 2.34759 1.30033 -0.022784 0.0 0.0001 +Ta 4.74604 2.34759 1.30033 -0.022784 0.0 0.0001 +Ta 3.86441 0.0 2.69946 0.050014 0.0 0.000282 +Ta 0.94648 2.34759 6.74132 0.018982 0.0 0.000803 +Ta 0.00117 0.0 8.1136 0.294678 0.0 -7e-05 +Ta 2.87637 0.0 8.1136 0.294678 0.0 -7e-05 +Ta 1.91123 0.0 5.39201 -0.117735 0.0 -0.000184 +Ta 4.78644 0.0 5.39201 -0.117735 0.0 -0.000184 +Ta 3.82169 2.34759 6.74132 0.018982 0.0 0.000803 +Ta 1.9168 2.34759 9.44202 0.717113 0.0 3.7e-05 +Ta 4.79201 2.34759 9.44202 0.717113 0.0 3.7e-05 +Ta 1.53227 0.0 10.88381 -0.754498 0.0 3.7e-05 +Ta 0.58696 2.34759 12.229 -0.304417 0.0 -0.000673 +Ta 3.46216 2.34759 12.229 -0.304417 0.0 -0.000673 +Ta 4.40748 0.0 10.88381 -0.754498 0.0 3.7e-05 +Ta 1.52617 2.34759 14.92821 0.111991 0.0 0.000677 +Ta 0.54424 0.0 16.27854 0.000794 0.0 -0.00097 +Ta 3.41944 0.0 16.27854 0.000794 0.0 -0.00097 +Ta 2.53781 2.34759 17.67931 -0.020042 0.0 -0.001378 +Ta 5.41302 2.34759 17.67931 -0.020042 0.0 -0.001378 +Ta 2.49741 0.0 13.59913 0.010142 0.0 0.001166 +Ta 5.37262 0.0 13.59913 0.010142 0.0 0.001166 +Ta 4.40138 2.34759 14.92821 0.111991 0.0 0.000677 +Ta 1.35347 0.0 18.81813 -0.010421 0.0 0.001129 +Ta 4.22868 0.0 18.81813 -0.010421 0.0 0.001129 +30 +Lattice = "5.75041007996 0.0 0.0 0.0 4.69518995285 0.0 0.0 0.0 39.8400001526" Properties=species:S:1:pos:R:3:forces:R:3 energy=-344.984307 stress="-10564.03 0.0 -4829.4 0.0 -2612.55 0.0 -4829.4 0.0 9464.02" +Ta 0.9892 0.0 2.7203 0.037412 0.0 0.099042 +Ta 0.00727 2.34759 4.07239 0.028536 0.0 0.023468 +Ta 2.88247 2.34759 4.07239 0.028536 0.0 0.023468 +Ta 0.17997 0.0 0.18449 0.023555 0.0 -0.042618 +Ta 3.05517 0.0 0.18449 0.023555 0.0 -0.042618 +Ta 1.87083 2.34759 1.32776 -0.016108 0.0 -0.021017 +Ta 4.74604 2.34759 1.32776 -0.016108 0.0 -0.021017 +Ta 3.86441 0.0 2.7203 0.037412 0.0 0.099042 +Ta 0.94648 2.34759 6.77133 0.046477 0.0 0.002765 +Ta 0.00117 0.0 8.1367 0.514609 0.0 -0.283847 +Ta 2.87637 0.0 8.1367 0.514609 0.0 -0.283847 +Ta 1.91123 0.0 5.41489 -0.163272 0.0 -0.078622 +Ta 4.78644 0.0 5.41489 -0.163272 0.0 -0.078622 +Ta 3.82169 2.34759 6.77133 0.046477 0.0 0.002765 +Ta 1.9168 2.34759 9.48769 -0.094634 0.0 -1.114901 +Ta 4.79201 2.34759 9.48769 -0.094634 0.0 -1.114901 +Ta 2.10731 0.0 10.83871 0.096153 0.0 1.054366 +Ta 1.162 2.34759 12.20409 -0.593943 0.0 0.202897 +Ta 4.0372 2.34759 12.20409 -0.593943 0.0 0.202897 +Ta 4.98252 0.0 10.83871 0.096153 0.0 1.054366 +Ta 2.10121 2.34759 14.90296 0.169155 0.0 0.056551 +Ta 1.11928 0.0 16.25507 -0.031734 0.0 -0.113985 +Ta 3.99448 0.0 16.25507 -0.031734 0.0 -0.113985 +Ta 3.11285 2.34759 17.64762 -0.01565 0.0 0.02811 +Ta 0.23765 2.34759 17.64762 -0.01565 0.0 0.02811 +Ta 3.07245 0.0 13.56045 0.006275 0.0 0.144107 +Ta 0.19725 0.0 13.56045 0.006275 0.0 0.144107 +Ta 4.97642 2.34759 14.90296 0.169155 0.0 0.056551 +Ta 1.92851 0.0 18.79091 -0.00683 0.0 0.043685 +Ta 4.80372 0.0 18.79091 -0.00683 0.0 0.043685 +30 +Lattice = "5.75041007996 0.0 0.0 0.0 4.69518995285 0.0 0.0 0.0 39.8400001526" Properties=species:S:1:pos:R:3:forces:R:3 energy=-346.393931 stress="-9438.37 0.0 3529.1 0.0 -11318.58 0.0 3529.1 0.0 1838.01" +Ta 0.9892 0.0 2.7203 -0.028288 0.0 -0.004272 +Ta 0.00727 2.34759 4.07239 0.01665 0.0 0.029245 +Ta 2.88247 2.34759 4.07239 0.01665 0.0 0.029245 +Ta 0.17997 0.0 0.18449 0.006746 0.0 -0.001633 +Ta 3.05517 0.0 0.18449 0.006746 0.0 -0.001633 +Ta 1.87083 2.34759 1.32776 -0.000473 0.0 -3e-05 +Ta 4.74604 2.34759 1.32776 -0.000473 0.0 -3e-05 +Ta 3.86441 0.0 2.7203 -0.028288 0.0 -0.004272 +Ta 0.94648 2.34759 6.77133 -0.081349 0.0 0.034571 +Ta 0.00117 0.0 8.1367 -0.101274 0.0 -0.252924 +Ta 2.87637 0.0 8.1367 -0.101274 0.0 -0.252924 +Ta 1.91123 0.0 5.41489 0.063888 0.0 0.002877 +Ta 4.78644 0.0 5.41489 0.063888 0.0 0.002877 +Ta 3.82169 2.34759 6.77133 -0.081349 0.0 0.034571 +Ta 1.9168 2.34759 9.48769 -0.523826 0.0 -0.065241 +Ta 4.79201 2.34759 9.48769 -0.523826 0.0 -0.065241 +Ta 3.54491 0.0 10.83871 0.531471 0.0 0.075625 +Ta 2.59961 2.34759 12.20409 0.108678 0.0 0.237898 +Ta 5.47481 2.34759 12.20409 0.108678 0.0 0.237898 +Ta 0.66971 0.0 10.83871 0.531471 0.0 0.075625 +Ta 3.53881 2.34759 14.90296 -0.061771 0.0 -0.016484 +Ta 2.55688 0.0 16.25507 -0.022115 0.0 -0.025346 +Ta 5.43208 0.0 16.25507 -0.022115 0.0 -0.025346 +Ta 4.55046 2.34759 17.64762 0.021554 0.0 0.004745 +Ta 1.67526 2.34759 17.64762 0.021554 0.0 0.004745 +Ta 4.51005 0.0 13.56045 0.060372 0.0 -0.032886 +Ta 1.63485 0.0 13.56045 0.060372 0.0 -0.032886 +Ta 0.66361 2.34759 14.90296 -0.061771 0.0 -0.016484 +Ta 3.36612 0.0 18.79091 0.009737 0.0 0.013855 +Ta 0.49092 0.0 18.79091 0.009737 0.0 0.013855 diff --git a/examples/PACKAGES/pod/Ta/XYZ/Liquid.xyz b/examples/PACKAGES/pod/Ta/XYZ/Liquid.xyz new file mode 100644 index 0000000000..1bf7814567 --- /dev/null +++ b/examples/PACKAGES/pod/Ta/XYZ/Liquid.xyz @@ -0,0 +1,306 @@ +100 +Lattice = "12.6055002213 0.0 0.0 0.0 12.6055002213 0.0 0.0 0.0 12.6055002213" Properties=species:S:1:pos:R:3:forces:R:3 energy=-1105.601723 stress="41522.36 -10028.6 5843.19 -10028.6 44080.57 10402.62 5843.19 10402.62 34745.600000000006" +Ta 0.43107 3.74888 0.07776 -0.335192 0.399751 2.053897 +Ta 1.60366 2.09108 2.35693 -3.868362 -1.228623 -1.515572 +Ta 4.15329 1.55338 2.45739 1.505017 -0.176525 -0.218711 +Ta 2.64801 1.89114 12.39607 0.25781 1.51672 2.137521 +Ta 7.24215 1.70209 1.79979 -0.11292 -2.198189 -0.337499 +Ta 10.95446 2.67458 1.59213 -0.965217 -1.195646 -0.253554 +Ta 9.27673 0.87789 3.43116 1.643765 0.347467 -1.593945 +Ta 2.03607 6.61594 1.61137 2.535752 0.592029 1.82052 +Ta 5.49317 3.20146 0.58262 -0.862046 0.984883 -1.598913 +Ta 3.04231 4.31908 2.00353 0.620511 -1.092947 -1.508929 +Ta 4.95339 6.14708 0.65118 -1.365205 -2.865106 2.363303 +Ta 7.52643 4.18623 2.31722 0.746021 1.167867 -1.110257 +Ta 12.27295 5.1198 2.52809 0.765074 0.812857 1.098129 +Ta 9.25719 7.32072 1.58199 0.215508 0.987987 1.690552 +Ta 10.53635 5.29937 0.6285 -0.28915 -1.601915 -1.639854 +Ta 1.90384 9.1638 3.00286 0.22302 2.303078 2.48401 +Ta 3.80372 8.76382 0.84403 -1.139535 0.518969 0.980714 +Ta 6.20544 8.3316 1.50988 2.193636 0.909931 -1.013726 +Ta 8.06784 5.83681 12.25104 -1.350407 0.626007 -0.379155 +Ta 0.31897 6.90336 0.10643 -5.3666 -0.250563 -1.141097 +Ta 11.55436 9.51362 3.34931 0.547949 -2.202531 -1.917224 +Ta 10.78092 9.16961 0.43619 2.93789 -2.957858 -2.910142 +Ta 1.24862 9.5832 0.57435 -1.713064 -0.323209 -1.423673 +Ta 5.81406 11.77176 1.54406 1.638754 0.219842 1.61986 +Ta 10.13103 11.22875 1.38321 -1.800705 4.539384 2.649159 +Ta 0.34899 0.35649 6.1042 -1.407332 -2.793672 0.622672 +Ta 2.3232 1.67801 4.77877 -0.05644 2.09227 -0.734316 +Ta 7.49734 2.52339 4.64715 -2.007496 -0.115682 0.14042 +Ta 9.77964 2.17772 5.83529 3.713057 -1.608783 0.411426 +Ta 12.08877 2.91076 4.07847 -1.520526 -1.704707 -0.587973 +Ta 1.76078 4.6877 4.47668 1.413545 -7.499735 -1.858957 +Ta 4.98999 4.11433 3.79876 0.289553 -1.316969 -0.292034 +Ta 6.76353 5.11499 5.45587 -3.138755 0.635253 -4.508867 +Ta 8.18843 6.66761 6.69958 1.823722 2.515733 1.945463 +Ta 9.26522 5.32398 3.90117 2.522311 -2.914637 0.434012 +Ta 11.70087 5.41848 5.49634 -0.91363 0.599933 0.511554 +Ta 1.65165 6.89091 4.56552 -4.64308 7.078545 2.907672 +Ta 3.88906 7.3482 3.69272 4.376913 -1.607122 -3.387251 +Ta 3.78056 9.22669 5.62637 -1.173755 -0.484115 1.473183 +Ta 7.2778 6.86119 3.31305 -1.712746 -0.762926 0.612453 +Ta 8.43315 9.5977 2.96474 -0.068906 0.588767 0.305611 +Ta 8.32391 9.49805 7.04669 1.283119 0.857479 -0.056213 +Ta 9.74646 7.68415 4.88166 1.553537 2.838279 -1.262714 +Ta 0.20242 11.9595 3.59124 0.480807 0.704331 -0.139582 +Ta 0.92234 9.81536 5.6286 -0.676685 -0.718246 -1.353345 +Ta 2.97319 11.83837 4.92159 0.124172 -2.5278 -0.825427 +Ta 4.81042 10.11638 3.25804 -0.00158 0.832634 1.353808 +Ta 5.10938 0.86525 4.93901 1.123663 0.063599 1.236154 +Ta 7.61412 11.73973 4.74754 -0.814736 -0.047356 -0.545511 +Ta 10.33697 11.30643 4.67815 -0.528432 -0.050872 2.228917 +Ta 0.27884 2.84477 6.49144 0.360201 1.903395 2.778998 +Ta 2.01197 0.93667 8.3625 1.378708 0.191326 -1.606266 +Ta 5.95649 1.56866 7.7316 -3.530422 2.114153 0.082888 +Ta 7.99571 0.37668 7.3238 3.086708 -0.94535 -1.566298 +Ta 9.75758 2.05273 9.00324 -1.78926 -0.869367 -0.765594 +Ta 7.0553 1.30554 10.35383 -0.468981 0.451781 -0.424135 +Ta 3.31072 3.02847 6.68212 2.374838 -0.044278 1.652536 +Ta 1.94786 5.25704 7.02637 -4.869392 -0.604143 3.206895 +Ta 5.58301 4.41656 7.69055 -0.012085 -1.275371 2.405145 +Ta 8.49696 4.09995 6.94038 1.731209 -2.887879 -0.17644 +Ta 11.05285 4.3866 7.9546 0.367601 1.162168 1.374681 +Ta 0.98645 7.70557 8.0109 1.110298 0.078167 -0.561606 +Ta 4.08075 5.84992 6.03442 1.908693 2.469334 -1.250813 +Ta 6.48069 8.76967 5.22823 0.114255 -0.523517 -0.733113 +Ta 3.57803 8.81681 8.5928 -0.66732 -1.171187 1.154754 +Ta 7.84056 7.36674 9.41266 2.673183 -2.160921 0.812097 +Ta 5.68236 7.53635 7.81446 0.283447 -0.99061 -1.738751 +Ta 10.93798 7.78281 7.44991 -0.183664 0.008309 0.251959 +Ta 9.9392 9.29803 9.66467 -1.179107 -2.844565 -1.936143 +Ta 3.27502 11.20914 7.71694 -1.605014 0.866048 -1.920371 +Ta 5.80571 11.2039 6.87956 0.570374 -0.917997 -1.21799 +Ta 6.62643 9.54017 9.251 -2.194588 1.730297 1.398058 +Ta 8.37506 11.43578 9.44763 -1.003205 1.254061 1.409533 +Ta 10.64763 11.60302 8.34425 0.22912 1.878017 -4.253745 +Ta 0.62444 10.81341 7.95926 -0.845854 -0.025244 3.548273 +Ta 1.3128 0.0772 10.94202 1.021441 -1.772357 0.971535 +Ta 3.66982 2.58827 9.88588 2.775855 -0.901529 -1.133165 +Ta 4.9029 0.55814 12.14694 0.745195 -0.14623 -0.925343 +Ta 10.71412 0.70352 12.01211 -0.821757 1.855819 -0.172903 +Ta 0.09616 11.95074 0.94667 -0.073589 1.703385 -0.8464 +Ta 12.24445 1.18229 9.52752 -4.911344 -2.238124 -2.990827 +Ta 0.56652 5.73639 10.25403 -1.285215 0.56972 -1.80217 +Ta 1.04406 2.95713 10.2879 0.54537 1.767964 -1.435358 +Ta 2.78879 4.62903 11.50554 1.816283 1.761154 1.997143 +Ta 3.64576 5.81754 9.10448 -0.291727 0.525333 1.415918 +Ta 6.14975 4.49268 10.80918 -3.938361 -1.263146 1.537617 +Ta 8.46844 3.03493 11.91111 -0.260212 -0.549013 1.590318 +Ta 7.95371 4.47804 9.32882 3.486802 -0.184534 -0.465321 +Ta 10.60265 3.91791 10.65025 1.584639 0.666232 1.28596 +Ta 2.41835 7.66344 11.35717 3.582823 -2.530851 -1.921205 +Ta 5.6897 7.16124 11.11328 -0.724382 2.649569 -1.819833 +Ta 8.24854 8.99729 11.81822 -0.58882 -1.012186 0.957519 +Ta 10.50201 6.92143 10.75604 -0.179214 -0.360035 0.514513 +Ta 0.20749 8.75375 10.46189 -1.586508 0.42554 -0.709369 +Ta 2.55072 10.18804 10.88287 1.336488 2.096133 -1.047152 +Ta 4.96405 12.00073 9.46535 1.226786 1.399389 2.14847 +Ta 2.9582 11.89523 1.24555 -0.497007 -1.084677 0.372878 +Ta 5.43899 10.20671 12.04447 0.457816 0.156284 -2.53866 +Ta 7.88861 11.67933 12.19294 -0.209863 1.614617 -0.260277 +Ta 11.22489 11.04751 10.7648 2.246152 1.517056 4.384995 +100 +Lattice = "12.6055002213 0.0 0.0 0.0 12.6055002213 0.0 0.0 0.0 12.6055002213" Properties=species:S:1:pos:R:3:forces:R:3 energy=-1099.673012 stress="64329.38 4705.339999999999 16428.34 4705.339999999999 41963.4 -4448.86 16428.34 -4448.86 54142.01" +Ta 0.38188 4.35838 0.74564 -0.727255 -2.684915 -1.502186 +Ta 1.34891 1.23814 1.97516 -0.901556 -0.105425 1.00657 +Ta 3.91629 1.3428 2.33074 3.786054 2.848263 -0.971111 +Ta 2.50882 2.14034 12.20579 -0.262289 0.109978 0.538412 +Ta 8.20217 1.50457 1.09255 -0.492384 -1.785903 2.601547 +Ta 10.36593 3.31163 1.41537 1.881298 -2.609227 -1.324217 +Ta 10.4022 0.62792 3.78647 -0.90696 3.879838 -1.72804 +Ta 1.89782 6.78766 2.24739 0.610213 0.257066 0.30111 +Ta 5.50184 3.35273 0.83641 -0.560965 -1.138714 0.441504 +Ta 2.32284 3.6359 2.17719 2.602499 1.961671 1.752727 +Ta 5.3072 5.9129 1.35024 -1.807728 1.348974 1.869601 +Ta 7.97916 4.52402 2.2256 -1.448678 0.224978 0.932881 +Ta 12.08411 5.36653 3.17826 1.407869 -0.153369 -2.235907 +Ta 9.93622 6.94867 2.71342 -0.96168 -0.819272 -0.695758 +Ta 9.90617 5.56065 0.39246 1.437756 2.22277 -1.483484 +Ta 2.03145 9.47094 3.47002 -0.365866 -1.501921 0.223241 +Ta 3.89512 9.09235 1.57401 -0.289378 -1.595243 -0.704364 +Ta 6.55755 9.06145 1.13007 1.481441 -1.964278 0.317382 +Ta 7.19441 5.95163 12.15045 5.313352 -0.388306 3.350518 +Ta 0.47731 6.73144 12.49172 -2.324959 2.468907 0.162569 +Ta 11.99106 8.65573 2.136 0.320078 0.329798 0.427882 +Ta 10.46579 8.3526 12.36863 0.469025 0.961865 1.106144 +Ta 1.09582 9.74623 0.42674 -0.367347 0.331195 0.683008 +Ta 6.08716 11.81081 1.97743 -0.347952 0.939564 0.150091 +Ta 10.03534 11.67059 1.4824 1.765295 -0.063423 0.419687 +Ta 0.08024 12.16929 6.35254 3.013201 1.559359 -1.565584 +Ta 2.71663 1.31896 5.17141 1.289295 0.727934 -0.294145 +Ta 7.31848 1.89673 4.23838 -0.731578 2.730215 -0.825462 +Ta 10.8977 1.28949 6.47917 -5.83876 3.773198 -2.47763 +Ta 0.45432 2.51989 4.22159 -3.64939 -0.925817 -2.950598 +Ta 1.70947 4.66775 4.8384 0.462076 1.170048 -2.403113 +Ta 4.57205 3.37193 4.25893 -0.109762 0.615399 0.386449 +Ta 6.6353 4.9693 5.07404 -0.677674 0.753118 -0.691499 +Ta 9.08878 7.33531 5.79768 -1.926322 -3.675185 0.927457 +Ta 9.91121 3.22337 3.84582 -0.878305 0.821935 2.646587 +Ta 11.32221 4.97359 5.54846 -1.015803 -0.259629 1.700732 +Ta 0.53406 7.05513 5.42905 4.213154 0.915513 -0.387097 +Ta 4.46164 6.80136 4.09833 -0.176562 -0.533475 -2.129646 +Ta 3.93041 8.596 5.90044 -2.349383 1.463451 1.214532 +Ta 7.45709 7.32471 3.28984 -1.580622 -0.59473 -0.153408 +Ta 8.73043 9.80728 2.84372 -0.269419 -1.581451 0.380496 +Ta 8.3667 9.63065 6.92756 1.753511 2.485611 1.143484 +Ta 11.10448 8.19971 4.67383 -2.984282 1.041303 -1.700702 +Ta 12.33138 11.59365 3.22318 2.360024 -1.006585 -0.789645 +Ta 12.53349 9.89403 5.63928 3.735451 -1.567194 1.41596 +Ta 3.05157 11.96433 3.46769 -2.586656 -4.605553 1.003837 +Ta 5.53812 9.74587 3.73544 -0.624627 0.711032 0.321477 +Ta 5.17764 0.08755 4.56072 0.792806 1.090161 2.480897 +Ta 7.64882 11.92872 4.33422 1.371203 -2.646937 -1.592811 +Ta 10.26273 11.13472 4.99862 -1.516508 -2.562682 1.139746 +Ta 0.63147 2.19678 6.67724 -1.933442 4.953146 -0.194708 +Ta 2.39775 1.15536 7.89766 1.566886 -5.944045 0.931194 +Ta 5.33276 1.28983 7.19797 -1.126761 0.854886 -2.020746 +Ta 7.89352 0.43228 6.56287 1.13823 0.267818 2.364431 +Ta 8.88305 1.54913 9.09168 1.934009 3.681926 -0.69568 +Ta 6.00124 2.16677 9.5598 8.252345 -1.117748 2.215338 +Ta 2.66739 3.83317 7.06559 2.190193 -4.842621 2.418064 +Ta 0.44413 5.53507 7.53921 0.172202 -0.843263 -0.144565 +Ta 6.07444 4.29758 7.92983 -1.04507 0.569502 -0.853121 +Ta 8.61236 4.26866 6.45192 0.842947 -0.703065 0.93539 +Ta 10.50987 4.11989 8.35507 0.547985 -0.173489 -1.269773 +Ta 2.02897 8.56787 8.24972 -1.223362 -0.887987 -0.332769 +Ta 3.57963 5.79304 6.48017 2.842291 5.01202 -1.423259 +Ta 6.53156 8.37515 5.75214 -0.50131 -0.78674 -2.188556 +Ta 4.51454 9.02305 9.28712 -1.887242 0.583318 -0.321074 +Ta 8.34047 6.94108 8.77392 2.702214 0.628662 0.365051 +Ta 6.01989 7.16828 7.91506 -2.736883 -1.03701 0.87708 +Ta 11.52313 8.08118 8.00297 0.861961 -0.750437 -2.832105 +Ta 9.87066 9.68884 9.34964 -0.418705 -1.344113 0.080437 +Ta 2.69897 11.01376 6.90606 0.624985 0.222953 -0.025436 +Ta 5.56553 10.9604 7.05448 1.478972 -0.881736 -1.62077 +Ta 6.91858 9.87487 9.3601 -0.933279 -1.508382 -2.062547 +Ta 7.56671 12.23671 9.78063 -0.406385 -0.308972 0.183521 +Ta 10.22294 11.87342 7.79903 -1.175658 -1.688479 1.642029 +Ta 0.04509 10.83657 8.74612 1.380926 -0.290325 -0.323702 +Ta 0.94632 0.06721 10.62363 1.061812 0.946373 0.815892 +Ta 3.83384 2.56871 9.64718 -1.450486 1.088741 1.78581 +Ta 4.91898 0.74942 12.23402 2.069575 0.652415 -1.682263 +Ta 10.35682 1.29618 11.60881 -1.007516 -0.380767 -0.681798 +Ta 12.25089 0.25724 0.5674 -1.167993 -0.553636 -1.082113 +Ta 12.05792 1.27062 8.79257 -1.958821 -0.199606 3.512891 +Ta 0.94154 6.36726 9.79464 -0.470327 -1.562595 2.388469 +Ta 1.55131 2.94376 9.49017 -5.482202 3.713318 2.157258 +Ta 2.83736 5.28335 12.23429 0.21999 -0.856343 -0.328898 +Ta 3.28912 5.72925 9.20121 2.590913 0.102617 0.278337 +Ta 5.23966 4.63128 11.01018 -0.510883 -1.107745 -0.843113 +Ta 8.09196 3.41706 12.13822 -0.502547 -2.144772 0.04882 +Ta 8.1563 4.57839 10.05093 0.383882 0.414866 -3.808578 +Ta 10.79442 4.02679 10.93553 1.752466 -1.881501 1.268269 +Ta 2.71931 8.02403 11.22143 2.049893 -0.963189 1.387113 +Ta 5.73731 7.44013 11.32002 -4.676222 3.883048 -2.762461 +Ta 8.16217 8.96831 11.31638 0.374044 -1.476354 1.757164 +Ta 10.92094 6.50569 10.08481 -2.942535 0.663572 0.583517 +Ta 0.13295 8.72748 10.50938 -1.244418 2.69593 0.1167 +Ta 2.76073 10.72733 11.03757 0.159817 -0.598944 -1.675276 +Ta 4.565 12.20225 9.16074 -0.475524 -0.325595 2.074182 +Ta 3.333 11.65103 0.9196 -2.017399 0.539865 -1.533111 +Ta 5.52052 10.58245 11.86999 -0.929433 -0.112136 -1.59182 +Ta 7.97547 11.45742 0.05805 -0.0746 0.038856 -1.899211 +Ta 11.12836 11.17255 11.09073 -0.284488 0.783851 1.570373 +100 +Lattice = "12.6055002213 0.0 0.0 0.0 12.6055002213 0.0 0.0 0.0 12.6055002213" Properties=species:S:1:pos:R:3:forces:R:3 energy=-1121.31506 stress="6315.33 3551.01 1290.84 3551.01 7373.36 -1793.4699999999998 1290.84 -1793.4699999999998 -4190.5599999999995" +Ta 0.64937 3.12625 0.43144 -0.384771 0.95129 0.165479 +Ta 1.36715 0.72175 2.1191 -0.396084 1.361974 -0.172418 +Ta 4.5846 1.15642 2.6142 -0.373595 0.78336 -1.848167 +Ta 3.4656 2.34361 0.38597 -2.224767 -1.381119 -1.370954 +Ta 7.88853 1.1719 1.55114 -0.598212 -0.078923 1.145428 +Ta 10.07282 2.82479 1.63047 1.639511 -1.074148 -1.081096 +Ta 10.53174 0.56802 2.94785 0.257895 1.267816 1.941643 +Ta 2.10362 6.2679 1.6589 0.701345 0.454084 2.496936 +Ta 5.6154 3.59317 1.03035 0.195919 -1.236583 -0.019497 +Ta 3.32731 3.74082 2.62776 -1.283076 0.780111 0.884303 +Ta 4.82978 6.12805 1.02771 1.04951 2.209193 2.462833 +Ta 7.60239 4.46941 2.24663 1.036576 0.558243 2.859549 +Ta 12.48993 4.97942 2.67215 -0.349711 -0.000505 0.40415 +Ta 9.84709 6.20394 2.82647 -0.257749 1.429134 0.922074 +Ta 10.38504 5.10677 0.57401 -0.209053 1.4898 -1.696587 +Ta 2.12734 8.88431 2.41071 -0.896766 0.496609 1.485094 +Ta 4.37717 9.21766 1.21522 -0.870196 -1.493612 0.07125 +Ta 7.07182 9.00281 1.02655 0.183737 -1.129029 -0.559981 +Ta 7.71788 6.33342 0.33272 -0.30082 1.581148 -1.075768 +Ta 12.44465 6.65378 0.30277 0.556355 -0.191302 -1.493292 +Ta 12.09046 8.23945 2.26765 -0.509885 1.361164 -0.650694 +Ta 9.81566 8.34073 0.27729 0.6859 1.115843 0.637478 +Ta 0.91684 11.16462 0.54206 0.073874 -1.819993 0.221407 +Ta 5.69432 11.50075 1.29392 1.279331 1.42035 2.206812 +Ta 10.71239 11.30092 1.18755 -0.759539 -2.842687 -0.44627 +Ta 0.12647 0.57355 5.6744 1.485357 -0.339908 0.72473 +Ta 2.40387 1.53268 4.75274 0.971096 -0.38073 0.869134 +Ta 6.4354 2.09058 4.44464 1.8115 0.323829 -0.954613 +Ta 10.29448 1.87908 6.14933 -0.973544 0.673823 0.524211 +Ta 12.13409 2.64826 3.96133 1.041975 -0.146906 -0.101053 +Ta 1.89139 4.2711 5.14514 -1.126257 1.765095 -1.172303 +Ta 4.29285 3.26764 5.49838 1.359585 0.954058 -0.894642 +Ta 6.22054 4.99782 4.76901 -0.57103 0.193676 0.659475 +Ta 8.73015 5.75307 5.41647 0.977001 1.137808 0.707847 +Ta 9.46292 3.6411 4.00924 0.208171 -0.619736 1.487252 +Ta 11.80799 5.28602 5.31887 -1.14111 -1.708079 1.708749 +Ta 1.42351 7.04153 5.51044 0.442962 1.999421 -1.932131 +Ta 3.99608 6.77694 4.00068 0.020115 -0.082585 -0.562723 +Ta 3.50684 9.23442 5.21977 0.277684 0.652346 0.809939 +Ta 6.82787 7.1376 3.15953 0.461297 -1.023286 -0.200358 +Ta 9.15017 9.16521 3.22539 0.975528 -0.406877 -2.361923 +Ta 9.03229 9.22399 5.76536 -0.96211 0.660671 1.97306 +Ta 11.42908 7.93297 4.71336 -1.075725 2.179405 -1.299081 +Ta 0.05087 11.06881 3.63544 0.18806 -0.894103 -2.497085 +Ta 0.61823 10.14934 5.99785 0.964288 -1.323025 0.615744 +Ta 2.87244 11.55729 3.56061 -0.950735 -1.383789 -0.752604 +Ta 6.21349 9.52465 3.78915 -1.000365 1.509307 0.554842 +Ta 5.15602 12.31549 4.62675 0.565237 -0.704465 1.119632 +Ta 8.08827 11.62648 3.35101 -0.339071 0.461047 0.284645 +Ta 10.68985 11.76775 5.34052 -2.452377 -2.887406 0.054989 +Ta 0.14268 2.96019 7.28952 -1.17741 0.302926 -1.013001 +Ta 1.79625 1.2317 8.73242 1.145361 -3.820996 -0.45811 +Ta 5.07039 1.39926 7.46358 -0.781338 0.724617 -1.541559 +Ta 7.57216 0.49788 6.56353 0.962384 0.05587 -0.04513 +Ta 9.27827 2.61852 8.92732 0.176007 -0.879678 -0.926458 +Ta 6.54771 2.47044 9.38651 2.190569 0.166399 1.077573 +Ta 2.76284 3.40149 7.77645 3.137421 -0.183358 -0.704336 +Ta 1.46964 5.59388 7.81661 -3.887251 -0.228325 -0.342894 +Ta 5.28247 4.64737 8.03918 0.338155 -1.923057 0.116762 +Ta 7.44449 3.18893 6.73322 1.141594 1.207491 -0.292546 +Ta 11.12935 5.21434 8.64857 -1.612825 -2.999306 -1.714386 +Ta 1.54461 8.15093 8.61321 0.347763 2.086893 -0.257285 +Ta 3.74639 6.51293 6.87702 0.959722 -0.501443 -1.452222 +Ta 6.16432 8.04946 6.35417 0.023322 -2.311879 -2.364886 +Ta 4.17774 8.81779 8.33178 -1.45671 1.390508 1.192928 +Ta 8.79674 7.34098 7.76356 0.744674 0.017978 0.615727 +Ta 6.3995 6.81915 8.95492 -2.56268 0.245528 -0.18037 +Ta 11.65865 7.47829 7.15549 -0.141642 0.63044 2.199066 +Ta 10.36878 9.3845 9.0403 -0.66872 0.230975 -0.20666 +Ta 3.44367 12.01539 7.00233 -1.966426 -2.282219 -0.555493 +Ta 6.18022 10.72879 6.38769 -0.159595 0.636574 0.422497 +Ta 6.60979 9.53788 8.62428 1.893523 1.309962 1.811685 +Ta 7.82809 11.91798 9.44419 -1.75495 0.501787 1.526707 +Ta 9.83162 12.15132 7.88212 0.675577 0.0338 -0.256919 +Ta 12.33473 11.37557 8.23941 1.476837 0.086277 1.652827 +Ta 1.26867 0.5664 11.43089 0.552369 0.109749 -1.014297 +Ta 4.11323 2.51574 10.31659 -0.216484 0.602173 -0.337403 +Ta 6.1981 1.3171 12.07577 -0.840924 -1.268238 -1.122831 +Ta 8.93316 0.96241 11.49866 0.200771 0.591493 -0.447815 +Ta 11.51202 0.95161 12.55636 0.023759 0.436473 0.983974 +Ta 11.74771 1.34839 9.48403 -0.672837 0.114932 -0.4313 +Ta 0.37088 6.14613 10.23785 1.469982 0.175809 2.274858 +Ta 1.53343 3.45239 10.16056 -2.401632 0.95373 1.427778 +Ta 2.97984 4.88656 12.27482 -1.163376 -0.933805 -0.832442 +Ta 3.23113 5.88226 9.89191 1.644345 0.515055 -2.001086 +Ta 5.83202 4.76093 11.09154 -1.265112 -0.209543 -0.313576 +Ta 8.18149 3.7694 12.32031 -0.908072 -2.871898 -1.645014 +Ta 8.28389 5.18304 9.86813 1.06209 -0.729605 -0.590042 +Ta 10.60165 3.38032 11.14631 2.294652 0.864636 -1.210164 +Ta 2.16602 8.04842 12.06324 1.617599 0.103075 -0.814791 +Ta 5.19763 7.5131 11.34985 -0.346409 1.752742 -0.487937 +Ta 7.92875 8.24785 10.61624 0.728867 1.077493 1.692555 +Ta 10.42049 6.95313 10.57826 -0.286476 0.160363 0.370268 +Ta 12.38682 9.14199 11.43376 -0.594871 0.767297 -0.960584 +Ta 2.2479 10.73902 9.80504 -0.028268 0.335889 0.421595 +Ta 4.91854 12.45236 9.55661 -0.382663 -1.868957 -0.192626 +Ta 3.60604 12.29562 12.33442 -0.6243 -0.490257 0.799831 +Ta 5.45536 10.4337 11.30531 0.355343 -0.806764 -0.469902 +Ta 8.0691 11.11452 12.46882 0.894574 0.749785 -0.70888 +Ta 10.68626 11.50854 10.77779 0.440455 -1.251201 0.450872 diff --git a/examples/PACKAGES/pod/Ta/XYZ/Surface.xyz b/examples/PACKAGES/pod/Ta/XYZ/Surface.xyz new file mode 100644 index 0000000000..d22d2ee956 --- /dev/null +++ b/examples/PACKAGES/pod/Ta/XYZ/Surface.xyz @@ -0,0 +1,250 @@ +24 +Lattice = "4.69519013405 0.0 0.0 0.0 3.32 0.0 0.0 0.0 53.12" Properties=species:S:1:pos:R:3:forces:R:3 energy=-279.911828 stress="-9651.84 0.0 0.0 0.0 -7622.87 0.0 0.0 0.0 -272.58" +Ta 2.34759 1.66 0.09121 0.0 0.0 0.001057 +Ta 0.0 0.0 0.09121 0.0 0.0 0.001057 +Ta 0.0 1.66 2.3361 0.0 0.0 0.000335 +Ta 2.34759 0.0 2.3361 0.0 0.0 0.000335 +Ta 2.34759 1.66 4.68536 0.0 0.0 0.000274 +Ta 0.0 0.0 4.68536 0.0 0.0 0.000274 +Ta 0.0 1.66 7.03392 0.0 0.0 0.000349 +Ta 2.34759 0.0 7.03392 0.0 0.0 0.000349 +Ta 2.34759 1.66 9.38594 0.0 0.0 -0.000481 +Ta 0.0 0.0 9.38594 0.0 0.0 -0.000481 +Ta 0.0 1.66 11.73648 0.0 0.0 -0.000487 +Ta 2.34759 0.0 11.73648 0.0 0.0 -0.000487 +Ta 2.34759 1.66 14.08712 0.0 0.0 0.000487 +Ta 0.0 0.0 14.08712 0.0 0.0 0.000487 +Ta 0.0 1.66 16.43764 0.0 0.0 0.000481 +Ta 2.34759 0.0 16.43764 0.0 0.0 0.000481 +Ta 2.34759 1.66 18.78966 0.0 0.0 -0.000349 +Ta 0.0 0.0 18.78966 0.0 0.0 -0.000349 +Ta 0.0 1.66 21.13823 0.0 0.0 -0.000274 +Ta 2.34759 0.0 21.13823 0.0 0.0 -0.000274 +Ta 2.34759 1.66 23.48739 0.0 0.0 -0.000335 +Ta 0.0 0.0 23.48739 0.0 0.0 -0.000335 +Ta 0.0 1.66 25.73229 0.0 0.0 -0.001057 +Ta 2.34759 0.0 25.73229 0.0 0.0 -0.001057 +48 +Lattice = "6.64001325846 0.0 0.0 0.0 6.64001325846 0.0 0.0 0.0 39.84" Properties=species:S:1:pos:R:3:forces:R:3 energy=-555.359452 stress="-6438.73 0.0 0.0 0.0 -6438.73 0.0 0.0 0.0 -286.5" +Ta 1.66001 1.66 1.62137 0.0 0.0 -3e-05 +Ta 0.0 0.0 0.17247 0.0 0.0 0.00038 +Ta 1.66001 1.66 4.98756 0.0 0.0 0.000833 +Ta 0.0 0.0 3.27999 0.0 0.0 0.000359 +Ta 1.66001 1.66 8.28844 0.0 0.0 0.00041 +Ta 0.0 0.0 6.62582 0.0 0.0 6.6e-05 +Ta 1.66001 1.66 11.63419 0.0 0.0 -6.6e-05 +Ta 0.0 0.0 9.97156 0.0 0.0 -0.00041 +Ta 1.66001 1.66 14.98001 0.0 0.0 -0.000359 +Ta 0.0 0.0 13.27244 0.0 0.0 -0.000833 +Ta 1.66001 1.66 18.08753 0.0 0.0 -0.00038 +Ta 0.0 0.0 16.63864 0.0 0.0 3e-05 +Ta 1.66001 4.98001 1.62137 0.0 0.0 -3e-05 +Ta 0.0 3.32001 0.17247 0.0 0.0 0.00038 +Ta 1.66001 4.98001 4.98756 0.0 0.0 0.000833 +Ta 0.0 3.32001 3.27999 0.0 0.0 0.000359 +Ta 1.66001 4.98001 8.28844 0.0 0.0 0.00041 +Ta 0.0 3.32001 6.62582 0.0 0.0 6.6e-05 +Ta 1.66001 4.98001 11.63419 0.0 0.0 -6.6e-05 +Ta 0.0 3.32001 9.97156 0.0 0.0 -0.00041 +Ta 1.66001 4.98001 14.98001 0.0 0.0 -0.000359 +Ta 0.0 3.32001 13.27244 0.0 0.0 -0.000833 +Ta 1.66001 4.98001 18.08753 0.0 0.0 -0.00038 +Ta 0.0 3.32001 16.63864 0.0 0.0 3e-05 +Ta 4.98002 1.66 1.62137 0.0 0.0 -3e-05 +Ta 3.32001 0.0 0.17247 0.0 0.0 0.00038 +Ta 4.98002 1.66 4.98756 0.0 0.0 0.000833 +Ta 3.32001 0.0 3.27999 0.0 0.0 0.000359 +Ta 4.98002 1.66 8.28844 0.0 0.0 0.00041 +Ta 3.32001 0.0 6.62582 0.0 0.0 6.6e-05 +Ta 4.98002 1.66 11.63419 0.0 0.0 -6.6e-05 +Ta 3.32001 0.0 9.97156 0.0 0.0 -0.00041 +Ta 4.98002 1.66 14.98001 0.0 0.0 -0.000359 +Ta 3.32001 0.0 13.27244 0.0 0.0 -0.000833 +Ta 4.98002 1.66 18.08753 0.0 0.0 -0.00038 +Ta 3.32001 0.0 16.63864 0.0 0.0 3e-05 +Ta 4.98002 4.98001 1.62137 0.0 0.0 -3e-05 +Ta 3.32001 3.32001 0.17247 0.0 0.0 0.00038 +Ta 4.98002 4.98001 4.98756 0.0 0.0 0.000833 +Ta 3.32001 3.32001 3.27999 0.0 0.0 0.000359 +Ta 4.98002 4.98001 8.28844 0.0 0.0 0.00041 +Ta 3.32001 3.32001 6.62582 0.0 0.0 6.6e-05 +Ta 4.98002 4.98001 11.63419 0.0 0.0 -6.6e-05 +Ta 3.32001 3.32001 9.97156 0.0 0.0 -0.00041 +Ta 4.98002 4.98001 14.98001 0.0 0.0 -0.000359 +Ta 3.32001 3.32001 13.27244 0.0 0.0 -0.000833 +Ta 4.98002 4.98001 18.08753 0.0 0.0 -0.00038 +Ta 3.32001 3.32001 16.63864 0.0 0.0 3e-05 +40 +Lattice = "4.69518993616 0.0 0.0 0.0 8.13231015027 0.0 0.0 0.0 36.52" Properties=species:S:1:pos:R:3:forces:R:3 energy=-459.216162 stress="-27041.87 0.0 0.0 0.0 -26744.41 19.599999999999998 0.0 19.599999999999998 -29530.539999999997" +Ta 2.34759 6.77692 0.9584 0.0 0.00104 0.266836 +Ta 0.0 2.71077 0.9584 0.0 0.00104 0.266836 +Ta 2.34759 4.06615 0.0 0.0 -0.000781 2.01398 +Ta 2.34759 4.06615 2.8752 0.0 0.002127 -0.707743 +Ta 0.0 5.42154 1.9168 0.0 -0.0035 -1.222398 +Ta 2.34759 6.77692 3.83361 0.0 0.000551 -0.353108 +Ta 0.0 0.0 0.0 0.0 -0.000781 2.01398 +Ta 0.0 0.0 2.8752 0.0 0.002127 -0.707743 +Ta 2.34759 1.35538 1.9168 0.0 -0.0035 -1.222398 +Ta 0.0 2.71077 3.83361 0.0 0.000551 -0.353108 +Ta 0.0 5.42154 4.79201 0.0 0.001693 -0.22097 +Ta 2.34759 6.77692 6.70881 0.0 0.000422 -0.070866 +Ta 2.34759 1.35538 4.79201 0.0 0.001693 -0.22097 +Ta 0.0 2.71077 6.70881 0.0 0.000422 -0.070866 +Ta 2.34759 4.06615 5.75041 0.0 -0.000841 0.251247 +Ta 2.34759 4.06615 8.62561 0.0 -0.000554 0.023395 +Ta 0.0 5.42154 7.66721 0.0 -0.000869 -0.03418 +Ta 0.0 0.0 5.75041 0.0 -0.000841 0.251247 +Ta 0.0 0.0 8.62561 0.0 -0.000554 0.023395 +Ta 2.34759 1.35538 7.66721 0.0 -0.000869 -0.03418 +Ta 0.0 5.42154 10.5424 0.0 0.000869 0.03418 +Ta 2.34759 6.77692 9.58401 0.0 0.000554 -0.023395 +Ta 2.34759 6.77692 12.4592 0.0 0.000841 -0.251247 +Ta 2.34759 1.35538 10.5424 0.0 0.000869 0.03418 +Ta 0.0 2.71077 9.58401 0.0 0.000554 -0.023395 +Ta 0.0 2.71077 12.4592 0.0 0.000841 -0.251247 +Ta 2.34759 4.06615 11.5008 0.0 -0.000422 0.070866 +Ta 0.0 5.42154 13.4176 0.0 -0.001693 0.22097 +Ta 0.0 0.0 11.5008 0.0 -0.000422 0.070866 +Ta 2.34759 1.35538 13.4176 0.0 -0.001693 0.22097 +Ta 2.34759 4.06615 14.376 0.0 -0.000551 0.353108 +Ta 0.0 5.42154 16.2928 0.0 0.0035 1.222398 +Ta 2.34759 6.77692 15.3344 0.0 -0.002127 0.707743 +Ta 2.34759 6.77692 18.2096 0.0 0.000781 -2.01398 +Ta 0.0 0.0 14.376 0.0 -0.000551 0.353108 +Ta 2.34759 1.35538 16.2928 0.0 0.0035 1.222398 +Ta 0.0 2.71077 15.3344 0.0 -0.002127 0.707743 +Ta 0.0 2.71077 18.2096 0.0 0.000781 -2.01398 +Ta 2.34759 4.06615 17.2512 0.0 -0.00104 -0.266836 +Ta 0.0 0.0 17.2512 0.0 -0.00104 -0.266836 +40 +Lattice = "4.69518993616 0.0 0.0 0.0 8.13231015027 0.0 0.0 0.0 36.52" Properties=species:S:1:pos:R:3:forces:R:3 energy=-461.144076 stress="-6214.78 0.0 0.0 0.0 -6110.78 11.43 0.0 11.43 -124.44" +Ta 2.34759 6.77677 1.02996 0.0 4.9e-05 0.000956 +Ta 0.0 2.71062 1.02996 0.0 4.9e-05 0.000956 +Ta 2.34759 4.06617 0.30181 0.0 -0.000436 0.000304 +Ta 2.34759 4.0661 2.9333 0.0 0.000405 -0.000621 +Ta 0.0 5.42161 1.81457 0.0 -0.000256 -0.000454 +Ta 2.34759 6.77673 3.82136 0.0 0.000483 0.001188 +Ta 0.0 2e-05 0.30181 0.0 -0.000436 0.000304 +Ta 0.0 8.13226 2.9333 0.0 0.000405 -0.000621 +Ta 2.34759 1.35545 1.81457 0.0 -0.000256 -0.000454 +Ta 0.0 2.71058 3.82136 0.0 0.000483 0.001188 +Ta 0.0 5.42171 4.75865 0.0 -0.000286 3.9e-05 +Ta 2.34759 6.77697 6.68474 0.0 0.000174 0.001115 +Ta 2.34759 1.35555 4.75865 0.0 -0.000286 3.9e-05 +Ta 0.0 2.71082 6.68474 0.0 0.000174 0.001115 +Ta 2.34759 4.06631 5.76725 0.0 0.000154 -0.0006 +Ta 2.34759 4.0661 8.64133 0.0 0.000311 0.000365 +Ta 0.0 5.42175 7.66351 0.0 -0.000264 -0.00059 +Ta 0.0 0.00016 5.76725 0.0 0.000154 -0.0006 +Ta 0.0 -5e-05 8.64133 0.0 0.000311 0.000365 +Ta 2.34759 1.35559 7.66351 0.0 -0.000264 -0.00059 +Ta 0.0 5.42176 10.5454 0.0 -0.000164 0.000261 +Ta 2.34759 6.77681 9.56856 0.0 0.000347 -0.001383 +Ta 2.34759 6.77657 12.44226 0.0 0.000206 0.000791 +Ta 2.34759 1.3556 10.5454 0.0 -0.000164 0.000261 +Ta 0.0 2.71066 9.56856 0.0 0.000347 -0.001383 +Ta 0.0 2.71042 12.44226 0.0 0.000206 0.000791 +Ta 2.34759 4.06598 11.52478 0.0 0.000279 -0.00135 +Ta 0.0 5.42175 13.45118 0.0 -0.000329 -0.001033 +Ta 0.0 8.13214 11.52478 0.0 0.000279 -0.00135 +Ta 2.34759 1.35559 13.45118 0.0 -0.000329 -0.001033 +Ta 2.34759 4.06624 14.38799 0.0 0.000351 -0.000576 +Ta 0.0 5.4218 16.39523 0.0 -0.000453 0.0004 +Ta 2.34759 6.77687 15.2766 0.0 0.000189 0.001532 +Ta 2.34759 6.77657 17.90814 0.0 -0.000603 -0.00011 +Ta 0.0 9e-05 14.38799 0.0 0.000351 -0.000576 +Ta 2.34759 1.35564 16.39523 0.0 -0.000453 0.0004 +Ta 0.0 2.71072 15.2766 0.0 0.000189 0.001532 +Ta 0.0 2.71042 17.90814 0.0 -0.000603 -0.00011 +Ta 2.34759 4.06617 17.17945 0.0 -0.000157 -0.000235 +Ta 0.0 2e-05 17.17945 0.0 -0.000157 -0.000235 +24 +Lattice = "4.69519013405 0.0 0.0 0.0 3.32 0.0 0.0 0.0 53.12" Properties=species:S:1:pos:R:3:forces:R:3 energy=-279.635146 stress="-21250.23 0.0 0.0 0.0 -20345.210000000003 0.0 0.0 0.0 -14676.96" +Ta 2.34759 1.66 0.0 0.0 0.0 0.48507 +Ta 0.0 0.0 0.0 0.0 0.0 0.48507 +Ta 0.0 1.66 2.34759 0.0 0.0 -0.412878 +Ta 2.34759 0.0 2.34759 0.0 0.0 -0.412878 +Ta 2.34759 1.66 4.69519 0.0 0.0 -0.096961 +Ta 0.0 0.0 4.69519 0.0 0.0 -0.096961 +Ta 0.0 1.66 7.04278 0.0 0.0 0.008179 +Ta 2.34759 0.0 7.04278 0.0 0.0 0.008179 +Ta 2.34759 1.66 9.39038 0.0 0.0 -0.003881 +Ta 0.0 0.0 9.39038 0.0 0.0 -0.003881 +Ta 0.0 1.66 11.738 0.0 0.0 0.002591 +Ta 2.34759 0.0 11.738 0.0 0.0 0.002591 +Ta 2.34759 1.66 14.0856 0.0 0.0 -0.002591 +Ta 0.0 0.0 14.0856 0.0 0.0 -0.002591 +Ta 0.0 1.66 16.4332 0.0 0.0 0.003881 +Ta 2.34759 0.0 16.4332 0.0 0.0 0.003881 +Ta 2.34759 1.66 18.7808 0.0 0.0 -0.008179 +Ta 0.0 0.0 18.7808 0.0 0.0 -0.008179 +Ta 0.0 1.66 21.1284 0.0 0.0 0.096961 +Ta 2.34759 0.0 21.1284 0.0 0.0 0.096961 +Ta 2.34759 1.66 23.4759 0.0 0.0 0.412878 +Ta 0.0 0.0 23.4759 0.0 0.0 0.412878 +Ta 0.0 1.66 25.8235 0.0 0.0 -0.48507 +Ta 2.34759 0.0 25.8235 0.0 0.0 -0.48507 +30 +Lattice = "5.75040976524 0.0 0.0 0.0 4.69518993616 0.0 0.0 0.0 39.84" Properties=species:S:1:pos:R:3:forces:R:3 energy=-346.592525 stress="-9399.49 0.0 -208.25 0.0 -11819.32 0.0 -208.25 0.0 132.24" +Ta 0.9892 0.0 2.7203 0.001551 0.0 -0.000488 +Ta 0.00727 2.34759 4.07239 0.001169 0.0 -0.000766 +Ta 2.88247 2.34759 4.07239 0.001169 0.0 -0.000766 +Ta 0.17997 0.0 0.18449 0.002466 0.0 -0.001108 +Ta 3.05517 0.0 0.18449 0.002466 0.0 -0.001108 +Ta 1.87083 2.34759 1.32776 -0.000874 0.0 -0.001517 +Ta 4.74604 2.34759 1.32776 -0.000874 0.0 -0.001517 +Ta 3.86441 0.0 2.7203 0.001551 0.0 -0.000488 +Ta 0.94648 2.34759 6.77133 0.00042 0.0 -0.000294 +Ta 0.00117 0.0 8.1367 0.000452 0.0 9.6e-05 +Ta 2.87637 0.0 8.1367 0.000452 0.0 9.6e-05 +Ta 1.91123 0.0 5.41489 0.001544 0.0 -5.7e-05 +Ta 4.78644 0.0 5.41489 0.001544 0.0 -5.7e-05 +Ta 3.82169 2.34759 6.77133 0.00042 0.0 -0.000294 +Ta 0.95723 0.0 10.83871 -0.000452 0.0 -9.6e-05 +Ta 0.01192 2.34759 12.20409 -0.00042 0.0 0.000294 +Ta 2.88712 2.34759 12.20409 -0.00042 0.0 0.000294 +Ta 1.9168 2.34759 9.48769 0.0 0.0 0.0 +Ta 4.79201 2.34759 9.48769 0.0 0.0 0.0 +Ta 3.83244 0.0 10.83871 -0.000452 0.0 -9.6e-05 +Ta 0.95113 2.34759 14.90296 -0.001169 0.0 0.000766 +Ta 5.71961 0.0 16.25507 -0.001551 0.0 0.000488 +Ta 2.8444 0.0 16.25507 -0.001551 0.0 0.000488 +Ta 1.96277 2.34759 17.64762 0.000874 0.0 0.001517 +Ta 4.83798 2.34759 17.64762 0.000874 0.0 0.001517 +Ta 1.92237 0.0 13.56045 -0.001544 0.0 5.7e-05 +Ta 4.79758 0.0 13.56045 -0.001544 0.0 5.7e-05 +Ta 3.82634 2.34759 14.90296 -0.001169 0.0 0.000766 +Ta 0.77843 0.0 18.79091 -0.002466 0.0 0.001108 +Ta 3.65364 0.0 18.79091 -0.002466 0.0 0.001108 +30 +Lattice = "5.75040976524 0.0 0.0 0.0 4.69518993616 0.0 0.0 0.0 39.84" Properties=species:S:1:pos:R:3:forces:R:3 energy=-345.744506 stress="-26530.08 0.0 -2915.02 0.0 -25603.77 0.0 -2915.02 0.0 -21262.54" +Ta 0.9584 0.0 2.71077 0.048753 0.0 -0.789488 +Ta 0.0 2.34759 4.06615 0.000543 0.0 0.103698 +Ta 2.8752 2.34759 4.06615 0.000543 0.0 0.103698 +Ta 0.0 0.0 0.0 0.302653 0.0 1.1858 +Ta 2.8752 0.0 0.0 0.302653 0.0 1.1858 +Ta 1.9168 2.34759 1.35538 -0.326078 0.0 -0.402735 +Ta 4.79201 2.34759 1.35538 -0.326078 0.0 -0.402735 +Ta 3.83361 0.0 2.71077 0.048753 0.0 -0.789488 +Ta 0.9584 2.34759 6.77692 -0.058605 0.0 -0.050501 +Ta 0.0 0.0 8.13231 0.022525 0.0 0.111412 +Ta 2.8752 0.0 8.13231 0.022525 0.0 0.111412 +Ta 1.9168 0.0 5.42154 0.017191 0.0 -0.139574 +Ta 4.79201 0.0 5.42154 0.017191 0.0 -0.139574 +Ta 3.83361 2.34759 6.77692 -0.058605 0.0 -0.050501 +Ta 0.9584 0.0 10.8431 -0.022525 0.0 -0.111412 +Ta 0.0 2.34759 12.1985 0.058605 0.0 0.050501 +Ta 2.8752 2.34759 12.1985 0.058605 0.0 0.050501 +Ta 1.9168 2.34759 9.48769 0.0 0.0 0.0 +Ta 4.79201 2.34759 9.48769 0.0 0.0 0.0 +Ta 3.83361 0.0 10.8431 -0.022525 0.0 -0.111412 +Ta 0.9584 2.34759 14.9092 -0.000543 0.0 -0.103698 +Ta 0.0 0.0 16.2646 -0.048753 0.0 0.789488 +Ta 2.8752 0.0 16.2646 -0.048753 0.0 0.789488 +Ta 1.9168 2.34759 17.62 0.326078 0.0 0.402735 +Ta 4.79201 2.34759 17.62 0.326078 0.0 0.402735 +Ta 1.9168 0.0 13.5538 -0.017191 0.0 0.139574 +Ta 4.79201 0.0 13.5538 -0.017191 0.0 0.139574 +Ta 3.83361 2.34759 14.9092 -0.000543 0.0 -0.103698 +Ta 0.9584 0.0 18.9754 -0.302653 0.0 -1.1858 +Ta 3.83361 0.0 18.9754 -0.302653 0.0 -1.1858 diff --git a/examples/PACKAGES/pod/Ta/XYZ/Volume_A15.xyz b/examples/PACKAGES/pod/Ta/XYZ/Volume_A15.xyz new file mode 100644 index 0000000000..41e9be5a6d --- /dev/null +++ b/examples/PACKAGES/pod/Ta/XYZ/Volume_A15.xyz @@ -0,0 +1,300 @@ +8 +Lattice = "6.7 0.0 0.0 0.0 6.7 0.0 0.0 0.0 6.7" Properties=species:S:1:pos:R:3:forces:R:3 energy=-66.990732 stress="-312387.88 0.0 -0.0 0.0 -312387.88 0.0 -0.0 0.0 -312387.88" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 3.35 3.35 3.35 0.0 0.0 0.0 +Ta 1.675 3.35 0.0 0.0 0.0 0.0 +Ta 5.025 3.35 0.0 0.0 0.0 0.0 +Ta 0.0 1.675 3.35 0.0 0.0 0.0 +Ta 0.0 5.025 3.35 0.0 0.0 0.0 +Ta 3.35 0.0 1.675 0.0 0.0 0.0 +Ta 3.35 0.0 5.025 0.0 0.0 0.0 +8 +Lattice = "4.6 0.0 0.0 0.0 4.6 0.0 0.0 0.0 4.6" Properties=species:S:1:pos:R:3:forces:R:3 energy=-72.957807 stress="1835613.98 0.0 -0.0 0.0 1835613.98 0.0 -0.0 0.0 1835613.98" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 2.3 2.3 2.3 0.0 0.0 0.0 +Ta 1.15 2.3 0.0 0.0 0.0 0.0 +Ta 3.45 2.3 0.0 0.0 0.0 0.0 +Ta 0.0 1.15 2.3 0.0 0.0 0.0 +Ta 0.0 3.45 2.3 0.0 0.0 0.0 +Ta 2.3 0.0 1.15 0.0 0.0 0.0 +Ta 2.3 0.0 3.45 0.0 0.0 0.0 +8 +Lattice = "5.2 0.0 0.0 0.0 5.2 0.0 0.0 0.0 5.2" Properties=species:S:1:pos:R:3:forces:R:3 energy=-94.145745 stress="145354.31 0.0 0.0 0.0 145354.31 -0.0 0.0 -0.0 145354.31" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 2.6 2.6 2.6 0.0 0.0 0.0 +Ta 1.3 2.6 0.0 0.0 0.0 0.0 +Ta 3.9 2.6 0.0 0.0 0.0 0.0 +Ta 0.0 1.3 2.6 0.0 0.0 0.0 +Ta 0.0 3.9 2.6 0.0 0.0 0.0 +Ta 2.6 0.0 1.3 0.0 0.0 0.0 +Ta 2.6 0.0 3.9 0.0 0.0 0.0 +8 +Lattice = "5.3 0.0 0.0 0.0 5.3 0.0 0.0 0.0 5.3" Properties=species:S:1:pos:R:3:forces:R:3 energy=-94.554682 stress="18038.98 0.0 -0.0 0.0 18038.98 -0.0 -0.0 -0.0 18038.98" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 2.65 2.65 2.65 0.0 0.0 0.0 +Ta 1.325 2.65 0.0 0.0 0.0 0.0 +Ta 3.975 2.65 0.0 0.0 0.0 0.0 +Ta 0.0 1.325 2.65 0.0 0.0 0.0 +Ta 0.0 3.975 2.65 0.0 0.0 0.0 +Ta 2.65 0.0 1.325 0.0 0.0 0.0 +Ta 2.65 0.0 3.975 0.0 0.0 0.0 +8 +Lattice = "4.7 0.0 0.0 0.0 4.7 0.0 0.0 0.0 4.7" Properties=species:S:1:pos:R:3:forces:R:3 energy=-79.438363 stress="1385239.49 0.0 0.0 0.0 1385239.49 0.0 0.0 0.0 1385239.49" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 2.35 2.35 2.35 0.0 0.0 0.0 +Ta 1.175 2.35 0.0 0.0 0.0 0.0 +Ta 3.525 2.35 0.0 0.0 0.0 0.0 +Ta 0.0 1.175 2.35 0.0 0.0 0.0 +Ta 0.0 3.525 2.35 0.0 0.0 0.0 +Ta 2.35 0.0 1.175 0.0 0.0 0.0 +Ta 2.35 0.0 3.525 0.0 0.0 0.0 +8 +Lattice = "6.6 0.0 0.0 0.0 6.6 0.0 0.0 0.0 6.6" Properties=species:S:1:pos:R:3:forces:R:3 energy=-69.627817 stress="-324717.99 0.0 0.0 0.0 -324717.99 0.0 0.0 0.0 -324717.99" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 3.3 3.3 3.3 0.0 0.0 0.0 +Ta 1.65 3.3 0.0 0.0 0.0 0.0 +Ta 4.95 3.3 0.0 0.0 0.0 0.0 +Ta 0.0 1.65 3.3 0.0 0.0 0.0 +Ta 0.0 4.95 3.3 0.0 0.0 0.0 +Ta 3.3 0.0 1.65 0.0 0.0 0.0 +Ta 3.3 0.0 4.95 0.0 0.0 0.0 +8 +Lattice = "6.1 0.0 0.0 0.0 6.1 0.0 0.0 0.0 6.1" Properties=species:S:1:pos:R:3:forces:R:3 energy=-82.604907 stress="-350351.07 0.0 0.0 0.0 -350351.07 0.0 0.0 0.0 -350351.07" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 3.05 3.05 3.05 0.0 0.0 0.0 +Ta 1.525 3.05 0.0 0.0 0.0 0.0 +Ta 4.575 3.05 0.0 0.0 0.0 0.0 +Ta 0.0 1.525 3.05 0.0 0.0 0.0 +Ta 0.0 4.575 3.05 0.0 0.0 0.0 +Ta 3.05 0.0 1.525 0.0 0.0 0.0 +Ta 3.05 0.0 4.575 0.0 0.0 0.0 +8 +Lattice = "4.0 0.0 0.0 0.0 4.0 0.0 0.0 0.0 4.0" Properties=species:S:1:pos:R:3:forces:R:3 energy=14.89048 stress="8403695.620000001 0.0 0.0 0.0 8403695.620000001 0.0 0.0 0.0 8403695.620000001" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 2.0 2.0 2.0 0.0 0.0 0.0 +Ta 1.0 2.0 0.0 0.0 0.0 0.0 +Ta 3.0 2.0 0.0 0.0 0.0 0.0 +Ta 0.0 1.0 2.0 0.0 0.0 0.0 +Ta 0.0 3.0 2.0 0.0 0.0 0.0 +Ta 2.0 0.0 1.0 0.0 0.0 0.0 +Ta 2.0 0.0 3.0 0.0 0.0 0.0 +8 +Lattice = "5.4 0.0 0.0 0.0 5.4 0.0 0.0 0.0 5.4" Properties=species:S:1:pos:R:3:forces:R:3 energy=-94.367599 stress="-83756.66 -0.0 0.0 -0.0 -83756.66 -0.0 0.0 -0.0 -83756.66" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 2.7 2.7 2.7 0.0 0.0 0.0 +Ta 1.35 2.7 0.0 0.0 0.0 0.0 +Ta 4.05 2.7 0.0 0.0 0.0 0.0 +Ta 0.0 1.35 2.7 0.0 0.0 0.0 +Ta 0.0 4.05 2.7 0.0 0.0 0.0 +Ta 2.7 0.0 1.35 0.0 0.0 0.0 +Ta 2.7 0.0 4.05 0.0 0.0 0.0 +8 +Lattice = "5.8 0.0 0.0 0.0 5.8 0.0 0.0 0.0 5.8" Properties=species:S:1:pos:R:3:forces:R:3 energy=-89.248227 stress="-305522.26 0.0 0.0 0.0 -305522.26 -0.0 0.0 -0.0 -305522.26" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 2.9 2.9 2.9 0.0 0.0 0.0 +Ta 1.45 2.9 0.0 0.0 0.0 0.0 +Ta 4.35 2.9 0.0 0.0 0.0 0.0 +Ta 0.0 1.45 2.9 0.0 0.0 0.0 +Ta 0.0 4.35 2.9 0.0 0.0 0.0 +Ta 2.9 0.0 1.45 0.0 0.0 0.0 +Ta 2.9 0.0 4.35 0.0 0.0 0.0 +8 +Lattice = "5.9 0.0 0.0 0.0 5.9 0.0 0.0 0.0 5.9" Properties=species:S:1:pos:R:3:forces:R:3 energy=-87.211997 stress="-328516.14999999997 -0.0 0.0 -0.0 -328516.14999999997 0.0 0.0 0.0 -328516.14999999997" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 2.95 2.95 2.95 0.0 0.0 0.0 +Ta 1.475 2.95 0.0 0.0 0.0 0.0 +Ta 4.425 2.95 0.0 0.0 0.0 0.0 +Ta 0.0 1.475 2.95 0.0 0.0 0.0 +Ta 0.0 4.425 2.95 0.0 0.0 0.0 +Ta 2.95 0.0 1.475 0.0 0.0 0.0 +Ta 2.95 0.0 4.425 0.0 0.0 0.0 +8 +Lattice = "5.5 0.0 0.0 0.0 5.5 0.0 0.0 0.0 5.5" Properties=species:S:1:pos:R:3:forces:R:3 energy=-93.66897 stress="-164011.68000000002 -0.0 0.0 -0.0 -164011.68000000002 0.0 0.0 0.0 -164011.68000000002" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 2.75 2.75 2.75 0.0 0.0 0.0 +Ta 1.375 2.75 0.0 0.0 0.0 0.0 +Ta 4.125 2.75 0.0 0.0 0.0 0.0 +Ta 0.0 1.375 2.75 0.0 0.0 0.0 +Ta 0.0 4.125 2.75 0.0 0.0 0.0 +Ta 2.75 0.0 1.375 0.0 0.0 0.0 +Ta 2.75 0.0 4.125 0.0 0.0 0.0 +8 +Lattice = "4.1 0.0 0.0 0.0 4.1 0.0 0.0 0.0 4.1" Properties=species:S:1:pos:R:3:forces:R:3 energy=-7.989166 stress="6580211.09 0.0 0.0 0.0 6580211.09 0.0 0.0 0.0 6580211.09" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 2.05 2.05 2.05 0.0 0.0 0.0 +Ta 1.025 2.05 0.0 0.0 0.0 0.0 +Ta 3.075 2.05 0.0 0.0 0.0 0.0 +Ta 0.0 1.025 2.05 0.0 0.0 0.0 +Ta 0.0 3.075 2.05 0.0 0.0 0.0 +Ta 2.05 0.0 1.025 0.0 0.0 0.0 +Ta 2.05 0.0 3.075 0.0 0.0 0.0 +8 +Lattice = "6.0 0.0 0.0 0.0 6.0 0.0 0.0 0.0 6.0" Properties=species:S:1:pos:R:3:forces:R:3 energy=-84.982834 stress="-342905.56 0.0 -0.0 0.0 -342905.56 -0.0 -0.0 -0.0 -342905.56" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 3.0 3.0 3.0 0.0 0.0 0.0 +Ta 1.5 3.0 0.0 0.0 0.0 0.0 +Ta 4.5 3.0 0.0 0.0 0.0 0.0 +Ta 0.0 1.5 3.0 0.0 0.0 0.0 +Ta 0.0 4.5 3.0 0.0 0.0 0.0 +Ta 3.0 0.0 1.5 0.0 0.0 0.0 +Ta 3.0 0.0 4.5 0.0 0.0 0.0 +8 +Lattice = "5.6 0.0 0.0 0.0 5.6 0.0 0.0 0.0 5.6" Properties=species:S:1:pos:R:3:forces:R:3 energy=-92.536373 stress="-225855.3 0.0 -0.0 0.0 -225855.3 0.0 -0.0 0.0 -225855.3" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 2.8 2.8 2.8 0.0 0.0 0.0 +Ta 1.4 2.8 0.0 0.0 0.0 0.0 +Ta 4.2 2.8 0.0 0.0 0.0 0.0 +Ta 0.0 1.4 2.8 0.0 0.0 0.0 +Ta 0.0 4.2 2.8 0.0 0.0 0.0 +Ta 2.8 0.0 1.4 0.0 0.0 0.0 +Ta 2.8 0.0 4.2 0.0 0.0 0.0 +8 +Lattice = "4.2 0.0 0.0 0.0 4.2 0.0 0.0 0.0 4.2" Properties=species:S:1:pos:R:3:forces:R:3 energy=-26.77612 stress="5138714.33 -0.0 -0.0 -0.0 5138714.33 0.0 -0.0 0.0 5138714.33" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 2.1 2.1 2.1 0.0 0.0 0.0 +Ta 1.05 2.1 0.0 0.0 0.0 0.0 +Ta 3.15 2.1 0.0 0.0 0.0 0.0 +Ta 0.0 1.05 2.1 0.0 0.0 0.0 +Ta 0.0 3.15 2.1 0.0 0.0 0.0 +Ta 2.1 0.0 1.05 0.0 0.0 0.0 +Ta 2.1 0.0 3.15 0.0 0.0 0.0 +8 +Lattice = "6.3 0.0 0.0 0.0 6.3 0.0 0.0 0.0 6.3" Properties=species:S:1:pos:R:3:forces:R:3 energy=-77.544107 stress="-349968.45 0.0 0.0 0.0 -349968.45 0.0 0.0 0.0 -349968.45" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 3.15 3.15 3.15 0.0 0.0 0.0 +Ta 1.575 3.15 0.0 0.0 0.0 0.0 +Ta 4.725 3.15 0.0 0.0 0.0 0.0 +Ta 0.0 1.575 3.15 0.0 0.0 0.0 +Ta 0.0 4.725 3.15 0.0 0.0 0.0 +Ta 3.15 0.0 1.575 0.0 0.0 0.0 +Ta 3.15 0.0 4.725 0.0 0.0 0.0 +8 +Lattice = "6.2 0.0 0.0 0.0 6.2 0.0 0.0 0.0 6.2" Properties=species:S:1:pos:R:3:forces:R:3 energy=-80.114217 stress="-352410.12 0.0 0.0 0.0 -352410.12 0.0 0.0 0.0 -352410.12" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 3.1 3.1 3.1 0.0 0.0 0.0 +Ta 1.55 3.1 0.0 0.0 0.0 0.0 +Ta 4.65 3.1 0.0 0.0 0.0 0.0 +Ta 0.0 1.55 3.1 0.0 0.0 0.0 +Ta 0.0 4.65 3.1 0.0 0.0 0.0 +Ta 3.1 0.0 1.55 0.0 0.0 0.0 +Ta 3.1 0.0 4.65 0.0 0.0 0.0 +8 +Lattice = "4.3 0.0 0.0 0.0 4.3 0.0 0.0 0.0 4.3" Properties=species:S:1:pos:R:3:forces:R:3 energy=-42.143041 stress="4001608.1 -0.0 -0.0 -0.0 4001608.1 -0.0 -0.0 -0.0 4001608.1" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 2.15 2.15 2.15 0.0 0.0 0.0 +Ta 1.075 2.15 0.0 0.0 0.0 0.0 +Ta 3.225 2.15 0.0 0.0 0.0 0.0 +Ta 0.0 1.075 2.15 0.0 0.0 0.0 +Ta 0.0 3.225 2.15 0.0 0.0 0.0 +Ta 2.15 0.0 1.075 0.0 0.0 0.0 +Ta 2.15 0.0 3.225 0.0 0.0 0.0 +8 +Lattice = "5.7 0.0 0.0 0.0 5.7 0.0 0.0 0.0 5.7" Properties=species:S:1:pos:R:3:forces:R:3 energy=-91.040671 stress="-272236.58 -0.0 0.0 -0.0 -272236.58 -0.0 0.0 -0.0 -272236.58" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 2.85 2.85 2.85 0.0 0.0 0.0 +Ta 1.425 2.85 0.0 0.0 0.0 0.0 +Ta 4.275 2.85 0.0 0.0 0.0 0.0 +Ta 0.0 1.425 2.85 0.0 0.0 0.0 +Ta 0.0 4.275 2.85 0.0 0.0 0.0 +Ta 2.85 0.0 1.425 0.0 0.0 0.0 +Ta 2.85 0.0 4.275 0.0 0.0 0.0 +8 +Lattice = "4.8 0.0 0.0 0.0 4.8 0.0 0.0 0.0 4.8" Properties=species:S:1:pos:R:3:forces:R:3 energy=-84.499231 stress="1025744.96 -0.0 -0.0 -0.0 1025744.96 -0.0 -0.0 -0.0 1025744.96" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 2.4 2.4 2.4 0.0 0.0 0.0 +Ta 1.2 2.4 0.0 0.0 0.0 0.0 +Ta 3.6 2.4 0.0 0.0 0.0 0.0 +Ta 0.0 1.2 2.4 0.0 0.0 0.0 +Ta 0.0 3.6 2.4 0.0 0.0 0.0 +Ta 2.4 0.0 1.2 0.0 0.0 0.0 +Ta 2.4 0.0 3.6 0.0 0.0 0.0 +8 +Lattice = "6.9 0.0 0.0 0.0 6.9 0.0 0.0 0.0 6.9" Properties=species:S:1:pos:R:3:forces:R:3 energy=-61.825173 stress="-284789.87 -0.0 -0.0 -0.0 -284789.87 -0.0 -0.0 -0.0 -284789.87" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 3.45 3.45 3.45 0.0 0.0 0.0 +Ta 1.725 3.45 0.0 0.0 0.0 0.0 +Ta 5.175 3.45 0.0 0.0 0.0 0.0 +Ta 0.0 1.725 3.45 0.0 0.0 0.0 +Ta 0.0 5.175 3.45 0.0 0.0 0.0 +Ta 3.45 0.0 1.725 0.0 0.0 0.0 +Ta 3.45 0.0 5.175 0.0 0.0 0.0 +8 +Lattice = "5.0 0.0 0.0 0.0 5.0 0.0 0.0 0.0 5.0" Properties=species:S:1:pos:R:3:forces:R:3 energy=-91.156873 stress="496748.23 -0.0 0.0 -0.0 496748.23 0.0 0.0 0.0 496748.23" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 2.5 2.5 2.5 0.0 0.0 0.0 +Ta 1.25 2.5 0.0 0.0 0.0 0.0 +Ta 3.75 2.5 0.0 0.0 0.0 0.0 +Ta 0.0 1.25 2.5 0.0 0.0 0.0 +Ta 0.0 3.75 2.5 0.0 0.0 0.0 +Ta 2.5 0.0 1.25 0.0 0.0 0.0 +Ta 2.5 0.0 3.75 0.0 0.0 0.0 +8 +Lattice = "4.4 0.0 0.0 0.0 4.4 0.0 0.0 0.0 4.4" Properties=species:S:1:pos:R:3:forces:R:3 energy=-54.658744 stress="3103602.33 0.0 -0.0 0.0 3103602.33 -0.0 -0.0 -0.0 3103602.33" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 2.2 2.2 2.2 0.0 0.0 0.0 +Ta 1.1 2.2 0.0 0.0 0.0 0.0 +Ta 3.3 2.2 0.0 0.0 0.0 0.0 +Ta 0.0 1.1 2.2 0.0 0.0 0.0 +Ta 0.0 3.3 2.2 0.0 0.0 0.0 +Ta 2.2 0.0 1.1 0.0 0.0 0.0 +Ta 2.2 0.0 3.3 0.0 0.0 0.0 +8 +Lattice = "6.5 0.0 0.0 0.0 6.5 0.0 0.0 0.0 6.5" Properties=species:S:1:pos:R:3:forces:R:3 energy=-72.277255 stress="-335267.83999999997 -0.0 -0.0 -0.0 -335267.83999999997 -0.0 -0.0 -0.0 -335267.83999999997" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 3.25 3.25 3.25 0.0 0.0 0.0 +Ta 1.625 3.25 0.0 0.0 0.0 0.0 +Ta 4.875 3.25 0.0 0.0 0.0 0.0 +Ta 0.0 1.625 3.25 0.0 0.0 0.0 +Ta 0.0 4.875 3.25 0.0 0.0 0.0 +Ta 3.25 0.0 1.625 0.0 0.0 0.0 +Ta 3.25 0.0 4.875 0.0 0.0 0.0 +8 +Lattice = "6.4 0.0 0.0 0.0 6.4 0.0 0.0 0.0 6.4" Properties=species:S:1:pos:R:3:forces:R:3 energy=-74.923334 stress="-344004.72000000003 -0.0 -0.0 -0.0 -344004.72000000003 -0.0 -0.0 -0.0 -344004.72000000003" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 3.2 3.2 3.2 0.0 0.0 0.0 +Ta 1.6 3.2 0.0 0.0 0.0 0.0 +Ta 4.8 3.2 0.0 0.0 0.0 0.0 +Ta 0.0 1.6 3.2 0.0 0.0 0.0 +Ta 0.0 4.8 3.2 0.0 0.0 0.0 +Ta 3.2 0.0 1.6 0.0 0.0 0.0 +Ta 3.2 0.0 4.8 0.0 0.0 0.0 +8 +Lattice = "4.5 0.0 0.0 0.0 4.5 0.0 0.0 0.0 4.5" Properties=species:S:1:pos:R:3:forces:R:3 energy=-64.798066 stress="2398125.0500000003 0.0 0.0 0.0 2398125.0500000003 0.0 0.0 0.0 2398125.0500000003" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 2.25 2.25 2.25 0.0 0.0 0.0 +Ta 1.125 2.25 0.0 0.0 0.0 0.0 +Ta 3.375 2.25 0.0 0.0 0.0 0.0 +Ta 0.0 1.125 2.25 0.0 0.0 0.0 +Ta 0.0 3.375 2.25 0.0 0.0 0.0 +Ta 2.25 0.0 1.125 0.0 0.0 0.0 +Ta 2.25 0.0 3.375 0.0 0.0 0.0 +8 +Lattice = "5.1 0.0 0.0 0.0 5.1 0.0 0.0 0.0 5.1" Properties=species:S:1:pos:R:3:forces:R:3 energy=-93.048342 stress="302698.75 0.0 -0.0 0.0 302698.75 -0.0 -0.0 -0.0 302698.75" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 2.55 2.55 2.55 0.0 0.0 0.0 +Ta 1.275 2.55 0.0 0.0 0.0 0.0 +Ta 3.825 2.55 0.0 0.0 0.0 0.0 +Ta 0.0 1.275 2.55 0.0 0.0 0.0 +Ta 0.0 3.825 2.55 0.0 0.0 0.0 +Ta 2.55 0.0 1.275 0.0 0.0 0.0 +Ta 2.55 0.0 3.825 0.0 0.0 0.0 +8 +Lattice = "6.8 0.0 0.0 0.0 6.8 0.0 0.0 0.0 6.8" Properties=species:S:1:pos:R:3:forces:R:3 energy=-64.38702 stress="-298814.67 0.0 0.0 0.0 -298814.67 0.0 0.0 0.0 -298814.67" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 3.4 3.4 3.4 0.0 0.0 0.0 +Ta 1.7 3.4 0.0 0.0 0.0 0.0 +Ta 5.1 3.4 0.0 0.0 0.0 0.0 +Ta 0.0 1.7 3.4 0.0 0.0 0.0 +Ta 0.0 5.1 3.4 0.0 0.0 0.0 +Ta 3.4 0.0 1.7 0.0 0.0 0.0 +Ta 3.4 0.0 5.1 0.0 0.0 0.0 +8 +Lattice = "4.9 0.0 0.0 0.0 4.9 0.0 0.0 0.0 4.9" Properties=species:S:1:pos:R:3:forces:R:3 energy=-88.352871 stress="734688.7400000001 0.0 0.0 0.0 734688.7400000001 -0.0 0.0 -0.0 734688.7400000001" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 2.45 2.45 2.45 0.0 0.0 0.0 +Ta 1.225 2.45 0.0 0.0 0.0 0.0 +Ta 3.675 2.45 0.0 0.0 0.0 0.0 +Ta 0.0 1.225 2.45 0.0 0.0 0.0 +Ta 0.0 3.675 2.45 0.0 0.0 0.0 +Ta 2.45 0.0 1.225 0.0 0.0 0.0 +Ta 2.45 0.0 3.675 0.0 0.0 0.0 diff --git a/examples/PACKAGES/pod/Ta/XYZ/Volume_BCC.xyz b/examples/PACKAGES/pod/Ta/XYZ/Volume_BCC.xyz new file mode 100644 index 0000000000..1a43270892 --- /dev/null +++ b/examples/PACKAGES/pod/Ta/XYZ/Volume_BCC.xyz @@ -0,0 +1,84 @@ +2 +Lattice = "4.2 0.0 0.0 0.0 4.2 0.0 0.0 0.0 4.2" Properties=species:S:1:pos:R:3:forces:R:3 energy=-16.763625 stress="-315811.75 0.0 0.0 0.0 -315811.75 0.0 0.0 0.0 -315811.75" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 2.1 2.1 2.1 0.0 0.0 0.0 +2 +Lattice = "2.4 0.0 0.0 0.0 2.4 0.0 0.0 0.0 2.4" Properties=species:S:1:pos:R:3:forces:R:3 energy=16.314145 stress="13221145.45 0.0 -0.0 0.0 13221145.45 0.0 -0.0 0.0 13221145.45" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 1.2 1.2 1.2 0.0 0.0 0.0 +2 +Lattice = "3.0 0.0 0.0 0.0 3.0 0.0 0.0 0.0 3.0" Properties=species:S:1:pos:R:3:forces:R:3 energy=-21.209071 stress="1054433.87 -0.0 0.0 -0.0 1054433.87 -0.0 0.0 -0.0 1054433.87" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 1.5 1.5 1.5 0.0 0.0 0.0 +2 +Lattice = "2.8 0.0 0.0 0.0 2.8 0.0 0.0 0.0 2.8" Properties=species:S:1:pos:R:3:forces:R:3 energy=-15.780524 stress="2609201.0100000002 0.0 -0.0 0.0 2609201.0100000002 0.0 -0.0 0.0 2609201.0100000002" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 1.4 1.4 1.4 0.0 0.0 0.0 +2 +Lattice = "2.9 0.0 0.0 0.0 2.9 0.0 0.0 0.0 2.9" Properties=species:S:1:pos:R:3:forces:R:3 energy=-19.002205 stress="1696212.8900000001 0.0 0.0 0.0 1696212.8900000001 0.0 0.0 0.0 1696212.8900000001" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 1.45 1.45 1.45 0.0 0.0 0.0 +2 +Lattice = "3.1 0.0 0.0 0.0 3.1 0.0 0.0 0.0 3.1" Properties=species:S:1:pos:R:3:forces:R:3 energy=-22.620568 stress="596204.8200000001 0.0 0.0 0.0 596204.8200000001 0.0 0.0 0.0 596204.8200000001" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 1.55 1.55 1.55 0.0 0.0 0.0 +2 +Lattice = "2.5 0.0 0.0 0.0 2.5 0.0 0.0 0.0 2.5" Properties=species:S:1:pos:R:3:forces:R:3 energy=4.096885 stress="8866538.459999999 0.0 0.0 0.0 8866538.459999999 -0.0 0.0 -0.0 8866538.459999999" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 1.25 1.25 1.25 0.0 0.0 0.0 +2 +Lattice = "2.2 0.0 0.0 0.0 2.2 0.0 0.0 0.0 2.2" Properties=species:S:1:pos:R:3:forces:R:3 energy=56.26276 stress="29925857.27 -0.0 -0.0 -0.0 29925857.27 -0.0 -0.0 -0.0 29925857.27" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 1.1 1.1 1.1 0.0 0.0 0.0 +2 +Lattice = "3.6 0.0 0.0 0.0 3.6 0.0 0.0 0.0 3.6" Properties=species:S:1:pos:R:3:forces:R:3 energy=-22.585113 stress="-294769.07 0.0 0.0 0.0 -294769.07 0.0 0.0 0.0 -294769.07" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 1.8 1.8 1.8 0.0 0.0 0.0 +2 +Lattice = "3.7 0.0 0.0 0.0 3.7 0.0 0.0 0.0 3.7" Properties=species:S:1:pos:R:3:forces:R:3 energy=-21.795501 stress="-334343.07 0.0 0.0 0.0 -334343.07 -0.0 0.0 -0.0 -334343.07" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 1.85 1.85 1.85 0.0 0.0 0.0 +2 +Lattice = "2.3 0.0 0.0 0.0 2.3 0.0 0.0 0.0 2.3" Properties=species:S:1:pos:R:3:forces:R:3 energy=33.110078 stress="19804876.43 0.0 0.0 0.0 19804876.43 -0.0 0.0 -0.0 19804876.43" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 1.15 1.15 1.15 0.0 0.0 0.0 +2 +Lattice = "3.8 0.0 0.0 0.0 3.8 0.0 0.0 0.0 3.8" Properties=species:S:1:pos:R:3:forces:R:3 energy=-20.885998 stress="-353363.87 -0.0 0.0 -0.0 -353363.87 -0.0 0.0 -0.0 -353363.87" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 1.9 1.9 1.9 0.0 0.0 0.0 +2 +Lattice = "3.4 0.0 0.0 0.0 3.4 0.0 0.0 0.0 3.4" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.601336 stress="-119086.12999999999 0.0 -0.0 0.0 -119086.12999999999 0.0 -0.0 0.0 -119086.12999999999" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 1.7 1.7 1.7 0.0 0.0 0.0 +2 +Lattice = "3.5 0.0 0.0 0.0 3.5 0.0 0.0 0.0 3.5" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.207313 stress="-226389.97 0.0 -0.0 0.0 -226389.97 0.0 -0.0 0.0 -226389.97" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 1.75 1.75 1.75 0.0 0.0 0.0 +2 +Lattice = "3.9 0.0 0.0 0.0 3.9 0.0 0.0 0.0 3.9" Properties=species:S:1:pos:R:3:forces:R:3 energy=-19.898089 stress="-356527.42 0.0 -0.0 0.0 -356527.42 0.0 -0.0 0.0 -356527.42" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 1.95 1.95 1.95 0.0 0.0 0.0 +2 +Lattice = "3.2 0.0 0.0 0.0 3.2 0.0 0.0 0.0 3.2" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.405474 stress="270245.51 -0.0 0.0 -0.0 270245.51 -0.0 0.0 -0.0 270245.51" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 1.6 1.6 1.6 0.0 0.0 0.0 +2 +Lattice = "2.6 0.0 0.0 0.0 2.6 0.0 0.0 0.0 2.6" Properties=species:S:1:pos:R:3:forces:R:3 energy=-4.781324 stress="5944705.43 -0.0 0.0 -0.0 5944705.43 -0.0 0.0 -0.0 5944705.43" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 1.3 1.3 1.3 0.0 0.0 0.0 +2 +Lattice = "4.0 0.0 0.0 0.0 4.0 0.0 0.0 0.0 4.0" Properties=species:S:1:pos:R:3:forces:R:3 energy=-18.864936 stress="-349512.61 -0.0 -0.0 -0.0 -349512.61 0.0 -0.0 0.0 -349512.61" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 2.0 2.0 2.0 0.0 0.0 0.0 +2 +Lattice = "4.1 0.0 0.0 0.0 4.1 0.0 0.0 0.0 4.1" Properties=species:S:1:pos:R:3:forces:R:3 energy=-17.813086 stress="-334971.81 0.0 0.0 0.0 -334971.81 0.0 0.0 0.0 -334971.81" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 2.05 2.05 2.05 0.0 0.0 0.0 +2 +Lattice = "2.7 0.0 0.0 0.0 2.7 0.0 0.0 0.0 2.7" Properties=species:S:1:pos:R:3:forces:R:3 energy=-11.197201 stress="3964027.36 0.0 0.0 0.0 3964027.36 0.0 0.0 0.0 3964027.36" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 1.35 1.35 1.35 0.0 0.0 0.0 +2 +Lattice = "3.3 0.0 0.0 0.0 3.3 0.0 0.0 0.0 3.3" Properties=species:S:1:pos:R:3:forces:R:3 energy=-23.696705 stress="39945.84 -0.0 -0.0 -0.0 39945.84 0.0 -0.0 0.0 39945.84" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 1.65 1.65 1.65 0.0 0.0 0.0 diff --git a/examples/PACKAGES/pod/Ta/XYZ/Volume_FCC.xyz b/examples/PACKAGES/pod/Ta/XYZ/Volume_FCC.xyz new file mode 100644 index 0000000000..48c577b507 --- /dev/null +++ b/examples/PACKAGES/pod/Ta/XYZ/Volume_FCC.xyz @@ -0,0 +1,186 @@ +4 +Lattice = "3.4 0.0 0.0 0.0 3.4 0.0 0.0 0.0 3.4" Properties=species:S:1:pos:R:3:forces:R:3 energy=-19.075994 stress="4059178.91 0.0 -0.0 0.0 4059178.91 0.0 -0.0 0.0 4059178.91" +Ta 0.0 0.0 0.0 0 0 0 +Ta 1.7 1.7 0.0 0 0 0 +Ta 1.7 0.0 1.7 0 0 0 +Ta 0.0 1.7 1.7 0 0 0 +4 +Lattice = "5.2 0.0 0.0 0.0 5.2 0.0 0.0 0.0 5.2" Properties=species:S:1:pos:R:3:forces:R:3 energy=-34.873619 stress="-326647.94999999995 0.0 0.0 0.0 -326647.94999999995 -0.0 0.0 -0.0 -326647.94999999995" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 2.6 2.6 0.0 0.0 0.0 0.0 +Ta 2.6 0.0 2.6 0.0 0.0 0.0 +Ta 0.0 2.6 2.6 0.0 0.0 0.0 +4 +Lattice = "4.6 0.0 0.0 0.0 4.6 0.0 0.0 0.0 4.6" Properties=species:S:1:pos:R:3:forces:R:3 energy=-43.950003 stress="-296256.79000000004 -0.0 -0.0 -0.0 -296256.79000000004 0.0 -0.0 0.0 -296256.79000000004" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 2.3 2.3 0.0 0.0 0.0 0.0 +Ta 2.3 0.0 2.3 0.0 0.0 0.0 +Ta 0.0 2.3 2.3 0.0 0.0 0.0 +4 +Lattice = "3.8 0.0 0.0 0.0 3.8 0.0 0.0 0.0 3.8" Properties=species:S:1:pos:R:3:forces:R:3 energy=-40.991909 stress="1079302.71 0.0 0.0 0.0 1079302.71 0.0 0.0 0.0 1079302.71" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 1.9 1.9 0.0 0.0 0.0 0.0 +Ta 1.9 0.0 1.9 0.0 0.0 0.0 +Ta 0.0 1.9 1.9 0.0 0.0 0.0 +4 +Lattice = "3.9 0.0 0.0 0.0 3.9 0.0 0.0 0.0 3.9" Properties=species:S:1:pos:R:3:forces:R:3 energy=-43.453929 stress="713769.5499999999 0.0 0.0 0.0 713769.5499999999 -0.0 0.0 -0.0 713769.5499999999" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 1.95 1.95 0.0 0.0 0.0 0.0 +Ta 1.95 0.0 1.95 0.0 0.0 0.0 +Ta 0.0 1.95 1.95 0.0 0.0 0.0 +4 +Lattice = "4.7 0.0 0.0 0.0 4.7 0.0 0.0 0.0 4.7" Properties=species:S:1:pos:R:3:forces:R:3 energy=-42.686077 stress="-325547.88 0.0 0.0 0.0 -325547.88 0.0 0.0 0.0 -325547.88" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 2.35 2.35 0.0 0.0 0.0 0.0 +Ta 2.35 0.0 2.35 0.0 0.0 0.0 +Ta 0.0 2.35 2.35 0.0 0.0 0.0 +4 +Lattice = "5.3 0.0 0.0 0.0 5.3 0.0 0.0 0.0 5.3" Properties=species:S:1:pos:R:3:forces:R:3 energy=-33.224653 stress="-312088.68 0.0 0.0 0.0 -312088.68 0.0 0.0 0.0 -312088.68" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 2.65 2.65 0.0 0.0 0.0 0.0 +Ta 2.65 0.0 2.65 0.0 0.0 0.0 +Ta 0.0 2.65 2.65 0.0 0.0 0.0 +4 +Lattice = "3.5 0.0 0.0 0.0 3.5 0.0 0.0 0.0 3.5" Properties=species:S:1:pos:R:3:forces:R:3 energy=-26.862709 stress="2990127.38 0.0 0.0 0.0 2990127.38 -0.0 0.0 -0.0 2990127.38" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 1.75 1.75 0.0 0.0 0.0 0.0 +Ta 1.75 0.0 1.75 0.0 0.0 0.0 +Ta 0.0 1.75 1.75 0.0 0.0 0.0 +4 +Lattice = "5.8 0.0 0.0 0.0 5.8 0.0 0.0 0.0 5.8" Properties=species:S:1:pos:R:3:forces:R:3 energy=-25.519883 stress="-222839.06 0.0 -0.0 0.0 -222839.06 -0.0 -0.0 -0.0 -222839.06" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 2.9 2.9 0.0 0.0 0.0 0.0 +Ta 2.9 0.0 2.9 0.0 0.0 0.0 +Ta 0.0 2.9 2.9 0.0 0.0 0.0 +4 +Lattice = "3.2 0.0 0.0 0.0 3.2 0.0 0.0 0.0 3.2" Properties=species:S:1:pos:R:3:forces:R:3 energy=3.463071 stress="7429287.470000001 0.0 -0.0 0.0 7429287.470000001 -0.0 -0.0 -0.0 7429287.470000001" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 1.6 1.6 0.0 0.0 0.0 0.0 +Ta 1.6 0.0 1.6 0.0 0.0 0.0 +Ta 0.0 1.6 1.6 0.0 0.0 0.0 +4 +Lattice = "5.4 0.0 0.0 0.0 5.4 0.0 0.0 0.0 5.4" Properties=species:S:1:pos:R:3:forces:R:3 energy=-31.59595 stress="-295489.55 0.0 0.0 0.0 -295489.55 -0.0 0.0 -0.0 -295489.55" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 2.7 2.7 0.0 0.0 0.0 0.0 +Ta 2.7 0.0 2.7 0.0 0.0 0.0 +Ta 0.0 2.7 2.7 0.0 0.0 0.0 +4 +Lattice = "4.0 0.0 0.0 0.0 4.0 0.0 0.0 0.0 4.0" Properties=species:S:1:pos:R:3:forces:R:3 energy=-45.100466 stress="426831.86 0.0 -0.0 0.0 426831.86 0.0 -0.0 0.0 426831.86" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 2.0 2.0 0.0 0.0 0.0 0.0 +Ta 2.0 0.0 2.0 0.0 0.0 0.0 +Ta 0.0 2.0 2.0 0.0 0.0 0.0 +4 +Lattice = "4.1 0.0 0.0 0.0 4.1 0.0 0.0 0.0 4.1" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.052258 stress="204707.15999999997 -0.0 0.0 -0.0 204707.15999999997 -0.0 0.0 -0.0 204707.15999999997" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 2.05 2.05 0.0 0.0 0.0 0.0 +Ta 2.05 0.0 2.05 0.0 0.0 0.0 +Ta 0.0 2.05 2.05 0.0 0.0 0.0 +4 +Lattice = "5.5 0.0 0.0 0.0 5.5 0.0 0.0 0.0 5.5" Properties=species:S:1:pos:R:3:forces:R:3 energy=-30.001189 stress="-277646.68 0.0 0.0 0.0 -277646.68 -0.0 0.0 -0.0 -277646.68" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 2.75 2.75 0.0 0.0 0.0 0.0 +Ta 2.75 0.0 2.75 0.0 0.0 0.0 +Ta 0.0 2.75 2.75 0.0 0.0 0.0 +4 +Lattice = "6.0 0.0 0.0 0.0 6.0 0.0 0.0 0.0 6.0" Properties=species:S:1:pos:R:3:forces:R:3 energy=-22.8504 stress="-187574.33000000002 -0.0 -0.0 -0.0 -187574.33000000002 0.0 -0.0 0.0 -187574.33000000002" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 3.0 3.0 0.0 0.0 0.0 0.0 +Ta 3.0 0.0 3.0 0.0 0.0 0.0 +Ta 0.0 3.0 3.0 0.0 0.0 0.0 +4 +Lattice = "3.3 0.0 0.0 0.0 3.3 0.0 0.0 0.0 3.3" Properties=species:S:1:pos:R:3:forces:R:3 energy=-9.164691 stress="5458905.82 0.0 -0.0 0.0 5458905.82 0.0 -0.0 0.0 5458905.82" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 1.65 1.65 0.0 0.0 0.0 0.0 +Ta 1.65 0.0 1.65 0.0 0.0 0.0 +Ta 0.0 1.65 1.65 0.0 0.0 0.0 +4 +Lattice = "5.9 0.0 0.0 0.0 5.9 0.0 0.0 0.0 5.9" Properties=species:S:1:pos:R:3:forces:R:3 energy=-24.150343 stress="-204945.0 0.0 -0.0 0.0 -204945.0 0.0 -0.0 0.0 -204945.0" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 2.95 2.95 0.0 0.0 0.0 0.0 +Ta 2.95 0.0 2.95 0.0 0.0 0.0 +Ta 0.0 2.95 2.95 0.0 0.0 0.0 +4 +Lattice = "4.2 0.0 0.0 0.0 4.2 0.0 0.0 0.0 4.2" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.426795 stress="36447.14 -0.0 0.0 -0.0 36447.14 -0.0 0.0 -0.0 36447.14" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 2.1 2.1 0.0 0.0 0.0 0.0 +Ta 2.1 0.0 2.1 0.0 0.0 0.0 +Ta 0.0 2.1 2.1 0.0 0.0 0.0 +4 +Lattice = "5.6 0.0 0.0 0.0 5.6 0.0 0.0 0.0 5.6" Properties=species:S:1:pos:R:3:forces:R:3 energy=-28.451145 stress="-259709.67 0.0 0.0 0.0 -259709.67 -0.0 0.0 -0.0 -259709.67" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 2.8 2.8 0.0 0.0 0.0 0.0 +Ta 2.8 0.0 2.8 0.0 0.0 0.0 +Ta 0.0 2.8 2.8 0.0 0.0 0.0 +4 +Lattice = "3.0 0.0 0.0 0.0 3.0 0.0 0.0 0.0 3.0" Properties=species:S:1:pos:R:3:forces:R:3 energy=40.341566 stress="13905054.1 0.0 0.0 0.0 13905054.1 0.0 0.0 0.0 13905054.1" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 1.5 1.5 0.0 0.0 0.0 0.0 +Ta 1.5 0.0 1.5 0.0 0.0 0.0 +Ta 0.0 1.5 1.5 0.0 0.0 0.0 +4 +Lattice = "3.1 0.0 0.0 0.0 3.1 0.0 0.0 0.0 3.1" Properties=species:S:1:pos:R:3:forces:R:3 energy=19.617912 stress="10138102.870000001 -0.0 0.0 -0.0 10138102.870000001 -0.0 0.0 -0.0 10138102.870000001" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 1.55 1.55 0.0 0.0 0.0 0.0 +Ta 1.55 0.0 1.55 0.0 0.0 0.0 +Ta 0.0 1.55 1.55 0.0 0.0 0.0 +4 +Lattice = "5.7 0.0 0.0 0.0 5.7 0.0 0.0 0.0 5.7" Properties=species:S:1:pos:R:3:forces:R:3 energy=-26.954384 stress="-241322.06 0.0 -0.0 0.0 -241322.06 0.0 -0.0 0.0 -241322.06" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 2.85 2.85 0.0 0.0 0.0 0.0 +Ta 2.85 0.0 2.85 0.0 0.0 0.0 +Ta 0.0 2.85 2.85 0.0 0.0 0.0 +4 +Lattice = "4.3 0.0 0.0 0.0 4.3 0.0 0.0 0.0 4.3" Properties=species:S:1:pos:R:3:forces:R:3 energy=-46.323696 stress="-90447.06999999999 0.0 0.0 0.0 -90447.06999999999 -0.0 0.0 -0.0 -90447.06999999999" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 2.15 2.15 0.0 0.0 0.0 0.0 +Ta 2.15 0.0 2.15 0.0 0.0 0.0 +Ta 0.0 2.15 2.15 0.0 0.0 0.0 +4 +Lattice = "4.4 0.0 0.0 0.0 4.4 0.0 0.0 0.0 4.4" Properties=species:S:1:pos:R:3:forces:R:3 energy=-45.828947 stress="-183778.61 0.0 0.0 0.0 -183778.61 0.0 0.0 0.0 -183778.61" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 2.2 2.2 0.0 0.0 0.0 0.0 +Ta 2.2 0.0 2.2 0.0 0.0 0.0 +Ta 0.0 2.2 2.2 0.0 0.0 0.0 +4 +Lattice = "5.0 0.0 0.0 0.0 5.0 0.0 0.0 0.0 5.0" Properties=species:S:1:pos:R:3:forces:R:3 energy=-38.16029 stress="-345892.4 -0.0 -0.0 -0.0 -345892.4 0.0 -0.0 0.0 -345892.4" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 2.5 2.5 0.0 0.0 0.0 0.0 +Ta 2.5 0.0 2.5 0.0 0.0 0.0 +Ta 0.0 2.5 2.5 0.0 0.0 0.0 +4 +Lattice = "3.6 0.0 0.0 0.0 3.6 0.0 0.0 0.0 3.6" Properties=species:S:1:pos:R:3:forces:R:3 energy=-32.919741 stress="2180370.41 0.0 0.0 0.0 2180370.41 -0.0 0.0 -0.0 2180370.41" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 1.8 1.8 0.0 0.0 0.0 0.0 +Ta 1.8 0.0 1.8 0.0 0.0 0.0 +Ta 0.0 1.8 1.8 0.0 0.0 0.0 +4 +Lattice = "4.8 0.0 0.0 0.0 4.8 0.0 0.0 0.0 4.8" Properties=species:S:1:pos:R:3:forces:R:3 energy=-41.272675 stress="-341505.95 0.0 0.0 0.0 -341505.95 -0.0 0.0 -0.0 -341505.95" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 2.4 2.4 0.0 0.0 0.0 0.0 +Ta 2.4 0.0 2.4 0.0 0.0 0.0 +Ta 0.0 2.4 2.4 0.0 0.0 0.0 +4 +Lattice = "4.9 0.0 0.0 0.0 4.9 0.0 0.0 0.0 4.9" Properties=species:S:1:pos:R:3:forces:R:3 energy=-39.753322 stress="-347458.42 0.0 -0.0 0.0 -347458.42 0.0 -0.0 0.0 -347458.42" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 2.45 2.45 0.0 0.0 0.0 0.0 +Ta 2.45 0.0 2.45 0.0 0.0 0.0 +Ta 0.0 2.45 2.45 0.0 0.0 0.0 +4 +Lattice = "3.7 0.0 0.0 0.0 3.7 0.0 0.0 0.0 3.7" Properties=species:S:1:pos:R:3:forces:R:3 energy=-37.547435 stress="1562535.85 0.0 0.0 0.0 1562535.85 -0.0 0.0 -0.0 1562535.85" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 1.85 1.85 0.0 0.0 0.0 0.0 +Ta 1.85 0.0 1.85 0.0 0.0 0.0 +Ta 0.0 1.85 1.85 0.0 0.0 0.0 +4 +Lattice = "5.1 0.0 0.0 0.0 5.1 0.0 0.0 0.0 5.1" Properties=species:S:1:pos:R:3:forces:R:3 energy=-36.52595 stress="-338327.71 -0.0 -0.0 -0.0 -338327.71 0.0 -0.0 0.0 -338327.71" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 2.55 2.55 0.0 0.0 0.0 0.0 +Ta 2.55 0.0 2.55 0.0 0.0 0.0 +Ta 0.0 2.55 2.55 0.0 0.0 0.0 +4 +Lattice = "4.5 0.0 0.0 0.0 4.5 0.0 0.0 0.0 4.5" Properties=species:S:1:pos:R:3:forces:R:3 energy=-45.016087 stress="-250456.02 -0.0 -0.0 -0.0 -250456.02 0.0 -0.0 0.0 -250456.02" +Ta 0.0 0.0 0.0 0.0 0.0 0.0 +Ta 2.25 2.25 0.0 0.0 0.0 0.0 +Ta 2.25 0.0 2.25 0.0 0.0 0.0 +Ta 0.0 2.25 2.25 0.0 0.0 0.0 diff --git a/examples/PACKAGES/pod/Ta/in.fitpod b/examples/PACKAGES/pod/Ta/in.fitpod new file mode 100644 index 0000000000..7b932558ea --- /dev/null +++ b/examples/PACKAGES/pod/Ta/in.fitpod @@ -0,0 +1,5 @@ +# Demonstrate fitpod for POD potential + +units metal +fitpod Ta_param.pod Ta_data.pod + diff --git a/examples/PACKAGES/pod/Ta/in.pod b/examples/PACKAGES/pod/Ta/in.pod new file mode 100644 index 0000000000..866ee40549 --- /dev/null +++ b/examples/PACKAGES/pod/Ta/in.pod @@ -0,0 +1,47 @@ +# Demonstrate POD Ta potential + +# Initialize simulation + +variable nsteps index 100 +variable nrep equal 4 +variable a equal 3.316 +units metal + +# generate the box and atom positions using a BCC lattice + +variable nx equal ${nrep} +variable ny equal ${nrep} +variable nz equal ${nrep} + +boundary p p p + +lattice bcc $a +region box block 0 ${nx} 0 ${ny} 0 ${nz} +create_box 1 box +create_atoms 1 box + +mass 1 180.88 + + +# POD potential +pair_style pod +pair_coeff * * Ta_param.pod Ta_coeff.pod Ta + +# Setup output + +thermo 10 +thermo_modify norm yes + +# Set up NVE run + +timestep 0.5e-3 +neighbor 1.0 bin +neigh_modify once no every 1 delay 0 check yes + +# Run MD + +velocity all create 300.0 4928459 loop geom +fix 1 all nve +run ${nsteps} + + diff --git a/examples/PACKAGES/pod/Ta/log.1Dec22.fitpod.g++.1 b/examples/PACKAGES/pod/Ta/log.1Dec22.fitpod.g++.1 new file mode 100644 index 0000000000..92bf7ede2d --- /dev/null +++ b/examples/PACKAGES/pod/Ta/log.1Dec22.fitpod.g++.1 @@ -0,0 +1,114 @@ +LAMMPS (3 Nov 2022) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98) + using 1 OpenMP thread(s) per MPI task +# Demonstrate fitpod for POD potential + +units metal +fitpod Ta_param.pod Ta_data.pod +Reading potential file Ta_param.pod with DATE: 2022-11-30 +**************** Begin of POD Potentials **************** +species: Ta +periodic boundary conditions: 1 1 1 +inner cut-off radius: 1 +outer cut-off radius: 5 +bessel polynomial degree: 3 +inverse polynomial degree: 6 +one-body potential: 1 +two-body potential: 3 6 6 +three-body potential: 3 6 5 5 +four-body SNAP potential: 0 0 +quadratic POD potential: 0 +number of basis functions for one-body potential: 1 +number of basis functions for two-body potential: 6 +number of basis functions for three-body potential: 25 +number of basis functions for four-body potential: 0 +number of descriptors for one-body potential: 1 +number of descriptors for two-body potential: 6 +number of descriptors for three-body potential: 25 +number of descriptors for four-body potential: 0 +number of descriptors for quadratic POD potential: 0 +total number of descriptors for all potentials: 32 +**************** End of POD Potentials **************** + +**************** Begin of Data File **************** +file format: extxyz +file extension: xyz +path to training data set: XYZ +path to test data set: XYZ +training fraction: 1 +test fraction: 1 +randomize training data set: 1 +randomize test data set: 1 +error analysis for training data set: 1 +error analysis for test data set: 0 +energy/force calculation for training data set: 0 +energy/force calculation for test data set: 0 +fitting weight for energy: 100 +fitting weight for force: 1 +fitting weight for stress: 0 +**************** End of Data File **************** +**************** Begin of Training Data Set **************** +--------------------------------------------------------------- + data file | number of configurations | number of atoms +--------------------------------------------------------------- + Displaced_A15.xyz | 9 | 576 + Displaced_BCC.xyz | 9 | 486 + Displaced_FCC.xyz | 9 | 432 + Elastic_BCC.xyz | 100 | 200 + Elastic_FCC.xyz | 100 | 400 + GSF_110.xyz | 22 | 528 + GSF_112.xyz | 22 | 660 + Liquid.xyz | 3 | 300 + Surface.xyz | 7 | 236 + Volume_A15.xyz | 30 | 240 + Volume_BCC.xyz | 21 | 42 + Volume_FCC.xyz | 31 | 124 +--------------------------------------------------------------- +number of files: 12 +number of configurations in all files: 363 +number of atoms in all files: 4224 +minimum number of atoms: 2 +maximum number of atoms: 100 +**************** End of Training Data Set **************** +**************** Begin of Memory Allocation **************** +maximum number of atoms in periodic domain: 100 +maximum number of atoms in extended domain: 2700 +maximum number of neighbors in extended domain: 270000 +size of double memory: 223201 +size of int memory: 14709 +size of descriptor matrix: 32 x 32 +**************** End of Memory Allocation **************** +**************** Begin of Least-Squares Fitting **************** +Configuration: # 1 +Configuration: # 101 +Configuration: # 201 +Configuration: # 301 +**************** End of Least-Squares Fitting **************** +**************** Begin of Error Calculation **************** +Configuration: # 1 +Configuration: # 101 +Configuration: # 201 +Configuration: # 301 +**************** End of Error Calculation **************** +**************** Begin of Error Analysis for the Training Data Set **************** +--------------------------------------------------------------------------------------------------- + File | # configs | # atoms | MAE energy | RMSE energy | MAE force | RMSE force +--------------------------------------------------------------------------------------------------- +Displaced_A15.xyz 9 576 0.011286 0.011334 0.113353 0.141650 +Displaced_BCC.xyz 9 486 0.012178 0.014005 0.240613 0.312191 +Displaced_FCC.xyz 9 432 0.001445 0.001591 0.082688 0.103800 +Elastic_BCC.xyz 100 200 0.004452 0.004783 0.000010 0.000013 +Elastic_FCC.xyz 100 400 0.002865 0.002923 0.000146 0.000207 +GSF_110.xyz 22 528 0.005804 0.006853 0.047276 0.097819 +GSF_112.xyz 22 660 0.010588 0.011555 0.123342 0.191090 +Liquid.xyz 3 300 0.013161 0.015355 0.567536 0.757847 +Surface.xyz 7 236 0.025400 0.037555 0.096121 0.295623 +Volume_A15.xyz 30 240 0.039281 0.048678 0.000000 0.000000 +Volume_BCC.xyz 21 42 0.049766 0.067554 0.000000 0.000000 +Volume_FCC.xyz 31 124 0.030056 0.041738 0.000000 0.000000 +--------------------------------------------------------------------------------------------------- +All files 363 4224 0.012917 0.025797 0.122473 0.260052 +--------------------------------------------------------------------------------------------------- +**************** End of Error Analysis for the Training Data Set **************** + +Total wall time: 0:00:01 diff --git a/examples/PACKAGES/pod/Ta/log.1Dec22.fitpod.g++.4 b/examples/PACKAGES/pod/Ta/log.1Dec22.fitpod.g++.4 new file mode 100644 index 0000000000..698636c4ba --- /dev/null +++ b/examples/PACKAGES/pod/Ta/log.1Dec22.fitpod.g++.4 @@ -0,0 +1,114 @@ +LAMMPS (3 Nov 2022) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98) + using 1 OpenMP thread(s) per MPI task +# Demonstrate fitpod for POD potential + +units metal +fitpod Ta_param.pod Ta_data.pod +Reading potential file Ta_param.pod with DATE: 2022-11-30 +**************** Begin of POD Potentials **************** +species: Ta +periodic boundary conditions: 1 1 1 +inner cut-off radius: 1 +outer cut-off radius: 5 +bessel polynomial degree: 3 +inverse polynomial degree: 6 +one-body potential: 1 +two-body potential: 3 6 6 +three-body potential: 3 6 5 5 +four-body SNAP potential: 0 0 +quadratic POD potential: 0 +number of basis functions for one-body potential: 1 +number of basis functions for two-body potential: 6 +number of basis functions for three-body potential: 25 +number of basis functions for four-body potential: 0 +number of descriptors for one-body potential: 1 +number of descriptors for two-body potential: 6 +number of descriptors for three-body potential: 25 +number of descriptors for four-body potential: 0 +number of descriptors for quadratic POD potential: 0 +total number of descriptors for all potentials: 32 +**************** End of POD Potentials **************** + +**************** Begin of Data File **************** +file format: extxyz +file extension: xyz +path to training data set: XYZ +path to test data set: XYZ +training fraction: 1 +test fraction: 1 +randomize training data set: 1 +randomize test data set: 1 +error analysis for training data set: 1 +error analysis for test data set: 0 +energy/force calculation for training data set: 0 +energy/force calculation for test data set: 0 +fitting weight for energy: 100 +fitting weight for force: 1 +fitting weight for stress: 0 +**************** End of Data File **************** +**************** Begin of Training Data Set **************** +--------------------------------------------------------------- + data file | number of configurations | number of atoms +--------------------------------------------------------------- + Displaced_A15.xyz | 9 | 576 + Displaced_BCC.xyz | 9 | 486 + Displaced_FCC.xyz | 9 | 432 + Elastic_BCC.xyz | 100 | 200 + Elastic_FCC.xyz | 100 | 400 + GSF_110.xyz | 22 | 528 + GSF_112.xyz | 22 | 660 + Liquid.xyz | 3 | 300 + Surface.xyz | 7 | 236 + Volume_A15.xyz | 30 | 240 + Volume_BCC.xyz | 21 | 42 + Volume_FCC.xyz | 31 | 124 +--------------------------------------------------------------- +number of files: 12 +number of configurations in all files: 363 +number of atoms in all files: 4224 +minimum number of atoms: 2 +maximum number of atoms: 100 +**************** End of Training Data Set **************** +**************** Begin of Memory Allocation **************** +maximum number of atoms in periodic domain: 100 +maximum number of atoms in extended domain: 2700 +maximum number of neighbors in extended domain: 270000 +size of double memory: 223201 +size of int memory: 14709 +size of descriptor matrix: 32 x 32 +**************** End of Memory Allocation **************** +**************** Begin of Least-Squares Fitting **************** +Configuration: # 1 +Configuration: # 101 +Configuration: # 201 +Configuration: # 301 +**************** End of Least-Squares Fitting **************** +**************** Begin of Error Calculation **************** +Configuration: # 1 +Configuration: # 101 +Configuration: # 201 +Configuration: # 301 +**************** End of Error Calculation **************** +**************** Begin of Error Analysis for the Training Data Set **************** +--------------------------------------------------------------------------------------------------- + File | # configs | # atoms | MAE energy | RMSE energy | MAE force | RMSE force +--------------------------------------------------------------------------------------------------- +Displaced_A15.xyz 9 576 0.011286 0.011334 0.113353 0.141650 +Displaced_BCC.xyz 9 486 0.012178 0.014005 0.240613 0.312191 +Displaced_FCC.xyz 9 432 0.001445 0.001591 0.082688 0.103800 +Elastic_BCC.xyz 100 200 0.004452 0.004783 0.000010 0.000013 +Elastic_FCC.xyz 100 400 0.002865 0.002923 0.000146 0.000207 +GSF_110.xyz 22 528 0.005804 0.006853 0.047276 0.097819 +GSF_112.xyz 22 660 0.010588 0.011555 0.123342 0.191090 +Liquid.xyz 3 300 0.013161 0.015355 0.567536 0.757847 +Surface.xyz 7 236 0.025400 0.037555 0.096121 0.295623 +Volume_A15.xyz 30 240 0.039281 0.048678 0.000000 0.000000 +Volume_BCC.xyz 21 42 0.049766 0.067554 0.000000 0.000000 +Volume_FCC.xyz 31 124 0.030056 0.041738 0.000000 0.000000 +--------------------------------------------------------------------------------------------------- +All files 363 4224 0.012917 0.025797 0.122473 0.260052 +--------------------------------------------------------------------------------------------------- +**************** End of Error Analysis for the Training Data Set **************** + +Total wall time: 0:00:00 diff --git a/examples/PACKAGES/pod/Ta/log.1Dec22.pod.g++.1 b/examples/PACKAGES/pod/Ta/log.1Dec22.pod.g++.1 new file mode 100644 index 0000000000..eceb9f5dec --- /dev/null +++ b/examples/PACKAGES/pod/Ta/log.1Dec22.pod.g++.1 @@ -0,0 +1,143 @@ +LAMMPS (3 Nov 2022) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98) + using 1 OpenMP thread(s) per MPI task +# Demonstrate POD Ta potential + +# Initialize simulation + +variable nsteps index 100 +variable nrep equal 4 +variable a equal 3.316 +units metal + +# generate the box and atom positions using a BCC lattice + +variable nx equal ${nrep} +variable nx equal 4 +variable ny equal ${nrep} +variable ny equal 4 +variable nz equal ${nrep} +variable nz equal 4 + +boundary p p p + +lattice bcc $a +lattice bcc 3.316 +Lattice spacing in x,y,z = 3.316 3.316 3.316 +region box block 0 ${nx} 0 ${ny} 0 ${nz} +region box block 0 4 0 ${ny} 0 ${nz} +region box block 0 4 0 4 0 ${nz} +region box block 0 4 0 4 0 4 +create_box 1 box +Created orthogonal box = (0 0 0) to (13.264 13.264 13.264) + 1 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 128 atoms + using lattice units in orthogonal box = (0 0 0) to (13.264 13.264 13.264) + create_atoms CPU = 0.000 seconds + +mass 1 180.88 + + +# POD potential +pair_style pod +pair_coeff * * Ta_param.pod Ta_coeff.pod Ta +Reading potential file Ta_param.pod with DATE: 2022-11-30 +**************** Begin of POD Potentials **************** +species: Ta +periodic boundary conditions: 1 1 1 +inner cut-off radius: 1 +outer cut-off radius: 5 +bessel polynomial degree: 3 +inverse polynomial degree: 6 +one-body potential: 1 +two-body potential: 3 6 6 +three-body potential: 3 6 5 5 +four-body SNAP potential: 0 0 +quadratic POD potential: 0 +number of basis functions for one-body potential: 1 +number of basis functions for two-body potential: 6 +number of basis functions for three-body potential: 25 +number of basis functions for four-body potential: 0 +number of descriptors for one-body potential: 1 +number of descriptors for two-body potential: 6 +number of descriptors for three-body potential: 25 +number of descriptors for four-body potential: 0 +number of descriptors for quadratic POD potential: 0 +total number of descriptors for all potentials: 32 +**************** End of POD Potentials **************** + + +# Setup output + +thermo 10 +thermo_modify norm yes + +# Set up NVE run + +timestep 0.5e-3 +neighbor 1.0 bin +neigh_modify once no every 1 delay 0 check yes + +# Run MD + +velocity all create 300.0 4928459 loop geom +fix 1 all nve +run ${nsteps} +run 100 +Neighbor list info ... + update: every = 1 steps, delay = 0 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 6 + ghost atom cutoff = 6 + binsize = 3, bins = 5 5 5 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair pod, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.082 | 3.082 | 3.082 Mbytes + Step Temp E_pair E_mol TotEng Press + 0 300 -11.841512 0 -11.803037 -15933.622 + 10 296.91721 -11.841117 0 -11.803037 -15691.904 + 20 287.83555 -11.839952 0 -11.803037 -14982.977 + 30 273.25574 -11.838082 0 -11.803037 -13853.44 + 40 253.98821 -11.835611 0 -11.803037 -12375.459 + 50 231.10664 -11.832676 0 -11.803037 -10639.774 + 60 205.8844 -11.829441 0 -11.803037 -8747.2222 + 70 179.71599 -11.826085 0 -11.803037 -6799.8371 + 80 154.02711 -11.822791 0 -11.803037 -4892.7805 + 90 130.17821 -11.819732 0 -11.803036 -3108.1226 + 100 109.36842 -11.817063 0 -11.803036 -1510.9592 +Loop time of 2.21355 on 1 procs for 100 steps with 128 atoms + +Performance: 1.952 ns/day, 12.298 hours/ns, 45.176 timesteps/s, 5.783 katom-step/s +99.9% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 2.2126 | 2.2126 | 2.2126 | 0.0 | 99.96 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0.00039011 | 0.00039011 | 0.00039011 | 0.0 | 0.02 +Output | 0.00018205 | 0.00018205 | 0.00018205 | 0.0 | 0.01 +Modify | 0.00014707 | 0.00014707 | 0.00014707 | 0.0 | 0.01 +Other | | 0.0002439 | | | 0.01 + +Nlocal: 128 ave 128 max 128 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 727 ave 727 max 727 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +FullNghs: 7424 ave 7424 max 7424 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 7424 +Ave neighs/atom = 58 +Neighbor list builds = 0 +Dangerous builds = 0 + + +Total wall time: 0:00:02 diff --git a/examples/PACKAGES/pod/Ta/log.1Dec22.pod.g++.4 b/examples/PACKAGES/pod/Ta/log.1Dec22.pod.g++.4 new file mode 100644 index 0000000000..ace3943c12 --- /dev/null +++ b/examples/PACKAGES/pod/Ta/log.1Dec22.pod.g++.4 @@ -0,0 +1,143 @@ +LAMMPS (3 Nov 2022) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98) + using 1 OpenMP thread(s) per MPI task +# Demonstrate POD Ta potential + +# Initialize simulation + +variable nsteps index 100 +variable nrep equal 4 +variable a equal 3.316 +units metal + +# generate the box and atom positions using a BCC lattice + +variable nx equal ${nrep} +variable nx equal 4 +variable ny equal ${nrep} +variable ny equal 4 +variable nz equal ${nrep} +variable nz equal 4 + +boundary p p p + +lattice bcc $a +lattice bcc 3.316 +Lattice spacing in x,y,z = 3.316 3.316 3.316 +region box block 0 ${nx} 0 ${ny} 0 ${nz} +region box block 0 4 0 ${ny} 0 ${nz} +region box block 0 4 0 4 0 ${nz} +region box block 0 4 0 4 0 4 +create_box 1 box +Created orthogonal box = (0 0 0) to (13.264 13.264 13.264) + 1 by 2 by 2 MPI processor grid +create_atoms 1 box +Created 128 atoms + using lattice units in orthogonal box = (0 0 0) to (13.264 13.264 13.264) + create_atoms CPU = 0.000 seconds + +mass 1 180.88 + + +# POD potential +pair_style pod +pair_coeff * * Ta_param.pod Ta_coeff.pod Ta +Reading potential file Ta_param.pod with DATE: 2022-11-30 +**************** Begin of POD Potentials **************** +species: Ta +periodic boundary conditions: 1 1 1 +inner cut-off radius: 1 +outer cut-off radius: 5 +bessel polynomial degree: 3 +inverse polynomial degree: 6 +one-body potential: 1 +two-body potential: 3 6 6 +three-body potential: 3 6 5 5 +four-body SNAP potential: 0 0 +quadratic POD potential: 0 +number of basis functions for one-body potential: 1 +number of basis functions for two-body potential: 6 +number of basis functions for three-body potential: 25 +number of basis functions for four-body potential: 0 +number of descriptors for one-body potential: 1 +number of descriptors for two-body potential: 6 +number of descriptors for three-body potential: 25 +number of descriptors for four-body potential: 0 +number of descriptors for quadratic POD potential: 0 +total number of descriptors for all potentials: 32 +**************** End of POD Potentials **************** + + +# Setup output + +thermo 10 +thermo_modify norm yes + +# Set up NVE run + +timestep 0.5e-3 +neighbor 1.0 bin +neigh_modify once no every 1 delay 0 check yes + +# Run MD + +velocity all create 300.0 4928459 loop geom +fix 1 all nve +run ${nsteps} +run 100 +Neighbor list info ... + update: every = 1 steps, delay = 0 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 6 + ghost atom cutoff = 6 + binsize = 3, bins = 5 5 5 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair pod, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.062 | 3.062 | 3.062 Mbytes + Step Temp E_pair E_mol TotEng Press + 0 300 -11.841512 0 -11.803037 -15933.622 + 10 296.91721 -11.841117 0 -11.803037 -15691.904 + 20 287.83555 -11.839952 0 -11.803037 -14982.977 + 30 273.25574 -11.838082 0 -11.803037 -13853.44 + 40 253.98821 -11.835611 0 -11.803037 -12375.459 + 50 231.10664 -11.832676 0 -11.803037 -10639.774 + 60 205.8844 -11.829441 0 -11.803037 -8747.2222 + 70 179.71599 -11.826085 0 -11.803037 -6799.8371 + 80 154.02711 -11.822791 0 -11.803037 -4892.7805 + 90 130.17821 -11.819732 0 -11.803036 -3108.1226 + 100 109.36842 -11.817063 0 -11.803036 -1510.9592 +Loop time of 0.638221 on 4 procs for 100 steps with 128 atoms + +Performance: 6.769 ns/day, 3.546 hours/ns, 156.686 timesteps/s, 20.056 katom-step/s +99.4% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.59009 | 0.60345 | 0.61657 | 1.3 | 94.55 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0.020708 | 0.033858 | 0.047324 | 5.5 | 5.31 +Output | 0.00021209 | 0.00022669 | 0.00026379 | 0.0 | 0.04 +Modify | 0.00012321 | 0.00012709 | 0.00013646 | 0.0 | 0.02 +Other | | 0.00056 | | | 0.09 + +Nlocal: 32 ave 32 max 32 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +Nghost: 431 ave 431 max 431 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +Neighs: 0 ave 0 max 0 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +FullNghs: 1856 ave 1856 max 1856 min +Histogram: 4 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 7424 +Ave neighs/atom = 58 +Neighbor list builds = 0 +Dangerous builds = 0 + + +Total wall time: 0:00:00 diff --git a/examples/PACKAGES/pod/Ta_Quadratic/Ta_coefficients.pod b/examples/PACKAGES/pod/Ta_Quadratic/Ta_coefficients.pod new file mode 100644 index 0000000000..19a1263bff --- /dev/null +++ b/examples/PACKAGES/pod/Ta_Quadratic/Ta_coefficients.pod @@ -0,0 +1,183 @@ +POD_coefficients: 182 +-4.35181 +3.57833 +-2.25499 +-4.84612 +2.06319 +-1.17070 +0.23842 +9.17159 +36.02380 +16.65293 +-141.18389 +37.17631 +0.46029 +-9.76145 +-0.03678 +15.64520 +2.29801 +0.02143 +2.69734 +-0.35337 +0.51108 +-2.36290 +0.18617 +-0.13079 +1.02665 +0.21514 +0.08076 +-0.28347 +-0.45059 +-0.24762 +-1.13671 +-0.30577 +0.60504 +-0.31285 +0.10638 +0.06958 +0.21962 +0.10426 +0.80241 +11.41434 +10.26118 +0.03871 +-18.86071 +4.47376 +-1.76865 +0.92507 +-0.42650 +-0.35847 +0.56613 +0.79353 +5.65244 +-8.75326 +6.22216 +4.34659 +10.19995 +-6.53345 +7.16628 +-2.19246 +-5.90780 +-3.52168 +7.97278 +-0.21108 +-0.01016 +-0.01023 +-0.03088 +-0.10222 +0.05366 +0.08037 +-3.17607 +3.45670 +0.79279 +2.38325 +-0.69796 +1.44779 +-0.03351 +0.05645 +-0.01901 +0.01923 +0.05401 +0.02095 +1.45657 +-1.58808 +-1.41187 +-2.18121 +3.04892 +-1.09293 +3.03780 +-1.07247 +-0.50261 +-0.81151 +0.35996 +-0.64601 +-0.04245 +-0.00112 +0.02894 +-0.04382 +-0.06556 +-0.00052 +4.67527 +-0.11816 +-1.52428 +0.17075 +0.20231 +-0.36857 +0.61745 +-0.20190 +0.00816 +-0.16194 +-0.12948 +0.02136 +-2.19267 +-0.62508 +-0.20029 +0.27620 +-0.58116 +0.21791 +-1.82301 +0.32164 +0.64550 +0.11580 +-0.02438 +0.08056 +0.19537 +-0.04119 +-0.00323 +-0.06530 +-0.02547 +0.01404 +0.22333 +0.48190 +0.10715 +0.25684 +-0.65069 +0.31428 +-0.06946 +-0.11924 +-0.05467 +-0.12105 +-0.03980 +0.00295 +-2.14415 +-0.82347 +-0.23084 +0.24926 +-0.36679 +0.16710 +1.20411 +0.47757 +0.11104 +-0.09587 +0.03722 +-0.00309 +-0.29879 +0.06463 +0.10236 +0.02276 +-0.06012 +0.02985 +12.06878 +3.39996 +-0.85590 +0.77481 +-1.13392 +0.40511 +-0.08006 +0.07161 +0.05978 +0.02407 +-0.06031 +0.02307 +-10.24102 +-2.49354 +1.14053 +-0.70454 +0.99990 +-0.33863 +2.43470 +1.16557 +0.23708 +-0.03482 +-0.05280 +0.02735 diff --git a/examples/PACKAGES/pod/Ta_Quadratic/Ta_data.pod b/examples/PACKAGES/pod/Ta_Quadratic/Ta_data.pod new file mode 100644 index 0000000000..2aed5d60dd --- /dev/null +++ b/examples/PACKAGES/pod/Ta_Quadratic/Ta_data.pod @@ -0,0 +1,20 @@ +file_format extxyz +file_extension xyz + +path_to_training_data_set "../Ta/XYZ" +path_to_test_data_set "../Ta/XYZ" + +fitting_weight_energy 100.0 +fitting_weight_force 1.0 +fitting_regularization_parameter 1e-10 + +error_analysis_for_training_data_set 1 +error_analysis_for_test_data_set 0 + +# Add the following basename to the name of output files +basename_for_output_files Ta + +# number of digits after the decimal point for pod coefficients +precision_for_pod_coefficients 5 + + diff --git a/examples/PACKAGES/pod/Ta_Quadratic/Ta_param.pod b/examples/PACKAGES/pod/Ta_Quadratic/Ta_param.pod new file mode 100644 index 0000000000..adfe772d10 --- /dev/null +++ b/examples/PACKAGES/pod/Ta_Quadratic/Ta_param.pod @@ -0,0 +1,33 @@ +# DATE: 2022-11-30 UNITS: metal CONTRIBUTOR: Ngoc Cuong Nguyen, exapde@gmail.com CITATION: https://arxiv.org/abs/2209.02362 +# chemical element symbols +species Ta + +# periodic boundary conditions +pbc 1 1 1 + +# inner cut-off radius +rin 1.0 + +# outer cut-off radius +rcut 5.0 + +# polynomial degrees for radial basis functions +bessel_polynomial_degree 3 +inverse_polynomial_degree 6 + +# one-body potential +onebody 1 + +# two-body linear POD potential +twobody_number_radial_basis_functions 6 + +# three-body linear POD potential +threebody_number_radial_basis_functions 5 +threebody_number_angular_basis_functions 5 + +# four-body linear SNAP potential +fourbody_snap_twojmax 0 + +# quadratic POD potential +quadratic_pod_potential 1 + diff --git a/examples/PACKAGES/pod/Ta_Quadratic/Ta_training_analysis.pod b/examples/PACKAGES/pod/Ta_Quadratic/Ta_training_analysis.pod new file mode 100644 index 0000000000..f7f3910f93 --- /dev/null +++ b/examples/PACKAGES/pod/Ta_Quadratic/Ta_training_analysis.pod @@ -0,0 +1,387 @@ +# Displaced_A15.xyz + config # atoms energy DFT energy energy error force DFT force force error + 1 64 -754.2481469 -754.220443 0.0004328736542 8.011514932 8.398670477 0.06376626471 + 2 64 -753.8045627 -753.865255 0.0009483170919 9.036675474 9.134430545 0.07283331622 + 3 64 -754.1013213 -754.0221 0.001237833587 8.637024563 9.017261102 0.06364803016 + 4 64 -754.2847415 -754.279613 8.013259279e-05 8.107730847 8.381725092 0.0651017527 + 5 64 -753.8382044 -753.777209 0.0009530524751 9.104259346 9.478314477 0.07200166218 + 6 64 -754.0793448 -754.048643 0.0004797149516 8.152199121 8.465317938 0.06707944664 + 7 64 -754.3310528 -754.317603 0.0002101527451 7.944092757 8.127690491 0.05987173847 + 8 64 -754.0070856 -753.969161 0.0005925723559 9.179444115 9.425464952 0.06695321977 + 9 64 -754.1450603 -754.141988 4.800421744e-05 8.574171053 8.821346913 0.06628509806 +# Displaced_BCC.xyz + config # atoms energy DFT energy energy error force DFT force force error + 10 54 -630.8081936 -631.019667 0.003916173668 15.97497492 16.625876 0.1021118884 + 11 54 -631.4580137 -631.719595 0.004844098796 15.24068909 15.58666626 0.1043856899 + 12 54 -631.1667565 -631.386255 0.004064786135 15.46091763 15.92378883 0.1062824237 + 13 54 -632.3004944 -632.575826 0.005098733889 14.42619736 14.55977162 0.09839143245 + 14 54 -630.0894752 -630.450212 0.006680311898 16.78432817 16.96340726 0.108510231 + 15 54 -631.3402507 -631.669379 0.006094968579 15.82894198 16.05757315 0.1000888506 + 16 54 -632.0447348 -632.431277 0.007158188469 14.73098392 14.69810718 0.09621570623 + 17 54 -630.7186534 -630.960068 0.004470640569 15.62236513 15.99073148 0.1063789504 + 18 54 -623.3884972 -623.378198 0.0001907256206 23.97393076 24.67640432 0.1519105242 +# Displaced_FCC.xyz + config # atoms energy DFT energy energy error force DFT force force error + 19 48 -556.0112402 -555.899463 0.002328692595 5.300795182 6.084617063 0.07215984282 + 20 48 -555.9884375 -555.922478 0.001374155755 5.509767105 6.297071211 0.08438733778 + 21 48 -555.8765557 -555.800269 0.001589305952 5.420812181 6.021098636 0.07404420713 + 22 48 -556.2511473 -556.196151 0.00114575707 4.54185517 5.127955094 0.06609457327 + 23 48 -555.6590667 -555.488929 0.003544534966 6.087062872 7.050223459 0.09107544933 + 24 48 -556.1020654 -556.027926 0.001544570012 5.048523316 5.611881174 0.06751585758 + 25 48 -556.0607473 -555.968399 0.001923922354 5.20975666 5.979217189 0.08024051191 + 26 48 -556.0598013 -556.047132 0.0002639447837 4.995519809 5.544452585 0.07745365182 + 27 48 -555.8256423 -555.747848 0.001620713741 5.762702449 6.47892568 0.08480579641 +# Elastic_BCC.xyz + config # atoms energy DFT energy energy error force DFT force force error + 28 2 -23.69025375 -23.689367 0.0004433760298 0.0006229109944 0.0006222748589 9.850145246e-07 + 29 2 -23.690768 -23.689888 0.000440000226 0.000618183093 0.0006166052222 1.005028422e-06 + 30 2 -23.69082186 -23.689996 0.0004129297806 0.0008798074771 0.0008810425642 1.74843114e-06 + 31 2 -23.69166748 -23.690957 0.0003552393384 1.000599337e-06 0 4.011213572e-07 + 32 2 -23.69137648 -23.690521 0.0004277400529 0.0005992883433 0.0005982273815 7.219128625e-07 + 33 2 -23.69120607 -23.69038 0.0004130356748 0.0005947953498 0.0005925723585 9.949545518e-07 + 34 2 -23.6900782 -23.689202 0.0004381010976 0.000626333442 0.0006279363025 1.11150918e-06 + 35 2 -23.69121642 -23.690482 0.0003672088756 0.0008635087452 0.0008640138888 1.400552377e-06 + 36 2 -23.69074792 -23.689902 0.0004229607524 0.0006176587851 0.0006152154094 9.894653378e-07 + 37 2 -23.6914111 -23.690563 0.0004240511901 0.00060523674 0.0006038725031 4.148446495e-07 + 38 2 -23.69095105 -23.690207 0.0003720260028 0.001071999141 0.00107369735 7.195432847e-07 + 39 2 -23.69007856 -23.689285 0.0003967815187 0.0008875288751 0.000890013483 1.187800698e-06 + 40 2 -23.69061639 -23.689768 0.0004241948328 0.001078744596 0.001080249045 1.098539288e-06 + 41 2 -23.69064479 -23.68968 0.0004823961198 0.0008702112502 0.0008680034562 8.482029159e-07 + 42 2 -23.6910243 -23.690074 0.0004751500988 0.00136892629 0.001373818765 2.351923075e-06 + 43 2 -23.68910107 -23.688108 0.0004965356565 0.0006334703054 0.0006336134468 5.99047899e-07 + 44 2 -23.69003986 -23.689241 0.0003994297476 0.0008886652258 0.0008880101351 1.319383612e-06 + 45 2 -23.69042994 -23.68952 0.0004549687915 0.0008868886746 0.0008860011287 4.687853177e-07 + 46 2 -23.68738487 -23.686278 0.0005534349406 0.0006426679338 0.0006406777661 9.71847259e-07 + 47 2 -23.69095089 -23.690097 0.000426944902 0.0008409063968 0.0008410160522 1.331156612e-06 + 48 2 -23.6915816 -23.690811 0.0003853023262 0.0008464479016 0.0008500070588 1.611941107e-06 + 49 2 -23.69114597 -23.690266 0.0004399833623 0.001039354426 0.001044322747 3.354790597e-06 + 50 2 -23.69142231 -23.690597 0.0004126527557 0.001045528808 0.001050833003 2.164976718e-06 + 51 2 -23.69157045 -23.690673 0.0004487231875 0.000604541849 0.0006038907186 7.137781043e-07 + 52 2 -23.69135377 -23.690551 0.0004013839772 0.0008554940241 0.0008590064028 1.199877126e-06 + 53 2 -23.6914855 -23.690693 0.0003962483174 0.0008561039044 0.0008590110593 1.062367199e-06 + 54 2 -23.69110782 -23.69021 0.0004489099543 0.0008699574153 0.0008730051546 1.100986285e-06 + 55 2 -23.68987142 -23.688943 0.0004642118095 0.0008789739049 0.0008800306813 8.920178193e-07 + 56 2 -23.69108099 -23.690136 0.0004724929669 0.000597100569 0.000593996633 9.80915639e-07 + 57 2 -23.6884849 -23.687444 0.0005204507995 0.0009046496679 0.000903059245 1.159810957e-06 + 58 2 -23.69061659 -23.689801 0.0004077972116 0.0008734820883 0.0008740011442 2.826546206e-07 + 59 2 -23.69129673 -23.690408 0.0004443660476 8.294236971e-07 0 3.094976021e-07 + 60 2 -23.69128183 -23.690362 0.0004599146498 0.0006083805154 0.0006067503605 7.610258412e-07 + 61 2 -23.68992957 -23.688881 0.0005242861565 0.0008210298141 0.0008250054545 1.716902102e-06 + 62 2 -23.6913441 -23.690515 0.0004145511761 0.001475621115 0.001475779794 2.846782756e-06 + 63 2 -23.69141171 -23.690551 0.0004303554398 0.0005957864934 0.0005996599036 1.205169041e-06 + 64 2 -23.69029628 -23.689487 0.0004046409478 0.0006212224483 0.0006194384554 9.873569794e-07 + 65 2 -23.69072139 -23.68986 0.0004306953753 0.0008858826742 0.0008860124153 5.860307089e-07 + 66 2 -23.69018379 -23.689288 0.0004478958682 0.001400962673 0.001396479144 1.244220213e-06 + 67 2 -23.69129611 -23.690457 0.0004195533333 0.0005914018694 0.0005939831647 1.147206273e-06 + 68 2 -23.6908455 -23.689792 0.0005267514192 0.0008274901181 0.0008340587509 2.92351135e-06 + 69 2 -23.69101454 -23.690006 0.000504270969 0.0005874525941 0.0005897694465 1.183929198e-06 + 70 2 -23.69137638 -23.690571 0.0004026908865 0.000593505398 0.0005939781141 8.885138938e-07 + 71 2 -23.69114123 -23.690213 0.0004641149057 0.001085936923 0.001084315452 6.622719884e-07 + 72 2 -23.69146017 -23.690617 0.0004215861743 0.0005980164348 0.0006024682564 1.268431385e-06 + 73 2 -23.69063494 -23.689761 0.000436969988 0.0008787869884 0.0008790688255 2.274049903e-06 + 74 2 -23.69116059 -23.69027 0.0004452945331 6.913231892e-07 0 2.06028124e-07 + 75 2 -23.69134793 -23.690599 0.0003744660856 0.0006108389518 0.0006137752031 6.965603905e-07 + 76 2 -23.69149586 -23.69061 0.0004429280005 9.198411365e-07 0 3.754400665e-07 + 77 2 -23.69139951 -23.690603 0.000398256099 0.0008543318552 0.0008590331775 1.578689348e-06 + 78 2 -23.68884519 -23.687908 0.0004685950581 0.0009053954566 0.0009010105438 1.65775018e-06 + 79 2 -23.6914255 -23.690688 0.0003687521098 0.0008461958108 0.0008470064935 1.24650271e-06 + 80 2 -23.69088798 -23.689988 0.0004499890418 0.0006191456007 0.0006194465272 7.975009516e-07 + 81 2 -23.69054504 -23.689613 0.000466018941 0.0008740606753 0.0008740732235 7.595178952e-07 + 82 2 -23.69150291 -23.690678 0.0004124549265 0.000610815433 0.0006123757017 8.072128622e-07 + 83 2 -23.69107508 -23.69017 0.0004525408662 0.0008712162343 0.0008750051428 1.392028307e-06 + 84 2 -23.68888775 -23.687892 0.0004978736601 0.001115255007 0.001112070142 1.300142654e-06 + 85 2 -23.69100617 -23.690132 0.0004370859053 0.0008623538074 0.000868018433 1.989858339e-06 + 86 2 -23.6915696 -23.690843 0.0003633021835 0.0006034842936 0.0006081134763 1.367591325e-06 + 87 2 -23.6914135 -23.690598 0.0004077489269 0.001205622222 0.001217674833 4.139631643e-06 + 88 2 -23.69152569 -23.690656 0.0004348445802 0.00059822098 0.0006024765556 1.339932217e-06 + 89 2 -23.69122964 -23.690254 0.0004878211992 0.001039614315 0.001043496047 2.818924297e-06 + 90 2 -23.69160573 -23.690694 0.0004558637161 0.0006005236901 0.0006010740387 4.468420123e-07 + 91 2 -23.69097667 -23.690097 0.0004398330703 0.0008742194238 0.0008730234819 9.401050256e-07 + 92 2 -23.68931979 -23.688402 0.0004588927364 0.0006323490707 0.000632180354 2.788475676e-07 + 93 2 -23.68957637 -23.688669 0.0004536826549 0.00109306805 0.001092474256 1.597364093e-06 + 94 2 -23.69136079 -23.690538 0.0004113947461 0.0008559690445 0.0008610145179 1.717539372e-06 + 95 2 -23.69064046 -23.689722 0.0004592303219 0.0006203234131 0.0006251287867 1.466461168e-06 + 96 2 -23.69148676 -23.690581 0.0004528821164 7.127209296e-07 0 2.255862749e-07 + 97 2 -23.68967251 -23.688755 0.0004587573049 0.0006269090495 0.0006251143895 8.455647387e-07 + 98 2 -23.69038245 -23.689312 0.0005352239912 0.000826073741 0.0008290597083 1.434612139e-06 + 99 2 -23.6885155 -23.687388 0.0005637521677 0.001127067737 0.001120237475 2.789972117e-06 + 100 2 -23.69147138 -23.690664 0.0004036885172 0.0006101342417 0.0006109402589 2.333615197e-07 + 101 2 -23.69059185 -23.68941 0.0005909249423 0.0005851627123 0.0005883553348 1.578374866e-06 + 102 2 -23.69082355 -23.690035 0.0003942736357 0.0008795917739 0.0008810062429 8.322936553e-07 + 103 2 -23.69101815 -23.690015 0.0005015752118 0.0008420115266 0.0008450195264 1.339974338e-06 + 104 2 -23.6915919 -23.690752 0.0004199489474 0.0005974769534 0.0005996415596 9.70832204e-07 + 105 2 -23.69060481 -23.689825 0.0003899071047 0.0008774615458 0.0008800215906 1.681763497e-06 + 106 2 -23.69149833 -23.690562 0.0004681669348 0.0008527073264 0.0008560011682 1.112325585e-06 + 107 2 -23.69145561 -23.690622 0.0004168042562 0.0008363622912 0.0008390017878 8.931080404e-07 + 108 2 -23.68965306 -23.688764 0.0004445309599 0.0008936261428 0.0008910185183 1.309260409e-06 + 109 2 -23.69077552 -23.690011 0.0003822599475 0.000620379228 0.0006194287691 3.13320397e-07 + 110 2 -23.68867102 -23.687696 0.000487511551 0.00108606805 0.001087589996 1.326985668e-06 + 111 2 -23.69172933 -23.691019 0.0003551640965 0.000852012982 0.0008540035129 9.847228238e-07 + 112 2 -23.68991099 -23.689025 0.0004429972401 6.462272267e-07 0 2.557212251e-07 + 113 2 -23.69080506 -23.689952 0.0004265320817 7.01277621e-07 0 2.758977153e-07 + 114 2 -23.69152793 -23.69061 0.0004589649051 0.0008542964546 0.0008580011655 1.338538453e-06 + 115 2 -23.69153556 -23.690595 0.0004702784057 0.0008679746125 0.0008680069124 6.687400365e-07 + 116 2 -23.69117399 -23.690231 0.0004714925881 0.0005924022792 0.0005925892338 1.259966552e-07 + 117 2 -23.69139497 -23.690469 0.0004629847699 0.0008486905112 0.0008500294113 6.345373178e-07 + 118 2 -23.69122801 -23.690482 0.0003730074478 0.0008734799561 0.0008740102974 2.172848871e-07 + 119 2 -23.69055118 -23.689613 0.0004690900383 0.0008237357642 0.0008320192305 2.927979209e-06 + 120 2 -23.68847553 -23.687426 0.0005247674818 0.00109373942 0.00109577735 8.309003636e-07 + 121 2 -23.69041353 -23.689562 0.0004257635066 0.0006210722843 0.0006265237426 1.574787587e-06 + 122 2 -23.69137916 -23.6904 0.0004895816263 3.712921572e-07 0 1.509058152e-07 + 123 2 -23.69152028 -23.690561 0.0004796420104 0.0005964910689 0.0005982273815 1.201534101e-06 + 124 2 -23.69012376 -23.689107 0.0005083815771 0.0008124995056 0.0008180073349 1.978492784e-06 + 125 2 -23.69112303 -23.690145 0.0004890142327 0.0008742243294 0.0008740766557 1.981009549e-06 + 126 2 -23.6913827 -23.690482 0.0004503495661 0.0005944562314 0.0005939983165 2.226897955e-07 + 127 2 -23.69071568 -23.689864 0.0004258395345 0.0008855409145 0.0008860124153 7.974979118e-07 +# Elastic_FCC.xyz + config # atoms energy DFT energy energy error force DFT force force error + 128 4 -46.43709855 -46.437936 0.0002093612883 0.0008950060736 0.001265949446 0.000146452977 + 129 4 -46.4407039 -46.438504 0.0005499748573 0.000997595139 0.001492549497 0.0001384061782 + 130 4 -46.43497365 -46.436378 0.0003510862834 0.0005521282519 0.000810592376 9.989142068e-05 + 131 4 -46.44077415 -46.441551 0.0001942119059 0.001132198228 0.001283675193 6.296962032e-05 + 132 4 -46.41517164 -46.416957 0.0004463405792 0.0009179900208 0.001186145859 8.226328068e-05 + 133 4 -46.43849879 -46.440495 0.0004990525813 0.001000780392 0.001212440514 6.935589607e-05 + 134 4 -46.43777706 -46.437972 4.873549652e-05 0.001389269894 0.002358226452 0.0002414826841 + 135 4 -46.44772061 -46.44586 0.0004651531137 0.001363793596 0.002033949852 0.0001874007898 + 136 4 -46.43566097 -46.435744 2.075817254e-05 0.000953167535 0.001690849491 0.0002499304679 + 137 4 -46.4397151 -46.438209 0.00037652527 0.0008871613375 0.001160049999 6.827988406e-05 + 138 4 -46.42609455 -46.42629 4.886318637e-05 0.0005556350354 0.0005297018029 1.216514421e-05 + 139 4 -46.44149051 -46.443301 0.000452621879 0.001132511065 0.001818421568 0.0001734412183 + 140 4 -46.43896893 -46.439002 8.267057767e-06 0.00117987933 0.001416973535 6.937475084e-05 + 141 4 -46.43123556 -46.432438 0.0003006109725 0.001147766863 0.001010469198 6.008541597e-05 + 142 4 -46.41017485 -46.412654 0.0006197881873 0.001371501038 0.001801959766 0.0001610014005 + 143 4 -46.44246774 -46.443231 0.0001908139315 0.0008879090598 0.001691590967 0.0001867981606 + 144 4 -46.43057135 -46.431513 0.0002354125917 0.001455115673 0.001680544852 7.970584941e-05 + 145 4 -46.43314849 -46.435608 0.0006148762889 0.000895665118 0.0009593039143 1.661567686e-05 + 146 4 -46.43895751 -46.437689 0.0003171274211 0.001001645194 0.001217708504 8.864742137e-05 + 147 4 -46.42711221 -46.428447 0.0003336986888 0.001053852558 0.002060081552 0.0002791878112 + 148 4 -46.43182739 -46.432255 0.0001069024683 0.0007125257042 0.0006274201144 7.371629444e-05 + 149 4 -46.44177162 -46.442315 0.0001358457811 0.001140464208 0.002424436842 0.0003371036569 + 150 4 -46.43717254 -46.436613 0.0001398846117 0.0005515470177 0.0005321240457 4.259807028e-05 + 151 4 -46.43004027 -46.430825 0.0001961820031 0.001008903044 0.001399987143 0.0001075255526 + 152 4 -46.43208405 -46.43312 0.0002589878074 0.0005518527942 0.0007272771136 5.274203403e-05 + 153 4 -46.43371444 -46.434347 0.0001581399218 0.0008969170063 0.001284451634 0.0001164513128 + 154 4 -46.42879982 -46.430573 0.0004432945175 0.0009069765603 0.001315746176 0.0001014266169 + 155 4 -46.447298 -46.445665 0.0004082491075 0.001210138531 0.00180789159 0.0001638463617 + 156 4 -46.43544342 -46.435898 0.0001136443164 0.0008978232764 0.001869300939 0.0002335504189 + 157 4 -46.44021163 -46.442107 0.0004738420888 0.0007064273171 0.0006020930161 3.471659428e-05 + 158 4 -46.43498956 -46.434432 0.0001393900254 0.0009533481634 0.001092982159 7.242855195e-05 + 159 4 -46.43803609 -46.436308 0.0004320214507 0.001263659401 0.001839150891 0.0001727461182 + 160 4 -46.42268734 -46.423938 0.0003126639814 0.001014412723 0.001463463016 0.0001717552705 + 161 4 -46.42662921 -46.428115 0.0003714479779 0.0007136207343 0.0008584497656 6.405723356e-05 + 162 4 -46.42531434 -46.4269 0.0003964157023 0.001206355291 0.001845719914 0.0002046485935 + 163 4 -46.42224822 -46.421142 0.0002765553485 0.001156356337 0.001309150106 4.994080216e-05 + 164 4 -46.4302643 -46.432233 0.0004921740977 0.0007882965793 0.0007253109678 2.466489667e-05 + 165 4 -46.43017474 -46.429408 0.0001916838665 0.0008990219519 0.001068327665 6.20865224e-05 + 166 4 -46.44541887 -46.445145 6.846696931e-05 0.001028604655 0.001776038288 0.0001975508878 + 167 4 -46.43410132 -46.435868 0.0004416694333 0.00126629656 0.002376074704 0.000327900749 + 168 4 -46.43919494 -46.439663 0.000117015505 0.0005441673063 0.001119403413 0.0001039537782 + 169 4 -46.42584101 -46.428287 0.0006114965752 0.001286554786 0.001277000392 3.606394767e-05 + 170 4 -46.42254993 -46.424584 0.0005085169742 0.0007166928162 0.0008032957114 3.058247108e-05 + 171 4 -46.41053526 -46.413045 0.0006274343113 0.001077488513 0.001248322074 4.395077903e-05 + 172 4 -46.43440112 -46.436994 0.0006482188049 0.0009567631791 0.001331939188 0.0001491134555 + 173 4 -46.44377744 -46.443604 4.335960636e-05 0.0009956177543 0.001177046303 8.761451233e-05 + 174 4 -46.44028269 -46.439718 0.0001411721588 9.067047531e-07 0 2.475505668e-07 + 175 4 -46.43723548 -46.435527 0.0004271210489 0.001133620592 0.0009338393866 8.014318869e-05 + 176 4 -46.43396161 -46.434787 0.0002063463028 0.001150111497 0.00117329195 4.934566521e-05 + 177 4 -46.43612253 -46.434929 0.0002983827305 0.001267527163 0.001349491756 5.093505267e-05 + 178 4 -46.42638491 -46.426499 2.852212041e-05 0.001164859731 0.001248937949 4.347948673e-05 + 179 4 -46.43717201 -46.437025 3.675291261e-05 0.0007725497049 0.000938418883 6.831038145e-05 + 180 4 -46.4281895 -46.428937 0.0001868753733 0.001151244017 0.001286352984 4.994280583e-05 + 181 4 -46.44116364 -46.442516 0.0003380888012 0.0007032389703 0.00094855469 0.000108860383 + 182 4 -46.42978258 -46.428736 0.000261644323 0.001009630039 0.001424321593 0.0001089615374 + 183 4 -46.43305551 -46.433359 7.587324757e-05 0.001156683005 0.001276381604 4.128762871e-05 + 184 4 -46.44006475 -46.438799 0.0003164387002 0.0007752996484 0.0008186940821 3.548756759e-05 + 185 4 -46.44169053 -46.441993 7.561811334e-05 0.0008970971352 0.001887735151 0.000222339744 + 186 4 -46.43727222 -46.439033 0.0004401950631 0.0007708721421 0.000821568013 4.107006528e-05 + 187 4 -46.43632517 -46.436967 0.0001604569693 0.001052390429 0.001482323514 0.0001388091175 + 188 4 -46.42718259 -46.427245 1.560321473e-05 0.001072419719 0.001293885621 7.709436807e-05 + 189 4 -46.43874841 -46.438046 0.0001756028841 0.001260671466 0.001627288542 0.0001002073731 + 190 4 -46.41877429 -46.420083 0.0003271766028 0.001421603027 0.002395244873 0.0003233098337 + 191 4 -46.44621445 -46.445247 0.0002418621169 0.0009904379233 0.001219330964 5.687300364e-05 + 192 4 -46.44511464 -46.446044 0.0002323405647 0.0008790841215 0.001305329077 0.0001107509546 + 193 4 -46.43564394 -46.434472 0.0002929855068 0.0008903788205 0.0008323340675 4.743676385e-05 + 194 4 -46.44317175 -46.44458 0.0003520614781 0.0007034017538 0.0009744208536 5.172011109e-05 + 195 4 -46.44087095 -46.441776 0.0002262619087 0.001139223456 0.001339231869 8.765048343e-05 + 196 4 -46.43719327 -46.436389 0.0002010663787 0.001277509155 0.001786741168 0.0001303767139 + 197 4 -46.44563996 -46.446416 0.0001940092562 0.000700739078 0.0006588778339 5.645492682e-05 + 198 4 -46.44980864 -46.449806 6.612381167e-07 0.001232827144 0.002135055034 0.000238485636 + 199 4 -46.42466674 -46.427189 0.000630565232 0.001011828268 0.001050788276 2.797047063e-05 + 200 4 -46.42588994 -46.427857 0.0004917661001 0.00101091552 0.001487666629 0.0001398462851 + 201 4 -46.44273693 -46.44004 0.0006742322248 0.0007050797939 0.000757202747 2.506453736e-05 + 202 4 -46.43659247 -46.437214 0.0001553826468 0.0008924047139 0.001505586265 0.0001475570783 + 203 4 -46.42189527 -46.422628 0.0001831832406 0.0009120248401 0.001601713458 0.000220735026 + 204 4 -46.44387014 -46.443535 8.378488419e-05 0.001253187877 0.001590304373 0.0001006146179 + 205 4 -46.4386991 -46.439922 0.0003057250066 0.001138308596 0.001530493385 0.0001018467448 + 206 4 -46.4373267 -46.437675 8.707593122e-05 0.001448336679 0.002440246094 0.0003149340449 + 207 4 -46.44459348 -46.445558 0.0002411298298 0.0008716896548 0.00113392416 7.56133778e-05 + 208 4 -46.43888137 -46.439106 5.615857123e-05 0.001259801506 0.001830731002 0.0001709221809 + 209 4 -46.44452218 -46.443073 0.0003622950507 0.0005355234286 0.0005766870902 1.79131694e-05 + 210 4 -46.44072829 -46.4397 0.0002570731957 0.0008912596243 0.001204174406 7.190944969e-05 + 211 4 -46.43632905 -46.436374 1.123662554e-05 0.001004541694 0.001461656594 0.0001640759015 + 212 4 -46.42622449 -46.426557 8.312803221e-05 0.0009090508284 0.001359624213 9.61864457e-05 + 213 4 -46.43334095 -46.434009 0.0001670113496 0.001064727188 0.001391131194 0.0001118380498 + 214 4 -46.43528491 -46.436262 0.0002442731151 0.001381671346 0.002503347159 0.0002862586044 + 215 4 -46.43302209 -46.434505 0.0003707284248 0.001050895839 0.001041637173 1.89496147e-05 + 216 4 -46.43866543 -46.438768 2.564310569e-05 0.001038218766 0.001098285027 4.514347826e-05 + 217 4 -46.43867092 -46.440254 0.0003957707004 0.0005510961941 0.0006069892915 4.783704875e-05 + 218 4 -46.42481604 -46.42286 0.0004890088296 0.0005673661233 0.0007365242698 6.506186378e-05 + 219 4 -46.41707211 -46.418078 0.0002514713405 0.001292943112 0.002028412187 0.0002017017778 + 220 4 -46.44058128 -46.440513 1.707010597e-05 0.0008917164568 0.001158189967 9.459267259e-05 + 221 4 -46.40786735 -46.409824 0.0004891615343 0.0009159953828 0.001759573812 0.0002027400844 + 222 4 -46.44176165 -46.440329 0.0003581620037 0.0007050786772 0.0009534044263 7.330941275e-05 + 223 4 -46.43764613 -46.43773 2.096713934e-05 0.0007747180798 0.000926180328 6.358620118e-05 + 224 4 -46.41646676 -46.416525 1.456051792e-05 0.0007183861299 0.0007573664899 3.367542767e-05 + 225 4 -46.44086814 -46.440293 0.0001437847792 0.0008909027165 0.0007725386722 2.803789995e-05 + 226 4 -46.44027214 -46.43839 0.0004705341364 0.000707862255 0.0005612022808 3.305825174e-05 + 227 4 -46.44117428 -46.438916 0.0005645709574 0.0008843760681 0.001650878554 0.0001728225821 +# GSF_110.xyz + config # atoms energy DFT energy energy error force DFT force force error + 228 24 -278.9717069 -279.068761 0.00404392159 1.716820058 1.756353161 0.02195806777 + 229 24 -279.8354387 -279.784296 0.002130947259 0.8360146768 0.9057668891 0.02306494032 + 230 24 -279.920921 -279.901657 0.0008026665456 0.2958425102 0.001565946359 0.01411644012 + 231 24 -279.6113309 -279.584238 0.001128868858 1.136927341 1.035572248 0.02681094686 + 232 24 -279.8354404 -279.784283 0.002131557037 0.8360110766 0.9056396189 0.0230536352 + 233 24 -279.3024349 -279.302158 1.153693867e-05 1.736732164 1.771965137 0.0337612822 + 234 24 -279.5958842 -279.55564 0.001676842348 1.457718728 1.405626506 0.02601747541 + 235 24 -279.1575825 -279.246939 0.003723188855 0.7701800349 0.4813964151 0.04047321686 + 236 24 -279.3024374 -279.302157 1.168449864e-05 1.736735452 1.771953347 0.03376037562 + 237 24 -279.1575945 -279.246935 0.003722519724 0.7692674812 0.4809484798 0.04044518496 + 238 24 -279.9208868 -279.896025 0.001035908286 0.2963183655 0.01060549839 0.01410249268 + 239 24 -279.6115694 -279.584237 0.001138851225 1.137705592 1.035836121 0.02686761868 + 240 24 -279.0645289 -279.124427 0.002495753535 1.763755884 1.809545887 0.03536481445 + 241 24 -279.3562358 -279.379366 0.0009637580399 1.070359709 0.8982692706 0.03586364626 + 242 24 -279.3561336 -279.37937 0.0009681812755 1.070186817 0.898081355 0.03582333417 + 243 24 -279.0645273 -279.124427 0.002495821471 1.76375235 1.809523374 0.03536506787 + 244 24 -279.920921 -279.901657 0.0008026665457 0.2958425115 0.001570374478 0.01411414901 + 245 24 -279.835369 -279.79264 0.001780376458 0.7694167211 0.8392614852 0.02365582641 + 246 24 -279.9208868 -279.896025 0.001035908286 0.2963183642 0.01060243293 0.01410272845 + 247 24 -279.0819585 -279.206496 0.005189062307 0.5487881184 0.005326518563 0.03225762846 + 248 24 -279.5958869 -279.55564 0.001676953548 1.457718908 1.4056319 0.0260184492 + 249 24 -279.8353874 -279.79264 0.00178114169 0.7694019544 0.8392625708 0.02365755724 +# GSF_112.xyz + config # atoms energy DFT energy energy error force DFT force force error + 250 30 -345.1958147 -345.175835 0.0006659891847 1.417828523 1.057395322 0.04924265533 + 251 30 -346.4091655 -346.361714 0.00158171544 1.014644749 1.220284939 0.04659092137 + 252 30 -345.9623041 -345.795524 0.00555933642 1.67846042 2.112860875 0.06265038152 + 253 30 -345.1047773 -345.164602 0.001994155137 1.81758407 1.765832199 0.05258058282 + 254 30 -346.5687926 -346.593523 0.0008243469243 0.5266157132 0.01148867129 0.03755503081 + 255 30 -346.4165138 -346.396186 0.000677592277 1.101956155 0.9954683928 0.04399110273 + 256 30 -345.2521555 -345.319406 0.002241683384 2.024012114 1.772040852 0.05936121329 + 257 30 -345.5898529 -345.594794 0.0001647017128 2.048144748 1.516014157 0.06040124074 + 258 30 -346.0297766 -345.98566 0.001470553801 1.767327567 1.406252265 0.0524370388 + 259 30 -345.5053827 -345.383994 0.004046291647 1.336428827 0.963574308 0.05104898331 + 260 30 -346.5686343 -346.582564 0.0004643235194 0.5264211967 0.0126740587 0.03760970063 + 261 30 -345.4208874 -345.452139 0.001041721437 3.011664984 2.787719406 0.06345649604 + 262 30 -346.5687923 -346.593523 0.0008243564189 0.5266290267 0.01148834 0.03755658657 + 263 30 -345.4303119 -345.281949 0.004945431293 1.947208693 1.873142686 0.05337068276 + 264 30 -345.9593201 -345.928661 0.001021971125 2.36272379 2.100874472 0.0500210761 + 265 30 -345.0137679 -345.111657 0.003262969466 3.193781636 3.358068319 0.0653642582 + 266 30 -346.4078757 -346.367123 0.00135842305 1.085591177 1.335797131 0.04639233515 + 267 30 -346.5685865 -346.582565 0.000465950677 0.5264876602 0.01254743735 0.03760888491 + 268 30 -344.8663405 -344.91356 0.00157398253 2.930409434 3.441834403 0.06926997464 + 269 30 -345.9709087 -345.836703 0.00447352268 1.391835322 1.608769148 0.05570538969 + 270 30 -345.0229889 -344.984307 0.001289396737 2.372017585 2.542628782 0.05571754983 + 271 30 -346.4089446 -346.393931 0.0005004538568 1.297845709 1.211680725 0.04319349627 +# Liquid.xyz + config # atoms energy DFT energy energy error force DFT force force error + 272 100 -1105.559726 -1105.601723 0.0004199685213 30.70196318 31.39853886 0.2273901981 + 273 100 -1099.629534 -1099.673012 0.0004347839505 31.9864667 32.03167218 0.2226202822 + 274 100 -1121.431681 -1121.31506 0.001166208152 21.23863487 20.81076453 0.2037539182 +# Surface.xyz + config # atoms energy DFT energy energy error force DFT force force error + 275 24 -279.9208871 -279.911828 0.0003774638802 0.296319206 0.002753093533 0.01433131366 + 276 48 -554.2414777 -555.359452 0.02329113138 1.363109763 0.003020630398 0.05738251122 + 277 40 -459.5808396 -459.216162 0.009116939427 3.331498127 5.0461364 0.07877996732 + 278 40 -460.5932468 -461.144076 0.01377073069 0.885446861 0.005582740008 0.03813346389 + 279 24 -279.8214987 -279.635146 0.007764695863 0.9820115882 1.288799837 0.01857542284 + 280 30 -346.5687934 -346.592525 0.000791054458 0.5266151802 0.008446203407 0.03726635334 + 281 30 -346.0051972 -345.744506 0.008689705343 2.2667395 3.124961367 0.06591070418 +# Volume_A15.xyz + config # atoms energy DFT energy energy error force DFT force force error + 282 8 -67.00264006 -66.990732 0.001488507429 1.215939804e-14 0 2.243358855e-15 + 283 8 -72.95775649 -72.957807 6.314313802e-06 8.336427488e-14 0 1.123457519e-14 + 284 8 -94.15079086 -94.145745 0.0006307320297 1.643238761e-14 0 2.292400473e-15 + 285 8 -94.55576973 -94.554682 0.0001359665592 8.781810015e-15 0 1.347934763e-15 + 286 8 -79.41651001 -79.438363 0.002731624081 2.791146139e-14 0 4.283068402e-15 + 287 8 -69.63190551 -69.627817 0.0005110639107 2.797159709e-15 0 4.945407509e-16 + 288 8 -82.61402421 -82.604907 0.001139651578 5.50518588e-15 0 8.533393899e-16 + 289 8 14.88715331 14.89048 0.0004158363277 2.277623074e-13 0 3.606918366e-14 + 290 8 -94.356027 -94.367599 0.001446500568 1.370656518e-14 0 1.897531383e-15 + 291 8 -89.24943611 -89.248227 0.0001511386032 1.664774127e-14 0 2.375992921e-15 + 292 8 -87.22359359 -87.211997 0.001449574005 7.983033839e-15 0 1.375635716e-15 + 293 8 -93.64917628 -93.66897 0.002474215442 2.161830962e-15 0 3.67529118e-16 + 294 8 -7.974970933 -7.989166 0.001774383436 5.099416125e-13 0 6.946546112e-14 + 295 8 -84.99735699 -84.982834 0.001815374179 2.170443421e-15 0 3.781697178e-16 + 296 8 -92.51696438 -92.536373 0.002426077641 3.718860295e-14 0 5.973231169e-15 + 297 8 -26.79883513 -26.77612 0.002839390901 2.233715834e-13 0 3.517493235e-14 + 298 8 -77.53738471 -77.544107 0.0008402860664 4.491324709e-15 0 6.054184931e-16 + 299 8 -80.11476756 -80.114217 6.882047834e-05 5.913998758e-15 0 9.669637776e-16 + 300 8 -42.12903277 -42.143041 0.00175102843 2.422750345e-13 0 3.585193613e-14 + 301 8 -91.02990945 -91.040671 0.001345193709 6.975614512e-15 0 1.271552308e-15 + 302 8 -84.50933128 -84.499231 0.001262535287 7.403156156e-14 0 1.406889651e-14 + 303 8 -61.79844785 -61.825173 0.00334064406 6.607450367e-15 0 1.159662644e-15 + 304 8 -91.13057634 -91.156873 0.003287081921 4.951266629e-15 0 8.926959288e-16 + 305 8 -54.64916673 -54.658744 0.001197159343 1.762087937e-13 0 2.65881147e-14 + 306 8 -72.27319254 -72.277255 0.000507807722 1.012753197e-15 0 1.548963504e-16 + 307 8 -74.91471828 -74.923334 0.001076965039 5.031158658e-15 0 8.218252467e-16 + 308 8 -64.81833234 -64.798066 0.002533292377 2.413198886e-14 0 3.886792508e-15 + 309 8 -93.03489737 -93.048342 0.001680578381 1.933770811e-14 0 2.823007783e-15 + 310 8 -64.39098016 -64.38702 0.0004950203573 5.491439235e-15 0 7.035387897e-16 + 311 8 -88.36401111 -88.352871 0.001392513469 2.448818319e-14 0 4.111150078e-15 +# Volume_BCC.xyz + config # atoms energy DFT energy energy error force DFT force force error + 312 2 -16.76594324 -16.763625 0.001159120926 6.976263305e-16 0 2.428612866e-16 + 313 2 16.313727 16.314145 0.0002090019872 8.554299543e-13 0 3.258747439e-13 + 314 2 -21.21034404 -21.209071 0.0006365184639 6.640073969e-15 0 2.236638531e-15 + 315 2 -15.78459679 -15.780524 0.002036394156 5.203101774e-14 0 1.833927975e-14 + 316 2 -18.99841037 -19.002205 0.001897313323 1.54524867e-14 0 5.273488075e-15 + 317 2 -22.62451928 -22.620568 0.001975641435 2.616505909e-15 0 8.627358087e-16 + 318 2 4.098164524 4.096885 0.0006397621932 1.343238339e-13 0 4.308474873e-14 + 319 2 56.26275599 56.26276 2.005140033e-06 4.519068948e-12 0 1.619606237e-12 + 320 2 -22.58944013 -22.585113 0.002163564374 5.342497709e-16 0 1.665334537e-16 + 321 2 -21.79724015 -21.795501 0.0008695727187 1.356336346e-15 0 5.088522196e-16 + 322 2 33.11015633 33.110078 3.916319966e-05 9.447550921e-13 0 3.146094496e-13 + 323 2 -20.88315873 -20.885998 0.001419633105 7.79136136e-16 0 2.683038976e-16 + 324 2 -23.59568896 -23.601336 0.002823519876 1.786193989e-15 0 4.786425072e-16 + 325 2 -23.20858072 -23.207313 0.0006338593044 1.587616402e-15 0 5.168500994e-16 + 326 2 -19.89310508 -19.898089 0.002491959911 5.484204741e-15 0 2.212350673e-15 + 327 2 -23.40543383 -23.405474 2.008348612e-05 1.53358588e-15 0 5.31475905e-16 + 328 2 -4.78389031 -4.781324 0.001283154883 1.032154003e-13 0 2.824014171e-14 + 329 2 -18.86311291 -18.864936 0.0009115426575 7.879846534e-16 0 3.053113318e-16 + 330 2 -17.81642586 -17.813086 0.001669928234 3.605555037e-16 0 9.945747929e-17 + 331 2 -11.19369732 -11.197201 0.001751838472 4.930421981e-14 0 1.82568081e-14 + 332 2 -23.68308621 -23.696705 0.00680939721 1.854348399e-15 0 6.493648212e-16 +# Volume_FCC.xyz + config # atoms energy DFT energy energy error force DFT force force error + 333 4 -19.07363593 -19.075994 0.0005895165228 4.539228243e-14 0 9.571047658e-15 + 334 4 -34.87911159 -34.873619 0.001373146366 4.198460887e-16 0 9.425330886e-17 + 335 4 -43.95312211 -43.950003 0.0007797776247 2.024630393e-15 0 4.763261544e-16 + 336 4 -40.99484531 -40.991909 0.0007340787492 7.390350347e-15 0 1.496325488e-15 + 337 4 -43.44688588 -43.453929 0.001760780713 4.008514517e-15 0 1.003087756e-15 + 338 4 -42.69057262 -42.686077 0.00112390473 2.201304978e-15 0 5.507566336e-16 + 339 4 -33.2256766 -33.224653 0.0002559009775 2.053725049e-16 0 5.088522196e-17 + 340 4 -26.86518979 -26.862709 0.0006201985978 3.140235603e-14 0 7.073764388e-15 + 341 4 -25.52095379 -25.519883 0.000267698747 6.385007894e-16 0 1.350193105e-16 + 342 4 3.462101351 3.463071 0.0002424122902 9.859120235e-14 0 2.313607928e-14 + 343 4 -31.59322682 -31.59595 0.0006807955537 2.683163594e-16 0 6.85215773e-17 + 344 4 -45.10086835 -45.100466 0.0001005869681 1.851345213e-15 0 4.233676619e-16 + 345 4 -46.05341345 -46.052258 0.0002888617397 5.706396539e-16 0 1.230208065e-16 + 346 4 -29.99832747 -30.001189 0.000715381888 4.217055326e-16 0 9.772275581e-17 + 347 4 -22.85257323 -22.8504 0.0005433065144 5.289057803e-16 0 1.249000903e-16 + 348 4 -9.165925355 -9.164691 0.0003085886251 6.994099953e-14 0 1.740903428e-14 + 349 4 -24.14844551 -24.150343 0.0004743734227 3.331030455e-16 0 7.459310947e-17 + 350 4 -46.43546878 -46.426795 0.002168446119 3.110946892e-15 0 8.45388574e-16 + 351 4 -28.4512672 -28.451145 3.054899355e-05 7.027034849e-15 0 2.024133176e-15 + 352 4 40.34134283 40.341566 5.579222461e-05 4.132267104e-13 0 1.032726433e-13 + 353 4 19.61887601 19.617912 0.0002410019119 1.957059783e-13 0 4.973561211e-14 + 354 4 -26.95747285 -26.954384 0.0007722115981 4.151755412e-16 0 1.006139616e-16 + 355 4 -46.33491981 -46.323696 0.002805952031 2.472781231e-15 0 6.375108774e-16 + 356 4 -45.83316789 -45.828947 0.001055221357 1.149213664e-14 0 3.283108739e-15 + 357 4 -38.16058672 -38.16029 7.417901943e-05 5.394515869e-16 0 1.214306433e-16 + 358 4 -32.91257361 -32.919741 0.001791847013 3.667266479e-14 0 9.583190722e-15 + 359 4 -41.2675262 -41.272675 0.001287200608 1.447869656e-14 0 4.164533482e-15 + 360 4 -39.74460491 -39.753322 0.002179272067 5.980937198e-16 0 1.292283933e-16 + 361 4 -37.55548161 -37.547435 0.002011651484 1.56813803e-14 0 3.793478841e-15 + 362 4 -36.53186907 -36.52595 0.00147976637 2.125160163e-16 0 4.741577501e-17 + 363 4 -45.01550152 -45.016087 0.0001463706371 1.97327102e-15 0 4.891920202e-16 diff --git a/examples/PACKAGES/pod/Ta_Quadratic/Ta_training_errors.pod b/examples/PACKAGES/pod/Ta_Quadratic/Ta_training_errors.pod new file mode 100644 index 0000000000..78f600d5cb --- /dev/null +++ b/examples/PACKAGES/pod/Ta_Quadratic/Ta_training_errors.pod @@ -0,0 +1,20 @@ +**************** Begin of Error Analysis for the Training Data Set **************** +--------------------------------------------------------------------------------------------------- + File | # configs | # atoms | MAE energy | RMSE energy | MAE force | RMSE force +--------------------------------------------------------------------------------------------------- +Displaced_A15.xyz 9 576 0.000554 0.000680 0.066393 0.083014 +Displaced_BCC.xyz 9 486 0.004724 0.005103 0.108253 0.139461 +Displaced_FCC.xyz 9 432 0.001704 0.001900 0.077531 0.097471 +Elastic_BCC.xyz 100 200 0.000444 0.000446 0.000001 0.000002 +Elastic_FCC.xyz 100 400 0.000273 0.000327 0.000110 0.000163 +GSF_110.xyz 22 528 0.001852 0.002260 0.027302 0.044765 +GSF_112.xyz 22 660 0.001839 0.002404 0.051415 0.080350 +Liquid.xyz 3 300 0.000674 0.000758 0.217921 0.276109 +Surface.xyz 7 236 0.009115 0.011661 0.047949 0.105123 +Volume_A15.xyz 30 240 0.001407 0.001693 0.000000 0.000000 +Volume_BCC.xyz 21 42 0.001497 0.002077 0.000000 0.000000 +Volume_FCC.xyz 31 124 0.000870 0.001139 0.000000 0.000000 +--------------------------------------------------------------------------------------------------- +All files 363 4224 0.001053 0.002171 0.059051 0.106960 +--------------------------------------------------------------------------------------------------- +**************** End of Error Analysis for the Training Data Set **************** diff --git a/examples/PACKAGES/pod/Ta_Quadratic/in.fitpod b/examples/PACKAGES/pod/Ta_Quadratic/in.fitpod new file mode 100644 index 0000000000..7b932558ea --- /dev/null +++ b/examples/PACKAGES/pod/Ta_Quadratic/in.fitpod @@ -0,0 +1,5 @@ +# Demonstrate fitpod for POD potential + +units metal +fitpod Ta_param.pod Ta_data.pod + diff --git a/examples/PACKAGES/pod/Ta_Quadratic/in.pod b/examples/PACKAGES/pod/Ta_Quadratic/in.pod new file mode 100644 index 0000000000..bde2df00a1 --- /dev/null +++ b/examples/PACKAGES/pod/Ta_Quadratic/in.pod @@ -0,0 +1,47 @@ +# Demonstrate POD Ta potential + +# Initialize simulation + +variable nsteps index 100 +variable nrep equal 4 +variable a equal 3.316 +units metal + +# generate the box and atom positions using a BCC lattice + +variable nx equal ${nrep} +variable ny equal ${nrep} +variable nz equal ${nrep} + +boundary p p p + +lattice bcc $a +region box block 0 ${nx} 0 ${ny} 0 ${nz} +create_box 1 box +create_atoms 1 box + +mass 1 180.88 + + +# POD potential +pair_style pod +pair_coeff * * Ta_param.pod Ta_coefficients.pod Ta + +# Setup output + +thermo 10 +thermo_modify norm yes + +# Set up NVE run + +timestep 0.5e-3 +neighbor 1.0 bin +neigh_modify once no every 1 delay 0 check yes + +# Run MD + +velocity all create 300.0 4928459 loop geom +fix 1 all nve +run ${nsteps} + + diff --git a/examples/PACKAGES/pod/Ta_Quadratic/log.1Dec22.fitpod.g++.1 b/examples/PACKAGES/pod/Ta_Quadratic/log.1Dec22.fitpod.g++.1 new file mode 100644 index 0000000000..6e5e4cd78b --- /dev/null +++ b/examples/PACKAGES/pod/Ta_Quadratic/log.1Dec22.fitpod.g++.1 @@ -0,0 +1,114 @@ +LAMMPS (3 Nov 2022) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98) + using 1 OpenMP thread(s) per MPI task +# Demonstrate fitpod for POD potential + +units metal +fitpod Ta_param.pod Ta_data.pod +Reading potential file Ta_param.pod with DATE: 2022-11-30 +**************** Begin of POD Potentials **************** +species: Ta +periodic boundary conditions: 1 1 1 +inner cut-off radius: 1 +outer cut-off radius: 5 +bessel polynomial degree: 3 +inverse polynomial degree: 6 +one-body potential: 1 +two-body potential: 3 6 6 +three-body potential: 3 6 5 5 +four-body SNAP potential: 0 0 +quadratic POD potential: 1 +number of basis functions for one-body potential: 1 +number of basis functions for two-body potential: 6 +number of basis functions for three-body potential: 25 +number of basis functions for four-body potential: 0 +number of descriptors for one-body potential: 1 +number of descriptors for two-body potential: 6 +number of descriptors for three-body potential: 25 +number of descriptors for four-body potential: 0 +number of descriptors for quadratic POD potential: 150 +total number of descriptors for all potentials: 182 +**************** End of POD Potentials **************** + +**************** Begin of Data File **************** +file format: extxyz +file extension: xyz +path to training data set: ../Ta/XYZ +path to test data set: ../Ta/XYZ +training fraction: 1 +test fraction: 1 +randomize training data set: 1 +randomize test data set: 1 +error analysis for training data set: 1 +error analysis for test data set: 0 +energy/force calculation for training data set: 0 +energy/force calculation for test data set: 0 +fitting weight for energy: 100 +fitting weight for force: 1 +fitting weight for stress: 0 +**************** End of Data File **************** +**************** Begin of Training Data Set **************** +--------------------------------------------------------------- + data file | number of configurations | number of atoms +--------------------------------------------------------------- + Displaced_A15.xyz | 9 | 576 + Displaced_BCC.xyz | 9 | 486 + Displaced_FCC.xyz | 9 | 432 + Elastic_BCC.xyz | 100 | 200 + Elastic_FCC.xyz | 100 | 400 + GSF_110.xyz | 22 | 528 + GSF_112.xyz | 22 | 660 + Liquid.xyz | 3 | 300 + Surface.xyz | 7 | 236 + Volume_A15.xyz | 30 | 240 + Volume_BCC.xyz | 21 | 42 + Volume_FCC.xyz | 31 | 124 +--------------------------------------------------------------- +number of files: 12 +number of configurations in all files: 363 +number of atoms in all files: 4224 +minimum number of atoms: 2 +maximum number of atoms: 100 +**************** End of Training Data Set **************** +**************** Begin of Memory Allocation **************** +maximum number of atoms in periodic domain: 100 +maximum number of atoms in extended domain: 2700 +maximum number of neighbors in extended domain: 270000 +size of double memory: 223201 +size of int memory: 14709 +size of descriptor matrix: 182 x 182 +**************** End of Memory Allocation **************** +**************** Begin of Least-Squares Fitting **************** +Configuration: # 1 +Configuration: # 101 +Configuration: # 201 +Configuration: # 301 +**************** End of Least-Squares Fitting **************** +**************** Begin of Error Calculation **************** +Configuration: # 1 +Configuration: # 101 +Configuration: # 201 +Configuration: # 301 +**************** End of Error Calculation **************** +**************** Begin of Error Analysis for the Training Data Set **************** +--------------------------------------------------------------------------------------------------- + File | # configs | # atoms | MAE energy | RMSE energy | MAE force | RMSE force +--------------------------------------------------------------------------------------------------- +Displaced_A15.xyz 9 576 0.000554 0.000680 0.066393 0.083014 +Displaced_BCC.xyz 9 486 0.004724 0.005103 0.108253 0.139461 +Displaced_FCC.xyz 9 432 0.001704 0.001900 0.077531 0.097471 +Elastic_BCC.xyz 100 200 0.000444 0.000446 0.000001 0.000002 +Elastic_FCC.xyz 100 400 0.000273 0.000327 0.000110 0.000163 +GSF_110.xyz 22 528 0.001852 0.002260 0.027302 0.044765 +GSF_112.xyz 22 660 0.001839 0.002404 0.051415 0.080350 +Liquid.xyz 3 300 0.000674 0.000758 0.217921 0.276109 +Surface.xyz 7 236 0.009115 0.011661 0.047949 0.105123 +Volume_A15.xyz 30 240 0.001407 0.001693 0.000000 0.000000 +Volume_BCC.xyz 21 42 0.001497 0.002077 0.000000 0.000000 +Volume_FCC.xyz 31 124 0.000870 0.001139 0.000000 0.000000 +--------------------------------------------------------------------------------------------------- +All files 363 4224 0.001053 0.002171 0.059051 0.106960 +--------------------------------------------------------------------------------------------------- +**************** End of Error Analysis for the Training Data Set **************** + +Total wall time: 0:00:01 diff --git a/examples/PACKAGES/pod/Ta_Quadratic/log.1Dec22.fitpod.g++.4 b/examples/PACKAGES/pod/Ta_Quadratic/log.1Dec22.fitpod.g++.4 new file mode 100644 index 0000000000..ddc559c6c0 --- /dev/null +++ b/examples/PACKAGES/pod/Ta_Quadratic/log.1Dec22.fitpod.g++.4 @@ -0,0 +1,114 @@ +LAMMPS (3 Nov 2022) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98) + using 1 OpenMP thread(s) per MPI task +# Demonstrate fitpod for POD potential + +units metal +fitpod Ta_param.pod Ta_data.pod +Reading potential file Ta_param.pod with DATE: 2022-11-30 +**************** Begin of POD Potentials **************** +species: Ta +periodic boundary conditions: 1 1 1 +inner cut-off radius: 1 +outer cut-off radius: 5 +bessel polynomial degree: 3 +inverse polynomial degree: 6 +one-body potential: 1 +two-body potential: 3 6 6 +three-body potential: 3 6 5 5 +four-body SNAP potential: 0 0 +quadratic POD potential: 1 +number of basis functions for one-body potential: 1 +number of basis functions for two-body potential: 6 +number of basis functions for three-body potential: 25 +number of basis functions for four-body potential: 0 +number of descriptors for one-body potential: 1 +number of descriptors for two-body potential: 6 +number of descriptors for three-body potential: 25 +number of descriptors for four-body potential: 0 +number of descriptors for quadratic POD potential: 150 +total number of descriptors for all potentials: 182 +**************** End of POD Potentials **************** + +**************** Begin of Data File **************** +file format: extxyz +file extension: xyz +path to training data set: ../Ta/XYZ +path to test data set: ../Ta/XYZ +training fraction: 1 +test fraction: 1 +randomize training data set: 1 +randomize test data set: 1 +error analysis for training data set: 1 +error analysis for test data set: 0 +energy/force calculation for training data set: 0 +energy/force calculation for test data set: 0 +fitting weight for energy: 100 +fitting weight for force: 1 +fitting weight for stress: 0 +**************** End of Data File **************** +**************** Begin of Training Data Set **************** +--------------------------------------------------------------- + data file | number of configurations | number of atoms +--------------------------------------------------------------- + Displaced_A15.xyz | 9 | 576 + Displaced_BCC.xyz | 9 | 486 + Displaced_FCC.xyz | 9 | 432 + Elastic_BCC.xyz | 100 | 200 + Elastic_FCC.xyz | 100 | 400 + GSF_110.xyz | 22 | 528 + GSF_112.xyz | 22 | 660 + Liquid.xyz | 3 | 300 + Surface.xyz | 7 | 236 + Volume_A15.xyz | 30 | 240 + Volume_BCC.xyz | 21 | 42 + Volume_FCC.xyz | 31 | 124 +--------------------------------------------------------------- +number of files: 12 +number of configurations in all files: 363 +number of atoms in all files: 4224 +minimum number of atoms: 2 +maximum number of atoms: 100 +**************** End of Training Data Set **************** +**************** Begin of Memory Allocation **************** +maximum number of atoms in periodic domain: 100 +maximum number of atoms in extended domain: 2700 +maximum number of neighbors in extended domain: 270000 +size of double memory: 223201 +size of int memory: 14709 +size of descriptor matrix: 182 x 182 +**************** End of Memory Allocation **************** +**************** Begin of Least-Squares Fitting **************** +Configuration: # 1 +Configuration: # 101 +Configuration: # 201 +Configuration: # 301 +**************** End of Least-Squares Fitting **************** +**************** Begin of Error Calculation **************** +Configuration: # 1 +Configuration: # 101 +Configuration: # 201 +Configuration: # 301 +**************** End of Error Calculation **************** +**************** Begin of Error Analysis for the Training Data Set **************** +--------------------------------------------------------------------------------------------------- + File | # configs | # atoms | MAE energy | RMSE energy | MAE force | RMSE force +--------------------------------------------------------------------------------------------------- +Displaced_A15.xyz 9 576 0.000554 0.000680 0.066393 0.083014 +Displaced_BCC.xyz 9 486 0.004724 0.005103 0.108253 0.139461 +Displaced_FCC.xyz 9 432 0.001704 0.001900 0.077531 0.097471 +Elastic_BCC.xyz 100 200 0.000444 0.000446 0.000001 0.000002 +Elastic_FCC.xyz 100 400 0.000273 0.000327 0.000110 0.000163 +GSF_110.xyz 22 528 0.001852 0.002260 0.027302 0.044765 +GSF_112.xyz 22 660 0.001839 0.002404 0.051415 0.080350 +Liquid.xyz 3 300 0.000674 0.000758 0.217921 0.276109 +Surface.xyz 7 236 0.009115 0.011661 0.047949 0.105123 +Volume_A15.xyz 30 240 0.001407 0.001693 0.000000 0.000000 +Volume_BCC.xyz 21 42 0.001497 0.002077 0.000000 0.000000 +Volume_FCC.xyz 31 124 0.000870 0.001139 0.000000 0.000000 +--------------------------------------------------------------------------------------------------- +All files 363 4224 0.001053 0.002171 0.059051 0.106960 +--------------------------------------------------------------------------------------------------- +**************** End of Error Analysis for the Training Data Set **************** + +Total wall time: 0:00:00 diff --git a/examples/PACKAGES/pod/Ta_Quadratic/log.1Dec22.pod.g++.1 b/examples/PACKAGES/pod/Ta_Quadratic/log.1Dec22.pod.g++.1 new file mode 100644 index 0000000000..1635479223 --- /dev/null +++ b/examples/PACKAGES/pod/Ta_Quadratic/log.1Dec22.pod.g++.1 @@ -0,0 +1,143 @@ +LAMMPS (3 Nov 2022) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98) + using 1 OpenMP thread(s) per MPI task +# Demonstrate POD Ta potential + +# Initialize simulation + +variable nsteps index 100 +variable nrep equal 4 +variable a equal 3.316 +units metal + +# generate the box and atom positions using a BCC lattice + +variable nx equal ${nrep} +variable nx equal 4 +variable ny equal ${nrep} +variable ny equal 4 +variable nz equal ${nrep} +variable nz equal 4 + +boundary p p p + +lattice bcc $a +lattice bcc 3.316 +Lattice spacing in x,y,z = 3.316 3.316 3.316 +region box block 0 ${nx} 0 ${ny} 0 ${nz} +region box block 0 4 0 ${ny} 0 ${nz} +region box block 0 4 0 4 0 ${nz} +region box block 0 4 0 4 0 4 +create_box 1 box +Created orthogonal box = (0 0 0) to (13.264 13.264 13.264) + 1 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 128 atoms + using lattice units in orthogonal box = (0 0 0) to (13.264 13.264 13.264) + create_atoms CPU = 0.000 seconds + +mass 1 180.88 + + +# POD potential +pair_style pod +pair_coeff * * Ta_param.pod Ta_coefficients.pod Ta +Reading potential file Ta_param.pod with DATE: 2022-11-30 +**************** Begin of POD Potentials **************** +species: Ta +periodic boundary conditions: 1 1 1 +inner cut-off radius: 1 +outer cut-off radius: 5 +bessel polynomial degree: 3 +inverse polynomial degree: 6 +one-body potential: 1 +two-body potential: 3 6 6 +three-body potential: 3 6 5 5 +four-body SNAP potential: 0 0 +quadratic POD potential: 1 +number of basis functions for one-body potential: 1 +number of basis functions for two-body potential: 6 +number of basis functions for three-body potential: 25 +number of basis functions for four-body potential: 0 +number of descriptors for one-body potential: 1 +number of descriptors for two-body potential: 6 +number of descriptors for three-body potential: 25 +number of descriptors for four-body potential: 0 +number of descriptors for quadratic POD potential: 150 +total number of descriptors for all potentials: 182 +**************** End of POD Potentials **************** + + +# Setup output + +thermo 10 +thermo_modify norm yes + +# Set up NVE run + +timestep 0.5e-3 +neighbor 1.0 bin +neigh_modify once no every 1 delay 0 check yes + +# Run MD + +velocity all create 300.0 4928459 loop geom +fix 1 all nve +run ${nsteps} +run 100 +Neighbor list info ... + update: every = 1 steps, delay = 0 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 6 + ghost atom cutoff = 6 + binsize = 3, bins = 5 5 5 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair pod, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.082 | 3.082 | 3.082 Mbytes + Step Temp E_pair E_mol TotEng Press + 0 300 -11.84932 0 -11.810845 12965.331 + 10 296.47479 -11.848868 0 -11.810845 12992.863 + 20 286.0912 -11.847536 0 -11.810845 13077.505 + 30 269.42142 -11.845399 0 -11.810845 13223.909 + 40 247.39188 -11.842573 0 -11.810845 13436.937 + 50 221.23616 -11.839219 0 -11.810845 13718.879 + 60 192.42749 -11.835524 0 -11.810845 14066.912 + 70 162.5922 -11.831697 0 -11.810845 14471.57 + 80 133.40727 -11.827954 0 -11.810845 14916.653 + 90 106.48844 -11.824502 0 -11.810844 15380.602 + 100 83.277725 -11.821525 0 -11.810844 15838.941 +Loop time of 2.21094 on 1 procs for 100 steps with 128 atoms + +Performance: 1.954 ns/day, 12.283 hours/ns, 45.230 timesteps/s, 5.789 katom-step/s +99.9% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 2.21 | 2.21 | 2.21 | 0.0 | 99.96 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0.00036776 | 0.00036776 | 0.00036776 | 0.0 | 0.02 +Output | 0.00019486 | 0.00019486 | 0.00019486 | 0.0 | 0.01 +Modify | 0.00016419 | 0.00016419 | 0.00016419 | 0.0 | 0.01 +Other | | 0.0002416 | | | 0.01 + +Nlocal: 128 ave 128 max 128 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 727 ave 727 max 727 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +FullNghs: 7424 ave 7424 max 7424 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 7424 +Ave neighs/atom = 58 +Neighbor list builds = 0 +Dangerous builds = 0 + + +Total wall time: 0:00:02 diff --git a/examples/PACKAGES/pod/Ta_Quadratic/log.1Dec22.pod.g++.4 b/examples/PACKAGES/pod/Ta_Quadratic/log.1Dec22.pod.g++.4 new file mode 100644 index 0000000000..0a9472c23e --- /dev/null +++ b/examples/PACKAGES/pod/Ta_Quadratic/log.1Dec22.pod.g++.4 @@ -0,0 +1,143 @@ +LAMMPS (3 Nov 2022) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98) + using 1 OpenMP thread(s) per MPI task +# Demonstrate POD Ta potential + +# Initialize simulation + +variable nsteps index 100 +variable nrep equal 4 +variable a equal 3.316 +units metal + +# generate the box and atom positions using a BCC lattice + +variable nx equal ${nrep} +variable nx equal 4 +variable ny equal ${nrep} +variable ny equal 4 +variable nz equal ${nrep} +variable nz equal 4 + +boundary p p p + +lattice bcc $a +lattice bcc 3.316 +Lattice spacing in x,y,z = 3.316 3.316 3.316 +region box block 0 ${nx} 0 ${ny} 0 ${nz} +region box block 0 4 0 ${ny} 0 ${nz} +region box block 0 4 0 4 0 ${nz} +region box block 0 4 0 4 0 4 +create_box 1 box +Created orthogonal box = (0 0 0) to (13.264 13.264 13.264) + 1 by 2 by 2 MPI processor grid +create_atoms 1 box +Created 128 atoms + using lattice units in orthogonal box = (0 0 0) to (13.264 13.264 13.264) + create_atoms CPU = 0.000 seconds + +mass 1 180.88 + + +# POD potential +pair_style pod +pair_coeff * * Ta_param.pod Ta_coefficients.pod Ta +Reading potential file Ta_param.pod with DATE: 2022-11-30 +**************** Begin of POD Potentials **************** +species: Ta +periodic boundary conditions: 1 1 1 +inner cut-off radius: 1 +outer cut-off radius: 5 +bessel polynomial degree: 3 +inverse polynomial degree: 6 +one-body potential: 1 +two-body potential: 3 6 6 +three-body potential: 3 6 5 5 +four-body SNAP potential: 0 0 +quadratic POD potential: 1 +number of basis functions for one-body potential: 1 +number of basis functions for two-body potential: 6 +number of basis functions for three-body potential: 25 +number of basis functions for four-body potential: 0 +number of descriptors for one-body potential: 1 +number of descriptors for two-body potential: 6 +number of descriptors for three-body potential: 25 +number of descriptors for four-body potential: 0 +number of descriptors for quadratic POD potential: 150 +total number of descriptors for all potentials: 182 +**************** End of POD Potentials **************** + + +# Setup output + +thermo 10 +thermo_modify norm yes + +# Set up NVE run + +timestep 0.5e-3 +neighbor 1.0 bin +neigh_modify once no every 1 delay 0 check yes + +# Run MD + +velocity all create 300.0 4928459 loop geom +fix 1 all nve +run ${nsteps} +run 100 +Neighbor list info ... + update: every = 1 steps, delay = 0 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 6 + ghost atom cutoff = 6 + binsize = 3, bins = 5 5 5 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair pod, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.062 | 3.062 | 3.062 Mbytes + Step Temp E_pair E_mol TotEng Press + 0 300 -11.84932 0 -11.810845 12965.331 + 10 296.47479 -11.848868 0 -11.810845 12992.863 + 20 286.0912 -11.847536 0 -11.810845 13077.505 + 30 269.42142 -11.845399 0 -11.810845 13223.909 + 40 247.39188 -11.842573 0 -11.810845 13436.937 + 50 221.23616 -11.839219 0 -11.810845 13718.879 + 60 192.42749 -11.835524 0 -11.810845 14066.912 + 70 162.5922 -11.831697 0 -11.810845 14471.57 + 80 133.40727 -11.827954 0 -11.810845 14916.653 + 90 106.48844 -11.824502 0 -11.810844 15380.602 + 100 83.277725 -11.821525 0 -11.810844 15838.941 +Loop time of 0.680827 on 4 procs for 100 steps with 128 atoms + +Performance: 6.345 ns/day, 3.782 hours/ns, 146.880 timesteps/s, 18.801 katom-step/s +99.3% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.66292 | 0.66527 | 0.66845 | 0.3 | 97.72 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0.011041 | 0.014313 | 0.01666 | 1.9 | 2.10 +Output | 0.00023806 | 0.00027584 | 0.00038453 | 0.0 | 0.04 +Modify | 0.00015182 | 0.00015927 | 0.00016433 | 0.0 | 0.02 +Other | | 0.0008078 | | | 0.12 + +Nlocal: 32 ave 32 max 32 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +Nghost: 431 ave 431 max 431 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +Neighs: 0 ave 0 max 0 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +FullNghs: 1856 ave 1856 max 1856 min +Histogram: 4 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 7424 +Ave neighs/atom = 58 +Neighbor list builds = 0 +Dangerous builds = 0 + + +Total wall time: 0:00:00 diff --git a/examples/PACKAGES/sph/shock_tube/shock2d.lmp b/examples/PACKAGES/sph/shock_tube/shock2d.lmp index 32cfd8067b..c63b537bc7 100644 --- a/examples/PACKAGES/sph/shock_tube/shock2d.lmp +++ b/examples/PACKAGES/sph/shock_tube/shock2d.lmp @@ -22,7 +22,7 @@ pair_style hybrid/overlay sph/rhosum 1 sph/idealgas pair_coeff * * sph/rhosum 4.0 pair_coeff * * sph/idealgas 0.75 4.0 -compute rhoatom all shp/rho/atom +compute rhoatom all sph/rho/atom compute ieatom all sph/e/atom compute esph all reduce sum c_ieatom # total internal energy compute ke all ke diff --git a/examples/mc/FeCu.pasianot.eamfs b/examples/mc/FeCu.pasianot.eamfs new file mode 100644 index 0000000000..a5633bacaf --- /dev/null +++ b/examples/mc/FeCu.pasianot.eamfs @@ -0,0 +1,9007 @@ +Fe-Cu potential by Pasianot and Malerba, JNM 360, 118 (2007) +Fe potential by Mendelev, Cu potential by Mishin +PE, 05/27/2009 +2 Fe Cu +5000 0.3000000000E-02 5000 0.1101358000E-02 5.506790000 +26 55.847 2.8553 BCC + 0.000000000000000e+00 -2.502338715878852e-01 -3.915852477615788e-01 -4.541520341263603e-01 -5.270235795086948e-01 + -5.820137813191907e-01 -6.334511319245772e-01 -6.793141998726575e-01 -7.215324706414761e-01 -7.606131975312557e-01 + -7.970827725223445e-01 -8.313329919387222e-01 -8.636549303943222e-01 -8.942886450128376e-01 -9.234251076248214e-01 + -9.512229825062409e-01 -9.778144791806214e-01 -1.003311523498760e+00 -1.027809755065672e+00 -1.051391697497198e+00 + -1.074129154477209e+00 -1.096085058497037e+00 -1.117314932647117e+00 -1.137868055905411e+00 -1.157788403784776e+00 + -1.177115413961566e+00 -1.195884611609660e+00 -1.214128134799185e+00 -1.231875173682360e+00 -1.249152335150178e+00 + -1.265983951558685e+00 -1.282392343707737e+00 -1.298398046055169e+00 -1.314020000512098e+00 -1.329275722629841e+00 + -1.344181447804537e+00 -1.358752260334825e+00 -1.373002204445608e+00 -1.386944381857256e+00 -1.400591037928087e+00 + -1.413953637955728e+00 -1.427042934963793e+00 -1.439869029547145e+00 -1.452441423732973e+00 -1.464769070452198e+00 + -1.476860416985908e+00 -1.488723444007099e+00 -1.500365700842289e+00 -1.511794337388395e+00 -1.523016133062229e+00 + -1.534037522881468e+00 -1.544864621177124e+00 -1.555503244070705e+00 -1.565958929508429e+00 -1.576236955510854e+00 + -1.586342356916396e+00 -1.596279940767053e+00 -1.606054300467819e+00 -1.615669828742544e+00 -1.625130729454634e+00 + -1.634441029086672e+00 -1.643604587118151e+00 -1.652625105550088e+00 -1.661506137744704e+00 -1.670251096639065e+00 + -1.678863262385732e+00 -1.687345789430200e+00 -1.695701712976747e+00 -1.703933955366618e+00 -1.712045331943283e+00 + -1.720038556449747e+00 -1.727916246081839e+00 -1.735680926223856e+00 -1.743335034890479e+00 -1.750880926881849e+00 + -1.758320877585579e+00 -1.765657086752409e+00 -1.772891682042566e+00 -1.780026722286302e+00 -1.787064200557123e+00 + -1.794006047071369e+00 -1.800854131925905e+00 -1.807610267679311e+00 -1.814276211720992e+00 -1.820853668619758e+00 + -1.827344292385584e+00 -1.833749688543146e+00 -1.840071416095800e+00 -1.846310989388766e+00 -1.852469879877731e+00 + -1.858549517806932e+00 -1.864551293757170e+00 -1.870476560166527e+00 -1.876326632835685e+00 -1.882102792303735e+00 + -1.887806285155229e+00 -1.893438325265788e+00 -1.899000094989747e+00 -1.904492746292669e+00 -1.909917401803477e+00 + -1.915275155832934e+00 -1.920567075410339e+00 -1.925794201229736e+00 -1.930957548549688e+00 -1.936058108054043e+00 + -1.941096846675717e+00 -1.946074708385351e+00 -1.950992614930206e+00 -1.955851466536921e+00 -1.960652142645052e+00 + -1.965395502578354e+00 -1.970082386182181e+00 -1.974713614435233e+00 -1.979289990036900e+00 -1.983812297971365e+00 + -1.988281306040761e+00 -1.992697765363688e+00 -1.997062410905215e+00 -2.001375961966369e+00 -2.005639122646891e+00 + -2.009852582290609e+00 -2.014017015914234e+00 -2.018133084620317e+00 -2.022201435990600e+00 -2.026222704449250e+00 + -2.030197511651828e+00 -2.034126466851079e+00 -2.038010167240131e+00 -2.041849198283612e+00 -2.045644134037188e+00 + -2.049395537456054e+00 -2.053103960690683e+00 -2.056769945358115e+00 -2.060394022831066e+00 -2.063976714517138e+00 + -2.067518532118222e+00 -2.071019977881210e+00 -2.074481544840473e+00 -2.077903717052419e+00 -2.081286969821558e+00 + -2.084631769907669e+00 -2.087938575743120e+00 -2.091207837649796e+00 -2.094439998038564e+00 -2.097635491602200e+00 + -2.100794745502353e+00 -2.103918179550728e+00 -2.107006206384388e+00 -2.110059231627097e+00 -2.113077654054444e+00 + -2.116061865764799e+00 -2.119012252335141e+00 -2.121929192971692e+00 -2.124813060656121e+00 -2.127664222287478e+00 + -2.130483038819909e+00 -2.133269865390459e+00 -2.136025051445914e+00 -2.138748940879024e+00 -2.141441872152071e+00 + -2.144104178416009e+00 -2.146736187626258e+00 -2.149338222655301e+00 -2.151910601402148e+00 -2.154453636895005e+00 + -2.156967637389932e+00 -2.159452906480198e+00 -2.161909743195699e+00 -2.164338442098267e+00 -2.166739293374467e+00 + -2.169112582925921e+00 -2.171458592457252e+00 -2.173777599559529e+00 -2.176069877788093e+00 -2.178335696750736e+00 + -2.180575322188782e+00 -2.182789016054171e+00 -2.184977036584567e+00 -2.187139638376587e+00 -2.189277072457176e+00 + -2.191389586351989e+00 -2.193477424147857e+00 -2.195540826563956e+00 -2.197580031018832e+00 -2.199595271693328e+00 + -2.201586779591983e+00 -2.203554782602937e+00 -2.205499505556400e+00 -2.207421170281107e+00 -2.209319995655316e+00 + -2.211196197664255e+00 -2.213049989456184e+00 -2.214881581394238e+00 -2.216691181107032e+00 -2.218478993538120e+00 + -2.220245220994279e+00 -2.221990063192430e+00 -2.223713717301932e+00 -2.225416377990993e+00 -2.227098237473976e+00 + -2.228759485554509e+00 -2.230400309667533e+00 -2.232020894920435e+00 -2.233621424133257e+00 -2.235202077877915e+00 + -2.236763034513762e+00 -2.238304470225168e+00 -2.239826559061690e+00 -2.241329472974240e+00 -2.242813381850284e+00 + -2.244278453548302e+00 -2.245724853931507e+00 -2.247152746900820e+00 -2.248562294425109e+00 -2.249953656571756e+00 + -2.251326991540882e+00 -2.252682455695965e+00 -2.254020203593521e+00 -2.255340388012158e+00 -2.256643159981041e+00 + -2.257928668807769e+00 -2.259197062104328e+00 -2.260448485812105e+00 -2.261683084231092e+00 -2.262901000046045e+00 + -2.264102374351666e+00 -2.265287346677250e+00 -2.266456055010869e+00 -2.267608635823069e+00 -2.268745224089268e+00 + -2.269865953310465e+00 -2.270970955538091e+00 -2.272060361396592e+00 -2.273134300104890e+00 -2.274192899497445e+00 + -2.275236286044899e+00 -2.276264584874338e+00 -2.277277919788690e+00 -2.278276413284132e+00 -2.279260186571117e+00 + -2.280229359594064e+00 -2.281184051049774e+00 -2.282124378405483e+00 -2.283050457916613e+00 -2.283962404644175e+00 + -2.284860332471597e+00 -2.285744354119622e+00 -2.286614581163983e+00 -2.287471124052714e+00 -2.288314092122030e+00 + -2.289143593611911e+00 -2.289959735681407e+00 -2.290762624423672e+00 -2.291552364880611e+00 -2.292329061055794e+00 + -2.293092815929270e+00 -2.293843731472861e+00 -2.294581908663944e+00 -2.295307447498960e+00 -2.296020447006684e+00 + -2.296721005261261e+00 -2.297409219394981e+00 -2.298085185609632e+00 -2.298748999188869e+00 -2.299400754511783e+00 + -2.300040545064931e+00 -2.300668463454097e+00 -2.301284601415844e+00 -2.301889049828881e+00 -2.302481898725225e+00 + -2.303063237300273e+00 -2.303633153923143e+00 -2.304191736148714e+00 -2.304739070728200e+00 -2.305275243619421e+00 + -2.305800339996919e+00 -2.306314444261903e+00 -2.306817640052015e+00 -2.307310010250343e+00 -2.307791636994108e+00 + -2.308262601685295e+00 -2.308722985000041e+00 -2.309172866897634e+00 -2.309612326629400e+00 -2.310041442747435e+00 + -2.310460293113193e+00 -2.310868954905559e+00 -2.311267504628225e+00 -2.311656018119039e+00 -2.312034570558373e+00 + -2.312403236477067e+00 -2.312762089764253e+00 -2.313111203675049e+00 -2.313450650838138e+00 -2.313780503263004e+00 + -2.314100832346301e+00 -2.314411708879982e+00 -2.314713203058840e+00 -2.315005384487538e+00 -2.315288322187517e+00 + -2.315562084603811e+00 -2.315826739611746e+00 -2.316082354523429e+00 -2.316328996093344e+00 -2.316566730525349e+00 + -2.316795623479531e+00 -2.317015740078438e+00 -2.317227144913205e+00 -2.317429902049602e+00 -2.317624075033990e+00 + -2.317809726899128e+00 -2.317986920169159e+00 -2.318155716865614e+00 -2.318316178513639e+00 -2.318468366147555e+00 + -2.318612340316317e+00 -2.318748161088890e+00 -2.318875888059551e+00 -2.318995580353098e+00 -2.319107296629367e+00 + -2.319211095088310e+00 -2.319307033475710e+00 -2.319395169088151e+00 -2.319475558777873e+00 -2.319548258957596e+00 + -2.319613325605248e+00 -2.319670814268620e+00 -2.319720780069511e+00 -2.319763277708035e+00 -2.319798361467810e+00 + -2.319826085220447e+00 -2.319846502429908e+00 -2.319859666156802e+00 -2.319865629062627e+00 -2.319864443413965e+00 + -2.319856161086258e+00 -2.319840833567500e+00 -2.319818511962931e+00 -2.319789246999103e+00 -2.319753089027798e+00 + -2.319710088029891e+00 -2.319660293619147e+00 -2.319603755045984e+00 -2.319540521200980e+00 -2.319470640618020e+00 + -2.319394161478521e+00 -2.319311131615155e+00 -2.319221598515366e+00 -2.319125609324845e+00 -2.319023210850965e+00 + -2.318914449566154e+00 -2.318799371611112e+00 -2.318678022797595e+00 -2.318550448612130e+00 -2.318416694219462e+00 + -2.318276804465732e+00 -2.318130823881602e+00 -2.317978796685350e+00 -2.317820766785938e+00 -2.317656777785941e+00 + -2.317486872984025e+00 -2.317311095378236e+00 -2.317129487669164e+00 -2.316942092262829e+00 -2.316748951273513e+00 + -2.316550106526557e+00 -2.316345599561124e+00 -2.316135471632893e+00 -2.315919763716320e+00 -2.315698516507460e+00 + -2.315471770426942e+00 -2.315239565622576e+00 -2.315001941971922e+00 -2.314758939084826e+00 -2.314510596305920e+00 + -2.314256952717090e+00 -2.313998047139568e+00 -2.313733918136342e+00 -2.313464604014935e+00 -2.313190142829782e+00 + -2.312910572384565e+00 -2.312625930234513e+00 -2.312336253688678e+00 -2.312041579812182e+00 -2.311741945428170e+00 + -2.311437387119879e+00 -2.311127941233203e+00 -2.310813643878891e+00 -2.310494530934657e+00 -2.310170638047276e+00 + -2.309842000634667e+00 -2.309508653887929e+00 -2.309170632773183e+00 -2.308827972033339e+00 -2.308480706190472e+00 + -2.308128869547836e+00 -2.307772496191795e+00 -2.307411619993741e+00 -2.307046274611983e+00 -2.306676493493612e+00 + -2.306302309876231e+00 -2.305923756789481e+00 -2.305540867057213e+00 -2.305153673299357e+00 -2.304762207933692e+00 + -2.304366503177589e+00 -2.303966591049746e+00 -2.303562503371892e+00 -2.303154271770397e+00 -2.302741927677640e+00 + -2.302325502333937e+00 -2.301905026789309e+00 -2.301480531905097e+00 -2.301052048355563e+00 -2.300619606629470e+00 + -2.300183237031647e+00 -2.299742969684492e+00 -2.299298834529202e+00 -2.298850861327491e+00 -2.298399079663241e+00 + -2.297943518944003e+00 -2.297484208402453e+00 -2.297021177097839e+00 -2.296554453917422e+00 -2.296084067577878e+00 + -2.295610046626423e+00 -2.295132419442313e+00 -2.294651214238423e+00 -2.294166459062606e+00 -2.293678181799045e+00 + -2.293186410169582e+00 -2.292691171735040e+00 -2.292192493896510e+00 -2.291690403896431e+00 -2.291184928819864e+00 + -2.290676095596003e+00 -2.290163930999419e+00 -2.289648461651309e+00 -2.289129714020719e+00 -2.288607714425756e+00 + -2.288082489034790e+00 -2.287554063867464e+00 -2.287022464795797e+00 -2.286487717545603e+00 -2.285949847697653e+00 + -2.285408880688816e+00 -2.284864841813190e+00 -2.284317756223232e+00 -2.283767648930842e+00 -2.283214544808351e+00 + -2.282658468589461e+00 -2.282099444870565e+00 -2.281537498111839e+00 -2.280972652638302e+00 -2.280404932640851e+00 + -2.279834362177295e+00 -2.279260965173382e+00 -2.278684765423715e+00 -2.278105786592588e+00 -2.277524052215194e+00 + -2.276939585698652e+00 -2.276352410322994e+00 -2.275762549242122e+00 -2.275170025484755e+00 -2.274574861955383e+00 + -2.273977081435144e+00 -2.273376706582557e+00 -2.272773759934620e+00 -2.272168263907800e+00 -2.271560240798923e+00 + -2.270949712786074e+00 -2.270336701929474e+00 -2.269721230172357e+00 -2.269103319341808e+00 -2.268482991149421e+00 + -2.267860267192283e+00 -2.267235168953918e+00 -2.266607717805118e+00 -2.265977935004773e+00 -2.265345841700681e+00 + -2.264711458930368e+00 -2.264074807621871e+00 -2.263435908594351e+00 -2.262794782558966e+00 -2.262151450119762e+00 + -2.261505931774461e+00 -2.260858247915221e+00 -2.260208418829391e+00 -2.259556464700271e+00 -2.258902405607847e+00 + -2.258246261529381e+00 -2.257588052340147e+00 -2.256927797814314e+00 -2.256265517625659e+00 -2.255601231348283e+00 + -2.254934958457320e+00 -2.254266718329622e+00 -2.253596530244462e+00 -2.252924413384104e+00 -2.252250386834427e+00 + -2.251574469585767e+00 -2.250896680533593e+00 -2.250217038479171e+00 -2.249535562130213e+00 -2.248852270101532e+00 + -2.248167180915687e+00 -2.247480313003532e+00 -2.246791684704766e+00 -2.246101314268709e+00 -2.245409219854954e+00 + -2.244715419533983e+00 -2.244019931287772e+00 -2.243322773010398e+00 -2.242623962508636e+00 -2.241923517502507e+00 + -2.241221455625736e+00 -2.240517794426493e+00 -2.239812551367999e+00 -2.239105743829107e+00 -2.238397389104870e+00 + -2.237687504407096e+00 -2.236976106864919e+00 -2.236263213525310e+00 -2.235548841353499e+00 -2.234833007233646e+00 + -2.234115727969421e+00 -2.233397020284549e+00 -2.232676900823337e+00 -2.231955386151202e+00 -2.231232492755193e+00 + -2.230508237044484e+00 -2.229782635350765e+00 -2.229055703928828e+00 -2.228327458957150e+00 -2.227597916538390e+00 + -2.226867092699881e+00 -2.226135003394126e+00 -2.225401664499288e+00 -2.224667091819654e+00 -2.223931301086007e+00 + -2.223194307956140e+00 -2.222456128015421e+00 -2.221716776777257e+00 -2.220976269683556e+00 -2.220234622105197e+00 + -2.219491849342475e+00 -2.218747966625553e+00 -2.218002989114810e+00 -2.217256931901295e+00 -2.216509810007262e+00 + -2.215761638386622e+00 -2.215012431925369e+00 -2.214262205442008e+00 -2.213510973687992e+00 -2.212758751348133e+00 + -2.212005553040953e+00 -2.211251393319064e+00 -2.210496286669689e+00 -2.209740247515088e+00 -2.208983290212954e+00 + -2.208225429056820e+00 -2.207466678276468e+00 -2.206707052038315e+00 -2.205946564445748e+00 -2.205185229539463e+00 + -2.204423061297958e+00 -2.203660073637924e+00 -2.202896280414641e+00 -2.202131695422347e+00 -2.201366332394614e+00 + -2.200600205004720e+00 -2.199833326865986e+00 -2.199065711532052e+00 -2.198297372497344e+00 -2.197528323197469e+00 + -2.196758577009556e+00 -2.195988147252626e+00 -2.195217047187939e+00 -2.194445290019337e+00 -2.193672888893577e+00 + -2.192899856900580e+00 -2.192126207073854e+00 -2.191351952390872e+00 -2.190577105773411e+00 -2.189801680087880e+00 + -2.189025688145654e+00 -2.188249142703400e+00 -2.187472056463393e+00 -2.186694442073744e+00 -2.185916312128790e+00 + -2.185137679169449e+00 -2.184358555683546e+00 -2.183578954106126e+00 -2.182798886819760e+00 -2.182018366154860e+00 + -2.181237404389969e+00 -2.180456013751995e+00 -2.179674206416536e+00 -2.178891994508249e+00 -2.178109390101140e+00 + -2.177326405218863e+00 -2.176543051835017e+00 -2.175759341873431e+00 -2.174975287208445e+00 -2.174190899665144e+00 + -2.173406191019626e+00 -2.172621172999372e+00 -2.171835857283515e+00 -2.171050255503127e+00 -2.170264379241495e+00 + -2.169478240034389e+00 -2.168691849370340e+00 -2.167905218690847e+00 -2.167118359390624e+00 -2.166331282817957e+00 + -2.165544000274954e+00 -2.164756523017816e+00 -2.163968862257100e+00 -2.163181029157975e+00 -2.162393034840479e+00 + -2.161604890379725e+00 -2.160816606806120e+00 -2.160028195105691e+00 -2.159239666220349e+00 -2.158451031048124e+00 + -2.157662300443418e+00 -2.156873485217258e+00 -2.156084596137519e+00 -2.155295643929152e+00 -2.154506639274357e+00 + -2.153717592812890e+00 -2.152928515142323e+00 -2.152139416818280e+00 -2.151350308354652e+00 -2.150561200223841e+00 + -2.149772102856990e+00 -2.148983026644182e+00 -2.148193981934609e+00 -2.147404979036851e+00 -2.146616028219126e+00 + -2.145827139709514e+00 -2.145038323696169e+00 -2.144249590327540e+00 -2.143460949712591e+00 -2.142672411920996e+00 + -2.141883986983292e+00 -2.141095684891137e+00 -2.140307515597552e+00 -2.139519489017127e+00 -2.138731615026233e+00 + -2.137943903463224e+00 -2.137156364128644e+00 -2.136369006785423e+00 -2.135581841159012e+00 -2.134794876937625e+00 + -2.134008123772464e+00 -2.133221591277919e+00 -2.132435289031771e+00 -2.131649226575388e+00 -2.130863413413909e+00 + -2.130077859016437e+00 -2.129292572816182e+00 -2.128507564210652e+00 -2.127722842561890e+00 -2.126938417196665e+00 + -2.126154297406655e+00 -2.125370492448636e+00 -2.124587011544663e+00 -2.123803863882248e+00 -2.123021058614500e+00 + -2.122238604860293e+00 -2.121456511704498e+00 -2.120674788198162e+00 -2.119893443358685e+00 -2.119112486169999e+00 + -2.118331925582735e+00 -2.117551770514397e+00 -2.116772029849501e+00 -2.115992712439721e+00 -2.115213827104108e+00 + -2.114435382629267e+00 -2.113657387769519e+00 -2.112879851247078e+00 -2.112102781752208e+00 -2.111326187943385e+00 + -2.110550078447439e+00 -2.109774461859674e+00 -2.108999346744086e+00 -2.108224741633528e+00 -2.107450655029868e+00 + -2.106677095404151e+00 -2.105904071196752e+00 -2.105131590817535e+00 -2.104359662645981e+00 -2.103588295031309e+00 + -2.102817496292664e+00 -2.102047274719290e+00 -2.101277638570677e+00 -2.100508596076714e+00 -2.099740155437833e+00 + -2.098972324825156e+00 -2.098205112380644e+00 -2.097438526217175e+00 -2.096672574418735e+00 -2.095907265040586e+00 + -2.095142606109407e+00 -2.094378605623429e+00 -2.093615271552583e+00 -2.092852611838643e+00 -2.092090634395349e+00 + -2.091329347108516e+00 -2.090568757836169e+00 -2.089808874408728e+00 -2.089049704629143e+00 -2.088291256273022e+00 + -2.087533537088764e+00 -2.086776554797699e+00 -2.086020317094214e+00 -2.085264831645845e+00 -2.084510106093409e+00 + -2.083756148051177e+00 -2.083002965107001e+00 -2.082250564822440e+00 -2.081498954732894e+00 -2.080748142347719e+00 + -2.079998135150364e+00 -2.079248940598457e+00 -2.078500566123918e+00 -2.077753019133131e+00 -2.077006307007063e+00 + -2.076260437101383e+00 -2.075515416746592e+00 -2.074771253248141e+00 -2.074027953886544e+00 -2.073285525917480e+00 + -2.072543976571880e+00 -2.071803313056100e+00 -2.071063542552034e+00 -2.070324672217227e+00 -2.069586709185004e+00 + -2.068849660564566e+00 -2.068113533441121e+00 -2.067378334875964e+00 -2.066644071906579e+00 -2.065910751546769e+00 + -2.065178380786791e+00 -2.064446966593461e+00 -2.063716515910266e+00 -2.062987035657468e+00 -2.062258532732219e+00 + -2.061531014008653e+00 -2.060804486337964e+00 -2.060078956548535e+00 -2.059354431446072e+00 -2.058630917813696e+00 + -2.057908422412055e+00 -2.057186951979433e+00 -2.056466513231840e+00 -2.055747112863116e+00 -2.055028757544996e+00 + -2.054311453927238e+00 -2.053595208637742e+00 -2.052880028282651e+00 -2.052165919446444e+00 -2.051452888692046e+00 + -2.050740942560926e+00 -2.050030087573177e+00 -2.049320330227591e+00 -2.048611677001773e+00 -2.047904134352257e+00 + -2.047197708714598e+00 -2.046492406503472e+00 -2.045788234112772e+00 -2.045085197915699e+00 -2.044383304264857e+00 + -2.043682559492305e+00 -2.042982969909669e+00 -2.042284541808254e+00 -2.041587281459136e+00 -2.040891195113255e+00 + -2.040196289001502e+00 -2.039502569334813e+00 -2.038810042304255e+00 -2.038118714081095e+00 -2.037428590816866e+00 + -2.036739678643505e+00 -2.036051983673435e+00 -2.035365511999651e+00 -2.034680269695803e+00 -2.033996262816285e+00 + -2.033313497396324e+00 -2.032631979452039e+00 -2.031951714980517e+00 -2.031272709959916e+00 -2.030594970349565e+00 + -2.029918502090045e+00 -2.029243311103269e+00 -2.028569403292557e+00 -2.027896784542731e+00 -2.027225460720173e+00 + -2.026555437672887e+00 -2.025886721230608e+00 -2.025219317204886e+00 -2.024553231389171e+00 -2.023888469558886e+00 + -2.023225037471513e+00 -2.022562940866661e+00 -2.021902185466139e+00 -2.021242776974008e+00 -2.020584721076686e+00 + -2.019928023443025e+00 -2.019272689724395e+00 -2.018618725554759e+00 -2.017966136550744e+00 -2.017314928311718e+00 + -2.016665106419857e+00 -2.016016676440195e+00 -2.015369643920711e+00 -2.014724014392419e+00 -2.014079793369441e+00 + -2.013436986349081e+00 -2.012795598811893e+00 -2.012155636221751e+00 -2.011517104025927e+00 -2.010880007655117e+00 + -2.010244352523541e+00 -2.009610144029019e+00 -2.008977387553052e+00 -2.008346088460877e+00 -2.007716252101544e+00 + -2.007087883807985e+00 -2.006460988897077e+00 -2.005835572669687e+00 -2.005211640410741e+00 -2.004589197389321e+00 + -2.003968248858716e+00 -2.003348800056501e+00 -2.002730856204605e+00 -2.002114422509362e+00 -2.001499504161585e+00 + -2.000886106336611e+00 -2.000274234194366e+00 -1.999663892879436e+00 -1.999055087521146e+00 -1.998447823233624e+00 + -1.997842105115851e+00 -1.997237938251741e+00 -1.996635327710192e+00 -1.996034278545135e+00 -1.995434795795581e+00 + -1.994836884485715e+00 -1.994240549624950e+00 -1.993645796207996e+00 -1.993052629214916e+00 -1.992461053611186e+00 + -1.991871074347758e+00 -1.991282696361109e+00 -1.990695924573272e+00 -1.990110763891926e+00 -1.989527219210471e+00 + -1.988945295408069e+00 -1.988364997349702e+00 -1.987786329886241e+00 -1.987209297854499e+00 -1.986633906077278e+00 + -1.986060159363408e+00 -1.985488062507815e+00 -1.984917620291600e+00 -1.984348837482085e+00 -1.983781718832868e+00 + -1.983216269083883e+00 -1.982652492961452e+00 -1.982090395178336e+00 -1.981529980433766e+00 -1.980971253413516e+00 + -1.980414218789958e+00 -1.979858881222136e+00 -1.979305245355806e+00 -1.978753315823477e+00 -1.978203097244475e+00 + -1.977654594225015e+00 -1.977107811358184e+00 -1.976562753224058e+00 -1.976019424389725e+00 -1.975477829409343e+00 + -1.974937972824210e+00 -1.974399859162806e+00 -1.973863492940835e+00 -1.973328878661272e+00 -1.972796020814435e+00 + -1.972264923877971e+00 -1.971735592316963e+00 -1.971208030583991e+00 -1.970682243119160e+00 -1.970158234350139e+00 + -1.969636008692229e+00 -1.969115570548426e+00 -1.968596924309398e+00 -1.968080074353580e+00 -1.967565025047229e+00 + -1.967051780744475e+00 -1.966540345787341e+00 -1.966030724505812e+00 -1.965522921217900e+00 -1.965016940229659e+00 + -1.964512785835220e+00 -1.964010462316845e+00 -1.963509973944988e+00 -1.963011324978344e+00 -1.962514519663881e+00 + -1.962019562236897e+00 -1.961526456921067e+00 -1.961035207928480e+00 -1.960545819459659e+00 -1.960058295703655e+00 + -1.959572640838007e+00 -1.959088859028894e+00 -1.958606954431114e+00 -1.958126931188134e+00 -1.957648793432173e+00 + -1.957172545284190e+00 -1.956698190853962e+00 -1.956225734240072e+00 -1.955755179530033e+00 -1.955286530800259e+00 + -1.954819792116147e+00 -1.954354967532125e+00 -1.953892061091672e+00 -1.953431076827378e+00 -1.952972018760964e+00 + -1.952514890903317e+00 -1.952059697254547e+00 -1.951606441804024e+00 -1.951155128530414e+00 -1.950705761401745e+00 + -1.950258344375431e+00 -1.949812881398295e+00 -1.949369376406633e+00 -1.948927833326243e+00 -1.948488256072420e+00 + -1.948050648550061e+00 -1.947615014653694e+00 -1.947181358267495e+00 -1.946749683265333e+00 -1.946319993510820e+00 + -1.945892292857357e+00 -1.945466585148108e+00 -1.945042874216096e+00 -1.944621163884235e+00 -1.944201457965353e+00 + -1.943783760262237e+00 -1.943368074567676e+00 -1.942954404664505e+00 -1.942542754325630e+00 -1.942133127314037e+00 + -1.941725527382840e+00 -1.941319958275368e+00 -1.940916423725134e+00 -1.940514927455907e+00 -1.940115473181760e+00 + -1.939718064607074e+00 -1.939322705426601e+00 -1.938929399325471e+00 -1.938538149979232e+00 -1.938148961053886e+00 + -1.937761836205931e+00 -1.937376779082418e+00 -1.936993793320949e+00 -1.936612882549719e+00 -1.936234050387590e+00 + -1.935857300444053e+00 -1.935482636319296e+00 -1.935110061604254e+00 -1.934739579880611e+00 -1.934371194720868e+00 + -1.934004909688356e+00 -1.933640728337267e+00 -1.933278654212724e+00 -1.932918690850745e+00 -1.932560841778316e+00 + -1.932205110513409e+00 -1.931851500565032e+00 -1.931500015433260e+00 -1.931150658609253e+00 -1.930803433575301e+00 + -1.930458343804859e+00 -1.930115392762557e+00 -1.929774583904244e+00 -1.929435920677002e+00 -1.929099406519205e+00 + -1.928765044860532e+00 -1.928432839122003e+00 -1.928102792716032e+00 -1.927774909046428e+00 -1.927449191508423e+00 + -1.927125643488726e+00 -1.926804268365502e+00 -1.926485069508455e+00 -1.926168050278857e+00 -1.925853214029559e+00 + -1.925540564105015e+00 -1.925230103841328e+00 -1.924921836566286e+00 -1.924615765599347e+00 -1.924311894251707e+00 + -1.924010225826315e+00 -1.923710763617894e+00 -1.923413510913005e+00 -1.923118470990058e+00 -1.922825647119304e+00 + -1.922535042562943e+00 -1.922246660575068e+00 -1.921960504401699e+00 -1.921676577280871e+00 -1.921394882442637e+00 + -1.921115423109069e+00 -1.920838202494316e+00 -1.920563223804625e+00 -1.920290490238364e+00 -1.920020004986052e+00 + -1.919751771230355e+00 -1.919485792146149e+00 -1.919222070900552e+00 -1.918960610652924e+00 -1.918701414554912e+00 + -1.918444485750482e+00 -1.918189827375925e+00 -1.917937442559900e+00 -1.917687334423423e+00 -1.917439506079945e+00 + -1.917193960635344e+00 -1.916950701187958e+00 -1.916709730828633e+00 -1.916471052640719e+00 -1.916234669700108e+00 + -1.916000585075272e+00 -1.915768801827247e+00 -1.915539323009678e+00 -1.915312151668863e+00 -1.915087290843769e+00 + -1.914864743566054e+00 -1.914644512860088e+00 -1.914426601742979e+00 -1.914211013224609e+00 -1.913997750307632e+00 + -1.913786815987506e+00 -1.913578213252525e+00 -1.913371945083856e+00 -1.913168014455549e+00 -1.912966424334566e+00 + -1.912767177680794e+00 -1.912570277447078e+00 -1.912375726579230e+00 -1.912183528016060e+00 -1.911993684689408e+00 + -1.911806199524162e+00 -1.911621075438288e+00 -1.911438315342840e+00 -1.911257922141980e+00 -1.911079898733053e+00 + -1.910904248006509e+00 -1.910730972846012e+00 -1.910560076128402e+00 -1.910391560723777e+00 -1.910225429495489e+00 + -1.910061685300147e+00 -1.909900330987673e+00 -1.909741369401320e+00 -1.909584803377642e+00 -1.909430635746571e+00 + -1.909278869331415e+00 -1.909129506948898e+00 -1.908982551409168e+00 -1.908838005515824e+00 -1.908695872065935e+00 + -1.908556153850054e+00 -1.908418853652264e+00 -1.908283974250158e+00 -1.908151518414877e+00 -1.908021488911154e+00 + -1.907893888497317e+00 -1.907768719925307e+00 -1.907645985940704e+00 -1.907525689282748e+00 -1.907407832684373e+00 + -1.907292418872173e+00 -1.907179450566477e+00 -1.907068930481352e+00 -1.906960861324634e+00 -1.906855245797937e+00 + -1.906752086596660e+00 -1.906651386410043e+00 -1.906553147921180e+00 -1.906457373806959e+00 -1.906364066738204e+00 + -1.906273229379610e+00 -1.906184864389786e+00 -1.906098974421304e+00 -1.906015562120683e+00 -1.905934630128402e+00 + -1.905856181078966e+00 -1.905780217600874e+00 -1.905706742316644e+00 -1.905635757842851e+00 -1.905567266790150e+00 + -1.905501271763290e+00 -1.905437775361123e+00 -1.905376780176636e+00 -1.905318288796963e+00 -1.905262303803381e+00 + -1.905208827771360e+00 -1.905157863270561e+00 -1.905109412864876e+00 -1.905063479112441e+00 -1.905020064565640e+00 + -1.904979171771119e+00 -1.904940803269836e+00 -1.904904961597064e+00 -1.904871649282353e+00 -1.904840868849653e+00 + -1.904812622817242e+00 -1.904786913697784e+00 -1.904763743998368e+00 -1.904743116220462e+00 -1.904725032859995e+00 + -1.904709496407343e+00 -1.904696509347317e+00 -1.904686074159241e+00 -1.904678193316926e+00 -1.904672869288709e+00 + -1.904670104537476e+00 -1.904669901520642e+00 -1.904672262690203e+00 -1.904677190492756e+00 -1.904684687369470e+00 + -1.904694755756145e+00 -1.904707398083221e+00 -1.904722616775778e+00 -1.904740414253578e+00 -1.904760792931083e+00 + -1.904783755217430e+00 -1.904809303516487e+00 -1.904837440226858e+00 -1.904868167741889e+00 -1.904901488449690e+00 + -1.904937404733147e+00 -1.904975918969961e+00 -1.905017033532655e+00 -1.905060750788567e+00 -1.905107073099886e+00 + -1.905156002823665e+00 -1.905207542311811e+00 -1.905261693911145e+00 -1.905318459963395e+00 -1.905377842805202e+00 + -1.905439844768158e+00 -1.905504468178814e+00 -1.905571715358695e+00 -1.905641588624277e+00 -1.905714090287067e+00 + -1.905789222653563e+00 -1.905866988025308e+00 -1.905947388698898e+00 -1.906030426965976e+00 -1.906116105113269e+00 + -1.906204425422599e+00 -1.906295390170874e+00 -1.906389001630132e+00 -1.906485262067524e+00 -1.906584173745377e+00 + -1.906685738921180e+00 -1.906789959847581e+00 -1.906896838772432e+00 -1.907006377938798e+00 -1.907118579584959e+00 + -1.907233445944414e+00 -1.907350979245921e+00 -1.907471181713509e+00 -1.907594055566470e+00 -1.907719603019391e+00 + -1.907847826282189e+00 -1.907978727560068e+00 -1.908112309053585e+00 -1.908248572958617e+00 -1.908387521466432e+00 + -1.908529156763658e+00 -1.908673481032295e+00 -1.908820496449771e+00 -1.908970205188938e+00 -1.909122609418036e+00 + -1.909277711300791e+00 -1.909435512996346e+00 -1.909596016659329e+00 -1.909759224439852e+00 -1.909925138483517e+00 + -1.910093760931440e+00 -1.910265093920258e+00 -1.910439139582137e+00 -1.910615900044806e+00 -1.910795377431546e+00 + -1.910977573861199e+00 -1.911162491448207e+00 -1.911350132302599e+00 -1.911540498530023e+00 -1.911733592231773e+00 + -1.911929415504758e+00 -1.912127970441545e+00 -1.912329259130360e+00 -1.912533283655105e+00 -1.912740046095361e+00 + -1.912949548526419e+00 -1.913161793019291e+00 -1.913376781640710e+00 -1.913594516453150e+00 -1.913814999514819e+00 + -1.914038232879707e+00 -1.914264218597559e+00 -1.914492958713919e+00 -1.914724455270128e+00 -1.914958710303334e+00 + -1.915195725846515e+00 -1.915435503928488e+00 -1.915678046573908e+00 -1.915923355803288e+00 -1.916171433633011e+00 + -1.916422282075347e+00 -1.916675903138448e+00 -1.916932298826387e+00 -1.917191471139156e+00 -1.917453422072669e+00 + -1.917718153618788e+00 -1.917985667765312e+00 -1.918255966496023e+00 -1.918529051790657e+00 -1.918804925624940e+00 + -1.919083589970620e+00 -1.919365046795433e+00 -1.919649298063134e+00 -1.919936345733542e+00 -1.920226191762469e+00 + -1.920518838101830e+00 -1.920814286699556e+00 -1.921112539499689e+00 -1.921413598442361e+00 -1.921717465463779e+00 + -1.922024142496281e+00 -1.922333631468323e+00 -1.922645934304479e+00 -1.922961052925486e+00 -1.923278989248213e+00 + -1.923599745185685e+00 -1.923923322647128e+00 -1.924249723537959e+00 -1.924578949759761e+00 -1.924911003210338e+00 + -1.925245885783729e+00 -1.925583599370180e+00 -1.925924145856155e+00 -1.926267527124406e+00 -1.926613745053933e+00 + -1.926962801519989e+00 -1.927314698394121e+00 -1.927669437544174e+00 -1.928027020834292e+00 -1.928387450124911e+00 + -1.928750727272798e+00 -1.929116854131047e+00 -1.929485832549102e+00 -1.929857664372757e+00 -1.930232351444159e+00 + -1.930609895601848e+00 -1.930990298680730e+00 -1.931373562512105e+00 -1.931759688923653e+00 -1.932148679739498e+00 + -1.932540536780164e+00 -1.932935261862612e+00 -1.933332856800268e+00 -1.933733323402977e+00 -1.934136663477046e+00 + -1.934542878825268e+00 -1.934951971246913e+00 -1.935363942537724e+00 -1.935778794489949e+00 -1.936196528892353e+00 + -1.936617147530215e+00 -1.937040652185344e+00 -1.937467044636094e+00 -1.937896326657355e+00 -1.938328500020547e+00 + -1.938763566493703e+00 -1.939201527841392e+00 -1.939642385824780e+00 -1.940086142201642e+00 -1.940532798726324e+00 + -1.940982357149826e+00 -1.941434819219729e+00 -1.941890186680242e+00 -1.942348461272251e+00 -1.942809644733253e+00 + -1.943273738797405e+00 -1.943740745195556e+00 -1.944210665655209e+00 -1.944683501900552e+00 -1.945159255652477e+00 + -1.945637928628570e+00 -1.946119522543112e+00 -1.946604039107125e+00 -1.947091480028345e+00 -1.947581847011245e+00 + -1.948075141757065e+00 -1.948571365963784e+00 -1.949070521326131e+00 -1.949572609535622e+00 -1.950077632280552e+00 + -1.950585591245993e+00 -1.951096488113822e+00 -1.951610324562725e+00 -1.952127102268194e+00 -1.952646822902561e+00 + -1.953169488134975e+00 -1.953695099631423e+00 -1.954223659054738e+00 -1.954755168064616e+00 -1.955289628317605e+00 + -1.955827041467136e+00 -1.956367409163530e+00 -1.956910733053979e+00 -1.957457014782601e+00 -1.958006255990387e+00 + -1.958558458315249e+00 -1.959113623392025e+00 -1.959671752852486e+00 -1.960232848325334e+00 -1.960796911436222e+00 + -1.961363943807768e+00 -1.961933947059529e+00 -1.962506922808060e+00 -1.963082872666857e+00 -1.963661798246433e+00 + -1.964243701154278e+00 -1.964828582994884e+00 -1.965416445369769e+00 -1.966007289877443e+00 -1.966601118113475e+00 + -1.967197931670450e+00 -1.967797732137961e+00 -1.968400521102687e+00 -1.969006300148362e+00 -1.969615070855768e+00 + -1.970226834802765e+00 -1.970841593564292e+00 -1.971459348712371e+00 -1.972080101816131e+00 -1.972703854441789e+00 + -1.973330608152666e+00 -1.973960364509203e+00 -1.974593125068965e+00 -1.975228891386654e+00 -1.975867665014117e+00 + -1.976509447500335e+00 -1.977154240391441e+00 -1.977802045230730e+00 -1.978452863558668e+00 -1.979106696912898e+00 + -1.979763546828228e+00 -1.980423414836665e+00 -1.981086302467437e+00 -1.981752211246953e+00 -1.982421142698831e+00 + -1.983093098343921e+00 -1.983768079700265e+00 -1.984446088283173e+00 -1.985127125605189e+00 -1.985811193176090e+00 + -1.986498292502919e+00 -1.987188425089969e+00 -1.987881592438806e+00 -1.988577796048281e+00 -1.989277037414505e+00 + -1.989979318030885e+00 -1.990684639388122e+00 -1.991393002974224e+00 -1.992104410274516e+00 -1.992818862771611e+00 + -1.993536361945483e+00 -1.994256909273415e+00 -1.994980506230001e+00 -1.995707154287215e+00 -1.996436854914364e+00 + -1.997169609578102e+00 -1.997905419742475e+00 -1.998644286868872e+00 -1.999386212416074e+00 -2.000131197840234e+00 + -2.000879244594888e+00 -2.001630354130973e+00 -2.002384527896842e+00 -2.003141767338240e+00 -2.003902073898327e+00 + -2.004665449017706e+00 -2.005431894134382e+00 -2.006201410683811e+00 -2.006974000098877e+00 -2.007749663809916e+00 + -2.008528403244723e+00 -2.009310219828544e+00 -2.010095114984098e+00 -2.010883090131586e+00 -2.011674146688665e+00 + -2.012468286070491e+00 -2.013265509689707e+00 -2.014065818956456e+00 -2.014869215278391e+00 -2.015675700060665e+00 + -2.016485274705942e+00 -2.017297940614418e+00 -2.018113699183827e+00 -2.018932551809423e+00 -2.019754499883996e+00 + -2.020579544797892e+00 -2.021407687939015e+00 -2.022238930692813e+00 -2.023073274442305e+00 -2.023910720568091e+00 + -2.024751270448330e+00 -2.025594925458782e+00 -2.026441686972782e+00 -2.027291556361254e+00 -2.028144534992740e+00 + -2.029000624233381e+00 -2.029859825446918e+00 -2.030722139994724e+00 -2.031587569235807e+00 -2.032456114526781e+00 + -2.033327777221901e+00 -2.034202558673072e+00 -2.035080460229832e+00 -2.035961483239379e+00 -2.036845629046574e+00 + -2.037732898993935e+00 -2.038623294421658e+00 -2.039516816667612e+00 -2.040413467067337e+00 -2.041313246954071e+00 + -2.042216157658735e+00 -2.043122200509951e+00 -2.044031376834042e+00 -2.044943687955049e+00 -2.045859135194732e+00 + -2.046777719872542e+00 -2.047699443305691e+00 -2.048624306809098e+00 -2.049552311695423e+00 -2.050483459275068e+00 + -2.051417750856190e+00 -2.052355187744693e+00 -2.053295771244233e+00 -2.054239502656250e+00 -2.055186383279931e+00 + -2.056136414412242e+00 -2.057089597347935e+00 -2.058045933379546e+00 -2.059005423797393e+00 -2.059968069889587e+00 + -2.060933872942064e+00 -2.061902834238549e+00 -2.062874955060581e+00 -2.063850236687505e+00 -2.064828680396494e+00 + -2.065810287462551e+00 -2.066795059158510e+00 -2.067782996755041e+00 -2.068774101520662e+00 -2.069768374721733e+00 + -2.070765817622481e+00 -2.071766431484957e+00 -2.072770217569099e+00 -2.073777177132705e+00 -2.074787311431451e+00 + -2.075800621718894e+00 -2.076817109246462e+00 -2.077836775263488e+00 -2.078859621017187e+00 -2.079885647752666e+00 + -2.080914856712937e+00 -2.081947249138932e+00 -2.082982826269484e+00 -2.084021589341351e+00 -2.085063539589212e+00 + -2.086108678245658e+00 -2.087157006541239e+00 -2.088208525704420e+00 -2.089263236961625e+00 -2.090321141537214e+00 + -2.091382240653492e+00 -2.092446535530729e+00 -2.093514027387160e+00 -2.094584717438983e+00 -2.095658606900367e+00 + -2.096735696983457e+00 -2.097815988898372e+00 -2.098899483853224e+00 -2.099986183054104e+00 -2.101076087705096e+00 + -2.102169199008301e+00 -2.103265518163822e+00 -2.104365046369742e+00 -2.105467784822191e+00 -2.106573734715299e+00 + -2.107682897241208e+00 -2.108795273590104e+00 -2.109910864950205e+00 -2.111029672507756e+00 -2.112151697447043e+00 + -2.113276940950394e+00 -2.114405404198207e+00 -2.115537088368898e+00 -2.116671994638973e+00 -2.117810124182985e+00 + -2.118951478173553e+00 -2.120096057781377e+00 -2.121243864175221e+00 -2.122394898521957e+00 -2.123549161986514e+00 + -2.124706655731910e+00 -2.125867380919262e+00 -2.127031338707800e+00 -2.128198530254842e+00 -2.129368956715802e+00 + -2.130542619244231e+00 -2.131719518991788e+00 -2.132899657108238e+00 -2.134083034741480e+00 -2.135269653037541e+00 + -2.136459513140577e+00 -2.137652616192882e+00 -2.138848963334900e+00 -2.140048555705206e+00 -2.141251394440532e+00 + -2.142457480675770e+00 -2.143666815543961e+00 -2.144879400176309e+00 -2.146095235702186e+00 -2.147314323249125e+00 + -2.148536663942845e+00 -2.149762258907250e+00 -2.150991109264413e+00 -2.152223216134612e+00 -2.153458580636290e+00 + -2.154697203886097e+00 -2.155939086998886e+00 -2.157184231087713e+00 -2.158432637263842e+00 -2.159684306636743e+00 + -2.160939240314096e+00 -2.162197439401822e+00 -2.163458905004050e+00 -2.164723638223133e+00 -2.165991640159662e+00 + -2.167262911912465e+00 -2.168537454578604e+00 -2.169815269253381e+00 -2.171096357030366e+00 -2.172380719001362e+00 + -2.173668356256419e+00 -2.174959269883864e+00 -2.176253460970285e+00 -2.177550930600524e+00 -2.178851679857703e+00 + -2.180155709823218e+00 -2.181463021576747e+00 -2.182773616196250e+00 -2.184087494757944e+00 -2.185404658336391e+00 + -2.186725108004397e+00 -2.188048844833086e+00 -2.189375869891886e+00 -2.190706184248512e+00 -2.192039788969014e+00 + -2.193376685117749e+00 -2.194716873757371e+00 -2.196060355948863e+00 -2.197407132751541e+00 -2.198757205223044e+00 + -2.200110574419331e+00 -2.201467241394695e+00 -2.202827207201792e+00 -2.204190472891608e+00 -2.205557039513467e+00 + -2.206926908115037e+00 -2.208300079742360e+00 -2.209676555439819e+00 -2.211056336250151e+00 -2.212439423214473e+00 + -2.213825817372276e+00 -2.215215519761395e+00 -2.216608531418069e+00 -2.218004853376888e+00 -2.219404486670832e+00 + -2.220807432331276e+00 -2.222213691387983e+00 -2.223623264869098e+00 -2.225036153801162e+00 -2.226452359209121e+00 + -2.227871882116331e+00 -2.229294723544551e+00 -2.230720884513931e+00 -2.232150366043039e+00 -2.233583169148890e+00 + -2.235019294846892e+00 -2.236458744150863e+00 -2.237901518073101e+00 -2.239347617624281e+00 -2.240797043813529e+00 + -2.242249797648420e+00 -2.243705880134952e+00 -2.245165292277574e+00 -2.246628035079188e+00 -2.248094109541138e+00 + -2.249563516663224e+00 -2.251036257443719e+00 -2.252512332879331e+00 -2.253991743965241e+00 -2.255474491695112e+00 + -2.256960577061058e+00 -2.258450001053665e+00 -2.259942764662015e+00 -2.261438868873671e+00 -2.262938314674659e+00 + -2.264441103049500e+00 -2.265947234981217e+00 -2.267456711451307e+00 -2.268969533439785e+00 -2.270485701925157e+00 + -2.272005217884411e+00 -2.273528082293070e+00 -2.275054296125177e+00 -2.276583860353244e+00 -2.278116775948335e+00 + -2.279653043880010e+00 -2.281192665116365e+00 -2.282735640624031e+00 -2.284281971368139e+00 -2.285831658312368e+00 + -2.287384702418949e+00 -2.288941104648619e+00 -2.290500865960664e+00 -2.292063987312940e+00 -2.293630469661820e+00 + -2.295200313962230e+00 -2.296773521167668e+00 -2.298350092230174e+00 -2.299930028100345e+00 -2.301513329727359e+00 + -2.303099998058946e+00 -2.304690034041399e+00 -2.306283438619591e+00 -2.307880212736968e+00 -2.309480357335545e+00 + -2.311083873355932e+00 -2.312690761737336e+00 -2.314301023417510e+00 -2.315914659332828e+00 -2.317531670418241e+00 + -2.319152057607297e+00 -2.320775821832151e+00 -2.322402964023559e+00 -2.324033485110876e+00 -2.325667386022068e+00 + -2.327304667683706e+00 -2.328945331020975e+00 -2.330589376957682e+00 -2.332236806416253e+00 -2.333887620317718e+00 + -2.335541819581750e+00 -2.337199405126654e+00 -2.338860377869350e+00 -2.340524738725405e+00 -2.342192488609012e+00 + -2.343863628432999e+00 -2.345538159108850e+00 -2.347216081546682e+00 -2.348897396655259e+00 -2.350582105342006e+00 + -2.352270208513006e+00 -2.353961707072973e+00 -2.355656601925300e+00 -2.357354893972039e+00 -2.359056584113890e+00 + -2.360761673250241e+00 -2.362470162279137e+00 -2.364182052097298e+00 -2.365897343600136e+00 -2.367616037681701e+00 + -2.369338135234779e+00 -2.371063637150792e+00 -2.372792544319862e+00 -2.374524857630810e+00 -2.376260577971137e+00 + -2.377999706227046e+00 -2.379742243283432e+00 -2.381488190023890e+00 -2.383237547330728e+00 -2.384990316084951e+00 + -2.386746497166257e+00 -2.388506091453074e+00 -2.390269099822539e+00 -2.392035523150495e+00 -2.393805362311517e+00 + -2.395578618178898e+00 -2.397355291624653e+00 -2.399135383519508e+00 -2.400918894732937e+00 -2.402705826133134e+00 + -2.404496178587036e+00 -2.406289952960319e+00 -2.408087150117385e+00 -2.409887770921378e+00 -2.411691816234196e+00 + -2.413499286916482e+00 -2.415310183827637e+00 -2.417124507825783e+00 -2.418942259767817e+00 -2.420763440509397e+00 + -2.422588050904931e+00 -2.424416091807607e+00 -2.426247564069357e+00 -2.428082468540882e+00 -2.429920806071661e+00 + -2.431762577509934e+00 -2.433607783702720e+00 -2.435456425495825e+00 -2.437308503733829e+00 -2.439164019260086e+00 + -2.441022972916743e+00 -2.442885365544724e+00 -2.444751197983751e+00 -2.446620471072336e+00 -2.448493185647783e+00 + -2.450369342546193e+00 -2.452248942602461e+00 -2.454131986650292e+00 -2.456018475522207e+00 -2.457908410049500e+00 + -2.459801791062287e+00 -2.461698619389507e+00 -2.463598895858909e+00 -2.465502621297043e+00 -2.467409796529283e+00 + -2.469320422379833e+00 -2.471234499671722e+00 -2.473152029226791e+00 -2.475073011865701e+00 -2.476997448407970e+00 + -2.478925339671929e+00 -2.480856686474743e+00 -2.482791489632421e+00 -2.484729749959804e+00 -2.486671468270591e+00 + -2.488616645377308e+00 -2.490565282091325e+00 -2.492517379222876e+00 -2.494472937581027e+00 -2.496431957973708e+00 + -2.498394441207708e+00 -2.500360388088660e+00 -2.502329799421071e+00 -2.504302676008301e+00 -2.506279018652585e+00 + -2.508258828155011e+00 -2.510242105315529e+00 -2.512228850932978e+00 -2.514219065805072e+00 -2.516212750728384e+00 + -2.518209906498383e+00 -2.520210533909395e+00 -2.522214633754649e+00 -2.524222206826239e+00 -2.526233253915163e+00 + -2.528247775811304e+00 -2.530265773303430e+00 -2.532287247179208e+00 -2.534312198225181e+00 -2.536340627226823e+00 + -2.538372534968483e+00 -2.540407922233424e+00 -2.542446789803795e+00 -2.544489138460668e+00 -2.546534968984014e+00 + -2.548584282152714e+00 -2.550637078744586e+00 -2.552693359536329e+00 -2.554753125303561e+00 -2.556816376820847e+00 + -2.558883114861645e+00 -2.560953340198338e+00 -2.563027053602257e+00 -2.565104255843642e+00 -2.567184947691652e+00 + -2.569269129914397e+00 -2.571356803278927e+00 -2.573447968551196e+00 -2.575542626496120e+00 -2.577640777877541e+00 + -2.579742423458259e+00 -2.581847564000013e+00 -2.583956200263457e+00 -2.586068333008253e+00 -2.588183962992953e+00 + -2.590303090975103e+00 -2.592425717711169e+00 -2.594551843956599e+00 -2.596681470465796e+00 -2.598814597992102e+00 + -2.600951227287843e+00 -2.603091359104302e+00 -2.605234994191735e+00 -2.607382133299347e+00 -2.609532777175321e+00 + -2.611686926566822e+00 -2.613844582219981e+00 -2.616005744879901e+00 -2.618170415290673e+00 -2.620338594195372e+00 + -2.622510282336022e+00 -2.624685480453659e+00 -2.626864189288318e+00 -2.629046409578982e+00 -2.631232142063638e+00 + -2.633421387479294e+00 -2.635614146561922e+00 -2.637810420046472e+00 -2.640010208666940e+00 -2.642213513156286e+00 + -2.644420334246481e+00 -2.646630672668501e+00 -2.648844529152313e+00 -2.651061904426902e+00 -2.653282799220275e+00 + -2.655507214259428e+00 -2.657735150270368e+00 -2.659966607978148e+00 -2.662201588106788e+00 -2.664440091379368e+00 + -2.666682118517971e+00 -2.668927670243695e+00 -2.671176747276679e+00 -2.673429350336075e+00 -2.675685480140054e+00 + -2.677945137405846e+00 -2.680208322849678e+00 -2.682475037186829e+00 -2.684745281131615e+00 -2.687019055397374e+00 + -2.689296360696487e+00 -2.691577197740385e+00 -2.693861567239533e+00 -2.696149469903437e+00 -2.698440906440654e+00 + -2.700735877558792e+00 -2.703034383964495e+00 -2.705336426363465e+00 -2.707642005460460e+00 -2.709951121959278e+00 + -2.712263776562800e+00 -2.714579969972948e+00 -2.716899702890708e+00 -2.719222976016107e+00 -2.721549790048258e+00 + -2.723880145685348e+00 -2.726214043624607e+00 -2.728551484562331e+00 -2.730892469193915e+00 -2.733236998213813e+00 + -2.735585072315534e+00 -2.737936692191682e+00 -2.740291858533935e+00 -2.742650572033042e+00 -2.745012833378841e+00 + -2.747378643260263e+00 -2.749748002365299e+00 -2.752120911381043e+00 -2.754497370993660e+00 -2.756877381888414e+00 + -2.759260944749675e+00 -2.761648060260888e+00 -2.764038729104580e+00 -2.766432951962391e+00 -2.768830729515078e+00 + -2.771232062442445e+00 -2.773636951423451e+00 -2.776045397136128e+00 -2.778457400257615e+00 -2.780872961464151e+00 + -2.783292081431098e+00 -2.785714760832935e+00 -2.788141000343215e+00 -2.790570800634642e+00 -2.793004162379015e+00 + -2.795441086247242e+00 -2.797881572909360e+00 -2.800325623034530e+00 -2.802773237291023e+00 -2.805224416346235e+00 + -2.807679160866687e+00 -2.810137471518016e+00 -2.812599348965023e+00 -2.815064793871577e+00 -2.817533806900720e+00 + -2.820006388714628e+00 -2.822482539974584e+00 -2.824962261341016e+00 -2.827445553473503e+00 -2.829932417030747e+00 + -2.832422852670605e+00 -2.834916861050044e+00 -2.837414442825209e+00 -2.839915598651381e+00 -2.842420329182965e+00 + -2.844928635073532e+00 -2.847440516975808e+00 -2.849955975541651e+00 -2.852475011422093e+00 -2.854997625267306e+00 + -2.857523817726611e+00 -2.860053589448496e+00 -2.862586941080613e+00 -2.865123873269764e+00 -2.867664386661910e+00 + -2.870208481902185e+00 -2.872756159634881e+00 -2.875307420503462e+00 -2.877862265150549e+00 -2.880420694217936e+00 + -2.882982708346586e+00 -2.885548308176642e+00 -2.888117494347429e+00 -2.890690267497413e+00 -2.893266628264269e+00 + -2.895846577284838e+00 -2.898430115195134e+00 -2.901017242630361e+00 -2.903607960224904e+00 -2.906202268612328e+00 + -2.908800168425389e+00 -2.911401660296030e+00 -2.914006744855381e+00 -2.916615422733749e+00 -2.919227694560644e+00 + -2.921843560964770e+00 -2.924463022574029e+00 -2.927086080015509e+00 -2.929712733915490e+00 -2.932342984899474e+00 + -2.934976833592133e+00 -2.937614280617363e+00 -2.940255326598256e+00 -2.942899972157098e+00 -2.945548217915389e+00 + -2.948200064493845e+00 -2.950855512512379e+00 -2.953514562590114e+00 -2.956177215345383e+00 -2.958843471395737e+00 + -2.961513331357950e+00 -2.964186795847982e+00 -2.966863865481042e+00 -2.969544540871538e+00 -2.972228822633096e+00 + -2.974916711378592e+00 -2.977608207720079e+00 -2.980303312268865e+00 -2.983002025635479e+00 -2.985704348429672e+00 + -2.988410281260423e+00 -2.991119824735941e+00 -2.993832979463660e+00 -2.996549746050248e+00 -2.999270125101630e+00 + -3.001994117222935e+00 -3.004721723018531e+00 -3.007452943092040e+00 -3.010187778046309e+00 -3.012926228483428e+00 + -3.015668295004735e+00 -3.018413978210801e+00 -3.021163278701453e+00 -3.023916197075749e+00 -3.026672733932000e+00 + -3.029432889867773e+00 -3.032196665479876e+00 -3.034964061364365e+00 -3.037735078116557e+00 -3.040509716331012e+00 + -3.043287976601558e+00 -3.046069859521268e+00 -3.048855365682475e+00 -3.051644495676761e+00 -3.054437250094994e+00 + -3.057233629527281e+00 -3.060033634562990e+00 -3.062837265790776e+00 -3.065644523798526e+00 -3.068455409173430e+00 + -3.071269922501915e+00 -3.074088064369679e+00 -3.076909835361707e+00 -3.079735236062258e+00 -3.082564267054844e+00 + -3.085396928922253e+00 -3.088233222246566e+00 -3.091073147609129e+00 -3.093916705590559e+00 -3.096763896770764e+00 + -3.099614721728937e+00 -3.102469181043534e+00 -3.105327275292300e+00 -3.108189005052278e+00 -3.111054370899776e+00 + -3.113923373410397e+00 -3.116796013159040e+00 -3.119672290719892e+00 -3.122552206666409e+00 -3.125435761571350e+00 + -3.128322956006786e+00 -3.131213790544057e+00 -3.134108265753802e+00 -3.137006382205972e+00 -3.139908140469793e+00 + -3.142813541113813e+00 -3.145722584705857e+00 -3.148635271813065e+00 -3.151551603001882e+00 -3.154471578838045e+00 + -3.157395199886599e+00 -3.160322466711910e+00 -3.163253379877628e+00 -3.166187939946727e+00 -3.169126147481488e+00 + -3.172068003043496e+00 -3.175013507193647e+00 -3.177962660492161e+00 -3.180915463498569e+00 -3.183871916771706e+00 + -3.186832020869740e+00 -3.189795776350154e+00 -3.192763183769739e+00 -3.195734243684608e+00 -3.198708956650200e+00 + -3.201687323221279e+00 -3.204669343951928e+00 -3.207655019395554e+00 -3.210644350104894e+00 -3.213637336632021e+00 + -3.216633979528310e+00 -3.219634279344477e+00 -3.222638236630583e+00 -3.225645851936011e+00 -3.228657125809458e+00 + -3.231672058798984e+00 -3.234690651451981e+00 -3.237712904315154e+00 -3.240738817934559e+00 -3.243768392855589e+00 + -3.246801629622988e+00 -3.249838528780826e+00 -3.252879090872508e+00 -3.255923316440811e+00 -3.258971206027838e+00 + -3.262022760175028e+00 -3.265077979423168e+00 -3.268136864312412e+00 -3.271199415382246e+00 -3.274265633171505e+00 + -3.277335518218391e+00 -3.280409071060429e+00 -3.283486292234524e+00 -3.286567182276921e+00 -3.289651741723230e+00 + -3.292739971108408e+00 -3.295831870966755e+00 -3.298927441831955e+00 -3.302026684237054e+00 -3.305129598714428e+00 + -3.308236185795848e+00 -3.311346446012412e+00 -3.314460379894625e+00 -3.317577987972316e+00 -3.320699270774699e+00 + -3.323824228830359e+00 -3.326952862667231e+00 -3.330085172812642e+00 -3.333221159793278e+00 -3.336360824135186e+00 + -3.339504166363799e+00 -3.342651187003908e+00 -3.345801886579703e+00 -3.348956265614729e+00 -3.352114324631895e+00 + -3.355276064153538e+00 -3.358441484701320e+00 -3.361610586796302e+00 -3.364783370958925e+00 -3.367959837709023e+00 + -3.371139987565798e+00 -3.374323821047826e+00 -3.377511338673083e+00 -3.380702540958947e+00 -3.383897428422154e+00 + -3.387096001578831e+00 -3.390298260944501e+00 -3.393504207034073e+00 -3.396713840361855e+00 -3.399927161441538e+00 + -3.403144170786206e+00 -3.406364868908343e+00 -3.409589256319812e+00 -3.412817333531899e+00 -3.416049101055259e+00 + -3.419284559399956e+00 -3.422523709075449e+00 -3.425766550590609e+00 -3.429013084453696e+00 -3.432263311172365e+00 + -3.435517231253697e+00 -3.438774845204159e+00 -3.442036153529609e+00 -3.445301156735346e+00 -3.448569855326046e+00 + -3.451842249805807e+00 -3.455118340678133e+00 -3.458398128445935e+00 -3.461681613611535e+00 -3.464968796676661e+00 + -3.468259678142466e+00 -3.471554258509502e+00 -3.474852538277745e+00 -3.478154517946586e+00 -3.481460198014830e+00 + -3.484769578980697e+00 -3.488082661341818e+00 -3.491399445595259e+00 -3.494719932237499e+00 -3.498044121764448e+00 + -3.501372014671409e+00 -3.504703611453122e+00 -3.508038912603771e+00 -3.511377918616948e+00 -3.514720629985658e+00 + -3.518067047202351e+00 -3.521417170758916e+00 -3.524771001146632e+00 -3.528128538856226e+00 -3.531489784377869e+00 + -3.534854738201152e+00 -3.538223400815093e+00 -3.541595772708147e+00 -3.544971854368210e+00 -3.548351646282605e+00 + -3.551735148938096e+00 -3.555122362820871e+00 -3.558513288416572e+00 -3.561907926210269e+00 -3.565306276686472e+00 + -3.568708340329149e+00 -3.572114117621674e+00 -3.575523609046896e+00 -3.578936815087090e+00 -3.582353736223982e+00 + -3.585774372938740e+00 -3.589198725711980e+00 -3.592626795023756e+00 -3.596058581353578e+00 -3.599494085180416e+00 + -3.602933306982659e+00 -3.606376247238170e+00 -3.609822906424249e+00 -3.613273285017667e+00 -3.616727383494630e+00 + -3.620185202330797e+00 -3.623646742001296e+00 -3.627112002980697e+00 -3.630580985743044e+00 -3.634053690761820e+00 + -3.637530118509967e+00 -3.641010269459883e+00 -3.644494144083454e+00 -3.647981742852000e+00 -3.651473066236294e+00 + -3.654968114706609e+00 -3.658466888732652e+00 -3.661969388783590e+00 -3.665475615328066e+00 -3.668985568834209e+00 + -3.672499249769582e+00 -3.676016658601212e+00 -3.679537795795627e+00 -3.683062661818816e+00 -3.686591257136213e+00 + -3.690123582212739e+00 -3.693659637512796e+00 -3.697199423500252e+00 -3.700742940638435e+00 -3.704290189390158e+00 + -3.707841170217717e+00 -3.711395883582878e+00 -3.714954329946878e+00 -3.718516509770433e+00 -3.722082423513736e+00 + -3.725652071636476e+00 -3.729225454597809e+00 -3.732802572856360e+00 -3.736383426870251e+00 -3.739968017097092e+00 + -3.743556343993960e+00 -3.747148408017420e+00 -3.750744209623536e+00 -3.754343749267846e+00 -3.757947027405371e+00 + -3.761554044490634e+00 -3.765164800977630e+00 -3.768779297319843e+00 -3.772397533970266e+00 -3.776019511381367e+00 + -3.779645230005114e+00 -3.783274690292943e+00 -3.786907892695818e+00 -3.790544837664185e+00 -3.794185525647971e+00 + -3.797829957096611e+00 -3.801478132459025e+00 -3.805130052183649e+00 -3.808785716718410e+00 -3.812445126510720e+00 + -3.816108282007496e+00 -3.819775183655163e+00 -3.823445831899649e+00 -3.827120227186379e+00 -3.830798369960271e+00 + -3.834480260665755e+00 -3.838165899746767e+00 -3.841855287646750e+00 -3.845548424808647e+00 -3.849245311674900e+00 + -3.852945948687470e+00 -3.856650336287825e+00 -3.860358474916932e+00 -3.864070365015278e+00 -3.867786007022868e+00 + -3.871505401379192e+00 -3.875228548523268e+00 -3.878955448893632e+00 -3.882686102928319e+00 -3.886420511064884e+00 + -3.890158673740407e+00 -3.893900591391463e+00 -3.897646264454169e+00 -3.901395693364130e+00 -3.905148878556481e+00 + -3.908905820465894e+00 -3.912666519526535e+00 -3.916430976172091e+00 -3.920199190835787e+00 -3.923971163950356e+00 + -3.927746895948071e+00 -3.931526387260695e+00 -3.935309638319541e+00 -3.939096649555446e+00 -3.942887421398752e+00 + -3.946681954279347e+00 -3.950480248626651e+00 -3.954282304869576e+00 -3.958088123436599e+00 -3.961897704755720e+00 + -3.965711049254449e+00 -3.969528157359837e+00 -3.973349029498469e+00 -3.977173666096463e+00 -3.981002067579462e+00 + -3.984834234372642e+00 -3.988670166900735e+00 -3.992509865587974e+00 -3.996353330858146e+00 -4.000200563134574e+00 + -4.004051562840109e+00 -4.007906330397145e+00 -4.011764866227615e+00 -4.015627170752992e+00 -4.019493244394294e+00 + -4.023363087572059e+00 -4.027236700706383e+00 -4.031114084216902e+00 -4.034995238522789e+00 -4.038880164042757e+00 + -4.042768861195075e+00 -4.046661330397552e+00 -4.050557572067540e+00 -4.054457586621926e+00 -4.058361374477165e+00 + -4.062268936049244e+00 -4.066180271753694e+00 -4.070095382005614e+00 -4.074014267219641e+00 -4.077936927809962e+00 + -4.081863364190321e+00 -4.085793576773986e+00 -4.089727565973806e+00 -4.093665332202189e+00 -4.097606875871072e+00 + -4.101552197391952e+00 -4.105501297175883e+00 -4.109454175633480e+00 -4.113410833174915e+00 -4.117371270209918e+00 + -4.121335487147758e+00 -4.125303484397271e+00 -4.129275262366859e+00 -4.133250821464483e+00 -4.137230162097660e+00 + -4.141213284673465e+00 -4.145200189598537e+00 -4.149190877279081e+00 -4.153185348120865e+00 -4.157183602529212e+00 + -4.161185640909008e+00 -4.165191463664712e+00 -4.169201071200355e+00 -4.173214463919516e+00 -4.177231642225350e+00 + -4.181252606520591e+00 -4.185277357207513e+00 -4.189305894687974e+00 -4.193338219363411e+00 -4.197374331634809e+00 + -4.201414231902741e+00 -4.205457920567363e+00 -4.209505398028367e+00 -4.213556664685031e+00 -4.217611720936229e+00 + -4.221670567180388e+00 -4.225733203815498e+00 -4.229799631239144e+00 -4.233869849848502e+00 -4.237943860040279e+00 + -4.242021662210785e+00 -4.246103256755913e+00 -4.250188644071127e+00 -4.254277824551467e+00 -4.258370798591556e+00 + -4.262467566585599e+00 -4.266568128927379e+00 -4.270672486010255e+00 -4.274780638227183e+00 -4.278892585970684e+00 + -4.283008329632861e+00 -4.287127869605426e+00 -4.291251206279656e+00 -4.295378340046413e+00 -4.299509271296149e+00 + -4.303644000418893e+00 -4.307782527804274e+00 -4.311924853841519e+00 -4.316070978919406e+00 -4.320220903426330e+00 + -4.324374627750270e+00 -4.328532152278792e+00 -4.332693477399057e+00 -4.336858603497809e+00 -4.341027530961389e+00 + -4.345200260175742e+00 -4.349376791526378e+00 -4.353557125398426e+00 -4.357741262176597e+00 -4.361929202245197e+00 + -4.366120945988135e+00 -4.370316493788910e+00 -4.374515846030618e+00 -4.378719003095941e+00 -4.382925965367197e+00 + -4.387136733226254e+00 -4.391351307054602e+00 -4.395569687233333e+00 -4.399791874143130e+00 -4.404017868164284e+00 + -4.408247669676693e+00 -4.412481279059842e+00 -4.416718696692822e+00 -4.420959922954337e+00 -4.425204958222677e+00 + -4.429453802875758e+00 -4.433706457291089e+00 -4.437962921845775e+00 -4.442223196916548e+00 -4.446487282879729e+00 + -4.450755180111253e+00 -4.455026888986658e+00 -4.459302409881104e+00 -4.463581743169351e+00 -4.467864889225750e+00 + -4.472151848424286e+00 -4.476442621138564e+00 -4.480737207741772e+00 -4.485035608606713e+00 -4.489337824105825e+00 + -4.493643854611136e+00 -4.497953700494294e+00 -4.502267362126566e+00 -4.506584839878830e+00 -4.510906134121575e+00 + -4.515231245224915e+00 -4.519560173558575e+00 -4.523892919491889e+00 -4.528229483393817e+00 -4.532569865632944e+00 + -4.536914066577454e+00 -4.541262086595165e+00 -4.545613926053512e+00 -4.549969585319536e+00 -4.554329064759933e+00 + -4.558692364740978e+00 -4.563059485628594e+00 -4.567430427788318e+00 -4.571805191585312e+00 -4.576183777384360e+00 + -4.580566185549864e+00 -4.584952416445871e+00 -4.589342470436034e+00 -4.593736347883617e+00 -4.598134049151555e+00 + -4.602535574602366e+00 -4.606940924598215e+00 -4.611350099500895e+00 -4.615763099671819e+00 -4.620179925472048e+00 + -4.624600577262248e+00 -4.629025055402718e+00 -4.633453360253406e+00 -4.637885492173879e+00 -4.642321451523323e+00 + -4.646761238660574e+00 -4.651204853944100e+00 -4.655652297731985e+00 -4.660103570381972e+00 -4.664558672251414e+00 + -4.669017603697299e+00 -4.673480365076278e+00 -4.677946956744618e+00 -4.682417379058207e+00 -4.686891632372589e+00 + -4.691369717042950e+00 -4.695851633424101e+00 -4.700337381870502e+00 -4.704826962736228e+00 -4.709320376375019e+00 + -4.713817623140252e+00 -4.718318703384934e+00 -4.722823617461711e+00 -4.727332365722877e+00 -4.731844948520367e+00 + -4.736361366205763e+00 -4.740881619130278e+00 -4.745405707644782e+00 -4.749933632099776e+00 -4.754465392845407e+00 + -4.759000990231475e+00 -4.763540424607419e+00 -4.768083696322323e+00 -4.772630805724941e+00 -4.777181753163625e+00 + -4.781736538986410e+00 -4.786295163540972e+00 -4.790857627174635e+00 -4.795423930234377e+00 -4.799994073066809e+00 + -4.804568056018198e+00 -4.809145879434483e+00 -4.813727543661221e+00 -4.818313049043633e+00 -4.822902395926605e+00 + -4.827495584654658e+00 -4.832092615571965e+00 -4.836693489022368e+00 -4.841298205349351e+00 -4.845906764896066e+00 + -4.850519168005293e+00 -4.855135415019487e+00 -4.859755506280755e+00 -4.864379442130859e+00 -4.869007222911223e+00 + -4.873638848962912e+00 -4.878274320626662e+00 -4.882913638242878e+00 -4.887556802151599e+00 -4.892203812692545e+00 + -4.896854670205077e+00 -4.901509375028215e+00 -4.906167927500664e+00 -4.910830327960769e+00 -4.915496576746531e+00 + -4.920166674195641e+00 -4.924840620645424e+00 -4.929518416432892e+00 -4.934200061894690e+00 -4.938885557367149e+00 + -4.943574903186265e+00 -4.948268099687690e+00 -4.952965147206749e+00 -4.957666046078407e+00 -4.962370796637342e+00 + -4.967079399217861e+00 -4.971791854153949e+00 -4.976508161779259e+00 -4.981228322427121e+00 -4.985952336430508e+00 + -4.990680204122076e+00 -4.995411925834181e+00 -5.000147501898792e+00 -5.004886932647596e+00 -5.009630218411923e+00 + -5.014377359522774e+00 -5.019128356310840e+00 -5.023883209106478e+00 -5.028641918239699e+00 -5.033404484040224e+00 + -5.038170906837403e+00 -5.042941186960304e+00 -5.047715324737633e+00 -5.052493320497788e+00 -5.057275174568838e+00 + -5.062060887278532e+00 -5.066850458954302e+00 -5.071643889923235e+00 -5.076441180512111e+00 -5.081242331047386e+00 + -5.086047341855183e+00 -5.090856213261325e+00 -5.095668945591296e+00 -5.100485539170259e+00 -5.105305994323073e+00 + -5.110130311374258e+00 -5.114958490648023e+00 -5.119790532468257e+00 -5.124626437158541e+00 -5.129466205042124e+00 + -5.134309836441936e+00 -5.139157331680601e+00 -5.144008691080423e+00 -5.148863914963381e+00 -5.153723003651146e+00 + -5.158585957465074e+00 -5.163452776726214e+00 -5.168323461755270e+00 -5.173198012872664e+00 -5.178076430398495e+00 + -5.182958714652539e+00 -5.187844865954274e+00 -5.192734884622851e+00 -5.197628770977129e+00 -5.202526525335630e+00 + -5.207428148016579e+00 -5.212333639337883e+00 -5.217242999617151e+00 -5.222156229171685e+00 -5.227073328318455e+00 + -5.231994297374141e+00 -5.236919136655107e+00 -5.241847846477410e+00 -5.246780427156790e+00 -5.251716879008699e+00 + -5.256657202348276e+00 -5.261601397490344e+00 -5.266549464749412e+00 -5.271501404439718e+00 -5.276457216875169e+00 + -5.281416902369371e+00 -5.286380461235616e+00 -5.291347893786903e+00 -5.296319200335939e+00 -5.301294381195112e+00 + -5.306273436676504e+00 -5.311256367091902e+00 -5.316243172752793e+00 -5.321233853970363e+00 -5.326228411055482e+00 + -5.331226844318738e+00 -5.336229154070412e+00 -5.341235340620486e+00 -5.346245404278635e+00 -5.351259345354241e+00 + -5.356277164156404e+00 -5.361298860993880e+00 -5.366324436175172e+00 -5.371353890008475e+00 -5.376387222801674e+00 + -5.381424434862359e+00 -5.386465526497835e+00 -5.391510498015110e+00 -5.396559349720882e+00 -5.401612081921566e+00 + -5.406668694923281e+00 -5.411729189031852e+00 -5.416793564552815e+00 -5.421861821791401e+00 -5.426933961052540e+00 + -5.432009982640891e+00 -5.437089886860833e+00 -5.442173674016402e+00 -5.447261344411380e+00 -5.452352898349262e+00 + -5.457448336133238e+00 -5.462547658066200e+00 -5.467650864450756e+00 -5.472757955589240e+00 -5.477868931783695e+00 + -5.482983793335842e+00 -5.488102540547150e+00 -5.493225173718788e+00 -5.498351693151633e+00 -5.503482099146281e+00 + -5.508616392003035e+00 -5.513754572021907e+00 -5.518896639502648e+00 -5.524042594744686e+00 -5.529192438047204e+00 + -5.534346169709065e+00 -5.539503790028862e+00 -5.544665299304909e+00 -5.549830697835224e+00 -5.554999985917551e+00 + -5.560173163849363e+00 -5.565350231927815e+00 -5.570531190449804e+00 -5.575716039711939e+00 -5.580904780010557e+00 + -5.586097411641703e+00 -5.591293934901141e+00 -5.596494350084360e+00 -5.601698657486573e+00 -5.606906857402707e+00 + -5.612118950127392e+00 -5.617334935955009e+00 -5.622554815179657e+00 -5.627778588095129e+00 -5.633006254994962e+00 + -5.638237816172428e+00 -5.643473271920497e+00 -5.648712622531863e+00 -5.653955868298955e+00 -5.659203009513937e+00 + -5.664454046468674e+00 -5.669708979454753e+00 -5.674967808763511e+00 -5.680230534686000e+00 -5.685497157512981e+00 + -5.690767677534969e+00 -5.696042095042189e+00 -5.701320410324601e+00 -5.706602623671866e+00 -5.711888735373401e+00 + -5.717178745718360e+00 -5.722472654995594e+00 -5.727770463493701e+00 -5.733072171500994e+00 -5.738377779305535e+00 + -5.743687287195117e+00 -5.749000695457238e+00 -5.754318004379131e+00 -5.759639214247780e+00 -5.764964325349899e+00 + -5.770293337971915e+00 -5.775626252400000e+00 -5.780963068920038e+00 -5.786303787817687e+00 -5.791648409378297e+00 + -5.796996933886967e+00 -5.802349361628526e+00 -5.807705692887541e+00 -5.813065927948325e+00 -5.818430067094904e+00 + -5.823798110611049e+00 -5.829170058780258e+00 -5.834545911885780e+00 -5.839925670210602e+00 -5.845309334037417e+00 + -5.850696903648678e+00 -5.856088379326584e+00 -5.861483761353051e+00 -5.866883050009746e+00 -5.872286245578068e+00 + -5.877693348339152e+00 -5.883104358573871e+00 -5.888519276562852e+00 -5.893938102586454e+00 -5.899360836924761e+00 + -5.904787479857608e+00 -5.910218031664582e+00 -5.915652492624988e+00 -5.921090863017886e+00 -5.926533143122083e+00 + -5.931979333216122e+00 -5.937429433578276e+00 -5.942883444486576e+00 -5.948341366218787e+00 -5.953803199052428e+00 + -5.959268943264752e+00 -5.964738599132756e+00 -5.970212166933178e+00 -5.975689646942516e+00 -5.981171039436995e+00 + -5.986656344692580e+00 -5.992145562985025e+00 -5.997638694589780e+00 -6.003135739782047e+00 -6.008636698836816e+00 + -6.014141572028781e+00 -6.019650359632385e+00 -6.025163061921843e+00 -6.030679679171110e+00 -6.036200211653867e+00 + -6.041724659643579e+00 -6.047253023413430e+00 -6.052785303236364e+00 -6.058321499385080e+00 -6.063861612132020e+00 + -6.069405641749371e+00 -6.074953588509080e+00 -6.080505452682839e+00 -6.086061234542105e+00 -6.091620934358053e+00 + -6.097184552401647e+00 -6.102752088943580e+00 -6.108323544254316e+00 -6.113898918604045e+00 -6.119478212262720e+00 + -6.125061425500075e+00 -6.130648558585549e+00 -6.136239611788372e+00 -6.141834585377521e+00 -6.147433479621712e+00 + -6.153036294789428e+00 -6.158643031148904e+00 -6.164253688968132e+00 -6.169868268514869e+00 -6.175486770056609e+00 + -6.181109193860610e+00 -6.186735540193886e+00 -6.192365809323226e+00 -6.198000001515148e+00 -6.203638117035931e+00 + -6.209280156151636e+00 -6.214926119128074e+00 -6.220576006230784e+00 -6.226229817725092e+00 -6.231887553876090e+00 + -6.237549214948623e+00 -6.243214801207271e+00 -6.248884312916396e+00 -6.254557750340128e+00 -6.260235113742339e+00 + -6.265916403386665e+00 -6.271601619536529e+00 -6.277290762455077e+00 -6.282983832405249e+00 -6.288680829649721e+00 + -6.294381754450934e+00 -6.300086607071117e+00 -6.305795387772242e+00 -6.311508096816047e+00 -6.317224734464046e+00 + -6.322945300977493e+00 -6.328669796617409e+00 -6.334398221644610e+00 -6.340130576319652e+00 -6.345866860902846e+00 + -6.351607075654297e+00 -6.357351220833869e+00 -6.363099296701155e+00 -6.368851303515576e+00 -6.374607241536277e+00 + -6.380367111022172e+00 -6.386130912231954e+00 -6.391898645424085e+00 -6.397670310856794e+00 -6.403445908788060e+00 + -6.409225439475646e+00 -6.415008903177084e+00 -6.420796300149683e+00 -6.426587630650501e+00 -6.432382894936371e+00 + -6.438182093263920e+00 -6.443985225889512e+00 -6.449792293069281e+00 -6.455603295059175e+00 -6.461418232114865e+00 + -6.467237104491804e+00 -6.473059912445233e+00 -6.478886656230174e+00 -6.484717336101379e+00 -6.490551952313386e+00 + -6.496390505120561e+00 -6.502232994776961e+00 -6.508079421536452e+00 -6.513929785652689e+00 -6.519784087379094e+00 + -6.525642326968836e+00 -6.531504504674881e+00 -6.537370620749972e+00 -6.543240675446627e+00 -6.549114669017141e+00 + -6.554992601713554e+00 -6.560874473787715e+00 -6.566760285491243e+00 -6.572650037075519e+00 -6.578543728791724e+00 + -6.584441360890791e+00 -6.590342933623440e+00 -6.596248447240193e+00 -6.602157901991309e+00 -6.608071298126847e+00 + -6.613988635896638e+00 -6.619909915550290e+00 -6.625835137337201e+00 -6.631764301506546e+00 -6.637697408307263e+00 + -6.643634457988090e+00 -6.649575450797517e+00 -6.655520386983861e+00 -6.661469266795167e+00 -6.667422090479300e+00 + -6.673378858283891e+00 -6.679339570456337e+00 -6.685304227243845e+00 -6.691272828893389e+00 -6.697245375651724e+00 + -6.703221867765397e+00 -6.709202305480722e+00 -6.715186689043798e+00 -6.721175018700527e+00 -6.727167294696586e+00 + -6.733163517277418e+00 -6.739163686688271e+00 -6.745167803174153e+00 -6.751175866979899e+00 -6.757187878350086e+00 + -6.763203837529089e+00 -6.769223744761077e+00 -6.775247600289998e+00 -6.781275404359591e+00 -6.787307157213379e+00 + -6.793342859094645e+00 -6.799382510246520e+00 -6.805426110911839e+00 -6.811473661333310e+00 -6.817525161753391e+00 + -6.823580612414293e+00 -6.829640013558051e+00 -6.835703365426514e+00 -6.841770668261261e+00 -6.847841922303711e+00 + -6.853917127795019e+00 -6.859996284976181e+00 -6.866079394087945e+00 -6.872166455370881e+00 -6.878257469065336e+00 + -6.884352435411412e+00 -6.890451354649063e+00 -6.896554227018007e+00 -6.902661052757722e+00 -6.908771832107508e+00 + -6.914886565306481e+00 -6.921005252593503e+00 -6.927127894207235e+00 -6.933254490386168e+00 -6.939385041368540e+00 + -6.945519547392406e+00 -6.951658008695609e+00 -6.957800425515785e+00 -6.963946798090364e+00 -6.970097126656561e+00 + -6.976251411451404e+00 -6.982409652711705e+00 -6.988571850674059e+00 -6.994738005574878e+00 -7.000908117650358e+00 + -7.007082187136479e+00 -7.013260214269030e+00 -7.019442199283596e+00 -7.025628142415571e+00 -7.031818043900113e+00 + -7.038011903972172e+00 -7.044209722866557e+00 -7.050411500817816e+00 -7.056617238060313e+00 -7.062826934828212e+00 + -7.069040591355458e+00 -7.075258207875804e+00 -7.081479784622815e+00 -7.087705321829840e+00 -7.093934819730035e+00 + -7.100168278556337e+00 -7.106405698541495e+00 -7.112647079918084e+00 -7.118892422918433e+00 -7.125141727774680e+00 + -7.131394994718784e+00 -7.137652223982496e+00 -7.143913415797365e+00 -7.150178570394741e+00 -7.156447688005769e+00 + -7.162720768861397e+00 -7.168997813192387e+00 -7.175278821229301e+00 -7.181563793202489e+00 -7.187852729342118e+00 + -7.194145629878145e+00 -7.200442495040330e+00 -7.206743325058257e+00 -7.213048120161294e+00 -7.219356880578604e+00 + -7.225669606539178e+00 -7.231986298271799e+00 -7.238306956005045e+00 -7.244631579967329e+00 -7.250960170386830e+00 + -7.257292727491547e+00 -7.263629251509297e+00 -7.269969742667685e+00 -7.276314201194133e+00 -7.282662627315866e+00 + -7.289015021259905e+00 -7.295371383253110e+00 -7.301731713522094e+00 -7.308096012293305e+00 -7.314464279793020e+00 + -7.320836516247303e+00 -7.327212721882012e+00 -7.333592896922825e+00 -7.339977041595229e+00 -7.346365156124529e+00 + -7.352757240735817e+00 -7.359153295654018e+00 -7.365553321103840e+00 -7.371957317309811e+00 -7.378365284496280e+00 + -7.384777222887396e+00 -7.391193132707101e+00 -7.397613014179165e+00 -7.404036867527187e+00 -7.410464692974549e+00 + -7.416896490744429e+00 -7.423332261059860e+00 -7.429772004143665e+00 -7.436215720218461e+00 -7.442663409506689e+00 + -7.449115072230618e+00 -7.455570708612319e+00 -7.462030318873654e+00 -7.468493903236336e+00 -7.474961461921863e+00 + -7.481432995151539e+00 -7.487908503146506e+00 -7.494387986127713e+00 -7.500871444315909e+00 -7.507358877931678e+00 + -7.513850287195392e+00 -7.520345672327254e+00 -7.526845033547282e+00 -7.533348371075305e+00 -7.539855685130965e+00 + -7.546366975933723e+00 -7.552882243702854e+00 -7.559401488657434e+00 -7.565924711016385e+00 -7.572451910998421e+00 + -7.578983088822080e+00 -7.585518244705714e+00 -7.592057378867498e+00 -7.598600491525418e+00 -7.605147582897262e+00 + -7.611698653200676e+00 -7.618253702653100e+00 -7.624812731471770e+00 -7.631375739873762e+00 -7.637942728075978e+00 + -7.644513696295129e+00 -7.651088644747739e+00 -7.657667573650164e+00 -7.664250483218564e+00 -7.670837373668940e+00 + -7.677428245217064e+00 -7.684023098078583e+00 -7.690621932468945e+00 -7.697224748603410e+00 -7.703831546697062e+00 + -7.710442326964809e+00 -7.717057089621377e+00 -7.723675834881300e+00 -7.730298562958961e+00 -7.736925274068566e+00 + -7.743555968424084e+00 -7.750190646239366e+00 -7.756829307728082e+00 -7.763471953103685e+00 -7.770118582579482e+00 + -7.776769196368593e+00 -7.783423794683974e+00 -7.790082377738391e+00 -7.796744945744414e+00 -7.803411498914449e+00 + -7.810082037460762e+00 -7.816756561595423e+00 -7.823435071530273e+00 -7.830117567477052e+00 -7.836804049647279e+00 + -7.843494518252330e+00 -7.850188973503353e+00 -7.856887415611381e+00 -7.863589844787259e+00 -7.870296261241606e+00 + -7.877006665184924e+00 -7.883721056827543e+00 -7.890439436379575e+00 -7.897161804050968e+00 -7.903888160051543e+00 + -7.910618504590899e+00 -7.917352837878463e+00 -7.924091160123523e+00 -7.930833471535165e+00 -7.937579772322323e+00 + -7.944330062693729e+00 -7.951084342857964e+00 -7.957842613023447e+00 -7.964604873398404e+00 -7.971371124190894e+00 + -7.978141365608812e+00 -7.984915597859879e+00 -7.991693821151640e+00 -7.998476035691475e+00 -8.005262241686605e+00 + -8.012052439344041e+00 -8.018846628870644e+00 -8.025644810473141e+00 -8.032446984358055e+00 -8.039253150731721e+00 + -8.046063309800333e+00 -8.052877461769919e+00 -8.059695606846336e+00 -8.066517745235240e+00 -8.073343877142156e+00 + -8.080174002772431e+00 -8.087008122331229e+00 -8.093846236023561e+00 -8.100688344054255e+00 -8.107534446628014e+00 + -8.114384543949313e+00 -8.121238636222499e+00 -8.128096723651735e+00 -8.134958806441029e+00 -8.141824884794215e+00 + -8.148694958914962e+00 -8.155569029006765e+00 -8.162447095272967e+00 -8.169329157916735e+00 -8.176215217141083e+00 + -8.183105273148838e+00 -8.189999326142679e+00 -8.196897376325106e+00 -8.203799423898468e+00 -8.210705469064955e+00 + -8.217615512026555e+00 -8.224529552985137e+00 -8.231447592142381e+00 -8.238369629699797e+00 -8.245295665858759e+00 + -8.252225700820452e+00 -8.259159734785896e+00 -8.266097767955973e+00 -8.273039800531377e+00 -8.279985832712656e+00 + -8.286935864700171e+00 -8.293889896694134e+00 -8.300847928894626e+00 -8.307809961501516e+00 -8.314775994714518e+00 + -8.321746028733230e+00 -8.328720063757029e+00 -8.335698099985173e+00 -8.342680137616734e+00 -8.349666176850638e+00 + -8.356656217885641e+00 -8.363650260920339e+00 -8.370648306153180e+00 -8.377650353782432e+00 -8.384656404006195e+00 + -8.391666457022472e+00 -8.398680513029014e+00 -8.405698572223468e+00 -8.412720634803323e+00 -8.419746700965899e+00 + -8.426776770908349e+00 -8.433810844827663e+00 -8.440848922920704e+00 -8.447891005384147e+00 -8.454937092414497e+00 + -8.461987184208150e+00 -8.469041280961296e+00 -8.476099382869975e+00 -8.483161490130104e+00 -8.490227602937411e+00 + -8.497297721487449e+00 -8.504371845975683e+00 -8.511449976597337e+00 -8.518532113547520e+00 -8.525618257021209e+00 + -8.532708407213180e+00 -8.539802564318054e+00 -8.546900728530334e+00 -8.554002900044340e+00 -8.561109079054233e+00 + -8.568219265754033e+00 -8.575333460337607e+00 -8.582451662998643e+00 -8.589573873930684e+00 -8.596700093327133e+00 + -8.603830321381231e+00 -8.610964558286055e+00 -8.618102804234525e+00 -8.625245059419424e+00 -8.632391324033383e+00 + -8.639541598268854e+00 -8.646695882318152e+00 -8.653854176373446e+00 -8.661016480626726e+00 -8.668182795269855e+00 + -8.675353120494524e+00 -8.682527456492297e+00 -8.689705803454544e+00 -8.696888161572527e+00 -8.704074531037321e+00 + -8.711264912039873e+00 -8.718459304770979e+00 -8.725657709421256e+00 -8.732860126181169e+00 -8.740066555241091e+00 + -8.747276996791161e+00 -8.754491451021417e+00 -8.761709918121749e+00 -8.768932398281878e+00 -8.776158891691368e+00 + -8.783389398539647e+00 -8.790623919016008e+00 -8.797862453309548e+00 -8.805105001609256e+00 -8.812351564103956e+00 + -8.819602140982319e+00 -8.826856732432866e+00 -8.834115338643974e+00 -8.841377959803891e+00 -8.848644596100668e+00 + -8.855915247722244e+00 -8.863189914856402e+00 -8.870468597690763e+00 -8.877751296412818e+00 -8.885038011209907e+00 + -8.892328742269209e+00 -8.899623489777758e+00 -8.906922253922460e+00 -8.914225034890046e+00 -8.921531832867133e+00 + -8.928842648040153e+00 -8.936157480595394e+00 -8.943476330719038e+00 -8.950799198597096e+00 -8.958126084415404e+00 + -8.965456988359692e+00 -8.972791910615557e+00 -8.980130851368383e+00 -8.987473810803451e+00 -8.994820789105916e+00 + -9.002171786460757e+00 -9.009526803052800e+00 -9.016885839066749e+00 -9.024248894687164e+00 -9.031615970098445e+00 + -9.038987065484857e+00 -9.046362181030501e+00 -9.053741316919359e+00 -9.061124473335269e+00 -9.068511650461897e+00 + -9.075902848482778e+00 -9.083298067581330e+00 -9.090697307940800e+00 -9.098100569744282e+00 -9.105507853174750e+00 + -9.112919158415034e+00 -9.120334485647801e+00 -9.127753835055586e+00 -9.135177206820789e+00 -9.142604601125658e+00 + -9.150036018152299e+00 -9.157471458082691e+00 -9.164910921098638e+00 -9.172354407381833e+00 -9.179801917113823e+00 + -9.187253450475996e+00 -9.194709007649601e+00 -9.202168588815766e+00 -9.209632194155466e+00 -9.217099823849537e+00 + -9.224571478078660e+00 -9.232047157023397e+00 -9.239526860864149e+00 -9.247010589781191e+00 -9.254498343954662e+00 + -9.261990123564543e+00 -9.269485928790706e+00 -9.276985759812838e+00 -9.284489616810514e+00 -9.291997499963166e+00 + -9.299509409450087e+00 -9.307025345450429e+00 -9.314545308143211e+00 -9.322069297707307e+00 -9.329597314321452e+00 + -9.337129358164249e+00 -9.344665429414164e+00 -9.352205528249479e+00 -9.359749654848420e+00 -9.367297809389010e+00 + -9.374849992049160e+00 -9.382406203006667e+00 -9.389966442439121e+00 -9.397530710524038e+00 -9.405099007438761e+00 + -9.412671333360530e+00 -9.420247688466429e+00 -9.427828072933398e+00 -9.435412486938230e+00 -9.443000930657597e+00 + -9.450593404268066e+00 -9.458189907946041e+00 -9.465790441867744e+00 -9.473395006209342e+00 -9.481003601146801e+00 + -9.488616226855999e+00 -9.496232883512658e+00 -9.503853571292346e+00 -9.511478290370524e+00 -9.519107040922526e+00 + -9.526739823123510e+00 -9.534376637148544e+00 -9.542017483172511e+00 -9.549662361370208e+00 -9.557311271916278e+00 + -9.564964214985224e+00 -9.572621190751422e+00 -9.580282199389115e+00 -9.587947241072424e+00 -9.595616315975308e+00 + -9.603289424271598e+00 -9.610966566135021e+00 -9.618647741739137e+00 -9.626332951257398e+00 -9.634022194863123e+00 + -9.641715472729455e+00 -9.649412785029462e+00 -9.657114131936055e+00 -9.664819513621991e+00 -9.672528930259928e+00 + -9.680242382022390e+00 -9.687959869081746e+00 -9.695681391610250e+00 -9.703406949780033e+00 -9.711136543763059e+00 + -9.718870173731199e+00 -9.726607839856156e+00 -9.734349542309561e+00 -9.742095281262861e+00 -9.749845056887377e+00 + -9.757598869354331e+00 -9.765356718834767e+00 -9.773118605499638e+00 -9.780884529519779e+00 -9.788654491065836e+00 + -9.796428490308374e+00 -9.804206527417804e+00 -9.811988602564428e+00 -9.819774715918413e+00 -9.827564867649766e+00 + -9.835359057928416e+00 -9.843157286924123e+00 -9.850959554806540e+00 -9.858765861745187e+00 -9.866576207909432e+00 + -9.874390593468537e+00 -9.882209018591661e+00 -9.890031483447776e+00 -9.897857988205763e+00 -9.905688533034370e+00 + -9.913523118102228e+00 -9.921361743577808e+00 -9.929204409629477e+00 -9.937051116425481e+00 -9.944901864133916e+00 + -9.952756652922753e+00 -9.960615482959881e+00 -9.968478354412996e+00 -9.976345267449714e+00 -9.984216222237505e+00 + -9.992091218943708e+00 -9.999970257735548e+00 -1.000785333878012e+01 -1.001574046224439e+01 -1.002363162829521e+01 + -1.003152683709930e+01 -1.003942608882323e+01 -1.004732938363347e+01 -1.005523672169636e+01 -1.006314810317811e+01 + -1.007106352824484e+01 -1.007898299706249e+01 -1.008690650979689e+01 -1.009483406661375e+01 -1.010276566767870e+01 + -1.011070131315718e+01 -1.011864100321451e+01 -1.012658473801593e+01 -1.013453251772654e+01 -1.014248434251131e+01 + -1.015044021253504e+01 -1.015840012796250e+01 -1.016636408895826e+01 -1.017433209568680e+01 -1.018230414831248e+01 + -1.019028024699952e+01 -1.019826039191202e+01 -1.020624458321397e+01 -1.021423282106921e+01 -1.022222510564150e+01 + -1.023022143709443e+01 -1.023822181559150e+01 -1.024622624129609e+01 -1.025423471437143e+01 -1.026224723498064e+01 + -1.027026380328674e+01 -1.027828441945259e+01 -1.028630908364097e+01 -1.029433779601449e+01 -1.030237055673569e+01 + -1.031040736596695e+01 -1.031844822387055e+01 -1.032649313060863e+01 -1.033454208634322e+01 -1.034259509123625e+01 + -1.035065214544951e+01 -1.035871324914464e+01 -1.036677840248320e+01 -1.037484760562664e+01 -1.038292085873624e+01 + -1.039099816197320e+01 -1.039907951549858e+01 -1.040716491947335e+01 -1.041525437405832e+01 -1.042334787941419e+01 + -1.043144543570157e+01 -1.043954704308092e+01 -1.044765270171260e+01 -1.045576241175682e+01 -1.046387617337370e+01 + -1.047199398672325e+01 -1.048011585196535e+01 -1.048824176925973e+01 -1.049637173876604e+01 -1.050450576064383e+01 + -1.051264383505245e+01 -1.052078596215120e+01 -1.052893214209928e+01 -1.053708237505570e+01 -1.054523666117939e+01 + -1.055339500062918e+01 -1.056155739356377e+01 -1.056972384014173e+01 -1.057789434052151e+01 -1.058606889486146e+01 + -1.059424750331983e+01 -1.060243016605470e+01 -1.061061688322407e+01 -1.061880765498584e+01 -1.062700248149774e+01 + -1.063520136291741e+01 -1.064340429940240e+01 -1.065161129111011e+01 -1.065982233819784e+01 -1.066803744082278e+01 + -1.067625659914197e+01 -1.068447981331238e+01 -1.069270708349082e+01 -1.070093840983402e+01 -1.070917379249859e+01 + -1.071741323164101e+01 -1.072565672741764e+01 -1.073390427998475e+01 -1.074215588949848e+01 -1.075041155611485e+01 + -1.075867127998978e+01 -1.076693506127908e+01 -1.077520290013840e+01 -1.078347479672334e+01 -1.079175075118934e+01 + -1.080003076369175e+01 -1.080831483438578e+01 -1.081660296342658e+01 -1.082489515096912e+01 -1.083319139716829e+01 + -1.084149170217887e+01 -1.084979606615550e+01 -1.085810448925276e+01 -1.086641697162507e+01 -1.087473351342674e+01 + -1.088305411481200e+01 -1.089137877593492e+01 -1.089970749694949e+01 -1.090804027800960e+01 -1.091637711926899e+01 + -1.092471802088130e+01 -1.093306298300006e+01 -1.094141200577872e+01 -1.094976508937056e+01 -1.095812223392879e+01 + -1.096648343960650e+01 -1.097484870655665e+01 -1.098321803493211e+01 -1.099159142488565e+01 -1.099996887656988e+01 + -1.100835039013734e+01 -1.101673596574047e+01 -1.102512560353154e+01 -1.103351930366276e+01 -1.104191706628624e+01 + -1.105031889155393e+01 -1.105872477961770e+01 -1.106713473062930e+01 -1.107554874474038e+01 -1.108396682210247e+01 + -1.109238896286701e+01 -1.110081516718529e+01 -1.110924543520854e+01 -1.111767976708783e+01 -1.112611816297415e+01 + -1.113456062301839e+01 -1.114300714737132e+01 -1.115145773618357e+01 -1.115991238960572e+01 -1.116837110778820e+01 + -1.117683389088132e+01 -1.118530073903531e+01 -1.119377165240030e+01 -1.120224663112628e+01 -1.121072567536315e+01 + -1.121920878526069e+01 -1.122769596096861e+01 -1.123618720263645e+01 -1.124468251041367e+01 -1.125318188444964e+01 + -1.126168532489361e+01 -1.127019283189471e+01 -1.127870440560199e+01 -1.128722004616434e+01 -1.129573975373062e+01 + -1.130426352844951e+01 -1.131279137046964e+01 -1.132132327993946e+01 -1.132985925700740e+01 -1.133839930182175e+01 + -1.134694341453066e+01 -1.135549159528221e+01 -1.136404384422433e+01 -1.137260016150494e+01 -1.138116054727173e+01 + -1.138972500167237e+01 -1.139829352485441e+01 -1.140686611696527e+01 -1.141544277815226e+01 -1.142402350856261e+01 + -1.143260830834348e+01 -1.144119717764181e+01 -1.144979011660454e+01 -1.145838712537846e+01 -1.146698820411027e+01 + -1.147559335294655e+01 -1.148420257203378e+01 -1.149281586151835e+01 -1.150143322154652e+01 -1.151005465226447e+01 + -1.151868015381826e+01 -1.152730972635386e+01 -1.153594337001710e+01 -1.154458108495374e+01 -1.155322287130944e+01 + -1.156186872922975e+01 -1.157051865886009e+01 -1.157917266034580e+01 -1.158783073383211e+01 -1.159649287946416e+01 + -1.160515909738695e+01 -1.161382938774540e+01 -1.162250375068435e+01 -1.163118218634852e+01 -1.163986469488249e+01 + -1.164855127643079e+01 -1.165724193113782e+01 -1.166593665914788e+01 -1.167463546060516e+01 -1.168333833565378e+01 + -1.169204528443773e+01 -1.170075630710089e+01 -1.170947140378704e+01 -1.171819057463989e+01 -1.172691381980302e+01 + -1.173564113941991e+01 -1.174437253363394e+01 -1.175310800258839e+01 -1.176184754642644e+01 -1.177059116529117e+01 + -1.177933885932554e+01 -1.178809062867245e+01 -1.179684647347465e+01 -1.180560639387481e+01 -1.181437039001551e+01 + -1.182313846203921e+01 -1.183191061008830e+01 -1.184068683430503e+01 -1.184946713483156e+01 -1.185825151180997e+01 + -1.186703996538223e+01 -1.187583249569018e+01 -1.188462910287559e+01 -1.189342978708015e+01 -1.190223454844542e+01 + -1.191104338711284e+01 -1.191985630322376e+01 -1.192867329691951e+01 -1.193749436834120e+01 -1.194631951762992e+01 + -1.195514874492662e+01 -1.196398205037220e+01 -1.197281943410740e+01 -1.198166089627287e+01 -1.199050643700922e+01 + -1.199935605645689e+01 -1.200820975475625e+01 -1.201706753204761e+01 -1.202592938847110e+01 -1.203479532416681e+01 + -1.204366533927472e+01 -1.205253943393470e+01 -1.206141760828654e+01 -1.207029986246992e+01 -1.207918619662443e+01 + -1.208807661088954e+01 -1.209697110540464e+01 -1.210586968030902e+01 -1.211477233574189e+01 -1.212367907184231e+01 + -1.213258988874930e+01 -1.214150478660175e+01 -1.215042376553849e+01 -1.215934682569817e+01 -1.216827396721942e+01 + -1.217720519024078e+01 -1.218614049490063e+01 -1.219507988133729e+01 -1.220402334968899e+01 -1.221297090009384e+01 + -1.222192253268988e+01 -1.223087824761503e+01 -1.223983804500713e+01 -1.224880192500392e+01 -1.225776988774303e+01 + -1.226674193336200e+01 -1.227571806199830e+01 -1.228469827378926e+01 -1.229368256887214e+01 -1.230267094738412e+01 + -1.231166340946224e+01 -1.232065995524348e+01 -1.232966058486472e+01 -1.233866529846273e+01 -1.234767409617421e+01 + -1.235668697813571e+01 -1.236570394448377e+01 -1.237472499535476e+01 -1.238375013088498e+01 -1.239277935121066e+01 + -1.240181265646790e+01 -1.241085004679272e+01 -1.241989152232105e+01 -1.242893708318871e+01 -1.243798672953144e+01 + -1.244704046148487e+01 -1.245609827918456e+01 -1.246516018276597e+01 -1.247422617236445e+01 -1.248329624811526e+01 + -1.249237041015359e+01 -1.250144865861449e+01 -1.251053099363295e+01 -1.251961741534388e+01 -1.252870792388208e+01 + -1.253780251938222e+01 -1.254690120197893e+01 -1.255600397180673e+01 -1.256511082900004e+01 -1.257422177369317e+01 + -1.258333680602040e+01 -1.259245592611584e+01 -1.260157913411357e+01 -1.261070643014754e+01 -1.261983781435160e+01 + -1.262897328685953e+01 -1.263811284780502e+01 -1.264725649732168e+01 -1.265640423554297e+01 -1.266555606260234e+01 + -1.267471197863305e+01 -1.268387198376835e+01 -1.269303607814138e+01 -1.270220426188516e+01 -1.271137653513265e+01 + -1.272055289801669e+01 -1.272973335067006e+01 -1.273891789322541e+01 -1.274810652581535e+01 -1.275729924857236e+01 + -1.276649606162882e+01 -1.277569696511704e+01 -1.278490195916926e+01 -1.279411104391759e+01 -1.280332421949406e+01 + -1.281254148603064e+01 -1.282176284365914e+01 -1.283098829251136e+01 -1.284021783271895e+01 -1.284945146441350e+01 + -1.285868918772651e+01 -1.286793100278938e+01 -1.287717690973341e+01 -1.288642690868983e+01 -1.289568099978976e+01 + -1.290493918316427e+01 -1.291420145894427e+01 -1.292346782726064e+01 -1.293273828824418e+01 -1.294201284202555e+01 + -1.295129148873533e+01 -1.296057422850405e+01 -1.296986106146209e+01 -1.297915198773984e+01 -1.298844700746749e+01 + -1.299774612077518e+01 -1.300704932779299e+01 -1.301635662865089e+01 -1.302566802347876e+01 -1.303498351240637e+01 + -1.304430309556346e+01 -1.305362677307965e+01 -1.306295454508441e+01 -1.307228641170723e+01 -1.308162237307746e+01 + -1.309096242932435e+01 -1.310030658057708e+01 -1.310965482696472e+01 -1.311900716861630e+01 -1.312836360566069e+01 + -1.313772413822676e+01 -1.314708876644323e+01 -1.315645749043872e+01 -1.316583031034182e+01 -1.317520722628100e+01 + -1.318458823838463e+01 -1.319397334678105e+01 -1.320336255159842e+01 -1.321275585296490e+01 -1.322215325100852e+01 + -1.323155474585722e+01 -1.324096033763887e+01 -1.325037002648126e+01 -1.325978381251206e+01 -1.326920169585888e+01 + -1.327862367664927e+01 -1.328804975501062e+01 -1.329747993107027e+01 -1.330691420495551e+01 -1.331635257679351e+01 + -1.332579504671135e+01 -1.333524161483602e+01 -1.334469228129447e+01 -1.335414704621346e+01 -1.336360590971979e+01 + -1.337306887194011e+01 -1.338253593300098e+01 -1.339200709302889e+01 -1.340148235215025e+01 -1.341096171049137e+01 + -1.342044516817849e+01 -1.342993272533773e+01 -1.343942438209516e+01 -1.344892013857678e+01 -1.345841999490846e+01 + -1.346792395121599e+01 -1.347743200762512e+01 -1.348694416426146e+01 -1.349646042125059e+01 -1.350598077871795e+01 + -1.351550523678895e+01 -1.352503379558886e+01 -1.353456645524291e+01 -1.354410321587624e+01 -1.355364407761388e+01 + -1.356318904058077e+01 -1.357273810490182e+01 -1.358229127070182e+01 -1.359184853810548e+01 -1.360140990723740e+01 + -1.361097537822217e+01 -1.362054495118421e+01 -1.363011862624790e+01 -1.363969640353754e+01 -1.364927828317732e+01 + -1.365886426529140e+01 -1.366845435000381e+01 -1.367804853743850e+01 -1.368764682771935e+01 -1.369724922097016e+01 + -1.370685571731461e+01 -1.371646631687636e+01 -1.372608101977895e+01 -1.373569982614582e+01 -1.374532273610039e+01 + -1.375494974976591e+01 -1.376458086726563e+01 -1.377421608872267e+01 -1.378385541426007e+01 -1.379349884400080e+01 + -1.380314637806776e+01 -1.381279801658375e+01 -1.382245375967148e+01 -1.383211360745361e+01 -1.384177756005268e+01 + -1.385144561759116e+01 -1.386111778019146e+01 -1.387079404797589e+01 -1.388047442106668e+01 -1.389015889958599e+01 + -1.389984748365586e+01 -1.390954017339831e+01 -1.391923696893523e+01 -1.392893787038843e+01 -1.393864287787969e+01 + -1.394835199153066e+01 -1.395806521146290e+01 -1.396778253779794e+01 -1.397750397065719e+01 -1.398722951016200e+01 + -1.399695915643360e+01 -1.400669290959319e+01 -1.401643076976188e+01 -1.402617273706065e+01 -1.403591881161048e+01 + -1.404566899353222e+01 -1.405542328294662e+01 -1.406518167997440e+01 -1.407494418473618e+01 -1.408471079735248e+01 + -1.409448151794377e+01 -1.410425634663043e+01 -1.411403528353276e+01 -1.412381832877095e+01 -1.413360548246518e+01 + -1.414339674473550e+01 -1.415319211570187e+01 -1.416299159548421e+01 -1.417279518420232e+01 -1.418260288197596e+01 + -1.419241468892480e+01 -1.420223060516842e+01 -1.421205063082630e+01 -1.422187476601790e+01 -1.423170301086254e+01 + -1.424153536547952e+01 -1.425137182998800e+01 -1.426121240450711e+01 -1.427105708915588e+01 -1.428090588405325e+01 + -1.429075878931812e+01 -1.430061580506928e+01 -1.431047693142544e+01 -1.432034216850525e+01 -1.433021151642728e+01 + -1.434008497530999e+01 -1.434996254527182e+01 -1.435984422643108e+01 -1.436973001890603e+01 -1.437961992281484e+01 + -1.438951393827559e+01 -1.439941206540634e+01 -1.440931430432499e+01 -1.441922065514942e+01 -1.442913111799744e+01 + -1.443904569298670e+01 -1.444896438023490e+01 -1.445888717985955e+01 -1.446881409197816e+01 -1.447874511670810e+01 + -1.448868025416669e+01 -1.449861950447122e+01 -1.450856286773882e+01 -1.451851034408659e+01 -1.452846193363157e+01 + -1.453841763649066e+01 -1.454837745278077e+01 -1.455834138261865e+01 -1.456830942612103e+01 -1.457828158340454e+01 + -1.458825785458573e+01 -1.459823823978110e+01 -1.460822273910704e+01 -1.461821135267989e+01 -1.462820408061589e+01 + -1.463820092303125e+01 -1.464820188004203e+01 -1.465820695176426e+01 -1.466821613831393e+01 -1.467822943980689e+01 + -1.468824685635894e+01 -1.469826838808580e+01 -1.470829403510313e+01 -1.471832379752650e+01 -1.472835767547138e+01 + -1.473839566905324e+01 -1.474843777838742e+01 -1.475848400358915e+01 -1.476853434477367e+01 -1.477858880205607e+01 + -1.478864737555144e+01 -1.479871006537472e+01 -1.480877687164081e+01 -1.481884779446456e+01 -1.482892283396069e+01 + -1.483900199024388e+01 -1.484908526342874e+01 -1.485917265362979e+01 -1.486926416096146e+01 -1.487935978553816e+01 + -1.488945952747421e+01 -1.489956338688379e+01 -1.490967136388107e+01 -1.491978345858015e+01 -1.492989967109500e+01 + -1.494002000153960e+01 -1.495014445002777e+01 -1.496027301667331e+01 -1.497040570158993e+01 -1.498054250489127e+01 + -1.499068342669090e+01 -1.500082846710230e+01 -1.501097762623890e+01 -1.502113090421404e+01 -1.503128830114098e+01 + -1.504144981713293e+01 -1.505161545230301e+01 -1.506178520676428e+01 -1.507195908062970e+01 -1.508213707401220e+01 + -1.509231918702461e+01 -1.510250541977967e+01 -1.511269577239009e+01 -1.512289024496847e+01 -1.513308883762737e+01 + -1.514329155047923e+01 -1.515349838363646e+01 -1.516370933721139e+01 -1.517392441131628e+01 -1.518414360606331e+01 + -1.519436692156458e+01 -1.520459435793212e+01 -1.521482591527789e+01 -1.522506159371381e+01 -1.523530139335167e+01 + -1.524554531430324e+01 -1.525579335668019e+01 -1.526604552059410e+01 -1.527630180615655e+01 -1.528656221347897e+01 + -1.529682674267275e+01 -1.530709539384921e+01 -1.531736816711961e+01 -1.532764506259512e+01 -1.533792608038684e+01 + -1.534821122060578e+01 -1.535850048336294e+01 -1.536879386876919e+01 -1.537909137693534e+01 -1.538939300797218e+01 + -1.539969876199036e+01 -1.541000863910047e+01 -1.542032263941310e+01 -1.543064076303865e+01 -1.544096301008754e+01 + -1.545128938067011e+01 -1.546161987489659e+01 -1.547195449287719e+01 -1.548229323472200e+01 -1.549263610054108e+01 + -1.550298309044438e+01 -1.551333420454181e+01 -1.552368944294321e+01 -1.553404880575833e+01 -1.554441229309687e+01 + -1.555477990506846e+01 -1.556515164178263e+01 -1.557552750334888e+01 -1.558590748987663e+01 -1.559629160147516e+01 + -1.560667983825384e+01 -1.561707220032180e+01 -1.562746868778818e+01 -1.563786930076209e+01 -1.564827403935249e+01 + -1.565868290366830e+01 -1.566909589381839e+01 -1.567951300991154e+01 -1.568993425205647e+01 -1.570035962036184e+01 + -1.571078911493622e+01 -1.572122273588812e+01 -1.573166048332596e+01 -1.574210235735813e+01 -1.575254835809295e+01 + -1.576299848563865e+01 -1.577345274010339e+01 -1.578391112159525e+01 -1.579437363022230e+01 -1.580484026609246e+01 + -1.581531102931364e+01 -1.582578591999366e+01 -1.583626493824028e+01 -1.584674808416118e+01 -1.585723535786400e+01 + -1.586772675945627e+01 -1.587822228904548e+01 -1.588872194673904e+01 -1.589922573264433e+01 -1.590973364686858e+01 + -1.592024568951901e+01 -1.593076186070280e+01 -1.594128216052700e+01 -1.595180658909860e+01 -1.596233514652459e+01 + -1.597286783291180e+01 -1.598340464836704e+01 -1.599394559299707e+01 -1.600449066690856e+01 -1.601503987020810e+01 + -1.602559320300223e+01 -1.603615066539742e+01 -1.604671225750006e+01 -1.605727797941650e+01 -1.606784783125301e+01 + -1.607842181311579e+01 -1.608899992511097e+01 -1.609958216734461e+01 -1.611016853992270e+01 -1.612075904295123e+01 + -1.613135367653603e+01 -1.614195244078288e+01 -1.615255533579753e+01 -1.616316236168567e+01 -1.617377351855289e+01 + -1.618438880650469e+01 -1.619500822564661e+01 -1.620563177608400e+01 -1.621625945792220e+01 -1.622689127126649e+01 + -1.623752721622208e+01 -1.624816729289409e+01 -1.625881150138761e+01 -1.626945984180765e+01 -1.628011231425912e+01 + -1.629076891884693e+01 -1.630142965567586e+01 -1.631209452485069e+01 -1.632276352647606e+01 -1.633343666065660e+01 + -1.634411392749686e+01 -1.635479532710131e+01 -1.636548085957436e+01 -1.637617052502041e+01 -1.638686432354368e+01 + -1.639756225524843e+01 -1.640826432023882e+01 -1.641897051861891e+01 -1.642968085049275e+01 -1.644039531596428e+01 + -1.645111391513741e+01 -1.646183664811596e+01 -1.647256351500370e+01 -1.648329451590436e+01 -1.649402965092154e+01 + -1.650476892015881e+01 -1.651551232371968e+01 -1.652625986170761e+01 -1.653701153422597e+01 -1.654776734137807e+01 + -1.655852728326716e+01 -1.656929135999644e+01 -1.658005957166901e+01 -1.659083191838794e+01 -1.660160840025621e+01 + -1.661238901737675e+01 -1.662317376985244e+01 -1.663396265778607e+01 -1.664475568128038e+01 -1.665555284043803e+01 + -1.666635413536163e+01 -1.667715956615375e+01 -1.668796913291686e+01 -1.669878283575336e+01 -1.670960067476562e+01 + -1.672042265005593e+01 -1.673124876172653e+01 -1.674207900987955e+01 -1.675291339461713e+01 -1.676375191604129e+01 + -1.677459457425399e+01 -1.678544136935714e+01 -1.679629230145262e+01 -1.680714737064221e+01 -1.681800657702761e+01 + -1.682886992071048e+01 -1.683973740179243e+01 -1.685060902037498e+01 -1.686148477655961e+01 -1.687236467044772e+01 + -1.688324870214066e+01 -1.689413687173972e+01 -1.690502917934610e+01 -1.691592562506099e+01 -1.692682620898545e+01 + -1.693773093122051e+01 -1.694863979186718e+01 -1.695955279102634e+01 -1.697046992879882e+01 -1.698139120528543e+01 + -1.699231662058690e+01 -1.700324617480385e+01 -1.701417986803690e+01 -1.702511770038659e+01 -1.703605967195339e+01 + -1.704700578283770e+01 -1.705795603313987e+01 -1.706891042296021e+01 -1.707986895239892e+01 -1.709083162155618e+01 + -1.710179843053209e+01 -1.711276937942668e+01 -1.712374446833993e+01 -1.713472369737176e+01 -1.714570706662205e+01 + -1.715669457619057e+01 -1.716768622617706e+01 -1.717868201668118e+01 -1.718968194780258e+01 -1.720068601964076e+01 + -1.721169423229525e+01 -1.722270658586545e+01 -1.723372308045074e+01 -1.724474371615045e+01 -1.725576849306378e+01 + -1.726679741128994e+01 -1.727783047092806e+01 -1.728886767207717e+01 -1.729990901483631e+01 -1.731095449930440e+01 + -1.732200412558034e+01 -1.733305789376294e+01 -1.734411580395096e+01 -1.735517785624309e+01 -1.736624405073797e+01 + -1.737731438753420e+01 -1.738838886673029e+01 -1.739946748842468e+01 -1.741055025271579e+01 -1.742163715970200e+01 + -1.743272820948149e+01 -1.744382340215253e+01 -1.745492273781330e+01 -1.746602621656188e+01 -1.747713383849628e+01 + -1.748824560371452e+01 -1.749936151231451e+01 -1.751048156439410e+01 -1.752160576005110e+01 -1.753273409938323e+01 + -1.754386658248820e+01 -1.755500320946361e+01 -1.756614398040702e+01 -1.757728889541596e+01 -1.758843795458785e+01 + -1.759959115802007e+01 -1.761074850580996e+01 -1.762190999805478e+01 -1.763307563485174e+01 -1.764424541629797e+01 + -1.765541934249057e+01 -1.766659741352658e+01 -1.767777962950295e+01 -1.768896599051661e+01 -1.770015649666441e+01 + -1.771135114804312e+01 -1.772254994474948e+01 -1.773375288688022e+01 -1.774495997453189e+01 -1.775617120780110e+01 + -1.776738658678431e+01 -1.777860611157798e+01 -1.778982978227850e+01 -1.780105759898218e+01 -1.781228956178530e+01 + -1.782352567078408e+01 -1.783476592607465e+01 -1.784601032775310e+01 -1.785725887591547e+01 -1.786851157065773e+01 + -1.787976841207583e+01 -1.789102940026558e+01 -1.790229453532283e+01 -1.791356381734330e+01 -1.792483724642267e+01 + -1.793611482265659e+01 -1.794739654614061e+01 -1.795868241697024e+01 -1.796997243524098e+01 -1.798126660104817e+01 + -1.799256491448719e+01 -1.800386737565330e+01 -1.801517398464174e+01 -1.802648474154767e+01 -1.803779964646620e+01 + -1.804911869949240e+01 -1.806044190072123e+01 -1.807176925024766e+01 -1.808310074816659e+01 -1.809443639457279e+01 + -1.810577618956107e+01 -1.811712013322612e+01 -1.812846822566259e+01 -1.813982046696510e+01 -1.815117685722819e+01 + -1.816253739654631e+01 -1.817390208501391e+01 -1.818527092272536e+01 -1.819664390977498e+01 -1.820802104625699e+01 + -1.821940233226562e+01 -1.823078776789503e+01 -1.824217735323927e+01 -1.825357108839237e+01 -1.826496897344833e+01 + -1.827637100850105e+01 -1.828777719364440e+01 -1.829918752897218e+01 -1.831060201457814e+01 -1.832202065055599e+01 + -1.833344343699933e+01 -1.834487037400176e+01 -1.835630146165681e+01 -1.836773670005793e+01 -1.837917608929855e+01 + -1.839061962947201e+01 -1.840206732067164e+01 -1.841351916299065e+01 -1.842497515652225e+01 -1.843643530135957e+01 + -1.844789959759567e+01 -1.845936804532361e+01 -1.847084064463633e+01 -1.848231739562675e+01 -1.849379829838772e+01 + -1.850528335301203e+01 -1.851677255959244e+01 -1.852826591822165e+01 -1.853976342899227e+01 -1.855126509199690e+01 + -1.856277090732804e+01 -1.857428087507818e+01 -1.858579499533974e+01 -1.859731326820503e+01 -1.860883569376641e+01 + -1.862036227211610e+01 -1.863189300334630e+01 -1.864342788754917e+01 -1.865496692481676e+01 -1.866651011524111e+01 + -1.867805745891420e+01 -1.868960895592794e+01 -1.870116460637422e+01 -1.871272441034482e+01 -1.872428836793151e+01 + -1.873585647922603e+01 -1.874742874431993e+01 -1.875900516330489e+01 -1.877058573627242e+01 -1.878217046331398e+01 + -1.879375934452104e+01 -1.880535237998496e+01 -1.881694956979709e+01 -1.882855091404863e+01 -1.884015641283084e+01 + -1.885176606623487e+01 -1.886337987435184e+01 -1.887499783727278e+01 -1.888661995508869e+01 -1.889824622789052e+01 + -1.890987665576915e+01 -1.892151123881543e+01 -1.893314997712013e+01 -1.894479287077399e+01 -1.895643991986767e+01 + -1.896809112449181e+01 -1.897974648473697e+01 -1.899140600069364e+01 -1.900306967245233e+01 -1.901473750010340e+01 + -1.902640948373722e+01 -1.903808562344410e+01 -1.904976591931430e+01 -1.906145037143798e+01 -1.907313897990529e+01 + -1.908483174480633e+01 -1.909652866623112e+01 -1.910822974426967e+01 -1.911993497901187e+01 -1.913164437054759e+01 + -1.914335791896669e+01 -1.915507562435895e+01 -1.916679748681404e+01 -1.917852350642165e+01 -1.919025368327139e+01 + -1.920198801745281e+01 -1.921372650905543e+01 -1.922546915816869e+01 -1.923721596488198e+01 -1.924896692928468e+01 + -1.926072205146606e+01 -1.927248133151537e+01 -1.928424476952181e+01 -1.929601236557450e+01 -1.930778411976254e+01 + -1.931956003217496e+01 -1.933134010290073e+01 -1.934312433202880e+01 -1.935491271964804e+01 -1.936670526584726e+01 + -1.937850197071525e+01 -1.939030283434073e+01 -1.940210785681236e+01 -1.941391703821875e+01 -1.942573037864850e+01 + -1.943754787819008e+01 -1.944936953693195e+01 -1.946119535496258e+01 -1.947302533237027e+01 -1.948485946924335e+01 + -1.949669776567007e+01 -1.950854022173860e+01 -1.952038683753714e+01 -1.953223761315377e+01 -1.954409254867653e+01 + -1.955595164419345e+01 -1.956781489979243e+01 -1.957968231556140e+01 -1.959155389158818e+01 -1.960342962796057e+01 + -1.961530952476630e+01 -1.962719358209308e+01 -1.963908180002853e+01 -1.965097417866025e+01 -1.966287071807577e+01 + -1.967477141836255e+01 -1.968667627960809e+01 -1.969858530189970e+01 -1.971049848532474e+01 -1.972241582997051e+01 + -1.973433733592421e+01 -1.974626300327305e+01 -1.975819283210412e+01 -1.977012682250453e+01 -1.978206497456128e+01 + -1.979400728836138e+01 -1.980595376399175e+01 -1.981790440153923e+01 -1.982985920109068e+01 -1.984181816273287e+01 + -1.985378128655253e+01 -1.986574857263631e+01 -1.987772002107083e+01 -1.988969563194270e+01 -1.990167540533842e+01 + -1.991365934134447e+01 -1.992564744004727e+01 -1.993763970153319e+01 -1.994963612588854e+01 -1.996163671319962e+01 + -1.997364146355264e+01 -1.998565037703377e+01 -1.999766345372915e+01 -2.000968069372482e+01 -2.002170209710683e+01 + -2.003372766396113e+01 -2.004575739437366e+01 -2.005779128843031e+01 -2.006982934621686e+01 -2.008187156781912e+01 + -2.009391795332281e+01 -2.010596850281361e+01 -2.011802321637712e+01 -2.013008209409893e+01 -2.014214513606458e+01 + -2.015421234235953e+01 -2.016628371306920e+01 -2.017835924827902e+01 -2.019043894807426e+01 -2.020252281254022e+01 + -2.021461084176214e+01 -2.022670303582521e+01 -2.023879939481453e+01 -2.025089991881520e+01 -2.026300460791226e+01 + -2.027511346219072e+01 -2.028722648173548e+01 -2.029934366663143e+01 -2.031146501696343e+01 -2.032359053281625e+01 + -2.033572021427463e+01 -2.034785406142328e+01 -2.035999207434686e+01 -2.037213425312991e+01 -2.038428059785702e+01 + -2.039643110861268e+01 -2.040858578548134e+01 -2.042074462854739e+01 -2.043290763789519e+01 -2.044507481360905e+01 + -2.045724615577321e+01 -2.046942166447188e+01 -2.048160133978925e+01 -2.049378518180939e+01 -2.050597319061637e+01 + -2.051816536629423e+01 -2.053036170892692e+01 -2.054256221859834e+01 -2.055476689539240e+01 -2.056697573939288e+01 + -2.057918875068358e+01 -2.059140592934823e+01 -2.060362727547048e+01 -2.061585278913398e+01 -2.062808247042230e+01 + -2.064031631941898e+01 -2.065255433620753e+01 -2.066479652087135e+01 -2.067704287349386e+01 -2.068929339415838e+01 + -2.070154808294823e+01 -2.071380693994664e+01 -2.072606996523682e+01 -2.073833715890192e+01 -2.075060852102504e+01 + -2.076288405168924e+01 -2.077516375097752e+01 -2.078744761897289e+01 -2.079973565575823e+01 -2.081202786141640e+01 + -2.082432423603023e+01 -2.083662477968250e+01 -2.084892949245593e+01 -2.086123837443321e+01 -2.087355142569699e+01 + -2.088586864632980e+01 -2.089819003641422e+01 -2.091051559603275e+01 -2.092284532526780e+01 -2.093517922420180e+01 + -2.094751729291707e+01 -2.095985953149594e+01 -2.097220594002067e+01 -2.098455651857344e+01 -2.099691126723646e+01 + -2.100927018609180e+01 -2.102163327522155e+01 -2.103400053470775e+01 -2.104637196463234e+01 -2.105874756507729e+01 + -2.107112733612447e+01 -2.108351127785571e+01 -2.109589939035282e+01 -2.110829167369750e+01 -2.112068812797150e+01 + -2.113308875325646e+01 -2.114549354963396e+01 -2.115790251718560e+01 -2.117031565599286e+01 -2.118273296613722e+01 + -2.119515444770009e+01 -2.120758010076286e+01 -2.122000992540686e+01 -2.123244392171337e+01 -2.124488208976363e+01 + -2.125732442963882e+01 -2.126977094142008e+01 -2.128222162518853e+01 -2.129467648102522e+01 -2.130713550901114e+01 + -2.131959870922728e+01 -2.133206608175453e+01 -2.134453762667377e+01 -2.135701334406582e+01 -2.136949323401145e+01 + -2.138197729659143e+01 -2.139446553188642e+01 -2.140695793997705e+01 -2.141945452094395e+01 -2.143195527486767e+01 + -2.144446020182869e+01 -2.145696930190748e+01 -2.146948257518445e+01 -2.148200002173999e+01 -2.149452164165442e+01 + -2.150704743500799e+01 -2.151957740188097e+01 -2.153211154235353e+01 -2.154464985650582e+01 -2.155719234441795e+01 + -2.156973900616996e+01 -2.158228984184187e+01 -2.159484485151362e+01 -2.160740403526515e+01 -2.161996739317633e+01 + -2.163253492532698e+01 -2.164510663179689e+01 -2.165768251266581e+01 -2.167026256801343e+01 -2.168284679791940e+01 + -2.169543520246331e+01 -2.170802778172475e+01 -2.172062453578319e+01 -2.173322546471815e+01 -2.174583056860904e+01 + -2.175843984753521e+01 -2.177105330157605e+01 -2.178367093081085e+01 -2.179629273531881e+01 -2.180891871517916e+01 + -2.182154887047106e+01 -2.183418320127365e+01 -2.184682170766598e+01 -2.185946438972706e+01 -2.187211124753590e+01 + -2.188476228117145e+01 -2.189741749071255e+01 -2.191007687623811e+01 -2.192274043782690e+01 -2.193540817555769e+01 + -2.194808008950921e+01 -2.196075617976013e+01 -2.197343644638909e+01 -2.198612088947466e+01 -2.199880950909536e+01 + -2.201150230532973e+01 -2.202419927825622e+01 -2.203690042795324e+01 -2.204960575449914e+01 -2.206231525797226e+01 + -2.207502893845087e+01 -2.208774679601321e+01 -2.210046883073749e+01 -2.211319504270184e+01 -2.212592543198436e+01 + -2.213865999866312e+01 -2.215139874281616e+01 -2.216414166452144e+01 -2.217688876385687e+01 -2.218964004090036e+01 + -2.220239549572977e+01 -2.221515512842288e+01 -2.222791893905746e+01 -2.224068692771121e+01 -2.225345909446181e+01 + -2.226623543938691e+01 -2.227901596256408e+01 -2.229180066407084e+01 -2.230458954398474e+01 -2.231738260238319e+01 + -2.233017983934365e+01 -2.234298125494343e+01 -2.235578684925991e+01 -2.236859662237037e+01 -2.238141057435201e+01 + -2.239422870528208e+01 -2.240705101523771e+01 -2.241987750429605e+01 -2.243270817253411e+01 -2.244554302002896e+01 + -2.245838204685760e+01 -2.247122525309695e+01 -2.248407263882387e+01 -2.249692420411528e+01 -2.250977994904799e+01 + -2.252263987369876e+01 -2.253550397814432e+01 -2.254837226246134e+01 -2.256124472672649e+01 -2.257412137101638e+01 + -2.258700219540754e+01 -2.259988719997652e+01 -2.261277638479978e+01 -2.262566974995376e+01 -2.263856729551485e+01 + -2.265146902155941e+01 -2.266437492816374e+01 -2.267728501540410e+01 -2.269019928335671e+01 -2.270311773209779e+01 + -2.271604036170341e+01 -2.272896717224975e+01 -2.274189816381280e+01 -2.275483333646860e+01 -2.276777269029312e+01 + -2.278071622536228e+01 -2.279366394175199e+01 -2.280661583953809e+01 -2.281957191879638e+01 -2.283253217960263e+01 + -2.284549662203253e+01 -2.285846524616180e+01 -2.287143805206607e+01 -2.288441503982093e+01 -2.289739620950192e+01 + -2.291038156118458e+01 -2.292337109494437e+01 -2.293636481085672e+01 -2.294936270899702e+01 -2.296236478944061e+01 + -2.297537105226282e+01 -2.298838149753889e+01 -2.300139612534404e+01 -2.301441493575349e+01 -2.302743792884234e+01 + -2.304046510468572e+01 -2.305349646335867e+01 -2.306653200493623e+01 -2.307957172949336e+01 -2.309261563710498e+01 + -2.310566372784601e+01 -2.311871600179128e+01 -2.313177245901563e+01 -2.314483309959382e+01 -2.315789792360058e+01 + -2.317096693111059e+01 -2.318404012219852e+01 -2.319711749693895e+01 -2.321019905540647e+01 -2.322328479767561e+01 + -2.323637472382083e+01 -2.324946883391661e+01 -2.326256712803733e+01 -2.327566960625736e+01 -2.328877626865102e+01 + -2.330188711529259e+01 -2.331500214625633e+01 -2.332812136161644e+01 -2.334124476144705e+01 -2.335437234582229e+01 + -2.336750411481627e+01 -2.338064006850303e+01 -2.339378020695653e+01 -2.340692453025074e+01 -2.342007303845959e+01 + -2.343322573165697e+01 -2.344638260991669e+01 -2.345954367331259e+01 -2.347270892191841e+01 -2.348587835580782e+01 + -2.349905197505456e+01 -2.351222977973224e+01 -2.352541176991446e+01 -2.353859794567478e+01 -2.355178830708672e+01 + -2.356498285422376e+01 -2.357818158715934e+01 -2.359138450596683e+01 -2.360459161071962e+01 -2.361780290149102e+01 + -2.363101837835428e+01 -2.364423804138269e+01 -2.365746189064944e+01 -2.367068992622763e+01 -2.368392214819045e+01 + -2.369715855661094e+01 -2.371039915156216e+01 -2.372364393311708e+01 -2.373689290134870e+01 -2.375014605632993e+01 + -2.376340339813362e+01 -2.377666492683266e+01 -2.378993064249982e+01 -2.380320054520788e+01 -2.381647463502954e+01 + -2.382975291203750e+01 -2.384303537630443e+01 -2.385632202790291e+01 -2.386961286690548e+01 -2.388290789338473e+01 + -2.389620710741313e+01 -2.390951050906306e+01 -2.392281809840703e+01 -2.393612987551737e+01 -2.394944584046639e+01 + -2.396276599332641e+01 -2.397609033416966e+01 -2.398941886306839e+01 -2.400275158009476e+01 -2.401608848532087e+01 + -2.402942957881890e+01 -2.404277486066081e+01 -2.405612433091868e+01 -2.406947798966452e+01 -2.408283583697019e+01 + -2.409619787290764e+01 -2.410956409754875e+01 -2.412293451096532e+01 -2.413630911322914e+01 -2.414968790441197e+01 + -2.416307088458552e+01 -2.417645805382147e+01 -2.418984941219141e+01 -2.420324495976698e+01 -2.421664469661973e+01 + -2.423004862282117e+01 -2.424345673844275e+01 -2.425686904355595e+01 -2.427028553823217e+01 -2.428370622254276e+01 + -2.429713109655905e+01 -2.431056016035234e+01 -2.432399341399387e+01 -2.433743085755482e+01 -2.435087249110641e+01 + -2.436431831471977e+01 -2.437776832846597e+01 -2.439122253241606e+01 -2.440468092664110e+01 -2.441814351121206e+01 + -2.443161028619986e+01 -2.444508125167544e+01 -2.445855640770962e+01 -2.447203575437328e+01 -2.448551929173719e+01 + -2.449900701987211e+01 -2.451249893884875e+01 -2.452599504873780e+01 -2.453949534960988e+01 -2.455299984153561e+01 + -2.456650852458554e+01 -2.458002139883023e+01 -2.459353846434012e+01 -2.460705972118571e+01 -2.462058516943738e+01 + -2.463411480916553e+01 -2.464764864044048e+01 -2.466118666333255e+01 -2.467472887791197e+01 -2.468827528424903e+01 + -2.470182588241386e+01 -2.471538067247662e+01 -2.472893965450746e+01 -2.474250282857641e+01 -2.475607019475353e+01 + -2.476964175310885e+01 -2.478321750371228e+01 -2.479679744663381e+01 -2.481038158194328e+01 -2.482396990971055e+01 + -2.483756243000544e+01 -2.485115914289775e+01 -2.486476004845720e+01 -2.487836514675349e+01 -2.489197443785630e+01 + -2.490558792183528e+01 -2.491920559875997e+01 -2.493282746869996e+01 -2.494645353172479e+01 -2.496008378790389e+01 + -2.497371823730673e+01 -2.498735688000273e+01 -2.500099971606127e+01 -2.501464674555166e+01 -2.502829796854320e+01 + -2.504195338510515e+01 -2.505561299530673e+01 -2.506927679921718e+01 -2.508294479690558e+01 -2.509661698844103e+01 + -2.511029337389272e+01 -2.512397395332960e+01 -2.513765872682068e+01 -2.515134769443495e+01 -2.516504085624134e+01 + -2.517873821230874e+01 -2.519243976270600e+01 -2.520614550750195e+01 -2.521985544676539e+01 -2.523356958056503e+01 + -2.524728790896962e+01 -2.526101043204782e+01 -2.527473714986825e+01 -2.528846806249956e+01 -2.530220317001030e+01 + -2.531594247246897e+01 -2.532968596994411e+01 -2.534343366250413e+01 -2.535718555021750e+01 -2.537094163315259e+01 + -2.538470191137773e+01 -2.539846638496126e+01 -2.541223505397144e+01 -2.542600791847653e+01 -2.543978497854471e+01 + -2.545356623424417e+01 -2.546735168564306e+01 -2.548114133280943e+01 -2.549493517581139e+01 -2.550873321471695e+01 + -2.552253544959407e+01 -2.553634188051073e+01 -2.555015250753488e+01 -2.556396733073435e+01 -2.557778635017700e+01 + -2.559160956593068e+01 -2.560543697806314e+01 -2.561926858664212e+01 -2.563310439173529e+01 -2.564694439341039e+01 + -2.566078859173501e+01 -2.567463698677673e+01 -2.568848957860316e+01 -2.570234636728179e+01 -2.571620735288014e+01 + -2.573007253546564e+01 -2.574394191510572e+01 -2.575781549186777e+01 -2.577169326581913e+01 -2.578557523702712e+01 + -2.579946140555903e+01 -2.581335177148208e+01 -2.582724633486350e+01 -2.584114509577047e+01 -2.585504805427009e+01 + -2.586895521042949e+01 -2.588286656431574e+01 -2.589678211599587e+01 -2.591070186553685e+01 -2.592462581300569e+01 + -2.593855395846929e+01 -2.595248630199453e+01 -2.596642284364830e+01 -2.598036358349740e+01 -2.599430852160862e+01 + -2.600825765804873e+01 -2.602221099288441e+01 -2.603616852618238e+01 -2.605013025800926e+01 -2.606409618843168e+01 + -2.607806631751622e+01 -2.609204064532942e+01 -2.610601917193777e+01 -2.612000189740776e+01 -2.613398882180584e+01 + -2.614797994519840e+01 -2.616197526765180e+01 -2.617597478923238e+01 -2.618997851000648e+01 -2.620398643004031e+01 + -2.621799854940012e+01 -2.623201486815213e+01 -2.624603538636246e+01 -2.626006010409728e+01 -2.627408902142266e+01 + -2.628812213840468e+01 -2.630215945510933e+01 -2.631620097160262e+01 -2.633024668795051e+01 -2.634429660421891e+01 + -2.635835072047372e+01 -2.637240903678078e+01 -2.638647155320592e+01 -2.640053826981492e+01 -2.641460918667354e+01 + -2.642868430384748e+01 -2.644276362140242e+01 -2.645684713940401e+01 -2.647093485791788e+01 -2.648502677700959e+01 + -2.649912289674470e+01 -2.651322321718873e+01 -2.652732773840713e+01 -2.654143646046535e+01 -2.655554938342882e+01 + -2.656966650736290e+01 -2.658378783233291e+01 -2.659791335840421e+01 -2.661204308564203e+01 -2.662617701411162e+01 + -2.664031514387820e+01 -2.665445747500694e+01 -2.666860400756296e+01 -2.668275474161138e+01 -2.669690967721731e+01 + -2.671106881444569e+01 -2.672523215336161e+01 -2.673939969403001e+01 -2.675357143651582e+01 -2.676774738088396e+01 + -2.678192752719928e+01 -2.679611187552664e+01 -2.681030042593083e+01 -2.682449317847661e+01 -2.683869013322872e+01 + -2.685289129025187e+01 -2.686709664961073e+01 -2.688130621136993e+01 -2.689551997559407e+01 -2.690973794234772e+01 + -2.692396011169542e+01 -2.693818648370168e+01 -2.695241705843095e+01 -2.696665183594765e+01 -2.698089081631622e+01 + -2.699513399960103e+01 -2.700938138586637e+01 -2.702363297517659e+01 -2.703788876759596e+01 -2.705214876318866e+01 + -2.706641296201895e+01 -2.708068136415098e+01 -2.709495396964889e+01 -2.710923077857680e+01 -2.712351179099876e+01 + -2.713779700697879e+01 -2.715208642658092e+01 -2.716638004986914e+01 -2.718067787690738e+01 -2.719497990775952e+01 + -2.720928614248944e+01 -2.722359658116101e+01 -2.723791122383802e+01 -2.725223007058424e+01 -2.726655312146341e+01 + -2.728088037653925e+01 -2.729521183587545e+01 -2.730954749953563e+01 -2.732388736758342e+01 -2.733823144008240e+01 + -2.735257971709608e+01 -2.736693219868803e+01 -2.738128888492171e+01 -2.739564977586055e+01 -2.741001487156796e+01 + -2.742438417210737e+01 -2.743875767754211e+01 -2.745313538793548e+01 -2.746751730335079e+01 -2.748190342385128e+01 + -2.749629374950018e+01 -2.751068828036066e+01 -2.752508701649591e+01 -2.753948995796905e+01 -2.755389710484315e+01 + -2.756830845718126e+01 -2.758272401504645e+01 -2.759714377850172e+01 -2.761156774760998e+01 -2.762599592243420e+01 + -2.764042830303727e+01 -2.765486488948205e+01 -2.766930568183139e+01 -2.768375068014808e+01 -2.769819988449490e+01 + -2.771265329493459e+01 -2.772711091152985e+01 -2.774157273434337e+01 -2.775603876343777e+01 -2.777050899887569e+01 + -2.778498344071966e+01 -2.779946208903228e+01 -2.781394494387606e+01 -2.782843200531343e+01 -2.784292327340690e+01 + -2.785741874821889e+01 -2.787191842981172e+01 -2.788642231824782e+01 -2.790093041358950e+01 -2.791544271589903e+01 + -2.792995922523869e+01 -2.794447994167069e+01 -2.795900486525725e+01 -2.797353399606052e+01 -2.798806733414265e+01 + -2.800260487956574e+01 -2.801714663239184e+01 -2.803169259268302e+01 -2.804624276050129e+01 -2.806079713590860e+01 + -2.807535571896690e+01 -2.808991850973810e+01 -2.810448550828411e+01 -2.811905671466677e+01 -2.813363212894789e+01 + -2.814821175118929e+01 -2.816279558145268e+01 -2.817738361979981e+01 -2.819197586629237e+01 -2.820657232099202e+01 + -2.822117298396042e+01 -2.823577785525915e+01 -2.825038693494977e+01 -2.826500022309382e+01 -2.827961771975282e+01 + -2.829423942498824e+01 -2.830886533886155e+01 -2.832349546143411e+01 -2.833812979276735e+01 -2.835276833292260e+01 + -2.836741108196119e+01 -2.838205803994442e+01 -2.839670920693353e+01 -2.841136458298974e+01 -2.842602416817427e+01 + -2.844068796254828e+01 -2.845535596617291e+01 -2.847002817910925e+01 -2.848470460141837e+01 -2.849938523316133e+01 + -2.851407007439914e+01 -2.852875912519278e+01 -2.854345238560320e+01 -2.855814985569130e+01 -2.857285153551803e+01 + -2.858755742514416e+01 -2.860226752463057e+01 -2.861698183403805e+01 -2.863170035342737e+01 -2.864642308285926e+01 + -2.866115002239442e+01 -2.867588117209353e+01 -2.869061653201725e+01 -2.870535610222617e+01 -2.872009988278089e+01 + -2.873484787374193e+01 -2.874960007516984e+01 -2.876435648712514e+01 -2.877911710966824e+01 -2.879388194285957e+01 + -2.880865098675957e+01 -2.882342424142859e+01 -2.883820170692696e+01 -2.885298338331501e+01 -2.886776927065301e+01 + -2.888255936900120e+01 -2.889735367841981e+01 -2.891215219896903e+01 -2.892695493070900e+01 -2.894176187369987e+01 + -2.895657302800172e+01 -2.897138839367463e+01 -2.898620797077864e+01 -2.900103175937375e+01 -2.901585975951993e+01 + -2.903069197127715e+01 -2.904552839470532e+01 -2.906036902986429e+01 -2.907521387681397e+01 -2.909006293561415e+01 + -2.910491620632466e+01 -2.911977368900527e+01 -2.913463538371567e+01 -2.914950129051561e+01 -2.916437140946474e+01 + 7.449748552403716e+00 7.440274286952747e+00 7.430808310268183e+00 7.421350618650946e+00 7.411901208401943e+00 + 7.402460075822085e+00 7.393027217212294e+00 7.383602628873483e+00 7.374186307106561e+00 7.364778248212446e+00 + 7.355378448492054e+00 7.345986904246303e+00 7.336603611776096e+00 7.327228567382356e+00 7.317861767365994e+00 + 7.308503208027930e+00 7.299152885669068e+00 7.289810796590328e+00 7.280476937092629e+00 7.271151303476885e+00 + 7.261833892043997e+00 7.252524699094894e+00 7.243223720930485e+00 7.233930953851689e+00 7.224646394159410e+00 + 7.215370038154571e+00 7.206101882138086e+00 7.196841922410868e+00 7.187590155273826e+00 7.178346577027882e+00 + 7.169111183973944e+00 7.159883972412940e+00 7.150664938645765e+00 7.141454078973349e+00 7.132251389696595e+00 + 7.123056867116428e+00 7.113870507533756e+00 7.104692307249493e+00 7.095522262564555e+00 7.086360369779857e+00 + 7.077206625196316e+00 7.068061025114840e+00 7.058923565836346e+00 7.049794243661749e+00 7.040673054891966e+00 + 7.031559995827907e+00 7.022455062770489e+00 7.013358252020626e+00 7.004269559879234e+00 6.995188982647222e+00 + 6.986116516625509e+00 6.977052158115008e+00 6.967995903416638e+00 6.958947748831303e+00 6.949907690659927e+00 + 6.940875725203417e+00 6.931851848762698e+00 6.922836057638674e+00 6.913828348132264e+00 6.904828716544380e+00 + 6.895837159175943e+00 6.886853672327859e+00 6.877878252301045e+00 6.868910895396416e+00 6.859951597914893e+00 + 6.851000356157376e+00 6.842057166424788e+00 6.833122025018049e+00 6.824194928238065e+00 6.815275872385751e+00 + 6.806364853762022e+00 6.797461868667795e+00 6.788566913403985e+00 6.779679984271501e+00 6.770801077571264e+00 + 6.761930189604184e+00 6.753067316671174e+00 6.744212455073155e+00 6.735365601111038e+00 6.726526751085733e+00 + 6.717695901298162e+00 6.708873048049234e+00 6.700058187639864e+00 6.691251316370970e+00 6.682452430543458e+00 + 6.673661526458257e+00 6.664878600416264e+00 6.656103648718408e+00 6.647336667665596e+00 6.638577653558744e+00 + 6.629826602698767e+00 6.621083511386575e+00 6.612348375923091e+00 6.603621192609224e+00 6.594901957745887e+00 + 6.586190667633998e+00 6.577487318574468e+00 6.568791906868217e+00 6.560104428816153e+00 6.551424880719193e+00 + 6.542753258878250e+00 6.534089559594239e+00 6.525433779168082e+00 6.516785913900680e+00 6.508145960092954e+00 + 6.499513914045822e+00 6.490889772060197e+00 6.482273530436986e+00 6.473665185477110e+00 6.465064733481483e+00 + 6.456472170751022e+00 6.447887493586633e+00 6.439310698289239e+00 6.430741781159745e+00 6.422180738499080e+00 + 6.413627566608140e+00 6.405082261787855e+00 6.396544820339130e+00 6.388015238562886e+00 6.379493512760035e+00 + 6.370979639231489e+00 6.362473614278163e+00 6.353975434200977e+00 6.345485095300834e+00 6.337002593878659e+00 + 6.328527926235364e+00 6.320061088671859e+00 6.311602077489063e+00 6.303150888987892e+00 6.294707519469250e+00 + 6.286271965234064e+00 6.277844222583243e+00 6.269424287817700e+00 6.261012157238352e+00 6.252607827146113e+00 + 6.244211293841897e+00 6.235822553626615e+00 6.227441602801187e+00 6.219068437666524e+00 6.210703054523544e+00 + 6.202345449673155e+00 6.193995619416278e+00 6.185653560053824e+00 6.177319267886713e+00 6.168992739215846e+00 + 6.160673970342149e+00 6.152362957566535e+00 6.144059697189917e+00 6.135764185513209e+00 6.127476418837322e+00 + 6.119196393463177e+00 6.110924105691685e+00 6.102659551823761e+00 6.094402728160317e+00 6.086153631002272e+00 + 6.077912256650539e+00 6.069678601406028e+00 6.061452661569658e+00 6.053234433442346e+00 6.045023913324998e+00 + 6.036821097518535e+00 6.028625982323868e+00 6.020438564041912e+00 6.012258838973590e+00 6.004086803419803e+00 + 5.995922453681469e+00 5.987765786059505e+00 5.979616796854827e+00 5.971475482368347e+00 5.963341838900981e+00 + 5.955215862753640e+00 5.947097550227241e+00 5.938986897622698e+00 5.930883901240926e+00 5.922788557382836e+00 + 5.914700862349350e+00 5.906620812441375e+00 5.898548403959829e+00 5.890483633205628e+00 5.882426496479678e+00 + 5.874376990082901e+00 5.866335110316212e+00 5.858300853480523e+00 5.850274215876746e+00 5.842255193805799e+00 + 5.834243783568593e+00 5.826239981466046e+00 5.818243783799075e+00 5.810255186868586e+00 5.802274186975501e+00 + 5.794300780420730e+00 5.786334963505190e+00 5.778376732529792e+00 5.770426083795454e+00 5.762483013603089e+00 + 5.754547518253611e+00 5.746619594047938e+00 5.738699237286976e+00 5.730786444271647e+00 5.722881211302861e+00 + 5.714983534681539e+00 5.707093410708588e+00 5.699210835684924e+00 5.691335805911462e+00 5.683468317689121e+00 + 5.675608367318810e+00 5.667755951101442e+00 5.659911065337940e+00 5.652073706329210e+00 5.644243870376168e+00 + 5.636421553779730e+00 5.628606752840809e+00 5.620799463860322e+00 5.612999683139186e+00 5.605207406978303e+00 + 5.597422631678601e+00 5.589645353540985e+00 5.581875568866377e+00 5.574113273955689e+00 5.566358465109827e+00 + 5.558611138629720e+00 5.550871290816275e+00 5.543138917970402e+00 5.535414016393023e+00 5.527696582385046e+00 + 5.519986612247392e+00 5.512284102280971e+00 5.504589048786700e+00 5.496901448065488e+00 5.489221296418261e+00 + 5.481548590145919e+00 5.473883325549383e+00 5.466225498929572e+00 5.458575106587391e+00 5.450932144823761e+00 + 5.443296609939598e+00 5.435668498235811e+00 5.428047806013317e+00 5.420434529573027e+00 5.412828665215861e+00 + 5.405230209242731e+00 5.397639157954551e+00 5.390055507652236e+00 5.382479254636699e+00 5.374910395208857e+00 + 5.367348925669623e+00 5.359794842319912e+00 5.352248141460633e+00 5.344708819392708e+00 5.337176872417052e+00 + 5.329652296834572e+00 5.322135088946189e+00 5.314625245052812e+00 5.307122761455358e+00 5.299627634454744e+00 + 5.292139860351884e+00 5.284659435447683e+00 5.277186356043069e+00 5.269720618438948e+00 5.262262218936239e+00 + 5.254811153835849e+00 5.247367419438702e+00 5.239931012045707e+00 5.232501927957779e+00 5.225080163475835e+00 + 5.217665714900781e+00 5.210258578533542e+00 5.202858750675028e+00 5.195466227626151e+00 5.188081005687826e+00 + 5.180703081160972e+00 5.173332450346505e+00 5.165969109545332e+00 5.158613055058364e+00 5.151264283186531e+00 + 5.143922790230733e+00 5.136588572491892e+00 5.129261626270917e+00 5.121941947868726e+00 5.114629533586237e+00 + 5.107324379724356e+00 5.100026482584002e+00 5.092735838466089e+00 5.085452443671536e+00 5.078176294501248e+00 + 5.070907387256145e+00 5.063645718237141e+00 5.056391283745152e+00 5.049144080081089e+00 5.041904103545868e+00 + 5.034671350440405e+00 5.027445817065611e+00 5.020227499722402e+00 5.013016394711695e+00 5.005812498334395e+00 + 4.998615806891434e+00 4.991426316683708e+00 4.984244024012141e+00 4.977068925177646e+00 4.969901016481134e+00 + 4.962740294223531e+00 4.955586754705736e+00 4.948440394228673e+00 4.941301209093250e+00 4.934169195600390e+00 + 4.927044350050998e+00 4.919926668745995e+00 4.912816147986291e+00 4.905712784072808e+00 4.898616573306450e+00 + 4.891527511988138e+00 4.884445596418789e+00 4.877370822899310e+00 4.870303187730615e+00 4.863242687213626e+00 + 4.856189317649255e+00 4.849143075338413e+00 4.842103956582020e+00 4.835071957680982e+00 4.828047074936220e+00 + 4.821029304648649e+00 4.814018643119177e+00 4.807015086648722e+00 4.800018631538205e+00 4.793029274088528e+00 + 4.786047010600616e+00 4.779071837375377e+00 4.772103750713725e+00 4.765142746916582e+00 4.758188822284858e+00 + 4.751241973119460e+00 4.744302195721311e+00 4.737369486391331e+00 4.730443841430419e+00 4.723525257139500e+00 + 4.716613729819484e+00 4.709709255771290e+00 4.702811831295831e+00 4.695921452694015e+00 4.689038116266763e+00 + 4.682161818314993e+00 4.675292555139608e+00 4.668430323041531e+00 4.661575118321675e+00 4.654726937280952e+00 + 4.647885776220280e+00 4.641051631440568e+00 4.634224499242733e+00 4.627404375927694e+00 4.620591257796361e+00 + 4.613785141149650e+00 4.606986022288469e+00 4.600193897513741e+00 4.593408763126378e+00 4.586630615427295e+00 + 4.579859450717403e+00 4.573095265297614e+00 4.566338055468856e+00 4.559587817532028e+00 4.552844547788051e+00 + 4.546108242537840e+00 4.539378898082311e+00 4.532656510722372e+00 4.525941076758944e+00 4.519232592492937e+00 + 4.512531054225266e+00 4.505836458256852e+00 4.499148800888596e+00 4.492468078421423e+00 4.485794287156247e+00 + 4.479127423393980e+00 4.472467483435537e+00 4.465814463581832e+00 4.459168360133774e+00 4.452529169392290e+00 + 4.445896887658285e+00 4.439271511232674e+00 4.432653036416372e+00 4.426041459510297e+00 4.419436776815360e+00 + 4.412838984632476e+00 4.406248079262558e+00 4.399664057006524e+00 4.393086914165290e+00 4.386516647039763e+00 + 4.379953251930861e+00 4.373396725139497e+00 4.366847062966593e+00 4.360304261713053e+00 4.353768317679795e+00 + 4.347239227167735e+00 4.340716986477791e+00 4.334201591910872e+00 4.327693039767889e+00 4.321191326349767e+00 + 4.314696447957408e+00 4.308208400891736e+00 4.301727181453665e+00 4.295252785944103e+00 4.288785210663970e+00 + 4.282324451914175e+00 4.275870505995640e+00 4.269423369209271e+00 4.262983037855993e+00 4.256549508236708e+00 + 4.250122776652339e+00 4.243702839403795e+00 4.237289692791999e+00 4.230883333117855e+00 4.224483756682286e+00 + 4.218090959786202e+00 4.211704938730516e+00 4.205325689816143e+00 4.198953209343999e+00 4.192587493615001e+00 + 4.186228538930060e+00 4.179876341590091e+00 4.173530897896007e+00 4.167192204148724e+00 4.160860256649157e+00 + 4.154535051698218e+00 4.148216585596824e+00 4.141904854645890e+00 4.135599855146328e+00 4.129301583399053e+00 + 4.123010035704979e+00 4.116725208365024e+00 4.110447097680097e+00 4.104175699951115e+00 4.097911011478995e+00 + 4.091653028564644e+00 4.085401747508985e+00 4.079157164612928e+00 4.072919276177387e+00 4.066688078503279e+00 + 4.060463567891515e+00 4.054245740643011e+00 4.048034593058679e+00 4.041830121439440e+00 4.035632322086207e+00 + 4.029441191299887e+00 4.023256725381402e+00 4.017078920631661e+00 4.010907773351583e+00 4.004743279842081e+00 + 3.998585436404068e+00 3.992434239338456e+00 3.986289684946170e+00 3.980151769528111e+00 3.974020489385205e+00 + 3.967895840818355e+00 3.961777820128482e+00 3.955666423616504e+00 3.949561647583328e+00 3.943463488329874e+00 + 3.937371942157053e+00 3.931287005365778e+00 3.925208674256968e+00 3.919136945131536e+00 3.913071814290392e+00 + 3.907013278034458e+00 3.900961332664644e+00 3.894915974481865e+00 3.888877199787032e+00 3.882845004881065e+00 + 3.876819386064878e+00 3.870800339639380e+00 3.864787861905489e+00 3.858781949164122e+00 3.852782597716192e+00 + 3.846789803862609e+00 3.840803563904289e+00 3.834823874142153e+00 3.828850730877108e+00 3.822884130410067e+00 + 3.816924069041952e+00 3.810970543073673e+00 3.805023548806148e+00 3.799083082540284e+00 3.793149140577000e+00 + 3.787221719217213e+00 3.781300814761833e+00 3.775386423511777e+00 3.769478541767957e+00 3.763577165831291e+00 + 3.757682292002690e+00 3.751793916583069e+00 3.745912035873344e+00 3.740036646174429e+00 3.734167743787238e+00 + 3.728305325012684e+00 3.722449386151683e+00 3.716599923505150e+00 3.710756933373999e+00 3.704920412059142e+00 + 3.699090355861497e+00 3.693266761081976e+00 3.687449624021495e+00 3.681638940980968e+00 3.675834708261307e+00 + 3.670036922163429e+00 3.664245578988249e+00 3.658460675036681e+00 3.652682206609637e+00 3.646910170008033e+00 + 3.641144561532785e+00 3.635385377484806e+00 3.629632614165008e+00 3.623886267874308e+00 3.618146334913622e+00 + 3.612412811583862e+00 3.606685694185942e+00 3.600964979020779e+00 3.595250662389285e+00 3.589542740592375e+00 + 3.583841209930963e+00 3.578146066705964e+00 3.572457307218293e+00 3.566774927768866e+00 3.561098924658592e+00 + 3.555429294188389e+00 3.549766032659172e+00 3.544109136371855e+00 3.538458601627350e+00 3.532814424726574e+00 + 3.527176601970442e+00 3.521545129659867e+00 3.515920004095763e+00 3.510301221579043e+00 3.504688778410627e+00 + 3.499082670891423e+00 3.493482895322350e+00 3.487889448004318e+00 3.482302325238245e+00 3.476721523325045e+00 + 3.471147038565632e+00 3.465578867260920e+00 3.460017005711823e+00 3.454461450219256e+00 3.448912197084135e+00 + 3.443369242607371e+00 3.437832583089881e+00 3.432302214832579e+00 3.426778134136379e+00 3.421260337302195e+00 + 3.415748820630941e+00 3.410243580423535e+00 3.404744612980886e+00 3.399251914603913e+00 3.393765481593527e+00 + 3.388285310250645e+00 3.382811396876181e+00 3.377343737771047e+00 3.371882329236159e+00 3.366427167572434e+00 + 3.360978249080783e+00 3.355535570062121e+00 3.350099126817363e+00 3.344668915647423e+00 3.339244932853216e+00 + 3.333827174735655e+00 3.328415637595656e+00 3.323010317734133e+00 3.317611211452001e+00 3.312218315050173e+00 + 3.306831624829563e+00 3.301451137091087e+00 3.296076848135660e+00 3.290708754264196e+00 3.285346851777606e+00 + 3.279991136976808e+00 3.274641606162716e+00 3.269298255636246e+00 3.263961081698308e+00 3.258630080649819e+00 + 3.253305248791694e+00 3.247986582424847e+00 3.242674077850190e+00 3.237367731368640e+00 3.232067539281112e+00 + 3.226773497888519e+00 3.221485603491775e+00 3.216203852391795e+00 3.210928240889494e+00 3.205658765285786e+00 + 3.200395421881585e+00 3.195138206977806e+00 3.189887116875363e+00 3.184642147875171e+00 3.179403296278142e+00 + 3.174170558385193e+00 3.168943930497239e+00 3.163723408915193e+00 3.158508989939969e+00 3.153300669872482e+00 + 3.148098445013646e+00 3.142902311664378e+00 3.137712266125587e+00 3.132528304698192e+00 3.127350423683106e+00 + 3.122178619381244e+00 3.117012888093520e+00 3.111853226120847e+00 3.106699629764141e+00 3.101552095324317e+00 + 3.096410619102289e+00 3.091275197398968e+00 3.086145826515274e+00 3.081022502752118e+00 3.075905222410415e+00 + 3.070793981791079e+00 3.065688777195026e+00 3.060589604923169e+00 3.055496461276423e+00 3.050409342555702e+00 + 3.045328245061919e+00 3.040253165095992e+00 3.035184098958834e+00 3.030121042951357e+00 3.025063993374477e+00 + 3.020012946529110e+00 3.014967898716169e+00 3.009928846236568e+00 3.004895785391221e+00 2.999868712481045e+00 + 2.994847623806951e+00 2.989832515669856e+00 2.984823384370673e+00 2.979820226210319e+00 2.974823037489704e+00 + 2.969831814509746e+00 2.964846553571357e+00 2.959867250975452e+00 2.954893903022948e+00 2.949926506014757e+00 + 2.944965056251793e+00 2.940009550034971e+00 2.935059983665206e+00 2.930116353443413e+00 2.925178655670504e+00 + 2.920246886647395e+00 2.915321042675001e+00 2.910401120054236e+00 2.905487115086013e+00 2.900579024071247e+00 + 2.895676843310854e+00 2.890780569105748e+00 2.885890197756841e+00 2.881005725565050e+00 2.876127148831289e+00 + 2.871254463856472e+00 2.866387666941512e+00 2.861526754387325e+00 2.856671722494826e+00 2.851822567564928e+00 + 2.846979285898546e+00 2.842141873796594e+00 2.837310327559988e+00 2.832484643489642e+00 2.827664817886467e+00 + 2.822850847051381e+00 2.818042727285298e+00 2.813240454889132e+00 2.808444026163797e+00 2.803653437410207e+00 + 2.798868684929278e+00 2.794089765021923e+00 2.789316673989057e+00 2.784549408131594e+00 2.779787963750449e+00 + 2.775032337146536e+00 2.770282524620770e+00 2.765538522474064e+00 2.760800327007334e+00 2.756067934521495e+00 + 2.751341341317459e+00 2.746620543696142e+00 2.741905537958456e+00 2.737196320405320e+00 2.732492887337646e+00 + 2.727795235056346e+00 2.723103359862337e+00 2.718417258056534e+00 2.713736925939851e+00 2.709062359813200e+00 + 2.704393555977499e+00 2.699730510733661e+00 2.695073220382600e+00 2.690421681225228e+00 2.685775889562464e+00 + 2.681135841695221e+00 2.676501533924412e+00 2.671872962550951e+00 2.667250123875755e+00 2.662633014199737e+00 + 2.658021629823811e+00 2.653415967048891e+00 2.648816022175893e+00 2.644221791505731e+00 2.639633271339319e+00 + 2.635050457977570e+00 2.630473347721400e+00 2.625901936871724e+00 2.621336221729456e+00 2.616776198595510e+00 + 2.612221863770800e+00 2.607673213556241e+00 2.603130244252748e+00 2.598592952161234e+00 2.594061333582615e+00 + 2.589535384817803e+00 2.585015102167715e+00 2.580500481933265e+00 2.575991520415365e+00 2.571488213914932e+00 + 2.566990558732881e+00 2.562498551170123e+00 2.558012187527575e+00 2.553531464106150e+00 2.549056377206766e+00 + 2.544586923130332e+00 2.540123098177766e+00 2.535664898649981e+00 2.531212320847892e+00 2.526765361072414e+00 + 2.522324015624460e+00 2.517888280804945e+00 2.513458152914784e+00 2.509033628254891e+00 2.504614703126180e+00 + 2.500201373829565e+00 2.495793636665962e+00 2.491391487936285e+00 2.486994923941447e+00 2.482603940982363e+00 + 2.478218535359948e+00 2.473838703375117e+00 2.469464441328785e+00 2.465095745521862e+00 2.460732612255267e+00 + 2.456375037829913e+00 2.452023018546713e+00 2.447676550706584e+00 2.443335630610438e+00 2.439000254559191e+00 + 2.434670418853758e+00 2.430346119795050e+00 2.426027353683985e+00 2.421714116821476e+00 2.417406405508439e+00 + 2.413104216045784e+00 2.408807544734430e+00 2.404516387875289e+00 2.400230741769278e+00 2.395950602717307e+00 + 2.391675967020294e+00 2.387406830979154e+00 2.383143190894800e+00 2.378885043068143e+00 2.374632383800102e+00 + 2.370385209391590e+00 2.366143516143523e+00 2.361907300356812e+00 2.357676558332373e+00 2.353451286371123e+00 + 2.349231480773973e+00 2.345017137841837e+00 2.340808253875633e+00 2.336604825176272e+00 2.332406848044670e+00 + 2.328214318781741e+00 2.324027233688400e+00 2.319845589065560e+00 2.315669381214138e+00 2.311498606435046e+00 + 2.307333261029199e+00 2.303173341297511e+00 2.299018843540898e+00 2.294869764060274e+00 2.290726099156551e+00 + 2.286587845130646e+00 2.282454998283473e+00 2.278327554915946e+00 2.274205511328979e+00 2.270088863823487e+00 + 2.265977608700385e+00 2.261871742260587e+00 2.257771260805005e+00 2.253676160634556e+00 2.249586438050156e+00 + 2.245502089352716e+00 2.241423110843152e+00 2.237349498822377e+00 2.233281249591307e+00 2.229218359450858e+00 + 2.225160824701939e+00 2.221108641645470e+00 2.217061806582363e+00 2.213020315813533e+00 2.208984165639893e+00 + 2.204953352362359e+00 2.200927872281845e+00 2.196907721699265e+00 2.192892896915533e+00 2.188883394231564e+00 + 2.184879209948273e+00 2.180880340366575e+00 2.176886781787383e+00 2.172898530511610e+00 2.168915582840173e+00 + 2.164937935073986e+00 2.160965583513963e+00 2.156998524461018e+00 2.153036754216065e+00 2.149080269080021e+00 + 2.145129065353798e+00 2.141183139338310e+00 2.137242487334472e+00 2.133307105643201e+00 2.129376990565408e+00 + 2.125452138402008e+00 2.121532545453916e+00 2.117618208022047e+00 2.113709122407316e+00 2.109805284910635e+00 + 2.105906691832920e+00 2.102013339475084e+00 2.098125224138045e+00 2.094242342122713e+00 2.090364689730004e+00 + 2.086492263260834e+00 2.082625059016116e+00 2.078763073296764e+00 2.074906302403693e+00 2.071054742637817e+00 + 2.067208390300052e+00 2.063367241691310e+00 2.059531293112506e+00 2.055700540864557e+00 2.051874981248373e+00 + 2.048054610564874e+00 2.044239425114969e+00 2.040429421199575e+00 2.036624595119606e+00 2.032824943175977e+00 + 2.029030461669602e+00 2.025241146901394e+00 2.021456995172270e+00 2.017678002783143e+00 2.013904166034927e+00 + 2.010135481228537e+00 2.006371944664888e+00 2.002613552644893e+00 1.998860301469467e+00 1.995112187439525e+00 + 1.991369206855981e+00 1.987631356019750e+00 1.983898631231745e+00 1.980171028792880e+00 1.976448545004073e+00 + 1.972731176166235e+00 1.969018918580281e+00 1.965311768547126e+00 1.961609722367685e+00 1.957912776342872e+00 + 1.954220926773600e+00 1.950534169960784e+00 1.946852502205340e+00 1.943175919808181e+00 1.939504419070222e+00 + 1.935837996292376e+00 1.932176647775559e+00 1.928520369820686e+00 1.924869158728670e+00 1.921223010800425e+00 + 1.917581922336866e+00 1.913945889638909e+00 1.910314909007466e+00 1.906688976743452e+00 1.903068089147782e+00 + 1.899452242521371e+00 1.895841433165133e+00 1.892235657379981e+00 1.888634911466830e+00 1.885039191726596e+00 + 1.881448494460193e+00 1.877862815968533e+00 1.874282152552532e+00 1.870706500513106e+00 1.867135856151167e+00 + 1.863570215767631e+00 1.860009575663410e+00 1.856453932139422e+00 1.852903281496580e+00 1.849357620035796e+00 + 1.845816944057987e+00 1.842281249864067e+00 1.838750533754951e+00 1.835224792031551e+00 1.831704020994784e+00 + 1.828188216945564e+00 1.824677376184804e+00 1.821171495013419e+00 1.817670569732324e+00 1.814174596642433e+00 + 1.810683572044661e+00 1.807197492239921e+00 1.803716353529129e+00 1.800240152213198e+00 1.796768884593044e+00 + 1.793302546969580e+00 1.789841135643720e+00 1.786384646916382e+00 1.782933077088475e+00 1.779486422460917e+00 + 1.776044679334622e+00 1.772607844010504e+00 1.769175912789478e+00 1.765748881972457e+00 1.762326747860356e+00 + 1.758909506754091e+00 1.755497154954573e+00 1.752089688762719e+00 1.748687104479443e+00 1.745289398405660e+00 + 1.741896566842283e+00 1.738508606090227e+00 1.735125512450407e+00 1.731747282223736e+00 1.728373911711131e+00 + 1.725005397213503e+00 1.721641735031770e+00 1.718282921466842e+00 1.714928952819638e+00 1.711579825391069e+00 + 1.708235535482052e+00 1.704896079393500e+00 1.701561453426327e+00 1.698231653881448e+00 1.694906677059778e+00 + 1.691586519262230e+00 1.688271176789721e+00 1.684960645943161e+00 1.681654923023470e+00 1.678354004331557e+00 + 1.675057886168340e+00 1.671766564834732e+00 1.668480036631648e+00 1.665198297860002e+00 1.661921344820709e+00 + 1.658649173814682e+00 1.655381781142836e+00 1.652119163106087e+00 1.648861316005347e+00 1.645608236141532e+00 + 1.642359919815556e+00 1.639116363328334e+00 1.635877562980778e+00 1.632643515073806e+00 1.629414215908330e+00 + 1.626189661785266e+00 1.622969849005526e+00 1.619754773870027e+00 1.616544432679681e+00 1.613338821735404e+00 + 1.610137937338110e+00 1.606941775788715e+00 1.603750333388130e+00 1.600563606437273e+00 1.597381591237055e+00 + 1.594204284088393e+00 1.591031681292200e+00 1.587863779149392e+00 1.584700573960881e+00 1.581542062027584e+00 + 1.578388239650413e+00 1.575239103130285e+00 1.572094648768112e+00 1.568954872864810e+00 1.565819771721292e+00 + 1.562689341638474e+00 1.559563578917269e+00 1.556442479858593e+00 1.553326040763358e+00 1.550214257932481e+00 + 1.547107127666874e+00 1.544004646267455e+00 1.540906810035134e+00 1.537813615270829e+00 1.534725058275451e+00 + 1.531641135349918e+00 1.528561842795142e+00 1.525487176912038e+00 1.522417134001521e+00 1.519351710364504e+00 + 1.516290902301904e+00 1.513234706114633e+00 1.510183118103607e+00 1.507136134569738e+00 1.504093751813943e+00 + 1.501055966137135e+00 1.498022773840230e+00 1.494994171224139e+00 1.491970154589780e+00 1.488950720238066e+00 + 1.485935864469912e+00 1.482925583586231e+00 1.479919873887939e+00 1.476918731675949e+00 1.473922153251177e+00 + 1.470930134914536e+00 1.467942672966941e+00 1.464959763709306e+00 1.461981403442546e+00 1.459007588467575e+00 + 1.456038315085308e+00 1.453073579596659e+00 1.450113378302542e+00 1.447157707503872e+00 1.444206563501563e+00 + 1.441259942596530e+00 1.438317841089686e+00 1.435380255281947e+00 1.432447181474228e+00 1.429518615967441e+00 + 1.426594555062502e+00 1.423674995060325e+00 1.420759932261824e+00 1.417849362967915e+00 1.414943283479510e+00 + 1.412041690097526e+00 1.409144579122876e+00 1.406251946856474e+00 1.403363789599235e+00 1.400480103652074e+00 + 1.397600885315904e+00 1.394726130891640e+00 1.391855836680197e+00 1.388989998982490e+00 1.386128614099431e+00 + 1.383271678331936e+00 1.380419187980920e+00 1.377571139347296e+00 1.374727528731979e+00 1.371888352435884e+00 + 1.369053606759924e+00 1.366223288005015e+00 1.363397392472070e+00 1.360575916462005e+00 1.357758856275733e+00 + 1.354946208214169e+00 1.352137968578227e+00 1.349334133668822e+00 1.346534699786868e+00 1.343739663233281e+00 + 1.340949020308972e+00 1.338162767314858e+00 1.335380900551853e+00 1.332603416320872e+00 1.329830310922827e+00 + 1.327061580658634e+00 1.324297221829209e+00 1.321537230735464e+00 1.318781603678314e+00 1.316030336958674e+00 + 1.313283426877458e+00 1.310540869735580e+00 1.307802661833956e+00 1.305068799473498e+00 1.302339278955123e+00 + 1.299614096579743e+00 1.296893248648275e+00 1.294176731461630e+00 1.291464541320726e+00 1.288756674526474e+00 + 1.286053127379792e+00 1.283353896181592e+00 1.280658977232788e+00 1.277968366834296e+00 1.275282061287031e+00 + 1.272600056891905e+00 1.269922349949834e+00 1.267248936761731e+00 1.264579813628513e+00 1.261914976851092e+00 + 1.259254422730384e+00 1.256598147567302e+00 1.253946147662761e+00 1.251298419317676e+00 1.248654958832961e+00 + 1.246015762509529e+00 1.243380826648297e+00 1.240750147550178e+00 1.238123721516086e+00 1.235501544846937e+00 + 1.232883613843643e+00 1.230269924807121e+00 1.227660474038283e+00 1.225055257838046e+00 1.222454272507322e+00 + 1.219857514347026e+00 1.217264979658074e+00 1.214676664741379e+00 1.212092565897855e+00 1.209512679428417e+00 + 1.206937001633980e+00 1.204365528815458e+00 1.201798257273765e+00 1.199235183309816e+00 1.196676303224525e+00 + 1.194121613318807e+00 1.191571109893574e+00 1.189024789249744e+00 1.186482647688230e+00 1.183944681509945e+00 + 1.181410887015806e+00 1.178881260506724e+00 1.176355798283617e+00 1.173834496647397e+00 1.171317351898979e+00 + 1.168804360339279e+00 1.166295518269209e+00 1.163790821989684e+00 1.161290267801620e+00 1.158793852005930e+00 + 1.156301570903528e+00 1.153813420795330e+00 1.151329397982248e+00 1.148849498765199e+00 1.146373719445096e+00 + 1.143902056322854e+00 1.141434505699387e+00 1.138971063875609e+00 1.136511727152436e+00 1.134056491830780e+00 + 1.131605354211558e+00 1.129158310595683e+00 1.126715357284069e+00 1.124276490577631e+00 1.121841706777284e+00 + 1.119411002183941e+00 1.116984373098518e+00 1.114561815821929e+00 1.112143326655087e+00 1.109728901898908e+00 + 1.107318537854306e+00 1.104912230822195e+00 1.102509977103490e+00 1.100111772999104e+00 1.097717614809954e+00 + 1.095327498836952e+00 1.092941421381013e+00 1.090559378743053e+00 1.088181367223984e+00 1.085807383124722e+00 + 1.083437422746181e+00 1.081071482389275e+00 1.078709558354920e+00 1.076351646944028e+00 1.073997744457514e+00 + 1.071647847196295e+00 1.069301951461282e+00 1.066960053553391e+00 1.064622149773536e+00 1.062288236422632e+00 + 1.059958309801594e+00 1.057632366211334e+00 1.055310401952769e+00 1.052992413326812e+00 1.050678396634377e+00 + 1.048368348176379e+00 1.046062264253734e+00 1.043760141167354e+00 1.041461975218154e+00 1.039167762707049e+00 + 1.036877499934953e+00 1.034591183202782e+00 1.032308808811448e+00 1.030030373061866e+00 1.027755872254951e+00 + 1.025485302691617e+00 1.023218660672779e+00 1.020955942499351e+00 1.018697144472247e+00 1.016442262892383e+00 + 1.014191294060671e+00 1.011944234278027e+00 1.009701079845365e+00 1.007461827063600e+00 1.005226472233646e+00 + 1.002995011656417e+00 1.000767441632828e+00 9.985437584637925e-01 9.963239584502256e-01 9.941080378930424e-01 + 9.918959930931555e-01 9.896878203514810e-01 9.874835159689328e-01 9.852830762464250e-01 9.830864974848722e-01 + 9.808937759851886e-01 9.787049080482891e-01 9.765198899750881e-01 9.743387180664996e-01 9.721613886234379e-01 + 9.699878979468179e-01 9.678182423375530e-01 9.656524180965596e-01 9.634904215247502e-01 9.613322489230397e-01 + 9.591778965923433e-01 9.570273608335744e-01 9.548806379476480e-01 9.527377242354788e-01 9.505986159979797e-01 + 9.484633095360669e-01 9.463318011506541e-01 9.442040871426552e-01 9.420801638129854e-01 9.399600274625590e-01 + 9.378436743922897e-01 9.357311009030933e-01 9.336223032958822e-01 9.315172778715727e-01 9.294160209310781e-01 + 9.273185287753134e-01 9.252247977051927e-01 9.231348240216304e-01 9.210486040255410e-01 9.189661340178386e-01 + 9.168874102994385e-01 9.148124291712543e-01 9.127411869342008e-01 9.106736798891917e-01 9.086099043371424e-01 + 9.065498565789665e-01 9.044935329155791e-01 9.024409296478941e-01 9.003920430768264e-01 8.983468695032898e-01 + 8.963054052281993e-01 8.942676465524687e-01 8.922335897770131e-01 8.902032312027457e-01 8.881765671305829e-01 + 8.861535938614371e-01 8.841343076962237e-01 8.821187049358574e-01 8.801067818812520e-01 8.780985348333220e-01 + 8.760939600929825e-01 8.740930539611460e-01 8.720958127387295e-01 8.701022327266454e-01 8.681123102258093e-01 + 8.661260415371346e-01 8.641434229615371e-01 8.621644507999294e-01 8.601891213532277e-01 8.582174309223449e-01 + 8.562493758081970e-01 8.542849523116970e-01 8.523241567337597e-01 8.503669853752996e-01 8.484134345372311e-01 + 8.464635005204693e-01 8.445171796259274e-01 8.425744681545208e-01 8.406353624071630e-01 8.386998586847694e-01 + 8.367679532882535e-01 8.348396425185304e-01 8.329149226765136e-01 8.309937900631190e-01 8.290762409792595e-01 + 8.271622717258510e-01 8.252518786038064e-01 8.233450579140407e-01 8.214418059574683e-01 8.195421190350044e-01 + 8.176459934475618e-01 8.157534254960568e-01 8.138644114814021e-01 8.119789477045131e-01 8.100970304663040e-01 + 8.082186560676892e-01 8.063438208095829e-01 8.044725209928998e-01 8.026047529185537e-01 8.007405128874603e-01 + 7.988797972005324e-01 7.970226021586858e-01 7.951689240628343e-01 7.933187592138922e-01 7.914721039127738e-01 + 7.896289544603945e-01 7.877893071576668e-01 7.859531583055075e-01 7.841205042048290e-01 7.822913411565466e-01 + 7.804656654615749e-01 7.786434734208276e-01 7.768247613352199e-01 7.750095255056657e-01 7.731977622330796e-01 + 7.713894678183758e-01 7.695846385624693e-01 7.677832707662735e-01 7.659853607307038e-01 7.641909047566739e-01 + 7.623998991450991e-01 7.606123401968925e-01 7.588282242129696e-01 7.570475474942442e-01 7.552703063416313e-01 + 7.534964970560447e-01 7.517261159383993e-01 7.499591592896085e-01 7.481956234105887e-01 7.464355046022522e-01 + 7.446787991655144e-01 7.429255034012903e-01 7.411756136104929e-01 7.394291260940373e-01 7.376860371528386e-01 + 7.359463430878098e-01 7.342100401998667e-01 7.324771247899226e-01 7.307475931588928e-01 7.290214416076909e-01 + 7.272986664372321e-01 7.255792639484301e-01 7.238632304421997e-01 7.221505622194553e-01 7.204412555811112e-01 + 7.187353068280817e-01 7.170327122612817e-01 7.153334681816251e-01 7.136375708900264e-01 7.119450166874005e-01 + 7.102558018746606e-01 7.085699227527229e-01 7.068873756225003e-01 7.052081567849077e-01 7.035322625408595e-01 + 7.018596891912705e-01 7.001904330370544e-01 6.985244903791261e-01 6.968618575183999e-01 6.952025307557902e-01 + 6.935465063922116e-01 6.918937807285782e-01 6.902443500658040e-01 6.885982107048049e-01 6.869553589464933e-01 + 6.853157910917854e-01 6.836795034415946e-01 6.820464922968359e-01 6.804167539584229e-01 6.787902847272709e-01 + 6.771670809042936e-01 6.755471387904058e-01 6.739304546865216e-01 6.723170248935564e-01 6.707068457124232e-01 + 6.690999134440370e-01 6.674962243893127e-01 6.658957748491637e-01 6.642985611245055e-01 6.627045795162517e-01 + 6.611138263253172e-01 6.595262978526160e-01 6.579419903990626e-01 6.563609002655720e-01 6.547830237530582e-01 + 6.532083571624350e-01 6.516368967946180e-01 6.500686389505204e-01 6.485035799310573e-01 6.469417160371433e-01 + 6.453830435696921e-01 6.438275588296184e-01 6.422752581178374e-01 6.407261377352623e-01 6.391801939828081e-01 + 6.376374231613895e-01 6.360978215719203e-01 6.345613855153154e-01 6.330281112924886e-01 6.314979952043547e-01 + 6.299710335518284e-01 6.284472226358236e-01 6.269265587572552e-01 6.254090382170371e-01 6.238946573160838e-01 + 6.223834123553103e-01 6.208752996356303e-01 6.193703154579584e-01 6.178684561232091e-01 6.163697179322969e-01 + 6.148740971861357e-01 6.133815901856408e-01 6.118921932317262e-01 6.104059026253058e-01 6.089227146672945e-01 + 6.074426256586074e-01 6.059656319001574e-01 6.044917296928599e-01 6.030209153376287e-01 6.015531851353793e-01 + 6.000885353870247e-01 5.986269623934806e-01 5.971684624556605e-01 5.957130318744794e-01 5.942606669508510e-01 + 5.928113639856905e-01 5.913651192799119e-01 5.899219291344294e-01 5.884817898501579e-01 5.870446977280120e-01 + 5.856106490689048e-01 5.841796401737523e-01 5.827516673434679e-01 5.813267268789667e-01 5.799048150811624e-01 + 5.784859282509699e-01 5.770700626893032e-01 5.756572146970776e-01 5.742473805752061e-01 5.728405566246045e-01 + 5.714367391461864e-01 5.700359244408664e-01 5.686381088095590e-01 5.672432885531783e-01 5.658514599726390e-01 + 5.644626193688556e-01 5.630767630427422e-01 5.616938872952135e-01 5.603139884271836e-01 5.589370627395670e-01 + 5.575631065332790e-01 5.561921161092321e-01 5.548240877683427e-01 5.534590178115237e-01 5.520969025396907e-01 + 5.507377382537572e-01 5.493815212546381e-01 5.480282478432474e-01 5.466779143205005e-01 5.453305169873102e-01 + 5.439860521445922e-01 5.426445160932605e-01 5.413059051342295e-01 5.399702155684138e-01 5.386374436967276e-01 + 5.373075858200851e-01 5.359806382394012e-01 5.346565972555897e-01 5.333354591695658e-01 5.320172202822432e-01 + 5.307018768945369e-01 5.293894253073609e-01 5.280798618216298e-01 5.267731827382577e-01 5.254693843581593e-01 + 5.241684629822485e-01 5.228704149114412e-01 5.215752364466499e-01 5.202829238887903e-01 5.189934735387761e-01 + 5.177068816975220e-01 5.164231446659431e-01 5.151422587449525e-01 5.138642202354651e-01 5.125890254383957e-01 + 5.113166706546586e-01 5.100471521851681e-01 5.087804663308382e-01 5.075166093925835e-01 5.062555776713192e-01 + 5.049973674679586e-01 5.037419750834171e-01 5.024893968186085e-01 5.012396289744471e-01 4.999926678518474e-01 + 4.987485097517243e-01 4.975071509749917e-01 4.962685878225641e-01 4.950328165953561e-01 4.937998335942819e-01 + 4.925696351202563e-01 4.913422174741932e-01 4.901175769570069e-01 4.888957098696128e-01 4.876766125129238e-01 + 4.864602811878558e-01 4.852467121953222e-01 4.840359018362380e-01 4.828278464115173e-01 4.816225422220748e-01 + 4.804199855688242e-01 4.792201727526811e-01 4.780231000745586e-01 4.768287638353720e-01 4.756371603360353e-01 + 4.744482858774630e-01 4.732621367605699e-01 4.720787092862697e-01 4.708979997554774e-01 4.697200044691071e-01 + 4.685447197280733e-01 4.673721418332906e-01 4.662022670856728e-01 4.650350917861351e-01 4.638706122355916e-01 + 4.627088247349563e-01 4.615497255851442e-01 4.603933110870692e-01 4.592395775416462e-01 4.580885212497894e-01 + 4.569401385124132e-01 4.557944256304316e-01 4.546513789047599e-01 4.535109946363119e-01 4.523732691260023e-01 + 4.512381986747452e-01 4.501057795834551e-01 4.489760081530464e-01 4.478488806844338e-01 4.467243934785310e-01 + 4.456025428362536e-01 4.444833250585150e-01 4.433667364462299e-01 4.422527733003126e-01 4.411414319216777e-01 + 4.400327086112395e-01 4.389265996699126e-01 4.378231013986111e-01 4.367222100982497e-01 4.356239220697426e-01 + 4.345282336140042e-01 4.334351410319494e-01 4.323446406244920e-01 4.312567286925470e-01 4.301714015370275e-01 + 4.290886554588498e-01 4.280084867589269e-01 4.269308917381735e-01 4.258558666975046e-01 4.247834079378339e-01 + 4.237135117600763e-01 4.226461744651459e-01 4.215813923539569e-01 4.205191617274245e-01 4.194594788864623e-01 + 4.184023401319854e-01 4.173477417649076e-01 4.162956800861436e-01 4.152461513966076e-01 4.141991519972147e-01 + 4.131546781888785e-01 4.121127262725138e-01 4.110732925490347e-01 4.100363733193558e-01 4.090019648843917e-01 + 4.079700635450567e-01 4.069406656022651e-01 4.059137673569312e-01 4.048893651099695e-01 4.038674551622949e-01 + 4.028480338148211e-01 4.018310973684630e-01 4.008166421241345e-01 3.998046643827505e-01 3.987951604452256e-01 + 3.977881266124734e-01 3.967835591854087e-01 3.957814544649460e-01 3.947818087519999e-01 3.937846183474847e-01 + 3.927898795523145e-01 3.917975886674035e-01 3.908077419936672e-01 3.898203358320190e-01 3.888353664833736e-01 + 3.878528302486455e-01 3.868727234287491e-01 3.858950423245988e-01 3.849197832371089e-01 3.839469424671938e-01 + 3.829765163157681e-01 3.820085010837457e-01 3.810428930720420e-01 3.800796885815709e-01 3.791188839132462e-01 + 3.781604753679830e-01 3.772044592466958e-01 3.762508318502983e-01 3.752995894797058e-01 3.743507284358322e-01 + 3.734042450195919e-01 3.724601355318995e-01 3.715183962736693e-01 3.705790235458156e-01 3.696420136492531e-01 + 3.687073628848959e-01 3.677750675536586e-01 3.668451239564555e-01 3.659175283942012e-01 3.649922771678101e-01 + 3.640693665781960e-01 3.631487929262743e-01 3.622305525129587e-01 3.613146416391638e-01 3.604010566058042e-01 + 3.594897937137940e-01 3.585808492640478e-01 3.576742195574801e-01 3.567699008950048e-01 3.558678895775370e-01 + 3.549681819059906e-01 3.540707741812804e-01 3.531756627043205e-01 3.522828437760255e-01 3.513923136973096e-01 + 3.505040687690875e-01 3.496181052922732e-01 3.487344195677817e-01 3.478530078965268e-01 3.469738665794233e-01 + 3.460969919173855e-01 3.452223802113278e-01 3.443500277621644e-01 3.434799308708103e-01 3.426120858381791e-01 + 3.417464889651861e-01 3.408831365527449e-01 3.400220249017705e-01 3.391631503131769e-01 3.383065090878786e-01 + 3.374520975267903e-01 3.365999119308261e-01 3.357499486009006e-01 3.349022038379281e-01 3.340566739428230e-01 + 3.332133552164996e-01 3.323722439598729e-01 3.315333364738562e-01 3.306966290593651e-01 3.298621180173132e-01 + 3.290297996486153e-01 3.281996702541857e-01 3.273717261349389e-01 3.265459635917890e-01 3.257223789256509e-01 + 3.249009684374384e-01 3.240817284280666e-01 3.232646551984494e-01 3.224497450495014e-01 3.216369942821369e-01 + 3.208263991972705e-01 3.200179560958164e-01 3.192116612786893e-01 3.184075110468030e-01 3.176055017010728e-01 + 3.168056295424124e-01 3.160078908717366e-01 3.152122819899595e-01 3.144187991979958e-01 3.136274387967596e-01 + 3.128381970871658e-01 3.120510703701280e-01 3.112660549465616e-01 3.104831471173802e-01 3.097023431834987e-01 + 3.089236394458313e-01 3.081470322052923e-01 3.073725177627965e-01 3.066000924192579e-01 3.058297524755912e-01 + 3.050614942327107e-01 3.042953139915308e-01 3.035312080529657e-01 3.027691727179303e-01 3.020092042873384e-01 + 3.012512990621051e-01 3.004954533431443e-01 2.997416634313705e-01 2.989899256276983e-01 2.982402362330419e-01 + 2.974925915483157e-01 2.967469878744344e-01 2.960034215123119e-01 2.952618887628632e-01 2.945223859270023e-01 + 2.937849093056438e-01 2.930494551997020e-01 2.923160199100915e-01 2.915845997377263e-01 2.908551909835214e-01 + 2.901277899483905e-01 2.894023929332488e-01 2.886789962390100e-01 2.879575961665890e-01 2.872381890169001e-01 + 2.865207710908574e-01 2.858053386893756e-01 2.850918881133691e-01 2.843804156637523e-01 2.836709176414396e-01 + 2.829633903473454e-01 2.822578300823839e-01 2.815542331474700e-01 2.808525958435175e-01 2.801529144714415e-01 + 2.794551853321557e-01 2.787594047265750e-01 2.780655689556137e-01 2.773736743201861e-01 2.766837171212067e-01 + 2.759956936595899e-01 2.753096002362500e-01 2.746254331521017e-01 2.739431887080590e-01 2.732628632050366e-01 + 2.725844529439489e-01 2.719079542257102e-01 2.712333633512349e-01 2.705606766214377e-01 2.698898903372325e-01 + 2.692210007995342e-01 2.685540043092568e-01 2.678888971673150e-01 2.672256756746232e-01 2.665643361320956e-01 + 2.659048748406468e-01 2.652472881011912e-01 2.645915722146429e-01 2.639377234819169e-01 2.632857382039271e-01 + 2.626356126815881e-01 2.619873432158144e-01 2.613409261075200e-01 2.606963576576199e-01 2.600536341670281e-01 + 2.594127519366592e-01 2.587737072674276e-01 2.581364964602477e-01 2.575011158160336e-01 2.568675616357003e-01 + 2.562358302201616e-01 2.556059178703324e-01 2.549778208871267e-01 2.543515355714593e-01 2.537270582242444e-01 + 2.531043851463964e-01 2.524835126388297e-01 2.518644370024590e-01 2.512471545381981e-01 2.506316615469620e-01 + 2.500179543296648e-01 2.494060291872211e-01 2.487958824205451e-01 2.481875103305514e-01 2.475809092181542e-01 + 2.469760753842682e-01 2.463730051298074e-01 2.457716947556867e-01 2.451721405628201e-01 2.445743388521223e-01 + 2.439782859245076e-01 2.433839780808904e-01 2.427914116221849e-01 2.422005828493060e-01 2.416114880631675e-01 + 2.410241235646844e-01 2.404384856547707e-01 2.398545706343409e-01 2.392723748043098e-01 2.386918944655910e-01 + 2.381131259190998e-01 2.375360654657500e-01 2.369607094064561e-01 2.363870540421329e-01 2.358150956736944e-01 + 2.352448306020550e-01 2.346762551281295e-01 2.341093655528317e-01 2.335441581770767e-01 2.329806293017783e-01 + 2.324187752278514e-01 2.318585922562102e-01 2.313000766877690e-01 2.307432248234422e-01 2.301880329641446e-01 + 2.296344974107901e-01 2.290826144642935e-01 2.285323804255690e-01 2.279837915955310e-01 2.274368442750941e-01 + 2.268915347651725e-01 2.263478593666807e-01 2.258058143805332e-01 2.252653961076440e-01 2.247266008489282e-01 + 2.241894249052996e-01 2.236538645776730e-01 2.231199161669626e-01 2.225875759740828e-01 2.220568402999481e-01 + 2.215277054454728e-01 2.210001677115715e-01 2.204742233991586e-01 2.199498688091483e-01 2.194271002424550e-01 + 2.189059139999935e-01 2.183863063826778e-01 2.178682736914224e-01 2.173518122271418e-01 2.168369182907504e-01 + 2.163235881831627e-01 2.158118182052928e-01 2.153016046580553e-01 2.147929438423646e-01 2.142858320591354e-01 + 2.137802656092816e-01 2.132762407937178e-01 2.127737539133585e-01 2.122728012691182e-01 2.117733791619111e-01 + 2.112754838926515e-01 2.107791117622541e-01 2.102842590716335e-01 2.097909221217034e-01 2.092990972133788e-01 + 2.088087806475738e-01 2.083199687252032e-01 2.078326577471809e-01 2.073468440144217e-01 2.068625238278398e-01 + 2.063796934883499e-01 2.058983492968659e-01 2.054184875543025e-01 2.049401045615742e-01 2.044631966195954e-01 + 2.039877600292805e-01 2.035137910915436e-01 2.030412861072994e-01 2.025702413774623e-01 2.021006532029468e-01 + 2.016325178846670e-01 2.011658317235376e-01 2.007005910204729e-01 2.002367920763874e-01 1.997744311921952e-01 + 1.993135046688110e-01 1.988540088071491e-01 1.983959399081242e-01 1.979392942726502e-01 1.974840682016419e-01 + 1.970302579960134e-01 1.965778599566796e-01 1.961268703845544e-01 1.956772855805524e-01 1.952291018455880e-01 + 1.947823154805758e-01 1.943369227864299e-01 1.938929200640649e-01 1.934503036143950e-01 1.930090697383351e-01 + 1.925692147367991e-01 1.921307349107015e-01 1.916936265609568e-01 1.912578859884797e-01 1.908235094941840e-01 + 1.903904933789845e-01 1.899588339437956e-01 1.895285274895317e-01 1.890995703171071e-01 1.886719587274362e-01 + 1.882456890214335e-01 1.878207575000134e-01 1.873971604640904e-01 1.869748942145787e-01 1.865539550523928e-01 + 1.861343392784472e-01 1.857160431936564e-01 1.852990630989344e-01 1.848833952951959e-01 1.844690360833552e-01 + 1.840559817643271e-01 1.836442286390254e-01 1.832337730083648e-01 1.828246111732597e-01 1.824167394346248e-01 + 1.820101540933740e-01 1.816048514504219e-01 1.812008278066830e-01 1.807980794630718e-01 1.803966027205025e-01 + 1.799963938798894e-01 1.795974492421472e-01 1.791997651081904e-01 1.788033377789329e-01 1.784081635552895e-01 + 1.780142387381745e-01 1.776215596285026e-01 1.772301225271878e-01 1.768399237351444e-01 1.764509595532873e-01 + 1.760632262825308e-01 1.756767202237890e-01 1.752914376779765e-01 1.749073749460077e-01 1.745245283287970e-01 + 1.741428941272591e-01 1.737624686423079e-01 1.733832481748580e-01 1.730052290258240e-01 1.726284074961202e-01 + 1.722527798866608e-01 1.718783424983605e-01 1.715050916321335e-01 1.711330235888945e-01 1.707621346695576e-01 + 1.703924211750373e-01 1.700238794062480e-01 1.696565056641043e-01 1.692902962495204e-01 1.689252474634106e-01 + 1.685613556066896e-01 1.681986169802718e-01 1.678370278850714e-01 1.674765846220029e-01 1.671172834919807e-01 + 1.667591207959194e-01 1.664020928347330e-01 1.660461959093362e-01 1.656914263206433e-01 1.653377803695690e-01 + 1.649852543570273e-01 1.646338445839328e-01 1.642835473511999e-01 1.639343589597431e-01 1.635862757104767e-01 + 1.632392939043150e-01 1.628934098421725e-01 1.625486198249637e-01 1.622049201536032e-01 1.618623071290049e-01 + 1.615207770520836e-01 1.611803262237535e-01 1.608409509449292e-01 1.605026475165248e-01 1.601654122394552e-01 + 1.598292414146343e-01 1.594941313429769e-01 1.591600783253971e-01 1.588270786628095e-01 1.584951286561284e-01 + 1.581642246062686e-01 1.578343628141438e-01 1.575055395806690e-01 1.571777512067583e-01 1.568509939933263e-01 + 1.565252642412873e-01 1.562005582515557e-01 1.558768723250459e-01 1.555542027626726e-01 1.552325458653497e-01 + 1.549118979339920e-01 1.545922552695137e-01 1.542736141728294e-01 1.539559709448533e-01 1.536393218865000e-01 + 1.533236632986837e-01 1.530089914823192e-01 1.526953027383204e-01 1.523825933676020e-01 1.520708596710784e-01 + 1.517600979496639e-01 1.514503045042732e-01 1.511414756358203e-01 1.508336076452198e-01 1.505266968333862e-01 + 1.502207395012339e-01 1.499157319496771e-01 1.496116704796303e-01 1.493085513920080e-01 1.490063709877247e-01 + 1.487051255676945e-01 1.484048114328320e-01 1.481054248840516e-01 1.478069622222679e-01 1.475094197483949e-01 + 1.472127937633473e-01 1.469170805680394e-01 1.466222764633858e-01 1.463283777503005e-01 1.460353807296983e-01 + 1.457432817024934e-01 1.454520769696005e-01 1.451617628319335e-01 1.448723355904073e-01 1.445837915459360e-01 + 1.442961269994343e-01 1.440093382518162e-01 1.437234216039965e-01 1.434383733568894e-01 1.431541898114094e-01 + 1.428708672684709e-01 1.425884020289881e-01 1.423067903938758e-01 1.420260286640481e-01 1.417461131404195e-01 + 1.414670401239045e-01 1.411888059154174e-01 1.409114068158726e-01 1.406348391261847e-01 1.403590991472678e-01 + 1.400841831800365e-01 1.398100875254052e-01 1.395368084842883e-01 1.392643423576002e-01 1.389926854462553e-01 + 1.387218340511681e-01 1.384517844732529e-01 1.381825330134241e-01 1.379140759725961e-01 1.376464096516834e-01 + 1.373795303516005e-01 1.371134343732616e-01 1.368481180175811e-01 1.365835775854735e-01 1.363198093778535e-01 + 1.360568096956349e-01 1.357945748397326e-01 1.355331011110607e-01 1.352723848105339e-01 1.350124222390664e-01 + 1.347532096975727e-01 1.344947434869671e-01 1.342370199081642e-01 1.339800352620783e-01 1.337237858496237e-01 + 1.334682679717150e-01 1.332134779292666e-01 1.329594120231927e-01 1.327060665544079e-01 1.324534378238265e-01 + 1.322015221323631e-01 1.319503157809320e-01 1.316998150704475e-01 1.314500163018241e-01 1.312009157759762e-01 + 1.309525097938183e-01 1.307047946562647e-01 1.304577666642297e-01 1.302114221186280e-01 1.299657573203739e-01 + 1.297207685703817e-01 1.294764521695659e-01 1.292328044188408e-01 1.289898216191211e-01 1.287475000713208e-01 + 1.285058360763546e-01 1.282648259351368e-01 1.280244659485820e-01 1.277847524176043e-01 1.275456816431183e-01 + 1.273072499260383e-01 1.270694535672789e-01 1.268322888677544e-01 1.265957521283791e-01 1.263598396500675e-01 + 1.261245477337342e-01 1.258898726802932e-01 1.256558107906592e-01 1.254223583657466e-01 1.251895117064698e-01 + 1.249572671137431e-01 1.247256208884810e-01 1.244945693315979e-01 1.242641087440081e-01 1.240342354266263e-01 + 1.238049456803666e-01 1.235762358061435e-01 1.233481021048715e-01 1.231205408774650e-01 1.228935484248383e-01 + 1.226671210479058e-01 1.224412550475821e-01 1.222159467247814e-01 1.219911923804183e-01 1.217669883154070e-01 + 1.215433308306620e-01 1.213202162270979e-01 1.210976408056288e-01 1.208756008671693e-01 1.206540927126337e-01 + 1.204331126429366e-01 1.202126569589921e-01 1.199927219617149e-01 1.197733039520192e-01 1.195543992308197e-01 + 1.193360040990304e-01 1.191181148575661e-01 1.189007278073410e-01 1.186838392492695e-01 1.184674454842661e-01 + 1.182515428132451e-01 1.180361275371210e-01 1.178211959568083e-01 1.176067443732212e-01 1.173927690872742e-01 + 1.171792663998817e-01 1.169662326119583e-01 1.167536640244181e-01 1.165415569381756e-01 1.163299076541453e-01 + 1.161187124732416e-01 1.159079676963789e-01 1.156976696244715e-01 1.154878145584339e-01 1.152783987991806e-01 + 1.150694186476259e-01 1.148608704046842e-01 1.146527503712699e-01 1.144450548482975e-01 1.142377801366814e-01 + 1.140309225373359e-01 1.138244783511755e-01 1.136184438791145e-01 1.134128154220675e-01 1.132075892809488e-01 + 1.130027617566728e-01 1.127983291501539e-01 1.125942877623066e-01 1.123906338940452e-01 1.121873638462842e-01 + 1.119844739199379e-01 1.117819604159209e-01 1.115798196351473e-01 1.113780478785318e-01 1.111766414469887e-01 + 1.109755966414325e-01 1.107749097627774e-01 1.105745771119380e-01 1.103745949898286e-01 1.101749596973638e-01 + 1.099756675354577e-01 1.097767148050249e-01 1.095780978069798e-01 1.093798128422368e-01 1.091818562117104e-01 + 1.089842242163148e-01 1.087869131569646e-01 1.085899193345740e-01 1.083932390500577e-01 1.081968686043299e-01 + 1.080008042983051e-01 1.078050424328976e-01 1.076095793090220e-01 1.074144112275925e-01 1.072195344895236e-01 + 1.070249453957298e-01 1.068306402471254e-01 1.066366153446248e-01 1.064428669891425e-01 1.062493914815928e-01 + 1.060561851228902e-01 1.058632442139490e-01 1.056705650556837e-01 1.054781439490088e-01 1.052859771948386e-01 + 1.050940610940874e-01 1.049023919476698e-01 1.047109660565001e-01 1.045197797214928e-01 1.043288292435622e-01 + 1.041381113170835e-01 1.039476249550923e-01 1.037573700170755e-01 1.035673463637623e-01 1.033775538558824e-01 + 1.031879923541653e-01 1.029986617193404e-01 1.028095618121373e-01 1.026206924932855e-01 1.024320536235143e-01 + 1.022436450635534e-01 1.020554666741323e-01 1.018675183159803e-01 1.016797998498272e-01 1.014923111364022e-01 + 1.013050520364351e-01 1.011180224106551e-01 1.009312221197918e-01 1.007446510245748e-01 1.005583089857335e-01 + 1.003721958639974e-01 1.001863115200960e-01 1.000006558147589e-01 9.981522860871547e-02 9.963002976269521e-02 + 9.944505913742767e-02 9.926031659364230e-02 9.907580199206875e-02 9.889151519343629e-02 9.870745605847453e-02 + 9.852362444791300e-02 9.834002022248119e-02 9.815664324290849e-02 9.797349336992449e-02 9.779057046425871e-02 + 9.760787438664066e-02 9.742540499779966e-02 9.724316215846536e-02 9.706114572936728e-02 9.687935557123485e-02 + 9.669779154479764e-02 9.651645351078506e-02 9.633534132992665e-02 9.615445486295186e-02 9.597379397059029e-02 + 9.579335851357133e-02 9.561314835262449e-02 9.543316334847932e-02 9.525340336186539e-02 9.507386825351205e-02 + 9.489455788414881e-02 9.471547211450523e-02 9.453661080531085e-02 9.435797381729505e-02 9.417956101118734e-02 + 9.400137224771732e-02 9.382340738761444e-02 9.364566629160814e-02 9.346814882042799e-02 9.329085483480343e-02 + 9.311378419546408e-02 9.293693676313923e-02 9.276031239855852e-02 9.258391096245139e-02 9.240773231554750e-02 + 9.223177631857608e-02 9.205604283226682e-02 9.188053171734911e-02 9.170524283455263e-02 9.153017604460661e-02 + 9.135533120824073e-02 9.118070818618440e-02 9.100630683916724e-02 9.083212702791864e-02 9.065816861316804e-02 + 9.048443145564508e-02 9.031091541607918e-02 9.013762035519991e-02 8.996454613373667e-02 8.979169261241901e-02 + 8.961905965197636e-02 8.944664711313842e-02 8.927445485663438e-02 8.910248274319395e-02 8.893073063354659e-02 + 8.875919838842186e-02 8.858788586854908e-02 8.841679293465786e-02 8.824591944747770e-02 8.807526526773812e-02 + 8.790483025616851e-02 8.773461427349849e-02 8.756461718045747e-02 8.739483883777507e-02 8.722527910618062e-02 + 8.705593784640371e-02 8.688681491917384e-02 8.671791018522053e-02 8.654922350527321e-02 8.638075474006139e-02 + 8.621250375031457e-02 8.604447039676234e-02 8.587665454013405e-02 8.570905604115930e-02 8.554167476056752e-02 + 8.537451055908836e-02 8.520756329745109e-02 8.504083283638536e-02 8.487431903662059e-02 8.470802175888634e-02 + 8.454194086391209e-02 8.437607621242733e-02 8.421042766516153e-02 8.404499508284423e-02 8.387977832620493e-02 + 8.371477725597309e-02 8.354999173287821e-02 8.338542161764978e-02 8.322106677101745e-02 8.305692705371046e-02 + 8.289300232645846e-02 8.272929244999096e-02 8.256579728503743e-02 8.240251669232730e-02 8.223945053259016e-02 + 8.207659866655545e-02 8.191396095495274e-02 8.175153725851143e-02 8.158932743796107e-02 8.142733135403117e-02 + 8.126554886745126e-02 8.110397983895071e-02 8.094262412925914e-02 8.078148159910596e-02 8.062055210922078e-02 + 8.045983552033298e-02 8.029933169317209e-02 8.013904048846764e-02 7.997896176694917e-02 7.981909538934603e-02 + 7.965944121638786e-02 7.949999910880409e-02 7.934076892732417e-02 7.918175053267780e-02 7.902294378559423e-02 + 7.886434854680306e-02 7.870596467703381e-02 7.854779203701598e-02 7.838983048747900e-02 7.823207988915246e-02 + 7.807454010276579e-02 7.791721098904852e-02 7.776009240873012e-02 7.760318422254009e-02 7.744648629120794e-02 + 7.728999847546325e-02 7.713372063603535e-02 7.697765263365386e-02 7.682179432904819e-02 7.666614558294797e-02 + 7.651070625608256e-02 7.635547620918152e-02 7.620045530297433e-02 7.604564339819056e-02 7.589104035555959e-02 + 7.573664603581094e-02 7.558246029967419e-02 7.542848300787881e-02 7.527471402115422e-02 7.512115320022998e-02 + 7.496780040583560e-02 7.481465549870060e-02 7.466171833955440e-02 7.450898878912648e-02 7.435646670814641e-02 + 7.420415195734377e-02 7.405204439744785e-02 7.390014388918827e-02 7.374845029329451e-02 7.359696347049603e-02 + 7.344568328152248e-02 7.329460958710317e-02 7.314374224796763e-02 7.299308112484543e-02 7.284262607846607e-02 + 7.269237696955901e-02 7.254233365885369e-02 7.239249600707968e-02 7.224286387496655e-02 7.209343712324366e-02 + 7.194421561264056e-02 7.179519920388668e-02 7.164638775771169e-02 7.149778113484495e-02 7.134937919601594e-02 + 7.120118180195423e-02 7.105318881338936e-02 7.090540009105072e-02 7.075781549566780e-02 7.061043488797017e-02 + 7.046325812868739e-02 7.031628507854877e-02 7.016951559828394e-02 7.002294954862234e-02 6.987658679029360e-02 + 6.973042718402701e-02 6.958447059055219e-02 6.943871687059862e-02 6.929316588489585e-02 6.914781749417323e-02 + 6.900267155916040e-02 6.885772794058678e-02 6.871298649918187e-02 6.856844709567529e-02 6.842410959079638e-02 + 6.827997384527469e-02 6.813603971983971e-02 6.799230707522101e-02 6.784877577214800e-02 6.770544567135017e-02 + 6.756231663355708e-02 6.741938851949826e-02 6.727666118990307e-02 6.713413450550108e-02 6.699180832702184e-02 + 6.684968251519484e-02 6.670775693074947e-02 6.656603143441531e-02 6.642450588692185e-02 6.628318014899860e-02 + 6.614205408137501e-02 6.600112754478060e-02 6.586040039994488e-02 6.571987250759739e-02 6.557954372846751e-02 + 6.543941392328488e-02 6.529948295277883e-02 6.515975067767907e-02 6.502021695871489e-02 6.488088165661587e-02 + 6.474174463211153e-02 6.460280574593143e-02 6.446406485880489e-02 6.432552183146151e-02 6.418717652463078e-02 + 6.404902879904224e-02 6.391107851542538e-02 6.377332553450962e-02 6.363576971702452e-02 6.349841092369954e-02 + 6.336124901526427e-02 6.322428385244801e-02 6.308751529598047e-02 6.295094320659102e-02 6.281456744500925e-02 + 6.267838787196457e-02 6.254240434818652e-02 6.240661673440458e-02 6.227102489134832e-02 6.213562867974709e-02 + 6.200042796033049e-02 6.186542259382801e-02 6.173061244096921e-02 6.159599736248343e-02 6.146157721910026e-02 + 6.132735187154918e-02 6.119332118055979e-02 6.105948500686142e-02 6.092584321118364e-02 6.079239565425593e-02 + 6.065914219680792e-02 6.052608269956890e-02 6.039321702326848e-02 6.026054502863611e-02 6.012806657640142e-02 + 5.999578152729372e-02 5.986368974204260e-02 5.973179108137752e-02 5.960008540602803e-02 5.946857257672369e-02 + 5.933725245419383e-02 5.920612489916803e-02 5.907518977237583e-02 5.894444693454667e-02 5.881389624641006e-02 + 5.868353756869548e-02 5.855337076213246e-02 5.842339568745052e-02 5.829361220537909e-02 5.816402017664766e-02 + 5.803461946198580e-02 5.790540992212303e-02 5.777639141778872e-02 5.764756380971246e-02 5.751892695862373e-02 + 5.739048072525207e-02 5.726222497032688e-02 5.713415955457772e-02 5.700628433873407e-02 5.687859918352548e-02 + 5.675110394968137e-02 5.662379849793124e-02 5.649668268900464e-02 5.636975638363110e-02 5.624301944254002e-02 + 5.611647172646088e-02 5.599011309612329e-02 5.586394341225675e-02 5.573796253559063e-02 5.561217032685450e-02 + 5.548656664677788e-02 5.536115135609025e-02 5.523592431552111e-02 5.511088538579991e-02 5.498603442765621e-02 + 5.486137130181946e-02 5.473689586901927e-02 5.461260798998496e-02 5.448850752544614e-02 5.436459433613226e-02 + 5.424086828277291e-02 5.411732922609749e-02 5.399397702683550e-02 5.387081154571649e-02 5.374783264346995e-02 + 5.362504018082533e-02 5.350243401851213e-02 5.338001401725990e-02 5.325778003779816e-02 5.313573194085630e-02 + 5.301386958716389e-02 5.289219283745039e-02 5.277070155244543e-02 5.264939559287828e-02 5.252827481947860e-02 + 5.240733909297583e-02 5.228658827409954e-02 5.216602222357911e-02 5.204564080214408e-02 5.192544387052399e-02 + 5.180543128944835e-02 5.168560291964656e-02 5.156595862184820e-02 5.144649825678276e-02 5.132722168517973e-02 + 5.120812876776858e-02 5.108921936527882e-02 5.097049333843993e-02 5.085195054798146e-02 5.073359085463291e-02 + 5.061541411912372e-02 5.049742020218338e-02 5.037960896454145e-02 5.026198026692743e-02 5.014453397007076e-02 + 5.002726993470093e-02 4.991018802154750e-02 4.979328809133997e-02 4.967657000480776e-02 4.956003362268040e-02 + 4.944367880568746e-02 4.932750541455837e-02 4.921151331002260e-02 4.909570235280970e-02 4.898007240364916e-02 + 4.886462332327048e-02 4.874935497240312e-02 4.863426721177660e-02 4.851935990212042e-02 4.840463290416413e-02 + 4.829008607863713e-02 4.817571928626897e-02 4.806153238778912e-02 4.794752524392717e-02 4.783369771541247e-02 + 4.772004966297460e-02 4.760658094734306e-02 4.749329142924741e-02 4.738018096941701e-02 4.726724942858141e-02 + 4.715449666747011e-02 4.704192254681265e-02 4.692952692733852e-02 4.681730966977717e-02 4.670527063485810e-02 + 4.659340968331084e-02 4.648172667586493e-02 4.637022147324977e-02 4.625889393619487e-02 4.614774392542979e-02 + 4.603677130168404e-02 4.592597592568702e-02 4.581535765816823e-02 4.570491635985727e-02 4.559465189148363e-02 + 4.548456411377672e-02 4.537465288746606e-02 4.526491807328119e-02 4.515535953195162e-02 4.504597712420678e-02 + 4.493677071077620e-02 4.482774015238937e-02 4.471888530977582e-02 4.461020604366499e-02 4.450170221478643e-02 + 4.439337368386963e-02 4.428522031164406e-02 4.417724195883925e-02 4.406943848618464e-02 4.396180975440979e-02 + 4.385435562424421e-02 4.374707595641732e-02 4.363997061165866e-02 4.353303945069772e-02 4.342628233426407e-02 + 4.331969912308711e-02 4.321328967789632e-02 4.310705385942128e-02 4.300099152839144e-02 4.289510254553639e-02 + 4.278938677158548e-02 4.268384406726829e-02 4.257847429331426e-02 4.247327731045304e-02 4.236825297941395e-02 + 4.226340116092654e-02 4.215872171572034e-02 4.205421450452487e-02 4.194987938806956e-02 4.184571622708395e-02 + 4.174172488229748e-02 4.163790521443976e-02 4.153425708424018e-02 4.143078035242830e-02 4.132747487973357e-02 + 4.122434052688555e-02 4.112137715461366e-02 4.101858462364746e-02 4.091596279471640e-02 4.081351152855003e-02 + 4.071123068587779e-02 4.060912012742923e-02 4.050717971393380e-02 4.040540930612108e-02 4.030380876472048e-02 + 4.020237795046150e-02 4.010111672407364e-02 4.000002494628654e-02 3.989910247782946e-02 3.979834917943206e-02 + 3.969776491182379e-02 3.959734953573417e-02 3.949710291189267e-02 3.939702490102882e-02 3.929711536387203e-02 + 3.919737416115189e-02 3.909780115359791e-02 3.899839620193951e-02 3.889915916690621e-02 3.880008990922754e-02 + 3.870118828963302e-02 3.860245416885208e-02 3.850388740761421e-02 3.840548786664894e-02 3.830725540668584e-02 + 3.820918988845431e-02 3.811129117268384e-02 3.801355912010395e-02 3.791599359144421e-02 3.781859444743402e-02 + 3.772136154880290e-02 3.762429475628037e-02 3.752739393059597e-02 3.743065893247909e-02 3.733408962265928e-02 + 3.723768586186606e-02 3.714144751082894e-02 3.704537443027734e-02 3.694946648094082e-02 3.685372352354885e-02 + 3.675814541883098e-02 3.666273202751662e-02 3.656748321033533e-02 3.647239882801658e-02 3.637747874128989e-02 + 3.628272281088477e-02 3.618813089753067e-02 3.609370286195710e-02 3.599943856489357e-02 3.590533786706961e-02 + 3.581140062921466e-02 3.571762671205823e-02 3.562401597632983e-02 3.553056828275900e-02 3.543728349207515e-02 + 3.534416146500782e-02 3.525120206228652e-02 3.515840514464076e-02 3.506577057279998e-02 3.497329820749372e-02 + 3.488098790945146e-02 3.478883953940275e-02 3.469685295807699e-02 3.460502802620374e-02 3.451336460451249e-02 + 3.442186255373277e-02 3.433052173459401e-02 3.423934200782575e-02 3.414832323415747e-02 3.405746527431870e-02 + 3.396676798903889e-02 3.387623123904757e-02 3.378585488507421e-02 3.369563878784837e-02 3.360558280809946e-02 + 3.351568680655703e-02 3.342595064395056e-02 3.333637418100957e-02 3.324695727846357e-02 3.315769979704199e-02 + 3.306860159747437e-02 3.297966254049021e-02 3.289088248681904e-02 3.280226129719029e-02 3.271379883233347e-02 + 3.262549495297810e-02 3.253734951985372e-02 3.244936239368974e-02 3.236153343521570e-02 3.227386250516109e-02 + 3.218634946425545e-02 3.209899417322821e-02 3.201179649280889e-02 3.192475628372700e-02 3.183787340671206e-02 + 3.175114772249351e-02 3.166457909180088e-02 3.157816737536367e-02 3.149191243391140e-02 3.140581412817352e-02 + 3.131987231887953e-02 3.123408686675895e-02 3.114845763254130e-02 3.106298447695604e-02 3.097766726073266e-02 + 3.089250584460067e-02 3.080750008928961e-02 3.072264985552891e-02 3.063795500404810e-02 3.055341539557667e-02 + 3.046903089084416e-02 3.038480135057999e-02 3.030072663551370e-02 3.021680660637479e-02 3.013304112389275e-02 + 3.004943004879711e-02 2.996597324181731e-02 2.988267056368287e-02 2.979952187512330e-02 2.971652703686811e-02 + 2.963368590964675e-02 2.955099835418875e-02 2.946846423122360e-02 2.938608340148083e-02 2.930385572568987e-02 + 2.922178106458027e-02 2.913985927888150e-02 2.905809022932310e-02 2.897647377663451e-02 2.889500978154525e-02 + 2.881369810478483e-02 2.873253860708276e-02 2.865153114916850e-02 2.857067559177156e-02 2.848997179562144e-02 + 2.840941962144767e-02 2.832901892997968e-02 2.824876958194701e-02 2.816867143807916e-02 2.808872435910564e-02 + 2.800892820575589e-02 2.792928283875946e-02 2.784978811884582e-02 2.777044390674452e-02 2.769125006318498e-02 + 2.761220644889673e-02 2.753331292460928e-02 2.745456935105212e-02 2.737597558895477e-02 2.729753149904667e-02 + 2.721923694205737e-02 2.714109177871633e-02 2.706309586975311e-02 2.698524907589712e-02 2.690755125787792e-02 + 2.683000227642497e-02 2.675260199226783e-02 2.667535026613592e-02 2.659824695875877e-02 2.652129193086588e-02 + 2.644448504318678e-02 2.636782615645090e-02 2.629131513138777e-02 2.621495182872689e-02 2.613873610919780e-02 + 2.606266783352991e-02 2.598674686245276e-02 2.591097305669585e-02 2.583534627698871e-02 2.575986638406077e-02 + 2.568453323864157e-02 2.560934670146059e-02 2.553430663324736e-02 2.545941289473133e-02 2.538466534664203e-02 + 2.531006384970894e-02 2.523560826466160e-02 2.516129845222944e-02 2.508713427314200e-02 2.501311558812876e-02 + 2.493924225791922e-02 2.486551414324292e-02 2.479193110482929e-02 2.471849300340787e-02 2.464519969970813e-02 + 2.457205105445962e-02 2.449904692839177e-02 2.442618718223411e-02 2.435347167671614e-02 2.428090027256738e-02 + 2.420847283051727e-02 2.413618921129533e-02 2.406404927563107e-02 2.399205288425402e-02 2.392019989789362e-02 + 2.384849017727937e-02 2.377692358314079e-02 2.370549997620740e-02 2.363421921720865e-02 2.356308116687406e-02 + 2.349208568593311e-02 2.342123263511536e-02 2.335052187515022e-02 2.327995326676723e-02 2.320952667069589e-02 + 2.313924194766571e-02 2.306909895840616e-02 2.299909756364674e-02 2.292923762411695e-02 2.285951900054633e-02 + 2.278994155366431e-02 2.272050514420041e-02 2.265120963288414e-02 2.258205488044503e-02 2.251304074761250e-02 + 2.244416709511610e-02 2.237543378368530e-02 2.230684067404963e-02 2.223838762693858e-02 2.217007450308162e-02 + 2.210190116320827e-02 2.203386746804801e-02 2.196597327833039e-02 2.189821845478484e-02 2.183060285814088e-02 + 2.176312634912800e-02 2.169578878847575e-02 2.162859003691357e-02 2.156152995517096e-02 2.149460840397744e-02 + 2.142782524406253e-02 2.136118033615566e-02 2.129467354098637e-02 2.122830471928416e-02 2.116207373177853e-02 + 2.109598043919896e-02 2.103002470227495e-02 2.096420638173599e-02 2.089852533831163e-02 2.083298143273129e-02 + 2.076757452572451e-02 2.070230447802078e-02 2.063717115034963e-02 2.057217440344050e-02 2.050731409802292e-02 + 2.044259009482638e-02 2.037800225458040e-02 2.031355043801443e-02 2.024923450585800e-02 2.018505431884060e-02 + 2.012100973769173e-02 2.005710062314091e-02 1.999332683591760e-02 1.992968823675130e-02 1.986618468637153e-02 + 1.980281604550779e-02 1.973958217488955e-02 1.967648293524631e-02 1.961351818730759e-02 1.955068779180290e-02 + 1.948799160946169e-02 1.942542950101347e-02 1.936300132718777e-02 1.930070694871408e-02 1.923854622632186e-02 + 1.917651902074064e-02 1.911462519269990e-02 1.905286460292917e-02 1.899123711215791e-02 1.892974258111562e-02 + 1.886838087053181e-02 1.880715184113601e-02 1.874605535365765e-02 1.868509126882627e-02 1.862425944737136e-02 + 1.856355975002244e-02 1.850299203750895e-02 1.844255617056043e-02 1.838225200990637e-02 1.832207941627629e-02 + 1.826203825039963e-02 1.820212837300593e-02 1.814234964482469e-02 1.808270192658538e-02 1.802318507901754e-02 + 1.796379896285062e-02 1.790454343872297e-02 1.784541836513687e-02 1.778642359843651e-02 1.772755899487045e-02 + 1.766882441068734e-02 1.761021970213578e-02 1.755174472546439e-02 1.749339933692175e-02 1.743518339275648e-02 + 1.737709674921720e-02 1.731913926255254e-02 1.726131078901105e-02 1.720361118484138e-02 1.714604030629212e-02 + 1.708859800961192e-02 1.703128415104933e-02 1.697409858685299e-02 1.691704117327150e-02 1.686011176655350e-02 + 1.680331022294755e-02 1.674663639870229e-02 1.669009015006631e-02 1.663367133328826e-02 1.657737980461669e-02 + 1.652121542030025e-02 1.646517803658753e-02 1.640926750972717e-02 1.635348369596773e-02 1.629782645155784e-02 + 1.624229563274612e-02 1.618689109578117e-02 1.613161269691162e-02 1.607646029238604e-02 1.602143373845306e-02 + 1.596653289136129e-02 1.591175760735935e-02 1.585710774269581e-02 1.580258315361932e-02 1.574818369637846e-02 + 1.569390922722188e-02 1.563975960239814e-02 1.558573467815586e-02 1.553183431074367e-02 1.547805835641019e-02 + 1.542440667140398e-02 1.537087911197367e-02 1.531747553436788e-02 1.526419579483524e-02 1.521103974962430e-02 + 1.515800725498371e-02 1.510509816716207e-02 1.505231234240801e-02 1.499964963697009e-02 1.494710990709695e-02 + 1.489469300903720e-02 1.484239879903946e-02 1.479022713335231e-02 1.473817786822437e-02 1.468625085990425e-02 + 1.463444596464058e-02 1.458276303868193e-02 1.453120193827693e-02 1.447976251967419e-02 1.442844463912233e-02 + 1.437724815286993e-02 1.432617291716562e-02 1.427521878825798e-02 1.422438562239566e-02 1.417367327582728e-02 + 1.412308160480139e-02 1.407261046556662e-02 1.402225971437159e-02 1.397202920746493e-02 1.392191880109521e-02 + 1.387192835151105e-02 1.382205771496106e-02 1.377230674769388e-02 1.372267530595806e-02 1.367316324600226e-02 + 1.362377042407505e-02 1.357449669642509e-02 1.352534191930093e-02 1.347630594895120e-02 1.342738864162452e-02 + 1.337858985356952e-02 1.332990944103476e-02 1.328134726026887e-02 1.323290316752046e-02 1.318457701903816e-02 + 1.313636867107054e-02 1.308827797986622e-02 1.304030480167382e-02 1.299244899274197e-02 1.294471040931923e-02 + 1.289708890765423e-02 1.284958434399559e-02 1.280219657459192e-02 1.275492545569181e-02 1.270777084354387e-02 + 1.266073259439673e-02 1.261381056449897e-02 1.256700461009925e-02 1.252031458744611e-02 1.247374035278820e-02 + 1.242728176237412e-02 1.238093867245251e-02 1.233471093927193e-02 1.228859841908100e-02 1.224260096812834e-02 + 1.219671844266258e-02 1.215095069893228e-02 1.210529759318608e-02 1.205975898167258e-02 1.201433472064042e-02 + 1.196902466633815e-02 1.192382867501442e-02 1.187874660291783e-02 1.183377830629700e-02 1.178892364140051e-02 + 1.174418246447699e-02 1.169955463177504e-02 1.165503999954330e-02 1.161063842403033e-02 1.156634976148476e-02 + 1.152217386815520e-02 1.147811060029028e-02 1.143415981413857e-02 1.139032136594870e-02 1.134659511196927e-02 + 1.130298090844892e-02 1.125947861163621e-02 1.121608807777978e-02 1.117280916312823e-02 1.112964172393017e-02 + 1.108658561643422e-02 1.104364069688897e-02 1.100080682154304e-02 1.095808384664503e-02 1.091547162844358e-02 + 1.087297002318726e-02 1.083057888712468e-02 1.078829807650447e-02 1.074612744757525e-02 1.070406685658559e-02 + 1.066211615978412e-02 1.062027521341945e-02 1.057854387374020e-02 1.053692199699495e-02 1.049540943943233e-02 + 1.045400605730094e-02 1.041271170684941e-02 1.037152624432632e-02 1.033044952598028e-02 1.028948140805991e-02 + 1.024862174681384e-02 1.020787039849065e-02 1.016722721933894e-02 1.012669206560735e-02 1.008626479354448e-02 + 1.004594525939892e-02 1.000573331941929e-02 9.965628829854205e-03 9.925631646952281e-03 9.885741626962105e-03 + 9.845958626132295e-03 9.806282500711461e-03 9.766713106948224e-03 9.727250301091174e-03 9.687893939388922e-03 + 9.648643878090089e-03 9.609499973443269e-03 9.570462081697095e-03 9.531530059100150e-03 9.492703761901051e-03 + 9.453983046348409e-03 9.415367768690846e-03 9.376857785176945e-03 9.338452952055326e-03 9.300153125574601e-03 + 9.261958161983393e-03 9.223867917530281e-03 9.185882248463889e-03 9.148001011032818e-03 9.110224061485711e-03 + 9.072551256071124e-03 9.034982451037702e-03 8.997517502634035e-03 8.960156267108764e-03 8.922898600710457e-03 + 8.885744359687739e-03 8.848693400289223e-03 8.811745578763531e-03 8.774900751359239e-03 8.738158774324977e-03 + 8.701519503909350e-03 8.664982796360977e-03 8.628548507928447e-03 8.592216494860380e-03 8.555986613405385e-03 + 8.519858719812080e-03 8.483832670329055e-03 8.447908321204923e-03 8.412085528688303e-03 8.376364149027796e-03 + 8.340744038472027e-03 8.305225053269574e-03 8.269807049669070e-03 8.234489883919114e-03 8.199273412268336e-03 + 8.164157490965312e-03 8.129141976258669e-03 8.094226724397005e-03 8.059411591628960e-03 8.024696434203098e-03 + 7.990081108368059e-03 7.955565470372437e-03 7.921149376464860e-03 7.886832682893913e-03 7.852615245908214e-03 + 7.818496921756376e-03 7.784477566687015e-03 7.750557036948720e-03 7.716735188790110e-03 7.683011878459793e-03 + 7.649386962206392e-03 7.615860296278496e-03 7.582431736924712e-03 7.549101140393664e-03 7.515868362933969e-03 + 7.482733260794206e-03 7.449695690222999e-03 7.416755507468959e-03 7.383912568780708e-03 7.351166730406827e-03 + 7.318517848595938e-03 7.285965779596649e-03 7.253510379657572e-03 7.221151505027326e-03 7.188889011954499e-03 + 7.156722756687706e-03 7.124652595475558e-03 7.092678384566681e-03 7.060799980209652e-03 7.029017238653099e-03 + 6.997330016145626e-03 6.965738168935856e-03 6.934241553272372e-03 6.902840025403800e-03 6.871533441578741e-03 + 6.840321658045828e-03 6.809204531053630e-03 6.778181916850779e-03 6.747253671685882e-03 6.716419651807561e-03 + 6.685679713464399e-03 6.655033712905014e-03 6.624481506378021e-03 6.594022950132032e-03 6.563657900415641e-03 + 6.533386213477465e-03 6.503207745566116e-03 6.473122352930210e-03 6.443129891818337e-03 6.413230218479116e-03 + 6.383423189161154e-03 6.353708660113071e-03 6.324086487583456e-03 6.294556527820926e-03 6.265118637074094e-03 + 6.235772671591568e-03 6.206518487621963e-03 6.177355941413872e-03 6.148284889215913e-03 6.119305187276698e-03 + 6.090416691844841e-03 6.061619259168929e-03 6.032912745497586e-03 6.004297007079420e-03 5.975771900163051e-03 + 5.947337280997061e-03 5.918993005830076e-03 5.890738930910704e-03 5.862574912487566e-03 5.834500806809243e-03 + 5.806516470124362e-03 5.778621758681529e-03 5.750816528729360e-03 5.723100636516450e-03 5.695473938291410e-03 + 5.667936290302856e-03 5.640487548799405e-03 5.613127570029646e-03 5.585856210242193e-03 5.558673325685662e-03 + 5.531578772608670e-03 5.504572407259803e-03 5.477654085887683e-03 5.450823664740917e-03 5.424081000068129e-03 + 5.397425948117900e-03 5.370858365138850e-03 5.344378107379596e-03 5.317985031088746e-03 5.291678992514898e-03 + 5.265459847906665e-03 5.239327453512659e-03 5.213281665581490e-03 5.187322340361775e-03 5.161449334102100e-03 + 5.135662503051089e-03 5.109961703457348e-03 5.084346791569499e-03 5.058817623636128e-03 5.033374055905854e-03 + 5.008015944627285e-03 4.982743146049042e-03 4.957555516419718e-03 4.932452911987924e-03 4.907435189002269e-03 + 4.882502203711378e-03 4.857653812363840e-03 4.832889871208267e-03 4.808210236493273e-03 4.783614764467474e-03 + 4.759103311379466e-03 4.734675733477858e-03 4.710331887011266e-03 4.686071628228306e-03 4.661894813377568e-03 + 4.637801298707671e-03 4.613790940467224e-03 4.589863594904843e-03 4.566019118269118e-03 4.542257366808671e-03 + 4.518578196772109e-03 4.494981464408054e-03 4.471467025965088e-03 4.448034737691835e-03 4.424684455836904e-03 + 4.401416036648902e-03 4.378229336376447e-03 4.355124211268131e-03 4.332100517572573e-03 4.309158111538376e-03 + 4.286296849414167e-03 4.263516587448529e-03 4.240817181890086e-03 4.218198488987445e-03 4.195660364989219e-03 + 4.173202666144005e-03 4.150825248700419e-03 4.128527968907071e-03 4.106310683012575e-03 4.084173247265527e-03 + 4.062115517914543e-03 4.040137351208228e-03 4.018238603395208e-03 3.996419130724064e-03 3.974678789443424e-03 + 3.953017435801891e-03 3.931434926048083e-03 3.909931116430592e-03 3.888505863198038e-03 3.867159022599027e-03 + 3.845890450882177e-03 3.824700004296082e-03 3.803587539089355e-03 3.782552911510609e-03 3.761595977808460e-03 + 3.740716594231500e-03 3.719914617028346e-03 3.699189902447607e-03 3.678542306737894e-03 3.657971686147821e-03 + 3.637477896925982e-03 3.617060795320995e-03 3.596720237581467e-03 3.576456079956017e-03 3.556268178693235e-03 + 3.536156390041741e-03 3.516120570250142e-03 3.496160575567056e-03 3.476276262241076e-03 3.456467486520818e-03 + 3.436734104654891e-03 3.417075972891913e-03 3.397492947480476e-03 3.377984884669197e-03 3.358551640706685e-03 + 3.339193071841557e-03 3.319909034322406e-03 3.300699384397850e-03 3.281563978316495e-03 3.262502672326960e-03 + 3.243515322677838e-03 3.224601785617746e-03 3.205761917395293e-03 3.186995574259093e-03 3.168302612457743e-03 + 3.149682888239858e-03 3.131136257854047e-03 3.112662577548928e-03 3.094261703573092e-03 3.075933492175158e-03 + 3.057677799603733e-03 3.039494482107426e-03 3.021383395934856e-03 3.003344397334615e-03 2.985377342555319e-03 + 2.967482087845577e-03 2.949658489454007e-03 2.931906403629201e-03 2.914225686619777e-03 2.896616194674343e-03 + 2.879077784041516e-03 2.861610310969888e-03 2.844213631708079e-03 2.826887602504695e-03 2.809632079608352e-03 + 2.792446919267647e-03 2.775331977731194e-03 2.758287111247604e-03 2.741312176065491e-03 2.724407028433449e-03 + 2.707571524600097e-03 2.690805520814042e-03 2.674108873323900e-03 2.657481438378266e-03 2.640923072225757e-03 + 2.624433631114980e-03 2.608012971294552e-03 2.591660949013068e-03 2.575377420519144e-03 2.559162242061389e-03 + 2.543015269888418e-03 2.526936360248827e-03 2.510925369391232e-03 2.494982153564241e-03 2.479106569016469e-03 + 2.463298471996514e-03 2.447557718752990e-03 2.431884165534506e-03 2.416277668589671e-03 2.400738084167101e-03 + 2.385265268515391e-03 2.369859077883157e-03 2.354519368519007e-03 2.339245996671558e-03 2.324038818589404e-03 + 2.308897690521163e-03 2.293822468715441e-03 2.278813009420856e-03 2.263869168886002e-03 2.248990803359497e-03 + 2.234177769089947e-03 2.219429922325968e-03 2.204747119316157e-03 2.190129216309129e-03 2.175576069553493e-03 + 2.161087535297863e-03 2.146663469790839e-03 2.132303729281031e-03 2.118008170017052e-03 2.103776648247515e-03 + 2.089609020221018e-03 2.075505142186175e-03 2.061464870391595e-03 2.047488061085894e-03 2.033574570517667e-03 + 2.019724254935531e-03 2.005936970588094e-03 1.992212573723970e-03 1.978550920591757e-03 1.964951867440071e-03 + 1.951415270517519e-03 1.937940986072710e-03 1.924528870354260e-03 1.911178779610765e-03 1.897890570090841e-03 + 1.884664098043096e-03 1.871499219716145e-03 1.858395791358585e-03 1.845353669219032e-03 1.832372709546094e-03 + 1.819452768588385e-03 1.806593702594503e-03 1.793795367813064e-03 1.781057620492675e-03 1.768380316881951e-03 + 1.755763313229490e-03 1.743206465783907e-03 1.730709630793810e-03 1.718272664507814e-03 1.705895423174517e-03 + 1.693577763042532e-03 1.681319540360471e-03 1.669120611376945e-03 1.656980832340554e-03 1.644900059499912e-03 + 1.632878149103628e-03 1.620914957400315e-03 1.609010340638574e-03 1.597164155067017e-03 1.585376256934253e-03 + 1.573646502488897e-03 1.561974747979547e-03 1.550360849654818e-03 1.538804663763317e-03 1.527306046553655e-03 + 1.515864854274445e-03 1.504480943174286e-03 1.493154169501792e-03 1.481884389505572e-03 1.470671459434240e-03 + 1.459515235536394e-03 1.448415574060649e-03 1.437372331255614e-03 1.426385363369901e-03 1.415454526652112e-03 + 1.404579677350858e-03 1.393760671714750e-03 1.382997365992401e-03 1.372289616432411e-03 1.361637279283392e-03 + 1.351040210793954e-03 1.340498267212711e-03 1.330011304788262e-03 1.319579179769221e-03 1.309201748404197e-03 + 1.298878866941802e-03 1.288610391630638e-03 1.278396178719316e-03 1.268236084456448e-03 1.258129965090645e-03 + 1.248077676870508e-03 1.238079076044650e-03 1.228134018861680e-03 1.218242361570212e-03 1.208403960418845e-03 + 1.198618671656193e-03 1.188886351530865e-03 1.179206856291474e-03 1.169580042186619e-03 1.160005765464916e-03 + 1.150483882374972e-03 1.141014249165397e-03 1.131596722084803e-03 1.122231157381791e-03 1.112917411304974e-03 + 1.103655340102962e-03 1.094444800024366e-03 1.085285647317788e-03 1.076177738231842e-03 1.067120929015135e-03 + 1.058115075916281e-03 1.049160035183880e-03 1.040255663066546e-03 1.031401815812888e-03 1.022598349671518e-03 + 1.013845120891037e-03 1.005141985720059e-03 9.964888004071919e-04 9.878854212010486e-04 9.793317043502309e-04 + 9.708275061033512e-04 9.623726827090181e-04 9.539670904158446e-04 9.456105854724324e-04 9.373030241273940e-04 + 9.290442626293378e-04 9.208341572268767e-04 9.126725641686127e-04 9.045593397031583e-04 8.964943400791219e-04 + 8.884774215451166e-04 8.805084403497438e-04 8.725872527416161e-04 8.647137149693424e-04 8.568876832815321e-04 + 8.491090139267964e-04 8.413775631537383e-04 8.336931872109701e-04 8.260557423471004e-04 8.184650848107415e-04 + 8.109210708504961e-04 8.034235567149758e-04 7.959723986527902e-04 7.885674529125507e-04 7.812085757428605e-04 + 7.738956233923316e-04 7.666284521095726e-04 7.594069181431954e-04 7.522308777418032e-04 7.451001871540077e-04 + 7.380147026284183e-04 7.309742804136466e-04 7.239787767582952e-04 7.170280479109767e-04 7.101219501202994e-04 + 7.032603396348755e-04 6.964430727033079e-04 6.896700055742087e-04 6.829409944961865e-04 6.762558957178533e-04 + 6.696145654878124e-04 6.630168600546754e-04 6.564626356670511e-04 6.499517485735516e-04 6.434840550227800e-04 + 6.370594112633479e-04 6.306776735438646e-04 6.243386981129385e-04 6.180423412191816e-04 6.117884591111977e-04 + 6.055769080375977e-04 5.994075442469912e-04 5.932802239879889e-04 5.871948035091956e-04 5.811511390592223e-04 + 5.751490868866776e-04 5.691885032401732e-04 5.632692443683132e-04 5.573911665197090e-04 5.515541259429694e-04 + 5.457579788867056e-04 5.400025815995219e-04 5.342877903300293e-04 5.286134613268377e-04 5.229794508385569e-04 + 5.173856151137926e-04 5.118318104011550e-04 5.063178929492534e-04 5.008437190066993e-04 4.954091448220964e-04 + 4.900140266440566e-04 4.846582207211883e-04 4.793415833021029e-04 4.740639706354048e-04 4.688252389697055e-04 + 4.636252445536134e-04 4.584638436357397e-04 4.533408924646894e-04 4.482562472890731e-04 4.432097643574999e-04 + 4.382012999185791e-04 4.332307102209210e-04 4.282978515131307e-04 4.234025800438191e-04 4.185447520615955e-04 + 4.137242238150707e-04 4.089408515528493e-04 4.041944915235423e-04 3.994849999757589e-04 3.948122331581099e-04 + 3.901760473192000e-04 3.855762987076405e-04 3.810128435720403e-04 3.764855381610099e-04 3.719942387231546e-04 + 3.675388015070854e-04 3.631190827614110e-04 3.587349387347422e-04 3.543862256756842e-04 3.500727998328479e-04 + 3.457945174548421e-04 3.415512347902775e-04 3.373428080877597e-04 3.331690935958992e-04 3.290299475633049e-04 + 3.249252262385874e-04 3.208547858703525e-04 3.168184827072106e-04 3.128161729977707e-04 3.088477129906432e-04 + 3.049129589344340e-04 3.010117670777535e-04 2.971439936692106e-04 2.933094949574159e-04 2.895081271909752e-04 + 2.857397466184990e-04 2.820042094885960e-04 2.783013720498754e-04 2.746310905509476e-04 2.709932212404183e-04 + 2.673876203668981e-04 2.638141441789959e-04 2.602726489253221e-04 2.567629908544828e-04 2.532850262150882e-04 + 2.498386112557472e-04 2.464236022250703e-04 2.430398553716636e-04 2.396872269441373e-04 2.363655731911004e-04 + 2.330747503611633e-04 2.298146147029320e-04 2.265850224650169e-04 2.233858298960269e-04 2.202168932445723e-04 + 2.170780687592593e-04 2.139692126886982e-04 2.108901812814979e-04 2.078408307862685e-04 2.048210174516166e-04 + 2.018305975261523e-04 1.988694272584845e-04 1.959373628972234e-04 1.930342606909753e-04 1.901599768883506e-04 + 1.873143677379581e-04 1.844972894884079e-04 1.817085983883066e-04 1.789481506862643e-04 1.762158026308899e-04 + 1.735114104707923e-04 1.708348304545817e-04 1.681859188308646e-04 1.655645318482511e-04 1.629705257553502e-04 + 1.604037568007718e-04 1.578640812331228e-04 1.553513553010130e-04 1.528654352530516e-04 1.504061773378482e-04 + 1.479734378040100e-04 1.455670729001469e-04 1.431869388748686e-04 1.408328919767813e-04 1.385047884544977e-04 + 1.362024845566247e-04 1.339258365317697e-04 1.316747006285450e-04 1.294489330955560e-04 1.272483901814152e-04 + 1.250729281347298e-04 1.229224032041069e-04 1.207966716381590e-04 1.186955896854931e-04 1.166190135947167e-04 + 1.145667996144419e-04 1.125388039932743e-04 1.105348829798262e-04 1.085548928227049e-04 1.065986897705177e-04 + 1.046661300718766e-04 1.027570699753891e-04 1.008713657296624e-04 9.900887358330876e-05 9.716944978493387e-05 + 9.535295058314972e-05 9.355923222656375e-05 9.178815096378338e-05 9.003956304342048e-05 8.831332471408114e-05 + 8.660929222437702e-05 8.492732182291570e-05 8.326726975830472e-05 8.162899227915576e-05 8.001234563407632e-05 + 7.841718607167412e-05 7.684336984056057e-05 7.529075318934215e-05 7.375919236663024e-05 7.224854362103254e-05 + 7.075866320115673e-05 6.928940735561416e-05 6.784063233301257e-05 6.641219438195972e-05 6.500394975106684e-05 + 6.361575468894061e-05 6.224746544419213e-05 6.089893826542929e-05 5.957002940125986e-05 5.826059510029498e-05 + 5.697049161114246e-05 5.569957518241021e-05 5.444770206270919e-05 5.321472850064636e-05 5.200051074483260e-05 + 5.080490504387584e-05 4.962776764638405e-05 4.846895480096806e-05 4.732832275623497e-05 4.620572776079547e-05 + 4.510102606325759e-05 4.401407391222942e-05 4.294472755632157e-05 4.189284324414216e-05 4.085827722429926e-05 + 3.984088574540343e-05 3.884052505606199e-05 3.785705140488547e-05 3.689032104048197e-05 3.594019021145967e-05 + 3.500651516642904e-05 3.408915215399821e-05 3.318795742277539e-05 3.230278722137097e-05 3.143349779839244e-05 + 3.057994540245013e-05 2.974198628215226e-05 2.891947668610709e-05 2.811227286292489e-05 2.732023106121389e-05 + 2.654320752958242e-05 2.578105851664065e-05 2.503364027099627e-05 2.430080904125942e-05 2.358242107603841e-05 + 2.287833262394161e-05 2.218839993357908e-05 2.151247925355917e-05 2.085042683249028e-05 2.020209891898239e-05 + 1.956735176164341e-05 1.894604160908327e-05 1.833802470991036e-05 1.774315731273317e-05 1.716129566616156e-05 + 1.659229601880353e-05 1.603601461926890e-05 1.549230771616617e-05 1.496103155810380e-05 1.444204239369161e-05 + 1.393519647153807e-05 1.344035004025171e-05 1.295735934844227e-05 1.248608064471789e-05 1.202637017768825e-05 + 1.157808419596189e-05 1.114107894814740e-05 1.071521068285440e-05 1.030033564869146e-05 9.896310094267184e-06 + 9.502990268191156e-06 9.120232419071657e-06 8.747892795518239e-06 8.385827646139515e-06 8.033893219544123e-06 + 7.691945764341566e-06 7.359841529140471e-06 7.037436762549516e-06 6.724587713178145e-06 6.421150629634780e-06 + 6.126981760528832e-06 5.841937354468980e-06 5.565873660063932e-06 5.298646925923060e-06 5.040113400655060e-06 + 4.790129332868661e-06 4.548550971173195e-06 4.315234564177192e-06 4.090036360489959e-06 3.872812608720230e-06 + 3.663419557476763e-06 3.461713455368821e-06 3.267550551005007e-06 3.080787092994556e-06 2.901279329946239e-06 + 2.728883510468841e-06 2.563455883171568e-06 2.404852696663204e-06 2.252930199552555e-06 2.107544640448791e-06 + 1.968552267960603e-06 1.835809330697142e-06 1.709172077267219e-06 1.588496756279663e-06 1.473639616343597e-06 + 1.364456906067845e-06 1.260804874061252e-06 1.162539768932911e-06 1.069517839291589e-06 9.815953337463618e-07 + 8.986285009060785e-07 8.204735893796031e-07 7.469868477759875e-07 6.780245247040928e-07 6.134428687727947e-07 + 5.530981285911221e-07 4.968465527679040e-07 4.445443899121569e-07 3.960478886327589e-07 3.512132975386017e-07 + 3.098968652386831e-07 2.719548403418620e-07 2.372434714571254e-07 2.056190071933670e-07 1.769376961594907e-07 + 1.510557869644685e-07 1.278295282172019e-07 1.071151685266009e-07 8.876895650162454e-08 7.264714075116895e-08 + 5.860596988418577e-08 4.650169250958690e-08 3.619055723629051e-08 2.752881267323894e-08 2.037270742934896e-08 + 1.457849011354222e-08 1.000240933475375e-08 6.500713701901725e-09 3.929651823917492e-09 2.145472309723612e-09 + 1.004423768245183e-09 3.627548084097459e-10 7.671403914193890e-11 2.550069367546636e-12 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 1.184510019832191e+01 1.183003611625487e+01 1.181498521332641e+01 1.179994748365501e+01 1.178492292135909e+01 + 1.176991152055712e+01 1.175491327536755e+01 1.173992817990884e+01 1.172495622829943e+01 1.170999741465779e+01 + 1.169505173310237e+01 1.168011917775162e+01 1.166519974272399e+01 1.165029342213795e+01 1.163540021011193e+01 + 1.162052010076441e+01 1.160565308821382e+01 1.159079916657862e+01 1.157595832997728e+01 1.156113057252825e+01 + 1.154631588834996e+01 1.153151427156088e+01 1.151672571627947e+01 1.150195021662419e+01 1.148718776671346e+01 + 1.147243836066577e+01 1.145770199259956e+01 1.144297865663328e+01 1.142826834688538e+01 1.141357105747433e+01 + 1.139888678251857e+01 1.138421551613657e+01 1.136955725244677e+01 1.135491198556763e+01 1.134027970961759e+01 + 1.132566041871512e+01 1.131105410697867e+01 1.129646076852669e+01 1.128188039747764e+01 1.126731298794997e+01 + 1.125275853406214e+01 1.123821702993260e+01 1.122368846967979e+01 1.120917284742218e+01 1.119467015727823e+01 + 1.118018039336637e+01 1.116570354980508e+01 1.115123962071280e+01 1.113678860020798e+01 1.112235048240908e+01 + 1.110792526143456e+01 1.109351293140286e+01 1.107911348643245e+01 1.106472692064177e+01 1.105035322814928e+01 + 1.103599240307343e+01 1.102164443953269e+01 1.100730933164549e+01 1.099298707353030e+01 1.097867765930556e+01 + 1.096438108308975e+01 1.095009733900130e+01 1.093582642115866e+01 1.092156832368030e+01 1.090732304068468e+01 + 1.089309056629023e+01 1.087887089461541e+01 1.086466401977870e+01 1.085046993589853e+01 1.083628863709334e+01 + 1.082212011748162e+01 1.080796437118179e+01 1.079382139231234e+01 1.077969117499169e+01 1.076557371333831e+01 + 1.075146900147065e+01 1.073737703350717e+01 1.072329780356632e+01 1.070923130576655e+01 1.069517753422632e+01 + 1.068113648306408e+01 1.066710814639828e+01 1.065309251834738e+01 1.063908959302984e+01 1.062509936456410e+01 + 1.061112182706863e+01 1.059715697466186e+01 1.058320480146227e+01 1.056926530158830e+01 1.055533846915840e+01 + 1.054142429829104e+01 1.052752278310466e+01 1.051363391771772e+01 1.049975769624867e+01 1.048589411281596e+01 + 1.047204316153806e+01 1.045820483653340e+01 1.044437913192047e+01 1.043056604181768e+01 1.041676556034352e+01 + 1.040297768161642e+01 1.038920239975484e+01 1.037543970887725e+01 1.036168960310208e+01 1.034795207654780e+01 + 1.033422712333286e+01 1.032051473757571e+01 1.030681491339481e+01 1.029312764490860e+01 1.027945292623556e+01 + 1.026579075149412e+01 1.025214111480275e+01 1.023850401027989e+01 1.022487943204399e+01 1.021126737421354e+01 + 1.019766783090694e+01 1.018408079624269e+01 1.017050626433922e+01 1.015694422931499e+01 1.014339468528846e+01 + 1.012985762637807e+01 1.011633304670228e+01 1.010282094037955e+01 1.008932130152833e+01 1.007583412426707e+01 + 1.006235940271423e+01 1.004889713098826e+01 1.003544730320761e+01 1.002200991349075e+01 1.000858495595611e+01 + 9.995172424722163e+00 9.981772313907358e+00 9.968384617630145e+00 9.955009330008981e+00 9.941646445162320e+00 + 9.928295957208617e+00 9.914957860266320e+00 9.901632148453889e+00 9.888318815889773e+00 9.875017856692436e+00 + 9.861729264980317e+00 9.848453034871882e+00 9.835189160485580e+00 9.821937635939873e+00 9.808698455353197e+00 + 9.795471612844016e+00 9.782257102530791e+00 9.769054918531968e+00 9.755865054966003e+00 9.742687505951341e+00 + 9.729522265606452e+00 9.716369328049780e+00 9.703228687399781e+00 9.690100337774904e+00 9.676984273293613e+00 + 9.663880488074357e+00 9.650788976235585e+00 9.637709731895756e+00 9.624642749173331e+00 9.611588022186748e+00 + 9.598545545054472e+00 9.585515311894952e+00 9.572497316826642e+00 9.559491553968009e+00 9.546498017437488e+00 + 9.533516701353536e+00 9.520547599834613e+00 9.507590706999174e+00 9.494646016965673e+00 9.481713523852560e+00 + 9.468793221778288e+00 9.455885104861313e+00 9.442989167220089e+00 9.430105402973073e+00 9.417233806238709e+00 + 9.404374371135466e+00 9.391527091781786e+00 9.378691962296129e+00 9.365868976796950e+00 9.353058129402688e+00 + 9.340259414231813e+00 9.327472825402777e+00 9.314698357034032e+00 9.301936003244025e+00 9.289185758151220e+00 + 9.276447615874064e+00 9.263721570531015e+00 9.251007616240530e+00 9.238305747121052e+00 9.225615957291046e+00 + 9.212938240868960e+00 9.200272591973253e+00 9.187619004722370e+00 9.174977473234772e+00 9.162347991628911e+00 + 9.149730554023241e+00 9.137125154536221e+00 9.124531787286292e+00 9.111950446391919e+00 9.099381125971549e+00 + 9.086823820143648e+00 9.074278523026656e+00 9.061745228739030e+00 9.049223931399224e+00 9.036714625125702e+00 + 9.024217304036908e+00 9.011731962251293e+00 8.999258593887324e+00 8.986797193063444e+00 8.974347753898108e+00 + 8.961910270509771e+00 8.949484737016887e+00 8.937071147537912e+00 8.924669496191306e+00 8.912279777095502e+00 + 8.899901984368976e+00 8.887536112130167e+00 8.875182154497541e+00 8.862840105589546e+00 8.850509959524626e+00 + 8.838191710421256e+00 8.825885352397878e+00 8.813590879572939e+00 8.801308286064907e+00 8.789037565992222e+00 + 8.776778713473353e+00 8.764531722626746e+00 8.752296587570854e+00 8.740073302424127e+00 8.727861861305035e+00 + 8.715662258332012e+00 8.703474487623518e+00 8.691298543298020e+00 8.679134419473952e+00 8.666982110269780e+00 + 8.654841609803961e+00 8.642712912194941e+00 8.630596011561174e+00 8.618490902021113e+00 8.606397577693221e+00 + 8.594316032695943e+00 8.582246261147736e+00 8.570188257167056e+00 8.558142014872352e+00 8.546107528382082e+00 + 8.534084791814701e+00 8.522073799288661e+00 8.510074544922407e+00 8.498087022834406e+00 8.486111227143113e+00 + 8.474147151966971e+00 8.462194791424441e+00 8.450254139633971e+00 8.438325190714020e+00 8.426407938783044e+00 + 8.414502377959495e+00 8.402608502361817e+00 8.390726306108480e+00 8.378855783317928e+00 8.366996928108620e+00 + 8.355149734599001e+00 8.343314196907537e+00 8.331490309152674e+00 8.319678065452869e+00 8.307877459926578e+00 + 8.296088486692241e+00 8.284311139868331e+00 8.272545413573296e+00 8.260791301925581e+00 8.249048799043644e+00 + 8.237317899045944e+00 8.225598596050943e+00 8.213890884177079e+00 8.202194757542799e+00 8.190510210266586e+00 + 8.178837236466865e+00 8.167175830262108e+00 8.155525985770758e+00 8.143887697111275e+00 8.132260958402117e+00 + 8.120645763761727e+00 8.109042107308563e+00 8.097449983161082e+00 8.085869385437743e+00 8.074300308256985e+00 + 8.062742745737271e+00 8.051196691997054e+00 8.039662141154793e+00 8.028139087328933e+00 8.016627524637929e+00 + 8.005127447200245e+00 7.993638849134322e+00 7.982161724558620e+00 7.970696067591595e+00 7.959241872351688e+00 + 7.947799132957380e+00 7.936367843527097e+00 7.924947998179305e+00 7.913539591032457e+00 7.902142616205003e+00 + 7.890757067815414e+00 7.879382939982121e+00 7.868020226823591e+00 7.856668922458269e+00 7.845329021004621e+00 + 7.834000516581088e+00 7.822683403306132e+00 7.811377675298203e+00 7.800083326675765e+00 7.788800351557255e+00 + 7.777528744061140e+00 7.766268498305876e+00 7.755019608409903e+00 7.743782068491678e+00 7.732555872669666e+00 + 7.721341015062316e+00 7.710137489788076e+00 7.698945290965412e+00 7.687764412712761e+00 7.676594849148589e+00 + 7.665436594391352e+00 7.654289642559492e+00 7.643153987771468e+00 7.632029624145747e+00 7.620916545800760e+00 + 7.609814746854981e+00 7.598724221426850e+00 7.587644963634824e+00 7.576576967597366e+00 7.565520227432924e+00 + 7.554474737259942e+00 7.543440491196885e+00 7.532417483362217e+00 7.521405707874366e+00 7.510405158851806e+00 + 7.499415830412979e+00 7.488437716676350e+00 7.477470811760371e+00 7.466515109783484e+00 7.455570604864154e+00 + 7.444637291120840e+00 7.433715162671977e+00 7.422804213636035e+00 7.411904438131464e+00 7.401015830276713e+00 + 7.390138384190245e+00 7.379272093990504e+00 7.368416953795946e+00 7.357572957725034e+00 7.346740099896214e+00 + 7.335918374427944e+00 7.325107775438666e+00 7.314308297046848e+00 7.303519933370942e+00 7.292742678529400e+00 + 7.281976526640671e+00 7.271221471823206e+00 7.260477508195482e+00 7.249744629875925e+00 7.239022830983001e+00 + 7.228312105635165e+00 7.217612447950875e+00 7.206923852048572e+00 7.196246312046720e+00 7.185579822063771e+00 + 7.174924376218174e+00 7.164279968628396e+00 7.153646593412868e+00 7.143024244690062e+00 7.132412916578432e+00 + 7.121812603196429e+00 7.111223298662504e+00 7.100644997095114e+00 7.090077692612701e+00 7.079521379333741e+00 + 7.068976051376674e+00 7.058441702859952e+00 7.047918327902033e+00 7.037405920621373e+00 7.026904475136423e+00 + 7.016413985565637e+00 7.005934446027467e+00 6.995465850640374e+00 6.985008193522812e+00 6.974561468793224e+00 + 6.964125670570069e+00 6.953700792971802e+00 6.943286830116882e+00 6.932883776123755e+00 6.922491625110874e+00 + 6.912110371196699e+00 6.901740008499687e+00 6.891380531138286e+00 6.881031933230944e+00 6.870694208896131e+00 + 6.860367352252279e+00 6.850051357417861e+00 6.839746218511328e+00 6.829451929651125e+00 6.819168484955712e+00 + 6.808895878543539e+00 6.798634104533068e+00 6.788383157042741e+00 6.778143030191029e+00 6.767913718096366e+00 + 6.757695214877219e+00 6.747487514652034e+00 6.737290611539279e+00 6.727104499657389e+00 6.716929173124835e+00 + 6.706764626060061e+00 6.696610852581521e+00 6.686467846807668e+00 6.676335602856960e+00 6.666214114847852e+00 + 6.656103376898796e+00 6.646003383128244e+00 6.635914127654651e+00 6.625835604596471e+00 6.615767808072159e+00 + 6.605710732200167e+00 6.595664371098951e+00 6.585628718886966e+00 6.575603769682662e+00 6.565589517604495e+00 + 6.555585956770917e+00 6.545593081300388e+00 6.535610885311354e+00 6.525639362922274e+00 6.515678508251603e+00 + 6.505728315417784e+00 6.495788778539287e+00 6.485859891734556e+00 6.475941649122047e+00 6.466034044820213e+00 + 6.456137072947508e+00 6.446250727622387e+00 6.436375002963300e+00 6.426509893088710e+00 6.416655392117070e+00 + 6.406811494166821e+00 6.396978193356429e+00 6.387155483804341e+00 6.377343359629018e+00 6.367541814948908e+00 + 6.357750843882468e+00 6.347970440548146e+00 6.338200599064411e+00 6.328441313549696e+00 6.318692578122477e+00 + 6.308954386901185e+00 6.299226734004287e+00 6.289509613550242e+00 6.279803019657492e+00 6.270106946444500e+00 + 6.260421388029714e+00 6.250746338531587e+00 6.241081792068580e+00 6.231427742759143e+00 6.221784184721724e+00 + 6.212151112074789e+00 6.202528518936784e+00 6.192916399426166e+00 6.183314747661382e+00 6.173723557760893e+00 + 6.164142823843156e+00 6.154572540026614e+00 6.145012700429728e+00 6.135463299170954e+00 6.125924330368746e+00 + 6.116395788141549e+00 6.106877666607819e+00 6.097369959886024e+00 6.087872662094601e+00 6.078385767352007e+00 + 6.068909269776704e+00 6.059443163487140e+00 6.049987442601775e+00 6.040542101239052e+00 6.031107133517430e+00 + 6.021682533555369e+00 6.012268295471315e+00 6.002864413383725e+00 5.993470881411052e+00 5.984087693671754e+00 + 5.974714844284278e+00 5.965352327367080e+00 5.956000137038617e+00 5.946658267417343e+00 5.937326712621709e+00 + 5.928005466770168e+00 5.918694523981177e+00 5.909393878373189e+00 5.900103524064659e+00 5.890823455174035e+00 + 5.881553665819781e+00 5.872294150120342e+00 5.863044902194178e+00 5.853805916159739e+00 5.844577186135479e+00 + 5.835358706239852e+00 5.826150470591316e+00 5.816952473308323e+00 5.807764708509323e+00 5.798587170312773e+00 + 5.789419852837129e+00 5.780262750200841e+00 5.771115856522363e+00 5.761979165920150e+00 5.752852672512660e+00 + 5.743736370418341e+00 5.734630253755649e+00 5.725534316643039e+00 5.716448553198963e+00 5.707372957541877e+00 + 5.698307523790231e+00 5.689252246062483e+00 5.680207118477086e+00 5.671172135152497e+00 5.662147290207161e+00 + 5.653132577759538e+00 5.644127991928084e+00 5.635133526831249e+00 5.626149176587487e+00 5.617174935315253e+00 + 5.608210797133003e+00 5.599256756159189e+00 5.590312806512264e+00 5.581378942310678e+00 5.572455157672897e+00 + 5.563541446717363e+00 5.554637803562536e+00 5.545744222326866e+00 5.536860697128810e+00 5.527987222086822e+00 + 5.519123791319354e+00 5.510270398944863e+00 5.501427039081799e+00 5.492593705848617e+00 5.483770393363775e+00 + 5.474957095745721e+00 5.466153807112911e+00 5.457360521583801e+00 5.448577233276843e+00 5.439803936310490e+00 + 5.431040624803197e+00 5.422287292873420e+00 5.413543934639609e+00 5.404810544220222e+00 5.396087115733708e+00 + 5.387373643298526e+00 5.378670121033128e+00 5.369976543055965e+00 5.361292903485493e+00 5.352619196440171e+00 + 5.343955416038445e+00 5.335301556398773e+00 5.326657611639607e+00 5.318023575879403e+00 5.309399443236614e+00 + 5.300785207829692e+00 5.292180863777094e+00 5.283586405197272e+00 5.275001826208682e+00 5.266427120929776e+00 + 5.257862283479006e+00 5.249307307974829e+00 5.240762188535700e+00 5.232226919280071e+00 5.223701494326393e+00 + 5.215185907793125e+00 5.206680153798718e+00 5.198184226461631e+00 5.189698119900310e+00 5.181221828233213e+00 + 5.172755345578794e+00 5.164298666055507e+00 5.155851783781802e+00 5.147414692876138e+00 5.138987387456968e+00 + 5.130569861642745e+00 5.122162109551923e+00 5.113764125302954e+00 5.105375903014296e+00 5.096997436804400e+00 + 5.088628720791720e+00 5.080269749094712e+00 5.071920515831827e+00 5.063581015121522e+00 5.055251241082247e+00 + 5.046931187832457e+00 5.038620849490610e+00 5.030320220175157e+00 5.022029294004551e+00 5.013748065097247e+00 + 5.005476527571697e+00 4.997214675546362e+00 4.988962503139684e+00 4.980720004470126e+00 4.972487173656138e+00 + 4.964264004816179e+00 4.956050492068697e+00 4.947846629532147e+00 4.939652411324984e+00 4.931467831565665e+00 + 4.923292884372640e+00 4.915127563864359e+00 4.906971864159286e+00 4.898825779375868e+00 4.890689303632560e+00 + 4.882562431047816e+00 4.874445155740092e+00 4.866337471827839e+00 4.858239373429513e+00 4.850150854663567e+00 + 4.842071909648451e+00 4.834002532502628e+00 4.825942717344547e+00 4.817892458292658e+00 4.809851749465419e+00 + 4.801820584981285e+00 4.793798958958709e+00 4.785786865516143e+00 4.777784298772041e+00 4.769791252844862e+00 + 4.761807721853052e+00 4.753833699915071e+00 4.745869181149370e+00 4.737914159674408e+00 4.729968629608630e+00 + 4.722032585070497e+00 4.714106020178457e+00 4.706188929050969e+00 4.698281305806488e+00 4.690383144563463e+00 + 4.682494439440351e+00 4.674615184555605e+00 4.666745374027678e+00 4.658885001975027e+00 4.651034062516102e+00 + 4.643192549769359e+00 4.635360457853252e+00 4.627537780886236e+00 4.619724512986761e+00 4.611920648273283e+00 + 4.604126180864258e+00 4.596341104878140e+00 4.588565414433377e+00 4.580799103648429e+00 4.573042166641749e+00 + 4.565294597531791e+00 4.557556390437004e+00 4.549827539475847e+00 4.542108038766774e+00 4.534397882428236e+00 + 4.526697064578689e+00 4.519005579336585e+00 4.511323420820381e+00 4.503650583148531e+00 4.495987060439482e+00 + 4.488332846811696e+00 4.480687936383624e+00 4.473052323273721e+00 4.465426001600438e+00 4.457808965482229e+00 + 4.450201209037552e+00 4.442602726384858e+00 4.435013511642601e+00 4.427433558929235e+00 4.419862862363214e+00 + 4.412301416062992e+00 4.404749214147024e+00 4.397206250733761e+00 4.389672519941661e+00 4.382148015889178e+00 + 4.374632732694760e+00 4.367126664476866e+00 4.359629805353945e+00 4.352142149444459e+00 4.344663690866858e+00 + 4.337194423739590e+00 4.329734342181116e+00 4.322283440309890e+00 4.314841712244363e+00 4.307409152102988e+00 + 4.299985754004224e+00 4.292571512066521e+00 4.285166420408334e+00 4.277770473148113e+00 4.270383664404318e+00 + 4.263005988295402e+00 4.255637438939815e+00 4.248278010456012e+00 4.240927696962451e+00 4.233586492577582e+00 + 4.226254391419860e+00 4.218931387607737e+00 4.211617475259670e+00 4.204312648494112e+00 4.197016901429517e+00 + 4.189730228184337e+00 4.182452622877026e+00 4.175184079626042e+00 4.167924592549835e+00 4.160674155766861e+00 + 4.153432763395572e+00 4.146200409554423e+00 4.138977088361870e+00 4.131762793936362e+00 4.124557520396357e+00 + 4.117361261860307e+00 4.110174012446667e+00 4.102995766273891e+00 4.095826517460431e+00 4.088666260124742e+00 + 4.081514988385281e+00 4.074372696360496e+00 4.067239378168845e+00 4.060115027928779e+00 4.052999639758758e+00 + 4.045893207777228e+00 4.038795726102648e+00 4.031707188853470e+00 4.024627590148148e+00 4.017556924105138e+00 + 4.010495184842892e+00 4.003442366479863e+00 3.996398463134506e+00 3.989363468925277e+00 3.982337377970627e+00 + 3.975320184389009e+00 3.968311882298880e+00 3.961312465818693e+00 3.954321929066901e+00 3.947340266161957e+00 + 3.940367471222317e+00 3.933403538366436e+00 3.926448461712768e+00 3.919502235379761e+00 3.912564853485875e+00 + 3.905636310149562e+00 3.898716599489274e+00 3.891805715623469e+00 3.884903652670597e+00 3.878010404749114e+00 + 3.871125965977475e+00 3.864250330474130e+00 3.857383492357537e+00 3.850525445746147e+00 3.843676184758418e+00 + 3.836835703512797e+00 3.830003996127744e+00 3.823181056721709e+00 3.816366879413152e+00 3.809561458320519e+00 + 3.802764787562267e+00 3.795976861256855e+00 3.789197673522732e+00 3.782427218478348e+00 3.775665490242162e+00 + 3.768912482932628e+00 3.762168190668202e+00 3.755432607567331e+00 3.748705727748473e+00 3.741987545330086e+00 + 3.735278054430617e+00 3.728577249168521e+00 3.721885123662257e+00 3.715201672030273e+00 3.708526888391025e+00 + 3.701860766862969e+00 3.695203301564556e+00 3.688554486614240e+00 3.681914316130479e+00 3.675282784231723e+00 + 3.668659885036427e+00 3.662045612663043e+00 3.655439961230028e+00 3.648842924855836e+00 3.642254497658916e+00 + 3.635674673757727e+00 3.629103447270722e+00 3.622540812316354e+00 3.615986763013077e+00 3.609441293479344e+00 + 3.602904397833612e+00 3.596376070194333e+00 3.589856304679958e+00 3.583345095408944e+00 3.576842436499748e+00 + 3.570348322070819e+00 3.563862746240612e+00 3.557385703127580e+00 3.550917186850179e+00 3.544457191526864e+00 + 3.538005711276083e+00 3.531562740216298e+00 3.525128272465957e+00 3.518702302143518e+00 3.512284823367430e+00 + 3.505875830256151e+00 3.499475316928134e+00 3.493083277501832e+00 3.486699706095698e+00 3.480324596828187e+00 + 3.473957943817754e+00 3.467599741182855e+00 3.461249983041939e+00 3.454908663513460e+00 3.448575776715876e+00 + 3.442251316767638e+00 3.435935277787201e+00 3.429627653893019e+00 3.423328439203543e+00 3.417037627837233e+00 + 3.410755213912539e+00 3.404481191547913e+00 3.398215554861811e+00 3.391958297972690e+00 3.385709414998999e+00 + 3.379468900059193e+00 3.373236747271727e+00 3.367012950755055e+00 3.360797504627632e+00 3.354590403007910e+00 + 3.348391640014343e+00 3.342201209765383e+00 3.336019106379492e+00 3.329845323975114e+00 3.323679856670706e+00 + 3.317522698584726e+00 3.311373843835625e+00 3.305233286541855e+00 3.299101020821872e+00 3.292977040794129e+00 + 3.286861340577083e+00 3.280753914289183e+00 3.274654756048885e+00 3.268563859974646e+00 3.262481220184913e+00 + 3.256406830798150e+00 3.250340685932801e+00 3.244282779707324e+00 3.238233106240173e+00 3.232191659649803e+00 + 3.226158434054668e+00 3.220133423573217e+00 3.214116622323909e+00 3.208108024425198e+00 3.202107623995534e+00 + 3.196115415153374e+00 3.190131392017173e+00 3.184155548705380e+00 3.178187879336453e+00 3.172228378028845e+00 + 3.166277038901010e+00 3.160333856071403e+00 3.154398823658475e+00 3.148471935780679e+00 3.142553186556476e+00 + 3.136642570104314e+00 3.130740080542647e+00 3.124845711989931e+00 3.118959458564619e+00 3.113081314385167e+00 + 3.107211273570024e+00 3.101349330237647e+00 3.095495478506491e+00 3.089649712495008e+00 3.083812026321653e+00 + 3.077982414104878e+00 3.072160869963139e+00 3.066347388014891e+00 3.060541962378585e+00 3.054744587172676e+00 + 3.048955256515617e+00 3.043173964525865e+00 3.037400705321871e+00 3.031635473022089e+00 3.025878261744974e+00 + 3.020129065608980e+00 3.014387878732562e+00 3.008654695234170e+00 3.002929509232260e+00 2.997212314845288e+00 + 2.991503106191707e+00 2.985801877389968e+00 2.980108622558526e+00 2.974423335815839e+00 2.968746011280356e+00 + 2.963076643070533e+00 2.957415225304822e+00 2.951761752101681e+00 2.946116217579562e+00 2.940478615856916e+00 + 2.934848941052199e+00 2.929227187283867e+00 2.923613348670372e+00 2.918007419330166e+00 2.912409393381707e+00 + 2.906819264943447e+00 2.901237028133838e+00 2.895662677071337e+00 2.890096205874396e+00 2.884537608661469e+00 + 2.878986879551011e+00 2.873444012661475e+00 2.867909002111315e+00 2.862381842018985e+00 2.856862526502940e+00 + 2.851351049681632e+00 2.845847405673515e+00 2.840351588597048e+00 2.834863592570676e+00 2.829383411712858e+00 + 2.823911040142049e+00 2.818446471976702e+00 2.812989701335270e+00 2.807540722336207e+00 2.802099529097966e+00 + 2.796666115739005e+00 2.791240476377771e+00 2.785822605132724e+00 2.780412496122314e+00 2.775010143465000e+00 + 2.769615541279230e+00 2.764228683683461e+00 2.758849564796147e+00 2.753478178735740e+00 2.748114519620698e+00 + 2.742758581569470e+00 2.737410358700515e+00 2.732069845132279e+00 2.726737034983225e+00 2.721411922371800e+00 + 2.716094501416463e+00 2.710784766235665e+00 2.705482710947860e+00 2.700188329671502e+00 2.694901616525047e+00 + 2.689622565626946e+00 2.684351171095656e+00 2.679087427049626e+00 2.673831327607318e+00 2.668582866887176e+00 + 2.663342039007661e+00 2.658108838087224e+00 2.652883258244320e+00 2.647665293597403e+00 2.642454938264927e+00 + 2.637252186365345e+00 2.632057032017109e+00 2.626869469338678e+00 2.621689492448502e+00 2.616517095465036e+00 + 2.611352272506734e+00 2.606195017692051e+00 2.601045325139437e+00 2.595903188967351e+00 2.590768603294245e+00 + 2.585641562238573e+00 2.580522059918787e+00 2.575410090453343e+00 2.570305647960693e+00 2.565208726559292e+00 + 2.560119320367595e+00 2.555037423504057e+00 2.549963030087127e+00 2.544896134235264e+00 2.539836730066918e+00 + 2.534784811700545e+00 2.529740373254598e+00 2.524703408847533e+00 2.519673912597801e+00 2.514651878623859e+00 + 2.509637301044157e+00 2.504630173977153e+00 2.499630491541298e+00 2.494638247855048e+00 2.489653437036854e+00 + 2.484676053205173e+00 2.479706090478458e+00 2.474743542975163e+00 2.469788404813739e+00 2.464840670112645e+00 + 2.459900332990330e+00 2.454967387565254e+00 2.450041827955863e+00 2.445123648280618e+00 2.440212842657967e+00 + 2.435309405206370e+00 2.430413330044276e+00 2.425524611290141e+00 2.420643243062418e+00 2.415769219479562e+00 + 2.410902534660027e+00 2.406043182722267e+00 2.401191157784735e+00 2.396346453965883e+00 2.391509065384169e+00 + 2.386678986158045e+00 2.381856210405966e+00 2.377040732246381e+00 2.372232545797750e+00 2.367431645178525e+00 + 2.362638024507160e+00 2.357851677902107e+00 2.353072599481823e+00 2.348300783364759e+00 2.343536223669372e+00 + 2.338778914514112e+00 2.334028850017436e+00 2.329286024297796e+00 2.324550431473648e+00 2.319822065663444e+00 + 2.315100920985640e+00 2.310386991558688e+00 2.305680271501042e+00 2.300980754931157e+00 2.296288435967485e+00 + 2.291603308728483e+00 2.286925367332601e+00 2.282254605898296e+00 2.277591018544022e+00 2.272934599388231e+00 + 2.268285342549378e+00 2.263643242145917e+00 2.259008292296300e+00 2.254380487118985e+00 2.249759820732421e+00 + 2.245146287255066e+00 2.240539880805373e+00 2.235940595501794e+00 2.231348425462784e+00 2.226763364806798e+00 + 2.222185407652288e+00 2.217614548117708e+00 2.213050780321513e+00 2.208494098382159e+00 2.203944496418095e+00 + 2.199401968547778e+00 2.194866508889663e+00 2.190338111562201e+00 2.185816770683846e+00 2.181302480373056e+00 + 2.176795234748279e+00 2.172295027927974e+00 2.167801854030591e+00 2.163315707174588e+00 2.158836581478416e+00 + 2.154364471060529e+00 2.149899370039381e+00 2.145441272533427e+00 2.140990172661120e+00 2.136546064540917e+00 + 2.132108942291266e+00 2.127678800030624e+00 2.123255631877447e+00 2.118839431950187e+00 2.114430194367295e+00 + 2.110027913247228e+00 2.105632582708442e+00 2.101244196869388e+00 2.096862749848520e+00 2.092488235764292e+00 + 2.088120648735158e+00 2.083759982879573e+00 2.079406232315990e+00 2.075059391162862e+00 2.070719453538646e+00 + 2.066386413561792e+00 2.062060265350757e+00 2.057741003023992e+00 2.053428620699954e+00 2.049123112497094e+00 + 2.044824472533869e+00 2.040532694928731e+00 2.036247773800133e+00 2.031969703266531e+00 2.027698477446379e+00 + 2.023434090458129e+00 2.019176536420236e+00 2.014925809451152e+00 2.010681903669336e+00 2.006444813193236e+00 + 2.002214532141311e+00 1.997991054632010e+00 1.993774374783790e+00 1.989564486715105e+00 1.985361384544408e+00 + 1.981165062390151e+00 1.976975514370793e+00 1.972792734604783e+00 1.968616717210577e+00 1.964447456306630e+00 + 1.960284946011392e+00 1.956129180443322e+00 1.951980153720870e+00 1.947837859962493e+00 1.943702293286642e+00 + 1.939573447811771e+00 1.935451317656337e+00 1.931335896938793e+00 1.927227179777590e+00 1.923125160291183e+00 + 1.919029832598028e+00 1.914941190816578e+00 1.910859229065287e+00 1.906783941462608e+00 1.902715322126995e+00 + 1.898653365176903e+00 1.894598064730783e+00 1.890549414907093e+00 1.886507409824286e+00 1.882472043600813e+00 + 1.878443310355132e+00 1.874421204205691e+00 1.870405719270951e+00 1.866396849669361e+00 1.862394589519377e+00 + 1.858398932939454e+00 1.854409874048042e+00 1.850427406963598e+00 1.846451525804576e+00 1.842482224689429e+00 + 1.838519497736610e+00 1.834563339064575e+00 1.830613742791775e+00 1.826670703036666e+00 1.822734213917703e+00 + 1.818804269553338e+00 1.814880864062026e+00 1.810963991562218e+00 1.807053646172373e+00 1.803149822010940e+00 + 1.799252513196377e+00 1.795361713847136e+00 1.791477418081670e+00 1.787599620018433e+00 1.783728313775881e+00 + 1.779863493472466e+00 1.776005153226644e+00 1.772153287156867e+00 1.768307889381588e+00 1.764468954019264e+00 + 1.760636475188347e+00 1.756810447007290e+00 1.752990863594549e+00 1.749177719068575e+00 1.745371007547827e+00 + 1.741570723150754e+00 1.737776859995811e+00 1.733989412201454e+00 1.730208373886134e+00 1.726433739168308e+00 + 1.722665502166428e+00 1.718903656998948e+00 1.715148197784323e+00 1.711399118641004e+00 1.707656413687447e+00 + 1.703920077042109e+00 1.700190102823439e+00 1.696466485149892e+00 1.692749218139922e+00 1.689038295911985e+00 + 1.685333712584534e+00 1.681635462276021e+00 1.677943539104903e+00 1.674257937189631e+00 1.670578650648659e+00 + 1.666905673600443e+00 1.663239000163437e+00 1.659578624456093e+00 1.655924540596865e+00 1.652276742704208e+00 + 1.648635224896575e+00 1.644999981292424e+00 1.641371006010202e+00 1.637748293168367e+00 1.634131836885372e+00 + 1.630521631279671e+00 1.626917670469719e+00 1.623319948573968e+00 1.619728459710873e+00 1.616143197998889e+00 + 1.612564157556467e+00 1.608991332502063e+00 1.605424716954130e+00 1.601864305031124e+00 1.598310090851497e+00 + 1.594762068533703e+00 1.591220232196197e+00 1.587684575957430e+00 1.584155093935859e+00 1.580631780249937e+00 + 1.577114629018117e+00 1.573603634358855e+00 1.570098790390603e+00 1.566600091231816e+00 1.563107531000947e+00 + 1.559621103816450e+00 1.556140803796780e+00 1.552666625060390e+00 1.549198561725734e+00 1.545736607911266e+00 + 1.542280757735441e+00 1.538831005316709e+00 1.535387344773530e+00 1.531949770224353e+00 1.528518275787633e+00 + 1.525092855581826e+00 1.521673503725383e+00 1.518260214336760e+00 1.514852981534411e+00 1.511451799436788e+00 + 1.508056662162347e+00 1.504667563829540e+00 1.501284498556822e+00 1.497907460462647e+00 1.494536443665469e+00 + 1.491171442283741e+00 1.487812450435918e+00 1.484459462240453e+00 1.481112471815801e+00 1.477771473280414e+00 + 1.474436460752748e+00 1.471107428351256e+00 1.467784370194392e+00 1.464467280400610e+00 1.461156153088363e+00 + 1.457850982376107e+00 1.454551762382294e+00 1.451258487225379e+00 1.447971151023815e+00 1.444689747896057e+00 + 1.441414271960557e+00 1.438144717335771e+00 1.434881078140152e+00 1.431623348492154e+00 1.428371522510231e+00 + 1.425125594312837e+00 1.421885558018425e+00 1.418651407745451e+00 1.415423137612366e+00 1.412200741737627e+00 + 1.408984214239685e+00 1.405773549236996e+00 1.402568740848013e+00 1.399369783191191e+00 1.396176670384982e+00 + 1.392989396547842e+00 1.389807955798222e+00 1.386632342254580e+00 1.383462550035366e+00 1.380298573259037e+00 + 1.377140406044044e+00 1.373988042508844e+00 1.370841476771888e+00 1.367700702951632e+00 1.364565715166528e+00 + 1.361436507535033e+00 1.358313074175598e+00 1.355195409206678e+00 1.352083506746727e+00 1.348977360914198e+00 + 1.345876965827546e+00 1.342782315605225e+00 1.339693404365688e+00 1.336610226227389e+00 1.333532775308783e+00 + 1.330461045728323e+00 1.327395031604463e+00 1.324334727055657e+00 1.321280126200359e+00 1.318231223157023e+00 + 1.315188012044103e+00 1.312150486980052e+00 1.309118642083325e+00 1.306092471472375e+00 1.303071969265657e+00 + 1.300057129581623e+00 1.297047946538730e+00 1.294044414255429e+00 1.291046526850176e+00 1.288054278441424e+00 + 1.285067663147626e+00 1.282086675087237e+00 1.279111308378711e+00 1.276141557140500e+00 1.273177415491062e+00 + 1.270218877548847e+00 1.267265937432311e+00 1.264318589259907e+00 1.261376827150089e+00 1.258440645221310e+00 + 1.255510037592027e+00 1.252584998380690e+00 1.249665521705757e+00 1.246751601685678e+00 1.243843232438909e+00 + 1.240940408083904e+00 1.238043122739116e+00 1.235151370523000e+00 1.232265145554009e+00 1.229384441950597e+00 + 1.226509253831218e+00 1.223639575314326e+00 1.220775400518375e+00 1.217916723561819e+00 1.215063538563112e+00 + 1.212215839640708e+00 1.209373620913059e+00 1.206536876498622e+00 1.203705600515848e+00 1.200879787083194e+00 + 1.198059430319111e+00 1.195244524342055e+00 1.192435063270478e+00 1.189631041222836e+00 1.186832452317581e+00 + 1.184039290673168e+00 1.181251550408052e+00 1.178469225640684e+00 1.175692310489519e+00 1.172920799073013e+00 + 1.170154685509618e+00 1.167393963917788e+00 1.164638628415977e+00 1.161888673122640e+00 1.159144092156229e+00 + 1.156404879635199e+00 1.153671029678004e+00 1.150942536403098e+00 1.148219393928934e+00 1.145501596373967e+00 + 1.142789137856650e+00 1.140082012495438e+00 1.137380214408784e+00 1.134683737715142e+00 1.131992576532967e+00 + 1.129306724980710e+00 1.126626177176830e+00 1.123950927239775e+00 1.121280969288003e+00 1.118616297439967e+00 + 1.115956905814120e+00 1.113302788528917e+00 1.110653939702811e+00 1.108010353454256e+00 1.105372023901706e+00 + 1.102738945163616e+00 1.100111111358439e+00 1.097488516604628e+00 1.094871155020640e+00 1.092259020724924e+00 + 1.089652107835939e+00 1.087050410472135e+00 1.084453922751969e+00 1.081862638793893e+00 1.079276552716361e+00 + 1.076695658637827e+00 1.074119950676745e+00 1.071549422951569e+00 1.068984069580755e+00 1.066423884682753e+00 + 1.063868862376019e+00 1.061318996779007e+00 1.058774282010170e+00 1.056234712187964e+00 1.053700281430840e+00 + 1.051170983857254e+00 1.048646813585659e+00 1.046127764734510e+00 1.043613831422260e+00 1.041105007767362e+00 + 1.038601287888272e+00 1.036102665903443e+00 1.033609135931328e+00 1.031120692090381e+00 1.028637328499058e+00 + 1.026159039275810e+00 1.023685818539093e+00 1.021217660407362e+00 1.018754558999067e+00 1.016296508432665e+00 + 1.013843502826609e+00 1.011395536299353e+00 1.008952602969351e+00 1.006514696955057e+00 1.004081812374924e+00 + 1.001653943347407e+00 9.992310839909596e-01 9.968132284240359e-01 9.944003707650890e-01 9.919925051325733e-01 + 9.895896256449433e-01 9.871917264206521e-01 9.847988015781539e-01 9.824108452359025e-01 9.800278515123521e-01 + 9.776498145259559e-01 9.752767283951689e-01 9.729085872384446e-01 9.705453851742363e-01 9.681871163209983e-01 + 9.658337747971858e-01 9.634853547212503e-01 9.611418502116473e-01 9.588032553868296e-01 9.564695643652531e-01 + 9.541407712653692e-01 9.518168702056341e-01 9.494978553045001e-01 9.471837206804223e-01 9.448744604518532e-01 + 9.425700687372479e-01 9.402705396550599e-01 9.379758673237428e-01 9.356860458617511e-01 9.334010693875392e-01 + 9.311209320195587e-01 9.288456278762662e-01 9.265751510761141e-01 9.243094957375571e-01 9.220486559790483e-01 + 9.197926259190422e-01 9.175413996759921e-01 9.152949713683535e-01 9.130533351145778e-01 9.108164850331213e-01 + 9.085844152424365e-01 9.063571198609776e-01 9.041345930071989e-01 9.019168287995535e-01 8.997038213564960e-01 + 8.974955647964804e-01 8.952920532379602e-01 8.930932807993895e-01 8.908992415992220e-01 8.887099297559116e-01 + 8.865253393879137e-01 8.843454646136791e-01 8.821702995516649e-01 8.799998383203228e-01 8.778340750381082e-01 + 8.756730038234739e-01 8.735166187948746e-01 8.713649140707634e-01 8.692178837695959e-01 8.670755220098232e-01 + 8.649378229099016e-01 8.628047805882842e-01 8.606763891634249e-01 8.585526427537781e-01 8.564335354777970e-01 + 8.543190614539353e-01 8.522092148006480e-01 8.501039896363877e-01 8.480033800796097e-01 8.459073802487667e-01 + 8.438159842623136e-01 8.417291862387039e-01 8.396469802963914e-01 8.375693605538298e-01 8.354963211294733e-01 + 8.334278561417752e-01 8.313639597091915e-01 8.293046259501734e-01 8.272498489831766e-01 8.251996229266541e-01 + 8.231539418990600e-01 8.211128000188496e-01 8.190761914044744e-01 8.170441101743895e-01 8.150165504470491e-01 + 8.129935063409072e-01 8.109749719744173e-01 8.089609414660327e-01 8.069514089342078e-01 8.049463684973976e-01 + 8.029458142740543e-01 8.009497403826332e-01 7.989581409415876e-01 7.969710100693709e-01 7.949883418844375e-01 + 7.930101305052417e-01 7.910363700502369e-01 7.890670546378770e-01 7.871021783866162e-01 7.851417354149083e-01 + 7.831857198412076e-01 7.812341257839672e-01 7.792869473616411e-01 7.773441786926844e-01 7.754058138955490e-01 + 7.734718470886908e-01 7.715422723905624e-01 7.696170839196185e-01 7.676962757943125e-01 7.657798421330989e-01 + 7.638677770544305e-01 7.619600746767630e-01 7.600567291185483e-01 7.581577344982415e-01 7.562630849342962e-01 + 7.543727745451663e-01 7.524867974493061e-01 7.506051477651688e-01 7.487278196112092e-01 7.468548071058804e-01 + 7.449861043676366e-01 7.431217055149322e-01 7.412616046662198e-01 7.394057959399548e-01 7.375542734545907e-01 + 7.357070313285805e-01 7.338640636803793e-01 7.320253646284400e-01 7.301909282912175e-01 7.283607487871652e-01 + 7.265348202347370e-01 7.247131367523862e-01 7.228956924585682e-01 7.210824814717359e-01 7.192734979103437e-01 + 7.174687358928449e-01 7.156681895376936e-01 7.138718529633438e-01 7.120797202882497e-01 7.102917856308643e-01 + 7.085080431096433e-01 7.067284868430389e-01 7.049531109495056e-01 7.031819095474970e-01 7.014148767554675e-01 + 6.996520066918709e-01 6.978932934751610e-01 6.961387312237917e-01 6.943883140562170e-01 6.926420360908908e-01 + 6.908998914462667e-01 6.891618742407996e-01 6.874279785929424e-01 6.856981986211498e-01 6.839725284438737e-01 + 6.822509621795712e-01 6.805334939466938e-01 6.788201178636959e-01 6.771108280490323e-01 6.754056186211560e-01 + 6.737044836985214e-01 6.720074173995820e-01 6.703144138427916e-01 6.686254671466050e-01 6.669405714294750e-01 + 6.652597208098568e-01 6.635829094062031e-01 6.619101313369683e-01 6.602413807206061e-01 6.585766516755713e-01 + 6.569159383203169e-01 6.552592347732970e-01 6.536065351529652e-01 6.519578335777757e-01 6.503131241661829e-01 + 6.486724010366403e-01 6.470356583076016e-01 6.454028900975206e-01 6.437740905248515e-01 6.421492537080489e-01 + 6.405283737655656e-01 6.389114448158563e-01 6.372984609773739e-01 6.356894163685732e-01 6.340843051079088e-01 + 6.324831213138328e-01 6.308858591047999e-01 6.292925125992642e-01 6.277030759156799e-01 6.261175431725007e-01 + 6.245359084881801e-01 6.229581659811716e-01 6.213843097699309e-01 6.198143339729103e-01 6.182482327085640e-01 + 6.166860000953464e-01 6.151276302517111e-01 6.135731172961122e-01 6.120224553470032e-01 6.104756385228381e-01 + 6.089326609420713e-01 6.073935167231557e-01 6.058581999845468e-01 6.043267048446977e-01 6.027990254220615e-01 + 6.012751558350929e-01 5.997550902022464e-01 5.982388226419743e-01 5.967263472727323e-01 5.952176582129732e-01 + 5.937127495811512e-01 5.922116154957202e-01 5.907142500751342e-01 5.892206474378469e-01 5.877308017023124e-01 + 5.862447069869845e-01 5.847623574103171e-01 5.832837470907644e-01 5.818088701467800e-01 5.803377206968180e-01 + 5.788702928593317e-01 5.774065807527762e-01 5.759465784956044e-01 5.744902802062705e-01 5.730376800032286e-01 + 5.715887720049325e-01 5.701435503298361e-01 5.687020090963933e-01 5.672641424230577e-01 5.658299444282838e-01 + 5.643994092305251e-01 5.629725309482358e-01 5.615493036998697e-01 5.601297216038805e-01 5.587137787787223e-01 + 5.573014693428492e-01 5.558927874147145e-01 5.544877271127728e-01 5.530862825554776e-01 5.516884478612831e-01 + 5.502942171486430e-01 5.489035845360112e-01 5.475165441418414e-01 5.461330900845884e-01 5.447532164827048e-01 + 5.433769174546459e-01 5.420041871188643e-01 5.406350195938152e-01 5.392694089979513e-01 5.379073494497271e-01 + 5.365488350675965e-01 5.351938599700136e-01 5.338424182754320e-01 5.324945041023057e-01 5.311501115690886e-01 + 5.298092347942344e-01 5.284718678961979e-01 5.271380049934313e-01 5.258076402043905e-01 5.244807676475280e-01 + 5.231573814412983e-01 5.218374757041553e-01 5.205210445545529e-01 5.192080821109445e-01 5.178985824917850e-01 + 5.165925398155270e-01 5.152899482006259e-01 5.139908017655346e-01 5.126950946287073e-01 5.114028209085977e-01 + 5.101139747236602e-01 5.088285501923481e-01 5.075465414331159e-01 5.062679425644168e-01 5.049927477047058e-01 + 5.037209509724357e-01 5.024525464860612e-01 5.011875283640356e-01 4.999258907248134e-01 4.986676276868477e-01 + 4.974127333685937e-01 4.961612018885036e-01 4.949130273650330e-01 4.936682039166345e-01 4.924267256617630e-01 + 4.911885867188718e-01 4.899537812064148e-01 4.887223032428465e-01 4.874941469466201e-01 4.862693064361900e-01 + 4.850477758300100e-01 4.838295492465340e-01 4.826146208042155e-01 4.814029846215092e-01 4.801946348168681e-01 + 4.789895655087472e-01 4.777877708155995e-01 4.765892448558791e-01 4.753939817480404e-01 4.742019756105367e-01 + 4.730132205618220e-01 4.718277107203507e-01 4.706454402045759e-01 4.694664031329525e-01 4.682905936239337e-01 + 4.671180057959737e-01 4.659486337675262e-01 4.647824716570455e-01 4.636195135829849e-01 4.624597536637991e-01 + 4.613031860179409e-01 4.601498047638656e-01 4.589996040200259e-01 4.578525779048765e-01 4.567087205368712e-01 + 4.555680260344633e-01 4.544304885161072e-01 4.532961021002569e-01 4.521648609053661e-01 4.510367590498890e-01 + 4.499117906522792e-01 4.487899498309905e-01 4.476712307044773e-01 4.465556273911929e-01 4.454431340095921e-01 + 4.443337446781276e-01 4.432274535152543e-01 4.421242546394258e-01 4.410241421690960e-01 4.399271102227187e-01 + 4.388331529187480e-01 4.377422643756375e-01 4.366544387118417e-01 4.355696700458138e-01 4.344879524960082e-01 + 4.334092801808788e-01 4.323336472188792e-01 4.312610477284635e-01 4.301914758280859e-01 4.291249256361997e-01 + 4.280613912712594e-01 4.270008668517183e-01 4.259433464960309e-01 4.248888243226509e-01 4.238372944500320e-01 + 4.227887509966284e-01 4.217431880808940e-01 4.207005998212823e-01 4.196609803362479e-01 4.186243237442441e-01 + 4.175906241637251e-01 4.165598757131449e-01 4.155320725109569e-01 4.145072086756156e-01 4.134852783255747e-01 + 4.124662755792881e-01 4.114501945552099e-01 4.104370293717939e-01 4.094267741474934e-01 4.084194230007635e-01 + 4.074149700500570e-01 4.064134094138285e-01 4.054147352105315e-01 4.044189415586203e-01 4.034260225765486e-01 + 4.024359723827703e-01 4.014487850957392e-01 4.004644548339098e-01 3.994829757157350e-01 3.985043418596696e-01 + 3.975285473841670e-01 3.965555864076816e-01 3.955854530486667e-01 3.946181414255767e-01 3.936536456568652e-01 + 3.926919598609864e-01 3.917330781563938e-01 3.907769946615419e-01 3.898237034948840e-01 3.888731987748745e-01 + 3.879254746199671e-01 3.869805251486158e-01 3.860383444792740e-01 3.850989267303966e-01 3.841622660204363e-01 + 3.832283564678482e-01 3.822971921910854e-01 3.813687673086020e-01 3.804430759388526e-01 3.795201122002897e-01 + 3.785998702113687e-01 3.776823440905425e-01 3.767675279562652e-01 3.758554159269913e-01 3.749460021211741e-01 + 3.740392806572675e-01 3.731352456537259e-01 3.722338912290024e-01 3.713352115015520e-01 3.704392005898275e-01 + 3.695458526122837e-01 3.686551616873742e-01 3.677671219335527e-01 3.668817274692731e-01 3.659989724129900e-01 + 3.651188508831563e-01 3.642413569982267e-01 3.633664848766547e-01 3.624942286368943e-01 3.616245823973996e-01 + 3.607575402766243e-01 3.598930963930223e-01 3.590312448650478e-01 3.581719798111540e-01 3.573152953497958e-01 + 3.564611855994264e-01 3.556096446785001e-01 3.547606667054706e-01 3.539142457987917e-01 3.530703760769175e-01 + 3.522290516583018e-01 3.513902666613987e-01 3.505540152046622e-01 3.497202914065458e-01 3.488890893855034e-01 + 3.480604032599897e-01 3.472342271484578e-01 3.464105551693616e-01 3.455893814411555e-01 3.447707000822932e-01 + 3.439545052112287e-01 3.431407909464156e-01 3.423295514063079e-01 3.415207807093598e-01 3.407144729740253e-01 + 3.399106223187577e-01 3.391092228620113e-01 3.383102687222401e-01 3.375137540178980e-01 3.367196728674387e-01 + 3.359280193893159e-01 3.351387877019841e-01 3.343519719238973e-01 3.335675661735084e-01 3.327855645692723e-01 + 3.320059612296424e-01 3.312287502730731e-01 3.304539258180176e-01 3.296814819829305e-01 3.289114128862653e-01 + 3.281437126464763e-01 3.273783753820168e-01 3.266153952113410e-01 3.258547662529030e-01 3.250964826251567e-01 + 3.243405384465560e-01 3.235869278355544e-01 3.228356449106061e-01 3.220866837901651e-01 3.213400385926854e-01 + 3.205957034366205e-01 3.198536724404248e-01 3.191139397225519e-01 3.183764994014560e-01 3.176413455955904e-01 + 3.169084724234095e-01 3.161778740033671e-01 3.154495444539175e-01 3.147234778935138e-01 3.139996684406107e-01 + 3.132781102136613e-01 3.125587973311206e-01 3.118417239114415e-01 3.111268840730783e-01 3.104142719344850e-01 + 3.097038816141156e-01 3.089957072304235e-01 3.082897429018632e-01 3.075859827468881e-01 3.068844208839528e-01 + 3.061850514315106e-01 3.054878685080154e-01 3.047928662319213e-01 3.041000387216827e-01 3.034093800957526e-01 + 3.027208844725854e-01 3.020345459706350e-01 3.013503587083554e-01 3.006683168042003e-01 2.999884143766235e-01 + 2.993106455440793e-01 2.986350044250213e-01 2.979614851379038e-01 2.972900818011801e-01 2.966207885333046e-01 + 2.959535994527310e-01 2.952885086779137e-01 2.946255103273057e-01 2.939645985193615e-01 2.933057673725348e-01 + 2.926490110052801e-01 2.919943235360504e-01 2.913416990833000e-01 2.906911317654829e-01 2.900426157010534e-01 + 2.893961450084647e-01 2.887517138061708e-01 2.881093162126260e-01 2.874689463462842e-01 2.868305983255990e-01 + 2.861942662690242e-01 2.855599442950141e-01 2.849276265220227e-01 2.842973070685033e-01 2.836689800529103e-01 + 2.830426395936975e-01 2.824182798093192e-01 2.817958948182286e-01 2.811754787388796e-01 2.805570256897268e-01 + 2.799405297892240e-01 2.793259851558245e-01 2.787133859079827e-01 2.781027261641523e-01 2.774940000427872e-01 + 2.768872016623420e-01 2.762823251412696e-01 2.756793645980242e-01 2.750783141510602e-01 2.744791679188311e-01 + 2.738819200197907e-01 2.732865645723932e-01 2.726930956950923e-01 2.721015075063423e-01 2.715117941245966e-01 + 2.709239496683093e-01 2.703379682559343e-01 2.697538440059259e-01 2.691715710367374e-01 2.685911434668228e-01 + 2.680125554146365e-01 2.674358009986322e-01 2.668608743372635e-01 2.662877695489846e-01 2.657164807522494e-01 + 2.651470020655118e-01 2.645793276072255e-01 2.640134514958445e-01 2.634493678498229e-01 2.628870707876148e-01 + 2.623265544276734e-01 2.617678128884531e-01 2.612108402884079e-01 2.606556307459915e-01 2.601021783796580e-01 + 2.595504773078608e-01 2.590005216490543e-01 2.584523055216923e-01 2.579058230442291e-01 2.573610683351178e-01 + 2.568180355128129e-01 2.562767186957681e-01 2.557371120024374e-01 2.551992095512745e-01 2.546630054607338e-01 + 2.541284938492686e-01 2.535956688353333e-01 2.530645245373814e-01 2.525350550738671e-01 2.520072545632441e-01 + 2.514811171239671e-01 2.509566368744887e-01 2.504338079332638e-01 2.499126244187457e-01 2.493930804493888e-01 + 2.488751701436468e-01 2.483588876199736e-01 2.478442269968230e-01 2.473311823926494e-01 2.468197479259061e-01 + 2.463099177150473e-01 2.458016858785268e-01 2.452950465347987e-01 2.447899938023168e-01 2.442865217995350e-01 + 2.437846246449071e-01 2.432842964568875e-01 2.427855313539295e-01 2.422883234544872e-01 2.417926668770146e-01 + 2.412985557399656e-01 2.408059841617944e-01 2.403149462609543e-01 2.398254361558995e-01 2.393374479650841e-01 + 2.388509758069619e-01 2.383660137999866e-01 2.378825560626122e-01 2.374005967132927e-01 2.369201298704823e-01 + 2.364411496526343e-01 2.359636501782029e-01 2.354876255656420e-01 2.350130699334060e-01 2.345399773999479e-01 + 2.340683420837222e-01 2.335981581031827e-01 2.331294195767834e-01 2.326621206229778e-01 2.321962553602203e-01 + 2.317318179069645e-01 2.312688023816648e-01 2.308072029027743e-01 2.303470135887476e-01 2.298882285580383e-01 + 2.294308419291006e-01 2.289748478203878e-01 2.285202403503545e-01 2.280670136374541e-01 2.276151618001410e-01 + 2.271646789568687e-01 2.267155592260911e-01 2.262677967262625e-01 2.258213855758365e-01 2.253763198932670e-01 + 2.249325937970081e-01 2.244902014055137e-01 2.240491368372375e-01 2.236093942106337e-01 2.231709676441558e-01 + 2.227338512562580e-01 2.222980391653943e-01 2.218635254900184e-01 2.214303043485844e-01 2.209983698595459e-01 + 2.205677161413573e-01 2.201383373124721e-01 2.197102274913443e-01 2.192833807964278e-01 2.188577913461766e-01 + 2.184334532590448e-01 2.180103606534859e-01 2.175885076479540e-01 2.171678883609029e-01 2.167484969107871e-01 + 2.163303274160595e-01 2.159133739951748e-01 2.154976307665865e-01 2.150830918487489e-01 2.146697513601156e-01 + 2.142576034191406e-01 2.138466421442777e-01 2.134368616539811e-01 2.130282560667045e-01 2.126208195009017e-01 + 2.122145460750268e-01 2.118094299075339e-01 2.114054651168764e-01 2.110026458215086e-01 2.106009661398841e-01 + 2.102004201904573e-01 2.098010020916819e-01 2.094027059620115e-01 2.090055259199003e-01 2.086094560838022e-01 + 2.082144905721711e-01 2.078206235034609e-01 2.074278489961252e-01 2.070361611686185e-01 2.066455541393945e-01 + 2.062560220269069e-01 2.058675589496098e-01 2.054801590259569e-01 2.050938163744025e-01 2.047085251134001e-01 + 2.043242793614038e-01 2.039410732368675e-01 2.035589008582454e-01 2.031777563439909e-01 2.027976338125581e-01 + 2.024185273824009e-01 2.020404311719735e-01 2.016633392997295e-01 2.012872458841228e-01 2.009121450436073e-01 + 2.005380308966374e-01 2.001648975616662e-01 1.997927391571482e-01 1.994215498015371e-01 1.990513236132870e-01 + 1.986820547108515e-01 1.983137372126848e-01 1.979463652372407e-01 1.975799329029729e-01 1.972144343283358e-01 + 1.968498636317829e-01 1.964862149317682e-01 1.961234823467457e-01 1.957616599951694e-01 1.954007419954929e-01 + 1.950407224661702e-01 1.946815955256556e-01 1.943233552924024e-01 1.939659958848651e-01 1.936095114214971e-01 + 1.932538960207526e-01 1.928991438010857e-01 1.925452488809498e-01 1.921922053787992e-01 1.918400074130876e-01 + 1.914886491022692e-01 1.911381245647975e-01 1.907884279191267e-01 1.904395532837105e-01 1.900914947770033e-01 + 1.897442465174584e-01 1.893978026235301e-01 1.890521572136722e-01 1.887073044063385e-01 1.883632383199831e-01 + 1.880199530730597e-01 1.876774427840224e-01 1.873357015713252e-01 1.869947235534217e-01 1.866545028487660e-01 + 1.863150335758119e-01 1.859763098530137e-01 1.856383257988248e-01 1.853010755316992e-01 1.849645531700910e-01 + 1.846287528324541e-01 1.842936686372424e-01 1.839592947029097e-01 1.836256251479099e-01 1.832926540906972e-01 + 1.829603756497252e-01 1.826287839434479e-01 1.822978730903191e-01 1.819676372087931e-01 1.816380704173234e-01 + 1.813091668343641e-01 1.809809205783691e-01 1.806533257677921e-01 1.803263765210874e-01 1.800000669567086e-01 + 1.796743911931098e-01 1.793493433487447e-01 1.790249175420675e-01 1.787011078915319e-01 1.783779085155919e-01 + 1.780553135327013e-01 1.777333170613142e-01 1.774119132198842e-01 1.770910961268656e-01 1.767708599007120e-01 + 1.764511986598777e-01 1.761321065228161e-01 1.758135776079814e-01 1.754956060338275e-01 1.751781859188084e-01 + 1.748613113813778e-01 1.745449765399896e-01 1.742291755130979e-01 1.739139024191565e-01 1.735991513766195e-01 + 1.732849165039405e-01 1.729711919195737e-01 1.726579717419727e-01 1.723452500895918e-01 1.720330210808845e-01 + 1.717212788343051e-01 1.714100174683072e-01 1.710992311013450e-01 1.707889138518721e-01 1.704790598383425e-01 + 1.701696631792104e-01 1.698607179929294e-01 1.695522183979535e-01 1.692441585127366e-01 1.689365324557326e-01 + 1.686293343453954e-01 1.683225583001789e-01 1.680161984385371e-01 1.677102488789240e-01 1.674047037397934e-01 + 1.670995571395990e-01 1.667948031967950e-01 1.664904360298352e-01 1.661864497571736e-01 1.658828384972639e-01 + 1.655795969941628e-01 1.652767236785968e-01 1.649742183271500e-01 1.646720807183821e-01 1.643703106308530e-01 + 1.640689078431228e-01 1.637678721337512e-01 1.634672032812983e-01 1.631669010643239e-01 1.628669652613877e-01 + 1.625673956510499e-01 1.622681920118704e-01 1.619693541224087e-01 1.616708817612252e-01 1.613727747068795e-01 + 1.610750327379318e-01 1.607776556329416e-01 1.604806431704690e-01 1.601839951290739e-01 1.598877112873163e-01 + 1.595917914237559e-01 1.592962353169526e-01 1.590010427454666e-01 1.587062134878576e-01 1.584117473226854e-01 + 1.581176440285100e-01 1.578239033838913e-01 1.575305251673893e-01 1.572375091575637e-01 1.569448551329745e-01 + 1.566525628721817e-01 1.563606321537451e-01 1.560690627562245e-01 1.557778544581799e-01 1.554870070381714e-01 + 1.551965202747587e-01 1.549063939465015e-01 1.546166278319599e-01 1.543272217096940e-01 1.540381753582634e-01 + 1.537494885562282e-01 1.534611610821482e-01 1.531731927145834e-01 1.528855832320935e-01 1.525983324132386e-01 + 1.523114400365784e-01 1.520249058806730e-01 1.517387297240821e-01 1.514529113453660e-01 1.511674505230842e-01 + 1.508823470357966e-01 1.505976006620633e-01 1.503132111804443e-01 1.500291783694991e-01 1.497455020077879e-01 + 1.494621818738705e-01 1.491792177463070e-01 1.488966094036570e-01 1.486143566244805e-01 1.483324591873375e-01 + 1.480509168707879e-01 1.477697294533914e-01 1.474888967137080e-01 1.472084184302977e-01 1.469282943817205e-01 + 1.466485243465360e-01 1.463691081033043e-01 1.460900454305851e-01 1.458113361069387e-01 1.455329799109245e-01 + 1.452549766211028e-01 1.449773260160332e-01 1.447000278742759e-01 1.444230819743906e-01 1.441464880949372e-01 + 1.438702460144757e-01 1.435943555115659e-01 1.433188163647679e-01 1.430436283526413e-01 1.427687912537462e-01 + 1.424943048466424e-01 1.422201689098901e-01 1.419463832220487e-01 1.416729475616784e-01 1.413998617073391e-01 + 1.411271254375908e-01 1.408547385309931e-01 1.405827007661060e-01 1.403110119214895e-01 1.400396717757036e-01 + 1.397686801073079e-01 1.394980366948626e-01 1.392277413169274e-01 1.389577937520624e-01 1.386881937788272e-01 + 1.384189411757819e-01 1.381500357214864e-01 1.378814771945006e-01 1.376132653733844e-01 1.373454000366976e-01 + 1.370778809630002e-01 1.368107079308521e-01 1.365438807188131e-01 1.362773991054433e-01 1.360112628693024e-01 + 1.357454717889505e-01 1.354800256429473e-01 1.352149242098527e-01 1.349501672682267e-01 1.346857545966293e-01 + 1.344216859736202e-01 1.341579611777595e-01 1.338945799876068e-01 1.336315421817223e-01 1.333688475386658e-01 + 1.331064958369972e-01 1.328444868552764e-01 1.325828203720631e-01 1.323214961659178e-01 1.320605140153996e-01 + 1.317998736990690e-01 1.315395749954856e-01 1.312796176832095e-01 1.310200015408004e-01 1.307607263468183e-01 + 1.305017918798232e-01 1.302431979183749e-01 1.299849442410332e-01 1.297270306263581e-01 1.294694568529096e-01 + 1.292122226992475e-01 1.289553279439316e-01 1.286987723655220e-01 1.284425557425785e-01 1.281866778536611e-01 + 1.279311384773295e-01 1.276759373921436e-01 1.274210743766636e-01 1.271665492094492e-01 1.269123616690602e-01 + 1.266585115340567e-01 1.264049985829985e-01 1.261518225944454e-01 1.258989833469577e-01 1.256464806190948e-01 + 1.253943141894169e-01 1.251424838364838e-01 1.248909893388554e-01 1.246398304750916e-01 1.243890070237524e-01 + 1.241385187633976e-01 1.238883654725872e-01 1.236385469298809e-01 1.233890629138387e-01 1.231399132030206e-01 + 1.228910975759866e-01 1.226426158112962e-01 1.223944676875096e-01 1.221466529831866e-01 1.218991714768873e-01 + 1.216520229471713e-01 1.214052071725986e-01 1.211587239317292e-01 1.209125730031230e-01 1.206667541653398e-01 + 1.204212671969394e-01 1.201761118764820e-01 1.199312879825273e-01 1.196867952936352e-01 1.194426335883657e-01 + 1.191988026452786e-01 1.189553022429340e-01 1.187121321598915e-01 1.184692921747111e-01 1.182267820659528e-01 + 1.179846016121766e-01 1.177427505919421e-01 1.175012287838093e-01 1.172600359663383e-01 1.170191719180887e-01 + 1.167786364176207e-01 1.165384292434940e-01 1.162985501742685e-01 1.160589989885042e-01 1.158197754647611e-01 + 1.155808793815988e-01 1.153423105175774e-01 1.151040686512567e-01 1.148661535611968e-01 1.146285650259574e-01 + 1.143913028240985e-01 1.141543667341798e-01 1.139177565347616e-01 1.136814720044035e-01 1.134455129216654e-01 + 1.132098790651072e-01 1.129745702132891e-01 1.127395861447706e-01 1.125049266381118e-01 1.122705914718726e-01 + 1.120365804246130e-01 1.118028932748926e-01 1.115695298012715e-01 1.113364897823095e-01 1.111037729965668e-01 + 1.108713792226030e-01 1.106393082389780e-01 1.104075598242518e-01 1.101761337569844e-01 1.099450298157354e-01 + 1.097142477790650e-01 1.094837874255330e-01 1.092536485336992e-01 1.090238308821237e-01 1.087943342493663e-01 + 1.085651584139868e-01 1.083363031545451e-01 1.081077682496014e-01 1.078795534777153e-01 1.076516586174468e-01 + 1.074240834473558e-01 1.071968277460022e-01 1.069698912919459e-01 1.067432738637467e-01 1.065169752399647e-01 + 1.062909951991598e-01 1.060653335198917e-01 1.058399899807203e-01 1.056149643602057e-01 1.053902564369078e-01 + 1.051658659893863e-01 1.049417927962012e-01 1.047180366359124e-01 1.044945972870799e-01 1.042714745282634e-01 + 1.040486681380230e-01 1.038261778949184e-01 1.036040035775097e-01 1.033821449643567e-01 1.031606018340192e-01 + 1.029393739650573e-01 1.027184611360310e-01 1.024978631254998e-01 1.022775797120238e-01 1.020576106741630e-01 + 1.018379557904772e-01 1.016186148395264e-01 1.013995875998703e-01 1.011808738500690e-01 1.009624733686823e-01 + 1.007443859342702e-01 1.005266113253923e-01 1.003091493206090e-01 1.000919996984797e-01 9.987516223756472e-02 + 9.965863671642368e-02 9.944242291361657e-02 9.922652060770329e-02 9.901092957724383e-02 9.879564960079788e-02 + 9.858068045692549e-02 9.836602192418654e-02 9.815167378114105e-02 9.793763580634866e-02 9.772390777836942e-02 + 9.751048947576320e-02 9.729738067709007e-02 9.708458116090966e-02 9.687209070578200e-02 9.665990909026694e-02 + 9.644803609292460e-02 9.623647149231455e-02 9.602521506699689e-02 9.581426659553142e-02 9.560362585647826e-02 + 9.539329262839702e-02 9.518326668984774e-02 9.497354781939027e-02 9.476413579558457e-02 9.455503039699066e-02 + 9.434623140216819e-02 9.413773858967717e-02 9.392955173807757e-02 9.372167062592920e-02 9.351409503179200e-02 + 9.330682473422582e-02 9.309985951179062e-02 9.289319914304633e-02 9.268684340655275e-02 9.248079208086978e-02 + 9.227504494455742e-02 9.206960177617562e-02 9.186446235428407e-02 9.165962645744281e-02 9.145509386421173e-02 + 9.125086435315079e-02 9.104693770281974e-02 9.084331369177857e-02 9.063999209858718e-02 9.043697270180552e-02 + 9.023425527999339e-02 9.003183961171067e-02 8.982972547551737e-02 8.962791264997345e-02 8.942640091363863e-02 + 8.922519004507280e-02 8.902427982283603e-02 8.882367002548823e-02 8.862336043158911e-02 8.842335081969865e-02 + 8.822364096837684e-02 8.802423065618351e-02 8.782511966167857e-02 8.762630776342187e-02 8.742779473997338e-02 + 8.722958036989294e-02 8.703166443174064e-02 8.683404670407610e-02 8.663672696545938e-02 8.643970499445031e-02 + 8.624298056960893e-02 8.604655346949501e-02 8.585042347266844e-02 8.565459035768923e-02 8.545905390311723e-02 + 8.526381388751228e-02 8.506887008943430e-02 8.487422228744325e-02 8.467987026009907e-02 8.448581378596152e-02 + 8.429205264359059e-02 8.409858661154612e-02 8.390541546838824e-02 8.371253899267647e-02 8.351995696297099e-02 + 8.332766915783157e-02 8.313567535581827e-02 8.294397533549079e-02 8.275256887540909e-02 8.256145575413315e-02 + 8.237063575022288e-02 8.218010864223803e-02 8.198987420873864e-02 8.179993222828459e-02 8.161028247943578e-02 + 8.142092474075205e-02 8.123185879079332e-02 8.104308440811948e-02 8.085460137129052e-02 8.066640945886633e-02 + 8.047850844940672e-02 8.029089812147158e-02 8.010357825362091e-02 7.991654862441462e-02 7.972980901241251e-02 + 7.954335919617447e-02 7.935719895426054e-02 7.917132806523056e-02 7.898574630764435e-02 7.880045346006183e-02 + 7.861544930104307e-02 7.843073360914780e-02 7.824630616293594e-02 7.806216674096743e-02 7.787831512180217e-02 + 7.769475108400008e-02 7.751147440612097e-02 7.732848486672479e-02 7.714578224437146e-02 7.696336631762096e-02 + 7.678123686503303e-02 7.659939366516767e-02 7.641783649658471e-02 7.623656513784420e-02 7.605557936750583e-02 + 7.587487896412962e-02 7.569446370627547e-02 7.551433337250338e-02 7.533448774137305e-02 7.515492659144445e-02 + 7.497564970127749e-02 7.479665684943212e-02 7.461794781446825e-02 7.443952237494571e-02 7.426138030942438e-02 + 7.408352139646424e-02 7.390594541462524e-02 7.372865214246714e-02 7.355164135854984e-02 7.337491284143338e-02 + 7.319846636967763e-02 7.302230172184236e-02 7.284641867648749e-02 7.267081701217305e-02 7.249549650745897e-02 + 7.232045694090500e-02 7.214569809107103e-02 7.197121973651709e-02 7.179702165580308e-02 7.162310362748878e-02 + 7.144946543013417e-02 7.127610684229910e-02 7.110302764254356e-02 7.093022760942734e-02 7.075770652151042e-02 + 7.058546415735271e-02 7.041350029551406e-02 7.024181471455442e-02 7.007040719303358e-02 6.989927750951157e-02 + 6.972842544254830e-02 6.955785077070353e-02 6.938755327253728e-02 6.921753272660937e-02 6.904778891147988e-02 + 6.887832160570852e-02 6.870913058785515e-02 6.854021563647983e-02 6.837157653014239e-02 6.820321304740287e-02 + 6.803512496682092e-02 6.786731206695658e-02 6.769977412636968e-02 6.753251092362034e-02 6.736552223726817e-02 + 6.719880784587320e-02 6.703236752799535e-02 6.686620106219456e-02 6.670030822703060e-02 6.653468880106347e-02 + 6.636934256285300e-02 6.620426929095923e-02 6.603946876394190e-02 6.587494076036100e-02 6.571068505877638e-02 + 6.554670143774802e-02 6.538298967583572e-02 6.521954955159946e-02 6.505638084359908e-02 6.489348333039455e-02 + 6.473085679054569e-02 6.456850100261248e-02 6.440641574515474e-02 6.424460079673253e-02 6.408305593590556e-02 + 6.392178094123378e-02 6.376077559127709e-02 6.360003966459560e-02 6.343957293974885e-02 6.327937519529699e-02 + 6.311944620979983e-02 6.295978576181734e-02 6.280039362990936e-02 6.264126959263583e-02 6.248241342855653e-02 + 6.232382491623151e-02 6.216550383422068e-02 6.200744996108382e-02 6.184966307538087e-02 6.169214295567180e-02 + 6.153488938051651e-02 6.137790212847481e-02 6.122118097810659e-02 6.106472570797182e-02 6.090853609663049e-02 + 6.075261192264235e-02 6.059695296456730e-02 6.044155900096528e-02 6.028642981039629e-02 6.013156517142009e-02 + 5.997696486259661e-02 5.982262866248578e-02 5.966855634964759e-02 5.951474770264176e-02 5.936120250002826e-02 + 5.920792052036703e-02 5.905490154221802e-02 5.890214534414098e-02 5.874965170469591e-02 5.859742040244267e-02 + 5.844545121594127e-02 5.829374392375142e-02 5.814229830443318e-02 5.799111413654637e-02 5.784019119865093e-02 + 5.768952926930679e-02 5.753912812707376e-02 5.738898755051179e-02 5.723910731818078e-02 5.708948720864069e-02 + 5.694012700045131e-02 5.679102647217259e-02 5.664218540236444e-02 5.649360356958682e-02 5.634528075239949e-02 + 5.619721672936244e-02 5.604941127903557e-02 5.590186417997881e-02 5.575457521075197e-02 5.560754414991501e-02 + 5.546077077602782e-02 5.531425486765037e-02 5.516799620334242e-02 5.502199456166394e-02 5.487624972117486e-02 + 5.473076146043511e-02 5.458552955800448e-02 5.444055379244295e-02 5.429583394231038e-02 5.415136978616674e-02 + 5.400716110257183e-02 5.386320767008564e-02 5.371950926726800e-02 5.357606567267891e-02 5.343287666487814e-02 + 5.328994202242569e-02 5.314726152388140e-02 5.300483494780522e-02 5.286266207275708e-02 5.272074267729676e-02 + 5.257907653998425e-02 5.243766343937943e-02 5.229650315404227e-02 5.215559546253257e-02 5.201494014341022e-02 + 5.187453697523518e-02 5.173438573656742e-02 5.159448620596670e-02 5.145483816199297e-02 5.131544138320613e-02 + 5.117629564816617e-02 5.103740073543286e-02 5.089875642356614e-02 5.076036249112593e-02 5.062221871667218e-02 + 5.048432487876468e-02 5.034668075596340e-02 5.020928612682823e-02 5.007214076991912e-02 4.993524446379589e-02 + 4.979859698701846e-02 4.966219811814673e-02 4.952604763574067e-02 4.939014531836011e-02 4.925449094456493e-02 + 4.911908429291507e-02 4.898392514197048e-02 4.884901327029097e-02 4.871434845643648e-02 4.857993047896691e-02 + 4.844575911644221e-02 4.831183414742219e-02 4.817815535046679e-02 4.804472250413592e-02 4.791153538698947e-02 + 4.777859377758741e-02 4.764589745448952e-02 4.751344619625577e-02 4.738123978144605e-02 4.724927798862030e-02 + 4.711756059633834e-02 4.698608738316012e-02 4.685485812764553e-02 4.672387260835453e-02 4.659313060384689e-02 + 4.646263189268263e-02 4.633237625342158e-02 4.620236346462373e-02 4.607259330484887e-02 4.594306555265695e-02 + 4.581377998660788e-02 4.568473638526159e-02 4.555593452717792e-02 4.542737419091678e-02 4.529905515503809e-02 + 4.517097719810180e-02 4.504314009866769e-02 4.491554363529575e-02 4.478818758654587e-02 4.466107173097797e-02 + 4.453419584715187e-02 4.440755971362755e-02 4.428116310896486e-02 4.415500581172379e-02 4.402908760046412e-02 + 4.390340825374580e-02 4.377796755012876e-02 4.365276526817287e-02 4.352780118643809e-02 4.340307508348420e-02 + 4.327858673787122e-02 4.315433592815897e-02 4.303032243290744e-02 4.290654603067642e-02 4.278300650002589e-02 + 4.265970361951570e-02 4.253663716770585e-02 4.241380692315611e-02 4.229121266442645e-02 4.216885417007675e-02 + 4.204673121866698e-02 4.192484358875694e-02 4.180319105890656e-02 4.168177340767576e-02 4.156059041362450e-02 + 4.143964185531256e-02 4.131892751129989e-02 4.119844716014640e-02 4.107820058041205e-02 4.095818755065662e-02 + 4.083840784944010e-02 4.071886125532234e-02 4.059954754686330e-02 4.048046650262282e-02 4.036161790116083e-02 + 4.024300152103721e-02 4.012461714081195e-02 4.000646453904481e-02 3.988854349429578e-02 3.977085378512473e-02 + 3.965339519009156e-02 3.953616748775624e-02 3.941917045667857e-02 3.930240387541852e-02 3.918586752253593e-02 + 3.906956117659079e-02 3.895348461614292e-02 3.883763761975224e-02 3.872201996597866e-02 3.860663143338214e-02 + 3.849147180052246e-02 3.837654084595958e-02 3.826183834825340e-02 3.814736408596389e-02 3.803311783765086e-02 + 3.791909938187420e-02 3.780530849719386e-02 3.769174496216977e-02 3.757840855536175e-02 3.746529905532976e-02 + 3.735241624063364e-02 3.723975988983343e-02 3.712732978148885e-02 3.701512569415990e-02 3.690314740640647e-02 + 3.679139469678848e-02 3.667986734386579e-02 3.656856512619832e-02 3.645748782234595e-02 3.634663521086866e-02 + 3.623600707032625e-02 3.612560317927865e-02 3.601542331628579e-02 3.590546725990760e-02 3.579573478870388e-02 + 3.568622568123460e-02 3.557693971605963e-02 3.546787667173892e-02 3.535903632683234e-02 3.525041845989978e-02 + 3.514202284950115e-02 3.503384927419634e-02 3.492589751254532e-02 3.481816734310789e-02 3.471065854444400e-02 + 3.460337089511353e-02 3.449630417367645e-02 3.438945815869258e-02 3.428283262872182e-02 3.417642736232413e-02 + 3.407024213805943e-02 3.396427673448750e-02 3.385853093016833e-02 3.375300450366182e-02 3.364769723352787e-02 + 3.354260889832635e-02 3.343773927661717e-02 3.333308814696023e-02 3.322865528791549e-02 3.312444047804275e-02 + 3.302044349590197e-02 3.291666412005304e-02 3.281310212905592e-02 3.270975730147040e-02 3.260662941585644e-02 + 3.250371825077394e-02 3.240102358478284e-02 3.229854519644294e-02 3.219628286431422e-02 3.209423636695655e-02 + 3.199240548292985e-02 3.189078999079405e-02 3.178938966910898e-02 3.168820429643457e-02 3.158723365133074e-02 + 3.148647751235738e-02 3.138593565807438e-02 3.128560786704163e-02 3.118549391781907e-02 3.108559358896662e-02 + 3.098590665904409e-02 3.088643290661142e-02 3.078717211022856e-02 3.068812404845539e-02 3.058928849985176e-02 + 3.049066524297762e-02 3.039225405639284e-02 3.029405471865738e-02 3.019606700833108e-02 3.009829070397384e-02 + 3.000072558414558e-02 2.990337142740626e-02 2.980622801231566e-02 2.970929511743377e-02 2.961257252132046e-02 + 2.951606000253568e-02 2.941975733963923e-02 2.932366431119108e-02 2.922778069575113e-02 2.913210627187930e-02 + 2.903664081813541e-02 2.894138411307943e-02 2.884633593527126e-02 2.875149606327076e-02 2.865686427563789e-02 + 2.856244035093249e-02 2.846822406756952e-02 2.837421520056763e-02 2.828041352151405e-02 2.818681880184402e-02 + 2.809343081299287e-02 2.800024932639589e-02 2.790727411348838e-02 2.781450494570558e-02 2.772194159448280e-02 + 2.762958383125535e-02 2.753743142745854e-02 2.744548415452757e-02 2.735374178389779e-02 2.726220408700447e-02 + 2.717087083528295e-02 2.707974180016844e-02 2.698881675309625e-02 2.689809546550168e-02 2.680757770882006e-02 + 2.671726325448661e-02 2.662715187393664e-02 2.653724333860544e-02 2.644753741992834e-02 2.635803388934054e-02 + 2.626873251827740e-02 2.617963307817417e-02 2.609073534046620e-02 2.600203907658869e-02 2.591354405797697e-02 + 2.582525005606633e-02 2.573715684229206e-02 2.564926418808948e-02 2.556157186489380e-02 2.547407964414037e-02 + 2.538678729726445e-02 2.529969459570137e-02 2.521280131088634e-02 2.512610721425472e-02 2.503961207724175e-02 + 2.495331567128279e-02 2.486721776781305e-02 2.478131813826782e-02 2.469561655408244e-02 2.461011278669220e-02 + 2.452480660753233e-02 2.443969778803814e-02 2.435478609964493e-02 2.427007131378803e-02 2.418555320190264e-02 + 2.410123153542410e-02 2.401710608578769e-02 2.393317662442874e-02 2.384944292278244e-02 2.376590475228415e-02 + 2.368256188436915e-02 2.359941409047274e-02 2.351646114203017e-02 2.343370281047675e-02 2.335113886724776e-02 + 2.326876908377852e-02 2.318659323150427e-02 2.310461108186032e-02 2.302282240628196e-02 2.294122697620450e-02 + 2.285982456306319e-02 2.277861493829333e-02 2.269759787333019e-02 2.261677313960910e-02 2.253614050856538e-02 + 2.245569975163421e-02 2.237545064025093e-02 2.229539294585083e-02 2.221552643986924e-02 2.213585089374139e-02 + 2.205636607890257e-02 2.197707176678809e-02 2.189796772883327e-02 2.181905373647331e-02 2.174032956114360e-02 + 2.166179497427933e-02 2.158344974731589e-02 2.150529365168848e-02 2.142732645883241e-02 2.134954794018299e-02 + 2.127195786717554e-02 2.119455601124527e-02 2.111734214382750e-02 2.104031603635753e-02 2.096347746027067e-02 + 2.088682618700216e-02 2.081036198798729e-02 2.073408463466138e-02 2.065799389845973e-02 2.058208955081758e-02 + 2.050637136317023e-02 2.043083910695299e-02 2.035549255360115e-02 2.028033147454998e-02 2.020535564123475e-02 + 2.013056482509080e-02 2.005595879755336e-02 1.998153733005781e-02 1.990730019403932e-02 1.983324716093324e-02 + 1.975937800217485e-02 1.968569248919949e-02 1.961219039344237e-02 1.953887148633879e-02 1.946573553932406e-02 + 1.939278232383351e-02 1.932001161130233e-02 1.924742317316587e-02 1.917501678085940e-02 1.910279220581827e-02 + 1.903074921947766e-02 1.895888759327293e-02 1.888720709863935e-02 1.881570750701223e-02 1.874438858982681e-02 + 1.867325011851842e-02 1.860229186452231e-02 1.853151359927385e-02 1.846091509420823e-02 1.839049612076077e-02 + 1.832025645036677e-02 1.825019585446155e-02 1.818031410448033e-02 1.811061097185843e-02 1.804108622803114e-02 + 1.797173964443378e-02 1.790257099250157e-02 1.783358004366985e-02 1.776476656937389e-02 1.769613034104897e-02 + 1.762767113013041e-02 1.755938870805347e-02 1.749128284625344e-02 1.742335331616560e-02 1.735559988922529e-02 + 1.728802233686775e-02 1.722062043052824e-02 1.715339394164211e-02 1.708634264164465e-02 1.701946630197109e-02 + 1.695276469405675e-02 1.688623758933693e-02 1.681988475924692e-02 1.675370597522197e-02 1.668770100869741e-02 + 1.662186963110850e-02 1.655621161389056e-02 1.649072672847885e-02 1.642541474630865e-02 1.636027543881526e-02 + 1.629530857743400e-02 1.623051393360013e-02 1.616589127874891e-02 1.610144038431569e-02 1.603716102173572e-02 + 1.597305296244428e-02 1.590911597787667e-02 1.584534983946819e-02 1.578175431865413e-02 1.571832918686975e-02 + 1.565507421555035e-02 1.559198917613122e-02 1.552907384004768e-02 1.546632797873497e-02 1.540375136362839e-02 + 1.534134376616324e-02 1.527910495777480e-02 1.521703470989838e-02 1.515513279396924e-02 1.509339898142267e-02 + 1.503183304369397e-02 1.497043475221845e-02 1.490920387843134e-02 1.484814019376797e-02 1.478724346966362e-02 + 1.472651347755360e-02 1.466594998887315e-02 1.460555277505758e-02 1.454532160754218e-02 1.448525625776228e-02 + 1.442535649715309e-02 1.436562209714995e-02 1.430605282918812e-02 1.424664846470294e-02 1.418740877512963e-02 + 1.412833353190351e-02 1.406942250645987e-02 1.401067547023402e-02 1.395209219466119e-02 1.389367245117671e-02 + 1.383541601121587e-02 1.377732264621395e-02 1.371939212760623e-02 1.366162422682800e-02 1.360401871531456e-02 + 1.354657536450121e-02 1.348929394582320e-02 1.343217423071583e-02 1.337521599061440e-02 1.331841899695420e-02 + 1.326178302117052e-02 1.320530783469862e-02 1.314899320897382e-02 1.309283891543139e-02 1.303684472550666e-02 + 1.298101041063485e-02 1.292533574225128e-02 1.286982049179124e-02 1.281446443069005e-02 1.275926733038293e-02 + 1.270422896230521e-02 1.264934909789217e-02 1.259462750857913e-02 1.254006396580132e-02 1.248565824099406e-02 + 1.243141010559264e-02 1.237731933103235e-02 1.232338568874847e-02 1.226960895017628e-02 1.221598888675107e-02 + 1.216252526990816e-02 1.210921787108281e-02 1.205606646171029e-02 1.200307081322593e-02 1.195023069706501e-02 + 1.189754588466279e-02 1.184501614745457e-02 1.179264125687565e-02 1.174042098436133e-02 1.168835510134686e-02 + 1.163644337926754e-02 1.158468558955867e-02 1.153308150365554e-02 1.148163089299345e-02 1.143033352900765e-02 + 1.137918918313345e-02 1.132819762680614e-02 1.127735863146102e-02 1.122667196853335e-02 1.117613740945843e-02 + 1.112575472567155e-02 1.107552368860801e-02 1.102544406970307e-02 1.097551564039204e-02 1.092573817211020e-02 + 1.087611143629287e-02 1.082663520437527e-02 1.077730924779274e-02 1.072813333798055e-02 1.067910724637402e-02 + 1.063023074440839e-02 1.058150360351897e-02 1.053292559514105e-02 1.048449649070993e-02 1.043621606166087e-02 + 1.038808407942917e-02 1.034010031545013e-02 1.029226454115903e-02 1.024457652799116e-02 1.019703604738179e-02 + 1.014964287076624e-02 1.010239676957978e-02 1.005529751525770e-02 1.000834487923527e-02 9.961538632947809e-03 + 9.914878547830594e-03 9.868364395318921e-03 9.821995946848057e-03 9.775772973853302e-03 9.729695247769950e-03 + 9.683762540033298e-03 9.637974622078598e-03 9.592331265341163e-03 9.546832241256279e-03 9.501477321259251e-03 + 9.456266276785327e-03 9.411198879269821e-03 9.366274900148019e-03 9.321494110855231e-03 9.276856282826696e-03 + 9.232361187497736e-03 9.188008596303632e-03 9.143798280679684e-03 9.099730012061156e-03 9.055803561883343e-03 + 9.012018701581541e-03 8.968375202591054e-03 8.924872836347138e-03 8.881511374285087e-03 8.838290587840202e-03 + 8.795210248447786e-03 8.752270127543088e-03 8.709469996561416e-03 8.666809626938060e-03 8.624288790108327e-03 + 8.581907257507461e-03 8.539664800570772e-03 8.497561190733558e-03 8.455596199431106e-03 8.413769598098688e-03 + 8.372081158171597e-03 8.330530651085128e-03 8.289117848274571e-03 8.247842521175223e-03 8.206704441222340e-03 + 8.165703379851232e-03 8.124839108497183e-03 8.084111398595504e-03 8.043520021581443e-03 8.003064748890308e-03 + 7.962745351957384e-03 7.922561602217977e-03 7.882513271107353e-03 7.842600130060799e-03 7.802821950513608e-03 + 7.763178503901092e-03 7.723669561658506e-03 7.684294895221145e-03 7.645054276024305e-03 7.605947475503284e-03 + 7.566974265093352e-03 7.528134416229795e-03 7.489427700347914e-03 7.450853888883007e-03 7.412412753270333e-03 + 7.374104064945197e-03 7.335927595342886e-03 7.297883115898700e-03 7.259970398047898e-03 7.222189213225787e-03 + 7.184539332867653e-03 7.147020528408806e-03 7.109632571284490e-03 7.072375232930018e-03 7.035248284780677e-03 + 6.998251498271754e-03 6.961384644838551e-03 6.924647495916328e-03 6.888039822940391e-03 6.851561397346019e-03 + 6.815211990568525e-03 6.778991374043162e-03 6.742899319205238e-03 6.706935597490038e-03 6.671099980332858e-03 + 6.635392239168969e-03 6.599812145433667e-03 6.564359470562242e-03 6.529033985989994e-03 6.493835463152187e-03 + 6.458763673484123e-03 6.423818388421083e-03 6.388999379398382e-03 6.354306417851262e-03 6.319739275215045e-03 + 6.285297722925007e-03 6.250981532416452e-03 6.216790475124642e-03 6.182724322484880e-03 6.148782845932454e-03 + 6.114965816902662e-03 6.081273006830771e-03 6.047704187152074e-03 6.014259129301869e-03 5.980937604715452e-03 + 5.947739384828086e-03 5.914664241075071e-03 5.881711944891696e-03 5.848882267713252e-03 5.816174980975036e-03 + 5.783589856112312e-03 5.751126664560382e-03 5.718785177754533e-03 5.686565167130068e-03 5.654466404122244e-03 + 5.622488660166369e-03 5.590631706697726e-03 5.558895315151620e-03 5.527279256963311e-03 5.495783303568101e-03 + 5.464407226401277e-03 5.433150796898142e-03 5.402013786493957e-03 5.370995966624024e-03 5.340097108723629e-03 + 5.309316984228075e-03 5.278655364572626e-03 5.248112021192582e-03 5.217686725523227e-03 5.187379248999867e-03 + 5.157189363057763e-03 5.127116839132216e-03 5.097161448658516e-03 5.067322963071958e-03 5.037601153807811e-03 + 5.007995792301374e-03 4.978506649987935e-03 4.949133498302795e-03 4.919876108681217e-03 4.890734252558502e-03 + 4.861707701369936e-03 4.832796226550807e-03 4.803999599536421e-03 4.775317591762038e-03 4.746749974662958e-03 + 4.718296519674468e-03 4.689956998231871e-03 4.661731181770430e-03 4.633618841725445e-03 4.605619749532205e-03 + 4.577733676626011e-03 4.549960394442122e-03 4.522299674415846e-03 4.494751287982466e-03 4.467315006577280e-03 + 4.439990601635559e-03 4.412777844592599e-03 4.385676506883690e-03 4.358686359944131e-03 4.331807175209184e-03 + 4.305038724114155e-03 4.278380778094327e-03 4.251833108585001e-03 4.225395487021443e-03 4.199067684838954e-03 + 4.172849473472818e-03 4.146740624358338e-03 4.120740908930778e-03 4.094850098625439e-03 4.069067964877608e-03 + 4.043394279122585e-03 4.017828812795635e-03 3.992371337332059e-03 3.967021624167144e-03 3.941779444736186e-03 + 3.916644570474457e-03 3.891616772817254e-03 3.866695823199864e-03 3.841881493057577e-03 3.817173553825691e-03 + 3.792571776939472e-03 3.768075933834220e-03 3.743685795945222e-03 3.719401134707777e-03 3.695221721557152e-03 + 3.671147327928650e-03 3.647177725257552e-03 3.623312684979162e-03 3.599551978528743e-03 3.575895377341601e-03 + 3.552342652853016e-03 3.528893576498289e-03 3.505547919712690e-03 3.482305453931515e-03 3.459165950590054e-03 + 3.436129181123602e-03 3.413194916967434e-03 3.390362929556839e-03 3.367632990327113e-03 3.345004870713549e-03 + 3.322478342151419e-03 3.300053176076018e-03 3.277729143922636e-03 3.255506017126571e-03 3.233383567123091e-03 + 3.211361565347495e-03 3.189439783235070e-03 3.167617992221112e-03 3.145895963740894e-03 3.124273469229713e-03 + 3.102750280122855e-03 3.081326167855609e-03 3.060000903863274e-03 3.038774259581116e-03 3.017646006444438e-03 + 2.996615915888523e-03 2.975683759348671e-03 2.954849308260150e-03 2.934112334058261e-03 2.913472608178290e-03 + 2.892929902055533e-03 2.872483987125260e-03 2.852134634822772e-03 2.831881616583353e-03 2.811724703842302e-03 + 2.791663668034889e-03 2.771698280596412e-03 2.751828312962158e-03 2.732053536567425e-03 2.712373722847482e-03 + 2.692788643237626e-03 2.673298069173149e-03 2.653901772089343e-03 2.634599523421481e-03 2.615391094604860e-03 + 2.596276257074769e-03 2.577254782266501e-03 2.558326441615332e-03 2.539491006556557e-03 2.520748248525463e-03 + 2.502097938957346e-03 2.483539849287480e-03 2.465073750951161e-03 2.446699415383674e-03 2.428416614020312e-03 + 2.410225118296368e-03 2.392124699647115e-03 2.374115129507849e-03 2.356196179313860e-03 2.338367620500442e-03 + 2.320629224502867e-03 2.302980762756432e-03 2.285422006696426e-03 2.267952727758143e-03 2.250572697376858e-03 + 2.233281686987864e-03 2.216079468026452e-03 2.198965811927918e-03 2.181940490127533e-03 2.165003274060593e-03 + 2.148153935162387e-03 2.131392244868211e-03 2.114717974613337e-03 2.098130895833062e-03 2.081630779962673e-03 + 2.065217398437465e-03 2.048890522692714e-03 2.032649924163713e-03 2.016495374285752e-03 2.000426644494126e-03 + 1.984443506224108e-03 1.968545730910994e-03 1.952733089990072e-03 1.937005354896637e-03 1.921362297065964e-03 + 1.905803687933347e-03 1.890329298934075e-03 1.874938901503444e-03 1.859632267076724e-03 1.844409167089217e-03 + 1.829269372976206e-03 1.814212656172981e-03 1.799238788114837e-03 1.784347540237048e-03 1.769538683974909e-03 + 1.754811990763710e-03 1.740167232038742e-03 1.725604179235283e-03 1.711122603788629e-03 1.696722277134065e-03 + 1.682402970706887e-03 1.668164455942369e-03 1.654006504275808e-03 1.639928887142492e-03 1.625931375977714e-03 + 1.612013742216749e-03 1.598175757294894e-03 1.584417192647435e-03 1.570737819709667e-03 1.557137409916867e-03 + 1.543615734704329e-03 1.530172565507339e-03 1.516807673761193e-03 1.503520830901168e-03 1.490311808362557e-03 + 1.477180377580647e-03 1.464126309990734e-03 1.451149377028094e-03 1.438249350128022e-03 1.425426000725804e-03 + 1.412679100256735e-03 1.400008420156093e-03 1.387413731859170e-03 1.374894806801254e-03 1.362451416417636e-03 + 1.350083332143606e-03 1.337790325414444e-03 1.325572167665442e-03 1.313428630331890e-03 1.301359484849079e-03 + 1.289364502652289e-03 1.277443455176812e-03 1.265596113857936e-03 1.253822250130956e-03 1.242121635431148e-03 + 1.230494041193807e-03 1.218939238854221e-03 1.207456999847681e-03 1.196047095609467e-03 1.184709297574872e-03 + 1.173443377179185e-03 1.162249105857698e-03 1.151126255045689e-03 1.140074596178453e-03 1.129093900691276e-03 + 1.118183940019452e-03 1.107344485598260e-03 1.096575308862992e-03 1.085876181248937e-03 1.075246874191387e-03 + 1.064687159125622e-03 1.054196807486934e-03 1.043775590710611e-03 1.033423280231947e-03 1.023139647486220e-03 + 1.012924463908723e-03 1.002777500934745e-03 9.926985299995724e-04 9.826873225384988e-04 9.727436499868044e-04 + 9.628672837797804e-04 9.530579953527160e-04 9.433155561409024e-04 9.336397375796210e-04 9.240303111041634e-04 + 9.144870481498174e-04 9.050097201518753e-04 8.955980985456180e-04 8.862519547663374e-04 8.769710602493213e-04 + 8.677551864298620e-04 8.586041047432399e-04 8.495175866247467e-04 8.404954035096720e-04 8.315373268333056e-04 + 8.226431280309302e-04 8.138125785378364e-04 8.050454497893130e-04 7.963415132206520e-04 7.877005402671333e-04 + 7.791223023640501e-04 7.706065709466894e-04 7.621531174503436e-04 7.537617133102937e-04 7.454321299618317e-04 + 7.371641388402454e-04 7.289575113808262e-04 7.208120190188562e-04 7.127274331896262e-04 7.047035253284248e-04 + 6.967400668705408e-04 6.888368292512645e-04 6.809935839058778e-04 6.732101022696724e-04 6.654861557779368e-04 + 6.578215158659625e-04 6.502159539690304e-04 6.426692415224324e-04 6.351811499614567e-04 6.277514507213948e-04 + 6.203799152375280e-04 6.130663149451484e-04 6.058104212795442e-04 5.986120056760058e-04 5.914708395698158e-04 + 5.843866943962659e-04 5.773593415906435e-04 5.703885525882402e-04 5.634740988243379e-04 5.566157517342281e-04 + 5.498132827531990e-04 5.430664633165412e-04 5.363750648595379e-04 5.297388588174797e-04 5.231576166256548e-04 + 5.166311097193540e-04 5.101591095338604e-04 5.037413875044649e-04 4.973777150664555e-04 4.910678636551228e-04 + 4.848116047057501e-04 4.786087096536281e-04 4.724589499340449e-04 4.663620969822913e-04 4.603179222336506e-04 + 4.543261971234134e-04 4.483866930868676e-04 4.424991815593019e-04 4.366634339760067e-04 4.308792217722652e-04 + 4.251463163833680e-04 4.194644892446035e-04 4.138335117912622e-04 4.082531554586277e-04 4.027231916819903e-04 + 3.972433918966381e-04 3.918135275378618e-04 3.864333700409451e-04 3.811026908411783e-04 3.758212613738496e-04 + 3.705888530742497e-04 3.654052373776619e-04 3.602701857193769e-04 3.551834695346827e-04 3.501448602588700e-04 + 3.451541293272223e-04 3.402110481750301e-04 3.353153882375817e-04 3.304669209501669e-04 3.256654177480704e-04 + 3.209106500665821e-04 3.162023893409903e-04 3.115404070065852e-04 3.069244744986507e-04 3.023543632524774e-04 + 2.978298447033534e-04 2.933506902865686e-04 2.889166714374075e-04 2.845275595911603e-04 2.801831261831150e-04 + 2.758831426485598e-04 2.716273804227849e-04 2.674156109410747e-04 2.632476056387193e-04 2.591231359510068e-04 + 2.550419733132272e-04 2.510038891606653e-04 2.470086549286107e-04 2.430560420523521e-04 2.391458219671786e-04 + 2.352777661083759e-04 2.314516459112336e-04 2.276672328110411e-04 2.239242982430823e-04 2.202226136426513e-04 + 2.165619504450333e-04 2.129420800855138e-04 2.093627739993866e-04 2.058238036219341e-04 2.023249403884502e-04 + 1.988659557342204e-04 1.954466210945300e-04 1.920667079046728e-04 1.887259875999340e-04 1.854242316155996e-04 + 1.821612113869626e-04 1.789366983493062e-04 1.757504639379237e-04 1.726022795881008e-04 1.694919167351232e-04 + 1.664191468142838e-04 1.633837412608687e-04 1.603854715101632e-04 1.574241089974609e-04 1.544994251580449e-04 + 1.516111914272081e-04 1.487591792402364e-04 1.459431600324156e-04 1.431629052390386e-04 1.404181862953890e-04 + 1.377087746367595e-04 1.350344416984360e-04 1.323949589157045e-04 1.297900977238577e-04 1.272196295581814e-04 + 1.246833258539619e-04 1.221809580464913e-04 1.197122975710540e-04 1.172771158629421e-04 1.148751843574417e-04 + 1.125062744898392e-04 1.101701576954265e-04 1.078666054094900e-04 1.055953890673160e-04 1.033562801041963e-04 + 1.011490499554156e-04 9.897347005626549e-05 9.682931184203257e-05 9.471634674800319e-05 9.263434620946902e-05 + 9.058308166171652e-05 8.856232454003224e-05 8.657184627970762e-05 8.461141831602771e-05 8.268081208428384e-05 + 8.077979901976259e-05 7.890815055775064e-05 7.706563813353921e-05 7.525203318241361e-05 7.346710713966480e-05 + 7.171063144057957e-05 6.998237752044478e-05 6.828211681455130e-05 6.660962075818604e-05 6.496466078663583e-05 + 6.334700833519147e-05 6.175643483913857e-05 6.019271173376790e-05 5.865561045436633e-05 5.714490243622088e-05 + 5.566035911462217e-05 5.420175192485715e-05 5.276885230221288e-05 5.136143168197985e-05 4.997926149944398e-05 + 4.862211318989571e-05 4.728975818862210e-05 4.598196793091027e-05 4.469851385205058e-05 4.343916738733009e-05 + 4.220369997203605e-05 4.099188304145863e-05 3.980348803088407e-05 3.863828637560248e-05 3.749604951090107e-05 + 3.637654887206717e-05 3.527955589439074e-05 3.420484201315908e-05 3.315217866365955e-05 3.212133728118200e-05 + 3.111208930101303e-05 3.012420615844240e-05 2.915745928875747e-05 2.821162012724574e-05 2.728646010919688e-05 + 2.638175066989761e-05 2.549726324463755e-05 2.463276926870421e-05 2.378804017738504e-05 2.296284740596966e-05 + 2.215696238974553e-05 2.137015656400022e-05 2.060220136402321e-05 1.985286822510145e-05 1.912192858252432e-05 + 1.840915387157941e-05 1.771431552755436e-05 1.703718498573850e-05 1.637753368141942e-05 1.573513304988482e-05 + 1.510975452642394e-05 1.450116954632393e-05 1.390914954487400e-05 1.333346595736183e-05 1.277389021907516e-05 + 1.223019376530309e-05 1.170214803133335e-05 1.118952445245373e-05 1.069209446395325e-05 1.020962950111930e-05 + 9.741900999240843e-06 9.288680393605679e-06 8.849739119501652e-06 8.424848612217666e-06 8.013780307041547e-06 + 7.616305639261172e-06 7.232196044165379e-06 6.861222957041736e-06 6.503157813179035e-06 6.157772047865166e-06 + 5.824837096388053e-06 5.504124394036426e-06 5.195405376097961e-06 4.898451477861344e-06 4.613034134614521e-06 + 4.338924781645458e-06 4.075894854242793e-06 3.823715787694494e-06 3.582159017288563e-06 3.350995978313578e-06 + 3.129998106057359e-06 2.918936835808456e-06 2.717583602854878e-06 2.525709842484664e-06 2.343086989986320e-06 + 2.169486480647874e-06 2.004679749757391e-06 1.848438232603329e-06 1.700533364473627e-06 1.560736580656715e-06 + 1.428819316440665e-06 1.304553007113569e-06 1.187709087963820e-06 1.078058994279508e-06 9.753741613487438e-07 + 8.794260244598842e-07 7.899860189009674e-07 7.068255799603295e-07 6.297161429260866e-07 5.584291430863768e-07 + 4.927360157295061e-07 4.324081961435606e-07 3.772171196168294e-07 3.269342214374535e-07 2.813309368935902e-07 + 2.401787012735049e-07 2.032489498653510e-07 1.703131179572954e-07 1.411426408375830e-07 1.155089537943586e-07 + 9.318349211585539e-08 7.393769109024318e-08 5.754298600570192e-08 4.377081215044991e-08 3.239260481266485e-08 + 2.317979928053213e-08 1.590383084225846e-08 1.033613478602374e-08 6.248146400028812e-09 3.411300972460543e-09 + 1.597033791509841e-09 5.767801453714960e-10 1.219753222356829e-10 4.054610294399152e-12 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 +29 63.54600 3.61500 fcc + 4.999999999810711e-06 -2.974529772262570e-02 -6.430698647352583e-02 -9.359726059686035e-02 -1.245883332905926e-01 + -1.544249092078051e-01 -1.839957990655601e-01 -2.131094566857851e-01 -2.417885155117329e-01 -2.700517310188084e-01 + -2.978956641541096e-01 -3.253300092643397e-01 -3.523592859047337e-01 -3.789894479055120e-01 -4.052260805026124e-01 + -4.310747172135264e-01 -4.565408585290769e-01 -4.816299260417520e-01 -5.063472875649956e-01 -5.306982484760044e-01 + -5.546880543701050e-01 -5.783218912677119e-01 -6.016048861816500e-01 -6.245421076145018e-01 -6.471385659602377e-01 + -6.693992139074976e-01 -6.913289465852567e-01 -7.129326021807865e-01 -7.342149625244568e-01 -7.551807535175351e-01 + -7.758346455576955e-01 -7.961812539302272e-01 -8.162251389632388e-01 -8.359708065989396e-01 -8.554227089793534e-01 + -8.745852448655735e-01 -8.934627600538377e-01 -9.120595477652830e-01 -9.303798488093634e-01 -9.484278521099418e-01 + -9.662076952903965e-01 -9.837234650845670e-01 -1.000979197743438e+00 -1.017978879421880e+00 -1.034726446351777e+00 + -1.051225785324413e+00 -1.067480734273202e+00 -1.083495082676656e+00 -1.099272571955679e+00 -1.114816895855978e+00 + -1.130131700631826e+00 -1.145220585486677e+00 -1.160087103151659e+00 -1.174734760280879e+00 -1.189167017839340e+00 + -1.203387291479897e+00 -1.217398951738020e+00 -1.231205324433113e+00 -1.244809691240687e+00 -1.258215290080375e+00 + -1.271425315494448e+00 -1.284442919018367e+00 -1.297271209386570e+00 -1.309913252897130e+00 -1.322372073975628e+00 + -1.334650655556149e+00 -1.346751939450387e+00 -1.358678826711070e+00 -1.370434177848266e+00 -1.382020813160453e+00 + -1.393441513287949e+00 -1.404699019587196e+00 -1.415796034490494e+00 -1.426735221861634e+00 -1.437519207221928e+00 + -1.448150578050979e+00 -1.458631884327496e+00 -1.468965638897198e+00 -1.479154317823156e+00 -1.489200360733120e+00 + -1.499106171054304e+00 -1.508874116287063e+00 -1.518506528531185e+00 -1.528005704847587e+00 -1.537373907599264e+00 + -1.546613364789955e+00 -1.555726270306389e+00 -1.564714784168311e+00 -1.573581033038246e+00 -1.582327110577210e+00 + -1.590955077776282e+00 -1.599466963286337e+00 -1.607864763666269e+00 -1.616150443612786e+00 -1.624325936451788e+00 + -1.632393144488314e+00 -1.640353939328714e+00 -1.648210162201158e+00 -1.655963624208433e+00 -1.663616106540719e+00 + -1.671169360946975e+00 -1.678625110079156e+00 -1.685985047805010e+00 -1.693250839519310e+00 -1.700424122399519e+00 + -1.707506505604724e+00 -1.714499570725597e+00 -1.721404872122921e+00 -1.728223937231006e+00 -1.734958266859556e+00 + -1.741609335450561e+00 -1.748178591266417e+00 -1.754667456817147e+00 -1.761077329193275e+00 -1.767409580359829e+00 + -1.773665557448806e+00 -1.779846583015710e+00 -1.785953955219528e+00 -1.791988948226326e+00 -1.797952812536256e+00 + -1.803846775268204e+00 -1.809672040442883e+00 -1.815429789237373e+00 -1.821121180159522e+00 -1.826747349427069e+00 + -1.832309411288701e+00 -1.837808458299317e+00 -1.843245561593720e+00 -1.848621771137924e+00 -1.853938115899646e+00 + -1.859195604203010e+00 -1.864395224043148e+00 -1.869537943352107e+00 -1.874624710263173e+00 -1.879656453357774e+00 + -1.884634081833461e+00 -1.889558485834440e+00 -1.894430536759171e+00 -1.899251087517010e+00 -1.904020972783122e+00 + -1.908741009239976e+00 -1.913411995743834e+00 -1.918034713631692e+00 -1.922609927021227e+00 -1.927138383058234e+00 + -1.931620812162146e+00 -1.936057928261314e+00 -1.940450428958438e+00 -1.944798995815045e+00 -1.949104294642919e+00 + -1.953366975742423e+00 -1.957587674138659e+00 -1.961767009809789e+00 -1.965905587851686e+00 -1.970003998741092e+00 + -1.974062818617800e+00 -1.978082609513892e+00 -1.982063919580502e+00 -1.986007283308652e+00 -1.989913221693113e+00 + -1.993782242475532e+00 -1.997614840416584e+00 -2.001411497516209e+00 -2.005172683230969e+00 -2.008898854686896e+00 + -2.012590456842320e+00 -2.016247922712500e+00 -2.019871673630875e+00 -2.023462119460371e+00 -2.027019658801358e+00 + -2.030544679196124e+00 -2.034037557290278e+00 -2.037498659040316e+00 -2.040928339963340e+00 -2.044326945339381e+00 + -2.047694810409991e+00 -2.051032260574074e+00 -2.054339611547194e+00 -2.057617169553732e+00 -2.060865231564336e+00 + -2.064084085489279e+00 -2.067274010367665e+00 -2.070435276554393e+00 -2.073568145876755e+00 -2.076672871812636e+00 + -2.079749699715078e+00 -2.082798866996717e+00 -2.085820603309610e+00 -2.088815130723087e+00 -2.091782663876979e+00 + -2.094723410147227e+00 -2.097637569857166e+00 -2.100525336452930e+00 -2.103386896673880e+00 -2.106222430721270e+00 + -2.109032112407347e+00 -2.111816109309661e+00 -2.114574582968703e+00 -2.117307689054226e+00 -2.120015577526261e+00 + -2.122698392794530e+00 -2.125356273862621e+00 -2.127989354472209e+00 -2.130597763286815e+00 -2.133181624048925e+00 + -2.135741055731620e+00 -2.138276172688646e+00 -2.140787084792938e+00 -2.143273897571786e+00 -2.145736712376609e+00 + -2.148175626530753e+00 -2.150590733471714e+00 -2.152982122891836e+00 -2.155349880870490e+00 -2.157694090001053e+00 + -2.160014829546717e+00 -2.162312175578782e+00 -2.164586201109520e+00 -2.166836976223482e+00 -2.169064568202661e+00 + -2.171269041645952e+00 -2.173450458611177e+00 -2.175608878743719e+00 -2.177744359399976e+00 -2.179856955769301e+00 + -2.181946720991605e+00 -2.184013706269698e+00 -2.186057960997892e+00 -2.188079532880760e+00 -2.190078468047203e+00 + -2.192054811162993e+00 -2.194008605540286e+00 -2.195939893243223e+00 -2.197848715203474e+00 -2.199735111328910e+00 + -2.201599120608279e+00 -2.203440781214366e+00 -2.205260130605058e+00 -2.207057205622181e+00 -2.208832042594640e+00 + -2.210584677436705e+00 -2.212315145743323e+00 -2.214023482883906e+00 -2.215709724094596e+00 -2.217373904570314e+00 + -2.219016059556012e+00 -2.220636224434478e+00 -2.222234434812230e+00 -2.223810726603892e+00 -2.225365136115460e+00 + -2.226897700129347e+00 -2.228408455984414e+00 -2.229897441653065e+00 -2.231364695817732e+00 -2.232810257945853e+00 + -2.234234168363960e+00 -2.235636468335345e+00 -2.237017200129656e+00 -2.238376407088992e+00 -2.239714133695035e+00 + -2.241030425634650e+00 -2.242325329864605e+00 -2.243598894681571e+00 -2.244851169781754e+00 -2.246082206316076e+00 + -2.247292056947830e+00 -2.248480775908871e+00 -2.249648419054990e+00 -2.250795043927707e+00 -2.251920709804646e+00 + -2.253025477743616e+00 -2.254109410630856e+00 -2.255172573227847e+00 -2.256215032217156e+00 -2.257236856255709e+00 + -2.258238116016356e+00 -2.259218884220921e+00 -2.260179235678919e+00 -2.261119247325009e+00 -2.262038998255372e+00 + -2.262938569771987e+00 -2.263818045415693e+00 -2.264677510988414e+00 -2.265517054582310e+00 -2.266336766607800e+00 + -2.267136739820506e+00 -2.267917069356113e+00 -2.268677852755292e+00 -2.269419189975145e+00 -2.270141183408787e+00 + -2.270843937904013e+00 -2.271527560780716e+00 -2.272192161856036e+00 -2.272837853461272e+00 -2.273464750442787e+00 + -2.274072970171993e+00 -2.274662632554641e+00 -2.275233860038732e+00 -2.275786777629709e+00 -2.276321512899268e+00 + -2.276838195976115e+00 -2.277336959546317e+00 -2.277817938853157e+00 -2.278281271695579e+00 -2.278727098433203e+00 + -2.279155561986953e+00 -2.279566807819966e+00 -2.279960983928274e+00 -2.280338240831269e+00 -2.280698731560701e+00 + -2.281042611655312e+00 -2.281370039153072e+00 -2.281681174562626e+00 -2.281976180844296e+00 -2.282255223391167e+00 + -2.282518470008657e+00 -2.282766090898608e+00 -2.282998258642880e+00 -2.283215148165716e+00 -2.283416936705063e+00 + -2.283603803784261e+00 -2.283775931182202e+00 -2.283933502906944e+00 -2.284076705170144e+00 -2.284205726340460e+00 + -2.284320756906550e+00 -2.284421989435776e+00 -2.284509618541787e+00 -2.284583840844606e+00 -2.284644854890528e+00 + -2.284692861356983e+00 -2.284728062048774e+00 -2.284750662511332e+00 -2.284760866462175e+00 -2.284758846317831e+00 + -2.284744706065169e+00 -2.284718539826492e+00 -2.284680442784649e+00 -2.284630508328036e+00 -2.284568829476414e+00 + -2.284495498385510e+00 -2.284410606481633e+00 -2.284314244448809e+00 -2.284206502232984e+00 -2.284087469050950e+00 + -2.283957233393515e+00 -2.283815883030289e+00 -2.283663505011025e+00 -2.283500185673601e+00 -2.283326010650175e+00 + -2.283141064871846e+00 -2.282945432573279e+00 -2.282739197296537e+00 -2.282522441892167e+00 -2.282295248526338e+00 + -2.282057698686696e+00 -2.281809873186612e+00 -2.281551852169350e+00 -2.281283715111630e+00 -2.281005540824415e+00 + -2.280717407459219e+00 -2.280419392513690e+00 -2.280111572835493e+00 -2.279794024626100e+00 -2.279466823444055e+00 + -2.279130044205507e+00 -2.278783761189780e+00 -2.278428048044707e+00 -2.278062977790158e+00 -2.277688622821473e+00 + -2.277305054912497e+00 -2.276912345215930e+00 -2.276510564268080e+00 -2.276099781994102e+00 -2.275680067711165e+00 + -2.275251490131551e+00 -2.274814117365495e+00 -2.274368016921350e+00 -2.273913255709684e+00 -2.273449900048309e+00 + -2.272978015665192e+00 -2.272497667701276e+00 -2.272008920713100e+00 -2.271511838672842e+00 -2.271006484971777e+00 + -2.270492922425180e+00 -2.269971213274961e+00 -2.269441419192237e+00 -2.268903601279766e+00 -2.268357820071938e+00 + -2.267804135537632e+00 -2.267242607084921e+00 -2.266673293563574e+00 -2.266096253267404e+00 -2.265511543936470e+00 + -2.264919222757081e+00 -2.264319346364091e+00 -2.263711970845491e+00 -2.263097151744718e+00 -2.262474944062816e+00 + -2.261845402260514e+00 -2.261208580258189e+00 -2.260564531437684e+00 -2.259913308646772e+00 -2.259254964201340e+00 + -2.258589549887394e+00 -2.257917116962976e+00 -2.257237716158207e+00 -2.256551397676592e+00 -2.255858211199403e+00 + -2.255158205887789e+00 -2.254451430384613e+00 -2.253737932816259e+00 -2.253017760792774e+00 -2.252290961408688e+00 + -2.251557581247387e+00 -2.250817666383103e+00 -2.250071262382655e+00 -2.249318414307177e+00 -2.248559166712322e+00 + -2.247793563648755e+00 -2.247021648666400e+00 -2.246243464816426e+00 -2.245459054652896e+00 -2.244668460234418e+00 + -2.243871723124463e+00 -2.243068884391568e+00 -2.242259984613473e+00 -2.241445063879088e+00 -2.240624161790128e+00 + -2.239797317462727e+00 -2.238964569527799e+00 -2.238125956131088e+00 -2.237281514937132e+00 -2.236431283131328e+00 + -2.235575297421522e+00 -2.234713594039550e+00 -2.233846208741804e+00 -2.232973176809008e+00 -2.232094533050194e+00 + -2.231210311804744e+00 -2.230320546943990e+00 -2.229425271872794e+00 -2.228524519530207e+00 -2.227618322389153e+00 + -2.226706712460275e+00 -2.225789721294088e+00 -2.224867379982586e+00 -2.223939719160836e+00 -2.223006769007830e+00 + -2.222068559246027e+00 -2.221125119145137e+00 -2.220176477524404e+00 -2.219222662754232e+00 -2.218263702757810e+00 + -2.217299625012119e+00 -2.216330456547491e+00 -2.215356223951251e+00 -2.214376953370165e+00 -2.213392670512112e+00 + -2.212403400647748e+00 -2.211409168611695e+00 -2.210409998802172e+00 -2.209405915184477e+00 -2.208396941293584e+00 + -2.207383100235931e+00 -2.206364414691167e+00 -2.205340906913459e+00 -2.204312598731262e+00 -2.203279511550634e+00 + -2.202241666358070e+00 -2.201199083722335e+00 -2.200151783796301e+00 -2.199099786318501e+00 -2.198043110612920e+00 + -2.196981775592267e+00 -2.195915799760983e+00 -2.194845201217184e+00 -2.193769997654599e+00 -2.192690206364266e+00 + -2.191605844234577e+00 -2.190516927754359e+00 -2.189423473016115e+00 -2.188325495718082e+00 -2.187223011166275e+00 + -2.186116034276374e+00 -2.185004579573976e+00 -2.183888661197555e+00 -2.182768292901925e+00 -2.181643488060391e+00 + -2.180514259666944e+00 -2.179380620338358e+00 -2.178242582314598e+00 -2.177100157461768e+00 -2.175953357275697e+00 + -2.174802192884262e+00 -2.173646675049743e+00 -2.172486814171045e+00 -2.171322620284405e+00 -2.170154103066202e+00 + -2.168981271836789e+00 -2.167804135562953e+00 -2.166622702860366e+00 -2.165436981995990e+00 -2.164246980889130e+00 + -2.163052707114078e+00 -2.161854167904146e+00 -2.160651370154303e+00 -2.159444320423765e+00 -2.158233024938550e+00 + -2.157017489592782e+00 -2.155797719951358e+00 -2.154573721254086e+00 -2.153345498418473e+00 -2.152113056042457e+00 + -2.150876398407144e+00 -2.149635529478417e+00 -2.148390452909494e+00 -2.147141172045244e+00 -2.145887689925127e+00 + -2.144630009286074e+00 -2.143368132565373e+00 -2.142102061902524e+00 -2.140831799141815e+00 -2.139557345836748e+00 + -2.138278703253123e+00 -2.136995872372039e+00 -2.135708853892906e+00 -2.134417648235631e+00 -2.133122255543166e+00 + -2.131822675685981e+00 -2.130518908265326e+00 -2.129210952616371e+00 -2.127898807811330e+00 -2.126582472661882e+00 + -2.125261945721767e+00 -2.123937225291317e+00 -2.122608309420839e+00 -2.121275195913853e+00 -2.119937882330373e+00 + -2.118596365989546e+00 -2.117250643972272e+00 -2.115900713125760e+00 -2.114546570067044e+00 -2.113188211186347e+00 + -2.111825632650426e+00 -2.110458830405398e+00 -2.109087800179499e+00 -2.107712537487564e+00 -2.106333037634681e+00 + -2.104949295719616e+00 -2.103561306638236e+00 -2.102169065086604e+00 -2.100772565563689e+00 -2.099371802375872e+00 + -2.097966769640692e+00 -2.096557461290312e+00 -2.095143871075032e+00 -2.093725992566534e+00 -2.092303819160633e+00 + -2.090877344081788e+00 -2.089446560386858e+00 -2.088011460968645e+00 -2.086572038559443e+00 -2.085128285734371e+00 + -2.083680194914300e+00 -2.082227758370182e+00 -2.080770968226895e+00 -2.079309816466798e+00 -2.077844294933302e+00 + -2.076374395334334e+00 -2.074900109245281e+00 -2.073421428113268e+00 -2.071938343260962e+00 -2.070450845890176e+00 + -2.068958927085462e+00 -2.067462577817551e+00 -2.065961788946467e+00 -2.064456551225608e+00 -2.062946855305587e+00 + -2.061432691737794e+00 -2.059914050977949e+00 -2.058390923389603e+00 -2.056863299247311e+00 -2.055331168740595e+00 + -2.053794521977675e+00 -2.052253348989029e+00 -2.050707639730928e+00 -2.049157384088912e+00 -2.047602571880996e+00 + -2.046043192861499e+00 -2.044479236724704e+00 -2.042910693108343e+00 -2.041337551597080e+00 -2.039759801725936e+00 + -2.038177432983566e+00 -2.036590434815867e+00 -2.034998796629576e+00 -2.033402507795658e+00 -2.031801557652704e+00 + -2.030195935510301e+00 -2.028585630652281e+00 -2.026970632340236e+00 -2.025350929816901e+00 -2.023726512309482e+00 + -2.022097369032948e+00 -2.020463489193264e+00 -2.018824861990693e+00 -2.017181476623089e+00 -2.015533322289137e+00 + -2.013880388191564e+00 -2.012222663540280e+00 -2.010560137555506e+00 -2.008892799471031e+00 -2.007220638537354e+00 + -2.005543644024714e+00 -2.003861805226137e+00 -2.002175111460466e+00 -2.000483552075360e+00 -1.998787116450410e+00 + -1.997085794000193e+00 -1.995379574177046e+00 -1.993668446473970e+00 -1.991952400427470e+00 -1.990231425620385e+00 + -1.988505511684964e+00 -1.986774648305709e+00 -1.985038825221930e+00 -1.983298032230433e+00 -1.981552259188221e+00 + -1.979801496015170e+00 -1.978045732696886e+00 -1.976284959287468e+00 -1.974519165911801e+00 -1.972748342768021e+00 + -1.970972480130025e+00 -1.969191568349977e+00 -1.967405597860977e+00 -1.965614559179727e+00 -1.963818442908475e+00 + -1.962017239737334e+00 -1.960210940446591e+00 -1.958399535908944e+00 -1.956583017092063e+00 -1.954761375061048e+00 + -1.952934600980153e+00 -1.951102686114853e+00 -1.949265621833916e+00 -1.947423399611466e+00 -1.945576011029322e+00 + -1.943723447779321e+00 -1.941865701664761e+00 -1.940002764602220e+00 -1.938134628623416e+00 -1.936261285877053e+00 + -1.934382728630933e+00 -1.932498949274147e+00 -1.930609940318228e+00 -1.928715694398726e+00 -1.926816204276861e+00 + -1.924911462841137e+00 -1.923001463109181e+00 -1.921086198229848e+00 -1.919165661484078e+00 -1.917239846286222e+00 + -1.915308746185453e+00 -1.913372354867159e+00 -1.911430666154576e+00 -1.909483674010689e+00 -1.907531372538875e+00 + -1.905573755983935e+00 -1.903610818733309e+00 -1.901642555318248e+00 -1.899668960415145e+00 -1.897690028847340e+00 + -1.895705755585500e+00 -1.893716135748389e+00 -1.891721164603861e+00 -1.889720837569811e+00 -1.887715150215264e+00 + -1.885704098261985e+00 -1.883687677584678e+00 -1.881665884211489e+00 -1.879638714324755e+00 -1.877606164261747e+00 + -1.875568230515538e+00 -1.873524909736410e+00 -1.871476198731857e+00 -1.869422094466849e+00 -1.867362594064368e+00 + -1.865297694805917e+00 -1.863227394132156e+00 -1.861151689644132e+00 -1.859070579103125e+00 -1.856984060430629e+00 + -1.854892131708708e+00 -1.852794791180298e+00 -1.850692037249563e+00 -1.848583868483016e+00 -1.846470283609175e+00 + -1.844351281518301e+00 -1.842226861262547e+00 -1.840097022056075e+00 -1.837961763275225e+00 -1.835821084459365e+00 + -1.833674985310510e+00 -1.831523465692773e+00 -1.829366525632330e+00 -1.827204165317372e+00 -1.825036385098054e+00 + -1.822863185487151e+00 -1.820684567159566e+00 -1.818500530951587e+00 -1.816311077860659e+00 -1.814116209045147e+00 + -1.811915925824112e+00 -1.809710229677771e+00 -1.807499122246926e+00 -1.805282605331993e+00 -1.803060680892635e+00 + -1.800833351047356e+00 -1.798600618073082e+00 -1.796362484405475e+00 -1.794118952638219e+00 -1.791870025521948e+00 + -1.789615705963686e+00 -1.787355997026266e+00 -1.785090901927800e+00 -1.782820424041778e+00 -1.780544566896309e+00 + -1.778263334172888e+00 -1.775976729705675e+00 -1.773684757480802e+00 -1.771387421635713e+00 -1.769084726459004e+00 + -1.766776676389749e+00 -1.764463276016015e+00 -1.762144530074053e+00 -1.759820443447505e+00 -1.757491021166585e+00 + -1.755156268407777e+00 -1.752816190493067e+00 -1.750470792888431e+00 -1.748120081202859e+00 -1.745764061187435e+00 + -1.743402738734446e+00 -1.741036119876891e+00 -1.738664210787749e+00 -1.736287017778289e+00 -1.733904547297024e+00 + -1.731516805928730e+00 -1.729123800393417e+00 -1.726725537545713e+00 -1.724322024374108e+00 -1.721913267999197e+00 + -1.719499275672529e+00 -1.717080054775552e+00 -1.714655612818529e+00 -1.712225957439758e+00 -1.709791096404816e+00 + -1.707351037604744e+00 -1.704905789054834e+00 -1.702455358893499e+00 -1.699999755381117e+00 -1.697538986899140e+00 + -1.695073061949339e+00 -1.692601989151939e+00 -1.690125777244355e+00 -1.687644435080006e+00 -1.685157971627097e+00 + -1.682666395967668e+00 -1.680169717296760e+00 -1.677667944920599e+00 -1.675161088255273e+00 -1.672649156825472e+00 + -1.670132160263248e+00 -1.667610108307030e+00 -1.665083010800692e+00 -1.662550877691807e+00 -1.660013719030264e+00 + -1.657471544966985e+00 -1.654924365752664e+00 -1.652372191736694e+00 -1.649815033366252e+00 -1.647252901184563e+00 + -1.644685805829483e+00 -1.642113758032216e+00 -1.639536768616035e+00 -1.636954848495137e+00 -1.634368008673768e+00 + -1.631776260244455e+00 -1.629179614386624e+00 -1.626578082365314e+00 -1.623971675529856e+00 -1.621360405312723e+00 + -1.618744283228616e+00 -1.616123320872805e+00 -1.613497529919679e+00 -1.610866922121478e+00 -1.608231509307009e+00 + -1.605591303380452e+00 -1.602946316320431e+00 -1.600296560178402e+00 -1.597642047077262e+00 -1.594982789210051e+00 + -1.592318798838672e+00 -1.589650088292725e+00 -1.586976669968553e+00 -1.584298556327702e+00 -1.581615759895517e+00 + -1.578928293259898e+00 -1.576236169070057e+00 -1.573539400035316e+00 -1.570837998924132e+00 -1.568131978562685e+00 + -1.565421351833477e+00 -1.562706131674105e+00 -1.559986331076056e+00 -1.557261963083497e+00 -1.554533040792341e+00 + -1.551799577348870e+00 -1.549061585948380e+00 -1.546319079834004e+00 -1.543572072295516e+00 -1.540820576668156e+00 + -1.538064606331704e+00 -1.535304174709156e+00 -1.532539295265443e+00 -1.529769981506265e+00 -1.526996246976940e+00 + -1.524218105261294e+00 -1.521435569980673e+00 -1.518648654792741e+00 -1.515857373390260e+00 -1.513061739499927e+00 + -1.510261766881280e+00 -1.507457469325655e+00 -1.504648860655170e+00 -1.501835954721618e+00 -1.499018765405266e+00 + -1.496197306613796e+00 -1.493371592281244e+00 -1.490541636366935e+00 -1.487707452854560e+00 -1.484869055751119e+00 + -1.482026459085769e+00 -1.479179676908803e+00 -1.476328723290653e+00 -1.473473612320907e+00 -1.470614358107333e+00 + -1.467750974774950e+00 -1.464883476464902e+00 -1.462011877333507e+00 -1.459136191551330e+00 -1.456256433302213e+00 + -1.453372616782348e+00 -1.450484756199388e+00 -1.447592865771413e+00 -1.444696959726040e+00 -1.441797052299523e+00 + -1.438893157735824e+00 -1.435985290285779e+00 -1.433073464206186e+00 -1.430157693758910e+00 -1.427237993210005e+00 + -1.424314376828874e+00 -1.421386858887432e+00 -1.418455453659242e+00 -1.415520175418727e+00 -1.412581038440266e+00 + -1.409638056997445e+00 -1.406691245362249e+00 -1.403740617804247e+00 -1.400786188589830e+00 -1.397827971981392e+00 + -1.394865982236568e+00 -1.391900233607513e+00 -1.388930740340141e+00 -1.385957516673378e+00 -1.382980576838445e+00 + -1.379999935058056e+00 -1.377015605545769e+00 -1.374027602505287e+00 -1.371035940129765e+00 -1.368040632601135e+00 + -1.365041694089385e+00 -1.362039138751849e+00 -1.359032980732610e+00 -1.356023234161846e+00 -1.353009913155193e+00 + -1.349993031813137e+00 -1.346972604220348e+00 -1.343948644444978e+00 -1.340921166538134e+00 -1.337890184533307e+00 + -1.334855712445783e+00 -1.331817764272060e+00 -1.328776353989248e+00 -1.325731495554416e+00 -1.322683202904096e+00 + -1.319631489953804e+00 -1.316576370597481e+00 -1.313517858706949e+00 -1.310455968131407e+00 -1.307390712696745e+00 + -1.304322106205176e+00 -1.301250162434767e+00 -1.298174895138932e+00 -1.295096318045963e+00 -1.292014444858547e+00 + -1.288929289253154e+00 -1.285840864879663e+00 -1.282749185360983e+00 -1.279654264292610e+00 -1.276556115242183e+00 + -1.273454751749040e+00 -1.270350187323670e+00 -1.267242435447356e+00 -1.264131509571866e+00 -1.261017423119054e+00 + -1.257900189480467e+00 -1.254779822016964e+00 -1.251656334058131e+00 -1.248529738902049e+00 -1.245400049815003e+00 + -1.242267280031128e+00 -1.239131442752061e+00 -1.235992551146588e+00 -1.232850618350151e+00 -1.229705657464579e+00 + -1.226557681557882e+00 -1.223406703663960e+00 -1.220252736782276e+00 -1.217095793877524e+00 -1.213935887879212e+00 + -1.210773031681400e+00 -1.207607238142563e+00 -1.204438520085305e+00 -1.201266890296094e+00 -1.198092361525016e+00 + -1.194914946485288e+00 -1.191734657853123e+00 -1.188551508267585e+00 -1.185365510330353e+00 -1.182176676605511e+00 + -1.178985019619322e+00 -1.175790551859792e+00 -1.172593285776534e+00 -1.169393233780670e+00 -1.166190408244668e+00 + -1.162984821502151e+00 -1.159776485847655e+00 -1.156565413536314e+00 -1.153351616783677e+00 -1.150135107765698e+00 + -1.146915898618573e+00 -1.143694001438581e+00 -1.140469428281918e+00 -1.137242191164382e+00 -1.134012302061195e+00 + -1.130779772907074e+00 -1.127544615596070e+00 -1.124306841981435e+00 -1.121066463875526e+00 -1.117823493049462e+00 + -1.114577941233045e+00 -1.111329820114775e+00 -1.108079141341763e+00 -1.104825916519657e+00 -1.101570157212519e+00 + -1.098311874942576e+00 -1.095051081190077e+00 -1.091787787393390e+00 -1.088522004948960e+00 -1.085253745211226e+00 + -1.081983019492520e+00 -1.078709839062889e+00 -1.075434215149928e+00 -1.072156158938924e+00 -1.068875681572841e+00 + -1.065592794152240e+00 -1.062307507735225e+00 -1.059019833337311e+00 -1.055729781931232e+00 -1.052437364447113e+00 + -1.049142591772498e+00 -1.045845474752299e+00 -1.042546024188749e+00 -1.039244250841284e+00 -1.035940165426402e+00 + -1.032633778617835e+00 -1.029325101046582e+00 -1.026014143300901e+00 -1.022700915926290e+00 -1.019385429425379e+00 + -1.016067694257817e+00 -1.012747720840422e+00 -1.009425519547281e+00 -1.006101100709748e+00 -1.002774474616428e+00 + -9.994456515131339e-01 -9.961146416027145e-01 -9.927814550452979e-01 -9.894461019583579e-01 -9.861085924167352e-01 + -9.827689364526724e-01 -9.794271440557631e-01 -9.760832251728038e-01 -9.727371897080341e-01 -9.693890475232336e-01 + -9.660388084377602e-01 -9.626864822285967e-01 -9.593320786303275e-01 -9.559756073349919e-01 -9.526170779923363e-01 + -9.492565002099276e-01 -9.458938835532064e-01 -9.425292375455497e-01 -9.391625716682727e-01 -9.357938953604861e-01 + -9.324232180193422e-01 -9.290505490001821e-01 -9.256758976165971e-01 -9.222992731405002e-01 -9.189206848021546e-01 + -9.155401417900354e-01 -9.121576532510745e-01 -9.087732282908244e-01 -9.053868759735387e-01 -9.019986053222475e-01 + -8.986084253188085e-01 -8.952163449037792e-01 -8.918223729766506e-01 -8.884265183960345e-01 -8.850287899797543e-01 + -8.816291965049287e-01 -8.782277467080382e-01 -8.748244492848152e-01 -8.714193128904584e-01 -8.680123461398447e-01 + -8.646035576076280e-01 -8.611929558283322e-01 -8.577805492964320e-01 -8.543663464662500e-01 -8.509503557521700e-01 + -8.475325855288578e-01 -8.441130441313672e-01 -8.406917398552465e-01 -8.372686809566259e-01 -8.338438756521399e-01 + -8.304173321191086e-01 -8.269890584957844e-01 -8.235590628814669e-01 -8.201273533366124e-01 -8.166939378829362e-01 + -8.132588245033374e-01 -8.098220211420800e-01 -8.063835357050458e-01 -8.029433760598558e-01 -7.995015500359854e-01 + -7.960580654248766e-01 -7.926129299798835e-01 -7.891661514164245e-01 -7.857177374122553e-01 -7.822676956075949e-01 + -7.788160336052478e-01 -7.753627589707209e-01 -7.719078792321810e-01 -7.684514018805977e-01 -7.649933343700221e-01 + -7.615336841177162e-01 -7.580724585042823e-01 -7.546096648737854e-01 -7.511453105337301e-01 -7.476794027551762e-01 + -7.442119487730333e-01 -7.407429557861941e-01 -7.372724309576654e-01 -7.338003814146944e-01 -7.303268142487679e-01 + -7.268517365157010e-01 -7.233751552359434e-01 -7.198970773947163e-01 -7.164175099421463e-01 -7.129364597933961e-01 + -7.094539338286766e-01 -7.059699388933205e-01 -7.024844817980913e-01 -6.989975693193274e-01 -6.955092081990747e-01 + -6.920194051452209e-01 -6.885281668315246e-01 -6.850354998976717e-01 -6.815414109495830e-01 -6.780459065595650e-01 + -6.745489932664477e-01 -6.710506775757169e-01 -6.675509659595550e-01 -6.640498648568872e-01 -6.605473806736856e-01 + -6.570435197831260e-01 -6.535382885257272e-01 -6.500316932094807e-01 -6.465237401099102e-01 -6.430144354700990e-01 + -6.395037855009964e-01 -6.359917963815742e-01 -6.324784742589671e-01 -6.289638252486081e-01 -6.254478554342929e-01 + -6.219305708682017e-01 -6.184119775711935e-01 -6.148920815329759e-01 -6.113708887122395e-01 -6.078484050367946e-01 + -6.043246364036469e-01 -6.007995886790076e-01 -5.972732676985832e-01 -5.937456792677487e-01 -5.902168291616812e-01 + -5.866867231254987e-01 -5.831553668743398e-01 -5.796227660933704e-01 -5.760889264380635e-01 -5.725538535343775e-01 + -5.690175529788876e-01 -5.654800303389226e-01 -5.619412911526557e-01 -5.584013409291054e-01 -5.548601851484034e-01 + -5.513178292619730e-01 -5.477742786926665e-01 -5.442295388348998e-01 -5.406836150547434e-01 -5.371365126899267e-01 + -5.335882370500895e-01 -5.300387934169691e-01 -5.264881870445293e-01 -5.229364231590963e-01 -5.193835069594627e-01 + -5.158294436168782e-01 -5.122742382752947e-01 -5.087178960515530e-01 -5.051604220355145e-01 -5.016018212901950e-01 + -4.980420988518643e-01 -4.944812597300535e-01 -4.909193089077686e-01 -4.873562513416893e-01 -4.837920919622982e-01 + -4.802268356740119e-01 -4.766604873552837e-01 -4.730930518586110e-01 -4.695245340107353e-01 -4.659549386128445e-01 + -4.623842704406984e-01 -4.588125342447544e-01 -4.552397347502847e-01 -4.516658766573718e-01 -4.480909646411015e-01 + -4.445150033517625e-01 -4.409379974149741e-01 -4.373599514318086e-01 -4.337808699789076e-01 -4.302007576084850e-01 + -4.266196188484980e-01 -4.230374582028547e-01 -4.194542801515368e-01 -4.158700891507195e-01 -4.122848896328899e-01 + -4.086986860068522e-01 -4.051114826578878e-01 -4.015232839479533e-01 -3.979340942158113e-01 -3.943439177771490e-01 + -3.907527589246850e-01 -3.871606219281927e-01 -3.835675110346344e-01 -3.799734304683662e-01 -3.763783844312629e-01 + -3.727823771028347e-01 -3.691854126403394e-01 -3.655874951788002e-01 -3.619886288311359e-01 -3.583888176883556e-01 + -3.547880658196861e-01 -3.511863772726900e-01 -3.475837560733700e-01 -3.439802062261966e-01 -3.403757317142188e-01 + -3.367703364992645e-01 -3.331640245220630e-01 -3.295567997023559e-01 -3.259486659390053e-01 -3.223396271100321e-01 + -3.187296870726997e-01 -3.151188496637202e-01 -3.115071186993761e-01 -3.078944979756281e-01 -3.042809912682182e-01 + -3.006666023327148e-01 -2.970513349045861e-01 -2.934351926994019e-01 -2.898181794129512e-01 -2.862002987213512e-01 + -2.825815542811472e-01 -2.789619497293617e-01 -2.753414886835577e-01 -2.717201747420350e-01 -2.680980114839463e-01 + -2.644750024694065e-01 -2.608511512395889e-01 -2.572264613167772e-01 -2.536009362044210e-01 -2.499745793873251e-01 + -2.463473943317643e-01 -2.427193844855928e-01 -2.390905532783392e-01 -2.354609041212582e-01 -2.318304404073747e-01 + -2.281991655116755e-01 -2.245670827912224e-01 -2.209341955852512e-01 -2.173005072152671e-01 -2.136660209851075e-01 + -2.100307401809710e-01 -2.063946680716038e-01 -2.027578079084109e-01 -1.991201629255557e-01 -1.954817363400530e-01 + -1.918425313518324e-01 -1.882025511437609e-01 -1.845617988818216e-01 -1.809202777152288e-01 -1.772779907765208e-01 + -1.736349411816489e-01 -1.699911320300484e-01 -1.663465664046538e-01 -1.627012473720686e-01 -1.590551779826788e-01 + -1.554083612707462e-01 -1.517608002544958e-01 -1.481124979361825e-01 -1.444634573021090e-01 -1.408136813227827e-01 + -1.371631729530310e-01 -1.335119351320907e-01 -1.298599707836971e-01 -1.262072828161450e-01 -1.225538741223097e-01 + -1.188997475797902e-01 -1.152449060510300e-01 -1.115893523833992e-01 -1.079330894092803e-01 -1.042761199461357e-01 + -1.006184467965231e-01 -9.696007274822774e-02 -9.330100057438517e-02 -8.964123303356122e-02 -8.598077286983424e-02 + -8.231962281286517e-02 -7.865778557790955e-02 -7.499526386593933e-02 -7.133206036376810e-02 -6.766817774412769e-02 + -6.400361866574732e-02 -6.033838577342381e-02 -5.667248169803389e-02 -5.300590905664746e-02 -4.933867045264920e-02 + -4.567076847581415e-02 -4.200220570238655e-02 -3.833298469514738e-02 -3.466310800342957e-02 -3.099257816321675e-02 + -2.732139769726914e-02 -2.364956911519612e-02 -1.997709491353020e-02 -1.630397757579507e-02 -1.263021957252322e-02 + -8.955823361345837e-03 -5.280791387111823e-03 -1.605126081964963e-03 2.071170134586485e-03 5.748094855600855e-03 + 9.425645686690845e-03 1.310382024593703e-02 1.678261616376874e-02 2.046203108289166e-02 2.414206265822271e-02 + 2.782270855681995e-02 3.150396645786312e-02 3.518583405258492e-02 3.886830904415156e-02 4.255138914758803e-02 + 4.623507208971680e-02 4.991935560909162e-02 5.360423745597131e-02 5.728971539226702e-02 6.097578719141545e-02 + 6.466245063831325e-02 6.834970352925622e-02 7.203754367186781e-02 7.572596888508176e-02 7.941497699908910e-02 + 8.310456585521861e-02 8.679473330586998e-02 9.048547721445237e-02 9.417679545531955e-02 9.786868591375421e-02 + 1.015611464859084e-01 1.052541750786990e-01 1.089477696097372e-01 1.126419280072713e-01 1.163366482101255e-01 + 1.200319281676670e-01 1.237277658397772e-01 1.274241591967351e-01 1.311211062191494e-01 1.348186048979051e-01 + 1.385166532341022e-01 1.422152492390253e-01 1.459143909341164e-01 1.496140763508625e-01 1.533143035307329e-01 + 1.570150705251202e-01 1.607163753952856e-01 1.644182162123267e-01 1.681205910571567e-01 1.718234980203906e-01 + 1.755269352022867e-01 1.792309007126910e-01 1.829353926709834e-01 1.866404092060424e-01 1.903459484562278e-01 + 1.940520085692764e-01 1.977585877022375e-01 2.014656840214258e-01 2.051732957023651e-01 2.088814209297487e-01 + 2.125900578974350e-01 2.162992048083373e-01 2.200088598743714e-01 2.237190213164002e-01 2.274296873641816e-01 + 2.311408562563316e-01 2.348525262403182e-01 2.385646955723619e-01 2.422773625173777e-01 2.459905253489230e-01 + 2.497041823491505e-01 2.534183318087678e-01 2.571329720270329e-01 2.608481013116614e-01 2.645637179787702e-01 + 2.682798203528239e-01 2.719964067665871e-01 2.757134755610949e-01 2.794310250856368e-01 2.831490536976771e-01 + 2.868675597627948e-01 2.905865416546349e-01 2.943059977548639e-01 2.980259264531308e-01 3.017463261470603e-01 + 3.054671952421796e-01 3.091885321518557e-01 3.129103352972455e-01 3.166326031072572e-01 3.203553340185105e-01 + 3.240785264753302e-01 3.278021789296729e-01 3.315262898410738e-01 3.352508576766006e-01 3.389758809107990e-01 + 3.427013580256680e-01 3.464272875106516e-01 3.501536678625716e-01 3.538804975855692e-01 3.576077751910594e-01 + 3.613354991976881e-01 3.650636681313048e-01 3.687922805249425e-01 3.725213349187690e-01 3.762508298600275e-01 + 3.799807639029857e-01 3.837111356088989e-01 3.874419435459824e-01 3.911731862893885e-01 3.949048624211740e-01 + 3.986369705302226e-01 4.023695092122097e-01 4.061024770695666e-01 4.098358727114415e-01 4.135696947536948e-01 + 4.173039418188508e-01 4.210386125360338e-01 4.247737055409372e-01 4.285092194757774e-01 4.322451529892598e-01 + 4.359815047365813e-01 4.397182733793715e-01 4.434554575856482e-01 4.471930560297706e-01 4.509310673923997e-01 + 4.546694903604793e-01 4.584083236272107e-01 4.621475658920251e-01 4.658872158605209e-01 4.696272722444260e-01 + 4.733677337615650e-01 4.771085991358258e-01 4.808498670971474e-01 4.845915363814908e-01 4.883336057307771e-01 + 4.920760738928535e-01 4.958189396214601e-01 4.995622016761947e-01 5.033058588225020e-01 5.070499098316517e-01 + 5.107943534806773e-01 5.145391885523346e-01 5.182844138350757e-01 5.220300281230178e-01 5.257760302159316e-01 + 5.295224189192098e-01 5.332691930438227e-01 5.370163514062751e-01 5.407638928285766e-01 5.445118161382115e-01 + 5.482601201681270e-01 5.520088037567100e-01 5.557578657477374e-01 5.595073049903369e-01 5.632571203389566e-01 + 5.670073106533396e-01 5.707578747985095e-01 5.745088116447482e-01 5.782601200675495e-01 5.820117989475806e-01 + 5.857638471706547e-01 5.895162636277033e-01 5.932690472147573e-01 5.970221968329386e-01 6.007757113884100e-01 + 6.045295897923321e-01 6.082838309608417e-01 6.120384338150270e-01 6.157933972809060e-01 6.195487202894194e-01 + 6.233044017763778e-01 6.270604406824323e-01 6.308168359530472e-01 6.345735865384647e-01 6.383306913937021e-01 + 6.420881494785343e-01 6.458459597574499e-01 6.496041211996127e-01 6.533626327788410e-01 6.571214934735885e-01 + 6.608807022669068e-01 6.646402581464583e-01 6.684001601044642e-01 6.721604071376693e-01 6.759209982473187e-01 + 6.796819324391351e-01 6.834432087232953e-01 6.872048261144361e-01 6.909667836316008e-01 6.947290802982086e-01 + 6.984917151420330e-01 7.022546871951785e-01 7.060179954940593e-01 7.097816390793986e-01 7.135456169961855e-01 + 7.173099282936458e-01 7.210745720252143e-01 7.248395472485171e-01 7.286048530253483e-01 7.323704884216655e-01 + 7.361364525075642e-01 7.399027443572311e-01 7.436693630489271e-01 7.474363076649712e-01 7.512035772917065e-01 + 7.549711710195152e-01 7.587390879427752e-01 7.625073271598276e-01 7.662758877729542e-01 7.700447688883600e-01 + 7.738139696161510e-01 7.775834890703355e-01 7.813533263687892e-01 7.851234806332243e-01 7.888939509891686e-01 + 7.926647365659425e-01 7.964358364966436e-01 8.002072499181447e-01 8.039789759710598e-01 8.077510137997215e-01 + 8.115233625521516e-01 8.152960213800404e-01 8.190689894387397e-01 8.228422658872446e-01 8.266158498881856e-01 + 8.303897406077796e-01 8.341639372158201e-01 8.379384388856563e-01 8.417132447941736e-01 8.454883541217841e-01 + 8.492637660524233e-01 8.530394797734975e-01 8.568154944758737e-01 8.605918093538610e-01 8.643684236051893e-01 + 8.681453364310144e-01 8.719225470358860e-01 8.757000546277245e-01 8.794778584178012e-01 8.832559576207158e-01 + 8.870343514543838e-01 8.908130391400285e-01 8.945920199021707e-01 8.983712929685914e-01 9.021508575703128e-01 + 9.059307129415819e-01 9.097108583198581e-01 9.134912929457998e-01 9.172720160632626e-01 9.210530269192547e-01 + 9.248343247639269e-01 9.286159088505546e-01 9.323977784355193e-01 9.361799327783000e-01 9.399623711414764e-01 + 9.437450927906796e-01 9.475280969945827e-01 9.513113830248859e-01 9.550949501562985e-01 9.588787976665334e-01 + 9.626629248362989e-01 9.664473309492629e-01 9.702320152920413e-01 9.740169771541809e-01 9.778022158281421e-01 + 9.815877306092978e-01 9.853735207959158e-01 9.891595856891386e-01 9.929459245929639e-01 9.967325368142239e-01 + 1.000519421662573e+00 1.004306578450491e+00 1.008094006493260e+00 1.011881705108960e+00 1.015669673618414e+00 + 1.019457911345202e+00 1.023246417615658e+00 1.027035191758812e+00 1.030824233106444e+00 1.034613540993033e+00 + 1.038403114755716e+00 1.042192953734301e+00 1.045983057271259e+00 1.049773424711693e+00 1.053564055403357e+00 + 1.057354948696604e+00 1.061146103944397e+00 1.064937520502279e+00 1.068729197728344e+00 1.072521134983281e+00 + 1.076313331630313e+00 1.080105787035196e+00 1.083898500566212e+00 1.087691471594149e+00 1.091484699492279e+00 + 1.095278183636364e+00 1.099071923404625e+00 1.102865918177762e+00 1.106660167338908e+00 1.110454670273624e+00 + 1.114249426369879e+00 1.118044435018049e+00 1.121839695610920e+00 1.125635207543654e+00 1.129430970213787e+00 + 1.133226983021199e+00 1.137023245368112e+00 1.140819756659091e+00 1.144616516301010e+00 1.148413523703078e+00 + 1.152210778276778e+00 1.156008279435879e+00 1.159806026596436e+00 1.163604019176739e+00 1.167402256597350e+00 + 1.171200738281089e+00 1.174999463652973e+00 1.178798432140239e+00 1.182597643172343e+00 1.186397096180900e+00 + 1.190196790599755e+00 1.193996725864902e+00 1.197796901414489e+00 1.201597316688831e+00 1.205397971130369e+00 + 1.209198864183652e+00 1.212999995295380e+00 1.216801363914356e+00 1.220602969491471e+00 1.224404811479703e+00 + 1.228206889334096e+00 1.232009202511745e+00 1.235811750471838e+00 1.239614532675582e+00 1.243417548586224e+00 + 1.247220797669036e+00 1.251024279391295e+00 1.254827993222272e+00 1.258631938633253e+00 1.262436115097495e+00 + 1.266240522090237e+00 1.270045159088673e+00 1.273850025571937e+00 1.277655121021129e+00 1.281460444919266e+00 + 1.285265996751315e+00 1.289071776004128e+00 1.292877782166474e+00 1.296684014729029e+00 1.300490473184322e+00 + 1.304297157026783e+00 1.308104065752717e+00 1.311911198860283e+00 1.315718555849481e+00 1.319526136222142e+00 + 1.323333939481939e+00 1.327141965134373e+00 1.330950212686751e+00 1.334758681648181e+00 1.338567371529577e+00 + 1.342376281843627e+00 1.346185412104794e+00 1.349994761829313e+00 1.353804330535196e+00 1.357614117742193e+00 + 1.361424122971793e+00 1.365234345747223e+00 1.369044785593433e+00 1.372855442037079e+00 1.376666314606557e+00 + 1.380477402831948e+00 1.384288706245020e+00 1.388100224379228e+00 1.391911956769691e+00 1.395723902953217e+00 + 1.399536062468262e+00 1.403348434854938e+00 1.407161019655010e+00 1.410973816411859e+00 1.414786824670482e+00 + 1.418600043977534e+00 1.422413473881260e+00 1.426227113931514e+00 1.430040963679749e+00 1.433855022678995e+00 + 1.437669290483868e+00 1.441483766650551e+00 1.445298450736820e+00 1.449113342301984e+00 1.452928440906907e+00 + 1.456743746114005e+00 1.460559257487215e+00 1.464374974592010e+00 1.468190896995395e+00 1.472007024265873e+00 + 1.475823355973462e+00 1.479639891689688e+00 1.483456630987549e+00 1.487273573441524e+00 1.491090718627604e+00 + 1.494908066123240e+00 1.498725615507327e+00 1.502543366360226e+00 1.506361318263761e+00 1.510179470801182e+00 + 1.513997823557182e+00 1.517816376117892e+00 1.521635128070872e+00 1.525454079005076e+00 1.529273228510862e+00 + 1.533092576180029e+00 1.536912121605744e+00 1.540731864382566e+00 1.544551804106445e+00 1.548371940374710e+00 + 1.552192272786052e+00 1.556012800940515e+00 1.559833524439517e+00 1.563654442885843e+00 1.567475555883599e+00 + 1.571296863038223e+00 1.575118363956503e+00 1.578940058246540e+00 1.582761945517770e+00 1.586584025380936e+00 + 1.590406297448085e+00 1.594228761332567e+00 1.598051416649029e+00 1.601874263013399e+00 1.605697300042904e+00 + 1.609520527356048e+00 1.613343944572591e+00 1.617167551313563e+00 1.620991347201264e+00 1.624815331859245e+00 + 1.628639504912300e+00 1.632463865986463e+00 1.636288414709016e+00 1.640113150708467e+00 1.643938073614544e+00 + 1.647763183058201e+00 1.651588478671610e+00 1.655413960088138e+00 1.659239626942369e+00 1.663065478870086e+00 + 1.666891515508254e+00 1.670717736495018e+00 1.674544141469714e+00 1.678370730072873e+00 1.682197501946165e+00 + 1.686024456732443e+00 1.689851594075727e+00 1.693678913621150e+00 1.697506415015047e+00 1.701334097904871e+00 + 1.705161961939224e+00 1.708990006767836e+00 1.712818232041556e+00 1.716646637412369e+00 1.720475222533373e+00 + 1.724303987058799e+00 1.728132930643963e+00 1.731962052945288e+00 1.735791353620303e+00 1.739620832327621e+00 + 1.743450488726960e+00 1.747280322479111e+00 1.751110333245942e+00 1.754940520690395e+00 1.758770884476495e+00 + 1.762601424269322e+00 1.766432139734997e+00 1.770263030540735e+00 1.774094096354784e+00 1.777925336846424e+00 + 1.781756751685986e+00 1.785588340544849e+00 1.789420103095404e+00 1.793252039011081e+00 1.797084147966338e+00 + 1.800916429636643e+00 1.804748883698474e+00 1.808581509829327e+00 1.812414307707703e+00 1.816247277013096e+00 + 1.820080417425998e+00 1.823913728627902e+00 1.827747210301280e+00 1.831580862129588e+00 1.835414683797252e+00 + 1.839248674989692e+00 1.843082835393283e+00 1.846917164695372e+00 1.850751662584271e+00 1.854586328749242e+00 + 1.858421162880485e+00 1.862256164669187e+00 1.866091333807462e+00 1.869926669988357e+00 1.873762172905859e+00 + 1.877597842254888e+00 1.881433677731301e+00 1.885269679031874e+00 1.889105845854307e+00 1.892942177897211e+00 + 1.896778674860105e+00 1.900615336443431e+00 1.904452162348530e+00 1.908289152277638e+00 1.912126305933900e+00 + 1.915963623021343e+00 1.919801103244882e+00 1.923638746310337e+00 1.927476551924393e+00 1.931314519794603e+00 + 1.935152649629421e+00 1.938990941138158e+00 1.942829394030991e+00 1.946668008018962e+00 1.950506782813956e+00 + 1.954345718128757e+00 1.958184813676960e+00 1.962024069173015e+00 1.965863484332242e+00 1.969703058870781e+00 + 1.973542792505600e+00 1.977382684954527e+00 1.981222735936210e+00 1.985062945170119e+00 1.988903312376550e+00 + 1.992743837276623e+00 1.996584519592279e+00 2.000425359046253e+00 2.004266355362118e+00 2.008107508264239e+00 + 2.011948817477781e+00 2.015790282728717e+00 2.019631903743792e+00 2.023473680250584e+00 2.027315611977434e+00 + 2.031157698653481e+00 2.034999940008646e+00 2.038842335773612e+00 2.042684885679868e+00 2.046527589459656e+00 + 2.050370446845998e+00 2.054213457572679e+00 2.058056621374253e+00 2.061899937986032e+00 2.065743407144061e+00 + 2.069587028585192e+00 2.073430802046996e+00 2.077274727267780e+00 2.081118803986620e+00 2.084963031943340e+00 + 2.088807410878472e+00 2.092651940533300e+00 2.096496620649857e+00 2.100341450970890e+00 2.104186431239868e+00 + 2.108031561200996e+00 2.111876840599186e+00 2.115722269180089e+00 2.119567846690062e+00 2.123413572876169e+00 + 2.127259447486187e+00 2.131105470268597e+00 2.134951640972579e+00 2.138797959348045e+00 2.142644425145562e+00 + 2.146491038116414e+00 2.150337798012584e+00 2.154184704586730e+00 2.158031757592203e+00 2.161878956783035e+00 + 2.165726301913951e+00 2.169573792740339e+00 2.173421429018272e+00 2.177269210504503e+00 2.181117136956432e+00 + 2.184965208132139e+00 2.188813423790382e+00 2.192661783690573e+00 2.196510287592776e+00 2.200358935257718e+00 + 2.204207726446776e+00 2.208056660921995e+00 2.211905738446045e+00 2.215754958782268e+00 2.219604321694638e+00 + 2.223453826947759e+00 2.227303474306887e+00 2.231153263537919e+00 2.235003194407377e+00 2.238853266682425e+00 + 2.242703480130844e+00 2.246553834521041e+00 2.250404329622069e+00 2.254254965203567e+00 2.258105741035820e+00 + 2.261956656889728e+00 2.265807712536795e+00 2.269658907749144e+00 2.273510242299514e+00 2.277361715961221e+00 + 2.281213328508221e+00 2.285065079715066e+00 2.288916969356898e+00 2.292768997209452e+00 2.296621163049071e+00 + 2.300473466652688e+00 2.304325907797825e+00 2.308178486262591e+00 2.312031201825690e+00 2.315884054266406e+00 + 2.319737043364595e+00 2.323590168900697e+00 2.327443430655735e+00 2.331296828411312e+00 2.335150361949601e+00 + 2.339004031053328e+00 2.342857835505797e+00 2.346711775090900e+00 2.350565849593061e+00 2.354420058797285e+00 + 2.358274402489136e+00 2.362128880454725e+00 2.365983492480729e+00 2.369838238354368e+00 2.373693117863430e+00 + 2.377548130796239e+00 2.381403276941666e+00 2.385258556089136e+00 2.389113968028614e+00 2.392969512550594e+00 + 2.396825189446120e+00 2.400680998506778e+00 2.404536939524682e+00 2.408393012292476e+00 2.412249216603342e+00 + 2.416105552250984e+00 2.419962019029628e+00 2.423818616734047e+00 2.427675345159514e+00 2.431532204101833e+00 + 2.435389193357338e+00 2.439246312722842e+00 2.443103561995715e+00 2.446960940973828e+00 2.450818449455553e+00 + 2.454676087239773e+00 2.458533854125888e+00 2.462391749913810e+00 2.466249774403922e+00 2.470107927397144e+00 + 2.473966208694879e+00 2.477824618099033e+00 2.481683155412010e+00 2.485541820436698e+00 2.489400612976488e+00 + 2.493259532835266e+00 2.497118579817395e+00 2.500977753727728e+00 2.504837054371609e+00 2.508696481554857e+00 + 2.512556035083781e+00 2.516415714765172e+00 2.520275520406294e+00 2.524135451814887e+00 2.527995508799164e+00 + 2.531855691167817e+00 2.535715998730005e+00 2.539576431295364e+00 2.543436988673999e+00 2.547297670676467e+00 + 2.551158477113792e+00 2.555019407797480e+00 2.558880462539467e+00 2.562741641152187e+00 2.566602943448496e+00 + 2.570464369241728e+00 2.574325918345680e+00 2.578187590574561e+00 2.582049385743079e+00 2.585911303666359e+00 + 2.589773344159990e+00 2.593635507040009e+00 2.597497792122881e+00 2.601360199225535e+00 2.605222728165335e+00 + 2.609085378760071e+00 2.612948150827995e+00 2.616811044187788e+00 2.620674058658547e+00 2.624537194059826e+00 + 2.628400450211614e+00 2.632263826934317e+00 2.636127324048770e+00 2.639990941376240e+00 2.643854678738428e+00 + 2.647718535957453e+00 2.651582512855854e+00 2.655446609256586e+00 2.659310824983045e+00 2.663175159859037e+00 + 2.667039613708778e+00 2.670904186356907e+00 2.674768877628471e+00 2.678633687348941e+00 2.682498615344191e+00 + 2.686363661440501e+00 2.690228825464567e+00 2.694094107243497e+00 2.697959506604806e+00 2.701825023376384e+00 + 2.705690657386567e+00 2.709556408464075e+00 2.713422276438001e+00 2.717288261137876e+00 2.721154362393623e+00 + 2.725020580035540e+00 2.728886913894344e+00 2.732753363801129e+00 2.736619929587372e+00 2.740486611084965e+00 + 2.744353408126183e+00 2.748220320543677e+00 2.752087348170495e+00 2.755954490840073e+00 2.759821748386222e+00 + 2.763689120643135e+00 2.767556607445396e+00 2.771424208627959e+00 2.775291924026168e+00 2.779159753475736e+00 + 2.783027696812751e+00 2.786895753873690e+00 2.790763924495389e+00 2.794632208515051e+00 2.798500605770271e+00 + 2.802369116099008e+00 2.806237739339573e+00 2.810106475330655e+00 2.813975323911325e+00 2.817844284920988e+00 + 2.821713358199438e+00 2.825582543586830e+00 2.829451840923661e+00 2.833321250050794e+00 2.837190770809476e+00 + 2.841060403041279e+00 2.844930146588145e+00 2.848800001292379e+00 2.852669966996631e+00 2.856540043543903e+00 + 2.860410230777552e+00 2.864280528541288e+00 2.868150936679154e+00 2.872021455035565e+00 2.875892083455281e+00 + 2.879762821783390e+00 2.883633669865330e+00 2.887504627546890e+00 2.891375694674199e+00 2.895246871093730e+00 + 2.899118156652296e+00 2.902989551197044e+00 2.906861054575454e+00 2.910732666635357e+00 2.914604387224911e+00 + 2.918476216192609e+00 2.922348153387285e+00 2.926220198658103e+00 2.930092351854549e+00 2.933964612826442e+00 + 2.937836981423946e+00 2.941709457497539e+00 2.945582040898030e+00 2.949454731476543e+00 2.953327529084536e+00 + 2.957200433573802e+00 2.961073444796446e+00 2.964946562604892e+00 2.968819786851891e+00 2.972693117390511e+00 + 2.976566554074131e+00 2.980440096756472e+00 2.984313745291551e+00 2.988187499533694e+00 2.992061359337559e+00 + 2.995935324558123e+00 2.999809395050658e+00 3.003683570670743e+00 3.007557851274288e+00 3.011432236717509e+00 + 3.015306726856922e+00 3.019181321549349e+00 3.023056020651925e+00 3.026930824022092e+00 3.030805731517596e+00 + 3.034680742996488e+00 3.038555858317117e+00 3.042431077338135e+00 3.046306399918491e+00 3.050181825917436e+00 + 3.054057355194544e+00 3.057932987609653e+00 3.061808723022907e+00 3.065684561294761e+00 3.069560502285944e+00 + 3.073436545857505e+00 3.077312691870754e+00 3.081188940187324e+00 3.085065290669126e+00 3.088941743178361e+00 + 3.092818297577534e+00 3.096694953729397e+00 3.100571711497044e+00 3.104448570743832e+00 3.108325531333389e+00 + 3.112202593129648e+00 3.116079755996834e+00 3.119957019799434e+00 3.123834384402221e+00 3.127711849670264e+00 + 3.131589415468909e+00 3.135467081663770e+00 3.139344848120748e+00 3.143222714706027e+00 3.147100681286060e+00 + 3.150978747727584e+00 3.154856913897605e+00 3.158735179663403e+00 3.162613544892546e+00 3.166492009452863e+00 + 3.170370573212458e+00 3.174249236039705e+00 3.178127997803246e+00 3.182006858372005e+00 3.185885817615167e+00 + 3.189764875402178e+00 3.193644031602761e+00 3.197523286086910e+00 3.201402638724883e+00 3.205282089387195e+00 + 3.209161637944619e+00 3.213041284268201e+00 3.216921028229274e+00 3.220800869699382e+00 3.224680808550369e+00 + 3.228560844654336e+00 3.232440977883612e+00 3.236321208110829e+00 3.240201535208851e+00 3.244081959050797e+00 + 3.247962479510052e+00 3.251843096460258e+00 3.255723809775304e+00 3.259604619329335e+00 3.263485524996756e+00 + 3.267366526652213e+00 3.271247624170616e+00 3.275128817427123e+00 3.279010106297138e+00 3.282891490656318e+00 + 3.286772970380568e+00 3.290654545346034e+00 3.294536215429121e+00 3.298417980506477e+00 3.302299840454991e+00 + 3.306181795151808e+00 3.310063844474303e+00 3.313945988300107e+00 3.317828226507090e+00 3.321710558973357e+00 + 3.325592985577268e+00 3.329475506197414e+00 3.333358120712633e+00 3.337240829001994e+00 3.341123630944812e+00 + 3.345006526420645e+00 3.348889515309279e+00 3.352772597490729e+00 3.356655772845258e+00 3.360539041253372e+00 + 3.364422402595799e+00 3.368305856753500e+00 3.372189403607681e+00 3.376073043039771e+00 3.379956774931425e+00 + 3.383840599164541e+00 3.387724515621249e+00 3.391608524183907e+00 3.395492624735098e+00 3.399376817157620e+00 + 3.403261101334524e+00 3.407145477149094e+00 3.411029944484806e+00 3.414914503225384e+00 3.418799153254779e+00 + 3.422683894457152e+00 3.426568726716919e+00 3.430453649918682e+00 3.434338663947280e+00 3.438223768687789e+00 + 3.442108964025496e+00 3.445994249845889e+00 3.449879626034712e+00 3.453765092477914e+00 3.457650649061649e+00 + 3.461536295672301e+00 3.465422032196477e+00 3.469307858520995e+00 3.473193774532890e+00 3.477079780119415e+00 + 3.480965875168029e+00 3.484852059566419e+00 3.488738333202488e+00 3.492624695964341e+00 3.496511147740293e+00 + 3.500397688418888e+00 3.504284317888859e+00 3.508171036039178e+00 3.512057842759014e+00 3.515944737937729e+00 + 3.519831721464933e+00 3.523718793230405e+00 3.527605953124155e+00 3.531493201036399e+00 3.535380536857553e+00 + 3.539267960478252e+00 3.543155471789302e+00 3.547043070681772e+00 3.550930757046888e+00 3.554818530776093e+00 + 3.558706391761053e+00 3.562594339893608e+00 3.566482375065814e+00 3.570370497169926e+00 3.574258706098419e+00 + 3.578147001743945e+00 3.582035383999357e+00 3.585923852757734e+00 3.589812407912312e+00 3.593701049356562e+00 + 3.597589776984145e+00 3.601478590688908e+00 3.605367490364899e+00 3.609256475906370e+00 3.613145547207766e+00 + 3.617034704163729e+00 3.620923946669089e+00 3.624813274618877e+00 3.628702687908314e+00 3.632592186432809e+00 + 3.636481770087979e+00 3.640371438769635e+00 3.644261192373752e+00 3.648151030796515e+00 3.652040953934309e+00 + 3.655930961683694e+00 3.659821053941432e+00 3.663711230604457e+00 3.667601491569907e+00 3.671491836735101e+00 + 3.675382265997548e+00 3.679272779254951e+00 3.683163376405176e+00 3.687054057346316e+00 3.690944821976607e+00 + 3.694835670194492e+00 3.698726601898611e+00 3.702617616987750e+00 3.706508715360910e+00 3.710399896917270e+00 + 3.714291161556196e+00 3.718182509177221e+00 3.722073939680066e+00 3.725965452964635e+00 3.729857048931016e+00 + 3.733748727479471e+00 3.737640488510456e+00 3.741532331924585e+00 3.745424257622661e+00 3.749316265505680e+00 + 3.753208355474780e+00 3.757100527431315e+00 3.760992781276802e+00 3.764885116912924e+00 3.768777534241552e+00 + 3.772670033164732e+00 3.776562613584673e+00 3.780455275403772e+00 3.784348018524601e+00 3.788240842849901e+00 + 3.792133748282588e+00 3.796026734725749e+00 3.799919802082638e+00 3.803812950256703e+00 3.807706179151531e+00 + 3.811599488670903e+00 3.815492878718772e+00 3.819386349199244e+00 3.823279900016608e+00 3.827173531075329e+00 + 3.831067242280022e+00 3.834961033535479e+00 3.838854904746666e+00 3.842748855818712e+00 3.846642886656917e+00 + 3.850536997166732e+00 3.854431187253799e+00 3.858325456823914e+00 3.862219805783029e+00 3.866114234037267e+00 + 3.870008741492930e+00 3.873903328056468e+00 3.877797993634503e+00 3.881692738133819e+00 3.885587561461354e+00 + 3.889482463524214e+00 3.893377444229677e+00 3.897272503485176e+00 3.901167641198303e+00 3.905062857276809e+00 + 3.908958151628612e+00 3.912853524161789e+00 3.916748974784573e+00 3.920644503405356e+00 3.924540109932688e+00 + 3.928435794275292e+00 3.932331556342037e+00 3.936227396041937e+00 3.940123313284186e+00 3.944019307978133e+00 + 3.947915380033268e+00 3.951811529359243e+00 3.955707755865875e+00 3.959604059463127e+00 3.963500440061118e+00 + 3.967396897570128e+00 3.971293431900595e+00 3.975190042963091e+00 3.979086730668355e+00 3.982983494927284e+00 + 3.986880335650903e+00 3.990777252750427e+00 3.994674246137198e+00 3.998571315722721e+00 4.002468461418634e+00 + 4.006365683136734e+00 4.010262980788989e+00 4.014160354287492e+00 4.018057803544500e+00 4.021955328472413e+00 + 4.025852928983772e+00 4.029750604991282e+00 4.033648356407791e+00 4.037546183146281e+00 4.041444085119914e+00 + 4.045342062241969e+00 4.049240114425880e+00 4.053138241585236e+00 4.057036443633754e+00 4.060934720485319e+00 + 4.064833072053951e+00 4.068731498253815e+00 4.072629998999217e+00 4.076528574204604e+00 4.080427223784582e+00 + 4.084325947653895e+00 4.088224745727431e+00 4.092123617920205e+00 4.096022564147386e+00 4.099921584324299e+00 + 4.103820678366392e+00 4.107719846189272e+00 4.111619087708659e+00 4.115518402840437e+00 4.119417791500630e+00 + 4.123317253605394e+00 4.127216789071021e+00 4.131116397813960e+00 4.135016079750782e+00 4.138915834798201e+00 + 4.142815662873077e+00 4.146715563892406e+00 4.150615537773317e+00 4.154515584433065e+00 4.158415703789073e+00 + 4.162315895758883e+00 4.166216160260166e+00 4.170116497210739e+00 4.174016906528549e+00 4.177917388131700e+00 + 4.181817941938395e+00 4.185718567866993e+00 4.189619265836000e+00 4.193520035764035e+00 4.197420877569849e+00 + 4.201321791172351e+00 4.205222776490553e+00 4.209123833443624e+00 4.213024961950862e+00 4.216926161931687e+00 + 4.220827433305650e+00 4.224728775992443e+00 4.228630189911899e+00 4.232531674983950e+00 4.236433231128689e+00 + 4.240334858266338e+00 4.244236556317230e+00 4.248138325201841e+00 4.252040164840775e+00 4.255942075154763e+00 + 4.259844056064670e+00 4.263746107491480e+00 4.267648229356314e+00 4.271550421580432e+00 4.275452684085195e+00 + 4.279355016792104e+00 4.283257419622798e+00 4.287159892499030e+00 4.291062435342680e+00 4.294965048075763e+00 + 4.298867730620414e+00 4.302770482898887e+00 4.306673304833581e+00 4.310576196347009e+00 4.314479157361798e+00 + 4.318382187800719e+00 4.322285287586650e+00 4.326188456642602e+00 4.330091694891720e+00 4.333995002257261e+00 + 4.337898378662596e+00 4.341801824031233e+00 4.345705338286800e+00 4.349608921353045e+00 4.353512573153845e+00 + 4.357416293613188e+00 4.361320082655183e+00 4.365223940204074e+00 4.369127866184225e+00 4.373031860520095e+00 + 4.376935923136287e+00 4.380840053957526e+00 4.384744252908652e+00 4.388648519914627e+00 4.392552854900507e+00 + 4.396457257791507e+00 4.400361728512938e+00 4.404266266990228e+00 4.408170873148935e+00 4.412075546914733e+00 + 4.415980288213393e+00 4.419885096970840e+00 4.423789973113086e+00 4.427694916566270e+00 4.431599927256657e+00 + 4.435505005110602e+00 4.439410150054613e+00 4.443315362015288e+00 4.447220640919339e+00 4.451125986693611e+00 + 4.455031399265058e+00 4.458936878560739e+00 4.462842424507838e+00 4.466748037033640e+00 4.470653716065564e+00 + 4.474559461531138e+00 4.478465273357989e+00 4.482371151473866e+00 4.486277095806632e+00 4.490183106284270e+00 + 4.494089182834870e+00 4.497995325386625e+00 4.501901533867844e+00 4.505807808206965e+00 4.509714148332520e+00 + 4.513620554173148e+00 4.517527025657617e+00 4.521433562714797e+00 4.525340165273663e+00 4.529246833263311e+00 + 4.533153566612947e+00 4.537060365251863e+00 4.540967229109491e+00 4.544874158115369e+00 4.548781152199127e+00 + 4.552688211290517e+00 4.556595335319395e+00 4.560502524215726e+00 4.564409777909585e+00 4.568317096331151e+00 + 4.572224479410710e+00 4.576131927078670e+00 4.580039439265522e+00 4.583947015901896e+00 4.587854656918493e+00 + 4.591762362246146e+00 4.595670131815790e+00 4.599577965558446e+00 4.603485863405274e+00 4.607393825287514e+00 + 4.611301851136528e+00 4.615209940883774e+00 4.619118094460810e+00 4.623026311799314e+00 4.626934592831057e+00 + 4.630842937487914e+00 4.634751345701876e+00 4.638659817405020e+00 4.642568352529532e+00 4.646476951007724e+00 + 4.650385612771989e+00 4.654294337754813e+00 4.658203125888803e+00 4.662111977106663e+00 4.666020891341213e+00 + 4.669929868525360e+00 4.673838908592097e+00 4.677748011474558e+00 4.681657177105950e+00 4.685566405419582e+00 + 4.689475696348879e+00 4.693385049827360e+00 4.697294465788649e+00 4.701203944166440e+00 4.705113484894579e+00 + 4.709023087906980e+00 4.712932753137645e+00 4.716842480520704e+00 4.720752269990381e+00 4.724662121480987e+00 + 4.728572034926930e+00 4.732482010262732e+00 4.736392047423006e+00 4.740302146342463e+00 4.744212306955919e+00 + 4.748122529198262e+00 4.752032813004509e+00 4.755943158309769e+00 4.759853565049232e+00 4.763764033158194e+00 + 4.767674562572055e+00 4.771585153226303e+00 4.775495805056527e+00 4.779406517998403e+00 4.783317291987707e+00 + 4.787228126960327e+00 4.791139022852228e+00 4.795049979599470e+00 4.798960997138212e+00 4.802872075404728e+00 + 4.806783214335366e+00 4.810694413866552e+00 4.814605673934833e+00 4.818516994476862e+00 4.822428375429350e+00 + 4.826339816729119e+00 4.830251318313096e+00 4.834162880118287e+00 4.838074502081788e+00 4.841986184140806e+00 + 4.845897926232623e+00 4.849809728294617e+00 4.853721590264272e+00 4.857633512079154e+00 4.861545493676913e+00 + 4.865457534995310e+00 4.869369635972181e+00 4.873281796545461e+00 4.877194016653170e+00 4.881106296233433e+00 + 4.885018635224464e+00 4.888931033564545e+00 4.892843491192083e+00 4.896756008045549e+00 4.900668584063503e+00 + 4.904581219184616e+00 4.908493913347652e+00 4.912406666491426e+00 4.916319478554875e+00 4.920232349477025e+00 + 4.924145279196985e+00 4.928058267653942e+00 4.931971314787186e+00 4.935884420536087e+00 4.939797584840124e+00 + 4.943710807638835e+00 4.947624088871856e+00 4.951537428478923e+00 4.955450826399852e+00 4.959364282574548e+00 + 4.963277796942979e+00 4.967191369445247e+00 4.971105000021513e+00 4.975018688612018e+00 4.978932435157112e+00 + 4.982846239597206e+00 4.986760101872820e+00 4.990674021924551e+00 4.994587999693081e+00 4.998502035119179e+00 + 5.002416128143695e+00 5.006330278707575e+00 5.010244486751836e+00 5.014158752217599e+00 5.018073075046062e+00 + 5.021987455178499e+00 5.025901892556272e+00 5.029816387120825e+00 5.033730938813709e+00 5.037645547576535e+00 + 5.041560213351000e+00 5.045474936078894e+00 5.049389715702087e+00 5.053304552162531e+00 5.057219445402261e+00 + 5.061134395363388e+00 5.065049401988131e+00 5.068964465218773e+00 5.072879584997671e+00 5.076794761267281e+00 + 5.080709993970135e+00 5.084625283048848e+00 5.088540628446118e+00 5.092456030104727e+00 5.096371487967532e+00 + 5.100287001977467e+00 5.104202572077567e+00 5.108118198210930e+00 5.112033880320745e+00 5.115949618350281e+00 + 5.119865412242876e+00 5.123781261941962e+00 5.127697167391047e+00 5.131613128533725e+00 5.135529145313658e+00 + 5.139445217674589e+00 5.143361345560363e+00 5.147277528914878e+00 5.151193767682111e+00 5.155110061806146e+00 + 5.159026411231123e+00 5.162942815901261e+00 5.166859275760874e+00 5.170775790754339e+00 5.174692360826114e+00 + 5.178608985920737e+00 5.182525665982828e+00 5.186442400957093e+00 5.190359190788300e+00 5.194276035421282e+00 + 5.198192934800989e+00 5.202109888872426e+00 5.206026897580672e+00 5.209943960870889e+00 5.213861078688311e+00 + 5.217778250978260e+00 5.221695477686122e+00 5.225612758757373e+00 5.229530094137553e+00 5.233447483772281e+00 + 5.237364927607260e+00 5.241282425588252e+00 5.245199977661116e+00 5.249117583771781e+00 5.253035243866246e+00 + 5.256952957890576e+00 5.260870725790926e+00 5.264788547513535e+00 5.268706423004683e+00 5.272624352210764e+00 + 5.276542335078230e+00 5.280460371553595e+00 5.284378461583461e+00 5.288296605114506e+00 5.292214802093479e+00 + 5.296133052467205e+00 5.300051356182580e+00 5.303969713186566e+00 5.307888123426207e+00 5.311806586848630e+00 + 5.315725103401025e+00 5.319643673030646e+00 5.323562295684837e+00 5.327480971311006e+00 5.331399699856629e+00 + 5.335318481269277e+00 5.339237315496557e+00 5.343156202486188e+00 5.347075142185935e+00 5.350994134543632e+00 + 5.354913179507208e+00 5.358832277024653e+00 5.362751427044014e+00 5.366670629513426e+00 5.370589884381094e+00 + 5.374509191595290e+00 5.378428551104363e+00 5.382347962856725e+00 5.386267426800867e+00 5.390186942885344e+00 + 5.394106511058783e+00 5.398026131269886e+00 5.401945803467421e+00 5.405865527600220e+00 5.409785303617207e+00 + 5.413705131467342e+00 5.417625011099695e+00 5.421544942463374e+00 5.425464925507555e+00 5.429384960181517e+00 + 5.433305046434582e+00 5.437225184216137e+00 5.441145373475650e+00 5.445065614162660e+00 5.448985906226772e+00 + 5.452906249617661e+00 5.456826644285054e+00 5.460747090178762e+00 5.464667587248663e+00 5.468588135444709e+00 + 5.472508734716910e+00 5.476429385015343e+00 5.480350086290163e+00 5.484270838491581e+00 5.488191641569884e+00 + 5.492112495475418e+00 5.496033400158610e+00 5.499954355569950e+00 5.503875361659968e+00 5.507796418379304e+00 + 5.511717525678641e+00 5.515638683508733e+00 5.519559891820397e+00 5.523481150564511e+00 5.527402459692045e+00 + 5.531323819154003e+00 5.535245228901478e+00 5.539166688885620e+00 5.543088199057640e+00 5.547009759368822e+00 + 5.550931369770526e+00 5.554853030214157e+00 5.558774740651182e+00 5.562696501033155e+00 5.566618311311688e+00 + 5.570540171438450e+00 5.574462081365184e+00 5.578384041043692e+00 5.582306050425843e+00 5.586228109463566e+00 + 5.590150218108859e+00 5.594072376313789e+00 5.597994584030478e+00 5.601916841211109e+00 5.605839147807951e+00 + 5.609761503773312e+00 5.613683909059564e+00 5.617606363619169e+00 5.621528867404630e+00 5.625451420368507e+00 + 5.629374022463446e+00 5.633296673642148e+00 5.637219373857373e+00 5.641142123061935e+00 5.645064921208726e+00 + 5.648987768250699e+00 5.652910664140864e+00 5.656833608832292e+00 5.660756602278123e+00 5.664679644431557e+00 + 5.668602735245848e+00 5.672525874674330e+00 5.676449062670387e+00 5.680372299187456e+00 5.684295584179051e+00 + 5.688218917598742e+00 5.692142299400166e+00 5.696065729537008e+00 5.699989207963028e+00 5.703912734632039e+00 + 5.707836309497911e+00 5.711759932514585e+00 5.715683603636069e+00 5.719607322816414e+00 5.723531090009735e+00 + 5.727454905170222e+00 5.731378768252110e+00 5.735302679209690e+00 5.739226637997344e+00 5.743150644569472e+00 + 5.747074698880565e+00 5.750998800885166e+00 5.754922950537861e+00 5.758847147793322e+00 5.762771392606274e+00 + 5.766695684931488e+00 5.770620024723804e+00 5.774544411938114e+00 5.778468846529377e+00 5.782393328452615e+00 + 5.786317857662901e+00 5.790242434115354e+00 5.794167057765184e+00 5.798091728567639e+00 5.802016446478020e+00 + 5.805941211451693e+00 5.809866023444093e+00 5.813790882410697e+00 5.817715788307055e+00 5.821640741088761e+00 + 5.825565740711476e+00 5.829490787130914e+00 5.833415880302844e+00 5.837341020183102e+00 5.841266206727576e+00 + 5.845191439892216e+00 5.849116719633019e+00 5.853042045906038e+00 5.856967418667407e+00 5.860892837873299e+00 + 5.864818303479931e+00 5.868743815443598e+00 5.872669373720643e+00 5.876594978267471e+00 5.880520629040545e+00 + 5.884446325996370e+00 5.888372069091520e+00 5.892297858282618e+00 5.896223693526352e+00 5.900149574779458e+00 + 5.904075501998732e+00 5.908001475141026e+00 5.911927494163236e+00 5.915853559022340e+00 5.919779669675345e+00 + 5.923705826079318e+00 5.927632028191405e+00 5.931558275968772e+00 5.935484569368667e+00 5.939410908348387e+00 + 5.943337292865270e+00 5.947263722876723e+00 5.951190198340217e+00 5.955116719213237e+00 5.959043285453376e+00 + 5.962969897018244e+00 5.966896553865521e+00 5.970823255952941e+00 5.974750003238276e+00 5.978676795679381e+00 + 5.982603633234132e+00 5.986530515860487e+00 5.990457443516443e+00 5.994384416160051e+00 5.998311433749435e+00 + 6.002238496242732e+00 6.006165603598179e+00 6.010092755774037e+00 6.014019952728622e+00 6.017947194420314e+00 + 6.021874480807541e+00 6.025801811848792e+00 6.029729187502582e+00 6.033656607727504e+00 6.037584072482205e+00 + 6.041511581725372e+00 6.045439135415756e+00 6.049366733512157e+00 6.053294375973407e+00 6.057222062758417e+00 + 6.061149793826147e+00 6.065077569135598e+00 6.069005388645831e+00 6.072933252315947e+00 6.076861160105123e+00 + 6.080789111972567e+00 6.084717107877537e+00 6.088645147779356e+00 6.092573231637400e+00 6.096501359411073e+00 + 6.100429531059860e+00 6.104357746543279e+00 6.108286005820902e+00 6.112214308852358e+00 6.116142655597328e+00 + 6.120071046015527e+00 6.123999480066726e+00 6.127927957710776e+00 6.131856478907547e+00 6.135785043616966e+00 + 6.139713651799017e+00 6.143642303413714e+00 6.147570998421169e+00 6.151499736781492e+00 6.155428518454863e+00 + 6.159357343401520e+00 6.163286211581745e+00 6.167215122955865e+00 6.171144077484265e+00 6.175073075127373e+00 + 6.179002115845662e+00 6.182931199599676e+00 6.186860326349998e+00 6.190789496057242e+00 6.194718708682085e+00 + 6.198647964185269e+00 6.202577262527563e+00 6.206506603669784e+00 6.210435987572825e+00 6.214365414197607e+00 + 6.218294883505083e+00 6.222224395456291e+00 6.226153950012299e+00 6.230083547134218e+00 6.234013186783224e+00 + 6.237942868920530e+00 6.241872593507395e+00 6.245802360505133e+00 6.249732169875108e+00 6.253662021578736e+00 + 6.257591915577457e+00 6.261521851832772e+00 6.265451830306250e+00 6.269381850959493e+00 6.273311913754136e+00 + 6.277242018651873e+00 6.281172165614456e+00 6.285102354603675e+00 6.289032585581362e+00 6.292962858509402e+00 + 6.296893173349732e+00 6.300823530064331e+00 6.304753928615227e+00 6.308684368964485e+00 6.312614851074240e+00 + 6.316545374906649e+00 6.320475940423933e+00 6.324406547588343e+00 6.328337196362189e+00 6.332267886707841e+00 + 6.336198618587682e+00 6.340129391964171e+00 6.344060206799793e+00 6.347991063057087e+00 6.351921960698646e+00 + 6.355852899687100e+00 6.359783879985132e+00 6.363714901555444e+00 6.367645964360829e+00 6.371577068364101e+00 + 6.375508213528107e+00 6.379439399815769e+00 6.383370627190037e+00 6.387301895613901e+00 6.391233205050414e+00 + 6.395164555462665e+00 6.399095946813782e+00 6.403027379066943e+00 6.406958852185380e+00 6.410890366132364e+00 + 6.414821920871201e+00 6.418753516365252e+00 6.422685152577927e+00 6.426616829472681e+00 6.430548547012995e+00 + 6.434480305162416e+00 6.438412103884530e+00 6.442343943142954e+00 6.446275822901362e+00 6.450207743123482e+00 + 6.454139703773065e+00 6.458071704813928e+00 6.462003746209899e+00 6.465935827924884e+00 6.469867949922830e+00 + 6.473800112167705e+00 6.477732314623537e+00 6.481664557254395e+00 6.485596840024389e+00 6.489529162897681e+00 + 6.493461525838472e+00 6.497393928811004e+00 6.501326371779557e+00 6.505258854708466e+00 6.509191377562104e+00 + 6.513123940304890e+00 6.517056542901281e+00 6.520989185315786e+00 6.524921867512954e+00 6.528854589457358e+00 + 6.532787351113637e+00 6.536720152446469e+00 6.540652993420571e+00 6.544585874000699e+00 6.548518794151661e+00 + 6.552451753838305e+00 6.556384753025508e+00 6.560317791678210e+00 6.564250869761382e+00 6.568183987240030e+00 + 6.572117144079228e+00 6.576050340244061e+00 6.579983575699681e+00 6.583916850411267e+00 6.587850164344033e+00 + 6.591783517463260e+00 6.595716909734260e+00 6.599650341122366e+00 6.603583811592983e+00 6.607517321111550e+00 + 6.611450869643538e+00 6.615384457154459e+00 6.619318083609882e+00 6.623251748975390e+00 6.627185453216641e+00 + 6.631119196299318e+00 6.635052978189128e+00 6.638986798851843e+00 6.642920658253285e+00 6.646854556359279e+00 + 6.650788493135720e+00 6.654722468548537e+00 6.658656482563696e+00 6.662590535147219e+00 6.666524626265158e+00 + 6.670458755883578e+00 6.674392923968630e+00 6.678327130486488e+00 6.682261375403362e+00 6.686195658685502e+00 + 6.690129980299200e+00 6.694064340210804e+00 6.697998738386664e+00 6.701933174793202e+00 6.705867649396889e+00 + 6.709802162164207e+00 6.713736713061675e+00 6.717671302055887e+00 6.721605929113451e+00 6.725540594201011e+00 + 6.729475297285267e+00 6.733410038332955e+00 6.737344817310841e+00 6.741279634185729e+00 6.745214488924485e+00 + 6.749149381493993e+00 6.753084311861183e+00 6.757019279993020e+00 6.760954285856514e+00 6.764889329418707e+00 + 6.768824410646693e+00 6.772759529507592e+00 6.776694685968563e+00 6.780629879996820e+00 6.784565111559600e+00 + 6.788500380624176e+00 6.792435687157864e+00 6.796371031128033e+00 6.800306412502081e+00 6.804241831247434e+00 + 6.808177287331562e+00 6.812112780721996e+00 6.816048311386260e+00 6.819983879291952e+00 6.823919484406702e+00 + 6.827855126698172e+00 6.831790806134070e+00 6.835726522682127e+00 6.839662276310116e+00 6.843598066985860e+00 + 6.847533894677223e+00 6.851469759352090e+00 6.855405660978378e+00 6.859341599524073e+00 6.863277574957172e+00 + 6.867213587245726e+00 6.871149636357796e+00 6.875085722261508e+00 6.879021844925032e+00 6.882958004316539e+00 + 6.886894200404269e+00 6.890830433156481e+00 6.894766702541489e+00 6.898703008527638e+00 6.902639351083285e+00 + 6.906575730176863e+00 6.910512145776821e+00 6.914448597851643e+00 6.918385086369851e+00 6.922321611300020e+00 + 6.926258172610748e+00 6.930194770270661e+00 6.934131404248438e+00 6.938068074512785e+00 6.942004781032449e+00 + 6.945941523776210e+00 6.949878302712889e+00 6.953815117811351e+00 6.957751969040458e+00 6.961688856369166e+00 + 6.965625779766430e+00 6.969562739201248e+00 6.973499734642654e+00 6.977436766059707e+00 6.981373833421536e+00 + 6.985310936697287e+00 6.989248075856122e+00 6.993185250867258e+00 6.997122461699955e+00 7.001059708323488e+00 + 7.004996990707195e+00 7.008934308820419e+00 7.012871662632560e+00 7.016809052113049e+00 7.020746477231343e+00 + 7.024683937956949e+00 7.028621434259388e+00 7.032558966108247e+00 7.036496533473125e+00 7.040434136323654e+00 + 7.044371774629517e+00 7.048309448360422e+00 7.052247157486122e+00 7.056184901976394e+00 7.060122681801048e+00 + 7.064060496929938e+00 7.067998347332947e+00 7.071936232979996e+00 7.075874153841030e+00 7.079812109886049e+00 + 7.083750101085078e+00 7.087688127408173e+00 7.091626188825422e+00 7.095564285306954e+00 7.099502416822924e+00 + 7.103440583343542e+00 7.107378784839032e+00 7.111317021279651e+00 7.115255292635697e+00 7.119193598877512e+00 + 7.123131939975464e+00 7.127070315899942e+00 7.131008726621381e+00 7.134947172110254e+00 7.138885652337065e+00 + 7.142824167272352e+00 7.146762716886672e+00 7.150701301150646e+00 7.154639920034903e+00 7.158578573510104e+00 + 7.162517261546958e+00 7.166455984116213e+00 7.170394741188641e+00 7.174333532735027e+00 7.178272358726226e+00 + 7.182211219133108e+00 7.186150113926570e+00 7.190089043077551e+00 7.194028006557031e+00 7.197967004335998e+00 + 7.201906036385506e+00 7.205845102676621e+00 7.209784203180433e+00 7.213723337868090e+00 7.217662506710752e+00 + 7.221601709679642e+00 7.225540946745974e+00 7.229480217881020e+00 7.233419523056086e+00 7.237358862242496e+00 + 7.241298235411615e+00 7.245237642534841e+00 7.249177083583614e+00 7.253116558529394e+00 7.257056067343663e+00 + 7.260995609997962e+00 7.264935186463842e+00 7.268874796712897e+00 7.272814440716760e+00 7.276754118447077e+00 + 7.280693829875533e+00 7.284633574973859e+00 7.288573353713804e+00 7.292513166067145e+00 7.296453012005713e+00 + 7.300392891501342e+00 7.304332804525915e+00 7.308272751051359e+00 7.312212731049586e+00 7.316152744492599e+00 + 7.320092791352399e+00 7.324032871601018e+00 7.327972985210530e+00 7.331913132153037e+00 7.335853312400668e+00 + 7.339793525925593e+00 7.343733772699999e+00 7.347674052696118e+00 7.351614365886214e+00 7.355554712242567e+00 + 7.359495091737507e+00 7.363435504343380e+00 7.367375950032575e+00 7.371316428777495e+00 7.375256940550589e+00 + 7.379197485324344e+00 7.383138063071249e+00 7.387078673763860e+00 7.391019317374728e+00 7.394959993876464e+00 + 7.398900703241702e+00 7.402841445443087e+00 7.406782220453321e+00 7.410723028245119e+00 7.414663868791250e+00 + 7.418604742064480e+00 7.422545648037628e+00 7.426486586683548e+00 7.430427557975103e+00 7.434368561885189e+00 + 7.438309598386767e+00 7.442250667452785e+00 7.446191769056233e+00 7.450132903170147e+00 7.454074069767579e+00 + 7.458015268821621e+00 7.461956500305385e+00 7.465897764192020e+00 7.469839060454693e+00 7.473780389066612e+00 + 7.477721750001026e+00 7.481663143231182e+00 7.485604568730383e+00 7.489546026471958e+00 7.493487516429258e+00 + 7.497429038575670e+00 7.501370592884602e+00 7.505312179329509e+00 7.509253797883850e+00 7.513195448521138e+00 + 7.517137131214899e+00 7.521078845938686e+00 7.525020592666116e+00 7.528962371370785e+00 7.532904182026352e+00 + 7.536846024606491e+00 7.540787899084914e+00 7.544729805435362e+00 7.548671743631582e+00 7.552613713647395e+00 + 7.556555715456611e+00 7.560497749033079e+00 7.564439814350693e+00 7.568381911383356e+00 7.572324040105001e+00 + 7.576266200489612e+00 7.580208392511180e+00 7.584150616143734e+00 7.588092871361319e+00 7.592035158138017e+00 + 7.595977476447958e+00 7.599919826265271e+00 7.603862207564132e+00 7.607804620318729e+00 7.611747064503290e+00 + 7.615689540092074e+00 7.619632047059358e+00 7.623574585379452e+00 7.627517155026707e+00 7.631459755975482e+00 + 7.635402388200179e+00 7.639345051675221e+00 7.643287746375046e+00 7.647230472274143e+00 7.651173229347036e+00 + 7.655116017568241e+00 7.659058836912326e+00 7.663001687353896e+00 7.666944568867566e+00 7.670887481427973e+00 + 7.674830425009804e+00 7.678773399587753e+00 7.682716405136556e+00 7.686659441630979e+00 7.690602509045798e+00 + 7.694545607355840e+00 7.698488736535943e+00 7.702431896560968e+00 7.706375087405814e+00 7.710318309045409e+00 + 7.714261561454699e+00 7.718204844608677e+00 7.722148158482338e+00 7.726091503050719e+00 7.730034878288886e+00 + 7.733978284171926e+00 7.737921720674944e+00 7.741865187773094e+00 7.745808685441546e+00 7.749752213655484e+00 + 7.753695772390144e+00 7.757639361620781e+00 7.761582981322659e+00 7.765526631471095e+00 7.769470312041419e+00 + 7.773414023008983e+00 7.777357764349174e+00 7.781301536037411e+00 7.785245338049130e+00 7.789189170359795e+00 + 7.793133032944893e+00 7.797076925779955e+00 7.801020848840526e+00 7.804964802102174e+00 7.808908785540495e+00 + 7.812852799131112e+00 7.816796842849679e+00 7.820740916671883e+00 7.824685020573422e+00 7.828629154530024e+00 + 7.832573318517450e+00 7.836517512511481e+00 7.840461736487932e+00 7.844405990422626e+00 7.848350274291438e+00 + 7.852294588070255e+00 7.856238931734984e+00 7.860183305261573e+00 7.864127708625979e+00 7.868072141804203e+00 + 7.872016604772266e+00 7.875961097506200e+00 7.879905619982076e+00 7.883850172175999e+00 7.887794754064088e+00 + 7.891739365622486e+00 7.895684006827366e+00 7.899628677654928e+00 7.903573378081402e+00 7.907518108083036e+00 + 7.911462867636102e+00 7.915407656716901e+00 7.919352475301766e+00 7.923297323367039e+00 7.927242200889101e+00 + 7.931187107844353e+00 7.935132044209239e+00 7.939077009960200e+00 7.943022005073713e+00 7.946967029526285e+00 + 7.950912083294444e+00 7.954857166354743e+00 7.958802278683779e+00 7.962747420258130e+00 7.966692591054445e+00 + 7.970637791049374e+00 7.974583020219595e+00 7.978528278541820e+00 7.982473565992767e+00 7.986418882549202e+00 + 7.990364228187905e+00 7.994309602885677e+00 7.998255006619347e+00 8.002200439365769e+00 8.006145901101817e+00 + 8.010091391804414e+00 8.014036911450473e+00 8.017982460016944e+00 8.021928037480818e+00 8.025873643819086e+00 + 8.029819279008782e+00 8.033764943026958e+00 8.037710635850686e+00 8.041656357457072e+00 8.045602107823234e+00 + 8.049547886926318e+00 8.053493694743510e+00 8.057439531252003e+00 8.061385396429017e+00 8.065331290251798e+00 + 8.069277212697617e+00 8.073223163743767e+00 8.077169143367579e+00 8.081115151546383e+00 8.085061188257558e+00 + 8.089007253478485e+00 8.092953347186583e+00 8.096899469359290e+00 8.100845619974066e+00 8.104791799008410e+00 + 8.108738006439820e+00 8.112684242245839e+00 8.116630506404029e+00 8.120576798891953e+00 8.124523119687245e+00 + 8.128469468767518e+00 8.132415846110435e+00 8.136362251693665e+00 8.140308685494910e+00 8.144255147491897e+00 + 8.148201637662380e+00 8.152148155984117e+00 8.156094702434922e+00 8.160041276992603e+00 8.163987879634995e+00 + 8.167934510339974e+00 8.171881169085422e+00 8.175827855849271e+00 8.179774570609441e+00 8.183721313343879e+00 + 8.187668084030586e+00 8.191614882647572e+00 8.195561709172846e+00 8.199508563584475e+00 8.203455445860529e+00 + 8.207402355979104e+00 8.211349293918321e+00 8.215296259656325e+00 8.219243253171292e+00 8.223190274441404e+00 + 8.227137323444873e+00 8.231084400159938e+00 8.235031504564860e+00 8.238978636637917e+00 8.242925796357413e+00 + 8.246872983701680e+00 8.250820198649068e+00 8.254767441177954e+00 8.258714711266720e+00 8.262662008893784e+00 + 8.266609334037611e+00 8.270556686676635e+00 8.274504066789358e+00 8.278451474354295e+00 8.282398909349968e+00 + 8.286346371754933e+00 8.290293861547758e+00 8.294241378707056e+00 8.298188923211439e+00 8.302136495039546e+00 + 8.306084094170053e+00 8.310031720581641e+00 8.313979374253032e+00 8.317927055162944e+00 8.321874763290140e+00 + 8.325822498613396e+00 8.329770261111511e+00 8.333718050763297e+00 8.337665867547615e+00 8.341613711443319e+00 + 8.345561582429301e+00 8.349509480484476e+00 8.353457405587761e+00 8.357405357718111e+00 8.361353336854512e+00 + 8.365301342975959e+00 8.369249376061466e+00 8.373197436090088e+00 8.377145523040872e+00 8.381093636892894e+00 + 8.385041777625290e+00 8.388989945217165e+00 8.392938139647681e+00 8.396886360896003e+00 8.400834608941331e+00 + 8.404782883762870e+00 8.408731185339862e+00 8.412679513651563e+00 8.416627868677262e+00 8.420576250396248e+00 + 8.424524658787846e+00 8.428473093831403e+00 8.432421555506286e+00 8.436370043791873e+00 8.440318558667581e+00 + 8.444267100112835e+00 8.448215668107082e+00 8.452164262629802e+00 8.456112883660488e+00 8.460061531178642e+00 + 8.464010205163815e+00 8.467958905595557e+00 8.471907632453449e+00 8.475856385717085e+00 8.479805165366082e+00 + 8.483753971380104e+00 8.487702803738784e+00 8.491651662421813e+00 8.495600547408909e+00 8.499549458679786e+00 + 8.503498396214182e+00 8.507447359991884e+00 8.511396349992669e+00 8.515345366196343e+00 8.519294408582736e+00 + 8.523243477131702e+00 8.527192571823106e+00 8.531141692636846e+00 8.535090839552836e+00 8.539040012551006e+00 + 8.542989211611307e+00 8.546938436713715e+00 8.550887687838220e+00 8.554836964964855e+00 8.558786268073638e+00 + 8.562735597144622e+00 8.566684952157900e+00 8.570634333093563e+00 8.574583739931727e+00 8.578533172652534e+00 + 8.582482631236132e+00 8.586432115662710e+00 8.590381625912469e+00 8.594331161965624e+00 8.598280723802416e+00 + 8.602230311403101e+00 8.606179924747970e+00 8.610129563817308e+00 8.614079228591445e+00 8.618028919050730e+00 + 8.621978635175504e+00 8.625928376946163e+00 8.629878144343103e+00 8.633827937346743e+00 8.637777755937529e+00 + 8.641727600095916e+00 8.645677469802399e+00 8.649627365037459e+00 8.653577285781630e+00 8.657527232015454e+00 + 8.661477203719476e+00 8.665427200874291e+00 8.669377223460504e+00 8.673327271458728e+00 8.677277344849587e+00 + 8.681227443613757e+00 8.685177567731921e+00 8.689127717184771e+00 8.693077891953029e+00 8.697028092017424e+00 + 8.700978317358722e+00 8.704928567957696e+00 8.708878843795150e+00 8.712829144851895e+00 8.716779471108758e+00 + 8.720729822546611e+00 8.724680199146320e+00 8.728630600888787e+00 8.732581027754909e+00 8.736531479725622e+00 + 8.740481956781895e+00 8.744432458904697e+00 8.748382986074997e+00 8.752333538273827e+00 8.756284115482217e+00 + 8.760234717681200e+00 8.764185344851851e+00 8.768135996975253e+00 8.772086674032519e+00 8.776037376004782e+00 + 8.779988102873165e+00 8.783938854618841e+00 8.787889631223004e+00 8.791840432666843e+00 8.795791258931581e+00 + 8.799742109998453e+00 8.803692985848731e+00 8.807643886463683e+00 8.811594811824598e+00 8.815545761912805e+00 + 8.819496736709628e+00 8.823447736196423e+00 8.827398760354567e+00 8.831349809165451e+00 8.835300882610465e+00 + 8.839251980671060e+00 8.843203103328682e+00 8.847154250564778e+00 8.851105422360842e+00 8.855056618698383e+00 + 8.859007839558918e+00 8.862959084923983e+00 8.866910354775133e+00 8.870861649093953e+00 8.874812967862036e+00 + 8.878764311060996e+00 8.882715678672470e+00 8.886667070678101e+00 8.890618487059555e+00 8.894569927798539e+00 + 8.898521392876743e+00 8.902472882275891e+00 8.906424395977727e+00 8.910375933964017e+00 8.914327496216544e+00 + 8.918279082717106e+00 8.922230693447505e+00 8.926182328389581e+00 8.930133987525194e+00 8.934085670836204e+00 + 8.938037378304507e+00 8.941989109912015e+00 8.945940865640639e+00 8.949892645472326e+00 8.953844449389043e+00 + 8.957796277372763e+00 8.961748129405487e+00 8.965700005469230e+00 8.969651905546019e+00 8.973603829617915e+00 + 8.977555777666984e+00 8.981507749675307e+00 8.985459745624995e+00 8.989411765498163e+00 8.993363809276961e+00 + 8.997315876943548e+00 9.001267968480086e+00 9.005220083868767e+00 9.009172223091827e+00 9.013124386131484e+00 + 9.017076572969975e+00 9.021028783589566e+00 9.024981017972546e+00 9.028933276101220e+00 9.032885557957899e+00 + 9.036837863524912e+00 9.040790192784614e+00 9.044742545719387e+00 9.048694922311613e+00 9.052647322543685e+00 + 9.056599746398041e+00 9.060552193857109e+00 9.064504664903353e+00 9.068457159519253e+00 9.072409677687288e+00 + 9.076362219389965e+00 9.080314784609845e+00 9.084267373329443e+00 9.088219985531319e+00 9.092172621198060e+00 + 9.096125280312265e+00 9.100077962856547e+00 9.104030668813524e+00 9.107983398165862e+00 9.111936150896209e+00 + 9.115888926987253e+00 9.119841726421710e+00 9.123794549182279e+00 9.127747395251687e+00 9.131700264612697e+00 + 9.135653157248070e+00 9.139606073140598e+00 9.143559012273078e+00 9.147511974628335e+00 9.151464960189195e+00 + 9.155417968938506e+00 9.159371000859151e+00 9.163324055934019e+00 9.167277134146000e+00 9.171230235478017e+00 + 9.175183359913012e+00 9.179136507433931e+00 9.183089678023746e+00 9.187042871665453e+00 9.190996088342050e+00 + 9.194949328036554e+00 9.198902590732009e+00 9.202855876411469e+00 9.206809185057997e+00 9.210762516654686e+00 + 9.214715871184641e+00 9.218669248630977e+00 9.222622648976838e+00 9.226576072205372e+00 9.230529518299752e+00 + 9.234482987243164e+00 9.238436479018816e+00 9.242389993609926e+00 9.246343530999724e+00 9.250297091171465e+00 + 9.254250674108420e+00 9.258204279793881e+00 9.262157908211137e+00 9.266111559343512e+00 9.270065233174350e+00 + 9.274018929686974e+00 9.277972648864786e+00 9.281926390691151e+00 9.285880155149465e+00 9.289833942223158e+00 + 9.293787751895650e+00 9.297741584150398e+00 9.301695438970858e+00 9.305649316340519e+00 9.309603216242873e+00 + 9.313557138661427e+00 9.317511083579724e+00 9.321465050981292e+00 9.325419040849711e+00 9.329373053168547e+00 + 9.333327087921395e+00 9.337281145091870e+00 9.341235224663585e+00 9.345189326620188e+00 9.349143450945339e+00 + 9.353097597622712e+00 9.357051766635994e+00 9.361005957968880e+00 9.364960171605098e+00 9.368914407528390e+00 + 9.372868665722509e+00 9.376822946171211e+00 9.380777248858283e+00 9.384731573767526e+00 9.388685920882766e+00 + 9.392640290187822e+00 9.396594681666546e+00 9.400549095302797e+00 9.404503531080460e+00 9.408457988983429e+00 + 9.412412468995601e+00 9.416366971100908e+00 9.420321495283297e+00 9.424276041526713e+00 9.428230609815136e+00 + 9.432185200132551e+00 9.436139812462965e+00 9.440094446790390e+00 9.444049103098862e+00 9.448003781372424e+00 + 9.451958481595151e+00 9.455913203751125e+00 9.459867947824433e+00 9.463822713799196e+00 9.467777501659521e+00 + 9.471732311389564e+00 9.475687142973488e+00 9.479641996395451e+00 9.483596871639650e+00 9.487551768690283e+00 + 9.491506687531567e+00 9.495461628147741e+00 9.499416590523049e+00 9.503371574641758e+00 9.507326580488144e+00 + 9.511281608046493e+00 9.515236657301129e+00 9.519191728236381e+00 9.523146820836576e+00 9.527101935086067e+00 + 9.531057070969227e+00 9.535012228470441e+00 9.538967407574107e+00 9.542922608264641e+00 9.546877830526482e+00 + 9.550833074344064e+00 9.554788339701840e+00 9.558743626584297e+00 9.562698934975925e+00 9.566654264861223e+00 + 9.570609616224706e+00 9.574564989050916e+00 9.578520383324399e+00 9.582475799029718e+00 9.586431236151450e+00 + 9.590386694674194e+00 9.594342174582565e+00 9.598297675861172e+00 9.602253198494653e+00 9.606208742467665e+00 + 9.610164307764872e+00 9.614119894370967e+00 9.618075502270639e+00 9.622031131448587e+00 9.625986781889550e+00 + 9.629942453578275e+00 9.633898146499501e+00 9.637853860638002e+00 9.641809595978570e+00 9.645765352506004e+00 + 9.649721130205119e+00 9.653676929060724e+00 9.657632749057667e+00 9.661588590180823e+00 9.665544452415050e+00 + 9.669500335745237e+00 9.673456240156284e+00 9.677412165633088e+00 9.681368112160611e+00 9.685324079723769e+00 + 9.689280068307523e+00 9.693236077896859e+00 9.697192108476765e+00 9.701148160032226e+00 9.705104232548255e+00 + 9.709060326009890e+00 9.713016440402178e+00 9.716972575710177e+00 9.720928731918955e+00 9.724884909013587e+00 + 9.728841106979187e+00 9.732797325800869e+00 9.736753565463749e+00 9.740709825952983e+00 9.744666107253732e+00 + 9.748622409351144e+00 9.752578732230427e+00 9.756535075876767e+00 9.760491440275388e+00 9.764447825411512e+00 + 9.768404231270377e+00 9.772360657837234e+00 9.776317105097363e+00 9.780273573036045e+00 9.784230061638569e+00 + 9.788186570890247e+00 9.792143100776414e+00 9.796099651282411e+00 9.800056222393579e+00 9.804012814095282e+00 + 9.807969426372910e+00 9.811926059211855e+00 9.815882712597514e+00 9.819839386515332e+00 9.823796080950723e+00 + 9.827752795889150e+00 9.831709531316076e+00 9.835666287216968e+00 9.839623063577319e+00 9.843579860382640e+00 + 9.847536677618439e+00 9.851493515270260e+00 9.855450373323642e+00 9.859407251764143e+00 9.863364150577338e+00 + 9.867321069748803e+00 9.871278009264149e+00 9.875234969108993e+00 9.879191949268950e+00 9.883148949729671e+00 + 9.887105970476812e+00 9.891063011496023e+00 9.895020072773001e+00 9.898977154293434e+00 9.902934256043030e+00 + 9.906891378007515e+00 9.910848520172619e+00 9.914805682524083e+00 9.918762865047686e+00 9.922720067729196e+00 + 9.926677290554396e+00 9.930634533509092e+00 9.934591796579099e+00 9.938549079750242e+00 9.942506383008373e+00 + 9.946463706339326e+00 9.950421049728988e+00 9.954378413163242e+00 9.958335796627976e+00 9.962293200109091e+00 + 9.966250623592515e+00 9.970208067064183e+00 9.974165530510032e+00 9.978123013916065e+00 9.982080517268205e+00 + 9.986038040552405e+00 9.989995583754785e+00 9.993953146861317e+00 9.997910729857953e+00 1.000186833273077e+01 + 1.000582595546584e+01 1.000978359804920e+01 1.001374126046696e+01 1.001769894270521e+01 1.002165664475003e+01 + 1.002561436658758e+01 1.002957210820399e+01 1.003352986958533e+01 1.003748765071779e+01 1.004144545158757e+01 + 1.004540327218085e+01 1.004936111248374e+01 1.005331897248250e+01 1.005727685216344e+01 1.006123475151268e+01 + 1.006519267051658e+01 1.006915060916130e+01 1.007310856743310e+01 1.007706654531831e+01 1.008102454280318e+01 + 1.008498255987407e+01 1.008894059651738e+01 1.009289865271929e+01 1.009685672846620e+01 1.010081482374451e+01 + 1.010477293854056e+01 1.010873107284080e+01 1.011268922663155e+01 1.011664739989926e+01 1.012060559263028e+01 + 1.012456380481114e+01 1.012852203642833e+01 1.013248028746816e+01 1.013643855791723e+01 1.014039684776198e+01 + 1.014435515698888e+01 1.014831348558448e+01 1.015227183353533e+01 1.015623020082792e+01 1.016018858744882e+01 + 1.016414699338458e+01 1.016810541862183e+01 1.017206386314711e+01 1.017602232694696e+01 1.017998081000807e+01 + 1.018393931231707e+01 1.018789783386056e+01 1.019185637462519e+01 1.019581493459768e+01 1.019977351376466e+01 + 1.020373211211275e+01 1.020769072962879e+01 1.021164936629938e+01 1.021560802211125e+01 1.021956669705123e+01 + 1.022352539110597e+01 1.022748410426219e+01 1.023144283650683e+01 1.023540158782656e+01 1.023936035820811e+01 + 1.024331914763840e+01 1.024727795610426e+01 1.025123678359242e+01 1.025519563008982e+01 1.025915449558332e+01 + 1.026311338005976e+01 1.026707228350598e+01 1.027103120590887e+01 1.027499014725542e+01 1.027894910753243e+01 + 1.028290808672698e+01 1.028686708482590e+01 1.029082610181617e+01 1.029478513768479e+01 1.029874419241865e+01 + 1.030270326600479e+01 1.030666235843028e+01 1.031062146968203e+01 1.031458059974712e+01 1.031853974861258e+01 + 1.032249891626539e+01 1.032645810269273e+01 1.033041730788159e+01 1.033437653181913e+01 1.033833577449240e+01 + 1.034229503588844e+01 1.034625431599445e+01 1.035021361479754e+01 1.035417293228486e+01 1.035813226844355e+01 + 1.036209162326079e+01 1.036605099672376e+01 1.037001038881961e+01 1.037396979953562e+01 1.037792922885899e+01 + 1.038188867677688e+01 1.038584814327662e+01 1.038980762834545e+01 1.039376713197049e+01 1.039772665413910e+01 + 1.040168619483862e+01 1.040564575405627e+01 1.040960533177941e+01 1.041356492799537e+01 1.041752454269141e+01 + 1.042148417585492e+01 1.042544382747322e+01 1.042940349753366e+01 1.043336318602366e+01 1.043732289293065e+01 + 1.044128261824197e+01 1.044524236194503e+01 1.044920212402723e+01 1.045316190447608e+01 1.045712170327899e+01 + 1.046108152042337e+01 1.046504135589673e+01 1.046900120968655e+01 1.047296108178035e+01 1.047692097216551e+01 + 1.048088088082967e+01 1.048484080776037e+01 1.048880075294500e+01 1.049276071637128e+01 1.049672069802666e+01 + 1.050068069789875e+01 1.050464071597511e+01 1.050860075224336e+01 1.051256080669113e+01 1.051652087930587e+01 + 1.052048097007536e+01 1.052444107898728e+01 1.052840120602916e+01 1.053236135118870e+01 1.053632151445363e+01 + 1.054028169581148e+01 1.054424189525015e+01 1.054820211275716e+01 1.055216234832027e+01 1.055612260192732e+01 + 1.056008287356597e+01 1.056404316322390e+01 1.056800347088897e+01 1.057196379654897e+01 1.057592414019164e+01 + 1.057988450180470e+01 1.058384488137598e+01 1.058780527889341e+01 1.059176569434473e+01 1.059572612771778e+01 + 1.059968657900042e+01 1.060364704818047e+01 1.060760753524580e+01 1.061156804018439e+01 1.061552856298414e+01 + 1.061948910363280e+01 1.062344966211832e+01 1.062741023842875e+01 1.063137083255198e+01 1.063533144447583e+01 + 1.063929207418836e+01 1.064325272167759e+01 1.064721338693144e+01 1.065117406993782e+01 1.065513477068483e+01 + 1.065909548916052e+01 1.066305622535282e+01 1.066701697924981e+01 1.067097775083953e+01 1.067493854011000e+01 + 1.067889934704931e+01 1.068286017164554e+01 1.068682101388675e+01 1.069078187376108e+01 1.069474275125661e+01 + 1.069870364636148e+01 1.070266455906385e+01 1.070662548935178e+01 1.071058643721341e+01 1.071454740263700e+01 + 1.071850838561071e+01 1.072246938612262e+01 1.072643040416096e+01 1.073039143971403e+01 1.073435249277003e+01 + 1.073831356331702e+01 1.074227465134339e+01 1.074623575683734e+01 1.075019687978709e+01 1.075415802018108e+01 + 1.075811917800728e+01 1.076208035325424e+01 1.076604154591021e+01 1.077000275596337e+01 1.077396398340213e+01 + 1.077792522821489e+01 1.078188649038987e+01 1.078584776991551e+01 1.078980906678014e+01 1.079377038097206e+01 + 1.079773171247971e+01 1.080169306129156e+01 1.080565442739588e+01 1.080961581078118e+01 1.081357721143583e+01 + 1.081753862934823e+01 1.082150006450693e+01 1.082546151690035e+01 1.082942298651685e+01 1.083338447334506e+01 + 1.083734597737335e+01 1.084130749859022e+01 1.084526903698427e+01 1.084923059254394e+01 1.085319216525781e+01 + 1.085715375511432e+01 1.086111536210206e+01 1.086507698620965e+01 1.086903862742562e+01 1.087300028573848e+01 + 1.087696196113690e+01 1.088092365360948e+01 1.088488536314474e+01 1.088884708973135e+01 1.089280883335799e+01 + 1.089677059401324e+01 1.090073237168577e+01 1.090469416636424e+01 1.090865597803722e+01 1.091261780669351e+01 + 1.091657965232179e+01 1.092054151491064e+01 1.092450339444893e+01 1.092846529092528e+01 1.093242720432847e+01 + 1.093638913464717e+01 1.094035108187014e+01 1.094431304598625e+01 1.094827502698413e+01 1.095223702485254e+01 + 1.095619903958037e+01 1.096016107115647e+01 1.096412311956950e+01 1.096808518480828e+01 1.097204726686185e+01 + 1.097600936571878e+01 1.097997148136802e+01 1.098393361379843e+01 1.098789576299891e+01 1.099185792895836e+01 + 1.099582011166554e+01 1.099978231110941e+01 1.100374452727893e+01 1.100770676016299e+01 1.101166900975046e+01 + 1.101563127603030e+01 1.101959355899157e+01 1.102355585862306e+01 1.102751817491377e+01 1.103148050785272e+01 + 1.103544285742887e+01 1.103940522363119e+01 1.104336760644876e+01 1.104733000587051e+01 1.105129242188548e+01 + 1.105525485448276e+01 1.105921730365137e+01 1.106317976938032e+01 1.106714225165869e+01 1.107110475047552e+01 + 1.107506726581996e+01 1.107902979768106e+01 1.108299234604792e+01 1.108695491090967e+01 1.109091749225542e+01 + 1.109488009007421e+01 1.109884270435529e+01 1.110280533508783e+01 1.110676798226090e+01 1.111073064586368e+01 + 1.111469332588542e+01 1.111865602231519e+01 1.112261873514227e+01 1.112658146435581e+01 1.113054420994507e+01 + 1.113450697189932e+01 1.113846975020764e+01 1.114243254485937e+01 1.114639535584373e+01 1.115035818315001e+01 + 1.115432102676752e+01 1.115828388668549e+01 1.116224676289312e+01 1.116620965537986e+01 1.117017256413502e+01 + 1.117413548914779e+01 1.117809843040753e+01 1.118206138790364e+01 1.118602436162540e+01 1.118998735156224e+01 + 1.119395035770345e+01 1.119791338003841e+01 1.120187641855655e+01 1.120583947324725e+01 1.120980254409987e+01 + 1.121376563110383e+01 1.121772873424851e+01 1.122169185352348e+01 1.122565498891808e+01 1.122961814042170e+01 + 1.123358130802394e+01 1.123754449171411e+01 1.124150769148184e+01 1.124547090731646e+01 1.124943413920754e+01 + 1.125339738714465e+01 1.125736065111719e+01 1.126132393111470e+01 1.126528722712670e+01 1.126925053914278e+01 + 1.127321386715250e+01 1.127717721114534e+01 1.128114057111089e+01 1.128510394703880e+01 1.128906733891855e+01 + 1.129303074673982e+01 1.129699417049216e+01 1.130095761016512e+01 1.130492106574838e+01 1.130888453723166e+01 + 1.131284802460446e+01 1.131681152785643e+01 1.132077504697733e+01 1.132473858195679e+01 1.132870213278441e+01 + 1.133266569944998e+01 1.133662928194313e+01 1.134059288025353e+01 1.134455649437096e+01 1.134852012428513e+01 + 1.135248376998567e+01 1.135644743146237e+01 1.136041110870508e+01 1.136437480170340e+01 1.136833851044718e+01 + 1.137230223492618e+01 1.137626597513008e+01 1.138022973104887e+01 1.138419350267220e+01 1.138815728998987e+01 + 1.139212109299178e+01 1.139608491166773e+01 1.140004874600751e+01 1.140401259600099e+01 1.140797646163798e+01 + 1.141194034290844e+01 1.141590423980216e+01 1.141986815230896e+01 1.142383208041880e+01 1.142779602412162e+01 + 1.143175998340729e+01 1.143572395826566e+01 1.143968794868672e+01 1.144365195466042e+01 1.144761597617661e+01 + 1.145158001322524e+01 1.145554406579633e+01 1.145950813387979e+01 1.146347221746567e+01 1.146743631654392e+01 + 1.147140043110443e+01 1.147536456113731e+01 1.147932870663251e+01 1.148329286758009e+01 1.148725704397007e+01 + 1.149122123579242e+01 1.149518544303718e+01 1.149914966569454e+01 1.150311390375449e+01 1.150707815720695e+01 + 1.151104242604216e+01 1.151500671025023e+01 1.151897100982111e+01 1.152293532474489e+01 1.152689965501183e+01 + 1.153086400061205e+01 1.153482836153557e+01 1.153879273777252e+01 1.154275712931309e+01 1.154672153614742e+01 + 1.155068595826563e+01 1.155465039565794e+01 1.155861484831451e+01 1.156257931622558e+01 1.156654379938131e+01 + 1.157050829777183e+01 1.157447281138744e+01 1.157843734021828e+01 1.158240188425466e+01 1.158636644348675e+01 + 1.159033101790480e+01 1.159429560749914e+01 1.159826021225991e+01 1.160222483217747e+01 1.160618946724206e+01 + 1.161015411744397e+01 1.161411878277351e+01 1.161808346322091e+01 1.162204815877661e+01 1.162601286943079e+01 + 1.162997759517385e+01 1.163394233599611e+01 1.163790709188792e+01 1.164187186283973e+01 1.164583664884172e+01 + 1.164980144988430e+01 1.165376626595788e+01 1.165773109705285e+01 1.166169594315962e+01 1.166566080426858e+01 + 1.166962568037015e+01 1.167359057145462e+01 1.167755547751260e+01 1.168152039853444e+01 1.168548533451052e+01 + 1.168945028543143e+01 1.169341525128745e+01 1.169738023206922e+01 1.170134522776713e+01 1.170531023837164e+01 + 1.170927526387328e+01 1.171324030426250e+01 1.171720535952991e+01 1.172117042966583e+01 1.172513551466101e+01 + 1.172910061450587e+01 1.173306572919086e+01 1.173703085870670e+01 1.174099600304388e+01 1.174496116219290e+01 + 1.174892633614441e+01 1.175289152488895e+01 1.175685672841706e+01 1.176082194671941e+01 1.176478717978654e+01 + 1.176875242760911e+01 1.177271769017773e+01 1.177668296748305e+01 1.178064825951567e+01 1.178461356626618e+01 + 1.178857888772530e+01 1.179254422388362e+01 1.179650957473193e+01 1.180047494026082e+01 1.180444032046094e+01 + 1.180840571532305e+01 1.181237112483775e+01 1.181633654899581e+01 1.182030198778800e+01 1.182426744120495e+01 + 1.182823290923737e+01 1.183219839187610e+01 1.183616388911187e+01 1.184012940093526e+01 1.184409492733721e+01 + 1.184806046830851e+01 1.185202602383981e+01 1.185599159392190e+01 1.185995717854561e+01 1.186392277770172e+01 + 1.186788839138113e+01 1.187185401957453e+01 1.187581966227275e+01 1.187978531946670e+01 1.188375099114717e+01 + 1.188771667730504e+01 1.189168237793109e+01 1.189564809301627e+01 1.189961382255137e+01 1.190357956652720e+01 + 1.190754532493486e+01 1.191151109776510e+01 1.191547688500877e+01 1.191944268665685e+01 1.192340850270026e+01 + 1.192737433312989e+01 1.193134017793673e+01 1.193530603711162e+01 1.193927191064553e+01 1.194323779852949e+01 + 1.194720370075437e+01 1.195116961731110e+01 1.195513554819082e+01 1.195910149338441e+01 1.196306745288285e+01 + 1.196703342667713e+01 1.197099941475826e+01 1.197496541711727e+01 1.197893143374514e+01 1.198289746463298e+01 + 1.198686350977179e+01 1.199082956915257e+01 1.199479564276638e+01 1.199876173060427e+01 1.200272783265734e+01 + 1.200669394891670e+01 1.201066007937339e+01 1.201462622401842e+01 1.201859238284293e+01 1.202255855583805e+01 + 1.202652474299488e+01 1.203049094430459e+01 1.203445715975820e+01 1.203842338934691e+01 1.204238963306182e+01 + 1.204635589089405e+01 1.205032216283487e+01 1.205428844887528e+01 1.205825474900657e+01 1.206222106321992e+01 + 1.206618739150650e+01 1.207015373385743e+01 1.207412009026389e+01 1.207808646071718e+01 1.208205284520852e+01 + 1.208601924372905e+01 1.208998565627001e+01 1.209395208282265e+01 1.209791852337819e+01 1.210188497792800e+01 + 1.210585144646319e+01 1.210981792897509e+01 1.211378442545498e+01 1.211775093589403e+01 1.212171746028358e+01 + 1.212568399861503e+01 1.212965055087957e+01 1.213361711706857e+01 1.213758369717333e+01 1.214155029118506e+01 + 1.214551689909515e+01 1.214948352089506e+01 1.215345015657596e+01 1.215741680612929e+01 1.216138346954643e+01 + 1.216535014681870e+01 1.216931683793743e+01 1.217328354289403e+01 1.217725026167997e+01 1.218121699428650e+01 + 1.218518374070504e+01 1.218915050092714e+01 1.219311727494416e+01 1.219708406274737e+01 1.220105086432838e+01 + 1.220501767967852e+01 1.220898450878922e+01 1.221295135165203e+01 1.221691820825841e+01 1.222088507859966e+01 + 1.222485196266738e+01 1.222881886045302e+01 1.223278577194806e+01 1.223675269714403e+01 1.224071963603241e+01 + 1.224468658860463e+01 1.224865355485229e+01 1.225262053476690e+01 1.225658752833992e+01 1.226055453556295e+01 + 1.226452155642759e+01 1.226848859092524e+01 1.227245563904747e+01 1.227642270078602e+01 1.228038977613229e+01 + 1.228435686507784e+01 1.228832396761440e+01 1.229229108373344e+01 1.229625821342652e+01 1.230022535668532e+01 + 1.230419251350150e+01 1.230815968386663e+01 1.231212686777228e+01 1.231609406521009e+01 1.232006127617184e+01 + 1.232402850064899e+01 1.232799573863324e+01 1.233196299011628e+01 1.233593025508976e+01 1.233989753354541e+01 + 1.234386482547477e+01 1.234783213086962e+01 1.235179944972173e+01 1.235576678202268e+01 1.235973412776415e+01 + 1.236370148693796e+01 1.236766885953578e+01 1.237163624554935e+01 1.237560364497032e+01 1.237957105779050e+01 + 1.238353848400172e+01 1.238750592359561e+01 1.239147337656392e+01 1.239544084289853e+01 1.239940832259116e+01 + 1.240337581563350e+01 1.240734332201741e+01 1.241131084173473e+01 1.241527837477727e+01 1.241924592113674e+01 + 1.242321348080499e+01 1.242718105377384e+01 1.243114864003509e+01 1.243511623958061e+01 1.243908385240234e+01 + 1.244305147849200e+01 1.244701911784139e+01 1.245098677044247e+01 1.245495443628717e+01 1.245892211536726e+01 + 1.246288980767460e+01 1.246685751320110e+01 1.247082523193867e+01 1.247479296387923e+01 1.247876070901471e+01 + 1.248272846733698e+01 1.248669623883791e+01 1.249066402350953e+01 1.249463182134376e+01 1.249859963233241e+01 + 1.250256745646751e+01 1.250653529374113e+01 1.251050314414499e+01 1.251447100767122e+01 1.251843888431185e+01 + 1.252240677405871e+01 1.252637467690377e+01 1.253034259283920e+01 1.253431052185685e+01 1.253827846394878e+01 + 1.254224641910695e+01 1.254621438732342e+01 1.255018236859024e+01 1.255415036289937e+01 1.255811837024292e+01 + 1.256208639061292e+01 1.256605442400139e+01 1.257002247040040e+01 1.257399052980202e+01 1.257795860219828e+01 + 1.258192668758136e+01 1.258589478594318e+01 1.258986289727595e+01 1.259383102157176e+01 1.259779915882266e+01 + 1.260176730902082e+01 1.260573547215829e+01 1.260970364822725e+01 1.261367183721978e+01 1.261764003912799e+01 + 1.262160825394408e+01 1.262557648166022e+01 1.262954472226850e+01 1.263351297576103e+01 1.263748124213012e+01 + 1.264144952136788e+01 1.264541781346644e+01 1.264938611841802e+01 1.265335443621482e+01 1.265732276684897e+01 + 1.266129111031274e+01 1.266525946659833e+01 1.266922783569799e+01 1.267319621760395e+01 1.267716461230827e+01 + 1.268113301980337e+01 1.268510144008147e+01 1.268906987313476e+01 1.269303831895546e+01 1.269700677753587e+01 + 1.270097524886830e+01 1.270494373294501e+01 1.270891222975827e+01 1.271288073930032e+01 1.271684926156348e+01 + 1.272081779654003e+01 1.272478634422225e+01 1.272875490460252e+01 1.273272347767318e+01 1.273669206342650e+01 + 1.274066066185475e+01 1.274462927295029e+01 1.274859789670558e+01 1.275256653311283e+01 1.275653518216443e+01 + 1.276050384385278e+01 1.276447251817019e+01 1.276844120510903e+01 1.277240990466175e+01 1.277637861682061e+01 + 1.278034734157817e+01 1.278431607892670e+01 1.278828482885858e+01 1.279225359136630e+01 1.279622236644223e+01 + 1.280019115407882e+01 1.280415995426841e+01 1.280812876700355e+01 1.281209759227668e+01 1.281606643008012e+01 + 1.282003528040640e+01 1.282400414324795e+01 1.282797301859726e+01 1.283194190644677e+01 1.283591080678899e+01 + 1.283987971961643e+01 1.284384864492146e+01 1.284781758269665e+01 1.285178653293450e+01 1.285575549562751e+01 + 1.285972447076814e+01 1.286369345834896e+01 1.286766245836256e+01 1.287163147080127e+01 1.287560049565779e+01 + 1.287956953292465e+01 1.288353858259436e+01 1.288750764465946e+01 1.289147671911245e+01 1.289544580594604e+01 + 1.289941490515269e+01 1.290338401672502e+01 1.290735314065558e+01 1.291132227693698e+01 1.291529142556187e+01 + 1.291926058652273e+01 1.292322975981223e+01 1.292719894542300e+01 1.293116814334764e+01 1.293513735357876e+01 + 1.293910657610898e+01 1.294307581093100e+01 1.294704505803731e+01 1.295101431742070e+01 1.295498358907383e+01 + 1.295895287298926e+01 1.296292216915976e+01 1.296689147757790e+01 1.297086079823635e+01 1.297483013112791e+01 + 1.297879947624520e+01 1.298276883358083e+01 1.298673820312763e+01 1.299070758487832e+01 1.299467697882548e+01 + 1.299864638496186e+01 1.300261580328026e+01 1.300658523377334e+01 1.301055467643381e+01 1.301452413125453e+01 + 1.301849359822815e+01 1.302246307734746e+01 1.302643256860515e+01 1.303040207199396e+01 1.303437158750683e+01 + 1.303834111513644e+01 1.304231065487551e+01 1.304628020671689e+01 1.305024977065333e+01 1.305421934667763e+01 + 1.305818893478268e+01 1.306215853496120e+01 1.306612814720601e+01 1.307009777151000e+01 1.307406740786590e+01 + 1.307803705626652e+01 1.308200671670484e+01 1.308597638917361e+01 1.308994607366569e+01 1.309391577017390e+01 + 1.309788547869114e+01 1.310185519921029e+01 1.310582493172419e+01 1.310979467622566e+01 1.311376443270773e+01 + 1.311773420116315e+01 1.312170398158481e+01 1.312567377396572e+01 1.312964357829879e+01 1.313361339457678e+01 + 1.313758322279269e+01 1.314155306293946e+01 1.314552291501000e+01 1.314949277899725e+01 1.315346265489416e+01 + 1.315743254269354e+01 1.316140244238852e+01 1.316537235397200e+01 1.316934227743692e+01 1.317331221277625e+01 + 1.317728215998293e+01 1.318125211904993e+01 1.318522208997038e+01 1.318919207273708e+01 1.319316206734305e+01 + 1.319713207378137e+01 1.320110209204503e+01 1.320507212212707e+01 1.320904216402043e+01 1.321301221771812e+01 + 1.321698228321315e+01 1.322095236049861e+01 1.322492244956761e+01 1.322889255041308e+01 1.323286266302804e+01 + 1.323683278740563e+01 1.324080292353891e+01 1.324477307142089e+01 1.324874323104467e+01 1.325271340240333e+01 + 1.325668358548995e+01 1.326065378029760e+01 1.326462398681933e+01 1.326859420504831e+01 1.327256443497769e+01 + 1.327653467660038e+01 1.328050492990961e+01 1.328447519489862e+01 1.328844547156036e+01 1.329241575988794e+01 + 1.329638605987465e+01 1.330035637151357e+01 1.330432669479776e+01 1.330829702972043e+01 1.331226737627479e+01 + 1.331623773445394e+01 1.332020810425100e+01 1.332417848565926e+01 1.332814887867189e+01 1.333211928328196e+01 + 1.333608969948267e+01 1.334006012726732e+01 1.334403056662908e+01 1.334800101756103e+01 1.335197148005651e+01 + 1.335594195410872e+01 1.335991243971082e+01 1.336388293685611e+01 1.336785344553781e+01 1.337182396574900e+01 + 1.337579449748319e+01 1.337976504073337e+01 1.338373559549298e+01 1.338770616175521e+01 1.339167673951321e+01 + 1.339564732876046e+01 1.339961792949012e+01 1.340358854169540e+01 1.340755916536969e+01 1.341152980050625e+01 + 1.341550044709830e+01 1.341947110513925e+01 1.342344177462238e+01 1.342741245554094e+01 1.343138314788827e+01 + 1.343535385165773e+01 1.343932456684261e+01 1.344329529343622e+01 1.344726603143195e+01 1.345123678082311e+01 + 1.345520754160296e+01 1.345917831376498e+01 1.346314909730254e+01 1.346711989220882e+01 1.347109069847735e+01 + 1.347506151610151e+01 1.347903234507459e+01 1.348300318538998e+01 1.348697403704109e+01 1.349094490002130e+01 + 1.349491577432402e+01 1.349888665994271e+01 1.350285755687067e+01 1.350682846510129e+01 1.351079938462813e+01 + 1.351477031544459e+01 1.351874125754390e+01 1.352271221091970e+01 1.352668317556540e+01 1.353065415147435e+01 + 1.353462513864007e+01 1.353859613705606e+01 1.354256714671559e+01 1.354653816761232e+01 1.355050919973960e+01 + 1.355448024309098e+01 1.355845129765994e+01 1.356242236343982e+01 1.356639344042432e+01 1.357036452860678e+01 + 1.357433562798071e+01 1.357830673853967e+01 1.358227786027718e+01 1.358624899318672e+01 1.359022013726177e+01 + 1.359419129249587e+01 1.359816245888257e+01 1.360213363641541e+01 1.360610482508793e+01 1.361007602489368e+01 + 1.361404723582619e+01 1.361801845787901e+01 1.362198969104567e+01 1.362596093531977e+01 1.362993219069488e+01 + 1.363390345716453e+01 1.363787473472236e+01 1.364184602336187e+01 1.364581732307674e+01 1.364978863386054e+01 + 1.365375995570681e+01 1.365773128860919e+01 1.366170263256135e+01 1.366567398755679e+01 1.366964535358918e+01 + 1.367361673065214e+01 1.367758811873928e+01 1.368155951784428e+01 1.368553092796080e+01 1.368950234908233e+01 + 1.369347378120261e+01 1.369744522431531e+01 1.370141667841409e+01 1.370538814349260e+01 1.370935961954450e+01 + 1.371333110656345e+01 1.371730260454310e+01 1.372127411347716e+01 1.372524563335935e+01 1.372921716418336e+01 + 1.373318870594277e+01 1.373716025863139e+01 1.374113182224295e+01 1.374510339677109e+01 1.374907498220951e+01 + 1.375304657855195e+01 1.375701818579219e+01 1.376098980392383e+01 1.376496143294079e+01 1.376893307283663e+01 + 1.377290472360514e+01 1.377687638524018e+01 1.378084805773536e+01 1.378481974108449e+01 1.378879143528132e+01 + 1.379276314031972e+01 1.379673485619334e+01 1.380070658289590e+01 1.380467832042136e+01 1.380865006876340e+01 + 1.381262182791587e+01 1.381659359787251e+01 1.382056537862707e+01 1.382453717017342e+01 1.382850897250539e+01 + 1.383248078561680e+01 1.383645260950143e+01 1.384042444415310e+01 1.384439628956564e+01 1.384836814573289e+01 + 1.385234001264869e+01 1.385631189030694e+01 1.386028377870140e+01 1.386425567782593e+01 1.386822758767445e+01 + 1.387219950824081e+01 1.387617143951877e+01 1.388014338150232e+01 1.388411533418528e+01 1.388808729756153e+01 + 1.389205927162496e+01 1.389603125636949e+01 1.390000325178905e+01 1.390397525787738e+01 1.390794727462853e+01 + 1.391191930203633e+01 1.391589134009472e+01 1.391986338879768e+01 1.392383544813902e+01 1.392780751811269e+01 + 1.393177959871267e+01 1.393575168993288e+01 1.393972379176731e+01 1.394369590420982e+01 1.394766802725429e+01 + 1.395164016089490e+01 1.395561230512542e+01 1.395958445993986e+01 1.396355662533219e+01 1.396752880129638e+01 + 1.397150098782643e+01 1.397547318491629e+01 1.397944539255996e+01 1.398341761075145e+01 1.398738983948479e+01 + 1.399136207875392e+01 1.399533432855275e+01 1.399930658887545e+01 1.400327885971602e+01 1.400725114106838e+01 + 1.401122343292659e+01 1.401519573528469e+01 1.401916804813670e+01 1.402314037147676e+01 1.402711270529870e+01 + 1.403108504959673e+01 1.403505740436485e+01 1.403902976959708e+01 1.404300214528754e+01 1.404697453143022e+01 + 1.405094692801925e+01 1.405491933504872e+01 1.405889175251268e+01 1.406286418040517e+01 1.406683661872023e+01 + 1.407080906745206e+01 1.407478152659478e+01 1.407875399614241e+01 1.408272647608902e+01 1.408669896642876e+01 + 1.409067146715573e+01 1.409464397826408e+01 1.409861649974791e+01 1.410258903160136e+01 1.410656157381855e+01 + 1.411053412639361e+01 1.411450668932065e+01 1.411847926259379e+01 1.412245184620733e+01 1.412642444015529e+01 + 1.413039704443185e+01 1.413436965903115e+01 1.413834228394734e+01 1.414231491917469e+01 1.414628756470728e+01 + 1.415026022053928e+01 1.415423288666498e+01 1.415820556307847e+01 1.416217824977390e+01 1.416615094674565e+01 + 1.417012365398773e+01 1.417409637149439e+01 1.417806909925987e+01 1.418204183727842e+01 1.418601458554424e+01 + 1.418998734405145e+01 1.419396011279438e+01 1.419793289176719e+01 1.420190568096417e+01 1.420587848037956e+01 + 1.420985129000755e+01 1.421382410984246e+01 1.421779693987845e+01 1.422176978010981e+01 1.422574263053085e+01 + 1.422971549113586e+01 1.423368836191901e+01 1.423766124287453e+01 1.424163413399685e+01 1.424560703528024e+01 + 1.424957994671881e+01 1.425355286830697e+01 1.425752580003913e+01 1.426149874190941e+01 1.426547169391214e+01 + 1.426944465604161e+01 1.427341762829223e+01 1.427739061065832e+01 1.428136360313411e+01 1.428533660571391e+01 + 1.428930961839209e+01 1.429328264116310e+01 1.429725567402110e+01 1.430122871696047e+01 1.430520176997562e+01 + 1.430917483306079e+01 1.431314790621050e+01 1.431712098941895e+01 1.432109408268057e+01 1.432506718598978e+01 + 1.432904029934084e+01 1.433301342272814e+01 1.433698655614610e+01 1.434095969958915e+01 1.434493285305156e+01 + 1.434890601652782e+01 1.435287919001235e+01 1.435685237349938e+01 1.436082556698351e+01 1.436479877045898e+01 + 1.436877198392034e+01 1.437274520736195e+01 1.437671844077818e+01 1.438069168416357e+01 1.438466493751245e+01 + 1.438863820081922e+01 1.439261147407844e+01 1.439658475728449e+01 1.440055805043181e+01 1.440453135351491e+01 + 1.440850466652812e+01 1.441247798946601e+01 1.441645132232298e+01 1.442042466509354e+01 1.442439801777214e+01 + 1.442837138035315e+01 1.443234475283122e+01 1.443631813520080e+01 1.444029152745628e+01 1.444426492959222e+01 + 1.444823834160315e+01 1.445221176348348e+01 1.445618519522775e+01 1.446015863683042e+01 1.446413208828608e+01 + 1.446810554958926e+01 1.447207902073439e+01 1.447605250171598e+01 1.448002599252864e+01 1.448399949316699e+01 + 1.448797300362533e+01 1.449194652389829e+01 1.449592005398051e+01 1.449989359386644e+01 1.450386714355070e+01 + 1.450784070302780e+01 1.451181427229228e+01 1.451578785133869e+01 1.451976144016165e+01 1.452373503875573e+01 + 1.452770864711544e+01 1.453168226523547e+01 1.453565589311034e+01 1.453962953073462e+01 1.454360317810289e+01 + 1.029818381729593e+00 1.028950884496729e+00 1.028083684143606e+00 1.027216781151606e+00 1.026350176001324e+00 + 1.025483869172581e+00 1.024617861144403e+00 1.023752152395052e+00 1.022886743401999e+00 1.022021634641924e+00 + 1.021156826590733e+00 1.020292319723555e+00 1.019428114514717e+00 1.018564211437776e+00 1.017700610965502e+00 + 1.016837313569891e+00 1.015974319722141e+00 1.015111629892667e+00 1.014249244551109e+00 1.013387164166326e+00 + 1.012525389206371e+00 1.011663920138531e+00 1.010802757429314e+00 1.009941901544421e+00 1.009081352948791e+00 + 1.008221112106560e+00 1.007361179481090e+00 1.006501555534955e+00 1.005642240729950e+00 1.004783235527070e+00 + 1.003924540386534e+00 1.003066155767777e+00 1.002208082129445e+00 1.001350319929398e+00 1.000492869624714e+00 + 9.996357316716880e-01 9.987789065258112e-01 9.979223946418012e-01 9.970661964736000e-01 9.962103124743420e-01 + 9.953547430963930e-01 9.944994887913201e-01 9.936445500099114e-01 9.927899272021641e-01 9.919356208172856e-01 + 9.910816313037093e-01 9.902279591090667e-01 9.893746046802088e-01 9.885215684632106e-01 9.876688509033346e-01 + 9.868164524450742e-01 9.859643735321345e-01 9.851126146074320e-01 9.842611761130974e-01 9.834100584904591e-01 + 9.825592621800773e-01 9.817087876217170e-01 9.808586352543572e-01 9.800088055161804e-01 9.791592988445962e-01 + 9.783101156762170e-01 9.774612564468647e-01 9.766127215915824e-01 9.757645115446213e-01 9.749166267394365e-01 + 9.740690676087043e-01 9.732218345843163e-01 9.723749280973597e-01 9.715283485781565e-01 9.706820964562251e-01 + 9.698361721602867e-01 9.689905761183024e-01 9.681453087574169e-01 9.673003705039974e-01 9.664557617836383e-01 + 9.656114830211113e-01 9.647675346404295e-01 9.639239170648062e-01 9.630806307166673e-01 9.622376760176445e-01 + 9.613950533885930e-01 9.605527632495635e-01 9.597108060198339e-01 9.588691821178861e-01 9.580278919614106e-01 + 9.571869359673182e-01 9.563463145517181e-01 9.555060281299464e-01 9.546660771165288e-01 9.538264619252308e-01 + 9.529871829690043e-01 9.521482406600201e-01 9.513096354096716e-01 9.504713676285490e-01 9.496334377264566e-01 + 9.487958461124151e-01 9.479585931946528e-01 9.471216793806151e-01 9.462851050769484e-01 9.454488706895151e-01 + 9.446129766233924e-01 9.437774232828615e-01 9.429422110714295e-01 9.421073403917942e-01 9.412728116458823e-01 + 9.404386252348220e-01 9.396047815589634e-01 9.387712810178472e-01 9.379381240102465e-01 9.371053109341390e-01 + 9.362728421867169e-01 9.354407181643748e-01 9.346089392627226e-01 9.337775058765924e-01 9.329464184000119e-01 + 9.321156772262308e-01 9.312852827477137e-01 9.304552353561221e-01 9.296255354423377e-01 9.287961833964591e-01 + 9.279671796077937e-01 9.271385244648559e-01 9.263102183553842e-01 9.254822616663051e-01 9.246546547837874e-01 + 9.238273980931880e-01 9.230004919790931e-01 9.221739368252849e-01 9.213477330147730e-01 9.205218809297767e-01 + 9.196963809517100e-01 9.188712334612238e-01 9.180464388381754e-01 9.172219974616195e-01 9.163979097098389e-01 + 9.155741759603314e-01 9.147507965897905e-01 9.139277719741313e-01 9.131051024884993e-01 9.122827885072258e-01 + 9.114608304038728e-01 9.106392285511987e-01 9.098179833212006e-01 9.089970950850672e-01 9.081765642132013e-01 + 9.073563910752415e-01 9.065365760400137e-01 9.057171194755685e-01 9.048980217491761e-01 9.040792832273093e-01 + 9.032609042756635e-01 9.024428852591421e-01 9.016252265418704e-01 9.008079284871761e-01 8.999909914576094e-01 + 8.991744158149402e-01 8.983582019201434e-01 8.975423501334069e-01 8.967268608141471e-01 8.959117343209785e-01 + 8.950969710117408e-01 8.942825712434899e-01 8.934685353724918e-01 8.926548637542326e-01 8.918415567434075e-01 + 8.910286146939277e-01 8.902160379589314e-01 8.894038268907535e-01 8.885919818409634e-01 8.877805031603390e-01 + 8.869693911988736e-01 8.861586463057748e-01 8.853482688294735e-01 8.845382591176074e-01 8.837286175170382e-01 + 8.829193443738415e-01 8.821104400333194e-01 8.813019048399672e-01 8.804937391375302e-01 8.796859432689383e-01 + 8.788785175763698e-01 8.780714624011906e-01 8.772647780840088e-01 8.764584649646275e-01 8.756525233820975e-01 + 8.748469536746660e-01 8.740417561797943e-01 8.732369312341854e-01 8.724324791737378e-01 8.716284003335842e-01 + 8.708246950480666e-01 8.700213636507483e-01 8.692184064744144e-01 8.684158238510710e-01 8.676136161119459e-01 + 8.668117835874691e-01 8.660103266073188e-01 8.652092455003623e-01 8.644085405947126e-01 8.636082122176930e-01 + 8.628082606958477e-01 8.620086863549371e-01 8.612094895199540e-01 8.604106705150950e-01 8.596122296638031e-01 + 8.588141672887118e-01 8.580164837117062e-01 8.572191792538755e-01 8.564222542355302e-01 8.556257089762138e-01 + 8.548295437946868e-01 8.540337590089232e-01 8.532383549361378e-01 8.524433318927489e-01 8.516486901944214e-01 + 8.508544301560150e-01 8.500605520916377e-01 8.492670563146056e-01 8.484739431374629e-01 8.476812128719879e-01 + 8.468888658291742e-01 8.460969023192301e-01 8.453053226516050e-01 8.445141271349622e-01 8.437233160772019e-01 + 8.429328897854421e-01 8.421428485660195e-01 8.413531927245138e-01 8.405639225657113e-01 8.397750383936414e-01 + 8.389865405115459e-01 8.381984292218968e-01 8.374107048264100e-01 8.366233676260025e-01 8.358364179208301e-01 + 8.350498560102736e-01 8.342636821929516e-01 8.334778967667037e-01 8.326925000285881e-01 8.319074922749050e-01 + 8.311228738011748e-01 8.303386449021535e-01 8.295548058718220e-01 8.287713570033873e-01 8.279882985892980e-01 + 8.272056309212164e-01 8.264233542900459e-01 8.256414689859125e-01 8.248599752981799e-01 8.240788735154359e-01 + 8.232981639255081e-01 8.225178468154439e-01 8.217379224715397e-01 8.209583911792924e-01 8.201792532234660e-01 + 8.194005088880395e-01 8.186221584562126e-01 8.178442022104446e-01 8.170666404324106e-01 8.162894734030188e-01 + 8.155127014024118e-01 8.147363247099736e-01 8.139603436043195e-01 8.131847583632836e-01 8.124095692639565e-01 + 8.116347765826520e-01 8.108603805949233e-01 8.100863815755439e-01 8.093127797985503e-01 8.085395755371961e-01 + 8.077667690639661e-01 8.069943606506018e-01 8.062223505680559e-01 8.054507390865440e-01 8.046795264754931e-01 + 8.039087130035937e-01 8.031382989387471e-01 8.023682845481188e-01 8.015986700980898e-01 8.008294558543005e-01 + 8.000606420816119e-01 7.992922290441270e-01 7.985242170052068e-01 7.977566062274219e-01 7.969893969726131e-01 + 7.962225895018390e-01 7.954561840754025e-01 7.946901809528604e-01 7.939245803929975e-01 7.931593826538446e-01 + 7.923945879926741e-01 7.916301966660031e-01 7.908662089295843e-01 7.901026250384157e-01 7.893394452467377e-01 + 7.885766698080421e-01 7.878142989750540e-01 7.870523329997409e-01 7.862907721333283e-01 7.855296166262692e-01 + 7.847688667282761e-01 7.840085226882906e-01 7.832485847545170e-01 7.824890531743899e-01 7.817299281946019e-01 + 7.809712100610798e-01 7.802128990190107e-01 7.794549953128257e-01 7.786974991861861e-01 7.779404108820238e-01 + 7.771837306425062e-01 7.764274587090452e-01 7.756715953223189e-01 7.749161407222345e-01 7.741610951479628e-01 + 7.734064588379100e-01 7.726522320297414e-01 7.718984149603736e-01 7.711450078659716e-01 7.703920109819528e-01 + 7.696394245429754e-01 7.688872487829679e-01 7.681354839350873e-01 7.673841302317636e-01 7.666331879046780e-01 + 7.658826571847401e-01 7.651325383021447e-01 7.643828314863181e-01 7.636335369659546e-01 7.628846549689886e-01 + 7.621361857226245e-01 7.613881294533094e-01 7.606404863867471e-01 7.598932567479024e-01 7.591464407609992e-01 + 7.584000386495007e-01 7.576540506361484e-01 7.569084769429252e-01 7.561633177910779e-01 7.554185734011138e-01 + 7.546742439927862e-01 7.539303297851194e-01 7.531868309963931e-01 7.524437478441433e-01 7.517010805451729e-01 + 7.509588293155244e-01 7.502169943705327e-01 7.494755759247704e-01 7.487345741920710e-01 7.479939893855403e-01 + 7.472538217175346e-01 7.465140713996899e-01 7.457747386428837e-01 7.450358236572685e-01 7.442973266522522e-01 + 7.435592478365257e-01 7.428215874180144e-01 7.420843456039282e-01 7.413475226007359e-01 7.406111186141786e-01 + 7.398751338492491e-01 7.391395685102188e-01 7.384044228006188e-01 7.376696969232452e-01 7.369353910801724e-01 + 7.362015054727200e-01 7.354680403015011e-01 7.347349957663855e-01 7.340023720665088e-01 7.332701694002729e-01 + 7.325383879653635e-01 7.318070279587258e-01 7.310760895765697e-01 7.303455730143900e-01 7.296154784669409e-01 + 7.288858061282534e-01 7.281565561916257e-01 7.274277288496396e-01 7.266993242941352e-01 7.259713427162320e-01 + 7.252437843063264e-01 7.245166492540811e-01 7.237899377484421e-01 7.230636499776156e-01 7.223377861291044e-01 + 7.216123463896634e-01 7.208873309453390e-01 7.201627399814490e-01 7.194385736825899e-01 7.187148322326289e-01 + 7.179915158147232e-01 7.172686246112918e-01 7.165461588040415e-01 7.158241185739584e-01 7.151025041013133e-01 + 7.143813155656346e-01 7.136605531457616e-01 7.129402170197867e-01 7.122203073650976e-01 7.115008243583609e-01 + 7.107817681755283e-01 7.100631389918213e-01 7.093449369817535e-01 7.086271623191288e-01 7.079098151770227e-01 + 7.071928957277950e-01 7.064764041430962e-01 7.057603405938540e-01 7.050447052502943e-01 7.043294982819069e-01 + 7.036147198574930e-01 7.029003701451239e-01 7.021864493121559e-01 7.014729575252477e-01 7.007598949503372e-01 + 7.000472617526459e-01 6.993350580966848e-01 6.986232841462711e-01 6.979119400644835e-01 6.972010260137138e-01 + 6.964905421556352e-01 6.957804886512132e-01 6.950708656607031e-01 6.943616733436515e-01 6.936529118589069e-01 + 6.929445813645911e-01 6.922366820181409e-01 6.915292139762761e-01 6.908221773950025e-01 6.901155724296415e-01 + 6.894093992347849e-01 6.887036579643414e-01 6.879983487715106e-01 6.872934718087691e-01 6.865890272279214e-01 + 6.858850151800516e-01 6.851814358155334e-01 6.844782892840615e-01 6.837755757346169e-01 6.830732953154698e-01 + 6.823714481742131e-01 6.816700344577232e-01 6.809690543121741e-01 6.802685078830616e-01 6.795683953151590e-01 + 6.788687167525560e-01 6.781694723386447e-01 6.774706622161151e-01 6.767722865269591e-01 6.760743454124786e-01 + 6.753768390132785e-01 6.746797674692673e-01 6.739831309196559e-01 6.732869295029654e-01 6.725911633570258e-01 + 6.718958326189636e-01 6.712009374252277e-01 6.705064779115578e-01 6.698124542130220e-01 6.691188664639710e-01 + 6.684257147980994e-01 6.677329993483697e-01 6.670407202470956e-01 6.663488776258716e-01 6.656574716156213e-01 + 6.649665023465672e-01 6.642759699482516e-01 6.635858745495389e-01 6.628962162785792e-01 6.622069952628680e-01 + 6.615182116291918e-01 6.608298655036673e-01 6.601419570117113e-01 6.594544862780705e-01 6.587674534268005e-01 + 6.580808585812741e-01 6.573947018641830e-01 6.567089833975377e-01 6.560237033026629e-01 6.553388617002051e-01 + 6.546544587101327e-01 6.539704944517252e-01 6.532869690435937e-01 6.526038826036548e-01 6.519212352491717e-01 + 6.512390270966975e-01 6.505572582621333e-01 6.498759288606880e-01 6.491950390069006e-01 6.485145888146371e-01 + 6.478345783970798e-01 6.471550078667395e-01 6.464758773354548e-01 6.457971869143856e-01 6.451189367140270e-01 + 6.444411268441842e-01 6.437637574140082e-01 6.430868285319666e-01 6.424103403058604e-01 6.417342928428207e-01 + 6.410586862493056e-01 6.403835206311005e-01 6.397087960933276e-01 6.390345127404358e-01 6.383606706762150e-01 + 6.376872700037648e-01 6.370143108255504e-01 6.363417932433403e-01 6.356697173582497e-01 6.349980832707296e-01 + 6.343268910805641e-01 6.336561408868723e-01 6.329858327881138e-01 6.323159668820773e-01 6.316465432658849e-01 + 6.309775620360070e-01 6.303090232882540e-01 6.296409271177641e-01 6.289732736190176e-01 6.283060628858407e-01 + 6.276392950113973e-01 6.269729700881854e-01 6.263070882080511e-01 6.256416494621824e-01 6.249766539411071e-01 + 6.243121017346971e-01 6.236479929321692e-01 6.229843276220822e-01 6.223211058923402e-01 6.216583278301934e-01 + 6.209959935222358e-01 6.203341030544107e-01 6.196726565120050e-01 6.190116539796550e-01 6.183510955413452e-01 + 6.176909812804066e-01 6.170313112795207e-01 6.163720856207198e-01 6.157133043853837e-01 6.150549676542453e-01 + 6.143970755073860e-01 6.137396280242426e-01 6.130826252836019e-01 6.124260673636039e-01 6.117699543417435e-01 + 6.111142862948674e-01 6.104590632991790e-01 6.098042854302367e-01 6.091499527629531e-01 6.084960653715985e-01 + 6.078426233298003e-01 6.071896267105423e-01 6.065370755861670e-01 6.058849700283762e-01 6.052333101082292e-01 + 6.045820958961469e-01 6.039313274619081e-01 6.032810048746553e-01 6.026311282028907e-01 6.019816975144792e-01 + 6.013327128766476e-01 6.006841743559861e-01 6.000360820184497e-01 5.993884359293573e-01 5.987412361533913e-01 + 5.980944827546003e-01 5.974481757964005e-01 5.968023153415725e-01 5.961569014522661e-01 5.955119341899963e-01 + 5.948674136156495e-01 5.942233397894796e-01 5.935797127711093e-01 5.929365326195324e-01 5.922937993931128e-01 + 5.916515131495866e-01 5.910096739460612e-01 5.903682818390164e-01 5.897273368843048e-01 5.890868391371534e-01 + 5.884467886521625e-01 5.878071854833076e-01 5.871680296839397e-01 5.865293213067856e-01 5.858910604039487e-01 + 5.852532470269098e-01 5.846158812265267e-01 5.839789630530365e-01 5.833424925560552e-01 5.827064697845771e-01 + 5.820708947869774e-01 5.814357676110123e-01 5.808010883038195e-01 5.801668569119174e-01 5.795330734812076e-01 + 5.788997380569754e-01 5.782668506838887e-01 5.776344114059998e-01 5.770024202667475e-01 5.763708773089532e-01 + 5.757397825748277e-01 5.751091361059651e-01 5.744789379433500e-01 5.738491881273532e-01 5.732198866977327e-01 + 5.725910336936391e-01 5.719626291536092e-01 5.713346731155720e-01 5.707071656168469e-01 5.700801066941448e-01 + 5.694534963835695e-01 5.688273347206153e-01 5.682016217401733e-01 5.675763574765249e-01 5.669515419633487e-01 + 5.663271752337172e-01 5.657032573200997e-01 5.650797882543601e-01 5.644567680677605e-01 5.638341967909611e-01 + 5.632120744540188e-01 5.625904010863910e-01 5.619691767169334e-01 5.613484013739017e-01 5.607280750849534e-01 + 5.601081978771462e-01 5.594887697769401e-01 5.588697908101971e-01 5.582512610021830e-01 5.576331803775684e-01 + 5.570155489604254e-01 5.563983667742330e-01 5.557816338418764e-01 5.551653501856452e-01 5.545495158272374e-01 + 5.539341307877576e-01 5.533191950877188e-01 5.527047087470435e-01 5.520906717850608e-01 5.514770842205133e-01 + 5.508639460715520e-01 5.502512573557398e-01 5.496390180900520e-01 5.490272282908741e-01 5.484158879740074e-01 + 5.478049971546652e-01 5.471945558474766e-01 5.465845640664834e-01 5.459750218251452e-01 5.453659291363367e-01 + 5.447572860123511e-01 5.441490924648956e-01 5.435413485050985e-01 5.429340541435068e-01 5.423272093900847e-01 + 5.417208142542186e-01 5.411148687447143e-01 5.405093728697989e-01 5.399043266371233e-01 5.392997300537579e-01 + 5.386955831261986e-01 5.380918858603644e-01 5.374886382615973e-01 5.368858403346670e-01 5.362834920837678e-01 + 5.356815935125191e-01 5.350801446239694e-01 5.344791454205930e-01 5.338785959042937e-01 5.332784960764038e-01 + 5.326788459376851e-01 5.320796454883300e-01 5.314808947279601e-01 5.308825936556308e-01 5.302847422698291e-01 + 5.296873405684723e-01 5.290903885489139e-01 5.284938862079409e-01 5.278978335417738e-01 5.273022305460695e-01 + 5.267070772159208e-01 5.261123735458566e-01 5.255181195298438e-01 5.249243151612855e-01 5.243309604330255e-01 + 5.237380553373464e-01 5.231455998659684e-01 5.225535940100552e-01 5.219620377602096e-01 5.213709311064777e-01 + 5.207802740383466e-01 5.201900665447470e-01 5.196003086140540e-01 5.190110002340856e-01 5.184221413921068e-01 + 5.178337320748273e-01 5.172457722684018e-01 5.166582619584337e-01 5.160712011299742e-01 5.154845897675218e-01 + 5.148984278550243e-01 5.143127153758787e-01 5.137274523129332e-01 5.131426386484871e-01 5.125582743642881e-01 + 5.119743594415413e-01 5.113908938608994e-01 5.108078776024734e-01 5.102253106458245e-01 5.096431929699716e-01 + 5.090615245533867e-01 5.084803053740006e-01 5.078995354091985e-01 5.073192146358236e-01 5.067393430301793e-01 + 5.061599205680244e-01 5.055809472245809e-01 5.050024229745267e-01 5.044243477920045e-01 5.038467216506157e-01 + 5.032695445234244e-01 5.026928163829588e-01 5.021165372012084e-01 5.015407069496285e-01 5.009653255991380e-01 + 5.003903931201225e-01 4.998159094824317e-01 4.992418746553835e-01 4.986682886077632e-01 4.980951513078233e-01 + 4.975224627232859e-01 4.969502228213414e-01 4.963784315686525e-01 4.958070889313492e-01 4.952361948750348e-01 + 4.946657493647862e-01 4.940957523651500e-01 4.935262038401480e-01 4.929571037532756e-01 4.923884520675025e-01 + 4.918202487452752e-01 4.912524937485135e-01 4.906851870386177e-01 4.901183285764616e-01 4.895519183224000e-01 + 4.889859562362653e-01 4.884204422773690e-01 4.878553764045027e-01 4.872907585759400e-01 4.867265887494344e-01 + 4.861628668822214e-01 4.855995929310211e-01 4.850367668520347e-01 4.844743886009498e-01 4.839124581329363e-01 + 4.833509754026514e-01 4.827899403642382e-01 4.822293529713254e-01 4.816692131770306e-01 4.811095209339583e-01 + 4.805502761942031e-01 4.799914789093490e-01 4.794331290304684e-01 4.788752265081255e-01 4.783177712923771e-01 + 4.777607633327716e-01 4.772042025783493e-01 4.766480889776447e-01 4.760924224786861e-01 4.755372030289992e-01 + 4.749824305756006e-01 4.744281050650074e-01 4.738742264432317e-01 4.733207946557833e-01 4.727678096476701e-01 + 4.722152713634001e-01 4.716631797469799e-01 4.711115347419170e-01 4.705603362912189e-01 4.700095843373959e-01 + 4.694592788224603e-01 4.689094196879268e-01 4.683600068748161e-01 4.678110403236498e-01 4.672625199744569e-01 + 4.667144457667719e-01 4.661668176396354e-01 4.656196355315954e-01 4.650728993807072e-01 4.645266091245350e-01 + 4.639807647001523e-01 4.634353660441420e-01 4.628904130925983e-01 4.623459057811258e-01 4.618018440448413e-01 + 4.612582278183737e-01 4.607150570358662e-01 4.601723316309757e-01 4.596300515368735e-01 4.590882166862456e-01 + 4.585468270112950e-01 4.580058824437407e-01 4.574653829148196e-01 4.569253283552872e-01 4.563857186954153e-01 + 4.558465538649983e-01 4.553078337933492e-01 4.547695584093006e-01 4.542317276412095e-01 4.536943414169521e-01 + 4.531573996639294e-01 4.526209023090658e-01 4.520848492788089e-01 4.515492404991315e-01 4.510140758955333e-01 + 4.504793553930383e-01 4.499450789161996e-01 4.494112463890965e-01 4.488778577353366e-01 4.483449128780581e-01 + 4.478124117399270e-01 4.472803542431403e-01 4.467487403094279e-01 4.462175698600489e-01 4.456868428157965e-01 + 4.451565590969962e-01 4.446267186235084e-01 4.440973213147268e-01 4.435683670895819e-01 4.430398558665385e-01 + 4.425117875635997e-01 4.419841620983043e-01 4.414569793877306e-01 4.409302393484938e-01 4.404039418967508e-01 + 4.398780869481968e-01 4.393526744180685e-01 4.388277042211444e-01 4.383031762717433e-01 4.377790904837298e-01 + 4.372554467705097e-01 4.367322450450342e-01 4.362094852197994e-01 4.356871672068460e-01 4.351652909177619e-01 + 4.346438562636824e-01 4.341228631552893e-01 4.336023115028136e-01 4.330822012160359e-01 4.325625322042850e-01 + 4.320433043764413e-01 4.315245176409366e-01 4.310061719057540e-01 4.304882670784293e-01 4.299708030660506e-01 + 4.294537797752620e-01 4.289371971122609e-01 4.284210549827991e-01 4.279053532921870e-01 4.273900919452894e-01 + 4.268752708465294e-01 4.263608898998885e-01 4.258469490089066e-01 4.253334480766831e-01 4.248203870058775e-01 + 4.243077656987099e-01 4.237955840569633e-01 4.232838419819813e-01 4.227725393746716e-01 4.222616761355047e-01 + 4.217512521645165e-01 4.212412673613070e-01 4.207317216250425e-01 4.202226148544557e-01 4.197139469478456e-01 + 4.192057178030805e-01 4.186979273175958e-01 4.181905753883974e-01 4.176836619120601e-01 4.171771867847298e-01 + 4.166711499021237e-01 4.161655511595305e-01 4.156603904518119e-01 4.151556676734036e-01 4.146513827183149e-01 + 4.141475354801297e-01 4.136441258520069e-01 4.131411537266833e-01 4.126386189964708e-01 4.121365215532592e-01 + 4.116348612885181e-01 4.111336380932936e-01 4.106328518582143e-01 4.101325024734859e-01 4.096325898288974e-01 + 4.091331138138199e-01 4.086340743172054e-01 4.081354712275890e-01 4.076373044330911e-01 4.071395738214157e-01 + 4.066422792798521e-01 4.061454206952758e-01 4.056489979541481e-01 4.051530109425192e-01 4.046574595460252e-01 + 4.041623436498933e-01 4.036676631389379e-01 4.031734178975648e-01 4.026796078097706e-01 4.021862327591431e-01 + 4.016932926288611e-01 4.012007873016990e-01 4.007087166600222e-01 4.002170805857917e-01 3.997258789605636e-01 + 3.992351116654888e-01 3.987447785813157e-01 3.982548795883886e-01 3.977654145666499e-01 3.972763833956406e-01 + 3.967877859545022e-01 3.962996221219734e-01 3.958118917763958e-01 3.953245947957101e-01 3.948377310574614e-01 + 3.943513004387955e-01 3.938653028164619e-01 3.933797380668155e-01 3.928946060658141e-01 3.924099066890221e-01 + 3.919256398116097e-01 3.914418053083537e-01 3.909584030536383e-01 3.904754329214563e-01 3.899928947854096e-01 + 3.895107885187095e-01 3.890291139941772e-01 3.885478710842450e-01 3.880670596609584e-01 3.875866795959723e-01 + 3.871067307605578e-01 3.866272130255981e-01 3.861481262615901e-01 3.856694703386480e-01 3.851912451265009e-01 + 3.847134504944937e-01 3.842360863115903e-01 3.837591524463702e-01 3.832826487670337e-01 3.828065751413997e-01 + 3.823309314369062e-01 3.818557175206143e-01 3.813809332592036e-01 3.809065785189776e-01 3.804326531658637e-01 + 3.799591570654093e-01 3.794860900827899e-01 3.790134520828026e-01 3.785412429298733e-01 3.780694624880520e-01 + 3.775981106210156e-01 3.771271871920696e-01 3.766566920641487e-01 3.761866250998138e-01 3.757169861612596e-01 + 3.752477751103074e-01 3.747789918084121e-01 3.743106361166593e-01 3.738427078957682e-01 3.733752070060899e-01 + 3.729081333076116e-01 3.724414866599509e-01 3.719752669223666e-01 3.715094739537484e-01 3.710441076126257e-01 + 3.705791677571640e-01 3.701146542451682e-01 3.696505669340793e-01 3.691869056809810e-01 3.687236703425956e-01 + 3.682608607752857e-01 3.677984768350568e-01 3.673365183775564e-01 3.668749852580737e-01 3.664138773315431e-01 + 3.659531944525422e-01 3.654929364752956e-01 3.650331032536696e-01 3.645736946411818e-01 3.641147104909934e-01 + 3.636561506559150e-01 3.631980149884056e-01 3.627403033405718e-01 3.622830155641726e-01 3.618261515106154e-01 + 3.613697110309607e-01 3.609136939759199e-01 3.604581001958562e-01 3.600029295407875e-01 3.595481818603860e-01 + 3.590938570039763e-01 3.586399548205421e-01 3.581864751587193e-01 3.577334178668033e-01 3.572807827927460e-01 + 3.568285697841575e-01 3.563767786883063e-01 3.559254093521206e-01 3.554744616221902e-01 3.550239353447640e-01 + 3.545738303657537e-01 3.541241465307322e-01 3.536748836849369e-01 3.532260416732670e-01 3.527776203402874e-01 + 3.523296195302283e-01 3.518820390869841e-01 3.514348788541167e-01 3.509881386748559e-01 3.505418183920974e-01 + 3.500959178484067e-01 3.496504368860180e-01 3.492053753468356e-01 3.487607330724338e-01 3.483165099040590e-01 + 3.478727056826295e-01 3.474293202487349e-01 3.469863534426395e-01 3.465438051042803e-01 3.461016750732708e-01 + 3.456599631888982e-01 3.452186692901267e-01 3.447777932155964e-01 3.443373348036247e-01 3.438972938922089e-01 + 3.434576703190229e-01 3.430184639214210e-01 3.425796745364376e-01 3.421413020007878e-01 3.417033461508684e-01 + 3.412658068227591e-01 3.408286838522205e-01 3.403919770746985e-01 3.399556863253226e-01 3.395198114389070e-01 + 3.390843522499521e-01 3.386493085926442e-01 3.382146803008571e-01 3.377804672081506e-01 3.373466691477754e-01 + 3.369132859526693e-01 3.364803174554597e-01 3.360477634884669e-01 3.356156238836976e-01 3.351838984728560e-01 + 3.347525870873335e-01 3.343216895582179e-01 3.338912057162902e-01 3.334611353920236e-01 3.330314784155899e-01 + 3.326022346168536e-01 3.321734038253784e-01 3.317449858704238e-01 3.313169805809465e-01 3.308893877856031e-01 + 3.304622073127483e-01 3.300354389904374e-01 3.296090826464260e-01 3.291831381081711e-01 3.287576052028312e-01 + 3.283324837572684e-01 3.279077735980464e-01 3.274834745514347e-01 3.270595864434056e-01 3.266361090996378e-01 + 3.262130423455162e-01 3.257903860061323e-01 3.253681399062839e-01 3.249463038704773e-01 3.245248777229282e-01 + 3.241038612875606e-01 3.236832543880099e-01 3.232630568476204e-01 3.228432684894483e-01 3.224238891362634e-01 + 3.220049186105466e-01 3.215863567344919e-01 3.211682033300088e-01 3.207504582187211e-01 3.203331212219665e-01 + 3.199161921608014e-01 3.194996708559962e-01 3.190835571280407e-01 3.186678507971421e-01 3.182525516832264e-01 + 3.178376596059389e-01 3.174231743846448e-01 3.170090958384311e-01 3.165954237861044e-01 3.161821580461963e-01 + 3.157692984369572e-01 3.153568447763648e-01 3.149447968821185e-01 3.145331545716427e-01 3.141219176620886e-01 + 3.137110859703329e-01 3.133006593129781e-01 3.128906375063549e-01 3.124810203665224e-01 3.120718077092681e-01 + 3.116629993501095e-01 3.112545951042929e-01 3.108465947867962e-01 3.104389982123292e-01 3.100318051953336e-01 + 3.096250155499837e-01 3.092186290901864e-01 3.088126456295833e-01 3.084070649815516e-01 3.080018869592031e-01 + 3.075971113753857e-01 3.071927380426839e-01 3.067887667734205e-01 3.063851973796554e-01 3.059820296731870e-01 + 3.055792634655543e-01 3.051768985680359e-01 3.047749347916501e-01 3.043733719471583e-01 3.039722098450628e-01 + 3.035714482956082e-01 3.031710871087840e-01 3.027711260943218e-01 3.023715650617000e-01 3.019724038201406e-01 + 3.015736421786119e-01 3.011752799458296e-01 3.007773169302559e-01 3.003797529401016e-01 2.999825877833255e-01 + 2.995858212676354e-01 2.991894532004912e-01 2.987934833891002e-01 2.983979116404238e-01 2.980027377611728e-01 + 2.976079615578124e-01 2.972135828365602e-01 2.968196014033879e-01 2.964260170640212e-01 2.960328296239420e-01 + 2.956400388883867e-01 2.952476446623498e-01 2.948556467505808e-01 2.944640449575888e-01 2.940728390876413e-01 + 2.936820289447630e-01 2.932916143327394e-01 2.929015950551182e-01 2.925119709152045e-01 2.921227417160683e-01 + 2.917339072605400e-01 2.913454673512138e-01 2.909574217904474e-01 2.905697703803620e-01 2.901825129228457e-01 + 2.897956492195500e-01 2.894091790718942e-01 2.890231022810620e-01 2.886374186480083e-01 2.882521279734530e-01 + 2.878672300578861e-01 2.874827247015674e-01 2.870986117045257e-01 2.867148908665615e-01 2.863315619872462e-01 + 2.859486248659225e-01 2.855660793017081e-01 2.851839250934908e-01 2.848021620399357e-01 2.844207899394790e-01 + 2.840398085903352e-01 2.836592177904930e-01 2.832790173377175e-01 2.828992070295517e-01 2.825197866633166e-01 + 2.821407560361101e-01 2.817621149448114e-01 2.813838631860774e-01 2.810060005563464e-01 2.806285268518375e-01 + 2.802514418685511e-01 2.798747454022703e-01 2.794984372485610e-01 2.791225172027725e-01 2.787469850600381e-01 + 2.783718406152765e-01 2.779970836631914e-01 2.776227139982728e-01 2.772487314147963e-01 2.768751357068266e-01 + 2.765019266682160e-01 2.761291040926038e-01 2.757566677734204e-01 2.753846175038854e-01 2.750129530770083e-01 + 2.746416742855919e-01 2.742707809222268e-01 2.739002727793011e-01 2.735301496489910e-01 2.731604113232701e-01 + 2.727910575939039e-01 2.724220882524545e-01 2.720535030902779e-01 2.716853018985279e-01 2.713174844681541e-01 + 2.709500505899038e-01 2.705830000543224e-01 2.702163326517540e-01 2.698500481723419e-01 2.694841464060294e-01 + 2.691186271425597e-01 2.687534901714791e-01 2.683887352821340e-01 2.680243622636735e-01 2.676603709050501e-01 + 2.672967609950193e-01 2.669335323221427e-01 2.665706846747851e-01 2.662082178411169e-01 2.658461316091154e-01 + 2.654844257665647e-01 2.651231001010558e-01 2.647621543999885e-01 2.644015884505699e-01 2.640414020398177e-01 + 2.636815949545587e-01 2.633221669814316e-01 2.629631179068836e-01 2.626044475171763e-01 2.622461555983829e-01 + 2.618882419363880e-01 2.615307063168919e-01 2.611735485254081e-01 2.608167683472651e-01 2.604603655676072e-01 + 2.601043399713934e-01 2.597486913434020e-01 2.593934194682263e-01 2.590385241302776e-01 2.586840051137867e-01 + 2.583298622028034e-01 2.579760951811965e-01 2.576227038326562e-01 2.572696879406927e-01 2.569170472886380e-01 + 2.565647816596475e-01 2.562128908366965e-01 2.558613746025872e-01 2.555102327399431e-01 2.551594650312133e-01 + 2.548090712586735e-01 2.544590512044224e-01 2.541094046503871e-01 2.537601313783218e-01 2.534112311698070e-01 + 2.530627038062528e-01 2.527145490688978e-01 2.523667667388090e-01 2.520193565968856e-01 2.516723184238555e-01 + 2.513256520002791e-01 2.509793571065478e-01 2.506334335228853e-01 2.502878810293500e-01 2.499426994058326e-01 + 2.495978884320579e-01 2.492534478875870e-01 2.489093775518145e-01 2.485656772039739e-01 2.482223466231313e-01 + 2.478793855881943e-01 2.475367938779053e-01 2.471945712708471e-01 2.468527175454402e-01 2.465112324799459e-01 + 2.461701158524651e-01 2.458293674409401e-01 2.454889870231530e-01 2.451489743767304e-01 2.448093292791402e-01 + 2.444700515076929e-01 2.441311408395442e-01 2.437925970516937e-01 2.434544199209853e-01 2.431166092241098e-01 + 2.427791647376033e-01 2.424420862378482e-01 2.421053735010758e-01 2.417690263033645e-01 2.414330444206402e-01 + 2.410974276286805e-01 2.407621757031096e-01 2.404272884194057e-01 2.400927655528937e-01 2.397586068787531e-01 + 2.394248121720148e-01 2.390913812075613e-01 2.387583137601297e-01 2.384256096043098e-01 2.380932685145460e-01 + 2.377612902651390e-01 2.374296746302436e-01 2.370984213838712e-01 2.367675302998897e-01 2.364370011520252e-01 + 2.361068337138607e-01 2.357770277588382e-01 2.354475830602578e-01 2.351184993912816e-01 2.347897765249294e-01 + 2.344614142340833e-01 2.341334122914859e-01 2.338057704697415e-01 2.334784885413185e-01 2.331515662785476e-01 + 2.328250034536224e-01 2.324987998386010e-01 2.321729552054077e-01 2.318474693258313e-01 2.315223419715254e-01 + 2.311975729140113e-01 2.308731619246784e-01 2.305491087747826e-01 2.302254132354468e-01 2.299020750776660e-01 + 2.295790940723019e-01 2.292564699900866e-01 2.289342026016244e-01 2.286122916773879e-01 2.282907369877251e-01 + 2.279695383028519e-01 2.276486953928603e-01 2.273282080277150e-01 2.270080759772542e-01 2.266882990111898e-01 + 2.263688768991105e-01 2.260498094104794e-01 2.257310963146369e-01 2.254127373807992e-01 2.250947323780591e-01 + 2.247770810753903e-01 2.244597832416420e-01 2.241428386455430e-01 2.238262470557034e-01 2.235100082406102e-01 + 2.231941219686351e-01 2.228785880080282e-01 2.225634061269221e-01 2.222485760933322e-01 2.219340976751560e-01 + 2.216199706401764e-01 2.213061947560577e-01 2.209927697903505e-01 2.206796955104900e-01 2.203669716837984e-01 + 2.200545980774815e-01 2.197425744586344e-01 2.194309005942384e-01 2.191195762511639e-01 2.188086011961671e-01 + 2.184979751958968e-01 2.181876980168889e-01 2.178777694255699e-01 2.175681891882572e-01 2.172589570711599e-01 + 2.169500728403784e-01 2.166415362619054e-01 2.163333471016268e-01 2.160255051253206e-01 2.157180100986615e-01 + 2.154108617872163e-01 2.151040599564475e-01 2.147976043717136e-01 2.144914947982684e-01 2.141857310012641e-01 + 2.138803127457486e-01 2.135752397966674e-01 2.132705119188662e-01 2.129661288770873e-01 2.126620904359741e-01 + 2.123583963600691e-01 2.120550464138151e-01 2.117520403615575e-01 2.114493779675405e-01 2.111470589959129e-01 + 2.108450832107256e-01 2.105434503759312e-01 2.102421602553884e-01 2.099412126128580e-01 2.096406072120067e-01 + 2.093403438164065e-01 2.090404221895345e-01 2.087408420947760e-01 2.084416032954211e-01 2.081427055546675e-01 + 2.078441486356233e-01 2.075459323013027e-01 2.072480563146299e-01 2.069505204384377e-01 2.066533244354705e-01 + 2.063564680683833e-01 2.060599510997398e-01 2.057637732920188e-01 2.054679344076092e-01 2.051724342088134e-01 + 2.048772724578466e-01 2.045824489168381e-01 2.042879633478316e-01 2.039938155127856e-01 2.037000051735744e-01 + 2.034065320919868e-01 2.031133960297296e-01 2.028205967484258e-01 2.025281340096159e-01 2.022360075747585e-01 + 2.019442172052307e-01 2.016527626623291e-01 2.013616437072689e-01 2.010708601011855e-01 2.007804116051363e-01 + 2.004902979800972e-01 2.002005189869689e-01 1.999110743865720e-01 1.996219639396496e-01 1.993331874068694e-01 + 1.990447445488224e-01 1.987566351260229e-01 1.984688588989109e-01 1.981814156278513e-01 1.978943050731339e-01 + 1.976075269949766e-01 1.973210811535225e-01 1.970349673088424e-01 1.967491852209351e-01 1.964637346497272e-01 + 1.961786153550753e-01 1.958938270967636e-01 1.956093696345075e-01 1.953252427279517e-01 1.950414461366723e-01 + 1.947579796201767e-01 1.944748429379045e-01 1.941920358492269e-01 1.939095581134485e-01 1.936274094898069e-01 + 1.933455897374736e-01 1.930640986155543e-01 1.927829358830904e-01 1.925021012990585e-01 1.922215946223688e-01 + 1.919414156118721e-01 1.916615640263520e-01 1.913820396245310e-01 1.911028421650712e-01 1.908239714065701e-01 + 1.905454271075658e-01 1.902672090265351e-01 1.899893169218953e-01 1.897117505520038e-01 1.894345096751582e-01 + 1.891575940495977e-01 1.888810034335047e-01 1.886047375850014e-01 1.883287962621552e-01 1.880531792229748e-01 + 1.877778862254139e-01 1.875029170273709e-01 1.872282713866882e-01 1.869539490611531e-01 1.866799498084994e-01 + 1.864062733864064e-01 1.861329195525012e-01 1.858598880643570e-01 1.855871786794955e-01 1.853147911553862e-01 + 1.850427252494477e-01 1.847709807190468e-01 1.844995573215010e-01 1.842284548140771e-01 1.839576729539936e-01 + 1.836872114984187e-01 1.834170702044722e-01 1.831472488292281e-01 1.828777471297103e-01 1.826085648628968e-01 + 1.823397017857204e-01 1.820711576550648e-01 1.818029322277711e-01 1.815350252606335e-01 1.812674365104026e-01 + 1.810001657337839e-01 1.807332126874409e-01 1.804665771279919e-01 1.802002588120142e-01 1.799342574960414e-01 + 1.796685729365668e-01 1.794032048900415e-01 1.791381531128748e-01 1.788734173614389e-01 1.786089973920626e-01 + 1.783448929610376e-01 1.780811038246156e-01 1.778176297390092e-01 1.775544704603953e-01 1.772916257449107e-01 + 1.770290953486569e-01 1.767668790276984e-01 1.765049765380633e-01 1.762433876357433e-01 1.759821120766968e-01 + 1.757211496168458e-01 1.754605000120784e-01 1.752001630182495e-01 1.749401383911799e-01 1.746804258866586e-01 + 1.744210252604406e-01 1.741619362682507e-01 1.739031586657799e-01 1.736446922086909e-01 1.733865366526132e-01 + 1.731286917531486e-01 1.728711572658675e-01 1.726139329463114e-01 1.723570185499930e-01 1.721004138323974e-01 + 1.718441185489820e-01 1.715881324551753e-01 1.713324553063794e-01 1.710770868579710e-01 1.708220268652999e-01 + 1.705672750836905e-01 1.703128312684414e-01 1.700586951748279e-01 1.698048665580997e-01 1.695513451734831e-01 + 1.692981307761814e-01 1.690452231213756e-01 1.687926219642226e-01 1.685403270598581e-01 1.682883381633964e-01 + 1.680366550299311e-01 1.677852774145344e-01 1.675342050722588e-01 1.672834377581359e-01 1.670329752271799e-01 + 1.667828172343838e-01 1.665329635347252e-01 1.662834138831599e-01 1.660341680346288e-01 1.657852257440554e-01 + 1.655365867663455e-01 1.652882508563902e-01 1.650402177690624e-01 1.647924872592225e-01 1.645450590817131e-01 + 1.642979329913641e-01 1.640511087429918e-01 1.638045860913968e-01 1.635583647913681e-01 1.633124445976817e-01 + 1.630668252651016e-01 1.628215065483780e-01 1.625764882022522e-01 1.623317699814520e-01 1.620873516406972e-01 + 1.618432329346956e-01 1.615994136181455e-01 1.613558934457360e-01 1.611126721721478e-01 1.608697495520529e-01 + 1.606271253401142e-01 1.603847992909883e-01 1.601427711593249e-01 1.599010406997657e-01 1.596596076669457e-01 + 1.594184718154962e-01 1.591776329000409e-01 1.589370906751990e-01 1.586968448955861e-01 1.584568953158120e-01 + 1.582172416904841e-01 1.579778837742047e-01 1.577388213215750e-01 1.575000540871921e-01 1.572615818256517e-01 + 1.570234042915484e-01 1.567855212394746e-01 1.565479324240220e-01 1.563106375997808e-01 1.560736365213435e-01 + 1.558369289433017e-01 1.556005146202470e-01 1.553643933067731e-01 1.551285647574753e-01 1.548930287269509e-01 + 1.546577849697986e-01 1.544228332406219e-01 1.541881732940258e-01 1.539538048846192e-01 1.537197277670161e-01 + 1.534859416958338e-01 1.532524464256952e-01 1.530192417112279e-01 1.527863273070663e-01 1.525537029678490e-01 + 1.523213684482231e-01 1.520893235028403e-01 1.518575678863628e-01 1.516261013534574e-01 1.513949236588008e-01 + 1.511640345570772e-01 1.509334338029804e-01 1.507031211512141e-01 1.504730963564894e-01 1.502433591735304e-01 + 1.500139093570694e-01 1.497847466618507e-01 1.495558708426297e-01 1.493272816541739e-01 1.490989788512621e-01 + 1.488709621886855e-01 1.486432314212500e-01 1.484157863037719e-01 1.481886265910834e-01 1.479617520380304e-01 + 1.477351623994726e-01 1.475088574302843e-01 1.472828368853558e-01 1.470571005195935e-01 1.468316480879186e-01 + 1.466064793452692e-01 1.463815940465994e-01 1.461569919468831e-01 1.459326728011089e-01 1.457086363642838e-01 + 1.454848823914340e-01 1.452614106376053e-01 1.450382208578599e-01 1.448153128072819e-01 1.445926862409746e-01 + 1.443703409140607e-01 1.441482765816843e-01 1.439264929990105e-01 1.437049899212260e-01 1.434837671035389e-01 + 1.432628243011788e-01 1.430421612693997e-01 1.428217777634769e-01 1.426016735387091e-01 1.423818483504199e-01 + 1.421623019539556e-01 1.419430341046870e-01 1.417240445580107e-01 1.415053330693476e-01 1.412868993941451e-01 + 1.410687432878751e-01 1.408508645060363e-01 1.406332628041548e-01 1.404159379377833e-01 1.401988896625017e-01 + 1.399821177339180e-01 1.397656219076674e-01 1.395494019394156e-01 1.393334575848545e-01 1.391177885997074e-01 + 1.389023947397268e-01 1.386872757606943e-01 1.384724314184224e-01 1.382578614687543e-01 1.380435656675653e-01 + 1.378295437707599e-01 1.376157955342758e-01 1.374023207140827e-01 1.371891190661836e-01 1.369761903466122e-01 + 1.367635343114382e-01 1.365511507167630e-01 1.363390393187226e-01 1.361271998734866e-01 1.359156321372607e-01 + 1.357043358662845e-01 1.354933108168334e-01 1.352825567452182e-01 1.350720734077865e-01 1.348618605609217e-01 + 1.346519179610443e-01 1.344422453646124e-01 1.342328425281200e-01 1.340237092081012e-01 1.338148451611273e-01 + 1.336062501438069e-01 1.333979239127904e-01 1.331898662247650e-01 1.329820768364577e-01 1.327745555046373e-01 + 1.325673019861111e-01 1.323603160377283e-01 1.321535974163777e-01 1.319471458789905e-01 1.317409611825399e-01 + 1.315350430840405e-01 1.313293913405493e-01 1.311240057091662e-01 1.309188859470336e-01 1.307140318113391e-01 + 1.305094430593119e-01 1.303051194482263e-01 1.301010607354018e-01 1.298972666782018e-01 1.296937370340339e-01 + 1.294904715603530e-01 1.292874700146588e-01 1.290847321544970e-01 1.288822577374607e-01 1.286800465211891e-01 + 1.284780982633689e-01 1.282764127217333e-01 1.280749896540645e-01 1.278738288181925e-01 1.276729299719949e-01 + 1.274722928734003e-01 1.272719172803841e-01 1.270718029509728e-01 1.268719496432412e-01 1.266723571153156e-01 + 1.264730251253718e-01 1.262739534316377e-01 1.260751417923909e-01 1.258765899659611e-01 1.256782977107294e-01 + 1.254802647851296e-01 1.252824909476478e-01 1.250849759568223e-01 1.248877195712447e-01 1.246907215495615e-01 + 1.244939816504695e-01 1.242974996327227e-01 1.241012752551286e-01 1.239053082765492e-01 1.237095984559012e-01 + 1.235141455521565e-01 1.233189493243436e-01 1.231240095315461e-01 1.229293259329048e-01 1.227348982876164e-01 + 1.225407263549334e-01 1.223468098941680e-01 1.221531486646889e-01 1.219597424259213e-01 1.217665909373507e-01 + 1.215736939585204e-01 1.213810512490305e-01 1.211886625685445e-01 1.209965276767804e-01 1.208046463335197e-01 + 1.206130182986023e-01 1.204216433319289e-01 1.202305211934601e-01 1.200396516432187e-01 1.198490344412880e-01 + 1.196586693478126e-01 1.194685561230006e-01 1.192786945271197e-01 1.190890843205029e-01 1.188997252635442e-01 + 1.187106171167008e-01 1.185217596404941e-01 1.183331525955089e-01 1.181447957423934e-01 1.179566888418623e-01 + 1.177688316546917e-01 1.175812239417248e-01 1.173938654638699e-01 1.172067559820999e-01 1.170198952574548e-01 + 1.168332830510397e-01 1.166469191240259e-01 1.164608032376522e-01 1.162749351532250e-01 1.160893146321165e-01 + 1.159039414357676e-01 1.157188153256858e-01 1.155339360634491e-01 1.153493034107013e-01 1.151649171291566e-01 + 1.149807769805984e-01 1.147968827268796e-01 1.146132341299209e-01 1.144298309517146e-01 1.142466729543235e-01 + 1.140637598998791e-01 1.138810915505867e-01 1.136986676687199e-01 1.135164880166243e-01 1.133345523567180e-01 + 1.131528604514913e-01 1.129714120635051e-01 1.127902069553948e-01 1.126092448898663e-01 1.124285256297014e-01 + 1.122480489377530e-01 1.120678145769488e-01 1.118878223102901e-01 1.117080719008529e-01 1.115285631117864e-01 + 1.113492957063161e-01 1.111702694477414e-01 1.109914840994383e-01 1.108129394248575e-01 1.106346351875251e-01 + 1.104565711510452e-01 1.102787470790967e-01 1.101011627354352e-01 1.099238178838954e-01 1.097467122883864e-01 + 1.095698457128964e-01 1.093932179214913e-01 1.092168286783156e-01 1.090406777475911e-01 1.088647648936190e-01 + 1.086890898807788e-01 1.085136524735300e-01 1.083384524364101e-01 1.081634895340389e-01 1.079887635311131e-01 + 1.078142741924122e-01 1.076400212827943e-01 1.074660045672001e-01 1.072922238106496e-01 1.071186787782450e-01 + 1.069453692351707e-01 1.067722949466921e-01 1.065994556781558e-01 1.064268511949941e-01 1.062544812627173e-01 + 1.060823456469228e-01 1.059104441132881e-01 1.057387764275756e-01 1.055673423556319e-01 1.053961416633867e-01 + 1.052251741168536e-01 1.050544394821309e-01 1.048839375254021e-01 1.047136680129355e-01 1.045436307110844e-01 + 1.043738253862878e-01 1.042042518050696e-01 1.040349097340416e-01 1.038657989398996e-01 1.036969191894269e-01 + 1.035282702494945e-01 1.033598518870589e-01 1.031916638691649e-01 1.030237059629436e-01 1.028559779356158e-01 + 1.026884795544882e-01 1.025212105869567e-01 1.023541708005063e-01 1.021873599627101e-01 1.020207778412294e-01 + 1.018544242038169e-01 1.016882988183130e-01 1.015224014526476e-01 1.013567318748423e-01 1.011912898530077e-01 + 1.010260751553449e-01 1.008610875501469e-01 1.006963268057950e-01 1.005317926907653e-01 1.003674849736218e-01 + 1.002034034230231e-01 1.000395478077181e-01 9.987591789654780e-02 9.971251345844698e-02 9.954933426244125e-02 + 9.938638007764994e-02 9.922365067328646e-02 9.906114581865591e-02 9.889886528315754e-02 9.873680883628547e-02 + 9.857497624762653e-02 9.841336728686208e-02 9.825198172376917e-02 9.809081932821735e-02 9.792987987017401e-02 + 9.776916311969899e-02 9.760866884694980e-02 9.744839682217774e-02 9.728834681573258e-02 9.712851859805698e-02 + 9.696891193969276e-02 9.680952661127736e-02 9.665036238354409e-02 9.649141902732546e-02 9.633269631354829e-02 + 9.617419401324032e-02 9.601591189752484e-02 9.585784973762296e-02 9.570000730485571e-02 9.554238437064018e-02 + 9.538498070649509e-02 9.522779608403464e-02 9.507083027497541e-02 9.491408305113043e-02 9.475755418441414e-02 + 9.460124344684000e-02 9.444515061052126e-02 9.428927544767225e-02 9.413361773060668e-02 9.397817723173911e-02 + 9.382295372358590e-02 9.366794697876325e-02 9.351315676998900e-02 9.335858287008275e-02 9.320422505196591e-02 + 9.305008308866132e-02 9.289615675329434e-02 9.274244581909208e-02 9.258895005938572e-02 9.243566924760703e-02 + 9.228260315729252e-02 9.212975156208111e-02 9.197711423571521e-02 9.182469095204157e-02 9.167248148500988e-02 + 9.152048560867383e-02 9.136870309719233e-02 9.121713372482762e-02 9.106577726594742e-02 9.091463349502378e-02 + 9.076370218663352e-02 9.061298311546082e-02 9.046247605629219e-02 9.031218078402289e-02 9.016209707365150e-02 + 9.001222470028415e-02 8.986256343913364e-02 8.971311306551767e-02 8.956387335486245e-02 8.941484408269981e-02 + 8.926602502466938e-02 8.911741595651761e-02 8.896901665409843e-02 8.882082689337470e-02 8.867284645041515e-02 + 8.852507510139924e-02 8.837751262261156e-02 8.823015879044772e-02 8.808301338141127e-02 8.793607617211446e-02 + 8.778934693927805e-02 8.764282545973402e-02 8.749651151042169e-02 8.735040486839081e-02 8.720450531080169e-02 + 8.705881261492446e-02 8.691332655813792e-02 8.676804691793320e-02 8.662297347191195e-02 8.647810599778565e-02 + 8.633344427337754e-02 8.618898807662081e-02 8.604473718556219e-02 8.590069137835830e-02 8.575685043327749e-02 + 8.561321412870182e-02 8.546978224312321e-02 8.532655455514768e-02 8.518353084349259e-02 8.504071088698810e-02 + 8.489809446457885e-02 8.475568135531987e-02 8.461347133838226e-02 8.447146419304774e-02 8.432965969871346e-02 + 8.418805763489025e-02 8.404665778120257e-02 8.390545991738911e-02 8.376446382330226e-02 8.362366927890992e-02 + 8.348307606429477e-02 8.334268395965257e-02 8.320249274529654e-02 8.306250220165345e-02 8.292271210926622e-02 + 8.278312224879276e-02 8.264373240100760e-02 8.250454234680088e-02 8.236555186717760e-02 8.222676074326088e-02 + 8.208816875628919e-02 8.194977568761792e-02 8.181158131871981e-02 8.167358543118301e-02 8.153578780671458e-02 + 8.139818822713811e-02 8.126078647439403e-02 8.112358233054157e-02 8.098657557775711e-02 8.084976599833528e-02 + 8.071315337468798e-02 8.057673748934711e-02 8.044051812496189e-02 8.030449506430019e-02 8.016866809024924e-02 + 8.003303698581497e-02 7.989760153412183e-02 7.976236151841422e-02 7.962731672205711e-02 7.949246692853296e-02 + 7.935781192144453e-02 7.922335148451654e-02 7.908908540159118e-02 7.895501345663296e-02 7.882113543372496e-02 + 7.868745111707288e-02 7.855396029100163e-02 7.842066273995724e-02 7.828755824850811e-02 7.815464660134269e-02 + 7.802192758327056e-02 7.788940097922308e-02 7.775706657425528e-02 7.762492415354082e-02 7.749297350237767e-02 + 7.736121440618510e-02 7.722964665050465e-02 7.709827002100095e-02 7.696708430346043e-02 7.683608928379389e-02 + 7.670528474803258e-02 7.657467048233327e-02 7.644424627297415e-02 7.631401190635798e-02 7.618396716901024e-02 + 7.605411184758187e-02 7.592444572884496e-02 7.579496859969717e-02 7.566568024716050e-02 7.553658045838056e-02 + 7.540766902062793e-02 7.527894572129755e-02 7.515041034790855e-02 7.502206268810578e-02 7.489390252965893e-02 + 7.476592966046258e-02 7.463814386853636e-02 7.451054494202597e-02 7.438313266920277e-02 7.425590683846357e-02 + 7.412886723833031e-02 7.400201365745282e-02 7.387534588460472e-02 7.374886370868754e-02 7.362256691872980e-02 + 7.349645530388434e-02 7.337052865343258e-02 7.324478675678282e-02 7.311922940346886e-02 7.299385638315332e-02 + 7.286866748562490e-02 7.274366250080050e-02 7.261884121872426e-02 7.249420342956742e-02 7.236974892362961e-02 + 7.224547749133943e-02 7.212138892325144e-02 7.199748301004981e-02 7.187375954254648e-02 7.175021831168232e-02 + 7.162685910852673e-02 7.150368172427798e-02 7.138068595026226e-02 7.125787157793585e-02 7.113523839888364e-02 + 7.101278620481988e-02 7.089051478758880e-02 7.076842393916320e-02 7.064651345164547e-02 7.052478311726892e-02 + 7.040323272839584e-02 7.028186207751887e-02 7.016067095726068e-02 7.003965916037465e-02 6.991882647974333e-02 + 6.979817270838114e-02 6.967769763943314e-02 6.955740106617377e-02 6.943728278201038e-02 6.931734258047911e-02 + 6.919758025524873e-02 6.907799560011899e-02 6.895858840902157e-02 6.883935847601874e-02 6.872030559530402e-02 + 6.860142956120464e-02 6.848273016817703e-02 6.836420721081214e-02 6.824586048383144e-02 6.812768978208955e-02 + 6.800969490057214e-02 6.789187563439816e-02 6.777423177882019e-02 6.765676312922145e-02 6.753946948111943e-02 + 6.742235063016358e-02 6.730540637213692e-02 6.718863650295635e-02 6.707204081867049e-02 6.695561911546238e-02 + 6.683937118964749e-02 6.672329683767635e-02 6.660739585613246e-02 6.649166804173308e-02 6.637611319132937e-02 + 6.626073110190654e-02 6.614552157058440e-02 6.603048439461572e-02 6.591561937139018e-02 6.580092629842874e-02 + 6.568640497338905e-02 6.557205519406327e-02 6.545787675837786e-02 6.534386946439420e-02 6.523003311030823e-02 + 6.511636749445301e-02 6.500287241529389e-02 6.488954767143396e-02 6.477639306161019e-02 6.466340838469585e-02 + 6.455059343970032e-02 6.443794802576742e-02 6.432547194217716e-02 6.421316498834705e-02 6.410102696382836e-02 + 6.398905766830912e-02 6.387725690161559e-02 6.376562446370711e-02 6.365416015468170e-02 6.354286377477433e-02 + 6.343173512435428e-02 6.332077400392887e-02 6.320998021414370e-02 6.309935355577792e-02 6.298889382975151e-02 + 6.287860083711863e-02 6.276847437907243e-02 6.265851425694195e-02 6.254872027219480e-02 6.243909222643552e-02 + 6.232962992140653e-02 6.222033315898774e-02 6.211120174119685e-02 6.200223547018939e-02 6.189343414825904e-02 + 6.178479757783759e-02 6.167632556149458e-02 6.156801790193815e-02 6.145987440201451e-02 6.135189486470850e-02 + 6.124407909314349e-02 6.113642689058121e-02 6.102893806042227e-02 6.092161240620589e-02 6.081444973161033e-02 + 6.070744984045263e-02 6.060061253668905e-02 6.049393762441481e-02 6.038742490786434e-02 6.028107419141133e-02 + 6.017488527956895e-02 6.006885797698998e-02 5.996299208846637e-02 5.985728741892989e-02 5.975174377345195e-02 + 5.964636095724386e-02 5.954113877565684e-02 5.943607703418188e-02 5.933117553845009e-02 5.922643409423262e-02 + 5.912185250744099e-02 5.901743058412699e-02 5.891316813048256e-02 5.880906495284029e-02 5.870512085767296e-02 + 5.860133565159446e-02 5.849770914135879e-02 5.839424113386129e-02 5.829093143613754e-02 5.818777985536438e-02 + 5.808478619885944e-02 5.798195027408155e-02 5.787927188863066e-02 5.777675085024783e-02 5.767438696681541e-02 + 5.757218004635708e-02 5.747012989703802e-02 5.736823632716495e-02 5.726649914518603e-02 5.716491815969112e-02 + 5.706349317941162e-02 5.696222401322115e-02 5.686111047013469e-02 5.676015235930957e-02 5.665934949004476e-02 + 5.655870167178147e-02 5.645820871410302e-02 5.635787042673490e-02 5.625768661954506e-02 5.615765710254351e-02 + 5.605778168588283e-02 5.595806017985791e-02 5.585849239490642e-02 5.575907814160858e-02 5.565981723068713e-02 + 5.556070947300771e-02 5.546175467957849e-02 5.536295266155087e-02 5.526430323021909e-02 5.516580619702026e-02 + 5.506746137353453e-02 5.496926857148521e-02 5.487122760273896e-02 5.477333827930546e-02 5.467560041333785e-02 + 5.457801381713258e-02 5.448057830312946e-02 5.438329368391182e-02 5.428615977220666e-02 5.418917638088458e-02 + 5.409234332295967e-02 5.399566041158989e-02 5.389912746007679e-02 5.380274428186612e-02 5.370651069054730e-02 + 5.361042649985374e-02 5.351449152366280e-02 5.341870557599597e-02 5.332306847101894e-02 5.322758002304143e-02 + 5.313224004651761e-02 5.303704835604573e-02 5.294200476636851e-02 5.284710909237295e-02 5.275236114909065e-02 + 5.265776075169771e-02 5.256330771551469e-02 5.246900185600681e-02 5.237484298878387e-02 5.228083092960058e-02 + 5.218696549435629e-02 5.209324649909523e-02 5.199967376000637e-02 5.190624709342363e-02 5.181296631582597e-02 + 5.171983124383753e-02 5.162684169422720e-02 5.153399748390908e-02 5.144129842994243e-02 5.134874434953189e-02 + 5.125633506002712e-02 5.116407037892325e-02 5.107195012386069e-02 5.097997411262521e-02 5.088814216314804e-02 + 5.079645409350596e-02 5.070490972192128e-02 5.061350886676187e-02 5.052225134654108e-02 5.043113697991806e-02 + 5.034016558569764e-02 5.024933698283059e-02 5.015865099041313e-02 5.006810742768746e-02 4.997770611404170e-02 + 4.988744686900989e-02 4.979732951227194e-02 4.970735386365389e-02 4.961751974312771e-02 4.952782697081142e-02 + 4.943827536696937e-02 4.934886475201177e-02 4.925959494649528e-02 4.917046577112270e-02 4.908147704674309e-02 + 4.899262859435168e-02 4.890392023509032e-02 4.881535179024721e-02 4.872692308125674e-02 4.863863392969997e-02 + 4.855048415730427e-02 4.846247358594373e-02 4.837460203763899e-02 4.828686933455715e-02 4.819927529901200e-02 + 4.811181975346400e-02 4.802450252052035e-02 4.793732342293487e-02 4.785028228360837e-02 4.776337892558823e-02 + 4.767661317206874e-02 4.758998484639095e-02 4.750349377204301e-02 4.741713977265999e-02 4.733092267202366e-02 + 4.724484229406293e-02 4.715889846285370e-02 4.707309100261897e-02 4.698741973772886e-02 4.690188449270040e-02 + 4.681648509219788e-02 4.673122136103263e-02 4.664609312416333e-02 4.656110020669590e-02 4.647624243388327e-02 + 4.639151963112578e-02 4.630693162397099e-02 4.622247823811394e-02 4.613815929939678e-02 4.605397463380928e-02 + 4.596992406748844e-02 4.588600742671866e-02 4.580222453793175e-02 4.571857522770720e-02 4.563505932277185e-02 + 4.555167665000001e-02 4.546842703641361e-02 4.538531030918200e-02 4.530232629562224e-02 4.521947482319904e-02 + 4.513675571952460e-02 4.505416881235877e-02 4.497171392960905e-02 4.488939089933080e-02 4.480719954972680e-02 + 4.472513970914786e-02 4.464321120609229e-02 4.456141386920624e-02 4.447974752728358e-02 4.439821200926614e-02 + 4.431680714424342e-02 4.423553276145283e-02 4.415438869027951e-02 4.407337476025656e-02 4.399249080106498e-02 + 4.391173664253364e-02 4.383111211463933e-02 4.375061704750673e-02 4.367025127140842e-02 4.359001461676502e-02 + 4.350990691414525e-02 4.342992799426557e-02 4.335007768799056e-02 4.327035582633267e-02 4.319076224045273e-02 + 4.311129676165918e-02 4.303195922140893e-02 4.295274945130653e-02 4.287366728310493e-02 4.279471254870493e-02 + 4.271588508015561e-02 4.263718470965416e-02 4.255861126954581e-02 4.248016459232381e-02 4.240184451062970e-02 + 4.232365085725320e-02 4.224558346513210e-02 4.216764216735236e-02 4.208982679714814e-02 4.201213718790169e-02 + 4.193457317314362e-02 4.185713458655257e-02 4.177982126195552e-02 4.170263303332759e-02 4.162556973479205e-02 + 4.154863120062045e-02 4.147181726523266e-02 4.139512776319668e-02 4.131856252922880e-02 4.124212139819342e-02 + 4.116580420510335e-02 4.108961078511960e-02 4.101354097355144e-02 4.093759460585639e-02 4.086177151764019e-02 + 4.078607154465683e-02 4.071049452280871e-02 4.063504028814641e-02 4.055970867686878e-02 4.048449952532289e-02 + 4.040941267000411e-02 4.033444794755624e-02 4.025960519477109e-02 4.018488424858895e-02 4.011028494609837e-02 + 4.003580712453604e-02 3.996145062128702e-02 3.988721527388461e-02 3.981310092001050e-02 3.973910739749454e-02 + 3.966523454431485e-02 3.959148219859770e-02 3.951785019861791e-02 3.944433838279841e-02 3.937094658971043e-02 + 3.929767465807329e-02 3.922452242675468e-02 3.915148973477064e-02 3.907857642128529e-02 3.900578232561114e-02 + 3.893310728720878e-02 3.886055114568715e-02 3.878811374080323e-02 3.871579491246244e-02 3.864359450071839e-02 + 3.857151234577273e-02 3.849954828797544e-02 3.842770216782455e-02 3.835597382596646e-02 3.828436310319572e-02 + 3.821286984045495e-02 3.814149387883489e-02 3.807023505957453e-02 3.799909322406100e-02 3.792806821382960e-02 + 3.785715987056366e-02 3.778636803609461e-02 3.771569255240202e-02 3.764513326161367e-02 3.757469000600518e-02 + 3.750436262800053e-02 3.743415097017155e-02 3.736405487523818e-02 3.729407418606832e-02 3.722420874567802e-02 + 3.715445839723137e-02 3.708482298404037e-02 3.701530234956497e-02 3.694589633741310e-02 3.687660479134074e-02 + 3.680742755525190e-02 3.673836447319825e-02 3.666941538937959e-02 3.660058014814346e-02 3.653185859398554e-02 + 3.646325057154911e-02 3.639475592562551e-02 3.632637450115382e-02 3.625810614322090e-02 3.618995069706160e-02 + 3.612190800805836e-02 3.605397792174155e-02 3.598616028378923e-02 3.591845494002718e-02 3.585086173642891e-02 + 3.578338051911566e-02 3.571601113435646e-02 3.564875342856781e-02 3.558160724831399e-02 3.551457244030676e-02 + 3.544764885140575e-02 3.538083632861801e-02 3.531413471909822e-02 3.524754387014850e-02 3.518106362921859e-02 + 3.511469384390579e-02 3.504843436195476e-02 3.498228503125778e-02 3.491624569985452e-02 3.485031621593195e-02 + 3.478449642782455e-02 3.471878618401417e-02 3.465318533313019e-02 3.458769372394899e-02 3.452231120539447e-02 + 3.445703762653769e-02 3.439187283659716e-02 3.432681668493857e-02 3.426186902107471e-02 3.419702969466565e-02 + 3.413229855551856e-02 3.406767545358790e-02 3.400316023897502e-02 3.393875276192865e-02 3.387445287284434e-02 + 3.381026042226468e-02 3.374617526087952e-02 3.368219723952536e-02 3.361832620918598e-02 3.355456202099187e-02 + 3.349090452622049e-02 3.342735357629614e-02 3.336390902279002e-02 3.330057071742024e-02 3.323733851205150e-02 + 3.317421225869542e-02 3.311119180951021e-02 3.304827701680088e-02 3.298546773301923e-02 3.292276381076348e-02 + 3.286016510277862e-02 3.279767146195605e-02 3.273528274133401e-02 3.267299879409696e-02 3.261081947357614e-02 + 3.254874463324902e-02 3.248677412673959e-02 3.242490780781821e-02 3.236314553040164e-02 3.230148714855306e-02 + 3.223993251648181e-02 3.217848148854351e-02 3.211713391924007e-02 3.205588966321957e-02 3.199474857527639e-02 + 3.193371051035084e-02 3.187277532352945e-02 3.181194287004474e-02 3.175121300527541e-02 3.169058558474602e-02 + 3.163006046412720e-02 3.156963749923540e-02 3.150931654603296e-02 3.144909746062825e-02 3.138898009927525e-02 + 3.132896431837392e-02 3.126904997446978e-02 3.120923692425420e-02 3.114952502456412e-02 3.108991413238225e-02 + 3.103040410483682e-02 3.097099479920163e-02 3.091168607289601e-02 3.085247778348474e-02 3.079336978867808e-02 + 3.073436194633185e-02 3.067545411444700e-02 3.061664615116992e-02 3.055793791479227e-02 3.049932926375105e-02 + 3.044082005662837e-02 3.038241015215162e-02 3.032409940919322e-02 3.026588768677075e-02 3.020777484404678e-02 + 3.014976074032899e-02 3.009184523507004e-02 3.003402818786739e-02 2.997630945846348e-02 2.991868890674557e-02 + 2.986116639274578e-02 2.980374177664100e-02 2.974641491875273e-02 2.968918567954729e-02 2.963205391963545e-02 + 2.957501949977276e-02 2.951808228085934e-02 2.946124212393966e-02 2.940449889020270e-02 2.934785244098188e-02 + 2.929130263775508e-02 2.923484934214431e-02 2.917849241591612e-02 2.912223172098112e-02 2.906606711939417e-02 + 2.900999847335420e-02 2.895402564520441e-02 2.889814849743199e-02 2.884236689266812e-02 2.878668069368797e-02 + 2.873108976341048e-02 2.867559396489877e-02 2.862019316135960e-02 2.856488721614354e-02 2.850967599274484e-02 + 2.845455935480147e-02 2.839953716609519e-02 2.834460929055108e-02 2.828977559223799e-02 2.823503593536820e-02 + 2.818039018429734e-02 2.812583820352457e-02 2.807137985769232e-02 2.801701501158639e-02 2.796274353013577e-02 + 2.790856527841271e-02 2.785448012163248e-02 2.780048792515359e-02 2.774658855447765e-02 2.769278187524912e-02 + 2.763906775325542e-02 2.758544605442698e-02 2.753191664483701e-02 2.747847939070157e-02 2.742513415837943e-02 + 2.737188081437201e-02 2.731871922532344e-02 2.726564925802046e-02 2.721267077939226e-02 2.715978365651062e-02 + 2.710698775658973e-02 2.705428294698613e-02 2.700166909519859e-02 2.694914606886840e-02 2.689671373577893e-02 + 2.684437196385573e-02 2.679212062116645e-02 2.673995957592078e-02 2.668788869647051e-02 2.663590785130934e-02 + 2.658401690907286e-02 2.653221573853852e-02 2.648050420862550e-02 2.642888218839482e-02 2.637734954704907e-02 + 2.632590615393258e-02 2.627455187853117e-02 2.622328659047220e-02 2.617211015952437e-02 2.612102245559803e-02 + 2.607002334874467e-02 2.601911270915717e-02 2.596829040716955e-02 2.591755631325705e-02 2.586691029803604e-02 + 2.581635223226402e-02 2.576588198683934e-02 2.571549943280137e-02 2.566520444133035e-02 2.561499688374738e-02 + 2.556487663151437e-02 2.551484355623383e-02 2.546489752964897e-02 2.541503842364360e-02 2.536526611024213e-02 + 2.531558046160929e-02 2.526598135005041e-02 2.521646864801105e-02 2.516704222807709e-02 2.511770196297464e-02 + 2.506844772557006e-02 2.501927938886981e-02 2.497019682602032e-02 2.492119991030810e-02 2.487228851515949e-02 + 2.482346251414088e-02 2.477472178095836e-02 2.472606618945776e-02 2.467749561362466e-02 2.462900992758417e-02 + 2.458060900560113e-02 2.453229272207970e-02 2.448406095156366e-02 2.443591356873605e-02 2.438785044841923e-02 + 2.433987146557491e-02 2.429197649530386e-02 2.424416541284614e-02 2.419643809358074e-02 2.414879441302571e-02 + 2.410123424683799e-02 2.405375747081346e-02 2.400636396088687e-02 2.395905359313154e-02 2.391182624375964e-02 + 2.386468178912182e-02 2.381762010570739e-02 2.377064107014414e-02 2.372374455919827e-02 2.367693044977429e-02 + 2.363019861891504e-02 2.358354894380167e-02 2.353698130175332e-02 2.349049557022748e-02 2.344409162681937e-02 + 2.339776934926244e-02 2.335152861542784e-02 2.330536930332469e-02 2.325929129109989e-02 2.321329445703792e-02 + 2.316737867956098e-02 2.312154383722880e-02 2.307578980873863e-02 2.303011647292517e-02 2.298452370876049e-02 + 2.293901139535392e-02 2.289357941195195e-02 2.284822763793841e-02 2.280295595283414e-02 2.275776423629699e-02 + 2.271265236812174e-02 2.266762022824008e-02 2.262266769672057e-02 2.257779465376847e-02 2.253300097972579e-02 + 2.248828655507105e-02 2.244365126041943e-02 2.239909497652243e-02 2.235461758426810e-02 2.231021896468079e-02 + 2.226589899892109e-02 2.222165756828580e-02 2.217749455420780e-02 2.213340983825609e-02 2.208940330213568e-02 + 2.204547482768741e-02 2.200162429688798e-02 2.195785159184988e-02 2.191415659482132e-02 2.187053918818612e-02 + 2.182699925446367e-02 2.178353667630882e-02 2.174015133651188e-02 2.169684311799842e-02 2.165361190382941e-02 + 2.161045757720092e-02 2.156738002144419e-02 2.152437912002551e-02 2.148145475654605e-02 2.143860681474209e-02 + 2.139583517848464e-02 2.135313973177946e-02 2.131052035876701e-02 2.126797694372233e-02 2.122550937105510e-02 + 2.118311752530948e-02 2.114080129116389e-02 2.109856055343118e-02 2.105639519705838e-02 2.101430510712685e-02 + 2.097229016885181e-02 2.093035026758276e-02 2.088848528880298e-02 2.084669511812965e-02 2.080497964131383e-02 + 2.076333874424025e-02 2.072177231292733e-02 2.068028023352706e-02 2.063886239232489e-02 2.059751867573969e-02 + 2.055624897032378e-02 2.051505316276277e-02 2.047393113987528e-02 2.043288278861326e-02 2.039190799606156e-02 + 2.035100664943814e-02 2.031017863609374e-02 2.026942384351203e-02 2.022874215930932e-02 2.018813347123464e-02 + 2.014759766716960e-02 2.010713463512833e-02 2.006674426325743e-02 2.002642643983582e-02 1.998618105327470e-02 + 1.994600799211741e-02 1.990590714503957e-02 1.986587840084881e-02 1.982592164848464e-02 1.978603677701852e-02 + 1.974622367565370e-02 1.970648223372523e-02 1.966681234069982e-02 1.962721388617567e-02 1.958768675988257e-02 + 1.954823085168165e-02 1.950884605156553e-02 1.946953224965790e-02 1.943028933621385e-02 1.939111720161943e-02 + 1.935201573639177e-02 1.931298483117888e-02 1.927402437675976e-02 1.923513426404419e-02 1.919631438407257e-02 + 1.915756462801598e-02 1.911888488717604e-02 1.908027505298486e-02 1.904173501700498e-02 1.900326467092919e-02 + 1.896486390658049e-02 1.892653261591207e-02 1.888827069100726e-02 1.885007802407922e-02 1.881195450747120e-02 + 1.877390003365612e-02 1.873591449523674e-02 1.869799778494542e-02 1.866014979564416e-02 1.862237042032451e-02 + 1.858465955210731e-02 1.854701708424281e-02 1.850944291011052e-02 1.847193692321911e-02 1.843449901720641e-02 + 1.839712908583917e-02 1.835982702301311e-02 1.832259272275277e-02 1.828542607921151e-02 1.824832698667137e-02 + 1.821129533954295e-02 1.817433103236538e-02 1.813743395980618e-02 1.810060401666136e-02 1.806384109785505e-02 + 1.802714509843967e-02 1.799051591359570e-02 1.795395343863162e-02 1.791745756898384e-02 1.788102820021669e-02 + 1.784466522802225e-02 1.780836854822025e-02 1.777213805675804e-02 1.773597364971046e-02 1.769987522327984e-02 + 1.766384267379585e-02 1.762787589771540e-02 1.759197479162257e-02 1.755613925222856e-02 1.752036917637160e-02 + 1.748466446101681e-02 1.744902500325621e-02 1.741345070030855e-02 1.737794144951918e-02 1.734249714836013e-02 + 1.730711769442992e-02 1.727180298545352e-02 1.723655291928215e-02 1.720136739389334e-02 1.716624630739074e-02 + 1.713118955800411e-02 1.709619704408924e-02 1.706126866412775e-02 1.702640431672713e-02 1.699160390062053e-02 + 1.695686731466684e-02 1.692219445785053e-02 1.688758522928144e-02 1.685303952819490e-02 1.681855725395140e-02 + 1.678413830603687e-02 1.674978258406216e-02 1.671548998776335e-02 1.668126041700129e-02 1.664709377176185e-02 + 1.661298995215557e-02 1.657894885841778e-02 1.654497039090840e-02 1.651105445011187e-02 1.647720093663701e-02 + 1.644340975121703e-02 1.640968079470945e-02 1.637601396809589e-02 1.634240917248211e-02 1.630886630909784e-02 + 1.627538527929666e-02 1.624196598455614e-02 1.620860832647740e-02 1.617531220678537e-02 1.614207752732841e-02 + 1.610890419007842e-02 1.607579209713067e-02 1.604274115070368e-02 1.600975125313930e-02 1.597682230690236e-02 + 1.594395421458081e-02 1.591114687888548e-02 1.587840020265006e-02 1.584571408883111e-02 1.581308844050772e-02 + 1.578052316088166e-02 1.574801815327709e-02 1.571557332114071e-02 1.568318856804151e-02 1.565086379767065e-02 + 1.561859891384147e-02 1.558639382048930e-02 1.555424842167157e-02 1.552216262156743e-02 1.549013632447795e-02 + 1.545816943482578e-02 1.542626185715522e-02 1.539441349613207e-02 1.536262425654359e-02 1.533089404329835e-02 + 1.529922276142617e-02 1.526761031607801e-02 1.523605661252587e-02 1.520456155616278e-02 1.517312505250267e-02 + 1.514174700718018e-02 1.511042732595070e-02 1.507916591469021e-02 1.504796267939523e-02 1.501681752618278e-02 + 1.498573036129008e-02 1.495470109107468e-02 1.492372962201427e-02 1.489281586070665e-02 1.486195971386951e-02 + 1.483116108834055e-02 1.480041989107714e-02 1.476973602915645e-02 1.473910940977514e-02 1.470853994024954e-02 + 1.467802752801534e-02 1.464757208062756e-02 1.461717350576047e-02 1.458683171120747e-02 1.455654660488108e-02 + 1.452631809481281e-02 1.449614608915297e-02 1.446603049617069e-02 1.443597122425380e-02 1.440596818190877e-02 + 1.437602127776049e-02 1.434613042055241e-02 1.431629551914620e-02 1.428651648252179e-02 1.425679321977723e-02 + 1.422712564012869e-02 1.419751365291029e-02 1.416795716757397e-02 1.413845609368946e-02 1.410901034094416e-02 + 1.407961981914309e-02 1.405028443820881e-02 1.402100410818119e-02 1.399177873921743e-02 1.396260824159200e-02 + 1.393349252569648e-02 1.390443150203946e-02 1.387542508124651e-02 1.384647317405998e-02 1.381757569133904e-02 + 1.378873254405951e-02 1.375994364331371e-02 1.373120890031058e-02 1.370252822637531e-02 1.367390153294943e-02 + 1.364532873159062e-02 1.361680973397271e-02 1.358834445188560e-02 1.355993279723497e-02 1.353157468204240e-02 + 1.350327001844514e-02 1.347501871869618e-02 1.344682069516396e-02 1.341867586033241e-02 1.339058412680079e-02 + 1.336254540728360e-02 1.333455961461055e-02 1.330662666172639e-02 1.327874646169089e-02 1.325091892767864e-02 + 1.322314397297907e-02 1.319542151099625e-02 1.316775145524890e-02 1.314013371937028e-02 1.311256821710795e-02 + 1.308505486232389e-02 1.305759356899425e-02 1.303018425120931e-02 1.300282682317344e-02 1.297552119920489e-02 + 1.294826729373576e-02 1.292106502131191e-02 1.289391429659287e-02 1.286681503435175e-02 1.283976714947509e-02 + 1.281277055696279e-02 1.278582517192804e-02 1.275893090959727e-02 1.273208768530988e-02 1.270529541451842e-02 + 1.267855401278819e-02 1.265186339579736e-02 1.262522347933680e-02 1.259863417930998e-02 1.257209541173294e-02 + 1.254560709273409e-02 1.251916913855416e-02 1.249278146554613e-02 1.246644399017512e-02 1.244015662901833e-02 + 1.241391929876483e-02 1.238773191621557e-02 1.236159439828326e-02 1.233550666199231e-02 1.230946862447860e-02 + 1.228348020298958e-02 1.225754131488399e-02 1.223165187763192e-02 1.220581180881456e-02 1.218002102612427e-02 + 1.215427944736436e-02 1.212858699044902e-02 1.210294357340328e-02 1.207734911436282e-02 1.205180353157398e-02 + 1.202630674339358e-02 1.200085866828889e-02 1.197545922483743e-02 1.195010833172700e-02 1.192480590775552e-02 + 1.189955187183097e-02 1.187434614297120e-02 1.184918864030394e-02 1.182407928306664e-02 1.179901799060644e-02 + 1.177400468237997e-02 1.174903927795340e-02 1.172412169700217e-02 1.169925185931104e-02 1.167442968477387e-02 + 1.164965509339370e-02 1.162492800528245e-02 1.160024834066097e-02 1.157561601985885e-02 1.155103096331436e-02 + 1.152649309157442e-02 1.150200232529439e-02 1.147755858523803e-02 1.145316179227743e-02 1.142881186739280e-02 + 1.140450873167257e-02 1.138025230631309e-02 1.135604251261868e-02 1.133187927200143e-02 1.130776250598114e-02 + 1.128369213618532e-02 1.125966808434890e-02 1.123569027231431e-02 1.121175862203126e-02 1.118787305555674e-02 + 1.116403349505484e-02 1.114023986279671e-02 1.111649208116048e-02 1.109279007263106e-02 1.106913375980015e-02 + 1.104552306536607e-02 1.102195791213375e-02 1.099843822301458e-02 1.097496392102625e-02 1.095153492929275e-02 + 1.092815117104425e-02 1.090481256961699e-02 1.088151904845316e-02 1.085827053110086e-02 1.083506694121396e-02 + 1.081190820255199e-02 1.078879423898010e-02 1.076572497446891e-02 1.074270033309446e-02 1.071972023903803e-02 + 1.069678461658616e-02 1.067389339013043e-02 1.065104648416746e-02 1.062824382329880e-02 1.060548533223078e-02 + 1.058277093577440e-02 1.056010055884533e-02 1.053747412646376e-02 1.051489156375426e-02 1.049235279594577e-02 + 1.046985774837142e-02 1.044740634646846e-02 1.042499851577821e-02 1.040263418194588e-02 1.038031327072056e-02 + 1.035803570795504e-02 1.033580141960577e-02 1.031361033173270e-02 1.029146237049932e-02 1.026935746217240e-02 + 1.024729553312198e-02 1.022527650982121e-02 1.020330031884633e-02 1.018136688687657e-02 1.015947614069400e-02 + 1.013762800718344e-02 1.011582241333236e-02 1.009405928623082e-02 1.007233855307138e-02 1.005066014114891e-02 + 1.002902397786062e-02 1.000742999070585e-02 9.985878107286045e-03 9.964368255304602e-03 9.942900362566854e-03 + 9.921474356979905e-03 9.900090166552522e-03 9.878747719395080e-03 9.857446943719447e-03 9.836187767838898e-03 + 9.814970120168019e-03 9.793793929222560e-03 9.772659123619408e-03 9.751565632076428e-03 9.730513383412421e-03 + 9.709502306547012e-03 9.688532330500496e-03 9.667603384393805e-03 9.646715397448383e-03 9.625868298986120e-03 + 9.605062018429193e-03 9.584296485300049e-03 9.563571629221227e-03 9.542887379915295e-03 9.522243667204748e-03 + 9.501640421011943e-03 9.481077571359006e-03 9.460555048367609e-03 9.440072782259024e-03 9.419630703353957e-03 + 9.399228742072458e-03 9.378866828933860e-03 9.358544894556597e-03 9.338262869658163e-03 9.318020685055019e-03 + 9.297818271662490e-03 9.277655560494666e-03 9.257532482664282e-03 9.237448969382641e-03 9.217404951959510e-03 + 9.197400361803025e-03 9.177435130419596e-03 9.157509189413856e-03 9.137622470488421e-03 9.117774905443955e-03 + 9.097966426178949e-03 9.078196964689741e-03 9.058466453070313e-03 9.038774823512251e-03 9.019122008304617e-03 + 8.999507939833841e-03 8.979932550583722e-03 8.960395773135194e-03 8.940897540166326e-03 8.921437784452157e-03 + 8.902016438864622e-03 8.882633436372534e-03 8.863288710041314e-03 8.843982193033088e-03 8.824713818606434e-03 + 8.805483520116371e-03 8.786291231014220e-03 8.767136884847527e-03 8.748020415260011e-03 8.728941755991345e-03 + 8.709900840877150e-03 8.690897603848880e-03 8.671931978933735e-03 8.653003900254566e-03 8.634113302029723e-03 + 8.615260118573000e-03 8.596444284293523e-03 8.577665733695748e-03 8.558924401379151e-03 8.540220222038370e-03 + 8.521553130462930e-03 8.502923061537221e-03 8.484329950240396e-03 8.465773731646264e-03 8.447254340923232e-03 + 8.428771713334124e-03 8.410325784236157e-03 8.391916489080779e-03 8.373543763413678e-03 8.355207542874598e-03 + 8.336907763197208e-03 8.318644360209113e-03 8.300417269831660e-03 8.282226428079924e-03 8.264071771062566e-03 + 8.245953234981710e-03 8.227870756132868e-03 8.209824270904874e-03 8.191813715779761e-03 8.173839027332642e-03 + 8.155900142231672e-03 8.137996997237886e-03 8.120129529205112e-03 8.102297675079924e-03 8.084501371901490e-03 + 8.066740556801533e-03 8.049015167004157e-03 8.031325139825799e-03 8.013670412675106e-03 7.996050923052904e-03 + 7.978466608552032e-03 7.960917406857245e-03 7.943403255745151e-03 7.925924093084069e-03 7.908479856834030e-03 + 7.891070485046534e-03 7.873695915864603e-03 7.856356087522573e-03 7.839050938346024e-03 7.821780406751704e-03 + 7.804544431247447e-03 7.787342950432069e-03 7.770175902995169e-03 7.753043227717206e-03 7.735944863469245e-03 + 7.718880749212993e-03 7.701850824000604e-03 7.684855026974610e-03 7.667893297367842e-03 7.650965574503301e-03 + 7.634071797794107e-03 7.617211906743409e-03 7.600385840944176e-03 7.583593540079220e-03 7.566834943921063e-03 + 7.550109992331842e-03 7.533418625263189e-03 7.516760782756189e-03 7.500136404941188e-03 7.483545432037805e-03 + 7.466987804354747e-03 7.450463462289805e-03 7.433972346329666e-03 7.417514397049856e-03 7.401089555114641e-03 + 7.384697761276924e-03 7.368338956378189e-03 7.352013081348364e-03 7.335720077205704e-03 7.319459885056723e-03 + 7.303232446096106e-03 7.287037701606667e-03 7.270875592959056e-03 7.254746061611936e-03 7.238649049111654e-03 + 7.222584497092264e-03 7.206552347275421e-03 7.190552541470252e-03 7.174585021573283e-03 7.158649729568332e-03 + 7.142746607526421e-03 7.126875597605660e-03 7.111036642051188e-03 7.095229683195062e-03 7.079454663456138e-03 + 7.063711525339974e-03 7.048000211438786e-03 7.032320664431308e-03 7.016672827082698e-03 7.001056642244471e-03 + 6.985472052854345e-03 6.969919001936201e-03 6.954397432599980e-03 6.938907288041579e-03 6.923448511542730e-03 + 6.908021046470931e-03 6.892624836279358e-03 6.877259824506742e-03 6.861925954777301e-03 6.846623170800648e-03 + 6.831351416371628e-03 6.816110635370327e-03 6.800900771761874e-03 6.785721769596439e-03 6.770573573009094e-03 + 6.755456126219661e-03 6.740369373532736e-03 6.725313259337485e-03 6.710287728107603e-03 6.695292724401245e-03 + 6.680328192860867e-03 6.665394078213138e-03 6.650490325268893e-03 6.635616878923006e-03 6.620773684154290e-03 + 6.605960686025434e-03 6.591177829682861e-03 6.576425060356659e-03 6.561702323360478e-03 6.547009564091465e-03 + 6.532346728030131e-03 6.517713760740271e-03 6.503110607868868e-03 6.488537215145974e-03 6.473993528384660e-03 + 6.459479493480949e-03 6.444995056413572e-03 6.430540163244050e-03 6.416114760116471e-03 6.401718793257528e-03 + 6.387352208976226e-03 6.373014953664018e-03 6.358706973794522e-03 6.344428215923534e-03 6.330178626688879e-03 + 6.315958152810371e-03 6.301766741089672e-03 6.287604338410200e-03 6.273470891737058e-03 6.259366348116907e-03 + 6.245290654677928e-03 6.231243758629679e-03 6.217225607262999e-03 6.203236147949938e-03 6.189275328143647e-03 + 6.175343095378301e-03 6.161439397269008e-03 6.147564181511671e-03 6.133717395882932e-03 6.119898988240080e-03 + 6.106108906520936e-03 6.092347098743772e-03 6.078613513007241e-03 6.064908097490217e-03 6.051230800451773e-03 + 6.037581570231013e-03 6.023960355247071e-03 6.010367103998954e-03 5.996801765065450e-03 5.983264287105040e-03 + 5.969754618855806e-03 5.956272709135380e-03 5.942818506840782e-03 5.929391960948356e-03 5.915993020513681e-03 + 5.902621634671468e-03 5.889277752635500e-03 5.875961323698472e-03 5.862672297231961e-03 5.849410622686305e-03 + 5.836176249590496e-03 5.822969127552117e-03 5.809789206257247e-03 5.796636435470341e-03 5.783510765034160e-03 + 5.770412144869656e-03 5.757340524975902e-03 5.744295855429991e-03 5.731278086386956e-03 5.718287168079642e-03 + 5.705323050818644e-03 5.692385684992196e-03 5.679475021066089e-03 5.666591009583606e-03 5.653733601165356e-03 + 5.640902746509247e-03 5.628098396390361e-03 5.615320501660886e-03 5.602569013249989e-03 5.589843882163771e-03 + 5.577145059485132e-03 5.564472496373680e-03 5.551826144065657e-03 5.539205953873864e-03 5.526611877187547e-03 + 5.514043865472263e-03 5.501501870269872e-03 5.488985843198365e-03 5.476495735951853e-03 5.464031500300402e-03 + 5.451593088089975e-03 5.439180451242325e-03 5.426793541754912e-03 5.414432311700856e-03 5.402096713228736e-03 + 5.389786698562611e-03 5.377502220001856e-03 5.365243229921098e-03 5.353009680770121e-03 5.340801525073776e-03 + 5.328618715431905e-03 5.316461204519201e-03 5.304328945085163e-03 5.292221889953985e-03 5.280139992024460e-03 + 5.268083204269930e-03 5.256051479738124e-03 5.244044771551120e-03 5.232063032905230e-03 5.220106217070922e-03 + 5.208174277392745e-03 5.196267167289178e-03 5.184384840252607e-03 5.172527249849164e-03 5.160694349718734e-03 + 5.148886093574747e-03 5.137102435204207e-03 5.125343328467491e-03 5.113608727298320e-03 5.101898585703655e-03 + 5.090212857763627e-03 5.078551497631410e-03 5.066914459533141e-03 5.055301697767846e-03 5.043713166707315e-03 + 5.032148820796075e-03 5.020608614551232e-03 5.009092502562409e-03 4.997600439491663e-03 4.986132380073362e-03 + 4.974688279114171e-03 4.963268091492844e-03 4.951871772160252e-03 4.940499276139216e-03 4.929150558524433e-03 + 4.917825574482423e-03 4.906524279251372e-03 4.895246628141118e-03 4.883992576533000e-03 4.872762079879793e-03 + 4.861555093705608e-03 4.850371573605832e-03 4.839211475247013e-03 4.828074754366764e-03 4.816961366773682e-03 + 4.805871268347250e-03 4.794804415037780e-03 4.783760762866306e-03 4.772740267924467e-03 4.761742886374434e-03 + 4.750768574448833e-03 4.739817288450679e-03 4.728888984753220e-03 4.717983619799898e-03 4.707101150104245e-03 + 4.696241532249794e-03 4.685404722889983e-03 4.674590678748093e-03 4.663799356617136e-03 4.653030713359749e-03 + 4.642284705908150e-03 4.631561291264004e-03 4.620860426498378e-03 4.610182068751622e-03 4.599526175233280e-03 + 4.588892703222010e-03 4.578281610065496e-03 4.567692853180372e-03 4.557126390052089e-03 4.546582178234899e-03 + 4.536060175351690e-03 4.525560339093941e-03 4.515082627221634e-03 4.504626997563141e-03 4.494193408015179e-03 + 4.483781816542667e-03 4.473392181178677e-03 4.463024460024318e-03 4.452678611248686e-03 4.442354593088759e-03 + 4.432052363849285e-03 4.421771881902708e-03 4.411513105689093e-03 4.401275993716044e-03 4.391060504558614e-03 + 4.380866596859155e-03 4.370694229327322e-03 4.360543360739925e-03 4.350413949940895e-03 4.340305955841122e-03 + 4.330219337418431e-03 4.320154053717470e-03 4.310110063849622e-03 4.300087326992903e-03 4.290085802391935e-03 + 4.280105449357784e-03 4.270146227267908e-03 4.260208095566078e-03 4.250291013762265e-03 4.240394941432571e-03 + 4.230519838219162e-03 4.220665663830134e-03 4.210832378039451e-03 4.201019940686864e-03 4.191228311677810e-03 + 4.181457450983364e-03 4.171707318640076e-03 4.161977874749962e-03 4.152269079480362e-03 4.142580893063902e-03 + 4.132913275798359e-03 4.123266188046622e-03 4.113639590236568e-03 4.104033442860987e-03 4.094447706477488e-03 + 4.084882341708445e-03 4.075337309240902e-03 4.065812569826433e-03 4.056308084281117e-03 4.046823813485424e-03 + 4.037359718384164e-03 4.027915759986347e-03 4.018491899365133e-03 4.009088097657736e-03 3.999704316065328e-03 + 3.990340515853001e-03 3.980996658349612e-03 3.971672704947742e-03 3.962368617103602e-03 3.953084356336941e-03 + 3.943819884230963e-03 3.934575162432246e-03 3.925350152650663e-03 3.916144816659280e-03 3.906959116294274e-03 + 3.897793013454857e-03 3.888646470103181e-03 3.879519448264277e-03 3.870411910025936e-03 3.861323817538637e-03 + 3.852255133015473e-03 3.843205818732045e-03 3.834175837026415e-03 3.825165150298977e-03 3.816173721012392e-03 + 3.807201511691509e-03 3.798248484923271e-03 3.789314603356629e-03 3.780399829702493e-03 3.771504126733568e-03 + 3.762627457284353e-03 3.753769784251004e-03 3.744931070591295e-03 3.736111279324483e-03 3.727310373531252e-03 + 3.718528316353631e-03 3.709765070994887e-03 3.701020600719484e-03 3.692294868852965e-03 3.683587838781863e-03 + 3.674899473953636e-03 3.666229737876574e-03 3.657578594119742e-03 3.648946006312838e-03 3.640331938146173e-03 + 3.631736353370541e-03 3.623159215797162e-03 3.614600489297582e-03 3.606060137803600e-03 3.597538125307203e-03 + 3.589034415860429e-03 3.580548973575334e-03 3.572081762623883e-03 3.563632747237884e-03 3.555201891708901e-03 + 3.546789160388153e-03 3.538394517686443e-03 3.530017928074086e-03 3.521659356080807e-03 3.513318766295685e-03 + 3.504996123367032e-03 3.496691392002348e-03 3.488404536968191e-03 3.480135523090168e-03 3.471884315252777e-03 + 3.463650878399375e-03 3.455435177532061e-03 3.447237177711623e-03 3.439056844057428e-03 3.430894141747375e-03 + 3.422749036017780e-03 3.414621492163301e-03 3.406511475536868e-03 3.398418951549584e-03 3.390343885670667e-03 + 3.382286243427352e-03 3.374245990404793e-03 3.366223092246016e-03 3.358217514651808e-03 3.350229223380667e-03 + 3.342258184248666e-03 3.334304363129445e-03 3.326367725954064e-03 3.318448238710954e-03 3.310545867445828e-03 + 3.302660578261602e-03 3.294792337318323e-03 3.286941110833061e-03 3.279106865079847e-03 3.271289566389589e-03 + 3.263489181149991e-03 3.255705675805486e-03 3.247939016857112e-03 3.240189170862484e-03 3.232456104435657e-03 + 3.224739784247106e-03 3.217040177023617e-03 3.209357249548185e-03 3.201690968659954e-03 3.194041301254140e-03 + 3.186408214281960e-03 3.178791674750511e-03 3.171191649722731e-03 3.163608106317298e-03 3.156041011708556e-03 + 3.148490333126424e-03 3.140956037856345e-03 3.133438093239169e-03 3.125936466671091e-03 3.118451125603568e-03 + 3.110982037543236e-03 3.103529170051853e-03 3.096092490746181e-03 3.088671967297928e-03 3.081267567433668e-03 + 3.073879258934749e-03 3.066507009637240e-03 3.059150787431810e-03 3.051810560263697e-03 3.044486296132587e-03 + 3.037177963092544e-03 3.029885529251956e-03 3.022608962773418e-03 3.015348231873687e-03 3.008103304823578e-03 + 3.000874149947892e-03 2.993660735625326e-03 2.986463030288435e-03 2.979281002423507e-03 2.972114620570502e-03 + 2.964963853322963e-03 2.957828669327945e-03 2.950709037285960e-03 2.943604925950849e-03 2.936516304129738e-03 + 2.929443140682951e-03 2.922385404523917e-03 2.915343064619134e-03 2.908316089988024e-03 2.901304449702916e-03 + 2.894308112888936e-03 2.887327048723923e-03 2.880361226438385e-03 2.873410615315386e-03 2.866475184690462e-03 + 2.859554903951596e-03 2.852649742539072e-03 2.845759669945461e-03 2.838884655715475e-03 2.832024669445943e-03 + 2.825179680785725e-03 2.818349659435606e-03 2.811534575148238e-03 2.804734397728073e-03 2.797949097031250e-03 + 2.791178642965567e-03 2.784423005490355e-03 2.777682154616420e-03 2.770956060405980e-03 2.764244692972559e-03 + 2.757548022480946e-03 2.750866019147074e-03 2.744198653237957e-03 2.737545895071655e-03 2.730907715017131e-03 + 2.724284083494211e-03 2.717674970973513e-03 2.711080347976329e-03 2.704500185074616e-03 2.697934452890842e-03 + 2.691383122097963e-03 2.684846163419327e-03 2.678323547628599e-03 2.671815245549672e-03 2.665321228056625e-03 + 2.658841466073606e-03 2.652375930574780e-03 2.645924592584241e-03 2.639487423175933e-03 2.633064393473604e-03 + 2.626655474650677e-03 2.620260637930209e-03 2.613879854584828e-03 2.607513095936608e-03 2.601160333357042e-03 + 2.594821538266929e-03 2.588496682136316e-03 2.582185736484436e-03 2.575888672879592e-03 2.569605462939119e-03 + 2.563336078329286e-03 2.557080490765224e-03 2.550838672010866e-03 2.544610593878852e-03 2.538396228230442e-03 + 2.532195546975489e-03 2.526008522072306e-03 2.519835125527640e-03 2.513675329396543e-03 2.507529105782347e-03 + 2.501396426836568e-03 2.495277264758819e-03 2.489171591796750e-03 2.483079380245976e-03 2.477000602449974e-03 + 2.470935230800059e-03 2.464883237735247e-03 2.458844595742226e-03 2.452819277355261e-03 2.446807255156126e-03 + 2.440808501774015e-03 2.434822989885503e-03 2.428850692214408e-03 2.422891581531795e-03 2.416945630655832e-03 + 2.411012812451754e-03 2.405093099831777e-03 2.399186465755023e-03 2.393292883227442e-03 2.387412325301757e-03 + 2.381544765077357e-03 2.375690175700247e-03 2.369848530362968e-03 2.364019802304516e-03 2.358203964810278e-03 + 2.352400991211948e-03 2.346610854887461e-03 2.340833529260910e-03 2.335068987802472e-03 2.329317204028361e-03 + 2.323578151500701e-03 2.317851803827497e-03 2.312138134662551e-03 2.306437117705376e-03 2.300748726701132e-03 + 2.295072935440548e-03 2.289409717759845e-03 2.283759047540681e-03 2.278120898710053e-03 2.272495245240231e-03 + 2.266882061148695e-03 2.261281320498041e-03 2.255692997395942e-03 2.250117065995029e-03 2.244553500492853e-03 + 2.239002275131798e-03 2.233463364199008e-03 2.227936742026309e-03 2.222422382990156e-03 2.216920261511528e-03 + 2.211430352055893e-03 2.205952629133092e-03 2.200487067297302e-03 2.195033641146945e-03 2.189592325324619e-03 + 2.184163094517017e-03 2.178745923454885e-03 2.173340786912899e-03 2.167947659709639e-03 2.162566516707488e-03 + 2.157197332812561e-03 2.151840082974660e-03 2.146494742187162e-03 2.141161285486971e-03 2.135839687954444e-03 + 2.130529924713301e-03 2.125231970930582e-03 2.119945801816547e-03 2.114671392624614e-03 2.109408718651299e-03 + 2.104157755236119e-03 2.098918477761544e-03 2.093690861652904e-03 2.088474882378322e-03 2.083270515448668e-03 + 2.078077736417447e-03 2.072896520880750e-03 2.067726844477175e-03 2.062568682887761e-03 2.057422011835914e-03 + 2.052286807087334e-03 2.047163044449925e-03 2.042050699773769e-03 2.036949748951009e-03 2.031860167915795e-03 + 2.026781932644220e-03 2.021715019154229e-03 2.016659403505570e-03 2.011615061799707e-03 2.006581970179748e-03 + 2.001560104830387e-03 1.996549441977809e-03 1.991549957889654e-03 1.986561628874912e-03 1.981584431283866e-03 + 1.976618341508021e-03 1.971663335980033e-03 1.966719391173629e-03 1.961786483603561e-03 1.956864589825491e-03 + 1.951953686435972e-03 1.947053750072334e-03 1.942164757412634e-03 1.937286685175590e-03 1.932419510120486e-03 + 1.927563209047122e-03 1.922717758795751e-03 1.917883136246978e-03 1.913059318321714e-03 1.908246281981096e-03 + 1.903444004226412e-03 1.898652462099053e-03 1.893871632680412e-03 1.889101493091820e-03 1.884342020494508e-03 + 1.879593192089483e-03 1.874854985117518e-03 1.870127376859014e-03 1.865410344633984e-03 1.860703865801972e-03 + 1.856007917761960e-03 1.851322477952315e-03 1.846647523850726e-03 1.841983032974109e-03 1.837328982878569e-03 + 1.832685351159301e-03 1.828052115450536e-03 1.823429253425470e-03 1.818816742796179e-03 1.814214561313585e-03 + 1.809622686767343e-03 1.805041096985786e-03 1.800469769835881e-03 1.795908683223124e-03 1.791357815091485e-03 + 1.786817143423345e-03 1.782286646239406e-03 1.777766301598651e-03 1.773256087598245e-03 1.768755982373484e-03 + 1.764265964097722e-03 1.759786010982292e-03 1.755316101276446e-03 1.750856213267296e-03 1.746406325279714e-03 + 1.741966415676298e-03 1.737536462857272e-03 1.733116445260433e-03 1.728706341361096e-03 1.724306129671981e-03 + 1.719915788743189e-03 1.715535297162117e-03 1.711164633553375e-03 1.706803776578741e-03 1.702452704937071e-03 + 1.698111397364240e-03 1.693779832633082e-03 1.689457989553302e-03 1.685145846971415e-03 1.680843383770689e-03 + 1.676550578871052e-03 1.672267411229053e-03 1.667993859837768e-03 1.663729903726738e-03 1.659475521961914e-03 + 1.655230693645565e-03 1.650995397916243e-03 1.646769613948668e-03 1.642553320953695e-03 1.638346498178252e-03 + 1.634149124905233e-03 1.629961180453462e-03 1.625782644177617e-03 1.621613495468152e-03 1.617453713751245e-03 + 1.613303278488718e-03 1.609162169177968e-03 1.605030365351908e-03 1.600907846578891e-03 1.596794592462642e-03 + 1.592690582642206e-03 1.588595796791844e-03 1.584510214621009e-03 1.580433815874245e-03 1.576366580331133e-03 + 1.572308487806224e-03 1.568259518148966e-03 1.564219651243634e-03 1.560188867009277e-03 1.556167145399630e-03 + 1.552154466403065e-03 1.548150810042506e-03 1.544156156375373e-03 1.540170485493516e-03 1.536193777523136e-03 + 1.532226012624734e-03 1.528267170993023e-03 1.524317232856873e-03 1.520376178479257e-03 1.516443988157147e-03 + 1.512520642221480e-03 1.508606121037086e-03 1.504700405002599e-03 1.500803474550418e-03 1.496915310146616e-03 + 1.493035892290888e-03 1.489165201516485e-03 1.485303218390133e-03 1.481449923511977e-03 1.477605297515515e-03 + 1.473769321067519e-03 1.469941974867990e-03 1.466123239650068e-03 1.462313096179967e-03 1.458511525256938e-03 + 1.454718507713163e-03 1.450934024413710e-03 1.447158056256463e-03 1.443390584172052e-03 1.439631589123796e-03 + 1.435881052107618e-03 1.432138954151997e-03 1.428405276317896e-03 1.424679999698685e-03 1.420963105420086e-03 + 1.417254574640114e-03 1.413554388548989e-03 1.409862528369083e-03 1.406178975354860e-03 1.402503710792785e-03 + 1.398836716001297e-03 1.395177972330700e-03 1.391527461163134e-03 1.387885163912482e-03 1.384251062024314e-03 + 1.380625136975829e-03 1.377007370275777e-03 1.373397743464392e-03 1.369796238113346e-03 1.366202835825656e-03 + 1.362617518235638e-03 1.359040267008831e-03 1.355471063841936e-03 1.351909890462751e-03 1.348356728630106e-03 + 1.344811560133783e-03 1.341274366794478e-03 1.337745130463710e-03 1.334223833023776e-03 1.330710456387662e-03 + 1.327204982498997e-03 1.323707393331990e-03 1.320217670891348e-03 1.316735797212216e-03 1.313261754360129e-03 + 1.309795524430917e-03 1.306337089550672e-03 1.302886431875659e-03 1.299443533592256e-03 1.296008376916904e-03 + 1.292580944096015e-03 1.289161217405943e-03 1.285749179152886e-03 1.282344811672828e-03 1.278948097331500e-03 + 1.275559018524285e-03 1.272177557676164e-03 1.268803697241659e-03 1.265437419704753e-03 1.262078707578848e-03 + 1.258727543406676e-03 1.255383909760247e-03 1.252047789240794e-03 1.248719164478686e-03 1.245398018133383e-03 + 1.242084332893374e-03 1.238778091476089e-03 1.235479276627864e-03 1.232187871123859e-03 1.228903857767994e-03 + 1.225627219392907e-03 1.222357938859856e-03 1.219095999058684e-03 1.215841382907745e-03 1.212594073353836e-03 + 1.209354053372143e-03 1.206121305966170e-03 1.202895814167675e-03 1.199677561036624e-03 1.196466529661101e-03 + 1.193262703157260e-03 1.190066064669269e-03 1.186876597369226e-03 1.183694284457124e-03 1.180519109160761e-03 + 1.177351054735692e-03 1.174190104465166e-03 1.171036241660058e-03 1.167889449658818e-03 1.164749711827387e-03 + 1.161617011559153e-03 1.158491332274896e-03 1.155372657422697e-03 1.152260970477900e-03 1.149156254943044e-03 + 1.146058494347792e-03 1.142967672248894e-03 1.139883772230089e-03 1.136806777902072e-03 1.133736672902426e-03 + 1.130673440895551e-03 1.127617065572611e-03 1.124567530651477e-03 1.121524819876652e-03 1.118488917019226e-03 + 1.115459805876799e-03 1.112437470273431e-03 1.109421894059581e-03 1.106413061112042e-03 1.103410955333878e-03 + 1.100415560654376e-03 1.097426861028969e-03 1.094444840439192e-03 1.091469482892606e-03 1.088500772422747e-03 + 1.085538693089074e-03 1.082583228976891e-03 1.079634364197295e-03 1.076692082887128e-03 1.073756369208893e-03 + 1.070827207350726e-03 1.067904581526309e-03 1.064988475974817e-03 1.062078874960879e-03 1.059175762774491e-03 + 1.056279123730976e-03 1.053388942170920e-03 1.050505202460106e-03 1.047627888989476e-03 1.044756986175049e-03 + 1.041892478457876e-03 1.039034350303982e-03 1.036182586204304e-03 1.033337170674638e-03 1.030498088255578e-03 + 1.027665323512456e-03 1.024838861035294e-03 1.022018685438738e-03 1.019204781362003e-03 1.016397133468828e-03 + 1.013595726447394e-03 1.010800545010297e-03 1.008011573894470e-03 1.005228797861136e-03 1.002452201695755e-03 + 9.996817702079591e-04 9.969174882315031e-04 9.941593406242138e-04 9.914073122679219e-04 9.886613880684206e-04 + 9.859215529554011e-04 9.831877918823979e-04 9.804600898267509e-04 9.777384317895251e-04 9.750228027954779e-04 + 9.723131878929931e-04 9.696095721540308e-04 9.669119406740836e-04 9.642202785721025e-04 9.615345709904628e-04 + 9.588548030949057e-04 9.561809600744811e-04 9.535130271415005e-04 9.508509895314854e-04 9.481948325031062e-04 + 9.455445413381496e-04 9.429001013414459e-04 9.402614978408295e-04 9.376287161870898e-04 9.350017417539094e-04 + 9.323805599378314e-04 9.297651561581924e-04 9.271555158570741e-04 9.245516244992735e-04 9.219534675722257e-04 + 9.193610305859729e-04 9.167742990731131e-04 9.141932585887439e-04 9.116178947104276e-04 9.090481930381289e-04 + 9.064841391941748e-04 9.039257188232094e-04 9.013729175921408e-04 8.988257211900963e-04 8.962841153283848e-04 + 8.937480857404345e-04 8.912176181817610e-04 8.886926984299131e-04 8.861733122844320e-04 8.836594455668119e-04 + 8.811510841204358e-04 8.786482138105597e-04 8.761508205242484e-04 8.736588901703345e-04 8.711724086793855e-04 + 8.686913620036491e-04 8.662157361170182e-04 8.637455170149924e-04 8.612806907146226e-04 8.588212432544880e-04 + 8.563671606946371e-04 8.539184291165609e-04 8.514750346231535e-04 8.490369633386603e-04 8.466042014086459e-04 + 8.441767349999642e-04 8.417545503007019e-04 8.393376335201616e-04 8.369259708888062e-04 8.345195486582270e-04 + 8.321183531011220e-04 8.297223705112365e-04 8.273315872033428e-04 8.249459895132038e-04 8.225655637975308e-04 + 8.201902964339641e-04 8.178201738210238e-04 8.154551823780817e-04 8.130953085453365e-04 8.107405387837729e-04 + 8.083908595751301e-04 8.060462574218848e-04 8.037067188471956e-04 8.013722303949032e-04 7.990427786294723e-04 + 7.967183501359861e-04 7.943989315201051e-04 7.920845094080408e-04 7.897750704465403e-04 7.874706013028433e-04 + 7.851710886646647e-04 7.828765192401741e-04 7.805868797579635e-04 7.783021569670245e-04 7.760223376367352e-04 + 7.737474085568220e-04 7.714773565373522e-04 7.692121684087006e-04 7.669518310215403e-04 7.646963312468176e-04 + 7.624456559757314e-04 7.601997921197144e-04 7.579587266104277e-04 7.557224463997258e-04 7.534909384596541e-04 + 7.512641897824264e-04 7.490421873804107e-04 7.468249182861257e-04 7.446123695522144e-04 7.424045282514359e-04 + 7.402013814766621e-04 7.380029163408529e-04 7.358091199770648e-04 7.336199795384232e-04 7.314354821981238e-04 + 7.292556151494339e-04 7.270803656056673e-04 7.249097208001975e-04 7.227436679864377e-04 7.205821944378479e-04 + 7.184252874479333e-04 7.162729343302359e-04 7.141251224183327e-04 7.119818390658497e-04 7.098430716464428e-04 + 7.077088075538251e-04 7.055790342017453e-04 7.034537390240080e-04 7.013329094744767e-04 6.992165330270747e-04 + 6.971045971757988e-04 6.949970894347307e-04 6.928939973380295e-04 6.907953084399711e-04 6.887010103149309e-04 + 6.866110905574200e-04 6.845255367820862e-04 6.824443366237339e-04 6.803674777373396e-04 6.782949477980766e-04 + 6.762267345013232e-04 6.741628255626918e-04 6.721032087180440e-04 6.700478717235213e-04 6.679968023555647e-04 + 6.659499884109389e-04 6.639074177067609e-04 6.618690780805346e-04 6.598349573901659e-04 6.578050435140120e-04 + 6.557793243508975e-04 6.537577878201559e-04 6.517404218616691e-04 6.497272144358936e-04 6.477181535239088e-04 + 6.457132271274497e-04 6.437124232689478e-04 6.417157299915893e-04 6.397231353593320e-04 6.377346274569761e-04 + 6.357501943901975e-04 6.337698242856013e-04 6.317935052907774e-04 6.298212255743453e-04 6.278529733260034e-04 + 6.258887367566057e-04 6.239285040981976e-04 6.219722636040842e-04 6.200200035488922e-04 6.180717122286284e-04 + 6.161273779607526e-04 6.141869890842305e-04 6.122505339596137e-04 6.103180009691072e-04 6.083893785166364e-04 + 6.064646550279245e-04 6.045438189505729e-04 6.026268587541292e-04 6.007137629301755e-04 5.988045199924053e-04 + 5.968991184767083e-04 5.949975469412629e-04 5.930997939666093e-04 5.912058481557512e-04 5.893156981342519e-04 + 5.874293325503146e-04 5.855467400748898e-04 5.836679094017699e-04 5.817928292476901e-04 5.799214883524362e-04 + 5.780538754789433e-04 5.761899794134093e-04 5.743297889654003e-04 5.724732929679649e-04 5.706204802777561e-04 + 5.687713397751366e-04 5.669258603643061e-04 5.650840309734229e-04 5.632458405547263e-04 5.614112780846698e-04 + 5.595803325640424e-04 5.577529930181042e-04 5.559292484967302e-04 5.541090880745339e-04 5.522925008510161e-04 + 5.504794759507094e-04 5.486700025233169e-04 5.468640697438700e-04 5.450616668128722e-04 5.432627829564542e-04 + 5.414674074265372e-04 5.396755295009874e-04 5.378871384837769e-04 5.361022237051602e-04 5.343207745218290e-04 + 5.325427803170940e-04 5.307682305010555e-04 5.289971145107831e-04 5.272294218104964e-04 5.254651418917475e-04 + 5.237042642736141e-04 5.219467785028798e-04 5.201926741542382e-04 5.184419408304840e-04 5.166945681627146e-04 + 5.149505458105326e-04 5.132098634622606e-04 5.114725108351385e-04 5.097384776755481e-04 5.080077537592228e-04 + 5.062803288914737e-04 5.045561929074159e-04 5.028353356721876e-04 5.011177470811844e-04 4.994034170603047e-04 + 4.976923355661730e-04 4.959844925863925e-04 4.942798781397872e-04 4.925784822766497e-04 4.908802950790036e-04 + 4.891853066608515e-04 4.874935071684372e-04 4.858048867805191e-04 4.841194357086268e-04 4.824371441973486e-04 + 4.807580025245945e-04 4.790820010018851e-04 4.774091299746367e-04 4.757393798224453e-04 4.740727409593847e-04 + 4.724092038343067e-04 4.707487589311287e-04 4.690913967691593e-04 4.674371079033913e-04 4.657858829248238e-04 + 4.641377124607833e-04 4.624925871752355e-04 4.608504977691301e-04 4.592114349807130e-04 4.575753895858758e-04 + 4.559423523984933e-04 4.543123142707647e-04 4.526852660935651e-04 4.510611987968056e-04 4.494401033497811e-04 + 4.478219707615415e-04 4.462067920812565e-04 4.445945583985878e-04 4.429852608440723e-04 4.413788905894909e-04 + 4.397754388482678e-04 4.381748968758605e-04 4.365772559701472e-04 4.349825074718372e-04 4.333906427648717e-04 + 4.318016532768348e-04 4.302155304793766e-04 4.286322658886204e-04 4.270518510655989e-04 4.254742776166819e-04 + 4.238995371940074e-04 4.223276214959323e-04 4.207585222674663e-04 4.191922313007252e-04 4.176287404353971e-04 + 4.160680415591867e-04 4.145101266082952e-04 4.129549875678805e-04 4.114026164725374e-04 4.098530054067845e-04 + 4.083061465055390e-04 4.067620319546178e-04 4.052206539912290e-04 4.036820049044735e-04 4.021460770358587e-04 + 4.006128627798014e-04 3.990823545841480e-04 3.975545449507041e-04 3.960294264357513e-04 3.945069916505877e-04 + 3.929872332620658e-04 3.914701439931301e-04 3.899557166233749e-04 3.884439439895897e-04 3.869348189863217e-04 + 3.854283345664438e-04 3.839244837417184e-04 3.824232595833719e-04 3.809246552226824e-04 3.794286638515561e-04 + 3.779352787231212e-04 3.764444931523244e-04 3.749563005165273e-04 3.734706942561186e-04 3.719876678751189e-04 + 3.705072149417957e-04 3.690293290892928e-04 3.675540040162453e-04 3.660812334874208e-04 3.646110113343426e-04 + 3.631433314559429e-04 3.616781878192023e-04 3.602155744597983e-04 3.587554854827668e-04 3.572979150631556e-04 + 3.558428574466919e-04 3.543903069504545e-04 3.529402579635412e-04 3.514927049477530e-04 3.500476424382762e-04 + 3.486050650443656e-04 3.471649674500453e-04 3.457273444147953e-04 3.442921907742554e-04 3.428595014409353e-04 + 3.414292714049160e-04 3.400014957345659e-04 3.385761695772595e-04 3.371532881600925e-04 3.357328467906162e-04 + 3.343148408575550e-04 3.328992658315439e-04 3.314861172658666e-04 3.300753907971889e-04 3.286670821463027e-04 + 3.272611871188764e-04 3.258577016061956e-04 3.244566215859224e-04 3.230579431228430e-04 3.216616623696310e-04 + 3.202677755676063e-04 3.188762790474943e-04 3.174871692301936e-04 3.161004426275463e-04 3.147160958431003e-04 + 3.133341255728874e-04 3.119545286061938e-04 3.105773018263326e-04 3.092024422114276e-04 3.078299468351838e-04 + 3.064598128676706e-04 3.050920375761001e-04 3.037266183256079e-04 3.023635525800407e-04 3.010028379027304e-04 + 2.996444719572770e-04 2.982884525083430e-04 2.969347774224196e-04 2.955834446686244e-04 2.942344523194696e-04 + 2.928877985516537e-04 2.915434816468392e-04 2.902014999924286e-04 2.888618520823453e-04 2.875245365178105e-04 + 2.861895520081152e-04 2.848568973713967e-04 2.835265715354048e-04 2.821985735382700e-04 2.808729025292733e-04 + 2.795495577696008e-04 2.782285386331062e-04 2.769098446070698e-04 2.755934752929379e-04 2.742794304070834e-04 + 2.729677097815383e-04 2.716583133647338e-04 2.703512412222365e-04 2.690464935374709e-04 2.677440706124452e-04 + 2.664439728684624e-04 2.651462008468317e-04 2.638507552095744e-04 2.625576367401134e-04 2.612668463439645e-04 + 2.599783850494211e-04 2.586922540082174e-04 2.574084544962027e-04 2.561269879139908e-04 2.548478557876067e-04 + 2.535710597691303e-04 2.522966016373122e-04 2.510244832982002e-04 2.497547067857432e-04 2.484872742623838e-04 + 2.472221880196457e-04 2.459594504787025e-04 2.446990641909397e-04 2.434410318385041e-04 2.421853562348324e-04 + 2.409320403251750e-04 2.396810871871055e-04 2.384325000310062e-04 2.371862822005542e-04 2.359424371731765e-04 + 2.347009685604991e-04 2.334618801087803e-04 2.322251756993212e-04 2.309908593488626e-04 2.297589352099681e-04 + 2.285294075713796e-04 2.273022808583668e-04 2.260775596330450e-04 2.248552485946826e-04 2.236353525799866e-04 + 2.224178765633630e-04 2.212028256571659e-04 2.199902051119119e-04 2.187800203164854e-04 2.175722767983152e-04 + 2.163669802235265e-04 2.151641363970733e-04 2.139637512628501e-04 2.127658309037655e-04 2.115703815418088e-04 + 2.103774095380756e-04 2.091869213927782e-04 2.079989237452251e-04 2.068134233737715e-04 2.056304271957448e-04 + 2.044499422673467e-04 2.032719757835135e-04 2.020965350777630e-04 2.009236276219990e-04 1.997532610262938e-04 + 1.985854430386384e-04 1.974201815446564e-04 1.962574845672917e-04 1.950973602664664e-04 1.939398169386941e-04 + 1.927848630166776e-04 1.916325070688546e-04 1.904827577989203e-04 1.893356240453173e-04 1.881911147806796e-04 + 1.870492391112484e-04 1.859100062762542e-04 1.847734256472526e-04 1.836395067274333e-04 1.825082591508841e-04 + 1.813796926818193e-04 1.802538172137731e-04 1.791306427687452e-04 1.780101794963195e-04 1.768924376727294e-04 + 1.757774276998909e-04 1.746651601043975e-04 1.735556455364648e-04 1.724488947688391e-04 1.713449186956687e-04 + 1.702437283313192e-04 1.691453348091648e-04 1.680497493803179e-04 1.669569834123269e-04 1.658670483878313e-04 + 1.647799559031625e-04 1.636957176669092e-04 1.626143454984393e-04 1.615358513263660e-04 1.604602471869836e-04 + 1.593875452226438e-04 1.583177576800956e-04 1.572508969087797e-04 1.561869753590675e-04 1.551260055804629e-04 + 1.540680002197587e-04 1.530129720191348e-04 1.519609338142261e-04 1.509118985321265e-04 1.498658791893602e-04 + 1.488228888898014e-04 1.477829408225389e-04 1.467460482597098e-04 1.457122245542688e-04 1.446814831377229e-04 + 1.436538375178170e-04 1.426293012761641e-04 1.416078880658399e-04 1.405896116089245e-04 1.395744856939964e-04 + 1.385625241735868e-04 1.375537409615780e-04 1.365481500305607e-04 1.355457654091519e-04 1.345466011792512e-04 + 1.335506714732667e-04 1.325579904712906e-04 1.315685723982243e-04 1.305824315208711e-04 1.295995821449722e-04 + 1.286200386122076e-04 1.276438152971529e-04 1.266709266041871e-04 1.257013869643660e-04 1.247352108322515e-04 + 1.237724126826950e-04 1.228130070075879e-04 1.218570083125657e-04 1.209044311136757e-04 1.199552899340088e-04 + 1.190095993002848e-04 1.180673737394097e-04 1.171286277749934e-04 1.161933759238266e-04 1.152616326923324e-04 + 1.143334125729736e-04 1.134087300406355e-04 1.124875995489718e-04 1.115700355267187e-04 1.106560523739818e-04 + 1.097456644584901e-04 1.088388861118238e-04 1.079357316256163e-04 1.070362152477246e-04 1.061403511783777e-04 + 1.052481535663063e-04 1.043596365048368e-04 1.034748140279784e-04 1.025937001064761e-04 1.017163086438544e-04 + 1.008426534724414e-04 9.997274834936866e-05 9.910660695256547e-05 9.824424287673517e-05 9.738566962931541e-05 + 9.653090062643459e-05 9.567994918885018e-05 9.483282853788458e-05 9.398955179135359e-05 9.315013195948445e-05 + 9.231458194083502e-05 9.148291451821221e-05 9.065514235457830e-05 8.983127798897465e-05 8.901133383243232e-05 + 8.819532216389478e-05 8.738325512614660e-05 8.657514472174283e-05 8.577100280895282e-05 8.497084109771503e-05 + 8.417467114559572e-05 8.338250435377364e-05 8.259435196302730e-05 8.181022504974917e-05 8.103013452197552e-05 + 8.025409111543239e-05 7.948210538961181e-05 7.871418772386426e-05 7.795034831352150e-05 7.719059716604785e-05 + 7.643494409721332e-05 7.568339872730578e-05 7.493597047737353e-05 7.419266856549716e-05 7.345350200310578e-05 + 7.271847959132284e-05 7.198760991735673e-05 7.126090135093370e-05 7.053836204076654e-05 6.981999991107502e-05 + 6.910582265815076e-05 6.839583774696692e-05 6.769005240784333e-05 6.698847363315635e-05 6.629110817410565e-05 + 6.559796253753766e-05 6.490904298281823e-05 6.422435551876905e-05 6.354390590066264e-05 6.286769962727383e-05 + 6.219574193800043e-05 6.152803781004032e-05 6.086459195563986e-05 6.020540881940740e-05 5.955049257569118e-05 + 5.889984712603448e-05 5.825347609669282e-05 5.761138283622993e-05 5.697357041318637e-05 5.634004161381888e-05 + 5.571079893992013e-05 5.508584460671579e-05 5.446518054083443e-05 5.384880837836585e-05 5.323672946299121e-05 + 5.262894484420010e-05 5.202545527559055e-05 5.142626121324820e-05 5.083136281421434e-05 5.024075993503921e-05 + 4.965445213041716e-05 4.907243865191547e-05 4.849471844678477e-05 4.792129015686161e-05 4.735215211756121e-05 + 4.678730235695511e-05 4.622673859494350e-05 4.567045824251898e-05 4.511845840111642e-05 4.457073586206156e-05 + 4.402728710610508e-05 4.348810830305398e-05 4.295319531149510e-05 4.242254367860773e-05 4.189614864007389e-05 + 4.137400512008104e-05 4.085610773141445e-05 4.034245077564941e-05 3.983302824342958e-05 3.932783381484373e-05 + 3.882686085989520e-05 3.833010243906019e-05 3.783755130394494e-05 3.734919989802954e-05 3.686504035750698e-05 + 3.638506451221525e-05 3.590926388665614e-05 3.543762970110884e-05 3.497015287283352e-05 3.450682401736136e-05 + 3.404763344987884e-05 3.359257118669495e-05 3.314162694679995e-05 3.269479015351089e-05 3.225204993620033e-05 + 3.181339513211309e-05 3.137881428826766e-05 3.094829566343765e-05 3.052182723022056e-05 3.009939667718319e-05 + 2.968099141109031e-05 2.926659855921328e-05 2.885620497171300e-05 2.844979722410323e-05 2.804736161978962e-05 + 2.764888419267947e-05 2.725435070986982e-05 2.686374667440253e-05 2.647705732809277e-05 2.609426765442674e-05 + 2.571536238152390e-05 2.534032598516852e-05 2.496914269190540e-05 2.460179648219627e-05 2.423827109364181e-05 + 2.387855002425940e-05 2.352261653582234e-05 2.317045365725579e-05 2.282204418808512e-05 2.247737070194190e-05 + 2.213641555011767e-05 2.179916086517057e-05 2.146558856458067e-05 2.113568035444908e-05 2.080941773324508e-05 + 2.048678199559587e-05 2.016775423611574e-05 1.985231535327859e-05 1.954044605332434e-05 1.923212685420430e-05 + 1.892733808956078e-05 1.862605991273695e-05 1.832827230081971e-05 1.803395505871150e-05 1.774308782322672e-05 + 1.745565006721707e-05 1.717162110371697e-05 1.689098009011289e-05 1.661370603233248e-05 1.633977778905005e-05 + 1.606917407591017e-05 1.580187346976573e-05 1.553785441292676e-05 1.527709521742333e-05 1.501957406927455e-05 + 1.476526903276718e-05 1.451415805473996e-05 1.426621896886990e-05 1.402142949996386e-05 1.377976726824817e-05 + 1.354120979365865e-05 1.330573450012840e-05 1.307331871986934e-05 1.284393969764941e-05 1.261757459506268e-05 + 1.239420049478802e-05 1.217379440484011e-05 1.195633326280557e-05 1.174179394006714e-05 1.153015324601260e-05 + 1.132138793222567e-05 1.111547469666021e-05 1.091239018779498e-05 1.071211100876603e-05 1.051461372147913e-05 + 1.031987485069629e-05 1.012787088809916e-05 9.938578296326043e-06 9.751973512980472e-06 9.568032954612371e-06 + 9.386733020669547e-06 9.208050097416654e-06 9.031960561824616e-06 8.858440785424383e-06 8.687467138128244e-06 + 8.519015992015672e-06 8.353063725081848e-06 8.189586724950208e-06 8.028561392546748e-06 7.869964145734144e-06 + 7.713771422907741e-06 7.559959686548994e-06 7.408505426738554e-06 7.259385164627063e-06 7.112575455861534e-06 + 6.968052893969842e-06 6.825794113698912e-06 6.685775794308924e-06 6.547974662821824e-06 6.412367497222283e-06 + 6.278931129613094e-06 6.147642449322814e-06 6.018478405964542e-06 5.891416012447914e-06 5.766432347940673e-06 + 5.643504560782077e-06 5.522609871346635e-06 5.403725574857077e-06 5.286829044147916e-06 5.171897732378419e-06 + 5.058909175693897e-06 4.947840995837334e-06 4.838670902708373e-06 4.731376696871797e-06 4.625936272014513e-06 + 4.522327617349994e-06 4.420528819971782e-06 4.320518067155093e-06 4.222273648605747e-06 4.125773958658428e-06 + 4.030997498421807e-06 3.937922877872627e-06 3.846528817897944e-06 3.756794152284902e-06 3.668697829659997e-06 + 3.582218915375677e-06 3.497336593346376e-06 3.414030167833259e-06 3.332279065177400e-06 3.252062835482698e-06 + 3.173361154248255e-06 3.096153823949667e-06 3.020420775571329e-06 2.946142070087850e-06 2.873297899896671e-06 + 2.801868590201445e-06 2.731834600346031e-06 2.663176525100491e-06 2.595875095898964e-06 2.529911182029116e-06 + 2.465265791775111e-06 2.401920073512739e-06 2.339855316758546e-06 2.279052953172751e-06 2.219494557516089e-06 + 2.161161848561799e-06 2.104036689962893e-06 2.048101091074562e-06 1.993337207733550e-06 1.939727342993457e-06 + 1.887253947817708e-06 1.835899621730212e-06 1.785647113423813e-06 1.736479321327926e-06 1.688379294135400e-06 + 1.641330231288832e-06 1.595315483427832e-06 1.550318552796643e-06 1.506323093613627e-06 1.463312912402804e-06 + 1.421271968287653e-06 1.380184373248645e-06 1.340034392344034e-06 1.300806443895344e-06 1.262485099637813e-06 + 1.225055084836039e-06 1.188501278366089e-06 1.152808712764265e-06 1.117962574242909e-06 1.083948202674529e-06 + 1.050751091543994e-06 1.018356887870114e-06 9.867513920968653e-07 9.559205579547005e-07 9.258504922929371e-07 + 8.965274548836271e-07 8.679378581972364e-07 8.400682671513345e-07 8.129053988321868e-07 7.864361221904069e-07 + 7.606474577110100e-07 7.355265770582774e-07 7.110608026964081e-07 6.872376074863144e-07 6.640446142589491e-07 + 6.414695953662352e-07 6.195004722095921e-07 5.981253147470748e-07 5.773323409795099e-07 5.571099164160332e-07 + 5.374465535198827e-07 5.183309111348450e-07 4.997517938927376e-07 4.816981516028571e-07 4.641590786234663e-07 + 4.471238132162180e-07 4.305817368839108e-07 4.145223736919136e-07 3.989353895741610e-07 3.838105916237865e-07 + 3.691379273692475e-07 3.549074840362857e-07 3.411094877961157e-07 3.277343030005419e-07 3.147724314043560e-07 + 3.022145113754031e-07 2.900513170930214e-07 2.782737577350204e-07 2.668728766538939e-07 2.558398505426128e-07 + 2.451659885903532e-07 2.348427316287615e-07 2.248616512690930e-07 2.152144490305612e-07 2.058929554605210e-07 + 1.968891292466452e-07 1.881950563216890e-07 1.798029489611610e-07 1.717051448742153e-07 1.638941062882806e-07 + 1.563624190277244e-07 1.491027915868600e-07 1.421080541978123e-07 1.353711578934072e-07 1.288851735655833e-07 + 1.226432910195998e-07 1.166388180243241e-07 1.108651793590512e-07 1.053159158570257e-07 9.998468344609899e-08 + 9.486525218677497e-08 8.995150530790842e-08 8.523743824042736e-08 8.071715764932013e-08 7.638488046413408e-08 + 7.223493290835025e-08 6.826174952779308e-08 6.445987221842320e-08 6.082394925372990e-08 5.734873431194653e-08 + 5.402908550338636e-08 5.085996439810271e-08 4.783643505408042e-08 4.495366304624628e-08 4.220691449643992e-08 + 3.959155510461912e-08 3.710304918147942e-08 3.473695868267070e-08 3.248894224484316e-08 3.035475422369135e-08 + 2.833024373416266e-08 2.641135369305261e-08 2.459411986410664e-08 2.287466990583917e-08 2.124922242221163e-08 + 1.971408601631660e-08 1.826565834724324e-08 1.690042519025680e-08 1.561495950042311e-08 1.440592047984212e-08 + 1.327005264858940e-08 1.220418491951834e-08 1.120522967703349e-08 1.027018185994446e-08 9.396118048534208e-09 + 8.580195555924395e-09 7.819651523861899e-09 7.111802023016270e-09 6.454041157878717e-09 5.843840176364124e-09 + 5.278746584195627e-09 4.756383264150572e-09 4.274447600257207e-09 3.830710607002911e-09 3.423016063635163e-09 + 3.049279653616837e-09 2.707488109296194e-09 2.395698361856508e-09 2.112036696597026e-09 1.854697913595365e-09 + 1.621944493805400e-09 1.412105770628677e-09 1.223577107006488e-09 1.054819078068198e-09 9.043566593699515e-10 + 7.707784207582635e-10 6.527357258855351e-10 5.489419374025072e-10 4.581716278528005e-10 3.792597962865099e-10 + 3.111010906120930e-10 2.526490356996466e-10 2.029152672467338e-10 1.609687714165102e-10 1.259351302536631e-10 + 9.699577288161152e-11 7.338723248282899e-11 5.440040906012058e-11 3.937983797582400e-11 2.772296426258365e-11 + 1.887942269738662e-11 1.235032362860542e-11 7.687544543101969e-12 4.493027358840057e-12 2.418081426072236e-12 + 1.162692218286942e-12 4.748356921798243e-13 1.497982939327985e-13 2.950258728058308e-14 1.838477039278279e-15 + 1.637411226950052e+00 1.636031906349800e+00 1.634653057788334e+00 1.633274682031054e+00 1.631896779842106e+00 + 1.630519351984404e+00 1.629142399219601e+00 1.627765922308133e+00 1.626389922009179e+00 1.625014399080659e+00 + 1.623639354279265e+00 1.622264788360453e+00 1.620890702078400e+00 1.619517096186064e+00 1.618143971435149e+00 + 1.616771328576127e+00 1.615399168358205e+00 1.614027491529341e+00 1.612656298836264e+00 1.611285591024459e+00 + 1.609915368838130e+00 1.608545633020264e+00 1.607176384312610e+00 1.605807623455630e+00 1.604439351188578e+00 + 1.603071568249430e+00 1.601704275374933e+00 1.600337473300579e+00 1.598971162760620e+00 1.597605344488042e+00 + 1.596240019214590e+00 1.594875187670765e+00 1.593510850585818e+00 1.592147008687743e+00 1.590783662703295e+00 + 1.589420813357984e+00 1.588058461376040e+00 1.586696607480464e+00 1.585335252393024e+00 1.583974396834204e+00 + 1.582614041523265e+00 1.581254187178199e+00 1.579894834515759e+00 1.578535984251441e+00 1.577177637099484e+00 + 1.575819793772898e+00 1.574462454983416e+00 1.573105621441532e+00 1.571749293856505e+00 1.570393472936302e+00 + 1.569038159387668e+00 1.567683353916094e+00 1.566329057225817e+00 1.564975270019825e+00 1.563621992999830e+00 + 1.562269226866323e+00 1.560916972318530e+00 1.559565230054428e+00 1.558214000770727e+00 1.556863285162908e+00 + 1.555513083925185e+00 1.554163397750515e+00 1.552814227330616e+00 1.551465573355948e+00 1.550117436515704e+00 + 1.548769817497840e+00 1.547422716989063e+00 1.546076135674802e+00 1.544730074239269e+00 1.543384533365398e+00 + 1.542039513734856e+00 1.540695016028101e+00 1.539351040924293e+00 1.538007589101356e+00 1.536664661235985e+00 + 1.535322258003567e+00 1.533980380078283e+00 1.532639028133042e+00 1.531298202839501e+00 1.529957904868055e+00 + 1.528618134887863e+00 1.527278893566806e+00 1.525940181571536e+00 1.524601999567439e+00 1.523264348218643e+00 + 1.521927228188036e+00 1.520590640137232e+00 1.519254584726615e+00 1.517919062615281e+00 1.516584074461117e+00 + 1.515249620920717e+00 1.513915702649432e+00 1.512582320301378e+00 1.511249474529393e+00 1.509917165985066e+00 + 1.508585395318740e+00 1.507254163179498e+00 1.505923470215178e+00 1.504593317072348e+00 1.503263704396329e+00 + 1.501934632831194e+00 1.500606103019750e+00 1.499278115603573e+00 1.497950671222953e+00 1.496623770516953e+00 + 1.495297414123367e+00 1.493971602678752e+00 1.492646336818377e+00 1.491321617176292e+00 1.489997444385281e+00 + 1.488673819076880e+00 1.487350741881356e+00 1.486028213427729e+00 1.484706234343782e+00 1.483384805256019e+00 + 1.482063926789707e+00 1.480743599568865e+00 1.479423824216234e+00 1.478104601353317e+00 1.476785931600370e+00 + 1.475467815576392e+00 1.474150253899121e+00 1.472833247185061e+00 1.471516796049425e+00 1.470200901106222e+00 + 1.468885562968169e+00 1.467570782246758e+00 1.466256559552203e+00 1.464942895493489e+00 1.463629790678345e+00 + 1.462317245713219e+00 1.461005261203346e+00 1.459693837752699e+00 1.458382975963975e+00 1.457072676438644e+00 + 1.455762939776927e+00 1.454453766577767e+00 1.453145157438869e+00 1.451837112956714e+00 1.450529633726489e+00 + 1.449222720342158e+00 1.447916373396406e+00 1.446610593480709e+00 1.445305381185257e+00 1.444000737098990e+00 + 1.442696661809634e+00 1.441393155903622e+00 1.440090219966154e+00 1.438787854581190e+00 1.437486060331422e+00 + 1.436184837798305e+00 1.434884187562036e+00 1.433584110201574e+00 1.432284606294610e+00 1.430985676417599e+00 + 1.429687321145755e+00 1.428389541053028e+00 1.427092336712117e+00 1.425795708694494e+00 1.424499657570356e+00 + 1.423204183908668e+00 1.421909288277149e+00 1.420614971242262e+00 1.419321233369230e+00 1.418028075222018e+00 + 1.416735497363345e+00 1.415443500354701e+00 1.414152084756298e+00 1.412861251127132e+00 1.411571000024939e+00 + 1.410281332006209e+00 1.408992247626182e+00 1.407703747438863e+00 1.406415831996996e+00 1.405128501852091e+00 + 1.403841757554408e+00 1.402555599652978e+00 1.401270028695548e+00 1.399985045228673e+00 1.398700649797612e+00 + 1.397416842946428e+00 1.396133625217893e+00 1.394850997153574e+00 1.393568959293758e+00 1.392287512177535e+00 + 1.391006656342719e+00 1.389726392325873e+00 1.388446720662355e+00 1.387167641886243e+00 1.385889156530399e+00 + 1.384611265126426e+00 1.383333968204690e+00 1.382057266294319e+00 1.380781159923203e+00 1.379505649617994e+00 + 1.378230735904076e+00 1.376956419305637e+00 1.375682700345576e+00 1.374409579545593e+00 1.373137057426132e+00 + 1.371865134506398e+00 1.370593811304350e+00 1.369323088336727e+00 1.368052966119001e+00 1.366783445165447e+00 + 1.365514525989052e+00 1.364246209101613e+00 1.362978495013662e+00 1.361711384234493e+00 1.360444877272180e+00 + 1.359178974633552e+00 1.357913676824188e+00 1.356648984348459e+00 1.355384897709471e+00 1.354121417409130e+00 + 1.352858543948064e+00 1.351596277825704e+00 1.350334619540223e+00 1.349073569588566e+00 1.347813128466461e+00 + 1.346553296668387e+00 1.345294074687576e+00 1.344035463016052e+00 1.342777462144590e+00 1.341520072562751e+00 + 1.340263294758853e+00 1.339007129219971e+00 1.337751576431977e+00 1.336496636879481e+00 1.335242311045890e+00 + 1.333988599413358e+00 1.332735502462816e+00 1.331483020673992e+00 1.330231154525344e+00 1.328979904494120e+00 + 1.327729271056335e+00 1.326479254686793e+00 1.325229855859059e+00 1.323981075045455e+00 1.322732912717099e+00 + 1.321485369343868e+00 1.320238445394424e+00 1.318992141336197e+00 1.317746457635386e+00 1.316501394756984e+00 + 1.315256953164734e+00 1.314013133321173e+00 1.312769935687601e+00 1.311527360724106e+00 1.310285408889543e+00 + 1.309044080641558e+00 1.307803376436556e+00 1.306563296729748e+00 1.305323841975075e+00 1.304085012625311e+00 + 1.302846809131983e+00 1.301609231945378e+00 1.300372281514607e+00 1.299135958287533e+00 1.297900262710800e+00 + 1.296665195229835e+00 1.295430756288858e+00 1.294196946330868e+00 1.292963765797621e+00 1.291731215129691e+00 + 1.290499294766417e+00 1.289268005145928e+00 1.288037346705115e+00 1.286807319879695e+00 1.285577925104142e+00 + 1.284349162811706e+00 1.283121033434457e+00 1.281893537403209e+00 1.280666675147605e+00 1.279440447096034e+00 + 1.278214853675714e+00 1.276989895312608e+00 1.275765572431509e+00 1.274541885455963e+00 1.273318834808338e+00 + 1.272096420909763e+00 1.270874644180162e+00 1.269653505038279e+00 1.268433003901601e+00 1.267213141186455e+00 + 1.265993917307924e+00 1.264775332679890e+00 1.263557387715048e+00 1.262340082824866e+00 1.261123418419613e+00 + 1.259907394908352e+00 1.258692012698945e+00 1.257477272198039e+00 1.256263173811081e+00 1.255049717942313e+00 + 1.253836904994787e+00 1.252624735370336e+00 1.251413209469588e+00 1.250202327691992e+00 1.248992090435768e+00 + 1.247782498097959e+00 1.246573551074382e+00 1.245365249759682e+00 1.244157594547280e+00 1.242950585829417e+00 + 1.241744223997117e+00 1.240538509440227e+00 1.239333442547393e+00 1.238129023706036e+00 1.236925253302418e+00 + 1.235722131721585e+00 1.234519659347382e+00 1.233317836562487e+00 1.232116663748353e+00 1.230916141285261e+00 + 1.229716269552277e+00 1.228517048927289e+00 1.227318479786994e+00 1.226120562506895e+00 1.224923297461305e+00 + 1.223726685023331e+00 1.222530725564919e+00 1.221335419456789e+00 1.220140767068504e+00 1.218946768768438e+00 + 1.217753424923737e+00 1.216560735900410e+00 1.215368702063246e+00 1.214177323775868e+00 1.212986601400692e+00 + 1.211796535298973e+00 1.210607125830762e+00 1.209418373354928e+00 1.208230278229165e+00 1.207042840809989e+00 + 1.205856061452706e+00 1.204669940511476e+00 1.203484478339251e+00 1.202299675287814e+00 1.201115531707771e+00 + 1.199932047948530e+00 1.198749224358340e+00 1.197567061284265e+00 1.196385559072188e+00 1.195204718066825e+00 + 1.194024538611684e+00 1.192845021049147e+00 1.191666165720385e+00 1.190487972965393e+00 1.189310443123009e+00 + 1.188133576530880e+00 1.186957373525507e+00 1.185781834442185e+00 1.184606959615057e+00 1.183432749377081e+00 + 1.182259204060076e+00 1.181086323994643e+00 1.179914109510246e+00 1.178742560935170e+00 1.177571678596544e+00 + 1.176401462820306e+00 1.175231913931248e+00 1.174063032252984e+00 1.172894818107960e+00 1.171727271817474e+00 + 1.170560393701625e+00 1.169394184079387e+00 1.168228643268553e+00 1.167063771585749e+00 1.165899569346434e+00 + 1.164736036864928e+00 1.163573174454374e+00 1.162410982426746e+00 1.161249461092880e+00 1.160088610762436e+00 + 1.158928431743923e+00 1.157768924344685e+00 1.156610088870927e+00 1.155451925627675e+00 1.154294434918809e+00 + 1.153137617047059e+00 1.151981472313989e+00 1.150826001020023e+00 1.149671203464409e+00 1.148517079945276e+00 + 1.147363630759565e+00 1.146210856203089e+00 1.145058756570504e+00 1.143907332155318e+00 1.142756583249880e+00 + 1.141606510145410e+00 1.140457113131954e+00 1.139308392498426e+00 1.138160348532594e+00 1.137012981521088e+00 + 1.135866291749359e+00 1.134720279501761e+00 1.133574945061461e+00 1.132430288710505e+00 1.131286310729794e+00 + 1.130143011399090e+00 1.129000390996996e+00 1.127858449800988e+00 1.126717188087415e+00 1.125576606131466e+00 + 1.124436704207194e+00 1.123297482587523e+00 1.122158941544228e+00 1.121021081347968e+00 1.119883902268232e+00 + 1.118747404573414e+00 1.117611588530747e+00 1.116476454406328e+00 1.115342002465144e+00 1.114208232971036e+00 + 1.113075146186707e+00 1.111942742373729e+00 1.110811021792571e+00 1.109679984702529e+00 1.108549631361805e+00 + 1.107419962027460e+00 1.106290976955429e+00 1.105162676400518e+00 1.104035060616406e+00 1.102908129855662e+00 + 1.101781884369700e+00 1.100656324408844e+00 1.099531450222279e+00 1.098407262058054e+00 1.097283760163130e+00 + 1.096160944783308e+00 1.095038816163303e+00 1.093917374546702e+00 1.092796620175943e+00 1.091676553292395e+00 + 1.090557174136282e+00 1.089438482946698e+00 1.088320479961658e+00 1.087203165418041e+00 1.086086539551597e+00 + 1.084970602596999e+00 1.083855354787780e+00 1.082740796356357e+00 1.081626927534068e+00 1.080513748551103e+00 + 1.079401259636564e+00 1.078289461018445e+00 1.077178352923623e+00 1.076067935577865e+00 1.074958209205841e+00 + 1.073849174031113e+00 1.072740830276135e+00 1.071633178162253e+00 1.070526217909715e+00 1.069419949737671e+00 + 1.068314373864152e+00 1.067209490506112e+00 1.066105299879377e+00 1.065001802198705e+00 1.063898997677714e+00 + 1.062796886528978e+00 1.061695468963908e+00 1.060594745192882e+00 1.059494715425136e+00 1.058395379868838e+00 + 1.057296738731042e+00 1.056198792217720e+00 1.055101540533767e+00 1.054004983882941e+00 1.052909122467960e+00 + 1.051813956490415e+00 1.050719486150831e+00 1.049625711648621e+00 1.048532633182132e+00 1.047440250948613e+00 + 1.046348565144226e+00 1.045257575964051e+00 1.044167283602085e+00 1.043077688251234e+00 1.041988790103326e+00 + 1.040900589349111e+00 1.039813086178243e+00 1.038726280779314e+00 1.037640173339811e+00 1.036554764046183e+00 + 1.035470053083749e+00 1.034386040636792e+00 1.033302726888494e+00 1.032220112020972e+00 1.031138196215273e+00 + 1.030056979651357e+00 1.028976462508116e+00 1.027896644963373e+00 1.026817527193873e+00 1.025739109375303e+00 + 1.024661391682253e+00 1.023584374288273e+00 1.022508057365827e+00 1.021432441086318e+00 1.020357525620085e+00 + 1.019283311136396e+00 1.018209797803450e+00 1.017136985788391e+00 1.016064875257293e+00 1.014993466375182e+00 + 1.013922759305986e+00 1.012852754212625e+00 1.011783451256911e+00 1.010714850599617e+00 1.009646952400460e+00 + 1.008579756818097e+00 1.007513264010127e+00 1.006447474133101e+00 1.005382387342503e+00 1.004318003792757e+00 + 1.003254323637251e+00 1.002191347028324e+00 1.001129074117245e+00 1.000067505054238e+00 9.990066399884867e-01 + 9.979464790681216e-01 9.968870224402149e-01 9.958282702508015e-01 9.947702226448700e-01 9.937128797663605e-01 + 9.926562417581684e-01 9.916003087621491e-01 9.905450809191109e-01 9.894905583688210e-01 9.884367412500075e-01 + 9.873836297003549e-01 9.863312238565132e-01 9.852795238540879e-01 9.842285298276514e-01 9.831782419107389e-01 + 9.821286602358464e-01 9.810797849344380e-01 9.800316161369445e-01 9.789841539727603e-01 9.779373985702500e-01 + 9.768913500567438e-01 9.758460085585459e-01 9.748013742009272e-01 9.737574471081304e-01 9.727142274033723e-01 + 9.716717152088393e-01 9.706299106456946e-01 9.695888138340764e-01 9.685484248930956e-01 9.675087439408417e-01 + 9.664697710943825e-01 9.654315064697624e-01 9.643939501820056e-01 9.633571023451181e-01 9.623209630720845e-01 + 9.612855324748736e-01 9.602508106644340e-01 9.592167977507019e-01 9.581834938425962e-01 9.571508990480220e-01 + 9.561190134738696e-01 9.550878372260180e-01 9.540573704093351e-01 9.530276131276783e-01 9.519985654838922e-01 + 9.509702275798145e-01 9.499425995162768e-01 9.489156813931003e-01 9.478894733091031e-01 9.468639753620941e-01 + 9.458391876488828e-01 9.448151102652727e-01 9.437917433060639e-01 9.427690868650566e-01 9.417471410350493e-01 + 9.407259059078428e-01 9.397053815742373e-01 9.386855681240360e-01 9.376664656460446e-01 9.366480742280739e-01 + 9.356303939569384e-01 9.346134249184591e-01 9.335971671974641e-01 9.325816208777891e-01 9.315667860422785e-01 + 9.305526627727867e-01 9.295392511501777e-01 9.285265512543281e-01 9.275145631641277e-01 9.265032869574776e-01 + 9.254927227112941e-01 9.244828705015097e-01 9.234737304030731e-01 9.224653024899486e-01 9.214575868351202e-01 + 9.204505835105908e-01 9.194442925873830e-01 9.184387141355398e-01 9.174338482241285e-01 9.164296949212357e-01 + 9.154262542939761e-01 9.144235264084847e-01 9.134215113299267e-01 9.124202091224917e-01 9.114196198493950e-01 + 9.104197435728861e-01 9.094205803542386e-01 9.084221302537594e-01 9.074243933307865e-01 9.064273696436902e-01 + 9.054310592498754e-01 9.044354622057784e-01 9.034405785668755e-01 9.024464083876746e-01 9.014529517217246e-01 + 9.004602086216105e-01 8.994681791389586e-01 8.984768633244326e-01 8.974862612277391e-01 8.964963728976282e-01 + 8.955071983818899e-01 8.945187377273618e-01 8.935309909799241e-01 8.925439581845038e-01 8.915576393850758e-01 + 8.905720346246624e-01 8.895871439453347e-01 8.886029673882134e-01 8.876195049934711e-01 8.866367568003338e-01 + 8.856547228470765e-01 8.846734031710306e-01 8.836927978085835e-01 8.827129067951759e-01 8.817337301653075e-01 + 8.807552679525346e-01 8.797775201894729e-01 8.788004869077992e-01 8.778241681382467e-01 8.768485639106163e-01 + 8.758736742537677e-01 8.748994991956263e-01 8.739260387631828e-01 8.729532929824899e-01 8.719812618786719e-01 + 8.710099454759177e-01 8.700393437974878e-01 8.690694568657086e-01 8.681002847019810e-01 8.671318273267754e-01 + 8.661640847596382e-01 8.651970570191840e-01 8.642307441231066e-01 8.632651460881758e-01 8.623002629302348e-01 + 8.613360946642076e-01 8.603726413040956e-01 8.594099028629804e-01 8.584478793530261e-01 8.574865707854751e-01 + 8.565259771706557e-01 8.555660985179794e-01 8.546069348359399e-01 8.536484861321205e-01 8.526907524131909e-01 + 8.517337336849053e-01 8.507774299521114e-01 8.498218412187430e-01 8.488669674878269e-01 8.479128087614820e-01 + 8.469593650409194e-01 8.460066363264447e-01 8.450546226174567e-01 8.441033239124531e-01 8.431527402090283e-01 + 8.422028715038711e-01 8.412537177927730e-01 8.403052790706261e-01 8.393575553314203e-01 8.384105465682505e-01 + 8.374642527733140e-01 8.365186739379120e-01 8.355738100524518e-01 8.346296611064439e-01 8.336862270885106e-01 + 8.327435079863807e-01 8.318015037868898e-01 8.308602144759878e-01 8.299196400387333e-01 8.289797804592995e-01 + 8.280406357209711e-01 8.271022058061477e-01 8.261644906963459e-01 8.252274903721962e-01 8.242912048134499e-01 + 8.233556339989754e-01 8.224207779067589e-01 8.214866365139095e-01 8.205532097966589e-01 8.196204977303596e-01 + 8.186885002894887e-01 8.177572174476472e-01 8.168266491775638e-01 8.158967954510945e-01 8.149676562392182e-01 + 8.140392315120507e-01 8.131115212388301e-01 8.121845253879326e-01 8.112582439268611e-01 8.103326768222548e-01 + 8.094078240398850e-01 8.084836855446609e-01 8.075602613006256e-01 8.066375512709597e-01 8.057155554179852e-01 + 8.047942737031588e-01 8.038737060870838e-01 8.029538525294975e-01 8.020347129892873e-01 8.011162874244790e-01 + 8.001985757922450e-01 7.992815780489045e-01 7.983652941499214e-01 7.974497240499093e-01 7.965348677026295e-01 + 7.956207250609947e-01 7.947072960770665e-01 7.937945807020598e-01 7.928825788863436e-01 7.919712905794390e-01 + 7.910607157300246e-01 7.901508542859329e-01 7.892417061941576e-01 7.883332714008452e-01 7.874255498513054e-01 + 7.865185414900101e-01 7.856122462605885e-01 7.847066641058353e-01 7.838017949677083e-01 7.828976387873290e-01 + 7.819941955049877e-01 7.810914650601365e-01 7.801894473914022e-01 7.792881424365740e-01 7.783875501326160e-01 + 7.774876704156618e-01 7.765885032210167e-01 7.756900484831593e-01 7.747923061357447e-01 7.738952761116007e-01 + 7.729989583427321e-01 7.721033527603236e-01 7.712084592947351e-01 7.703142778755102e-01 7.694208084313687e-01 + 7.685280508902158e-01 7.676360051791388e-01 7.667446712244074e-01 7.658540489514787e-01 7.649641382849937e-01 + 7.640749391487830e-01 7.631864514658649e-01 7.622986751584447e-01 7.614116101479196e-01 7.605252563548796e-01 + 7.596396136991068e-01 7.587546820995754e-01 7.578704614744550e-01 7.569869517411109e-01 7.561041528161087e-01 + 7.552220646152050e-01 7.543406870533618e-01 7.534600200447384e-01 7.525800635026955e-01 7.517008173397954e-01 + 7.508222814678063e-01 7.499444557976980e-01 7.490673402396480e-01 7.481909347030380e-01 7.473152390964596e-01 + 7.464402533277119e-01 7.455659773038036e-01 7.446924109309576e-01 7.438195541146033e-01 7.429474067593865e-01 + 7.420759687691674e-01 7.412052400470204e-01 7.403352204952367e-01 7.394659100153245e-01 7.385973085080106e-01 + 7.377294158732423e-01 7.368622320101857e-01 7.359957568172314e-01 7.351299901919900e-01 7.342649320312976e-01 + 7.334005822312142e-01 7.325369406870272e-01 7.316740072932514e-01 7.308117819436288e-01 7.299502645311305e-01 + 7.290894549479591e-01 7.282293530855477e-01 7.273699588345632e-01 7.265112720849067e-01 7.256532927257104e-01 + 7.247960206453473e-01 7.239394557314253e-01 7.230835978707880e-01 7.222284469495232e-01 7.213740028529538e-01 + 7.205202654656477e-01 7.196672346714147e-01 7.188149103533061e-01 7.179632923936191e-01 7.171123806738980e-01 + 7.162621750749310e-01 7.154126754767575e-01 7.145638817586635e-01 7.137157937991853e-01 7.128684114761125e-01 + 7.120217346664840e-01 7.111757632465932e-01 7.103304970919904e-01 7.094859360774778e-01 7.086420800771165e-01 + 7.077989289642240e-01 7.069564826113784e-01 7.061147408904156e-01 7.052737036724352e-01 7.044333708277962e-01 + 7.035937422261236e-01 7.027548177363039e-01 7.019165972264917e-01 7.010790805641052e-01 7.002422676158337e-01 + 6.994061582476330e-01 6.985707523247289e-01 6.977360497116196e-01 6.969020502720719e-01 6.960687538691304e-01 + 6.952361603651105e-01 6.944042696216044e-01 6.935730814994810e-01 6.927425958588852e-01 6.919128125592414e-01 + 6.910837314592551e-01 6.902553524169101e-01 6.894276752894737e-01 6.886006999334972e-01 6.877744262048131e-01 + 6.869488539585418e-01 6.861239830490892e-01 6.852998133301489e-01 6.844763446547026e-01 6.836535768750205e-01 + 6.828315098426666e-01 6.820101434084949e-01 6.811894774226507e-01 6.803695117345774e-01 6.795502461930102e-01 + 6.787316806459818e-01 6.779138149408228e-01 6.770966489241615e-01 6.762801824419261e-01 6.754644153393453e-01 + 6.746493474609487e-01 6.738349786505716e-01 6.730213087513502e-01 6.722083376057278e-01 6.713960650554526e-01 + 6.705844909415813e-01 6.697736151044781e-01 6.689634373838176e-01 6.681539576185845e-01 6.673451756470746e-01 + 6.665370913068981e-01 6.657297044349774e-01 6.649230148675519e-01 6.641170224401756e-01 6.633117269877205e-01 + 6.625071283443766e-01 6.617032263436535e-01 6.609000208183810e-01 6.600975116007117e-01 6.592956985221207e-01 + 6.584945814134063e-01 6.576941601046911e-01 6.568944344254265e-01 6.560954042043885e-01 6.552970692696822e-01 + 6.544994294487438e-01 6.537024845683368e-01 6.529062344545608e-01 6.521106789328426e-01 6.513158178279470e-01 + 6.505216509639736e-01 6.497281781643566e-01 6.489353992518665e-01 6.481433140486149e-01 6.473519223760511e-01 + 6.465612240549649e-01 6.457712189054885e-01 6.449819067470955e-01 6.441932873986055e-01 6.434053606781801e-01 + 6.426181264033304e-01 6.418315843909113e-01 6.410457344571281e-01 6.402605764175353e-01 6.394761100870375e-01 + 6.386923352798892e-01 6.379092518097015e-01 6.371268594894354e-01 6.363451581314088e-01 6.355641475472962e-01 + 6.347838275481271e-01 6.340041979442921e-01 6.332252585455379e-01 6.324470091609733e-01 6.316694495990686e-01 + 6.308925796676585e-01 6.301163991739377e-01 6.293409079244694e-01 6.285661057251791e-01 6.277919923813637e-01 + 6.270185676976848e-01 6.262458314781745e-01 6.254737835262366e-01 6.247024236446445e-01 6.239317516355453e-01 + 6.231617673004594e-01 6.223924704402825e-01 6.216238608552849e-01 6.208559383451155e-01 6.200887027088013e-01 + 6.193221537447481e-01 6.185562912507417e-01 6.177911150239497e-01 6.170266248609239e-01 6.162628205575960e-01 + 6.154997019092870e-01 6.147372687107010e-01 6.139755207559282e-01 6.132144578384504e-01 6.124540797511364e-01 + 6.116943862862451e-01 6.109353772354286e-01 6.101770523897286e-01 6.094194115395836e-01 6.086624544748255e-01 + 6.079061809846809e-01 6.071505908577768e-01 6.063956838821338e-01 6.056414598451745e-01 6.048879185337234e-01 + 6.041350597340008e-01 6.033828832316360e-01 6.026313888116562e-01 6.018805762584986e-01 6.011304453560027e-01 + 6.003809958874148e-01 5.996322276353907e-01 5.988841403819964e-01 5.981367339087040e-01 5.973900079964027e-01 + 5.966439624253888e-01 5.958985969753752e-01 5.951539114254883e-01 5.944099055542715e-01 5.936665791396830e-01 + 5.929239319591024e-01 5.921819637893219e-01 5.914406744065629e-01 5.907000635864601e-01 5.899601311040750e-01 + 5.892208767338908e-01 5.884823002498174e-01 5.877444014251861e-01 5.870071800327599e-01 5.862706358447271e-01 + 5.855347686327043e-01 5.847995781677403e-01 5.840650642203148e-01 5.833312265603372e-01 5.825980649571535e-01 + 5.818655791795422e-01 5.811337689957200e-01 5.804026341733347e-01 5.796721744794791e-01 5.789423896806795e-01 + 5.782132795429049e-01 5.774848438315650e-01 5.767570823115092e-01 5.760299947470345e-01 5.753035809018785e-01 + 5.745778405392276e-01 5.738527734217127e-01 5.731283793114114e-01 5.724046579698522e-01 5.716816091580137e-01 + 5.709592326363224e-01 5.702375281646619e-01 5.695164955023637e-01 5.687961344082173e-01 5.680764446404661e-01 + 5.673574259568105e-01 5.666390781144071e-01 5.659214008698717e-01 5.652043939792823e-01 5.644880571981747e-01 + 5.637723902815484e-01 5.630573929838643e-01 5.623430650590496e-01 5.616294062604945e-01 5.609164163410570e-01 + 5.602040950530631e-01 5.594924421483047e-01 5.587814573780456e-01 5.580711404930209e-01 5.573614912434349e-01 + 5.566525093789667e-01 5.559441946487687e-01 5.552365468014686e-01 5.545295655851697e-01 5.538232507474539e-01 + 5.531176020353810e-01 5.524126191954886e-01 5.517083019737967e-01 5.510046501158057e-01 5.503016633665005e-01 + 5.495993414703482e-01 5.488976841713015e-01 5.481966912127982e-01 5.474963623377633e-01 5.467966972886121e-01 + 5.460976958072464e-01 5.453993576350594e-01 5.447016825129358e-01 5.440046701812526e-01 5.433083203798809e-01 + 5.426126328481869e-01 5.419176073250306e-01 5.412232435487707e-01 5.405295412572630e-01 5.398365001878622e-01 + 5.391441200774240e-01 5.384524006623044e-01 5.377613416783629e-01 5.370709428609596e-01 5.363812039449629e-01 + 5.356921246647443e-01 5.350037047541809e-01 5.343159439466624e-01 5.336288419750793e-01 5.329423985718411e-01 + 5.322566134688602e-01 5.315714863975666e-01 5.308870170889014e-01 5.302032052733175e-01 5.295200506807880e-01 + 5.288375530407972e-01 5.281557120823517e-01 5.274745275339738e-01 5.267939991237049e-01 5.261141265791089e-01 + 5.254349096272699e-01 5.247563479947955e-01 5.240784414078173e-01 5.234011895919920e-01 5.227245922725017e-01 + 5.220486491740567e-01 5.213733600208939e-01 5.206987245367811e-01 5.200247424450150e-01 5.193514134684242e-01 + 5.186787373293709e-01 5.180067137497504e-01 5.173353424509914e-01 5.166646231540590e-01 5.159945555794558e-01 + 5.153251394472215e-01 5.146563744769358e-01 5.139882603877164e-01 5.133207968982227e-01 5.126539837266588e-01 + 5.119878205907692e-01 5.113223072078422e-01 5.106574432947141e-01 5.099932285677666e-01 5.093296627429268e-01 + 5.086667455356741e-01 5.080044766610340e-01 5.073428558335846e-01 5.066818827674560e-01 5.060215571763299e-01 + 5.053618787734429e-01 5.047028472715853e-01 5.040444623831054e-01 5.033867238199060e-01 5.027296312934522e-01 + 5.020731845147619e-01 5.014173831944200e-01 5.007622270425683e-01 5.001077157689119e-01 4.994538490827209e-01 + 4.988006266928294e-01 4.981480483076352e-01 4.974961136351044e-01 4.968448223827706e-01 4.961941742577364e-01 + 4.955441689666741e-01 4.948948062158257e-01 4.942460857110060e-01 4.935980071576035e-01 4.929505702605805e-01 + 4.923037747244742e-01 4.916576202533964e-01 4.910121065510375e-01 4.903672333206671e-01 4.897230002651330e-01 + 4.890794070868633e-01 4.884364534878674e-01 4.877941391697386e-01 4.871524638336520e-01 4.865114271803674e-01 + 4.858710289102314e-01 4.852312687231771e-01 4.845921463187237e-01 4.839536613959817e-01 4.833158136536499e-01 + 4.826786027900171e-01 4.820420285029666e-01 4.814060904899717e-01 4.807707884481030e-01 4.801361220740235e-01 + 4.795020910639930e-01 4.788686951138691e-01 4.782359339191070e-01 4.776038071747616e-01 4.769723145754876e-01 + 4.763414558155404e-01 4.757112305887811e-01 4.750816385886694e-01 4.744526795082739e-01 4.738243530402647e-01 + 4.731966588769217e-01 4.725695967101307e-01 4.719431662313867e-01 4.713173671317938e-01 4.706921991020678e-01 + 4.700676618325349e-01 4.694437550131362e-01 4.688204783334236e-01 4.681978314825663e-01 4.675758141493496e-01 + 4.669544260221732e-01 4.663336667890556e-01 4.657135361376380e-01 4.650940337551752e-01 4.644751593285487e-01 + 4.638569125442587e-01 4.632392930884300e-01 4.626223006468113e-01 4.620059349047756e-01 4.613901955473248e-01 + 4.607750822590845e-01 4.601605947243118e-01 4.595467326268886e-01 4.589334956503333e-01 4.583208834777902e-01 + 4.577088957920389e-01 4.570975322754922e-01 4.564867926101958e-01 4.558766764778328e-01 4.552671835597215e-01 + 4.546583135368169e-01 4.540500660897158e-01 4.534424408986504e-01 4.528354376434978e-01 4.522290560037716e-01 + 4.516232956586330e-01 4.510181562868839e-01 4.504136375669709e-01 4.498097391769872e-01 4.492064607946734e-01 + 4.486038020974150e-01 4.480017627622501e-01 4.474003424658632e-01 4.467995408845908e-01 4.461993576944216e-01 + 4.455997925709962e-01 4.450008451896098e-01 4.444025152252121e-01 4.438048023524084e-01 4.432077062454607e-01 + 4.426112265782896e-01 4.420153630244744e-01 4.414201152572537e-01 4.408254829495261e-01 4.402314657738544e-01 + 4.396380634024634e-01 4.390452755072401e-01 4.384531017597385e-01 4.378615418311778e-01 4.372705953924432e-01 + 4.366802621140911e-01 4.360905416663407e-01 4.355014337190888e-01 4.349129379418957e-01 4.343250540039994e-01 + 4.337377815743073e-01 4.331511203214026e-01 4.325650699135419e-01 4.319796300186594e-01 4.313948003043650e-01 + 4.308105804379471e-01 4.302269700863726e-01 4.296439689162890e-01 4.290615765940236e-01 4.284797927855867e-01 + 4.278986171566699e-01 4.273180493726519e-01 4.267380890985930e-01 4.261587359992410e-01 4.255799897390296e-01 + 4.250018499820807e-01 4.244243163922069e-01 4.238473886329084e-01 4.232710663673758e-01 4.226953492584934e-01 + 4.221202369688379e-01 4.215457291606787e-01 4.209718254959817e-01 4.203985256364062e-01 4.198258292433102e-01 + 4.192537359777483e-01 4.186822455004763e-01 4.181113574719449e-01 4.175410715523103e-01 4.169713874014289e-01 + 4.164023046788570e-01 4.158338230438582e-01 4.152659421553989e-01 4.146986616721515e-01 4.141319812524955e-01 + 4.135659005545156e-01 4.130004192360092e-01 4.124355369544799e-01 4.118712533671413e-01 4.113075681309209e-01 + 4.107444809024574e-01 4.101819913381024e-01 4.096200990939234e-01 4.090588038257013e-01 4.084981051889344e-01 + 4.079380028388396e-01 4.073784964303475e-01 4.068195856181136e-01 4.062612700565096e-01 4.057035493996292e-01 + 4.051464233012909e-01 4.045898914150316e-01 4.040339533941155e-01 4.034786088915316e-01 4.029238575599932e-01 + 4.023696990519420e-01 4.018161330195475e-01 4.012631591147064e-01 4.007107769890481e-01 4.001589862939302e-01 + 3.996077866804438e-01 3.990571777994110e-01 3.985071593013877e-01 3.979577308366666e-01 3.974088920552739e-01 + 3.968606426069721e-01 3.963129821412633e-01 3.957659103073851e-01 3.952194267543184e-01 3.946735311307787e-01 + 3.941282230852289e-01 3.935835022658694e-01 3.930393683206469e-01 3.924958208972499e-01 3.919528596431140e-01 + 3.914104842054195e-01 3.908686942310948e-01 3.903274893668133e-01 3.897868692590014e-01 3.892468335538330e-01 + 3.887073818972318e-01 3.881685139348753e-01 3.876302293121930e-01 3.870925276743667e-01 3.865554086663346e-01 + 3.860188719327893e-01 3.854829171181787e-01 3.849475438667105e-01 3.844127518223495e-01 3.838785406288180e-01 + 3.833449099296020e-01 3.828118593679444e-01 3.822793885868550e-01 3.817474972291010e-01 3.812161849372175e-01 + 3.806854513535036e-01 3.801552961200226e-01 3.796257188786062e-01 3.790967192708526e-01 3.785682969381282e-01 + 3.780404515215710e-01 3.775131826620874e-01 3.769864900003553e-01 3.764603731768246e-01 3.759348318317201e-01 + 3.754098656050386e-01 3.748854741365527e-01 3.743616570658100e-01 3.738384140321378e-01 3.733157446746377e-01 + 3.727936486321924e-01 3.722721255434626e-01 3.717511750468889e-01 3.712307967806964e-01 3.707109903828906e-01 + 3.701917554912597e-01 3.696730917433756e-01 3.691549987765983e-01 3.686374762280717e-01 3.681205237347253e-01 + 3.676041409332779e-01 3.670883274602387e-01 3.665730829519043e-01 3.660584070443605e-01 3.655442993734889e-01 + 3.650307595749600e-01 3.645177872842377e-01 3.640053821365828e-01 3.634935437670468e-01 3.629822718104829e-01 + 3.624715659015346e-01 3.619614256746479e-01 3.614518507640669e-01 3.609428408038342e-01 3.604343954277918e-01 + 3.599265142695858e-01 3.594191969626622e-01 3.589124431402727e-01 3.584062524354708e-01 3.579006244811140e-01 + 3.573955589098706e-01 3.568910553542108e-01 3.563871134464134e-01 3.558837328185684e-01 3.553809131025703e-01 + 3.548786539301298e-01 3.543769549327649e-01 3.538758157418062e-01 3.533752359883982e-01 3.528752153034981e-01 + 3.523757533178805e-01 3.518768496621318e-01 3.513785039666573e-01 3.508807158616792e-01 3.503834849772394e-01 + 3.498868109431957e-01 3.493906933892287e-01 3.488951319448391e-01 3.484001262393506e-01 3.479056759019057e-01 + 3.474117805614760e-01 3.469184398468534e-01 3.464256533866562e-01 3.459334208093289e-01 3.454417417431443e-01 + 3.449506158162017e-01 3.444600426564296e-01 3.439700218915866e-01 3.434805531492598e-01 3.429916360568718e-01 + 3.425032702416740e-01 3.420154553307516e-01 3.415281909510247e-01 3.410414767292468e-01 3.405553122920100e-01 + 3.400696972657403e-01 3.395846312767012e-01 3.391001139509973e-01 3.386161449145688e-01 3.381327237931988e-01 + 3.376498502125099e-01 3.371675237979661e-01 3.366857441748764e-01 3.362045109683893e-01 3.357238238035015e-01 + 3.352436823050538e-01 3.347640860977307e-01 3.342850348060675e-01 3.338065280544442e-01 3.333285654670907e-01 + 3.328511466680864e-01 3.323742712813598e-01 3.318979389306938e-01 3.314221492397196e-01 3.309469018319214e-01 + 3.304721963306411e-01 3.299980323590714e-01 3.295244095402615e-01 3.290513274971160e-01 3.285787858523982e-01 + 3.281067842287294e-01 3.276353222485864e-01 3.271643995343100e-01 3.266940157080986e-01 3.262241703920133e-01 + 3.257548632079761e-01 3.252860937777726e-01 3.248178617230523e-01 3.243501666653291e-01 3.238830082259833e-01 + 3.234163860262590e-01 3.229502996872700e-01 3.224847488299971e-01 3.220197330752893e-01 3.215552520438660e-01 + 3.210913053563168e-01 3.206278926331034e-01 3.201650134945576e-01 3.197026675608849e-01 3.192408544521667e-01 + 3.187795737883546e-01 3.183188251892805e-01 3.178586082746495e-01 3.173989226640429e-01 3.169397679769224e-01 + 3.164811438326276e-01 3.160230498503765e-01 3.155654856492684e-01 3.151084508482836e-01 3.146519450662829e-01 + 3.141959679220129e-01 3.137405190341007e-01 3.132855980210595e-01 3.128312045012868e-01 3.123773380930663e-01 + 3.119239984145697e-01 3.114711850838541e-01 3.110188977188669e-01 3.105671359374433e-01 3.101158993573090e-01 + 3.096651875960810e-01 3.092150002712682e-01 3.087653370002708e-01 3.083161974003831e-01 3.078675810887930e-01 + 3.074194876825830e-01 3.069719167987313e-01 3.065248680541137e-01 3.060783410655030e-01 3.056323354495664e-01 + 3.051868508228766e-01 3.047418868018996e-01 3.042974430030044e-01 3.038535190424632e-01 3.034101145364465e-01 + 3.029672291010297e-01 3.025248623521908e-01 3.020830139058135e-01 3.016416833776860e-01 3.012008703835015e-01 + 3.007605745388604e-01 3.003207954592724e-01 2.998815327601522e-01 2.994427860568267e-01 2.990045549645299e-01 + 2.985668390984081e-01 2.981296380735197e-01 2.976929515048343e-01 2.972567790072334e-01 2.968211201955141e-01 + 2.963859746843862e-01 2.959513420884770e-01 2.955172220223277e-01 2.950836141003979e-01 2.946505179370640e-01 + 2.942179331466219e-01 2.937858593432844e-01 2.933542961411866e-01 2.929232431543826e-01 2.924926999968498e-01 + 2.920626662824857e-01 2.916331416251108e-01 2.912041256384727e-01 2.907756179362394e-01 2.903476181320059e-01 + 2.899201258392954e-01 2.894931406715530e-01 2.890666622421561e-01 2.886406901644073e-01 2.882152240515402e-01 + 2.877902635167165e-01 2.873658081730311e-01 2.869418576335072e-01 2.865184115111026e-01 2.860954694187058e-01 + 2.856730309691412e-01 2.852510957751660e-01 2.848296634494710e-01 2.844087336046879e-01 2.839883058533796e-01 + 2.835683798080499e-01 2.831489550811389e-01 2.827300312850247e-01 2.823116080320286e-01 2.818936849344081e-01 + 2.814762616043645e-01 2.810593376540404e-01 2.806429126955206e-01 2.802269863408318e-01 2.798115582019479e-01 + 2.793966278907848e-01 2.789821950192047e-01 2.785682591990167e-01 2.781548200419761e-01 2.777418771597872e-01 + 2.773294301641005e-01 2.769174786665186e-01 2.765060222785901e-01 2.760950606118186e-01 2.756845932776550e-01 + 2.752746198875063e-01 2.748651400527293e-01 2.744561533846351e-01 2.740476594944889e-01 2.736396579935119e-01 + 2.732321484928814e-01 2.728251306037287e-01 2.724186039371433e-01 2.720125681041739e-01 2.716070227158268e-01 + 2.712019673830679e-01 2.707974017168218e-01 2.703933253279764e-01 2.699897378273785e-01 2.695866388258382e-01 + 2.691840279341284e-01 2.687819047629872e-01 2.683802689231139e-01 2.679791200251744e-01 2.675784576798002e-01 + 2.671782814975905e-01 2.667785910891098e-01 2.663793860648915e-01 2.659806660354361e-01 2.655824306112161e-01 + 2.651846794026702e-01 2.647874120202130e-01 2.643906280742243e-01 2.639943271750597e-01 2.635985089330481e-01 + 2.632031729584894e-01 2.628083188616605e-01 2.624139462528092e-01 2.620200547421637e-01 2.616266439399239e-01 + 2.612337134562689e-01 2.608412629013569e-01 2.604492918853209e-01 2.600578000182752e-01 2.596667869103139e-01 + 2.592762521715115e-01 2.588861954119210e-01 2.584966162415810e-01 2.581075142705087e-01 2.577188891087085e-01 + 2.573307403661660e-01 2.569430676528514e-01 2.565558705787202e-01 2.561691487537150e-01 2.557829017877642e-01 + 2.553971292907816e-01 2.550118308726715e-01 2.546270061433266e-01 2.542426547126275e-01 2.538587761904437e-01 + 2.534753701866390e-01 2.530924363110650e-01 2.527099741735664e-01 2.523279833839819e-01 2.519464635521411e-01 + 2.515654142878697e-01 2.511848352009855e-01 2.508047259013042e-01 2.504250859986355e-01 2.500459151027862e-01 + 2.496672128235620e-01 2.492889787707647e-01 2.489112125541949e-01 2.485339137836515e-01 2.481570820689361e-01 + 2.477807170198497e-01 2.474048182461928e-01 2.470293853577692e-01 2.466544179643857e-01 2.462799156758520e-01 + 2.459058781019798e-01 2.455323048525889e-01 2.451591955375010e-01 2.447865497665446e-01 2.444143671495556e-01 + 2.440426472963757e-01 2.436713898168554e-01 2.433005943208524e-01 2.429302604182354e-01 2.425603877188800e-01 + 2.421909758326747e-01 2.418220243695161e-01 2.414535329393168e-01 2.410855011519973e-01 2.407179286174932e-01 + 2.403508149457528e-01 2.399841597467388e-01 2.396179626304304e-01 2.392522232068181e-01 2.388869410859133e-01 + 2.385221158777404e-01 2.381577471923426e-01 2.377938346397812e-01 2.374303778301365e-01 2.370673763735067e-01 + 2.367048298800100e-01 2.363427379597876e-01 2.359811002229974e-01 2.356199162798227e-01 2.352591857404684e-01 + 2.348989082151615e-01 2.345390833141520e-01 2.341797106477158e-01 2.338207898261537e-01 2.334623204597906e-01 + 2.331043021589781e-01 2.327467345340931e-01 2.323896171955442e-01 2.320329497537631e-01 2.316767318192112e-01 + 2.313209630023801e-01 2.309656429137924e-01 2.306107711639973e-01 2.302563473635783e-01 2.299023711231496e-01 + 2.295488420533565e-01 2.291957597648781e-01 2.288431238684267e-01 2.284909339747493e-01 2.281391896946268e-01 + 2.277878906388743e-01 2.274370364183455e-01 2.270866266439283e-01 2.267366609265475e-01 2.263871388771676e-01 + 2.260380601067894e-01 2.256894242264524e-01 2.253412308472370e-01 2.249934795802627e-01 2.246461700366907e-01 + 2.242993018277214e-01 2.239528745645978e-01 2.236068878586062e-01 2.232613413210755e-01 2.229162345633777e-01 + 2.225715671969297e-01 2.222273388331912e-01 2.218835490836709e-01 2.215401975599186e-01 2.211972838735347e-01 + 2.208548076361656e-01 2.205127684595039e-01 2.201711659552917e-01 2.198299997353193e-01 2.194892694114288e-01 + 2.191489745955082e-01 2.188091148994985e-01 2.184696899353915e-01 2.181306993152319e-01 2.177921426511134e-01 + 2.174540195551867e-01 2.171163296396531e-01 2.167790725167690e-01 2.164422477988437e-01 2.161058550982445e-01 + 2.157698940273923e-01 2.154343641987652e-01 2.150992652248970e-01 2.147645967183806e-01 2.144303582918655e-01 + 2.140965495580604e-01 2.137631701297338e-01 2.134302196197108e-01 2.130976976408810e-01 2.127656038061924e-01 + 2.124339377286529e-01 2.121026990213367e-01 2.117718872973763e-01 2.114415021699677e-01 2.111115432523733e-01 + 2.107820101579166e-01 2.104529024999880e-01 2.101242198920406e-01 2.097959619475948e-01 2.094681282802384e-01 + 2.091407185036244e-01 2.088137322314734e-01 2.084871690775743e-01 2.081610286557834e-01 2.078353105800292e-01 + 2.075100144643059e-01 2.071851399226798e-01 2.068606865692889e-01 2.065366540183409e-01 2.062130418841139e-01 + 2.058898497809612e-01 2.055670773233076e-01 2.052447241256503e-01 2.049227898025626e-01 2.046012739686907e-01 + 2.042801762387565e-01 2.039594962275559e-01 2.036392335499625e-01 2.033193878209261e-01 2.029999586554719e-01 + 2.026809456687064e-01 2.023623484758107e-01 2.020441666920468e-01 2.017263999327536e-01 2.014090478133518e-01 + 2.010921099493411e-01 2.007755859563039e-01 2.004594754499015e-01 2.001437780458781e-01 1.998284933600597e-01 + 1.995136210083561e-01 1.991991606067601e-01 1.988851117713474e-01 1.985714741182791e-01 1.982582472638028e-01 + 1.979454308242465e-01 1.976330244160291e-01 1.973210276556544e-01 1.970094401597132e-01 1.966982615448829e-01 + 1.963874914279289e-01 1.960771294257064e-01 1.957671751551583e-01 1.954576282333187e-01 1.951484882773101e-01 + 1.948397549043441e-01 1.945314277317271e-01 1.942235063768554e-01 1.939159904572149e-01 1.936088795903877e-01 + 1.933021733940474e-01 1.929958714859586e-01 1.926899734839857e-01 1.923844790060809e-01 1.920793876702963e-01 + 1.917746990947777e-01 1.914704128977669e-01 1.911665286976015e-01 1.908630461127178e-01 1.905599647616479e-01 + 1.902572842630220e-01 1.899550042355709e-01 1.896531242981203e-01 1.893516440695996e-01 1.890505631690352e-01 + 1.887498812155542e-01 1.884495978283856e-01 1.881497126268592e-01 1.878502252304055e-01 1.875511352585610e-01 + 1.872524423309599e-01 1.869541460673424e-01 1.866562460875531e-01 1.863587420115388e-01 1.860616334593531e-01 + 1.857649200511532e-01 1.854686014072012e-01 1.851726771478671e-01 1.848771468936277e-01 1.845820102650653e-01 + 1.842872668828705e-01 1.839929163678404e-01 1.836989583408840e-01 1.834053924230150e-01 1.831122182353590e-01 + 1.828194353991515e-01 1.825270435357385e-01 1.822350422665742e-01 1.819434312132263e-01 1.816522099973743e-01 + 1.813613782408078e-01 1.810709355654329e-01 1.807808815932646e-01 1.804912159464326e-01 1.802019382471817e-01 + 1.799130481178711e-01 1.796245451809731e-01 1.793364290590777e-01 1.790486993748875e-01 1.787613557512253e-01 + 1.784743978110273e-01 1.781878251773486e-01 1.779016374733613e-01 1.776158343223561e-01 1.773304153477404e-01 + 1.770453801730426e-01 1.767607284219088e-01 1.764764597181069e-01 1.761925736855235e-01 1.759090699481650e-01 + 1.756259481301618e-01 1.753432078557638e-01 1.750608487493419e-01 1.747788704353936e-01 1.744972725385343e-01 + 1.742160546835052e-01 1.739352164951711e-01 1.736547575985218e-01 1.733746776186698e-01 1.730949761808543e-01 + 1.728156529104383e-01 1.725367074329127e-01 1.722581393738921e-01 1.719799483591218e-01 1.717021340144699e-01 + 1.714246959659354e-01 1.711476338396430e-01 1.708709472618481e-01 1.705946358589329e-01 1.703186992574095e-01 + 1.700431370839215e-01 1.697679489652405e-01 1.694931345282678e-01 1.692186934000406e-01 1.689446252077205e-01 + 1.686709295786072e-01 1.683976061401281e-01 1.681246545198453e-01 1.678520743454547e-01 1.675798652447849e-01 + 1.673080268457973e-01 1.670365587765881e-01 1.667654606653893e-01 1.664947321405675e-01 1.662243728306242e-01 + 1.659543823641976e-01 1.656847603700607e-01 1.654155064771261e-01 1.651466203144404e-01 1.648781015111888e-01 + 1.646099496966963e-01 1.643421645004236e-01 1.640747455519722e-01 1.638076924810804e-01 1.635410049176291e-01 + 1.632746824916362e-01 1.630087248332611e-01 1.627431315728050e-01 1.624779023407090e-01 1.622130367675548e-01 + 1.619485344840689e-01 1.616843951211176e-01 1.614206183097097e-01 1.611572036809992e-01 1.608941508662823e-01 + 1.606314594969984e-01 1.603691292047335e-01 1.601071596212141e-01 1.598455503783168e-01 1.595843011080587e-01 + 1.593234114426068e-01 1.590628810142718e-01 1.588027094555110e-01 1.585428963989307e-01 1.582834414772816e-01 + 1.580243443234634e-01 1.577656045705255e-01 1.575072218516629e-01 1.572491958002205e-01 1.569915260496939e-01 + 1.567342122337262e-01 1.564772539861107e-01 1.562206509407930e-01 1.559644027318656e-01 1.557085089935767e-01 + 1.554529693603214e-01 1.551977834666502e-01 1.549429509472626e-01 1.546884714370148e-01 1.544343445709106e-01 + 1.541805699841115e-01 1.539271473119310e-01 1.536740761898351e-01 1.534213562534475e-01 1.531689871385418e-01 + 1.529169684810521e-01 1.526652999170645e-01 1.524139810828205e-01 1.521630116147206e-01 1.519123911493179e-01 + 1.516621193233272e-01 1.514121957736151e-01 1.511626201372109e-01 1.509133920512974e-01 1.506645111532185e-01 + 1.504159770804756e-01 1.501677894707288e-01 1.499199479617989e-01 1.496724521916646e-01 1.494253017984652e-01 + 1.491784964205016e-01 1.489320356962336e-01 1.486859192642825e-01 1.484401467634316e-01 1.481947178326258e-01 + 1.479496321109715e-01 1.477048892377380e-01 1.474604888523564e-01 1.472164305944233e-01 1.469727141036952e-01 + 1.467293390200951e-01 1.464863049837090e-01 1.462436116347872e-01 1.460012586137461e-01 1.457592455611657e-01 + 1.455175721177914e-01 1.452762379245358e-01 1.450352426224759e-01 1.447945858528564e-01 1.445542672570878e-01 + 1.443142864767473e-01 1.440746431535827e-01 1.438353369295046e-01 1.435963674465964e-01 1.433577343471059e-01 + 1.431194372734518e-01 1.428814758682225e-01 1.426438497741731e-01 1.424065586342313e-01 1.421696020914927e-01 + 1.419329797892243e-01 1.416966913708630e-01 1.414607364800165e-01 1.412251147604658e-01 1.409898258561601e-01 + 1.407548694112248e-01 1.405202450699524e-01 1.402859524768119e-01 1.400519912764439e-01 1.398183611136620e-01 + 1.395850616334521e-01 1.393520924809771e-01 1.391194533015705e-01 1.388871437407414e-01 1.386551634441747e-01 + 1.384235120577299e-01 1.381921892274393e-01 1.379611945995138e-01 1.377305278203400e-01 1.375001885364792e-01 + 1.372701763946703e-01 1.370404910418271e-01 1.368111321250439e-01 1.365820992915897e-01 1.363533921889112e-01 + 1.361250104646359e-01 1.358969537665659e-01 1.356692217426848e-01 1.354418140411532e-01 1.352147303103111e-01 + 1.349879701986804e-01 1.347615333549586e-01 1.345354194280278e-01 1.343096280669459e-01 1.340841589209544e-01 + 1.338590116394755e-01 1.336341858721121e-01 1.334096812686487e-01 1.331854974790506e-01 1.329616341534668e-01 + 1.327380909422287e-01 1.325148674958476e-01 1.322919634650215e-01 1.320693785006290e-01 1.318471122537333e-01 + 1.316251643755805e-01 1.314035345176021e-01 1.311822223314134e-01 1.309612274688124e-01 1.307405495817848e-01 + 1.305201883224998e-01 1.303001433433125e-01 1.300804142967645e-01 1.298610008355810e-01 1.296419026126762e-01 + 1.294231192811496e-01 1.292046504942865e-01 1.289864959055611e-01 1.287686551686338e-01 1.285511279373531e-01 + 1.283339138657539e-01 1.281170126080619e-01 1.279004238186894e-01 1.276841471522373e-01 1.274681822634963e-01 + 1.272525288074458e-01 1.270371864392537e-01 1.268221548142786e-01 1.266074335880708e-01 1.263930224163674e-01 + 1.261789209550968e-01 1.259651288603813e-01 1.257516457885300e-01 1.255384713960464e-01 1.253256053396227e-01 + 1.251130472761459e-01 1.249007968626926e-01 1.246888537565320e-01 1.244772176151279e-01 1.242658880961349e-01 + 1.240548648574002e-01 1.238441475569647e-01 1.236337358530659e-01 1.234236294041299e-01 1.232138278687805e-01 + 1.230043309058343e-01 1.227951381743024e-01 1.225862493333915e-01 1.223776640425021e-01 1.221693819612323e-01 + 1.219614027493718e-01 1.217537260669099e-01 1.215463515740289e-01 1.213392789311092e-01 1.211325077987263e-01 + 1.209260378376552e-01 1.207198687088635e-01 1.205140000735185e-01 1.203084315929852e-01 1.201031629288251e-01 + 1.198981937427984e-01 1.196935236968631e-01 1.194891524531746e-01 1.192850796740882e-01 1.190813050221577e-01 + 1.188778281601355e-01 1.186746487509728e-01 1.184717664578213e-01 1.182691809440324e-01 1.180668918731571e-01 + 1.178648989089452e-01 1.176632017153500e-01 1.174617999565215e-01 1.172606932968132e-01 1.170598814007804e-01 + 1.168593639331761e-01 1.166591405589578e-01 1.164592109432847e-01 1.162595747515155e-01 1.160602316492138e-01 + 1.158611813021436e-01 1.156624233762728e-01 1.154639575377716e-01 1.152657834530122e-01 1.150679007885711e-01 + 1.148703092112297e-01 1.146730083879698e-01 1.144759979859792e-01 1.142792776726489e-01 1.140828471155749e-01 + 1.138867059825575e-01 1.136908539416020e-01 1.134952906609170e-01 1.133000158089180e-01 1.131050290542250e-01 + 1.129103300656636e-01 1.127159185122662e-01 1.125217940632695e-01 1.123279563881163e-01 1.121344051564576e-01 + 1.119411400381494e-01 1.117481607032550e-01 1.115554668220445e-01 1.113630580649957e-01 1.111709341027919e-01 + 1.109790946063260e-01 1.107875392466987e-01 1.105962676952163e-01 1.104052796233965e-01 1.102145747029618e-01 + 1.100241526058455e-01 1.098340130041892e-01 1.096441555703443e-01 1.094545799768698e-01 1.092652858965334e-01 + 1.090762730023154e-01 1.088875409674015e-01 1.086990894651913e-01 1.085109181692920e-01 1.083230267535224e-01 + 1.081354148919097e-01 1.079480822586931e-01 1.077610285283241e-01 1.075742533754621e-01 1.073877564749799e-01 + 1.072015375019601e-01 1.070155961316977e-01 1.068299320397006e-01 1.066445449016861e-01 1.064594343935852e-01 + 1.062746001915395e-01 1.060900419719054e-01 1.059057594112506e-01 1.057217521863556e-01 1.055380199742137e-01 + 1.053545624520314e-01 1.051713792972292e-01 1.049884701874390e-01 1.048058348005104e-01 1.046234728145017e-01 + 1.044413839076886e-01 1.042595677585606e-01 1.040780240458208e-01 1.038967524483868e-01 1.037157526453901e-01 + 1.035350243161803e-01 1.033545671403173e-01 1.031743807975800e-01 1.029944649679602e-01 1.028148193316664e-01 + 1.026354435691235e-01 1.024563373609702e-01 1.022775003880617e-01 1.020989323314718e-01 1.019206328724871e-01 + 1.017426016926115e-01 1.015648384735688e-01 1.013873428972943e-01 1.012101146459439e-01 1.010331534018912e-01 + 1.008564588477233e-01 1.006800306662469e-01 1.005038685404885e-01 1.003279721536869e-01 1.001523411893049e-01 + 9.997697533101864e-02 9.980187426272516e-02 9.962703766853771e-02 9.945246523278974e-02 9.927815664003249e-02 + 9.910411157503639e-02 9.893032972279052e-02 9.875681076850300e-02 9.858355439760114e-02 9.841056029573188e-02 + 9.823782814876177e-02 9.806535764277639e-02 9.789314846408166e-02 9.772120029920307e-02 9.754951283488653e-02 + 9.737808575809816e-02 9.720691875602414e-02 9.703601151607141e-02 9.686536372586736e-02 9.669497507326044e-02 + 9.652484524631968e-02 9.635497393333559e-02 9.618536082281955e-02 9.601600560350430e-02 9.584690796434402e-02 + 9.567806759451464e-02 9.550948418341407e-02 9.534115742066153e-02 9.517308699609853e-02 9.500527259978861e-02 + 9.483771392201774e-02 9.467041065329437e-02 9.450336248434919e-02 9.433656910613565e-02 9.417003020982988e-02 + 9.400374548683117e-02 9.383771462876191e-02 9.367193732746729e-02 9.350641327501606e-02 9.334114216370001e-02 + 9.317612368603519e-02 9.301135753476049e-02 9.284684340283945e-02 9.268258098345869e-02 9.251856997002937e-02 + 9.235481005618651e-02 9.219130093578967e-02 9.202804230292275e-02 9.186503385189405e-02 9.170227527723651e-02 + 9.153976627370776e-02 9.137750653629045e-02 9.121549576019228e-02 9.105373364084579e-02 9.089221987390889e-02 + 9.073095415526448e-02 9.056993618102163e-02 9.040916564751417e-02 9.024864225130222e-02 9.008836568917117e-02 + 8.992833565813255e-02 8.976855185542380e-02 8.960901397850850e-02 8.944972172507665e-02 8.929067479304419e-02 + 8.913187288055370e-02 8.897331568597408e-02 8.881500290790120e-02 8.865693424515764e-02 8.849910939679254e-02 + 8.834152806208226e-02 8.818418994052980e-02 8.802709473186589e-02 8.787024213604837e-02 8.771363185326221e-02 + 8.755726358391991e-02 8.740113702866148e-02 8.724525188835495e-02 8.708960786409568e-02 8.693420465720718e-02 + 8.677904196924080e-02 8.662411950197585e-02 8.646943695741981e-02 8.631499403780860e-02 8.616079044560648e-02 + 8.600682588350587e-02 8.585310005442794e-02 8.569961266152210e-02 8.554636340816714e-02 8.539335199797021e-02 + 8.524057813476746e-02 8.508804152262386e-02 8.493574186583359e-02 8.478367886892012e-02 8.463185223663587e-02 + 8.448026167396300e-02 8.432890688611272e-02 8.417778757852594e-02 8.402690345687300e-02 8.387625422705414e-02 + 8.372583959519936e-02 8.357565926766836e-02 8.342571295105083e-02 8.327600035216635e-02 8.312652117806492e-02 + 8.297727513602651e-02 8.282826193356142e-02 8.267948127841014e-02 8.253093287854357e-02 8.238261644216330e-02 + 8.223453167770167e-02 8.208667829382124e-02 8.193905599941545e-02 8.179166450360847e-02 8.164450351575571e-02 + 8.149757274544311e-02 8.135087190248798e-02 8.120440069693850e-02 8.105815883907409e-02 8.091214603940539e-02 + 8.076636200867447e-02 8.062080645785484e-02 8.047547909815136e-02 8.033037964100033e-02 8.018550779806972e-02 + 8.004086328125926e-02 7.989644580270065e-02 7.975225507475688e-02 7.960829081002307e-02 7.946455272132630e-02 + 7.932104052172573e-02 7.917775392451239e-02 7.903469264320970e-02 7.889185639157306e-02 7.874924488359017e-02 + 7.860685783348130e-02 7.846469495569872e-02 7.832275596492751e-02 7.818104057608510e-02 7.803954850432152e-02 + 7.789827946501916e-02 7.775723317379361e-02 7.761640934649307e-02 7.747580769919822e-02 7.733542794822296e-02 + 7.719526981011379e-02 7.705533300165053e-02 7.691561723984600e-02 7.677612224194587e-02 7.663684772542909e-02 + 7.649779340800776e-02 7.635895900762736e-02 7.622034424246645e-02 7.608194883093732e-02 7.594377249168530e-02 + 7.580581494358930e-02 7.566807590576162e-02 7.553055509754840e-02 7.539325223852938e-02 7.525616704851762e-02 + 7.511929924756006e-02 7.498264855593739e-02 7.484621469416416e-02 7.470999738298889e-02 7.457399634339364e-02 + 7.443821129659463e-02 7.430264196404189e-02 7.416728806741971e-02 7.403214932864649e-02 7.389722546987440e-02 + 7.376251621348999e-02 7.362802128211388e-02 7.349374039860117e-02 7.335967328604089e-02 7.322581966775676e-02 + 7.309217926730663e-02 7.295875180848267e-02 7.282553701531148e-02 7.269253461205445e-02 7.255974432320725e-02 + 7.242716587350002e-02 7.229479898789765e-02 7.216264339159938e-02 7.203069881003936e-02 7.189896496888648e-02 + 7.176744159404412e-02 7.163612841165044e-02 7.150502514807840e-02 7.137413152993598e-02 7.124344728406562e-02 + 7.111297213754510e-02 7.098270581768674e-02 7.085264805203792e-02 7.072279856838090e-02 7.059315709473316e-02 + 7.046372335934704e-02 7.033449709070999e-02 7.020547801754443e-02 7.007666586880792e-02 6.994806037369332e-02 + 6.981966126162850e-02 6.969146826227654e-02 6.956348110553570e-02 6.943569952153938e-02 6.930812324065640e-02 + 6.918075199349095e-02 6.905358551088225e-02 6.892662352390500e-02 6.879986576386896e-02 6.867331196231985e-02 + 6.854696185103810e-02 6.842081516204020e-02 6.829487162757739e-02 6.816913098013684e-02 6.804359295244085e-02 + 6.791825727744742e-02 6.779312368835012e-02 6.766819191857784e-02 6.754346170179486e-02 6.741893277190122e-02 + 6.729460486303258e-02 6.717047770956004e-02 6.704655104609025e-02 6.692282460746556e-02 6.679929812876369e-02 + 6.667597134529836e-02 6.655284399261858e-02 6.642991580650928e-02 6.630718652299086e-02 6.618465587831937e-02 + 6.606232360898652e-02 6.594018945171992e-02 6.581825314348272e-02 6.569651442147380e-02 6.557497302312755e-02 + 6.545362868611433e-02 6.533248114834017e-02 6.521153014794680e-02 6.509077542331165e-02 6.497021671304791e-02 + 6.484985375600437e-02 6.472968629126585e-02 6.460971405815280e-02 6.448993679622136e-02 6.437035424526340e-02 + 6.425096614530654e-02 6.413177223661443e-02 6.401277225968603e-02 6.389396595525644e-02 6.377535306429641e-02 + 6.365693332801231e-02 6.353870648784636e-02 6.342067228547654e-02 6.330283046281669e-02 6.318518076201632e-02 + 6.306772292546062e-02 6.295045669577035e-02 6.283338181580249e-02 6.271649802864948e-02 6.259980507763958e-02 + 6.248330270633653e-02 6.236699065853995e-02 6.225086867828532e-02 6.213493650984361e-02 6.201919389772171e-02 + 6.190364058666196e-02 6.178827632164257e-02 6.167310084787714e-02 6.155811391081528e-02 6.144331525614224e-02 + 6.132870462977864e-02 6.121428177788096e-02 6.110004644684103e-02 6.098599838328667e-02 6.087213733408119e-02 + 6.075846304632337e-02 6.064497526734748e-02 6.053167374472351e-02 6.041855822625698e-02 6.030562845998906e-02 + 6.019288419419622e-02 6.008032517739043e-02 5.996795115831921e-02 5.985576188596573e-02 5.974375710954825e-02 + 5.963193657852084e-02 5.952030004257278e-02 5.940884725162871e-02 5.929757795584863e-02 5.918649190562805e-02 + 5.907558885159789e-02 5.896486854462419e-02 5.885433073580830e-02 5.874397517648683e-02 5.863380161823178e-02 + 5.852380981285053e-02 5.841399951238522e-02 5.830437046911355e-02 5.819492243554810e-02 5.808565516443701e-02 + 5.797656840876309e-02 5.786766192174456e-02 5.775893545683458e-02 5.765038876772123e-02 5.754202160832795e-02 + 5.743383373281279e-02 5.732582489556906e-02 5.721799485122488e-02 5.711034335464321e-02 5.700287016092197e-02 + 5.689557502539389e-02 5.678845770362676e-02 5.668151795142282e-02 5.657475552481924e-02 5.646817018008776e-02 + 5.636176167373515e-02 5.625552976250265e-02 5.614947420336616e-02 5.604359475353612e-02 5.593789117045757e-02 + 5.583236321181021e-02 5.572701063550808e-02 5.562183319969987e-02 5.551683066276869e-02 5.541200278333179e-02 + 5.530734932024104e-02 5.520287003258254e-02 5.509856467967701e-02 5.499443302107890e-02 5.489047481657720e-02 + 5.478668982619492e-02 5.468307781018949e-02 5.457963852905232e-02 5.447637174350879e-02 5.437327721451838e-02 + 5.427035470327451e-02 5.416760397120476e-02 5.406502477997029e-02 5.396261689146655e-02 5.386038006782251e-02 + 5.375831407140085e-02 5.365641866479843e-02 5.355469361084533e-02 5.345313867260571e-02 5.335175361337707e-02 + 5.325053819669059e-02 5.314949218631087e-02 5.304861534623614e-02 5.294790744069818e-02 5.284736823416190e-02 + 5.274699749132572e-02 5.264679497712123e-02 5.254676045671341e-02 5.244689369550058e-02 5.234719445911393e-02 + 5.224766251341800e-02 5.214829762451013e-02 5.204909955872108e-02 5.195006808261416e-02 5.185120296298606e-02 + 5.175250396686595e-02 5.165397086151594e-02 5.155560341443095e-02 5.145740139333862e-02 5.135936456619936e-02 + 5.126149270120608e-02 5.116378556678418e-02 5.106624293159172e-02 5.096886456451912e-02 5.087165023468947e-02 + 5.077459971145784e-02 5.067771276441183e-02 5.058098916337114e-02 5.048442867838789e-02 5.038803107974618e-02 + 5.029179613796225e-02 5.019572362378429e-02 5.009981330819241e-02 5.000406496239892e-02 4.990847835784765e-02 + 4.981305326621453e-02 4.971778945940694e-02 4.962268670956418e-02 4.952774478905696e-02 4.943296347048778e-02 + 4.933834252669055e-02 4.924388173073060e-02 4.914958085590466e-02 4.905543967574074e-02 4.896145796399815e-02 + 4.886763549466765e-02 4.877397204197073e-02 4.868046738036017e-02 4.858712128451971e-02 4.849393352936418e-02 + 4.840090389003911e-02 4.830803214192107e-02 4.821531806061723e-02 4.812276142196550e-02 4.803036200203439e-02 + 4.793811957712310e-02 4.784603392376136e-02 4.775410481870915e-02 4.766233203895694e-02 4.757071536172546e-02 + 4.747925456446579e-02 4.738794942485919e-02 4.729679972081684e-02 4.720580523048019e-02 4.711496573222037e-02 + 4.702428100463869e-02 4.693375082656636e-02 4.684337497706406e-02 4.675315323542229e-02 4.666308538116119e-02 + 4.657317119403057e-02 4.648341045400946e-02 4.639380294130664e-02 4.630434843635998e-02 4.621504671983673e-02 + 4.612589757263318e-02 4.603690077587501e-02 4.594805611091687e-02 4.585936335934232e-02 4.577082230296387e-02 + 4.568243272382267e-02 4.559419440418904e-02 4.550610712656177e-02 4.541817067366824e-02 4.533038482846429e-02 + 4.524274937413435e-02 4.515526409409135e-02 4.506792877197622e-02 4.498074319165841e-02 4.489370713723544e-02 + 4.480682039303278e-02 4.472008274360406e-02 4.463349397373079e-02 4.454705386842236e-02 4.446076221291587e-02 + 4.437461879267621e-02 4.428862339339565e-02 4.420277580099421e-02 4.411707580161947e-02 4.403152318164610e-02 + 4.394611772767612e-02 4.386085922653890e-02 4.377574746529085e-02 4.369078223121550e-02 4.360596331182330e-02 + 4.352129049485149e-02 4.343676356826427e-02 4.335238232025253e-02 4.326814653923369e-02 4.318405601385188e-02 + 4.310011053297767e-02 4.301630988570795e-02 4.293265386136576e-02 4.284914224950076e-02 4.276577483988850e-02 + 4.268255142253062e-02 4.259947178765466e-02 4.251653572571404e-02 4.243374302738811e-02 4.235109348358185e-02 + 4.226858688542585e-02 4.218622302427625e-02 4.210400169171455e-02 4.202192267954776e-02 4.193998577980802e-02 + 4.185819078475281e-02 4.177653748686456e-02 4.169502567885080e-02 4.161365515364375e-02 4.153242570440087e-02 + 4.145133712450402e-02 4.137038920755991e-02 4.128958174739959e-02 4.120891453807871e-02 4.112838737387731e-02 + 4.104800004929980e-02 4.096775235907456e-02 4.088764409815419e-02 4.080767506171526e-02 4.072784504515834e-02 + 4.064815384410785e-02 4.056860125441179e-02 4.048918707214187e-02 4.040991109359332e-02 4.033077311528498e-02 + 4.025177293395878e-02 4.017291034658015e-02 4.009418515033757e-02 4.001559714264257e-02 3.993714612112968e-02 + 3.985883188365639e-02 3.978065422830301e-02 3.970261295337231e-02 3.962470785738988e-02 3.954693873910359e-02 + 3.946930539748400e-02 3.939180763172379e-02 3.931444524123784e-02 3.923721802566321e-02 3.916012578485883e-02 + 3.908316831890579e-02 3.900634542810673e-02 3.892965691298622e-02 3.885310257429033e-02 3.877668221298657e-02 + 3.870039563026412e-02 3.862424262753315e-02 3.854822300642537e-02 3.847233656879338e-02 3.839658311671088e-02 + 3.832096245247241e-02 3.824547437859341e-02 3.817011869781013e-02 3.809489521307915e-02 3.801980372757783e-02 + 3.794484404470369e-02 3.787001596807475e-02 3.779531930152918e-02 3.772075384912525e-02 3.764631941514113e-02 + 3.757201580407491e-02 3.749784282064465e-02 3.742380026978778e-02 3.734988795666169e-02 3.727610568664281e-02 + 3.720245326532728e-02 3.712893049853026e-02 3.705553719228626e-02 3.698227315284883e-02 3.690913818669030e-02 + 3.683613210050196e-02 3.676325470119379e-02 3.669050579589443e-02 3.661788519195103e-02 3.654539269692918e-02 + 3.647302811861273e-02 3.640079126500360e-02 3.632868194432207e-02 3.625669996500629e-02 3.618484513571222e-02 + 3.611311726531356e-02 3.604151616290172e-02 3.597004163778571e-02 3.589869349949187e-02 3.582747155776401e-02 + 3.575637562256298e-02 3.568540550406690e-02 3.561456101267067e-02 3.554384195898627e-02 3.547324815384245e-02 + 3.540277940828453e-02 3.533243553357443e-02 3.526221634119041e-02 3.519212164282719e-02 3.512215125039573e-02 + 3.505230497602298e-02 3.498258263205189e-02 3.491298403104130e-02 3.484350898576590e-02 3.477415730921593e-02 + 3.470492881459724e-02 3.463582331533102e-02 3.456684062505390e-02 3.449798055761750e-02 3.442924292708876e-02 + 3.436062754774946e-02 3.429213423409626e-02 3.422376280084056e-02 3.415551306290821e-02 3.408738483543993e-02 + 3.401937793379058e-02 3.395149217352935e-02 3.388372737043955e-02 3.381608334051850e-02 3.374855989997761e-02 + 3.368115686524207e-02 3.361387405295058e-02 3.354671127995558e-02 3.347966836332283e-02 3.341274512033169e-02 + 3.334594136847438e-02 3.327925692545659e-02 3.321269160919674e-02 3.314624523782615e-02 3.307991762968899e-02 + 3.301370860334199e-02 3.294761797755446e-02 3.288164557130804e-02 3.281579120379658e-02 3.275005469442611e-02 + 3.268443586281482e-02 3.261893452879280e-02 3.255355051240170e-02 3.248828363389508e-02 3.242313371373789e-02 + 3.235810057260664e-02 3.229318403138905e-02 3.222838391118412e-02 3.216370003330182e-02 3.209913221926308e-02 + 3.203468029079967e-02 3.197034406985405e-02 3.190612337857932e-02 3.184201803933896e-02 3.177802787470678e-02 + 3.171415270746669e-02 3.165039236061293e-02 3.158674665734961e-02 3.152321542109057e-02 3.145979847545945e-02 + 3.139649564428939e-02 3.133330675162312e-02 3.127023162171271e-02 3.120727007901931e-02 3.114442194821328e-02 + 3.108168705417383e-02 3.101906522198919e-02 3.095655627695607e-02 3.089416004458002e-02 3.083187635057490e-02 + 3.076970502086291e-02 3.070764588157443e-02 3.064569875904801e-02 3.058386347983027e-02 3.052213987067539e-02 + 3.046052775854542e-02 3.039902697060991e-02 3.033763733424593e-02 3.027635867703792e-02 3.021519082677741e-02 + 3.015413361146298e-02 3.009318685930020e-02 3.003235039870154e-02 2.997162405828597e-02 2.991100766687920e-02 + 2.985050105351323e-02 2.979010404742642e-02 2.972981647806321e-02 2.966963817507422e-02 2.960956896831597e-02 + 2.954960868785063e-02 2.948975716394607e-02 2.943001422707572e-02 2.937037970791839e-02 2.931085343735820e-02 + 2.925143524648428e-02 2.919212496659085e-02 2.913292242917690e-02 2.907382746594631e-02 2.901483990880748e-02 + 2.895595958987329e-02 2.889718634146095e-02 2.883851999609183e-02 2.877996038649156e-02 2.872150734558953e-02 + 2.866316070651908e-02 2.860492030261716e-02 2.854678596742427e-02 2.848875753468431e-02 2.843083483834454e-02 + 2.837301771255538e-02 2.831530599167020e-02 2.825769951024529e-02 2.820019810303964e-02 2.814280160501495e-02 + 2.808550985133541e-02 2.802832267736748e-02 2.797123991867988e-02 2.791426141104341e-02 2.785738699043085e-02 + 2.780061649301673e-02 2.774394975517738e-02 2.768738661349059e-02 2.763092690473550e-02 2.757457046589261e-02 + 2.751831713414358e-02 2.746216674687110e-02 2.740611914165862e-02 2.735017415629041e-02 2.729433162875127e-02 + 2.723859139722653e-02 2.718295330010189e-02 2.712741717596312e-02 2.707198286359613e-02 2.701665020198664e-02 + 2.696141903032028e-02 2.690628918798235e-02 2.685126051455750e-02 2.679633284982989e-02 2.674150603378273e-02 + 2.668677990659863e-02 2.663215430865884e-02 2.657762908054373e-02 2.652320406303206e-02 2.646887909710135e-02 + 2.641465402392736e-02 2.636052868488427e-02 2.630650292154436e-02 2.625257657567788e-02 2.619874948925285e-02 + 2.614502150443508e-02 2.609139246358802e-02 2.603786220927247e-02 2.598443058424655e-02 2.593109743146556e-02 + 2.587786259408169e-02 2.582472591544426e-02 2.577168723909906e-02 2.571874640878874e-02 2.566590326845218e-02 + 2.561315766222468e-02 2.556050943443776e-02 2.550795842961885e-02 2.545550449249149e-02 2.540314746797476e-02 + 2.535088720118349e-02 2.529872353742791e-02 2.524665632221360e-02 2.519468540124147e-02 2.514281062040728e-02 + 2.509103182580184e-02 2.503934886371057e-02 2.498776158061373e-02 2.493626982318600e-02 2.488487343829634e-02 + 2.483357227300793e-02 2.478236617457798e-02 2.473125499045780e-02 2.468023856829222e-02 2.462931675591994e-02 + 2.457848940137299e-02 2.452775635287680e-02 2.447711745885000e-02 2.442657256790431e-02 2.437612152884438e-02 + 2.432576419066761e-02 2.427550040256404e-02 2.422533001391613e-02 2.417525287429883e-02 2.412526883347925e-02 + 2.407537774141649e-02 2.402557944826161e-02 2.397587380435744e-02 2.392626066023842e-02 2.387673986663063e-02 + 2.382731127445123e-02 2.377797473480875e-02 2.372873009900269e-02 2.367957721852357e-02 2.363051594505252e-02 + 2.358154613046147e-02 2.353266762681266e-02 2.348388028635876e-02 2.343518396154248e-02 2.338657850499677e-02 + 2.333806376954439e-02 2.328963960819783e-02 2.324130587415914e-02 2.319306242081988e-02 2.314490910176092e-02 + 2.309684577075237e-02 2.304887228175323e-02 2.300098848891140e-02 2.295319424656354e-02 2.290548940923494e-02 + 2.285787383163918e-02 2.281034736867833e-02 2.276290987544246e-02 2.271556120720964e-02 2.266830121944580e-02 + 2.262112976780462e-02 2.257404670812736e-02 2.252705189644261e-02 2.248014518896624e-02 2.243332644210121e-02 + 2.238659551243751e-02 2.233995225675200e-02 2.229339653200809e-02 2.224692819535572e-02 2.220054710413128e-02 + 2.215425311585740e-02 2.210804608824275e-02 2.206192587918195e-02 2.201589234675537e-02 2.196994534922908e-02 + 2.192408474505462e-02 2.187831039286881e-02 2.183262215149383e-02 2.178701987993675e-02 2.174150343738959e-02 + 2.169607268322908e-02 2.165072747701661e-02 2.160546767849810e-02 2.156029314760360e-02 2.151520374444741e-02 + 2.147019932932778e-02 2.142527976272693e-02 2.138044490531070e-02 2.133569461792854e-02 2.129102876161326e-02 + 2.124644719758092e-02 2.120194978723077e-02 2.115753639214496e-02 2.111320687408851e-02 2.106896109500904e-02 + 2.102479891703673e-02 2.098072020248403e-02 2.093672481384575e-02 2.089281261379874e-02 2.084898346520165e-02 + 2.080523723109499e-02 2.076157377470085e-02 2.071799295942281e-02 2.067449464884577e-02 2.063107870673577e-02 + 2.058774499703986e-02 2.054449338388593e-02 2.050132373158267e-02 2.045823590461929e-02 2.041522976766539e-02 + 2.037230518557083e-02 2.032946202336559e-02 2.028670014625966e-02 2.024401941964271e-02 2.020141970908429e-02 + 2.015890088033322e-02 2.011646279931781e-02 2.007410533214551e-02 2.003182834510287e-02 1.998963170465538e-02 + 1.994751527744720e-02 1.990547893030112e-02 1.986352253021835e-02 1.982164594437845e-02 1.977984904013914e-02 + 1.973813168503609e-02 1.969649374678276e-02 1.965493509327039e-02 1.961345559256778e-02 1.957205511292097e-02 + 1.953073352275343e-02 1.948949069066555e-02 1.944832648543476e-02 1.940724077601515e-02 1.936623343153759e-02 + 1.932530432130933e-02 1.928445331481395e-02 1.924368028171122e-02 1.920298509183688e-02 1.916236761520262e-02 + 1.912182772199579e-02 1.908136528257933e-02 1.904098016749152e-02 1.900067224744593e-02 1.896044139333128e-02 + 1.892028747621124e-02 1.888021036732421e-02 1.884020993808327e-02 1.880028606007596e-02 1.876043860506424e-02 + 1.872066744498415e-02 1.868097245194590e-02 1.864135349823345e-02 1.860181045630455e-02 1.856234319879046e-02 + 1.852295159849598e-02 1.848363552839910e-02 1.844439486165094e-02 1.840522947157557e-02 1.836613923166984e-02 + 1.832712401560333e-02 1.828818369721808e-02 1.824931815052847e-02 1.821052724972111e-02 1.817181086915455e-02 + 1.813316888335939e-02 1.809460116703782e-02 1.805610759506370e-02 1.801768804248227e-02 1.797934238451001e-02 + 1.794107049653466e-02 1.790287225411475e-02 1.786474753297975e-02 1.782669620902970e-02 1.778871815833521e-02 + 1.775081325713719e-02 1.771298138184676e-02 1.767522240904516e-02 1.763753621548338e-02 1.759992267808224e-02 + 1.756238167393205e-02 1.752491308029266e-02 1.748751677459319e-02 1.745019263443174e-02 1.741294053757548e-02 + 1.737576036196036e-02 1.733865198569101e-02 1.730161528704052e-02 1.726465014445036e-02 1.722775643653020e-02 + 1.719093404205767e-02 1.715418283997836e-02 1.711750270940557e-02 1.708089352962019e-02 1.704435518007047e-02 + 1.700788754037200e-02 1.697149049030738e-02 1.693516390982627e-02 1.689890767904510e-02 1.686272167824694e-02 + 1.682660578788130e-02 1.679055988856408e-02 1.675458386107738e-02 1.671867758636927e-02 1.668284094555378e-02 + 1.664707381991056e-02 1.661137609088485e-02 1.657574764008736e-02 1.654018834929395e-02 1.650469810044570e-02 + 1.646927677564851e-02 1.643392425717318e-02 1.639864042745500e-02 1.636342516909392e-02 1.632827836485411e-02 + 1.629319989766394e-02 1.625818965061572e-02 1.622324750696567e-02 1.618837335013375e-02 1.615356706370346e-02 + 1.611882853142167e-02 1.608415763719846e-02 1.604955426510700e-02 1.601501829938349e-02 1.598054962442677e-02 + 1.594614812479838e-02 1.591181368522231e-02 1.587754619058481e-02 1.584334552593432e-02 1.580921157648130e-02 + 1.577514422759805e-02 1.574114336481851e-02 1.570720887383818e-02 1.567334064051392e-02 1.563953855086385e-02 + 1.560580249106715e-02 1.557213234746387e-02 1.553852800655486e-02 1.550498935500152e-02 1.547151627962575e-02 + 1.543810866740975e-02 1.540476640549579e-02 1.537148938118615e-02 1.533827748194293e-02 1.530513059538793e-02 + 1.527204860930242e-02 1.523903141162708e-02 1.520607889046175e-02 1.517319093406532e-02 1.514036743085555e-02 + 1.510760826940899e-02 1.507491333846082e-02 1.504228252690450e-02 1.500971572379185e-02 1.497721281833279e-02 + 1.494477369989521e-02 1.491239825800484e-02 1.488008638234499e-02 1.484783796275648e-02 1.481565288923748e-02 + 1.478353105194336e-02 1.475147234118652e-02 1.471947664743621e-02 1.468754386131840e-02 1.465567387361562e-02 + 1.462386657526681e-02 1.459212185736716e-02 1.456043961116803e-02 1.452881972807659e-02 1.449726209965589e-02 + 1.446576661762453e-02 1.443433317385669e-02 1.440296166038180e-02 1.437165196938448e-02 1.434040399320434e-02 + 1.430921762433581e-02 1.427809275542812e-02 1.424702927928496e-02 1.421602708886446e-02 1.418508607727893e-02 + 1.415420613779475e-02 1.412338716383233e-02 1.409262904896569e-02 1.406193168692261e-02 1.403129497158423e-02 + 1.400071879698503e-02 1.397020305731261e-02 1.393974764690757e-02 1.390935246026342e-02 1.387901739202624e-02 + 1.384874233699467e-02 1.381852719011972e-02 1.378837184650464e-02 1.375827620140476e-02 1.372824015022726e-02 + 1.369826358853107e-02 1.366834641202670e-02 1.363848851657624e-02 1.360868979819285e-02 1.357895015304101e-02 + 1.354926947743606e-02 1.351964766784418e-02 1.349008462088223e-02 1.346058023331756e-02 1.343113440206794e-02 + 1.340174702420126e-02 1.337241799693549e-02 1.334314721763844e-02 1.331393458382775e-02 1.328477999317061e-02 + 1.325568334348356e-02 1.322664453273249e-02 1.319766345903234e-02 1.316874002064708e-02 1.313987411598948e-02 + 1.311106564362092e-02 1.308231450225126e-02 1.305362059073875e-02 1.302498380808982e-02 1.299640405345890e-02 + 1.296788122614836e-02 1.293941522560824e-02 1.291100595143613e-02 1.288265330337708e-02 1.285435718132337e-02 + 1.282611748531444e-02 1.279793411553661e-02 1.276980697232302e-02 1.274173595615342e-02 1.271372096765412e-02 + 1.268576190759773e-02 1.265785867690302e-02 1.263001117663479e-02 1.260221930800367e-02 1.257448297236611e-02 + 1.254680207122399e-02 1.251917650622472e-02 1.249160617916089e-02 1.246409099197018e-02 1.243663084673521e-02 + 1.240922564568344e-02 1.238187529118699e-02 1.235457968576232e-02 1.232733873207036e-02 1.230015233291610e-02 + 1.227302039124866e-02 1.224594281016096e-02 1.221891949288963e-02 1.219195034281487e-02 1.216503526346025e-02 + 1.213817415849263e-02 1.211136693172202e-02 1.208461348710124e-02 1.205791372872596e-02 1.203126756083449e-02 + 1.200467488780763e-02 1.197813561416847e-02 1.195164964458234e-02 1.192521688385649e-02 1.189883723694011e-02 + 1.187251060892405e-02 1.184623690504079e-02 1.182001603066417e-02 1.179384789130927e-02 1.176773239263228e-02 + 1.174166944043031e-02 1.171565894064132e-02 1.168970079934390e-02 1.166379492275707e-02 1.163794121724019e-02 + 1.161213958929281e-02 1.158638994555460e-02 1.156069219280490e-02 1.153504623796298e-02 1.150945198808753e-02 + 1.148390935037670e-02 1.145841823216792e-02 1.143297854093770e-02 1.140759018430152e-02 1.138225307001365e-02 + 1.135696710596701e-02 1.133173220019300e-02 1.130654826086139e-02 1.128141519628015e-02 1.125633291489526e-02 + 1.123130132529056e-02 1.120632033618767e-02 1.118138985644578e-02 1.115650979506149e-02 1.113168006116871e-02 + 1.110690056403841e-02 1.108217121307856e-02 1.105749191783397e-02 1.103286258798611e-02 1.100828313335294e-02 + 1.098375346388878e-02 1.095927348968418e-02 1.093484312096572e-02 1.091046226809591e-02 1.088613084157303e-02 + 1.086184875203089e-02 1.083761591023882e-02 1.081343222710138e-02 1.078929761365834e-02 1.076521198108446e-02 + 1.074117524068926e-02 1.071718730391705e-02 1.069324808234660e-02 1.066935748769109e-02 1.064551543179798e-02 + 1.062172182664878e-02 1.059797658435889e-02 1.057427961717754e-02 1.055063083748758e-02 1.052703015780532e-02 + 1.050347749078044e-02 1.047997274919575e-02 1.045651584596709e-02 1.043310669414316e-02 1.040974520690543e-02 + 1.038643129756791e-02 1.036316487957703e-02 1.033994586651150e-02 1.031677417208210e-02 1.029364971013161e-02 + 1.027057239463471e-02 1.024754213969758e-02 1.022455885955804e-02 1.020162246858519e-02 1.017873288127947e-02 + 1.015589001227220e-02 1.013309377632579e-02 1.011034408833329e-02 1.008764086331842e-02 1.006498401643532e-02 + 1.004237346296849e-02 1.001980911833258e-02 9.997290898072218e-03 9.974818717861923e-03 9.952392493505883e-03 + 9.930012140937906e-03 9.907677576221191e-03 9.885388715548169e-03 9.863145475240401e-03 9.840947771748399e-03 + 9.818795521651500e-03 9.796688641657723e-03 9.774627048603558e-03 9.752610659453861e-03 9.730639391301728e-03 + 9.708713161368289e-03 9.686831887002598e-03 9.664995485681513e-03 9.643203875009446e-03 9.621456972718320e-03 + 9.599754696667311e-03 9.578096964842844e-03 9.556483695358338e-03 9.534914806454065e-03 9.513390216497013e-03 + 9.491909843980732e-03 9.470473607525254e-03 9.449081425876844e-03 9.427733217907887e-03 9.406428902616754e-03 + 9.385168399127635e-03 9.363951626690445e-03 9.342778504680571e-03 9.321648952598819e-03 9.300562890071225e-03 + 9.279520236848889e-03 9.258520912807867e-03 9.237564837949023e-03 9.216651932397842e-03 9.195782116404315e-03 + 9.174955310342753e-03 9.154171434711684e-03 9.133430410133685e-03 9.112732157355261e-03 9.092076597246632e-03 + 9.071463650801645e-03 9.050893239137592e-03 9.030365283495082e-03 9.009879705237934e-03 8.989436425852915e-03 + 8.969035366949703e-03 8.948676450260675e-03 8.928359597640810e-03 8.908084731067483e-03 8.887851772640397e-03 + 8.867660644581360e-03 8.847511269234151e-03 8.827403569064396e-03 8.807337466659444e-03 8.787312884728201e-03 + 8.767329746100899e-03 8.747387973729096e-03 8.727487490685401e-03 8.707628220163447e-03 8.687810085477640e-03 + 8.668033010063060e-03 8.648296917475297e-03 8.628601731390311e-03 8.608947375604362e-03 8.589333774033691e-03 + 8.569760850714552e-03 8.550228529802952e-03 8.530736735574546e-03 8.511285392424493e-03 8.491874424867304e-03 + 8.472503757536729e-03 8.453173315185530e-03 8.433883022685409e-03 8.414632805026837e-03 8.395422587318891e-03 + 8.376252294789189e-03 8.357121852783617e-03 8.338031186766280e-03 8.318980222319316e-03 8.299968885142768e-03 + 8.280997101054465e-03 8.262064795989794e-03 8.243171896001647e-03 8.224318327260172e-03 8.205504016052786e-03 + 8.186728888783848e-03 8.167992871974689e-03 8.149295892263311e-03 8.130637876404329e-03 8.112018751268811e-03 + 8.093438443844168e-03 8.074896881233942e-03 8.056393990657695e-03 8.037929699450875e-03 8.019503935064631e-03 + 8.001116625065760e-03 7.982767697136460e-03 7.964457079074231e-03 7.946184698791745e-03 7.927950484316647e-03 + 7.909754363791531e-03 7.891596265473621e-03 7.873476117734802e-03 7.855393849061353e-03 7.837349388053848e-03 + 7.819342663427053e-03 7.801373604009681e-03 7.783442138744378e-03 7.765548196687471e-03 7.747691707008871e-03 + 7.729872598991918e-03 7.712090802033274e-03 7.694346245642751e-03 7.676638859443155e-03 7.658968573170156e-03 + 7.641335316672129e-03 7.623739019910070e-03 7.606179612957427e-03 7.588657025999902e-03 7.571171189335351e-03 + 7.553722033373645e-03 7.536309488636581e-03 7.518933485757621e-03 7.501593955481839e-03 7.484290828665750e-03 + 7.467024036277173e-03 7.449793509395073e-03 7.432599179209468e-03 7.415440977021247e-03 7.398318834242000e-03 + 7.381232682393959e-03 7.364182453109765e-03 7.347168078132422e-03 7.330189489315081e-03 7.313246618620915e-03 + 7.296339398122996e-03 7.279467760004138e-03 7.262631636556792e-03 7.245830960182821e-03 7.229065663393490e-03 + 7.212335678809187e-03 7.195640939159366e-03 7.178981377282399e-03 7.162356926125394e-03 7.145767518744135e-03 + 7.129213088302841e-03 7.112693568074096e-03 7.096208891438667e-03 7.079758991885411e-03 7.063343803011127e-03 + 7.046963258520364e-03 7.030617292225305e-03 7.014305838045659e-03 6.998028830008511e-03 6.981786202248197e-03 + 6.965577889006057e-03 6.949403824630441e-03 6.933263943576482e-03 6.917158180406024e-03 6.901086469787384e-03 + 6.885048746495307e-03 6.869044945410778e-03 6.853075001520899e-03 6.837138849918717e-03 6.821236425803176e-03 + 6.805367664478877e-03 6.789532501355975e-03 6.773730871950065e-03 6.757962711882002e-03 6.742227956877787e-03 + 6.726526542768467e-03 6.710858405489914e-03 6.695223481082728e-03 6.679621705692114e-03 6.664053015567719e-03 + 6.648517347063549e-03 6.633014636637722e-03 6.617544820852439e-03 6.602107836373775e-03 6.586703619971605e-03 + 6.571332108519391e-03 6.555993238994130e-03 6.540686948476143e-03 6.525413174148969e-03 6.510171853299206e-03 + 6.494962923316428e-03 6.479786321693035e-03 6.464641986024028e-03 6.449529854006977e-03 6.434449863441824e-03 + 6.419401952230821e-03 6.404386058378292e-03 6.389402119990563e-03 6.374450075275801e-03 6.359529862543872e-03 + 6.344641420206272e-03 6.329784686775883e-03 6.314959600866909e-03 6.300166101194727e-03 6.285404126575736e-03 + 6.270673615927232e-03 6.255974508267271e-03 6.241306742714554e-03 6.226670258488255e-03 6.212064994907896e-03 + 6.197490891393223e-03 6.182947887464058e-03 6.168435922740200e-03 6.153954936941238e-03 6.139504869886433e-03 + 6.125085661494602e-03 6.110697251783951e-03 6.096339580872000e-03 6.082012588975373e-03 6.067716216409703e-03 + 6.053450403589500e-03 6.039215091028002e-03 6.025010219337041e-03 6.010835729226964e-03 5.996691561506374e-03 + 5.982577657082122e-03 5.968493956959097e-03 5.954440402240160e-03 5.940416934125928e-03 5.926423493914691e-03 + 5.912460023002273e-03 5.898526462881871e-03 5.884622755143980e-03 5.870748841476215e-03 5.856904663663163e-03 + 5.843090163586282e-03 5.829305283223753e-03 5.815549964650390e-03 5.801824150037414e-03 5.788127781652415e-03 + 5.774460801859160e-03 5.760823153117487e-03 5.747214777983156e-03 5.733635619107724e-03 5.720085619238454e-03 + 5.706564721218082e-03 5.693072867984782e-03 5.679610002571974e-03 5.666176068108235e-03 5.652771007817152e-03 + 5.639394765017163e-03 5.626047283121444e-03 5.612728505637796e-03 5.599438376168483e-03 5.586176838410140e-03 + 5.572943836153581e-03 5.559739313283734e-03 5.546563213779424e-03 5.533415481713368e-03 5.520296061251916e-03 + 5.507204896655006e-03 5.494141932275977e-03 5.481107112561481e-03 5.468100382051311e-03 5.455121685378326e-03 + 5.442170967268271e-03 5.429248172539649e-03 5.416353246103620e-03 5.403486132963839e-03 5.390646778216361e-03 + 5.377835127049491e-03 5.365051124743622e-03 5.352294716671166e-03 5.339565848296375e-03 5.326864465175262e-03 + 5.314190512955379e-03 5.301543937375817e-03 5.288924684266963e-03 5.276332699550417e-03 5.263767929238866e-03 + 5.251230319435947e-03 5.238719816336133e-03 5.226236366224567e-03 5.213779915476957e-03 5.201350410559447e-03 + 5.188947798028486e-03 5.176572024530722e-03 5.164223036802808e-03 5.151900781671349e-03 5.139605206052694e-03 + 5.127336256952900e-03 5.115093881467551e-03 5.102878026781615e-03 5.090688640169328e-03 5.078525668994084e-03 + 5.066389060708316e-03 5.054278762853312e-03 5.042194723059142e-03 5.030136889044504e-03 5.018105208616604e-03 + 5.006099629671015e-03 4.994120100191588e-03 4.982166568250278e-03 4.970238982007036e-03 4.958337289709673e-03 + 4.946461439693746e-03 4.934611380382446e-03 4.922787060286427e-03 4.910988428003705e-03 4.899215432219532e-03 + 4.887468021706251e-03 4.875746145323212e-03 4.864049752016578e-03 4.852378790819279e-03 4.840733210850813e-03 + 4.829112961317145e-03 4.817517991510611e-03 4.805948250809735e-03 4.794403688679162e-03 4.782884254669489e-03 + 4.771389898417148e-03 4.759920569644269e-03 4.748476218158612e-03 4.737056793853376e-03 4.725662246707099e-03 + 4.714292526783511e-03 4.702947584231432e-03 4.691627369284676e-03 4.680331832261850e-03 4.669060923566283e-03 + 4.657814593685892e-03 4.646592793193028e-03 4.635395472744423e-03 4.624222583080958e-03 4.613074075027637e-03 + 4.601949899493409e-03 4.590850007471038e-03 4.579774350037032e-03 4.568722878351464e-03 4.557695543657835e-03 + 4.546692297283038e-03 4.535713090637124e-03 4.524757875213283e-03 4.513826602587606e-03 4.502919224419049e-03 + 4.492035692449303e-03 4.481175958502614e-03 4.470339974485699e-03 4.459527692387636e-03 4.448739064279688e-03 + 4.437974042315252e-03 4.427232578729664e-03 4.416514625840108e-03 4.405820136045509e-03 4.395149061826370e-03 + 4.384501355744704e-03 4.373876970443848e-03 4.363275858648351e-03 4.352697973163931e-03 4.342143266877239e-03 + 4.331611692755795e-03 4.321103203847885e-03 4.310617753282363e-03 4.300155294268639e-03 4.289715780096438e-03 + 4.279299164135761e-03 4.268905399836730e-03 4.258534440729473e-03 4.248186240423979e-03 4.237860752610035e-03 + 4.227557931057034e-03 4.217277729613900e-03 4.207020102208943e-03 4.196785002849734e-03 4.186572385623031e-03 + 4.176382204694577e-03 4.166214414309032e-03 4.156068968789877e-03 4.145945822539207e-03 4.135844930037697e-03 + 4.125766245844418e-03 4.115709724596742e-03 4.105675321010254e-03 4.095662989878551e-03 4.085672686073199e-03 + 4.075704364543564e-03 4.065757980316706e-03 4.055833488497277e-03 4.045930844267375e-03 4.036050002886402e-03 + 4.026190919691028e-03 4.016353550094967e-03 4.006537849588947e-03 3.996743773740504e-03 3.986971278193932e-03 + 3.977220318670143e-03 3.967490850966523e-03 3.957782830956833e-03 3.948096214591102e-03 3.938430957895460e-03 + 3.928787016972093e-03 3.919164347999044e-03 3.909562907230140e-03 3.899982650994866e-03 3.890423535698241e-03 + 3.880885517820684e-03 3.871368553917950e-03 3.861872600620908e-03 3.852397614635554e-03 3.842943552742773e-03 + 3.833510371798289e-03 3.824098028732525e-03 3.814706480550487e-03 3.805335684331633e-03 3.795985597229794e-03 + 3.786656176472997e-03 3.777347379363393e-03 3.768059163277120e-03 3.758791485664180e-03 3.749544304048342e-03 + 3.740317576026997e-03 3.731111259271064e-03 3.721925311524847e-03 3.712759690605930e-03 3.703614354405095e-03 + 3.694489260886115e-03 3.685384368085720e-03 3.676299634113456e-03 3.667235017151547e-03 3.658190475454800e-03 + 3.649165967350471e-03 3.640161451238154e-03 3.631176885589683e-03 3.622212228948985e-03 3.613267439931967e-03 + 3.604342477226425e-03 3.595437299591886e-03 3.586551865859548e-03 3.577686134932097e-03 3.568840065783637e-03 + 3.560013617459559e-03 3.551206749076422e-03 3.542419419821832e-03 3.533651588954349e-03 3.524903215803329e-03 + 3.516174259768869e-03 3.507464680321617e-03 3.498774437002711e-03 3.490103489423643e-03 3.481451797266144e-03 + 3.472819320282057e-03 3.464206018293267e-03 3.455611851191509e-03 3.447036778938326e-03 3.438480761564906e-03 + 3.429943759171973e-03 3.421425731929710e-03 3.412926640077587e-03 3.404446443924284e-03 3.395985103847566e-03 + 3.387542580294149e-03 3.379118833779625e-03 3.370713824888311e-03 3.362327514273136e-03 3.353959862655566e-03 + 3.345610830825430e-03 3.337280379640856e-03 3.328968470028117e-03 3.320675062981532e-03 3.312400119563383e-03 + 3.304143600903741e-03 3.295905468200392e-03 3.287685682718708e-03 3.279484205791541e-03 3.271300998819104e-03 + 3.263136023268861e-03 3.254989240675381e-03 3.246860612640292e-03 3.238750100832104e-03 3.230657666986114e-03 + 3.222583272904310e-03 3.214526880455224e-03 3.206488451573856e-03 3.198467948261535e-03 3.190465332585799e-03 + 3.182480566680315e-03 3.174513612744716e-03 3.166564433044550e-03 3.158632989911110e-03 3.150719245741347e-03 + 3.142823162997754e-03 3.134944704208253e-03 3.127083831966070e-03 3.119240508929662e-03 3.111414697822531e-03 + 3.103606361433195e-03 3.095815462615012e-03 3.088041964286089e-03 3.080285829429188e-03 3.072547021091573e-03 + 3.064825502384924e-03 3.057121236485244e-03 3.049434186632695e-03 3.041764316131526e-03 3.034111588349942e-03 + 3.026475966719995e-03 3.018857414737495e-03 3.011255895961855e-03 3.003671374015994e-03 2.996103812586268e-03 + 2.988553175422279e-03 2.981019426336853e-03 2.973502529205832e-03 2.966002447968035e-03 2.958519146625135e-03 + 2.951052589241517e-03 2.943602739944181e-03 2.936169562922654e-03 2.928753022428834e-03 2.921353082776925e-03 + 2.913969708343289e-03 2.906602863566353e-03 2.899252512946498e-03 2.891918621045925e-03 2.884601152488600e-03 + 2.877300071960075e-03 2.870015344207399e-03 2.862746934039051e-03 2.855494806324768e-03 2.848258925995462e-03 + 2.841039258043119e-03 2.833835767520655e-03 2.826648419541855e-03 2.819477179281210e-03 2.812322011973840e-03 + 2.805182882915378e-03 2.798059757461844e-03 2.790952601029550e-03 2.783861379095001e-03 2.776786057194746e-03 + 2.769726600925314e-03 2.762682975943063e-03 2.755655147964089e-03 2.748643082764142e-03 2.741646746178450e-03 + 2.734666104101670e-03 2.727701122487766e-03 2.720751767349867e-03 2.713818004760198e-03 2.706899800849943e-03 + 2.699997121809142e-03 2.693109933886601e-03 2.686238203389751e-03 2.679381896684550e-03 2.672540980195396e-03 + 2.665715420404972e-03 2.658905183854195e-03 2.652110237142052e-03 2.645330546925513e-03 2.638566079919443e-03 + 2.631816802896449e-03 2.625082682686826e-03 2.618363686178382e-03 2.611659780316376e-03 2.604970932103421e-03 + 2.598297108599321e-03 2.591638276921005e-03 2.584994404242411e-03 2.578365457794361e-03 2.571751404864480e-03 + 2.565152212797062e-03 2.558567848992969e-03 2.551998280909534e-03 2.545443476060437e-03 2.538903402015601e-03 + 2.532378026401107e-03 2.525867316899032e-03 2.519371241247405e-03 2.512889767240049e-03 2.506422862726501e-03 + 2.499970495611896e-03 2.493532633856856e-03 2.487109245477378e-03 2.480700298544751e-03 2.474305761185412e-03 + 2.467925601580873e-03 2.461559787967585e-03 2.455208288636843e-03 2.448871071934690e-03 2.442548106261787e-03 + 2.436239360073327e-03 2.429944801878906e-03 2.423664400242429e-03 2.417398123782019e-03 2.411145941169864e-03 + 2.404907821132154e-03 2.398683732448966e-03 2.392473643954133e-03 2.386277524535164e-03 2.380095343133119e-03 + 2.373927068742512e-03 2.367772670411211e-03 2.361632117240312e-03 2.355505378384043e-03 2.349392423049669e-03 + 2.343293220497356e-03 2.337207740040104e-03 2.331135951043608e-03 2.325077822926148e-03 2.319033325158532e-03 + 2.313002427263929e-03 2.306985098817799e-03 2.300981309447776e-03 2.294991028833562e-03 2.289014226706835e-03 + 2.283050872851113e-03 2.277100937101676e-03 2.271164389345455e-03 2.265241199520909e-03 2.259331337617936e-03 + 2.253434773677782e-03 2.247551477792892e-03 2.241681420106842e-03 2.235824570814227e-03 2.229980900160528e-03 + 2.224150378442063e-03 2.218332976005814e-03 2.212528663249383e-03 2.206737410620847e-03 2.200959188618659e-03 + 2.195193967791568e-03 2.189441718738486e-03 2.183702412108384e-03 2.177976018600220e-03 2.172262508962793e-03 + 2.166561853994664e-03 2.160874024544042e-03 2.155198991508678e-03 2.149536725835775e-03 2.143887198521869e-03 + 2.138250380612715e-03 2.132626243203220e-03 2.127014757437299e-03 2.121415894507804e-03 2.115829625656382e-03 + 2.110255922173405e-03 2.104694755397864e-03 2.099146096717243e-03 2.093609917567424e-03 2.088086189432605e-03 + 2.082574883845158e-03 2.077075972385569e-03 2.071589426682298e-03 2.066115218411688e-03 2.060653319297877e-03 + 2.055203701112664e-03 2.049766335675450e-03 2.044341194853088e-03 2.038928250559797e-03 2.033527474757085e-03 + 2.028138839453613e-03 2.022762316705101e-03 2.017397878614238e-03 2.012045497330558e-03 2.006705145050369e-03 + 2.001376794016614e-03 1.996060416518793e-03 1.990755984892862e-03 1.985463471521111e-03 1.980182848832079e-03 + 1.974914089300464e-03 1.969657165446982e-03 1.964412049838304e-03 1.959178715086935e-03 1.953957133851110e-03 + 1.948747278834722e-03 1.943549122787172e-03 1.938362638503308e-03 1.933187798823315e-03 1.928024576632599e-03 + 1.922872944861707e-03 1.917732876486211e-03 1.912604344526604e-03 1.907487322048233e-03 1.902381782161150e-03 + 1.897287698020044e-03 1.892205042824138e-03 1.887133789817070e-03 1.882073912286828e-03 1.877025383565611e-03 + 1.871988177029750e-03 1.866962266099614e-03 1.861947624239492e-03 1.856944224957520e-03 1.851952041805545e-03 + 1.846971048379054e-03 1.842001218317084e-03 1.837042525302088e-03 1.832094943059861e-03 1.827158445359440e-03 + 1.822233006012990e-03 1.817318598875741e-03 1.812415197845841e-03 1.807522776864295e-03 1.802641309914858e-03 + 1.797770771023926e-03 1.792911134260452e-03 1.788062373735848e-03 1.783224463603877e-03 1.778397378060570e-03 + 1.773581091344110e-03 1.768775577734756e-03 1.763980811554734e-03 1.759196767168146e-03 1.754423418980866e-03 + 1.749660741440457e-03 1.744908709036061e-03 1.740167296298315e-03 1.735436477799244e-03 1.730716228152168e-03 + 1.726006522011628e-03 1.721307334073257e-03 1.716618639073700e-03 1.711940411790533e-03 1.707272627042140e-03 + 1.702615259687655e-03 1.697968284626832e-03 1.693331676799959e-03 1.688705411187798e-03 1.684089462811440e-03 + 1.679483806732252e-03 1.674888418051763e-03 1.670303271911569e-03 1.665728343493267e-03 1.661163608018328e-03 + 1.656609040748022e-03 1.652064616983332e-03 1.647530312064843e-03 1.643006101372675e-03 1.638491960326369e-03 + 1.633987864384806e-03 1.629493789046117e-03 1.625009709847594e-03 1.620535602365585e-03 1.616071442215437e-03 + 1.611617205051357e-03 1.607172866566373e-03 1.602738402492208e-03 1.598313788599207e-03 1.593899000696250e-03 + 1.589494014630655e-03 1.585098806288090e-03 1.580713351592500e-03 1.576337626505996e-03 1.571971607028789e-03 + 1.567615269199088e-03 1.563268589093013e-03 1.558931542824534e-03 1.554604106545345e-03 1.550286256444810e-03 + 1.545977968749859e-03 1.541679219724909e-03 1.537389985671793e-03 1.533110242929643e-03 1.528839967874836e-03 + 1.524579136920900e-03 1.520327726518425e-03 1.516085713154986e-03 1.511853073355062e-03 1.507629783679939e-03 + 1.503415820727658e-03 1.499211161132899e-03 1.495015781566919e-03 1.490829658737473e-03 1.486652769388716e-03 + 1.482485090301152e-03 1.478326598291526e-03 1.474177270212748e-03 1.470037082953845e-03 1.465906013439839e-03 + 1.461784038631697e-03 1.457671135526250e-03 1.453567281156103e-03 1.449472452589580e-03 1.445386626930625e-03 + 1.441309781318738e-03 1.437241892928903e-03 1.433182938971504e-03 1.429132896692253e-03 1.425091743372132e-03 + 1.421059456327291e-03 1.417036012909000e-03 1.413021390503562e-03 1.409015566532247e-03 1.405018518451231e-03 + 1.401030223751493e-03 1.397050659958790e-03 1.393079804633555e-03 1.389117635370832e-03 1.385164129800223e-03 + 1.381219265585802e-03 1.377283020426059e-03 1.373355372053838e-03 1.369436298236250e-03 1.365525776774636e-03 + 1.361623785504473e-03 1.357730302295332e-03 1.353845305050814e-03 1.349968771708470e-03 1.346100680239747e-03 + 1.342241008649943e-03 1.338389734978116e-03 1.334546837297057e-03 1.330712293713202e-03 1.326886082366581e-03 + 1.323068181430784e-03 1.319258569112866e-03 1.315457223653315e-03 1.311664123325994e-03 1.307879246438074e-03 + 1.304102571330003e-03 1.300334076375428e-03 1.296573739981150e-03 1.292821540587085e-03 1.289077456666199e-03 + 1.285341466724457e-03 1.281613549300797e-03 1.277893682967041e-03 1.274181846327896e-03 1.270478018020861e-03 + 1.266782176716218e-03 1.263094301116967e-03 1.259414369958785e-03 1.255742362009999e-03 1.252078256071521e-03 + 1.248422030976817e-03 1.244773665591877e-03 1.241133138815162e-03 1.237500429577569e-03 1.233875516842409e-03 + 1.230258379605347e-03 1.226648996894390e-03 1.223047347769834e-03 1.219453411324249e-03 1.215867166682440e-03 + 1.212288593001413e-03 1.208717669470346e-03 1.205154375310580e-03 1.201598689775564e-03 1.198050592150850e-03 + 1.194510061754058e-03 1.190977077934853e-03 1.187451620074940e-03 1.183933667588021e-03 1.180423199919783e-03 + 1.176920196547893e-03 1.173424636981956e-03 1.169936500763533e-03 1.166455767466093e-03 1.162982416695017e-03 + 1.159516428087600e-03 1.156057781313011e-03 1.152606456072314e-03 1.149162432098436e-03 1.145725689156178e-03 + 1.142296207042214e-03 1.138873965585075e-03 1.135458944645149e-03 1.132051124114701e-03 1.128650483917844e-03 + 1.125257004010582e-03 1.121870664380775e-03 1.118491445048173e-03 1.115119326064418e-03 1.111754287513049e-03 + 1.108396309509520e-03 1.105045372201222e-03 1.101701455767467e-03 1.098364540419554e-03 1.095034606400740e-03 + 1.091711633986298e-03 1.088395603483517e-03 1.085086495231737e-03 1.081784289602370e-03 1.078488966998942e-03 + 1.075200507857104e-03 1.071918892644680e-03 1.068644101861690e-03 1.065376116040399e-03 1.062114915745348e-03 + 1.058860481573393e-03 1.055612794153750e-03 1.052371834148050e-03 1.049137582250364e-03 1.045910019187279e-03 + 1.042689125717927e-03 1.039474882634048e-03 1.036267270760054e-03 1.033066270953071e-03 1.029871864103015e-03 + 1.026684031132645e-03 1.023502752997627e-03 1.020328010686627e-03 1.017159785221338e-03 1.013998057656592e-03 + 1.010842809080414e-03 1.007694020614106e-03 1.004551673412336e-03 1.001415748663209e-03 9.982862275883454e-04 + 9.951630914430032e-04 9.920463215161341e-04 9.889358991304940e-04 9.858318056427387e-04 9.827340224435191e-04 + 9.796425309575967e-04 9.765573126439266e-04 9.734783489957858e-04 9.704056215408804e-04 9.673391118414520e-04 + 9.642788014944001e-04 9.612246721314110e-04 9.581767054190655e-04 9.551348830589791e-04 9.520991867879246e-04 + 9.490695983779663e-04 9.460460996366081e-04 9.430286724069087e-04 9.400172985676444e-04 9.370119600334605e-04 + 9.340126387550004e-04 9.310193167190747e-04 9.280319759488141e-04 9.250505985038272e-04 9.220751664803737e-04 + 9.191056620115199e-04 9.161420672673207e-04 9.131843644549865e-04 9.102325358190642e-04 9.072865636416323e-04 + 9.043464302424672e-04 9.014121179792467e-04 8.984836092477425e-04 8.955608864820149e-04 8.926439321546251e-04 + 8.897327287768275e-04 8.868272588987857e-04 8.839275051098009e-04 8.810334500385090e-04 8.781450763531156e-04 + 8.752623667616279e-04 8.723853040120739e-04 8.695138708927533e-04 8.666480502324669e-04 8.637878249007621e-04 + 8.609331778081941e-04 8.580840919065701e-04 8.552405501892052e-04 8.524025356912048e-04 8.495700314897081e-04 + 8.467430207041795e-04 8.439214864966782e-04 8.411054120721452e-04 8.382947806786894e-04 8.354895756078786e-04 + 8.326897801950465e-04 8.298953778195790e-04 8.271063519052389e-04 8.243226859204696e-04 8.215443633787162e-04 + 8.187713678387469e-04 8.160036829049944e-04 8.132412922278703e-04 8.104841795041216e-04 8.077323284771643e-04 + 8.049857229374433e-04 8.022443467227913e-04 7.995081837187784e-04 7.967772178590831e-04 7.940514331258846e-04 + 7.913308135502152e-04 7.886153432123640e-04 7.859050062422616e-04 7.831997868198731e-04 7.804996691756158e-04 + 7.778046375907538e-04 7.751146763978152e-04 7.724297699810254e-04 7.697499027767166e-04 7.670750592737843e-04 + 7.644052240141052e-04 7.617403815929973e-04 7.590805166596724e-04 7.564256139176881e-04 7.537756581254217e-04 + 7.511306340965478e-04 7.484905267004947e-04 7.458553208629633e-04 7.432250015663922e-04 7.405995538504698e-04 + 7.379789628126455e-04 7.353632136086244e-04 7.327522914529168e-04 7.301461816193337e-04 7.275448694415425e-04 + 7.249483403136044e-04 7.223565796905160e-04 7.197695730887685e-04 7.171873060869209e-04 7.146097643261519e-04 + 7.120369335108511e-04 7.094687994091979e-04 7.069053478537547e-04 7.043465647420749e-04 7.017924360372905e-04 + 6.992429477687458e-04 6.966980860326181e-04 6.941578369925341e-04 6.916221868802212e-04 6.890911219961460e-04 + 6.865646287101673e-04 6.840426934622089e-04 6.815253027629065e-04 6.790124431943022e-04 6.765041014105243e-04 + 6.740002641384718e-04 6.715009181785323e-04 6.690060504052715e-04 6.665156477681531e-04 6.640296972922814e-04 + 6.615481860791069e-04 6.590711013071894e-04 6.565984302329301e-04 6.541301601913344e-04 6.516662785967873e-04 + 6.492067729438071e-04 6.467516308078424e-04 6.443008398460541e-04 6.418543877981128e-04 6.394122624870153e-04 + 6.369744518198842e-04 6.345409437887953e-04 6.321117264716196e-04 6.296867880328447e-04 6.272661167244345e-04 + 6.248497008866846e-04 6.224375289490769e-04 6.200295894311662e-04 6.176258709434476e-04 6.152263621882515e-04 + 6.128310519606457e-04 6.104399291493323e-04 6.080529827375613e-04 6.056702018040650e-04 6.032915755239742e-04 + 6.009170931697627e-04 5.985467441121958e-04 5.961805178212783e-04 5.938184038672286e-04 5.914603919214390e-04 + 5.891064717574551e-04 5.867566332519756e-04 5.844108663858301e-04 5.820691612449991e-04 5.797315080216048e-04 + 5.773978970149492e-04 5.750683186325317e-04 5.727427633910793e-04 5.704212219175993e-04 5.681036849504175e-04 + 5.657901433402401e-04 5.634805880512227e-04 5.611750101620305e-04 5.588734008669272e-04 5.565757514768592e-04 + 5.542820534205412e-04 5.519922982455720e-04 5.497064776195245e-04 5.474245833310661e-04 5.451466072910871e-04 + 5.428725415338165e-04 5.406023782179598e-04 5.383361096278425e-04 5.360737281745471e-04 5.338152263970798e-04 + 5.315605969635125e-04 5.293098326721548e-04 5.270629264527280e-04 5.248198713675304e-04 5.225806606126214e-04 + 5.203452875190134e-04 5.181137455538510e-04 5.158860283216167e-04 5.136621295653204e-04 5.114420431677133e-04 + 5.092257631524941e-04 5.070132836855160e-04 5.048045990760078e-04 5.025997037777986e-04 5.003985923905294e-04 + 4.982012596608911e-04 4.960077004838482e-04 4.938179099038688e-04 4.916318831161700e-04 4.894496154679423e-04 + 4.872711024595963e-04 4.850963397459992e-04 4.829253231377166e-04 4.807580486022647e-04 4.785945122653413e-04 + 4.764347104120705e-04 4.742786394882654e-04 4.721262961016472e-04 4.699776770231128e-04 4.678327791879566e-04 + 4.656915996971294e-04 4.635541358184743e-04 4.614203849879615e-04 4.592903448109291e-04 4.571640130633188e-04 + 4.550413876929031e-04 4.529224668205208e-04 4.508072487412936e-04 4.486957319258494e-04 4.465879150215445e-04 + 4.444837968536653e-04 4.423833764266389e-04 4.402866529252409e-04 4.381936257157713e-04 4.361042943472626e-04 + 4.340186585526459e-04 4.319367182499267e-04 4.298584735433560e-04 4.277839247245788e-04 4.257130722737879e-04 + 4.236459168608553e-04 4.215824593464625e-04 4.195227007832233e-04 4.174666424167804e-04 4.154142856869037e-04 + 4.133656322285796e-04 4.113206838730657e-04 4.092794426489623e-04 4.072419107832454e-04 4.052080907022947e-04 + 4.031779850329171e-04 4.011515966033265e-04 3.991289284441383e-04 3.971099837893318e-04 3.950947660771903e-04 + 3.930832789512367e-04 3.910755262611370e-04 3.890715120635941e-04 3.870712406232216e-04 3.850747164133836e-04 + 3.830819441170283e-04 3.810929286274977e-04 3.791076750492999e-04 3.771261886988812e-04 3.751484751053507e-04 + 3.731745400111936e-04 3.712043893729607e-04 3.692380293619207e-04 3.672754663646915e-04 3.653167069838493e-04 + 3.633617580384936e-04 3.614106265648033e-04 3.594633198165416e-04 3.575198452655453e-04 3.555802106021787e-04 + 3.536444237357472e-04 3.517124927948939e-04 3.497844261279399e-04 3.478602323032118e-04 3.459399201093211e-04 + 3.440234985554071e-04 3.421109768713465e-04 3.402023645079316e-04 3.382976711369872e-04 3.363969066514760e-04 + 3.345000811655402e-04 3.326072050145173e-04 3.307182887549079e-04 3.288333431642967e-04 3.269523792412342e-04 + 3.250754082050812e-04 3.232024414957865e-04 3.213334907736431e-04 3.194685679189784e-04 3.176076850318071e-04 + 3.157508544314351e-04 3.138980886560037e-04 3.120494004619938e-04 3.102048028236815e-04 3.083643089325236e-04 + 3.065279321965175e-04 3.046956862394788e-04 3.028675849002833e-04 3.010436422320546e-04 2.992238725012805e-04 + 2.974082901868850e-04 2.955969099792442e-04 2.937897467791316e-04 2.919868156966190e-04 2.901881320499057e-04 + 2.883937113640927e-04 2.866035693698992e-04 2.848177220023049e-04 2.830361853991480e-04 2.812589758996397e-04 + 2.794861100428266e-04 2.777176045659920e-04 2.759534764029790e-04 2.741937426824542e-04 2.724384207261132e-04 + 2.706875280467976e-04 2.689410823465721e-04 2.671991015147054e-04 2.654616036255998e-04 2.637286069366518e-04 + 2.620001298860284e-04 2.602761910903856e-04 2.585568093425185e-04 2.568420036089220e-04 2.551317930273040e-04 + 2.534261969040036e-04 2.517252347113521e-04 2.500289260849598e-04 2.483372908209174e-04 2.466503488729361e-04 + 2.449681203494164e-04 2.432906255104244e-04 2.416178847646195e-04 2.399499186660811e-04 2.382867479110827e-04 + 2.366283933347842e-04 2.349748759078369e-04 2.333262167329386e-04 2.316824370412873e-04 2.300435581889795e-04 + 2.284096016533290e-04 2.267805890291010e-04 2.251565420246854e-04 2.235374824581899e-04 2.219234322534543e-04 + 2.203144134360031e-04 2.187104481289090e-04 2.171115585485916e-04 2.155177670005515e-04 2.139290958750094e-04 + 2.123455676424941e-04 2.107672048493520e-04 2.091940301131766e-04 2.076260661181851e-04 2.060633356105059e-04 + 2.045058613934101e-04 2.029536663224731e-04 2.014067733006575e-04 1.998652052733419e-04 1.983289852232798e-04 + 1.967981361654851e-04 1.952726811420648e-04 1.937526432169795e-04 1.922380454707444e-04 1.907289109950740e-04 + 1.892252628874529e-04 1.877271242456615e-04 1.862345181622395e-04 1.847474677188843e-04 1.832659959808085e-04 + 1.817901259910281e-04 1.803198807646104e-04 1.788552832828652e-04 1.773963564874827e-04 1.759431232746311e-04 + 1.744956064889993e-04 1.730538289177999e-04 1.716178132847299e-04 1.701875822438821e-04 1.687631583736205e-04 + 1.673445641704270e-04 1.659318220426905e-04 1.645249543044856e-04 1.631239831692970e-04 1.617289307437285e-04 + 1.603398190211818e-04 1.589566698754962e-04 1.575795050545791e-04 1.562083461740089e-04 1.548432147106115e-04 + 1.534841319960310e-04 1.521311192102718e-04 1.507841973752365e-04 1.494433873482522e-04 1.481087098155803e-04 + 1.467801852859277e-04 1.454578340839574e-04 1.441416763437795e-04 1.428317320024697e-04 1.415280207935674e-04 + 1.402305622405927e-04 1.389393756505731e-04 1.376544801075711e-04 1.363758944662350e-04 1.351036373453669e-04 + 1.338377271214972e-04 1.325781819225001e-04 1.313250196212134e-04 1.300782578291012e-04 1.288379138899411e-04 + 1.276040048735375e-04 1.263765475694828e-04 1.251555584809442e-04 1.239410538184992e-04 1.227330494940161e-04 + 1.215315611145692e-04 1.203366039764162e-04 1.191481930590239e-04 1.179663430191405e-04 1.167910681849382e-04 + 1.156223825502033e-04 1.144602997685972e-04 1.133048331479846e-04 1.121559956448188e-04 1.110137998586093e-04 + 1.098782580264597e-04 1.087493820176774e-04 1.076271833284709e-04 1.065116730767186e-04 1.054028619968280e-04 + 1.043007604346849e-04 1.032053783426810e-04 1.021167252748428e-04 1.010348103820536e-04 9.995964240736539e-05 + 9.889122968142069e-05 9.782958011796412e-05 9.677470120946738e-05 9.572660002285777e-05 9.468528319534899e-05 + 9.365075693039483e-05 9.262302699374159e-05 9.160209870960559e-05 9.058797695696633e-05 8.958066616597201e-05 + 8.858017031447301e-05 8.758649292467811e-05 8.659963705992675e-05 8.561960532160170e-05 8.464639984615602e-05 + 8.368002230227816e-05 8.272047388818898e-05 8.176775532906464e-05 8.082186687460081e-05 7.988280829671235e-05 + 7.895057888736329e-05 7.802517745654561e-05 7.710660233038779e-05 7.619485134940996e-05 7.528992186692232e-05 + 7.439181074755863e-05 7.350051436596017e-05 7.261602860560519e-05 7.173834885777512e-05 7.086747002067788e-05 + 7.000338649870708e-05 6.914609220185583e-05 6.829558054527721e-05 6.745184444898630e-05 6.661487633771749e-05 + 6.578466814092885e-05 6.496121129294897e-05 6.414449673328256e-05 6.333451490705303e-05 6.253125576560153e-05 + 6.173470876723337e-05 6.094486287810570e-05 6.016170657327246e-05 5.938522783786698e-05 5.861541416843609e-05 + 5.785225257442225e-05 5.709572957978326e-05 5.634583122476305e-05 5.560254306780529e-05 5.486585018760457e-05 + 5.413573718530735e-05 5.341218818684498e-05 5.269518684541193e-05 5.198471634408232e-05 5.128075939855852e-05 + 5.058329826005981e-05 4.989231471834558e-05 4.920779010486586e-05 4.852970529605069e-05 4.785804071672127e-05 + 4.719277634363360e-05 4.653389170914911e-05 4.588136590502368e-05 4.523517758632414e-05 4.459530497546550e-05 + 4.396172586636035e-05 4.333441762869301e-05 4.271335721230002e-05 4.209852115166751e-05 4.148988557053851e-05 + 4.088742618662300e-05 4.029111831641795e-05 3.970093688012960e-05 3.911685640669207e-05 3.853885103889048e-05 + 3.796689453857244e-05 3.740096029195752e-05 3.684102131503671e-05 3.628705025905535e-05 3.573901941608762e-05 + 3.519690072468710e-05 3.466066577562121e-05 3.413028581768327e-05 3.360573176357403e-05 3.308697419585968e-05 + 3.257398337299743e-05 3.206672923542403e-05 3.156518141171296e-05 3.106930922478571e-05 3.057908169818484e-05 + 3.009446756240164e-05 2.961543526125175e-05 2.914195295830334e-05 2.867398854335129e-05 2.821150963893049e-05 + 2.775448360687515e-05 2.730287755490999e-05 2.685665834327950e-05 2.641579259140865e-05 2.598024668458958e-05 + 2.554998678069716e-05 2.512497881692752e-05 2.470518851655354e-05 2.429058139570310e-05 2.388112277014653e-05 + 2.347677776209982e-05 2.307751130703654e-05 2.268328816050314e-05 2.229407290494254e-05 2.190982995651459e-05 + 2.153052357191726e-05 2.115611785520415e-05 2.078657676459225e-05 2.042186411926256e-05 2.006194360614966e-05 + 1.970677878671296e-05 1.935633310369577e-05 1.901056988786086e-05 1.866945236470675e-05 1.833294366116003e-05 + 1.800100681223881e-05 1.767360476768973e-05 1.735070039859402e-05 1.703225650393799e-05 1.671823581715181e-05 + 1.640860101260710e-05 1.610331471207767e-05 1.580233949115841e-05 1.550563788563895e-05 1.521317239783367e-05 + 1.492490550286458e-05 1.464079965489248e-05 1.436081729330114e-05 1.408492084882477e-05 1.381307274962391e-05 + 1.354523542730492e-05 1.328137132288014e-05 1.302144289267083e-05 1.276541261414933e-05 1.251324299171729e-05 + 1.226489656242331e-05 1.202033590161290e-05 1.177952362851430e-05 1.154242241175703e-05 1.130899497481984e-05 + 1.107920410141205e-05 1.085301264078127e-05 1.063038351295119e-05 1.041127971388670e-05 1.019566432058343e-05 + 9.983500496084821e-06 9.774751494423275e-06 9.569380665483623e-06 9.367351459792183e-06 9.168627433225671e-06 + 8.973172251643503e-06 8.780949695441150e-06 8.591923664022754e-06 8.406058180195186e-06 8.223317394481686e-06 + 8.043665589353297e-06 7.867067183381360e-06 7.693486735306313e-06 7.522888948026158e-06 7.355238672503077e-06 + 7.190500911586492e-06 7.028640823755134e-06 6.869623726776599e-06 6.713415101283138e-06 6.559980594266900e-06 + 6.409286022490674e-06 6.261297375817477e-06 6.115980820457731e-06 5.973302702132995e-06 5.833229549159395e-06 + 5.695728075447326e-06 5.560765183420738e-06 5.428307966854883e-06 5.298323713632066e-06 5.170779908417491e-06 + 5.045644235254726e-06 4.922884580079970e-06 4.802469033158413e-06 4.684365891439682e-06 4.568543660835707e-06 + 4.454971058420297e-06 4.343617014550190e-06 4.234450674909781e-06 4.127441402479353e-06 4.022558779426295e-06 + 3.919772608922426e-06 3.819052916885255e-06 3.720369953646088e-06 3.623694195544675e-06 3.528996346450582e-06 + 3.436247339213261e-06 3.345418337041000e-06 3.256480734808553e-06 3.169406160296344e-06 3.084166475359596e-06 + 3.000733777030156e-06 2.919080398551037e-06 2.839178910343863e-06 2.761002120911402e-06 2.684523077675286e-06 + 2.609715067749243e-06 2.536551618650253e-06 2.465006498946663e-06 2.395053718845667e-06 2.326667530720458e-06 + 2.259822429577368e-06 2.194493153465346e-06 2.130654683827015e-06 2.068282245793597e-06 2.007351308424123e-06 + 1.947837584889302e-06 1.889717032602081e-06 1.832965853295182e-06 1.777560493046226e-06 1.723477642252501e-06 + 1.670694235554950e-06 1.619187451713481e-06 1.568934713434016e-06 1.519913687147974e-06 1.472102282745770e-06 + 1.425478653264967e-06 1.380021194533606e-06 1.335708544770622e-06 1.292519584143177e-06 1.250433434282747e-06 + 1.209429457760506e-06 1.169487257522661e-06 1.130586676287289e-06 1.092707795903240e-06 1.055830936671729e-06 + 1.019936656632314e-06 9.850057508132516e-07 9.510192504478489e-07 9.179584221574209e-07 8.858047671014927e-07 + 8.545400200966135e-07 8.241461487044035e-07 7.946053522894528e-07 7.659000610485429e-07 7.380129350113114e-07 + 7.109268630137866e-07 6.846249616454182e-07 6.590905741701426e-07 6.343072694229160e-07 6.102588406818206e-07 + 5.869293045171036e-07 5.643028996176943e-07 5.423640855958241e-07 5.210975417708616e-07 5.004881659329261e-07 + 4.805210730868909e-07 4.611815941779040e-07 4.424552747986825e-07 4.243278738796913e-07 4.067853623627544e-07 + 3.898139218586617e-07 3.733999432897308e-07 3.575300255178580e-07 3.421909739585923e-07 3.273697991822284e-07 + 3.130537155021659e-07 2.992301395514856e-07 2.858866888482460e-07 2.730111803500024e-07 2.605916289983662e-07 + 2.486162462540818e-07 2.370734386231075e-07 2.259518061745216e-07 2.152401410505174e-07 2.049274259692775e-07 + 1.950028327211637e-07 1.854557206586753e-07 1.762756351808914e-07 1.674523062126709e-07 1.589756466792974e-07 + 1.508357509769722e-07 1.430228934395744e-07 1.355275268022795e-07 1.283402806624190e-07 1.214519599379732e-07 + 1.148535433242769e-07 1.085361817491910e-07 1.024911968272929e-07 9.671007931343055e-08 9.118448755599499e-08 + 8.590624595038432e-08 8.086734339298331e-08 7.605993173598786e-08 7.147632424353159e-08 6.710899404933947e-08 + 6.295057261634440e-08 5.899384819855228e-08 5.523176430544641e-08 5.165741816930062e-08 4.826405921566924e-08 + 4.504508753731864e-08 4.199405237195365e-08 3.910465058392956e-08 3.637072515028429e-08 3.378626365131649e-08 + 3.134539676594339e-08 2.904239677211676e-08 2.687167605250832e-08 2.482778560567275e-08 2.290541356294897e-08 + 2.109938371125715e-08 1.940465402203417e-08 1.781631518648325e-08 1.632958915731169e-08 1.493982769716939e-08 + 1.364251093391979e-08 1.243324592294042e-08 1.130776521659587e-08 1.026192544102716e-08 9.291705880418958e-09 + 8.393207068871047e-09 7.562649389999410e-09 6.796371684408959e-09 6.090829865134629e-09 5.442595541179910e-09 + 4.848354649250771e-09 4.304906093780949e-09 3.809160395351848e-09 3.358138347589271e-09 2.948969682616630e-09 + 2.578891745150586e-09 2.245248175299597e-09 1.945487600140316e-09 1.677162334128434e-09 1.437927088398223e-09 + 1.225537689005639e-09 1.037849804158001e-09 8.728176804699865e-10 7.284928882859528e-10 6.030230760955508e-10 + 4.946507340732279e-10 4.017119667624381e-10 3.226352749223068e-10 2.559403465522512e-10 2.002368571033243e-10 + 1.542232788817623e-10 1.166856996476981e-10 8.649665040559172e-11 6.261394238156016e-11 4.407951317750801e-11 + 3.001828208884473e-11 1.963701456948262e-11 1.222319582353213e-11 7.143913500555690e-12 3.844749467454856e-12 + 1.848680627076238e-12 7.549887505659207e-13 2.381792873531496e-13 4.690911377612711e-14 2.923178492452463e-15 + 0.000000000000000e+00 -5.006820713286318e-02 -1.000090145320395e-01 -1.498225894568735e-01 -1.995090990671400e-01 + -2.490687104230436e-01 -2.985015904852200e-01 -3.478079061147344e-01 -3.969878240730826e-01 -4.460415110221904e-01 + -4.949691335244142e-01 -5.437708580425406e-01 -5.924468509397853e-01 -6.409972784797964e-01 -6.894223068266498e-01 + -7.377221020448543e-01 -7.858968300993463e-01 -8.339466568554940e-01 -8.818717480790957e-01 -9.296722694363804e-01 + -9.773483864940046e-01 -1.024900264719059e+00 -1.072328069479062e+00 -1.119631966041963e+00 -1.166812119576140e+00 + -1.213868695150406e+00 -1.260801857733998e+00 -1.307611772196589e+00 -1.354298603308276e+00 -1.400862515739593e+00 + -1.447303674061498e+00 -1.493622242745386e+00 -1.539818386163074e+00 -1.585892268586817e+00 -1.631844054189294e+00 + -1.677673907043621e+00 -1.723381991123338e+00 -1.768968470302417e+00 -1.814433508355262e+00 -1.859777268956706e+00 + -1.904999915682013e+00 -1.950101612006874e+00 -1.995082521307415e+00 -2.039942806860190e+00 -2.084682631842184e+00 + -2.129302159330809e+00 -2.173801552303911e+00 -2.218180973639766e+00 -2.262440586117080e+00 -2.306580552414984e+00 + -2.350601035113049e+00 -2.394502196691267e+00 -2.438284199530069e+00 -2.481947205910305e+00 -2.525491378013265e+00 + -2.568916877920667e+00 -2.612223867614658e+00 -2.655412508977812e+00 -2.698482963793142e+00 -2.741435393744081e+00 + -2.784269960414501e+00 -2.826986825288698e+00 -2.869586149751399e+00 -2.912068095087767e+00 -2.954432822483390e+00 + -2.996680493024283e+00 -3.038811267696898e+00 -3.080825307388120e+00 -3.122722772885253e+00 -3.164503824876038e+00 + -3.206168623948646e+00 -3.247717330591680e+00 -3.289150105194168e+00 -3.330467108045571e+00 -3.371668499335783e+00 + -3.412754439155127e+00 -3.453725087494349e+00 -3.494580604244637e+00 -3.535321149197600e+00 -3.575946882045281e+00 + -3.616457962380155e+00 -3.656854549695122e+00 -3.697136803383518e+00 -3.737304882739106e+00 -3.777358946956077e+00 + -3.817299155129062e+00 -3.857125666253106e+00 -3.896838639223701e+00 -3.936438232836761e+00 -3.975924605788628e+00 + -4.015297916676078e+00 -4.054558323996317e+00 -4.093705986146982e+00 -4.132741061426137e+00 -4.171663708032280e+00 + -4.210474084064336e+00 -4.249172347521660e+00 -4.287758656304046e+00 -4.326233168211704e+00 -4.364596040945284e+00 + -4.402847432105863e+00 -4.440987499194948e+00 -4.479016399614483e+00 -4.516934290666828e+00 -4.554741329554785e+00 + -4.592437673381585e+00 -4.630023479150889e+00 -4.667498903766779e+00 -4.704864104033777e+00 -4.742119236656837e+00 + -4.779264458241338e+00 -4.816299925293086e+00 -4.853225794218325e+00 -4.890042221323723e+00 -4.926749362816387e+00 + -4.963347374803837e+00 -4.999836413294049e+00 -5.036216634195402e+00 -5.072488193316728e+00 -5.108651246367274e+00 + -5.144705948956722e+00 -5.180652456595185e+00 -5.216490924693209e+00 -5.252221508561761e+00 -5.287844363412249e+00 + -5.323359644356509e+00 -5.358767506406799e+00 -5.394068104475816e+00 -5.429261593376688e+00 -5.464348127822958e+00 + -5.499327862428623e+00 -5.534200951708094e+00 -5.568967550076214e+00 -5.603627811848263e+00 -5.638181891239942e+00 + -5.672629942367392e+00 -5.706972119247172e+00 -5.741208575796287e+00 -5.775339465832159e+00 -5.809364943072646e+00 + -5.843285161136033e+00 -5.877100273541042e+00 -5.910810433706818e+00 -5.944415794952943e+00 -5.977916510499413e+00 + -6.011312733466676e+00 -6.044604616875601e+00 -6.077792313647489e+00 -6.110875976604064e+00 -6.143855758467481e+00 + -6.176731811860341e+00 -6.209504289305658e+00 -6.242173343226881e+00 -6.274739125947890e+00 -6.307201789692997e+00 + -6.339561486586946e+00 -6.371818368654901e+00 -6.403972587822468e+00 -6.436024295915685e+00 -6.467973644660999e+00 + -6.499820785685313e+00 -6.531565870515943e+00 -6.563209050580643e+00 -6.594750477207605e+00 -6.626190301625428e+00 + -6.657528674963161e+00 -6.688765748250275e+00 -6.719901672416680e+00 -6.750936598292705e+00 -6.781870676609118e+00 + -6.812704057997106e+00 -6.843436892988300e+00 -6.874069332014752e+00 -6.904601525408949e+00 -6.935033623403804e+00 + -6.965365776132669e+00 -6.995598133629310e+00 -7.025730845827939e+00 -7.055764062563197e+00 -7.085697933570137e+00 + -7.115532608484265e+00 -7.145268236841510e+00 -7.174904968078224e+00 -7.204442951531195e+00 -7.233882336437644e+00 + -7.263223271935214e+00 -7.292465907061986e+00 -7.321610390756475e+00 -7.350656871857605e+00 -7.379605499104758e+00 + -7.408456421137727e+00 -7.437209786496745e+00 -7.465865743622467e+00 -7.494424440855989e+00 -7.522886026438825e+00 + -7.551250648512927e+00 -7.579518455120681e+00 -7.607689594204888e+00 -7.635764213608793e+00 -7.663742461076068e+00 + -7.691624484250818e+00 -7.719410430677570e+00 -7.747100447801290e+00 -7.774694682967366e+00 -7.802193283421627e+00 + -7.829596396310321e+00 -7.856904168680123e+00 -7.884116747478167e+00 -7.911234279551978e+00 -7.938256911649533e+00 + -7.965184790419241e+00 -7.992018062409932e+00 -8.018756874070876e+00 -8.045401371751767e+00 -8.071951701702716e+00 + -8.098408010074298e+00 -8.124770442917484e+00 -8.151039146183699e+00 -8.177214265724785e+00 -8.203295947293009e+00 + -8.229284336541095e+00 -8.255179579022176e+00 -8.280981820189801e+00 -8.306691205397986e+00 -8.332307879901144e+00 + -8.357831988854150e+00 -8.383263677312277e+00 -8.408603090231253e+00 -8.433850372467212e+00 -8.459005668776756e+00 + -8.484069123816868e+00 -8.509040882145003e+00 -8.533921088219028e+00 -8.558709886397235e+00 -8.583407420938359e+00 + -8.608013836001565e+00 -8.632529275646432e+00 -8.656953883832989e+00 -8.681287804421677e+00 -8.705531181173392e+00 + -8.729684157749432e+00 -8.753746877711547e+00 -8.777719484521905e+00 -8.801602121543104e+00 -8.825394932038181e+00 + -8.849098059170597e+00 -8.872711646004243e+00 -8.896235835503438e+00 -8.919670770532946e+00 -8.943016593857950e+00 + -8.966273448144053e+00 -8.989441475957305e+00 -9.012520819764173e+00 -9.035511621931569e+00 -9.058414024726829e+00 + -9.081228170317713e+00 -9.103954200772408e+00 -9.126592258059556e+00 -9.149142484048202e+00 -9.171605020507837e+00 + -9.193980009108369e+00 -9.216267591420158e+00 -9.238467908913965e+00 -9.260581102961002e+00 -9.282607314832910e+00 + -9.304546685701746e+00 -9.326399356640019e+00 -9.348165468620651e+00 -9.369845162516999e+00 -9.391438579102848e+00 + -9.412945859052428e+00 -9.434367142940385e+00 -9.455702571241789e+00 -9.476952284332143e+00 -9.498116422487408e+00 + -9.519195125883934e+00 -9.540188534598531e+00 -9.561096788608427e+00 -9.581920027791277e+00 -9.602658391925184e+00 + -9.623312020688653e+00 -9.643881053660643e+00 -9.664365630320537e+00 -9.684765890048151e+00 -9.705081972123706e+00 + -9.725314015727891e+00 -9.745462159941807e+00 -9.765526543746988e+00 -9.785507306025387e+00 -9.805404585559403e+00 + -9.825218521031857e+00 -9.844949251026003e+00 -9.864596914025524e+00 -9.884161648414540e+00 -9.903643592477577e+00 + -9.923042884399642e+00 -9.942359662266103e+00 -9.961594064062814e+00 -9.980746227676038e+00 -9.999816290892465e+00 + -1.001880439139924e+01 -1.003771066678389e+01 -1.005653525453442e+01 -1.007527829203923e+01 -1.009393991658719e+01 + -1.011252026536755e+01 -1.013101947547004e+01 -1.014943768388478e+01 -1.016777502750235e+01 -1.018603164311374e+01 + -1.020420766741038e+01 -1.022230323698413e+01 -1.024031848832728e+01 -1.025825355783253e+01 -1.027610858179305e+01 + -1.029388369640242e+01 -1.031157903775464e+01 -1.032919474184415e+01 -1.034673094456582e+01 -1.036418778171495e+01 + -1.038156538898727e+01 -1.039886390197894e+01 -1.041608345618655e+01 -1.043322418700714e+01 -1.045028622973813e+01 + -1.046726971957742e+01 -1.048417479162332e+01 -1.050100158087456e+01 -1.051775022223033e+01 -1.053442085049022e+01 + -1.055101360035426e+01 -1.056752860642293e+01 -1.058396600319711e+01 -1.060032592507812e+01 -1.061660850636773e+01 + -1.063281388126810e+01 -1.064894218388186e+01 -1.066499354821207e+01 -1.068096810816215e+01 -1.069686599753606e+01 + -1.071268735003813e+01 -1.072843229927309e+01 -1.074410097874616e+01 -1.075969352186296e+01 -1.077521006192955e+01 + -1.079065073215242e+01 -1.080601566563847e+01 -1.082130499539506e+01 -1.083651885432996e+01 -1.085165737525140e+01 + -1.086672069086799e+01 -1.088170893378879e+01 -1.089662223652332e+01 -1.091146073148151e+01 -1.092622455097371e+01 + -1.094091382721070e+01 -1.095552869230371e+01 -1.097006927826440e+01 -1.098453571700482e+01 -1.099892814033749e+01 + -1.101324667997537e+01 -1.102749146753181e+01 -1.104166263452061e+01 -1.105576031235601e+01 -1.106978463235267e+01 + -1.108373572572567e+01 -1.109761372359055e+01 -1.111141875696323e+01 -1.112515095676012e+01 -1.113881045379803e+01 + -1.115239737879420e+01 -1.116591186236629e+01 -1.117935403503242e+01 -1.119272402721109e+01 -1.120602196922131e+01 + -1.121924799128244e+01 -1.123240222351432e+01 -1.124548479593719e+01 -1.125849583847174e+01 -1.127143548093909e+01 + -1.128430385306078e+01 -1.129710108445878e+01 -1.130982730465550e+01 -1.132248264307379e+01 -1.133506722903689e+01 + -1.134758119176851e+01 -1.136002466039276e+01 -1.137239776393423e+01 -1.138470063131786e+01 -1.139693339136910e+01 + -1.140909617281379e+01 -1.142118910427822e+01 -1.143321231428907e+01 -1.144516593127349e+01 -1.145705008355906e+01 + -1.146886489937375e+01 -1.148061050684601e+01 -1.149228703400470e+01 -1.150389460877910e+01 -1.151543335899894e+01 + -1.152690341239434e+01 -1.153830489659592e+01 -1.154963793913465e+01 -1.156090266744201e+01 -1.157209920884984e+01 + -1.158322769059045e+01 -1.159428823979657e+01 -1.160528098350138e+01 -1.161620604863843e+01 -1.162706356204179e+01 + -1.163785365044587e+01 -1.164857644048558e+01 -1.165923205869620e+01 -1.166982063151351e+01 -1.168034228527367e+01 + -1.169079714621327e+01 -1.170118534046936e+01 -1.171150699407939e+01 -1.172176223298125e+01 -1.173195118301329e+01 + -1.174207396991424e+01 -1.175213071932329e+01 -1.176212155678006e+01 -1.177204660772459e+01 -1.178190599749735e+01 + -1.179169985133925e+01 -1.180142829439164e+01 -1.181109145169626e+01 -1.182068944819532e+01 -1.183022240873145e+01 + -1.183969045804769e+01 -1.184909372078755e+01 -1.185843232149494e+01 -1.186770638461419e+01 -1.187691603449009e+01 + -1.188606139536785e+01 -1.189514259139310e+01 -1.190415974661191e+01 -1.191311298497079e+01 -1.192200243031666e+01 + -1.193082820639688e+01 -1.193959043685923e+01 -1.194828924525194e+01 -1.195692475502366e+01 -1.196549708952346e+01 + -1.197400637200087e+01 -1.198245272560579e+01 -1.199083627338865e+01 -1.199915713830020e+01 -1.200741544319170e+01 + -1.201561131081479e+01 -1.202374486382157e+01 -1.203181622476458e+01 -1.203982551609674e+01 -1.204777286017145e+01 + -1.205565837924252e+01 -1.206348219546420e+01 -1.207124443089115e+01 -1.207894520747849e+01 -1.208658464708172e+01 + -1.209416287145685e+01 -1.210168000226024e+01 -1.210913616104872e+01 -1.211653146927955e+01 -1.212386604831041e+01 + -1.213114001939943e+01 -1.213835350370513e+01 -1.214550662228650e+01 -1.215259949610295e+01 -1.215963224601432e+01 + -1.216660499278085e+01 -1.217351785706324e+01 -1.218037095942266e+01 -1.218716442032061e+01 -1.219389836011910e+01 + -1.220057289908056e+01 -1.220718815736783e+01 -1.221374425504419e+01 -1.222024131207331e+01 -1.222667944831938e+01 + -1.223305878354696e+01 -1.223937943742103e+01 -1.224564152950702e+01 -1.225184517927080e+01 -1.225799050607866e+01 + -1.226407762919731e+01 -1.227010666779390e+01 -1.227607774093601e+01 -1.228199096759167e+01 -1.228784646662930e+01 + -1.229364435681777e+01 -1.229938475682639e+01 -1.230506778522489e+01 -1.231069356048343e+01 -1.231626220097260e+01 + -1.232177382496342e+01 -1.232722855062735e+01 -1.233262649603627e+01 -1.233796777916249e+01 -1.234325251787875e+01 + -1.234848082995823e+01 -1.235365283307453e+01 -1.235876864480168e+01 -1.236382838261416e+01 -1.236883216388684e+01 + -1.237378010589507e+01 -1.237867232581458e+01 -1.238350894072156e+01 -1.238829006759264e+01 -1.239301582330486e+01 + -1.239768632463568e+01 -1.240230168826303e+01 -1.240686203076523e+01 -1.241136746862106e+01 -1.241581811820969e+01 + -1.242021409581077e+01 -1.242455551760435e+01 -1.242884249967092e+01 -1.243307515799139e+01 -1.243725360844712e+01 + -1.244137796681987e+01 -1.244544834879187e+01 -1.244946486994575e+01 -1.245342764576457e+01 -1.245733679163183e+01 + -1.246119242283147e+01 -1.246499465454785e+01 -1.246874360186574e+01 -1.247243937977038e+01 -1.247608210314742e+01 + -1.247967188678292e+01 -1.248320884536342e+01 -1.248669309347583e+01 -1.249012474560754e+01 -1.249350391614635e+01 + -1.249683071938049e+01 -1.250010526949862e+01 -1.250332768058983e+01 -1.250649806664364e+01 -1.250961654155002e+01 + -1.251268321909933e+01 -1.251569821298239e+01 -1.251866163679046e+01 -1.252157360401520e+01 -1.252443422804870e+01 + -1.252724362218351e+01 -1.253000189961260e+01 -1.253270917342935e+01 -1.253536555662760e+01 -1.253797116210158e+01 + -1.254052610264600e+01 -1.254303049095597e+01 -1.254548443962702e+01 -1.254788806115515e+01 -1.255024146793674e+01 + -1.255254477226865e+01 -1.255479808634813e+01 -1.255700152227289e+01 -1.255915519204104e+01 -1.256125920755116e+01 + -1.256331368060222e+01 -1.256531872289364e+01 -1.256727444602527e+01 -1.256918096149740e+01 -1.257103838071072e+01 + -1.257284681496637e+01 -1.257460637546593e+01 -1.257631717331139e+01 -1.257797931950519e+01 -1.257959292495018e+01 + -1.258115810044966e+01 -1.258267495670733e+01 -1.258414360432737e+01 -1.258556415381434e+01 -1.258693671557324e+01 + -1.258826139990954e+01 -1.258953831702910e+01 -1.259076757703821e+01 -1.259194928994361e+01 -1.259308356565248e+01 + -1.259417051397238e+01 -1.259521024461135e+01 -1.259620286717785e+01 -1.259714849118074e+01 -1.259804722602935e+01 + -1.259889918103342e+01 -1.259970446540313e+01 -1.260046318824908e+01 -1.260117545858230e+01 -1.260184138531425e+01 + -1.260246107725683e+01 -1.260303464312237e+01 -1.260356219152363e+01 -1.260404383097378e+01 -1.260447966988644e+01 + -1.260486981657566e+01 -1.260521437925592e+01 -1.260551346604211e+01 -1.260576718494959e+01 -1.260597564389410e+01 + -1.260613895069186e+01 -1.260625721305949e+01 -1.260633053861404e+01 -1.260635903487301e+01 -1.260634280925431e+01 + -1.260628196907629e+01 -1.260617662155772e+01 -1.260602687381783e+01 -1.260583283287624e+01 -1.260559460565302e+01 + -1.260531229896868e+01 -1.260498601954415e+01 -1.260461587400078e+01 -1.260420196886037e+01 -1.260374441054513e+01 + -1.260324330537771e+01 -1.260269875958120e+01 -1.260211087927911e+01 -1.260147977049538e+01 -1.260080553915438e+01 + -1.260008829108091e+01 -1.259932813200022e+01 -1.259852516753794e+01 -1.259767950322018e+01 -1.259679124447347e+01 + -1.259586049662475e+01 -1.259488736490141e+01 -1.259387195443126e+01 -1.259281437024255e+01 -1.259171471726395e+01 + -1.259057310032456e+01 -1.258938962415391e+01 -1.258816439338199e+01 -1.258689751253917e+01 -1.258558908605629e+01 + -1.258423921826459e+01 -1.258284801339576e+01 -1.258141557558194e+01 -1.257994200885564e+01 -1.257842741714986e+01 + -1.257687190429799e+01 -1.257527557403389e+01 -1.257363852999181e+01 -1.257196087570644e+01 -1.257024271461292e+01 + -1.256848415004682e+01 -1.256668528524411e+01 -1.256484622334120e+01 -1.256296706737496e+01 -1.256104792028266e+01 + -1.255908888490202e+01 -1.255709006397115e+01 -1.255505156012864e+01 -1.255297347591348e+01 -1.255085591376512e+01 + -1.254869897602341e+01 -1.254650276492863e+01 -1.254426738262151e+01 -1.254199293114321e+01 -1.253967951243528e+01 + -1.253732722833976e+01 -1.253493618059909e+01 -1.253250647085613e+01 -1.253003820065419e+01 -1.252753147143700e+01 + -1.252498638454872e+01 -1.252240304123394e+01 -1.251978154263770e+01 -1.251712198980544e+01 -1.251442448368303e+01 + -1.251168912511681e+01 -1.250891601485352e+01 -1.250610525354031e+01 -1.250325694172481e+01 -1.250037117985505e+01 + -1.249744806827949e+01 -1.249448770724703e+01 -1.249149019690698e+01 -1.248845563730912e+01 -1.248538412840362e+01 + -1.248227577004110e+01 -1.247913066197260e+01 -1.247594890384961e+01 -1.247273059522402e+01 -1.246947583554818e+01 + -1.246618472417486e+01 -1.246285736035725e+01 -1.245949384324899e+01 -1.245609427190411e+01 -1.245265874527712e+01 + -1.244918736222294e+01 -1.244568022149691e+01 -1.244213742175481e+01 -1.243855906155285e+01 -1.243494523934768e+01 + -1.243129605349636e+01 -1.242761160225639e+01 -1.242389198378569e+01 -1.242013729614265e+01 -1.241634763728603e+01 + -1.241252310507506e+01 -1.240866379726940e+01 -1.240476981152912e+01 -1.240084124541475e+01 -1.239687819638721e+01 + -1.239288076180789e+01 -1.238884903893857e+01 -1.238478312494150e+01 -1.238068311687935e+01 -1.237654911171519e+01 + -1.237238120631256e+01 -1.236817949743542e+01 -1.236394408174814e+01 -1.235967505581552e+01 -1.235537251610283e+01 + -1.235103655897574e+01 -1.234666728070035e+01 -1.234226477744320e+01 -1.233782914527124e+01 -1.233336048015188e+01 + -1.232885887795295e+01 -1.232432443444269e+01 -1.231975724528979e+01 -1.231515740606338e+01 -1.231052501223300e+01 + -1.230586015916862e+01 -1.230116294214064e+01 -1.229643345631993e+01 -1.229167179677772e+01 -1.228687805848573e+01 + -1.228205233631608e+01 -1.227719472504134e+01 -1.227230531933448e+01 -1.226738421376893e+01 -1.226243150281853e+01 + -1.225744728085757e+01 -1.225243164216077e+01 -1.224738468090325e+01 -1.224230649116058e+01 -1.223719716690876e+01 + -1.223205680202424e+01 -1.222688549028386e+01 -1.222168332536492e+01 -1.221645040084514e+01 -1.221118681020267e+01 + -1.220589264681609e+01 -1.220056800396442e+01 -1.219521297482709e+01 -1.218982765248399e+01 -1.218441212991541e+01 + -1.217896650000207e+01 -1.217349085552516e+01 -1.216798528916626e+01 -1.216244989350739e+01 -1.215688476103101e+01 + -1.215128998412000e+01 -1.214566565505769e+01 -1.214001186602781e+01 -1.213432870911452e+01 -1.212861627630245e+01 + -1.212287465947663e+01 -1.211710395042252e+01 -1.211130424082602e+01 -1.210547562227344e+01 -1.209961818625157e+01 + -1.209373202414756e+01 -1.208781722724905e+01 -1.208187388674408e+01 -1.207590209372113e+01 -1.206990193916910e+01 + -1.206387351397734e+01 -1.205781690893560e+01 -1.205173221473409e+01 -1.204561952196344e+01 -1.203947892111471e+01 + -1.203331050257938e+01 -1.202711435664937e+01 -1.202089057351704e+01 -1.201463924327516e+01 -1.200836045591694e+01 + -1.200205430133602e+01 -1.199572086932648e+01 -1.198936024958280e+01 -1.198297253169993e+01 -1.197655780517322e+01 + -1.197011615939848e+01 -1.196364768367191e+01 -1.195715246719016e+01 -1.195063059905033e+01 -1.194408216824992e+01 + -1.193750726368688e+01 -1.193090597415958e+01 -1.192427838836681e+01 -1.191762459490782e+01 -1.191094468228228e+01 + -1.190423873889025e+01 -1.189750685303229e+01 -1.189074911290933e+01 -1.188396560662277e+01 -1.187715642217442e+01 + -1.187032164746651e+01 -1.186346137030175e+01 -1.185657567838321e+01 -1.184966465931444e+01 -1.184272840059940e+01 + -1.183576698964250e+01 -1.182878051374855e+01 -1.182176906012282e+01 -1.181473271587098e+01 -1.180767156799916e+01 + -1.180058570341391e+01 -1.179347520892220e+01 -1.178634017123144e+01 -1.177918067694946e+01 -1.177199681258455e+01 + -1.176478866454539e+01 -1.175755631914110e+01 -1.175029986258126e+01 -1.174301938097586e+01 -1.173571496033530e+01 + -1.172838668657044e+01 -1.172103464549255e+01 -1.171365892281336e+01 -1.170625960414500e+01 -1.169883677500004e+01 + -1.169139052079148e+01 -1.168392092683276e+01 -1.167642807833772e+01 -1.166891206042068e+01 -1.166137295809633e+01 + -1.165381085627985e+01 -1.164622583978680e+01 -1.163861799333321e+01 -1.163098740153552e+01 -1.162333414891060e+01 + -1.161565831987575e+01 -1.160795999874870e+01 -1.160023926974762e+01 -1.159249621699111e+01 -1.158473092449818e+01 + -1.157694347618829e+01 -1.156913395588133e+01 -1.156130244729762e+01 -1.155344903405789e+01 -1.154557379968331e+01 + -1.153767682759551e+01 -1.152975820111650e+01 -1.152181800346877e+01 -1.151385631777521e+01 -1.150587322705914e+01 + -1.149786881424431e+01 -1.148984316215492e+01 -1.148179635351558e+01 -1.147372847095134e+01 -1.146563959698768e+01 + -1.145752981405050e+01 -1.144939920446616e+01 -1.144124785046140e+01 -1.143307583416343e+01 -1.142488323759988e+01 + -1.141667014269882e+01 -1.140843663128871e+01 -1.140018278509850e+01 -1.139190868575753e+01 -1.138361441479558e+01 + -1.137530005364285e+01 -1.136696568362999e+01 -1.135861138598808e+01 -1.135023724184860e+01 -1.134184333224349e+01 + -1.133342973810512e+01 -1.132499654026627e+01 -1.131654381946018e+01 -1.130807165632049e+01 -1.129958013138127e+01 + -1.129106932507705e+01 -1.128253931774276e+01 -1.127399018961380e+01 -1.126542202082594e+01 -1.125683489141543e+01 + -1.124822888131893e+01 -1.123960407037354e+01 -1.123096053831678e+01 -1.122229836478661e+01 -1.121361762932140e+01 + -1.120491841135999e+01 -1.119620079024160e+01 -1.118746484520592e+01 -1.117871065539305e+01 -1.116993829984354e+01 + -1.116114785749833e+01 -1.115233940719883e+01 -1.114351302768687e+01 -1.113466879760472e+01 -1.112580679549504e+01 + -1.111692709980095e+01 -1.110802978886602e+01 -1.109911494093422e+01 -1.109018263414994e+01 -1.108123294655804e+01 + -1.107226595610378e+01 -1.106328174063287e+01 -1.105428037789141e+01 -1.104526194552599e+01 -1.103622652108358e+01 + -1.102717418201162e+01 -1.101810500565793e+01 -1.100901906927082e+01 1.095742333120336e+02 1.091890922506397e+02 + 1.088047494644702e+02 1.084212070026502e+02 1.080384668830954e+02 1.076565310926508e+02 1.072754015872302e+02 + 1.068950802919558e+02 1.065155691012983e+02 1.061368698792156e+02 1.057589844592950e+02 1.053819146448920e+02 + 1.050056622092723e+02 1.046302288957519e+02 1.042556164178385e+02 1.038818264593726e+02 1.035088606746698e+02 + 1.031367206886610e+02 1.027654080970355e+02 1.023949244663824e+02 1.020252713343332e+02 1.016564502097027e+02 + 1.012884625726335e+02 1.009213098747367e+02 1.005549935392358e+02 1.001895149611079e+02 9.982487550722918e+01 + 9.946107651651391e+01 9.909811930006161e+01 9.873600514129741e+01 9.837473529611611e+01 9.801431099302570e+01 + 9.765473343328934e+01 9.729600379107079e+01 9.693812321357562e+01 9.658109282119615e+01 9.622491370765414e+01 + 9.586958694014419e+01 9.551511355947734e+01 9.516149458022504e+01 9.480873099086142e+01 9.445682375390803e+01 + 9.410577380607617e+01 9.375558205841089e+01 9.340624939643423e+01 9.305777668028868e+01 9.271016474487986e+01 + 9.236341440002082e+01 9.201752643057391e+01 9.167250159659517e+01 9.132834063347644e+01 9.098504425208868e+01 + 9.064261313892513e+01 9.030104795624305e+01 8.996034934220812e+01 8.962051791103538e+01 8.928155425313282e+01 + 8.894345893524311e+01 8.860623250058630e+01 8.826987546900149e+01 8.793438833708932e+01 8.759977157835368e+01 + 8.726602564334334e+01 8.693315095979320e+01 8.660114793276661e+01 8.627001694479561e+01 8.593975835602284e+01 + 8.561037250434198e+01 8.528185970553862e+01 8.495422025343115e+01 8.462745442001052e+01 8.430156245558098e+01 + 8.397654458889973e+01 8.365240102731744e+01 8.332913195691613e+01 8.300673754265118e+01 8.268521792848749e+01 + 8.236457323754136e+01 8.204480357221665e+01 8.172590901434540e+01 8.140788962532415e+01 8.109074544625376e+01 + 8.077447649807563e+01 8.045908278171052e+01 8.014456427819452e+01 7.983092094881752e+01 7.951815273525871e+01 + 7.920625955972369e+01 7.889524132508032e+01 7.858509791499498e+01 7.827582919406832e+01 7.796743500797002e+01 + 7.765991518357451e+01 7.735326952909556e+01 7.704749783422022e+01 7.674259987024432e+01 7.643857539020500e+01 + 7.613542412901498e+01 7.583314580359571e+01 7.553174011301053e+01 7.523120673859677e+01 7.493154534409864e+01 + 7.463275557579887e+01 7.433483706265072e+01 7.403778941640880e+01 7.374161223176058e+01 7.344630508645656e+01 + 7.315186754144133e+01 7.285829914098234e+01 7.256559941280094e+01 7.227376786820042e+01 7.198280400219586e+01 + 7.169270729364189e+01 7.140347720536150e+01 7.111511318427341e+01 7.082761466152007e+01 7.054098105259392e+01 + 7.025521175746491e+01 6.997030616070660e+01 6.968626363162187e+01 6.940308352436870e+01 6.912076517808542e+01 + 6.883930791701528e+01 6.855871105063102e+01 6.827897387375917e+01 6.800009566670299e+01 6.772207569536654e+01 + 6.744491321137666e+01 6.716860745220606e+01 6.689315764129513e+01 6.661856298817349e+01 6.634482268858113e+01 + 6.607193592458968e+01 6.579990186472207e+01 6.552871966407307e+01 6.525838846442876e+01 6.498890739438538e+01 + 6.472027556946816e+01 6.445249209225003e+01 6.418555605246864e+01 6.391946652714522e+01 6.365422258069928e+01 + 6.338982326506804e+01 6.312626761981960e+01 6.286355467227198e+01 6.260168343760468e+01 6.234065291897704e+01 + 6.208046210763982e+01 6.182110998305133e+01 6.156259551298916e+01 6.130491765366473e+01 6.104807534983478e+01 + 6.079206753491451e+01 6.053689313108822e+01 6.028255104942200e+01 6.002904018997318e+01 5.977635944190148e+01 + 5.952450768357906e+01 5.927348378269934e+01 5.902328659638665e+01 5.877391497130421e+01 5.852536774376315e+01 + 5.827764373982899e+01 5.803074177542989e+01 5.778466065646255e+01 5.753939917889900e+01 5.729495612889207e+01 + 5.705133028288137e+01 5.680852040769711e+01 5.656652526066541e+01 5.632534358971191e+01 5.608497413346522e+01 + 5.584541562136003e+01 5.560666677373945e+01 5.536872630195745e+01 5.513159290848020e+01 5.489526528698707e+01 + 5.465974212247187e+01 5.442502209134218e+01 5.419110386151996e+01 5.395798609254010e+01 5.372566743564980e+01 + 5.349414653390611e+01 5.326342202227479e+01 5.303349252772649e+01 5.280435666933466e+01 5.257601305837147e+01 + 5.234846029840359e+01 5.212169698538820e+01 5.189572170776721e+01 5.167053304656269e+01 5.144612957547002e+01 + 5.122250986095211e+01 5.099967246233197e+01 5.077761593188590e+01 5.055633881493489e+01 5.033583964993694e+01 + 5.011611696857801e+01 4.989716929586238e+01 4.967899515020360e+01 4.946159304351324e+01 4.924496148129145e+01 + 4.902909896271443e+01 4.881400398072388e+01 4.859967502211384e+01 4.838611056761913e+01 4.817330909200117e+01 + 4.796126906413538e+01 4.774998894709623e+01 4.753946719824366e+01 4.732970226930699e+01 4.712069260647073e+01 + 4.691243665045725e+01 4.670493283661155e+01 4.649817959498379e+01 4.629217535041175e+01 4.608691852260365e+01 + 4.588240752621901e+01 4.567864077095085e+01 4.547561666160539e+01 4.527333359818314e+01 4.507178997595839e+01 + 4.487098418555856e+01 4.467091461304325e+01 4.447157963998218e+01 4.427297764353383e+01 4.407510699652222e+01 + 4.387796606751465e+01 4.368155322089739e+01 4.348586681695263e+01 4.329090521193334e+01 4.309666675813910e+01 + 4.290314980399007e+01 4.271035269410203e+01 4.251827376935949e+01 4.232691136698923e+01 4.213626382063326e+01 + 4.194632946042123e+01 4.175710661304182e+01 4.156859360181524e+01 4.138078874676327e+01 4.119369036468025e+01 + 4.100729676920334e+01 4.082160627088189e+01 4.063661717724682e+01 4.045232779287926e+01 4.026873641947903e+01 + 4.008584135593230e+01 3.990364089837908e+01 3.972213334028034e+01 3.954131697248416e+01 3.936119008329229e+01 + 3.918175095852517e+01 3.900299788158772e+01 3.882492913353387e+01 3.864754299313046e+01 3.847083773692177e+01 + 3.829481163929241e+01 3.811946297253069e+01 3.794479000689075e+01 3.777079101065516e+01 3.759746425019615e+01 + 3.742480799003711e+01 3.725282049291328e+01 3.708150001983250e+01 3.691084483013415e+01 3.674085318155038e+01 + 3.657152333026306e+01 3.640285353096468e+01 3.623484203691445e+01 3.606748709999813e+01 3.590078697078377e+01 + 3.573473989857984e+01 3.556934413149093e+01 3.540459791647471e+01 3.524049949939685e+01 3.507704712508708e+01 + 3.491423903739331e+01 3.475207347923690e+01 3.459054869266600e+01 3.442966291890982e+01 3.426941439843142e+01 + 3.410980137098086e+01 3.395082207564730e+01 3.379247475091147e+01 3.363475763469679e+01 3.347766896442115e+01 + 3.332120697704713e+01 3.316536990913293e+01 3.301015599688208e+01 3.285556347619318e+01 3.270159058270914e+01 + 3.254823555186591e+01 3.239549661894120e+01 3.224337201910200e+01 3.209185998745292e+01 3.194095875908295e+01 + 3.179066656911253e+01 3.164098165273996e+01 3.149190224528781e+01 3.134342658224822e+01 3.119555289932867e+01 + 3.104827943249648e+01 3.090160441802412e+01 3.075552609253247e+01 3.061004269303567e+01 3.046515245698383e+01 + 3.032085362230664e+01 3.017714442745552e+01 3.003402311144676e+01 2.989148791390274e+01 2.974953707509420e+01 + 2.960816883598093e+01 2.946738143825326e+01 2.932717312437205e+01 2.918754213760924e+01 2.904848672208744e+01 + 2.891000512281954e+01 2.877209558574789e+01 2.863475635778283e+01 2.849798568684103e+01 2.836178182188418e+01 + 2.822614301295585e+01 2.809106751121947e+01 2.795655356899480e+01 2.782259943979526e+01 2.768920337836350e+01 + 2.755636364070825e+01 2.742407848413901e+01 2.729234616730227e+01 2.716116495021560e+01 2.703053309430324e+01 + 2.690044886242927e+01 2.677091051893296e+01 2.664191632966084e+01 2.651346456200151e+01 2.638555348491739e+01 + 2.625818136897839e+01 2.613134648639337e+01 2.600504711104281e+01 2.587928151851019e+01 2.575404798611339e+01 + 2.562934479293576e+01 2.550517021985697e+01 2.538152254958323e+01 2.525840006667763e+01 2.513580105758971e+01 + 2.501372381068511e+01 2.489216661627474e+01 2.477112776664359e+01 2.465060555607932e+01 2.453059828090060e+01 + 2.441110423948500e+01 2.429212173229668e+01 2.417364906191383e+01 2.405568453305550e+01 2.393822645260871e+01 + 2.382127312965485e+01 2.370482287549547e+01 2.358887400367887e+01 2.347342483002508e+01 2.335847367265164e+01 + 2.324401885199828e+01 2.313005869085203e+01 2.301659151437139e+01 2.290361565011063e+01 2.279112942804370e+01 + 2.267913118058794e+01 2.256761924262734e+01 2.245659195153566e+01 2.234604764719905e+01 2.223598467203908e+01 + 2.212640137103443e+01 2.201729609174319e+01 2.190866718432462e+01 2.180051300156056e+01 2.169283189887642e+01 + 2.158562223436261e+01 2.147888236879453e+01 2.137261066565379e+01 2.126680549114772e+01 2.116146521422939e+01 + 2.105658820661780e+01 2.095217284281636e+01 2.084821750013293e+01 2.074472055869795e+01 2.064168040148388e+01 + 2.053909541432278e+01 2.043696398592509e+01 2.033528450789705e+01 2.023405537475913e+01 2.013327498396221e+01 + 2.003294173590621e+01 1.993305403395577e+01 1.983361028445800e+01 1.973460889675795e+01 1.963604828321588e+01 + 1.953792685922242e+01 1.944024304321499e+01 1.934299525669275e+01 1.924618192423242e+01 1.914980147350318e+01 + 1.905385233528146e+01 1.895833294346578e+01 1.886324173509111e+01 1.876857715034283e+01 1.867433763257124e+01 + 1.858052162830484e+01 1.848712758726402e+01 1.839415396237463e+01 1.830159920978082e+01 1.820946178885801e+01 + 1.811774016222579e+01 1.802643279576019e+01 1.793553815860612e+01 1.784505472318926e+01 1.775498096522824e+01 + 1.766531536374604e+01 1.757605640108168e+01 1.748720256290115e+01 1.739875233820900e+01 1.731070421935877e+01 + 1.722305670206386e+01 1.713580828540806e+01 1.704895747185570e+01 1.696250276726197e+01 1.687644268088253e+01 + 1.679077572538347e+01 1.670550041685073e+01 1.662061527479960e+01 1.653611882218367e+01 1.645200958540387e+01 + 1.636828609431745e+01 1.628494688224632e+01 1.620199048598568e+01 1.611941544581217e+01 1.603722030549201e+01 + 1.595540361228890e+01 1.587396391697166e+01 1.579289977382209e+01 1.571220974064174e+01 1.563189237875989e+01 + 1.555194625303991e+01 1.547236993188670e+01 1.539316198725297e+01 1.531432099464603e+01 1.523584553313392e+01 + 1.515773418535218e+01 1.507998553750910e+01 1.500259817939236e+01 1.492557070437417e+01 1.484890170941746e+01 + 1.477258979508065e+01 1.469663356552347e+01 1.462103162851170e+01 1.454578259542232e+01 1.447088508124822e+01 + 1.439633770460305e+01 1.432213908772530e+01 1.424828785648329e+01 1.417478264037872e+01 1.410162207255127e+01 + 1.402880478978222e+01 1.395632943249830e+01 1.388419464477534e+01 1.381239907434186e+01 1.374094137258233e+01 + 1.366982019454020e+01 1.359903419892142e+01 1.352858204809707e+01 1.345846240810619e+01 1.338867394865859e+01 + 1.331921534313727e+01 1.325008526860091e+01 1.318128240578609e+01 1.311280543910948e+01 1.304465305666989e+01 + 1.297682395025014e+01 1.290931681531872e+01 1.284213035103173e+01 1.277526326023402e+01 1.270871424946093e+01 + 1.264248202893941e+01 1.257656531258902e+01 1.251096281802338e+01 1.244567326655073e+01 1.238069538317484e+01 + 1.231602789659573e+01 1.225166953921025e+01 1.218761904711245e+01 1.212387516009399e+01 1.206043662164444e+01 + 1.199730217895122e+01 1.193447058289977e+01 1.187194058807336e+01 1.180971095275303e+01 1.174778043891700e+01 + 1.168614781224052e+01 1.162481184209521e+01 1.156377130154850e+01 1.150302496736286e+01 1.144257161999499e+01 + 1.138241004359477e+01 1.132253902600445e+01 1.126295735875738e+01 1.120366383707674e+01 1.114465725987429e+01 + 1.108593642974891e+01 1.102750015298520e+01 1.096934723955158e+01 1.091147650309896e+01 1.085388676095861e+01 + 1.079657683414050e+01 1.073954554733112e+01 1.068279172889172e+01 1.062631421085569e+01 1.057011182892683e+01 + 1.051418342247659e+01 1.045852783454192e+01 1.040314391182260e+01 1.034803050467887e+01 1.029318646712835e+01 + 1.023861065684387e+01 1.018430193515007e+01 1.013025916702085e+01 1.007648122107627e+01 1.002296696957934e+01 + 9.969715288433109e+00 9.916725057177327e+00 9.863995158985015e+00 9.811524480659330e+00 9.759311912629858e+00 + 9.707356348949318e+00 9.655656687289792e+00 9.604211828939103e+00 9.553020678797028e+00 9.502082145371705e+00 + 9.451395140775308e+00 9.400958580720546e+00 9.350771384516388e+00 9.300832475064002e+00 9.251140778852633e+00 + 9.201695225955437e+00 9.152494750025038e+00 9.103538288289274e+00 9.054824781546845e+00 9.006353174162705e+00 + 8.958122414063579e+00 8.910131452733385e+00 8.862379245208468e+00 8.814864750073108e+00 8.767586929454426e+00 + 8.720544749017799e+00 8.673737177961815e+00 8.627163189013453e+00 8.580821758422868e+00 8.534711865958595e+00 + 8.488832494902175e+00 8.443182632043095e+00 8.397761267673651e+00 8.352567395583405e+00 8.307600013054229e+00 + 8.262858120854517e+00 8.218340723234061e+00 8.174046827918417e+00 8.129975446103403e+00 8.086125592449543e+00 + 8.042496285076346e+00 7.999086545556803e+00 7.955895398911531e+00 7.912921873602911e+00 7.870165001529585e+00 + 7.827623818020228e+00 7.785297361827971e+00 7.743184675124144e+00 7.701284803492651e+00 7.659596795923535e+00 + 7.618119704807238e+00 7.576852585928227e+00 7.535794498459135e+00 7.494944504954242e+00 7.454301671343473e+00 + 7.413865066925971e+00 7.373633764364013e+00 7.333606839676335e+00 7.293783372232051e+00 7.254162444744026e+00 + 7.214743143262609e+00 7.175524557168884e+00 7.136505779168429e+00 7.097685905284505e+00 7.059064034851724e+00 + 7.020639270509109e+00 6.982410718193710e+00 6.944377487133790e+00 6.906538689842107e+00 6.868893442109187e+00 + 6.831440862996516e+00 6.794180074829788e+00 6.757110203191956e+00 6.720230376916457e+00 6.683539728080276e+00 + 6.647037391997038e+00 6.610722507210056e+00 6.574594215485321e+00 6.538651661804496e+00 6.502893994357930e+00 + 6.467320364537604e+00 6.431929926929993e+00 6.396721839309023e+00 6.361695262628876e+00 6.326849361016903e+00 + 6.292183301766418e+00 6.257696255329497e+00 6.223387395309813e+00 6.189255898455296e+00 6.155300944650996e+00 + 6.121521716911671e+00 6.087917401374613e+00 6.054487187292215e+00 6.021230267024790e+00 5.988145836032980e+00 + 5.955233092870585e+00 5.922491239177074e+00 5.889919479670221e+00 5.857517022138617e+00 5.825283077434292e+00 + 5.793216859465198e+00 5.761317585187772e+00 5.729584474599416e+00 5.698016750731056e+00 5.666613639639483e+00 + 5.635374370400022e+00 5.604298175098720e+00 5.573384288825102e+00 5.542631949664288e+00 5.512040398689647e+00 + 5.481608879955014e+00 5.451336640487245e+00 5.421222930278409e+00 5.391267002278394e+00 5.361468112386974e+00 + 5.331825519446474e+00 5.302338485233784e+00 5.273006274452956e+00 5.243828154727328e+00 5.214803396592012e+00 + 5.185931273485972e+00 5.157211061744554e+00 5.128642040591578e+00 5.100223492131724e+00 5.071954701342786e+00 + 5.043834956067872e+00 5.015863547007735e+00 4.988039767713006e+00 4.960362914576438e+00 4.932832286825067e+00 + 4.905447186512594e+00 4.878206918511516e+00 4.851110790505328e+00 4.824158112980828e+00 4.797348199220260e+00 + 4.770680365293596e+00 4.744153930050638e+00 4.717768215113373e+00 4.691522544868047e+00 4.665416246457402e+00 + 4.639448649772945e+00 4.613619087447030e+00 4.587926894845135e+00 4.562371410058041e+00 4.536951973894000e+00 + 4.511667929870956e+00 4.486518624208724e+00 4.461503405821186e+00 4.436621626308437e+00 4.411872639949125e+00 + 4.387255803692453e+00 4.362770477150450e+00 4.338416022590225e+00 4.314191804926077e+00 4.290097191711755e+00 + 4.266131553132637e+00 4.242294261997862e+00 4.218584693732665e+00 4.195002226370486e+00 4.171546240545223e+00 + 4.148216119483425e+00 4.125011248996462e+00 4.101931017472926e+00 4.078974815870523e+00 4.056142037708712e+00 + 4.033432079060574e+00 4.010844338545254e+00 3.988378217320130e+00 3.966033119073097e+00 3.943808450014725e+00 + 3.921703618870680e+00 3.899718036873764e+00 3.877851117756436e+00 3.856102277742808e+00 3.834470935541209e+00 + 3.812956512336161e+00 3.791558431781011e+00 3.770276119989899e+00 3.749109005530341e+00 3.728056519415314e+00 + 3.707118095095711e+00 3.686293168452660e+00 3.665581177789810e+00 3.644981563825650e+00 3.624493769685945e+00 + 3.604117240896058e+00 3.583851425373289e+00 3.563695773419241e+00 3.543649737712268e+00 3.523712773299823e+00 + 3.503884337590815e+00 3.484163890348146e+00 3.464550893681012e+00 3.445044812037336e+00 3.425645112196334e+00 + 3.406351263260748e+00 3.387162736649552e+00 3.368079006090228e+00 3.349099547611309e+00 3.330223839534908e+00 + 3.311451362469163e+00 3.292781599300740e+00 3.274214035187451e+00 3.255748157550641e+00 3.237383456067848e+00 + 3.219119422665309e+00 3.200955551510494e+00 3.182891339004800e+00 3.164926283775986e+00 3.147059886670878e+00 + 3.129291650747972e+00 3.111621081270026e+00 3.094047685696694e+00 3.076570973677211e+00 3.059190457043020e+00 + 3.041905649800503e+00 3.024716068123579e+00 3.007621230346497e+00 2.990620656956472e+00 2.973713870586440e+00 + 2.956900396007833e+00 2.940179760123256e+00 2.923551491959345e+00 2.907015122659452e+00 2.890570185476492e+00 + 2.874216215765744e+00 2.857952750977653e+00 2.841779330650699e+00 2.825695496404166e+00 2.809700791931166e+00 + 2.793794762991262e+00 2.777976957403630e+00 2.762246925039747e+00 2.746604217816465e+00 2.731048389688822e+00 + 2.715578996643088e+00 2.700195596689669e+00 2.684897749856101e+00 2.669685018180058e+00 2.654556965702300e+00 + 2.639513158459792e+00 2.624553164478659e+00 2.609676553767267e+00 2.594882898309313e+00 2.580171772056853e+00 + 2.565542750923481e+00 2.550995412777325e+00 2.536529337434337e+00 2.522144106651267e+00 2.507839304118976e+00 + 2.493614515455497e+00 2.479469328199256e+00 2.465403331802387e+00 2.451416117623762e+00 2.437507278922398e+00 + 2.423676410850646e+00 2.409923110447455e+00 2.396246976631691e+00 2.382647610195405e+00 2.369124613797204e+00 + 2.355677591955569e+00 2.342306151042157e+00 2.329009899275257e+00 2.315788446713120e+00 2.302641405247392e+00 + 2.289568388596529e+00 2.276569012299196e+00 2.263642893707789e+00 2.250789651981874e+00 2.238008908081633e+00 + 2.225300284761460e+00 2.212663406563389e+00 2.200097899810677e+00 2.187603392601391e+00 2.175179514801910e+00 + 2.162825898040590e+00 2.150542175701276e+00 2.138327982917036e+00 2.126182956563733e+00 2.114106735253672e+00 + 2.102098959329351e+00 2.090159270857070e+00 2.078287313620708e+00 2.066482733115378e+00 2.054745176541255e+00 + 2.043074292797288e+00 2.031469732474990e+00 2.019931147852245e+00 2.008458192887110e+00 1.997050523211616e+00 + 1.985707796125752e+00 1.974429670591118e+00 1.963215807225068e+00 1.952065868294312e+00 1.940979517709152e+00 + 1.929956421017174e+00 1.918996245397357e+00 1.908098659653924e+00 1.897263334210502e+00 1.886489941103887e+00 + 1.875778153978382e+00 1.865127648079524e+00 1.854538100248402e+00 1.844009188915572e+00 1.833540594095251e+00 + 1.823131997379413e+00 1.812783081931848e+00 1.802493532482461e+00 1.792263035321314e+00 1.782091278292824e+00 + 1.771977950790108e+00 1.761922743749008e+00 1.751925349642477e+00 1.741985462474776e+00 1.732102777775783e+00 + 1.722276992595250e+00 1.712507805497174e+00 1.702794916554071e+00 1.693138027341377e+00 1.683536840931742e+00 + 1.673991061889518e+00 1.664500396265095e+00 1.655064551589301e+00 1.645683236867940e+00 1.636356162576151e+00 + 1.627083040652930e+00 1.617863584495598e+00 1.608697508954374e+00 1.599584530326805e+00 1.590524366352430e+00 + 1.581516736207239e+00 1.572561360498335e+00 1.563657961258498e+00 1.554806261940791e+00 1.546005987413253e+00 + 1.537256863953506e+00 1.528558619243442e+00 1.519910982363931e+00 1.511313683789489e+00 1.502766455383060e+00 + 1.494269030390716e+00 1.485821143436466e+00 1.477422530516995e+00 1.469072928996472e+00 1.460772077601374e+00 + 1.452519716415337e+00 1.444315586874001e+00 1.436159431759841e+00 1.428050995197124e+00 1.419990022646751e+00 + 1.411976260901214e+00 1.404009458079575e+00 1.396089363622327e+00 1.388215728286465e+00 1.380388304140437e+00 + 1.372606844559193e+00 1.364871104219133e+00 1.357180839093267e+00 1.349535806446210e+00 1.341935764829282e+00 + 1.334380474075582e+00 1.326869695295191e+00 1.319403190870247e+00 1.311980724450058e+00 1.304602060946366e+00 + 1.297266966528488e+00 1.289975208618525e+00 1.282726555886614e+00 1.275520778246108e+00 1.268357646848902e+00 + 1.261236934080685e+00 1.254158413556244e+00 1.247121860114752e+00 1.240127049815109e+00 1.233173759931322e+00 + 1.226261768947806e+00 1.219390856554827e+00 1.212560803643888e+00 1.205771392303081e+00 1.199022405812630e+00 + 1.192313628640254e+00 1.185644764421558e+00 1.178990351639750e+00 1.172330399892134e+00 1.165665076185977e+00 + 1.158994547886723e+00 1.152318982717962e+00 1.145638548761464e+00 1.138953414457149e+00 1.132263748603113e+00 + 1.125569720355613e+00 1.118871499229052e+00 1.112169255096024e+00 1.105463158187270e+00 1.098753379091687e+00 + 1.092040088756353e+00 1.085323458486501e+00 1.078603659945532e+00 1.071880865154992e+00 1.065155246494617e+00 + 1.058426976702292e+00 1.051696228874060e+00 1.044963176464139e+00 1.038227993284906e+00 1.031490853506903e+00 + 1.024751931658828e+00 1.018011402627552e+00 1.011269441658102e+00 1.004526224353673e+00 9.977819266756256e-01 + 9.910367249434791e-01 9.842907958349041e-01 9.775443163857631e-01 9.707974639900548e-01 9.640504163999678e-01 + 9.573033517258169e-01 9.505564484361176e-01 9.438098853575320e-01 9.370638416748861e-01 9.303184969311648e-01 + 9.235740310275239e-01 9.168306242232802e-01 9.100884571359185e-01 9.033477107410752e-01 8.966085663725580e-01 + 8.898712057223411e-01 8.831358108405598e-01 8.764025641354974e-01 8.696716483736328e-01 8.629432466795720e-01 + 8.562175425361152e-01 8.494947197842023e-01 8.427749626229529e-01 8.360584556096414e-01 8.293453836597109e-01 + 8.226359320467608e-01 8.159302864025564e-01 8.092286327170322e-01 8.025311573382813e-01 7.958380469725578e-01 + 7.891494886842815e-01 7.824656698960382e-01 7.757867783885769e-01 7.691130023007959e-01 7.624445301297847e-01 + 7.557815507307692e-01 7.491242533171508e-01 7.424728274605000e-01 7.358274630905332e-01 7.291883504951490e-01 + 7.225556803203927e-01 7.159296435704938e-01 7.093104316078179e-01 7.026982361529110e-01 6.960932492844861e-01 + 6.894956634394138e-01 6.829056714127182e-01 6.763234663576075e-01 6.697492417854324e-01 6.631831915657271e-01 + 6.566255099261625e-01 6.500763914526022e-01 6.435360310890530e-01 6.370046241376988e-01 6.304823662588692e-01 + 6.239694534710725e-01 6.174660821509748e-01 6.109724490334143e-01 6.044887512113705e-01 5.980151861360069e-01 + 5.915519516166453e-01 5.850992458207689e-01 5.786572672740203e-01 5.722262148602113e-01 5.658062878213155e-01 + 5.593976857574735e-01 5.530006086269864e-01 5.466152567463054e-01 5.402418307900632e-01 5.338805317910564e-01 + 5.275315611402337e-01 5.211951205867096e-01 5.148714122377686e-01 5.085606385588554e-01 5.022630023735698e-01 + 4.959787068636863e-01 4.897079555691317e-01 4.834509523880138e-01 4.772079015765874e-01 4.709790077492753e-01 + 4.647644758786674e-01 4.585645112955074e-01 4.523793196887113e-01 4.462091071053609e-01 4.400540799506882e-01 + 4.339144449881029e-01 4.277904093391761e-01 4.216821804836242e-01 4.155899662593477e-01 4.095139748624052e-01 + 4.034544148470172e-01 3.974114951255636e-01 3.913854249685925e-01 3.853764140048108e-01 3.793846722211013e-01 + 3.734104099624901e-01 3.674538379321838e-01 3.615151671915433e-01 3.555946091600967e-01 3.496923756155342e-01 + 3.438086786937040e-01 3.379437308886334e-01 3.320977450524912e-01 3.262709343956299e-01 3.204635124865509e-01 + 3.146756932519229e-01 3.089076909765859e-01 3.031597203035364e-01 2.974319962339260e-01 2.917247341270824e-01 + 2.860381497004926e-01 2.803724590298156e-01 2.747278785488482e-01 2.691046250495761e-01 2.635029156821394e-01 + 2.579229679548448e-01 2.523649997341523e-01 2.468292292446944e-01 2.413158750692667e-01 2.358251561488219e-01 + 2.303572917824847e-01 2.249125016275375e-01 2.194910056994242e-01 2.140930243717585e-01 2.087187783763119e-01 + 2.033684888030171e-01 1.980423770999804e-01 1.927406650734665e-01 1.874635748878940e-01 1.822113290658620e-01 + 1.769841504881194e-01 1.717822623935837e-01 1.666058883793370e-01 1.614552524006169e-01 1.563305787708337e-01 + 1.512320921615583e-01 1.461600176025274e-01 1.411145804816291e-01 1.360960065449308e-01 1.311045218966515e-01 + 1.261403529991834e-01 1.212037266730722e-01 1.162948700970307e-01 1.114140108079402e-01 1.065613767008372e-01 + 1.017371960289264e-01 9.694169740357296e-02 9.217510979430731e-02 8.743766252882926e-02 8.272958529298498e-02 + 7.805110813080124e-02 7.340246144445955e-02 6.878387599431000e-02 6.419557574865301e-02 5.963759094957572e-02 + 5.510973963835383e-02 5.061182861803573e-02 4.614366420134985e-02 4.170505221068580e-02 3.729579797811351e-02 + 3.291570634538348e-02 2.856458166389801e-02 2.424222779475722e-02 1.994844810872277e-02 1.568304548623211e-02 + 1.144582231739328e-02 7.236580501990380e-03 3.055121449483738e-03 -1.098753920994699e-03 -5.225245180644838e-03 + -9.324552390984902e-03 -1.339687610386349e-02 -1.744241736145168e-02 -2.146137769625513e-02 -2.545395913110202e-02 + -2.942036417914124e-02 -3.336079584385580e-02 -3.727545761905192e-02 -4.116455348886275e-02 -4.502828792774839e-02 + -4.886686590049362e-02 -5.268049286221068e-02 -5.646937475834091e-02 -6.023371802464499e-02 -6.397372958722036e-02 + -6.768961686247778e-02 -7.138158775716837e-02 -7.504985066836595e-02 -7.869461448345558e-02 -8.231608858017145e-02 + -8.591448282656117e-02 -8.949000758099987e-02 -9.304287369219175e-02 -9.657329249916882e-02 -1.000814758312822e-01 + -1.035676360082217e-01 -1.070319858399865e-01 -1.104747386269179e-01 -1.138961081596785e-01 -1.172963087192557e-01 + -1.206755550769631e-01 -1.240340624944424e-01 -1.273720467236591e-01 -1.306897240069109e-01 -1.339873110768158e-01 + -1.372650251563196e-01 -1.405230839586962e-01 -1.437617056875474e-01 -1.469811090368015e-01 -1.501815131907033e-01 + -1.533631378238363e-01 -1.565262031011094e-01 -1.596709296777471e-01 -1.627975386993119e-01 -1.659062518016920e-01 + -1.689972911110939e-01 -1.720708792440532e-01 -1.751272393074391e-01 -1.781665948984391e-01 -1.811891701045714e-01 + -1.841951895036779e-01 -1.871848781639314e-01 -1.901584616438275e-01 -1.931161659921838e-01 -1.960582177481569e-01 + -1.989848439412171e-01 -2.018962720911678e-01 -2.047927302081405e-01 -2.076744467925835e-01 -2.105416508352842e-01 + -2.133945718173472e-01 -2.162334397102061e-01 -2.190584849756266e-01 -2.218699385656908e-01 -2.246680319228120e-01 + -2.274529969797319e-01 -2.302250661595188e-01 -2.329844723755599e-01 -2.357314490315819e-01 -2.384662300216220e-01 + -2.411890497300586e-01 -2.439001430315905e-01 -2.465997452912398e-01 -2.492880923643536e-01 -2.519654101942959e-01 + -2.546318052497372e-01 -2.572873073104149e-01 -2.599319449888680e-01 -2.625657469889075e-01 -2.651887421056225e-01 + -2.678009592253646e-01 -2.704024273257758e-01 -2.729931754757585e-01 -2.755732328354941e-01 -2.781426286564347e-01 + -2.807013922813106e-01 -2.832495531441233e-01 -2.857871407701484e-01 -2.883141847759324e-01 -2.908307148693000e-01 + -2.933367608493480e-01 -2.958323526064447e-01 -2.983175201222346e-01 -3.007922934696335e-01 -3.032567028128363e-01 + -3.057107784073052e-01 -3.081545505997775e-01 -3.105880498282647e-01 -3.130113066220582e-01 -3.154243516017117e-01 + -3.178272154790621e-01 -3.202199290572119e-01 -3.226025232305456e-01 -3.249750289847160e-01 -3.273374773966475e-01 + -3.296898996345499e-01 -3.320323269578884e-01 -3.343647907174215e-01 -3.366873223551647e-01 -3.389999534044191e-01 + -3.413027154897497e-01 -3.435956403270046e-01 -3.458787597233008e-01 -3.481521055770276e-01 -3.504157098778479e-01 + -3.526696047067033e-01 -3.549138222358042e-01 -3.571483947286386e-01 -3.593733545399630e-01 -3.615887341158137e-01 + -3.637945659934934e-01 -3.659908828015853e-01 -3.681777172599418e-01 -3.703551021796942e-01 -3.725230704632418e-01 + -3.746816551042570e-01 -3.768308891876943e-01 -3.789708058897726e-01 -3.811014384779884e-01 -3.832228203111127e-01 + -3.853349848391901e-01 -3.874379656035336e-01 -3.895317962367406e-01 -3.916165104626694e-01 -3.936921420964613e-01 + -3.957587250445291e-01 -3.978162933045590e-01 -3.998648809655071e-01 -4.019045222076102e-01 -4.039352513023698e-01 + -4.059571026125726e-01 -4.079701105922696e-01 -4.099743097867899e-01 -4.119697348327328e-01 -4.139564204579759e-01 + -4.159344014816657e-01 -4.179037128142267e-01 -4.198643894573553e-01 -4.218164665040198e-01 -4.237599791384667e-01 + -4.256949626362073e-01 -4.276214523640373e-01 -4.295394837800215e-01 -4.314490924334961e-01 -4.333503139650758e-01 + -4.352431841066424e-01 -4.371277386813615e-01 -4.390040136036591e-01 -4.408720448792462e-01 -4.427318686051023e-01 + -4.445835209694806e-01 -4.464270382519082e-01 -4.482624568231898e-01 -4.500898131453974e-01 -4.519091437718829e-01 + -4.537204798147606e-01 -4.555238198492920e-01 -4.573191505590515e-01 -4.591064586095825e-01 -4.608857306658481e-01 + -4.626569533922454e-01 -4.644201134526012e-01 -4.661751975101729e-01 -4.679221922276425e-01 -4.696610842671291e-01 + -4.713918602901750e-01 -4.731145069577533e-01 -4.748290109302707e-01 -4.765353588675560e-01 -4.782335374288742e-01 + -4.799235332729166e-01 -4.816053330578074e-01 -4.832789234410945e-01 -4.849442910797598e-01 -4.866014226302123e-01 + -4.882503047482938e-01 -4.898909240892701e-01 -4.915232673078448e-01 -4.931473210581402e-01 -4.947630719937180e-01 + -4.963705067675664e-01 -4.979696120320962e-01 -4.995603744391628e-01 -5.011427806400350e-01 -5.027168172854194e-01 + -5.042824710254519e-01 -5.058397285096952e-01 -5.073885763871459e-01 -5.089290013062260e-01 -5.104609899147875e-01 + -5.119845288601143e-01 -5.134996047889188e-01 -5.150062043473380e-01 -5.165043141809486e-01 -5.179939209347486e-01 + -5.194750112531676e-01 -5.209475717800650e-01 -5.224115891587316e-01 -5.238670500318844e-01 -5.253139410416705e-01 + -5.267522488296713e-01 -5.281819600368896e-01 -5.296030613037657e-01 -5.310155392701628e-01 -5.324193805753784e-01 + -5.338145718581361e-01 -5.352010997565921e-01 -5.365789509083312e-01 -5.379481119503635e-01 -5.393085695191379e-01 + -5.406603102505220e-01 -5.420033207798205e-01 -5.433375877417659e-01 -5.446630977705182e-01 -5.459798374996671e-01 + -5.472877935622348e-01 -5.485869525906728e-01 -5.498773012168563e-01 -5.511588260720980e-01 -5.524315137871336e-01 + -5.536953509921333e-01 -5.549503243166927e-01 -5.561964203898389e-01 -5.574336258400313e-01 -5.586619272951509e-01 + -5.598813113825183e-01 -5.610917647288757e-01 -5.622932739603984e-01 -5.634858257026908e-01 -5.646694065807859e-01 + -5.658440032191480e-01 -5.670096022416672e-01 -5.681661902716679e-01 -5.693137539319010e-01 -5.704522798445497e-01 + -5.715817546312214e-01 -5.727021649129574e-01 -5.738134973102289e-01 -5.749157384429343e-01 -5.760088749304029e-01 + -5.770928933913911e-01 -5.781677804440886e-01 -5.792335227061124e-01 -5.802901067945099e-01 -5.813375193257541e-01 + -5.823757469223445e-01 -5.834047955512451e-01 -5.844247330966705e-01 -5.854356399335282e-01 -5.864375966009163e-01 + -5.874306838021331e-01 -5.884149824046725e-01 -5.893905734402166e-01 -5.903575381046516e-01 -5.913159577580464e-01 + -5.922659139246776e-01 -5.932074882930060e-01 -5.941407627156944e-01 -5.950658192095977e-01 -5.959827399557637e-01 + -5.968916072994362e-01 -5.977925037500572e-01 -5.986855119812589e-01 -5.995707148308718e-01 -6.004481953009166e-01 + -6.013180365576126e-01 -6.021803219313749e-01 -6.030351349168105e-01 -6.038825591727214e-01 -6.047226785221047e-01 + -6.055555769521532e-01 -6.063813386142549e-01 -6.072000478239908e-01 -6.080117890611353e-01 -6.088166469696649e-01 + -6.096147063577408e-01 -6.104060521977289e-01 -6.111907696261795e-01 -6.119689439438470e-01 -6.127406606156753e-01 + -6.135060052708066e-01 -6.142650637025721e-01 -6.150179218685041e-01 -6.157646658903273e-01 -6.165053820539590e-01 + -6.172401568095165e-01 -6.179690767713046e-01 -6.186922287178311e-01 -6.194096995917915e-01 -6.201215765000805e-01 + -6.208279467137836e-01 -6.215288976681870e-01 -6.222245169627649e-01 -6.229148923611945e-01 -6.236001117913393e-01 + -6.242802633452607e-01 -6.249554352792182e-01 -6.256257160136589e-01 -6.262911941332352e-01 -6.269519583867845e-01 + -6.276080976873425e-01 -6.282597011121409e-01 -6.289068579026028e-01 -6.295496574643525e-01 -6.301881893672028e-01 + -6.308225433451639e-01 -6.314528092964384e-01 -6.320790772834304e-01 -6.327014375327299e-01 -6.333199804351248e-01 + -6.339347965456040e-01 -6.345459765833412e-01 -6.351536114317133e-01 -6.357577921382875e-01 -6.363586099148234e-01 + -6.369561561372827e-01 -6.375505223458158e-01 -6.381418002447719e-01 -6.387300817026894e-01 -6.393154587523098e-01 + -6.398980235905608e-01 -6.404778685785724e-01 -6.410550862416599e-01 -6.416297692693458e-01 -6.422020105153373e-01 + -6.427719029975411e-01 -6.433395398980565e-01 -6.439050145631807e-01 -6.444684205034020e-01 -6.450298513934040e-01 + -6.455894010720687e-01 -6.461471635424699e-01 -6.467032329718739e-01 -6.472577036917475e-01 -6.478106701977483e-01 + -6.483622271497308e-01 -6.489124689263682e-01 -6.494614485843248e-01 -6.500091446157383e-01 -6.505555276741493e-01 + -6.511005683667010e-01 -6.516442372541374e-01 -6.521865048508032e-01 -6.527273416246404e-01 -6.532667179971965e-01 + -6.538046043436144e-01 -6.543409709926411e-01 -6.548757882266224e-01 -6.554090262815059e-01 -6.559406553468384e-01 + -6.564706455657674e-01 -6.569989670350416e-01 -6.575255898050102e-01 -6.580504838796198e-01 -6.585736192164239e-01 + -6.590949657265709e-01 -6.596144932748126e-01 -6.601321716794977e-01 -6.606479707125806e-01 -6.611618600996129e-01 + -6.616738095197463e-01 -6.621837886057342e-01 -6.626917669439322e-01 -6.631977140742914e-01 -6.637015994903700e-01 + -6.642033926393200e-01 -6.647030629218996e-01 -6.652005796924637e-01 -6.656959122589683e-01 -6.661890298829721e-01 + -6.666799017796324e-01 -6.671684971177059e-01 -6.676547850195518e-01 -6.681387345611322e-01 -6.686203147720026e-01 + -6.690994946353258e-01 -6.695762430878612e-01 -6.700505290199712e-01 -6.705223212756167e-01 -6.709915886523573e-01 + -6.714582999013593e-01 -6.719224237273841e-01 -6.723839287887963e-01 -6.728427836975593e-01 -6.732989570192368e-01 + -6.737524172729955e-01 -6.742031329315991e-01 -6.746510724214173e-01 -6.750962041224116e-01 -6.755384963681527e-01 + -6.759779174458065e-01 -6.764144355961427e-01 -6.768480190135280e-01 -6.772786358459313e-01 -6.777062541949238e-01 + -6.781308421156768e-01 -6.785523676169557e-01 -6.789707986611350e-01 -6.793861031641869e-01 -6.797982489956810e-01 + -6.802072039787928e-01 -6.806129358902915e-01 -6.810154124605543e-01 -6.814146013735531e-01 -6.818104702668614e-01 + -6.822029867316560e-01 -6.825921183127129e-01 -6.829778325084067e-01 -6.833600967707130e-01 -6.837388785052096e-01 + -6.841141450710753e-01 -6.844858637810877e-01 -6.848540019016242e-01 -6.852185266526625e-01 -6.855794052077844e-01 + -6.859366046941693e-01 -6.862900921925965e-01 -6.866398347374477e-01 -6.869857993167028e-01 -6.873279528719466e-01 + -6.876662622983601e-01 -6.880006944447252e-01 -6.883312161134265e-01 -6.886577940604462e-01 -6.889803949953719e-01 + -6.892989855813845e-01 -6.896135324352712e-01 -6.899240028387130e-01 -6.902303819477683e-01 -6.905326737376372e-01 + -6.908308830922284e-01 -6.911250149115886e-01 -6.914150741119037e-01 -6.917010656255024e-01 -6.919829944008472e-01 + -6.922608654025442e-01 -6.925346836113381e-01 -6.928044540241121e-01 -6.930701816538887e-01 -6.933318715298318e-01 + -6.935895286972420e-01 -6.938431582175605e-01 -6.940927651683684e-01 -6.943383546433857e-01 -6.945799317524716e-01 + -6.948175016216248e-01 -6.950510693929839e-01 -6.952806402248272e-01 -6.955062192915704e-01 -6.957278117837701e-01 + -6.959454229081232e-01 -6.961590578874640e-01 -6.963687219607667e-01 -6.965744203831468e-01 -6.967761584258561e-01 + -6.969739413762889e-01 -6.971677745379762e-01 -6.973576632305908e-01 -6.975436127899419e-01 -6.977256285679828e-01 + -6.979037159328020e-01 -6.980778802686266e-01 -6.982481269758282e-01 -6.984144614709118e-01 -6.985768891865279e-01 + -6.987354155714625e-01 -6.988900460906402e-01 -6.990407862251279e-01 -6.991876414721307e-01 -6.993306173449924e-01 + -6.994697193731968e-01 -6.996049531023686e-01 -6.997363240942686e-01 -6.998638379267991e-01 -6.999875001940020e-01 + -7.001073165060578e-01 -7.002232924892878e-01 -7.003354337861495e-01 -7.004437460552433e-01 -7.005482349713070e-01 + -7.006489062252197e-01 -7.007457655239951e-01 -7.008388185907949e-01 -7.009280711649124e-01 -7.010135290017818e-01 + -7.010951978729800e-01 -7.011730835662194e-01 -7.012471918853559e-01 -7.013175286503797e-01 -7.013840996974253e-01 + -7.014469108787638e-01 -7.015059680628057e-01 -7.015612771341031e-01 -7.016128439933442e-01 -7.016606745573603e-01 + -7.017047747591189e-01 -7.017451505477279e-01 -7.017818078884350e-01 -7.018147527626287e-01 -7.018439911678338e-01 + -7.018695291177169e-01 -7.018913726420826e-01 -7.019095277868751e-01 -7.019240006141793e-01 -7.019347972022176e-01 + -7.019419236453552e-01 -7.019453860540911e-01 -7.019451905550682e-01 -7.019413432910677e-01 -7.019338504210091e-01 + -7.019227181199530e-01 -7.019079525790984e-01 -7.018895600057832e-01 -7.018675466234870e-01 -7.018419186718257e-01 + -7.018126824065565e-01 -7.017798440995754e-01 -7.017434100389182e-01 -7.017033854997849e-01 -7.016597645302971e-01 + -7.016125342500635e-01 -7.015616816631596e-01 -7.015071937594616e-01 -7.014490575146457e-01 -7.013872598901904e-01 + -7.013217878333770e-01 -7.012526282772851e-01 -7.011797681407969e-01 -7.011031943285972e-01 -7.010228937311708e-01 + -7.009388532248028e-01 -7.008510596715816e-01 -7.007594999193965e-01 -7.006641608019365e-01 -7.005650291386941e-01 + -7.004620917349607e-01 -7.003553353818325e-01 -7.002447468562033e-01 -7.001303129207704e-01 -7.000120203240311e-01 + -6.998898558002854e-01 -6.997638060696334e-01 -6.996338578379767e-01 -6.994999977970194e-01 -6.993622126242656e-01 + -6.992204889830200e-01 -6.990748135223908e-01 -6.989251728772863e-01 -6.987715536684157e-01 -6.986139425022897e-01 + -6.984523259712216e-01 -6.982866906533242e-01 -6.981170231125128e-01 -6.979433098985026e-01 -6.977655375468121e-01 + -6.975836925787603e-01 -6.973977615014658e-01 -6.972077308078509e-01 -6.970135869766381e-01 -6.968153164723517e-01 + -6.966129057453172e-01 -6.964063412316589e-01 -6.961956093533076e-01 -6.959806965179908e-01 -6.957615891192395e-01 + -6.955382735363851e-01 -6.953107361345612e-01 -6.950789632647010e-01 -6.948429412635411e-01 -6.946026564536184e-01 + -6.943580951432718e-01 -6.941092436266389e-01 -6.938560881836621e-01 -6.935986150800827e-01 -6.933368105674458e-01 + -6.930706608830939e-01 -6.928001522501742e-01 -6.925252708776334e-01 -6.922460029602220e-01 -6.919623346784873e-01 + -6.916742521987818e-01 -6.913817416732587e-01 -6.910847892398710e-01 -6.907833810223739e-01 -6.904775031303247e-01 + -6.901671416590796e-01 -6.898522826897985e-01 -6.895329122894415e-01 -6.892090165107716e-01 -6.888805813923492e-01 + -6.885475929585410e-01 -6.882100372195102e-01 -6.878679001712260e-01 -6.875211677954548e-01 -6.871698260597670e-01 + -6.868138609175327e-01 -6.864532583079246e-01 -6.860880041559145e-01 -6.857180843722795e-01 -6.853434848535938e-01 + -6.849641914822348e-01 -6.845801901263810e-01 -6.841914666400134e-01 -6.837980068629107e-01 -6.833997966206585e-01 + -6.829968217246379e-01 -6.825890679720363e-01 -6.821765211458364e-01 -6.817591670148301e-01 -6.813369913336030e-01 + -6.809099798425464e-01 -6.804781182678532e-01 -6.800413923215153e-01 -6.795997877013248e-01 -6.791532900908800e-01 + -6.787018851595766e-01 -6.782455585626130e-01 -6.777842959409880e-01 -6.773180829215009e-01 -6.768469051167566e-01 + -6.763707481251567e-01 -6.758895975309049e-01 -6.754034389040080e-01 -6.749122578002735e-01 -6.744160397613090e-01 + -6.739147703145253e-01 -6.734084349731322e-01 -6.728970192361421e-01 -6.723805085883696e-01 -6.718588885004291e-01 + -6.713321444287366e-01 -6.708002618155093e-01 -6.702632260887672e-01 -6.697210226623294e-01 -6.691736369358174e-01 + -6.686210542946547e-01 -6.680632601100641e-01 -6.675002397390722e-01 -6.669319785245045e-01 -6.663584617949896e-01 + -6.657796748649568e-01 -6.651956030346358e-01 -6.646062315900594e-01 -6.640115458030599e-01 -6.634115309312728e-01 + -6.628061722181323e-01 -6.621954548928766e-01 -6.615793641705435e-01 -6.609578852519731e-01 -6.603310033238052e-01 + -6.596987035584827e-01 -6.590609711142495e-01 -6.584177911351499e-01 -6.577691487510308e-01 -6.571150290775386e-01 + -6.564554172161221e-01 -6.557902982540311e-01 -6.551196572643182e-01 -6.544434793058350e-01 -6.537617494232353e-01 + -6.530744526469753e-01 -6.523815739933100e-01 -6.516830984642986e-01 -6.509790110477993e-01 -6.502692967174731e-01 + -6.495539404327810e-01 -6.488329271389865e-01 -6.481062417671540e-01 -6.473738692341490e-01 -6.466357944426386e-01 + -6.458920022810900e-01 -6.451424776237736e-01 -6.443872053307601e-01 -6.436261702479216e-01 -6.428593572069313e-01 + -6.420867510252639e-01 -6.413083365061960e-01 -6.405240984388038e-01 -6.397340215979669e-01 -6.389380907443646e-01 + -6.381362906244783e-01 -6.373286059705908e-01 -6.365150215007859e-01 -6.356955219189476e-01 -6.348700919147630e-01 + -6.340387161637204e-01 -6.332013793271084e-01 -6.323580660520165e-01 -6.315087609713372e-01 -6.306534487037636e-01 + -6.297921138537887e-01 -6.289247410117088e-01 -6.280513147536213e-01 -6.271718196414233e-01 -6.262862402228142e-01 + -6.253945610312949e-01 -6.244967665861679e-01 -6.235928413925359e-01 -6.226827699413039e-01 -6.217665367155729e-01 + -6.208441375034160e-01 -6.199156027357733e-01 -6.189809695006110e-01 -6.180402749488378e-01 -6.170935562943042e-01 + -6.161408508138034e-01 -6.151821958470703e-01 -6.142176287967820e-01 -6.132471871285575e-01 -6.122709083709591e-01 + -6.112888301154906e-01 -6.103009900165971e-01 -6.093074257916666e-01 -6.083081752210301e-01 -6.073032761479595e-01 + -6.062927664786690e-01 -6.052766841823158e-01 -6.042550672909993e-01 -6.032279538997601e-01 -6.021953821665817e-01 + -6.011573903123885e-01 -6.001140166210489e-01 -5.990652994393731e-01 -5.980112771771128e-01 -5.969519883069611e-01 + -5.958874713645556e-01 -5.948177649484745e-01 -5.937429077202382e-01 -5.926629384043087e-01 -5.915778957880926e-01 + -5.904878187219365e-01 -5.893927461191291e-01 -5.882927169559019e-01 -5.871877702714293e-01 -5.860779451678273e-01 + -5.849632808101529e-01 -5.838438164264069e-01 -5.827195913075317e-01 -5.815906448074122e-01 -5.804570163428739e-01 + -5.793187453936868e-01 -5.781758715025614e-01 -5.770284342751509e-01 -5.758764733800518e-01 -5.747200285488004e-01 + -5.735591395758767e-01 -5.723938463187022e-01 -5.712241886976424e-01 -5.700502066960027e-01 -5.688719403600314e-01 + -5.676894297989186e-01 -5.665027151847987e-01 -5.653118367527454e-01 -5.641168348007759e-01 -5.629177496898495e-01 + -5.617146218438691e-01 -5.605074917496762e-01 -5.592963999570575e-01 -5.580813870787410e-01 -5.568624937903972e-01 + -5.556397608306384e-01 -5.544132290010181e-01 -5.531829391660344e-01 -5.519489322531255e-01 -5.507112492526723e-01 + -5.494699312179977e-01 -5.482250192653676e-01 -5.469765545739900e-01 -5.457245783860135e-01 -5.444691320065307e-01 + -5.432102568035752e-01 -5.419479942081239e-01 -5.406823857140945e-01 -5.394134728783482e-01 -5.381412973206875e-01 + -5.368659007238572e-01 -5.355873248335447e-01 -5.343056114583787e-01 -5.330208024699312e-01 -5.317329398027154e-01 + -5.304420654541877e-01 -5.291482214847454e-01 -5.278514500177287e-01 -5.265517932394201e-01 -5.252492933990449e-01 + -5.239439928087685e-01 -5.226359338436997e-01 -5.213251589418901e-01 -5.200117106043335e-01 -5.186956313949634e-01 + -5.173769639406588e-01 -5.160557509312390e-01 -5.147320351194659e-01 -5.134058593210434e-01 -5.120772664146175e-01 + -5.107462993417771e-01 -5.094130011070527e-01 -5.080774147779163e-01 -5.067395834847835e-01 -5.053995504210110e-01 + -5.040573588428990e-01 -5.027130520696871e-01 -5.013666734835600e-01 -5.000182665296438e-01 -4.986678747160062e-01 + -4.973155416136568e-01 -4.959613108565477e-01 -4.946052261415742e-01 -4.932473312285729e-01 -4.918876699403218e-01 + -4.905262861625424e-01 -4.891632238438978e-01 -4.877985269959926e-01 -4.864322396933758e-01 -4.850644060735362e-01 + -4.836950703369048e-01 -4.823242767468570e-01 -4.809520696297089e-01 -4.795784933747175e-01 -4.782035924340842e-01 + -4.768274113229517e-01 -4.754499946194056e-01 -4.740713869644713e-01 -4.726916330621188e-01 -4.713107776792598e-01 + -4.699288656457480e-01 -4.685459418543784e-01 -4.671620512608888e-01 -4.657772388839603e-01 -4.643915498052149e-01 + -4.630050291692159e-01 -4.616177221834709e-01 -4.602296741184282e-01 -4.588409303074794e-01 -4.574515361469569e-01 + -4.560615370961361e-01 -4.546709786772349e-01 -4.532799064754127e-01 -4.518883661387709e-01 -4.504964033783537e-01 + -4.491040639681477e-01 -4.477113937450810e-01 -4.463184386090235e-01 -4.449252445227886e-01 -4.435318575121306e-01 + -4.421383236657465e-01 -4.407446891352765e-01 -4.393510001353007e-01 -4.379573029433432e-01 -4.365636438998694e-01 + -4.351700694082881e-01 -4.337766259349479e-01 -4.323833600091420e-01 -4.309903182231045e-01 -4.295975472320123e-01 + -4.282050937539836e-01 -4.268130045700788e-01 -4.254213265243025e-01 -4.240301065235996e-01 -4.226393915378561e-01 + -4.212492285999028e-01 -4.198596648055116e-01 -4.184707473133963e-01 -4.170825233452123e-01 -4.156950401855585e-01 + -4.143083451819750e-01 -4.129224857449452e-01 -4.115375093478933e-01 -4.101534635271858e-01 -4.087703958821329e-01 + -4.073883540749858e-01 -4.060073858309366e-01 -4.046275389381228e-01 -4.032488612476213e-01 -4.018714006734523e-01 + -4.004952051925779e-01 -3.991203228449026e-01 -3.977468017332725e-01 -3.963746900234765e-01 -3.950040359442463e-01 + -3.936348877872538e-01 -3.922672939053318e-01 -3.909013026724667e-01 -3.895369624832951e-01 -3.881743217934062e-01 + -3.868134291212124e-01 -3.854543330479465e-01 -3.840970822176634e-01 -3.827417253372384e-01 -3.813883111763704e-01 + -3.800368885675781e-01 -3.786875064062033e-01 -3.773402136504068e-01 -3.759950593211737e-01 -3.746520925023092e-01 + -3.733113623404410e-01 -3.719729180450170e-01 -3.706368088883079e-01 -3.693030842054051e-01 -3.679717933942230e-01 + -3.666429859154951e-01 -3.653167112927784e-01 -3.639930191124511e-01 -3.626719590237131e-01 -3.613535807385852e-01 + -3.600379340319095e-01 -3.587250687413511e-01 -3.574150347673962e-01 -3.561078820733507e-01 -3.548036606853447e-01 + -3.535024206923281e-01 -3.522042122460736e-01 -3.509090855611747e-01 -3.496170909150462e-01 -3.483282786479246e-01 + -3.470426991628686e-01 -3.457604029257590e-01 -3.444814404652952e-01 -3.432058623730013e-01 -3.419337193032218e-01 + -3.406650619731236e-01 -3.393999411626923e-01 -3.381384077147387e-01 -3.368805125348930e-01 -3.356263065916084e-01 + -3.343758409161574e-01 -3.331291666026359e-01 -3.318863348079613e-01 -3.306473967518724e-01 -3.294124037169284e-01 + -3.281814070485113e-01 -3.269544581548245e-01 -3.257316085068936e-01 -3.245129096385630e-01 -3.232984131465022e-01 + -3.220881706902000e-01 -3.208822339919681e-01 -3.196806548369384e-01 -3.184834850730646e-01 -3.172907766111235e-01 + -3.161025814247124e-01 -3.149189515502489e-01 -3.137399390869744e-01 -3.125655961969506e-01 -3.113959751050614e-01 + -3.102311280990106e-01 -3.090711075293261e-01 -3.079159658093553e-01 -3.067657554152684e-01 -3.056205288860567e-01 + -3.044803388235325e-01 -3.033452378923306e-01 -3.022152788199073e-01 -3.010905143965396e-01 -2.999709974753267e-01 + -2.988567809721892e-01 -2.977479178658694e-01 -2.966444611979316e-01 -2.955464640727601e-01 -2.944539796575623e-01 + -2.933670611823666e-01 -2.922857619400235e-01 -2.912101352862035e-01 -2.901402346394004e-01 -2.890761134809285e-01 + -2.880178253549250e-01 -2.869654238683462e-01 -2.859189626909724e-01 -2.848784955554043e-01 -2.838440762570648e-01 + -2.828157586541971e-01 -2.817935966678673e-01 -2.807776403011932e-01 -2.797678983711091e-01 -2.787643552961879e-01 + -2.777669951470781e-01 -2.767758019639380e-01 -2.757907597564386e-01 -2.748118525037599e-01 -2.738390641545946e-01 + -2.728723786271466e-01 -2.719117798091300e-01 -2.709572515577713e-01 -2.700087776998067e-01 -2.690663420314847e-01 + -2.681299283185645e-01 -2.671995202963172e-01 -2.662751016695233e-01 -2.653566561124761e-01 -2.644441672689796e-01 + -2.635376187523493e-01 -2.626369941454105e-01 -2.617422770005014e-01 -2.608534508394704e-01 -2.599704991536770e-01 + -2.590934054039925e-01 -2.582221530207986e-01 -2.573567254039884e-01 -2.564971059229672e-01 -2.556432779166493e-01 + -2.547952246934622e-01 -2.539529295313435e-01 -2.531163756777425e-01 -2.522855463496190e-01 -2.514604247334445e-01 + -2.506409939852015e-01 -2.498272372303841e-01 -2.490191375639964e-01 -2.482166780505548e-01 -2.474198417240862e-01 + -2.466286115881297e-01 -2.458429706157340e-01 -2.450629017494595e-01 -2.442883879013784e-01 -2.435194119530741e-01 + -2.427559567556404e-01 -2.419980051296822e-01 -2.412455398653161e-01 -2.404985437221700e-01 -2.397569994293826e-01 + -2.390208896856035e-01 -2.382901971589939e-01 -2.375649044872263e-01 -2.368449942774841e-01 -2.361304491064614e-01 + -2.354212515203642e-01 -2.347173840349096e-01 -2.340188291353255e-01 -2.333255692763511e-01 -2.326375868822365e-01 + -2.319548643467434e-01 -2.312773840331450e-01 -2.306051282742244e-01 -2.299380793722769e-01 -2.292762195991088e-01 + -2.286195311960375e-01 -2.279679963738911e-01 -2.273215973130095e-01 -2.266803161632434e-01 -2.260441350439553e-01 + -2.254130360440176e-01 -2.247870012218146e-01 -2.241660126052426e-01 -2.235500521917077e-01 -2.229391019481273e-01 + -2.223331438109310e-01 -2.217321596860585e-01 -2.211361314489613e-01 -2.205450409446016e-01 -2.199588699874530e-01 + -2.193776003615005e-01 -2.188012138202396e-01 -2.182296920866779e-01 -2.176630168533334e-01 -2.171011697822352e-01 + -2.165441325049239e-01 -2.159918866224518e-01 -2.154444137053814e-01 -2.149016952937864e-01 -2.143637128972522e-01 + -2.138304479948756e-01 -2.133018820352637e-01 -2.127779964365351e-01 -2.122587725863196e-01 -2.117441918417587e-01 + -2.112342355295040e-01 -2.107288849457191e-01 -2.102281213560782e-01 -2.097319259957676e-01 -2.092402800694834e-01 + -2.087531647514338e-01 -2.082705611853379e-01 -2.077924504844265e-01 -2.073188137314400e-01 -2.068496319786316e-01 + -2.063848862477651e-01 -2.059245575301156e-01 -2.054686267864688e-01 -2.050170749471222e-01 -2.045698829118839e-01 + -2.041270315500738e-01 -2.036885017005225e-01 -2.032542741715718e-01 -2.028243297410749e-01 -2.023986491563959e-01 + -2.019772131344105e-01 -2.015600023615047e-01 -2.011469974935765e-01 -2.007381791560347e-01 -2.003335279437994e-01 + -1.999330244213018e-01 -1.995366491224841e-01 -1.991443825507996e-01 -1.987562051792136e-01 -1.983720974502014e-01 + -1.979920397757498e-01 -1.976160125373575e-01 -1.972439960860335e-01 -1.968759707422984e-01 -1.965119167961837e-01 + -1.961518145072322e-01 -1.957956441044978e-01 -1.954433857865457e-01 -1.950950197214523e-01 -1.947505260468046e-01 + -1.944098848697016e-01 -1.940730762667529e-01 -1.937400802840795e-01 -1.934108769373132e-01 -1.930854462115976e-01 + -1.927637680615867e-01 -1.924458224114464e-01 -1.921315891548532e-01 -1.918210481549953e-01 -1.915141792445713e-01 + -1.912109622257915e-01 -1.909113768703775e-01 -1.906154029195616e-01 -1.903230200840876e-01 -1.900342080442101e-01 + -1.897489464496954e-01 -1.894672149198206e-01 -1.891889930433740e-01 -1.889142603786549e-01 -1.886429964534740e-01 + -1.883751807651533e-01 -1.881107927805258e-01 -1.878498119359353e-01 -1.875922176372374e-01 -1.873379892597982e-01 + -1.870871061484957e-01 -1.868395476177185e-01 -1.865952929513663e-01 -1.863543214028507e-01 -1.861166121950937e-01 + -1.858821445205286e-01 -1.856508975410998e-01 -1.854228503882634e-01 -1.851979821629864e-01 -1.849762719357465e-01 + -1.847576987465328e-01 -1.845422416048462e-01 -1.843298794896979e-01 -1.841205913496106e-01 -1.839143561026183e-01 + -1.837111526362659e-01 -1.835109598076097e-01 -1.833137564432169e-01 -1.831195213391660e-01 -1.829282332610467e-01 + -1.827398709439599e-01 -1.825544130925175e-01 -1.823718383808428e-01 -1.821921254525699e-01 -1.820152529208443e-01 + -1.818411993683228e-01 -1.816699433471729e-01 -1.815014633790739e-01 -1.813357379552156e-01 -1.811727455362996e-01 + -1.810124645525378e-01 -1.808548734036542e-01 -1.806999504588836e-01 -1.805476740569718e-01 -1.803980225061758e-01 + -1.802509740842639e-01 -1.801065070385154e-01 -1.799645995857210e-01 -1.798252299121824e-01 -1.796883761737124e-01 + -1.795540164956351e-01 -1.794221289727858e-01 -1.792926916695106e-01 -1.791656826196672e-01 -1.790410798266241e-01 + -1.789188612632616e-01 -1.787990048719702e-01 -1.786814885646523e-01 -1.785662902227212e-01 -1.784533876971014e-01 + -1.783427588082284e-01 -1.782343813460491e-01 -1.781282330700215e-01 -1.780242917091149e-01 -1.779225349618093e-01 + -1.778229404960962e-01 -1.777254859494784e-01 -1.776301489289694e-01 -1.775369070110945e-01 -1.774457377418894e-01 + -1.773566186369016e-01 -1.772695271811893e-01 -1.771844408293224e-01 -1.771013370053815e-01 -1.770201931029582e-01 + -1.769409864851561e-01 -1.768636944845889e-01 -1.767882944033823e-01 -1.767147635131728e-01 -1.766430790551081e-01 + -1.765732182398469e-01 -1.765051582475594e-01 -1.764388762279266e-01 -1.763743493001411e-01 -1.763115545529062e-01 + -1.762504690444367e-01 -1.761910698024584e-01 -1.761333338242081e-01 -1.760772380764343e-01 -1.760227594953960e-01 + -1.759698749868639e-01 -1.759185614261194e-01 -1.758687956579554e-01 -1.758205544966758e-01 -1.757738147260959e-01 + -1.757285530995419e-01 -1.756847463398511e-01 -1.756423711393722e-01 -1.756014041599649e-01 -1.755618220330002e-01 + -1.755236013593601e-01 -1.754867187094379e-01 -1.754511506231379e-01 -1.754168736098757e-01 -1.753838641485782e-01 + -1.753520986876830e-01 -1.753215536451393e-01 -1.752922054084075e-01 -1.752640303344584e-01 -1.752370047497750e-01 + -1.752111049503510e-01 -1.751863072016910e-01 -1.751625877388110e-01 -1.751399227662384e-01 -1.751182884580113e-01 + -1.750976609576794e-01 -1.750780163783031e-01 -1.750593308024546e-01 -1.750415802822163e-01 -1.750247408391829e-01 + -1.750087884644595e-01 -1.749936991186622e-01 -1.749794487319192e-01 -1.749660132038691e-01 -1.749533684036614e-01 + -1.749414901699577e-01 -1.749303543109301e-01 -1.749199366042621e-01 -1.749102127971480e-01 -1.749011586062938e-01 + -1.748927497179163e-01 -1.748849617877437e-01 -1.748777704410150e-01 -1.748711512724808e-01 -1.748650798464025e-01 + -1.748595316965529e-01 -1.748544823262158e-01 -1.748499072081863e-01 -1.748457817847704e-01 -1.748420814677855e-01 + -1.748387816385604e-01 -1.748358576479346e-01 -1.748332848162586e-01 -1.748310384333948e-01 -1.748290937587165e-01 + -1.748274260211074e-01 -1.748260104189635e-01 -1.748248221201912e-01 -1.748238362622083e-01 -1.748230279519439e-01 + -1.748223722658380e-01 -1.748218442498419e-01 -1.748214189194180e-01 -1.748210712595399e-01 -1.748207762246925e-01 + -1.748205087388716e-01 -1.748202436955843e-01 -1.748199559578488e-01 -1.748196203581945e-01 -1.748192116986621e-01 + -1.748187047508032e-01 -1.748180742556807e-01 -1.748172949238688e-01 -1.748163414354525e-01 -1.748151884400282e-01 + -1.748138105567034e-01 -1.748121823740970e-01 -1.748102784503386e-01 -1.748080733130694e-01 -1.748055414594414e-01 + -1.748026573561181e-01 -1.747993954392739e-01 -1.747957301145945e-01 -1.747916357572767e-01 -1.747870867120284e-01 + -1.747820572930687e-01 -1.747765217841281e-01 -1.747704544384481e-01 -1.747638294787810e-01 -1.747566210973907e-01 + -1.747488034560524e-01 -1.747403506860518e-01 -1.747312368881864e-01 -1.747214361327647e-01 -1.747109224596061e-01 + -1.746996698780413e-01 -1.746876523669124e-01 -1.746748438745723e-01 -1.746612183188853e-01 -1.746467495872269e-01 + -1.746314115364835e-01 -1.746151779930528e-01 -1.745980227528437e-01 -1.745799195812764e-01 -1.745608422132818e-01 + -1.745407643533024e-01 -1.745196596752916e-01 -1.744975018227143e-01 -1.744742644085462e-01 -1.744499210152745e-01 + -1.744244451948967e-01 -1.743978104689229e-01 -1.743699903283731e-01 -1.743409582337793e-01 -1.743106876151839e-01 + -1.742791518721411e-01 -1.742463243737160e-01 -1.742121784584849e-01 -1.741766874345352e-01 -1.741398245794654e-01 + -1.741015631403853e-01 -1.740618763339160e-01 -1.740207373461894e-01 -1.739781193328489e-01 -1.739339954190487e-01 + -1.738883393830602e-01 -1.738411399121969e-01 -1.737924001993539e-01 -1.737421240418342e-01 -1.736903152430296e-01 + -1.736369776124207e-01 -1.735821149655769e-01 -1.735257311241562e-01 -1.734678299159058e-01 -1.734084151746614e-01 + -1.733474907403475e-01 -1.732850604589775e-01 -1.732211281826538e-01 -1.731556977695672e-01 -1.730887730839974e-01 + -1.730203579963130e-01 -1.729504563829715e-01 -1.728790721265192e-01 -1.728062091155906e-01 -1.727318712449099e-01 + -1.726560624152895e-01 -1.725787865336309e-01 -1.725000475129242e-01 -1.724198492722484e-01 -1.723381957367713e-01 + -1.722550908377493e-01 -1.721705385125281e-01 -1.720845427045416e-01 -1.719971073633129e-01 -1.719082364444538e-01 + -1.718179339096648e-01 -1.717262037267353e-01 -1.716330498695435e-01 -1.715384763180564e-01 -1.714424870583298e-01 + -1.713450860825082e-01 -1.712462773888249e-01 -1.711460649816024e-01 -1.710444528712513e-01 -1.709414450742716e-01 + -1.708370456132518e-01 -1.707312585168692e-01 -1.706240878198903e-01 -1.705155375631696e-01 -1.704056117936514e-01 + -1.702943145643679e-01 -1.701816499344407e-01 -1.700676219690797e-01 -1.699522347395841e-01 -1.698354923233416e-01 + -1.697173988038289e-01 -1.695979582706113e-01 -1.694771748193429e-01 -1.693550525517667e-01 -1.692315955757145e-01 + -1.691068080051071e-01 -1.689806939599535e-01 -1.688532575663521e-01 -1.687245029564898e-01 -1.685944342686426e-01 + -1.684630556471747e-01 -1.683303712425397e-01 -1.681963852112797e-01 -1.680611017160259e-01 -1.679245249254978e-01 + -1.677866590145041e-01 -1.676475081639421e-01 -1.675070765607981e-01 -1.673653683981470e-01 -1.672223878751526e-01 + -1.670781391970675e-01 -1.669326265752331e-01 -1.667858542270794e-01 -1.666378263761256e-01 -1.664885472519793e-01 + -1.663380210903374e-01 -1.661862521329849e-01 -1.660332446277961e-01 -1.658790028287340e-01 -1.657235309958504e-01 + -1.655668333952859e-01 -1.654089142992698e-01 -1.652497779861203e-01 -1.650894287402444e-01 -1.649278708521380e-01 + -1.647651086183854e-01 -1.646011463416602e-01 -1.644359883307245e-01 -1.642696389004292e-01 -1.641021023717143e-01 + -1.639333830716082e-01 -1.637634853332283e-01 -1.635924134957809e-01 -1.634201719045608e-01 -1.632467649109518e-01 + -1.630721968724266e-01 -1.628964721525466e-01 -1.627195951209618e-01 -1.625415701534112e-01 -1.623624016317227e-01 + -1.621820939438130e-01 -1.620006514836872e-01 -1.618180786514395e-01 -1.616343798532529e-01 -1.614495595013996e-01 + -1.612636220142395e-01 -1.610765718162223e-01 -1.608884133378863e-01 -1.606991510158584e-01 -1.605087892928543e-01 + -1.603173326176785e-01 -1.601247854452245e-01 -1.599311522364746e-01 -1.597364374584996e-01 -1.595406455844593e-01 + -1.593437810936023e-01 -1.591458484712660e-01 -1.589468522088766e-01 -1.587467968039490e-01 -1.585456867600870e-01 + -1.583435265869833e-01 -1.581403208004190e-01 -1.579360739222646e-01 -1.577307904804788e-01 -1.575244750091097e-01 + -1.573171320482936e-01 -1.571087661442559e-01 -1.568993818493109e-01 -1.566889837218615e-01 -1.564775763263996e-01 + -1.562651642335056e-01 -1.560517520198489e-01 -1.558373442681878e-01 -1.556219455673693e-01 -1.554055605123290e-01 + -1.551881937040916e-01 -1.549698497497704e-01 -1.547505332625678e-01 -1.545302488617745e-01 -1.543090011727703e-01 + -1.540867948270239e-01 -1.538636344620927e-01 -1.536395247216228e-01 -1.534144702553492e-01 -1.531884757190957e-01 + -1.529615457747749e-01 -1.527336850903880e-01 -1.525048983400254e-01 -1.522751902038660e-01 -1.520445653681776e-01 + -1.518130285253167e-01 -1.515805843737287e-01 -1.513472376179478e-01 -1.511129929685971e-01 -1.508778551423881e-01 + -1.506418288621217e-01 -1.504049188566869e-01 -1.501671298610622e-01 -1.499284666163146e-01 -1.496889338695997e-01 + -1.494485363741621e-01 -1.492072788893351e-01 -1.489651661805412e-01 -1.487222030192911e-01 -1.484783941831845e-01 + -1.482337444559103e-01 -1.479882586272457e-01 -1.477419414930569e-01 -1.474947978552986e-01 -1.472468325220151e-01 + -1.469980503073387e-01 -1.467484560314907e-01 -1.464980545207814e-01 -1.462468506076097e-01 -1.459948491304636e-01 + -1.457420549339193e-01 -1.454884728686425e-01 -1.452341077913872e-01 -1.449789645649965e-01 -1.447230480584021e-01 + -1.444663631466246e-01 -1.442089147107734e-01 -1.439507076380467e-01 -1.436917468217314e-01 -1.434320371612033e-01 + -1.431715835619269e-01 -1.429103909354558e-01 -1.426484641994319e-01 -1.423858082775864e-01 -1.421224280997390e-01 + -1.418583286017983e-01 -1.415935147257617e-01 -1.413279914197154e-01 -1.410617636378342e-01 -1.407948363403820e-01 + -1.405272144937114e-01 -1.402589030702637e-01 -1.399899070485692e-01 -1.397202314132468e-01 -1.394498811550044e-01 + -1.391788612706382e-01 -1.389071767630340e-01 -1.386348326411658e-01 -1.383618339200967e-01 -1.380881856209782e-01 + -1.378138927710512e-01 -1.375389604036449e-01 -1.372633935581775e-01 -1.369871972801560e-01 -1.367103766211762e-01 + -1.364329366389226e-01 -1.361548823971687e-01 -1.358762189657765e-01 -1.355969514206971e-01 -1.353170848439703e-01 + -1.350366243237247e-01 -1.347555749541775e-01 -1.344739418356350e-01 -1.341917300744923e-01 -1.339089447832330e-01 + -1.336255910804298e-01 -1.333416740907438e-01 -1.330571989449255e-01 -1.327721707798138e-01 -1.324865947383364e-01 + -1.322004759695100e-01 -1.319138196284398e-01 -1.316266308763201e-01 -1.313389148804339e-01 -1.310506768141529e-01 + -1.307619218569378e-01 -1.304726551943378e-01 -1.301828820179913e-01 -1.298926075256250e-01 -1.296018369210549e-01 + -1.293105754141855e-01 -1.290188282210102e-01 -1.287266005636111e-01 -1.284338976701593e-01 -1.281407247749145e-01 + -1.278470871182253e-01 -1.275529899465291e-01 -1.272584385123520e-01 -1.269634380743090e-01 -1.266679938971041e-01 + -1.263721112515296e-01 -1.260757954144668e-01 -1.257790516688862e-01 -1.254818853038467e-01 -1.251843016144958e-01 + -1.248863059020704e-01 -1.245879034738957e-01 -1.242890996433862e-01 -1.239898997300443e-01 -1.236903090594621e-01 + -1.233903329633203e-01 -1.230899767793882e-01 -1.227892458515238e-01 -1.224881455296742e-01 -1.221866811698752e-01 + -1.218848581342514e-01 -1.215826817910162e-01 -1.212801575144717e-01 -1.209772906850088e-01 -1.206740866891074e-01 + -1.203705509193362e-01 -1.200666887743523e-01 -1.197625056589020e-01 -1.194580069838203e-01 -1.191531981660311e-01 + -1.188480846285467e-01 -1.185426718004686e-01 -1.182369651169871e-01 -1.179309700193809e-01 -1.176246919550182e-01 + -1.173181363773554e-01 -1.170113087459375e-01 -1.167042145263992e-01 -1.163968591904631e-01 -1.160892482159414e-01 + -1.157813870867344e-01 -1.154732812928312e-01 -1.151649363303106e-01 -1.148563577013393e-01 -1.145475509141727e-01 + -1.142385214831560e-01 -1.139292749287221e-01 -1.136198167773936e-01 -1.133101525617812e-01 -1.130002878205845e-01 + -1.126902280985926e-01 -1.123799789466826e-01 -1.120695459218204e-01 -1.117589345870614e-01 -1.114481505115491e-01 + -1.111371992705165e-01 -1.108260864452845e-01 -1.105148176232633e-01 -1.102033983979523e-01 -1.098918343689388e-01 + -1.095801311418998e-01 -1.092682943286005e-01 -1.089563295468947e-01 -1.086442424207261e-01 -1.083320385801260e-01 + -1.080197236612149e-01 -1.077073033062026e-01 -1.073947831633868e-01 -1.070821688871549e-01 -1.067694661379826e-01 + -1.064566805824341e-01 -1.061438178931633e-01 -1.058308837489121e-01 -1.055178838345113e-01 -1.052048238408811e-01 + -1.048917094650296e-01 -1.045785464100547e-01 -1.042653403851424e-01 -1.039520971055673e-01 -1.036388222926937e-01 + -1.033255216739740e-01 -1.030122009829493e-01 -1.026988659592502e-01 -1.023855223485953e-01 -1.020721759027928e-01 + -1.017588323797391e-01 -1.014454975434192e-01 -1.011321771639078e-01 -1.008188770173676e-01 -1.005056028860506e-01 + -1.001923605582972e-01 -9.987915582853665e-02 -9.956599449728754e-02 -9.925288237115659e-02 -9.893982526283934e-02 + -9.862682899112089e-02 -9.831389938087406e-02 -9.800104226306158e-02 -9.768826347473418e-02 -9.737556885903137e-02 + -9.706296426518225e-02 -9.675045554850391e-02 -9.643804857040231e-02 -9.612574919837290e-02 -9.581356330599895e-02 + -9.550149677295358e-02 -9.518955548499793e-02 -9.487774533398190e-02 -9.456607221784492e-02 -9.425454204061462e-02 + -9.394316071240723e-02 -9.363193414942871e-02 -9.332086827397268e-02 -9.300996901442260e-02 -9.269924230525009e-02 + -9.238869408701537e-02 -9.207833030636840e-02 -9.176815691604708e-02 -9.145817987487818e-02 -9.114840514777790e-02 + -9.083883870575035e-02 -9.052948652588942e-02 -9.022035459137702e-02 -8.991144889148391e-02 -8.960277542157032e-02 + -8.929434018308437e-02 -8.898614918356394e-02 -8.867820843663492e-02 -8.837052396201207e-02 -8.806310178549967e-02 + -8.775594793899004e-02 -8.744906846046427e-02 -8.714246939399310e-02 -8.683615678973500e-02 -8.653013670393818e-02 + -8.622441519893902e-02 -8.591899834316268e-02 -8.561389221112378e-02 -8.530910288342508e-02 -8.500463644675811e-02 + -8.470049899390393e-02 -8.439669662373143e-02 -8.409323544119930e-02 -8.379012155735420e-02 -8.348736108933175e-02 + -8.318496016035699e-02 -8.288292489974303e-02 -8.258126144289184e-02 -8.227997593129487e-02 -8.197907451253141e-02 + -8.167856334027050e-02 -8.137844857426926e-02 -8.107873638037372e-02 -8.077943293051928e-02 -8.048054440272946e-02 + -8.018207698111665e-02 -7.988403685588268e-02 -7.958643022331723e-02 -7.928926328579976e-02 -7.899254225179787e-02 + -7.869627333586779e-02 -7.840046275865548e-02 -7.810511674689456e-02 -7.781024153340860e-02 -7.751584335710898e-02 + -7.722192846299619e-02 -7.692850310215994e-02 -7.663557353177830e-02 -7.634314601511795e-02 -7.605122682153515e-02 + -7.575982222647404e-02 -7.546893851146841e-02 -7.517858196414022e-02 -7.488875887820022e-02 -7.459947555344865e-02 + -7.431073829577386e-02 -7.402255341715304e-02 -7.373492723565277e-02 -7.344786607542758e-02 -7.316137626672170e-02 + -7.287546414586754e-02 -7.259013605528618e-02 -7.230539834348824e-02 -7.202125736507255e-02 -7.173771948072660e-02 + -7.145479105722748e-02 -7.117247846744000e-02 -7.089078809031893e-02 -7.060972631090692e-02 -7.032929952033562e-02 + -7.004951411582597e-02 -6.977037650068689e-02 -6.949189308431707e-02 -6.921407028220326e-02 -6.893691451592099e-02 + -6.866043221313525e-02 -6.838462980759924e-02 -6.810951373915494e-02 -6.783509045373375e-02 -6.756136640335494e-02 + -6.728834804612761e-02 -6.701604184624893e-02 -6.674445427400479e-02 -6.647359180577066e-02 -6.620346092401003e-02 + -6.593406811727537e-02 -6.566541988020837e-02 -6.539752271353887e-02 -6.513038312408626e-02 -6.486400762475807e-02 + -6.459840273455068e-02 -6.433357497854991e-02 -6.406953088792970e-02 -6.380627699995281e-02 -6.354381967338561e-02 + -6.328216150455838e-02 -6.302130157047116e-02 -6.276123881133892e-02 -6.250197216548828e-02 -6.224350056935793e-02 + -6.198582295749760e-02 -6.172893826256860e-02 -6.147284541534430e-02 -6.121754334470900e-02 -6.096303097765919e-02 + -6.070930723930253e-02 -6.045637105285811e-02 -6.020422133965718e-02 -5.995285701914183e-02 -5.970227700886648e-02 + -5.945248022449658e-02 -5.920346557980904e-02 -5.895523198669302e-02 -5.870777835514864e-02 -5.846110359328761e-02 + -5.821520660733366e-02 -5.797008630162153e-02 -5.772574157859814e-02 -5.748217133882149e-02 -5.723937448096104e-02 + -5.699734990179854e-02 -5.675609649622662e-02 -5.651561315724954e-02 -5.627589877598366e-02 -5.603695224165618e-02 + -5.579877244160662e-02 -5.556135826128547e-02 -5.532470858425489e-02 -5.508882229218904e-02 -5.485369826487319e-02 + -5.461933538020406e-02 -5.438573251419067e-02 -5.415288854095272e-02 -5.392080233272230e-02 -5.368947275984246e-02 + -5.345889869076786e-02 -5.322907899206523e-02 -5.300001252841243e-02 -5.277169816259879e-02 -5.254413475552573e-02 + -5.231732116620558e-02 -5.209125625176302e-02 -5.186593886743360e-02 -5.164136786656457e-02 -5.141754210061519e-02 + -5.119446041915571e-02 -5.097212166986852e-02 -5.075052469854709e-02 -5.052966834909649e-02 -5.030955146353391e-02 + -5.009017288198749e-02 -4.987153144269703e-02 -4.965362598201433e-02 -4.943645533440217e-02 -4.922001833243556e-02 + -4.900431380680051e-02 -4.878934058629460e-02 -4.857509749782755e-02 -4.836158336642014e-02 -4.814879701520468e-02 + -4.793673726542550e-02 -4.772540293643798e-02 -4.751479284570964e-02 -4.730490580881906e-02 -4.709574063945637e-02 + -4.688729614942389e-02 -4.667957114863488e-02 -4.647256444511420e-02 -4.626627484499887e-02 -4.606070115253669e-02 + -4.585584217008776e-02 -4.565169669812319e-02 -4.544826353522573e-02 -4.524554147809021e-02 -4.504352932152231e-02 + -4.484222585843990e-02 -4.464162987987204e-02 -4.444174017495933e-02 -4.424255553095430e-02 -4.404407473322077e-02 + -4.384629656523394e-02 -4.364921980858121e-02 -4.345284324296083e-02 -4.325716564618321e-02 -4.306218579416995e-02 + -4.286790246095422e-02 -4.267431441868115e-02 -4.248142043760701e-02 -4.228921928609967e-02 -4.209770973063896e-02 + -4.190689053581576e-02 -4.171676046433306e-02 -4.152731827700496e-02 -4.133856273275718e-02 -4.115049258862742e-02 + -4.096310659976451e-02 -4.077640351942887e-02 -4.059038209899291e-02 -4.040504108794000e-02 -4.022037923386572e-02 + -4.003639528247673e-02 -3.985308797759131e-02 -3.967045606113968e-02 -3.948849827316327e-02 -3.930721335181499e-02 + -3.912660003335985e-02 -3.894665705217377e-02 -3.876738314074488e-02 -3.858877702967239e-02 -3.841083744766712e-02 + -3.823356312155188e-02 -3.805695277626046e-02 -3.788100513483880e-02 -3.770571891844401e-02 -3.753109284634471e-02 + -3.735712563592157e-02 -3.718381600266639e-02 -3.701116266018251e-02 -3.683916432018530e-02 -3.666781969250111e-02 + -3.649712748506845e-02 -3.632708640393694e-02 -3.615769515326780e-02 -3.598895243533422e-02 -3.582085695052056e-02 + -3.565340739732274e-02 -3.548660247234865e-02 -3.532044087031721e-02 -3.515492128405946e-02 -3.499004240451761e-02 + -3.482580292074542e-02 -3.466220151990863e-02 -3.449923688728414e-02 -3.433690770626045e-02 -3.417521265833798e-02 + -3.401415042312823e-02 -3.385371967835477e-02 -3.369391909985236e-02 -3.353474736156733e-02 -3.337620313555797e-02 + -3.321828509199360e-02 -3.306099189915566e-02 -3.290432222343674e-02 -3.274827472934103e-02 -3.259284807948463e-02 + -3.243804093459488e-02 -3.228385195351066e-02 -3.213027979318279e-02 -3.197732310867317e-02 -3.182498055315577e-02 + -3.167325077791576e-02 -3.152213243234985e-02 -3.137162416396674e-02 -3.122172461838628e-02 -3.107243243933992e-02 + -3.092374626867103e-02 -3.077566474633408e-02 -3.062818651039557e-02 -3.048131019703322e-02 -3.033503444053633e-02 + -3.018935787330611e-02 -3.004427912585500e-02 -2.989979682680699e-02 -2.975590960289799e-02 -2.961261607897504e-02 + -2.946991487799718e-02 -2.932780462103471e-02 -2.918628392726946e-02 -2.904535141399520e-02 -2.890500569661691e-02 + -2.876524538865114e-02 -2.862606910172637e-02 -2.848747544558218e-02 -2.834946302807018e-02 -2.821203045515319e-02 + -2.807517633090562e-02 -2.793889925751377e-02 -2.780319783527510e-02 -2.766807066259902e-02 -2.753351633600623e-02 + -2.739953345012899e-02 -2.726612059771145e-02 -2.713327636960897e-02 -2.700099935478855e-02 -2.686928814032903e-02 + -2.673814131142040e-02 -2.660755745136465e-02 -2.647753514157503e-02 -2.634807296157633e-02 -2.621916948900527e-02 + -2.609082329960978e-02 -2.596303296724940e-02 -2.583579706389550e-02 -2.570911415963067e-02 -2.558298282264942e-02 + -2.545740161925755e-02 -2.533236911387244e-02 -2.520788386902333e-02 -2.508394444535071e-02 -2.496054940160667e-02 + -2.483769729465515e-02 -2.471538667947127e-02 -2.459361610914211e-02 -2.447238413486603e-02 -2.435168930595295e-02 + -2.423153016982466e-02 -2.411190527201421e-02 -2.399281315616625e-02 -2.387425236403727e-02 -2.375622143549494e-02 + -2.363871890851889e-02 -2.352174331920003e-02 -2.340529320174085e-02 -2.328936708845568e-02 -2.317396350977004e-02 + -2.305908099422141e-02 -2.294471806845854e-02 -2.283087325724177e-02 -2.271754508344326e-02 -2.260473206804650e-02 + -2.249243273014652e-02 -2.238064558695018e-02 -2.226936915377560e-02 -2.215860194405278e-02 -2.204834246932304e-02 + -2.193858923923927e-02 -2.182934076156617e-02 -2.172059554217978e-02 -2.161235208506771e-02 -2.150460889232937e-02 + -2.139736446417542e-02 -2.129061729892840e-02 -2.118436589302221e-02 -2.107860874100228e-02 -2.097334433552588e-02 + -2.086857116736159e-02 -2.076428772538956e-02 -2.066049249660178e-02 -2.055718396610145e-02 -2.045436061710366e-02 + -2.035202093093487e-02 -2.025016338703306e-02 -2.014878646294806e-02 -2.004788863434091e-02 -1.994746837498458e-02 + -1.984752415676334e-02 -1.974805444967304e-02 -1.964905772182133e-02 -1.955053243942722e-02 -1.945247706682123e-02 + -1.935489006644575e-02 -1.925776989885439e-02 -1.916111502271266e-02 -1.906492389479737e-02 -1.896919496999695e-02 + -1.887392670131158e-02 -1.877911753985283e-02 -1.868476593484379e-02 -1.859087033361938e-02 -1.849742918162579e-02 + -1.840444092242105e-02 -1.831190399767455e-02 -1.821981684716726e-02 -1.812817790879194e-02 -1.803698561855266e-02 + -1.794623841056512e-02 -1.785593471705676e-02 -1.776607296836633e-02 -1.767665159294441e-02 -1.758766901735296e-02 + -1.749912366626548e-02 -1.741101396246730e-02 -1.732333832685505e-02 -1.723609517843697e-02 -1.714928293433304e-02 + -1.706290000977460e-02 -1.697694481810475e-02 -1.689141577077802e-02 -1.680631127736048e-02 -1.672162974552997e-02 + -1.663736958107563e-02 -1.655352918789846e-02 -1.647010696801080e-02 -1.638710132153659e-02 -1.630451064671149e-02 + -1.622233333988258e-02 -1.614056779550848e-02 -1.605921240615960e-02 -1.597826556251764e-02 -1.589772565337612e-02 + -1.581759106563996e-02 -1.573786018432563e-02 -1.565853139256138e-02 -1.557960307158682e-02 -1.550107360075312e-02 + -1.542294135752325e-02 -1.534520471747146e-02 -1.526786205428384e-02 -1.519091173975783e-02 -1.511435214380249e-02 + -1.503818163443859e-02 -1.496239857779832e-02 -1.488700133812540e-02 -1.481198827777534e-02 -1.473735775721495e-02 + -1.466310813502286e-02 -1.458923776788910e-02 -1.451574501061525e-02 -1.444262821611466e-02 -1.436988573541203e-02 + -1.429751591764369e-02 -1.422551711005765e-02 -1.415388765801332e-02 -1.408262590498185e-02 -1.401173019254584e-02 + -1.394119886039942e-02 -1.387103024634847e-02 -1.380122268631025e-02 -1.373177451431374e-02 -1.366268406249938e-02 + -1.359394966111917e-02 -1.352556963853683e-02 -1.345754232122749e-02 -1.338986603377785e-02 -1.332253909888635e-02 + -1.325555983736277e-02 -1.318892656812868e-02 -1.312263760821707e-02 -1.305669127277248e-02 -1.299108587505118e-02 + -1.292581972642087e-02 -1.286089113636079e-02 -1.279629841246194e-02 -1.273203986042665e-02 -1.266811378406904e-02 + -1.260451848531466e-02 -1.254125226420061e-02 -1.247831341887570e-02 -1.241570024560018e-02 -1.235341103874586e-02 + -1.229144409079628e-02 -1.222979769234634e-02 -1.216847013210271e-02 -1.210745969688346e-02 -1.204676467161828e-02 + -1.198638333934852e-02 -1.192631398122695e-02 -1.186655487651807e-02 -1.180710430259781e-02 -1.174796053495369e-02 + -1.168912184718492e-02 -1.163058651100216e-02 -1.157235279622761e-02 -1.151441897079520e-02 -1.145678330075023e-02 + -1.139944405024978e-02 -1.134239948156232e-02 -1.128564785506792e-02 -1.122918742925836e-02 -1.117301646073682e-02 + -1.111713320421809e-02 -1.106153591252863e-02 -1.100622283660632e-02 -1.095119222550075e-02 -1.089644232637298e-02 + -1.084197138449563e-02 -1.078777764325301e-02 -1.073385934414089e-02 -1.068021472676658e-02 -1.062684202884911e-02 + -1.057373948621890e-02 -1.052090533281812e-02 -1.046833780070035e-02 -1.041603512003080e-02 -1.036399551908630e-02 + -1.031221722425518e-02 -1.026069846003733e-02 -1.020943744904430e-02 -1.015843241199908e-02 -1.010768156773639e-02 + -1.005718313320238e-02 -1.000693532345477e-02 -9.956936351663000e-03 -9.907184429107868e-03 -9.857677765181951e-03 + -9.808414567389246e-03 -9.759393041345332e-03 -9.710611390777465e-03 -9.662067817524359e-03 -9.613760521536294e-03 + -9.565687700875250e-03 -9.517847551714602e-03 -9.470238268339455e-03 -9.422858043146373e-03 -9.375705066643484e-03 + -9.328777527450597e-03 -9.282073612298979e-03 -9.235591506031477e-03 -9.189329391602606e-03 -9.143285450078295e-03 + -9.097457860636218e-03 -9.051844800565477e-03 -9.006444445266760e-03 -8.961254968252430e-03 -8.916274541146312e-03 + -8.871501333683798e-03 -8.826933513711962e-03 -8.782569247189285e-03 -8.738406698185989e-03 -8.694444028883737e-03 + -8.650679399575766e-03 -8.607110968666998e-03 -8.563736892673802e-03 -8.520555326224130e-03 -8.477564422057609e-03 + -8.434762331025280e-03 -8.392147202089901e-03 -8.349717182325704e-03 -8.307470416918480e-03 -8.265405049165691e-03 + -8.223519220476237e-03 -8.181811070370719e-03 -8.140278736481221e-03 -8.098920354551366e-03 -8.057734058436473e-03 + -8.016717980103316e-03 -7.975870249630252e-03 -7.935188995207284e-03 -7.894672343135879e-03 -7.854318417829185e-03 + -7.814125341811836e-03 -7.774091235720011e-03 -7.734214218301584e-03 -7.694492406415883e-03 -7.654923915033813e-03 + -7.615506857237942e-03 -7.576239344222277e-03 -7.537119485292531e-03 -7.498145387865876e-03 -7.459315157471062e-03 + -7.420626897748505e-03 -7.382078710450094e-03 -7.343668695439282e-03 -7.305394950691192e-03 -7.267255572292386e-03 + -7.229248654441126e-03 -7.191372289447140e-03 -7.153624567731739e-03 -7.116003624038495e-03 -7.078508474215831e-03 + -7.041138926421179e-03 -7.003894816745242e-03 -6.966775981030504e-03 -6.929782254871301e-03 -6.892913473613651e-03 + -6.856169472355352e-03 -6.819550085946065e-03 -6.783055148987103e-03 -6.746684495831654e-03 -6.710437960584618e-03 + -6.674315377102651e-03 -6.638316578994274e-03 -6.602441399619691e-03 -6.566689672090875e-03 -6.531061229271669e-03 + -6.495555903777570e-03 -6.460173527975952e-03 -6.424913933985890e-03 -6.389776953678226e-03 -6.354762418675658e-03 + -6.319870160352578e-03 -6.285100009835136e-03 -6.250451798001365e-03 -6.215925355480928e-03 -6.181520512655402e-03 + -6.147237099658026e-03 -6.113074946373834e-03 -6.079033882439701e-03 -6.045113737244199e-03 -6.011314339927668e-03 + -5.977635519382314e-03 -5.944077104251991e-03 -5.910638922932446e-03 -5.877320803571107e-03 -5.844122574067189e-03 + -5.811044062071753e-03 -5.778085094987517e-03 -5.745245499969095e-03 -5.712525103922782e-03 -5.679923733506649e-03 + -5.647441215130619e-03 -5.615077374956306e-03 -5.582832038897109e-03 -5.550705032618262e-03 -5.518696181536677e-03 + -5.486805310821138e-03 -5.455032245392131e-03 -5.423376809921901e-03 -5.391838828834562e-03 -5.360418126305904e-03 + -5.329114526263508e-03 -5.297927852386787e-03 -5.266857928106842e-03 -5.235904576606630e-03 -5.205067620820824e-03 + -5.174346883435856e-03 -5.143742186890011e-03 -5.113253353373271e-03 -5.082880204827393e-03 -5.052622562945976e-03 + -5.022480249174292e-03 -4.992453084709495e-03 -4.962540890500427e-03 -4.932743487247710e-03 -4.903060695403810e-03 + -4.873492335172862e-03 -4.844038226510882e-03 -4.814698189125571e-03 -4.785472042476425e-03 -4.756359605774757e-03 + -4.727360697983606e-03 -4.698475137817772e-03 -4.669702743743895e-03 -4.641043333980304e-03 -4.612496726497188e-03 + -4.584062739016438e-03 -4.555741189011722e-03 -4.527531893708544e-03 -4.499434670084120e-03 -4.471449334867432e-03 + -4.443575704539306e-03 -4.415813595332247e-03 -4.388162823230627e-03 -4.360623203970521e-03 -4.333194553039779e-03 + -4.305876685678087e-03 -4.278669416876838e-03 -4.251572561379203e-03 -4.224585933680182e-03 -4.197709348026470e-03 + -4.170942618416615e-03 -4.144285558600877e-03 -4.117737982081285e-03 -4.091299702111709e-03 -4.064970531697724e-03 + -4.038750283596681e-03 -4.012638770317764e-03 -3.986635804121849e-03 -3.960741197021666e-03 -3.934954760781655e-03 + -3.909276306918030e-03 -3.883705646698839e-03 -3.858242591143823e-03 -3.832886951024573e-03 -3.807638536864394e-03 + -3.782497158938364e-03 -3.757462627273395e-03 -3.732534751648109e-03 -3.707713341592904e-03 -3.682998206390007e-03 + -3.658389155073341e-03 -3.633885996428679e-03 -3.609488538993509e-03 -3.585196591057092e-03 -3.561009960660519e-03 + -3.536928455596594e-03 -3.512951883409898e-03 -3.489080051396840e-03 -3.465312766605525e-03 -3.441649835835906e-03 + -3.418091065639654e-03 -3.394636262320213e-03 -3.371285231932853e-03 -3.348037780284563e-03 -3.324893712934104e-03 + -3.301852835192067e-03 -3.278914952120739e-03 -3.256079868534255e-03 -3.233347388998468e-03 -3.210717317831004e-03 + -3.188189459101314e-03 -3.165763616630569e-03 -3.143439593991713e-03 -3.121217194509517e-03 -3.099096221260451e-03 + -3.077076477072833e-03 -3.055157764526695e-03 -3.033339885953845e-03 -3.011622643437919e-03 -2.990005838814249e-03 + -2.968489273670017e-03 -2.947072749344119e-03 -2.925756066927229e-03 -2.904539027261841e-03 -2.883421430942174e-03 + -2.862403078314216e-03 -2.841483769475784e-03 -2.820663304276394e-03 -2.799941482317407e-03 -2.779318102951903e-03 + -2.758792965284737e-03 -2.738365868172586e-03 -2.718036610223848e-03 -2.697804989798697e-03 -2.677670805009128e-03 + -2.657633853718841e-03 -2.637693933543377e-03 -2.617850841850000e-03 -2.598104375757746e-03 -2.578454332137472e-03 + -2.558900507611761e-03 -2.539442698554968e-03 -2.520080701093267e-03 -2.500814311104544e-03 -2.481643324218519e-03 + -2.462567535816638e-03 -2.443586741032121e-03 -2.424700734750005e-03 -2.405909311607039e-03 -2.387212265991808e-03 + -2.368609392044620e-03 -2.350100483657559e-03 -2.331685334474526e-03 -2.313363737891150e-03 -2.295135487054832e-03 + -2.277000374864790e-03 -2.258958193971958e-03 -2.241008736779098e-03 -2.223151795440705e-03 -2.205387161863042e-03 + -2.187714627704191e-03 -2.170133984373964e-03 -2.152645023033946e-03 -2.135247534597534e-03 -2.117941309729843e-03 + -2.100726138847821e-03 -2.083601812120139e-03 -2.066568119467248e-03 -2.049624850561408e-03 -2.032771794826614e-03 + -2.016008741438632e-03 -1.999335479325042e-03 -1.982751797165141e-03 -1.966257483390056e-03 -1.949852326182643e-03 + -1.933536113477534e-03 -1.917308632961171e-03 -1.901169672071730e-03 -1.885119017999159e-03 -1.869156457685220e-03 + -1.853281777823393e-03 -1.837494764858986e-03 -1.821795204989036e-03 -1.806182884162357e-03 -1.790657588079573e-03 + -1.775219102193030e-03 -1.759867211706897e-03 -1.744601701577076e-03 -1.729422356511246e-03 -1.714328960968891e-03 + -1.699321299161236e-03 -1.684399155051274e-03 -1.669562312353811e-03 -1.654810554535375e-03 -1.640143664814315e-03 + -1.625561426160717e-03 -1.611063621296442e-03 -1.596650032695156e-03 -1.582320442582263e-03 -1.568074632934942e-03 + -1.553912385482177e-03 -1.539833481704681e-03 -1.525837702834982e-03 -1.511924829857350e-03 -1.498094643507828e-03 + -1.484346924274261e-03 -1.470681452396238e-03 -1.457098007865118e-03 -1.443596370424068e-03 -1.430176319567981e-03 + -1.416837634543570e-03 -1.403580094349283e-03 -1.390403477735348e-03 -1.377307563203789e-03 -1.364292129008380e-03 + -1.351356953154661e-03 -1.338501813399978e-03 -1.325726487253410e-03 -1.313030751975847e-03 -1.300414384579924e-03 + -1.287877161830047e-03 -1.275418860242425e-03 -1.263039256085000e-03 -1.250738125377527e-03 -1.238515243891503e-03 + -1.226370387150198e-03 -1.214303330428686e-03 -1.202313848753781e-03 -1.190401716904072e-03 -1.178566709409950e-03 + -1.166808600553540e-03 -1.155127164368776e-03 -1.143522174641339e-03 -1.131993404908682e-03 -1.120540628460057e-03 + -1.109163618336462e-03 -1.097862147330669e-03 -1.086635987987250e-03 -1.075484912602510e-03 -1.064408693224567e-03 + -1.053407101653284e-03 -1.042479909440293e-03 -1.031626887889031e-03 -1.020847808054677e-03 -1.010142440744185e-03 + -9.995105565163062e-04 -9.889519256815319e-04 -9.784663183021588e-04 -9.680535041922310e-04 -9.577132529175667e-04 + -9.474453337957800e-04 -9.372495158962260e-04 -9.271255680400646e-04 -9.170732588002046e-04 -9.070923565013267e-04 + -8.971826292199097e-04 -8.873438447841799e-04 -8.775757707741368e-04 -8.678781745215758e-04 -8.582508231100357e-04 + -8.486934833748567e-04 -8.392059219031290e-04 -8.297879050337175e-04 -8.204391988572799e-04 -8.111595692162261e-04 + -8.019487817047374e-04 -7.928066016687911e-04 -7.837327942061071e-04 -7.747271241662072e-04 -7.657893561503652e-04 + -7.569192545116259e-04 -7.481165833548297e-04 -7.393811065365680e-04 -7.307125876652048e-04 -7.221107901008979e-04 + -7.135754769555503e-04 -7.051064110928651e-04 -6.967033551282968e-04 -6.883660714290746e-04 -6.800943221142188e-04 + -6.718878690545024e-04 -6.637464738724734e-04 -6.556698979424691e-04 -6.476579023905757e-04 -6.397102480946771e-04 + -6.318266956844107e-04 -6.240070055411865e-04 -6.162509377982073e-04 -6.085582523404222e-04 -6.009287088045789e-04 + -5.933620665791773e-04 -5.858580848044936e-04 -5.784165223725918e-04 -5.710371379272916e-04 -5.637196898641854e-04 + -5.564639363306571e-04 -5.492696352258383e-04 -5.421365442006567e-04 -5.350644206577972e-04 -5.280530217517155e-04 + -5.211021043886574e-04 -5.142114252266256e-04 -5.073807406753944e-04 -5.006098068965282e-04 -4.938983798033417e-04 + -4.872462150609439e-04 -4.806530680862012e-04 -4.741186940477517e-04 -4.676428478660232e-04 -4.612252842131993e-04 + -4.548657575132373e-04 -4.485640219418825e-04 -4.423198314266320e-04 -4.361329396467764e-04 -4.300031000333636e-04 + -4.239300657692146e-04 -4.179135897889377e-04 -4.119534247788992e-04 -4.060493231772384e-04 -4.002010371738815e-04 + -3.944083187105085e-04 -3.886709194805909e-04 -3.829885909293588e-04 -3.773610842538156e-04 -3.717881504027505e-04 + -3.662695400767078e-04 -3.608050037280220e-04 -3.553942915607872e-04 -3.500371535308705e-04 -3.447333393459244e-04 + -3.394825984653615e-04 -3.342846801003669e-04 -3.291393332139113e-04 -3.240463065207213e-04 -3.190053484873128e-04 + -3.140162073319618e-04 -3.090786310247178e-04 -3.041923672874145e-04 -2.993571635936464e-04 -2.945727671687809e-04 + -2.898389249899699e-04 -2.851553837861224e-04 -2.805218900379357e-04 -2.759381899778680e-04 -2.714040295901505e-04 + -2.669191546107985e-04 -2.624833105275885e-04 -2.580962425800702e-04 -2.537576957595766e-04 -2.494674148091992e-04 + -2.452251442238162e-04 -2.410306282500684e-04 -2.368836108863691e-04 -2.327838358829145e-04 -2.287310467416602e-04 + -2.247249867163479e-04 -2.207653988124818e-04 -2.168520257873393e-04 -2.129846101499799e-04 -2.091628941612264e-04 + -2.053866198336741e-04 -2.016555289317006e-04 -1.979693629714440e-04 -1.943278632208271e-04 -1.907307706995364e-04 + -1.871778261790313e-04 -1.836687701825526e-04 -1.802033429851051e-04 -1.767812846134664e-04 -1.734023348461954e-04 + -1.700662332136125e-04 -1.667727189978217e-04 -1.635215312326916e-04 -1.603124087038639e-04 -1.571450899487605e-04 + -1.540193132565684e-04 -1.509348166682475e-04 -1.478913379765377e-04 -1.448886147259418e-04 -1.419263842127452e-04 + -1.390043834849987e-04 -1.361223493425259e-04 -1.332800183369302e-04 -1.304771267715805e-04 -1.277134107016188e-04 + -1.249886059339665e-04 -1.223024480273087e-04 -1.196546722921121e-04 -1.170450137906095e-04 -1.144732073368067e-04 + -1.119389874964883e-04 -1.094420885872035e-04 -1.069822446782823e-04 -1.045591895908213e-04 -1.021726568976901e-04 + -9.982237992353664e-05 -9.750809174477591e-05 -9.522952518959565e-05 -9.298641283796200e-05 -9.077848702160628e-05 + -8.860547982403997e-05 -8.646712308054170e-05 -8.436314837816317e-05 -8.229328705573368e-05 -8.025727020385026e-05 + -7.825482866488277e-05 -7.628569303297861e-05 -7.434959365405157e-05 -7.244626062579433e-05 -7.057542379766778e-05 + -6.873681277090546e-05 -6.693015689851825e-05 -6.515518528528513e-05 -6.341162678775807e-05 -6.169921001426586e-05 + -6.001766332490451e-05 -5.836671483154818e-05 -5.674609239783972e-05 -5.515552363919479e-05 -5.359473592280566e-05 + -5.206345636763345e-05 -5.056141184441200e-05 -4.908832897565164e-05 -4.764393413563057e-05 -4.622795345040445e-05 + -4.484011279779814e-05 -4.348013780740931e-05 -4.214775386061168e-05 -4.084268609054731e-05 -3.956465938213530e-05 + -3.831339837206426e-05 -3.708862744879563e-05 -3.589007075256655e-05 -3.471745217538389e-05 -3.357049536102736e-05 + -3.244892370505214e-05 -3.135246035478249e-05 -3.028082820931898e-05 -2.923374991953224e-05 -2.821094788806574e-05 + -2.721214426933808e-05 -2.623706096953816e-05 -2.528541964662767e-05 -2.435694171034332e-05 -2.345134832219151e-05 + -2.256836039545436e-05 -2.170769859518446e-05 -2.086908333820728e-05 -2.005223479312296e-05 -1.925687288030239e-05 + -1.848271727188923e-05 -1.772948739180174e-05 -1.699690241572846e-05 -1.628468127113303e-05 -1.559254263725005e-05 + -1.492020494508693e-05 -1.426738637742542e-05 -1.363380486881784e-05 -1.301917810559134e-05 -1.242322352584425e-05 + -1.184565831944769e-05 -1.128619942804690e-05 -1.074456354505845e-05 -1.022046711567169e-05 -9.713626336849962e-06 + -9.223757157327673e-06 -8.750575277613572e-06 -8.293796149987950e-06 -7.853134978503862e-06 -7.428306718988174e-06 + -7.019026079039387e-06 -6.625007518028806e-06 -6.245965247101398e-06 -5.881613229173611e-06 -5.531665178935826e-06 + -5.195834562850272e-06 -4.873834599151940e-06 -4.565378257849335e-06 -4.270178260722902e-06 -3.987947081325860e-06 + -3.718396944984835e-06 -3.461239828798292e-06 -3.216187461638275e-06 -2.982951324148931e-06 -2.761242648747174e-06 + -2.550772419623182e-06 -2.351251372739317e-06 -2.162389995830711e-06 -1.983898528405674e-06 -1.815486961744654e-06 + -1.656865038901390e-06 -1.507742254701937e-06 -1.367827855745113e-06 -1.236830840402796e-06 -1.114459958819160e-06 + -1.000423712911517e-06 -8.944303563696066e-07 -7.961878946559278e-07 -7.054040850059410e-07 -6.217864364275963e-07 + -5.450422097015964e-07 -4.748784173815563e-07 -4.110018237935835e-07 -3.531189450367315e-07 -3.009360489826263e-07 + -2.541591552756423e-07 -2.124940353329939e-07 -1.756462123445103e-07 -1.433209612727655e-07 -1.152233088531395e-07 + -9.105803359364405e-08 -7.052966577510520e-08 -5.334248745101847e-08 -3.920053244762000e-08 -2.780758636390822e-08 + -1.886718657157594e-08 -1.208262221505346e-08 -7.156934211516091e-09 -3.792915250849452e-09 -1.693109795682456e-09 + -5.598140813650329e-10 -9.507611597980245e-11 -6.956803396798233e-13 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 6.300708402644514e-01 1.258388491248958e+00 1.884955395267329e+00 2.509773993118936e+00 3.132846724088722e+00 + 3.754176025947199e+00 4.373764334950449e+00 4.991614085840115e+00 5.607727711843414e+00 6.222107644673127e+00 + 6.834756314527613e+00 7.445676150090785e+00 8.054869578532132e+00 8.662339025506713e+00 9.268086915155155e+00 + 9.872115670103643e+00 1.047442771146394e+01 1.107502545883338e+01 1.167391133029486e+01 1.227108774241684e+01 + 1.286655711025335e+01 1.346032184734400e+01 1.405238436571396e+01 1.464274707587396e+01 1.523141238682031e+01 + 1.581838270603489e+01 1.640366043948514e+01 1.698724799162406e+01 1.756914776539024e+01 1.814936216220782e+01 + 1.872789358198653e+01 1.930474442312163e+01 1.987991708249398e+01 2.045341395547002e+01 2.102523743590170e+01 + 2.159538991612661e+01 2.216387378696785e+01 2.273069143773413e+01 2.329584525621969e+01 2.385933762870439e+01 + 2.442117093995359e+01 2.498134757321828e+01 2.553986991023498e+01 2.609674033122581e+01 2.665196121489842e+01 + 2.720553493844604e+01 2.775746387754749e+01 2.830775040636716e+01 2.885639689755497e+01 2.940340572224641e+01 + 2.994877925006260e+01 3.049251984911019e+01 3.103462988598135e+01 3.157511172575387e+01 3.211396773199114e+01 + 3.265120026674207e+01 3.318681169054110e+01 3.372080436240833e+01 3.425318063984938e+01 3.478394287885543e+01 + 3.531309343390323e+01 3.584063465795514e+01 3.636656890245902e+01 3.689089851734838e+01 3.741362585104220e+01 + 3.793475325044511e+01 3.845428306094727e+01 3.897221762642440e+01 3.948855928923788e+01 4.000331039023449e+01 + 4.051647326874672e+01 4.102805026259256e+01 4.153804370807563e+01 4.204645593998501e+01 4.255328929159545e+01 + 4.305854609466724e+01 4.356222867944623e+01 4.406433937466380e+01 4.456488050753698e+01 4.506385440376831e+01 + 4.556126338754594e+01 4.605710978154350e+01 4.655139590692028e+01 4.704412408332113e+01 4.753529662887644e+01 + 4.802491586020213e+01 4.851298409239977e+01 4.899950363905646e+01 4.948447681224488e+01 4.996790592252322e+01 + 5.044979327893531e+01 5.093014118901052e+01 5.140895195876384e+01 5.188622789269569e+01 5.236197129379220e+01 + 5.283618446352500e+01 5.330886970185136e+01 5.378002930721397e+01 5.424966557654122e+01 5.471778080524703e+01 + 5.518437728723094e+01 5.564945731487789e+01 5.611302317905858e+01 5.657507716912919e+01 5.703562157293147e+01 + 5.749465867679278e+01 5.795219076552594e+01 5.840822012242948e+01 5.886274902928739e+01 5.931577976636935e+01 + 5.976731461243042e+01 6.021735584471138e+01 6.066590573893854e+01 6.111296656932380e+01 6.155854060856456e+01 + 6.200263012784382e+01 6.244523739683018e+01 6.288636468367783e+01 6.332601425502637e+01 6.376418837600115e+01 + 6.420088931021304e+01 6.463611931975845e+01 6.506988066521932e+01 6.550217560566324e+01 6.593300639864331e+01 + 6.636237530019827e+01 6.679028456485231e+01 6.721673644561530e+01 6.764173319398260e+01 6.806527705993526e+01 + 6.848737029193968e+01 6.890801513694807e+01 6.932721384039803e+01 6.974496864621281e+01 7.016128179680126e+01 + 7.057615553305772e+01 7.098959209436208e+01 7.140159371857995e+01 7.181216264206230e+01 7.222130109964584e+01 + 7.262901132465278e+01 7.303529554889086e+01 7.344015600265350e+01 7.384359491471953e+01 7.424561451235350e+01 + 7.464621702130542e+01 7.504540466581099e+01 7.544317966859130e+01 7.583954425085314e+01 7.623450063228886e+01 + 7.662805103107640e+01 7.702019766387909e+01 7.741094274584604e+01 7.780028849061186e+01 7.818823711029674e+01 + 7.857479081550632e+01 7.895995181533196e+01 7.934372231735054e+01 7.972610452762453e+01 8.010710065070185e+01 + 8.048671288961613e+01 8.086494344588648e+01 8.124179451951771e+01 8.161726830899998e+01 8.199136701130918e+01 + 8.236409282190675e+01 8.273544793473971e+01 8.310543454224052e+01 8.347405483532732e+01 8.384131100340379e+01 + 8.420720523435928e+01 8.457173971456858e+01 8.493491662889201e+01 8.529673816067557e+01 8.565720649175083e+01 + 8.601632380243488e+01 8.637409227153034e+01 8.673051407632546e+01 8.708559139259404e+01 8.743932639459553e+01 + 8.779172125507475e+01 8.814277814526224e+01 8.849249923487412e+01 8.884088669211206e+01 8.918794268366315e+01 + 8.953366937470025e+01 8.987806892888170e+01 9.022114350835147e+01 9.056289527373893e+01 9.090332638415920e+01 + 9.124243899721289e+01 9.158023526898621e+01 9.191671735405090e+01 9.225188740546426e+01 9.258574757476919e+01 + 9.291830001199423e+01 9.324954686565330e+01 9.357949028274605e+01 9.390813240875761e+01 9.423547538765884e+01 + 9.456152136190587e+01 9.488627247244064e+01 9.520973085869061e+01 9.553189865856881e+01 9.585277800847372e+01 + 9.617237104328957e+01 9.649067989638601e+01 9.680770669961834e+01 9.712345358332752e+01 9.743792267633980e+01 + 9.775111610596721e+01 9.806303599800732e+01 9.837368447674329e+01 9.868306366494375e+01 9.899117568386295e+01 + 9.929802265324074e+01 9.960360669130256e+01 9.990792991475929e+01 1.002109944388075e+02 1.005128023771292e+02 + 1.008133558418923e+02 1.011126569437498e+02 1.014107077918405e+02 1.017075104937888e+02 1.020030671557048e+02 + 1.022973798821839e+02 1.025904507763071e+02 1.028822819396410e+02 1.031728754722381e+02 1.034622334726359e+02 + 1.037503580378579e+02 1.040372512634128e+02 1.043229152432954e+02 1.046073520699855e+02 1.048905638344488e+02 + 1.051725526261366e+02 1.054533205329854e+02 1.057328696414178e+02 1.060112020363415e+02 1.062883198011500e+02 + 1.065642250177225e+02 1.068389197664233e+02 1.071124061261028e+02 1.073846861740966e+02 1.076557619862260e+02 + 1.079256356367981e+02 1.081943091986050e+02 1.084617847429249e+02 1.087280643395214e+02 1.089931500566436e+02 + 1.092570439610261e+02 1.095197481178893e+02 1.097812645909389e+02 1.100415954423667e+02 1.103007427328492e+02 + 1.105587085215492e+02 1.108154948661148e+02 1.110711038226797e+02 1.113255374458631e+02 1.115787977887699e+02 + 1.118308869029903e+02 1.120818068386006e+02 1.123315596441620e+02 1.125801473667217e+02 1.128275720518125e+02 + 1.130738357434525e+02 1.133189404841455e+02 1.135628883148809e+02 1.138056812751336e+02 1.140473214028642e+02 + 1.142878107345187e+02 1.145271513050287e+02 1.147653451478114e+02 1.150023942947697e+02 1.152383007762920e+02 + 1.154730666212520e+02 1.157066938570092e+02 1.159391845094089e+02 1.161705406027814e+02 1.164007641599431e+02 + 1.166298572021957e+02 1.168578217493265e+02 1.170846598196085e+02 1.173103734297999e+02 1.175349645951450e+02 + 1.177584353293732e+02 1.179807876446999e+02 1.182020235518256e+02 1.184221450599367e+02 1.186411541767050e+02 + 1.188590529082881e+02 1.190758432593288e+02 1.192915272329557e+02 1.195061068307831e+02 1.197195840529107e+02 + 1.199319608979236e+02 1.201432393628928e+02 1.203534214433746e+02 1.205625091334111e+02 1.207705044255297e+02 + 1.209774093107436e+02 1.211832257785516e+02 1.213879558169378e+02 1.215916014123720e+02 1.217941645498098e+02 + 1.219956472126918e+02 1.221960513829450e+02 1.223953790409811e+02 1.225936321656979e+02 1.227908127344787e+02 + 1.229869227231922e+02 1.231819641061928e+02 1.233759388563205e+02 1.235688489449006e+02 1.237606963417445e+02 + 1.239514830151486e+02 1.241412109318951e+02 1.243298820572519e+02 1.245174983549723e+02 1.247040617872951e+02 + 1.248895743149450e+02 1.250740378971319e+02 1.252574544915514e+02 1.254398260543848e+02 1.256211545402988e+02 + 1.258014419024456e+02 1.259806900924633e+02 1.261589010604753e+02 1.263360767550905e+02 1.265122191234037e+02 + 1.266873301109948e+02 1.268614116619298e+02 1.270344657187598e+02 1.272064942225218e+02 1.273774991127381e+02 + 1.275474823274168e+02 1.277164458030516e+02 1.278843914746213e+02 1.280513212755909e+02 1.282172371379106e+02 + 1.283821409920162e+02 1.285460347668291e+02 1.287089203897563e+02 1.288707997866905e+02 1.290316748820096e+02 + 1.291915475985773e+02 1.293504198577430e+02 1.295082935793415e+02 1.296651706816931e+02 1.298210530816038e+02 + 1.299759426943650e+02 1.301298414337541e+02 1.302827512120334e+02 1.304346739399515e+02 1.305856115267418e+02 + 1.307355658801240e+02 1.308845389063029e+02 1.310325325099690e+02 1.311795485942984e+02 1.313255890609527e+02 + 1.314706558100791e+02 1.316147507403105e+02 1.317578757487651e+02 1.319000327310469e+02 1.320412235812452e+02 + 1.321814501919354e+02 1.323207144541778e+02 1.324590182575186e+02 1.325963634899898e+02 1.327327520381085e+02 + 1.328681857868777e+02 1.330026666197858e+02 1.331361964188069e+02 1.332687770644004e+02 1.334004104355117e+02 + 1.335310984095713e+02 1.336608428624958e+02 1.337896456686868e+02 1.339175087010318e+02 1.340444338309039e+02 + 1.341704229281615e+02 1.342954778611490e+02 1.344196004966959e+02 1.345427927001174e+02 1.346650563352146e+02 + 1.347863932642737e+02 1.349068053480668e+02 1.350262944458514e+02 1.351448624153706e+02 1.352625111128531e+02 + 1.353792423930132e+02 1.354950581090507e+02 1.356099601126509e+02 1.357239502539848e+02 1.358370303817091e+02 + 1.359492023429656e+02 1.360604679833822e+02 1.361708291470720e+02 1.362802876766338e+02 1.363888454131521e+02 + 1.364965041961966e+02 1.366032658638230e+02 1.367091322525724e+02 1.368141051974712e+02 1.369181865320318e+02 + 1.370213780882520e+02 1.371236816966150e+02 1.372250991860898e+02 1.373256323841308e+02 1.374252831166782e+02 + 1.375240532081575e+02 1.376219444814799e+02 1.377189587580422e+02 1.378150978577266e+02 1.379103635989012e+02 + 1.380047577984192e+02 1.380982822716198e+02 1.381909388323275e+02 1.382827292928526e+02 1.383736554639907e+02 + 1.384637191550231e+02 1.385529221737167e+02 1.386412663263240e+02 1.387287534175829e+02 1.388153852507169e+02 + 1.389011636274354e+02 1.389860903479328e+02 1.390701672108896e+02 1.391533960134716e+02 1.392357785513302e+02 + 1.393173166186022e+02 1.393980120079105e+02 1.394778665103628e+02 1.395568819155532e+02 1.396350600115606e+02 + 1.397124025849501e+02 1.397889114207719e+02 1.398645883025620e+02 1.399394350123420e+02 1.400134533306189e+02 + 1.400866450363854e+02 1.401590119071197e+02 1.402305557187856e+02 1.403012782458326e+02 1.403711812611954e+02 + 1.404402665362946e+02 1.405085358410364e+02 1.405759909438123e+02 1.406426336114995e+02 1.407084656094608e+02 + 1.407734887015446e+02 1.408377046500847e+02 1.409011152159007e+02 1.409637221582975e+02 1.410255272350659e+02 + 1.410865322024819e+02 1.411467388153074e+02 1.412061488267896e+02 1.412647639886614e+02 1.413225860511414e+02 + 1.413796167629335e+02 1.414358578712273e+02 1.414913111216979e+02 1.415459782585062e+02 1.415998610242983e+02 + 1.416529611602062e+02 1.417052804058473e+02 1.417568204993247e+02 1.418075831772267e+02 1.418575701746277e+02 + 1.419067832250873e+02 1.419552240606508e+02 1.420028944118490e+02 1.420497960076983e+02 1.420959305757007e+02 + 1.421412998418438e+02 1.421859055306007e+02 1.422297493649299e+02 1.422728330662759e+02 1.423151583545685e+02 + 1.423567269482230e+02 1.423975405641403e+02 1.424376009177069e+02 1.424769097227951e+02 1.425154686917625e+02 + 1.425532795354521e+02 1.425903439631929e+02 1.426266636827993e+02 1.426622404005712e+02 1.426970758212940e+02 + 1.427311716482388e+02 1.427645295831623e+02 1.427971513263067e+02 1.428290385763997e+02 1.428601930306546e+02 + 1.428906163847705e+02 1.429203103329318e+02 1.429492765678085e+02 1.429775167805562e+02 1.430050326608160e+02 + 1.430318258967150e+02 1.430578981748652e+02 1.430832511803645e+02 1.431078865967964e+02 1.431318061062300e+02 + 1.431550113892199e+02 1.431775041248061e+02 1.431992859905144e+02 1.432203586623562e+02 1.432407238148283e+02 + 1.432603831209130e+02 1.432793382520785e+02 1.432975908782783e+02 1.433151426679515e+02 1.433319952880228e+02 + 1.433481504039025e+02 1.433636096794865e+02 1.433783747771561e+02 1.433924473577783e+02 1.434058290807056e+02 + 1.434185216037763e+02 1.434305265833140e+02 1.434418456741278e+02 1.434524805295127e+02 1.434624328012490e+02 + 1.434717041396027e+02 1.434802961933252e+02 1.434882106096537e+02 1.434954490343109e+02 1.435020131115049e+02 + 1.435079044839297e+02 1.435131247927644e+02 1.435176756776740e+02 1.435215587768092e+02 1.435247757268060e+02 + 1.435273281627858e+02 1.435292177183560e+02 1.435304460256093e+02 1.435310147151242e+02 1.435309254159644e+02 + 1.435301797556794e+02 1.435287793603044e+02 1.435267258543599e+02 1.435240208608521e+02 1.435206660012728e+02 + 1.435166628955992e+02 1.435120131622943e+02 1.435067184183065e+02 1.435007802790698e+02 1.434942003585039e+02 + 1.434869802690138e+02 1.434791216214903e+02 1.434706260253097e+02 1.434614950883338e+02 1.434517304169103e+02 + 1.434413336158718e+02 1.434303062885371e+02 1.434186500367103e+02 1.434063664606812e+02 1.433934571592249e+02 + 1.433799237296022e+02 1.433657677675597e+02 1.433509908673294e+02 1.433355946216286e+02 1.433195806216605e+02 + 1.433029504571139e+02 1.432857057161631e+02 1.432678479854677e+02 1.432493788501731e+02 1.432302998939104e+02 + 1.432106126987961e+02 1.431903188454322e+02 1.431694199129064e+02 1.431479174787919e+02 1.431258131191476e+02 + 1.431031084085178e+02 1.430798049199323e+02 1.430559042249068e+02 1.430314078934423e+02 1.430063174940254e+02 + 1.429806345936283e+02 1.429543607577087e+02 1.429274975502101e+02 1.429000465335614e+02 1.428720092686770e+02 + 1.428433873149569e+02 1.428141822302868e+02 1.427843955710378e+02 1.427540288920667e+02 1.427230837467158e+02 + 1.426915616868131e+02 1.426594642626719e+02 1.426267930230913e+02 1.425935495153558e+02 1.425597352852356e+02 + 1.425253518769865e+02 1.424904008333497e+02 1.424548836955522e+02 1.424188020033061e+02 1.423821572948099e+02 + 1.423449511067467e+02 1.423071849742859e+02 1.422688604310821e+02 1.422299790092756e+02 1.421905422394923e+02 + 1.421505516508435e+02 1.421100087709262e+02 1.420689151258230e+02 1.420272722401020e+02 1.419850816368168e+02 + 1.419423448375067e+02 1.418990633621966e+02 1.418552387293967e+02 1.418108724561031e+02 1.417659660577972e+02 + 1.417205210484463e+02 1.416745389405029e+02 1.416280212449052e+02 1.415809694710770e+02 1.415333851269278e+02 + 1.414852697188524e+02 1.414366247517312e+02 1.413874517289305e+02 1.413377521523019e+02 1.412875275221824e+02 + 1.412367793373950e+02 1.411855090952479e+02 1.411337182915350e+02 1.410814084205359e+02 1.410285809750155e+02 + 1.409752374462244e+02 1.409213793238989e+02 1.408670080962608e+02 1.408121252500173e+02 1.407567322703613e+02 + 1.407008306409712e+02 1.406444218440110e+02 1.405875073601305e+02 1.405300886684646e+02 1.404721672466342e+02 + 1.404137445707455e+02 1.403548221153905e+02 1.402954013536464e+02 1.402354837570763e+02 1.401750707957289e+02 + 1.401141639381381e+02 1.400527646513238e+02 1.399908744007911e+02 1.399284946505310e+02 1.398656268630199e+02 + 1.398022724992196e+02 1.397384330185777e+02 1.396741098790275e+02 1.396093045369875e+02 1.395440184473619e+02 + 1.394782530635406e+02 1.394120098373991e+02 1.393452902192982e+02 1.392780956580844e+02 1.392104276010898e+02 + 1.391422874941322e+02 1.390736767815147e+02 1.390045969060261e+02 1.389350493089407e+02 1.388650354300186e+02 + 1.387945567075052e+02 1.387236145781316e+02 1.386522104771143e+02 1.385803458381556e+02 1.385080220934433e+02 + 1.384352406736507e+02 1.383620030079367e+02 1.382883105239458e+02 1.382141646478080e+02 1.381395668041390e+02 + 1.380645184160398e+02 1.379890209050974e+02 1.379130756913839e+02 1.378366841934573e+02 1.377598478283609e+02 + 1.376825680116239e+02 1.376048461572608e+02 1.375266836777718e+02 1.374480819841426e+02 1.373690424858444e+02 + 1.372895665908342e+02 1.372096557055544e+02 1.371293112349330e+02 1.370485345823834e+02 1.369673271498050e+02 + 1.368856903375823e+02 1.368036255445856e+02 1.367211341681708e+02 1.366382176041793e+02 1.365548772469381e+02 + 1.364711144892596e+02 1.363869307224420e+02 1.363023273362690e+02 1.362173057190099e+02 1.361318672574193e+02 + 1.360460133367378e+02 1.359597453406913e+02 1.358730646514912e+02 1.357859726498348e+02 1.356984707149045e+02 + 1.356105602243687e+02 1.355222425543812e+02 1.354335190795813e+02 1.353443911730938e+02 1.352548602065295e+02 + 1.351649275499842e+02 1.350745945720396e+02 1.349838626397630e+02 1.348927331187070e+02 1.348012073729101e+02 + 1.347092867648962e+02 1.346169726556746e+02 1.345242664047404e+02 1.344311693700744e+02 1.343376829081425e+02 + 1.342438083738967e+02 1.341495471207740e+02 1.340549005006977e+02 1.339598698640759e+02 1.338644565598027e+02 + 1.337686619352579e+02 1.336724873363063e+02 1.335759341072989e+02 1.334790035910719e+02 1.333816971289471e+02 + 1.332840160607320e+02 1.331859617247196e+02 1.330875354576884e+02 1.329887385949026e+02 1.328895724701119e+02 + 1.327900384155515e+02 1.326901377619423e+02 1.325898718384906e+02 1.324892419728885e+02 1.323882494913135e+02 + 1.322868957184288e+02 1.321851819773829e+02 1.320831095898100e+02 1.319806798758302e+02 1.318778941540486e+02 + 1.317747537415563e+02 1.316712599539298e+02 1.315674141052312e+02 1.314632175080081e+02 1.313586714732937e+02 + 1.312537773106069e+02 1.311485363279519e+02 1.310429498318188e+02 1.309370191271830e+02 1.308307455175056e+02 + 1.307241303047332e+02 1.306171747892980e+02 1.305098802701177e+02 1.304022480445958e+02 1.302942794086211e+02 + 1.301859756565681e+02 1.300773380812968e+02 1.299683679741528e+02 1.298590666249674e+02 1.297494353220572e+02 + 1.296394753522245e+02 1.295291880007573e+02 1.294185745514290e+02 1.293076362864986e+02 1.291963744867108e+02 + 1.290847904312955e+02 1.289728853979686e+02 1.288606606629315e+02 1.287481175008708e+02 1.286352571849591e+02 + 1.285220809868543e+02 1.284085901767001e+02 1.282947860231254e+02 1.281806697932451e+02 1.280662427526594e+02 + 1.279515061654541e+02 1.278364612942007e+02 1.277211093999561e+02 1.276054517422628e+02 1.274894895791490e+02 + 1.273732241671283e+02 1.272566567612000e+02 1.271397886148489e+02 1.270226209800453e+02 1.269051551072453e+02 + 1.267873922453903e+02 1.266693336419074e+02 1.265509805427093e+02 1.264323341921942e+02 1.263133958332459e+02 + 1.261941667072336e+02 1.260746480540126e+02 1.259548411119230e+02 1.258347471177910e+02 1.257143673069283e+02 + 1.255937029131321e+02 1.254727551686851e+02 1.253515253043556e+02 1.252300145493975e+02 1.251082241315504e+02 + 1.249861552770393e+02 1.248638092105747e+02 1.247411871553528e+02 1.246182903330555e+02 1.244951199638499e+02 + 1.243716772663891e+02 1.242479634578113e+02 1.241239797537407e+02 1.239997273682869e+02 1.238752075140449e+02 + 1.237504214020955e+02 1.236253702420050e+02 1.235000552418253e+02 1.233744776080937e+02 1.232486385458333e+02 + 1.231225392585526e+02 1.229961809482458e+02 1.228695648153925e+02 1.227426920589580e+02 1.226155638763932e+02 + 1.224881814636345e+02 1.223605460151038e+02 1.222326587237086e+02 1.221045207808422e+02 1.219761333763830e+02 + 1.218474976986954e+02 1.217186149346293e+02 1.215894862695199e+02 1.214601128871883e+02 1.213304959699409e+02 + 1.212006366985698e+02 1.210705362523527e+02 1.209401958090528e+02 1.208096165449189e+02 1.206787996346854e+02 + 1.205477462515721e+02 1.204164575672845e+02 1.202849347520138e+02 1.201531789744366e+02 1.200211914017149e+02 + 1.198889731994967e+02 1.197565255319153e+02 1.196238495615895e+02 1.194909464496238e+02 1.193578173556082e+02 + 1.192244634376185e+02 1.190908858522157e+02 1.189570857544465e+02 1.188230642978433e+02 1.186888226344241e+02 + 1.185543619146921e+02 1.184196832876364e+02 1.182847879007317e+02 1.181496768999381e+02 1.180143514297012e+02 + 1.178788126329524e+02 1.177430616511085e+02 1.176070996240720e+02 1.174709276902308e+02 1.173345469864585e+02 + 1.171979586481143e+02 1.170611638090428e+02 1.169241636015743e+02 1.167869591565246e+02 1.166495516031952e+02 + 1.165119420693729e+02 1.163741316813304e+02 1.162361215638258e+02 1.160979128401026e+02 1.159595066318902e+02 + 1.158209040594034e+02 1.156821062413426e+02 1.155431142948936e+02 1.154039293357280e+02 1.152645524780030e+02 + 1.151249848343611e+02 1.149852275159305e+02 1.148452816323250e+02 1.147051482916441e+02 1.145648286004727e+02 + 1.144243236638811e+02 1.142836345854255e+02 1.141427624671476e+02 1.140017084095744e+02 1.138604735117188e+02 + 1.137190588710791e+02 1.135774655836392e+02 1.134356947438686e+02 1.132937474447223e+02 1.131516247776408e+02 + 1.130093278325506e+02 1.128668576978631e+02 1.127242154604758e+02 1.125814022057714e+02 1.124384190176186e+02 + 1.122952669783712e+02 1.121519471688689e+02 1.120084606684367e+02 1.118648085548855e+02 1.117209919045116e+02 + 1.115770117920967e+02 1.114328692909082e+02 1.112885654726993e+02 1.111441014077084e+02 1.109994781646597e+02 + 1.108546968107629e+02 1.107097584117132e+02 1.105646640316914e+02 1.104194147333641e+02 1.102740115778830e+02 + 1.101284556248858e+02 1.099827479324956e+02 1.098368895573211e+02 1.096908815544564e+02 1.095447249774814e+02 + 1.093984208784615e+02 1.092519703079476e+02 1.091053743149763e+02 1.089586339470695e+02 1.088117502502351e+02 + 1.086647242689661e+02 1.085175570462414e+02 1.083702496235253e+02 1.082228030407677e+02 1.080752183364042e+02 + 1.079274965473558e+02 1.077796387090291e+02 1.076316458553164e+02 1.074835190185953e+02 1.073352592297292e+02 + 1.071868675180671e+02 1.070383449114433e+02 1.068896924361780e+02 1.067409111170767e+02 1.065920019774305e+02 + 1.064429660390163e+02 1.062938043220964e+02 1.061445178454185e+02 1.059951076262163e+02 1.058455746802086e+02 + 1.056959200216001e+02 1.055461446630809e+02 1.053962496158267e+02 1.052462358894988e+02 1.050961044922441e+02 + 1.049458564306950e+02 1.047954927099695e+02 1.046450143336711e+02 1.044944223038890e+02 1.043437176211978e+02 + 1.041929012846579e+02 1.040419742918150e+02 1.038909376387006e+02 1.037397923198316e+02 1.035885393282105e+02 + 1.034371796553255e+02 1.032857142911503e+02 1.031341442241440e+02 1.029824704412515e+02 1.028306939279031e+02 + 1.026788156680149e+02 1.025268366439883e+02 1.023747578367104e+02 1.022225802255538e+02 1.020703047883768e+02 + 1.019179325015231e+02 1.017654643398222e+02 1.016129012765888e+02 1.014602442836236e+02 1.013074943312125e+02 + 1.011546523881273e+02 1.010017194216250e+02 1.008486963974485e+02 1.006955842798261e+02 1.005423840314716e+02 + 1.003890966135846e+02 1.002357229858501e+02 1.000822641064387e+02 9.992872093200657e+01 9.977509441769536e+01 + 9.962138551713257e+01 9.946759518243087e+01 9.931372436418886e+01 9.915977401149044e+01 9.900574507190525e+01 + 9.885163849148847e+01 9.869745521478075e+01 9.854319618480841e+01 9.838886234308329e+01 9.823445462960282e+01 + 9.807997398284998e+01 9.792542133979333e+01 9.777079763588698e+01 9.761610380507069e+01 9.746134077976963e+01 + 9.730650949089471e+01 9.715161086784227e+01 9.699664583849429e+01 9.684161532921836e+01 9.668652026486750e+01 + 9.653136156878041e+01 9.637614016278137e+01 9.622085696718013e+01 9.606551290077211e+01 9.591010888083821e+01 + 9.575464582314495e+01 9.559912464194447e+01 9.544354624997435e+01 9.528791155845782e+01 9.513222147710371e+01 + 9.497647691410629e+01 9.482067877614557e+01 9.466482796838697e+01 9.450892539448159e+01 9.435297195656602e+01 + 9.419696855526250e+01 9.404091608967873e+01 9.388481545740812e+01 9.372866755452942e+01 9.357247327560728e+01 + 9.341623351369167e+01 9.325994916031811e+01 9.310362110550788e+01 9.294725023776763e+01 9.279083744408979e+01 + 9.263438360995207e+01 9.247788961931805e+01 9.232135635463666e+01 9.216478469684255e+01 9.200817552535575e+01 + 9.185152971808213e+01 9.169484815141283e+01 9.153813170022484e+01 9.138138123788045e+01 9.122459763622776e+01 + 9.106778176560022e+01 9.091093449481704e+01 9.075405669118287e+01 9.059714922048799e+01 9.044021294700819e+01 + 9.028324873350495e+01 9.012625744122512e+01 8.996923992990135e+01 8.981219705775169e+01 8.965512968147981e+01 + 8.949803865627491e+01 8.934092483581189e+01 8.918378907225100e+01 8.902663221623831e+01 8.886945511690526e+01 + 8.871225862186895e+01 8.855504357723201e+01 8.839781082758265e+01 8.824056121599466e+01 8.808329558402740e+01 + 8.792601477172582e+01 8.776871961762036e+01 8.761141095872711e+01 8.745408963054764e+01 8.729675646706922e+01 + 8.713941230076453e+01 8.698205796259197e+01 8.682469428199539e+01 8.666732208690431e+01 8.650994220373366e+01 + 8.635255545738416e+01 8.619516267124189e+01 8.603776466717866e+01 8.588036226555170e+01 8.572295628520395e+01 + 8.556554754346379e+01 8.540813685614532e+01 8.525072503754802e+01 8.509331290045711e+01 8.493590125614324e+01 + 8.477849091436276e+01 8.462108268335747e+01 8.446367736985484e+01 8.430627577906779e+01 8.414887871469494e+01 + 8.399148697892035e+01 8.383410137241380e+01 8.367672269433045e+01 8.351935174231120e+01 8.336198931248241e+01 + 8.320463619945609e+01 8.304729319632969e+01 8.288996109468637e+01 8.273264068459483e+01 8.257533275460922e+01 + 8.241803809176943e+01 8.226075748160076e+01 8.210349170811423e+01 8.194624155380627e+01 8.178900779965905e+01 + 8.163179122514011e+01 8.147459260820276e+01 8.131741272528569e+01 8.116025235131333e+01 8.100311225969554e+01 + 8.084599322232786e+01 8.068889600959132e+01 8.053182139035255e+01 8.037477013196370e+01 8.021774300026262e+01 + 8.006074075957254e+01 7.990376417270242e+01 7.974681400094667e+01 7.958989100408539e+01 7.943299594038415e+01 + 7.927612956659409e+01 7.911929263795197e+01 7.896248590818014e+01 7.880571012948634e+01 7.864896605256419e+01 + 7.849225442659255e+01 7.833557599923610e+01 7.817893151664492e+01 7.802232172345477e+01 7.786574736278688e+01 + 7.770920917624815e+01 7.755270790393094e+01 7.739624428441330e+01 7.723981905475877e+01 7.708343295051642e+01 + 7.692708670572107e+01 7.677078105289279e+01 7.661451672303755e+01 7.645829444564673e+01 7.630211494869724e+01 + 7.614597895865164e+01 7.598988720045803e+01 7.583384039755006e+01 7.567783927184703e+01 7.552188454375366e+01 + 7.536597693216039e+01 7.521011715444310e+01 7.505430592646336e+01 7.489854396256820e+01 7.474283197559029e+01 + 7.458717067684783e+01 7.443156077614464e+01 7.427600298176998e+01 7.412049800049887e+01 7.396504653759173e+01 + 7.380964929679465e+01 7.365430698033923e+01 7.349902028894267e+01 7.334378992180771e+01 7.318861657662274e+01 + 7.303350094956154e+01 7.287844373528371e+01 7.272344562693418e+01 7.256850731614361e+01 7.241362949302810e+01 + 7.225881284618943e+01 7.210405806271493e+01 7.194936582817741e+01 7.179473682663537e+01 7.164017174063279e+01 + 7.148567125119925e+01 7.133123603784988e+01 7.117686677858542e+01 7.102256414989209e+01 7.086832882674184e+01 + 7.071416148259199e+01 7.056006278938563e+01 7.040603341755120e+01 7.025207403600290e+01 7.009818531214037e+01 + 6.994436791184893e+01 6.979062249949932e+01 6.963694973794802e+01 6.948335028853694e+01 6.932982481109363e+01 + 6.917637396393120e+01 6.902299840384831e+01 6.886969878612915e+01 6.871647576454359e+01 6.856332999134696e+01 + 6.841026211728023e+01 6.825727279156986e+01 6.810436266192799e+01 6.795153237455222e+01 6.779878257412578e+01 + 6.764611390381742e+01 6.749352700528156e+01 6.734102251865801e+01 6.718860108257236e+01 6.703626333413560e+01 + 6.688400990894438e+01 6.673184144108089e+01 6.657975856311283e+01 6.642776190609362e+01 6.627585209956207e+01 + 6.612402977154272e+01 6.597229554854552e+01 6.582065005556615e+01 6.566909391608571e+01 6.551762775207096e+01 + 6.536625218397421e+01 6.521496783073333e+01 6.506377530977173e+01 6.491267523699847e+01 6.476166822680808e+01 + 6.461075489208073e+01 6.445993584418208e+01 6.430921169296353e+01 6.415858304676178e+01 6.400805051239938e+01 + 6.385761469518417e+01 6.370727619890986e+01 6.355703562585544e+01 6.340689357678570e+01 6.325685065095082e+01 + 6.310690744608669e+01 6.295706455841461e+01 6.280732258264167e+01 6.265768211196028e+01 6.250814373804862e+01 + 6.235870805107031e+01 6.220937563967463e+01 6.206014709099631e+01 6.191102299065577e+01 6.176200392275896e+01 + 6.161309046989736e+01 6.146428321314807e+01 6.131558273207371e+01 6.116698960472251e+01 6.101850440762821e+01 + 6.087012771581022e+01 6.072186010277339e+01 6.057370214050827e+01 6.042565439949085e+01 6.027771744868281e+01 + 6.012989185553128e+01 5.998217818596908e+01 5.983457700441446e+01 5.968708887377138e+01 5.953971435542925e+01 + 5.939245400926315e+01 5.924530839363363e+01 5.909827806538689e+01 5.895136357985464e+01 5.880456549085422e+01 + 5.865788435068842e+01 5.851132071014579e+01 5.836487511850023e+01 5.821854812351140e+01 5.807234027142437e+01 + 5.792625210696992e+01 5.778028417336427e+01 5.763443701230933e+01 5.748871116399243e+01 5.734310716708664e+01 + 5.719762555875045e+01 5.705226687462802e+01 5.690703164884900e+01 5.676192041402867e+01 5.661693370126787e+01 + 5.647207204015296e+01 5.632733595875593e+01 5.618272598363428e+01 5.603824263983114e+01 5.589388645087514e+01 + 5.574965793878054e+01 5.560555762404712e+01 5.546158602566030e+01 5.531774366109093e+01 5.517403104629560e+01 + 5.503044869571632e+01 5.488699712228079e+01 5.474367683740217e+01 5.460048835097929e+01 5.445743217139644e+01 + 5.431450880552358e+01 5.417171875871616e+01 5.402906253481526e+01 5.388654063614747e+01 5.374415356352502e+01 + 5.360190181624563e+01 5.345978589209265e+01 5.331780628733492e+01 5.317596349672697e+01 5.303425801350876e+01 + 5.289269032940597e+01 5.275126093462967e+01 5.260997031787668e+01 5.246881896632923e+01 5.232780736565524e+01 + 5.218693600000810e+01 5.204620535202689e+01 5.190561590283608e+01 5.176516813204589e+01 5.162486251775203e+01 + 5.148469953653571e+01 5.134467966346387e+01 5.120480337208885e+01 5.106507113444869e+01 5.092548342106686e+01 + 5.078604070095258e+01 5.064674344160046e+01 5.050759210899081e+01 5.036858716758939e+01 5.022972908034766e+01 + 5.009101830870252e+01 4.995245531257654e+01 4.981404055037778e+01 4.967577447899995e+01 4.953765755382224e+01 + 4.939969022870950e+01 4.926187295601203e+01 4.912420618656584e+01 4.898669036969236e+01 4.884932595319873e+01 + 4.871211338337756e+01 4.857505310500706e+01 4.843814556135100e+01 4.830139119415876e+01 4.816479044366521e+01 + 4.802834374859087e+01 4.789205154614175e+01 4.775591427200953e+01 4.761993236037132e+01 4.748410624388995e+01 + 4.734843635371367e+01 4.721292311947641e+01 4.707756696929765e+01 4.694236832978237e+01 4.680732762602122e+01 + 4.667244528159031e+01 4.653772171855141e+01 4.640315735745180e+01 4.626875261732437e+01 4.613450791568750e+01 + 4.600042366854529e+01 4.586650029038721e+01 4.573273819418849e+01 4.559913779140976e+01 4.546569949199737e+01 + 4.533242370438309e+01 4.519931083548441e+01 4.506636129070425e+01 4.493357547393122e+01 4.480095378753936e+01 + 4.466849663238845e+01 4.453620440782364e+01 4.440407751167585e+01 4.427211634026140e+01 4.414032128838230e+01 + 4.400869274932603e+01 4.387723111486573e+01 4.374593677526001e+01 4.361481011925318e+01 4.348385153407495e+01 + 4.335306140544076e+01 4.322244011755150e+01 4.309198805309371e+01 4.296170559323940e+01 4.283159311764631e+01 + 4.270165100445755e+01 4.257187963030194e+01 4.244227937029384e+01 4.231285059803313e+01 4.218359368560534e+01 + 4.205450900358145e+01 4.192559692101814e+01 4.179685780545756e+01 4.166829202292748e+01 4.153989993794121e+01 + 4.141168191349765e+01 4.128363831108125e+01 4.115576949066206e+01 4.102807581069564e+01 4.090055762812319e+01 + 4.077321529837138e+01 4.064604917535259e+01 4.051905961146462e+01 4.039224695759095e+01 4.026561156310054e+01 + 4.013915377584802e+01 4.001287394217346e+01 3.988677240690264e+01 3.976084951334678e+01 3.963510560330277e+01 + 3.950954101705297e+01 3.938415609336541e+01 3.925895116949360e+01 3.913392658117670e+01 3.900908266263934e+01 + 3.888441974659184e+01 3.875993816422995e+01 3.863563824523513e+01 3.851152031777427e+01 3.838758470849993e+01 + 3.826383174255022e+01 3.814026174354878e+01 3.801687503360487e+01 3.789367193331322e+01 3.777065276175429e+01 + 3.764781783649393e+01 3.752516747358370e+01 3.740270198756063e+01 3.728042169144741e+01 3.715832689675219e+01 + 3.703641791346880e+01 3.691469505007653e+01 3.679315861354036e+01 3.667180890931068e+01 3.655064624132363e+01 + 3.642967091200075e+01 3.630888322224930e+01 3.618828347146196e+01 3.606787195751711e+01 3.594764897677859e+01 + 3.582761482409590e+01 3.570776979280402e+01 3.558811417472360e+01 3.546864826016076e+01 3.534937233790725e+01 + 3.523028669524034e+01 3.511139161792294e+01 3.499268739020344e+01 3.487417429481588e+01 3.475585261297979e+01 + 3.463772262440038e+01 3.451978460726826e+01 3.440203883825978e+01 3.428448559253675e+01 3.416712514374659e+01 + 3.404995776402230e+01 3.393298372398237e+01 3.381620329273100e+01 3.369961673785781e+01 3.358322432543807e+01 + 3.346702632003260e+01 3.335102298468780e+01 3.323521458093560e+01 3.311960136879357e+01 3.300418360676475e+01 + 3.288896155183785e+01 3.277393545948706e+01 3.265910558367220e+01 3.254447217683863e+01 3.243003548991729e+01 + 3.231579577232467e+01 3.220175327196286e+01 3.208790823521946e+01 3.197426090696774e+01 3.186081153056639e+01 + 3.174756034785984e+01 3.163450759917793e+01 3.152165352333620e+01 3.140899835763565e+01 3.129654233786293e+01 + 3.118428569829018e+01 3.107222867167521e+01 3.096037148926128e+01 3.084871438077734e+01 3.073725757443779e+01 + 3.062600129694268e+01 3.051494577347760e+01 3.040409122771371e+01 3.029343788180776e+01 3.018298595640201e+01 + 3.007273567062436e+01 2.996268724208821e+01 2.985284088689260e+01 2.974319681962206e+01 2.963375525334677e+01 + 2.952451639962239e+01 2.941548046849025e+01 2.930664766847711e+01 2.919801820659548e+01 2.908959228834326e+01 + 2.898137011770405e+01 2.887335189714690e+01 2.876553782762659e+01 2.865792810858327e+01 2.855052293794284e+01 + 2.844332251211663e+01 2.833632702600164e+01 2.822953667298036e+01 2.812295164492090e+01 2.801657213217691e+01 + 2.791039832358764e+01 2.780443040647786e+01 2.769866856665795e+01 2.759311298842385e+01 2.748776385455705e+01 + 2.738262134632460e+01 2.727768564347918e+01 2.717295692425897e+01 2.706843536538775e+01 2.696412114207484e+01 + 2.686001442801519e+01 2.675611539538925e+01 2.665242421486307e+01 2.654894105558828e+01 2.644566608520204e+01 + 2.634259946982713e+01 2.623974137407184e+01 2.613709196103008e+01 2.603465139228129e+01 2.593241982789051e+01 + 2.583039742640830e+01 2.572858434487086e+01 2.562698073879988e+01 2.552558676220269e+01 2.542440256757213e+01 + 2.532342830588666e+01 2.522266412661024e+01 2.512211017769248e+01 2.502176660556847e+01 2.492163355515898e+01 + 2.482171116987022e+01 2.472199959159408e+01 2.462249896070794e+01 2.452320941607479e+01 2.442413109504316e+01 + 2.432526413344719e+01 2.422660866560654e+01 2.412816482432648e+01 2.402993274089780e+01 2.393191254509692e+01 + 2.383410436518578e+01 2.373650832791191e+01 2.363912455850837e+01 2.354195318069388e+01 2.344499431667258e+01 + 2.334824808713436e+01 2.325171461125452e+01 2.315539400669402e+01 2.305928638959937e+01 2.296339187460259e+01 + 2.286771057482138e+01 2.277224260185888e+01 2.267698806580393e+01 2.258194707523082e+01 2.248711973719949e+01 + 2.239250615725538e+01 2.229810643942959e+01 2.220392068623867e+01 2.210994899868487e+01 2.201619147625588e+01 + 2.192264821692506e+01 2.182931931715126e+01 2.173620487187897e+01 2.164330497453819e+01 2.155061971704453e+01 + 2.145814918979911e+01 2.136589348168871e+01 2.127385268008558e+01 2.118202687084761e+01 2.109041613831823e+01 + 2.099902056532644e+01 2.090784023318678e+01 2.081687522169943e+01 2.072612560915005e+01 2.063559147230996e+01 + 2.054527288643595e+01 2.045516992527048e+01 2.036528266104148e+01 2.027561116446252e+01 2.018615550473271e+01 + 2.009691574953672e+01 2.000789196504483e+01 1.991908421591283e+01 1.983049256528212e+01 1.974211707477964e+01 + 1.965395780451792e+01 1.956601481309504e+01 1.947828815759470e+01 1.939077789358607e+01 1.930348407512398e+01 + 1.921640675474878e+01 1.912954598348641e+01 1.904290181084835e+01 1.895647428483170e+01 1.887026345191906e+01 + 1.878426935707866e+01 1.869849204376425e+01 1.861293155391521e+01 1.852758792795640e+01 1.844246120479831e+01 + 1.835755142183701e+01 1.827285861495410e+01 1.818838281851673e+01 1.810412406537770e+01 1.802008238687527e+01 + 1.793625781283339e+01 1.785265037156146e+01 1.776926008985454e+01 1.768608699299318e+01 1.760313110474359e+01 + 1.752039244735743e+01 1.743787104157206e+01 1.735556690661030e+01 1.727348006018060e+01 1.719161051847695e+01 + 1.710995829617890e+01 1.702852340645164e+01 1.694730586094581e+01 1.686630566979774e+01 1.678552284162922e+01 + 1.670495738354768e+01 1.662460930114609e+01 1.654447859850301e+01 1.646456527818252e+01 1.638486934123434e+01 + 1.630539078719367e+01 1.622612961408138e+01 1.614708581840382e+01 1.606825939515297e+01 1.598965033780631e+01 + 1.591125863832698e+01 1.583308428716358e+01 1.575512727325039e+01 1.567738758400717e+01 1.559986520533931e+01 + 1.552256012163770e+01 1.544547231577888e+01 1.536860176912488e+01 1.529194846152338e+01 1.521551237130752e+01 + 1.513929347529613e+01 1.506329174879352e+01 1.498750716558961e+01 1.491193969795986e+01 1.483658931666533e+01 + 1.476145599095261e+01 1.468653968855391e+01 1.461184037568694e+01 1.453735801705504e+01 1.446309257584711e+01 + 1.438904401373757e+01 1.431521229088648e+01 1.424159736593938e+01 1.416819919602747e+01 1.409501773676744e+01 + 1.402205294226162e+01 1.394930476509783e+01 1.387677315634954e+01 1.380445806557572e+01 1.373235944082095e+01 + 1.366047722861535e+01 1.358881137397464e+01 1.351736182040008e+01 1.344612850987852e+01 1.337511138288234e+01 + 1.330431037836955e+01 1.323372543378366e+01 1.316335648505382e+01 1.309320346659467e+01 1.302326631130648e+01 + 1.295354495057505e+01 1.288403931427179e+01 1.281474933075362e+01 1.274567492686310e+01 1.267681602792827e+01 + 1.260817255776283e+01 1.253974443866598e+01 1.247153159142252e+01 1.240353393530281e+01 1.233575138806278e+01 + 1.226818386594392e+01 1.220083128367332e+01 1.213369355446357e+01 1.206677059001291e+01 1.200006230050511e+01 + 1.193356859460948e+01 1.186728937948095e+01 1.180122456075998e+01 1.173537404257264e+01 1.166973772753050e+01 + 1.160431551673077e+01 1.153910730975617e+01 1.147411300467506e+01 1.140933249804127e+01 1.134476568489430e+01 + 1.128041245875913e+01 1.121627271164637e+01 1.115234633405217e+01 1.108863321495826e+01 1.102513324183191e+01 + 1.096184630062602e+01 1.089877227577898e+01 1.083591105021483e+01 1.077326250534308e+01 1.071082652105891e+01 + 1.064860297574299e+01 1.058659174626161e+01 1.052479270796660e+01 1.046320573469538e+01 1.040183069877089e+01 + 1.034066747100171e+01 1.027971592068191e+01 1.021897591559121e+01 1.015844732199483e+01 1.009813000464360e+01 + 1.003802382677389e+01 9.978128650107653e+00 9.918444334852426e+00 9.858970739701276e+00 9.799707721832871e+00 + 9.740655136911421e+00 9.681812839086733e+00 9.623180680994153e+00 9.564758513754628e+00 9.506546186974631e+00 + 9.448543548746249e+00 9.390750445647093e+00 9.333166722740389e+00 9.275792223574880e+00 9.218626790184928e+00 + 9.161670263090413e+00 9.104922481296834e+00 9.048383282295211e+00 8.992052502062172e+00 8.935929975059876e+00 + 8.880015534236088e+00 8.824309011024104e+00 8.768810235342828e+00 8.713519035596686e+00 8.658435238675722e+00 + 8.603558669955500e+00 8.548889153297198e+00 8.494426511047514e+00 8.440170564038764e+00 8.386121131588787e+00 + 8.332278031501030e+00 8.278641080064466e+00 8.225210092053684e+00 8.171984880728791e+00 8.118965257835516e+00 + 8.066151033605102e+00 8.013542016754393e+00 7.961138014485805e+00 7.908938832487298e+00 7.856944274932425e+00 + 7.805154144480282e+00 7.753568242275560e+00 7.702186367948488e+00 7.651008319614897e+00 7.600033893876155e+00 + 7.549262885819230e+00 7.498695089016620e+00 7.448330295526429e+00 7.398168295892292e+00 7.348208879143454e+00 + 7.298451832794686e+00 7.248896942846365e+00 7.199543993784400e+00 7.150392768580307e+00 7.101443048691126e+00 + 7.052694614059514e+00 7.004147243113651e+00 6.955800712767317e+00 6.907654798419837e+00 6.859709273956130e+00 + 6.811963911746652e+00 6.764418482647465e+00 6.717072756000151e+00 6.669926499631911e+00 6.622979479855476e+00 + 6.576231461469172e+00 6.529682207756860e+00 6.483331480488014e+00 6.437179039917633e+00 6.391224644786305e+00 + 6.345468052320204e+00 6.299909018231028e+00 6.254547296716085e+00 6.209382640458214e+00 6.164414800625865e+00 + 6.119643526873012e+00 6.075068567339238e+00 6.030689668649656e+00 5.986506575914980e+00 5.942519032731461e+00 + 5.898726781180958e+00 5.855129561830853e+00 5.811727113734134e+00 5.768519174429326e+00 5.725505479940550e+00 + 5.682685764777479e+00 5.640059761935358e+00 5.597627202894992e+00 5.555387817622778e+00 5.513341334570648e+00 + 5.471487480676136e+00 5.429825981362312e+00 5.388356560537842e+00 5.347078940596939e+00 5.305992842419399e+00 + 5.265097985370574e+00 5.224394087301403e+00 5.183880864548359e+00 5.143558031933529e+00 5.103425302764519e+00 + 5.063482388834558e+00 5.023729000422384e+00 4.984164846292350e+00 4.944789633694351e+00 4.905603068363858e+00 + 4.866604854521922e+00 4.827794694875140e+00 4.789172290615694e+00 4.750737341421322e+00 4.712489545455345e+00 + 4.674428599366639e+00 4.636554198289648e+00 4.598866035844390e+00 4.561363804136454e+00 4.524047193757008e+00 + 4.486915893782744e+00 4.449969591775966e+00 4.413207973784530e+00 4.376630724341878e+00 4.340237526466974e+00 + 4.304028061664397e+00 4.268002009924276e+00 4.232159049722320e+00 4.196498858019774e+00 4.161021110263481e+00 + 4.125725480385848e+00 4.090611640804862e+00 4.055679262424026e+00 4.020928014632469e+00 3.986357565304866e+00 + 3.951967580801470e+00 3.917757725968066e+00 3.883727664136053e+00 3.849877057122377e+00 3.816205565229567e+00 + 3.782712847245678e+00 3.749398560444380e+00 3.716262360584895e+00 3.683303901912008e+00 3.650522837156093e+00 + 3.617918817533043e+00 3.585491492744375e+00 3.553240510977140e+00 3.521165518903993e+00 3.489266161683089e+00 + 3.457542082958224e+00 3.425992924858724e+00 3.394618327999504e+00 3.363417931481009e+00 3.332391372889291e+00 + 3.301538288295961e+00 3.270858312258202e+00 3.240351077818736e+00 3.210016216505886e+00 3.179853358333530e+00 + 3.149862131801127e+00 3.120042163893671e+00 3.090393080081757e+00 3.060914504321539e+00 3.031606059054747e+00 + 3.002467365208646e+00 2.973498042196106e+00 2.944697707915549e+00 2.916065978750987e+00 2.887602469571952e+00 + 2.859306793733582e+00 2.831178563076582e+00 2.803217387927225e+00 2.775422877097323e+00 2.747794637884290e+00 + 2.720332276071094e+00 2.693035395926285e+00 2.665903600203946e+00 2.638936490143768e+00 2.612133665470991e+00 + 2.585494724396426e+00 2.559019263616461e+00 2.532706878313022e+00 2.506557162153638e+00 2.480569707291391e+00 + 2.454744104364944e+00 2.429079942498493e+00 2.403576809301841e+00 2.378234290870341e+00 2.353051971784930e+00 + 2.328029435112079e+00 2.303166262403859e+00 2.278462033697896e+00 2.253916327517403e+00 2.229528720871120e+00 + 2.205298789253393e+00 2.181226106644123e+00 2.157310245508789e+00 2.133550776798412e+00 2.109947269949605e+00 + 2.086499292884541e+00 2.063206412010974e+00 2.040068192222195e+00 2.017084196897092e+00 1.994253987900111e+00 + 1.971577125581281e+00 1.949053168776160e+00 1.926681674805912e+00 1.904462199477255e+00 1.882394297082488e+00 + 1.860477520399445e+00 1.838711420691566e+00 1.817095547707835e+00 1.795629449682816e+00 1.774312673336646e+00 + 1.753144763875002e+00 1.732125264989162e+00 1.711253718855955e+00 1.690529666137791e+00 1.669952645982623e+00 + 1.649522196023998e+00 1.629237852381020e+00 1.609099149658372e+00 1.589105620946276e+00 1.569256797820558e+00 + 1.549552210342588e+00 1.529991387059324e+00 1.510573855003263e+00 1.491299139692498e+00 1.472166765130677e+00 + 1.453176253807029e+00 1.434327126696326e+00 1.415618903258929e+00 1.397051101440760e+00 1.378623237673323e+00 + 1.360334826873657e+00 1.342185382444405e+00 1.324174416273757e+00 1.306301438735488e+00 1.288565958688910e+00 + 1.270967483478938e+00 1.253505518936037e+00 1.236179569376252e+00 1.218989137601175e+00 1.201933724897982e+00 + 1.185012831039419e+00 1.168225954283792e+00 1.151572591374991e+00 1.135052237542440e+00 1.118664386501169e+00 + 1.102408530451751e+00 1.086284160080351e+00 1.070290764558667e+00 1.054427831544002e+00 1.038694847179201e+00 + 1.023091296092696e+00 1.007616661398469e+00 9.922704246960834e-01 9.770520660706655e-01 9.619610640929175e-01 + 9.469968958190927e-01 9.321590367910279e-01 9.174469610361218e-01 9.028601410673497e-01 8.883980478832394e-01 + 8.740601509678969e-01 8.598459182909971e-01 8.457548163077863e-01 8.317863099590601e-01 8.179398626712029e-01 + 8.042149363561621e-01 7.906109914114554e-01 7.771274867201527e-01 7.637638796509086e-01 7.505196260579413e-01 + 7.373941802810475e-01 7.243869951455646e-01 7.114975219624209e-01 6.987252105281102e-01 6.860695091246874e-01 + 6.735298645197902e-01 6.611057219665998e-01 6.487965252038832e-01 6.366017164559759e-01 6.245207364327776e-01 + 6.125530243297506e-01 6.006980178279347e-01 5.889551530939333e-01 5.773238647799213e-01 5.658035860236345e-01 + 5.543937484483812e-01 5.430937821630419e-01 5.319031157620627e-01 5.208211763254530e-01 5.098473894187909e-01 + 4.989811790932310e-01 4.882219678854953e-01 4.775691768178602e-01 4.670222253981821e-01 4.565805316198835e-01 + 4.462435119619604e-01 4.360105813889603e-01 4.258811533510166e-01 4.158546397838235e-01 4.059304511086452e-01 + 3.961079962323076e-01 3.863866825472127e-01 3.767659159313276e-01 3.672451007481917e-01 3.578236398469018e-01 + 3.485009345621332e-01 3.392763847141235e-01 3.301493886086863e-01 3.211193430371943e-01 3.121856432765866e-01 + 3.033476830893841e-01 2.946048547236655e-01 2.859565489130799e-01 2.774021548768422e-01 2.689410603197377e-01 + 2.605726514321184e-01 2.522963128899138e-01 2.441114278546037e-01 2.360173779732490e-01 2.280135433784793e-01 + 2.200993026884872e-01 2.122740330070330e-01 2.045371099234480e-01 1.968879075126297e-01 1.893257983350504e-01 + 1.818501534367387e-01 1.744603423492983e-01 1.671557330899035e-01 1.599356921612944e-01 1.527995845517754e-01 + 1.457467737352234e-01 1.387766216710824e-01 1.318884888043673e-01 1.250817340656530e-01 1.183557148710898e-01 + 1.117097871223964e-01 1.051433052068581e-01 9.865562199732346e-02 9.224608885221711e-02 8.591405561552515e-02 + 7.965887061681186e-02 7.347988067119260e-02 6.737643107936901e-02 6.134786562760006e-02 5.539352658771372e-02 + 4.951275471711383e-02 4.370488925876222e-02 3.796926794119296e-02 3.230522697851125e-02 2.671210107038961e-02 + 2.118922340206019e-02 1.573592564433688e-02 1.035153795359006e-02 5.035388971769153e-03 -2.131941736216899e-04 + -5.394885869494848e-03 -1.051036201721180e-02 -1.556030003254725e-02 -2.054537884572184e-02 -2.546627890138443e-02 + -3.032368215860822e-02 -3.511827209090943e-02 -3.985073368623094e-02 -4.452175344694893e-02 -4.913201938986640e-02 + -5.368222104622158e-02 -5.817304946168927e-02 -6.260519719637002e-02 -6.697935832479755e-02 -7.129622843593442e-02 + -7.555650463318470e-02 -7.976088553437737e-02 -8.391007127176899e-02 -8.800476349205456e-02 -9.204566535636217e-02 + -9.603348154024814e-02 -9.996891823369970e-02 -1.038526831411359e-01 -1.076854854814134e-01 -1.114680359878148e-01 + -1.152010469080574e-01 -1.188852320042858e-01 -1.225213065530839e-01 -1.261099873454607e-01 -1.296519926868617e-01 + -1.331480423971617e-01 -1.365988578106660e-01 -1.400051617761155e-01 -1.433676786566820e-01 -1.466871343299691e-01 + -1.499642561880073e-01 -1.531997731372656e-01 -1.563944155986450e-01 -1.595489155074689e-01 -1.626640063135047e-01 + -1.657404229809454e-01 -1.687789019884166e-01 -1.717801813289747e-01 -1.747450005101077e-01 -1.776741005537412e-01 + -1.805682239962236e-01 -1.834281148883453e-01 -1.862545187953164e-01 -1.890481827967898e-01 -1.918098554868445e-01 + -1.945402869739935e-01 -1.972402288811781e-01 -1.999104343457795e-01 -2.025516580196005e-01 -2.051646560688824e-01 + -2.077501861742957e-01 -2.103090075309466e-01 -2.128418808483692e-01 -2.153495683505280e-01 -2.178328337758244e-01 + -2.202924423770861e-01 -2.227291609215784e-01 -2.251437576909959e-01 -2.275370024814627e-01 -2.299096666035367e-01 + -2.322625228822095e-01 -2.345963456569018e-01 -2.369119107814674e-01 -2.392099956241902e-01 -2.414913790677904e-01 + -2.437568415094148e-01 -2.460071648606438e-01 -2.482431325474920e-01 -2.504655270232117e-01 -2.526748844850286e-01 + -2.548712870711965e-01 -2.570547682968765e-01 -2.592253617791763e-01 -2.613831012371420e-01 -2.635280204917619e-01 + -2.656601534659672e-01 -2.677795341846346e-01 -2.698861967745758e-01 -2.719801754645503e-01 -2.740615045852588e-01 + -2.761302185693424e-01 -2.781863519513886e-01 -2.802299393679214e-01 -2.822610155574102e-01 -2.842796153602669e-01 + -2.862857737188432e-01 -2.882795256774359e-01 -2.902609063822845e-01 -2.922299510815640e-01 -2.941866951253988e-01 + -2.961311739658543e-01 -2.980634231569381e-01 -2.999834783545930e-01 -3.018913753167161e-01 -3.037871499031358e-01 + -3.056708380756298e-01 -3.075424758979137e-01 -3.094020995356503e-01 -3.112497452564351e-01 -3.130854494298195e-01 + -3.149092485272829e-01 -3.167211791222584e-01 -3.185212778901121e-01 -3.203095816081620e-01 -3.220861271556567e-01 + -3.238509515137969e-01 -3.256040917657230e-01 -3.273455850965125e-01 -3.290754687931897e-01 -3.307937802447237e-01 + -3.325005569420184e-01 -3.341958364779256e-01 -3.358796565472378e-01 -3.375520549466902e-01 -3.392130695749561e-01 + -3.408627384326585e-01 -3.425010996223551e-01 -3.441281913485494e-01 -3.457440519176904e-01 -3.473487197381614e-01 + -3.489422333202930e-01 -3.505246312763572e-01 -3.520959523205696e-01 -3.536562352690858e-01 -3.552055190400044e-01 + -3.567438426533629e-01 -3.582712452311493e-01 -3.597877659972857e-01 -3.612934442776393e-01 -3.627883195000193e-01 + -3.642724311941801e-01 -3.657458189918087e-01 -3.672085226265489e-01 -3.686605819339737e-01 -3.701020368516060e-01 + -3.715329274189085e-01 -3.729532937772823e-01 -3.743631761700783e-01 -3.757626149425822e-01 -3.771516505420279e-01 + -3.785303235175878e-01 -3.798986745203761e-01 -3.812567443034534e-01 -3.826045737218176e-01 -3.839422037324134e-01 + -3.852696753941203e-01 -3.865870298677690e-01 -3.878943084161263e-01 -3.891915524039044e-01 -3.904788032977537e-01 + -3.917561026662737e-01 -3.930234921799964e-01 -3.942810136114071e-01 -3.955287088349253e-01 -3.967666198269124e-01 + -3.979947886656766e-01 -3.992132575314682e-01 -4.004220687064748e-01 -4.016212645748296e-01 -4.028108876226092e-01 + -4.039909804378286e-01 -4.051615857104492e-01 -4.063227462323697e-01 -4.074745048974357e-01 -4.086169047014348e-01 + -4.097499887420910e-01 -4.108738002190759e-01 -4.119883824340023e-01 -4.130937787904256e-01 -4.141900327938422e-01 + -4.152771880516879e-01 -4.163552882733478e-01 -4.174243772701438e-01 -4.184844989553420e-01 -4.195356973441484e-01 + -4.205780165537125e-01 -4.216115008031311e-01 -4.226361944134333e-01 -4.236521418075963e-01 -4.246593875105393e-01 + -4.256579761491247e-01 -4.266479524521539e-01 -4.276293612503697e-01 -4.286022474764645e-01 -4.295666561650646e-01 + -4.305226324527416e-01 -4.314702215780105e-01 -4.324094688813270e-01 -4.333404198050874e-01 -4.342631198936365e-01 + -4.351776147932516e-01 -4.360839502521613e-01 -4.369821721205324e-01 -4.378723263504720e-01 -4.387544589960327e-01 + -4.396286162132076e-01 -4.404948442599332e-01 -4.413531894960860e-01 -4.422036983834877e-01 -4.430464174858989e-01 + -4.438813934690256e-01 -4.447086731005124e-01 -4.455283032499518e-01 -4.463403308888704e-01 -4.471448030907442e-01 + -4.479417670309876e-01 -4.487312699869574e-01 -4.495133593379551e-01 -4.502880825652213e-01 -4.510554872519404e-01 + -4.518156210832407e-01 -4.525685318461865e-01 -4.533142674297914e-01 -4.540528758250075e-01 -4.547844051247295e-01 + -4.555089035237948e-01 -4.562264193189846e-01 -4.569370009090178e-01 -4.576406967945574e-01 -4.583375555782132e-01 + -4.590276259645304e-01 -4.597109567600006e-01 -4.603875968730556e-01 -4.610575953140697e-01 -4.617210011953609e-01 + -4.623778637311872e-01 -4.630282322377504e-01 -4.636721561331947e-01 -4.643096849376037e-01 -4.649408682730050e-01 + -4.655657558633726e-01 -4.661843975346147e-01 -4.667968432145867e-01 -4.674031429330851e-01 -4.680033468218487e-01 + -4.685975051145580e-01 -4.691856681468374e-01 -4.697678863562510e-01 -4.703442102823057e-01 -4.709146905664527e-01 + -4.714793779520823e-01 -4.720383232845285e-01 -4.725915775110693e-01 -4.731391916809215e-01 -4.736812169452462e-01 + -4.742177045571454e-01 -4.747487058716651e-01 -4.752742723457913e-01 -4.757944555384530e-01 -4.763093071105238e-01 + -4.768188788248147e-01 -4.773232225460841e-01 -4.778223902410287e-01 -4.783164339782879e-01 -4.788054059284457e-01 + -4.792893583640244e-01 -4.797683436594932e-01 -4.802424142912594e-01 -4.807116228376762e-01 -4.811760219790331e-01 + -4.816356644975702e-01 -4.820906032774611e-01 -4.825408913048284e-01 -4.829865816677327e-01 -4.834277275561784e-01 + -4.838643822621134e-01 -4.842965991794236e-01 -4.847244318039419e-01 -4.851479337334405e-01 -4.855671586676346e-01 + -4.859821604081808e-01 -4.863929928586808e-01 -4.867997100246730e-01 -4.872023660136441e-01 -4.876010150350191e-01 + -4.879957114001662e-01 -4.883865095223970e-01 -4.887734639169616e-01 -4.891566292010561e-01 -4.895360600938188e-01 + -4.899118114163273e-01 -4.902839380916026e-01 -4.906524951446093e-01 -4.910175377022521e-01 -4.913791209933798e-01 + -4.917373003487839e-01 -4.920921312011933e-01 -4.924436690852851e-01 -4.927919694684308e-01 -4.931370697500577e-01 + -4.934789732803277e-01 -4.938176796607034e-01 -4.941531884991288e-01 -4.944854994100274e-01 -4.948146120143043e-01 + -4.951405259393459e-01 -4.954632408190199e-01 -4.957827562936716e-01 -4.960990720101309e-01 -4.964121876217066e-01 + -4.967221027881895e-01 -4.970288171758501e-01 -4.973323304574402e-01 -4.976326423121929e-01 -4.979297524258209e-01 + -4.982236604905191e-01 -4.985143662049625e-01 -4.988018692743084e-01 -4.990861694101913e-01 -4.993672663307304e-01 + -4.996451597605245e-01 -4.999198494306522e-01 -5.001913350786736e-01 -5.004596164486314e-01 -5.007246932910466e-01 + -5.009865653629215e-01 -5.012452324277392e-01 -5.015006942554656e-01 -5.017529506225463e-01 -5.020020013119061e-01 + -5.022478461129534e-01 -5.024904848215740e-01 -5.027299172401382e-01 -5.029661431774949e-01 -5.031991624489750e-01 + -5.034289748763890e-01 -5.036555802880309e-01 -5.038789785186706e-01 -5.040991694095643e-01 -5.043161528084447e-01 + -5.045299285695296e-01 -5.047404965535127e-01 -5.049478566275719e-01 -5.051520086653672e-01 -5.053529525470344e-01 + -5.055506881591951e-01 -5.057452153949499e-01 -5.059365341538782e-01 -5.061246443420440e-01 -5.063095458719905e-01 + -5.064912386627406e-01 -5.066697226397991e-01 -5.068449977351522e-01 -5.070170638872649e-01 -5.071859210410864e-01 + -5.073515691480434e-01 -5.075140081660454e-01 -5.076732380594819e-01 -5.078292587992228e-01 -5.079820703626219e-01 + -5.081316727335095e-01 -5.082780659021979e-01 -5.084212498654840e-01 -5.085612246266403e-01 -5.086979901954246e-01 + -5.088315465880702e-01 -5.089618938272975e-01 -5.090890319423031e-01 -5.092129609687671e-01 -5.093336809488483e-01 + -5.094511919311879e-01 -5.095654939709076e-01 -5.096765871296097e-01 -5.097844714753774e-01 -5.098891470827758e-01 + -5.099906140328485e-01 -5.100888724131212e-01 -5.101839223176022e-01 -5.102757638467773e-01 -5.103643971076149e-01 + -5.104498222135662e-01 -5.105320392845580e-01 -5.106110484470036e-01 -5.106868498337943e-01 -5.107594435843033e-01 + -5.108288298443812e-01 -5.108950087663650e-01 -5.109579805090687e-01 -5.110177452377883e-01 -5.110743031243012e-01 + -5.111276543468636e-01 -5.111777990902151e-01 -5.112247375455742e-01 -5.112684699106433e-01 -5.113089963895990e-01 + -5.113463171931077e-01 -5.113804325383093e-01 -5.114113426488290e-01 -5.114390477547689e-01 -5.114635480927165e-01 + -5.114848439057363e-01 -5.115029354433764e-01 -5.115178229616629e-01 -5.115295067231062e-01 -5.115379869966949e-01 + -5.115432640578990e-01 -5.115453381886698e-01 -5.115442096774395e-01 -5.115398788191202e-01 -5.115323459151063e-01 + -5.115216112732721e-01 -5.115076752079730e-01 -5.114905380400449e-01 -5.114702000968043e-01 -5.114466617120493e-01 + -5.114199232260599e-01 -5.113899849855943e-01 -5.113568473438934e-01 -5.113205106606783e-01 -5.112809753021507e-01 + -5.112382416409930e-01 -5.111923100563704e-01 -5.111431809339267e-01 -5.110908546657877e-01 -5.110353316505597e-01 + -5.109766122933296e-01 -5.109146970056636e-01 -5.108495862056147e-01 -5.107812803177094e-01 -5.107097797729586e-01 + -5.106350850088536e-01 -5.105571964693675e-01 -5.104761146049527e-01 -5.103918398725427e-01 -5.103043727355524e-01 + -5.102137136638781e-01 -5.101198631338961e-01 -5.100228216284631e-01 -5.099225896369171e-01 -5.098191676550766e-01 + -5.097125561852428e-01 -5.096027557361954e-01 -5.094897668231960e-01 -5.093735899679869e-01 -5.092542256987911e-01 + -5.091316745503129e-01 -5.090059370637366e-01 -5.088770137867293e-01 -5.087449052734349e-01 -5.086096120844843e-01 + -5.084711347869825e-01 -5.083294739545197e-01 -5.081846301671668e-01 -5.080366040114725e-01 -5.078853960804701e-01 + -5.077310069736714e-01 -5.075734372970694e-01 -5.074126876631392e-01 -5.072487586908349e-01 -5.070816510055917e-01 + -5.069113652393276e-01 -5.067379020304392e-01 -5.065612620238058e-01 -5.063814458707846e-01 -5.061984542292185e-01 + -5.060122877634259e-01 -5.058229471442097e-01 -5.056304330488511e-01 -5.054347461611153e-01 -5.052358871712460e-01 + -5.050338567759673e-01 -5.048286556784863e-01 -5.046202845884886e-01 -5.044087442221434e-01 -5.041940353020984e-01 + -5.039761585574816e-01 -5.037551147239044e-01 -5.035309045434582e-01 -5.033035287647140e-01 -5.030729881427247e-01 + -5.028392834390245e-01 -5.026024154216264e-01 -5.023623848650260e-01 -5.021191925501998e-01 -5.018728392646045e-01 + -5.016233258021784e-01 -5.013706529633390e-01 -5.011148215549860e-01 -5.008558323904992e-01 -5.005936862897420e-01 + -5.003283840790533e-01 -5.000599265912575e-01 -4.997883146656586e-01 -4.995135491480405e-01 -4.992356308906681e-01 + -4.989545607522879e-01 -4.986703395981273e-01 -4.983829682998935e-01 -4.980924477357755e-01 -4.977987787904423e-01 + -4.975019623550448e-01 -4.972019993272154e-01 -4.968988906110637e-01 -4.965926371171837e-01 -4.962832397626502e-01 + -4.959706994710163e-01 -4.956550171723184e-01 -4.953361938030729e-01 -4.950142303062757e-01 -4.946891276314051e-01 + -4.943608867344209e-01 -4.940295085777623e-01 -4.936949941303489e-01 -4.933573443675832e-01 -4.930165602713474e-01 + -4.926726428300034e-01 -4.923255930383968e-01 -4.919754118978491e-01 -4.916221004156691e-01 -4.912656595474803e-01 + -4.909060901436411e-01 -4.905433930480749e-01 -4.901775691109031e-01 -4.898086191884409e-01 -4.894365441432043e-01 + -4.890613448439031e-01 -4.886830221654451e-01 -4.883015769889333e-01 -4.879170102016688e-01 -4.875293226971487e-01 + -4.871385153750696e-01 -4.867445891413194e-01 -4.863475449079862e-01 -4.859473835933548e-01 -4.855441061219063e-01 + -4.851377134243184e-01 -4.847282064374647e-01 -4.843155861044175e-01 -4.838998533744423e-01 -4.834810092030068e-01 + -4.830590545517686e-01 -4.826339903885882e-01 -4.822058176875200e-01 -4.817745374288139e-01 -4.813401505989188e-01 + -4.809026581904786e-01 -4.804620612023365e-01 -4.800183606395294e-01 -4.795715575132916e-01 -4.791216528410550e-01 + -4.786686476464476e-01 -4.782125429592951e-01 -4.777533398156186e-01 -4.772910392576365e-01 -4.768256423337643e-01 + -4.763571500986131e-01 -4.758855636129911e-01 -4.754108839439038e-01 -4.749331121645530e-01 -4.744522493543373e-01 + -4.739682965988518e-01 -4.734812549898890e-01 -4.729911256254369e-01 -4.724979096096809e-01 -4.720016080530035e-01 + -4.715022220719825e-01 -4.709997527893953e-01 -4.704942013342114e-01 -4.699855688416024e-01 -4.694738564529316e-01 + -4.689590653157630e-01 -4.684411965838545e-01 -4.679202514171620e-01 -4.673962309818384e-01 -4.668691364502320e-01 + -4.663389690008894e-01 -4.658057298185531e-01 -4.652694200941606e-01 -4.647300410248498e-01 -4.641875938139534e-01 + -4.636420796709999e-01 -4.630934998117145e-01 -4.625418554580214e-01 -4.619871478380395e-01 -4.614293781860850e-01 + -4.608685477426698e-01 -4.603046577545052e-01 -4.597377094744958e-01 -4.591677041617460e-01 -4.585946430815542e-01 + -4.580185275054180e-01 -4.574393587110291e-01 -4.568571379822779e-01 -4.562718666092510e-01 -4.556835458882312e-01 + -4.550921771216984e-01 -4.544977616183299e-01 -4.539003006929986e-01 -4.532997956667733e-01 -4.526962478669231e-01 + -4.520896586269101e-01 -4.514800292863929e-01 -4.508673611912307e-01 -4.502516556934755e-01 -4.496329141513789e-01 + -4.490111379293859e-01 -4.483863283981417e-01 -4.477584869344857e-01 -4.471276149214562e-01 -4.464937137482852e-01 + -4.458567848104038e-01 -4.452168295094399e-01 -4.445738492532161e-01 -4.439278454557549e-01 -4.432788195372706e-01 + -4.426267729241795e-01 -4.419717070490913e-01 -4.413136233508139e-01 -4.406525232743510e-01 -4.399884082709029e-01 + -4.393212797978676e-01 -4.386511393188397e-01 -4.379779883036090e-01 -4.373018282281638e-01 -4.366226605746890e-01 + -4.359404868315642e-01 -4.352553084933674e-01 -4.345671270608737e-01 -4.338759440410541e-01 -4.331817609470751e-01 + -4.324845792983037e-01 -4.317844006202983e-01 -4.310812264448177e-01 -4.303750583098183e-01 -4.296658977594498e-01 + -4.289537463440602e-01 -4.282386056201940e-01 -4.275204771505940e-01 -4.267993625041973e-01 -4.260752632561385e-01 + -4.253481809877495e-01 -4.246181172865585e-01 -4.238850737462907e-01 -4.231490519668675e-01 -4.224100535544074e-01 + -4.216680801212256e-01 -4.209231332858333e-01 -4.201752146729393e-01 -4.194243259134492e-01 -4.186704686444641e-01 + -4.179136445092829e-01 -4.171538551574005e-01 -4.163911022445103e-01 -4.156253874324995e-01 -4.148567123894541e-01 + -4.140850787896555e-01 -4.133104883135836e-01 -4.125329426479130e-01 -4.117524434855167e-01 -4.109689925254623e-01 + -4.101825914730171e-01 -4.093932420396428e-01 -4.086009459429975e-01 -4.078057049069378e-01 -4.070075206615160e-01 + -4.062063949429813e-01 -4.054023294937794e-01 -4.045953260625530e-01 -4.037853864041409e-01 -4.029725122795790e-01 + -4.021567054561020e-01 -4.013379677071356e-01 -4.005163008123089e-01 -3.996917065574437e-01 -3.988641867345587e-01 + -3.980337431418715e-01 -3.972003775837933e-01 -3.963640918709351e-01 -3.955248878201026e-01 -3.946827672542991e-01 + -3.938377320027231e-01 -3.929897839007729e-01 -3.921389247900393e-01 -3.912851565183142e-01 -3.904284809395839e-01 + -3.895688999140299e-01 -3.887064153080338e-01 -3.878410289941716e-01 -3.869727428512165e-01 -3.861015587641390e-01 + -3.852274786241049e-01 -3.843505043284784e-01 -3.834706377808200e-01 -3.825878808908849e-01 -3.817022355746284e-01 + -3.808137037542000e-01 -3.799222873579469e-01 -3.790279883204120e-01 -3.781308085823365e-01 -3.772307500906573e-01 + -3.763278147985076e-01 -3.754220046652185e-01 -3.745133216563163e-01 -3.736017677435267e-01 -3.726873449047683e-01 + -3.717700551241590e-01 -3.708499003920138e-01 -3.699268827048423e-01 -3.690010040653517e-01 -3.680722664824466e-01 + -3.671406719712274e-01 -3.662062225529923e-01 -3.652689202552351e-01 -3.643287671116468e-01 -3.633857651621145e-01 + -3.624399164527238e-01 -3.614912230357539e-01 -3.605396869696840e-01 -3.595853103191879e-01 -3.586280951551368e-01 + -3.576680435545994e-01 -3.567051576008385e-01 -3.557394393833165e-01 -3.547708909976902e-01 -3.537995145458166e-01 + -3.528253121357451e-01 -3.518482858817237e-01 -3.508684379041981e-01 -3.498857703298102e-01 -3.489002852913964e-01 + -3.479119849279925e-01 -3.469208713848299e-01 -3.459269468133379e-01 -3.449302133711402e-01 -3.439306732220585e-01 + -3.429283285361119e-01 -3.419231814895155e-01 -3.409152342646808e-01 -3.399044891240922e-01 -3.388909576234711e-01 + -3.378746695696834e-01 -3.368556569372674e-01 -3.358339517494701e-01 -3.348095860782512e-01 -3.337825920442791e-01 + -3.327530018169333e-01 -3.317208476143024e-01 -3.306861617031868e-01 -3.296489763990950e-01 -3.286093240662493e-01 + -3.275672371175783e-01 -3.265227480147235e-01 -3.254758892680345e-01 -3.244266934365743e-01 -3.233751931281135e-01 + -3.223214209991326e-01 -3.212654097548248e-01 -3.202071921490934e-01 -3.191468009845483e-01 -3.180842691125131e-01 + -3.170196294330217e-01 -3.159529148948164e-01 -3.148841584953504e-01 -3.138133932807884e-01 -3.127406523460040e-01 + -3.116659688345810e-01 -3.105893759388147e-01 -3.095109068997089e-01 -3.084305950069794e-01 -3.073484735990517e-01 + -3.062645760630603e-01 -3.051789358348519e-01 -3.040915863989821e-01 -3.030025612887174e-01 -3.019118940860344e-01 + -3.008196184216195e-01 -2.997257679748703e-01 -2.986303764738948e-01 -2.975334776955088e-01 -2.964351054652418e-01 + -2.953352936573310e-01 -2.942340761947256e-01 -2.931314870490839e-01 -2.920275602407743e-01 -2.909223298388766e-01 + -2.898158299611796e-01 -2.887080947741840e-01 -2.875991584930986e-01 -2.864890553818445e-01 -2.853778197530514e-01 + -2.842654859680610e-01 -2.831520884369235e-01 -2.820376616184002e-01 -2.809222400199627e-01 -2.798058581977935e-01 + -2.786885507567827e-01 -2.775703523505348e-01 -2.764512976813607e-01 -2.753314215002843e-01 -2.742107586070383e-01 + -2.730893438500654e-01 -2.719672121265195e-01 -2.708443983822656e-01 -2.697209376118760e-01 -2.685968648586359e-01 + -2.674722152145396e-01 -2.663470238202928e-01 -2.652213258653101e-01 -2.640951565877162e-01 -2.629685512743472e-01 + -2.618415452607502e-01 -2.607141739311797e-01 -2.595864727186026e-01 -2.584584771046959e-01 -2.573302226198459e-01 + -2.562017448431508e-01 -2.550730794024177e-01 -2.539442619741631e-01 -2.528153282836169e-01 -2.516863141047163e-01 + -2.505572552601097e-01 -2.494281876211562e-01 -2.482991471079246e-01 -2.471701696891947e-01 -2.460412913824551e-01 + -2.449125482539058e-01 -2.437839764184573e-01 -2.426556120397300e-01 -2.415274913300538e-01 -2.403996505504701e-01 + -2.392721260107295e-01 -2.381449540692945e-01 -2.370181711333348e-01 -2.358918136587335e-01 -2.347659181500825e-01 + -2.336405211606846e-01 -2.325156592925516e-01 -2.313913691964065e-01 -2.302676875716830e-01 -2.291446511665247e-01 + -2.280222967777845e-01 -2.269006612510263e-01 -2.257797814805250e-01 -2.246596944092645e-01 -2.235404370289399e-01 + -2.224220463799555e-01 -2.213045595514276e-01 -2.201880136811807e-01 -2.190724459557512e-01 -2.179578936103844e-01 + -2.168443939290369e-01 -2.157319842443758e-01 -2.146207019377772e-01 -2.135105844393282e-01 -2.124016692278261e-01 + -2.112939938307783e-01 -2.101875958244034e-01 -2.090825128336287e-01 -2.079787825320927e-01 -2.068764426421439e-01 + -2.057755309348421e-01 -2.046760852299550e-01 -2.035781433959628e-01 -2.024817433500544e-01 -2.013869230581307e-01 + -2.002937205348012e-01 -1.992021738433861e-01 -1.981123210959167e-01 -1.970242004531340e-01 -1.959378501244885e-01 + -1.948533083681415e-01 -1.937706134909658e-01 -1.926898038485424e-01 -1.916109178451639e-01 -1.905339939338325e-01 + -1.894590706162612e-01 -1.883861864428732e-01 -1.873153800128010e-01 -1.862466899738891e-01 -1.851801550226899e-01 + -1.841158139044691e-01 -1.830537054132000e-01 -1.819938683915671e-01 -1.809363417309657e-01 -1.798811643715000e-01 + -1.788283753019868e-01 -1.777780135599503e-01 -1.767301182316263e-01 -1.756847284519621e-01 -1.746418834046138e-01 + -1.736016223219469e-01 -1.725639844850387e-01 -1.715290092236768e-01 -1.704967359163589e-01 -1.694672039902921e-01 + -1.684404529213940e-01 -1.674165222342935e-01 -1.663954515023288e-01 -1.653772803475477e-01 -1.643620484407104e-01 + -1.633497955012859e-01 -1.623405612974534e-01 -1.613343856461024e-01 -1.603313084128326e-01 -1.593313695119553e-01 + -1.583346089064908e-01 -1.573410666081690e-01 -1.563507826774312e-01 -1.553637972234291e-01 -1.543801504040251e-01 + -1.533998824257884e-01 -1.524230335440032e-01 -1.514496440626612e-01 -1.504797543344657e-01 -1.495134047608281e-01 + -1.485506357918719e-01 -1.475914879264314e-01 -1.466360017120494e-01 -1.456842177449798e-01 -1.447361766701873e-01 + -1.437919191813457e-01 -1.428514860208393e-01 -1.419149179797644e-01 -1.409822558979248e-01 -1.400535406638362e-01 + -1.391288132147245e-01 -1.382081145365265e-01 -1.372914856638863e-01 -1.363789676801621e-01 -1.354706017174204e-01 + -1.345664289564377e-01 -1.336664906267014e-01 -1.327708280064087e-01 -1.318794824224678e-01 -1.309924952504972e-01 + -1.301099079148242e-01 -1.292317618884871e-01 -1.283580986932359e-01 -1.274889598995289e-01 -1.266243871265353e-01 + -1.257644220421348e-01 -1.249091063629176e-01 -1.240584818541837e-01 -1.232125903299432e-01 -1.223714736529164e-01 + -1.215351737345345e-01 -1.207037325349389e-01 -1.198771920629804e-01 -1.190555943762212e-01 -1.182389815809327e-01 + -1.174273958320972e-01 -1.166208793334081e-01 -1.158194743372662e-01 -1.150232231447855e-01 -1.142321681057893e-01 + -1.134463516188113e-01 -1.126658161310944e-01 -1.118906041385928e-01 -1.111207580592128e-01 -1.103563030399700e-01 + -1.095972294856779e-01 -1.088435236237969e-01 -1.080951716557306e-01 -1.073521597568238e-01 -1.066144740763626e-01 + -1.058821007375770e-01 -1.051550258376368e-01 -1.044332354476568e-01 -1.037167156126906e-01 -1.030054523517362e-01 + -1.022994316577330e-01 -1.015986394975621e-01 -1.009030618120472e-01 -1.002126845159536e-01 -9.952749349798928e-02 + -9.884747462080391e-02 -9.817261372098827e-02 -9.750289660907772e-02 -9.683830906954688e-02 -9.617883686081484e-02 + -9.552446571524055e-02 -9.487518133912685e-02 -9.423096941271773e-02 -9.359181559019859e-02 -9.295770549969964e-02 + -9.232862474328989e-02 -9.170455889698172e-02 -9.108549351073042e-02 -9.047141410843230e-02 -8.986230618792572e-02 + -8.925815522099179e-02 -8.865894665335301e-02 -8.806466590467464e-02 -8.747529836856352e-02 -8.689082941256832e-02 + -8.631124437818068e-02 -8.573652858083373e-02 -8.516666730990187e-02 -8.460164582870369e-02 -8.404144937449774e-02 + -8.348606315848589e-02 -8.293547236581121e-02 -8.238966215555951e-02 -8.184861766075854e-02 -8.131232398837807e-02 + -8.078076621932968e-02 -8.025392940846719e-02 -7.973179858458698e-02 -7.921435875042727e-02 -7.870159488266719e-02 + -7.819349193192929e-02 -7.769003482277825e-02 -7.719120845372023e-02 -7.669699769720294e-02 -7.620738739961790e-02 + -7.572236238129665e-02 -7.524190743651436e-02 -7.476600733348754e-02 -7.429464681437474e-02 -7.382781059527700e-02 + -7.336548336623708e-02 -7.290764979124002e-02 -7.245429450821239e-02 -7.200540212902415e-02 -7.156095723948547e-02 + -7.112094439935036e-02 -7.068534814231391e-02 -7.025415297601266e-02 -6.982734338202747e-02 -6.940490381587879e-02 + -6.898681870703055e-02 -6.857307245888851e-02 -6.816364944880030e-02 -6.775853402805561e-02 -6.735771052188588e-02 + -6.696116322946633e-02 -6.656887642391168e-02 -6.618083435228060e-02 -6.579702123557324e-02 -6.541742126873129e-02 + -6.504201862063971e-02 -6.467079743412460e-02 -6.430374182595408e-02 -6.394083588683934e-02 -6.358206368143199e-02 + -6.322740924832777e-02 -6.287685660006267e-02 -6.253038972311581e-02 -6.218799257790769e-02 -6.184964909880128e-02 + -6.151534319410173e-02 -6.118505874605594e-02 -6.085877961085313e-02 -6.053648961862503e-02 -6.021817257344446e-02 + -5.990381225332641e-02 -5.959339241022858e-02 -5.928689677005062e-02 -5.898430903263375e-02 -5.868561287176224e-02 + -5.839079193516150e-02 -5.809982984449834e-02 -5.781271019538430e-02 -5.752941655737000e-02 -5.724993247395017e-02 + -5.697424146256005e-02 -5.670232701457875e-02 -5.643417259532568e-02 -5.616976164406363e-02 -5.590907757399646e-02 + -5.565210377227119e-02 -5.539882359997556e-02 -5.514922039214058e-02 -5.490327745773887e-02 -5.466097807968524e-02 + -5.442230551483596e-02 -5.418724299399008e-02 -5.395577372188879e-02 -5.372788087721490e-02 -5.350354761259298e-02 + -5.328275705459106e-02 -5.306549230371770e-02 -5.285173643442421e-02 -5.264147249510410e-02 -5.243468350809263e-02 + -5.223135246966721e-02 -5.203146235004738e-02 -5.183499609339515e-02 -5.164193661781392e-02 -5.145226681534910e-02 + -5.126596955198919e-02 -5.108302766766345e-02 -5.090342397624392e-02 -5.072714126554530e-02 -5.055416229732317e-02 + -5.038446980727572e-02 -5.021804650504294e-02 -5.005487507420807e-02 -4.989493817229461e-02 -4.973821843076898e-02 + -4.958469845504058e-02 -4.943436082445898e-02 -4.928718809231755e-02 -4.914316278585072e-02 -4.900226740623531e-02 + -4.886448442859043e-02 -4.872979630197701e-02 -4.859818544939779e-02 -4.846963426779843e-02 -4.834412512806511e-02 + -4.822164037502821e-02 -4.810216232745815e-02 -4.798567327806872e-02 -4.787215549351514e-02 -4.776159121439538e-02 + -4.765396265524856e-02 -4.754925200455663e-02 -4.744744142474315e-02 -4.734851305217417e-02 -4.725244899715729e-02 + -4.715923134394241e-02 -4.706884215072226e-02 -4.698126344962978e-02 -4.689647724674189e-02 -4.681446552207644e-02 + -4.673521022959411e-02 -4.665869329719723e-02 -4.658489662672994e-02 -4.651380209397887e-02 -4.644539154867277e-02 + -4.637964681448228e-02 -4.631654968901974e-02 -4.625608194384049e-02 -4.619822532444104e-02 -4.614296155026026e-02 + -4.609027231467942e-02 -4.604013928502133e-02 -4.599254410255174e-02 -4.594746838247692e-02 -4.590489371394704e-02 + -4.586480166005283e-02 -4.582717375782803e-02 -4.579199151824809e-02 -4.575923642623080e-02 -4.572888994063520e-02 + -4.570093349426384e-02 -4.567534849385974e-02 -4.565211632010924e-02 -4.563121832763993e-02 -4.561263584502235e-02 + -4.559635017476785e-02 -4.558234259333096e-02 -4.557059435110807e-02 -4.556108667243703e-02 -4.555380075559848e-02 + -4.554871777281451e-02 -4.554581887025032e-02 -4.554508516801196e-02 -4.554649776014763e-02 -4.555003771464908e-02 + -4.555568607344834e-02 -4.556342385242043e-02 -4.557323204138237e-02 -4.558509160409307e-02 -4.559898347825361e-02 + -4.561488857550701e-02 -4.563278778143871e-02 -4.565266195557557e-02 -4.567449193138737e-02 -4.569825851628551e-02 + -4.572394249162302e-02 -4.575152461269611e-02 -4.578098560874158e-02 -4.581230618293993e-02 -4.584546701241252e-02 + -4.588044874822327e-02 -4.591723201537812e-02 -4.595579741282468e-02 -4.599612553126343e-02 -4.603819958888227e-02 + -4.608200822855005e-02 -4.612754074601674e-02 -4.617478642183866e-02 -4.622373452137555e-02 -4.627437429479427e-02 + -4.632669497706596e-02 -4.638068578796747e-02 -4.643633593207989e-02 -4.649363459879098e-02 -4.655257096229238e-02 + -4.661313418158206e-02 -4.667531340046226e-02 -4.673909774754132e-02 -4.680447633623230e-02 -4.687143826475323e-02 + -4.693997261612849e-02 -4.701006845818637e-02 -4.708171484356120e-02 -4.715490080969203e-02 -4.722961537882377e-02 + -4.730584755800606e-02 -4.738358633909383e-02 -4.746282069874740e-02 -4.754353959843263e-02 -4.762573198441958e-02 + -4.770938678778461e-02 -4.779449292440897e-02 -4.788103929497883e-02 -4.796901478498600e-02 -4.805840826472685e-02 + -4.814920858930432e-02 -4.824140459862558e-02 -4.833498511740262e-02 -4.842993895515365e-02 -4.852625490620165e-02 + -4.862392174967479e-02 -4.872292824950700e-02 -4.882326315443630e-02 -4.892491519800726e-02 -4.902787309856885e-02 + -4.913212555927533e-02 -4.923766126808662e-02 -4.934446889776740e-02 -4.945253710588811e-02 -4.956185453482363e-02 + -4.967240981175504e-02 -4.978419154866780e-02 -4.989718834235286e-02 -5.001138877440701e-02 -5.012678141123111e-02 + -5.024335480403259e-02 -5.036109748882279e-02 -5.047999798641945e-02 -5.060004480244453e-02 -5.072122642732593e-02 + -5.084353133629661e-02 -5.096694798939461e-02 -5.109146483146323e-02 -5.121707029215106e-02 -5.134375278591204e-02 + -5.147150071200497e-02 -5.160030245449465e-02 -5.173014638225041e-02 -5.186102084894674e-02 -5.199291419306361e-02 + -5.212581473788663e-02 -5.225971079150563e-02 -5.239459064681706e-02 -5.253044258152125e-02 -5.266725485812461e-02 + -5.280501572393839e-02 -5.294371341107913e-02 -5.308333613646873e-02 -5.322387210183441e-02 -5.336530949370843e-02 + -5.350763648342804e-02 -5.365084122713625e-02 -5.379491186578100e-02 -5.393983652511563e-02 -5.408560331569828e-02 + -5.423220033289279e-02 -5.437961565686808e-02 -5.452783735259868e-02 -5.467685346986328e-02 -5.482665204324703e-02 + -5.497722109213951e-02 -5.512854862073599e-02 -5.528062261803655e-02 -5.543343105784692e-02 -5.558696189877778e-02 + -5.574120308424490e-02 -5.589614254246995e-02 -5.605176818647938e-02 -5.620806791410445e-02 -5.636502960798254e-02 + -5.652264113555545e-02 -5.668089034907062e-02 -5.683976508558103e-02 -5.699925316694435e-02 -5.715934239982345e-02 + -5.732002057568688e-02 -5.748127547080814e-02 -5.764309484626595e-02 -5.780546644794443e-02 -5.796837800653255e-02 + -5.813181723752531e-02 -5.829577184122200e-02 -5.846022950272761e-02 -5.862517789195237e-02 -5.879060466361177e-02 + -5.895649745722636e-02 -5.912284389712197e-02 -5.928963159242978e-02 -5.945684813708586e-02 -5.962448110983204e-02 + -5.979251807421530e-02 -5.996094657858712e-02 -6.012975415610502e-02 -6.029892832473165e-02 -6.046845658723475e-02 + -6.063832643118684e-02 -6.080852532896638e-02 -6.097904073775703e-02 -6.114986009954686e-02 -6.132097084113042e-02 + -6.149236037410596e-02 -6.166401609487874e-02 -6.183592538465794e-02 -6.200807560945800e-02 -6.218045412009953e-02 + -6.235304825220750e-02 -6.252584532621236e-02 -6.269883264734992e-02 -6.287199750566128e-02 -6.304532717599257e-02 + -6.321880891799513e-02 -6.339242997612540e-02 -6.356617757964569e-02 -6.374003894262310e-02 -6.391400126392957e-02 + -6.408805172724284e-02 -6.426217750104599e-02 -6.443636573862684e-02 -6.461060357807871e-02 -6.478487814230008e-02 + -6.495917653899470e-02 -6.513348586067155e-02 -6.530779318464484e-02 -6.548208557303412e-02 -6.565635007276348e-02 + -6.583057371556379e-02 -6.600474351796955e-02 -6.617884648132101e-02 -6.635286959176406e-02 -6.652679982024941e-02 + -6.670062412253321e-02 -6.687432943917676e-02 -6.704790269554646e-02 -6.722133080181408e-02 -6.739460065295644e-02 + -6.756769912875632e-02 -6.774061309380047e-02 -6.791332939748188e-02 -6.808583487399848e-02 -6.825811634235358e-02 + -6.843016060635501e-02 -6.860195445461703e-02 -6.877348466055777e-02 -6.894473798240189e-02 -6.911570116317851e-02 + -6.928636093072213e-02 -6.945670399767230e-02 -6.962671706147434e-02 -6.979638680437854e-02 -6.996569989343975e-02 + -7.013464298051925e-02 -7.030320270228291e-02 -7.047136568020168e-02 -7.063911852055195e-02 -7.080644781441524e-02 + -7.097334013767881e-02 -7.113978205103440e-02 -7.130576009997919e-02 -7.147126081481613e-02 -7.163627071065262e-02 + -7.180077628740186e-02 -7.196476402978207e-02 -7.212822040731649e-02 -7.229113187433424e-02 -7.245348486996882e-02 + -7.261526581815979e-02 -7.277646112765103e-02 -7.293705719199277e-02 -7.309704038953937e-02 -7.325639708345130e-02 + -7.341511362169335e-02 -7.357317633703662e-02 -7.373057154705676e-02 -7.388728555413464e-02 -7.404330464545623e-02 + -7.419861509301372e-02 -7.435320315360332e-02 -7.450705506882686e-02 -7.466015706509196e-02 -7.481249535361083e-02 + -7.496405613040087e-02 -7.511482557628525e-02 -7.526478985689185e-02 -7.541393512265426e-02 -7.556224750881071e-02 + -7.570971313540517e-02 -7.585631810728671e-02 -7.600204851410963e-02 -7.614689043033303e-02 -7.629082991522224e-02 + -7.643385301284661e-02 -7.657594575208172e-02 -7.671709414660781e-02 -7.685728422312665e-02 -7.699650659350404e-02 + -7.713476151839789e-02 -7.727205047768211e-02 -7.740837495398235e-02 -7.754373643267592e-02 -7.767813640189289e-02 + -7.781157635251477e-02 -7.794405777817540e-02 -7.807558217526045e-02 -7.820615104290810e-02 -7.833576588300777e-02 + -7.846442820020204e-02 -7.859213950188429e-02 -7.871890129820040e-02 -7.884471510204899e-02 -7.896958242907975e-02 + -7.909350479769470e-02 -7.921648372904805e-02 -7.933852074704602e-02 -7.945961737834681e-02 -7.957977515236062e-02 + -7.969899560124950e-02 -7.981728025992833e-02 -7.993463066606307e-02 -8.005104836007192e-02 -8.016653488512572e-02 + -8.028109178714649e-02 -8.039472061480910e-02 -8.050742291953990e-02 -8.061920025551730e-02 -8.073005417967212e-02 + -8.083998625168703e-02 -8.094899803399656e-02 -8.105709109178735e-02 -8.116426699299814e-02 -8.127052730831993e-02 + -8.137587361119540e-02 -8.148030747781937e-02 -8.158383048713848e-02 -8.168644422085204e-02 -8.178815026341084e-02 + -8.188895020201793e-02 -8.198884562662824e-02 -8.208783812994880e-02 -8.218592930743872e-02 -8.228312075730933e-02 + -8.237941408052364e-02 -8.247481088079674e-02 -8.256931276459598e-02 -8.266292134114070e-02 -8.275563822240199e-02 + -8.284746502310350e-02 -8.293840336072032e-02 -8.302845485548017e-02 -8.311762113036217e-02 -8.320590381109803e-02 + -8.329330452617120e-02 -8.337982490681714e-02 -8.346546658702368e-02 -8.355023120353025e-02 -8.363412039582881e-02 + -8.371713580616265e-02 -8.379927907952758e-02 -8.388055186367158e-02 -8.396095580909445e-02 -8.404049256904787e-02 + -8.411916379953582e-02 -8.419697115931422e-02 -8.427391630989078e-02 -8.435000091552609e-02 -8.442522664323152e-02 + -8.449959516277131e-02 -8.457310814666183e-02 -8.464576727017102e-02 -8.471757421131908e-02 -8.478853065087791e-02 + -8.485863827237218e-02 -8.492789876207806e-02 -8.499631380902384e-02 -8.506388510498973e-02 -8.513061434450822e-02 + -8.519650322486376e-02 -8.526155344609279e-02 -8.532576671098366e-02 -8.538914472507693e-02 -8.545168919666535e-02 + -8.551340183679337e-02 -8.557428435925767e-02 -8.563433848060682e-02 -8.569356592014157e-02 -8.575196839991472e-02 + -8.580954764473099e-02 -8.586630538214737e-02 -8.592224334247232e-02 -8.597736325876712e-02 -8.603166686684437e-02 + -8.608515590526915e-02 -8.613783211535850e-02 -8.618969724118136e-02 -8.624075302955898e-02 -8.629100123006424e-02 + -8.634044359502220e-02 -8.638908187951025e-02 -8.643691784135762e-02 -8.648395324114533e-02 -8.653018984220677e-02 + -8.657562941062728e-02 -8.662027371524418e-02 -8.666412452764680e-02 -8.670718362217662e-02 -8.674945277592711e-02 + -8.679093376874379e-02 -8.683162838322392e-02 -8.687153840471740e-02 -8.691066562132557e-02 -8.694901182390223e-02 + -8.698657880605309e-02 -8.702336836413561e-02 -8.705938229725983e-02 -8.709462240728726e-02 -8.712909049883176e-02 + -8.716278837925941e-02 -8.719571785868774e-02 -8.722788074998704e-02 -8.725927886877895e-02 -8.728991403343762e-02 + -8.731978806508907e-02 -8.734890278761125e-02 -8.737726002763439e-02 -8.740486161454065e-02 -8.743170938046393e-02 + -8.745780516029074e-02 -8.748315079165922e-02 -8.750774811495955e-02 -8.753159897333428e-02 -8.755470521267746e-02 + -8.757706868163553e-02 -8.759869123160711e-02 -8.761957471674260e-02 -8.763972099394432e-02 -8.765913192286698e-02 + -8.767780936591689e-02 -8.769575518825297e-02 -8.771297125778563e-02 -8.772945944517767e-02 -8.774522162384372e-02 + -8.776025966995045e-02 -8.777457546241675e-02 -8.778817088291344e-02 -8.780104781586337e-02 -8.781320814844132e-02 + -8.782465377057433e-02 -8.783538657494126e-02 -8.784540845697324e-02 -8.785472131485304e-02 -8.786332704951594e-02 + -8.787122756464896e-02 -8.787842476669123e-02 -8.788492056483410e-02 -8.789071687102047e-02 -8.789581559994569e-02 + -8.790021866905713e-02 -8.790392799855402e-02 -8.790694551138790e-02 -8.790927313326173e-02 -8.791091279263129e-02 + -8.791186642070403e-02 -8.791213595143924e-02 -8.791172332154859e-02 -8.791063047049545e-02 -8.790885934049569e-02 + -8.790641187651689e-02 -8.790329002627867e-02 -8.789949574025258e-02 -8.789503097166264e-02 -8.788989767648445e-02 + -8.788409781344578e-02 -8.787763334402661e-02 -8.787050623245890e-02 -8.786271844572627e-02 -8.785427195356502e-02 + -8.784516872846285e-02 -8.783541074565988e-02 -8.782499998314838e-02 -8.781393842167212e-02 -8.780222804472751e-02 + -8.778987083856249e-02 -8.777686879217751e-02 -8.776322389732452e-02 -8.774893814850804e-02 -8.773401354298431e-02 + -8.771845208076164e-02 -8.770225576460042e-02 -8.768542660001302e-02 -8.766796659526424e-02 -8.764987776137005e-02 + -8.763116211209938e-02 -8.761182166397265e-02 -8.759185843626241e-02 -8.757127445099329e-02 -8.755007173294212e-02 + -8.752825230963746e-02 -8.750581821136007e-02 -8.748277147114268e-02 -8.745911412477023e-02 -8.743484821077964e-02 + -8.740997577045952e-02 -8.738449884785099e-02 -8.735841948974700e-02 -8.733173974569233e-02 -8.730446166798436e-02 + -8.727658731167202e-02 -8.724811873455625e-02 -8.721905799719029e-02 -8.718940716287940e-02 -8.715916829768057e-02 + -8.712834347040335e-02 -8.709693475260882e-02 -8.706494421861027e-02 -8.703237394527798e-02 -8.699922597728088e-02 + -8.696550228694298e-02 -8.693120483950313e-02 -8.689633560282184e-02 -8.686089654738119e-02 -8.682488964628460e-02 + -8.678831687525709e-02 -8.675118021264554e-02 -8.671348163941769e-02 -8.667522313916365e-02 -8.663640669809433e-02 + -8.659703430504258e-02 -8.655710795146269e-02 -8.651662963143043e-02 -8.647560134164323e-02 -8.643402508141988e-02 + -8.639190285270071e-02 -8.634923666004790e-02 -8.630602851064474e-02 -8.626228041429627e-02 -8.621799438342929e-02 + -8.617317243309158e-02 -8.612781658095285e-02 -8.608192884730434e-02 -8.603551125505852e-02 -8.598856582974977e-02 + -8.594109459953399e-02 -8.589309959518819e-02 -8.584458285011133e-02 -8.579554640032372e-02 -8.574599228446739e-02 + -8.569592254380567e-02 -8.564533922222330e-02 -8.559424436622716e-02 -8.554264002494505e-02 -8.549052825012649e-02 + -8.543791109614272e-02 -8.538479061998627e-02 -8.533116888127143e-02 -8.527704794223386e-02 -8.522242986773053e-02 + -8.516731672524055e-02 -8.511171058486407e-02 -8.505561351932295e-02 -8.499902760396066e-02 -8.494195491674167e-02 + -8.488439753825300e-02 -8.482635755170224e-02 -8.476783704291904e-02 -8.470883810035439e-02 -8.464936281508087e-02 + -8.458941328079266e-02 -8.452899159380531e-02 -8.446809985305584e-02 -8.440674016010333e-02 -8.434491461912776e-02 + -8.428262533693086e-02 -8.421987442293621e-02 -8.415666398918835e-02 -8.409299615035390e-02 -8.402887302372071e-02 + -8.396429672919803e-02 -8.389926938931712e-02 -8.383379312923028e-02 -8.376787007671167e-02 -8.370150236215682e-02 + -8.363469211858295e-02 -8.356744148162856e-02 -8.349975258955392e-02 -8.343162758324070e-02 -8.336306860619228e-02 + -8.329407780453330e-02 -8.322465732701009e-02 -8.315480932499064e-02 -8.308453595246411e-02 -8.301383936604165e-02 + -8.294272172495556e-02 -8.287118519105992e-02 -8.279923192883029e-02 -8.272686410536352e-02 -8.265408389037840e-02 + -8.258089345621501e-02 -8.250729497783500e-02 -8.243329063282155e-02 -8.235888260137945e-02 -8.228407306633484e-02 + -8.220886421313565e-02 -8.213325822985104e-02 -8.205725730717205e-02 -8.198086363841110e-02 -8.190407941950181e-02 + -8.182690684900011e-02 -8.174934812808263e-02 -8.167140546054813e-02 -8.159308105281646e-02 -8.151437711392934e-02 + -8.143529585555001e-02 -8.135583949196296e-02 -8.127601024007444e-02 -8.119581031941231e-02 -8.111524195212577e-02 + -8.103430736298553e-02 -8.095300877938404e-02 -8.087134843133519e-02 -8.078932855147432e-02 -8.070695137505837e-02 + -8.062421913996586e-02 -8.054113408669680e-02 -8.045769845837270e-02 -8.037391450073657e-02 -8.028978446215321e-02 + -8.020531059360861e-02 -8.012049514871061e-02 -8.003534038368824e-02 -7.994984855739226e-02 -7.986402193129513e-02 + -7.977786276949053e-02 -7.969137333869381e-02 -7.960455590824192e-02 -7.951741275009318e-02 -7.942994613882769e-02 + -7.934215835164679e-02 -7.925405166837354e-02 -7.916562837145256e-02 -7.907689074594990e-02 -7.898784107955314e-02 + -7.889848166257149e-02 -7.880881478793558e-02 -7.871884275119778e-02 -7.862856785053178e-02 -7.853799238673270e-02 + -7.844711866321756e-02 -7.835594898602459e-02 -7.826448566381393e-02 -7.817273100786679e-02 -7.808068733208609e-02 + -7.798835695299659e-02 -7.789574218974403e-02 -7.780284536409605e-02 -7.770966880044193e-02 -7.761621482579208e-02 + -7.752248576977877e-02 -7.742848396465576e-02 -7.733421174529810e-02 -7.723967144920280e-02 -7.714486541648802e-02 + -7.704979598989352e-02 -7.695446551478080e-02 -7.685887633913265e-02 -7.676303081355373e-02 -7.666693129126989e-02 + -7.657058012812851e-02 -7.647397968259878e-02 -7.637713231577122e-02 -7.628004039135795e-02 -7.618270627569269e-02 + -7.608513233773045e-02 -7.598732094904816e-02 -7.588927448384383e-02 -7.579099531893732e-02 -7.569248583377011e-02 + -7.559374841040481e-02 -7.549478543352595e-02 -7.539559929043944e-02 -7.529619237107257e-02 -7.519656706797456e-02 + -7.509672577631583e-02 -7.499667089388827e-02 -7.489640482110571e-02 -7.479592996100309e-02 -7.469524871923723e-02 + -7.459436350408617e-02 -7.449327672644970e-02 -7.439199079984912e-02 -7.429050814042711e-02 -7.418883116694795e-02 + -7.408696230079777e-02 -7.398490396598369e-02 -7.388265858913480e-02 -7.378022859950155e-02 -7.367761642895564e-02 + -7.357482451199110e-02 -7.347185528572267e-02 -7.336871118988687e-02 -7.326539466684208e-02 -7.316190816156776e-02 + -7.305825412166529e-02 -7.295443499735729e-02 -7.285045324148795e-02 -7.274631130952323e-02 -7.264201165955037e-02 + -7.253755675227827e-02 -7.243294905103739e-02 -7.232819102177949e-02 -7.222328513307825e-02 -7.211823385612862e-02 + -7.201303966474694e-02 -7.190770503537158e-02 -7.180223244706187e-02 -7.169662438149921e-02 -7.159088332298612e-02 + -7.148501175844676e-02 -7.137901217742702e-02 -7.127288707209412e-02 -7.116663893723675e-02 -7.106027027026546e-02 + -7.095378357121199e-02 -7.084718134272981e-02 -7.074046609009386e-02 -7.063364032120049e-02 -7.052670654656798e-02 + -7.041966727933570e-02 -7.031252503526468e-02 -7.020528233273769e-02 -7.009794169275867e-02 -6.999050563895366e-02 + -6.988297669756957e-02 -6.977535739747522e-02 -6.966765027016092e-02 -6.955985784650019e-02 -6.945198202039787e-02 + -6.934402328282341e-02 -6.923598193856043e-02 -6.912785829271997e-02 -6.901965265074038e-02 -6.891136531838719e-02 + -6.880299660175361e-02 -6.869454680725975e-02 -6.858601624165350e-02 -6.847740521200983e-02 -6.836871402573100e-02 + -6.825994299054693e-02 -6.815109241451449e-02 -6.804216260601807e-02 -6.793315387376948e-02 -6.782406652680775e-02 + -6.771490087449940e-02 -6.760565722653805e-02 -6.749633589294474e-02 -6.738693718406810e-02 -6.727746141058376e-02 + -6.716790888349479e-02 -6.705827991413178e-02 -6.694857481415233e-02 -6.683879389554183e-02 -6.672893747061263e-02 + -6.661900585200442e-02 -6.650899935268449e-02 -6.639891828594741e-02 -6.628876296541475e-02 -6.617853370503593e-02 + -6.606823081908735e-02 -6.595785462217293e-02 -6.584740542922383e-02 -6.573688355549850e-02 -6.562628931658299e-02 + -6.551562302839033e-02 -6.540488500716121e-02 -6.529407556946355e-02 -6.518319503219243e-02 -6.507224371257057e-02 + -6.496122192814785e-02 -6.485012999680138e-02 -6.473896823673603e-02 -6.462773696648344e-02 -6.451643650490320e-02 + -6.440506717118179e-02 -6.429362928483297e-02 -6.418212316569837e-02 -6.407054913394643e-02 -6.395890751007313e-02 + -6.384719861490194e-02 -6.373542276958327e-02 -6.362358029559541e-02 -6.351167151474350e-02 -6.339969674916027e-02 + -6.328765632130577e-02 -6.317555055396738e-02 -6.306337977025966e-02 -6.295114429362485e-02 -6.283884444783211e-02 + -6.272648055697842e-02 -6.261405294548769e-02 -6.250156193811127e-02 -6.238900785992807e-02 -6.227639103634401e-02 + -6.216371179309262e-02 -6.205097045623469e-02 -6.193816735215815e-02 -6.182530280757861e-02 -6.171237714953885e-02 + -6.159939070540884e-02 -6.148634380288628e-02 -6.137323676999570e-02 -6.126006993508951e-02 -6.114684362684713e-02 + -6.103355817427517e-02 -6.092021390670813e-02 -6.080681115380732e-02 -6.069335024556154e-02 -6.057983151228719e-02 + -6.046625528462752e-02 -6.035262189355362e-02 -6.023893167036368e-02 -6.012518494668311e-02 -6.001138205446489e-02 + -5.989752332598935e-02 -5.978360909386377e-02 -5.966963969102337e-02 -5.955561545073018e-02 -5.944153670657401e-02 + -5.932740379247161e-02 -5.921321704266727e-02 -5.909897679173264e-02 -5.898468337456673e-02 -5.887033712639567e-02 + -5.875593838277331e-02 -5.864148747958035e-02 -5.852698475302542e-02 -5.841243053964397e-02 -5.829782517629895e-02 + -5.818316900018088e-02 -5.806846234880725e-02 -5.795370556002318e-02 -5.783889897200110e-02 -5.772404292324044e-02 + -5.760913775256857e-02 -5.749418379913960e-02 -5.737918140243532e-02 -5.726413090226490e-02 -5.714903263876454e-02 + -5.703388695239814e-02 -5.691869418395674e-02 -5.680345467455867e-02 -5.668816876564980e-02 -5.657283679900319e-02 + -5.645745911671918e-02 -5.634203606122576e-02 -5.622656797527780e-02 -5.611105520195799e-02 -5.599549808467602e-02 + -5.587989696716892e-02 -5.576425219350140e-02 -5.564856410806515e-02 -5.553283305557923e-02 -5.541705938109036e-02 + -5.530124342997220e-02 -5.518538554792607e-02 -5.506948608098045e-02 -5.495354537549102e-02 -5.483756377814131e-02 + -5.472154163594165e-02 -5.460547929622987e-02 -5.448937710667139e-02 -5.437323541525856e-02 -5.425705457031151e-02 + -5.414083492047734e-02 -5.402457681473059e-02 -5.390828060237331e-02 -5.379194663303465e-02 -5.367557525667133e-02 + -5.355916682356726e-02 -5.344272168433360e-02 -5.332624018990918e-02 -5.320972269155985e-02 -5.309316954087884e-02 + -5.297658108978699e-02 -5.285995769053210e-02 -5.274329969568963e-02 -5.262660745816224e-02 -5.250988133117977e-02 + -5.239312166829981e-02 -5.227632882340692e-02 -5.215950315071305e-02 -5.204264500475772e-02 -5.192575474040752e-02 + -5.180883271285662e-02 -5.169187927762634e-02 -5.157489479056533e-02 -5.145787960784985e-02 -5.134083408598318e-02 + -5.122375858179602e-02 -5.110665345244662e-02 -5.098951905542025e-02 -5.087235574852982e-02 -5.075516388991539e-02 + -5.063794383804430e-02 -5.052069595171155e-02 -5.040342059003908e-02 -5.028611811247651e-02 -5.016878887880065e-02 + -5.005143324911544e-02 -4.993405158385265e-02 -4.981664424377098e-02 -4.969921158995654e-02 -4.958175398382301e-02 + -4.946427178711104e-02 -4.934676536188908e-02 -4.922923507055249e-02 -4.911168127582409e-02 -4.899410434075429e-02 + -4.887650462872051e-02 -4.875888250342764e-02 -4.864123832890802e-02 -4.852357246952108e-02 -4.840588528995391e-02 + -4.828817715522068e-02 -4.817044843066291e-02 -4.805269948194966e-02 -4.793493067507718e-02 -4.781714237636900e-02 + -4.769933495247625e-02 -4.758150877037703e-02 -4.746366419737715e-02 -4.734580160110952e-02 -4.722792134953439e-02 + -4.711002381093956e-02 -4.699210935393997e-02 -4.687417834747784e-02 -4.675623116082310e-02 -4.663826816357249e-02 + -4.652028972565064e-02 -4.640229621730910e-02 -4.628428800912687e-02 -4.616626547201049e-02 -4.604822897719350e-02 + -4.593017889623716e-02 -4.581211560102976e-02 -4.569403946378698e-02 -4.557595085705204e-02 -4.545785015369530e-02 + -4.533973772691447e-02 -4.522161395023479e-02 -4.510347919750854e-02 -4.498533384291566e-02 -4.486717826096327e-02 + -4.474901282648561e-02 -4.463083791464479e-02 -4.451265390092980e-02 -4.439446116156419e-02 -4.427626016218135e-02 + -4.415805156899697e-02 -4.403983607613995e-02 -4.392161437837425e-02 -4.380338717109913e-02 -4.368515515034960e-02 + -4.356691901279580e-02 -4.344867945574318e-02 -4.333043717713282e-02 -4.321219287554092e-02 -4.309394725017942e-02 + -4.297570100089526e-02 -4.285745482817090e-02 -4.273920943312434e-02 -4.262096551750877e-02 -4.250272378371273e-02 + -4.238448493476039e-02 -4.226624967431102e-02 -4.214801870665959e-02 -4.202979273673614e-02 -4.191157247010616e-02 + -4.179335861297077e-02 -4.167515187216610e-02 -4.155695295516404e-02 -4.143876257007161e-02 -4.132058142563113e-02 + -4.120241023122069e-02 -4.108424969685343e-02 -4.096610053317787e-02 -4.084796345147822e-02 -4.072983916367363e-02 + -4.061172838231913e-02 -4.049363182060472e-02 -4.037555019235591e-02 -4.025748421203375e-02 -4.013943459473451e-02 + -4.002140205618971e-02 -3.990338731276668e-02 -3.978539108146766e-02 -3.966741407993069e-02 -3.954945702642890e-02 + -3.943152063987078e-02 -3.931360563980052e-02 -3.919571274639742e-02 -3.907784268047614e-02 -3.895999616348697e-02 + -3.884217391751530e-02 -3.872437666528219e-02 -3.860660513014387e-02 -3.848886003609187e-02 -3.837114210775351e-02 + -3.825345207039098e-02 -3.813579064990232e-02 -3.801815857282063e-02 -3.790055656631443e-02 -3.778298535818789e-02 + -3.766544567688026e-02 -3.754793825146618e-02 -3.743046381165597e-02 -3.731302308779497e-02 -3.719561681086424e-02 + -3.707824571247997e-02 -3.696091052489375e-02 -3.684361198099276e-02 -3.672635081429939e-02 -3.660912775897134e-02 + -3.649194354980197e-02 -3.637479892221968e-02 -3.625769461228862e-02 -3.614063135670806e-02 -3.602360989281263e-02 + -3.590663095857260e-02 -3.578969529259339e-02 -3.567280363411582e-02 -3.555595672301627e-02 -3.543915529980625e-02 + -3.532240010563296e-02 -3.520569188227871e-02 -3.508903137216125e-02 -3.497241931833388e-02 -3.485585646448511e-02 + -3.473934355493880e-02 -3.462288133465444e-02 -3.450647054922656e-02 -3.439011194488546e-02 -3.427380626849654e-02 + -3.415755426756054e-02 -3.404135669021390e-02 -3.392521428522807e-02 -3.380912780201027e-02 -3.369309799060278e-02 + -3.357712560168329e-02 -3.346121138656516e-02 -3.334535609719685e-02 -3.322956048616219e-02 -3.311382530668069e-02 + -3.299815131260684e-02 -3.288253925843095e-02 -3.276698989927835e-02 -3.265150399090982e-02 -3.253608228972178e-02 + -3.242072555274576e-02 -3.230543453764866e-02 -3.219021000273301e-02 -3.207505270693645e-02 -3.195996340983229e-02 + -3.184494287162900e-02 -3.172999185317035e-02 -3.161511111593586e-02 -3.150030142204013e-02 -3.138556353423311e-02 + -3.127089821590046e-02 -3.115630623106283e-02 -3.104178834437658e-02 -3.092734532113327e-02 -3.081297792725978e-02 + -3.069868692931866e-02 -3.058447309450758e-02 -3.047033719065956e-02 -3.035627998624332e-02 -3.024230225036257e-02 + -3.012840475275679e-02 -3.001458826380056e-02 -2.990085355450384e-02 -2.978720139651223e-02 -2.967363256210639e-02 + -2.956014782420270e-02 -2.944674795635266e-02 -2.933343373274314e-02 -2.922020592819668e-02 -2.910706531817093e-02 + -2.899401267875893e-02 -2.888104878668935e-02 -2.876817441932589e-02 -2.865539035466803e-02 -2.854269737135031e-02 + -2.843009624864269e-02 -2.831758776645077e-02 -2.820517270531528e-02 -2.809285184641228e-02 -2.798062597155357e-02 + -2.786849586318588e-02 -2.775646230439178e-02 -2.764452607888885e-02 -2.753268797103016e-02 -2.742094876580434e-02 + -2.730930924883518e-02 -2.719777020638186e-02 -2.708633242533919e-02 -2.697499669323703e-02 -2.686376379824094e-02 + -2.675263452915165e-02 -2.664160967540522e-02 -2.653069002707341e-02 -2.641987637486295e-02 -2.630916951011639e-02 + -2.619857022481131e-02 -2.608807931156073e-02 -2.597769756361329e-02 -2.586742577485278e-02 -2.575726473979834e-02 + -2.564721525360478e-02 -2.553727811206192e-02 -2.542745411159534e-02 -2.531774404926573e-02 -2.520814872276915e-02 + -2.509866893043734e-02 -2.498930547123711e-02 -2.488005914477072e-02 -2.477093075127600e-02 -2.466192109162587e-02 + -2.455303096732897e-02 -2.444426118052904e-02 -2.433561253400525e-02 -2.422708583117236e-02 -2.411868187608028e-02 + -2.401040147341432e-02 -2.390224542849538e-02 -2.379421454727947e-02 -2.368630963635826e-02 -2.357853150295861e-02 + -2.347088095494270e-02 -2.336335880080839e-02 -2.325596584968866e-02 -2.314870291135187e-02 -2.304157079620200e-02 + -2.293457031527812e-02 -2.282770228025499e-02 -2.272096750344251e-02 -2.261436679778594e-02 -2.250790097686621e-02 + -2.240157085489928e-02 -2.229537724673683e-02 -2.218932096786568e-02 -2.208340283440801e-02 -2.197762366312167e-02 + -2.187198427139962e-02 -2.176648547727019e-02 -2.166112809939739e-02 -2.155591295708024e-02 -2.145084087025348e-02 + -2.134591265948700e-02 -2.124112914598606e-02 -2.113649115159157e-02 -2.103199949877955e-02 -2.092765501066142e-02 + -2.082345851098424e-02 -2.071941082413009e-02 -2.061551277511681e-02 -2.051176518959732e-02 -2.040816889385997e-02 + -2.030472471482873e-02 -2.020143348006270e-02 -2.009829601775636e-02 -1.999531315673983e-02 -1.989248572647826e-02 + -1.978981455707255e-02 -1.968730047925873e-02 -1.958494432440819e-02 -1.948274692469593e-02 -1.938070915384443e-02 + -1.927883198029905e-02 -1.917711638643049e-02 -1.907556335538169e-02 -1.897417387106797e-02 -1.887294891817665e-02 + -1.877188948216719e-02 -1.867099654927154e-02 -1.857027110649347e-02 -1.846971414160931e-02 -1.836932664316731e-02 + -1.826910960048793e-02 -1.816906400366405e-02 -1.806919084356051e-02 -1.796949111181436e-02 -1.786996580083505e-02 + -1.777061590380392e-02 -1.767144241467483e-02 -1.757244632817358e-02 -1.747362863979817e-02 -1.737499034581904e-02 + -1.727653244327855e-02 -1.717825592999131e-02 -1.708016180454431e-02 -1.698225106629644e-02 -1.688452471537910e-02 + -1.678698375269563e-02 -1.668962917992158e-02 -1.659246199950492e-02 -1.649548321466558e-02 -1.639869382939569e-02 + -1.630209484845979e-02 -1.620568727739433e-02 -1.610947212250823e-02 -1.601345039088239e-02 -1.591762309036990e-02 + -1.582199122959627e-02 -1.572655581795891e-02 -1.563131786562771e-02 -1.553627838354454e-02 -1.544143838342345e-02 + -1.534679887775091e-02 -1.525236087978538e-02 -1.515812540355748e-02 -1.506409346387027e-02 -1.497026607629869e-02 + -1.487664425719019e-02 -1.478322902366419e-02 -1.469002139361226e-02 -1.459702238569844e-02 -1.450423301935871e-02 + -1.441165431480125e-02 -1.431928729300667e-02 -1.422713297572744e-02 -1.413519238548856e-02 -1.404346654558698e-02 + -1.395195648009184e-02 -1.386066321384470e-02 -1.376958777245910e-02 -1.367873118232077e-02 -1.358809447058783e-02 + -1.349767866519034e-02 -1.340748479483081e-02 -1.331751388898374e-02 -1.322776697789583e-02 -1.313824509258617e-02 + -1.304894926484586e-02 -1.295988052723814e-02 -1.287103991309871e-02 -1.278242845653516e-02 -1.269404719242754e-02 + -1.260589715642790e-02 -1.251797938496049e-02 -1.243029491522193e-02 -1.234284478518080e-02 -1.225563003357810e-02 + -1.216865169992686e-02 -1.208191082451227e-02 -1.199540844839196e-02 -1.190914561339549e-02 -1.182312336212465e-02 + -1.173734273795365e-02 -1.165180478502856e-02 -1.156651054826796e-02 -1.148146107336241e-02 -1.139665740677465e-02 + -1.131210059573983e-02 -1.122779168826510e-02 -1.114373173312977e-02 -1.105992177988558e-02 -1.097636287885616e-02 + -1.089305608113763e-02 -1.081000243859810e-02 -1.072720300387785e-02 -1.064465883038958e-02 -1.056237097231796e-02 + -1.048034048461987e-02 -1.039856842302458e-02 -1.031705584403328e-02 -1.023580380491962e-02 -1.015481336372925e-02 + -1.007408557928002e-02 -9.993621511162145e-03 -9.913422219737792e-03 -9.833488766141573e-03 -9.753822212280107e-03 + -9.674423620832193e-03 -9.595294055249034e-03 -9.516434579753808e-03 -9.437846259341916e-03 -9.359530159781118e-03 + -9.281487347611131e-03 -9.203718890144106e-03 -9.126225855464203e-03 -9.049009312427773e-03 -8.972070330663551e-03 + -8.895409980572274e-03 -8.819029333326877e-03 -8.742929460872666e-03 -8.667111435926907e-03 -8.591576331979283e-03 + -8.516325223291508e-03 -8.441359184897480e-03 -8.366679292603471e-03 -8.292286622987761e-03 -8.218182253400836e-03 + -8.144367261965546e-03 -8.070842727576693e-03 -7.997609729901515e-03 -7.924669349379259e-03 -7.852022667221374e-03 + -7.779670765411674e-03 -7.707614726705985e-03 -7.635855634632334e-03 -7.564394573491114e-03 -7.493232628354679e-03 + -7.422370885067802e-03 -7.351810430247282e-03 -7.281552351282106e-03 -7.211597736333631e-03 -7.141947674335181e-03 + -7.072603254992488e-03 -7.003565568783322e-03 -6.934835706957635e-03 -6.866414761537744e-03 -6.798303825317996e-03 + -6.730503991864924e-03 -6.663016355517424e-03 -6.595842011386363e-03 -6.528982055355023e-03 -6.462437584078710e-03 + -6.396209694984930e-03 -6.330299486273537e-03 -6.264708056916423e-03 -6.199436506657668e-03 -6.134485936013709e-03 + -6.069857446272964e-03 -6.005552139496247e-03 -5.941571118516416e-03 -5.877915486938524e-03 -5.814586349139964e-03 + -5.751584810270169e-03 -5.688911976250773e-03 -5.626568953775749e-03 -5.564556850311063e-03 -5.502876774095071e-03 + -5.441529834138177e-03 -5.380517140222976e-03 -5.319839802904406e-03 -5.259498933509443e-03 -5.199495644137271e-03 + -5.139831047659399e-03 -5.080506257719342e-03 -5.021522388732999e-03 -4.962880555888315e-03 -4.904581875145436e-03 + -4.846627463236837e-03 -4.789018437667000e-03 -4.731755916712783e-03 -4.674841019423105e-03 -4.618274865619072e-03 + -4.562058575894123e-03 -4.506193271613753e-03 -4.450680074915650e-03 -4.395520108709830e-03 -4.340714496678322e-03 + -4.286264363275529e-03 -4.232170833727910e-03 -4.178435034034121e-03 -4.125058090965139e-03 -4.072041132064007e-03 + -4.019385285645958e-03 -3.967091680798546e-03 -3.915161447381354e-03 -3.863595716026320e-03 -3.812395618137451e-03 + -3.761562285890948e-03 -3.711096852235330e-03 -3.661000450891184e-03 -3.611274216351290e-03 -3.561919283880745e-03 + -3.512936789516676e-03 -3.464327870068561e-03 -3.416093663117957e-03 -3.368235307018608e-03 -3.320753940896576e-03 + -3.273650704649951e-03 -3.226926738949178e-03 -3.180583185236778e-03 -3.134621185727464e-03 -3.089041883408256e-03 + -3.043846422038254e-03 -2.999035946148752e-03 -2.954611601043348e-03 -2.910574532797684e-03 -2.866925888259744e-03 + -2.823666815049592e-03 -2.780798461559491e-03 -2.738321976953999e-03 -2.696238508373619e-03 -2.654548441671276e-03 + -2.613250370457768e-03 -2.572342629415666e-03 -2.531823551528605e-03 -2.491691468081058e-03 -2.451944708658432e-03 + -2.412581601147166e-03 -2.373600471734536e-03 -2.334999644908753e-03 -2.296777443459060e-03 -2.258932188475506e-03 + -2.221462199349202e-03 -2.184365793772097e-03 -2.147641287737080e-03 -2.111286995538061e-03 -2.075301229769797e-03 + -2.039682301327979e-03 -2.004428519409321e-03 -1.969538191511356e-03 -1.935009623432664e-03 -1.900841119272678e-03 + -1.867030981431763e-03 -1.833577510611304e-03 -1.800479005813509e-03 -1.767733764341631e-03 -1.735340081799775e-03 + -1.703296252092982e-03 -1.671600567427307e-03 -1.640251318309660e-03 -1.609246793547888e-03 -1.578585280250846e-03 + -1.548265063828226e-03 -1.518284427990752e-03 -1.488641654750009e-03 -1.459335024418519e-03 -1.430362815609809e-03 + -1.401723305238268e-03 -1.373414768519222e-03 -1.345435478969000e-03 -1.317783708404775e-03 -1.290457726944745e-03 + -1.263455803007974e-03 -1.236776203314463e-03 -1.210417192885211e-03 -1.184377035042087e-03 -1.158653991407897e-03 + -1.133246321906444e-03 -1.108152284762381e-03 -1.083370136501379e-03 -1.058898131949982e-03 -1.034734524235670e-03 + -1.010877564786915e-03 -9.873255033330667e-04 -9.640765879044092e-04 -9.411290648322183e-04 -9.184811787486289e-04 + -8.961311725867850e-04 -8.740772875807100e-04 -8.523177632653630e-04 -8.308508374766898e-04 -8.096747463515024e-04 + -7.887877243276144e-04 -7.681880041437243e-04 -7.478738168394655e-04 -7.278433917554549e-04 -7.080949565331957e-04 + -6.886267371151258e-04 -6.694369577446642e-04 -6.505238409661040e-04 -6.318856076247330e-04 -6.135204768667287e-04 + -5.954266661392027e-04 -5.776023911902466e-04 -5.600458660688418e-04 -5.427553031249055e-04 -5.257289130093312e-04 + -5.089649046738917e-04 -4.924614853713492e-04 -4.762168606553596e-04 -4.602292343805147e-04 -4.444968087023787e-04 + -4.290177840774126e-04 -4.137903592630125e-04 -3.988127313175460e-04 -3.840830956002659e-04 -3.695996457714088e-04 + -3.553605737921095e-04 -3.413640699244384e-04 -3.276083227314343e-04 -3.140915190770257e-04 -3.008118441261203e-04 + -2.877674813445269e-04 -2.749566124989906e-04 -2.623774176572213e-04 -2.500280751878325e-04 -2.379067617603739e-04 + -2.260116523453583e-04 -2.143409202141946e-04 -2.028927369392646e-04 -1.916652723938562e-04 -1.806566947521926e-04 + -1.698651704894585e-04 -1.592888643817466e-04 -1.489259395060843e-04 -1.387745572404594e-04 -1.288328772637608e-04 + -1.190990575558447e-04 -1.095712543974777e-04 -1.002476223703619e-04 -9.112631435715619e-05 -8.220548154143184e-05 + -7.348327340769540e-05 -6.495783774140863e-05 -5.662732062894079e-05 -4.848986645762257e-05 -4.054361791569914e-05 + -3.278671599235110e-05 -2.521729997771223e-05 -1.783350746283223e-05 -1.063347433969600e-05 -3.615334801240493e-06 + 3.222778658685659e-06 9.882735245276752e-06 1.636640586280917e-05 2.267566311462389e-05 2.881238130311222e-05 + 3.477843642975067e-05 4.057570619506181e-05 4.620606999864783e-05 5.167140893917587e-05 5.697360581436525e-05 + 6.211454512101381e-05 6.709611305498441e-05 7.192019751119294e-05 7.658868808363676e-05 8.110347606536316e-05 + 8.546645444849607e-05 8.967951792422436e-05 9.374456288279199e-05 9.766348741351855e-05 1.014381913047887e-04 + 1.050705760440430e-04 1.085625448177996e-04 1.119160025116305e-04 1.151328557101812e-04 1.182150126971625e-04 + 1.211643834553430e-04 1.239828796665641e-04 1.266724147117321e-04 1.292349036708124e-04 1.316722633228438e-04 + 1.339864121459228e-04 1.361792703172170e-04 1.382527597129589e-04 1.402088039084416e-04 1.420493281780282e-04 + 1.437762594951472e-04 1.453915265322880e-04 1.468970596610109e-04 1.482947909519366e-04 1.495866541747544e-04 + 1.507745847982190e-04 1.518605199901477e-04 1.528463986174264e-04 1.537341612460032e-04 1.545257501408940e-04 + 1.552231092661798e-04 1.558281842850050e-04 1.563429225595813e-04 1.567692731511856e-04 1.571091868201587e-04 + 1.573646160259084e-04 1.575375149269067e-04 1.576298393806915e-04 1.576435469438660e-04 1.575805968720984e-04 + 1.574429501201228e-04 1.572325693417381e-04 1.569514188898089e-04 1.566014648162647e-04 1.561846748721012e-04 + 1.557030185073786e-04 1.551584668712223e-04 1.545529928118244e-04 1.538885708764409e-04 1.531671773113931e-04 + 1.523907900620694e-04 1.515613887729210e-04 1.506809547874672e-04 1.497514711482905e-04 1.487749225970387e-04 + 1.477532955744273e-04 1.466885782202338e-04 1.455827603733046e-04 1.444378335715486e-04 1.432557910519404e-04 + 1.420386277505224e-04 1.407883403023994e-04 1.395069270417419e-04 1.381963880017885e-04 1.368587249148390e-04 + 1.354959412122630e-04 1.341100420244920e-04 1.327030341810229e-04 1.312769262104213e-04 1.298337283403146e-04 + 1.283754524973959e-04 1.269041123074267e-04 1.254217230952293e-04 1.239303018846964e-04 1.224318673987819e-04 + 1.209284400595055e-04 1.194220419879556e-04 1.179146970042824e-04 1.164084306277015e-04 1.149052700764973e-04 + 1.134072442680149e-04 1.119163838186694e-04 1.104347210439378e-04 1.089642881482521e-04 1.075065638036360e-04 + 1.060616917058919e-04 1.046296187405764e-04 1.032102917416885e-04 1.018036574916611e-04 1.004096627213706e-04 + 9.902825411012883e-05 9.765937828568638e-05 9.630298182423587e-05 9.495901125040440e-05 9.362741303726210e-05 + 9.230813360631472e-05 9.100111932750678e-05 8.970631651922477e-05 8.842367144829072e-05 8.715313032996555e-05 + 8.589463932795203e-05 8.464814455438756e-05 8.341359206985246e-05 8.219092788336273e-05 8.098009795237320e-05 + 7.978104818278043e-05 7.859372442891682e-05 7.741807249355357e-05 7.625403812790351e-05 7.510156703161450e-05 + 7.396060485277686e-05 7.283109718791694e-05 7.171298958199990e-05 7.060622752843238e-05 6.951075646905706e-05 + 6.842652179415550e-05 6.735346884245057e-05 6.629154290110056e-05 6.524068920570583e-05 6.420085294030309e-05 + 6.317197923736776e-05 6.215401317781660e-05 6.114689979100181e-05 6.015058405471764e-05 5.916501089519467e-05 + 5.819012518710231e-05 5.722587175355111e-05 5.627219536608801e-05 5.532904074469879e-05 5.439635255781028e-05 + 5.347407542228503e-05 5.256215390342745e-05 5.166053251497838e-05 5.076915571911755e-05 4.988796792646560e-05 + 4.901691349607979e-05 4.815593673545620e-05 4.730498190053175e-05 4.646399319567940e-05 4.563291477371359e-05 + 4.481169073588553e-05 4.400026513188523e-05 4.319858195984344e-05 4.240658516632771e-05 4.162421864634442e-05 + 4.085142624334061e-05 4.008815174919960e-05 3.933433890424594e-05 3.858993139724115e-05 3.785487286538551e-05 + 3.712910689431992e-05 3.641257701812220e-05 3.570522671930905e-05 3.500699942883761e-05 3.431783852610154e-05 + 3.363768733893555e-05 3.296648914361141e-05 3.230418716483976e-05 3.165072457577154e-05 3.100604449799441e-05 + 3.037009000153688e-05 2.974280410486467e-05 2.912412977488233e-05 2.851400992693466e-05 2.791238742480376e-05 + 2.731920508071050e-05 2.673440565531601e-05 2.615793185771826e-05 2.558972634545591e-05 2.502973172450496e-05 + 2.447789054928025e-05 2.393414532263671e-05 2.339843849586672e-05 2.287071246870147e-05 2.235090958931219e-05 + 2.183897215430722e-05 2.133484240873532e-05 2.083846254608280e-05 2.034977470827478e-05 1.986872098567633e-05 + 1.939524341709012e-05 1.892928398975761e-05 1.847078463936019e-05 1.801968725001651e-05 1.757593365428549e-05 + 1.713946563316372e-05 1.671022491608660e-05 1.628815318092935e-05 1.587319205400491e-05 1.546528311006504e-05 + 1.506436787230126e-05 1.467038781234256e-05 1.428328435025799e-05 1.390299885455444e-05 1.352947264217759e-05 + 1.316264697851278e-05 1.280246307738298e-05 1.244886210105108e-05 1.210178516021787e-05 1.176117331402298e-05 + 1.142696757004559e-05 1.109910888430288e-05 1.077753816125079e-05 1.046219625378485e-05 1.015302396323831e-05 + 9.849962039384228e-06 9.552951180433689e-06 9.261932033036575e-06 8.976845192282242e-06 8.697631201698131e-06 + 8.424230553250473e-06 8.156583687344937e-06 7.894630992825108e-06 7.638312806974195e-06 7.387569415513559e-06 + 7.142341052603349e-06 6.902567900843093e-06 6.668190091270500e-06 6.439147703362075e-06 6.215380765033656e-06 + 5.996829252639130e-06 5.783433090971875e-06 5.575132153263523e-06 5.371866261184496e-06 5.173575184844488e-06 + 4.980198642791325e-06 4.791676302012246e-06 4.607947777932794e-06 4.428952634417314e-06 4.254630383769357e-06 + 4.084920486730822e-06 3.919762352482401e-06 3.759095338643961e-06 3.602858751273628e-06 3.450991844868813e-06 + 3.303433822365331e-06 3.160123835137790e-06 3.021000982999921e-06 2.886004314203887e-06 2.755072825440644e-06 + 2.628145461840243e-06 2.505161116971098e-06 2.386058632840807e-06 2.270776799895446e-06 2.159254357019885e-06 + 2.051429991538041e-06 1.947242339212340e-06 1.846629984243999e-06 1.749531459273255e-06 1.655885245378809e-06 + 1.565629772078447e-06 1.478703417328506e-06 1.395044507524116e-06 1.314591317499384e-06 1.237282070526997e-06 + 1.163054938318428e-06 1.091848041024111e-06 1.023599447233023e-06 9.582471739731455e-07 8.957291867110747e-07 + 8.359833993521945e-07 7.789476742408122e-07 7.245598221598258e-07 6.727576023310933e-07 6.234787224151194e-07 + 5.766608385111964e-07 5.322415551575088e-07 4.901584253309060e-07 4.503489504470246e-07 4.127505803603769e-07 + 3.773007133641286e-07 3.439366961903442e-07 3.125958240097801e-07 2.832153404319796e-07 2.557324375053353e-07 + 2.300842557169480e-07 2.062078839927037e-07 1.840403596973251e-07 1.635186686342403e-07 1.445797450457257e-07 + 1.271604716127872e-07 1.111976794552151e-07 9.662814813161721e-08 8.338860563934195e-08 7.141572841452154e-08 + 6.064614133209616e-08 5.101641770574893e-08 4.246307928797547e-08 3.492259627002727e-08 2.833138728193873e-08 + 2.262581939253933e-08 1.774220810942188e-08 1.361681737896142e-08 1.018585958632224e-08 7.385495555435938e-09 + 5.151834549023854e-09 3.420934268579909e-09 2.128800854379248e-09 1.211388885479524e-09 6.046013797143454e-10 + 2.442897936994365e-10 6.625402282856779e-11 6.242401275686175e-12 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 + 0.000000000000000e+00 3.092962653460343e+01 6.144686330752435e+01 9.155581481450724e+01 1.212605495644046e+02 + 1.505651003731359e+02 1.794734646553439e+02 2.079896047137684e+02 2.361174480263539e+02 2.638608875311071e+02 + 2.912237819087242e+02 3.182099558630060e+02 3.448232003990666e+02 3.710672730993720e+02 3.969458983976072e+02 + 4.224627678503969e+02 4.476215404068967e+02 4.724258426762635e+02 4.968792691930342e+02 5.209853826804200e+02 + 5.447477143115200e+02 5.681697639685108e+02 5.912550004997697e+02 6.140068619750015e+02 6.364287559383409e+02 + 6.585240596594875e+02 6.802961203828419e+02 7.017482555747055e+02 7.228837531685164e+02 7.437058718081711e+02 + 7.642178410894217e+02 7.844228617993766e+02 8.043241061541186e+02 8.239247180344421e+02 8.432278132197488e+02 + 8.622364796200891e+02 8.809537775063659e+02 8.993827397387644e+02 9.175263719933142e+02 9.353876529867381e+02 + 9.529695346994749e+02 9.702749425969594e+02 9.873067758491643e+02 1.004067907548403e+03 1.020561184925392e+03 + 1.036789429563668e+03 1.052755437612222e+03 1.068461979996528e+03 1.083911802627899e+03 1.099107626611110e+03 + 1.114052148450492e+03 1.128748040254316e+03 1.143197949937570e+03 1.157404501423190e+03 1.171370294841618e+03 + 1.185097906728818e+03 1.198589890222757e+03 1.211848775258258e+03 1.224877068760366e+03 1.237677254836173e+03 + 1.250251794965091e+03 1.262603128187657e+03 1.274733671292826e+03 1.286645819003753e+03 1.298341944162134e+03 + 1.309824397911100e+03 1.321095509876596e+03 1.332157588347371e+03 1.343012920453519e+03 1.353663772343643e+03 + 1.364112389360511e+03 1.374360996215446e+03 1.384411797161216e+03 1.394266976163637e+03 1.403928697071726e+03 + 1.413399103786597e+03 1.422680320428930e+03 1.431774451505151e+03 1.440683582072250e+03 1.449409777901377e+03 + 1.457955085640010e+03 1.466321532972905e+03 1.474511128781773e+03 1.482525863303651e+03 1.490367708288016e+03 + 1.498038617152631e+03 1.505540525138221e+03 1.512875349461808e+03 1.520044989468906e+03 1.527051326784430e+03 + 1.533896225462498e+03 1.540581532134944e+03 1.547109076158651e+03 1.553480669761788e+03 1.559698108188795e+03 + 1.565763169844206e+03 1.571677616435426e+03 1.577443193114195e+03 1.583061628617119e+03 1.588534635404881e+03 + 1.593863909800465e+03 1.599051132126279e+03 1.604097966840042e+03 1.609006062669763e+03 1.613777052747505e+03 + 1.618412554742131e+03 1.622914170990993e+03 1.627283488630499e+03 1.631522079725746e+03 1.635631501398992e+03 + 1.639613295957194e+03 1.643468991018444e+03 1.647200099637420e+03 1.650808120429859e+03 1.654294537696007e+03 + 1.657660821543028e+03 1.660908428006512e+03 1.664038799170929e+03 1.667053363289175e+03 1.669953534901140e+03 + 1.672740714951283e+03 1.675416290905264e+03 1.677981636865718e+03 1.680438113687010e+03 1.682787069089082e+03 + 1.685029837770386e+03 1.687167741519947e+03 1.689202089328419e+03 1.691134177498399e+03 1.692965289753662e+03 + 1.694696697347702e+03 1.696329659171241e+03 1.697865421858981e+03 1.699305219895413e+03 1.700650275719819e+03 + 1.701901799830410e+03 1.703060990887614e+03 1.704129035816525e+03 1.705107109908571e+03 1.705996376922253e+03 + 1.706797989183223e+03 1.707513087683354e+03 1.708142802179180e+03 1.708688251289497e+03 1.709150542592057e+03 + 1.709530772719652e+03 1.709830027455300e+03 1.710049381826671e+03 1.710189900199788e+03 1.710252636371925e+03 + 1.710238633663830e+03 1.710148925011067e+03 1.709984533054660e+03 1.709746470231138e+03 1.709435738861639e+03 + 1.709053331240390e+03 1.708600229722532e+03 1.708077406811055e+03 1.707485825243189e+03 1.706826438076018e+03 + 1.706100188771399e+03 1.705308011280191e+03 1.704450830125807e+03 1.703529560487073e+03 1.702545108280416e+03 + 1.701498370241383e+03 1.700390234005469e+03 1.699221578188345e+03 1.697993272465343e+03 1.696706177650369e+03 + 1.695361145774132e+03 1.693959020161727e+03 1.692500635509617e+03 1.690986817961938e+03 1.689418385186218e+03 + 1.687796146448464e+03 1.686120902687609e+03 1.684393446589397e+03 1.682614562659610e+03 1.680785027296721e+03 + 1.678905608863965e+03 1.676977067760778e+03 1.675000156493683e+03 1.672975619746570e+03 1.670904194450420e+03 + 1.668786609852442e+03 1.666623587584642e+03 1.664415841731817e+03 1.662164078899028e+03 1.659868998278457e+03 + 1.657531291715782e+03 1.655151643775929e+03 1.652730731808349e+03 1.650269226011727e+03 1.647767789498148e+03 + 1.645227078356745e+03 1.642647741716828e+03 1.640030421810476e+03 1.637375754034628e+03 1.634684367012638e+03 + 1.631956882655341e+03 1.629193916221616e+03 1.626396076378419e+03 1.623563965260361e+03 1.620698178528749e+03 + 1.617799305430168e+03 1.614867928854573e+03 1.611904625392882e+03 1.608909965394110e+03 1.605884513022022e+03 + 1.602828826311309e+03 1.599743457223311e+03 1.596628951701260e+03 1.593485849725083e+03 1.590314685365736e+03 + 1.587115986839081e+03 1.583890276559329e+03 1.580638071192037e+03 1.577359881706643e+03 1.574056213428595e+03 + 1.570727566091011e+03 1.567374433885939e+03 1.563997305515167e+03 1.560596664240627e+03 1.557172987934351e+03 + 1.553726749128049e+03 1.550258415062232e+03 1.546768447734961e+03 1.543257303950145e+03 1.539725435365481e+03 + 1.536173288539968e+03 1.532601304981016e+03 1.529009921191181e+03 1.525399568714497e+03 1.521770674182409e+03 + 1.518123659359349e+03 1.514458941187898e+03 1.510776931833586e+03 1.507078038729322e+03 1.503362664619425e+03 + 1.499631207603318e+03 1.495884061178825e+03 1.492121614285112e+03 1.488344251345293e+03 1.484552352308622e+03 + 1.480746292692387e+03 1.476926443623421e+03 1.473093171879253e+03 1.469246839928947e+03 1.465387805973555e+03 + 1.461516423986262e+03 1.457633043752176e+03 1.453738010907779e+03 1.449831666980049e+03 1.445914349425263e+03 + 1.441986391667444e+03 1.438048123136507e+03 1.434099869306064e+03 1.430141951730933e+03 1.426174688084298e+03 + 1.422198392194570e+03 1.418213374081942e+03 1.414219939994621e+03 1.410218392444747e+03 1.406209030244037e+03 + 1.402192148539080e+03 1.398168038846371e+03 1.394136989087032e+03 1.390099283621229e+03 1.386055203282308e+03 + 1.382005025410638e+03 1.377949023887155e+03 1.373887469166645e+03 1.369820628310697e+03 1.365748765020423e+03 + 1.361672139668884e+03 1.357591009333204e+03 1.353505627826470e+03 1.349416245729308e+03 1.345323110421204e+03 + 1.341226466111576e+03 1.337126553870547e+03 1.333023611659482e+03 1.328917874361243e+03 1.324809573810189e+03 + 1.320698938821944e+03 1.316586195222853e+03 1.312471565879238e+03 1.308355270726382e+03 1.304237526797265e+03 + 1.300118548251028e+03 1.295998546401260e+03 1.291877729743943e+03 1.287756303985249e+03 1.283634472069033e+03 + 1.279512434204123e+03 1.275390387891361e+03 1.271268527950413e+03 1.267147046546335e+03 1.263026133215942e+03 + 1.258905974893897e+03 1.254786755938636e+03 1.250668658158009e+03 1.246551860834739e+03 1.242436540751643e+03 + 1.238322872216631e+03 1.234211027087508e+03 1.230101174796523e+03 1.225993482374751e+03 1.221888114476225e+03 + 1.217785233401870e+03 1.213684999123240e+03 1.209587569306029e+03 1.205493099333387e+03 1.201401742329029e+03 + 1.197313649180157e+03 1.193228968560143e+03 1.189147846951068e+03 1.185070428666013e+03 1.180996855871180e+03 + 1.176927268607833e+03 1.172861804813996e+03 1.168800600346028e+03 1.164743788999946e+03 1.160691502532607e+03 + 1.156643870682680e+03 1.152601021191433e+03 1.148563079823344e+03 1.144530170386546e+03 1.140502414753048e+03 + 1.136479932878823e+03 1.132462842823694e+03 1.128451260771050e+03 1.124445301047389e+03 1.120445076141689e+03 + 1.116450696724609e+03 1.112462271667503e+03 1.108479908061300e+03 1.104503711235176e+03 1.100533784775090e+03 + 1.096570230542151e+03 1.092613148690810e+03 1.088662637686885e+03 1.084718794325463e+03 1.080781713748597e+03 + 1.076851489462869e+03 1.072928213356805e+03 1.069011975718097e+03 1.065102865250726e+03 1.061200969091874e+03 + 1.057306372828737e+03 1.053419160515154e+03 1.049539414688086e+03 1.045667216383984e+03 1.041802645154960e+03 + 1.037945779084844e+03 1.034096694805093e+03 1.030255467510566e+03 1.026422170975116e+03 1.022596877567097e+03 + 1.018779658264699e+03 1.014970582671133e+03 1.011169719029728e+03 1.007377134238838e+03 1.003592893866644e+03 + 9.998170621658138e+02 9.960497020880292e+02 9.922908752984000e+02 9.885406421896960e+02 9.847990618965104e+02 + 9.810661923092763e+02 9.773420900881137e+02 9.736268106766209e+02 9.699204083154823e+02 9.662229360559834e+02 + 9.625344457733954e+02 9.588549881802285e+02 9.551846128393778e+02 9.515233681771427e+02 9.478713014961278e+02 + 9.442284589880252e+02 9.405948857462781e+02 9.369706257786315e+02 9.333557220195848e+02 9.297502163426675e+02 + 9.261541495726940e+02 9.225675614978380e+02 9.189904908816102e+02 9.154229754747445e+02 9.118650520269592e+02 + 9.083167562985963e+02 9.047781230721992e+02 9.012491861639268e+02 8.977299784348994e+02 8.942205318024285e+02 + 8.907208772511476e+02 8.872310448440229e+02 8.837510637332788e+02 8.802809621712227e+02 8.768207675209613e+02 + 8.733705062670168e+02 8.699302040258366e+02 8.664998855562388e+02 8.630795747697115e+02 8.596692947406563e+02 + 8.562690677165112e+02 8.528789151277964e+02 8.494988575980467e+02 8.461289149536703e+02 8.427691062337059e+02 + 8.394194496994758e+02 8.360799628441765e+02 8.327506624023558e+02 8.294315643593045e+02 8.261226839603659e+02 + 8.228240357201580e+02 8.195356334317065e+02 8.162574901754649e+02 8.129896183283118e+02 8.097320295723989e+02 + 8.064847349039516e+02 8.032477446419666e+02 8.000210684368377e+02 7.968047152789097e+02 7.935986935069204e+02 + 7.904030108163937e+02 7.872176742679235e+02 7.840426902954115e+02 7.808780647141936e+02 7.777238027291124e+02 + 7.745799089424941e+02 7.714463873620609e+02 7.683232414087729e+02 7.652104739245605e+02 7.621080871800449e+02 + 7.590160828821087e+02 7.559344621814480e+02 7.528632256800425e+02 7.498023734385237e+02 7.467519049835197e+02 + 7.437118193148774e+02 7.406821149128448e+02 7.376627897451922e+02 7.346538412742362e+02 7.316552664638124e+02 + 7.286670617861776e+02 7.256892232288341e+02 7.227217463013135e+02 7.197646260418561e+02 7.168178570240622e+02 + 7.138814333634584e+02 7.109553487239909e+02 7.080395963244840e+02 7.051341689449872e+02 7.022390589331357e+02 + 6.993542582103496e+02 6.964797582780715e+02 6.936155502238555e+02 6.907616247274542e+02 6.879179720668335e+02 + 6.850845821241022e+02 6.822614443914007e+02 6.794485479767509e+02 6.766458816097985e+02 6.738534336475631e+02 + 6.710711920800450e+02 6.682991445358737e+02 6.655372782878109e+02 6.627855802582736e+02 6.600440370247364e+02 + 6.573126348251241e+02 6.545913595631246e+02 6.518801968134759e+02 6.491791318271637e+02 6.464881495365782e+02 + 6.438072345606571e+02 6.411363712099002e+02 6.384755434914192e+02 6.358247351138504e+02 6.331839294922936e+02 + 6.305531097531517e+02 6.279322587389352e+02 6.253213590130168e+02 6.227203928643426e+02 6.201293423120818e+02 + 6.175481891102481e+02 6.149769147522601e+02 6.124155004754302e+02 6.098639272654723e+02 6.073221758609059e+02 + 6.047902267574146e+02 6.022680602121961e+02 5.997556562482570e+02 5.972529946586116e+02 5.947600550105284e+02 + 5.922768166496420e+02 5.898032587040741e+02 5.873393600885071e+02 5.848850995081896e+02 5.824404554629220e+02 + 5.800054062510060e+02 5.775799299731178e+02 5.751640045361754e+02 5.727576076571369e+02 5.703607168668038e+02 + 5.679733095135196e+02 5.655953627668734e+02 5.632268536213569e+02 5.608677588999769e+02 5.585180552578101e+02 + 5.561777191855749e+02 5.538467270130913e+02 5.515250549127653e+02 5.492126789029992e+02 5.469095748515771e+02 + 5.446157184790180e+02 5.423310853618807e+02 5.400556509360428e+02 5.377893904999387e+02 5.355322792177595e+02 + 5.332842921226277e+02 5.310454041197257e+02 5.288155899893949e+02 5.265948243902002e+02 5.243830818619641e+02 + 5.221803368287563e+02 5.199865636018615e+02 5.178017363827072e+02 5.156258292657639e+02 5.134588162414060e+02 + 5.113006711987428e+02 5.091513679284308e+02 5.070108801254233e+02 5.048791813917245e+02 5.027562452390878e+02 + 5.006420450916906e+02 4.985365542887848e+02 4.964397460873062e+02 4.943515936644623e+02 4.922720701202861e+02 + 4.902011484801621e+02 4.881388016973193e+02 4.860850026553053e+02 4.840397241704212e+02 4.820029389941294e+02 + 4.799746198154425e+02 4.779547392632712e+02 4.759432699087556e+02 4.739401842675587e+02 4.719454548021483e+02 + 4.699590539240335e+02 4.679809539959847e+02 4.660111273342323e+02 4.640495462106243e+02 4.620961828547734e+02 + 4.601510094561671e+02 4.582139981662578e+02 4.562851211005278e+02 4.543643503405294e+02 4.524516579358937e+02 + 4.505470159063264e+02 4.486503962435701e+02 4.467617709133452e+02 4.448811118572694e+02 4.430083909947464e+02 + 4.411435802248437e+02 4.392866514281351e+02 4.374375764685219e+02 4.355963271950445e+02 4.337628754436469e+02 + 4.319371930389445e+02 4.301192517959559e+02 4.283090235218090e+02 4.265064800174407e+02 4.247115930792582e+02 + 4.229243345007924e+02 4.211446760743199e+02 4.193725895924705e+02 4.176080468498113e+02 4.158510196444142e+02 + 4.141014797793932e+02 4.123593990644333e+02 4.106247493172935e+02 4.088975023652878e+02 4.071776300467535e+02 + 4.054651042124924e+02 4.037598967271958e+02 4.020619794708562e+02 4.003713243401487e+02 3.986879032498043e+02 + 3.970116881339567e+02 3.953426509474766e+02 3.936807636672835e+02 3.920259982936424e+02 3.903783268514428e+02 + 3.887377213914565e+02 3.871041539915799e+02 3.854775967580615e+02 3.838580218267089e+02 3.822454013640786e+02 + 3.806397075686534e+02 3.790409126719930e+02 3.774489889398832e+02 3.758639086734535e+02 3.742856442102916e+02 + 3.727141679255294e+02 3.711494522329202e+02 3.695914695859045e+02 3.680401924786487e+02 3.664955934470753e+02 + 3.649576450698805e+02 3.634263199695284e+02 3.619015908132385e+02 3.603834303139520e+02 3.588718112312852e+02 + 3.573667063724722e+02 3.558680885932878e+02 3.543759307989556e+02 3.528902059450506e+02 3.514108870383753e+02 + 3.499379471378335e+02 3.484713593552798e+02 3.470110968563633e+02 3.455571328613559e+02 3.441094406459656e+02 + 3.426679935421353e+02 3.412327649388330e+02 3.398037282828261e+02 3.383808570794424e+02 3.369641248933206e+02 + 3.355535053491417e+02 3.341489721323600e+02 3.327504989899118e+02 3.313580597309123e+02 3.299716282273449e+02 + 3.285911784147361e+02 3.272166842928202e+02 3.258481199261851e+02 3.244854594449200e+02 3.231286770452364e+02 + 3.217777469900885e+02 3.204326436097790e+02 3.190933413025524e+02 3.177598145351745e+02 3.164320378435100e+02 + 3.151099858330820e+02 3.137936331796195e+02 3.124829546296009e+02 3.111779250007793e+02 3.098785191827064e+02 + 3.085847121372355e+02 3.072964788990210e+02 3.060137945760084e+02 3.047366343499109e+02 3.034649734766738e+02 + 3.021987872869389e+02 3.009380511864902e+02 2.996827406566881e+02 2.984328312549063e+02 2.971882986149424e+02 + 2.959491184474387e+02 2.947152665402733e+02 2.934867187589564e+02 2.922634510470140e+02 2.910454394263584e+02 + 2.898326599976570e+02 2.886250889406855e+02 2.874227025146713e+02 2.862254770586421e+02 2.850333889917466e+02 + 2.838464148135824e+02 2.826645311045047e+02 2.814877145259334e+02 2.803159418206503e+02 2.791491898130870e+02 + 2.779874354096040e+02 2.768306555987662e+02 2.756788274516064e+02 2.745319281218831e+02 2.733899348463269e+02 + 2.722528249448854e+02 2.711205758209550e+02 2.699931649616105e+02 2.688705699378216e+02 2.677527684046641e+02 + 2.666397381015296e+02 2.655314568523168e+02 2.644279025656263e+02 2.633290532349408e+02 2.622348869388057e+02 + 2.611453818409966e+02 2.600605161906776e+02 2.589802683225653e+02 2.579046166570756e+02 2.568335397004630e+02 + 2.557670160449610e+02 2.547050243689091e+02 2.536475434368802e+02 2.525945520997950e+02 2.515460292950299e+02 + 2.505019540465310e+02 2.494623054649030e+02 2.484270627475080e+02 2.473962051785518e+02 2.463697121291584e+02 + 2.453475630574538e+02 2.443297375086299e+02 2.433162151150099e+02 2.423069755961045e+02 2.413019987586639e+02 + 2.403012644967265e+02 2.393047527916599e+02 2.383124437121921e+02 2.373243174144503e+02 2.363403541419774e+02 + 2.353605342257561e+02 2.343848380842254e+02 2.334132462232840e+02 2.324457392362996e+02 2.314822978041100e+02 + 2.305229026950092e+02 2.295675347647456e+02 2.286161749565050e+02 2.276688043008849e+02 2.267254039158775e+02 + 2.257859550068329e+02 2.248504388664312e+02 2.239188368746394e+02 2.229911304986700e+02 2.220673012929327e+02 + 2.211473308989816e+02 2.202312010454613e+02 2.193188935480400e+02 2.184103903093521e+02 2.175056733189223e+02 + 2.166047246530964e+02 2.157075264749590e+02 2.148140610342565e+02 2.139243106673059e+02 2.130382577969103e+02 + 2.121558849322625e+02 2.112771746688434e+02 2.104021096883284e+02 2.095306727584750e+02 2.086628467330155e+02 + 2.077986145515480e+02 2.069379592394108e+02 2.060808639075709e+02 2.052273117524977e+02 2.043772860560301e+02 + 2.035307701852530e+02 2.026877475923597e+02 2.018482018145116e+02 2.010121164737013e+02 2.001794752766043e+02 + 1.993502620144317e+02 1.985244605627833e+02 1.977020548814834e+02 1.968830290144333e+02 1.960673670894455e+02 + 1.952550533180796e+02 1.944460719954783e+02 1.936404075001901e+02 1.928380442940064e+02 1.920389669217757e+02 + 1.912431600112318e+02 1.904506082728075e+02 1.896612964994507e+02 1.888752095664395e+02 1.880923324311883e+02 + 1.873126501330530e+02 1.865361477931425e+02 1.857628106141124e+02 1.849926238799683e+02 1.842255729558594e+02 + 1.834616432878745e+02 1.827008204028278e+02 1.819430899080554e+02 1.811884374911939e+02 1.804368489199680e+02 + 1.796883100419685e+02 1.789428067844352e+02 1.782003251540284e+02 1.774608512366059e+02 1.767243711969932e+02 + 1.759908712787550e+02 1.752603378039561e+02 1.745327571729353e+02 1.738081158640630e+02 1.730864004334984e+02 + 1.723675975149561e+02 1.716516938194546e+02 1.709386761350746e+02 1.702285313267106e+02 1.695212463358197e+02 + 1.688168081801711e+02 1.681152039535912e+02 1.674164208257089e+02 1.667204460416968e+02 1.660272669220106e+02 + 1.653368708621301e+02 1.646492453322947e+02 1.639643778772380e+02 1.632822561159195e+02 1.626028677412604e+02 + 1.619262005198663e+02 1.612522422917625e+02 1.605809809701119e+02 1.599124045409490e+02 1.592465010628942e+02 + 1.585832586668785e+02 1.579226655558653e+02 1.572647100045635e+02 1.566093803591464e+02 1.559566650369704e+02 + 1.553065525262796e+02 1.546590313859273e+02 1.540140902450774e+02 1.533717178029232e+02 1.527319028283855e+02 + 1.520946341598244e+02 1.514599007047433e+02 1.508276914394908e+02 1.501979954089635e+02 1.495708017263079e+02 + 1.489460995726196e+02 1.483238781966386e+02 1.477041269144485e+02 1.470868351091738e+02 1.464719922306726e+02 + 1.458595877952284e+02 1.452496113852426e+02 1.446420526489307e+02 1.440369013000031e+02 1.434341471173618e+02 + 1.428337799447829e+02 1.422357896906033e+02 1.416401663274088e+02 1.410468998917186e+02 1.404559804836624e+02 + 1.398673982666719e+02 1.392811434671528e+02 1.386972063741724e+02 1.381155773391332e+02 1.375362467754556e+02 + 1.369592051582511e+02 1.363844430240045e+02 1.358119509702414e+02 1.352417196552113e+02 1.346737397975527e+02 + 1.341080021759751e+02 1.335444976289218e+02 1.329832170542489e+02 1.324241514088906e+02 1.318672917085310e+02 + 1.313126290272713e+02 1.307601544973014e+02 1.302098593085606e+02 1.296617347084112e+02 1.291157720012986e+02 + 1.285719625484201e+02 1.280302977673866e+02 1.274907691318894e+02 1.269533681713578e+02 1.264180864706295e+02 + 1.258849156696004e+02 1.253538474629000e+02 1.248248735995387e+02 1.242979858825762e+02 1.237731761687761e+02 + 1.232504363682666e+02 1.227297584441980e+02 1.222111344123981e+02 1.216945563410326e+02 1.211800163502591e+02 + 1.206675066118835e+02 1.201570193490145e+02 1.196485468357202e+02 1.191420813966794e+02 1.186376154068378e+02 + 1.181351412910617e+02 1.176346515237882e+02 1.171361386286800e+02 1.166395951782744e+02 1.161450137936409e+02 + 1.156523871440253e+02 1.151617079465030e+02 1.146729689656315e+02 1.141861630130967e+02 1.137012829473650e+02 + 1.132183216733316e+02 1.127372721419683e+02 1.122581273499750e+02 1.117808803394231e+02 1.113055241974073e+02 + 1.108320520556904e+02 1.103604570903540e+02 1.098907325214407e+02 1.094228716126026e+02 1.089568676707503e+02 + 1.084927140456933e+02 1.080304041297915e+02 1.075699313575957e+02 1.071112892054973e+02 1.066544711913678e+02 + 1.061994708742094e+02 1.057462818537971e+02 1.052948977703194e+02 1.048453123040287e+02 1.043975191748812e+02 + 1.039515121421794e+02 1.035072850042212e+02 1.030648315979378e+02 1.026241457985365e+02 1.021852215191508e+02 + 1.017480527104723e+02 1.013126333604036e+02 1.008789574936956e+02 1.004470191715887e+02 1.000168124914595e+02 + 9.958833158645952e+01 9.916157062515755e+01 9.873652381118313e+01 9.831318538286747e+01 9.789154961288472e+01 + 9.747161080789462e+01 9.705336330818174e+01 9.663680148730151e+01 9.622191975171600e+01 9.580871254043927e+01 + 9.539717432467799e+01 9.498729960747015e+01 9.457908292333019e+01 9.417251883788728e+01 9.376760194752592e+01 + 9.336432687903158e+01 9.296268828922541e+01 9.256268086460973e+01 9.216429932100861e+01 9.176753840320588e+01 + 9.137239288459003e+01 9.097885756679371e+01 9.058692727933247e+01 9.019659687925129e+01 8.980786125075915e+01 + 8.942071530487537e+01 8.903515397906827e+01 8.865117223689539e+01 8.826876506764837e+01 8.788792748599066e+01 + 8.750865453159915e+01 8.713094126880934e+01 8.675478278625070e+01 8.638017419649346e+01 8.600711063568782e+01 + 8.563558726320450e+01 8.526559926127953e+01 8.489714183465328e+01 8.453021021021326e+01 8.416479963663750e+01 + 8.380090538403297e+01 8.343852274358191e+01 8.307764702718154e+01 8.271827356708731e+01 8.236039771555478e+01 + 8.200401484448335e+01 8.164912034505645e+01 8.129570962738794e+01 8.094377812016226e+01 8.059332127027876e+01 + 8.024433454249494e+01 7.989681341906731e+01 7.955075339940062e+01 7.920614999968431e+01 7.886299875254197e+01 + 7.852129520667269e+01 7.818103492649431e+01 7.784221349179018e+01 7.750482649735231e+01 7.716886955262360e+01 + 7.683433828134812e+01 7.650122832120968e+01 7.616953532348127e+01 7.583925495266870e+01 7.551038288615457e+01 + 7.518291481384722e+01 7.485684643782369e+01 7.453217347197594e+01 7.420889164165929e+01 7.388699668333484e+01 + 7.356648434421936e+01 7.324735038193101e+01 7.292959056413389e+01 7.261320066819054e+01 7.229817648080265e+01 + 7.198451379766323e+01 7.167220842310338e+01 7.136125616973801e+01 7.105165285811691e+01 7.074339431637192e+01 + 7.043647637986339e+01 7.013089489083404e+01 6.982664569805181e+01 6.952372465646366e+01 6.922212762684383e+01 + 6.892185047544091e+01 6.862288907363180e+01 6.832523929756968e+01 6.802889702783402e+01 6.773385814908231e+01 + 6.744011854969933e+01 6.714767412144998e+01 6.685652075912981e+01 6.656665436021596e+01 6.627807082452031e+01 + 6.599076605384013e+01 6.570473595161044e+01 6.541997642255764e+01 6.513648337235190e+01 6.485425270725899e+01 + 6.457328033379579e+01 6.429356215838057e+01 6.401509408699029e+01 6.373787202481275e+01 6.346189187589996e+01 + 6.318714954282635e+01 6.291364092633813e+01 6.264136192501348e+01 6.237030843491549e+01 6.210047634924629e+01 + 6.183186155800770e+01 6.156445994765167e+01 6.129826740074021e+01 6.103327979560234e+01 6.076949300598739e+01 + 6.050690290072706e+01 6.024550534338968e+01 5.998529619193805e+01 5.972627129839049e+01 5.946842650847431e+01 + 5.921175766128842e+01 5.895626058896132e+01 5.870193111630790e+01 5.844876506049278e+01 5.819675823068683e+01 + 5.794590642772724e+01 5.769620544378167e+01 5.744765106200295e+01 5.720023905619436e+01 5.695396519046973e+01 + 5.670882521891257e+01 5.646481488524140e+01 5.622192992246893e+01 5.598016605256586e+01 5.573951898612282e+01 + 5.549998442201218e+01 5.526155804705347e+01 5.502423553567544e+01 5.478801254957932e+01 5.455288473740384e+01 + 5.431884773438952e+01 5.408589716204126e+01 5.385402862779639e+01 5.362323772468734e+01 5.339352003100851e+01 + 5.316487110998134e+01 5.293728650941941e+01 5.271076176139810e+01 5.248529238191697e+01 5.226087387056952e+01 + 5.203750171021004e+01 5.181517136661937e+01 5.159387828817555e+01 5.137361790552005e+01 5.115438563122540e+01 + 5.093617685946728e+01 5.071898696568911e+01 5.050281130627462e+01 5.028764521821723e+01 5.007348401878689e+01 + 4.986032300520461e+01 4.964815745431017e+01 4.943698262223258e+01 4.922679374406444e+01 4.901758603352890e+01 + 4.880935468265444e+01 4.860209486144674e+01 4.839580171755819e+01 4.819047037596423e+01 4.798609593863436e+01 + 4.778267348427748e+01 4.758019807629763e+01 4.737866479163073e+01 4.717806873174889e+01 4.697840502276303e+01 + 4.677966881532046e+01 4.658185528450561e+01 4.638495962973613e+01 4.618897707466358e+01 4.599390286707413e+01 + 4.579973227878514e+01 4.560646060554886e+01 4.541408316695004e+01 4.522259530630871e+01 4.503199239057944e+01 + 4.484226981025409e+01 4.465342297926174e+01 4.446544733487283e+01 4.427833833759906e+01 4.409209147109787e+01 + 4.390670224207366e+01 4.372216618018147e+01 4.353847883793086e+01 4.335563579058883e+01 4.317363263608402e+01 + 4.299246499491191e+01 4.281212851003678e+01 4.263261884680019e+01 4.245393169282373e+01 4.227606275791384e+01 + 4.209900777397110e+01 4.192276249489183e+01 4.174732269647760e+01 4.157268417634100e+01 4.139884275381124e+01 + 4.122579426984368e+01 4.105353458692623e+01 4.088205958898575e+01 4.071136518129959e+01 4.054144729039989e+01 + 4.037230186398577e+01 4.020392487083053e+01 4.003631230069028e+01 3.986946016421615e+01 3.970336449286102e+01 + 3.953802133879138e+01 3.937342677479865e+01 3.920957689420662e+01 3.904646781078663e+01 3.888409565866561e+01 + 3.872245659223881e+01 3.856154678608295e+01 3.840136243486580e+01 3.824189975326037e+01 3.808315497585828e+01 + 3.792512435707974e+01 3.776780417109072e+01 3.761119071171368e+01 3.745528029234323e+01 3.730006924585913e+01 + 3.714555392454046e+01 3.699173069998185e+01 3.683859596300791e+01 3.668614612358731e+01 3.653437761074975e+01 + 3.638328687250168e+01 3.623287037574122e+01 3.608312460617633e+01 3.593404606824011e+01 3.578563128500823e+01 + 3.563787679811730e+01 3.549077916767894e+01 3.534433497220277e+01 3.519854080850950e+01 3.505339329165233e+01 + 3.490888905483502e+01 3.476502474932935e+01 3.462179704439669e+01 3.447920262720543e+01 3.433723820275100e+01 + 3.419590049377793e+01 3.405518624069644e+01 3.391509220150648e+01 3.377561515171676e+01 3.363675188426559e+01 + 3.349849920944334e+01 3.336085395481351e+01 3.322381296513372e+01 3.308737310228052e+01 3.295153124516820e+01 + 3.281628428967440e+01 3.268162914856177e+01 3.254756275140060e+01 3.241408204449431e+01 3.228118399080125e+01 + 3.214886556985902e+01 3.201712377771043e+01 3.188595562682539e+01 3.175535814602785e+01 3.162532838041991e+01 + 3.149586339130665e+01 3.136696025612331e+01 3.123861606835929e+01 3.111082793748575e+01 3.098359298888095e+01 + 3.085690836375689e+01 3.073077121908688e+01 3.060517872753190e+01 3.048012807736892e+01 3.035561647241710e+01 + 3.023164113196741e+01 3.010819929070847e+01 2.998528819865743e+01 2.986290512108675e+01 2.974104733845435e+01 + 2.961971214633204e+01 2.949889685533427e+01 2.937859879104928e+01 2.925881529396803e+01 2.913954371941418e+01 + 2.902078143747566e+01 2.890252583293294e+01 2.878477430519257e+01 2.866752426821674e+01 2.855077315045408e+01 + 2.843451839477398e+01 2.831875745839480e+01 2.820348781281816e+01 2.808870694376161e+01 2.797441235108905e+01 + 2.786060154874598e+01 2.774727206469090e+01 2.763442144082869e+01 2.752204723294561e+01 2.741014701064096e+01 + 2.729871835726216e+01 2.718775886983967e+01 2.707726615901925e+01 2.696723784899922e+01 2.685767157746369e+01 + 2.674856499551823e+01 2.663991576762553e+01 2.653172157153985e+01 2.642398009824459e+01 2.631668905188727e+01 + 2.620984614971545e+01 2.610344912201526e+01 2.599749571204509e+01 2.589198367597526e+01 2.578691078282447e+01 + 2.568227481439560e+01 2.557807356521632e+01 2.547430484247440e+01 2.537096646595726e+01 2.526805626799004e+01 + 2.516557209337314e+01 2.506351179932266e+01 2.496187325540830e+01 2.486065434349264e+01 2.475985295767104e+01 + 2.465946700421117e+01 2.455949440149201e+01 2.445993307994512e+01 2.436078098199462e+01 2.426203606199725e+01 + 2.416369628618369e+01 2.406575963259863e+01 2.396822409104309e+01 2.387108766301533e+01 2.377434836165120e+01 + 2.367800421166865e+01 2.358205324930685e+01 2.348649352227018e+01 2.339132308967058e+01 2.329654002196842e+01 + 2.320214240091826e+01 2.310812831950909e+01 2.301449588190930e+01 2.292124320341003e+01 2.282836841036737e+01 + 2.273586964014822e+01 2.264374504107307e+01 2.255199277236002e+01 2.246061100407142e+01 2.236959791705531e+01 + 2.227895170289277e+01 2.218867056384243e+01 2.209875271278441e+01 2.200919637316795e+01 2.191999977895575e+01 + 2.183116117456954e+01 2.174267881483753e+01 2.165455096493913e+01 2.156677590035239e+01 2.147935190680054e+01 + 2.139227728019779e+01 2.130555032659852e+01 2.121916936214230e+01 2.113313271300244e+01 2.104743871533337e+01 + 2.096208571521848e+01 2.087707206861785e+01 2.079239614131691e+01 2.070805630887438e+01 2.062405095657110e+01 + 2.054037847935875e+01 2.045703728180795e+01 2.037402577805884e+01 2.029134239176940e+01 2.020898555606515e+01 + 2.012695371348894e+01 2.004524531594988e+01 1.996385882467528e+01 1.988279271015912e+01 1.980204545211288e+01 + 1.972161553941679e+01 1.964150147006926e+01 1.956170175113956e+01 1.948221489871736e+01 1.940303943786429e+01 + 1.932417390256672e+01 1.924561683568553e+01 1.916736678890893e+01 1.908942232270466e+01 1.901178200627124e+01 + 1.893444441749112e+01 1.885740814288330e+01 1.878067177755435e+01 1.870423392515415e+01 1.862809319782575e+01 + 1.855224821616109e+01 1.847669760915306e+01 1.840144001414873e+01 1.832647407680444e+01 1.825179845103846e+01 + 1.817741179898477e+01 1.810331279094931e+01 1.802950010536141e+01 1.795597242873052e+01 1.788272845560025e+01 + 1.780976688850256e+01 1.773708643791399e+01 1.766468582220978e+01 1.759256376761964e+01 1.752071900818367e+01 + 1.744915028570691e+01 1.737785634971626e+01 1.730683595741593e+01 1.723608787364351e+01 1.716561087082691e+01 + 1.709540372893938e+01 1.702546523545782e+01 1.695579418531889e+01 1.688638938087523e+01 1.681724963185347e+01 + 1.674837375531105e+01 1.667976057559365e+01 1.661140892429247e+01 1.654331764020266e+01 1.647548556928057e+01 + 1.640791156460172e+01 1.634059448631862e+01 1.627353320162037e+01 1.620672658468987e+01 1.614017351666211e+01 + 1.607387288558495e+01 1.600782358637546e+01 1.594202452078044e+01 1.587647459733565e+01 1.581117273132388e+01 + 1.574611784473628e+01 1.568130886623052e+01 1.561674473109037e+01 1.555242438118775e+01 1.548834676493970e+01 + 1.542451083727116e+01 1.536091555957380e+01 1.529755989966674e+01 1.523444283175813e+01 1.517156333640412e+01 + 1.510892040047163e+01 1.504651301709817e+01 1.498434018565289e+01 1.492240091169903e+01 1.486069420695437e+01 + 1.479921908925268e+01 1.473797458250679e+01 1.467695971666844e+01 1.461617352769189e+01 1.455561505749549e+01 + 1.449528335392335e+01 1.443517747070885e+01 1.437529646743628e+01 1.431563940950381e+01 1.425620536808641e+01 + 1.419699342009801e+01 1.413800264815566e+01 1.407923214054198e+01 1.402068099116856e+01 1.396234829953952e+01 + 1.390423317071502e+01 1.384633471527466e+01 1.378865204928180e+01 1.373118429424718e+01 1.367393057709300e+01 + 1.361689003011738e+01 1.356006179095783e+01 1.350344500255701e+01 1.344703881312631e+01 1.339084237611040e+01 + 1.333485485015340e+01 1.327907539906173e+01 1.322350319177116e+01 1.316813740231076e+01 1.311297720976823e+01 + 1.305802179825650e+01 1.300327035687748e+01 1.294872207968904e+01 1.289437616567058e+01 1.284023181868810e+01 + 1.278628824746134e+01 1.273254466552937e+01 1.267900029121625e+01 1.262565434759896e+01 1.257250606247206e+01 + 1.251955466831549e+01 1.246679940226097e+01 1.241423950605828e+01 1.236187422604329e+01 1.230970281310408e+01 + 1.225772452264810e+01 1.220593861457051e+01 1.215434435321999e+01 1.210294100736743e+01 1.205172785017332e+01 + 1.200070415915468e+01 1.194986921615408e+01 1.189922230730676e+01 1.184876272300869e+01 1.179848975788548e+01 + 1.174840271075949e+01 1.169850088461910e+01 1.164878358658695e+01 1.159925012788824e+01 1.154989982381994e+01 + 1.150073199371877e+01 1.145174596093103e+01 1.140294105278105e+01 1.135431660054040e+01 1.130587193939725e+01 + 1.125760640842545e+01 1.120951935055388e+01 1.116161011253638e+01 1.111387804492112e+01 1.106632250202031e+01 + 1.101894284188014e+01 1.097173842625026e+01 1.092470862055458e+01 1.087785279386097e+01 1.083117031885094e+01 + 1.078466057179144e+01 1.073832293250347e+01 1.069215678433397e+01 1.064616151412611e+01 1.060033651218915e+01 + 1.055468117227067e+01 1.050919489152657e+01 1.046387707049183e+01 1.041872711305291e+01 1.037374442641723e+01 + 1.032892842108565e+01 1.028427851082384e+01 1.023979411263260e+01 1.019547464672112e+01 1.015131953647739e+01 + 1.010732820844006e+01 1.006350009227138e+01 1.001983462072746e+01 9.976331229631647e+00 9.932989357846212e+00 + 9.889808447244027e+00 9.846787942682189e+00 9.803927291972784e+00 9.761225945856612e+00 9.718683357975344e+00 + 9.676298984843685e+00 9.634072285823148e+00 9.592002723093975e+00 9.550089761628675e+00 9.508332869164528e+00 + 9.466731516176942e+00 9.425285175852649e+00 9.383993324063075e+00 9.342855439337340e+00 9.301871002835986e+00 + 9.261039498324518e+00 9.220360412146626e+00 9.179833233198364e+00 9.139457452901739e+00 9.099232565178442e+00 + 9.059158066424072e+00 9.019233455481517e+00 8.979458233615983e+00 8.939831904488598e+00 8.900353974130358e+00 + 8.861023950917733e+00 8.821841345545399e+00 8.782805671002095e+00 8.743916442544743e+00 8.705173177672609e+00 + 8.666575396103097e+00 8.628122619745710e+00 8.589814372677068e+00 8.551650181116766e+00 8.513629573400662e+00 + 8.475752079957974e+00 8.438017233285317e+00 8.400424567921805e+00 8.362973620425777e+00 8.325663929348474e+00 + 8.288495035210829e+00 8.251466480478744e+00 8.214577809538207e+00 8.177828568671869e+00 8.141218306034384e+00 + 8.104746571628061e+00 8.068412917279733e+00 8.032216896615568e+00 7.996158065038109e+00 7.960235979702305e+00 + 7.924450199491049e+00 7.888800284992562e+00 7.853285798476120e+00 7.817906303868561e+00 7.782661366731131e+00 + 7.747550554235553e+00 7.712573435141304e+00 7.677729579772075e+00 7.643018559992464e+00 7.608439949185289e+00 + 7.573993322227730e+00 7.539678255469305e+00 7.505494326708374e+00 7.471441115169445e+00 7.437518201480396e+00 + 7.403725167649897e+00 7.370061597044244e+00 7.336527074365638e+00 7.303121185628912e+00 7.269843518139517e+00 + 7.236693660471105e+00 7.203671202442854e+00 7.170775735097676e+00 7.138006850679947e+00 7.105364142612978e+00 + 7.072847205477794e+00 7.040455634990108e+00 7.008189027979162e+00 6.976046982365775e+00 6.944029097139913e+00 + 6.912134972339915e+00 6.880364209030189e+00 6.848716409279452e+00 6.817191176140028e+00 6.785788113625245e+00 + 6.754506826688816e+00 6.723346921203356e+00 6.692308003938471e+00 6.661389682540523e+00 6.630591565510550e+00 + 6.599913262183454e+00 6.569354382707374e+00 6.538914538021731e+00 6.508593339837104e+00 6.478390400614194e+00 + 6.448305333542394e+00 6.418337752519895e+00 6.388487272132469e+00 6.358753507632562e+00 6.329136074919584e+00 + 6.299634590518303e+00 6.270248671559087e+00 6.240977935757176e+00 6.211822001392469e+00 6.182780487289014e+00 + 6.153853012794830e+00 6.125039197761667e+00 6.096338662525123e+00 6.067751027884117e+00 6.039275915081143e+00 + 6.010912945782210e+00 5.982661742056677e+00 5.954521926357831e+00 5.926493121502772e+00 5.898574950652534e+00 + 5.870767037292838e+00 5.843069005213625e+00 5.815480478490322e+00 5.788001081463795e+00 5.760630438720564e+00 + 5.733368175074372e+00 5.706213915545522e+00 5.679167285342282e+00 5.652227909841657e+00 5.625395414569441e+00 + 5.598669425181816e+00 5.572049567445784e+00 5.545535467219844e+00 5.519126750435792e+00 5.492823043078544e+00 + 5.466623971168135e+00 5.440529160740564e+00 5.414538237828422e+00 5.388650828442925e+00 5.362866558554671e+00 + 5.337185054074683e+00 5.311605940836664e+00 5.286128844577174e+00 5.260753390918180e+00 5.235479205347759e+00 + 5.210305913201912e+00 5.185233139646423e+00 5.160260509657849e+00 5.135387648005725e+00 5.110614179234218e+00 + 5.085939727643384e+00 5.061363917271827e+00 5.036886371877756e+00 5.012506714921395e+00 4.988224569546780e+00 + 4.964039558563505e+00 4.939951304429113e+00 4.915959429231121e+00 4.892063554668883e+00 4.868263302036166e+00 + 4.844558292202816e+00 4.820948145597548e+00 4.797432482189943e+00 4.774010921472941e+00 4.750683082445052e+00 + 4.727448583593064e+00 4.704307042874011e+00 4.681258077698364e+00 4.658301304912094e+00 4.635436340779192e+00 + 4.612662800984437e+00 4.589980301311781e+00 4.567388459118002e+00 4.544886893662785e+00 4.522475226100447e+00 + 4.500153079471392e+00 4.477920078691954e+00 4.455775850545454e+00 4.433720023673174e+00 4.411752228564562e+00 + 4.389872097548642e+00 4.368079264784613e+00 4.346373366252480e+00 4.324754039744810e+00 4.303220924856724e+00 + 4.281773662977624e+00 4.260411897282061e+00 4.239135272720528e+00 4.217943436011168e+00 4.196836035630533e+00 + 4.175812721804735e+00 4.154873146501309e+00 4.134016963419636e+00 4.113243827982917e+00 4.092553397329378e+00 + 4.071945330303371e+00 4.051419287447337e+00 4.030974930992876e+00 4.010611924852291e+00 3.990329934610572e+00 + 3.970128627516233e+00 3.950007672473622e+00 3.929966740034229e+00 3.910005502388334e+00 3.890123633357151e+00 + 3.870320808383910e+00 3.850596704526304e+00 3.830951000447895e+00 3.811383376410359e+00 3.791893514264968e+00 + 3.772481097444870e+00 3.753145810956778e+00 3.733887341373201e+00 3.714705376824528e+00 3.695599606990787e+00 + 3.676569723094194e+00 3.657615417890649e+00 3.638736385662737e+00 3.619932322211342e+00 3.601202924847866e+00 + 3.582547892387094e+00 3.563966925138796e+00 3.545459724900460e+00 3.527025994949696e+00 3.508665440036192e+00 + 3.490377766374898e+00 3.472162681637859e+00 3.454019894946770e+00 3.435949116866093e+00 3.417950059394822e+00 + 3.400022435959661e+00 3.382165961407408e+00 3.364380351997492e+00 3.346665325395070e+00 3.329020600663389e+00 + 3.311445898256423e+00 3.293940940012313e+00 3.276505449145376e+00 3.259139150239444e+00 3.241841769240601e+00 + 3.224613033449911e+00 3.207452671516806e+00 3.190360413431512e+00 3.173335990518376e+00 3.156379135428829e+00 + 3.139489582134207e+00 3.122667065919253e+00 3.105911323374844e+00 3.089222092391304e+00 3.072599112151467e+00 + 3.056042123124052e+00 3.039550867056602e+00 3.023125086969060e+00 3.006764527146631e+00 2.990468933133598e+00 + 2.974238051726276e+00 2.958071630966291e+00 2.941969420134504e+00 2.925931169743829e+00 2.909956631532982e+00 + 2.894045558459915e+00 2.878197704695192e+00 2.862412825615752e+00 2.846690677798200e+00 2.831031019012456e+00 + 2.815433608215537e+00 2.799898205544946e+00 2.784424572312442e+00 2.769012470997656e+00 2.753661665241841e+00 + 2.738371919841735e+00 2.723143000743114e+00 2.707974675034452e+00 2.692866710941310e+00 2.677818877819492e+00 + 2.662830946149358e+00 2.647902687529500e+00 2.633033874670541e+00 2.618224281389629e+00 2.603473682603599e+00 + 2.588781854323581e+00 2.574148573648829e+00 2.559573618760405e+00 2.545056768915928e+00 2.530597804443031e+00 + 2.516196506733719e+00 2.501852658238634e+00 2.487566042460900e+00 2.473336443950497e+00 2.459163648298495e+00 + 2.445047442131045e+00 2.430987613104020e+00 2.416983949896873e+00 2.403036242207069e+00 2.389144280744604e+00 + 2.375307857226069e+00 2.361526764369182e+00 2.347800795887102e+00 2.334129746482714e+00 2.320513411843401e+00 + 2.306951588635250e+00 2.293444074497272e+00 2.279990668036662e+00 2.266591168822486e+00 2.253245377380730e+00 + 2.239953095188698e+00 2.226714124669427e+00 2.213528269186815e+00 2.200395333039660e+00 2.187315121456555e+00 + 2.174287440590724e+00 2.161312097514302e+00 2.148388900213576e+00 2.135517657583172e+00 2.122698179421138e+00 + 2.109930276423767e+00 2.097213760180145e+00 2.084548443167107e+00 2.071934138744207e+00 2.059370661148065e+00 + 2.046857825488010e+00 2.034395447740410e+00 2.021983344743568e+00 2.009621334193179e+00 1.997309234636694e+00 + 1.985046865468656e+00 1.972834046925575e+00 1.960670600080829e+00 1.948556346840064e+00 1.936491109935845e+00 + 1.924474712922881e+00 1.912506980173293e+00 1.900587736871379e+00 1.888716809009021e+00 1.876894023380785e+00 + 1.865119207578901e+00 1.853392189988783e+00 1.841712799784000e+00 1.830080866921366e+00 1.818496222136643e+00 + 1.806958696939369e+00 1.795468123608344e+00 1.784024335186931e+00 1.772627165478091e+00 1.761276449040270e+00 + 1.749972021182240e+00 1.738713717958681e+00 1.727501376165632e+00 1.716334833335623e+00 1.705213927733501e+00 + 1.694138498351584e+00 1.683108384905034e+00 1.672123427827729e+00 1.661183468267390e+00 1.650288348081216e+00 + 1.639437909831426e+00 1.628631996780848e+00 1.617870452888298e+00 1.607153122804353e+00 1.596479851866879e+00 + 1.585850486096622e+00 1.575264872192821e+00 1.564722857528934e+00 1.554224290148171e+00 1.543769018759317e+00 + 1.533356892732311e+00 1.522987762094010e+00 1.512661477523924e+00 1.502377890349857e+00 1.492136852543834e+00 + 1.481938216717736e+00 1.471781836119155e+00 1.461667564627161e+00 1.451595256748155e+00 1.441564767611692e+00 + 1.431575952966374e+00 1.421628669175570e+00 1.411722773213510e+00 1.401858122661042e+00 1.392034575701590e+00 + 1.382251991117042e+00 1.372510228283810e+00 1.362809147168584e+00 1.353148608324488e+00 1.343528472887046e+00 + 1.333948602570079e+00 1.324408859661822e+00 1.314909107020905e+00 1.305449208072446e+00 1.296029026804035e+00 + 1.286648427761911e+00 1.277307276046963e+00 1.268005437310909e+00 1.258742777752323e+00 1.249519164112858e+00 + 1.240334463673355e+00 1.231188544250033e+00 1.222081274190547e+00 1.213012522370361e+00 1.203982158188807e+00 + 1.194990051565381e+00 1.186036072935901e+00 1.177120093248810e+00 1.168241983961418e+00 1.159401617036181e+00 + 1.150598864936961e+00 1.141833600625332e+00 1.133105697556927e+00 1.124415029677647e+00 1.115761471420175e+00 + 1.107144897700175e+00 1.098565183912732e+00 1.090022205928715e+00 1.081515840091119e+00 1.073045963211572e+00 + 1.064612452566622e+00 1.056215185894267e+00 1.047854041390364e+00 1.039528897705007e+00 1.031239633939121e+00 + 1.022986129640866e+00 1.014768264802145e+00 1.006585919855045e+00 9.984389756684801e-01 9.903273135446030e-01 + 9.822508152154082e-01 9.742093628392352e-01 9.662028389973587e-01 9.582311266906002e-01 9.502941093358241e-01 + 9.423916707626767e-01 9.345236952100229e-01 9.266900673227085e-01 9.188906721481011e-01 9.111253951328451e-01 + 9.033941221194010e-01 8.956967393427846e-01 8.880331334272610e-01 8.804031913829442e-01 8.728068006026135e-01 + 8.652438488583921e-01 8.577142242984056e-01 8.502178154436311e-01 8.427545111845509e-01 8.353242007779756e-01 + 8.279267738437964e-01 8.205621203617139e-01 8.132301306681471e-01 8.059306954529140e-01 7.986637057561503e-01 + 7.914290529650345e-01 7.842266288107618e-01 7.770563253651749e-01 7.699180350378541e-01 7.628116505728531e-01 + 7.557370650456214e-01 7.486941718598701e-01 7.416828647444645e-01 7.347030377503992e-01 7.277545852476291e-01 + 7.208374019220541e-01 7.139513827724407e-01 7.070964231074183e-01 7.002724185423663e-01 6.934792649964288e-01 + 6.867168586895047e-01 6.799850961392301e-01 6.732838741579268e-01 6.666130898497350e-01 6.599726406074945e-01 + 6.533624241098983e-01 6.467823383184316e-01 6.402322814744908e-01 6.337121520964275e-01 6.272218489766089e-01 + 6.207612711784971e-01 6.143303180337611e-01 6.079288891393009e-01 6.015568843544575e-01 5.952142037980943e-01 + 5.889007478456828e-01 5.826164171264790e-01 5.763611125206967e-01 5.701347351565679e-01 5.639371864075745e-01 + 5.577683678896429e-01 5.516281814582515e-01 5.455165292057105e-01 5.394333134582663e-01 5.333784367733995e-01 + 5.273518019369698e-01 5.213533119605117e-01 5.153828700784110e-01 5.094403797451691e-01 5.035257446326564e-01 + 4.976388686274215e-01 4.917796558278603e-01 4.859480105415648e-01 4.801438372826372e-01 4.743670407689158e-01 + 4.686175259193253e-01 4.628951978511510e-01 4.571999618774475e-01 4.515317235042200e-01 4.458903884279151e-01 + 4.402758625327055e-01 4.346880518878101e-01 4.291268627449178e-01 4.235922015354998e-01 4.180839748682681e-01 + 4.126020895264665e-01 4.071464524653613e-01 4.017169708095674e-01 3.963135518504945e-01 3.909361030438095e-01 + 3.855845320067642e-01 3.802587465157333e-01 3.749586545035676e-01 3.696841640571185e-01 3.644351834146782e-01 + 3.592116209633923e-01 3.540133852368759e-01 3.488403849124828e-01 3.436925288089546e-01 3.385697258838968e-01 + 3.334718852312641e-01 3.283989160788470e-01 3.233507277858437e-01 3.183272298403194e-01 3.133283318568030e-01 + 3.083539435738327e-01 3.034039748514419e-01 2.984783356687986e-01 2.935769361216686e-01 2.886996864201087e-01 + 2.838464968859363e-01 2.790172779503823e-01 2.742119401516568e-01 2.694303941325703e-01 2.646725506380950e-01 + 2.599383205130464e-01 2.552276146996211e-01 2.505403442351217e-01 2.458764202495218e-01 2.412357539631229e-01 + 2.366182566842129e-01 2.320238398067430e-01 2.274524148079101e-01 2.229038932459355e-01 2.183781867576622e-01 + 2.138752070562706e-01 2.093948659289587e-01 2.049370752346371e-01 2.005017469016403e-01 1.960887929254289e-01 + 1.916981253663058e-01 1.873296563471624e-01 1.829832980511424e-01 1.786589627194394e-01 1.743565626490449e-01 + 1.700760101904446e-01 1.658172177454271e-01 1.615800977647709e-01 1.573645627461043e-01 1.531705252316189e-01 + 1.489978978058863e-01 1.448465930935696e-01 1.407165237573240e-01 1.366076024955152e-01 1.325197420400579e-01 + 1.284528551770627e-01 1.244068549109786e-01 1.203816545835814e-01 1.163771678794684e-01 1.123933088248479e-01 + 1.084299917859774e-01 1.044871314678827e-01 1.005646429129689e-01 9.666244149962336e-02 9.278044294093042e-02 + 8.891856328326010e-02 8.507671890495247e-02 8.125482651492469e-02 7.745280315142496e-02 7.367056618064396e-02 + 6.990803329539529e-02 6.616512251382445e-02 6.244175217805844e-02 5.873784095293907e-02 5.505330782471297e-02 + 5.138807209970360e-02 4.774205340306011e-02 4.411517167746844e-02 4.050734718187685e-02 3.691850049018999e-02 + 3.334855249003175e-02 2.979742438148665e-02 2.626503767583784e-02 2.275131419427759e-02 1.925617606672326e-02 + 1.577954573055541e-02 1.232134592935888e-02 8.881499711726960e-03 5.459930430004230e-03 2.056561739096700e-03 + -1.328682404767517e-03 -4.695877745199581e-03 -8.045099726958113e-03 -1.137642349700526e-02 -1.468992390581868e-02 + -1.798567550849994e-02 -2.126375256604388e-02 -2.452422904642609e-02 -2.776717862581702e-02 -3.099267468976436e-02 + -3.420079033433134e-02 -3.739159836725407e-02 -4.056517130915015e-02 -4.372158139458357e-02 -4.686090057326460e-02 + -4.998320051114372e-02 -5.308855259161664e-02 -5.617702791657462e-02 -5.924869730760597e-02 -6.230363130703898e-02 + -6.534190017910750e-02 -6.836357391105545e-02 -7.136872221419481e-02 -7.435741452511502e-02 -7.732972000665117e-02 + -8.028570754904664e-02 -8.322544577103416e-02 -8.614900302092927e-02 -8.905644737765582e-02 -9.194784665187250e-02 + -9.482326838702702e-02 -9.768277986039825e-02 -1.005264480841977e-01 -1.033543398065786e-01 -1.061665215127225e-01 + -1.089630594258708e-01 -1.117440195083512e-01 -1.145094674626706e-01 -1.172594687324688e-01 -1.199940885036170e-01 + -1.227133917051920e-01 -1.254174430105297e-01 -1.281063068382317e-01 -1.307800473531549e-01 -1.334387284674846e-01 + -1.360824138416465e-01 -1.387111668853625e-01 -1.413250507586487e-01 -1.439241283727702e-01 -1.465084623912609e-01 + -1.490781152308980e-01 -1.516331490626576e-01 -1.541736258127362e-01 -1.566996071634631e-01 -1.592111545543137e-01 + -1.617083291828272e-01 -1.641911920056306e-01 -1.666598037393228e-01 -1.691142248614502e-01 -1.715545156114835e-01 + -1.739807359916819e-01 -1.763929457681409e-01 -1.787912044716221e-01 -1.811755713985734e-01 -1.835461056119560e-01 + -1.859028659422536e-01 -1.882459109883583e-01 -1.905752991184608e-01 -1.928910884710336e-01 -1.951933369556478e-01 + -1.974821022539397e-01 -1.997574418204710e-01 -2.020194128836759e-01 -2.042680724467016e-01 -2.065034772883179e-01 + -2.087256839637963e-01 -2.109347488058004e-01 -2.131307279252683e-01 -2.153136772122745e-01 -2.174836523368936e-01 + -2.196407087500562e-01 -2.217849016844791e-01 -2.239162861554468e-01 -2.260349169616924e-01 -2.281408486862806e-01 + -2.302341356974058e-01 -2.323148321492708e-01 -2.343829919829198e-01 -2.364386689270964e-01 -2.384819164990271e-01 + -2.405127880053071e-01 -2.425313365426985e-01 -2.445376149989555e-01 -2.465316760536560e-01 -2.485135721790400e-01 + -2.504833556407610e-01 -2.524410784987640e-01 -2.543867926080461e-01 -2.563205496194905e-01 -2.582424009806452e-01 + -2.601523979365374e-01 -2.620505915304850e-01 -2.639370326048261e-01 -2.658117718017723e-01 -2.676748595641544e-01 + -2.695263461362243e-01 -2.713662815644113e-01 -2.731947156981301e-01 -2.750116981905363e-01 -2.768172784992608e-01 + -2.786115058872192e-01 -2.803944294233929e-01 -2.821660979835196e-01 -2.839265602509042e-01 -2.856758647171534e-01 + -2.874140596829106e-01 -2.891411932586440e-01 -2.908573133653345e-01 -2.925624677352915e-01 -2.942567039128065e-01 + -2.959400692549439e-01 -2.976126109322416e-01 -2.992743759294846e-01 -3.009254110463699e-01 -3.025657628982811e-01 + -3.041954779169662e-01 -3.058146023512905e-01 -3.074231822679283e-01 -3.090212635520883e-01 -3.106088919082178e-01 + -3.121861128606702e-01 -3.137529717544789e-01 -3.153095137560057e-01 -3.168557838536582e-01 -3.183918268585680e-01 + -3.199176874052821e-01 -3.214334099524758e-01 -3.229390387836064e-01 -3.244346180076274e-01 -3.259201915596340e-01 + -3.273958032015747e-01 -3.288614965228901e-01 -3.303173149412112e-01 -3.317633017030133e-01 -3.331994998843112e-01 + -3.346259523912713e-01 -3.360427019609168e-01 -3.374497911617634e-01 -3.388472623944848e-01 -3.402351578925532e-01 + -3.416135197229017e-01 -3.429823897865841e-01 -3.443418098193779e-01 -3.456918213924676e-01 -3.470324659130598e-01 + -3.483637846250315e-01 -3.496858186095617e-01 -3.509986087857613e-01 -3.523021959113238e-01 -3.535966205831011e-01 + -3.548819232377647e-01 -3.561581441524522e-01 -3.574253234453196e-01 -3.586835010762260e-01 -3.599327168472828e-01 + -3.611730104035293e-01 -3.624044212334842e-01 -3.636269886698147e-01 -3.648407518898746e-01 -3.660457499163503e-01 + -3.672420216178365e-01 -3.684296057094698e-01 -3.696085407534776e-01 -3.707788651597906e-01 -3.719406171866457e-01 + -3.730938349411396e-01 -3.742385563798445e-01 -3.753748193093961e-01 -3.765026613870533e-01 -3.776221201212621e-01 + -3.787332328722756e-01 -3.798360368526863e-01 -3.809305691280234e-01 -3.820168666173251e-01 -3.830949660936693e-01 + -3.841649041847720e-01 -3.852267173735459e-01 -3.862804419986352e-01 -3.873261142550198e-01 -3.883637701945205e-01 + -3.893934457263795e-01 -3.904151766178028e-01 -3.914289984945251e-01 -3.924349468413246e-01 -3.934330570025930e-01 + -3.944233641828842e-01 -3.954059034474297e-01 -3.963807097226779e-01 -3.973478177968615e-01 -3.983072623204877e-01 + -3.992590778069047e-01 -4.002032986328107e-01 -4.011399590387960e-01 -4.020690931298508e-01 -4.029907348759087e-01 + -4.039049181123409e-01 -4.048116765404994e-01 -4.057110437282286e-01 -4.066030531103722e-01 -4.074877379892861e-01 + -4.083651315353587e-01 -4.092352667875090e-01 -4.100981766537065e-01 -4.109538939114675e-01 -4.118024512083461e-01 + -4.126438810624441e-01 -4.134782158629402e-01 -4.143054878705253e-01 -4.151257292179480e-01 -4.159389719104870e-01 + -4.167452478264305e-01 -4.175445887176054e-01 -4.183370262098177e-01 -4.191225918033580e-01 -4.199013168735009e-01 + -4.206732326709396e-01 -4.214383703223147e-01 -4.221967608306660e-01 -4.229484350759363e-01 -4.236934238153774e-01 + -4.244317576840932e-01 -4.251634671954816e-01 -4.258885827416927e-01 -4.266071345941294e-01 -4.273191529038617e-01 + -4.280246677021214e-01 -4.287237089007595e-01 -4.294163062927144e-01 -4.301024895524314e-01 -4.307822882363627e-01 + -4.314557317833937e-01 -4.321228495152951e-01 -4.327836706371986e-01 -4.334382242379995e-01 -4.340865392908534e-01 + -4.347286446535799e-01 -4.353645690691347e-01 -4.359943411660291e-01 -4.366179894587786e-01 -4.372355423483457e-01 + -4.378470281225629e-01 -4.384524749565775e-01 -4.390519109132727e-01 -4.396453639437279e-01 -4.402328618876056e-01 + -4.408144324736016e-01 -4.413901033198709e-01 -4.419599019344536e-01 -4.425238557156836e-01 -4.430819919526221e-01 + -4.436343378254720e-01 -4.441809204059955e-01 -4.447217666579382e-01 -4.452569034374185e-01 -4.457863574933799e-01 + -4.463101554679531e-01 -4.468283238969095e-01 -4.473408892100464e-01 -4.478478777315916e-01 -4.483493156806204e-01 + -4.488452291714454e-01 -4.493356442140187e-01 -4.498205867143624e-01 -4.503000824749173e-01 -4.507741571949616e-01 + -4.512428364710219e-01 -4.517061457972442e-01 -4.521641105657935e-01 -4.526167560672623e-01 -4.530641074910190e-01 + -4.535061899256283e-01 -4.539430283592286e-01 -4.543746476799236e-01 -4.548010726761367e-01 -4.552223280370362e-01 + -4.556384383528748e-01 -4.560494281153836e-01 -4.564553217181717e-01 -4.568561434570674e-01 -4.572519175304953e-01 + -4.576426680398754e-01 -4.580284189899756e-01 -4.584091942892721e-01 -4.587850177503439e-01 -4.591559130902201e-01 + -4.595219039307485e-01 -4.598830137989582e-01 -4.602392661274434e-01 -4.605906842546850e-01 -4.609372914254449e-01 + -4.612791107911075e-01 -4.616161654100372e-01 -4.619484782479524e-01 -4.622760721782430e-01 -4.625989699823694e-01 + -4.629171943501736e-01 -4.632307678802506e-01 -4.635397130802937e-01 -4.638440523674353e-01 -4.641438080686026e-01 + -4.644390024208574e-01 -4.647296575717468e-01 -4.650157955796300e-01 -4.652974384140222e-01 -4.655746079559532e-01 + -4.658473259982778e-01 -4.661156142460532e-01 -4.663794943168157e-01 -4.666389877409668e-01 -4.668941159620683e-01 + -4.671449003372185e-01 -4.673913621373426e-01 -4.676335225475269e-01 -4.678714026673784e-01 -4.681050235112959e-01 + -4.683344060088593e-01 -4.685595710051007e-01 -4.687805392608567e-01 -4.689973314530860e-01 -4.692099681751815e-01 + -4.694184699372852e-01 -4.696228571666247e-01 -4.698231502078187e-01 -4.700193693231891e-01 -4.702115346930843e-01 + -4.703996664161776e-01 -4.705837845097923e-01 -4.707639089102184e-01 -4.709400594729968e-01 -4.711122559732588e-01 + -4.712805181059950e-01 -4.714448654864083e-01 -4.716053176501748e-01 -4.717618940537731e-01 -4.719146140747824e-01 + -4.720634970121747e-01 -4.722085620866210e-01 -4.723498284407942e-01 -4.724873151396647e-01 -4.726210411707873e-01 + -4.727510254446071e-01 -4.728772867947550e-01 -4.729998439783352e-01 -4.731187156762063e-01 -4.732339204933063e-01 + -4.733454769589109e-01 -4.734534035269299e-01 -4.735577185761909e-01 -4.736584404107488e-01 -4.737555872601465e-01 + -4.738491772796940e-01 -4.739392285507956e-01 -4.740257590811688e-01 -4.741087868051752e-01 -4.741883295840841e-01 + -4.742644052063367e-01 -4.743370313878497e-01 -4.744062257722810e-01 -4.744720059313051e-01 -4.745343893648669e-01 + -4.745933935014941e-01 -4.746490356985626e-01 -4.747013332425246e-01 -4.747503033492410e-01 -4.747959631642038e-01 + -4.748383297628252e-01 -4.748774201507002e-01 -4.749132512638847e-01 -4.749458399691437e-01 -4.749752030642187e-01 + -4.750013572780920e-01 -4.750243192712693e-01 -4.750441056360086e-01 -4.750607328965978e-01 -4.750742175096198e-01 + -4.750845758641872e-01 -4.750918242822288e-01 -4.750959790187394e-01 -4.750970562620120e-01 -4.750950721339195e-01 + -4.750900426901474e-01 -4.750819839204654e-01 -4.750709117489764e-01 -4.750568420343447e-01 -4.750397905700711e-01 + -4.750197730847343e-01 -4.749968052422330e-01 -4.749709026420343e-01 -4.749420808194326e-01 -4.749103552457691e-01 + -4.748757413286987e-01 -4.748382544124283e-01 -4.747979097779449e-01 -4.747547226432774e-01 -4.747087081637295e-01 + -4.746598814321030e-01 -4.746082574789627e-01 -4.745538512728568e-01 -4.744966777205579e-01 -4.744367516673028e-01 + -4.743740878970119e-01 -4.743087011325590e-01 -4.742406060359583e-01 -4.741698172086285e-01 -4.740963491916135e-01 + -4.740202164658138e-01 -4.739414334522169e-01 -4.738600145121280e-01 -4.737759739473920e-01 -4.736893260006224e-01 + -4.736000848554337e-01 -4.735082646366681e-01 -4.734138794106005e-01 -4.733169431851845e-01 -4.732174699102648e-01 + -4.731154734778030e-01 -4.730109677220866e-01 -4.729039664199755e-01 -4.727944832910970e-01 -4.726825319980685e-01 + -4.725681261467200e-01 -4.724512792863214e-01 -4.723320049097726e-01 -4.722103164538504e-01 -4.720862272993950e-01 + -4.719597507715304e-01 -4.718309001398912e-01 -4.716996886188288e-01 -4.715661293676178e-01 -4.714302354906563e-01 + -4.712920200377031e-01 -4.711514960040607e-01 -4.710086763307934e-01 -4.708635739049467e-01 -4.707162015597322e-01 + -4.705665720747447e-01 -4.704146981761608e-01 -4.702605925369638e-01 -4.701042677771201e-01 -4.699457364637905e-01 + -4.697850111115414e-01 -4.696221041825355e-01 -4.694570280867417e-01 -4.692897951821250e-01 -4.691204177748465e-01 + -4.689489081194748e-01 -4.687752784191629e-01 -4.685995408258664e-01 -4.684217074405129e-01 -4.682417903132262e-01 + -4.680598014435052e-01 -4.678757527804068e-01 -4.676896562227751e-01 -4.675015236193920e-01 -4.673113667691884e-01 + -4.671191974214435e-01 -4.669250272759565e-01 -4.667288679832497e-01 -4.665307311447420e-01 -4.663306283129641e-01 + -4.661285709917151e-01 -4.659245706362672e-01 -4.657186386535465e-01 -4.655107864023225e-01 -4.653010251933785e-01 + -4.650893662897153e-01 -4.648758209067220e-01 -4.646604002123618e-01 -4.644431153273494e-01 -4.642239773253394e-01 + -4.640029972330991e-01 -4.637801860307005e-01 -4.635555546516759e-01 -4.633291139832276e-01 -4.631008748663768e-01 + -4.628708480961548e-01 -4.626390444217817e-01 -4.624054745468394e-01 -4.621701491294375e-01 -4.619330787824019e-01 + -4.616942740734386e-01 -4.614537455253082e-01 -4.612115036160014e-01 -4.609675587789148e-01 -4.607219214030117e-01 + -4.604746018329950e-01 -4.602256103694822e-01 -4.599749572691766e-01 -4.597226527450231e-01 -4.594687069663918e-01 + -4.592131300592309e-01 -4.589559321062432e-01 -4.586971231470549e-01 -4.584367131783647e-01 -4.581747121541278e-01 + -4.579111299857050e-01 -4.576459765420438e-01 -4.573792616498222e-01 -4.571109950936174e-01 -4.568411866160735e-01 + -4.565698459180598e-01 -4.562969826588261e-01 -4.560226064561707e-01 -4.557467268865966e-01 -4.554693534854669e-01 + -4.551904957471677e-01 -4.549101631252565e-01 -4.546283650326408e-01 -4.543451108417039e-01 -4.540604098844917e-01 + -4.537742714528391e-01 -4.534867047985492e-01 -4.531977191335333e-01 -4.529073236299647e-01 -4.526155274204399e-01 + -4.523223395981290e-01 -4.520277692169113e-01 -4.517318252915524e-01 -4.514345167978363e-01 -4.511358526727233e-01 + -4.508358418144944e-01 -4.505344930829079e-01 -4.502318152993443e-01 -4.499278172469504e-01 -4.496225076707799e-01 + -4.493158952779696e-01 -4.490079887378519e-01 -4.486987966821160e-01 -4.483883277049593e-01 -4.480765903632109e-01 + -4.477635931765017e-01 -4.474493446273838e-01 -4.471338531614995e-01 -4.468171271876915e-01 -4.464991750781740e-01 + -4.461800051686558e-01 -4.458596257584943e-01 -4.455380451108262e-01 -4.452152714527109e-01 -4.448913129752649e-01 + -4.445661778338122e-01 -4.442398741480117e-01 -4.439124100019932e-01 -4.435837934445122e-01 -4.432540324890672e-01 + -4.429231351140376e-01 -4.425911092628348e-01 -4.422579628440284e-01 -4.419237037314669e-01 -4.415883397644404e-01 + -4.412518787477896e-01 -4.409143284520474e-01 -4.405756966135796e-01 -4.402359909347059e-01 -4.398952190838318e-01 + -4.395533886955935e-01 -4.392105073709716e-01 -4.388665826774278e-01 -4.385216221490429e-01 -4.381756332866276e-01 + -4.378286235578683e-01 -4.374806003974559e-01 -4.371315712071950e-01 -4.367815433561539e-01 -4.364305241807742e-01 + -4.360785209850022e-01 -4.357255410404288e-01 -4.353715915863917e-01 -4.350166798301134e-01 -4.346608129468261e-01 + -4.343039980798920e-01 -4.339462423409317e-01 -4.335875528099410e-01 -4.332279365354222e-01 -4.328674005344869e-01 + -4.325059517930095e-01 -4.321435972657188e-01 -4.317803438763408e-01 -4.314161985177001e-01 -4.310511680518516e-01 + -4.306852593102004e-01 -4.303184790936203e-01 -4.299508341725593e-01 -4.295823312871853e-01 -4.292129771474699e-01 + -4.288427784333342e-01 -4.284717417947512e-01 -4.280998738518690e-01 -4.277271811951201e-01 -4.273536703853397e-01 + -4.269793479538845e-01 -4.266042204027427e-01 -4.262282942046541e-01 -4.258515758032150e-01 -4.254740716129992e-01 + -4.250957880196697e-01 -4.247167313800879e-01 -4.243369080224274e-01 -4.239563242462950e-01 -4.235749863228220e-01 + -4.231929004947953e-01 -4.228100729767542e-01 -4.224265099551086e-01 -4.220422175882484e-01 -4.216572020066444e-01 + -4.212714693129675e-01 -4.208850255821933e-01 -4.204978768617071e-01 -4.201100291714192e-01 -4.197214885038574e-01 + -4.193322608242989e-01 -4.189423520708486e-01 -4.185517681545620e-01 -4.181605149595555e-01 -4.177685983430907e-01 + -4.173760241357025e-01 -4.169827981412855e-01 -4.165889261372134e-01 -4.161944138744371e-01 -4.157992670775694e-01 + -4.154034914450244e-01 -4.150070926490952e-01 -4.146100763360574e-01 -4.142124481262816e-01 -4.138142136143196e-01 + -4.134153783690241e-01 -4.130159479336332e-01 -4.126159278258805e-01 -4.122153235380931e-01 -4.118141405372848e-01 + -4.114123842652692e-01 -4.110100601387416e-01 -4.106071735493937e-01 -4.102037298639951e-01 -4.097997344245059e-01 + -4.093951925481660e-01 -4.089901095275951e-01 -4.085844906308891e-01 -4.081783411017212e-01 -4.077716661594177e-01 + -4.073644709990864e-01 -4.069567607916758e-01 -4.065485406841069e-01 -4.061398157993360e-01 -4.057305912364691e-01 + -4.053208720708403e-01 -4.049106633541245e-01 -4.044999701144098e-01 -4.040887973563111e-01 -4.036771500610402e-01 + -4.032650331865167e-01 -4.028524516674513e-01 -4.024394104154334e-01 -4.020259143190380e-01 -4.016119682438973e-01 + -4.011975770327985e-01 -4.007827455057827e-01 -4.003674784602204e-01 -3.999517806709105e-01 -3.995356568901643e-01 + -3.991191118478982e-01 -3.987021502517233e-01 -3.982847767870198e-01 -3.978669961170498e-01 -3.974488128830166e-01 + -3.970302317041749e-01 -3.966112571779090e-01 -3.961918938798134e-01 -3.957721463637840e-01 -3.953520191621047e-01 + -3.949315167855397e-01 -3.945106437234024e-01 -3.940894044436516e-01 -3.936678033929785e-01 -3.932458449968794e-01 + -3.928235336597472e-01 -3.924008737649589e-01 -3.919778696749529e-01 -3.915545257313107e-01 -3.911308462548441e-01 + -3.907068355456779e-01 -3.902824978833218e-01 -3.898578375267718e-01 -3.894328587145747e-01 -3.890075656649072e-01 + -3.885819625756786e-01 -3.881560536245893e-01 -3.877298429692143e-01 -3.873033347471000e-01 -3.868765330758216e-01 + -3.864494420530757e-01 -3.860220657567540e-01 -3.855944082450307e-01 -3.851664735564277e-01 -3.847382657099024e-01 + -3.843097887049221e-01 -3.838810465215466e-01 -3.834520431204942e-01 -3.830227824432340e-01 -3.825932684120454e-01 + -3.821635049301154e-01 -3.817334958815909e-01 -3.813032451316750e-01 -3.808727565266886e-01 -3.804420338941629e-01 + -3.800110810428943e-01 -3.795799017630236e-01 -3.791484998261256e-01 -3.787168789852677e-01 -3.782850429750875e-01 + -3.778529955118761e-01 -3.774207402936319e-01 -3.769882810001542e-01 -3.765556212930997e-01 -3.761227648160705e-01 + -3.756897151946748e-01 -3.752564760365993e-01 -3.748230509316866e-01 -3.743894434520073e-01 -3.739556571519255e-01 + -3.735216955681692e-01 -3.730875622199170e-01 -3.726532606088387e-01 -3.722187942191943e-01 -3.717841665178908e-01 + -3.713493809545508e-01 -3.709144409615882e-01 -3.704793499542680e-01 -3.700441113307890e-01 -3.696087284723371e-01 + -3.691732047431630e-01 -3.687375434906512e-01 -3.683017480453854e-01 -3.678658217212094e-01 -3.674297678153078e-01 + -3.669935896082615e-01 -3.665572903641225e-01 -3.661208733304759e-01 -3.656843417385093e-01 -3.652476988030719e-01 + -3.648109477227537e-01 -3.643740916799328e-01 -3.639371338408637e-01 -3.635000773557227e-01 -3.630629253586778e-01 + -3.626256809679619e-01 -3.621883472859287e-01 -3.617509273991160e-01 -3.613134243783145e-01 -3.608758412786324e-01 + -3.604381811395513e-01 -3.600004469850010e-01 -3.595626418234094e-01 -3.591247686477773e-01 -3.586868304357299e-01 + -3.582488301495880e-01 -3.578107707364258e-01 -3.573726551281340e-01 -3.569344862414776e-01 -3.564962669781689e-01 + -3.560580002249100e-01 -3.556196888534721e-01 -3.551813357207421e-01 -3.547429436687960e-01 -3.543045155249455e-01 + -3.538660541018055e-01 -3.534275621973603e-01 -3.529890425950065e-01 -3.525504980636283e-01 -3.521119313576445e-01 + -3.516733452170775e-01 -3.512347423676107e-01 -3.507961255206355e-01 -3.503574973733246e-01 -3.499188606086763e-01 + -3.494802178955826e-01 -3.490415718888917e-01 -3.486029252294393e-01 -3.481642805441431e-01 -3.477256404460241e-01 + -3.472870075342870e-01 -3.468483843943664e-01 -3.464097735979946e-01 -3.459711777032332e-01 -3.455325992545595e-01 + -3.450940407828988e-01 -3.446555048056859e-01 -3.442169938269355e-01 -3.437785103372727e-01 -3.433400568140066e-01 + -3.429016357211739e-01 -3.424632495095972e-01 -3.420249006169416e-01 -3.415865914677697e-01 -3.411483244735898e-01 + -3.407101020329076e-01 -3.402719265312936e-01 -3.398338003414163e-01 -3.393957258231169e-01 -3.389577053234419e-01 + -3.385197411767087e-01 -3.380818357045552e-01 -3.376439912159923e-01 -3.372062100074474e-01 -3.367684943628340e-01 + -3.363308465535850e-01 -3.358932688387101e-01 -3.354557634648621e-01 -3.350183326663648e-01 -3.345809786652706e-01 + -3.341437036714240e-01 -3.337065098824968e-01 -3.332693994840455e-01 -3.328323746495603e-01 -3.323954375405185e-01 + -3.319585903064250e-01 -3.315218350848725e-01 -3.310851740015786e-01 -3.306486091704498e-01 -3.302121426936186e-01 + -3.297757766615052e-01 -3.293395131528417e-01 -3.289033542347531e-01 -3.284673019627791e-01 -3.280313583809329e-01 + -3.275955255217547e-01 -3.271598054063429e-01 -3.267242000444232e-01 -3.262887114343770e-01 -3.258533415632922e-01 + -3.254180924070263e-01 -3.249829659302321e-01 -3.245479640864183e-01 -3.241130888179846e-01 -3.236783420562795e-01 + -3.232437257216423e-01 -3.228092417234450e-01 -3.223748919601409e-01 -3.219406783193167e-01 -3.215066026777184e-01 + -3.210726669013282e-01 -3.206388728453769e-01 -3.202052223544093e-01 -3.197717172623216e-01 -3.193383593924082e-01 + -3.189051505574045e-01 -3.184720925595313e-01 -3.180391871905422e-01 -3.176064362317638e-01 -3.171738414541382e-01 + -3.167414046182712e-01 -3.163091274744734e-01 -3.158770117628028e-01 -3.154450592131086e-01 -3.150132715450760e-01 + -3.145816504682646e-01 -3.141501976821553e-01 -3.137189148761902e-01 -3.132878037298163e-01 -3.128568659125269e-01 + -3.124261030839030e-01 -3.119955168936583e-01 -3.115651089816756e-01 -3.111348809780509e-01 -3.107048345031392e-01 + -3.102749711675883e-01 -3.098452925723818e-01 -3.094158003088841e-01 -3.089864959588767e-01 -3.085573810946008e-01 + -3.081284572787977e-01 -3.076997260647473e-01 -3.072711889963102e-01 -3.068428476079669e-01 -3.064147034248588e-01 + -3.059867579628250e-01 -3.055590127284453e-01 -3.051314692190763e-01 -3.047041289228922e-01 -3.042769933189233e-01 + -3.038500638770990e-01 -3.034233420582801e-01 -3.029968293142994e-01 -3.025705270880027e-01 -3.021444368132851e-01 + -3.017185599151295e-01 -3.012928978096455e-01 -3.008674519041057e-01 -3.004422235969845e-01 -3.000172142779951e-01 + -2.995924253281280e-01 -2.991678581196876e-01 -2.987435140163288e-01 -2.983193943730953e-01 -2.978955005364570e-01 + -2.974718338443422e-01 -2.970483956261805e-01 -2.966251872029370e-01 -2.962022098871464e-01 -2.957794649829509e-01 + -2.953569537861376e-01 -2.949346775841717e-01 -2.945126376562342e-01 -2.940908352732579e-01 -2.936692716979604e-01 + -2.932479481848828e-01 -2.928268659804223e-01 -2.924060263228685e-01 -2.919854304424380e-01 -2.915650795613108e-01 + -2.911449748936619e-01 -2.907251176456982e-01 -2.903055090156925e-01 -2.898861501940171e-01 -2.894670423631824e-01 + -2.890481866978607e-01 -2.886295843649317e-01 -2.882112365235086e-01 -2.877931443249761e-01 -2.873753089130213e-01 + -2.869577314236684e-01 -2.865404129853113e-01 -2.861233547187471e-01 -2.857065577372088e-01 -2.852900231464002e-01 + -2.848737520445255e-01 -2.844577455223233e-01 -2.840420046631011e-01 -2.836265305427633e-01 -2.832113242298477e-01 + -2.827963867855557e-01 -2.823817192637871e-01 -2.819673227111654e-01 -2.815531981670761e-01 -2.811393466636966e-01 + -2.807257692260255e-01 -2.803124668719179e-01 -2.798994406121131e-01 -2.794866914502679e-01 -2.790742203829868e-01 + -2.786620283998533e-01 -2.782501164834605e-01 -2.778384856094426e-01 -2.774271367465044e-01 -2.770160708564514e-01 + -2.766052888942225e-01 -2.761947918079178e-01 -2.757845805388300e-01 -2.753746560214738e-01 -2.749650191836171e-01 + -2.745556709463089e-01 -2.741466122239097e-01 -2.737378439241217e-01 -2.733293669480180e-01 -2.729211821900704e-01 + -2.725132905381809e-01 -2.721056928737112e-01 -2.716983900715075e-01 -2.712913829999344e-01 -2.708846725209002e-01 + -2.704782594898876e-01 -2.700721447559801e-01 -2.696663291618944e-01 -2.692608135440029e-01 -2.688555987323694e-01 + -2.684506855507684e-01 -2.680460748167207e-01 -2.676417673415175e-01 -2.672377639302478e-01 -2.668340653818301e-01 + -2.664306724890348e-01 -2.660275860385143e-01 -2.656248068108309e-01 -2.652223355804827e-01 -2.648201731159316e-01 + -2.644183201796296e-01 -2.640167775280468e-01 -2.636155459116970e-01 -2.632146260751655e-01 -2.628140187571352e-01 + -2.624137246904130e-01 -2.620137446019571e-01 -2.616140792129022e-01 -2.612147292385862e-01 -2.608156953885770e-01 + -2.604169783666967e-01 -2.600185788710496e-01 -2.596204975940467e-01 -2.592227352224323e-01 -2.588252924373090e-01 + -2.584281699141626e-01 -2.580313683228896e-01 -2.576348883278203e-01 -2.572387305877447e-01 -2.568428957559388e-01 + -2.564473844801885e-01 -2.560521974028147e-01 -2.556573351606972e-01 -2.552627983853024e-01 -2.548685877027041e-01 + -2.544747037336113e-01 -2.540811470933900e-01 -2.536879183920906e-01 -2.532950182344688e-01 -2.529024472200115e-01 + -2.525102059429617e-01 -2.521182949923413e-01 -2.517267149519750e-01 -2.513354664005141e-01 -2.509445499114610e-01 + -2.505539660531915e-01 -2.501637153889796e-01 -2.497737984770205e-01 -2.493842158704539e-01 -2.489949681173868e-01 + -2.486060557609173e-01 -2.482174793391575e-01 -2.478292393852558e-01 -2.474413364274212e-01 -2.470537709889451e-01 + -2.466665435882237e-01 -2.462796547387821e-01 -2.458931049492936e-01 -2.455068947236079e-01 -2.451210245607670e-01 + -2.447354949550318e-01 -2.443503063959022e-01 -2.439654593681407e-01 -2.435809543517927e-01 -2.431967918222100e-01 + -2.428129722500717e-01 -2.424294961014064e-01 -2.420463638376137e-01 -2.416635759154854e-01 -2.412811327872276e-01 + -2.408990349004822e-01 -2.405172826983475e-01 -2.401358766193997e-01 -2.397548170977153e-01 -2.393741045628887e-01 + -2.389937394400589e-01 -2.386137221499250e-01 -2.382340531087699e-01 -2.378547327284790e-01 -2.374757614165634e-01 + -2.370971395761802e-01 -2.367188676061497e-01 -2.363409459009800e-01 -2.359633748508849e-01 -2.355861548418050e-01 + -2.352092862554274e-01 -2.348327694692066e-01 -2.344566048563836e-01 -2.340807927860066e-01 -2.337053336229509e-01 + -2.333302277279365e-01 -2.329554754575520e-01 -2.325810771642715e-01 -2.322070331964739e-01 -2.318333438984625e-01 + -2.314600096104864e-01 -2.310870306687571e-01 -2.307144074054706e-01 -2.303421401488229e-01 -2.299702292230336e-01 + -2.295986749483609e-01 -2.292274776411229e-01 -2.288566376137156e-01 -2.284861551746319e-01 -2.281160306284802e-01 + -2.277462642760038e-01 -2.273768564140987e-01 -2.270078073358302e-01 -2.266391173304571e-01 -2.262707866834436e-01 + -2.259028156764818e-01 -2.255352045875075e-01 -2.251679536907193e-01 -2.248010632565976e-01 -2.244345335519208e-01 + -2.240683648397851e-01 -2.237025573796202e-01 -2.233371114272088e-01 -2.229720272347043e-01 -2.226073050506472e-01 + -2.222429451199837e-01 -2.218789476840825e-01 -2.215153129807539e-01 -2.211520412442639e-01 -2.207891327053545e-01 + -2.204265875912613e-01 -2.200644061257277e-01 -2.197025885290234e-01 -2.193411350179623e-01 -2.189800458059190e-01 + -2.186193211028446e-01 -2.182589611152858e-01 -2.178989660463983e-01 -2.175393360959674e-01 -2.171800714604211e-01 + -2.168211723328495e-01 -2.164626389030186e-01 -2.161044713573895e-01 -2.157466698791329e-01 -2.153892346481456e-01 + -2.150321658410667e-01 -2.146754636312947e-01 -2.143191281890032e-01 -2.139631596811566e-01 -2.136075582715250e-01 + -2.132523241207026e-01 -2.128974573861219e-01 -2.125429582220694e-01 -2.121888267797019e-01 -2.118350632070627e-01 + -2.114816676490955e-01 -2.111286402476608e-01 -2.107759811415524e-01 -2.104236904665113e-01 -2.100717683552412e-01 + -2.097202149374249e-01 -2.093690303397391e-01 -2.090182146858671e-01 -2.086677680965194e-01 -2.083176906894425e-01 + -2.079679825794374e-01 -2.076186438783759e-01 -2.072696746952102e-01 -2.069210751359945e-01 -2.065728453038921e-01 + -2.062249852991982e-01 -2.058774952193466e-01 -2.055303751589314e-01 -2.051836252097179e-01 -2.048372454606540e-01 + -2.044912359978923e-01 -2.041455969047963e-01 -2.038003282619618e-01 -2.034554301472254e-01 -2.031109026356815e-01 + -2.027667457996974e-01 -2.024229597089233e-01 -2.020795444303100e-01 -2.017365000281230e-01 -2.013938265639525e-01 + -2.010515240967322e-01 -2.007095926827479e-01 -2.003680323756568e-01 -2.000268432264951e-01 -1.996860252836979e-01 + -1.993455785931075e-01 -1.990055031979886e-01 -1.986657991390446e-01 -1.983264664544254e-01 -1.979875051797450e-01 + -1.976489153480950e-01 -1.973106969900530e-01 -1.969728501337024e-01 -1.966353748046406e-01 -1.962982710259927e-01 + -1.959615388184280e-01 -1.956251782001677e-01 -1.952891891870023e-01 -1.949535717923007e-01 -1.946183260270268e-01 + -1.942834518997504e-01 -1.939489494166578e-01 -1.936148185815682e-01 -1.932810593959428e-01 -1.929476718589016e-01 + -1.926146559672303e-01 -1.922820117153978e-01 -1.919497390955665e-01 -1.916178380976027e-01 -1.912863087090930e-01 + -1.909551509153535e-01 -1.906243646994417e-01 -1.902939500421716e-01 -1.899639069221225e-01 -1.896342353156533e-01 + -1.893049351969122e-01 -1.889760065378515e-01 -1.886474493082383e-01 -1.883192634756632e-01 -1.879914490055588e-01 + -1.876640058612039e-01 -1.873369340037414e-01 -1.870102333921864e-01 -1.866839039834378e-01 -1.863579457322928e-01 + -1.860323585914543e-01 -1.857071425115452e-01 -1.853822974411203e-01 -1.850578233266736e-01 -1.847337201126558e-01 + -1.844099877414779e-01 -1.840866261535306e-01 -1.837636352871888e-01 -1.834410150788265e-01 -1.831187654628282e-01 + -1.827968863715948e-01 -1.824753777355620e-01 -1.821542394832048e-01 -1.818334715410532e-01 -1.815130738337002e-01 + -1.811930462838119e-01 -1.808733888121427e-01 -1.805541013375400e-01 -1.802351837769593e-01 -1.799166360454745e-01 + -1.795984580562850e-01 -1.792806497207312e-01 -1.789632109482995e-01 -1.786461416466387e-01 -1.783294417215646e-01 + -1.780131110770756e-01 -1.776971496153594e-01 -1.773815572368036e-01 -1.770663338400089e-01 -1.767514793217949e-01 + -1.764369935772136e-01 -1.761228764995591e-01 -1.758091279803753e-01 -1.754957479094692e-01 -1.751827361749187e-01 + -1.748700926630821e-01 -1.745578172586112e-01 -1.742459098444563e-01 -1.739343703018815e-01 -1.736231985104690e-01 + -1.733123943481338e-01 -1.730019576911291e-01 -1.726918884140597e-01 -1.723821863898890e-01 -1.720728514899485e-01 + -1.717638835839505e-01 -1.714552825399934e-01 -1.711470482245734e-01 -1.708391805025952e-01 -1.705316792373770e-01 + -1.702245442906654e-01 -1.699177755226406e-01 -1.696113727919261e-01 -1.693053359556013e-01 -1.689996648692055e-01 + -1.686943593867512e-01 -1.683894193607310e-01 -1.680848446421283e-01 -1.677806350804243e-01 -1.674767905236083e-01 + -1.671733108181880e-01 -1.668701958091941e-01 -1.665674453401943e-01 -1.662650592532987e-01 -1.659630373891692e-01 + -1.656613795870303e-01 -1.653600856846742e-01 -1.650591555184729e-01 -1.647585889233856e-01 -1.644583857329657e-01 + -1.641585457793737e-01 -1.638590688933790e-01 -1.635599549043759e-01 -1.632612036403860e-01 -1.629628149280711e-01 + -1.626647885927384e-01 -1.623671244583497e-01 -1.620698223475319e-01 -1.617728820815814e-01 -1.614763034804761e-01 + -1.611800863628813e-01 -1.608842305461582e-01 -1.605887358463735e-01 -1.602936020783054e-01 -1.599988290554530e-01 + -1.597044165900449e-01 -1.594103644930448e-01 -1.591166725741633e-01 -1.588233406418607e-01 -1.585303685033609e-01 + -1.582377559646535e-01 -1.579455028305067e-01 -1.576536089044716e-01 -1.573620739888905e-01 -1.570708978849073e-01 + -1.567800803924707e-01 -1.564896213103463e-01 -1.561995204361223e-01 -1.559097775662154e-01 -1.556203924958829e-01 + -1.553313650192242e-01 -1.550426949291940e-01 -1.547543820176073e-01 -1.544664260751459e-01 -1.541788268913674e-01 + -1.538915842547115e-01 -1.536046979525093e-01 -1.533181677709874e-01 -1.530319934952784e-01 -1.527461749094267e-01 + -1.524607117963948e-01 -1.521756039380729e-01 -1.518908511152837e-01 -1.516064531077906e-01 -1.513224096943057e-01 + -1.510387206524943e-01 -1.507553857589859e-01 -1.504724047893760e-01 -1.501897775182381e-01 -1.499075037191284e-01 + -1.496255831645918e-01 -1.493440156261709e-01 -1.490628008744107e-01 -1.487819386788679e-01 -1.485014288081154e-01 + -1.482212710297503e-01 -1.479414651104009e-01 -1.476620108157320e-01 -1.473829079104534e-01 -1.471041561583254e-01 + -1.468257553221648e-01 -1.465477051638543e-01 -1.462700054443453e-01 -1.459926559236677e-01 -1.457156563609338e-01 + -1.454390065143472e-01 -1.451627061412083e-01 -1.448867549979187e-01 -1.446111528399917e-01 -1.443358994220543e-01 + -1.440609944978579e-01 -1.437864378202811e-01 -1.435122291413369e-01 -1.432383682121806e-01 -1.429648547831135e-01 + -1.426916886035918e-01 -1.424188694222307e-01 -1.421463969868109e-01 -1.418742710442860e-01 -1.416024913407869e-01 + -1.413310576216288e-01 -1.410599696313183e-01 -1.407892271135563e-01 -1.405188298112483e-01 -1.402487774665055e-01 + -1.399790698206557e-01 -1.397097066142447e-01 -1.394406875870463e-01 -1.391720124780649e-01 -1.389036810255427e-01 + -1.386356929669664e-01 -1.383680480390708e-01 -1.381007459778466e-01 -1.378337865185455e-01 -1.375671693956849e-01 + -1.373008943430559e-01 -1.370349610937257e-01 -1.367693693800464e-01 -1.365041189336596e-01 -1.362392094855003e-01 + -1.359746407658051e-01 -1.357104125041158e-01 -1.354465244292862e-01 -1.351829762694863e-01 -1.349197677522090e-01 + -1.346568986042754e-01 -1.343943685518389e-01 -1.341321773203925e-01 -1.338703246347729e-01 -1.336088102191656e-01 + -1.333476337971123e-01 -1.330867950915129e-01 -1.328262938246346e-01 -1.325661297181127e-01 -1.323063024929607e-01 + -1.320468118695722e-01 -1.317876575677267e-01 -1.315288393065955e-01 -1.312703568047456e-01 -1.310122097801473e-01 + -1.307543979501760e-01 -1.304969210316195e-01 -1.302397787406830e-01 -1.299829707929926e-01 -1.297264969036023e-01 + -1.294703567869974e-01 -1.292145501570996e-01 -1.289590767272740e-01 -1.287039362103305e-01 -1.284491283185321e-01 + -1.281946527635968e-01 -1.279405092567057e-01 -1.276866975085055e-01 -1.274332172291124e-01 -1.271800681281207e-01 + -1.269272499146033e-01 -1.266747622971198e-01 -1.264226049837194e-01 -1.261707776819453e-01 -1.259192800988412e-01 + -1.256681119409541e-01 -1.254172729143400e-01 -1.251667627245687e-01 -1.249165810767267e-01 -1.246667276754247e-01 + -1.244172022247991e-01 -1.241680044285187e-01 -1.239191339897878e-01 -1.236705906113518e-01 -1.234223739955020e-01 + -1.231744838440772e-01 -1.229269198584726e-01 -1.226796817396398e-01 -1.224327691880948e-01 -1.221861819039203e-01 + -1.219399195867699e-01 -1.216939819358743e-01 -1.214483686500435e-01 -1.212030794276726e-01 -1.209581139667457e-01 + -1.207134719648391e-01 -1.204691531191281e-01 -1.202251571263871e-01 -1.199814836829988e-01 -1.197381324849542e-01 + -1.194951032278594e-01 -1.192523956069385e-01 -1.190100093170375e-01 -1.187679440526300e-01 -1.185261995078193e-01 + -1.182847753763436e-01 -1.180436713515807e-01 -1.178028871265498e-01 -1.175624223939182e-01 -1.173222768460035e-01 + -1.170824501747778e-01 -1.168429420718731e-01 -1.166037522285827e-01 -1.163648803358681e-01 -1.161263260843597e-01 + -1.158880891643642e-01 -1.156501692658650e-01 -1.154125660785291e-01 -1.151752792917090e-01 -1.149383085944468e-01 + -1.147016536754793e-01 -1.144653142232397e-01 -1.142292899258630e-01 -1.139935804711898e-01 -1.137581855467683e-01 + -1.135231048398606e-01 -1.132883380374441e-01 -1.130538848262161e-01 -1.128197448925984e-01 -1.125859179227391e-01 + -1.123524036025177e-01 -1.121192016175480e-01 -1.118863116531826e-01 -1.116537333945148e-01 -1.114214665263841e-01 + -1.111895107333788e-01 -1.109578656998389e-01 -1.107265311098615e-01 -1.104955066473025e-01 -1.102647919957804e-01 + -1.100343868386814e-01 -1.098042908591604e-01 -1.095745037401462e-01 -1.093450251643448e-01 -1.091158548142417e-01 + -1.088869923721068e-01 -1.086584375199964e-01 -1.084301899397577e-01 -1.082022493130312e-01 -1.079746153212554e-01 + -1.077472876456682e-01 -1.075202659673118e-01 -1.072935499670358e-01 -1.070671393254994e-01 -1.068410337231763e-01 + -1.066152328403565e-01 -1.063897363571499e-01 -1.061645439534909e-01 -1.059396553091392e-01 -1.057150701036848e-01 + -1.054907880165511e-01 -1.052668087269966e-01 -1.050431319141205e-01 -1.048197572568629e-01 -1.045966844340107e-01 + -1.043739131241984e-01 -1.041514430059134e-01 -1.039292737574973e-01 -1.037074050571494e-01 -1.034858365829310e-01 + -1.032645680127662e-01 -1.030435990244467e-01 -1.028229292956349e-01 -1.026025585038652e-01 -1.023824863265493e-01 + -1.021627124409765e-01 -1.019432365243193e-01 -1.017240582536351e-01 -1.015051773058686e-01 -1.012865933578560e-01 + -1.010683060863265e-01 -1.008503151679069e-01 -1.006326202791228e-01 -1.004152210964028e-01 -1.001981172960805e-01 + -9.998130855439724e-02 -9.976479454750635e-02 -9.954857495147398e-02 -9.933264944228326e-02 -9.911701769583717e-02 + -9.890167938796006e-02 -9.868663419440192e-02 -9.847188179084039e-02 -9.825742185288304e-02 -9.804325405607164e-02 + -9.782937807588299e-02 -9.761579358773328e-02 -9.740250026697927e-02 -9.718949778892289e-02 -9.697678582881185e-02 + -9.676436406184359e-02 -9.655223216316815e-02 -9.634038980788918e-02 -9.612883667106893e-02 -9.591757242772889e-02 + -9.570659675285302e-02 -9.549590932139113e-02 -9.528550980826019e-02 -9.507539788834761e-02 -9.486557323651432e-02 + -9.465603552759584e-02 -9.444678443640674e-02 -9.423781963774079e-02 -9.402914080637620e-02 -9.382074761707584e-02 + -9.361263974459134e-02 -9.340481686366436e-02 -9.319727864902985e-02 -9.299002477541853e-02 -9.278305491755856e-02 + -9.257636875017922e-02 -9.236996594801218e-02 -9.216384618579432e-02 -9.195800913827107e-02 -9.175245448019674e-02 + -9.154718188633910e-02 -9.134219103148082e-02 -9.113748159042141e-02 -9.093305323798015e-02 -9.072890564899867e-02 + -9.052503849834266e-02 -9.032145146090452e-02 -9.011814421160608e-02 -8.991511642539991e-02 -8.971236777727276e-02 + -8.950989794224710e-02 -8.930770659538365e-02 -8.910579341178385e-02 -8.890415806659205e-02 -8.870280023499666e-02 + -8.850171959223517e-02 -8.830091581359277e-02 -8.810038857440815e-02 -8.790013755007317e-02 -8.770016241603540e-02 + -8.750046284780240e-02 -8.730103852094080e-02 -8.710188911108085e-02 -8.690301429391804e-02 -8.670441374521456e-02 + -8.650608714080221e-02 -8.630803415658442e-02 -8.611025446853803e-02 -8.591274775271590e-02 -8.571551368524873e-02 + -8.551855194234738e-02 -8.532186220030495e-02 -8.512544413549852e-02 -8.492929742439195e-02 -8.473342174353733e-02 + -8.453781676957732e-02 -8.434248217924739e-02 -8.414741764937748e-02 -8.395262285689459e-02 -8.375809747882426e-02 + -8.356384119229299e-02 -8.336985367453020e-02 -8.317613460287014e-02 -8.298268365475410e-02 -8.278950050773234e-02 + -8.259658483946590e-02 -8.240393632772910e-02 -8.221155465041115e-02 -8.201943948551735e-02 -8.182759051117357e-02 + -8.163600740562495e-02 -8.144468984724014e-02 -8.125363751451327e-02 -8.106285008606355e-02 -8.087232724064090e-02 + -8.068206865712409e-02 -8.049207401452541e-02 -8.030234299199146e-02 -8.011287526880512e-02 -7.992367052438763e-02 + -7.973472843830046e-02 -7.954604869024703e-02 -7.935763096007500e-02 -7.916947492777775e-02 -7.898158027349619e-02 + -7.879394667752138e-02 -7.860657382029515e-02 -7.841946138241353e-02 -7.823260904462691e-02 -7.804601648784307e-02 + -7.785968339312893e-02 -7.767360944171170e-02 -7.748779431498121e-02 -7.730223769449183e-02 -7.711693926196400e-02 + -7.693189869928606e-02 -7.674711568851642e-02 -7.656258991188467e-02 -7.637832105179426e-02 -7.619430879082359e-02 + -7.601055281172753e-02 -7.582705279744090e-02 -7.564380843107761e-02 -7.546081939593530e-02 -7.527808537549445e-02 + -7.509560605342164e-02 -7.491338111357190e-02 -7.473141023998829e-02 -7.454969311690561e-02 -7.436822942875146e-02 + -7.418701886014781e-02 -7.400606109591290e-02 -7.382535582106312e-02 -7.364490272081420e-02 -7.346470148058371e-02 + -7.328475178599214e-02 -7.310505332286485e-02 -7.292560577723380e-02 -7.274640883533894e-02 -7.256746218363058e-02 + -7.238876550877037e-02 -7.221031849763318e-02 -7.203212083730927e-02 -7.185417221510518e-02 -7.167647231854611e-02 + -7.149902083537708e-02 -7.132181745356483e-02 -7.114486186129959e-02 -7.096815374699660e-02 -7.079169279929715e-02 + -7.061547870707195e-02 -7.043951115942092e-02 -7.026378984567593e-02 -7.008831445540203e-02 -6.991308467839864e-02 + -6.973810020470302e-02 -6.956336072458917e-02 -6.938886592857167e-02 -6.921461550740687e-02 -6.904060915209301e-02 + -6.886684655387453e-02 -6.869332740424071e-02 -6.852005139492971e-02 -6.834701821792888e-02 -6.817422756547681e-02 + -6.800167913006469e-02 -6.782937260443844e-02 -6.765730768159947e-02 -6.748548405480710e-02 -6.731390141757970e-02 + -6.714255946369635e-02 -6.697145788719877e-02 -6.680059638239219e-02 -6.662997464384778e-02 -6.645959236640377e-02 + -6.628944924516680e-02 -6.611954497551432e-02 -6.594987925309541e-02 -6.578045177383249e-02 -6.561126223392347e-02 + -6.544231032984232e-02 -6.527359575834187e-02 -6.510511821645427e-02 -6.493687740149323e-02 -6.476887301105551e-02 + -6.460110474302228e-02 -6.443357229556029e-02 -6.426627536712527e-02 -6.409921365646068e-02 -6.393238686260214e-02 + -6.376579468487653e-02 -6.359943682290510e-02 -6.343331297660525e-02 -6.326742284619029e-02 -6.310176613217290e-02 + -6.293634253536604e-02 -6.277115175688401e-02 -6.260619349814485e-02 -6.244146746087131e-02 -6.227697334709256e-02 + -6.211271085914612e-02 -6.194867969967865e-02 -6.178487957164851e-02 -6.162131017832639e-02 -6.145797122329738e-02 + -6.129486241046261e-02 -6.113198344404047e-02 -6.096933402856833e-02 -6.080691386890433e-02 -6.064472267022855e-02 + -6.048276013804487e-02 -6.032102597818248e-02 -6.015951989679733e-02 -5.999824160037390e-02 -5.983719079572667e-02 + -5.967636719000121e-02 -5.951577049067714e-02 -5.935540040556803e-02 -5.919525664282421e-02 -5.903533891093370e-02 + -5.887564691872354e-02 -5.871618037536289e-02 -5.855693899036241e-02 -5.839792247357751e-02 -5.823913053520943e-02 + -5.808056288580656e-02 -5.792221923626675e-02 -5.776409929783770e-02 -5.760620278211965e-02 -5.744852940106681e-02 + -5.729107886698840e-02 -5.713385089255062e-02 -5.697684519077859e-02 -5.682006147505722e-02 -5.666349945913349e-02 + -5.650715885711753e-02 -5.635103938348464e-02 -5.619514075307676e-02 -5.603946268110403e-02 -5.588400488314652e-02 + -5.572876707515578e-02 -5.557374897345647e-02 -5.541895029474816e-02 -5.526437075610667e-02 -5.511001007498591e-02 + -5.495586796921968e-02 -5.480194415702282e-02 -5.464823835699349e-02 -5.449475028811439e-02 -5.434147966975414e-02 + -5.418842622167024e-02 -5.403558966400920e-02 -5.388296971730867e-02 -5.373056610250022e-02 -5.357837854090890e-02 + -5.342640675425744e-02 -5.327465046466552e-02 -5.312310939465317e-02 -5.297178326714188e-02 -5.282067180545613e-02 + -5.266977473332533e-02 -5.251909177488574e-02 -5.236862265468156e-02 -5.221836709766746e-02 -5.206832482920958e-02 + -5.191849557508763e-02 -5.176887906149681e-02 -5.161947501504924e-02 -5.147028316277562e-02 -5.132130323212749e-02 + -5.117253495097853e-02 -5.102397804762664e-02 -5.087563225079554e-02 -5.072749728963640e-02 -5.057957289373026e-02 + -5.043185879308894e-02 -5.028435471815778e-02 -5.013706039981668e-02 -4.998997556938225e-02 -4.984309995860983e-02 + -4.969643329969506e-02 -4.954997532527535e-02 -4.940372576843306e-02 -4.925768436269536e-02 -4.911185084203830e-02 + -4.896622494088697e-02 -4.882080639411765e-02 -4.867559493706110e-02 -4.853059030550239e-02 -4.838579223568414e-02 + -4.824120046430847e-02 -4.809681472853804e-02 -4.795263476599886e-02 -4.780866031478179e-02 -4.766489111344439e-02 + -4.752132690101333e-02 -4.737796741698598e-02 -4.723481240133236e-02 -4.709186159449758e-02 -4.694911473740318e-02 + -4.680657157144977e-02 -4.666423183851851e-02 -4.652209528097345e-02 -4.638016164166363e-02 -4.623843066392466e-02 + -4.609690209158148e-02 -4.595557566894978e-02 -4.581445114083834e-02 -4.567352825255137e-02 -4.553280674989000e-02 + -4.539228637915495e-02 -4.525196688714849e-02 -4.511184802117626e-02 -4.497192952905004e-02 -4.483221115908929e-02 + -4.469269266012334e-02 -4.455337378149452e-02 -4.441425427305880e-02 -4.427533388518908e-02 -4.413661236877770e-02 + -4.399808947523695e-02 -4.385976495650377e-02 -4.372163856503956e-02 -4.358371005383412e-02 -4.344597917640734e-02 + -4.330844568681144e-02 -4.317110933963330e-02 -4.303396988999707e-02 -4.289702709356590e-02 -4.276028070654499e-02 + -4.262373048568340e-02 -4.248737618827656e-02 -4.235121757216900e-02 -4.221525439575612e-02 -4.207948641798718e-02 + -4.194391339836749e-02 -4.180853509696072e-02 -4.167335127439166e-02 -4.153836169184843e-02 -4.140356611108501e-02 + -4.126896429442399e-02 -4.113455600475870e-02 -4.100034100555621e-02 -4.086631906085937e-02 -4.073248993528966e-02 + -4.059885339404996e-02 -4.046540920292682e-02 -4.033215712829277e-02 -4.019909693711025e-02 -4.006622839693247e-02 + -3.993355127590775e-02 -3.980106534278111e-02 -3.966877036689691e-02 -3.953666611820295e-02 -3.940475236725126e-02 + -3.927302888520231e-02 -3.914149544382729e-02 -3.901015181551078e-02 -3.887899777325385e-02 -3.874803309067659e-02 + -3.861725754202115e-02 -3.848667090215465e-02 -3.835627294657192e-02 -3.822606345139837e-02 -3.809604219339326e-02 + -3.796620894995215e-02 -3.783656349911038e-02 -3.770710561954563e-02 -3.757783509058106e-02 -3.744875169218861e-02 + -3.731985520499156e-02 -3.719114541026812e-02 -3.706262208995407e-02 -3.693428502664607e-02 -3.680613400360501e-02 + -3.667816880475874e-02 -3.655038921470551e-02 -3.642279501871729e-02 -3.629538600274256e-02 -3.616816195341019e-02 + -3.604112265803210e-02 -3.591426790460662e-02 -3.578759748182270e-02 -3.566111117906178e-02 -3.553480878640223e-02 + -3.540869009462283e-02 -3.528275489520500e-02 -3.515700298033788e-02 -3.503143414292030e-02 -3.490604817656512e-02 + -3.478084487560273e-02 -3.465582403508421e-02 -3.453098545078508e-02 -3.440632891920906e-02 -3.428185423759133e-02 + -3.415756120390259e-02 -3.403344961685233e-02 -3.390951927589271e-02 -3.378576998122253e-02 -3.366220153379052e-02 + -3.353881373529932e-02 -3.341560638820955e-02 -3.329257929574313e-02 -3.316973226188768e-02 -3.304706509140001e-02 + -3.292457758981015e-02 -3.280226956342555e-02 -3.268014081933460e-02 -3.255819116541119e-02 -3.243642041031825e-02 + -3.231482836351200e-02 -3.219341483524633e-02 -3.207217963657656e-02 -3.195112257936341e-02 -3.183024347627830e-02 + -3.170954214080586e-02 -3.158901838725005e-02 -3.146867203073680e-02 -3.134850288721926e-02 -3.122851077348239e-02 + -3.110869550714630e-02 -3.098905690667157e-02 -3.086959479136355e-02 -3.075030898137644e-02 -3.063119929771844e-02 + -3.051226556225569e-02 -3.039350759771719e-02 -3.027492522769960e-02 -3.015651827667144e-02 -3.003828656997806e-02 + -2.992022993384653e-02 -2.980234819539000e-02 -2.968464118261300e-02 -2.956710872441579e-02 -2.944975065059949e-02 + -2.933256679187121e-02 -2.921555697984856e-02 -2.909872104706485e-02 -2.898205882697435e-02 -2.886557015395689e-02 + -2.874925486332348e-02 -2.863311279132110e-02 -2.851714377513768e-02 -2.840134765290829e-02 -2.828572426371925e-02 + -2.817027344761419e-02 -2.805499504559913e-02 -2.793988889964762e-02 -2.782495485270706e-02 -2.771019274870294e-02 + -2.759560243254532e-02 -2.748118375013410e-02 -2.736693654836429e-02 -2.725286067513244e-02 -2.713895597934131e-02 + -2.702522231090628e-02 -2.691165952076120e-02 -2.679826746086374e-02 -2.668504598420148e-02 -2.657199494479807e-02 + -2.645911419771867e-02 -2.634640359907651e-02 -2.623386300603842e-02 -2.612149227683125e-02 -2.600929127074803e-02 + -2.589725984815394e-02 -2.578539787049261e-02 -2.567370520029266e-02 -2.556218170117359e-02 -2.545082723785264e-02 + -2.533964167615078e-02 -2.522862488299943e-02 -2.511777672644707e-02 -2.500709707566550e-02 -2.489658580095689e-02 + -2.478624277376009e-02 -2.467606786665730e-02 -2.456606095338160e-02 -2.445622190882286e-02 -2.434655060903484e-02 + -2.423704693124290e-02 -2.412771075384968e-02 -2.401854195644356e-02 -2.390954041980448e-02 -2.380070602591181e-02 + -2.369203865795182e-02 -2.358353820032401e-02 -2.347520453864915e-02 -2.336703755977662e-02 -2.325903715179145e-02 + -2.315120320402223e-02 -2.304353560704835e-02 -2.293603425270768e-02 -2.282869903410443e-02 -2.272152984561651e-02 + -2.261452658290355e-02 -2.250768914291477e-02 -2.240101742389659e-02 -2.229451132540097e-02 -2.218817074829306e-02 + -2.208199559475941e-02 -2.197598576831630e-02 -2.187014117381756e-02 -2.176446171746304e-02 -2.165894730680704e-02 + -2.155359785076634e-02 -2.144841325962906e-02 -2.134339344506284e-02 -2.123853832012328e-02 -2.113384779926332e-02 + -2.102932179834098e-02 -2.092496023462881e-02 -2.082076302682234e-02 -2.071673009504891e-02 -2.061286136087732e-02 + -2.050915674732579e-02 -2.040561617887180e-02 -2.030223958146114e-02 -2.019902688251676e-02 -2.009597801094874e-02 + -1.999309289716272e-02 -1.989037147307007e-02 -1.978781367209724e-02 -1.968541942919503e-02 -1.958318868084845e-02 + -1.948112136508650e-02 -1.937921742149162e-02 -1.927747679120996e-02 -1.917589941696089e-02 -1.907448524304713e-02 + -1.897323421536502e-02 -1.887214628141428e-02 -1.877122139030839e-02 -1.867045949278500e-02 -1.856986054121593e-02 + -1.846942448961797e-02 -1.836915129366308e-02 -1.826904091068901e-02 -1.816909329971016e-02 -1.806930842142803e-02 + -1.796968623824190e-02 -1.787022671426039e-02 -1.777092981531131e-02 -1.767179550895386e-02 -1.757282376448880e-02 + -1.747401455296980e-02 -1.737536784721538e-02 -1.727688362181908e-02 -1.717856185316207e-02 -1.708040251942355e-02 + -1.698240560059297e-02 -1.688457107848166e-02 -1.678689893673415e-02 -1.668938916084023e-02 -1.659204173814691e-02 + -1.649485665787010e-02 -1.639783391110693e-02 -1.630097349084761e-02 -1.620427539198769e-02 -1.610773961134063e-02 + -1.601136614764962e-02 -1.591515500160041e-02 -1.581910617583384e-02 -1.572321967495808e-02 -1.562749550556182e-02 + -1.553193367622655e-02 -1.543653419753962e-02 -1.534129708210738e-02 -1.524622234456776e-02 -1.515131000160358e-02 + -1.505656007195594e-02 -1.496197257643698e-02 -1.486754753794375e-02 -1.477328498147130e-02 -1.467918493412604e-02 + -1.458524742514012e-02 -1.449147248588392e-02 -1.439786014988101e-02 -1.430441045282114e-02 -1.421112343257432e-02 + -1.411799912920542e-02 -1.402503758498742e-02 -1.393223884441606e-02 -1.383960295422426e-02 -1.374712996339592e-02 + -1.365481992318098e-02 -1.356267288710944e-02 -1.347068891100612e-02 -1.337886805300558e-02 -1.328721037356649e-02 + -1.319571593548674e-02 -1.310438480391837e-02 -1.301321704638244e-02 -1.292221273278438e-02 -1.283137193542886e-02 + -1.274069472903526e-02 -1.265018119075315e-02 -1.255983140017740e-02 -1.246964543936386e-02 -1.237962339284519e-02 + -1.228976534764605e-02 -1.220007139329937e-02 -1.211054162186186e-02 -1.202117612793000e-02 -1.193197500865632e-02 + -1.184293836376514e-02 -1.175406629556871e-02 -1.166535890898409e-02 -1.157681631154850e-02 -1.148843861343677e-02 + -1.140022592747694e-02 -1.131217836916727e-02 -1.122429605669314e-02 -1.113657911094299e-02 -1.104902765552609e-02 + -1.096164181678851e-02 -1.087442172383067e-02 -1.078736750852424e-02 -1.070047930552907e-02 -1.061375725231052e-02 + -1.052720148915676e-02 -1.044081215919585e-02 -1.035458940841347e-02 -1.026853338567008e-02 -1.018264424271852e-02 + -1.009692213422185e-02 -1.001136721777072e-02 -9.925979653901159e-03 -9.840759606112626e-03 -9.755707240885522e-03 + -9.670822727699450e-03 -9.586106239050924e-03 -9.501557950471560e-03 -9.417178040546344e-03 -9.332966690931560e-03 + -9.248924086372937e-03 -9.165050414724527e-03 -9.081345866966314e-03 -8.997810637223158e-03 -8.914444922782970e-03 + -8.831248924115170e-03 -8.748222844889714e-03 -8.665366891995012e-03 -8.582681275557029e-03 -8.500166208958122e-03 + -8.417821908855101e-03 -8.335648595198940e-03 -8.253646491252729e-03 -8.171815823611048e-03 -8.090156822218860e-03 + -8.008669720390157e-03 -7.927354754827256e-03 -7.846212165639513e-03 -7.765242196362458e-03 -7.684445093977035e-03 + -7.603821108928328e-03 -7.523370495144868e-03 -7.443093510057851e-03 -7.362990414619966e-03 -7.283061473324916e-03 + -7.203306954226238e-03 -7.123727128956636e-03 -7.044322272747305e-03 -6.965092664446849e-03 -6.886038586540548e-03 + -6.807160325169744e-03 -6.728458170150698e-03 -6.649932414994114e-03 -6.571583356923983e-03 -6.493411296896896e-03 + -6.415416539621302e-03 -6.337599393576400e-03 -6.259960171031202e-03 -6.182499188064097e-03 -6.105216764581120e-03 + -6.028113224335783e-03 -5.951188894947315e-03 -5.874444107920001e-03 -5.797879198662241e-03 -5.721494506504752e-03 + -5.645290374720152e-03 -5.569267150541013e-03 -5.493425185178914e-03 -5.417764833843053e-03 -5.342286455758625e-03 + -5.266990414185321e-03 -5.191877076435930e-03 -5.116946813894334e-03 -5.042200002034095e-03 -4.967637020436223e-03 + -4.893258252807416e-03 -4.819064086998137e-03 -4.745054915020129e-03 -4.671231133064316e-03 -4.597593141518521e-03 + -4.524141344984670e-03 -4.450876152296473e-03 -4.377797976536381e-03 -4.304907235052755e-03 -4.232204349477008e-03 + -4.159689745740107e-03 -4.087363854089246e-03 -4.015227109104714e-03 -3.943279949715627e-03 -3.871522819216546e-03 + -3.799956165283142e-03 -3.728580439987945e-03 -3.657396099816350e-03 -3.586403605681349e-03 -3.515603422939109e-03 + -3.444996021403955e-03 -3.374581875362747e-03 -3.304361463589896e-03 -3.234335269361021e-03 -3.164503780467372e-03 + -3.094867489229636e-03 -3.025426892511071e-03 -2.956182491731163e-03 -2.887134792878260e-03 -2.818284306522359e-03 + -2.749631547827641e-03 -2.681177036564269e-03 -2.612921297120292e-03 -2.544864858513237e-03 -2.477008254400915e-03 + -2.409352023092537e-03 -2.341896707558912e-03 -2.274642855442539e-03 -2.207591019067590e-03 -2.140741755448887e-03 + -2.074095626301048e-03 -2.007653198047128e-03 -1.941415041826543e-03 -1.875381733503055e-03 -1.809553853671891e-03 + -1.743931987666610e-03 -1.678516725565853e-03 -1.613308662198919e-03 -1.548308397151321e-03 -1.483516534770199e-03 + -1.418933684168201e-03 -1.354560459228225e-03 -1.290397478606248e-03 -1.226445365734724e-03 -1.162704748824981e-03 + -1.099176260868878e-03 -1.035860539640533e-03 -9.727582276965400e-04 -9.098699723765095e-04 -8.471964258025965e-04 + -7.847382448782223e-04 -7.224960912864980e-04 -6.604706314880008e-04 -5.986625367175086e-04 -5.370724829806470e-04 + -4.757011510492407e-04 -4.145492264564160e-04 -3.536173994909142e-04 -2.929063651903851e-04 -2.324168233342844e-04 + -1.721494784359630e-04 -1.121050397336399e-04 -5.228422118118529e-05 7.312258562537011e-06 6.668367614472029e-05 + 1.258293035304972e-04 1.847484080160393e-04 2.434402522422229e-04 3.019040942089412e-04 3.601391872911717e-04 + 4.181447802547929e-04 4.759201172743947e-04 5.334644379514759e-04 5.907769773334388e-04 6.478569659342782e-04 + 7.047036297555762e-04 7.613161903087368e-04 8.176938646385349e-04 8.738358653471887e-04 9.297414006200733e-04 + 9.854096742521116e-04 1.040839885675338e-03 1.096031229987883e-03 1.150982897983637e-03 1.205694076183533e-03 + 1.260163946867738e-03 1.314391688108996e-03 1.368376473807523e-03 1.422117473726844e-03 1.475613853530856e-03 + 1.528864774822529e-03 1.581869395183454e-03 1.634626868215116e-03 1.687136343581233e-03 1.739396967051454e-03 + 1.791407880546731e-03 1.843168222185764e-03 1.894677126332894e-03 1.945933723647804e-03 1.996937141136074e-03 + 2.047686502201836e-03 2.098180926701572e-03 2.148419530999293e-03 2.198401428023835e-03 2.248125727327171e-03 + 2.297591535144351e-03 2.346797954455627e-03 2.395744085049238e-03 2.444429023586900e-03 2.492851863670104e-03 + 2.541011695908512e-03 2.588907607990088e-03 2.636538684752841e-03 2.683904008258234e-03 2.731002657866706e-03 + 2.777833710314490e-03 2.824396239792773e-03 2.870689318028338e-03 2.916712014366061e-03 2.962463395853612e-03 + 3.007942527327589e-03 3.053148471502013e-03 3.098080289058467e-03 3.142737038738218e-03 3.187117777436551e-03 + 3.231221560298816e-03 3.275047440818590e-03 3.318594470938026e-03 3.361861701149986e-03 3.404848180602511e-03 + 3.447552957205244e-03 3.489975077737895e-03 3.532113587961082e-03 3.573967532729171e-03 3.615535956105055e-03 + 3.656817901477772e-03 3.697812411681450e-03 3.738518529117300e-03 3.778935295877380e-03 3.819061753870491e-03 + 3.858896944950944e-03 3.898439911048962e-03 3.937689694303696e-03 3.976645337198643e-03 4.015305882699081e-03 + 4.053670374392235e-03 4.091737856629464e-03 4.129507374670966e-03 4.166977974832951e-03 4.204148704636970e-03 + 4.241018612961951e-03 4.277586750198417e-03 4.313852168405170e-03 4.349813921468553e-03 4.385471065264042e-03 + 4.420822657820209e-03 4.455867759485419e-03 4.490605433096665e-03 4.525034744151175e-03 4.559154760980325e-03 + 4.592964554926026e-03 4.626463200519748e-03 4.659649775663930e-03 4.692523361815823e-03 4.725083044174078e-03 + 4.757327911867453e-03 4.789257058146435e-03 4.820869580577110e-03 4.852164581237406e-03 4.883141166916277e-03 + 4.913798449314911e-03 4.944135545250574e-03 4.974151576863181e-03 5.003845671823821e-03 5.033216963546343e-03 + 5.062264591400896e-03 5.090987700930113e-03 5.119385444067834e-03 5.147456979360052e-03 5.175201472188294e-03 + 5.202618094995565e-03 5.229706027514399e-03 5.256464456997498e-03 5.282892578450547e-03 5.308989594867383e-03 + 5.334754717467548e-03 5.360187165935911e-03 5.385286168664767e-03 5.410050962997998e-03 5.434480795477384e-03 + 5.458574922091267e-03 5.482332608525188e-03 5.505753130414606e-03 5.528835773599793e-03 5.551579834382676e-03 + 5.573984619785690e-03 5.596049447812612e-03 5.617773647711185e-03 5.639156560237815e-03 5.660197537923954e-03 + 5.680895945344178e-03 5.701251159386312e-03 5.721262569522823e-03 5.740929578084275e-03 5.760251600534003e-03 + 5.779228065744467e-03 5.797858416275215e-03 5.816142108651984e-03 5.834078613647327e-03 5.851667416562558e-03 + 5.868908017510778e-03 5.885799931701252e-03 5.902342689724711e-03 5.918535837839785e-03 5.934378938260394e-03 + 5.949871569443969e-03 5.965013326380511e-03 5.979803820882426e-03 5.994242681874894e-03 6.008329555686982e-03 + 6.022064106343124e-03 6.035446015855033e-03 6.048474984513949e-03 6.061150731183149e-03 6.073472993590540e-03 + 6.085441528621329e-03 6.097056112610684e-03 6.108316541636205e-03 6.119222631810211e-03 6.129774219571577e-03 + 6.139971161977335e-03 6.149813336993524e-03 6.159300643785511e-03 6.168433003007593e-03 6.177210357091542e-03 + 6.185632670534472e-03 6.193699930185336e-03 6.201412145530417e-03 6.208769348977418e-03 6.215771596138094e-03 + 6.222418966109484e-03 6.228711561753234e-03 6.234649509973336e-03 6.240232961991823e-03 6.245462093622483e-03 + 6.250337105542366e-03 6.254858223560998e-03 6.259025698887188e-03 6.262839808393247e-03 6.266300854876523e-03 + 6.269409167318096e-03 6.272165101138567e-03 6.274569038450663e-03 6.276621388308685e-03 6.278322586954520e-03 + 6.279673098060217e-03 6.280673412966835e-03 6.281324050919529e-03 6.281625559298736e-03 6.281578513847229e-03 + 6.281183518893000e-03 6.280441207567743e-03 6.279352242020880e-03 6.277917313628864e-03 6.276137143199786e-03 + 6.274012481172964e-03 6.271544107813464e-03 6.268732833401463e-03 6.265579498416101e-03 6.262084973713996e-03 + 6.258250160701909e-03 6.254075991503755e-03 6.249563429121589e-03 6.244713467590510e-03 6.239527132127365e-03 + 6.234005479272982e-03 6.228149597028035e-03 6.221960604982105e-03 6.215439654436012e-03 6.208587928517263e-03 + 6.201406642288269e-03 6.193897042847537e-03 6.186060409423412e-03 6.177898053460347e-03 6.169411318697623e-03 + 6.160601581240277e-03 6.151470249622179e-03 6.142018764861197e-03 6.132248600506080e-03 6.122161262675341e-03 + 6.111758290087551e-03 6.101041254083344e-03 6.090011758638783e-03 6.078671440369980e-03 6.067021968529001e-03 + 6.055065044990821e-03 6.042802404231264e-03 6.030235813295874e-03 6.017367071759540e-03 6.004198011676843e-03 + 5.990730497523066e-03 5.976966426125610e-03 5.962907726585963e-03 5.948556360192070e-03 5.933914320320834e-03 + 5.918983632331027e-03 5.903766353446232e-03 5.888264572627926e-03 5.872480410438644e-03 5.856416018895028e-03 + 5.840073581310876e-03 5.823455312130147e-03 5.806563456749623e-03 5.789400291331647e-03 5.771968122606398e-03 + 5.754269287664086e-03 5.736306153736910e-03 5.718081117970546e-03 5.699596607185591e-03 5.680855077628598e-03 + 5.661859014712783e-03 5.642610932748597e-03 5.623113374663840e-03 5.603368911713689e-03 5.583380143180451e-03 + 5.563149696062998e-03 5.542680224756250e-03 5.521974410720293e-03 5.501034962139584e-03 5.479864613572119e-03 + 5.458466125588458e-03 5.436842284401028e-03 5.414995901483513e-03 5.392929813180388e-03 5.370646880306936e-03 + 5.348149987739460e-03 5.325442043996103e-03 5.302525980808295e-03 5.279404752682704e-03 5.256081336454115e-03 + 5.232558730829293e-03 5.208839955921597e-03 5.184928052777090e-03 5.160826082891643e-03 5.136537127719627e-03 + 5.112064288174192e-03 5.087410684119092e-03 5.062579453852527e-03 5.037573753583049e-03 5.012396756897426e-03 + 4.987051654221181e-03 4.961541652271382e-03 4.935869973502331e-03 4.910039855544162e-03 4.884054550634324e-03 + 4.857917325042674e-03 4.831631458489727e-03 4.805200243558812e-03 4.778626985102139e-03 4.751914999640778e-03 + 4.725067614759165e-03 4.698088168494137e-03 4.670980008718599e-03 4.643746492520417e-03 4.616390985576316e-03 + 4.588916861521444e-03 4.561327501314625e-03 4.533626292599419e-03 4.505816629061563e-03 4.477901909782873e-03 + 4.449885538591616e-03 4.421770923410249e-03 4.393561475599933e-03 4.365260609302857e-03 4.336871740782245e-03 + 4.308398287760196e-03 4.279843668753976e-03 4.251211302410877e-03 4.222504606841648e-03 4.193726998953342e-03 + 4.164881893781172e-03 4.135972703820228e-03 4.107002838357087e-03 4.077975702801365e-03 4.048894698017951e-03 + 4.019763219659929e-03 3.990584657502267e-03 3.961362394777132e-03 3.932099807510353e-03 3.902800263859975e-03 + 3.873467123456830e-03 3.844103736747289e-03 3.814713444338926e-03 3.785299576348754e-03 3.755865451754834e-03 + 3.726414377751284e-03 3.696949649106788e-03 3.667474547527225e-03 3.637992341022506e-03 3.608506283277637e-03 + 3.579019613028819e-03 3.549535553444169e-03 3.520057311509854e-03 3.490588077421712e-03 3.461131023982289e-03 + 3.431689306004067e-03 3.402266059718800e-03 3.372864402193044e-03 3.343487430750612e-03 3.314138222401533e-03 + 3.284819833278287e-03 3.255535298079296e-03 3.226287629519699e-03 3.197079817789972e-03 3.167914830022467e-03 + 3.138795609765740e-03 3.109725076467529e-03 3.080706124965778e-03 3.051741624988552e-03 3.022834420662728e-03 + 2.993987330031421e-03 2.965203144580787e-03 2.936484628776042e-03 2.907834519606748e-03 2.879255526141974e-03 + 2.850750329094847e-03 2.822321580397184e-03 2.793971902784097e-03 2.765703889388480e-03 2.737520103346034e-03 + 2.709423077410307e-03 2.681415313578364e-03 2.653499282727002e-03 2.625677424259379e-03 2.597952145762542e-03 + 2.570325822675754e-03 2.542800797969441e-03 2.515379381835416e-03 2.488063851387724e-03 2.460856450374792e-03 + 2.433759388902625e-03 2.406774843168965e-03 2.379904955208794e-03 2.353151832651051e-03 2.326517548486333e-03 + 2.300004140846178e-03 2.273613612793262e-03 2.247347932123073e-03 2.221209031176842e-03 2.195198806665528e-03 + 2.169319119505244e-03 2.143571794663890e-03 2.117958621018790e-03 2.092481351225809e-03 2.067141701599282e-03 + 2.041941352003283e-03 2.016881945753895e-03 1.991965089532339e-03 1.967192353309303e-03 1.942565270279887e-03 + 1.918085336809581e-03 1.893754012390954e-03 1.869572719610900e-03 1.845542844128613e-03 1.821665734664115e-03 + 1.797942702996993e-03 1.774375023975780e-03 1.750963935537270e-03 1.727710638736181e-03 1.704616297784842e-03 + 1.681682040102634e-03 1.658908956375422e-03 1.636298100624674e-03 1.613850490285986e-03 1.591567106297326e-03 + 1.569448893196340e-03 1.547496759227043e-03 1.525711576455575e-03 1.504094180894730e-03 1.482645372637442e-03 + 1.461365915998935e-03 1.440256539667195e-03 1.419317936862095e-03 1.398550765502459e-03 1.377955648381393e-03 + 1.357533173349522e-03 1.337283893505855e-03 1.317208327396403e-03 1.297306959220269e-03 1.277580239042869e-03 + 1.258028583016533e-03 1.238652373607859e-03 1.219451959832033e-03 1.200427657493816e-03 1.181579749434877e-03 + 1.162908485787667e-03 1.144414084235259e-03 1.126096730277324e-03 1.107956577501947e-03 1.089993747862990e-03 + 1.072208331963084e-03 1.054600389341971e-03 1.037169948769867e-03 1.019917008546065e-03 1.002841536802149e-03 + 9.859434718100526e-04 9.692227222946143e-04 9.526791677503715e-04 9.363126587626644e-04 9.201230173327627e-04 + 9.041100372067323e-04 8.882734842081940e-04 8.726130965744384e-04 8.571285852960571e-04 8.418196344598013e-04 + 8.266859015943920e-04 8.117270180193747e-04 7.969425891967278e-04 7.823321950849648e-04 7.678953904958790e-04 + 7.536317054534213e-04 7.395406455548635e-04 7.256216923339795e-04 7.118743036259867e-04 6.982979139343934e-04 + 6.848919347992675e-04 6.716557551670789e-04 6.585887417618500e-04 6.456902394574002e-04 6.329595716507376e-04 + 6.203960406363686e-04 6.079989279813001e-04 5.957674949008586e-04 5.837009826349057e-04 5.717986128245709e-04 + 5.600595878892871e-04 5.484830914039218e-04 5.370682884760683e-04 5.258143261232883e-04 5.147203336501132e-04 + 5.037854230249154e-04 4.930086892562821e-04 4.823892107690053e-04 4.719260497795006e-04 4.616182526704748e-04 + 4.514648503649116e-04 4.414648586991889e-04 4.316172787951653e-04 4.219210974313495e-04 4.123752874128185e-04 + 4.029788079400074e-04 3.937306049762028e-04 3.846296116135940e-04 3.756747484379464e-04 3.668649238917453e-04 + 3.581990346356721e-04 3.496759659085209e-04 3.412945918852737e-04 3.330537760334478e-04 3.249523714675749e-04 + 3.169892213016947e-04 3.091631589999605e-04 3.014730087251123e-04 2.939175856849205e-04 2.864956964764824e-04 + 2.792061394282732e-04 2.720477049400076e-04 2.650191758202157e-04 2.581193276214311e-04 2.513469289730929e-04 + 2.447007419119545e-04 2.381795222101023e-04 2.317820197004901e-04 2.255069785999124e-04 2.193531378294815e-04 + 2.133192313325263e-04 2.074039883898426e-04 2.016061339323889e-04 1.959243888512612e-04 1.903574703050431e-04 + 1.849040920244638e-04 1.795629646143069e-04 1.743327958526344e-04 1.692122909872684e-04 1.642001530294800e-04 + 1.592950830449735e-04 1.544957804420376e-04 1.498009432569547e-04 1.452092684366188e-04 1.407194521183276e-04 + 1.363301899068101e-04 1.320401771484540e-04 1.278481092026973e-04 1.237526817106717e-04 1.197525908609973e-04 + 1.158465336528160e-04 1.120332081560328e-04 1.083113137687417e-04 1.046795514719200e-04 1.011366240813059e-04 + 9.768123649654712e-05 9.431209594759674e-05 9.102791223834493e-05 8.782739798754946e-05 8.470926886705128e-05 + 8.167224383726544e-05 7.871504538002631e-05 7.583639972872691e-05 7.303503709583344e-05 7.030969189776491e-05 + 6.765910297713939e-05 6.508201382244567e-05 6.257717278513996e-05 6.014333329416893e-05 5.777925406799124e-05 + 5.548369932406064e-05 5.325543898584204e-05 5.109324888736495e-05 4.899591097532181e-05 4.696221350876977e-05 + 4.499095125644300e-05 4.308092569168689e-05 4.123094518507985e-05 3.943982519472248e-05 3.770638845426000e-05 + 3.602946515864968e-05 3.440789314768766e-05 3.284051808735814e-05 3.132619364899296e-05 2.986378168630368e-05 + 2.845215241030175e-05 2.709018456212618e-05 2.577676558382972e-05 2.451079178714253e-05 2.329116852023303e-05 + 2.211681033252280e-05 2.098664113755493e-05 1.989959437397193e-05 1.885461316462301e-05 1.785065047382453e-05 + 1.688666926282032e-05 1.596164264346408e-05 1.507455403014788e-05 1.422439729002680e-05 1.341017689154798e-05 + 1.263090805133382e-05 1.188561687944210e-05 1.117334052302906e-05 1.049312730845735e-05 9.844036881873609e-06 + 9.225140348281083e-06 8.635520409151336e-06 8.074271498589526e-06 7.540499918096467e-06 7.033323969951824e-06 + 6.551874089244981e-06 6.095292974591078e-06 5.662735717557114e-06 5.253369930824445e-06 4.866375875125262e-06 + 4.500946584971578e-06 4.156287993213561e-06 3.831619054451844e-06 3.526171867329301e-06 3.239191795736605e-06 + 2.969937588951011e-06 2.717681500741784e-06 2.481709407466100e-06 2.261320925180209e-06 2.055829525795500e-06 + 1.864562652302898e-06 1.686861833089476e-06 1.522082795376040e-06 1.369595577795470e-06 1.228784642139583e-06 + 1.099048984296453e-06 9.798022444005176e-07 8.704728162202638e-07 7.705039558045239e-07 6.793538894085495e-07 + 5.964959207232716e-07 5.214185374261972e-07 4.536255170762997e-07 3.926360323718992e-07 3.379847557905782e-07 + 2.892219636309980e-07 2.459136394743678e-07 2.076415770831476e-07 1.740034827551796e-07 1.446130771489680e-07 + 1.191001965971448e-07 9.711089392338240e-08 7.830753877772406e-08 6.236891750520262e-08 4.899033256143233e-08 + 3.788370148843949e-08 2.877765546375461e-08 2.141763743456902e-08 1.556599984873186e-08 1.100210199335999e-08 + 7.522406951322013e-09 4.940578185333285e-09 3.087575758547594e-09 1.811752200079959e-09 9.789480231116246e-10 + 4.725869026137805e-10 1.937705190701948e-10 6.137307387111768e-11 1.213548138731746e-11 7.592420426160233e-13 diff --git a/examples/mc/in.sgcmc.eam b/examples/mc/in.sgcmc.eam new file mode 100644 index 0000000000..c649da8e8f --- /dev/null +++ b/examples/mc/in.sgcmc.eam @@ -0,0 +1,48 @@ +# general variables +variable temperature equal 700 +variable size equal 20 + +# variables for 'fix sgcmc' +variable nsteps_mc equal 100 +variable swap_fraction equal 0.2 +variable temperature_mc equal ${temperature} +variable deltamu equal -0.70 +variable target_concentration equal 0.02 +variable kappa equal 1e3 + +# general settings +units metal +atom_style atomic + +# set up structure +boundary p p p +lattice bcc 2.88 +region box block 0 ${size} 0 ${size} 0 ${size} +create_box 2 box +create_atoms 1 box +reset_timestep 0 +timestep 0.0025 + +# set up interaction +pair_style eam/fs +pair_coeff * * FeCu.pasianot.eamfs Fe Cu + +# initialize velocities +variable double_temp equal ${temperature}*2 +velocity all create ${double_temp} 428459 dist gaussian + +# what and how to run +fix integrate all npt & + temp ${temperature} ${temperature} 1.7 & + aniso 0.0 0.0 1.5 +fix mc all sgcmc ${nsteps_mc} ${swap_fraction} ${temperature_mc} ${deltamu} & + randseed 324234 & + variance ${kappa} ${target_concentration} + +# set up output +thermo 100 +thermo_style custom step temp atoms pe press & + lx ly lz f_mc[1] f_mc[2] f_mc[3] f_mc[4] +#dump 1 all custom 200 mc.*.dump id type x y z + +run 2000 diff --git a/examples/mc/log.13Dec22.sgcmc.eam.g++.1 b/examples/mc/log.13Dec22.sgcmc.eam.g++.1 new file mode 100644 index 0000000000..4c242f266a --- /dev/null +++ b/examples/mc/log.13Dec22.sgcmc.eam.g++.1 @@ -0,0 +1,143 @@ +LAMMPS (3 Nov 2022) + using 1 OpenMP thread(s) per MPI task +# general variables +variable temperature equal 700 +variable size equal 20 + +# variables for 'fix sgcmc' +variable nsteps_mc equal 100 +variable swap_fraction equal 0.2 +variable temperature_mc equal ${temperature} +variable temperature_mc equal 700 +variable deltamu equal -0.70 +variable target_concentration equal 0.02 +variable kappa equal 1e3 + +# general settings +units metal +atom_style atomic + +# set up structure +boundary p p p +lattice bcc 2.88 +Lattice spacing in x,y,z = 2.88 2.88 2.88 +region box block 0 ${size} 0 ${size} 0 ${size} +region box block 0 20 0 ${size} 0 ${size} +region box block 0 20 0 20 0 ${size} +region box block 0 20 0 20 0 20 +create_box 2 box +Created orthogonal box = (0 0 0) to (57.6 57.6 57.6) + 1 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 16000 atoms + using lattice units in orthogonal box = (0 0 0) to (57.6 57.6 57.6) + create_atoms CPU = 0.001 seconds +reset_timestep 0 +timestep 0.0025 + +# set up interaction +pair_style eam/fs +pair_coeff * * FeCu.pasianot.eamfs Fe Cu + +# initialize velocities +variable double_temp equal ${temperature}*2 +variable double_temp equal 700*2 +velocity all create ${double_temp} 428459 dist gaussian +velocity all create 1400 428459 dist gaussian + +# what and how to run +fix integrate all npt temp ${temperature} ${temperature} 1.7 aniso 0.0 0.0 1.5 +fix integrate all npt temp 700 ${temperature} 1.7 aniso 0.0 0.0 1.5 +fix integrate all npt temp 700 700 1.7 aniso 0.0 0.0 1.5 +fix mc all sgcmc ${nsteps_mc} ${swap_fraction} ${temperature_mc} ${deltamu} randseed 324234 variance ${kappa} ${target_concentration} +fix mc all sgcmc 100 ${swap_fraction} ${temperature_mc} ${deltamu} randseed 324234 variance ${kappa} ${target_concentration} +fix mc all sgcmc 100 0.2 ${temperature_mc} ${deltamu} randseed 324234 variance ${kappa} ${target_concentration} +fix mc all sgcmc 100 0.2 700 ${deltamu} randseed 324234 variance ${kappa} ${target_concentration} +fix mc all sgcmc 100 0.2 700 -0.7 randseed 324234 variance ${kappa} ${target_concentration} +fix mc all sgcmc 100 0.2 700 -0.7 randseed 324234 variance 1000 ${target_concentration} +fix mc all sgcmc 100 0.2 700 -0.7 randseed 324234 variance 1000 0.02 + SGC - Number of MD timesteps: 100 + SGC - Fraction of swap atoms: 0.2 + SGC - Temperature: %f + SGC - Chemical potential of species 2: -0.7 + SGC - Random number seed: 324234 + SGC - Kappa: 1000 + SGC - Target concentration of species 2: 0.02 + SGC - Target concentration of species 1: 0.98 + +# set up output +thermo 100 +thermo_style custom step temp atoms pe press lx ly lz f_mc[1] f_mc[2] f_mc[3] f_mc[4] +#dump 1 all custom 200 mc.*.dump id type x y z + +run 2000 + SGC - Interaction radius: 5.50679 +Neighbor list info ... + update: every = 1 steps, delay = 0 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 7.50679 + ghost atom cutoff = 7.50679 + binsize = 3.753395, bins = 16 16 16 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair eam/fs, perpetual, half/full from (2) + attributes: half, newton on + pair build: halffull/newton + stencil: none + bin: none + (2) fix sgcmc, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 25.06 | 25.06 | 25.06 Mbytes + Step Temp Atoms PotEng Press Lx Ly Lz f_mc[1] f_mc[2] f_mc[3] f_mc[4] + 0 1400 16000 -65889.786 -28854.541 57.6 57.6 57.6 0 0 1 0 + 100 734.32713 16000 -64514.143 5439.4277 57.327173 57.322333 57.318848 12 3188 0.99925 0.00075 + 200 678.63428 16000 -64386.224 -920.7819 57.423954 57.409111 57.412727 22 3178 0.997875 0.002125 + 300 683.24749 16000 -64370.598 -1609.0429 57.427441 57.424568 57.426831 20 3180 0.996625 0.003375 + 400 689.28007 16000 -64359.115 2489.3933 57.376537 57.379856 57.372895 27 3173 0.9949375 0.0050625 + 500 693.85333 16000 -64337.222 -1935.9815 57.435754 57.43493 57.427453 18 3182 0.9938125 0.0061875 + 600 693.52855 16000 -64314.465 380.8264 57.410314 57.397604 57.408337 21 3179 0.9925 0.0075 + 700 690.62721 16000 -64284.369 208.21986 57.412407 57.407285 57.410684 31 3169 0.9905625 0.0094375 + 800 687.08129 16000 -64244.443 -936.31731 57.425765 57.438983 57.421321 31 3169 0.988625 0.011375 + 900 696.07347 16000 -64230.523 932.65537 57.414588 57.413865 57.402817 27 3173 0.9869375 0.0130625 + 1000 691.70667 16000 -64194.151 -690.02055 57.429033 57.420053 57.443245 23 3177 0.9855 0.0145 + 1100 691.21797 16000 -64169.016 -86.623524 57.42147 57.424262 57.436841 35 3165 0.9833125 0.0166875 + 1200 691.27155 16000 -64134.443 411.68129 57.425111 57.432481 57.4118 42 3158 0.9806875 0.0193125 + 1300 693.76194 16000 -64098.615 -943.9013 57.446704 57.448382 57.440727 64 3136 0.9800625 0.0199375 + 1400 691.16411 16000 -64080.423 1248.7921 57.417118 57.409651 57.435099 104 3096 0.9799375 0.0200625 + 1500 694.49681 16000 -64084.428 -179.5269 57.440533 57.432581 57.434409 68 3132 0.9799375 0.0200625 + 1600 697.58329 16000 -64089.682 -761.14401 57.450616 57.450654 57.422293 97 3103 0.98 0.02 + 1700 697.57549 16000 -64090.2 1370.3938 57.399319 57.423969 57.426788 85 3115 0.9801875 0.0198125 + 1800 694.18435 16000 -64083.812 -1381.5398 57.446114 57.438096 57.475109 84 3116 0.9799375 0.0200625 + 1900 702.82577 16000 -64096.005 918.83968 57.452789 57.404638 57.408161 70 3130 0.9799375 0.0200625 + 2000 696.02963 16000 -64080.059 276.99031 57.443085 57.452012 57.403928 81 3119 0.980125 0.019875 +Loop time of 48.793 on 1 procs for 2000 steps with 16000 atoms + +Performance: 8.854 ns/day, 2.711 hours/ns, 40.989 timesteps/s, 655.831 katom-step/s +99.8% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 47.46 | 47.46 | 47.46 | 0.0 | 97.27 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0.13269 | 0.13269 | 0.13269 | 0.0 | 0.27 +Output | 0.0011432 | 0.0011432 | 0.0011432 | 0.0 | 0.00 +Modify | 1.0996 | 1.0996 | 1.0996 | 0.0 | 2.25 +Other | | 0.0993 | | | 0.20 + +Nlocal: 16000 ave 16000 max 16000 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 17201 ave 17201 max 17201 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 1.344e+06 ave 1.344e+06 max 1.344e+06 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +FullNghs: 2.688e+06 ave 2.688e+06 max 2.688e+06 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 2688000 +Ave neighs/atom = 168 +Neighbor list builds = 0 +Dangerous builds = 0 +Total wall time: 0:00:48 diff --git a/examples/mc/log.13Dec22.sgcmc.eam.g++.4 b/examples/mc/log.13Dec22.sgcmc.eam.g++.4 new file mode 100644 index 0000000000..403a40ebae --- /dev/null +++ b/examples/mc/log.13Dec22.sgcmc.eam.g++.4 @@ -0,0 +1,143 @@ +LAMMPS (3 Nov 2022) + using 1 OpenMP thread(s) per MPI task +# general variables +variable temperature equal 700 +variable size equal 20 + +# variables for 'fix sgcmc' +variable nsteps_mc equal 100 +variable swap_fraction equal 0.2 +variable temperature_mc equal ${temperature} +variable temperature_mc equal 700 +variable deltamu equal -0.70 +variable target_concentration equal 0.02 +variable kappa equal 1e3 + +# general settings +units metal +atom_style atomic + +# set up structure +boundary p p p +lattice bcc 2.88 +Lattice spacing in x,y,z = 2.88 2.88 2.88 +region box block 0 ${size} 0 ${size} 0 ${size} +region box block 0 20 0 ${size} 0 ${size} +region box block 0 20 0 20 0 ${size} +region box block 0 20 0 20 0 20 +create_box 2 box +Created orthogonal box = (0 0 0) to (57.6 57.6 57.6) + 1 by 2 by 2 MPI processor grid +create_atoms 1 box +Created 16000 atoms + using lattice units in orthogonal box = (0 0 0) to (57.6 57.6 57.6) + create_atoms CPU = 0.001 seconds +reset_timestep 0 +timestep 0.0025 + +# set up interaction +pair_style eam/fs +pair_coeff * * FeCu.pasianot.eamfs Fe Cu + +# initialize velocities +variable double_temp equal ${temperature}*2 +variable double_temp equal 700*2 +velocity all create ${double_temp} 428459 dist gaussian +velocity all create 1400 428459 dist gaussian + +# what and how to run +fix integrate all npt temp ${temperature} ${temperature} 1.7 aniso 0.0 0.0 1.5 +fix integrate all npt temp 700 ${temperature} 1.7 aniso 0.0 0.0 1.5 +fix integrate all npt temp 700 700 1.7 aniso 0.0 0.0 1.5 +fix mc all sgcmc ${nsteps_mc} ${swap_fraction} ${temperature_mc} ${deltamu} randseed 324234 variance ${kappa} ${target_concentration} +fix mc all sgcmc 100 ${swap_fraction} ${temperature_mc} ${deltamu} randseed 324234 variance ${kappa} ${target_concentration} +fix mc all sgcmc 100 0.2 ${temperature_mc} ${deltamu} randseed 324234 variance ${kappa} ${target_concentration} +fix mc all sgcmc 100 0.2 700 ${deltamu} randseed 324234 variance ${kappa} ${target_concentration} +fix mc all sgcmc 100 0.2 700 -0.7 randseed 324234 variance ${kappa} ${target_concentration} +fix mc all sgcmc 100 0.2 700 -0.7 randseed 324234 variance 1000 ${target_concentration} +fix mc all sgcmc 100 0.2 700 -0.7 randseed 324234 variance 1000 0.02 + SGC - Number of MD timesteps: 100 + SGC - Fraction of swap atoms: 0.2 + SGC - Temperature: %f + SGC - Chemical potential of species 2: -0.7 + SGC - Random number seed: 324234 + SGC - Kappa: 1000 + SGC - Target concentration of species 2: 0.02 + SGC - Target concentration of species 1: 0.98 + +# set up output +thermo 100 +thermo_style custom step temp atoms pe press lx ly lz f_mc[1] f_mc[2] f_mc[3] f_mc[4] +#dump 1 all custom 200 mc.*.dump id type x y z + +run 2000 + SGC - Interaction radius: 5.50679 +Neighbor list info ... + update: every = 1 steps, delay = 0 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 7.50679 + ghost atom cutoff = 7.50679 + binsize = 3.753395, bins = 16 16 16 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair eam/fs, perpetual, half/full from (2) + attributes: half, newton on + pair build: halffull/newton + stencil: none + bin: none + (2) fix sgcmc, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 7.809 | 7.809 | 7.809 Mbytes + Step Temp Atoms PotEng Press Lx Ly Lz f_mc[1] f_mc[2] f_mc[3] f_mc[4] + 0 1400 16000 -65889.786 -28854.541 57.6 57.6 57.6 0 0 1 0 + 100 741.39222 16000 -64528.923 5317.2919 57.324639 57.32318 57.314928 19 3181 0.9988125 0.0011875 + 200 691.21024 16000 -64405.429 -1238.5107 57.421346 57.415516 57.412006 16 3184 0.9978125 0.0021875 + 300 686.85178 16000 -64377.312 -1816.799 57.424469 57.424335 57.425065 25 3175 0.996375 0.003625 + 400 690.93203 16000 -64358.609 2211.7763 57.376246 57.38185 57.381742 16 3184 0.995375 0.004625 + 500 696.77972 16000 -64350.3 -1583.8383 57.432929 57.426928 57.425935 22 3178 0.994125 0.005875 + 600 694.13567 16000 -64320.831 144.2514 57.420097 57.403531 57.401394 19 3181 0.9930625 0.0069375 + 700 691.79625 16000 -64295.155 384.47869 57.410637 57.412957 57.40707 25 3175 0.991625 0.008375 + 800 692.12887 16000 -64270.053 -764.91901 57.415576 57.43037 57.428708 21 3179 0.9903125 0.0096875 + 900 693.26555 16000 -64249.904 666.65335 57.408245 57.407059 57.417437 34 3166 0.9885625 0.0114375 + 1000 697.97016 16000 -64230.234 -562.91022 57.432317 57.424316 57.423668 28 3172 0.9868125 0.0131875 + 1100 686.52149 16000 -64177.536 -267.21801 57.429 57.434594 57.419878 35 3165 0.984875 0.015125 + 1200 691.55047 16000 -64156.268 810.17844 57.422282 57.413529 57.422883 37 3163 0.9828125 0.0171875 + 1300 691.91944 16000 -64124.602 -1012.7184 57.441793 57.433848 57.446947 32 3168 0.9810625 0.0189375 + 1400 701.78807 16000 -64116.475 180.93518 57.425156 57.438679 57.419575 76 3124 0.9799375 0.0200625 + 1500 692.75501 16000 -64080.481 176.96902 57.429275 57.442405 57.426519 81 3119 0.980125 0.019875 + 1600 694.11818 16000 -64083.435 -785.49617 57.442143 57.432114 57.458304 86 3114 0.98 0.02 + 1700 697.72576 16000 -64088.874 1227.5194 57.423225 57.408678 57.427056 75 3125 0.9800625 0.0199375 + 1800 697.24171 16000 -64086.742 -1166.4832 57.447168 57.47416 57.425229 67 3133 0.98025 0.01975 + 1900 699.53558 16000 -64092.97 214.99908 57.425459 57.437864 57.431139 86 3114 0.98025 0.01975 + 2000 699.00277 16000 -64089.117 978.69672 57.429266 57.39107 57.448289 81 3119 0.9798125 0.0201875 +Loop time of 15.2907 on 4 procs for 2000 steps with 16000 atoms + +Performance: 28.252 ns/day, 0.849 hours/ns, 130.798 timesteps/s, 2.093 Matom-step/s +99.0% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 14.31 | 14.404 | 14.479 | 1.6 | 94.20 +Neigh | 0.090756 | 0.091006 | 0.091258 | 0.1 | 0.60 +Comm | 0.27623 | 0.35113 | 0.44457 | 10.4 | 2.30 +Output | 0.0006002 | 0.0013338 | 0.0035331 | 3.5 | 0.01 +Modify | 0.38023 | 0.38128 | 0.38228 | 0.2 | 2.49 +Other | | 0.06148 | | | 0.40 + +Nlocal: 4000 ave 4017 max 3970 min +Histogram: 1 0 0 0 0 0 1 0 1 1 +Nghost: 8274.75 ave 8305 max 8257 min +Histogram: 1 1 0 1 0 0 0 0 0 1 +Neighs: 311257 ave 313506 max 308273 min +Histogram: 1 0 0 0 0 1 0 1 0 1 +FullNghs: 622514 ave 626251 max 616896 min +Histogram: 1 0 0 0 0 0 1 1 0 1 + +Total # of neighbors = 2490056 +Ave neighs/atom = 155.6285 +Neighbor list builds = 6 +Dangerous builds = 0 +Total wall time: 0:00:15 diff --git a/lib/linalg/README b/lib/linalg/README index de2d83dcbd..e3b817cacc 100644 --- a/lib/linalg/README +++ b/lib/linalg/README @@ -1,13 +1,16 @@ -This directory has BLAS and LAPACK files needed by the ATC and -AWPMD packages, and possibly by other packages in the future. +This directory has generic BLAS and LAPACK source files needed by the +ATC, AWPMD, ELECTRODE, LATTE, and ML-POD packages (and possibly by other +packages) in the future that can be used instead of platform or vendor +optimized BLAS/LAPACK library. Note that this is an *incomplete* subset of full BLAS/LAPACK. +The files correspond to LAPACK version 3.11.0. + You should only need to build and use the library in this directory if -you want to build LAMMPS with the ATC and/or AWPMD packages -AND you do not have any other suitable BLAS and LAPACK libraries -installed on your system. E.g. ATLAS, GOTO-BLAS, OpenBLAS, ACML, or -MKL. +you want to build LAMMPS with one of the listed packages AND you do not +have any other suitable BLAS and LAPACK libraries installed on your +system (like ATLAS, GOTO-BLAS, OpenBLAS, ACML, MKL and so on). You can type "make lib-linalg" from the src directory to see help on how to build this library via make commands, or you can do the same @@ -27,3 +30,4 @@ liblinalg.a the library LAMMPS will link against You can then include this library and its path in the Makefile.lammps file of any packages that need it. As an example, see the lib/atc/Makefile.lammps.linalg file. + diff --git a/lib/linalg/dgelss.f b/lib/linalg/dgelss.f index 8ed703fcf2..c4190f2e09 100644 --- a/lib/linalg/dgelss.f +++ b/lib/linalg/dgelss.f @@ -254,11 +254,11 @@ * * Compute space needed for DGEQRF CALL DGEQRF( M, N, A, LDA, DUM(1), DUM(1), -1, INFO ) - LWORK_DGEQRF=DUM(1) + LWORK_DGEQRF = INT( DUM(1) ) * Compute space needed for DORMQR CALL DORMQR( 'L', 'T', M, NRHS, N, A, LDA, DUM(1), B, $ LDB, DUM(1), -1, INFO ) - LWORK_DORMQR=DUM(1) + LWORK_DORMQR = INT( DUM(1) ) MM = N MAXWRK = MAX( MAXWRK, N + LWORK_DGEQRF ) MAXWRK = MAX( MAXWRK, N + LWORK_DORMQR ) @@ -273,15 +273,15 @@ * Compute space needed for DGEBRD CALL DGEBRD( MM, N, A, LDA, S, DUM(1), DUM(1), $ DUM(1), DUM(1), -1, INFO ) - LWORK_DGEBRD=DUM(1) + LWORK_DGEBRD = INT( DUM(1) ) * Compute space needed for DORMBR CALL DORMBR( 'Q', 'L', 'T', MM, NRHS, N, A, LDA, DUM(1), $ B, LDB, DUM(1), -1, INFO ) - LWORK_DORMBR=DUM(1) + LWORK_DORMBR = INT( DUM(1) ) * Compute space needed for DORGBR CALL DORGBR( 'P', N, N, N, A, LDA, DUM(1), $ DUM(1), -1, INFO ) - LWORK_DORGBR=DUM(1) + LWORK_DORGBR = INT( DUM(1) ) * Compute total workspace needed MAXWRK = MAX( MAXWRK, 3*N + LWORK_DGEBRD ) MAXWRK = MAX( MAXWRK, 3*N + LWORK_DORMBR ) @@ -305,23 +305,23 @@ * Compute space needed for DGELQF CALL DGELQF( M, N, A, LDA, DUM(1), DUM(1), $ -1, INFO ) - LWORK_DGELQF=DUM(1) + LWORK_DGELQF = INT( DUM(1) ) * Compute space needed for DGEBRD CALL DGEBRD( M, M, A, LDA, S, DUM(1), DUM(1), $ DUM(1), DUM(1), -1, INFO ) - LWORK_DGEBRD=DUM(1) + LWORK_DGEBRD = INT( DUM(1) ) * Compute space needed for DORMBR CALL DORMBR( 'Q', 'L', 'T', M, NRHS, N, A, LDA, $ DUM(1), B, LDB, DUM(1), -1, INFO ) - LWORK_DORMBR=DUM(1) + LWORK_DORMBR = INT( DUM(1) ) * Compute space needed for DORGBR CALL DORGBR( 'P', M, M, M, A, LDA, DUM(1), $ DUM(1), -1, INFO ) - LWORK_DORGBR=DUM(1) + LWORK_DORGBR = INT( DUM(1) ) * Compute space needed for DORMLQ CALL DORMLQ( 'L', 'T', N, NRHS, M, A, LDA, DUM(1), $ B, LDB, DUM(1), -1, INFO ) - LWORK_DORMLQ=DUM(1) + LWORK_DORMLQ = INT( DUM(1) ) * Compute total workspace needed MAXWRK = M + LWORK_DGELQF MAXWRK = MAX( MAXWRK, M*M + 4*M + LWORK_DGEBRD ) @@ -341,15 +341,15 @@ * Compute space needed for DGEBRD CALL DGEBRD( M, N, A, LDA, S, DUM(1), DUM(1), $ DUM(1), DUM(1), -1, INFO ) - LWORK_DGEBRD=DUM(1) + LWORK_DGEBRD = INT( DUM(1) ) * Compute space needed for DORMBR CALL DORMBR( 'Q', 'L', 'T', M, NRHS, M, A, LDA, $ DUM(1), B, LDB, DUM(1), -1, INFO ) - LWORK_DORMBR=DUM(1) + LWORK_DORMBR = INT( DUM(1) ) * Compute space needed for DORGBR CALL DORGBR( 'P', M, N, M, A, LDA, DUM(1), $ DUM(1), -1, INFO ) - LWORK_DORGBR=DUM(1) + LWORK_DORGBR = INT( DUM(1) ) MAXWRK = 3*M + LWORK_DGEBRD MAXWRK = MAX( MAXWRK, 3*M + LWORK_DORMBR ) MAXWRK = MAX( MAXWRK, 3*M + LWORK_DORGBR ) diff --git a/lib/linalg/dlaed4.f b/lib/linalg/dlaed4.f index 3ee3ef920f..b51e23d850 100644 --- a/lib/linalg/dlaed4.f +++ b/lib/linalg/dlaed4.f @@ -328,9 +328,12 @@ IF( C.LT.ZERO ) $ C = ABS( C ) IF( C.EQ.ZERO ) THEN -* ETA = B/A +* ETA = B/A * ETA = RHO - TAU - ETA = DLTUB - TAU +* ETA = DLTUB - TAU +* +* Update proposed by Li, Ren-Cang: + ETA = -W / ( DPSI+DPHI ) ELSE IF( A.GE.ZERO ) THEN ETA = ( A+SQRT( ABS( A*A-FOUR*B*C ) ) ) / ( TWO*C ) ELSE diff --git a/lib/linalg/dlascl.f b/lib/linalg/dlascl.f index 05ad1c4f3c..0a4bf21ce1 100644 --- a/lib/linalg/dlascl.f +++ b/lib/linalg/dlascl.f @@ -272,6 +272,8 @@ ELSE MUL = CTOC / CFROMC DONE = .TRUE. + IF (MUL .EQ. ONE) + $ RETURN END IF END IF * diff --git a/lib/linalg/dlatrs.f b/lib/linalg/dlatrs.f index 43f92911d7..be156bee20 100644 --- a/lib/linalg/dlatrs.f +++ b/lib/linalg/dlatrs.f @@ -264,8 +264,8 @@ * .. External Functions .. LOGICAL LSAME INTEGER IDAMAX - DOUBLE PRECISION DASUM, DDOT, DLAMCH - EXTERNAL LSAME, IDAMAX, DASUM, DDOT, DLAMCH + DOUBLE PRECISION DASUM, DDOT, DLAMCH, DLANGE + EXTERNAL LSAME, IDAMAX, DASUM, DDOT, DLAMCH, DLANGE * .. * .. External Subroutines .. EXTERNAL DAXPY, DSCAL, DTRSV, XERBLA @@ -304,6 +304,7 @@ * * Quick return if possible * + SCALE = ONE IF( N.EQ.0 ) $ RETURN * @@ -311,7 +312,6 @@ * SMLNUM = DLAMCH( 'Safe minimum' ) / DLAMCH( 'Precision' ) BIGNUM = ONE / SMLNUM - SCALE = ONE * IF( LSAME( NORMIN, 'N' ) ) THEN * @@ -343,8 +343,67 @@ IF( TMAX.LE.BIGNUM ) THEN TSCAL = ONE ELSE - TSCAL = ONE / ( SMLNUM*TMAX ) - CALL DSCAL( N, TSCAL, CNORM, 1 ) +* +* Avoid NaN generation if entries in CNORM exceed the +* overflow threshold +* + IF( TMAX.LE.DLAMCH('Overflow') ) THEN +* Case 1: All entries in CNORM are valid floating-point numbers + TSCAL = ONE / ( SMLNUM*TMAX ) + CALL DSCAL( N, TSCAL, CNORM, 1 ) + ELSE +* Case 2: At least one column norm of A cannot be represented +* as floating-point number. Find the offdiagonal entry A( I, J ) +* with the largest absolute value. If this entry is not +/- Infinity, +* use this value as TSCAL. + TMAX = ZERO + IF( UPPER ) THEN +* +* A is upper triangular. +* + DO J = 2, N + TMAX = MAX( DLANGE( 'M', J-1, 1, A( 1, J ), 1, SUMJ ), + $ TMAX ) + END DO + ELSE +* +* A is lower triangular. +* + DO J = 1, N - 1 + TMAX = MAX( DLANGE( 'M', N-J, 1, A( J+1, J ), 1, + $ SUMJ ), TMAX ) + END DO + END IF +* + IF( TMAX.LE.DLAMCH('Overflow') ) THEN + TSCAL = ONE / ( SMLNUM*TMAX ) + DO J = 1, N + IF( CNORM( J ).LE.DLAMCH('Overflow') ) THEN + CNORM( J ) = CNORM( J )*TSCAL + ELSE +* Recompute the 1-norm without introducing Infinity +* in the summation + CNORM( J ) = ZERO + IF( UPPER ) THEN + DO I = 1, J - 1 + CNORM( J ) = CNORM( J ) + + $ TSCAL * ABS( A( I, J ) ) + END DO + ELSE + DO I = J + 1, N + CNORM( J ) = CNORM( J ) + + $ TSCAL * ABS( A( I, J ) ) + END DO + END IF + END IF + END DO + ELSE +* At least one entry of A is not a valid floating-point entry. +* Rely on TRSV to propagate Inf and NaN. + CALL DTRSV( UPLO, TRANS, DIAG, N, A, LDA, X, 1 ) + RETURN + END IF + END IF END IF * * Compute a bound on the computed solution vector to see if the diff --git a/lib/linalg/dorgbr.f b/lib/linalg/dorgbr.f index 1b242ff97f..7dfd03961e 100644 --- a/lib/linalg/dorgbr.f +++ b/lib/linalg/dorgbr.f @@ -232,7 +232,7 @@ END IF END IF END IF - LWKOPT = WORK( 1 ) + LWKOPT = INT( WORK( 1 ) ) LWKOPT = MAX (LWKOPT, MN) END IF * diff --git a/lib/linalg/dposv.f b/lib/linalg/dposv.f new file mode 100644 index 0000000000..ee2988e6fd --- /dev/null +++ b/lib/linalg/dposv.f @@ -0,0 +1,190 @@ +*> \brief DPOSV computes the solution to system of linear equations A * X = B for PO matrices +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DPOSV + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE DPOSV( UPLO, N, NRHS, A, LDA, B, LDB, INFO ) +* +* .. Scalar Arguments .. +* CHARACTER UPLO +* INTEGER INFO, LDA, LDB, N, NRHS +* .. +* .. Array Arguments .. +* DOUBLE PRECISION A( LDA, * ), B( LDB, * ) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DPOSV computes the solution to a real system of linear equations +*> A * X = B, +*> where A is an N-by-N symmetric positive definite matrix and X and B +*> are N-by-NRHS matrices. +*> +*> The Cholesky decomposition is used to factor A as +*> A = U**T* U, if UPLO = 'U', or +*> A = L * L**T, if UPLO = 'L', +*> where U is an upper triangular matrix and L is a lower triangular +*> matrix. The factored form of A is then used to solve the system of +*> equations A * X = B. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] UPLO +*> \verbatim +*> UPLO is CHARACTER*1 +*> = 'U': Upper triangle of A is stored; +*> = 'L': Lower triangle of A is stored. +*> \endverbatim +*> +*> \param[in] N +*> \verbatim +*> N is INTEGER +*> The number of linear equations, i.e., the order of the +*> matrix A. N >= 0. +*> \endverbatim +*> +*> \param[in] NRHS +*> \verbatim +*> NRHS is INTEGER +*> The number of right hand sides, i.e., the number of columns +*> of the matrix B. NRHS >= 0. +*> \endverbatim +*> +*> \param[in,out] A +*> \verbatim +*> A is DOUBLE PRECISION array, dimension (LDA,N) +*> On entry, the symmetric matrix A. If UPLO = 'U', the leading +*> N-by-N upper triangular part of A contains the upper +*> triangular part of the matrix A, and the strictly lower +*> triangular part of A is not referenced. If UPLO = 'L', the +*> leading N-by-N lower triangular part of A contains the lower +*> triangular part of the matrix A, and the strictly upper +*> triangular part of A is not referenced. +*> +*> On exit, if INFO = 0, the factor U or L from the Cholesky +*> factorization A = U**T*U or A = L*L**T. +*> \endverbatim +*> +*> \param[in] LDA +*> \verbatim +*> LDA is INTEGER +*> The leading dimension of the array A. LDA >= max(1,N). +*> \endverbatim +*> +*> \param[in,out] B +*> \verbatim +*> B is DOUBLE PRECISION array, dimension (LDB,NRHS) +*> On entry, the N-by-NRHS right hand side matrix B. +*> On exit, if INFO = 0, the N-by-NRHS solution matrix X. +*> \endverbatim +*> +*> \param[in] LDB +*> \verbatim +*> LDB is INTEGER +*> The leading dimension of the array B. LDB >= max(1,N). +*> \endverbatim +*> +*> \param[out] INFO +*> \verbatim +*> INFO is INTEGER +*> = 0: successful exit +*> < 0: if INFO = -i, the i-th argument had an illegal value +*> > 0: if INFO = i, the leading minor of order i of A is not +*> positive definite, so the factorization could not be +*> completed, and the solution has not been computed. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \ingroup doublePOsolve +* +* ===================================================================== + SUBROUTINE DPOSV( UPLO, N, NRHS, A, LDA, B, LDB, INFO ) +* +* -- LAPACK driver routine -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* +* .. Scalar Arguments .. + CHARACTER UPLO + INTEGER INFO, LDA, LDB, N, NRHS +* .. +* .. Array Arguments .. + DOUBLE PRECISION A( LDA, * ), B( LDB, * ) +* .. +* +* ===================================================================== +* +* .. External Functions .. + LOGICAL LSAME + EXTERNAL LSAME +* .. +* .. External Subroutines .. + EXTERNAL DPOTRF, DPOTRS, XERBLA +* .. +* .. Intrinsic Functions .. + INTRINSIC MAX +* .. +* .. Executable Statements .. +* +* Test the input parameters. +* + INFO = 0 + IF( .NOT.LSAME( UPLO, 'U' ) .AND. .NOT.LSAME( UPLO, 'L' ) ) THEN + INFO = -1 + ELSE IF( N.LT.0 ) THEN + INFO = -2 + ELSE IF( NRHS.LT.0 ) THEN + INFO = -3 + ELSE IF( LDA.LT.MAX( 1, N ) ) THEN + INFO = -5 + ELSE IF( LDB.LT.MAX( 1, N ) ) THEN + INFO = -7 + END IF + IF( INFO.NE.0 ) THEN + CALL XERBLA( 'DPOSV ', -INFO ) + RETURN + END IF +* +* Compute the Cholesky factorization A = U**T*U or A = L*L**T. +* + CALL DPOTRF( UPLO, N, A, LDA, INFO ) + IF( INFO.EQ.0 ) THEN +* +* Solve the system A*X = B, overwriting B with X. +* + CALL DPOTRS( UPLO, N, NRHS, A, LDA, B, LDB, INFO ) +* + END IF + RETURN +* +* End of DPOSV +* + END diff --git a/lib/linalg/dpotrs.f b/lib/linalg/dpotrs.f new file mode 100644 index 0000000000..862ee078fd --- /dev/null +++ b/lib/linalg/dpotrs.f @@ -0,0 +1,201 @@ +*> \brief \b DPOTRS +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DPOTRS + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE DPOTRS( UPLO, N, NRHS, A, LDA, B, LDB, INFO ) +* +* .. Scalar Arguments .. +* CHARACTER UPLO +* INTEGER INFO, LDA, LDB, N, NRHS +* .. +* .. Array Arguments .. +* DOUBLE PRECISION A( LDA, * ), B( LDB, * ) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DPOTRS solves a system of linear equations A*X = B with a symmetric +*> positive definite matrix A using the Cholesky factorization +*> A = U**T*U or A = L*L**T computed by DPOTRF. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] UPLO +*> \verbatim +*> UPLO is CHARACTER*1 +*> = 'U': Upper triangle of A is stored; +*> = 'L': Lower triangle of A is stored. +*> \endverbatim +*> +*> \param[in] N +*> \verbatim +*> N is INTEGER +*> The order of the matrix A. N >= 0. +*> \endverbatim +*> +*> \param[in] NRHS +*> \verbatim +*> NRHS is INTEGER +*> The number of right hand sides, i.e., the number of columns +*> of the matrix B. NRHS >= 0. +*> \endverbatim +*> +*> \param[in] A +*> \verbatim +*> A is DOUBLE PRECISION array, dimension (LDA,N) +*> The triangular factor U or L from the Cholesky factorization +*> A = U**T*U or A = L*L**T, as computed by DPOTRF. +*> \endverbatim +*> +*> \param[in] LDA +*> \verbatim +*> LDA is INTEGER +*> The leading dimension of the array A. LDA >= max(1,N). +*> \endverbatim +*> +*> \param[in,out] B +*> \verbatim +*> B is DOUBLE PRECISION array, dimension (LDB,NRHS) +*> On entry, the right hand side matrix B. +*> On exit, the solution matrix X. +*> \endverbatim +*> +*> \param[in] LDB +*> \verbatim +*> LDB is INTEGER +*> The leading dimension of the array B. LDB >= max(1,N). +*> \endverbatim +*> +*> \param[out] INFO +*> \verbatim +*> INFO is INTEGER +*> = 0: successful exit +*> < 0: if INFO = -i, the i-th argument had an illegal value +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \ingroup doublePOcomputational +* +* ===================================================================== + SUBROUTINE DPOTRS( UPLO, N, NRHS, A, LDA, B, LDB, INFO ) +* +* -- LAPACK computational routine -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* +* .. Scalar Arguments .. + CHARACTER UPLO + INTEGER INFO, LDA, LDB, N, NRHS +* .. +* .. Array Arguments .. + DOUBLE PRECISION A( LDA, * ), B( LDB, * ) +* .. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ONE + PARAMETER ( ONE = 1.0D+0 ) +* .. +* .. Local Scalars .. + LOGICAL UPPER +* .. +* .. External Functions .. + LOGICAL LSAME + EXTERNAL LSAME +* .. +* .. External Subroutines .. + EXTERNAL DTRSM, XERBLA +* .. +* .. Intrinsic Functions .. + INTRINSIC MAX +* .. +* .. Executable Statements .. +* +* Test the input parameters. +* + INFO = 0 + UPPER = LSAME( UPLO, 'U' ) + IF( .NOT.UPPER .AND. .NOT.LSAME( UPLO, 'L' ) ) THEN + INFO = -1 + ELSE IF( N.LT.0 ) THEN + INFO = -2 + ELSE IF( NRHS.LT.0 ) THEN + INFO = -3 + ELSE IF( LDA.LT.MAX( 1, N ) ) THEN + INFO = -5 + ELSE IF( LDB.LT.MAX( 1, N ) ) THEN + INFO = -7 + END IF + IF( INFO.NE.0 ) THEN + CALL XERBLA( 'DPOTRS', -INFO ) + RETURN + END IF +* +* Quick return if possible +* + IF( N.EQ.0 .OR. NRHS.EQ.0 ) + $ RETURN +* + IF( UPPER ) THEN +* +* Solve A*X = B where A = U**T *U. +* +* Solve U**T *X = B, overwriting B with X. +* + CALL DTRSM( 'Left', 'Upper', 'Transpose', 'Non-unit', N, NRHS, + $ ONE, A, LDA, B, LDB ) +* +* Solve U*X = B, overwriting B with X. +* + CALL DTRSM( 'Left', 'Upper', 'No transpose', 'Non-unit', N, + $ NRHS, ONE, A, LDA, B, LDB ) + ELSE +* +* Solve A*X = B where A = L*L**T. +* +* Solve L*X = B, overwriting B with X. +* + CALL DTRSM( 'Left', 'Lower', 'No transpose', 'Non-unit', N, + $ NRHS, ONE, A, LDA, B, LDB ) +* +* Solve L**T *X = B, overwriting B with X. +* + CALL DTRSM( 'Left', 'Lower', 'Transpose', 'Non-unit', N, NRHS, + $ ONE, A, LDA, B, LDB ) + END IF +* + RETURN +* +* End of DPOTRS +* + END diff --git a/lib/linalg/dscal.f b/lib/linalg/dscal.f index 3713427334..e055d198af 100644 --- a/lib/linalg/dscal.f +++ b/lib/linalg/dscal.f @@ -93,11 +93,14 @@ * * .. Local Scalars .. INTEGER I,M,MP1,NINCX +* .. Parameters .. + DOUBLE PRECISION ONE + PARAMETER (ONE=1.0D+0) * .. * .. Intrinsic Functions .. INTRINSIC MOD * .. - IF (N.LE.0 .OR. INCX.LE.0) RETURN + IF (N.LE.0 .OR. INCX.LE.0 .OR. DA.EQ.ONE) RETURN IF (INCX.EQ.1) THEN * * code for increment equal to 1 diff --git a/lib/linalg/dsyevd.f b/lib/linalg/dsyevd.f index edbe896fe8..eaaecd8d98 100644 --- a/lib/linalg/dsyevd.f +++ b/lib/linalg/dsyevd.f @@ -257,7 +257,7 @@ LWMIN = 2*N + 1 END IF LOPT = MAX( LWMIN, 2*N + - $ ILAENV( 1, 'DSYTRD', UPLO, N, -1, -1, -1 ) ) + $ N*ILAENV( 1, 'DSYTRD', UPLO, N, -1, -1, -1 ) ) LIOPT = LIWMIN END IF WORK( 1 ) = LOPT diff --git a/lib/linalg/dsygvd.f b/lib/linalg/dsygvd.f index 61134bedce..3b38665a75 100644 --- a/lib/linalg/dsygvd.f +++ b/lib/linalg/dsygvd.f @@ -330,8 +330,8 @@ CALL DSYGST( ITYPE, UPLO, N, A, LDA, B, LDB, INFO ) CALL DSYEVD( JOBZ, UPLO, N, A, LDA, W, WORK, LWORK, IWORK, LIWORK, $ INFO ) - LOPT = MAX( DBLE( LOPT ), DBLE( WORK( 1 ) ) ) - LIOPT = MAX( DBLE( LIOPT ), DBLE( IWORK( 1 ) ) ) + LOPT = INT( MAX( DBLE( LOPT ), DBLE( WORK( 1 ) ) ) ) + LIOPT = INT( MAX( DBLE( LIOPT ), DBLE( IWORK( 1 ) ) ) ) * IF( WANTZ .AND. INFO.EQ.0 ) THEN * diff --git a/lib/linalg/ieeeck.f b/lib/linalg/ieeeck.f index 74065c3b4e..f9f6332ecf 100644 --- a/lib/linalg/ieeeck.f +++ b/lib/linalg/ieeeck.f @@ -41,7 +41,7 @@ *> \param[in] ISPEC *> \verbatim *> ISPEC is INTEGER -*> Specifies whether to test just for inifinity arithmetic +*> Specifies whether to test just for infinity arithmetic *> or whether to test for infinity and NaN arithmetic. *> = 0: Verify infinity arithmetic only. *> = 1: Verify infinity and NaN arithmetic. diff --git a/lib/linalg/ilaenv.f b/lib/linalg/ilaenv.f index af28503986..a639e0375a 100644 --- a/lib/linalg/ilaenv.f +++ b/lib/linalg/ilaenv.f @@ -469,6 +469,15 @@ ELSE NB = 64 END IF + ELSE IF( C3.EQ.'SYL' ) THEN +* The upper bound is to prevent overly aggressive scaling. + IF( SNAME ) THEN + NB = MIN( MAX( 48, INT( ( MIN( N1, N2 ) * 16 ) / 100) ), + $ 240 ) + ELSE + NB = MIN( MAX( 24, INT( ( MIN( N1, N2 ) * 8 ) / 100) ), + $ 80 ) + END IF END IF ELSE IF( C2.EQ.'LA' ) THEN IF( C3.EQ.'UUM' ) THEN @@ -477,6 +486,12 @@ ELSE NB = 64 END IF + ELSE IF( C3.EQ.'TRS' ) THEN + IF( SNAME ) THEN + NB = 32 + ELSE + NB = 32 + END IF END IF ELSE IF( SNAME .AND. C2.EQ.'ST' ) THEN IF( C3.EQ.'EBZ' ) THEN diff --git a/lib/linalg/zdscal.f b/lib/linalg/zdscal.f index b3546ba206..5a16048771 100644 --- a/lib/linalg/zdscal.f +++ b/lib/linalg/zdscal.f @@ -92,17 +92,20 @@ * * .. Local Scalars .. INTEGER I,NINCX +* .. Parameters .. + DOUBLE PRECISION ONE + PARAMETER (ONE=1.0D+0) * .. * .. Intrinsic Functions .. - INTRINSIC DCMPLX + INTRINSIC DBLE, DCMPLX, DIMAG * .. - IF (N.LE.0 .OR. INCX.LE.0) RETURN + IF (N.LE.0 .OR. INCX.LE.0 .OR. DA.EQ.ONE) RETURN IF (INCX.EQ.1) THEN * * code for increment equal to 1 * DO I = 1,N - ZX(I) = DCMPLX(DA,0.0d0)*ZX(I) + ZX(I) = DCMPLX(DA*DBLE(ZX(I)),DA*DIMAG(ZX(I))) END DO ELSE * @@ -110,7 +113,7 @@ * NINCX = N*INCX DO I = 1,NINCX,INCX - ZX(I) = DCMPLX(DA,0.0d0)*ZX(I) + ZX(I) = DCMPLX(DA*DBLE(ZX(I)),DA*DIMAG(ZX(I))) END DO END IF RETURN diff --git a/lib/linalg/zheevd.f b/lib/linalg/zheevd.f index a6484eb032..7f58c7f726 100644 --- a/lib/linalg/zheevd.f +++ b/lib/linalg/zheevd.f @@ -284,7 +284,7 @@ LIWMIN = 1 END IF LOPT = MAX( LWMIN, N + - $ ILAENV( 1, 'ZHETRD', UPLO, N, -1, -1, -1 ) ) + $ N*ILAENV( 1, 'ZHETRD', UPLO, N, -1, -1, -1 ) ) LROPT = LRWMIN LIOPT = LIWMIN END IF diff --git a/lib/linalg/zlascl.f b/lib/linalg/zlascl.f index 3d53f5ae60..4cce5ff5e0 100644 --- a/lib/linalg/zlascl.f +++ b/lib/linalg/zlascl.f @@ -272,6 +272,8 @@ ELSE MUL = CTOC / CFROMC DONE = .TRUE. + IF (MUL .EQ. ONE) + $ RETURN END IF END IF * diff --git a/lib/linalg/zscal.f b/lib/linalg/zscal.f index 8085f5a399..8b8c2c8ab5 100644 --- a/lib/linalg/zscal.f +++ b/lib/linalg/zscal.f @@ -93,7 +93,11 @@ * .. Local Scalars .. INTEGER I,NINCX * .. - IF (N.LE.0 .OR. INCX.LE.0) RETURN +* .. Parameters .. + COMPLEX*16 ONE + PARAMETER (ONE= (1.0D+0,0.0D+0)) +* .. + IF (N.LE.0 .OR. INCX.LE.0 .OR. ZA.EQ.ONE) RETURN IF (INCX.EQ.1) THEN * * code for increment equal to 1 diff --git a/lib/mlpod/Install.py b/lib/mlpod/Install.py new file mode 100644 index 0000000000..0a0979c2ee --- /dev/null +++ b/lib/mlpod/Install.py @@ -0,0 +1,97 @@ +#!/usr/bin/env python + +""" +Install.py tool to do a generic build of a library +soft linked to by many of the lib/Install.py files +used to automate the steps described in the corresponding lib/README +""" + +from __future__ import print_function +import sys, os, subprocess +from argparse import ArgumentParser + +sys.path.append('..') +from install_helpers import get_cpus, fullpath + +parser = ArgumentParser(prog='Install.py', + description="LAMMPS library build wrapper script") + +HELP = """ +Syntax from src dir: make lib-libname args="-m machine -e suffix" +Syntax from lib dir: python Install.py -m machine -e suffix + +libname = name of lib dir (e.g. atc, h5md, meam, poems, etc) +specify -m and optionally -e, order does not matter + +Examples: + +make lib-poems args="-m serial" # build POEMS lib with same settings as in the serial Makefile in src +make lib-colvars args="-m mpi" # build COLVARS lib with same settings as in the mpi Makefile in src +make lib-meam args="-m ifort" # build MEAM lib with custom Makefile.ifort (using Intel Fortran) +""" + +# parse and process arguments + +parser.add_argument("-m", "--machine", + help="suffix of a /Makefile.* file used for compiling this library") +parser.add_argument("-e", "--extramake", + help="set EXTRAMAKE variable in /Makefile. to Makefile.lammps.") + +args = parser.parse_args() + +# print help message and exit, if neither build nor path options are given +if not args.machine and not args.extramake: + parser.print_help() + sys.exit(HELP) + +machine = args.machine +extraflag = args.extramake +if extraflag: + suffix = args.extramake +else: + suffix = 'empty' + +# set lib from working dir + +cwd = fullpath('.') +lib = os.path.basename(cwd) + +# create Makefile.auto as copy of Makefile.machine +# reset EXTRAMAKE if requested + +if not os.path.exists("Makefile.%s" % machine): + sys.exit("lib/%s/Makefile.%s does not exist" % (lib, machine)) + +lines = open("Makefile.%s" % machine, 'r').readlines() +fp = open("Makefile.auto", 'w') + +has_extramake = False +for line in lines: + words = line.split() + if len(words) == 3 and words[0] == "EXTRAMAKE" and words[1] == '=': + has_extramake = True + if extraflag: + line = line.replace(words[2], "Makefile.lammps.%s" % suffix) + fp.write(line) + +fp.close() + +# make the library via Makefile.auto optionally with parallel make +n_cpus = get_cpus() + +print("Building lib%s.a ..." % lib) +cmd = "make -f Makefile.auto clean; make -f Makefile.auto -j%d" % n_cpus +try: + txt = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT) + print(txt.decode('UTF-8')) +except subprocess.CalledProcessError as e: + print("Make failed with:\n %s" % e.output.decode('UTF-8')) + sys.exit(1) + +if os.path.exists("lib%s.a" % lib): + print("Build was successful") +else: + sys.exit("Build of lib/%s/lib%s.a was NOT successful" % (lib, lib)) + +if has_extramake and not os.path.exists("Makefile.lammps"): + print("WARNING: lib/%s/Makefile.lammps was NOT created" % lib) diff --git a/lib/mlpod/Makefile.lammps.empty b/lib/mlpod/Makefile.lammps.empty new file mode 100644 index 0000000000..bf467a20c3 --- /dev/null +++ b/lib/mlpod/Makefile.lammps.empty @@ -0,0 +1,5 @@ +# Settings that the LAMMPS build will import when this package library is used + +mlpod_SYSINC = +mlpod_SYSLIB = +mlpod_SYSPATH = diff --git a/lib/mlpod/Makefile.lammps.installed b/lib/mlpod/Makefile.lammps.installed new file mode 100644 index 0000000000..d8b0d41225 --- /dev/null +++ b/lib/mlpod/Makefile.lammps.installed @@ -0,0 +1,5 @@ +# Settings that the LAMMPS build will import when this package library is used + +mlpod_SYSINC = +mlpod_SYSLIB = -lblas -llapack +mlpod_SYSPATH = diff --git a/lib/mlpod/Makefile.lammps.linalg b/lib/mlpod/Makefile.lammps.linalg new file mode 100644 index 0000000000..cb4d78df99 --- /dev/null +++ b/lib/mlpod/Makefile.lammps.linalg @@ -0,0 +1,5 @@ +# Settings that the LAMMPS build will import when this package library is used + +mlpod_SYSINC = +mlpod_SYSLIB = -llinalg -lgfortran +mlpod_SYSPATH = -L../../lib/linalg$(LIBOBJDIR) diff --git a/lib/mlpod/Makefile.mpi b/lib/mlpod/Makefile.mpi new file mode 100644 index 0000000000..05b6ee642a --- /dev/null +++ b/lib/mlpod/Makefile.mpi @@ -0,0 +1,48 @@ +SHELL = /bin/sh + +# which file will be copied to Makefile.lammps + +EXTRAMAKE = Makefile.lammps.linalg + +# ------ DEFINITIONS ------ + +LIB = libmlpod.a +OBJ = $(SRC:.cpp=.o) + +# ------ SETTINGS ------ + +# include any MPI settings needed for the ELECTRODE library to build with +# the same MPI library that LAMMPS is built with + +CC = mpicxx +CCFLAGS = -O3 -fPIC -DMPICH_IGNORE_CXX_SEEK -DOMPI_SKIP_MPICXX=1 + +ARCHIVE = ar +ARCHFLAG = -rc +DEPFLAGS = -M +#LINK = +#LINKFLAGS = +USRLIB = +SYSLIB = + +# ------ MAKE PROCEDURE ------ + +lib: $(OBJ) + $(ARCHIVE) $(ARFLAGS) $(LIB) $(OBJ) + @cp $(EXTRAMAKE) Makefile.lammps + +# ------ COMPILE RULES ------ + +%.o:%.cpp + $(CC) $(CCFLAGS) -c $< -o $@ +%.d:%.cpp + $(CC) $(CCFLAGS) $(DEPFLAGS) $< > $@ + +# ------ DEPENDENCIES ------ + +DEPENDS = $(OBJ:.o=.d) + +# ------ CLEAN ------ + +clean: + -rm -f *.d *~ $(OBJ) $(LIB) diff --git a/lib/mlpod/Makefile.serial b/lib/mlpod/Makefile.serial new file mode 100644 index 0000000000..54e819ee38 --- /dev/null +++ b/lib/mlpod/Makefile.serial @@ -0,0 +1,48 @@ +SHELL = /bin/sh + +# which file will be copied to Makefile.lammps + +EXTRAMAKE = Makefile.lammps.linalg + +# ------ DEFINITIONS ------ + +LIB = libmlpod.a +OBJ = $(SRC:.cpp=.o) + +# ------ SETTINGS ------ + +# include any MPI settings needed for the mlpod library to build with +# the same MPI library that LAMMPS is built with + +CC = g++ +CCFLAGS = -O3 -fPIC -I../../src/STUBS + +ARCHIVE = ar +ARCHFLAG = -rc +DEPFLAGS = -M +#LINK = +#LINKFLAGS = +USRLIB = +SYSLIB = + +# ------ MAKE PROCEDURE ------ + +lib: $(OBJ) + $(ARCHIVE) $(ARFLAGS) $(LIB) $(OBJ) + @cp $(EXTRAMAKE) Makefile.lammps + +# ------ COMPILE RULES ------ + +%.o:%.cpp + $(CC) $(CCFLAGS) -c $< -o $@ +%.d:%.cpp + $(CC) $(CCFLAGS) $(DEPFLAGS) $< > $@ + +# ------ DEPENDENCIES ------ + +DEPENDS = $(OBJ:.o=.d) + +# ------ CLEAN ------ + +clean: + -rm -f *.d *~ $(OBJ) $(LIB) diff --git a/potentials/README b/potentials/README index 4df315a7f2..c234f5f48b 100644 --- a/potentials/README +++ b/potentials/README @@ -104,6 +104,7 @@ mliap MLIAP potential mliap.descriptor MLIAP potential descriptor mliap.model MLIAP potential model nb3b.harmonic nonbonded 3-body harmonic potential +pod ML potential with proper orthogonal descriptors (POD) poly polymorphic 3-body potential reax ReaxFF potential (see README.reax for more info) smtbq second moment tight binding QEq (SMTBQ) potential diff --git a/potentials/Ta_coeff.pod b/potentials/Ta_coeff.pod new file mode 100644 index 0000000000..c8943bb889 --- /dev/null +++ b/potentials/Ta_coeff.pod @@ -0,0 +1,33 @@ +POD_coefficients: 32 +-4.44242 +4.10219 +-2.36987 +-3.92184 +0.83796 +-0.79457 +0.26230 +-21.24294 +-15.38460 +-38.44056 +8.29872 +-42.54514 +2.79976 +3.76109 +5.23499 +0.04878 +2.96006 +0.09101 +-0.19257 +-0.24326 +-0.16735 +0.53738 +0.02236 +-0.00154 +0.02488 +-0.00565 +0.07672 +-0.05894 +-0.05604 +-0.12664 +0.11723 +0.00262 diff --git a/potentials/Ta_param.pod b/potentials/Ta_param.pod new file mode 100644 index 0000000000..888dcb1b34 --- /dev/null +++ b/potentials/Ta_param.pod @@ -0,0 +1,38 @@ +# DATE: 2022-11-30 UNITS: metal CONTRIBUTOR: Ngoc Cuong Nguyen, exapde@gmail.com CITATION: https://arxiv.org/abs/2209.02362 +# chemical element symbols +species Ta + +# periodic boundary conditions +pbc 1 1 1 + +# inner cut-off radius +rin 1.0 + +# outer cut-off radius +rcut 5.0 + +# polynomial degrees for radial basis functions +bessel_polynomial_degree 3 +inverse_polynomial_degree 6 + +# one-body potential +onebody 1 + +# two-body linear POD potential +twobody_number_radial_basis_functions 6 + +# three-body linear POD potential +threebody_number_radial_basis_functions 5 +threebody_number_angular_basis_functions 5 + +# four-body linear SNAP potential +fourbody_snap_twojmax 0 + +# quadratic POD potential +quadratic_pod_potential 0 + +# Add the following basename to the name of output files +basename_for_output_files Ta + +# number of digits after the decimal point +precision_for_pod_coefficients 5 diff --git a/src/.gitignore b/src/.gitignore index ba1acae20e..19f4d924b0 100644 --- a/src/.gitignore +++ b/src/.gitignore @@ -57,6 +57,13 @@ /pair_pace.cpp /pair_pace.h +/pair_pod.cpp +/pair_pod.h +/fitpod_command.cpp +/fitpod_command.h +/mlpod.cpp +/mlpod.h + /fix_polarize*.cpp /fix_polarize*.h /*_dielectric.cpp @@ -913,6 +920,8 @@ /fix_rigid_nvt_small.h /fix_rigid_small.cpp /fix_rigid_small.h +/fix_sgcmc.cpp +/fix_sgcmc.h /fix_shake.cpp /fix_shake.h /fix_shardlow.cpp diff --git a/src/ADIOS/Install.sh b/src/ADIOS/Install.sh index bd0acb1414..0ee2c5428e 100644 --- a/src/ADIOS/Install.sh +++ b/src/ADIOS/Install.sh @@ -69,7 +69,7 @@ adios_SYSLIB=${ADIOS2_LIB} fi if (test -e ../Makefile.package.settings) then - sed -i -e '/^include.*ADIOS.*$/d' ../Makefile.package.settings + sed -i -e '/^[ \t]*include.*ADIOS.*$/d' ../Makefile.package.settings # multiline form needed for BSD sed on Macs sed -i -e '4 i \ include ../ADIOS/Makefile.lammps @@ -85,7 +85,7 @@ elif (test $1 = 0) then fi if (test -e ../Makefile.package.settings) then - sed -i -e '/^include.*ADIOS.*$/d' ../Makefile.package.settings + sed -i -e '/^[ \t]*include.*ADIOS.*$/d' ../Makefile.package.settings fi rm -f Makefile.lammps diff --git a/src/AMOEBA/amoeba_charge_transfer.cpp b/src/AMOEBA/amoeba_charge_transfer.cpp index 3072d90970..718d5c5b22 100644 --- a/src/AMOEBA/amoeba_charge_transfer.cpp +++ b/src/AMOEBA/amoeba_charge_transfer.cpp @@ -15,7 +15,6 @@ #include "pair_amoeba.h" #include "atom.h" -#include "memory.h" #include "neigh_list.h" #include diff --git a/src/AMOEBA/amoeba_convolution.cpp b/src/AMOEBA/amoeba_convolution.cpp index e3d5800ce5..ce466a6ed1 100644 --- a/src/AMOEBA/amoeba_convolution.cpp +++ b/src/AMOEBA/amoeba_convolution.cpp @@ -21,7 +21,9 @@ #include "memory.h" #include "neighbor.h" #include "remap_wrap.h" -#include "update.h" + +#include +#include using namespace LAMMPS_NS; diff --git a/src/AMOEBA/amoeba_dispersion.cpp b/src/AMOEBA/amoeba_dispersion.cpp index b8d2c48022..f3af921d85 100644 --- a/src/AMOEBA/amoeba_dispersion.cpp +++ b/src/AMOEBA/amoeba_dispersion.cpp @@ -18,10 +18,8 @@ #include "atom.h" #include "comm.h" #include "domain.h" -#include "fft3d_wrap.h" #include "math_const.h" #include "math_special.h" -#include "memory.h" #include "neigh_list.h" #include diff --git a/src/AMOEBA/amoeba_file.cpp b/src/AMOEBA/amoeba_file.cpp index af47f04fb5..6bf961cdab 100644 --- a/src/AMOEBA/amoeba_file.cpp +++ b/src/AMOEBA/amoeba_file.cpp @@ -17,14 +17,11 @@ #include "comm.h" #include "domain.h" #include "error.h" -#include "force.h" #include "memory.h" -#include "utils.h" #include "tokenizer.h" #include #include -#include using namespace LAMMPS_NS; diff --git a/src/AMOEBA/amoeba_induce.cpp b/src/AMOEBA/amoeba_induce.cpp index 3fb3e7c705..a6724e2bb7 100644 --- a/src/AMOEBA/amoeba_induce.cpp +++ b/src/AMOEBA/amoeba_induce.cpp @@ -19,16 +19,13 @@ #include "comm.h" #include "domain.h" #include "error.h" -#include "fft3d_wrap.h" #include "fix_store_peratom.h" #include "math_const.h" #include "math_special.h" -#include "memory.h" #include "my_page.h" #include "neigh_list.h" #include -#include using namespace LAMMPS_NS; using namespace MathConst; diff --git a/src/AMOEBA/amoeba_multipole.cpp b/src/AMOEBA/amoeba_multipole.cpp index e40d368f0c..f58395aa1c 100644 --- a/src/AMOEBA/amoeba_multipole.cpp +++ b/src/AMOEBA/amoeba_multipole.cpp @@ -18,14 +18,11 @@ #include "atom.h" #include "comm.h" #include "domain.h" -#include "fft3d_wrap.h" #include "math_const.h" #include "math_special.h" -#include "memory.h" #include "neigh_list.h" #include -#include using namespace LAMMPS_NS; using namespace MathConst; diff --git a/src/AMOEBA/amoeba_polar.cpp b/src/AMOEBA/amoeba_polar.cpp index 9342b6213d..4d143c7a22 100644 --- a/src/AMOEBA/amoeba_polar.cpp +++ b/src/AMOEBA/amoeba_polar.cpp @@ -18,10 +18,8 @@ #include "atom.h" #include "comm.h" #include "domain.h" -#include "fft3d_wrap.h" #include "math_const.h" #include "math_special.h" -#include "memory.h" #include "neigh_list.h" #include diff --git a/src/AMOEBA/amoeba_repulsion.cpp b/src/AMOEBA/amoeba_repulsion.cpp index 30e9a8635e..789674bb8d 100644 --- a/src/AMOEBA/amoeba_repulsion.cpp +++ b/src/AMOEBA/amoeba_repulsion.cpp @@ -16,7 +16,6 @@ #include "atom.h" #include "comm.h" -#include "memory.h" #include "neigh_list.h" #include diff --git a/src/AMOEBA/amoeba_utils.cpp b/src/AMOEBA/amoeba_utils.cpp index 6f15150040..5a4057930c 100644 --- a/src/AMOEBA/amoeba_utils.cpp +++ b/src/AMOEBA/amoeba_utils.cpp @@ -15,7 +15,6 @@ #include "pair_amoeba.h" #include "atom.h" -#include "comm.h" #include "domain.h" #include "error.h" #include "fix_store_peratom.h" diff --git a/src/AMOEBA/atom_vec_amoeba.h b/src/AMOEBA/atom_vec_amoeba.h index b0e145f781..04e4650b4a 100644 --- a/src/AMOEBA/atom_vec_amoeba.h +++ b/src/AMOEBA/atom_vec_amoeba.h @@ -24,7 +24,7 @@ AtomStyle(amoeba,AtomVecAmoeba); namespace LAMMPS_NS { -class AtomVecAmoeba : public AtomVec { +class AtomVecAmoeba : virtual public AtomVec { public: AtomVecAmoeba(class LAMMPS *); ~AtomVecAmoeba() override; diff --git a/src/AMOEBA/fix_amoeba_bitorsion.h b/src/AMOEBA/fix_amoeba_bitorsion.h index eac5eca260..c936fe987d 100644 --- a/src/AMOEBA/fix_amoeba_bitorsion.h +++ b/src/AMOEBA/fix_amoeba_bitorsion.h @@ -119,7 +119,7 @@ class FixAmoebaBiTorsion : public Fix { void chkttor(int, int, int, double &, double &, double &); void bcuint1(double *, double *, double *, double *, double, double, double, double, double, double, double &, double &, double &); - void bcucof(double *, double *, double *, double *, double, double, double[][4]); + void bcucof(double *, double *, double *, double *, double, double, double[4][4]); }; } // namespace LAMMPS_NS #endif diff --git a/src/AMOEBA/improper_amoeba.cpp b/src/AMOEBA/improper_amoeba.cpp index 44f42d9964..b1e403da78 100644 --- a/src/AMOEBA/improper_amoeba.cpp +++ b/src/AMOEBA/improper_amoeba.cpp @@ -22,7 +22,6 @@ #include "memory.h" #include "neighbor.h" #include "pair.h" -#include "update.h" #include diff --git a/src/AMOEBA/pair_amoeba.cpp b/src/AMOEBA/pair_amoeba.cpp index 652d570019..91febc611e 100644 --- a/src/AMOEBA/pair_amoeba.cpp +++ b/src/AMOEBA/pair_amoeba.cpp @@ -19,25 +19,20 @@ #include "comm.h" #include "domain.h" #include "error.h" -#include "fft3d_wrap.h" #include "fix.h" #include "fix_store_peratom.h" #include "force.h" -#include "gridcomm.h" #include "group.h" #include "math_special.h" #include "memory.h" #include "modify.h" #include "my_page.h" #include "neigh_list.h" -#include "neigh_request.h" #include "neighbor.h" #include "update.h" -#include "utils.h" -#include +#include #include -#include using namespace LAMMPS_NS; diff --git a/src/ASPHERE/pair_ylz.cpp b/src/ASPHERE/pair_ylz.cpp index afedf635d5..31cbf3f929 100644 --- a/src/ASPHERE/pair_ylz.cpp +++ b/src/ASPHERE/pair_ylz.cpp @@ -256,7 +256,7 @@ void PairYLZ::coeff(int narg, char **arg) void PairYLZ::init_style() { - avec = (AtomVecEllipsoid *) atom->style_match("ellipsoid"); + avec = dynamic_cast(atom->style_match("ellipsoid")); if (!avec) error->all(FLERR, "Pair style ylz requires atom style ellipsoid"); neighbor->request(this, instance_me); diff --git a/src/ATC/Install.sh b/src/ATC/Install.sh index e1dacdd7d6..2194685f92 100755 --- a/src/ATC/Install.sh +++ b/src/ATC/Install.sh @@ -60,7 +60,7 @@ if (test $1 = 1) then fi if (test -e ../Makefile.package.settings) then - sed -i -e '/^include.*atc.*$/d' ../Makefile.package.settings + sed -i -e '/^[ \t]*include.*atc.*$/d' ../Makefile.package.settings # multiline form needed for BSD sed on Macs sed -i -e '4 i \ include ..\/..\/lib\/atc\/Makefile.lammps @@ -74,7 +74,7 @@ elif (test $1 = 0) then fi if (test -e ../Makefile.package.settings) then - sed -i -e '/^include.*atc.*$/d' ../Makefile.package.settings + sed -i -e '/^[ \t]*include.*atc.*$/d' ../Makefile.package.settings fi fi diff --git a/src/AWPMD/Install.sh b/src/AWPMD/Install.sh index 70e87c3fbc..0e2e2d3473 100755 --- a/src/AWPMD/Install.sh +++ b/src/AWPMD/Install.sh @@ -46,7 +46,7 @@ if (test $1 = 1) then fi if (test -e ../Makefile.package.settings) then - sed -i -e '/^include.*awpmd.*$/d' ../Makefile.package.settings + sed -i -e '/^[ \t]*include.*awpmd.*$/d' ../Makefile.package.settings # multiline form needed for BSD sed on Macs sed -i -e '4 i \ include ..\/..\/lib\/awpmd\/Makefile.lammps @@ -60,7 +60,7 @@ elif (test $1 = 0) then fi if (test -e ../Makefile.package.settings) then - sed -i -e '/^include.*awpmd.*$/d' ../Makefile.package.settings + sed -i -e '/^[ \t]*include.*awpmd.*$/d' ../Makefile.package.settings fi fi diff --git a/src/AWPMD/atom_vec_wavepacket.h b/src/AWPMD/atom_vec_wavepacket.h index 80f002ea1d..cc7c34191c 100644 --- a/src/AWPMD/atom_vec_wavepacket.h +++ b/src/AWPMD/atom_vec_wavepacket.h @@ -24,7 +24,7 @@ AtomStyle(wavepacket,AtomVecWavepacket); namespace LAMMPS_NS { -class AtomVecWavepacket : public AtomVec { +class AtomVecWavepacket : virtual public AtomVec { public: AtomVecWavepacket(class LAMMPS *); diff --git a/src/BPM/atom_vec_bpm_sphere.cpp b/src/BPM/atom_vec_bpm_sphere.cpp index f0cac301f4..3d2ced5429 100644 --- a/src/BPM/atom_vec_bpm_sphere.cpp +++ b/src/BPM/atom_vec_bpm_sphere.cpp @@ -20,7 +20,6 @@ #include "fix_adapt.h" #include "math_const.h" #include "modify.h" -#include "utils.h" #include diff --git a/src/BPM/atom_vec_bpm_sphere.h b/src/BPM/atom_vec_bpm_sphere.h index 5789c5763c..38ce3d9bca 100644 --- a/src/BPM/atom_vec_bpm_sphere.h +++ b/src/BPM/atom_vec_bpm_sphere.h @@ -24,7 +24,7 @@ AtomStyle(bpm/sphere,AtomVecBPMSphere); namespace LAMMPS_NS { -class AtomVecBPMSphere : public AtomVec { +class AtomVecBPMSphere : virtual public AtomVec { public: AtomVecBPMSphere(class LAMMPS *); void process_args(int, char **) override; diff --git a/src/BPM/bond_bpm.cpp b/src/BPM/bond_bpm.cpp index 7772e13fe5..4d65fe7684 100644 --- a/src/BPM/bond_bpm.cpp +++ b/src/BPM/bond_bpm.cpp @@ -25,7 +25,8 @@ #include "modify.h" #include "update.h" -#include +#include +#include using namespace LAMMPS_NS; diff --git a/src/BPM/bond_bpm.h b/src/BPM/bond_bpm.h index feebbdb2b2..cc2e46d5d3 100644 --- a/src/BPM/bond_bpm.h +++ b/src/BPM/bond_bpm.h @@ -16,8 +16,6 @@ #include "bond.h" -#include - namespace LAMMPS_NS { class BondBPM : public Bond { diff --git a/src/BPM/bond_bpm_rotational.cpp b/src/BPM/bond_bpm_rotational.cpp index 93ea2aafaf..3085488ef9 100644 --- a/src/BPM/bond_bpm_rotational.cpp +++ b/src/BPM/bond_bpm_rotational.cpp @@ -19,13 +19,13 @@ #include "error.h" #include "fix_bond_history.h" #include "force.h" -#include "math_const.h" #include "math_extra.h" #include "memory.h" #include "modify.h" #include "neighbor.h" #include +#include #define EPSILON 1e-10 diff --git a/src/BPM/bond_bpm_spring.cpp b/src/BPM/bond_bpm_spring.cpp index 9832aab0e2..ed4e71daf1 100644 --- a/src/BPM/bond_bpm_spring.cpp +++ b/src/BPM/bond_bpm_spring.cpp @@ -23,6 +23,9 @@ #include "modify.h" #include "neighbor.h" +#include +#include + #define EPSILON 1e-10 using namespace LAMMPS_NS; diff --git a/src/BPM/compute_nbond_atom.cpp b/src/BPM/compute_nbond_atom.cpp index f63bbf69e5..4f0fc4c3f0 100644 --- a/src/BPM/compute_nbond_atom.cpp +++ b/src/BPM/compute_nbond_atom.cpp @@ -15,12 +15,8 @@ #include "atom.h" #include "comm.h" -#include "error.h" #include "force.h" #include "memory.h" -#include "update.h" - -#include using namespace LAMMPS_NS; @@ -29,7 +25,7 @@ using namespace LAMMPS_NS; ComputeNBondAtom::ComputeNBondAtom(LAMMPS *_lmp, int narg, char **arg) : Compute(_lmp, narg, arg), nbond(nullptr) { - if (narg < 3) error->all(FLERR, "Illegal compute nbond/atom command"); + if (narg < 3) utils::missing_cmd_args(FLERR, "compute nbond/atom", error); peratom_flag = 1; size_peratom_cols = 0; diff --git a/src/BPM/fix_nve_bpm_sphere.cpp b/src/BPM/fix_nve_bpm_sphere.cpp index cf57092ca5..ceab07822e 100644 --- a/src/BPM/fix_nve_bpm_sphere.cpp +++ b/src/BPM/fix_nve_bpm_sphere.cpp @@ -14,13 +14,10 @@ #include "fix_nve_bpm_sphere.h" #include "atom.h" -#include "atom_vec.h" #include "domain.h" #include "error.h" -#include "force.h" #include "math_extra.h" -#include #include using namespace LAMMPS_NS; diff --git a/src/BPM/pair_bpm_spring.cpp b/src/BPM/pair_bpm_spring.cpp index d58f087a02..1177156359 100644 --- a/src/BPM/pair_bpm_spring.cpp +++ b/src/BPM/pair_bpm_spring.cpp @@ -19,7 +19,8 @@ #include "force.h" #include "memory.h" #include "neigh_list.h" -#include "neighbor.h" + +#include using namespace LAMMPS_NS; diff --git a/src/BROWNIAN/fix_brownian_asphere.cpp b/src/BROWNIAN/fix_brownian_asphere.cpp index 4ff678866c..5ce57df7ce 100644 --- a/src/BROWNIAN/fix_brownian_asphere.cpp +++ b/src/BROWNIAN/fix_brownian_asphere.cpp @@ -27,6 +27,8 @@ #include "math_extra.h" #include "random_mars.h" +#include + using namespace LAMMPS_NS; using namespace FixConst; diff --git a/src/CG-DNA/atom_vec_oxdna.h b/src/CG-DNA/atom_vec_oxdna.h index 667a6243fc..91318574eb 100644 --- a/src/CG-DNA/atom_vec_oxdna.h +++ b/src/CG-DNA/atom_vec_oxdna.h @@ -24,7 +24,7 @@ AtomStyle(oxdna,AtomVecOxdna); namespace LAMMPS_NS { -class AtomVecOxdna : public AtomVec { +class AtomVecOxdna : virtual public AtomVec { public: AtomVecOxdna(class LAMMPS *); diff --git a/src/CG-SPICA/angle_spica.cpp b/src/CG-SPICA/angle_spica.cpp index 83a4fbb4ad..3f8a506ed2 100644 --- a/src/CG-SPICA/angle_spica.cpp +++ b/src/CG-SPICA/angle_spica.cpp @@ -297,7 +297,7 @@ void AngleSPICA::init_style() repflag = 0; for (int i = 1; i <= atom->nangletypes; i++) - if (repscale[i] > 0.0) repflag = 1; + if (repscale && (repscale[i] > 0.0)) repflag = 1; // set up pointers to access SPICA LJ parameters for 1-3 interactions diff --git a/src/COLLOID/pair_brownian.cpp b/src/COLLOID/pair_brownian.cpp index 4d17fddc5d..4d78145207 100644 --- a/src/COLLOID/pair_brownian.cpp +++ b/src/COLLOID/pair_brownian.cpp @@ -92,7 +92,6 @@ void PairBrownian::compute(int eflag, int vflag) double prethermostat; double xl[3], a_sq, a_sh, a_pu, Fbmag; double p1[3], p2[3], p3[3]; - int overlaps = 0; // This section of code adjusts R0/RT0/RS0 if necessary due to changes // in the volume fraction as a result of fix deform or moving walls @@ -187,10 +186,6 @@ void PairBrownian::compute(int eflag, int vflag) h_sep = r - 2.0 * radi; - // check for overlaps - - if (h_sep < 0.0) overlaps++; - // if less than minimum gap, use minimum gap instead if (r < cut_inner[itype][jtype]) h_sep = cut_inner[itype][jtype] - 2.0 * radi; @@ -336,9 +331,6 @@ void PairBrownian::compute(int eflag, int vflag) } } - int print_overlaps = 0; - if (print_overlaps && overlaps) printf("Number of overlaps=%d\n", overlaps); - if (vflag_fdotr) virial_fdotr_compute(); } diff --git a/src/COLLOID/pair_brownian_poly.cpp b/src/COLLOID/pair_brownian_poly.cpp index c356669f3f..2654410c03 100644 --- a/src/COLLOID/pair_brownian_poly.cpp +++ b/src/COLLOID/pair_brownian_poly.cpp @@ -72,7 +72,6 @@ void PairBrownianPoly::compute(int eflag, int vflag) int nlocal = atom->nlocal; double vxmu2f = force->vxmu2f; - int overlaps = 0; double randr; double prethermostat; double xl[3],a_sq,a_sh,a_pu,Fbmag; @@ -176,10 +175,6 @@ void PairBrownianPoly::compute(int eflag, int vflag) h_sep = r - radi-radj; - // check for overlaps - - if (h_sep < 0.0) overlaps++; - // if less than minimum gap, use minimum gap instead if (r < cut_inner[itype][jtype]) diff --git a/src/COLVARS/Install.sh b/src/COLVARS/Install.sh index d67883a416..ebabfd7a1e 100755 --- a/src/COLVARS/Install.sh +++ b/src/COLVARS/Install.sh @@ -47,7 +47,7 @@ if (test $1 = 1) then fi if (test -e ../Makefile.package.settings) then - sed -i -e '/^include.*colvars.*$/d' ../Makefile.package.settings + sed -i -e '/^[ \t]*include.*colvars.*$/d' ../Makefile.package.settings # multiline form needed for BSD sed on Macs sed -i -e '4 i \ include ..\/..\/lib\/colvars\/Makefile.lammps @@ -62,7 +62,7 @@ elif (test $1 = 0) then fi if (test -e ../Makefile.package.settings) then - sed -i -e '/^include.*colvars.*$/d' ../Makefile.package.settings + sed -i -e '/^[ \t]*include.*colvars.*$/d' ../Makefile.package.settings fi fi diff --git a/src/COMPRESS/Install.sh b/src/COMPRESS/Install.sh index ab9dac33dc..c0d926cba4 100755 --- a/src/COMPRESS/Install.sh +++ b/src/COMPRESS/Install.sh @@ -44,7 +44,7 @@ if (test $1 = 1) then fi if (test -e ../Makefile.package.settings) then - sed -i -e '/^include.*compress.*$/d' ../Makefile.package.settings + sed -i -e '/^[ \t]*include.*compress.*$/d' ../Makefile.package.settings # multiline form needed for BSD sed on Macs sed -i -e '4 i \ include ..\/..\/lib\/compress\/Makefile.lammps @@ -58,7 +58,7 @@ elif (test $1 = 0) then fi if (test -e ../Makefile.package.settings) then - sed -i -e '/^include.*compress.*$/d' ../Makefile.package.settings + sed -i -e '/^[ \t]*include.*compress.*$/d' ../Makefile.package.settings fi fi diff --git a/src/CORESHELL/compute_temp_cs.cpp b/src/CORESHELL/compute_temp_cs.cpp index 2adb6c16ae..49e8a4dd47 100644 --- a/src/CORESHELL/compute_temp_cs.cpp +++ b/src/CORESHELL/compute_temp_cs.cpp @@ -31,9 +31,6 @@ #include "modify.h" #include "update.h" -#include - - using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ diff --git a/src/DIELECTRIC/atom_vec_dielectric.h b/src/DIELECTRIC/atom_vec_dielectric.h index b8bcf62fa3..34fe11b249 100644 --- a/src/DIELECTRIC/atom_vec_dielectric.h +++ b/src/DIELECTRIC/atom_vec_dielectric.h @@ -24,7 +24,7 @@ AtomStyle(dielectric,AtomVecDielectric); namespace LAMMPS_NS { -class AtomVecDielectric : public AtomVec { +class AtomVecDielectric : virtual public AtomVec { friend class PairLJCutCoulDebyeDielectric; friend class PairLJLongCoulLongDielectric; diff --git a/src/DIELECTRIC/msm_dielectric.cpp b/src/DIELECTRIC/msm_dielectric.cpp index 4e157e9f2a..0e89ab8946 100644 --- a/src/DIELECTRIC/msm_dielectric.cpp +++ b/src/DIELECTRIC/msm_dielectric.cpp @@ -20,7 +20,6 @@ #include "atom.h" #include "atom_vec_dielectric.h" -#include "comm.h" #include "domain.h" #include "error.h" #include "gridcomm.h" diff --git a/src/DIELECTRIC/pppm_dielectric.cpp b/src/DIELECTRIC/pppm_dielectric.cpp index 1f01cda143..c2211828c8 100644 --- a/src/DIELECTRIC/pppm_dielectric.cpp +++ b/src/DIELECTRIC/pppm_dielectric.cpp @@ -20,10 +20,8 @@ #include "atom.h" #include "atom_vec_dielectric.h" -#include "comm.h" #include "domain.h" #include "error.h" -#include "force.h" #include "gridcomm.h" #include "math_const.h" #include "math_special.h" diff --git a/src/DIELECTRIC/pppm_disp_dielectric.cpp b/src/DIELECTRIC/pppm_disp_dielectric.cpp index 5ef35381d0..201e18145b 100644 --- a/src/DIELECTRIC/pppm_disp_dielectric.cpp +++ b/src/DIELECTRIC/pppm_disp_dielectric.cpp @@ -18,7 +18,6 @@ #include "pppm_disp_dielectric.h" -#include "angle.h" #include "atom.h" #include "atom_vec_dielectric.h" #include "domain.h" diff --git a/src/DIFFRACTION/fix_saed_vtk.cpp b/src/DIFFRACTION/fix_saed_vtk.cpp index 6bbfe5ae0d..b3f6693e9e 100644 --- a/src/DIFFRACTION/fix_saed_vtk.cpp +++ b/src/DIFFRACTION/fix_saed_vtk.cpp @@ -407,7 +407,6 @@ void FixSAEDVTK::invoke_vector(bigint ntimestep) // Finding the intersection of the reciprical space and Ewald sphere int NROW1 = 0; - int NROW2 = 0; double dinv2 = 0.0; double r = 0.0; double K[3]; @@ -425,11 +424,9 @@ void FixSAEDVTK::invoke_vector(bigint ntimestep) fprintf(fp,"%g\n",vector_total[NROW1]/norm); fflush(fp); NROW1++; - NROW2++; } else { fprintf(fp,"%d\n",-1); fflush(fp); - NROW2++; } } } @@ -449,17 +446,14 @@ void FixSAEDVTK::invoke_vector(bigint ntimestep) if ( (r > (R_Ewald - dR_Ewald) ) && (r < (R_Ewald + dR_Ewald) )) { fprintf(fp,"%g\n",vector_total[NROW1]/norm); fflush(fp); - NROW2++; NROW1++; } else { fprintf(fp,"%d\n",-1); fflush(fp); - NROW2++; } } else { fprintf(fp,"%d\n",-1); fflush(fp); - NROW2++; } } } diff --git a/src/DIPOLE/atom_vec_dipole.h b/src/DIPOLE/atom_vec_dipole.h index 9970e6ccb0..923454a39f 100644 --- a/src/DIPOLE/atom_vec_dipole.h +++ b/src/DIPOLE/atom_vec_dipole.h @@ -24,7 +24,7 @@ AtomStyle(dipole,AtomVecDipole); namespace LAMMPS_NS { -class AtomVecDipole : public AtomVec { +class AtomVecDipole : virtual public AtomVec { public: AtomVecDipole(class LAMMPS *); diff --git a/src/DPD-MESO/atom_vec_edpd.h b/src/DPD-MESO/atom_vec_edpd.h index a9dca7ed26..43da20be70 100644 --- a/src/DPD-MESO/atom_vec_edpd.h +++ b/src/DPD-MESO/atom_vec_edpd.h @@ -24,7 +24,7 @@ AtomStyle(edpd,AtomVecEDPD); namespace LAMMPS_NS { -class AtomVecEDPD : public AtomVec { +class AtomVecEDPD : virtual public AtomVec { public: AtomVecEDPD(class LAMMPS *); void init() override; diff --git a/src/DPD-MESO/atom_vec_mdpd.h b/src/DPD-MESO/atom_vec_mdpd.h index 9516bcfa9c..9c2f293ba7 100644 --- a/src/DPD-MESO/atom_vec_mdpd.h +++ b/src/DPD-MESO/atom_vec_mdpd.h @@ -24,7 +24,7 @@ AtomStyle(mdpd,AtomVecMDPD); namespace LAMMPS_NS { -class AtomVecMDPD : public AtomVec { +class AtomVecMDPD : virtual public AtomVec { public: AtomVecMDPD(class LAMMPS *); void init() override; diff --git a/src/DPD-MESO/atom_vec_tdpd.h b/src/DPD-MESO/atom_vec_tdpd.h index c5fc2991a4..8bed9eb3a7 100644 --- a/src/DPD-MESO/atom_vec_tdpd.h +++ b/src/DPD-MESO/atom_vec_tdpd.h @@ -24,7 +24,7 @@ AtomStyle(tdpd,AtomVecTDPD); namespace LAMMPS_NS { -class AtomVecTDPD : public AtomVec { +class AtomVecTDPD : virtual public AtomVec { public: AtomVecTDPD(class LAMMPS *); void process_args(int, char **) override; diff --git a/src/DPD-REACT/atom_vec_dpd.h b/src/DPD-REACT/atom_vec_dpd.h index 32bf9a25a8..7b50e26236 100644 --- a/src/DPD-REACT/atom_vec_dpd.h +++ b/src/DPD-REACT/atom_vec_dpd.h @@ -24,7 +24,7 @@ AtomStyle(dpd,AtomVecDPD); namespace LAMMPS_NS { -class AtomVecDPD : public AtomVec { +class AtomVecDPD : virtual public AtomVec { public: AtomVecDPD(class LAMMPS *); @@ -32,7 +32,7 @@ class AtomVecDPD : public AtomVec { void unpack_restart_init(int) override; void data_atom_post(int) override; - private: + protected: double *rho, *dpdTheta; double *uCond, *uMech, *uChem; double *uCG, *uCGnew; diff --git a/src/DPD-REACT/fix_rx.cpp b/src/DPD-REACT/fix_rx.cpp index 9939a19bb3..96eb9d4572 100644 --- a/src/DPD-REACT/fix_rx.cpp +++ b/src/DPD-REACT/fix_rx.cpp @@ -390,7 +390,6 @@ void FixRX::initSparse() int mxprod = 0; int mxreac = 0; int mxspec = 0; - int nIntegral = 0; for (int i = 0; i < nreactions; ++i) { int nreac_i = 0, nprod_i = 0; std::string pstr, rstr; @@ -430,7 +429,6 @@ void FixRX::initSparse() mxreac = std::max( mxreac, nreac_i ); mxprod = std::max( mxprod, nprod_i ); mxspec = std::max( mxspec, nreac_i + nprod_i ); - if (allAreIntegral) nIntegral++; } if (comm->me == 0 && Verbosity > 1) { diff --git a/src/EFF/atom_vec_electron.cpp b/src/EFF/atom_vec_electron.cpp index c1bb93931d..d763ff0671 100644 --- a/src/EFF/atom_vec_electron.cpp +++ b/src/EFF/atom_vec_electron.cpp @@ -20,6 +20,8 @@ #include "atom.h" #include "citeme.h" +#include + using namespace LAMMPS_NS; static const char cite_user_eff_package[] = diff --git a/src/EFF/atom_vec_electron.h b/src/EFF/atom_vec_electron.h index 6e4c123419..3c268182bc 100644 --- a/src/EFF/atom_vec_electron.h +++ b/src/EFF/atom_vec_electron.h @@ -24,7 +24,7 @@ AtomStyle(electron,AtomVecElectron); namespace LAMMPS_NS { -class AtomVecElectron : public AtomVec { +class AtomVecElectron : virtual public AtomVec { public: AtomVecElectron(class LAMMPS *); diff --git a/src/EFF/compute_temp_region_eff.cpp b/src/EFF/compute_temp_region_eff.cpp index e41adeb5c2..ff20d48124 100644 --- a/src/EFF/compute_temp_region_eff.cpp +++ b/src/EFF/compute_temp_region_eff.cpp @@ -141,12 +141,6 @@ double ComputeTempRegionEff::compute_scalar() if (dof < 0.0 && tarray_all[0] > 0.0) error->all(FLERR, "Temperature compute degrees of freedom < 0"); - int one = 0; - for (int i = 0; i < nlocal; i++) - if (mask[i] & groupbit && region->match(x[i][0], x[i][1], x[i][2])) { - if (abs(spin[i]) == 1) one++; - } - if (dof > 0.0) scalar = force->mvv2e * tarray_all[1] / (dof * force->boltz); else diff --git a/src/ELECTRODE/Install.sh b/src/ELECTRODE/Install.sh index 65d0b404da..561df0dce0 100755 --- a/src/ELECTRODE/Install.sh +++ b/src/ELECTRODE/Install.sh @@ -49,11 +49,11 @@ if (test $1 = 1) then sed -i -e 's|^PKG_SYSLIB =[ \t]*|&$(electrode_SYSLIB) |' ../Makefile.package fi if (test -e ../Makefile.package.settings) then - sed -i -e '/^include.*electrode.*$/d' ../Makefile.package.settings + sed -i -e '/^[ \t]*include.*electrode.*$/d' ../Makefile.package.settings # multiline form needed for BSD sed on Macs sed -i -e '4 i \ - include ..\/..\/lib\/electrode\/Makefile.lammps - ' ../Makefile.package.settings +include ..\/..\/lib\/electrode\/Makefile.lammps +' ../Makefile.package.settings fi elif (test $1 = 0) then @@ -61,7 +61,7 @@ elif (test $1 = 0) then sed -i -e 's/[^ \t]*electrode[^ \t]* //g' ../Makefile.package fi if (test -e ../Makefile.package.settings) then - sed -i -e '/^include.*electrode.*$/d' ../Makefile.package.settings + sed -i -e '/^[ \t]*include.*electrode.*$/d' ../Makefile.package.settings fi fi 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/electrode_matrix.cpp b/src/ELECTRODE/electrode_matrix.cpp index 484e524041..5faac5a252 100644 --- a/src/ELECTRODE/electrode_matrix.cpp +++ b/src/ELECTRODE/electrode_matrix.cpp @@ -29,6 +29,9 @@ #include "neigh_list.h" #include "pair.h" +#include +#include + using namespace LAMMPS_NS; using namespace MathConst; @@ -82,7 +85,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 +115,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 4b99973fc7..245ba57727 100644 --- a/src/ELECTRODE/electrode_vector.cpp +++ b/src/ELECTRODE/electrode_vector.cpp @@ -25,10 +25,15 @@ #include "force.h" #include "group.h" #include "kspace.h" +#include "math_const.h" #include "neigh_list.h" #include "pair.h" +#include +#include + using namespace LAMMPS_NS; +using namespace MathConst; ElectrodeVector::ElectrodeVector(LAMMPS *lmp, int sensor_group, int source_group, double eta, bool invert_source) : @@ -41,6 +46,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; @@ -79,6 +85,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); @@ -86,6 +100,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 @@ -105,6 +121,7 @@ void ElectrodeVector::compute_vector(double *vector) void ElectrodeVector::pair_contribution(double *vector) { + double const etaij = eta * MY_ISQRT2; double **x = atom->x; double *q = atom->q; int *type = atom->type; @@ -121,6 +138,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]; @@ -144,12 +162,53 @@ void ElectrodeVector::pair_contribution(double *vector) double const rinv = 1.0 / r; double aij = rinv; aij *= ElectrodeMath::safe_erfc(g_ewald * r); - aij -= ElectrodeMath::safe_erfc(eta * 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) { - 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 cd3117a31f..e7f637dd2d 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/ewald_electrode.cpp b/src/ELECTRODE/ewald_electrode.cpp index 9d9dbdcd07..99266ed450 100644 --- a/src/ELECTRODE/ewald_electrode.cpp +++ b/src/ELECTRODE/ewald_electrode.cpp @@ -18,6 +18,7 @@ #include "ewald_electrode.h" #include "atom.h" +#include "boundary_correction.h" #include "comm.h" #include "domain.h" #include "error.h" @@ -40,7 +41,7 @@ using namespace MathConst; /* ---------------------------------------------------------------------- */ -EwaldElectrode::EwaldElectrode(LAMMPS *lmp) : Ewald(lmp) +EwaldElectrode::EwaldElectrode(LAMMPS *lmp) : Ewald(lmp), boundcorr(nullptr) { eikr_step = -1; } @@ -88,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)) @@ -301,7 +303,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 @@ -418,7 +419,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); } /* ---------------------------------------------------------------------- */ @@ -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 a5069f819d..2c39a57532 100644 --- a/src/ELECTRODE/fix_electrode_conp.cpp +++ b/src/ELECTRODE/fix_electrode_conp.cpp @@ -18,8 +18,8 @@ #include "fix_electrode_conp.h" #include "atom.h" +#include "citeme.h" #include "comm.h" -#include "compute.h" #include "domain.h" #include "electrode_accel_interface.h" #include "electrode_math.h" @@ -36,44 +36,65 @@ #include "neigh_request.h" #include "neighbor.h" #include "pair.h" -#include "pointers.h" #include "text_file_reader.h" #include "variable.h" +#include #include -#include +#include +#include +#include +#include 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, const int *lwork, int *info); } -enum { CONST, EQUAL }; -enum { - V, // voltage - QSB, // q_sb - MC, // macro_capacitance - ME // macro_elastance -}; +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) : - 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), 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) { - read_inv = read_mat = false; + if (lmp->citeme) lmp->citeme->add(cite_fix_electrode); + // fix.h output flags + scalar_flag = 1; + vector_flag = 1; + extscalar = 1; + extvector = 0; + extarray = 0; + + bool default_algo = true; + algo = Algo::MATRIX_INV; + matrix_algo = true; + cg_threshold = 0.; + write_inv = write_mat = write_vec = 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; @@ -81,19 +102,20 @@ 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]); 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]; @@ -110,50 +132,51 @@ 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)) { - 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 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]; + 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 symm keyword"); + 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) { - 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())); - } 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())); - } 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"); @@ -166,12 +189,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)) { - 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"); if (strcmp(this->style, "electrode/thermo") != 0) @@ -179,16 +196,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"); } @@ -206,23 +220,38 @@ 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 - ele_vector = new ElectrodeVector(lmp, igroup, igroup, eta, true); - if (!(read_inv || read_mat)) { array_compute = new ElectrodeMatrix(lmp, igroup, eta); } - - // error checks + need_array_compute = !(read_inv || read_mat) && matrix_algo; + 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); 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); + 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 (!matrix_algo && (read_mat || write_mat || write_vec)) { + error->all(FLERR, + "Selected algorithm does not use matrix. Cannot read/write matrix or vector."); + } 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; + 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; @@ -243,15 +272,17 @@ 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"); - 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; @@ -260,12 +291,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 +331,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; @@ -392,6 +374,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) @@ -436,7 +424,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 @@ -452,10 +440,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; @@ -471,7 +455,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) @@ -485,22 +469,11 @@ void FixElectrodeConp::setup_post_neighbor() // pair and list setups: 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); } + 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); } - // 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; } - } - } - 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(); @@ -512,51 +485,93 @@ 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 (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, 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 - } - if (symm) symmetrize(); + read_from_file(input_file_mat, elastance, "elastance"); + 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); + 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, elastance)); + fclose(f_mat); + } + if (algo == Algo::MATRIX_INV) { + capacitance = elastance; + elastance = nullptr; + if (read_inv) + read_from_file(input_file_inv, capacitance, "capacitance"); + else + 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(); + // 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)); + } } - 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(); // 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) { + 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); + buffer_and_gather(potential_i, potential_iele); + if (comm->me == 0) { + 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) { + if (comm->me == 0) { + 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)); } } } @@ -567,13 +582,15 @@ 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 } /* ---------------------------------------------------------------------- */ 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"); @@ -596,6 +613,11 @@ void FixElectrodeConp::invert() void FixElectrodeConp::symmetrize() { // S matrix to enforce charge neutrality constraint + if (read_inv && comm->me == 0) + 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; for (int i = 0; i < ngroup; i++) { @@ -614,6 +636,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; @@ -626,21 +652,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); @@ -656,8 +682,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()); @@ -668,10 +692,10 @@ 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 {:.1f} per proc)", + "(anticipated usage is at least {:.1f} GiB per proc)", mem_needed)); } @@ -688,13 +712,15 @@ 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 } /* ---------------------------------------------------------------------- */ 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) { @@ -708,6 +734,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; @@ -756,6 +783,7 @@ int FixElectrodeConp::get_top_group() void FixElectrodeConp::update_charges() { + n_call++; MPI_Barrier(world); double start = MPI_Wtime(); if (atom->nmax > nmax) { @@ -764,92 +792,214 @@ 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(); - 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; + 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.); + 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]; } + q_local[i_iele] = q_tmp; + sb_charges[iele_to_group[iele]] += q_tmp; + } + 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 < 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. This rarely happens. + q_local = constraint_correction(q_local); + 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; + } + 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"); } - 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 - - 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; - 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(const 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); + accel_interface->intel_pack_buffers(); +} + +/* ---------------------------------------------------------------------- */ + +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() { 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]); } } /* ---------------------------------------------------------------------- */ -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() { + 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++) { @@ -865,13 +1015,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; @@ -894,7 +1044,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; @@ -902,17 +1052,15 @@ void FixElectrodeConp::compute_macro_matrices() } } } - - update_setvars(MC); - update_setvars(ME); } /* ---------------------------------------------------------------------- */ double FixElectrodeConp::compute_scalar() { - return potential_energy(0); + return potential_energy(); } + /* ---------------------------------------------------------------------- */ double FixElectrodeConp::compute_vector(int i) @@ -922,24 +1070,32 @@ double FixElectrodeConp::compute_vector(int i) /* ---------------------------------------------------------------------- */ -double FixElectrodeConp::potential_energy(int eflag) +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() { // corrections to energy due to potential psi 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; - 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++; } } MPI_Allreduce(MPI_IN_PLACE, &energy, 1, MPI_DOUBLE, MPI_SUM, world); @@ -1054,30 +1210,36 @@ double FixElectrodeConp::gausscorr(int eflag, bool fflag) FixElectrodeConp::~FixElectrodeConp() { - if (timer_flag && (comm->me == 0)) { + if (comm->me == 0) { try { - 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 (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)); } catch (std::exception &) { } } if (!modify->get_fix_by_id(id)) // 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 (!(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); + delete elyt_vector; + if (need_elec_vector) delete elec_vector; + if (algo == Algo::MATRIX_INV) + memory->destroy(capacitance); + else if (matrix_algo) + memory->destroy(elastance); } /* ---------------------------------------------------------------------- */ @@ -1116,7 +1278,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); @@ -1157,6 +1320,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; @@ -1182,11 +1364,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); @@ -1224,26 +1411,39 @@ 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; 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); + } + } + 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); @@ -1252,13 +1452,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); } @@ -1268,16 +1466,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 - bytes += ngroup * ngroup * sizeof(double); // capacitance - 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; @@ -1287,7 +1494,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 c461920b90..5d3131bcce 100644 --- a/src/ELECTRODE/fix_electrode_conp.h +++ b/src/ELECTRODE/fix_electrode_conp.h @@ -26,16 +26,22 @@ FixStyle(electrode/conp, FixElectrodeConp); #ifndef LMP_FIX_ELECTRODE_CONP_H #define LMP_FIX_ELECTRODE_CONP_H -#include "electrode_accel_interface.h" #include "fix.h" -#include #include +#include #include namespace LAMMPS_NS { +// forward decls + +class ElectrodeAccelInterface; +class ElectrodeVector; +class NeighList; +class Pair; class FixElectrodeConp : public Fix { + public: FixElectrodeConp(class LAMMPS *, int, char **); ~FixElectrodeConp() override; @@ -47,6 +53,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; @@ -60,56 +67,66 @@ 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 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(const 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, 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 + std::vector iele_to_group_local; + 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 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 + 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; - double eta; + ElectrodeVector *elyt_vector, *elec_vector; + double **capacitance, **elastance; + bool read_inv, read_mat, write_inv, write_mat, write_vec; + bool matrix_algo, need_array_compute, need_elec_vector; + double eta, cg_threshold; double update_time, mult_time; + long n_cg_step, n_call; void create_taglist(); void invert(); 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(); - std::vector setvars_types, setvars_groups, setvars_vars; - void update_setvars(int); int groupnum_from_name(char *); - double evscale; - class Pair *pair; - class NeighList *mat_neighlist, *vec_neighlist; + Pair *pair; + NeighList *mat_neighlist, *vec_neighlist; std::vector etypes; int mat_request, vec_request; void request_etypes_neighlists(); @@ -119,12 +136,21 @@ class FixElectrodeConp : public Fix { bool tfflag; bool timer_flag; std::map tf_types; + // cg + 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 @@ -138,7 +164,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 d7f4f58be1..0d3d1d2aaf 100644 --- a/src/ELECTRODE/fix_electrode_conq.cpp +++ b/src/ELECTRODE/fix_electrode_conq.cpp @@ -17,44 +17,108 @@ #include "fix_electrode_conq.h" +#include "comm.h" #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 - -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) : FixElectrodeConp(lmp, narg, 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"); + if (comm->me == 0) + 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() { - // 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; + 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; } - - 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]; + if (algo == Algo::MATRIX_INV) { + 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++) { + vtmp += macro_elastance[g][h] * group_remainder_q[h]; + } + group_psi[g] = vtmp; } - group_psi[g] = vtmp; + } else { + 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; + } + 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; +} + +/* ---------------------------------------------------------------------- + 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 f2bb763f7a..221ec2beff 100644 --- a/src/ELECTRODE/fix_electrode_conq.h +++ b/src/ELECTRODE/fix_electrode_conq.h @@ -34,6 +34,9 @@ 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; private: std::vector group_q; diff --git a/src/ELECTRODE/fix_electrode_thermo.cpp b/src/ELECTRODE/fix_electrode_thermo.cpp index c1f401527b..52c0a3ce4c 100644 --- a/src/ELECTRODE/fix_electrode_thermo.cpp +++ b/src/ELECTRODE/fix_electrode_thermo.cpp @@ -20,19 +20,18 @@ #include "atom.h" #include "error.h" #include "fix_electrode_conp.h" -#include "force.h" #include "input.h" #include "random_mars.h" #include "update.h" #include "variable.h" +#include + using namespace LAMMPS_NS; #define NUM_GROUPS 2 #define SMALL 0.00001 -enum { CONST, EQUAL }; - /* ----------------------------------------------------------------------- */ // 0 1 2 3 4 @@ -44,11 +43,11 @@ 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"); 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]; } /* ----------------------------------------------------------------------- */ @@ -63,9 +62,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]); } /* ----------------------------------------------------------------------- */ @@ -92,18 +94,15 @@ 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 - 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]); } @@ -114,11 +113,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]; } diff --git a/src/ELECTRODE/pppm_electrode.cpp b/src/ELECTRODE/pppm_electrode.cpp index 14b7e97c59..0b92a76c8e 100644 --- a/src/ELECTRODE/pppm_electrode.cpp +++ b/src/ELECTRODE/pppm_electrode.cpp @@ -20,7 +20,7 @@ #include "angle.h" #include "atom.h" #include "bond.h" -#include "boundary_correction.h" +#include "citeme.h" #include "comm.h" #include "domain.h" #include "error.h" @@ -62,11 +62,26 @@ 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) + PPPM(lmp), electrolyte_density_brick(nullptr), electrolyte_density_fft(nullptr), + boundcorr(nullptr) { + if (lmp->citeme) lmp->citeme->add(cite_pppm_electrode); + group_group_enable = 0; electrolyte_density_brick = nullptr; electrolyte_density_fft = nullptr; @@ -83,7 +98,6 @@ PPPMElectrode::~PPPMElectrode() if (copymode) return; deallocate(); - delete boundcorr; if (peratom_allocate_flag) deallocate_peratom(); if (group_allocate_flag) deallocate_groups(); memory->destroy(part2grid); @@ -308,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; @@ -323,7 +335,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; } @@ -435,13 +447,12 @@ void PPPMElectrode::compute(int eflag, int vflag) // return if there are no charges - // if (qsqsum == 0.0) return; TODO move back in - 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); @@ -471,9 +482,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 @@ -552,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; } @@ -665,11 +673,12 @@ 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 - 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, (std::size_t)nz_pppm * (std::size_t)ny_pppm * (std::size_t)nx_pppm * sizeof(double)); for (int i = 0, n = 0; i < nfft; i++) { work2[n++] = greensfn[i]; work2[n++] = ZEROF; @@ -681,13 +690,14 @@ 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_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; }); 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)); @@ -703,14 +713,14 @@ 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, - 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 @@ -722,11 +732,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"); + + 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]; @@ -735,7 +753,7 @@ 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, @@ -754,44 +776,48 @@ 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)); @@ -799,9 +825,38 @@ void PPPMElectrode::one_step_multiplication(bigint *imat, const std::vector &greens_real, - double **x_ele, double **matrix, int const nmat, - bool timer_flag) +void PPPMElectrode::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 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 @@ -813,7 +868,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, (std::size_t)nmat * (std::size_t)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 @@ -830,21 +894,21 @@ void PPPMElectrode::two_step_multiplication(bigint *imat, const std::vectorx; for (int i = 0; i < nlocal; i++) { @@ -894,6 +960,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)); } @@ -932,6 +999,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); diff --git a/src/ELECTRODE/pppm_electrode.h b/src/ELECTRODE/pppm_electrode.h index 03a4e5dc92..a14bc3264d 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; }; diff --git a/src/ELECTRODE/slab_2d.cpp b/src/ELECTRODE/slab_2d.cpp index 509b3061e3..f38f22617d 100644 --- a/src/ELECTRODE/slab_2d.cpp +++ b/src/ELECTRODE/slab_2d.cpp @@ -18,10 +18,12 @@ #include "slab_2d.h" #include "atom.h" -#include "comm.h" #include "domain.h" +#include "force.h" +#include "kspace.h" #include "math_const.h" -#include "memory.h" + +#include using namespace LAMMPS_NS; using namespace MathConst; @@ -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; @@ -70,7 +75,7 @@ void Slab2d::compute_corr(double /*qsum*/, double /*slab_volfactor*/, int eflag_ } // 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) { @@ -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 d4f339750d..d5f3eae7aa 100644 --- a/src/ELECTRODE/slab_dipole.cpp +++ b/src/ELECTRODE/slab_dipole.cpp @@ -18,10 +18,13 @@ #include "slab_dipole.h" #include "atom.h" -#include "comm.h" #include "domain.h" +#include "force.h" +#include "kspace.h" #include "math_const.h" +#include + using namespace LAMMPS_NS; using namespace MathConst; @@ -37,13 +40,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 +71,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 +92,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 +110,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; @@ -138,5 +145,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) } 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..5a3e3d976a 100644 --- a/src/ELECTRODE/wire_dipole.cpp +++ b/src/ELECTRODE/wire_dipole.cpp @@ -19,7 +19,7 @@ #include "atom.h" #include "comm.h" -#include "domain.h" +#include "force.h" #include "math_const.h" using namespace LAMMPS_NS; @@ -34,9 +34,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 +73,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 +96,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 +116,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/EXTRA-COMPUTE/compute_basal_atom.cpp b/src/EXTRA-COMPUTE/compute_basal_atom.cpp index 90f5c8a33e..b149746fb4 100644 --- a/src/EXTRA-COMPUTE/compute_basal_atom.cpp +++ b/src/EXTRA-COMPUTE/compute_basal_atom.cpp @@ -31,7 +31,6 @@ #include "update.h" #include -#include using namespace LAMMPS_NS; diff --git a/src/EXTRA-COMPUTE/compute_born_matrix.cpp b/src/EXTRA-COMPUTE/compute_born_matrix.cpp index 8ad808c2f3..4eecbbfa14 100644 --- a/src/EXTRA-COMPUTE/compute_born_matrix.cpp +++ b/src/EXTRA-COMPUTE/compute_born_matrix.cpp @@ -33,10 +33,8 @@ #include "modify.h" #include "molecule.h" #include "neigh_list.h" -#include "neigh_request.h" #include "neighbor.h" #include "pair.h" -#include "universe.h" #include "update.h" #include diff --git a/src/EXTRA-COMPUTE/compute_stress_cartesian.cpp b/src/EXTRA-COMPUTE/compute_stress_cartesian.cpp index b33f58798f..eb93a31655 100644 --- a/src/EXTRA-COMPUTE/compute_stress_cartesian.cpp +++ b/src/EXTRA-COMPUTE/compute_stress_cartesian.cpp @@ -20,7 +20,6 @@ #include "error.h" #include "force.h" #include "memory.h" -#include "modify.h" #include "neigh_list.h" #include "neighbor.h" #include "pair.h" diff --git a/src/EXTRA-COMPUTE/compute_stress_cylinder.cpp b/src/EXTRA-COMPUTE/compute_stress_cylinder.cpp index c5fc68f258..f445b258b1 100644 --- a/src/EXTRA-COMPUTE/compute_stress_cylinder.cpp +++ b/src/EXTRA-COMPUTE/compute_stress_cylinder.cpp @@ -21,7 +21,6 @@ #include "math_const.h" #include "math_special.h" #include "memory.h" -#include "modify.h" #include "neigh_list.h" #include "neighbor.h" #include "pair.h" @@ -29,7 +28,6 @@ #include #include -#include using namespace LAMMPS_NS; using namespace MathConst; diff --git a/src/EXTRA-COMPUTE/compute_stress_spherical.cpp b/src/EXTRA-COMPUTE/compute_stress_spherical.cpp index c8608e265a..6a6ec4745f 100644 --- a/src/EXTRA-COMPUTE/compute_stress_spherical.cpp +++ b/src/EXTRA-COMPUTE/compute_stress_spherical.cpp @@ -19,19 +19,15 @@ #include "domain.h" #include "error.h" #include "force.h" -#include "lattice.h" #include "math_const.h" #include "math_special.h" #include "memory.h" -#include "modify.h" #include "neigh_list.h" -#include "neigh_request.h" #include "neighbor.h" #include "pair.h" #include "update.h" #include -#include using namespace LAMMPS_NS; using namespace MathConst; diff --git a/src/EXTRA-DUMP/dump_yaml.cpp b/src/EXTRA-DUMP/dump_yaml.cpp index 117fe84a4c..3c35ec43ba 100644 --- a/src/EXTRA-DUMP/dump_yaml.cpp +++ b/src/EXTRA-DUMP/dump_yaml.cpp @@ -20,6 +20,8 @@ #include "thermo.h" #include "update.h" +#include + using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ diff --git a/src/EXTRA-FIX/fix_ave_correlate_long.cpp b/src/EXTRA-FIX/fix_ave_correlate_long.cpp index 3667cd3a20..a44d6414f7 100644 --- a/src/EXTRA-FIX/fix_ave_correlate_long.cpp +++ b/src/EXTRA-FIX/fix_ave_correlate_long.cpp @@ -36,7 +36,6 @@ #include "update.h" #include "variable.h" -#include #include using namespace LAMMPS_NS; diff --git a/src/EXTRA-FIX/fix_viscous_sphere.cpp b/src/EXTRA-FIX/fix_viscous_sphere.cpp index 14bb03d1aa..5b4dd72231 100644 --- a/src/EXTRA-FIX/fix_viscous_sphere.cpp +++ b/src/EXTRA-FIX/fix_viscous_sphere.cpp @@ -14,11 +14,9 @@ #include "fix_viscous_sphere.h" #include "atom.h" -#include "comm.h" #include "error.h" #include "input.h" #include "memory.h" -#include "modify.h" #include "respa.h" #include "update.h" #include "variable.h" diff --git a/src/EXTRA-MOLECULE/angle_gaussian.cpp b/src/EXTRA-MOLECULE/angle_gaussian.cpp index a474195af5..7290cb70cc 100644 --- a/src/EXTRA-MOLECULE/angle_gaussian.cpp +++ b/src/EXTRA-MOLECULE/angle_gaussian.cpp @@ -28,8 +28,8 @@ using namespace LAMMPS_NS; using namespace MathConst; -#define SMAL 0.001 -#define SMALL 1.0e-8 +static constexpr double SMALL = 0.001; +static constexpr double SMALLG = 2.0e-308; /* ---------------------------------------------------------------------- */ @@ -112,7 +112,7 @@ void AngleGaussian::compute(int eflag, int vflag) if (c < -1.0) c = -1.0; s = sqrt(1.0 - c * c); - if (s < SMAL) s = SMAL; + if (s < SMALL) s = SMALL; s = 1.0 / s; // force & energy @@ -123,13 +123,15 @@ void AngleGaussian::compute(int eflag, int vflag) for (int i = 0; i < nterms[type]; i++) { dtheta = theta - theta0[type][i]; prefactor = (alpha[type][i] / (width[type][i] * sqrt(MY_PI2))); - exponent = -2 * dtheta * dtheta / (width[type][i] * width[type][i]); + exponent = -2.0 * dtheta * dtheta / (width[type][i] * width[type][i]); g_i = prefactor * exp(exponent); sum_g_i += g_i; sum_numerator += g_i * dtheta / (width[type][i] * width[type][i]); } - if (sum_g_i < SMALL) sum_g_i = SMALL; + // avoid overflow + if (sum_g_i < sum_numerator * SMALLG) sum_g_i = sum_numerator * SMALLG; + if (eflag) eangle = -(force->boltz * angle_temperature[type]) * log(sum_g_i); // I should check about the sign of this expression @@ -198,14 +200,16 @@ void AngleGaussian::allocate() void AngleGaussian::coeff(int narg, char **arg) { - if (narg < 6) error->all(FLERR, "Incorrect args for angle coefficients"); + if (narg < 6) utils::missing_cmd_args(FLERR, "angle_coeff", error); int ilo, ihi; utils::bounds(FLERR, arg[0], 1, atom->nangletypes, ilo, ihi, error); double angle_temperature_one = utils::numeric(FLERR, arg[1], false, lmp); int n = utils::inumeric(FLERR, arg[2], false, lmp); - if (narg != 3 * n + 3) error->all(FLERR, "Incorrect args for angle coefficients"); + if (n < 1) error->all(FLERR, "Invalid angle style gaussian value for n: {}", n); + + if (narg != 3 * n + 3) utils::missing_cmd_args(FLERR, "angle_coeff", error); if (!allocated) allocate(); @@ -223,7 +227,9 @@ void AngleGaussian::coeff(int narg, char **arg) theta0[i] = new double[n]; for (int j = 0; j < n; j++) { alpha[i][j] = utils::numeric(FLERR, arg[3 + 3 * j], false, lmp); + if (alpha[i][j] <= 0.0) error->all(FLERR, "Invalid value for A_{}: {}", j, alpha[i][j]); width[i][j] = utils::numeric(FLERR, arg[4 + 3 * j], false, lmp); + if (width[i][j] <= 0.0) error->all(FLERR, "Invalid value for w_{}: {}", j, width[i][j]); theta0[i][j] = utils::numeric(FLERR, arg[5 + 3 * j], false, lmp) * MY_PI / 180.0; setflag[i] = 1; } diff --git a/src/EXTRA-MOLECULE/bond_gaussian.cpp b/src/EXTRA-MOLECULE/bond_gaussian.cpp index 655a5e557f..baca0b6e1a 100644 --- a/src/EXTRA-MOLECULE/bond_gaussian.cpp +++ b/src/EXTRA-MOLECULE/bond_gaussian.cpp @@ -27,7 +27,7 @@ using namespace LAMMPS_NS; using namespace MathConst; -#define SMALL 1.0e-10 +static constexpr double SMALL = 2.0e-308; /* ---------------------------------------------------------------------- */ @@ -92,15 +92,16 @@ void BondGaussian::compute(int eflag, int vflag) for (int i = 0; i < nterms[type]; i++) { dr = r - r0[type][i]; prefactor = (alpha[type][i] / (width[type][i] * sqrt(MY_PI2))); - exponent = -2 * dr * dr / (width[type][i] * width[type][i]); + exponent = -2.0 * dr * dr / (width[type][i] * width[type][i]); g_i = prefactor * exp(exponent); sum_g_i += g_i; sum_numerator += g_i * dr / (width[type][i] * width[type][i]); } - // force & energy - if (sum_g_i < SMALL) sum_g_i = SMALL; + // avoid overflow + if (sum_g_i < sum_numerator * SMALL) sum_g_i = sum_numerator * SMALL; + // force & energy if (r > 0.0) fbond = -4.0 * (force->boltz * bond_temperature[type]) * (sum_numerator / sum_g_i) / r; else @@ -153,14 +154,15 @@ void BondGaussian::allocate() void BondGaussian::coeff(int narg, char **arg) { - if (narg < 6) error->all(FLERR, "Incorrect args for bond coefficients"); + if (narg < 6) utils::missing_cmd_args(FLERR, "bond_coeff", error); int ilo, ihi; utils::bounds(FLERR, arg[0], 1, atom->nbondtypes, ilo, ihi, error); double bond_temp_one = utils::numeric(FLERR, arg[1], false, lmp); int n = utils::inumeric(FLERR, arg[2], false, lmp); - if (narg != 3 * n + 3) error->all(FLERR, "Incorrect args for bond coefficients"); + if (n < 1) error->all(FLERR, "Invalid bond style gaussian value for n: {}", n); + if (narg != 3 * n + 3) utils::missing_cmd_args(FLERR, "bond_coeff", error); if (!allocated) allocate(); @@ -176,8 +178,11 @@ void BondGaussian::coeff(int narg, char **arg) r0[i] = new double[n]; for (int j = 0; j < n; j++) { alpha[i][j] = utils::numeric(FLERR, arg[3 + 3 * j], false, lmp); + if (alpha[i][j] <= 0.0) error->all(FLERR, "Invalid value for A_{}: {}", j, alpha[i][j]); width[i][j] = utils::numeric(FLERR, arg[4 + 3 * j], false, lmp); + if (width[i][j] <= 0.0) error->all(FLERR, "Invalid value for w_{}: {}", j, width[i][j]); r0[i][j] = utils::numeric(FLERR, arg[5 + 3 * j], false, lmp); + if (r0[i][j] <= 0.0) error->all(FLERR, "Invalid value for r0_{}: {}", j, r0[i][j]); setflag[i] = 1; } count++; diff --git a/src/EXTRA-MOLECULE/dihedral_nharmonic.cpp b/src/EXTRA-MOLECULE/dihedral_nharmonic.cpp index 8e4d1033fe..206ad4f3ad 100644 --- a/src/EXTRA-MOLECULE/dihedral_nharmonic.cpp +++ b/src/EXTRA-MOLECULE/dihedral_nharmonic.cpp @@ -25,7 +25,6 @@ #include "force.h" #include "memory.h" #include "neighbor.h" -#include "domain.h" #include diff --git a/src/EXTRA-PAIR/pair_nm_cut.cpp b/src/EXTRA-PAIR/pair_nm_cut.cpp index 9a39c091b9..18b5810abc 100644 --- a/src/EXTRA-PAIR/pair_nm_cut.cpp +++ b/src/EXTRA-PAIR/pair_nm_cut.cpp @@ -18,8 +18,6 @@ #include "pair_nm_cut.h" -#include -#include #include "atom.h" #include "comm.h" #include "force.h" @@ -28,6 +26,8 @@ #include "memory.h" #include "error.h" +#include +#include using namespace LAMMPS_NS; using namespace MathConst; diff --git a/src/EXTRA-PAIR/pair_nm_cut_coul_cut.cpp b/src/EXTRA-PAIR/pair_nm_cut_coul_cut.cpp index 569fba970f..adc6d5a058 100644 --- a/src/EXTRA-PAIR/pair_nm_cut_coul_cut.cpp +++ b/src/EXTRA-PAIR/pair_nm_cut_coul_cut.cpp @@ -223,8 +223,7 @@ void PairNMCutCoulCut::settings(int narg, char **arg) void PairNMCutCoulCut::coeff(int narg, char **arg) { - if (narg < 6 || narg > 8) - error->all(FLERR,"Incorrect args for pair coefficients"); + if (narg < 6 || narg > 8) error->all(FLERR,"Incorrect args for pair coefficients"); if (!allocated) allocate(); int ilo,ihi,jlo,jhi; @@ -238,8 +237,8 @@ void PairNMCutCoulCut::coeff(int narg, char **arg) double cut_lj_one = cut_lj_global; double cut_coul_one = cut_coul_global; - if (narg >= 7) cut_coul_one = cut_lj_one = utils::numeric(FLERR,arg[4],false,lmp); - if (narg == 8) cut_coul_one = utils::numeric(FLERR,arg[5],false,lmp); + if (narg >= 7) cut_coul_one = cut_lj_one = utils::numeric(FLERR,arg[6],false,lmp); + if (narg == 8) cut_coul_one = utils::numeric(FLERR,arg[7],false,lmp); int count = 0; for (int i = ilo; i <= ihi; i++) { diff --git a/src/EXTRA-PAIR/pair_nm_cut_coul_long.cpp b/src/EXTRA-PAIR/pair_nm_cut_coul_long.cpp index 464e647227..13171c87dd 100644 --- a/src/EXTRA-PAIR/pair_nm_cut_coul_long.cpp +++ b/src/EXTRA-PAIR/pair_nm_cut_coul_long.cpp @@ -277,7 +277,7 @@ void PairNMCutCoulLong::coeff(int narg, char **arg) double mm_one = utils::numeric(FLERR,arg[5],false,lmp); double cut_lj_one = cut_lj_global; - if (narg == 7) cut_lj_one = utils::numeric(FLERR,arg[4],false,lmp); + if (narg == 7) cut_lj_one = utils::numeric(FLERR,arg[6],false,lmp); int count = 0; for (int i = ilo; i <= ihi; i++) { diff --git a/src/FEP/compute_fep.cpp b/src/FEP/compute_fep.cpp index bb11a64f54..995e2f9f3d 100644 --- a/src/FEP/compute_fep.cpp +++ b/src/FEP/compute_fep.cpp @@ -190,22 +190,34 @@ void ComputeFEP::init() Perturb *pert = &perturb[m]; pert->ivar = input->variable->find(pert->var); - if (pert->ivar < 0) error->all(FLERR, "Variable name for compute fep does not exist"); + if (pert->ivar < 0) + error->all(FLERR, "Variable name {} for compute fep does not exist", pert->var); if (!input->variable->equalstyle(pert->ivar)) - error->all(FLERR, "Variable for compute fep is of invalid style"); + error->all(FLERR, "Variable {} for compute fep is of invalid style", pert->var); if (force->pair == nullptr) error->all(FLERR, "compute fep pair requires pair interactions"); if (pert->which == PAIR) { pairflag = 1; + Pair *pair = nullptr; + if (lmp->suffix_enable) { + if (lmp->suffix) { + auto pstyle = fmt::format("{}/{}", pert->pstyle, lmp->suffix); + pair = force->pair_match(pstyle, 1); + } + if ((pair == nullptr) && lmp->suffix2) { + auto pstyle = fmt::format("{}/{}", pert->pstyle, lmp->suffix2); + pair = force->pair_match(pstyle, 1); + } + } - Pair *pair = force->pair_match(pert->pstyle, 1); + if (pair == nullptr) pair = force->pair_match(pert->pstyle, 1); if (pair == nullptr) - error->all(FLERR, - "compute fep pair style " - "does not exist"); + error->all(FLERR, "compute fep pair style {} does not exist", pert->pstyle); + void *ptr = pair->extract(pert->pparam, pert->pdim); - if (ptr == nullptr) error->all(FLERR, "compute fep pair style param not supported"); + if (ptr == nullptr) + error->all(FLERR, "compute fep pair style param {} not supported", pert->pparam); pert->array = (double **) ptr; diff --git a/src/FEP/compute_fep_ta.cpp b/src/FEP/compute_fep_ta.cpp index 9782835945..786bf53bfa 100644 --- a/src/FEP/compute_fep_ta.cpp +++ b/src/FEP/compute_fep_ta.cpp @@ -30,7 +30,6 @@ #include "kspace.h" #include "memory.h" #include "modify.h" -#include "neighbor.h" #include "pair.h" #include "timer.h" #include "update.h" diff --git a/src/GPU/Install.sh b/src/GPU/Install.sh index 1768ec024f..d28e6260f8 100755 --- a/src/GPU/Install.sh +++ b/src/GPU/Install.sh @@ -176,7 +176,7 @@ if (test $1 = 1) then fi if (test -e ../Makefile.package.settings) then - sed -i -e '/^include.*gpu.*$/d' ../Makefile.package.settings + sed -i -e '/^[ \t]*include.*gpu.*$/d' ../Makefile.package.settings # multiline form needed for BSD sed on Macs sed -i -e '4 i \ include ..\/..\/lib\/gpu\/Makefile.lammps @@ -191,7 +191,7 @@ elif (test $1 = 0) then fi if (test -e ../Makefile.package.settings) then - sed -i -e '/^include.*gpu.*$/d' ../Makefile.package.settings + sed -i -e '/^[ \t]*include.*gpu.*$/d' ../Makefile.package.settings fi fi diff --git a/src/GPU/fix_gpu.cpp b/src/GPU/fix_gpu.cpp index b3d387d845..97f22da0a7 100644 --- a/src/GPU/fix_gpu.cpp +++ b/src/GPU/fix_gpu.cpp @@ -120,8 +120,8 @@ FixGPU::FixGPU(LAMMPS *lmp, int narg, char **arg) : // If ngpu is 0, autoset ngpu to the number of devices per node matching // best device - int ngpu = atoi(arg[3]); - if (ngpu < 0) error->all(FLERR,"Illegal package gpu command"); + int ngpu = utils::inumeric(FLERR, arg[3], false, lmp); + if (ngpu < 0) error->all(FLERR,"Illegal number of GPUs ({}) in package gpu command", ngpu); // Negative value indicate GPU package should find the best device ID int first_gpu_id = -1; diff --git a/src/GRANULAR/compute_contact_atom.cpp b/src/GRANULAR/compute_contact_atom.cpp index 1331901884..310fdb5a41 100644 --- a/src/GRANULAR/compute_contact_atom.cpp +++ b/src/GRANULAR/compute_contact_atom.cpp @@ -25,8 +25,6 @@ #include "neighbor.h" #include "update.h" -#include - using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ diff --git a/src/GRANULAR/pair_gran_hooke_history.cpp b/src/GRANULAR/pair_gran_hooke_history.cpp index 3d200d1ebc..e9506e8a03 100644 --- a/src/GRANULAR/pair_gran_hooke_history.cpp +++ b/src/GRANULAR/pair_gran_hooke_history.cpp @@ -27,7 +27,6 @@ #include "memory.h" #include "modify.h" #include "neigh_list.h" -#include "neigh_request.h" #include "neighbor.h" #include "update.h" diff --git a/src/GRANULAR/pair_granular.cpp b/src/GRANULAR/pair_granular.cpp index 51963ae1ff..946e902dc5 100644 --- a/src/GRANULAR/pair_granular.cpp +++ b/src/GRANULAR/pair_granular.cpp @@ -32,7 +32,6 @@ #include "memory.h" #include "modify.h" #include "neigh_list.h" -#include "neigh_request.h" #include "neighbor.h" #include "update.h" diff --git a/src/H5MD/Install.sh b/src/H5MD/Install.sh index 1070afaa96..ee442d80bc 100755 --- a/src/H5MD/Install.sh +++ b/src/H5MD/Install.sh @@ -45,7 +45,7 @@ if (test $1 = 1) then fi if (test -e ../Makefile.package.settings) then - sed -i -e '/^include.*h5md.*$/d' ../Makefile.package.settings + sed -i -e '/^[ \t]*include.*h5md.*$/d' ../Makefile.package.settings # multiline form needed for BSD sed on Macs sed -i -e '4 i \ include ..\/..\/lib\/h5md\/Makefile.lammps @@ -60,7 +60,7 @@ elif (test $1 = 0) then fi if (test -e ../Makefile.package.settings) then - sed -i -e '/^include.*h5md.*$/d' ../Makefile.package.settings + sed -i -e '/^[ \t]*include.*h5md.*$/d' ../Makefile.package.settings fi fi diff --git a/src/INTEL/electrode_accel_intel.h b/src/INTEL/electrode_accel_intel.h index 38b0fe9661..eba6bc0157 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 e2dff685ad..920cdcb89a 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 8b4f41b694..2bc04a72fc 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 4d4ea6b374..de6d5fa29c 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)); } }; diff --git a/src/INTEL/pppm_electrode_intel.cpp b/src/INTEL/pppm_electrode_intel.cpp index 17ee7c0c34..0927ebcc42 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) + electrolyte_density_fft(nullptr), boundcorr(nullptr) { + if (lmp->citeme) lmp->citeme->add(cite_pppm_electrode); + group_group_enable = 0; electrolyte_density_brick = nullptr; electrolyte_density_fft = nullptr; @@ -83,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() @@ -156,7 +170,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) @@ -272,7 +285,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; } @@ -505,7 +518,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 +532,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 +553,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 +624,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 +632,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 +646,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 +675,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 @@ -1099,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); diff --git a/src/INTEL/pppm_electrode_intel.h b/src/INTEL/pppm_electrode_intel.h index e0e21af43f..8277aa9a82 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; }; diff --git a/src/INTERLAYER/pair_drip.cpp b/src/INTERLAYER/pair_drip.cpp index 48bc2d9016..90773b4034 100644 --- a/src/INTERLAYER/pair_drip.cpp +++ b/src/INTERLAYER/pair_drip.cpp @@ -28,7 +28,6 @@ #include "force.h" #include "memory.h" #include "neigh_list.h" -#include "neigh_request.h" #include "neighbor.h" #include "potential_file_reader.h" diff --git a/src/INTERLAYER/pair_ilp_tmd.cpp b/src/INTERLAYER/pair_ilp_tmd.cpp index 8c9bd3b8a5..c024e23079 100644 --- a/src/INTERLAYER/pair_ilp_tmd.cpp +++ b/src/INTERLAYER/pair_ilp_tmd.cpp @@ -22,15 +22,12 @@ #include "atom.h" #include "citeme.h" -#include "comm.h" #include "error.h" #include "force.h" #include "interlayer_taper.h" #include "memory.h" #include "my_page.h" #include "neigh_list.h" -#include "neigh_request.h" -#include "neighbor.h" #include #include diff --git a/src/INTERLAYER/pair_saip_metal.cpp b/src/INTERLAYER/pair_saip_metal.cpp index 5a4225b0fc..05fbfbf7f4 100644 --- a/src/INTERLAYER/pair_saip_metal.cpp +++ b/src/INTERLAYER/pair_saip_metal.cpp @@ -26,8 +26,6 @@ #include "force.h" #include "interlayer_taper.h" #include "neigh_list.h" -#include "neigh_request.h" -#include "neighbor.h" #include #include diff --git a/src/KIM/Install.sh b/src/KIM/Install.sh index 7ddb9c8227..533f4f997a 100755 --- a/src/KIM/Install.sh +++ b/src/KIM/Install.sh @@ -44,7 +44,7 @@ if (test $1 = 1) then fi if (test -e ../Makefile.package.settings) then - sed -i -e '/^include.*kim.*$/d' ../Makefile.package.settings + sed -i -e '/^[ \t]*include.*kim.*$/d' ../Makefile.package.settings # multiline form needed for BSD sed on Macs sed -i -e '4 i \ include ..\/..\/lib\/kim\/Makefile.lammps @@ -58,7 +58,7 @@ elif (test $1 = 0) then fi if (test -e ../Makefile.package.settings) then - sed -i -e '/^include.*kim.*$/d' ../Makefile.package.settings + sed -i -e '/^[ \t]*include.*kim.*$/d' ../Makefile.package.settings fi fi diff --git a/src/KIM/kim_param.cpp b/src/KIM/kim_param.cpp index 6dfcfc10a9..6473cb2ad0 100644 --- a/src/KIM/kim_param.cpp +++ b/src/KIM/kim_param.cpp @@ -155,11 +155,9 @@ void KimParam::command(int narg, char **arg) std::string kim_param_get_set(arg[0]); - if ((kim_param_get_set != "get") && (kim_param_get_set != "set")) { - std::string msg("Incorrect arguments in 'kim param' command.\n"); - msg += "'kim param get/set' is mandatory"; - error->all(FLERR, msg); - } + if ((kim_param_get_set != "get") && (kim_param_get_set != "set")) + error->all(FLERR, "Incorrect arguments in 'kim param' command.\n" + "'kim param get/set' is mandatory"); int const ifix = modify->find_fix("KIM_MODEL_STORE"); if (ifix >= 0) { @@ -170,8 +168,7 @@ void KimParam::command(int narg, char **arg) fix_store->getptr("simulator_model")); if (simulatorModel) - error->all(FLERR, - "'kim param' can only be used with a KIM Portable Model"); + error->all(FLERR, "'kim param' can only be used with a KIM Portable Model"); } input->write_echo(fmt::format("#=== BEGIN kim param {} ===================" @@ -196,13 +193,10 @@ void KimParam::command(int narg, char **arg) } else error->all(FLERR, "Pair style is defined, but there is " "no match for kim style in lammps"); - } else { - auto msg = fmt::format("Illegal 'kim param {0}' command.\nTo {0} the new " - "parameter values, pair style must be assigned.\n" - "Must use 'kim interactions' or 'pair_style kim' " - "before 'kim param {0}'", kim_param_get_set); - error->all(FLERR, msg); - } + } else + error->all(FLERR, "Illegal 'kim param {0}' command.\nTo {0} the new parameter values, " + "pair style must be assigned.\nMust use 'kim interactions' or 'pair_style kim' " + "before 'kim param {0}'", kim_param_get_set); // Get the number of mutable parameters in the kim model int numberOfParameters(0); @@ -243,12 +237,9 @@ void KimParam::command(int narg, char **arg) if (paramname == str_name_str) break; } - if (param_index >= numberOfParameters) { - auto msg = fmt::format("Wrong argument in 'kim param get' command.\n" - "This Model does not have the requested '{}' " - "parameter", paramname); - error->all(FLERR, msg); - } + if (param_index >= numberOfParameters) + error->all(FLERR, "Wrong argument in 'kim param get' command.\n" + "This Model does not have the requested '{}' parameter", paramname); // Get the index_range for the requested parameter int nlbound(0); @@ -259,12 +250,9 @@ void KimParam::command(int narg, char **arg) // Check to see if the indices range contains // only integer numbers and/or range : - if (argtostr.find_first_not_of("0123456789:") != std::string::npos) { - auto msg = fmt::format("Illegal index_range.\nExpected integer " - "parameter(s) instead of '{}' in " - "index_range", argtostr); - error->all(FLERR, msg); - } + if (argtostr.find_first_not_of("0123456789:") != std::string::npos) + error->all(FLERR, "Illegal index_range.\nExpected integer parameter(s) instead " + "of '{}' in index_range", argtostr); std::string::size_type npos = argtostr.find(':'); if (npos != std::string::npos) { @@ -273,30 +261,20 @@ void KimParam::command(int narg, char **arg) nlbound = atoi(words[0].c_str()); nubound = atoi(words[1].c_str()); - if (nubound < 1 || nubound > extent || - nlbound < 1 || nlbound > nubound) { - auto msg = fmt::format("Illegal index_range '{}-{}' for '{}' " - "parameter with the extent of '{}'", - nlbound, nubound, paramname, extent); - error->all(FLERR, msg); - } + if ((nubound < 1) || (nubound > extent) || (nlbound < 1) || (nlbound > nubound)) + error->all(FLERR, "Illegal index_range '{}-{}' for '{}' parameter with the " + "extent of '{}'",nlbound, nubound, paramname, extent); } else { nlbound = atoi(argtostr.c_str()); - if (nlbound < 1 || nlbound > extent) { - auto msg = fmt::format("Illegal index '{}' for '{}' parameter " - "with the extent of '{}'", nlbound, - paramname, extent); - error->all(FLERR, msg); - } - + if (nlbound < 1 || nlbound > extent) + error->all(FLERR, "Illegal index '{}' for '{}' parameter with the extent of '{}'", + nlbound, paramname, extent); nubound = nlbound; } - } else { - std::string msg("Wrong number of arguments in 'kim param get' "); - msg += "command.\nIndex range after parameter name is mandatory"; - error->all(FLERR, msg); - } + } else + error->all(FLERR, "Wrong number of arguments in 'kim param get' command.\n" + "Index range after parameter name is mandatory"); int const nvars = nubound - nlbound + 1; std::vector varsname; @@ -304,15 +282,11 @@ void KimParam::command(int narg, char **arg) if (i < narg) { // Get the variable/variable_base name varname = std::string(arg[i++]); - if ((varname == "split") || - (varname == "list") || - (varname == "explicit")) - error->all(FLERR, "Illegal variable name in 'kim param get'"); - } else { - std::string msg("Wrong number of arguments in 'kim param get' "); - msg += "command.\nThe LAMMPS variable name is mandatory"; - error->all(FLERR, msg); - } + if ((varname == "split") || (varname == "list") || (varname == "explicit")) + error->all(FLERR, "Illegal variable name '{}' in 'kim param get'", varname); + } else + error->all(FLERR, "Wrong number of arguments in 'kim param get' command.\n" + "The LAMMPS variable name is mandatory"); // indicator flag for list request bool list_requested(false); @@ -337,28 +311,22 @@ void KimParam::command(int narg, char **arg) --i; for (int j = 0; j < nvars; ++j, ++i) { varsname[j] = std::string(arg[i]); - if (varsname[j] == "split" || varsname[j] == "list" || - varsname[j] == "explicit") - error->all(FLERR, "Illegal variable name in 'kim param get'"); + if (varsname[j] == "split" || varsname[j] == "list" || varsname[j] == "explicit") + error->all(FLERR, "Illegal variable name '{}' in 'kim param get'", varsname[j]); } if (i < narg) { formatarg = std::string(arg[i]); if (formatarg == "explicit") ++i; } } else { - auto msg = - fmt::format("Wrong number of arguments in 'kim param get' " - "command.\nThe LAMMPS '{}' variable names or " - "'{} split' is mandatory", nvars, varname); - error->all(FLERR, msg); + error->all(FLERR, "Wrong number of arguments in 'kim param get' command.\n" + "The LAMMPS '{}' variable names or '{} split' is mandatory", + nvars, varname); } - } else { - auto msg = - fmt::format("Wrong number of arguments in 'kim param get' " - "command.\nThe LAMMPS '{}' variable names or " - "'{} split/list' is mandatory", nvars, varname); - error->all(FLERR, msg); - } + } else + error->all(FLERR, "Wrong number of arguments in 'kim param get' command.\n" + "The LAMMPS '{}' variable names or '{} split/list' is mandatory", + nvars, varname); } else { varsname.resize(1); if (i < narg) { diff --git a/src/KIM/pair_kim.cpp b/src/KIM/pair_kim.cpp index 92fc9b68a7..6a5a792797 100644 --- a/src/KIM/pair_kim.cpp +++ b/src/KIM/pair_kim.cpp @@ -483,15 +483,13 @@ void PairKIM::coeff(int narg, char **arg) nlbound = atoi(words[0].c_str()); nubound = atoi(words[1].c_str()); - if (nubound < 1 || nubound > extent || - nlbound < 1 || nlbound > nubound) - error->all(FLERR,"Illegal index_range '{}-{}' for '{}' " - "parameter with the extent of '{}'", + if ((nubound < 1) || (nubound > extent) || (nlbound < 1) || (nlbound > nubound)) + error->all(FLERR,"Illegal index_range '{}-{}' for '{}' parameter with the extent of '{}'", nlbound, nubound, paramname, extent); } else { nlbound = atoi(argtostr.c_str()); - if (nlbound < 1 || nlbound > extent) + if ((nlbound < 1) || (nlbound > extent)) error->all(FLERR,"Illegal index '{}' for '{}' parameter with the extent of '{}'", nlbound, paramname, extent); @@ -1081,8 +1079,7 @@ void PairKIM::set_kim_model_has_flags() KIM_ComputeArguments_GetArgumentSupportStatus( pargs, computeArgumentName, &supportStatus); - if (KIM_ComputeArgumentName_Equal(computeArgumentName, - KIM_COMPUTE_ARGUMENT_NAME_partialEnergy)) + if (KIM_ComputeArgumentName_Equal(computeArgumentName, KIM_COMPUTE_ARGUMENT_NAME_partialEnergy)) kim_model_support_for_energy = supportStatus; else if (KIM_ComputeArgumentName_Equal( computeArgumentName, KIM_COMPUTE_ARGUMENT_NAME_partialForces)) @@ -1095,17 +1092,14 @@ void PairKIM::set_kim_model_has_flags() computeArgumentName, KIM_COMPUTE_ARGUMENT_NAME_partialParticleVirial)) kim_model_support_for_particleVirial = supportStatus; - else if (KIM_SupportStatus_Equal(supportStatus, - KIM_SUPPORT_STATUS_required)) { - std::string msg("KIM Model requires unsupported compute argument: "); - msg += KIM_ComputeArgumentName_ToString(computeArgumentName); - error->all(FLERR,msg); + else if (KIM_SupportStatus_Equal(supportStatus, KIM_SUPPORT_STATUS_required)) { + error->all(FLERR, "KIM Model requires unsupported compute argument: {}", + KIM_ComputeArgumentName_ToString(computeArgumentName)); } } if (comm->me == 0) { - if (KIM_SupportStatus_Equal(kim_model_support_for_energy, - KIM_SUPPORT_STATUS_notSupported)) + if (KIM_SupportStatus_Equal(kim_model_support_for_energy, KIM_SUPPORT_STATUS_notSupported)) error->warning(FLERR,"KIM Model does not provide 'partialEnergy'; Potential energy will be zero"); if (KIM_SupportStatus_Equal(kim_model_support_for_forces, diff --git a/src/KOKKOS/Install.sh b/src/KOKKOS/Install.sh index 53d2093976..d53e9273d5 100755 --- a/src/KOKKOS/Install.sh +++ b/src/KOKKOS/Install.sh @@ -64,8 +64,8 @@ action atom_vec_bond_kokkos.cpp atom_vec_bond.cpp action atom_vec_bond_kokkos.h atom_vec_bond.h action atom_vec_charge_kokkos.cpp action atom_vec_charge_kokkos.h -action atom_vec_spin_kokkos.cpp -action atom_vec_spin_kokkos.h +action atom_vec_spin_kokkos.cpp atom_vec_spin.cpp +action atom_vec_spin_kokkos.h atom_vec_spin.h action atom_vec_dpd_kokkos.cpp atom_vec_dpd.cpp action atom_vec_dpd_kokkos.h atom_vec_dpd.h action atom_vec_full_kokkos.cpp atom_vec_full.cpp @@ -378,7 +378,7 @@ if (test $1 = 1) then if (test -e ../Makefile.package.settings) then sed -i -e '/CXX\ =\ \$(CC)/d' ../Makefile.package.settings - sed -i -e '/^include.*kokkos.*$/d' ../Makefile.package.settings + sed -i -e '/^[ \t]*include.*kokkos.*$/d' ../Makefile.package.settings # multiline form needed for BSD sed on Macs sed -i -e '4 i \ CXX = $(CC) @@ -405,7 +405,7 @@ elif (test $1 = 0) then if (test -e ../Makefile.package.settings) then sed -i -e '/CXX\ =\ \$(CC)/d' ../Makefile.package.settings - sed -i -e '/^include.*kokkos.*$/d' ../Makefile.package.settings + sed -i -e '/^[ \t]*include.*kokkos.*$/d' ../Makefile.package.settings fi fi diff --git a/src/KOKKOS/atom_kokkos.cpp b/src/KOKKOS/atom_kokkos.cpp index 1984d631c3..2de65e24fb 100644 --- a/src/KOKKOS/atom_kokkos.cpp +++ b/src/KOKKOS/atom_kokkos.cpp @@ -104,23 +104,23 @@ AtomKokkos::~AtomKokkos() void AtomKokkos::sync(const ExecutionSpace space, unsigned int mask) { - if (space == Device && lmp->kokkos->auto_sync) ((AtomVecKokkos *) avec)->modified(Host, mask); + if (space == Device && lmp->kokkos->auto_sync) avecKK->modified(Host, mask); - ((AtomVecKokkos *) avec)->sync(space, mask); + avecKK->sync(space, mask); } /* ---------------------------------------------------------------------- */ void AtomKokkos::modified(const ExecutionSpace space, unsigned int mask) { - ((AtomVecKokkos *) avec)->modified(space, mask); + avecKK->modified(space, mask); - if (space == Device && lmp->kokkos->auto_sync) ((AtomVecKokkos *) avec)->sync(Host, mask); + if (space == Device && lmp->kokkos->auto_sync) avecKK->sync(Host, mask); } void AtomKokkos::sync_overlapping_device(const ExecutionSpace space, unsigned int mask) { - ((AtomVecKokkos *) avec)->sync_overlapping_device(space, mask); + avecKK->sync_overlapping_device(space, mask); } /* ---------------------------------------------------------------------- */ @@ -380,5 +380,8 @@ AtomVec *AtomKokkos::new_avec(const std::string &style, int trysuffix, int &sfla { AtomVec *avec = Atom::new_avec(style, trysuffix, sflag); if (!avec->kokkosable) error->all(FLERR, "KOKKOS package requires a kokkos enabled atom_style"); + + avecKK = dynamic_cast(avec); + return avec; } diff --git a/src/KOKKOS/atom_kokkos.h b/src/KOKKOS/atom_kokkos.h index 8754c9bb51..08bfaf20cd 100644 --- a/src/KOKKOS/atom_kokkos.h +++ b/src/KOKKOS/atom_kokkos.h @@ -78,6 +78,8 @@ class AtomKokkos : public Atom { DAT::tdual_int_scalar k_error_flag; dual_hash_type k_map_hash; + class AtomVecKokkos* avecKK; + // map lookup function inlined for efficiency // return -1 if no map defined diff --git a/src/KOKKOS/atom_vec_angle_kokkos.cpp b/src/KOKKOS/atom_vec_angle_kokkos.cpp index ef020f8f75..23406415d0 100644 --- a/src/KOKKOS/atom_vec_angle_kokkos.cpp +++ b/src/KOKKOS/atom_vec_angle_kokkos.cpp @@ -27,27 +27,10 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -AtomVecAngleKokkos::AtomVecAngleKokkos(LAMMPS *lmp) : AtomVecKokkos(lmp) +AtomVecAngleKokkos::AtomVecAngleKokkos(LAMMPS *lmp) : AtomVec(lmp), +AtomVecKokkos(lmp), AtomVecAngle(lmp) { - molecular = Atom::MOLECULAR; - bonds_allow = angles_allow = 1; - mass_type = PER_TYPE; - comm_x_only = comm_f_only = 1; - size_forward = 3; - size_reverse = 3; - size_border = 7; - size_velocity = 3; - size_data_atom = 6; - size_data_vel = 4; - xcol_data = 4; - - atom->molecule_flag = 1; - - k_count = DAT::tdual_int_1d("atom::k_count",1); - atomKK = (AtomKokkos *) atom; - commKK = (CommKokkos *) comm; - buffer = nullptr; } /* ---------------------------------------------------------------------- @@ -172,52 +155,6 @@ void AtomVecAngleKokkos::grow_pointers() h_angle_atom3 = atomKK->k_angle_atom3.h_view; } -/* ---------------------------------------------------------------------- - copy atom I info to atom J -------------------------------------------------------------------------- */ - -void AtomVecAngleKokkos::copy(int i, int j, int delflag) -{ - int k; - - h_tag[j] = h_tag[i]; - h_type[j] = h_type[i]; - mask[j] = mask[i]; - h_image[j] = h_image[i]; - h_x(j,0) = h_x(i,0); - h_x(j,1) = h_x(i,1); - h_x(j,2) = h_x(i,2); - h_v(j,0) = h_v(i,0); - h_v(j,1) = h_v(i,1); - h_v(j,2) = h_v(i,2); - - h_molecule(j) = h_molecule(i); - - h_num_bond(j) = h_num_bond(i); - for (k = 0; k < h_num_bond(j); k++) { - h_bond_type(j,k) = h_bond_type(i,k); - h_bond_atom(j,k) = h_bond_atom(i,k); - } - - h_nspecial(j,0) = h_nspecial(i,0); - h_nspecial(j,1) = h_nspecial(i,1); - h_nspecial(j,2) = h_nspecial(i,2); - for (k = 0; k < h_nspecial(j,2); k++) - h_special(j,k) = h_special(i,k); - - h_num_angle(j) = h_num_angle(i); - for (k = 0; k < h_num_angle(j); k++) { - h_angle_type(j,k) = h_angle_type(i,k); - h_angle_atom1(j,k) = h_angle_atom1(i,k); - h_angle_atom2(j,k) = h_angle_atom2(i,k); - h_angle_atom3(j,k) = h_angle_atom3(i,k); - } - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->copy_arrays(i,j,delflag); -} - /* ---------------------------------------------------------------------- */ template @@ -508,171 +445,6 @@ void AtomVecAngleKokkos::unpack_comm_kokkos(const int &n, const int &first, /* ---------------------------------------------------------------------- */ -int AtomVecAngleKokkos::pack_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - } - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecAngleKokkos::pack_comm_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - if (mask[i] & deform_groupbit) { - buf[m++] = h_v(j,0) + dvx; - buf[m++] = h_v(j,1) + dvy; - buf[m++] = h_v(j,2) + dvz; - } else { - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - } - } - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecAngleKokkos::unpack_comm(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecAngleKokkos::unpack_comm_vel(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - h_v(i,0) = buf[m++]; - h_v(i,1) = buf[m++]; - h_v(i,2) = buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecAngleKokkos::pack_reverse(int n, int first, double *buf) -{ - if (n > 0) - atomKK->sync(Host,F_MASK); - - int m = 0; - const int last = first + n; - for (int i = first; i < last; i++) { - buf[m++] = h_f(i,0); - buf[m++] = h_f(i,1); - buf[m++] = h_f(i,2); - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecAngleKokkos::unpack_reverse(int n, int *list, double *buf) -{ - if (n > 0) - atomKK->modified(Host,F_MASK); - - int m = 0; - for (int i = 0; i < n; i++) { - const int j = list[i]; - h_f(j,0) += buf[m++]; - h_f(j,1) += buf[m++]; - h_f(j,2) += buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - template struct AtomVecAngleKokkos_PackBorder { typedef DeviceType device_type; @@ -774,149 +546,6 @@ int AtomVecAngleKokkos::pack_border_kokkos(int n, DAT::tdual_int_2d k_sendlist, /* ---------------------------------------------------------------------- */ -int AtomVecAngleKokkos::pack_border(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = ubuf(h_molecule(j)).d; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = ubuf(h_molecule(j)).d; - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecAngleKokkos::pack_border_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = ubuf(h_molecule(j)).d; - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = ubuf(h_molecule(j)).d; - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = ubuf(h_molecule(j)).d; - if (mask[i] & deform_groupbit) { - buf[m++] = h_v(j,0) + dvx; - buf[m++] = h_v(j,1) + dvy; - buf[m++] = h_v(j,2) + dvz; - } else { - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - } - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecAngleKokkos::pack_border_hybrid(int n, int *list, double *buf) -{ - int i,j,m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_molecule(j); - } - return m; -} - -/* ---------------------------------------------------------------------- */ - template struct AtomVecAngleKokkos_UnpackBorder { typedef DeviceType device_type; @@ -977,78 +606,6 @@ void AtomVecAngleKokkos::unpack_border_kokkos(const int &n, const int &first, /* ---------------------------------------------------------------------- */ -void AtomVecAngleKokkos::unpack_border(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - while (last > nmax) grow(0); - - for (i = first; i < last; i++) { - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - h_tag(i) = (tagint) ubuf(buf[m++]).i; - h_type(i) = (int) ubuf(buf[m++]).i; - h_mask(i) = (int) ubuf(buf[m++]).i; - h_molecule(i) = (tagint) ubuf(buf[m++]).i; - } - - atomKK->modified(Host,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|MOLECULE_MASK); - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecAngleKokkos::unpack_border_vel(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - while (last > nmax) grow(0); - - for (i = first; i < last; i++) { - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - h_tag(i) = (tagint) ubuf(buf[m++]).i; - h_type(i) = (int) ubuf(buf[m++]).i; - h_mask(i) = (int) ubuf(buf[m++]).i; - h_molecule(i) = (tagint) ubuf(buf[m++]).i; - h_v(i,0) = buf[m++]; - h_v(i,1) = buf[m++]; - h_v(i,2) = buf[m++]; - } - - atomKK->modified(Host,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|MOLECULE_MASK|V_MASK); - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecAngleKokkos::unpack_border_hybrid(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) - h_molecule(i) = (tagint) ubuf(buf[m++]).i; - return m; -} - -/* ---------------------------------------------------------------------- */ - template struct AtomVecAngleKokkos_PackExchangeFunctor { typedef DeviceType device_type; @@ -1245,50 +802,6 @@ int AtomVecAngleKokkos::pack_exchange_kokkos(const int &nsend,DAT::tdual_xfloat_ /* ---------------------------------------------------------------------- */ -int AtomVecAngleKokkos::pack_exchange(int i, double *buf) -{ - int k; - int m = 1; - buf[m++] = h_x(i,0); - buf[m++] = h_x(i,1); - buf[m++] = h_x(i,2); - buf[m++] = h_v(i,0); - buf[m++] = h_v(i,1); - buf[m++] = h_v(i,2); - buf[m++] = ubuf(h_tag(i)).d; - buf[m++] = ubuf(h_type(i)).d; - buf[m++] = ubuf(h_mask(i)).d; - buf[m++] = ubuf(h_image(i)).d; - buf[m++] = ubuf(h_molecule(i)).d; - - buf[m++] = ubuf(h_num_bond(i)).d; - for (k = 0; k < h_num_bond(i); k++) { - buf[m++] = ubuf(h_bond_type(i,k)).d; - buf[m++] = ubuf(h_bond_atom(i,k)).d; - } - buf[m++] = ubuf(h_num_angle(i)).d; - for (k = 0; k < h_num_angle(i); k++) { - buf[m++] = ubuf(h_angle_type(i,k)).d; - buf[m++] = ubuf(h_angle_atom1(i,k)).d; - buf[m++] = ubuf(h_angle_atom2(i,k)).d; - buf[m++] = ubuf(h_angle_atom3(i,k)).d; - } - buf[m++] = ubuf(h_nspecial(i,0)).d; - buf[m++] = ubuf(h_nspecial(i,1)).d; - buf[m++] = ubuf(h_nspecial(i,2)).d; - for (k = 0; k < h_nspecial(i,2); k++) - buf[m++] = ubuf(h_special(i,k)).d; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]->pack_exchange(i,&buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- */ - template struct AtomVecAngleKokkos_UnpackExchangeFunctor { typedef DeviceType device_type; @@ -1416,361 +929,6 @@ int AtomVecAngleKokkos::unpack_exchange_kokkos(DAT::tdual_xfloat_2d &k_buf,int n /* ---------------------------------------------------------------------- */ -int AtomVecAngleKokkos::unpack_exchange(double *buf) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - atomKK->modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK | MOLECULE_MASK | BOND_MASK | - ANGLE_MASK | SPECIAL_MASK); - - int k; - int m = 1; - h_x(nlocal,0) = buf[m++]; - h_x(nlocal,1) = buf[m++]; - h_x(nlocal,2) = buf[m++]; - h_v(nlocal,0) = buf[m++]; - h_v(nlocal,1) = buf[m++]; - h_v(nlocal,2) = buf[m++]; - h_tag(nlocal) = (tagint) ubuf(buf[m++]).i; - h_type(nlocal) = (int) ubuf(buf[m++]).i; - h_mask(nlocal) = (int) ubuf(buf[m++]).i; - h_image(nlocal) = (imageint) ubuf(buf[m++]).i; - h_molecule(nlocal) = (tagint) ubuf(buf[m++]).i; - - h_num_bond(nlocal) = (int) ubuf(buf[m++]).i; - for (k = 0; k < h_num_bond(nlocal); k++) { - h_bond_type(nlocal,k) = (int) ubuf(buf[m++]).i; - h_bond_atom(nlocal,k) = (tagint) ubuf(buf[m++]).i; - } - h_num_angle(nlocal) = (int) ubuf(buf[m++]).i; - for (k = 0; k < h_num_angle(nlocal); k++) { - h_angle_type(nlocal,k) = (int) ubuf(buf[m++]).i; - h_angle_atom1(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_angle_atom2(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_angle_atom3(nlocal,k) = (tagint) ubuf(buf[m++]).i; - } - h_nspecial(nlocal,0) = (int) ubuf(buf[m++]).i; - h_nspecial(nlocal,1) = (int) ubuf(buf[m++]).i; - h_nspecial(nlocal,2) = (int) ubuf(buf[m++]).i; - for (k = 0; k < h_nspecial(nlocal,2); k++) - h_special(nlocal,k) = (tagint) ubuf(buf[m++]).i; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]-> - unpack_exchange(nlocal,&buf[m]); - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - size of restart data for all atoms owned by this proc - include extra data stored by fixes -------------------------------------------------------------------------- */ - -int AtomVecAngleKokkos::size_restart() -{ - int i; - - int nlocal = atom->nlocal; - int n = 0; - for (i = 0; i < nlocal; i++) - n += 14 + 2*h_num_bond(i) + 4*h_num_angle(i); - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - for (i = 0; i < nlocal; i++) - n += modify->fix[atom->extra_restart[iextra]]->size_restart(i); - - return n; -} - -/* ---------------------------------------------------------------------- - pack atom I's data for restart file including extra quantities - xyz must be 1st 3 values, so that read_restart can test on them - molecular types may be negative, but write as positive -------------------------------------------------------------------------- */ - -int AtomVecAngleKokkos::pack_restart(int i, double *buf) -{ - atomKK->sync(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK | MOLECULE_MASK | BOND_MASK | - ANGLE_MASK | SPECIAL_MASK); - - int m = 1; - buf[m++] = h_x(i,0); - buf[m++] = h_x(i,1); - buf[m++] = h_x(i,2); - buf[m++] = ubuf(h_tag(i)).d; - buf[m++] = ubuf(h_type(i)).d; - buf[m++] = ubuf(h_mask(i)).d; - buf[m++] = ubuf(h_image(i)).d; - buf[m++] = h_v(i,0); - buf[m++] = h_v(i,1); - buf[m++] = h_v(i,2); - - buf[m++] = ubuf(h_molecule(i)).d; - - buf[m++] = ubuf(h_num_bond(i)).d; - for (int k = 0; k < h_num_bond(i); k++) { - buf[m++] = ubuf(MAX(h_bond_type(i,k),-h_bond_type(i,k))).d; - buf[m++] = ubuf(h_bond_atom(i,k)).d; - } - - buf[m++] = ubuf(h_num_angle(i)).d; - for (int k = 0; k < h_num_angle(i); k++) { - buf[m++] = ubuf(MAX(h_angle_type(i,k),-h_angle_type(i,k))).d; - buf[m++] = ubuf(h_angle_atom1(i,k)).d; - buf[m++] = ubuf(h_angle_atom2(i,k)).d; - buf[m++] = ubuf(h_angle_atom3(i,k)).d; - } - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - m += modify->fix[atom->extra_restart[iextra]]->pack_restart(i,&buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- - unpack data for one atom from restart file including extra quantities -------------------------------------------------------------------------- */ - -int AtomVecAngleKokkos::unpack_restart(double *buf) -{ - int k; - - int nlocal = atom->nlocal; - if (nlocal == nmax) { - grow(0); - if (atom->nextra_store) - memory->grow(atom->extra,nmax,atom->nextra_store,"atom:extra"); - } - atomKK->modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK | MOLECULE_MASK | BOND_MASK | - ANGLE_MASK | SPECIAL_MASK); - - int m = 1; - h_x(nlocal,0) = buf[m++]; - h_x(nlocal,1) = buf[m++]; - h_x(nlocal,2) = buf[m++]; - h_tag(nlocal) = (tagint) ubuf(buf[m++]).i; - h_type(nlocal) = (int) ubuf(buf[m++]).i; - h_mask(nlocal) = (int) ubuf(buf[m++]).i; - h_image(nlocal) = (imageint) ubuf(buf[m++]).i; - h_v(nlocal,0) = buf[m++]; - h_v(nlocal,1) = buf[m++]; - h_v(nlocal,2) = buf[m++]; - - h_molecule(nlocal) = (tagint) ubuf(buf[m++]).i; - - h_num_bond(nlocal) = (int) ubuf(buf[m++]).i; - for (k = 0; k < h_num_bond(nlocal); k++) { - h_bond_type(nlocal,k) = (int) ubuf(buf[m++]).i; - h_bond_atom(nlocal,k) = (tagint) ubuf(buf[m++]).i; - } - - h_num_angle(nlocal) = (int) ubuf(buf[m++]).i; - for (k = 0; k < h_num_angle(nlocal); k++) { - h_angle_type(nlocal,k) = (int) ubuf(buf[m++]).i; - h_angle_atom1(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_angle_atom2(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_angle_atom3(nlocal,k) = (tagint) ubuf(buf[m++]).i; - } - - h_nspecial(nlocal,0) = h_nspecial(nlocal,1) = h_nspecial(nlocal,2) = 0; - - double **extra = atom->extra; - if (atom->nextra_store) { - int size = static_cast (buf[0]) - m; - for (int i = 0; i < size; i++) extra[nlocal][i] = buf[m++]; - } - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - create one atom of itype at coord - set other values to defaults -------------------------------------------------------------------------- */ - -void AtomVecAngleKokkos::create_atom(int itype, double *coord) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) { - atomKK->modified(Host,ALL_MASK); - grow(0); - } - atomKK->modified(Host,ALL_MASK); - - tag[nlocal] = 0; - type[nlocal] = itype; - h_x(nlocal,0) = coord[0]; - h_x(nlocal,1) = coord[1]; - h_x(nlocal,2) = coord[2]; - h_mask(nlocal) = 1; - h_image(nlocal) = ((imageint) IMGMAX << IMG2BITS) | - ((imageint) IMGMAX << IMGBITS) | IMGMAX; - h_v(nlocal,0) = 0.0; - h_v(nlocal,1) = 0.0; - h_v(nlocal,2) = 0.0; - - h_molecule(nlocal) = 0; - h_num_bond(nlocal) = 0; - h_num_angle(nlocal) = 0; - h_nspecial(nlocal,0) = h_nspecial(nlocal,1) = h_nspecial(nlocal,2) = 0; - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack one line from Atoms section of data file - initialize other atom quantities -------------------------------------------------------------------------- */ - -void AtomVecAngleKokkos::data_atom(double *coord, imageint imagetmp, - const std::vector &values, std::string &extract) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - atomKK->modified(Host,ALL_MASK); - - h_tag(nlocal) = utils::inumeric(FLERR,values[0],true,lmp); - h_molecule(nlocal) = utils::inumeric(FLERR,values[1],true,lmp); - h_type(nlocal) = utils::inumeric(FLERR,values[2],true,lmp); - extract = values[2]; - if (h_type(nlocal) <= 0 || h_type(nlocal) > atom->ntypes) - error->one(FLERR,"Invalid atom type in Atoms section of data file"); - - h_x(nlocal,0) = coord[0]; - h_x(nlocal,1) = coord[1]; - h_x(nlocal,2) = coord[2]; - - h_image(nlocal) = imagetmp; - - h_mask(nlocal) = 1; - h_v(nlocal,0) = 0.0; - h_v(nlocal,1) = 0.0; - h_v(nlocal,2) = 0.0; - h_num_bond(nlocal) = 0; - h_num_angle(nlocal) = 0; - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack hybrid quantities from one line in Atoms section of data file - initialize other atom quantities for this sub-style -------------------------------------------------------------------------- */ - -int AtomVecAngleKokkos::data_atom_hybrid(int nlocal, const std::vector &values, - int offset) -{ - h_molecule(nlocal) = utils::inumeric(FLERR,values[offset],true,lmp); - h_num_bond(nlocal) = 0; - h_num_angle(nlocal) = 0; - return 1; -} - -/* ---------------------------------------------------------------------- - pack atom info for data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecAngleKokkos::pack_data(double **buf) -{ - int nlocal = atom->nlocal; - for (int i = 0; i < nlocal; i++) { - buf[i][0] = h_tag(i); - buf[i][1] = h_molecule(i); - buf[i][2] = h_type(i); - buf[i][3] = h_x(i,0); - buf[i][4] = h_x(i,1); - buf[i][5] = h_x(i,2); - buf[i][6] = (h_image[i] & IMGMASK) - IMGMAX; - buf[i][7] = (h_image[i] >> IMGBITS & IMGMASK) - IMGMAX; - buf[i][8] = (h_image[i] >> IMG2BITS) - IMGMAX; - } -} - -/* ---------------------------------------------------------------------- - pack hybrid atom info for data file -------------------------------------------------------------------------- */ - -int AtomVecAngleKokkos::pack_data_hybrid(int i, double *buf) -{ - buf[0] = h_molecule(i); - return 1; -} - -/* ---------------------------------------------------------------------- - write atom info to data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecAngleKokkos::write_data(FILE *fp, int n, double **buf) -{ - for (int i = 0; i < n; i++) - fprintf(fp,"%d %d %d %-1.16e %-1.16e %-1.16e %d %d %d\n", - (int) buf[i][0],(int) buf[i][1], (int) buf[i][2], - buf[i][3],buf[i][4],buf[i][5], - (int) buf[i][6],(int) buf[i][7],(int) buf[i][8]); -} - -/* ---------------------------------------------------------------------- - write hybrid atom info to data file -------------------------------------------------------------------------- */ - -int AtomVecAngleKokkos::write_data_hybrid(FILE *fp, double *buf) -{ - fprintf(fp," " TAGINT_FORMAT, (tagint) (buf[0])); - return 1; -} - -/* ---------------------------------------------------------------------- - return # of bytes of allocated memory -------------------------------------------------------------------------- */ - -double AtomVecAngleKokkos::memory_usage() -{ - double bytes = 0; - - if (atom->memcheck("tag")) bytes += memory->usage(tag,nmax); - if (atom->memcheck("type")) bytes += memory->usage(type,nmax); - if (atom->memcheck("mask")) bytes += memory->usage(mask,nmax); - if (atom->memcheck("image")) bytes += memory->usage(image,nmax); - if (atom->memcheck("x")) bytes += memory->usage(x,nmax,3); - if (atom->memcheck("v")) bytes += memory->usage(v,nmax,3); - if (atom->memcheck("f")) bytes += memory->usage(f,nmax*commKK->nthreads,3); - - if (atom->memcheck("molecule")) bytes += memory->usage(molecule,nmax); - if (atom->memcheck("nspecial")) bytes += memory->usage(nspecial,nmax,3); - if (atom->memcheck("special")) - bytes += memory->usage(special,nmax,atom->maxspecial); - - if (atom->memcheck("num_bond")) bytes += memory->usage(num_bond,nmax); - if (atom->memcheck("bond_type")) - bytes += memory->usage(bond_type,nmax,atom->bond_per_atom); - if (atom->memcheck("bond_atom")) - bytes += memory->usage(bond_atom,nmax,atom->bond_per_atom); - - if (atom->memcheck("num_angle")) bytes += memory->usage(num_angle,nmax); - if (atom->memcheck("angle_type")) - bytes += memory->usage(angle_type,nmax,atom->angle_per_atom); - if (atom->memcheck("angle_atom1")) - bytes += memory->usage(angle_atom1,nmax,atom->angle_per_atom); - if (atom->memcheck("angle_atom2")) - bytes += memory->usage(angle_atom2,nmax,atom->angle_per_atom); - if (atom->memcheck("angle_atom3")) - bytes += memory->usage(angle_atom3,nmax,atom->angle_per_atom); - - return bytes; -} - -/* ---------------------------------------------------------------------- */ - void AtomVecAngleKokkos::sync(ExecutionSpace space, unsigned int mask) { if (space == Device) { @@ -1826,6 +984,8 @@ void AtomVecAngleKokkos::sync(ExecutionSpace space, unsigned int mask) } } +/* ---------------------------------------------------------------------- */ + void AtomVecAngleKokkos::sync_overlapping_device(ExecutionSpace space, unsigned int mask) { if (space == Device) { @@ -1973,4 +1133,3 @@ void AtomVecAngleKokkos::modified(ExecutionSpace space, unsigned int mask) } } } - diff --git a/src/KOKKOS/atom_vec_angle_kokkos.h b/src/KOKKOS/atom_vec_angle_kokkos.h index 82b2c3f967..cb1331aa04 100644 --- a/src/KOKKOS/atom_vec_angle_kokkos.h +++ b/src/KOKKOS/atom_vec_angle_kokkos.h @@ -24,41 +24,15 @@ AtomStyle(angle/kk/host,AtomVecAngleKokkos); #define LMP_ATOM_VEC_ANGLE_KOKKOS_H #include "atom_vec_kokkos.h" +#include "atom_vec_angle.h" namespace LAMMPS_NS { -class AtomVecAngleKokkos : public AtomVecKokkos { +class AtomVecAngleKokkos : public AtomVecKokkos, public AtomVecAngle { public: AtomVecAngleKokkos(class LAMMPS *); void grow(int) override; - void copy(int, int, int) override; - int pack_comm(int, int *, double *, int, int *) override; - int pack_comm_vel(int, int *, double *, int, int *) override; - void unpack_comm(int, int, double *) override; - void unpack_comm_vel(int, int, double *) override; - int pack_reverse(int, int, double *) override; - void unpack_reverse(int, int *, double *) override; - int pack_border(int, int *, double *, int, int *) override; - int pack_border_vel(int, int *, double *, int, int *) override; - int pack_border_hybrid(int, int *, double *) override; - void unpack_border(int, int, double *) override; - void unpack_border_vel(int, int, double *) override; - int unpack_border_hybrid(int, int, double *) override; - int pack_exchange(int, double *) override; - int unpack_exchange(double *) override; - int size_restart() override; - int pack_restart(int, double *) override; - int unpack_restart(double *) override; - void create_atom(int, double *) override; - void data_atom(double *, imageint, const std::vector &, std::string &) override; - int data_atom_hybrid(int, const std::vector &, int) override; - void pack_data(double **) override; - int pack_data_hybrid(int, double *) override; - void write_data(FILE *, int, double **) override; - int write_data_hybrid(FILE *, double *) override; - double memory_usage() override; - void grow_pointers() override; int pack_comm_kokkos(const int &n, const DAT::tdual_int_2d &k_sendlist, const int & iswap, @@ -89,21 +63,9 @@ class AtomVecAngleKokkos : public AtomVecKokkos { void sync_overlapping_device(ExecutionSpace space, unsigned int mask) override; protected: - - tagint *tag; - int *type,*mask; - imageint *image; - double **x,**v,**f; - tagint *molecule; - int **nspecial; tagint **special; - int *num_bond; - int **bond_type; tagint **bond_atom; - - int *num_angle; - int **angle_type; tagint **angle_atom1,**angle_atom2,**angle_atom3; DAT::t_tagint_1d d_tag; @@ -142,13 +104,9 @@ class AtomVecAngleKokkos : public AtomVecKokkos { HAT::t_int_1d h_num_angle; HAT::t_int_2d h_angle_type; HAT::t_tagint_2d h_angle_atom1,h_angle_atom2,h_angle_atom3; - - DAT::tdual_int_1d k_count; - }; -} +} // namespace LAMMPS_NS #endif #endif - diff --git a/src/KOKKOS/atom_vec_atomic_kokkos.cpp b/src/KOKKOS/atom_vec_atomic_kokkos.cpp index ace5878eb6..632383154a 100644 --- a/src/KOKKOS/atom_vec_atomic_kokkos.cpp +++ b/src/KOKKOS/atom_vec_atomic_kokkos.cpp @@ -27,23 +27,10 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -AtomVecAtomicKokkos::AtomVecAtomicKokkos(LAMMPS *lmp) : AtomVecKokkos(lmp) +AtomVecAtomicKokkos::AtomVecAtomicKokkos(LAMMPS *lmp) : AtomVec(lmp), +AtomVecKokkos(lmp), AtomVecAtomic(lmp) { - molecular = Atom::ATOMIC; - mass_type = PER_TYPE; - comm_x_only = comm_f_only = 1; - size_forward = 3; - size_reverse = 3; - size_border = 6; - size_velocity = 3; - size_data_atom = 5; - size_data_vel = 4; - xcol_data = 3; - - k_count = DAT::tdual_int_1d("atom::k_count",1); - atomKK = (AtomKokkos *) atom; - commKK = (CommKokkos *) comm; } /* ---------------------------------------------------------------------- @@ -113,28 +100,6 @@ void AtomVecAtomicKokkos::grow_pointers() h_f = atomKK->k_f.h_view; } -/* ---------------------------------------------------------------------- - copy atom I info to atom J -------------------------------------------------------------------------- */ - -void AtomVecAtomicKokkos::copy(int i, int j, int delflag) -{ - h_tag[j] = h_tag[i]; - h_type[j] = h_type[i]; - mask[j] = mask[i]; - h_image[j] = h_image[i]; - h_x(j,0) = h_x(i,0); - h_x(j,1) = h_x(i,1); - h_x(j,2) = h_x(i,2); - h_v(j,0) = h_v(i,0); - h_v(j,1) = h_v(i,1); - h_v(j,2) = h_v(i,2); - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->copy_arrays(i,j,delflag); -} - /* ---------------------------------------------------------------------- */ template @@ -232,130 +197,6 @@ int AtomVecAtomicKokkos::pack_border_kokkos(int n, DAT::tdual_int_2d k_sendlist, /* ---------------------------------------------------------------------- */ -int AtomVecAtomicKokkos::pack_border(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecAtomicKokkos::pack_border_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - if (mask[i] & deform_groupbit) { - buf[m++] = h_v(j,0) + dvx; - buf[m++] = h_v(j,1) + dvy; - buf[m++] = h_v(j,2) + dvz; - } else { - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - } - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - template struct AtomVecAtomicKokkos_UnpackBorder { typedef DeviceType device_type; @@ -408,63 +249,6 @@ void AtomVecAtomicKokkos::unpack_border_kokkos(const int &n, const int &first, /* ---------------------------------------------------------------------- */ -void AtomVecAtomicKokkos::unpack_border(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - while (last > nmax) grow(0); - - for (i = first; i < last; i++) { - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - h_tag(i) = (tagint) ubuf(buf[m++]).i; - h_type(i) = (int) ubuf(buf[m++]).i; - h_mask(i) = (int) ubuf(buf[m++]).i; - } - - atomKK->modified(Host,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK); - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecAtomicKokkos::unpack_border_vel(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - while (last > nmax) grow(0); - - for (i = first; i < last; i++) { - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - h_tag(i) = (tagint) ubuf(buf[m++]).i; - h_type(i) = (int) ubuf(buf[m++]).i; - h_mask(i) = (int) ubuf(buf[m++]).i; - h_v(i,0) = buf[m++]; - h_v(i,1) = buf[m++]; - h_v(i,2) = buf[m++]; - } - - atomKK->modified(Host,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|V_MASK); - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - template struct AtomVecAtomicKokkos_PackExchangeFunctor { typedef DeviceType device_type; @@ -568,30 +352,6 @@ int AtomVecAtomicKokkos::pack_exchange_kokkos(const int &nsend,DAT::tdual_xfloat /* ---------------------------------------------------------------------- */ -int AtomVecAtomicKokkos::pack_exchange(int i, double *buf) -{ - int m = 1; - buf[m++] = h_x(i,0); - buf[m++] = h_x(i,1); - buf[m++] = h_x(i,2); - buf[m++] = h_v(i,0); - buf[m++] = h_v(i,1); - buf[m++] = h_v(i,2); - buf[m++] = ubuf(h_tag(i)).d; - buf[m++] = ubuf(h_type(i)).d; - buf[m++] = ubuf(h_mask(i)).d; - buf[m++] = ubuf(h_image(i)).d; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]->pack_exchange(i,&buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- */ - template struct AtomVecAtomicKokkos_UnpackExchangeFunctor { typedef DeviceType device_type; @@ -671,238 +431,6 @@ int AtomVecAtomicKokkos::unpack_exchange_kokkos(DAT::tdual_xfloat_2d &k_buf,int /* ---------------------------------------------------------------------- */ -int AtomVecAtomicKokkos::unpack_exchange(double *buf) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - atomKK->modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK); - - int m = 1; - h_x(nlocal,0) = buf[m++]; - h_x(nlocal,1) = buf[m++]; - h_x(nlocal,2) = buf[m++]; - h_v(nlocal,0) = buf[m++]; - h_v(nlocal,1) = buf[m++]; - h_v(nlocal,2) = buf[m++]; - h_tag(nlocal) = (tagint) ubuf(buf[m++]).i; - h_type(nlocal) = (int) ubuf(buf[m++]).i; - h_mask(nlocal) = (int) ubuf(buf[m++]).i; - h_image(nlocal) = (imageint) ubuf(buf[m++]).i; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]-> - unpack_exchange(nlocal,&buf[m]); - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - size of restart data for all atoms owned by this proc - include extra data stored by fixes -------------------------------------------------------------------------- */ - -int AtomVecAtomicKokkos::size_restart() -{ - int i; - - int nlocal = atom->nlocal; - int n = 11 * nlocal; - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - for (i = 0; i < nlocal; i++) - n += modify->fix[atom->extra_restart[iextra]]->size_restart(i); - - return n; -} - -/* ---------------------------------------------------------------------- - pack atom I's data for restart file including extra quantities - xyz must be 1st 3 values, so that read_restart can test on them - molecular types may be negative, but write as positive -------------------------------------------------------------------------- */ - -int AtomVecAtomicKokkos::pack_restart(int i, double *buf) -{ - atomKK->sync(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK ); - - int m = 1; - buf[m++] = h_x(i,0); - buf[m++] = h_x(i,1); - buf[m++] = h_x(i,2); - buf[m++] = ubuf(h_tag(i)).d; - buf[m++] = ubuf(h_type(i)).d; - buf[m++] = ubuf(h_mask(i)).d; - buf[m++] = ubuf(h_image(i)).d; - buf[m++] = h_v(i,0); - buf[m++] = h_v(i,1); - buf[m++] = h_v(i,2); - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - m += modify->fix[atom->extra_restart[iextra]]->pack_restart(i,&buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- - unpack data for one atom from restart file including extra quantities -------------------------------------------------------------------------- */ - -int AtomVecAtomicKokkos::unpack_restart(double *buf) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) { - grow(0); - if (atom->nextra_store) - memory->grow(atom->extra,nmax,atom->nextra_store,"atom:extra"); - } - atomKK->modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK ); - - int m = 1; - h_x(nlocal,0) = buf[m++]; - h_x(nlocal,1) = buf[m++]; - h_x(nlocal,2) = buf[m++]; - h_tag(nlocal) = (tagint) ubuf(buf[m++]).i; - h_type(nlocal) = (int) ubuf(buf[m++]).i; - h_mask(nlocal) = (int) ubuf(buf[m++]).i; - h_image(nlocal) = (imageint) ubuf(buf[m++]).i; - h_v(nlocal,0) = buf[m++]; - h_v(nlocal,1) = buf[m++]; - h_v(nlocal,2) = buf[m++]; - - double **extra = atom->extra; - if (atom->nextra_store) { - int size = static_cast (buf[0]) - m; - for (int i = 0; i < size; i++) extra[nlocal][i] = buf[m++]; - } - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - create one atom of itype at coord - set other values to defaults -------------------------------------------------------------------------- */ - -void AtomVecAtomicKokkos::create_atom(int itype, double *coord) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) { - //if(nlocal>2) printf("typeA: %i %i\n",type[0],type[1]); - atomKK->modified(Host,ALL_MASK); - grow(0); - //if(nlocal>2) printf("typeB: %i %i\n",type[0],type[1]); - } - atomKK->modified(Host,ALL_MASK); - - tag[nlocal] = 0; - type[nlocal] = itype; - h_x(nlocal,0) = coord[0]; - h_x(nlocal,1) = coord[1]; - h_x(nlocal,2) = coord[2]; - h_mask[nlocal] = 1; - h_image[nlocal] = ((tagint) IMGMAX << IMG2BITS) | - ((tagint) IMGMAX << IMGBITS) | IMGMAX; - h_v(nlocal,0) = 0.0; - h_v(nlocal,1) = 0.0; - h_v(nlocal,2) = 0.0; - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack one line from Atoms section of data file - initialize other atom quantities -------------------------------------------------------------------------- */ - -void AtomVecAtomicKokkos::data_atom(double *coord, imageint imagetmp, - const std::vector &values, std::string &extract) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - h_tag[nlocal] = utils::inumeric(FLERR,values[0],true,lmp); - h_type[nlocal] = utils::inumeric(FLERR,values[1],true,lmp); - extract = values[1]; - if (type[nlocal] <= 0 || type[nlocal] > atom->ntypes) - error->one(FLERR,"Invalid atom type in Atoms section of data file"); - - h_x(nlocal,0) = coord[0]; - h_x(nlocal,1) = coord[1]; - h_x(nlocal,2) = coord[2]; - - h_image[nlocal] = imagetmp; - - h_mask[nlocal] = 1; - h_v(nlocal,0) = 0.0; - h_v(nlocal,1) = 0.0; - h_v(nlocal,2) = 0.0; - - atomKK->modified(Host,ALL_MASK); - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - pack atom info for data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecAtomicKokkos::pack_data(double **buf) -{ - int nlocal = atom->nlocal; - for (int i = 0; i < nlocal; i++) { - buf[i][0] = h_tag[i]; - buf[i][1] = h_type[i]; - buf[i][2] = h_x(i,0); - buf[i][3] = h_x(i,1); - buf[i][4] = h_x(i,2); - buf[i][5] = (h_image[i] & IMGMASK) - IMGMAX; - buf[i][6] = (h_image[i] >> IMGBITS & IMGMASK) - IMGMAX; - buf[i][7] = (h_image[i] >> IMG2BITS) - IMGMAX; - } -} - -/* ---------------------------------------------------------------------- - write atom info to data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecAtomicKokkos::write_data(FILE *fp, int n, double **buf) -{ - for (int i = 0; i < n; i++) - fprintf(fp,"%d %d %-1.16e %-1.16e %-1.16e %d %d %d\n", - (int) buf[i][0],(int) buf[i][1],buf[i][2],buf[i][3],buf[i][4], - (int) buf[i][5],(int) buf[i][6],(int) buf[i][7]); -} - -/* ---------------------------------------------------------------------- - return # of bytes of allocated memory -------------------------------------------------------------------------- */ - -double AtomVecAtomicKokkos::memory_usage() -{ - double bytes = 0; - - if (atom->memcheck("tag")) bytes += memory->usage(tag,nmax); - if (atom->memcheck("type")) bytes += memory->usage(type,nmax); - if (atom->memcheck("mask")) bytes += memory->usage(mask,nmax); - if (atom->memcheck("image")) bytes += memory->usage(image,nmax); - if (atom->memcheck("x")) bytes += memory->usage(x,nmax,3); - if (atom->memcheck("v")) bytes += memory->usage(v,nmax,3); - if (atom->memcheck("f")) bytes += memory->usage(f,nmax*commKK->nthreads,3); - - return bytes; -} - -/* ---------------------------------------------------------------------- */ - void AtomVecAtomicKokkos::sync(ExecutionSpace space, unsigned int mask) { if (space == Device) { @@ -983,4 +511,3 @@ void AtomVecAtomicKokkos::modified(ExecutionSpace space, unsigned int mask) if (mask & IMAGE_MASK) atomKK->k_image.modify(); } } - diff --git a/src/KOKKOS/atom_vec_atomic_kokkos.h b/src/KOKKOS/atom_vec_atomic_kokkos.h index e152e68248..83c311483e 100644 --- a/src/KOKKOS/atom_vec_atomic_kokkos.h +++ b/src/KOKKOS/atom_vec_atomic_kokkos.h @@ -24,31 +24,16 @@ AtomStyle(atomic/kk/host,AtomVecAtomicKokkos); #define LMP_ATOM_VEC_ATOMIC_KOKKOS_H #include "atom_vec_kokkos.h" +#include "atom_vec_atomic.h" #include "kokkos_type.h" namespace LAMMPS_NS { -class AtomVecAtomicKokkos : public AtomVecKokkos { +class AtomVecAtomicKokkos : public AtomVecKokkos, public AtomVecAtomic { public: AtomVecAtomicKokkos(class LAMMPS *); void grow(int) override; - void copy(int, int, int) override; - int pack_border(int, int *, double *, int, int *) override; - int pack_border_vel(int, int *, double *, int, int *) override; - void unpack_border(int, int, double *) override; - void unpack_border_vel(int, int, double *) override; - int pack_exchange(int, double *) override; - int unpack_exchange(double *) override; - int size_restart() override; - int pack_restart(int, double *) override; - int unpack_restart(double *) override; - void create_atom(int, double *) override; - void data_atom(double *, imageint, const std::vector &, std::string &) override; - void pack_data(double **) override; - void write_data(FILE *, int, double **) override; - double memory_usage() override; - void grow_pointers() override; int pack_border_kokkos(int n, DAT::tdual_int_2d k_sendlist, DAT::tdual_xfloat_2d buf,int iswap, @@ -70,11 +55,6 @@ class AtomVecAtomicKokkos : public AtomVecKokkos { void sync_overlapping_device(ExecutionSpace space, unsigned int mask) override; protected: - tagint *tag; - imageint *image; - int *type,*mask; - double **x,**v,**f; - DAT::t_tagint_1d d_tag; HAT::t_tagint_1d h_tag; DAT::t_imageint_1d d_image; @@ -85,8 +65,6 @@ class AtomVecAtomicKokkos : public AtomVecKokkos { DAT::t_x_array d_x; DAT::t_v_array d_v; DAT::t_f_array d_f; - - DAT::tdual_int_1d k_count; }; } diff --git a/src/KOKKOS/atom_vec_bond_kokkos.cpp b/src/KOKKOS/atom_vec_bond_kokkos.cpp index 104800231e..17419c7338 100644 --- a/src/KOKKOS/atom_vec_bond_kokkos.cpp +++ b/src/KOKKOS/atom_vec_bond_kokkos.cpp @@ -27,26 +27,10 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -AtomVecBondKokkos::AtomVecBondKokkos(LAMMPS *lmp) : AtomVecKokkos(lmp) +AtomVecBondKokkos::AtomVecBondKokkos(LAMMPS *lmp) : AtomVec(lmp), +AtomVecKokkos(lmp), AtomVecBond(lmp) { - molecular = Atom::MOLECULAR; - bonds_allow = 1; - mass_type = PER_TYPE; - comm_x_only = comm_f_only = 1; - size_forward = 3; - size_reverse = 3; - size_border = 7; - size_velocity = 3; - size_data_atom = 6; - size_data_vel = 4; - xcol_data = 4; - - atom->molecule_flag = 1; - - k_count = DAT::tdual_int_1d("atom::k_count",1); - atomKK = (AtomKokkos *) atom; - commKK = (CommKokkos *) comm; } /* ---------------------------------------------------------------------- @@ -142,43 +126,6 @@ void AtomVecBondKokkos::grow_pointers() h_bond_atom = atomKK->k_bond_atom.h_view; } -/* ---------------------------------------------------------------------- - copy atom I info to atom J -------------------------------------------------------------------------- */ - -void AtomVecBondKokkos::copy(int i, int j, int delflag) -{ - int k; - - h_tag[j] = h_tag[i]; - h_type[j] = h_type[i]; - mask[j] = mask[i]; - h_image[j] = h_image[i]; - h_x(j,0) = h_x(i,0); - h_x(j,1) = h_x(i,1); - h_x(j,2) = h_x(i,2); - h_v(j,0) = h_v(i,0); - h_v(j,1) = h_v(i,1); - h_v(j,2) = h_v(i,2); - - h_molecule(j) = h_molecule(i); - - h_num_bond(j) = h_num_bond(i); - for (k = 0; k < h_num_bond(j); k++) { - h_bond_type(j,k) = h_bond_type(i,k); - h_bond_atom(j,k) = h_bond_atom(i,k); - } - - h_nspecial(j,0) = h_nspecial(i,0); - h_nspecial(j,1) = h_nspecial(i,1); - h_nspecial(j,2) = h_nspecial(i,2); - for (k = 0; k < h_nspecial(j,2); k++) h_special(j,k) = h_special(i,k); - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->copy_arrays(i,j,delflag); -} - /* ---------------------------------------------------------------------- */ template @@ -282,149 +229,6 @@ int AtomVecBondKokkos::pack_border_kokkos(int n, DAT::tdual_int_2d k_sendlist, /* ---------------------------------------------------------------------- */ -int AtomVecBondKokkos::pack_border(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = ubuf(h_molecule(j)).d; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = ubuf(h_molecule(j)).d; - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecBondKokkos::pack_border_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = ubuf(h_molecule(j)).d; - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = ubuf(h_molecule(j)).d; - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = ubuf(h_molecule(j)).d; - if (mask[i] & deform_groupbit) { - buf[m++] = h_v(j,0) + dvx; - buf[m++] = h_v(j,1) + dvy; - buf[m++] = h_v(j,2) + dvz; - } else { - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - } - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecBondKokkos::pack_border_hybrid(int n, int *list, double *buf) -{ - int i,j,m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_molecule(j); - } - return m; -} - -/* ---------------------------------------------------------------------- */ - template struct AtomVecBondKokkos_UnpackBorder { typedef DeviceType device_type; @@ -485,78 +289,6 @@ void AtomVecBondKokkos::unpack_border_kokkos(const int &n, const int &first, /* ---------------------------------------------------------------------- */ -void AtomVecBondKokkos::unpack_border(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - while (last > nmax) grow(0); - - for (i = first; i < last; i++) { - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - h_tag(i) = (tagint) ubuf(buf[m++]).i; - h_type(i) = (int) ubuf(buf[m++]).i; - h_mask(i) = (int) ubuf(buf[m++]).i; - h_molecule(i) = (tagint) ubuf(buf[m++]).i; - } - - atomKK->modified(Host,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|MOLECULE_MASK); - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecBondKokkos::unpack_border_vel(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - while (last > nmax) grow(0); - - for (i = first; i < last; i++) { - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - h_tag(i) = (tagint) ubuf(buf[m++]).i; - h_type(i) = (int) ubuf(buf[m++]).i; - h_mask(i) = (int) ubuf(buf[m++]).i; - h_molecule(i) = (tagint) ubuf(buf[m++]).i; - h_v(i,0) = buf[m++]; - h_v(i,1) = buf[m++]; - h_v(i,2) = buf[m++]; - } - - atomKK->modified(Host,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|MOLECULE_MASK|V_MASK); - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecBondKokkos::unpack_border_hybrid(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) - h_molecule(i) = (tagint) ubuf(buf[m++]).i; - return m; -} - -/* ---------------------------------------------------------------------- */ - template struct AtomVecBondKokkos_PackExchangeFunctor { typedef DeviceType device_type; @@ -721,43 +453,6 @@ int AtomVecBondKokkos::pack_exchange_kokkos(const int &nsend,DAT::tdual_xfloat_2 /* ---------------------------------------------------------------------- */ -int AtomVecBondKokkos::pack_exchange(int i, double *buf) -{ - int k; - int m = 1; - buf[m++] = h_x(i,0); - buf[m++] = h_x(i,1); - buf[m++] = h_x(i,2); - buf[m++] = h_v(i,0); - buf[m++] = h_v(i,1); - buf[m++] = h_v(i,2); - buf[m++] = ubuf(h_tag(i)).d; - buf[m++] = ubuf(h_type(i)).d; - buf[m++] = ubuf(h_mask(i)).d; - buf[m++] = ubuf(h_image(i)).d; - buf[m++] = ubuf(h_molecule(i)).d; - - buf[m++] = ubuf(h_num_bond(i)).d; - for (k = 0; k < h_num_bond(i); k++) { - buf[m++] = ubuf(h_bond_type(i,k)).d; - buf[m++] = ubuf(h_bond_atom(i,k)).d; - } - buf[m++] = ubuf(h_nspecial(i,0)).d; - buf[m++] = ubuf(h_nspecial(i,1)).d; - buf[m++] = ubuf(h_nspecial(i,2)).d; - for (k = 0; k < h_nspecial(i,2); k++) - buf[m++] = ubuf(h_special(i,k)).d; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]->pack_exchange(i,&buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- */ - template struct AtomVecBondKokkos_UnpackExchangeFunctor { typedef DeviceType device_type; @@ -870,321 +565,6 @@ int AtomVecBondKokkos::unpack_exchange_kokkos(DAT::tdual_xfloat_2d &k_buf,int nr /* ---------------------------------------------------------------------- */ -int AtomVecBondKokkos::unpack_exchange(double *buf) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - atomKK->modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK | MOLECULE_MASK | BOND_MASK | SPECIAL_MASK); - - int k; - int m = 1; - h_x(nlocal,0) = buf[m++]; - h_x(nlocal,1) = buf[m++]; - h_x(nlocal,2) = buf[m++]; - h_v(nlocal,0) = buf[m++]; - h_v(nlocal,1) = buf[m++]; - h_v(nlocal,2) = buf[m++]; - h_tag(nlocal) = (tagint) ubuf(buf[m++]).i; - h_type(nlocal) = (int) ubuf(buf[m++]).i; - h_mask(nlocal) = (int) ubuf(buf[m++]).i; - h_image(nlocal) = (imageint) ubuf(buf[m++]).i; - h_molecule(nlocal) = (tagint) ubuf(buf[m++]).i; - - h_num_bond(nlocal) = (int) ubuf(buf[m++]).i; - for (k = 0; k < h_num_bond(nlocal); k++) { - h_bond_type(nlocal,k) = (int) ubuf(buf[m++]).i; - h_bond_atom(nlocal,k) = (tagint) ubuf(buf[m++]).i; - } - - h_nspecial(nlocal,0) = (int) ubuf(buf[m++]).i; - h_nspecial(nlocal,1) = (int) ubuf(buf[m++]).i; - h_nspecial(nlocal,2) = (int) ubuf(buf[m++]).i; - for (k = 0; k < h_nspecial(nlocal,2); k++) - h_special(nlocal,k) = (tagint) ubuf(buf[m++]).i; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]-> - unpack_exchange(nlocal,&buf[m]); - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - size of restart data for all atoms owned by this proc - include extra data stored by fixes -------------------------------------------------------------------------- */ - -int AtomVecBondKokkos::size_restart() -{ - int i; - - int nlocal = atom->nlocal; - int n = 0; - for (i = 0; i < nlocal; i++) - n += 13 + 2*h_num_bond[i]; - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - for (i = 0; i < nlocal; i++) - n += modify->fix[atom->extra_restart[iextra]]->size_restart(i); - - return n; -} - -/* ---------------------------------------------------------------------- - pack atom I's data for restart file including extra quantities - xyz must be 1st 3 values, so that read_restart can test on them - molecular types may be negative, but write as positive -------------------------------------------------------------------------- */ - -int AtomVecBondKokkos::pack_restart(int i, double *buf) -{ - atomKK->sync(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK | MOLECULE_MASK | BOND_MASK | SPECIAL_MASK); - int m = 1; - buf[m++] = h_x(i,0); - buf[m++] = h_x(i,1); - buf[m++] = h_x(i,2); - buf[m++] = ubuf(h_tag(i)).d; - buf[m++] = ubuf(h_type(i)).d; - buf[m++] = ubuf(h_mask(i)).d; - buf[m++] = ubuf(h_image(i)).d; - buf[m++] = h_v(i,0); - buf[m++] = h_v(i,1); - buf[m++] = h_v(i,2); - - buf[m++] = ubuf(h_molecule(i)).d; - - buf[m++] = ubuf(h_num_bond(i)).d; - for (int k = 0; k < h_num_bond(i); k++) { - buf[m++] = ubuf(MAX(h_bond_type(i,k),-h_bond_type(i,k))).d; - buf[m++] = ubuf(h_bond_atom(i,k)).d; - } - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - m += modify->fix[atom->extra_restart[iextra]]->pack_restart(i,&buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- - unpack data for one atom from restart file including extra quantities -------------------------------------------------------------------------- */ - -int AtomVecBondKokkos::unpack_restart(double *buf) -{ - int k; - - int nlocal = atom->nlocal; - if (nlocal == nmax) { - grow(0); - if (atom->nextra_store) - memory->grow(atom->extra,nmax,atom->nextra_store,"atom:extra"); - } - atomKK->modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK | MOLECULE_MASK | BOND_MASK | SPECIAL_MASK); - int m = 1; - h_x(nlocal,0) = buf[m++]; - h_x(nlocal,1) = buf[m++]; - h_x(nlocal,2) = buf[m++]; - h_tag(nlocal) = (tagint) ubuf(buf[m++]).i; - h_type(nlocal) = (int) ubuf(buf[m++]).i; - h_mask(nlocal) = (int) ubuf(buf[m++]).i; - h_image(nlocal) = (imageint) ubuf(buf[m++]).i; - h_v(nlocal,0) = buf[m++]; - h_v(nlocal,1) = buf[m++]; - h_v(nlocal,2) = buf[m++]; - - h_molecule(nlocal) = (tagint) ubuf(buf[m++]).i; - - h_num_bond(nlocal) = (int) ubuf(buf[m++]).i; - for (k = 0; k < h_num_bond(nlocal); k++) { - h_bond_type(nlocal,k) = (int) ubuf(buf[m++]).i; - h_bond_atom(nlocal,k) = (tagint) ubuf(buf[m++]).i; - } - - h_nspecial(nlocal,0) = h_nspecial(nlocal,1) = h_nspecial(nlocal,2) = 0; - - double **extra = atom->extra; - if (atom->nextra_store) { - int size = static_cast (buf[0]) - m; - for (int i = 0; i < size; i++) extra[nlocal][i] = buf[m++]; - } - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - create one atom of itype at coord - set other values to defaults -------------------------------------------------------------------------- */ - -void AtomVecBondKokkos::create_atom(int itype, double *coord) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) { - atomKK->modified(Host,ALL_MASK); - grow(0); - } - atomKK->modified(Host,ALL_MASK); - - tag[nlocal] = 0; - type[nlocal] = itype; - h_x(nlocal,0) = coord[0]; - h_x(nlocal,1) = coord[1]; - h_x(nlocal,2) = coord[2]; - h_mask(nlocal) = 1; - h_image(nlocal) = ((imageint) IMGMAX << IMG2BITS) | - ((imageint) IMGMAX << IMGBITS) | IMGMAX; - h_v(nlocal,0) = 0.0; - h_v(nlocal,1) = 0.0; - h_v(nlocal,2) = 0.0; - - h_molecule(nlocal) = 0; - h_num_bond(nlocal) = 0; - h_nspecial(nlocal,0) = h_nspecial(nlocal,1) = h_nspecial(nlocal,2) = 0; - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack one line from Atoms section of data file - initialize other atom quantities -------------------------------------------------------------------------- */ - -void AtomVecBondKokkos::data_atom(double *coord, imageint imagetmp, - const std::vector &values, std::string &extract) -{ - int nlocal = atomKK->nlocal; - if (nlocal == nmax) grow(0); - atomKK->modified(Host,ALL_MASK); - - h_tag(nlocal) = utils::inumeric(FLERR,values[0],true,lmp); - h_molecule(nlocal) = utils::inumeric(FLERR,values[1],true,lmp); - h_type(nlocal) = utils::inumeric(FLERR,values[2],true,lmp); - extract = values[2]; - if (h_type(nlocal) <= 0 || h_type(nlocal) > atom->ntypes) - error->one(FLERR,"Invalid atom type in Atoms section of data file"); - - h_x(nlocal,0) = coord[0]; - h_x(nlocal,1) = coord[1]; - h_x(nlocal,2) = coord[2]; - - h_image(nlocal) = imagetmp; - - h_mask(nlocal) = 1; - h_v(nlocal,0) = 0.0; - h_v(nlocal,1) = 0.0; - h_v(nlocal,2) = 0.0; - h_num_bond(nlocal) = 0; - - atomKK->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack hybrid quantities from one line in Atoms section of data file - initialize other atom quantities for this sub-style -------------------------------------------------------------------------- */ - -int AtomVecBondKokkos::data_atom_hybrid(int nlocal, const std::vector &values, - int offset) -{ - h_molecule(nlocal) = utils::inumeric(FLERR,values[offset],true,lmp); - h_num_bond(nlocal) = 0; - return 1; -} - -/* ---------------------------------------------------------------------- - pack atom info for data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecBondKokkos::pack_data(double **buf) -{ - int nlocal = atom->nlocal; - for (int i = 0; i < nlocal; i++) { - buf[i][0] = h_tag(i); - buf[i][1] = h_molecule(i); - buf[i][2] = h_type(i); - buf[i][3] = h_x(i,0); - buf[i][4] = h_x(i,1); - buf[i][5] = h_x(i,2); - buf[i][6] = (h_image[i] & IMGMASK) - IMGMAX; - buf[i][7] = (h_image[i] >> IMGBITS & IMGMASK) - IMGMAX; - buf[i][8] = (h_image[i] >> IMG2BITS) - IMGMAX; - } -} - -/* ---------------------------------------------------------------------- - pack hybrid atom info for data file -------------------------------------------------------------------------- */ - -int AtomVecBondKokkos::pack_data_hybrid(int i, double *buf) -{ - buf[0] = h_molecule(i); - return 1; -} - -/* ---------------------------------------------------------------------- - write atom info to data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecBondKokkos::write_data(FILE *fp, int n, double **buf) -{ - for (int i = 0; i < n; i++) - fprintf(fp,"%d %d %d %-1.16e %-1.16e %-1.16e %d %d %d\n", - (int) buf[i][0],(int) buf[i][1], (int) buf[i][2], - buf[i][3],buf[i][4],buf[i][5], - (int) buf[i][6],(int) buf[i][7],(int) buf[i][8]); -} - -/* ---------------------------------------------------------------------- - write hybrid atom info to data file -------------------------------------------------------------------------- */ - -int AtomVecBondKokkos::write_data_hybrid(FILE *fp, double *buf) -{ - fprintf(fp," " TAGINT_FORMAT, (tagint) (buf[0])); - return 1; -} - -/* ---------------------------------------------------------------------- - return # of bytes of allocated memory -------------------------------------------------------------------------- */ - -double AtomVecBondKokkos::memory_usage() -{ - double bytes = 0; - - if (atom->memcheck("tag")) bytes += memory->usage(tag,nmax); - if (atom->memcheck("type")) bytes += memory->usage(type,nmax); - if (atom->memcheck("mask")) bytes += memory->usage(mask,nmax); - if (atom->memcheck("image")) bytes += memory->usage(image,nmax); - if (atom->memcheck("x")) bytes += memory->usage(x,nmax,3); - if (atom->memcheck("v")) bytes += memory->usage(v,nmax,3); - if (atom->memcheck("f")) bytes += memory->usage(f,nmax*commKK->nthreads,3); - - if (atom->memcheck("molecule")) bytes += memory->usage(molecule,nmax); - if (atom->memcheck("nspecial")) bytes += memory->usage(nspecial,nmax,3); - if (atom->memcheck("special")) - bytes += memory->usage(special,nmax,atom->maxspecial); - - if (atom->memcheck("num_bond")) bytes += memory->usage(num_bond,nmax); - if (atom->memcheck("bond_type")) - bytes += memory->usage(bond_type,nmax,atom->bond_per_atom); - if (atom->memcheck("bond_atom")) - bytes += memory->usage(bond_atom,nmax,atom->bond_per_atom); - - return bytes; -} - -/* ---------------------------------------------------------------------- */ - void AtomVecBondKokkos::sync(ExecutionSpace space, unsigned int mask) { if (space == Device) { @@ -1337,4 +717,3 @@ void AtomVecBondKokkos::modified(ExecutionSpace space, unsigned int mask) } } } - diff --git a/src/KOKKOS/atom_vec_bond_kokkos.h b/src/KOKKOS/atom_vec_bond_kokkos.h index 7826148d88..82c50f7d0d 100644 --- a/src/KOKKOS/atom_vec_bond_kokkos.h +++ b/src/KOKKOS/atom_vec_bond_kokkos.h @@ -24,35 +24,15 @@ AtomStyle(bond/kk/host,AtomVecBondKokkos); #define LMP_ATOM_VEC_BOND_KOKKOS_H #include "atom_vec_kokkos.h" +#include "atom_vec_bond.h" namespace LAMMPS_NS { -class AtomVecBondKokkos : public AtomVecKokkos { +class AtomVecBondKokkos : public AtomVecKokkos, public AtomVecBond { public: AtomVecBondKokkos(class LAMMPS *); void grow(int) override; - void copy(int, int, int) override; - int pack_border(int, int *, double *, int, int *) override; - int pack_border_vel(int, int *, double *, int, int *) override; - int pack_border_hybrid(int, int *, double *) override; - void unpack_border(int, int, double *) override; - void unpack_border_vel(int, int, double *) override; - int unpack_border_hybrid(int, int, double *) override; - int pack_exchange(int, double *) override; - int unpack_exchange(double *) override; - int size_restart() override; - int pack_restart(int, double *) override; - int unpack_restart(double *) override; - void create_atom(int, double *) override; - void data_atom(double *, imageint, const std::vector &, std::string &) override; - int data_atom_hybrid(int, const std::vector &, int) override; - void pack_data(double **) override; - int pack_data_hybrid(int, double *) override; - void write_data(FILE *, int, double **) override; - int write_data_hybrid(FILE *, double *) override; - double memory_usage() override; - void grow_pointers() override; int pack_border_kokkos(int n, DAT::tdual_int_2d k_sendlist, DAT::tdual_xfloat_2d buf,int iswap, @@ -73,18 +53,9 @@ class AtomVecBondKokkos : public AtomVecKokkos { void modified(ExecutionSpace space, unsigned int mask) override; void sync_overlapping_device(ExecutionSpace space, unsigned int mask) override; - protected: - - tagint *tag; - int *type,*mask; - imageint *image; - double **x,**v,**f; - + private: tagint *molecule; - int **nspecial; tagint **special; - int *num_bond; - int **bond_type; tagint **bond_atom; DAT::t_tagint_1d d_tag; @@ -112,9 +83,6 @@ class AtomVecBondKokkos : public AtomVecKokkos { HAT::t_int_1d h_num_bond; HAT::t_int_2d h_bond_type; HAT::t_tagint_2d h_bond_atom; - - DAT::tdual_int_1d k_count; - }; } diff --git a/src/KOKKOS/atom_vec_charge_kokkos.cpp b/src/KOKKOS/atom_vec_charge_kokkos.cpp index e7087b0219..66520652be 100644 --- a/src/KOKKOS/atom_vec_charge_kokkos.cpp +++ b/src/KOKKOS/atom_vec_charge_kokkos.cpp @@ -27,25 +27,9 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -AtomVecChargeKokkos::AtomVecChargeKokkos(LAMMPS *lmp) : AtomVecKokkos(lmp) +AtomVecChargeKokkos::AtomVecChargeKokkos(LAMMPS *lmp) : AtomVec(lmp), +AtomVecKokkos(lmp), AtomVecCharge(lmp) { - molecular = Atom::ATOMIC; - mass_type = PER_TYPE; - - comm_x_only = comm_f_only = 1; - size_forward = 3; - size_reverse = 3; - size_border = 7; - size_velocity = 3; - size_data_atom = 6; - size_data_vel = 4; - xcol_data = 4; - - atom->q_flag = 1; - - k_count = DAT::tdual_int_1d("atom::k_count",1); - atomKK = (AtomKokkos *) atom; - commKK = (CommKokkos *) comm; } @@ -123,30 +107,6 @@ void AtomVecChargeKokkos::grow_pointers() } -/* ---------------------------------------------------------------------- - copy atom I info to atom J -------------------------------------------------------------------------- */ - -void AtomVecChargeKokkos::copy(int i, int j, int delflag) -{ - h_tag[j] = h_tag[i]; - h_type[j] = h_type[i]; - mask[j] = mask[i]; - h_image[j] = h_image[i]; - h_x(j,0) = h_x(i,0); - h_x(j,1) = h_x(i,1); - h_x(j,2) = h_x(i,2); - h_v(j,0) = h_v(i,0); - h_v(j,1) = h_v(i,1); - h_v(j,2) = h_v(i,2); - - h_q[j] = h_q[i]; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->copy_arrays(i,j,delflag); -} - /* ---------------------------------------------------------------------- */ template @@ -297,150 +257,6 @@ int AtomVecChargeKokkos::pack_border_kokkos(int n, DAT::tdual_int_2d k_sendlist, return n*size_border; } -/* ---------------------------------------------------------------------- */ - -int AtomVecChargeKokkos::pack_border(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = h_q(j); - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = h_q(j); - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecChargeKokkos::pack_border_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = h_q[j]; - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = h_q[j]; - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = h_q[j]; - if (mask[i] & deform_groupbit) { - buf[m++] = h_v(j,0) + dvx; - buf[m++] = h_v(j,1) + dvy; - buf[m++] = h_v(j,2) + dvz; - } else { - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - } - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecChargeKokkos::pack_border_hybrid(int n, int *list, double *buf) -{ - int i,j,m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_q[j]; - } - return m; -} - - /* ---------------------------------------------------------------------- */ template @@ -500,78 +316,6 @@ void AtomVecChargeKokkos::unpack_border_kokkos(const int &n, const int &first, /* ---------------------------------------------------------------------- */ -void AtomVecChargeKokkos::unpack_border(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - while (last > nmax) grow(0); - - for (i = first; i < last; i++) { - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - h_tag(i) = (tagint) ubuf(buf[m++]).i; - h_type(i) = (int) ubuf(buf[m++]).i; - h_mask(i) = (int) ubuf(buf[m++]).i; - h_q[i] = buf[m++]; - } - - atomKK->modified(Host,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|Q_MASK); - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecChargeKokkos::unpack_border_vel(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - while (last > nmax) grow(0); - - for (i = first; i < last; i++) { - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - h_tag(i) = (tagint) ubuf(buf[m++]).i; - h_type(i) = (int) ubuf(buf[m++]).i; - h_mask(i) = (int) ubuf(buf[m++]).i; - h_q[i] = buf[m++]; - h_v(i,0) = buf[m++]; - h_v(i,1) = buf[m++]; - h_v(i,2) = buf[m++]; - } - - atomKK->modified(Host,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|Q_MASK|V_MASK); - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecChargeKokkos::unpack_border_hybrid(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) - h_q[i] = buf[m++]; - return m; -} - -/* ---------------------------------------------------------------------- */ - template struct AtomVecChargeKokkos_PackExchangeFunctor { typedef DeviceType device_type; @@ -688,31 +432,6 @@ int AtomVecChargeKokkos::pack_exchange_kokkos(const int &nsend,DAT::tdual_xfloat /* ---------------------------------------------------------------------- */ -int AtomVecChargeKokkos::pack_exchange(int i, double *buf) -{ - int m = 1; - buf[m++] = h_x(i,0); - buf[m++] = h_x(i,1); - buf[m++] = h_x(i,2); - buf[m++] = h_v(i,0); - buf[m++] = h_v(i,1); - buf[m++] = h_v(i,2); - buf[m++] = ubuf(h_tag(i)).d; - buf[m++] = ubuf(h_type(i)).d; - buf[m++] = ubuf(h_mask(i)).d; - buf[m++] = ubuf(h_image(i)).d; - buf[m++] = h_q[i]; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]->pack_exchange(i,&buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- */ - template struct AtomVecChargeKokkos_UnpackExchangeFunctor { typedef DeviceType device_type; @@ -797,281 +516,6 @@ int AtomVecChargeKokkos::unpack_exchange_kokkos(DAT::tdual_xfloat_2d &k_buf,int /* ---------------------------------------------------------------------- */ -int AtomVecChargeKokkos::unpack_exchange(double *buf) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - atomKK->modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK | Q_MASK); - - int m = 1; - h_x(nlocal,0) = buf[m++]; - h_x(nlocal,1) = buf[m++]; - h_x(nlocal,2) = buf[m++]; - h_v(nlocal,0) = buf[m++]; - h_v(nlocal,1) = buf[m++]; - h_v(nlocal,2) = buf[m++]; - h_tag(nlocal) = (tagint) ubuf(buf[m++]).i; - h_type(nlocal) = (int) ubuf(buf[m++]).i; - h_mask(nlocal) = (int) ubuf(buf[m++]).i; - h_image(nlocal) = (imageint) ubuf(buf[m++]).i; - h_q[nlocal] = buf[m++]; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]-> - unpack_exchange(nlocal,&buf[m]); - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - size of restart data for all atoms owned by this proc - include extra data stored by fixes -------------------------------------------------------------------------- */ - -int AtomVecChargeKokkos::size_restart() -{ - int i; - - int nlocal = atom->nlocal; - int n = 12 * nlocal; - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - for (i = 0; i < nlocal; i++) - n += modify->fix[atom->extra_restart[iextra]]->size_restart(i); - - return n; -} - -/* ---------------------------------------------------------------------- - pack atom I's data for restart file including extra quantities - xyz must be 1st 3 values, so that read_restart can test on them - molecular types may be negative, but write as positive -------------------------------------------------------------------------- */ - -int AtomVecChargeKokkos::pack_restart(int i, double *buf) -{ - atomKK->sync(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK | Q_MASK); - - int m = 1; - buf[m++] = h_x(i,0); - buf[m++] = h_x(i,1); - buf[m++] = h_x(i,2); - buf[m++] = ubuf(h_tag(i)).d; - buf[m++] = ubuf(h_type(i)).d; - buf[m++] = ubuf(h_mask(i)).d; - buf[m++] = ubuf(h_image(i)).d; - buf[m++] = h_v(i,0); - buf[m++] = h_v(i,1); - buf[m++] = h_v(i,2); - - buf[m++] = h_q[i]; - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - m += modify->fix[atom->extra_restart[iextra]]->pack_restart(i,&buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- - unpack data for one atom from restart file including extra quantities -------------------------------------------------------------------------- */ - -int AtomVecChargeKokkos::unpack_restart(double *buf) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) { - grow(0); - if (atom->nextra_store) - memory->grow(atom->extra,nmax,atom->nextra_store,"atom:extra"); - } - - atomKK->modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK | Q_MASK); - - int m = 1; - h_x(nlocal,0) = buf[m++]; - h_x(nlocal,1) = buf[m++]; - h_x(nlocal,2) = buf[m++]; - h_tag(nlocal) = (tagint) ubuf(buf[m++]).i; - h_type(nlocal) = (int) ubuf(buf[m++]).i; - h_mask(nlocal) = (int) ubuf(buf[m++]).i; - h_image(nlocal) = (imageint) ubuf(buf[m++]).i; - h_v(nlocal,0) = buf[m++]; - h_v(nlocal,1) = buf[m++]; - h_v(nlocal,2) = buf[m++]; - - h_q[nlocal] = buf[m++]; - - double **extra = atom->extra; - if (atom->nextra_store) { - int size = static_cast (buf[0]) - m; - for (int i = 0; i < size; i++) extra[nlocal][i] = buf[m++]; - } - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - create one atom of itype at coord - set other values to defaults -------------------------------------------------------------------------- */ - -void AtomVecChargeKokkos::create_atom(int itype, double *coord) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) { - atomKK->modified(Host,ALL_MASK); - grow(0); - } - atomKK->sync(Host,ALL_MASK); - atomKK->modified(Host,ALL_MASK); - - tag[nlocal] = 0; - type[nlocal] = itype; - h_x(nlocal,0) = coord[0]; - h_x(nlocal,1) = coord[1]; - h_x(nlocal,2) = coord[2]; - h_mask[nlocal] = 1; - h_image[nlocal] = ((imageint) IMGMAX << IMG2BITS) | - ((imageint) IMGMAX << IMGBITS) | IMGMAX; - h_v(nlocal,0) = 0.0; - h_v(nlocal,1) = 0.0; - h_v(nlocal,2) = 0.0; - - h_q[nlocal] = 0.0; - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack one line from Atoms section of data file - initialize other atom quantities -------------------------------------------------------------------------- */ - -void AtomVecChargeKokkos::data_atom(double *coord, imageint imagetmp, - const std::vector &values, std::string &extract) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - h_tag[nlocal] = utils::inumeric(FLERR,values[0],true,lmp); - h_type[nlocal] = utils::inumeric(FLERR,values[1],true,lmp); - extract = values[1]; - if (type[nlocal] <= 0 || type[nlocal] > atom->ntypes) - error->one(FLERR,"Invalid atom type in Atoms section of data file"); - - h_q[nlocal] = utils::numeric(FLERR,values[2],true,lmp); - - h_x(nlocal,0) = coord[0]; - h_x(nlocal,1) = coord[1]; - h_x(nlocal,2) = coord[2]; - - h_image[nlocal] = imagetmp; - - h_mask[nlocal] = 1; - h_v(nlocal,0) = 0.0; - h_v(nlocal,1) = 0.0; - h_v(nlocal,2) = 0.0; - - atomKK->modified(Host,ALL_MASK); - - atom->nlocal++; -} -/* ---------------------------------------------------------------------- - unpack hybrid quantities from one line in Atoms section of data file - initialize other atom quantities for this sub-style -------------------------------------------------------------------------- */ - -int AtomVecChargeKokkos::data_atom_hybrid(int nlocal, const std::vector &values, - int offset) -{ - h_q[nlocal] = utils::numeric(FLERR,values[offset],true,lmp); - - return 1; -} -/* ---------------------------------------------------------------------- - pack atom info for data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecChargeKokkos::pack_data(double **buf) -{ - int nlocal = atom->nlocal; - for (int i = 0; i < nlocal; i++) { - buf[i][0] = h_tag[i]; - buf[i][1] = h_type[i]; - buf[i][2] = h_q[i]; - buf[i][3] = h_x(i,0); - buf[i][4] = h_x(i,1); - buf[i][5] = h_x(i,2); - buf[i][6] = (h_image[i] & IMGMASK) - IMGMAX; - buf[i][7] = (h_image[i] >> IMGBITS & IMGMASK) - IMGMAX; - buf[i][8] = (h_image[i] >> IMG2BITS) - IMGMAX; - } -} - -/* ---------------------------------------------------------------------- - pack hybrid atom info for data file -------------------------------------------------------------------------- */ - -int AtomVecChargeKokkos::pack_data_hybrid(int i, double *buf) -{ - buf[0] = h_q[i]; - return 1; -} - -/* ---------------------------------------------------------------------- - write atom info to data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecChargeKokkos::write_data(FILE *fp, int n, double **buf) -{ - for (int i = 0; i < n; i++) - fprintf(fp,"%d %d %-1.16e %-1.16e %-1.16e %-1.16e %d %d %d\n", - (int) buf[i][0],(int) buf[i][1],buf[i][2],buf[i][3],buf[i][4],buf[i][5], - (int) buf[i][6],(int) buf[i][7],(int) buf[i][8]); -} - -/* ---------------------------------------------------------------------- - write hybrid atom info to data file -------------------------------------------------------------------------- */ - -int AtomVecChargeKokkos::write_data_hybrid(FILE *fp, double *buf) -{ - fprintf(fp," %-1.16e",buf[0]); - return 1; -} - -/* ---------------------------------------------------------------------- - return # of bytes of allocated memory -------------------------------------------------------------------------- */ - -double AtomVecChargeKokkos::memory_usage() -{ - double bytes = 0; - - if (atom->memcheck("tag")) bytes += memory->usage(tag,nmax); - if (atom->memcheck("type")) bytes += memory->usage(type,nmax); - if (atom->memcheck("mask")) bytes += memory->usage(mask,nmax); - if (atom->memcheck("image")) bytes += memory->usage(image,nmax); - if (atom->memcheck("x")) bytes += memory->usage(x,nmax,3); - if (atom->memcheck("v")) bytes += memory->usage(v,nmax,3); - if (atom->memcheck("f")) bytes += memory->usage(f,nmax*commKK->nthreads,3); - - if (atom->memcheck("q")) bytes += memory->usage(q,nmax); - - return bytes; -} - -/* ---------------------------------------------------------------------- */ - void AtomVecChargeKokkos::sync(ExecutionSpace space, unsigned int mask) { if (space == Device) { @@ -1120,6 +564,8 @@ void AtomVecChargeKokkos::modified(ExecutionSpace space, unsigned int mask) } } +/* ---------------------------------------------------------------------- */ + void AtomVecChargeKokkos::sync_overlapping_device(ExecutionSpace space, unsigned int mask) { if (space == Device) { @@ -1158,4 +604,3 @@ void AtomVecChargeKokkos::sync_overlapping_device(ExecutionSpace space, unsigned perform_async_copy(atomKK->k_q,space); } } - diff --git a/src/KOKKOS/atom_vec_charge_kokkos.h b/src/KOKKOS/atom_vec_charge_kokkos.h index 91e2be522c..556d03fedd 100644 --- a/src/KOKKOS/atom_vec_charge_kokkos.h +++ b/src/KOKKOS/atom_vec_charge_kokkos.h @@ -24,36 +24,16 @@ AtomStyle(charge/kk/host,AtomVecChargeKokkos); #define LMP_ATOM_VEC_CHARGE_KOKKOS_H #include "atom_vec_kokkos.h" +#include "atom_vec_charge.h" #include "kokkos_type.h" namespace LAMMPS_NS { -class AtomVecChargeKokkos : public AtomVecKokkos { +class AtomVecChargeKokkos : public AtomVecKokkos, public AtomVecCharge { public: AtomVecChargeKokkos(class LAMMPS *); void grow(int) override; - void copy(int, int, int) override; - int pack_border(int, int *, double *, int, int *) override; - int pack_border_vel(int, int *, double *, int, int *) override; - int pack_border_hybrid(int, int *, double *) override; - void unpack_border(int, int, double *) override; - void unpack_border_vel(int, int, double *) override; - int unpack_border_hybrid(int, int, double *) override; - int pack_exchange(int, double *) override; - int unpack_exchange(double *) override; - int size_restart() override; - int pack_restart(int, double *) override; - int unpack_restart(double *) override; - void create_atom(int, double *) override; - void data_atom(double *, imageint, const std::vector &, std::string &) override; - int data_atom_hybrid(int , const std::vector &, int) override; - void pack_data(double **) override; - int pack_data_hybrid(int, double *) override; - void write_data(FILE *, int, double **) override; - int write_data_hybrid(FILE *, double *) override; - double memory_usage() override; - void grow_pointers() override; int pack_border_kokkos(int n, DAT::tdual_int_2d k_sendlist, DAT::tdual_xfloat_2d buf,int iswap, @@ -75,11 +55,6 @@ class AtomVecChargeKokkos : public AtomVecKokkos { void sync_overlapping_device(ExecutionSpace space, unsigned int mask) override; protected: - tagint *tag; - int *type,*mask; - imageint *image; - double **x,**v,**f; - double *q; DAT::t_tagint_1d d_tag; @@ -98,12 +73,9 @@ class AtomVecChargeKokkos : public AtomVecKokkos { DAT::t_float_1d d_q; HAT::t_float_1d h_q; - - DAT::tdual_int_1d k_count; }; -} +} // namespace LAMMPS_NS #endif #endif - diff --git a/src/KOKKOS/atom_vec_dpd_kokkos.cpp b/src/KOKKOS/atom_vec_dpd_kokkos.cpp index defa7410f4..7bf54445e0 100644 --- a/src/KOKKOS/atom_vec_dpd_kokkos.cpp +++ b/src/KOKKOS/atom_vec_dpd_kokkos.cpp @@ -27,27 +27,9 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -AtomVecDPDKokkos::AtomVecDPDKokkos(LAMMPS *lmp) : AtomVecKokkos(lmp) +AtomVecDPDKokkos::AtomVecDPDKokkos(LAMMPS *lmp) : AtomVec(lmp), +AtomVecKokkos(lmp), AtomVecDPD(lmp) { - molecular = Atom::ATOMIC; - mass_type = PER_TYPE; - - comm_x_only = comm_f_only = 0; - size_forward = 7; - size_reverse = 3; - size_border = 12; - size_velocity = 3; - size_data_atom = 6; - size_data_vel = 4; - xcol_data = 4; - - atom->rho_flag = 1; - atom->dpd_flag = 1; - - k_count = DAT::tdual_int_1d("atom::k_count",1); - atomKK = (AtomKokkos *) atom; - commKK = (CommKokkos *) comm; - no_comm_vel_flag = 1; } @@ -153,44 +135,6 @@ void AtomVecDPDKokkos::grow_pointers() h_duChem = atomKK->k_duChem.h_view; } -/* ---------------------------------------------------------------------- - copy atom I info to atom J -------------------------------------------------------------------------- */ - -void AtomVecDPDKokkos::copy(int i, int j, int delflag) -{ - atomKK->sync(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK | DPDTHETA_MASK | - UCG_MASK | UCGNEW_MASK | - UCOND_MASK | UMECH_MASK | UCHEM_MASK | DVECTOR_MASK); - - h_tag[j] = h_tag[i]; - h_type[j] = h_type[i]; - mask[j] = mask[i]; - h_image[j] = h_image[i]; - h_x(j,0) = h_x(i,0); - h_x(j,1) = h_x(i,1); - h_x(j,2) = h_x(i,2); - h_v(j,0) = h_v(i,0); - h_v(j,1) = h_v(i,1); - h_v(j,2) = h_v(i,2); - h_dpdTheta[j] = h_dpdTheta[i]; - h_uCond[j] = h_uCond[i]; - h_uMech[j] = h_uMech[i]; - h_uChem[j] = h_uChem[i]; - h_uCG[j] = h_uCG[i]; - h_uCGnew[j] = h_uCGnew[i]; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->copy_arrays(i,j,delflag); - - atomKK->modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK | DPDTHETA_MASK | - UCG_MASK | UCGNEW_MASK | - UCOND_MASK | UMECH_MASK | UCHEM_MASK | DVECTOR_MASK); -} - /* ---------------------------------------------------------------------- */ template @@ -547,209 +491,6 @@ void AtomVecDPDKokkos::unpack_comm_kokkos(const int &n, const int &first, /* ---------------------------------------------------------------------- */ -int AtomVecDPDKokkos::pack_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz; - - atomKK->sync(Host,X_MASK|DPDTHETA_MASK|UCOND_MASK|UMECH_MASK|UCHEM_MASK); - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - buf[m++] = h_dpdTheta[j]; - buf[m++] = h_uCond[j]; - buf[m++] = h_uMech[j]; - buf[m++] = h_uChem[j]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = h_dpdTheta[j]; - buf[m++] = h_uCond[j]; - buf[m++] = h_uMech[j]; - buf[m++] = h_uChem[j]; - } - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecDPDKokkos::pack_comm_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - - atomKK->sync(Host,X_MASK|V_MASK|DPDTHETA_MASK|UCOND_MASK|UMECH_MASK|UCHEM_MASK); - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - buf[m++] = h_dpdTheta[j]; - buf[m++] = h_uCond[j]; - buf[m++] = h_uMech[j]; - buf[m++] = h_uChem[j]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - buf[m++] = h_dpdTheta[j]; - buf[m++] = h_uCond[j]; - buf[m++] = h_uMech[j]; - buf[m++] = h_uChem[j]; - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - if (mask[i] & deform_groupbit) { - buf[m++] = h_v(j,0) + dvx; - buf[m++] = h_v(j,1) + dvy; - buf[m++] = h_v(j,2) + dvz; - } else { - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - buf[m++] = h_dpdTheta(j); - buf[m++] = h_uCond(j); - buf[m++] = h_uMech(j); - buf[m++] = h_uChem(j); - } - } - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecDPDKokkos::unpack_comm(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - h_dpdTheta[i] = buf[m++]; - h_uCond[i] = buf[m++]; - h_uMech[i] = buf[m++]; - h_uChem[i] = buf[m++]; - } - - atomKK->modified(Host,X_MASK|DPDTHETA_MASK|UCOND_MASK|UMECH_MASK|UCHEM_MASK); -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecDPDKokkos::unpack_comm_vel(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - h_v(i,0) = buf[m++]; - h_v(i,1) = buf[m++]; - h_v(i,2) = buf[m++]; - h_dpdTheta[i] = buf[m++]; - h_uCond[i] = buf[m++]; - h_uMech[i] = buf[m++]; - h_uChem[i] = buf[m++]; - } - - atomKK->modified(Host,X_MASK|V_MASK|DPDTHETA_MASK|UCOND_MASK|UMECH_MASK|UCHEM_MASK); -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecDPDKokkos::pack_reverse(int n, int first, double *buf) -{ - if (n > 0) - atomKK->sync(Host,F_MASK); - - int m = 0; - const int last = first + n; - for (int i = first; i < last; i++) { - buf[m++] = h_f(i,0); - buf[m++] = h_f(i,1); - buf[m++] = h_f(i,2); - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecDPDKokkos::unpack_reverse(int n, int *list, double *buf) -{ - if (n > 0) { - atomKK->sync(Host,F_MASK); - atomKK->modified(Host,F_MASK); - } - - int m = 0; - for (int i = 0; i < n; i++) { - const int j = list[i]; - h_f(j,0) += buf[m++]; - h_f(j,1) += buf[m++]; - h_f(j,2) += buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - template struct AtomVecDPDKokkos_PackBorder { typedef DeviceType device_type; @@ -871,206 +612,6 @@ int AtomVecDPDKokkos::pack_border_kokkos(int n, DAT::tdual_int_2d k_sendlist, DA /* ---------------------------------------------------------------------- */ -int AtomVecDPDKokkos::pack_border(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz; - - atomKK->sync(Host,ALL_MASK); - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = h_dpdTheta(j); - buf[m++] = h_uCond(j); - buf[m++] = h_uMech(j); - buf[m++] = h_uChem(j); - buf[m++] = h_uCG(j); - buf[m++] = h_uCGnew(j); - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = h_dpdTheta(j); - buf[m++] = h_uCond(j); - buf[m++] = h_uMech(j); - buf[m++] = h_uChem(j); - buf[m++] = h_uCG(j); - buf[m++] = h_uCGnew(j); - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecDPDKokkos::pack_border_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - - atomKK->sync(Host,ALL_MASK); - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - buf[m++] = h_dpdTheta(j); - buf[m++] = h_uCond(j); - buf[m++] = h_uMech(j); - buf[m++] = h_uChem(j); - buf[m++] = h_uCG(j); - buf[m++] = h_uCGnew(j); - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - buf[m++] = h_dpdTheta(j); - buf[m++] = h_uCond(j); - buf[m++] = h_uMech(j); - buf[m++] = h_uChem(j); - buf[m++] = h_uCG(j); - buf[m++] = h_uCGnew(j); - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - if (mask[i] & deform_groupbit) { - buf[m++] = h_v(j,0) + dvx; - buf[m++] = h_v(j,1) + dvy; - buf[m++] = h_v(j,2) + dvz; - } else { - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - buf[m++] = h_dpdTheta(j); - buf[m++] = h_uCond(j); - buf[m++] = h_uMech(j); - buf[m++] = h_uChem(j); - buf[m++] = h_uCG(j); - buf[m++] = h_uCGnew(j); - } - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecDPDKokkos::pack_comm_hybrid(int n, int *list, double *buf) -{ - int i,j,m; - - atomKK->sync(Host,DPDTHETA_MASK | UCOND_MASK | - UMECH_MASK | UCHEM_MASK); - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_dpdTheta[j]; - buf[m++] = h_uCond[j]; - buf[m++] = h_uMech[j]; - buf[m++] = h_uChem[j]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecDPDKokkos::pack_border_hybrid(int n, int *list, double *buf) -{ - int i,j,m; - - atomKK->sync(Host,DPDTHETA_MASK | UCOND_MASK | - UMECH_MASK | UCHEM_MASK | UCG_MASK | UCGNEW_MASK); - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_dpdTheta[j]; - buf[m++] = h_uCond[j]; - buf[m++] = h_uMech[j]; - buf[m++] = h_uChem[j]; - buf[m++] = h_uCG[j]; - buf[m++] = h_uCGnew[j]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - template struct AtomVecDPDKokkos_UnpackBorder { typedef DeviceType device_type; @@ -1152,123 +693,6 @@ void AtomVecDPDKokkos::unpack_border_kokkos(const int &n, const int &first, /* ---------------------------------------------------------------------- */ -void AtomVecDPDKokkos::unpack_border(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - while (last > nmax) grow(0); - - for (i = first; i < last; i++) { - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - h_tag(i) = (tagint) ubuf(buf[m++]).i; - h_type(i) = (int) ubuf(buf[m++]).i; - h_mask(i) = (int) ubuf(buf[m++]).i; - h_dpdTheta(i) = buf[m++]; - h_uCond(i) = buf[m++]; - h_uMech(i) = buf[m++]; - h_uChem(i) = buf[m++]; - h_uCG(i) = buf[m++]; - h_uCGnew(i) = buf[m++]; - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); - - atomKK->modified(Host,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK| - DPDTHETA_MASK|UCOND_MASK|UMECH_MASK|UCHEM_MASK| - UCG_MASK|UCGNEW_MASK|DVECTOR_MASK); -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecDPDKokkos::unpack_border_vel(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - while (last > nmax) grow(0); - - for (i = first; i < last; i++) { - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - h_tag(i) = (tagint) ubuf(buf[m++]).i; - h_type(i) = (int) ubuf(buf[m++]).i; - h_mask(i) = (int) ubuf(buf[m++]).i; - h_v(i,0) = buf[m++]; - h_v(i,1) = buf[m++]; - h_v(i,2) = buf[m++]; - h_dpdTheta(i) = buf[m++]; - h_uCond(i) = buf[m++]; - h_uMech(i) = buf[m++]; - h_uChem(i) = buf[m++]; - h_uCG(i) = buf[m++]; - h_uCGnew(i) = buf[m++]; - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); - - atomKK->modified(Host,X_MASK|V_MASK|TAG_MASK|TYPE_MASK|MASK_MASK| - DPDTHETA_MASK|UCOND_MASK|UMECH_MASK|UCHEM_MASK| - UCG_MASK|UCGNEW_MASK|DVECTOR_MASK); -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecDPDKokkos::unpack_comm_hybrid(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - h_dpdTheta(i) = buf[m++]; - h_uCond(i) = buf[m++]; - h_uMech(i) = buf[m++]; - h_uChem(i) = buf[m++]; - } - - atomKK->modified(Host,DPDTHETA_MASK | UCOND_MASK | - UMECH_MASK | UCHEM_MASK ); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecDPDKokkos::unpack_border_hybrid(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - h_dpdTheta(i) = buf[m++]; - h_uCond(i) = buf[m++]; - h_uMech(i) = buf[m++]; - h_uChem(i) = buf[m++]; - h_uCG(i) = buf[m++]; - h_uCGnew(i) = buf[m++]; - } - - atomKK->modified(Host,DPDTHETA_MASK | UCOND_MASK | - UMECH_MASK | UCHEM_MASK | UCG_MASK | UCGNEW_MASK); - - return m; -} - -/* ---------------------------------------------------------------------- */ - template struct AtomVecDPDKokkos_PackExchangeFunctor { typedef DeviceType device_type; @@ -1401,41 +825,6 @@ int AtomVecDPDKokkos::pack_exchange_kokkos(const int &nsend,DAT::tdual_xfloat_2d /* ---------------------------------------------------------------------- */ -int AtomVecDPDKokkos::pack_exchange(int i, double *buf) -{ - atomKK->sync(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK| DPDTHETA_MASK | UCOND_MASK | - UMECH_MASK | UCHEM_MASK | UCG_MASK | UCGNEW_MASK | - DVECTOR_MASK); - - int m = 1; - buf[m++] = h_x(i,0); - buf[m++] = h_x(i,1); - buf[m++] = h_x(i,2); - buf[m++] = h_v(i,0); - buf[m++] = h_v(i,1); - buf[m++] = h_v(i,2); - buf[m++] = ubuf(h_tag(i)).d; - buf[m++] = ubuf(h_type(i)).d; - buf[m++] = ubuf(h_mask(i)).d; - buf[m++] = ubuf(h_image(i)).d; - buf[m++] = h_dpdTheta[i]; - buf[m++] = h_uCond[i]; - buf[m++] = h_uMech[i]; - buf[m++] = h_uChem[i]; - buf[m++] = h_uCG[i]; - buf[m++] = h_uCGnew[i]; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]->pack_exchange(i,&buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- */ - template struct AtomVecDPDKokkos_UnpackExchangeFunctor { typedef DeviceType device_type; @@ -1531,334 +920,6 @@ int AtomVecDPDKokkos::unpack_exchange_kokkos(DAT::tdual_xfloat_2d &k_buf,int nre /* ---------------------------------------------------------------------- */ -int AtomVecDPDKokkos::unpack_exchange(double *buf) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - int m = 1; - h_x(nlocal,0) = buf[m++]; - h_x(nlocal,1) = buf[m++]; - h_x(nlocal,2) = buf[m++]; - h_v(nlocal,0) = buf[m++]; - h_v(nlocal,1) = buf[m++]; - h_v(nlocal,2) = buf[m++]; - h_tag(nlocal) = (tagint) ubuf(buf[m++]).i; - h_type(nlocal) = (int) ubuf(buf[m++]).i; - h_mask(nlocal) = (int) ubuf(buf[m++]).i; - h_image(nlocal) = (imageint) ubuf(buf[m++]).i; - h_dpdTheta[nlocal] = buf[m++]; - h_uCond[nlocal] = buf[m++]; - h_uMech[nlocal] = buf[m++]; - h_uChem[nlocal] = buf[m++]; - h_uCG[nlocal] = buf[m++]; - h_uCGnew[nlocal] = buf[m++]; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]-> - unpack_exchange(nlocal,&buf[m]); - - atomKK->modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK| DPDTHETA_MASK | UCOND_MASK | - UMECH_MASK | UCHEM_MASK | UCG_MASK | UCGNEW_MASK | - DVECTOR_MASK); - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - size of restart data for all atoms owned by this proc - include extra data stored by fixes -------------------------------------------------------------------------- */ - -int AtomVecDPDKokkos::size_restart() -{ - int i; - - int nlocal = atom->nlocal; - int n = 15 * nlocal; // 11 + dpdTheta + uCond + uMech + uChem - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - for (i = 0; i < nlocal; i++) - n += modify->fix[atom->extra_restart[iextra]]->size_restart(i); - - return n; -} - -/* ---------------------------------------------------------------------- - pack atom I's data for restart file including extra quantities - xyz must be 1st 3 values, so that read_restart can test on them - molecular types may be negative, but write as positive -------------------------------------------------------------------------- */ - -int AtomVecDPDKokkos::pack_restart(int i, double *buf) -{ - atomKK->sync(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK | DPDTHETA_MASK | - UCOND_MASK | UMECH_MASK | UCHEM_MASK | DVECTOR_MASK); - - int m = 1; - buf[m++] = h_x(i,0); - buf[m++] = h_x(i,1); - buf[m++] = h_x(i,2); - buf[m++] = ubuf(h_tag(i)).d; - buf[m++] = ubuf(h_type(i)).d; - buf[m++] = ubuf(h_mask(i)).d; - buf[m++] = ubuf(h_image(i)).d; - buf[m++] = h_v(i,0); - buf[m++] = h_v(i,1); - buf[m++] = h_v(i,2); - buf[m++] = h_dpdTheta[i]; - buf[m++] = h_uCond[i]; - buf[m++] = h_uMech[i]; - buf[m++] = h_uChem[i]; - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - m += modify->fix[atom->extra_restart[iextra]]->pack_restart(i,&buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- - unpack data for one atom from restart file including extra quantities -------------------------------------------------------------------------- */ - -int AtomVecDPDKokkos::unpack_restart(double *buf) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) { - grow(0); - if (atom->nextra_store) - memory->grow(atom->extra,nmax,atom->nextra_store,"atom:extra"); - } - - int m = 1; - h_x(nlocal,0) = buf[m++]; - h_x(nlocal,1) = buf[m++]; - h_x(nlocal,2) = buf[m++]; - h_tag(nlocal) = (tagint) ubuf(buf[m++]).i; - h_type(nlocal) = (int) ubuf(buf[m++]).i; - h_mask(nlocal) = (int) ubuf(buf[m++]).i; - h_image(nlocal) = (imageint) ubuf(buf[m++]).i; - h_v(nlocal,0) = buf[m++]; - h_v(nlocal,1) = buf[m++]; - h_v(nlocal,2) = buf[m++]; - h_dpdTheta[nlocal] = buf[m++]; - h_uCond[nlocal] = buf[m++]; - h_uMech[nlocal] = buf[m++]; - h_uChem[nlocal] = buf[m++]; - h_uCG[nlocal] = 0.0; - h_uCGnew[nlocal] = 0.0; - - double **extra = atom->extra; - if (atom->nextra_store) { - int size = static_cast (buf[0]) - m; - for (int i = 0; i < size; i++) extra[nlocal][i] = buf[m++]; - } - - atomKK->modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK | DPDTHETA_MASK | - UCG_MASK | UCGNEW_MASK | - UCOND_MASK | UMECH_MASK | UCHEM_MASK | DVECTOR_MASK); - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - create one atom of itype at coord - set other values to defaults -------------------------------------------------------------------------- */ - -void AtomVecDPDKokkos::create_atom(int itype, double *coord) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) { - //if(nlocal>2) printf("typeA: %i %i\n",type[0],type[1]); - atomKK->modified(Host,ALL_MASK); - grow(0); - //if(nlocal>2) printf("typeB: %i %i\n",type[0],type[1]); - } - atomKK->modified(Host,ALL_MASK); - - tag[nlocal] = 0; - type[nlocal] = itype; - h_x(nlocal,0) = coord[0]; - h_x(nlocal,1) = coord[1]; - h_x(nlocal,2) = coord[2]; - h_mask[nlocal] = 1; - h_image[nlocal] = ((tagint) IMGMAX << IMG2BITS) | - ((tagint) IMGMAX << IMGBITS) | IMGMAX; - h_v(nlocal,0) = 0.0; - h_v(nlocal,1) = 0.0; - h_v(nlocal,2) = 0.0; - h_rho[nlocal] = 0.0; - h_dpdTheta[nlocal] = 0.0; - h_uCond[nlocal] = 0.0; - h_uMech[nlocal] = 0.0; - h_uChem[nlocal] = 0.0; - h_uCG[nlocal] = 0.0; - h_uCGnew[nlocal] = 0.0; - h_duChem[nlocal] = 0.0; - - //atomKK->modified(Host,TAG_MASK|TYPE_MASK|DPDTHETA_MASK|X_MASK|IMAGE_MASK| - // MASK_MASK|V_MASK|DPDRHO_MASK|UCOND_MASK|UMECH_MASK| - // UCHEM_MASK|UCG_MASK|UCGNEW_MASK); - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack one line from Atoms section of data file - initialize other atom quantities -------------------------------------------------------------------------- */ - -void AtomVecDPDKokkos::data_atom(double *coord, imageint imagetmp, - const std::vector &values, std::string &extract) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - h_tag[nlocal] = utils::tnumeric(FLERR,values[0],true,lmp); - h_type[nlocal] = utils::inumeric(FLERR,values[1],true,lmp); - extract = values[1]; - if (type[nlocal] <= 0 || type[nlocal] > atom->ntypes) - error->one(FLERR,"Invalid atom type in Atoms section of data file"); - - h_dpdTheta[nlocal] = utils::numeric(FLERR,values[2],true,lmp); - if (h_dpdTheta[nlocal] <= 0) - error->one(FLERR,"Internal temperature in Atoms section of date file must be > zero"); - - h_x(nlocal,0) = coord[0]; - h_x(nlocal,1) = coord[1]; - h_x(nlocal,2) = coord[2]; - - h_image[nlocal] = imagetmp; - - h_mask[nlocal] = 1; - h_v(nlocal,0) = 0.0; - h_v(nlocal,1) = 0.0; - h_v(nlocal,2) = 0.0; - - h_rho[nlocal] = 0.0; - h_uCond[nlocal] = 0.0; - h_uMech[nlocal] = 0.0; - h_uChem[nlocal] = 0.0; - h_uCG[nlocal] = 0.0; - h_uCGnew[nlocal] = 0.0; - - atomKK->modified(Host,ALL_MASK); - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack hybrid quantities from one line in Atoms section of data file - initialize other atom quantities for this sub-style -------------------------------------------------------------------------- */ - -int AtomVecDPDKokkos::data_atom_hybrid(int nlocal, const std::vector &values, - int offset) -{ - h_dpdTheta(nlocal) = utils::numeric(FLERR,values[offset],true,lmp); - - atomKK->modified(Host,DPDTHETA_MASK); - - return 1; -} - -/* ---------------------------------------------------------------------- - pack atom info for data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecDPDKokkos::pack_data(double **buf) -{ - atomKK->sync(Host,TAG_MASK|TYPE_MASK|DPDTHETA_MASK|X_MASK|IMAGE_MASK); - - int nlocal = atom->nlocal; - for (int i = 0; i < nlocal; i++) { - buf[i][0] = ubuf(h_tag(i)).d; - buf[i][1] = ubuf(h_type(i)).d; - buf[i][2] = h_dpdTheta(i); - buf[i][3] = h_x(i,0); - buf[i][4] = h_x(i,1); - buf[i][5] = h_x(i,2); - buf[i][6] = (h_image[i] & IMGMASK) - IMGMAX; - buf[i][7] = (h_image[i] >> IMGBITS & IMGMASK) - IMGMAX; - buf[i][8] = (h_image[i] >> IMG2BITS) - IMGMAX; - } -} - -/* ---------------------------------------------------------------------- - pack hybrid atom info for data file -------------------------------------------------------------------------- */ - -int AtomVecDPDKokkos::pack_data_hybrid(int i, double *buf) -{ - atomKK->sync(Host,DPDTHETA_MASK); - - buf[0] = h_dpdTheta(i); - return 1; -} - -/* ---------------------------------------------------------------------- - write atom info to data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecDPDKokkos::write_data(FILE *fp, int n, double **buf) -{ - for (int i = 0; i < n; i++) - fprintf(fp,TAGINT_FORMAT " %d %-1.16e %-1.16e %-1.16e %-1.16e %d %d %d\n", - (tagint) ubuf(buf[i][0]).i,(int) ubuf(buf[i][1]).i, - buf[i][2],buf[i][3],buf[i][4],buf[i][5], - (int) ubuf(buf[i][6]).i,(int) ubuf(buf[i][7]).i, - (int) ubuf(buf[i][8]).i); -} - -/* ---------------------------------------------------------------------- - write hybrid atom info to data file -------------------------------------------------------------------------- */ - -int AtomVecDPDKokkos::write_data_hybrid(FILE *fp, double *buf) -{ - fprintf(fp," %-1.16e",buf[0]); - return 1; -} - -/* ---------------------------------------------------------------------- - return # of bytes of allocated memory -------------------------------------------------------------------------- */ - -double AtomVecDPDKokkos::memory_usage() -{ - double bytes = 0; - - if (atom->memcheck("tag")) bytes += memory->usage(tag,nmax); - if (atom->memcheck("type")) bytes += memory->usage(type,nmax); - if (atom->memcheck("mask")) bytes += memory->usage(mask,nmax); - if (atom->memcheck("image")) bytes += memory->usage(image,nmax); - if (atom->memcheck("x")) bytes += memory->usage(x,nmax,3); - if (atom->memcheck("v")) bytes += memory->usage(v,nmax,3); - if (atom->memcheck("f")) bytes += memory->usage(f,nmax*commKK->nthreads,3); - if (atom->memcheck("rho")) bytes += memory->usage(rho,nmax); - if (atom->memcheck("dpdTheta")) bytes += memory->usage(dpdTheta,nmax); - if (atom->memcheck("uCond")) bytes += memory->usage(uCond,nmax); - if (atom->memcheck("uMech")) bytes += memory->usage(uMech,nmax); - if (atom->memcheck("uChem")) bytes += memory->usage(uChem,nmax); - if (atom->memcheck("uCG")) bytes += memory->usage(uCG,nmax); - if (atom->memcheck("uCGnew")) bytes += memory->usage(uCGnew,nmax); - if (atom->memcheck("duChem")) bytes += memory->usage(duChem,nmax); - - return bytes; -} - -/* ---------------------------------------------------------------------- */ - void AtomVecDPDKokkos::sync(ExecutionSpace space, unsigned int mask) { if (space == Device) { @@ -2011,4 +1072,3 @@ void AtomVecDPDKokkos::modified(ExecutionSpace space, unsigned int mask) if (mask & DVECTOR_MASK) atomKK->k_dvector.modify(); } } - diff --git a/src/KOKKOS/atom_vec_dpd_kokkos.h b/src/KOKKOS/atom_vec_dpd_kokkos.h index d0f0087a08..203bbb19a5 100644 --- a/src/KOKKOS/atom_vec_dpd_kokkos.h +++ b/src/KOKKOS/atom_vec_dpd_kokkos.h @@ -24,44 +24,16 @@ AtomStyle(dpd/kk/host,AtomVecDPDKokkos); #define LMP_ATOM_VEC_DPD_KOKKOS_H #include "atom_vec_kokkos.h" +#include "atom_vec_dpd.h" #include "kokkos_type.h" namespace LAMMPS_NS { -class AtomVecDPDKokkos : public AtomVecKokkos { +class AtomVecDPDKokkos : public AtomVecKokkos, public AtomVecDPD { public: AtomVecDPDKokkos(class LAMMPS *); void grow(int) override; - void copy(int, int, int) override; - int pack_comm(int, int *, double *, int, int *) override; - int pack_comm_vel(int, int *, double *, int, int *) override; - int pack_comm_hybrid(int, int *, double *) override; - void unpack_comm(int, int, double *) override; - void unpack_comm_vel(int, int, double *) override; - int unpack_comm_hybrid(int, int, double *) override; - int pack_reverse(int, int, double *) override; - void unpack_reverse(int, int *, double *) override; - int pack_border(int, int *, double *, int, int *) override; - int pack_border_vel(int, int *, double *, int, int *) override; - int pack_border_hybrid(int, int *, double *) override; - void unpack_border(int, int, double *) override; - void unpack_border_vel(int, int, double *) override; - int unpack_border_hybrid(int, int, double *) override; - int pack_exchange(int, double *) override; - int unpack_exchange(double *) override; - int size_restart() override; - int pack_restart(int, double *) override; - int unpack_restart(double *) override; - void create_atom(int, double *) override; - void data_atom(double *, imageint, const std::vector &, std::string &) override; - int data_atom_hybrid(int, const std::vector &, int) override; - void pack_data(double **) override; - int pack_data_hybrid(int, double *) override; - void write_data(FILE *, int, double **) override; - int write_data_hybrid(FILE *, double *) override; - double memory_usage() override; - void grow_pointers() override; int pack_comm_kokkos(const int &n, const DAT::tdual_int_2d &k_sendlist, const int & iswap, @@ -90,18 +62,13 @@ class AtomVecDPDKokkos : public AtomVecKokkos { void sync(ExecutionSpace space, unsigned int mask) override; void modified(ExecutionSpace space, unsigned int mask) override; void sync_overlapping_device(ExecutionSpace space, unsigned int mask) override; - double *uCond,*uMech,*uChem,*uCG,*uCGnew,*rho,*dpdTheta; + double *duChem; protected: DAT::t_efloat_1d d_uCond, d_uMech, d_uChem, d_uCG, d_uCGnew,d_rho,d_dpdTheta,d_duChem; HAT::t_efloat_1d h_uCond, h_uMech, h_uChem, h_uCG, h_uCGnew,h_rho,h_dpdTheta,h_duChem; - tagint *tag; - imageint *image; - int *type,*mask; - double **x,**v,**f; - DAT::t_tagint_1d d_tag; HAT::t_tagint_1d h_tag; DAT::t_imageint_1d d_image; @@ -112,12 +79,9 @@ class AtomVecDPDKokkos : public AtomVecKokkos { DAT::t_x_array d_x; DAT::t_v_array d_v; DAT::t_f_array d_f; - - DAT::tdual_int_1d k_count; }; -} +} // namespace LAMMPS_NS #endif #endif - diff --git a/src/KOKKOS/atom_vec_full_kokkos.cpp b/src/KOKKOS/atom_vec_full_kokkos.cpp index 96c7e5312a..bce165240b 100644 --- a/src/KOKKOS/atom_vec_full_kokkos.cpp +++ b/src/KOKKOS/atom_vec_full_kokkos.cpp @@ -27,26 +27,10 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -AtomVecFullKokkos::AtomVecFullKokkos(LAMMPS *lmp) : AtomVecKokkos(lmp) +AtomVecFullKokkos::AtomVecFullKokkos(LAMMPS *lmp) : AtomVec(lmp), +AtomVecKokkos(lmp), AtomVecFull(lmp) { - molecular = Atom::MOLECULAR; - bonds_allow = angles_allow = dihedrals_allow = impropers_allow = 1; - mass_type = PER_TYPE; - comm_x_only = comm_f_only = 1; - size_forward = 3; - size_reverse = 3; - size_border = 8; - size_velocity = 3; - size_data_atom = 7; - size_data_vel = 4; - xcol_data = 5; - - atom->molecule_flag = atom->q_flag = 1; - - k_count = DAT::tdual_int_1d("atom::k_count",1); - atomKK = (AtomKokkos *) atom; - commKK = (CommKokkos *) comm; } /* ---------------------------------------------------------------------- @@ -241,71 +225,6 @@ void AtomVecFullKokkos::grow_pointers() h_improper_atom4 = atomKK->k_improper_atom4.h_view; } -/* ---------------------------------------------------------------------- - copy atom I info to atom J -------------------------------------------------------------------------- */ - -void AtomVecFullKokkos::copy(int i, int j, int delflag) -{ - int k; - - h_tag[j] = h_tag[i]; - h_type[j] = h_type[i]; - mask[j] = mask[i]; - h_image[j] = h_image[i]; - h_x(j,0) = h_x(i,0); - h_x(j,1) = h_x(i,1); - h_x(j,2) = h_x(i,2); - h_v(j,0) = h_v(i,0); - h_v(j,1) = h_v(i,1); - h_v(j,2) = h_v(i,2); - - h_q[j] = h_q[i]; - h_molecule(j) = h_molecule(i); - - h_num_bond(j) = h_num_bond(i); - for (k = 0; k < h_num_bond(j); k++) { - h_bond_type(j,k) = h_bond_type(i,k); - h_bond_atom(j,k) = h_bond_atom(i,k); - } - - h_nspecial(j,0) = h_nspecial(i,0); - h_nspecial(j,1) = h_nspecial(i,1); - h_nspecial(j,2) = h_nspecial(i,2); - for (k = 0; k < h_nspecial(j,2); k++) - h_special(j,k) = h_special(i,k); - - h_num_angle(j) = h_num_angle(i); - for (k = 0; k < h_num_angle(j); k++) { - h_angle_type(j,k) = h_angle_type(i,k); - h_angle_atom1(j,k) = h_angle_atom1(i,k); - h_angle_atom2(j,k) = h_angle_atom2(i,k); - h_angle_atom3(j,k) = h_angle_atom3(i,k); - } - - h_num_dihedral(j) = h_num_dihedral(i); - for (k = 0; k < h_num_dihedral(j); k++) { - h_dihedral_type(j,k) = h_dihedral_type(i,k); - h_dihedral_atom1(j,k) = h_dihedral_atom1(i,k); - h_dihedral_atom2(j,k) = h_dihedral_atom2(i,k); - h_dihedral_atom3(j,k) = h_dihedral_atom3(i,k); - h_dihedral_atom4(j,k) = h_dihedral_atom4(i,k); - } - - h_num_improper(j) = h_num_improper(i); - for (k = 0; k < h_num_improper(j); k++) { - h_improper_type(j,k) = h_improper_type(i,k); - h_improper_atom1(j,k) = h_improper_atom1(i,k); - h_improper_atom2(j,k) = h_improper_atom2(i,k); - h_improper_atom3(j,k) = h_improper_atom3(i,k); - h_improper_atom4(j,k) = h_improper_atom4(i,k); - } - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->copy_arrays(i,j,delflag); -} - /* ---------------------------------------------------------------------- */ template @@ -413,155 +332,6 @@ int AtomVecFullKokkos::pack_border_kokkos(int n, DAT::tdual_int_2d k_sendlist, /* ---------------------------------------------------------------------- */ -int AtomVecFullKokkos::pack_border(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = h_q(j); - buf[m++] = ubuf(h_molecule(j)).d; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = h_q(j); - buf[m++] = ubuf(h_molecule(j)).d; - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecFullKokkos::pack_border_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = h_q(j); - buf[m++] = ubuf(h_molecule(j)).d; - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = h_q(j); - buf[m++] = ubuf(h_molecule(j)).d; - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = h_q(j); - buf[m++] = ubuf(h_molecule(j)).d; - if (mask[i] & deform_groupbit) { - buf[m++] = h_v(j,0) + dvx; - buf[m++] = h_v(j,1) + dvy; - buf[m++] = h_v(j,2) + dvz; - } else { - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - } - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecFullKokkos::pack_border_hybrid(int n, int *list, double *buf) -{ - int i,j,m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_q(j); - buf[m++] = ubuf(h_molecule(j)).d; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - template struct AtomVecFullKokkos_UnpackBorder { typedef DeviceType device_type; @@ -628,82 +398,6 @@ void AtomVecFullKokkos::unpack_border_kokkos(const int &n, const int &first, /* ---------------------------------------------------------------------- */ -void AtomVecFullKokkos::unpack_border(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - while (last > nmax) grow(0); - - for (i = first; i < last; i++) { - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - h_tag(i) = (tagint) ubuf(buf[m++]).i; - h_type(i) = (int) ubuf(buf[m++]).i; - h_mask(i) = (int) ubuf(buf[m++]).i; - h_q(i) = buf[m++]; - h_molecule(i) = (tagint) ubuf(buf[m++]).i; - } - - atomKK->modified(Host,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|Q_MASK|MOLECULE_MASK); - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecFullKokkos::unpack_border_vel(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - while (last > nmax) grow(0); - - for (i = first; i < last; i++) { - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - h_tag(i) = (tagint) ubuf(buf[m++]).i; - h_type(i) = (int) ubuf(buf[m++]).i; - h_mask(i) = (int) ubuf(buf[m++]).i; - h_q(i) = buf[m++]; - h_molecule(i) = (tagint) ubuf(buf[m++]).i; - h_v(i,0) = buf[m++]; - h_v(i,1) = buf[m++]; - h_v(i,2) = buf[m++]; - } - - atomKK->modified(Host,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|Q_MASK|MOLECULE_MASK|V_MASK); - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecFullKokkos::unpack_border_hybrid(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - h_q(i) = buf[m++]; - h_molecule(i) = (tagint) ubuf(buf[m++]).i; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - template struct AtomVecFullKokkos_PackExchangeFunctor { typedef DeviceType device_type; @@ -983,66 +677,6 @@ int AtomVecFullKokkos::pack_exchange_kokkos(const int &nsend,DAT::tdual_xfloat_2 /* ---------------------------------------------------------------------- */ -int AtomVecFullKokkos::pack_exchange(int i, double *buf) -{ - int k; - int m = 1; - buf[m++] = h_x(i,0); - buf[m++] = h_x(i,1); - buf[m++] = h_x(i,2); - buf[m++] = h_v(i,0); - buf[m++] = h_v(i,1); - buf[m++] = h_v(i,2); - buf[m++] = ubuf(h_tag(i)).d; - buf[m++] = ubuf(h_type(i)).d; - buf[m++] = ubuf(h_mask(i)).d; - buf[m++] = ubuf(h_image(i)).d; - buf[m++] = h_q(i); - buf[m++] = ubuf(h_molecule(i)).d; - buf[m++] = ubuf(h_num_bond(i)).d; - for (k = 0; k < h_num_bond(i); k++) { - buf[m++] = ubuf(h_bond_type(i,k)).d; - buf[m++] = ubuf(h_bond_atom(i,k)).d; - } - buf[m++] = ubuf(h_num_angle(i)).d; - for (k = 0; k < h_num_angle(i); k++) { - buf[m++] = ubuf(h_angle_type(i,k)).d; - buf[m++] = ubuf(h_angle_atom1(i,k)).d; - buf[m++] = ubuf(h_angle_atom2(i,k)).d; - buf[m++] = ubuf(h_angle_atom3(i,k)).d; - } - buf[m++] = ubuf(h_num_dihedral(i)).d; - for (k = 0; k < h_num_dihedral(i); k++) { - buf[m++] = ubuf(h_dihedral_type(i,k)).d; - buf[m++] = ubuf(h_dihedral_atom1(i,k)).d; - buf[m++] = ubuf(h_dihedral_atom2(i,k)).d; - buf[m++] = ubuf(h_dihedral_atom3(i,k)).d; - buf[m++] = ubuf(h_dihedral_atom4(i,k)).d; - } - buf[m++] = ubuf(h_num_improper(i)).d; - for (k = 0; k < h_num_improper(i); k++) { - buf[m++] = ubuf(h_improper_type(i,k)).d; - buf[m++] = ubuf(h_improper_atom1(i,k)).d; - buf[m++] = ubuf(h_improper_atom2(i,k)).d; - buf[m++] = ubuf(h_improper_atom3(i,k)).d; - buf[m++] = ubuf(h_improper_atom4(i,k)).d; - } - buf[m++] = ubuf(h_nspecial(i,0)).d; - buf[m++] = ubuf(h_nspecial(i,1)).d; - buf[m++] = ubuf(h_nspecial(i,2)).d; - for (k = 0; k < h_nspecial(i,2); k++) - buf[m++] = ubuf(h_special(i,k)).d; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]->pack_exchange(i,&buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- */ - template struct AtomVecFullKokkos_UnpackExchangeFunctor { typedef DeviceType device_type; @@ -1211,457 +845,6 @@ int AtomVecFullKokkos::unpack_exchange_kokkos(DAT::tdual_xfloat_2d &k_buf,int nr /* ---------------------------------------------------------------------- */ -int AtomVecFullKokkos::unpack_exchange(double *buf) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - atomKK->modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK | Q_MASK | MOLECULE_MASK | BOND_MASK | - ANGLE_MASK | DIHEDRAL_MASK | IMPROPER_MASK | SPECIAL_MASK); - - int k; - int m = 1; - h_x(nlocal,0) = buf[m++]; - h_x(nlocal,1) = buf[m++]; - h_x(nlocal,2) = buf[m++]; - h_v(nlocal,0) = buf[m++]; - h_v(nlocal,1) = buf[m++]; - h_v(nlocal,2) = buf[m++]; - h_tag(nlocal) = (tagint) ubuf(buf[m++]).i; - h_type(nlocal) = (int) ubuf(buf[m++]).i; - h_mask(nlocal) = (int) ubuf(buf[m++]).i; - h_image(nlocal) = (imageint) ubuf(buf[m++]).i; - h_q(nlocal) = buf[m++]; - h_molecule(nlocal) = (tagint) ubuf(buf[m++]).i; - - h_num_bond(nlocal) = (int) ubuf(buf[m++]).i; - for (k = 0; k < h_num_bond(nlocal); k++) { - h_bond_type(nlocal,k) = (int) ubuf(buf[m++]).i; - h_bond_atom(nlocal,k) = (tagint) ubuf(buf[m++]).i; - } - h_num_angle(nlocal) = (int) ubuf(buf[m++]).i; - for (k = 0; k < h_num_angle(nlocal); k++) { - h_angle_type(nlocal,k) = (int) ubuf(buf[m++]).i; - h_angle_atom1(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_angle_atom2(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_angle_atom3(nlocal,k) = (tagint) ubuf(buf[m++]).i; - } - h_num_dihedral(nlocal) = (int) ubuf(buf[m++]).i; - for (k = 0; k < h_num_dihedral(nlocal); k++) { - h_dihedral_type(nlocal,k) = (int) ubuf(buf[m++]).i; - h_dihedral_atom1(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_dihedral_atom2(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_dihedral_atom3(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_dihedral_atom4(nlocal,k) = (tagint) ubuf(buf[m++]).i; - } - h_num_improper(nlocal) = (int) ubuf(buf[m++]).i; - for (k = 0; k < h_num_improper(nlocal); k++) { - h_improper_type(nlocal,k) = (int) ubuf(buf[m++]).i; - h_improper_atom1(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_improper_atom2(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_improper_atom3(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_improper_atom4(nlocal,k) = (tagint) ubuf(buf[m++]).i; - } - h_nspecial(nlocal,0) = (int) ubuf(buf[m++]).i; - h_nspecial(nlocal,1) = (int) ubuf(buf[m++]).i; - h_nspecial(nlocal,2) = (int) ubuf(buf[m++]).i; - for (k = 0; k < h_nspecial(nlocal,2); k++) - h_special(nlocal,k) = (tagint) ubuf(buf[m++]).i; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]-> - unpack_exchange(nlocal,&buf[m]); - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - size of restart data for all atoms owned by this proc - include extra data stored by fixes -------------------------------------------------------------------------- */ - -int AtomVecFullKokkos::size_restart() -{ - int i; - - int nlocal = atom->nlocal; - int n = 0; - for (i = 0; i < nlocal; i++) - n += 17 + 2*num_bond[i] + 4*num_angle[i] + - 5*num_dihedral[i] + 5*num_improper[i]; - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - for (i = 0; i < nlocal; i++) - n += modify->fix[atom->extra_restart[iextra]]->size_restart(i); - - return n; -} - -/* ---------------------------------------------------------------------- - pack atom I's data for restart file including extra quantities - xyz must be 1st 3 values, so that read_restart can test on them - molecular types may be negative, but write as positive -------------------------------------------------------------------------- */ - -int AtomVecFullKokkos::pack_restart(int i, double *buf) -{ - atomKK->sync(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK | Q_MASK | MOLECULE_MASK | BOND_MASK | - ANGLE_MASK | DIHEDRAL_MASK | IMPROPER_MASK | SPECIAL_MASK); - - int m = 1; - buf[m++] = h_x(i,0); - buf[m++] = h_x(i,1); - buf[m++] = h_x(i,2); - buf[m++] = ubuf(h_tag(i)).d; - buf[m++] = ubuf(h_type(i)).d; - buf[m++] = ubuf(h_mask(i)).d; - buf[m++] = ubuf(h_image(i)).d; - buf[m++] = h_v(i,0); - buf[m++] = h_v(i,1); - buf[m++] = h_v(i,2); - - buf[m++] = h_q(i); - buf[m++] = ubuf(h_molecule(i)).d; - - buf[m++] = ubuf(h_num_bond(i)).d; - for (int k = 0; k < h_num_bond(i); k++) { - buf[m++] = ubuf(MAX(h_bond_type(i,k),-h_bond_type(i,k))).d; - buf[m++] = ubuf(h_bond_atom(i,k)).d; - } - - buf[m++] = ubuf(h_num_angle(i)).d; - for (int k = 0; k < h_num_angle(i); k++) { - buf[m++] = ubuf(MAX(h_angle_type(i,k),-h_angle_type(i,k))).d; - buf[m++] = ubuf(h_angle_atom1(i,k)).d; - buf[m++] = ubuf(h_angle_atom2(i,k)).d; - buf[m++] = ubuf(h_angle_atom3(i,k)).d; - } - - buf[m++] = ubuf(h_num_dihedral(i)).d; - for (int k = 0; k < h_num_dihedral(i); k++) { - buf[m++] = ubuf(MAX(h_dihedral_type(i,k),-h_dihedral_type(i,k))).d; - buf[m++] = ubuf(h_dihedral_atom1(i,k)).d; - buf[m++] = ubuf(h_dihedral_atom2(i,k)).d; - buf[m++] = ubuf(h_dihedral_atom3(i,k)).d; - buf[m++] = ubuf(h_dihedral_atom4(i,k)).d; - } - - buf[m++] = ubuf(h_num_improper(i)).d; - for (int k = 0; k < h_num_improper(i); k++) { - buf[m++] = ubuf(MAX(h_improper_type(i,k),-h_improper_type(i,k))).d; - buf[m++] = ubuf(h_improper_atom1(i,k)).d; - buf[m++] = ubuf(h_improper_atom2(i,k)).d; - buf[m++] = ubuf(h_improper_atom3(i,k)).d; - buf[m++] = ubuf(h_improper_atom4(i,k)).d; - } - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - m += modify->fix[atom->extra_restart[iextra]]->pack_restart(i,&buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- - unpack data for one atom from restart file including extra quantities -------------------------------------------------------------------------- */ - -int AtomVecFullKokkos::unpack_restart(double *buf) -{ - int k; - - int nlocal = atom->nlocal; - if (nlocal == nmax) { - grow(0); - if (atom->nextra_store) - memory->grow(atom->extra,nmax,atom->nextra_store,"atom:extra"); - } - atomKK->sync(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK | Q_MASK | MOLECULE_MASK | BOND_MASK | - ANGLE_MASK | DIHEDRAL_MASK | IMPROPER_MASK | SPECIAL_MASK); - atomKK->modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK | Q_MASK | MOLECULE_MASK | BOND_MASK | - ANGLE_MASK | DIHEDRAL_MASK | IMPROPER_MASK | SPECIAL_MASK); - - int m = 1; - h_x(nlocal,0) = buf[m++]; - h_x(nlocal,1) = buf[m++]; - h_x(nlocal,2) = buf[m++]; - h_tag(nlocal) = (tagint) ubuf(buf[m++]).i; - h_type(nlocal) = (int) ubuf(buf[m++]).i; - h_mask(nlocal) = (int) ubuf(buf[m++]).i; - h_image(nlocal) = (imageint) ubuf(buf[m++]).i; - h_v(nlocal,0) = buf[m++]; - h_v(nlocal,1) = buf[m++]; - h_v(nlocal,2) = buf[m++]; - - h_q(nlocal) = buf[m++]; - h_molecule(nlocal) = (tagint) ubuf(buf[m++]).i; - - h_num_bond(nlocal) = (int) ubuf(buf[m++]).i; - for (k = 0; k < h_num_bond(nlocal); k++) { - h_bond_type(nlocal,k) = (int) ubuf(buf[m++]).i; - h_bond_atom(nlocal,k) = (tagint) ubuf(buf[m++]).i; - } - - h_num_angle(nlocal) = (int) ubuf(buf[m++]).i; - for (k = 0; k < h_num_angle(nlocal); k++) { - h_angle_type(nlocal,k) = (int) ubuf(buf[m++]).i; - h_angle_atom1(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_angle_atom2(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_angle_atom3(nlocal,k) = (tagint) ubuf(buf[m++]).i; - } - - h_num_dihedral(nlocal) = (int) ubuf(buf[m++]).i; - for (k = 0; k < h_num_dihedral(nlocal); k++) { - h_dihedral_type(nlocal,k) = (int) ubuf(buf[m++]).i; - h_dihedral_atom1(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_dihedral_atom2(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_dihedral_atom3(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_dihedral_atom4(nlocal,k) = (tagint) ubuf(buf[m++]).i; - } - - h_num_improper(nlocal) = (int) ubuf(buf[m++]).i; - for (k = 0; k < h_num_improper(nlocal); k++) { - h_improper_type(nlocal,k) = (int) ubuf(buf[m++]).i; - h_improper_atom1(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_improper_atom2(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_improper_atom3(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_improper_atom4(nlocal,k) = (tagint) ubuf(buf[m++]).i; - } - - h_nspecial(nlocal,0) = h_nspecial(nlocal,1) = h_nspecial(nlocal,2) = 0; - - double **extra = atom->extra; - if (atom->nextra_store) { - int size = static_cast (buf[0]) - m; - for (int i = 0; i < size; i++) extra[nlocal][i] = buf[m++]; - } - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - create one atom of itype at coord - set other values to defaults -------------------------------------------------------------------------- */ - -void AtomVecFullKokkos::create_atom(int itype, double *coord) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) { - atomKK->modified(Host,ALL_MASK); - grow(0); - } - atomKK->sync(Host,ALL_MASK); - atomKK->modified(Host,ALL_MASK); - - tag[nlocal] = 0; - type[nlocal] = itype; - h_x(nlocal,0) = coord[0]; - h_x(nlocal,1) = coord[1]; - h_x(nlocal,2) = coord[2]; - h_mask(nlocal) = 1; - h_image(nlocal) = ((imageint) IMGMAX << IMG2BITS) | - ((imageint) IMGMAX << IMGBITS) | IMGMAX; - h_v(nlocal,0) = 0.0; - h_v(nlocal,1) = 0.0; - h_v(nlocal,2) = 0.0; - - h_q(nlocal) = 0.0; - h_molecule(nlocal) = 0; - h_num_bond(nlocal) = 0; - h_num_angle(nlocal) = 0; - h_num_dihedral(nlocal) = 0; - h_num_improper(nlocal) = 0; - h_nspecial(nlocal,0) = h_nspecial(nlocal,1) = h_nspecial(nlocal,2) = 0; - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack one line from Atoms section of data file - initialize other atom quantities -------------------------------------------------------------------------- */ - -void AtomVecFullKokkos::data_atom(double *coord, imageint imagetmp, - const std::vector &values, std::string &extract) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - atomKK->modified(Host,ALL_MASK); - - h_tag(nlocal) = utils::inumeric(FLERR,values[0],true,lmp); - h_molecule(nlocal) = utils::inumeric(FLERR,values[1],true,lmp); - h_type(nlocal) = utils::inumeric(FLERR,values[2],true,lmp); - extract = values[2]; - if (h_type(nlocal) <= 0 || h_type(nlocal) > atom->ntypes) - error->one(FLERR,"Invalid atom type in Atoms section of data file"); - - h_q(nlocal) = utils::numeric(FLERR,values[3],true,lmp); - - h_x(nlocal,0) = coord[0]; - h_x(nlocal,1) = coord[1]; - h_x(nlocal,2) = coord[2]; - - h_image(nlocal) = imagetmp; - - h_mask(nlocal) = 1; - h_v(nlocal,0) = 0.0; - h_v(nlocal,1) = 0.0; - h_v(nlocal,2) = 0.0; - h_num_bond(nlocal) = 0; - h_num_angle(nlocal) = 0; - h_num_dihedral(nlocal) = 0; - h_num_improper(nlocal) = 0; - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack hybrid quantities from one line in Atoms section of data file - initialize other atom quantities for this sub-style -------------------------------------------------------------------------- */ - -int AtomVecFullKokkos::data_atom_hybrid(int nlocal, const std::vector &values, - int offset) -{ - h_molecule(nlocal) = utils::inumeric(FLERR,values[offset],true,lmp); - h_q(nlocal) = utils::numeric(FLERR,values[offset+1],true,lmp); - h_num_bond(nlocal) = 0; - h_num_angle(nlocal) = 0; - h_num_dihedral(nlocal) = 0; - h_num_improper(nlocal) = 0; - return 2; -} - -/* ---------------------------------------------------------------------- - pack atom info for data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecFullKokkos::pack_data(double **buf) -{ - int nlocal = atom->nlocal; - for (int i = 0; i < nlocal; i++) { - buf[i][0] = h_tag(i); - buf[i][1] = h_molecule(i); - buf[i][2] = h_type(i); - buf[i][3] = h_q(i); - buf[i][4] = h_x(i,0); - buf[i][5] = h_x(i,1); - buf[i][6] = h_x(i,2); - buf[i][7] = (h_image[i] & IMGMASK) - IMGMAX; - buf[i][8] = (h_image[i] >> IMGBITS & IMGMASK) - IMGMAX; - buf[i][9] = (h_image[i] >> IMG2BITS) - IMGMAX; - } -} - -/* ---------------------------------------------------------------------- - pack hybrid atom info for data file -------------------------------------------------------------------------- */ - -int AtomVecFullKokkos::pack_data_hybrid(int i, double *buf) -{ - buf[0] = h_molecule(i); - buf[1] = h_q(i); - return 2; -} - -/* ---------------------------------------------------------------------- - write atom info to data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecFullKokkos::write_data(FILE *fp, int n, double **buf) -{ - for (int i = 0; i < n; i++) - fprintf(fp,"%d %d %d %-1.16e %-1.16e %-1.16e %-1.16e %d %d %d\n", - (int) buf[i][0],(int) buf[i][1], (int) buf[i][2], buf[i][3], - buf[i][4],buf[i][5],buf[i][6], - (int) buf[i][7],(int) buf[i][8],(int) buf[i][9]); -} - -/* ---------------------------------------------------------------------- - write hybrid atom info to data file -------------------------------------------------------------------------- */ - -int AtomVecFullKokkos::write_data_hybrid(FILE *fp, double *buf) -{ - fprintf(fp," " TAGINT_FORMAT " %-1.16e",(tagint) ubuf(buf[0]).i,buf[1]); - return 2; -} - -/* ---------------------------------------------------------------------- - return # of bytes of allocated memory -------------------------------------------------------------------------- */ - -double AtomVecFullKokkos::memory_usage() -{ - double bytes = 0; - - if (atom->memcheck("tag")) bytes += memory->usage(tag,nmax); - if (atom->memcheck("type")) bytes += memory->usage(type,nmax); - if (atom->memcheck("mask")) bytes += memory->usage(mask,nmax); - if (atom->memcheck("image")) bytes += memory->usage(image,nmax); - if (atom->memcheck("x")) bytes += memory->usage(x,nmax,3); - if (atom->memcheck("v")) bytes += memory->usage(v,nmax,3); - if (atom->memcheck("f")) bytes += memory->usage(f,nmax*commKK->nthreads,3); - - if (atom->memcheck("q")) bytes += memory->usage(q,nmax); - if (atom->memcheck("molecule")) bytes += memory->usage(molecule,nmax); - if (atom->memcheck("nspecial")) bytes += memory->usage(nspecial,nmax,3); - if (atom->memcheck("special")) - bytes += memory->usage(special,nmax,atom->maxspecial); - - if (atom->memcheck("num_bond")) bytes += memory->usage(num_bond,nmax); - if (atom->memcheck("bond_type")) - bytes += memory->usage(bond_type,nmax,atom->bond_per_atom); - if (atom->memcheck("bond_atom")) - bytes += memory->usage(bond_atom,nmax,atom->bond_per_atom); - - if (atom->memcheck("num_angle")) bytes += memory->usage(num_angle,nmax); - if (atom->memcheck("angle_type")) - bytes += memory->usage(angle_type,nmax,atom->angle_per_atom); - if (atom->memcheck("angle_atom1")) - bytes += memory->usage(angle_atom1,nmax,atom->angle_per_atom); - if (atom->memcheck("angle_atom2")) - bytes += memory->usage(angle_atom2,nmax,atom->angle_per_atom); - if (atom->memcheck("angle_atom3")) - bytes += memory->usage(angle_atom3,nmax,atom->angle_per_atom); - - if (atom->memcheck("num_dihedral")) bytes += memory->usage(num_dihedral,nmax); - if (atom->memcheck("dihedral_type")) - bytes += memory->usage(dihedral_type,nmax,atom->dihedral_per_atom); - if (atom->memcheck("dihedral_atom1")) - bytes += memory->usage(dihedral_atom1,nmax,atom->dihedral_per_atom); - if (atom->memcheck("dihedral_atom2")) - bytes += memory->usage(dihedral_atom2,nmax,atom->dihedral_per_atom); - if (atom->memcheck("dihedral_atom3")) - bytes += memory->usage(dihedral_atom3,nmax,atom->dihedral_per_atom); - if (atom->memcheck("dihedral_atom4")) - bytes += memory->usage(dihedral_atom4,nmax,atom->dihedral_per_atom); - if (atom->memcheck("num_improper")) bytes += memory->usage(num_improper,nmax); - if (atom->memcheck("improper_type")) - bytes += memory->usage(improper_type,nmax,atom->improper_per_atom); - if (atom->memcheck("improper_atom1")) - bytes += memory->usage(improper_atom1,nmax,atom->improper_per_atom); - if (atom->memcheck("improper_atom2")) - bytes += memory->usage(improper_atom2,nmax,atom->improper_per_atom); - if (atom->memcheck("improper_atom3")) - bytes += memory->usage(improper_atom3,nmax,atom->improper_per_atom); - if (atom->memcheck("improper_atom4")) - bytes += memory->usage(improper_atom4,nmax,atom->improper_per_atom); - - return bytes; -} - -/* ---------------------------------------------------------------------- */ - void AtomVecFullKokkos::sync(ExecutionSpace space, unsigned int mask) { if (space == Device) { @@ -1992,4 +1175,3 @@ void AtomVecFullKokkos::modified(ExecutionSpace space, unsigned int mask) } } } - diff --git a/src/KOKKOS/atom_vec_full_kokkos.h b/src/KOKKOS/atom_vec_full_kokkos.h index 72e48ed513..3985f19dcb 100644 --- a/src/KOKKOS/atom_vec_full_kokkos.h +++ b/src/KOKKOS/atom_vec_full_kokkos.h @@ -24,35 +24,15 @@ AtomStyle(full/kk/host,AtomVecFullKokkos); #define LMP_ATOM_VEC_FULL_KOKKOS_H #include "atom_vec_kokkos.h" +#include "atom_vec_full.h" namespace LAMMPS_NS { -class AtomVecFullKokkos : public AtomVecKokkos { +class AtomVecFullKokkos : public AtomVecKokkos, public AtomVecFull { public: AtomVecFullKokkos(class LAMMPS *); void grow(int) override; - void copy(int, int, int) override; - int pack_border(int, int *, double *, int, int *) override; - int pack_border_vel(int, int *, double *, int, int *) override; - int pack_border_hybrid(int, int *, double *) override; - void unpack_border(int, int, double *) override; - void unpack_border_vel(int, int, double *) override; - int unpack_border_hybrid(int, int, double *) override; - int pack_exchange(int, double *) override; - int unpack_exchange(double *) override; - int size_restart() override; - int pack_restart(int, double *) override; - int unpack_restart(double *) override; - void create_atom(int, double *) override; - void data_atom(double *, imageint, const std::vector &, std::string &) override; - int data_atom_hybrid(int, const std::vector &, int) override; - void pack_data(double **) override; - int pack_data_hybrid(int, double *) override; - void write_data(FILE *, int, double **) override; - int write_data_hybrid(FILE *, double *) override; - double memory_usage() override; - void grow_pointers() override; int pack_border_kokkos(int n, DAT::tdual_int_2d k_sendlist, DAT::tdual_xfloat_2d buf,int iswap, @@ -74,30 +54,12 @@ class AtomVecFullKokkos : public AtomVecKokkos { void sync_overlapping_device(ExecutionSpace space, unsigned int mask) override; protected: - - tagint *tag; - int *type,*mask; - imageint *image; - double **x,**v,**f; - double *q; - tagint *molecule; - int **nspecial; tagint **special; - int *num_bond; - int **bond_type; tagint **bond_atom; - - int *num_angle; - int **angle_type; tagint **angle_atom1,**angle_atom2,**angle_atom3; - - int *num_dihedral; - int **dihedral_type; tagint **dihedral_atom1,**dihedral_atom2,**dihedral_atom3,**dihedral_atom4; - int *num_improper; - int **improper_type; tagint **improper_atom1,**improper_atom2,**improper_atom3,**improper_atom4; DAT::t_tagint_1d d_tag; @@ -154,9 +116,6 @@ class AtomVecFullKokkos : public AtomVecKokkos { HAT::t_int_2d h_improper_type; HAT::t_tagint_2d h_improper_atom1,h_improper_atom2, h_improper_atom3,h_improper_atom4; - - HAT::tdual_int_1d k_count; - }; } diff --git a/src/KOKKOS/atom_vec_hybrid_kokkos.cpp b/src/KOKKOS/atom_vec_hybrid_kokkos.cpp index 9a7709a699..c8bccc00c8 100644 --- a/src/KOKKOS/atom_vec_hybrid_kokkos.cpp +++ b/src/KOKKOS/atom_vec_hybrid_kokkos.cpp @@ -28,7 +28,9 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -AtomVecHybridKokkos::AtomVecHybridKokkos(LAMMPS *lmp) : AtomVecKokkos(lmp) { +AtomVecHybridKokkos::AtomVecHybridKokkos(LAMMPS *lmp) : AtomVec(lmp), +AtomVecKokkos(lmp), AtomVecHybrid(lmp) +{ no_comm_vel_flag = 1; no_border_vel_flag = 1; } @@ -37,218 +39,7 @@ AtomVecHybridKokkos::AtomVecHybridKokkos(LAMMPS *lmp) : AtomVecKokkos(lmp) { AtomVecHybridKokkos::~AtomVecHybridKokkos() { - for (int k = 0; k < nstyles; k++) delete styles[k]; - delete [] styles; - for (int k = 0; k < nstyles; k++) delete [] keywords[k]; - delete [] keywords; -} -/* ---------------------------------------------------------------------- - process sub-style args -------------------------------------------------------------------------- */ - -void AtomVecHybridKokkos::process_args(int narg, char **arg) -{ - // build list of all known atom styles - - build_styles(); - - // allocate list of sub-styles as big as possibly needed if no extra args - - styles = new AtomVec*[narg]; - keywords = new char*[narg]; - - // allocate each sub-style - // call process_args() with set of args that are not atom style names - // use known_style() to determine which args these are - - int i,jarg,dummy; - - int iarg = 0; - nstyles = 0; - while (iarg < narg) { - if (strcmp(arg[iarg],"hybrid") == 0) - error->all(FLERR,"Atom style hybrid cannot have hybrid as an argument"); - for (i = 0; i < nstyles; i++) - if (strcmp(arg[iarg],keywords[i]) == 0) - error->all(FLERR,"Atom style hybrid cannot use same atom style twice"); - styles[nstyles] = atom->new_avec(arg[iarg],1,dummy); - keywords[nstyles] = utils::strdup(arg[iarg]); - jarg = iarg + 1; - while (jarg < narg && !known_style(arg[jarg])) jarg++; - styles[nstyles]->process_args(jarg-iarg-1,&arg[iarg+1]); - iarg = jarg; - nstyles++; - } - - // free allstyles created by build_styles() - - for (int i = 0; i < nallstyles; i++) delete [] allstyles[i]; - delete [] allstyles; - - // hybrid settings are MAX or MIN of sub-style settings - // hybrid sizes are minimal values plus extra values for each sub-style - - molecular = Atom::ATOMIC; - comm_x_only = comm_f_only = 1; - - size_forward = 3; - size_reverse = 3; - size_border = 6; - size_data_atom = 5; - size_data_vel = 4; - xcol_data = 3; - - for (int k = 0; k < nstyles; k++) { - if ((styles[k]->molecular == Atom::MOLECULAR && molecular == Atom::TEMPLATE) || - (styles[k]->molecular == Atom::TEMPLATE && molecular == Atom::MOLECULAR)) - error->all(FLERR,"Cannot mix molecular and molecule template " - "atom styles"); - molecular = MAX(molecular,styles[k]->molecular); - - bonds_allow = MAX(bonds_allow,styles[k]->bonds_allow); - angles_allow = MAX(angles_allow,styles[k]->angles_allow); - dihedrals_allow = MAX(dihedrals_allow,styles[k]->dihedrals_allow); - impropers_allow = MAX(impropers_allow,styles[k]->impropers_allow); - mass_type = MAX(mass_type,styles[k]->mass_type); - dipole_type = MAX(dipole_type,styles[k]->dipole_type); - forceclearflag = MAX(forceclearflag,styles[k]->forceclearflag); - - if (styles[k]->molecular == Atom::TEMPLATE) onemols = styles[k]->onemols; - - comm_x_only = MIN(comm_x_only,styles[k]->comm_x_only); - comm_f_only = MIN(comm_f_only,styles[k]->comm_f_only); - size_forward += styles[k]->size_forward - 3; - size_reverse += styles[k]->size_reverse - 3; - size_border += styles[k]->size_border - 6; - size_data_atom += styles[k]->size_data_atom - 5; - size_data_vel += styles[k]->size_data_vel - 4; - } - - size_velocity = 3; - if (atom->omega_flag) size_velocity += 3; - if (atom->angmom_flag) size_velocity += 3; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecHybridKokkos::init() -{ - AtomVec::init(); - for (int k = 0; k < nstyles; k++) styles[k]->init(); -} - -/* ---------------------------------------------------------------------- - grow atom arrays - n = 0 grows arrays by a chunk - n > 0 allocates arrays to size n -------------------------------------------------------------------------- */ - -void AtomVecHybridKokkos::grow(int n) -{ - if (n == 0) grow_nmax(); - else nmax = n; - atom->nmax = nmax; - if (nmax < 0 || nmax > MAXSMALLINT) - error->one(FLERR,"Per-processor system is too big"); - - // sub-styles perform all reallocation - // turn off nextra_grow so hybrid can do that once below - - int tmp = atom->nextra_grow; - atom->nextra_grow = 0; - for (int k = 0; k < nstyles; k++) styles[k]->grow(nmax); - atom->nextra_grow = tmp; - - // insure hybrid local ptrs and sub-style ptrs are up to date - // for sub-styles, do this in case - // multiple sub-style reallocs of same array occurred - - grow_pointers(); - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->grow_arrays(nmax); -} - -/* ---------------------------------------------------------------------- - reset local array ptrs -------------------------------------------------------------------------- */ - -void AtomVecHybridKokkos::grow_pointers() -{ - tag = atomKK->tag; - d_tag = atomKK->k_tag.d_view; - h_tag = atomKK->k_tag.h_view; - - type = atomKK->type; - d_type = atomKK->k_type.d_view; - h_type = atomKK->k_type.h_view; - - mask = atomKK->mask; - d_mask = atomKK->k_mask.d_view; - h_mask = atomKK->k_mask.h_view; - - image = atomKK->image; - d_image = atomKK->k_image.d_view; - h_image = atomKK->k_image.h_view; - - x = atomKK->x; - d_x = atomKK->k_x.d_view; - h_x = atomKK->k_x.h_view; - - v = atomKK->v; - d_v = atomKK->k_v.d_view; - h_v = atomKK->k_v.h_view; - - f = atomKK->f; - d_f = atomKK->k_f.d_view; - h_f = atomKK->k_f.h_view; - - v = atomKK->v; - d_v = atomKK->k_v.d_view; - h_v = atomKK->k_v.h_view; - - omega = atomKK->omega; - d_omega = atomKK->k_omega.d_view; - h_omega = atomKK->k_omega.h_view; - - angmom = atomKK->angmom; - d_angmom = atomKK->k_angmom.d_view; - h_angmom = atomKK->k_angmom.h_view; - - for (int k = 0; k < nstyles; k++) styles[k]->grow_pointers(); -} - -/* ---------------------------------------------------------------------- - copy atom I info to atom J for all sub-styles -------------------------------------------------------------------------- */ - -void AtomVecHybridKokkos::copy(int i, int j, int delflag) -{ - int tmp = atom->nextra_grow; - atom->nextra_grow = 0; - for (int k = 0; k < nstyles; k++) styles[k]->copy(i,j,delflag); - atom->nextra_grow = tmp; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->copy_arrays(i,j,delflag); -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecHybridKokkos::clear_bonus() -{ - for (int k = 0; k < nstyles; k++) styles[k]->clear_bonus(); -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecHybridKokkos::force_clear(int n, size_t nbytes) -{ - for (int k = 0; k < nstyles; k++) - if (styles[k]->forceclearflag) styles[k]->force_clear(n,nbytes); } /* ---------------------------------------------------------------------- */ @@ -261,11 +52,13 @@ int AtomVecHybridKokkos::pack_comm_kokkos(const int &/*n*/, const DAT::tdual_int error->all(FLERR,"AtomVecHybridKokkos doesn't yet support threaded comm"); return 0; } + void AtomVecHybridKokkos::unpack_comm_kokkos(const int &/*n*/, const int &/*nfirst*/, const DAT::tdual_xfloat_2d &/*buf*/) { error->all(FLERR,"AtomVecHybridKokkos doesn't yet support threaded comm"); } + int AtomVecHybridKokkos::pack_comm_self(const int &/*n*/, const DAT::tdual_int_2d &/*list*/, const int & /*iswap*/, const int /*nfirst*/, const int &/*pbc_flag*/, const int pbc[]) @@ -273,6 +66,7 @@ int AtomVecHybridKokkos::pack_comm_self(const int &/*n*/, const DAT::tdual_int_2 error->all(FLERR,"AtomVecHybridKokkos doesn't yet support threaded comm"); return 0; } + int AtomVecHybridKokkos::pack_border_kokkos(int /*n*/, DAT::tdual_int_2d /*k_sendlist*/, DAT::tdual_xfloat_2d /*buf*/,int /*iswap*/, int /*pbc_flag*/, int * /*pbc*/, ExecutionSpace /*space*/) @@ -280,12 +74,14 @@ int AtomVecHybridKokkos::pack_border_kokkos(int /*n*/, DAT::tdual_int_2d /*k_sen error->all(FLERR,"AtomVecHybridKokkos doesn't yet support threaded comm"); return 0; } + void AtomVecHybridKokkos::unpack_border_kokkos(const int &/*n*/, const int &/*nfirst*/, const DAT::tdual_xfloat_2d &/*buf*/, ExecutionSpace /*space*/) { error->all(FLERR,"AtomVecHybridKokkos doesn't yet support threaded comm"); } + int AtomVecHybridKokkos::pack_exchange_kokkos(const int &/*nsend*/,DAT::tdual_xfloat_2d &/*buf*/, DAT::tdual_int_1d /*k_sendlist*/, DAT::tdual_int_1d /*k_copylist*/, @@ -295,6 +91,7 @@ int AtomVecHybridKokkos::pack_exchange_kokkos(const int &/*nsend*/,DAT::tdual_xf error->all(FLERR,"AtomVecHybridKokkos doesn't yet support threaded comm"); return 0; } + int AtomVecHybridKokkos::unpack_exchange_kokkos(DAT::tdual_xfloat_2d & /*k_buf*/, int /*nrecv*/, int /*nlocal*/, int /*dim*/, X_FLOAT /*lo*/, X_FLOAT /*hi*/, ExecutionSpace /*space*/) @@ -303,921 +100,25 @@ int AtomVecHybridKokkos::unpack_exchange_kokkos(DAT::tdual_xfloat_2d & /*k_buf*/ return 0; } -/* ---------------------------------------------------------------------- */ - -int AtomVecHybridKokkos::pack_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - atomKK->sync(Host,X_MASK); - - int i,j,k,m; - double dx,dy,dz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - } - } - - // pack sub-style contributions as contiguous chunks - - for (k = 0; k < nstyles; k++) - m += styles[k]->pack_comm_hybrid(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecHybridKokkos::pack_comm_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - atomKK->sync(Host,X_MASK|V_MASK|OMEGA_MASK/*|ANGMOM_MASK*/); - - int i,j,k,m; - double dx,dy,dz,dvx,dvy,dvz; - int omega_flag = atom->omega_flag; - int angmom_flag = atom->angmom_flag; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - if (omega_flag) { - buf[m++] = h_omega(j,0); - buf[m++] = h_omega(j,1); - buf[m++] = h_omega(j,2); - } - if (angmom_flag) { - buf[m++] = h_angmom(j,0); - buf[m++] = h_angmom(j,1); - buf[m++] = h_angmom(j,2); - } - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - if (omega_flag) { - buf[m++] = h_omega(j,0); - buf[m++] = h_omega(j,1); - buf[m++] = h_omega(j,2); - } - if (angmom_flag) { - buf[m++] = h_angmom(j,0); - buf[m++] = h_angmom(j,1); - buf[m++] = h_angmom(j,2); - } - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - if (h_mask[i] & deform_groupbit) { - buf[m++] = h_v(j,0) + dvx; - buf[m++] = h_v(j,1) + dvy; - buf[m++] = h_v(j,2) + dvz; - } else { - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - if (omega_flag) { - buf[m++] = h_omega(j,0); - buf[m++] = h_omega(j,1); - buf[m++] = h_omega(j,2); - } - if (angmom_flag) { - buf[m++] = h_angmom(j,0); - buf[m++] = h_angmom(j,1); - buf[m++] = h_angmom(j,2); - } - } - } - } - - // pack sub-style contributions as contiguous chunks - - for (k = 0; k < nstyles; k++) - m += styles[k]->pack_comm_hybrid(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecHybridKokkos::unpack_comm(int n, int first, double *buf) -{ - int i,k,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - } - - atomKK->modified(Host,X_MASK); - - // unpack sub-style contributions as contiguous chunks - - for (k = 0; k < nstyles; k++) - m += styles[k]->unpack_comm_hybrid(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecHybridKokkos::unpack_comm_vel(int n, int first, double *buf) -{ - int i,k,m,last; - int omega_flag = atom->omega_flag; - int angmom_flag = atom->angmom_flag; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - h_v(i,0) = buf[m++]; - h_v(i,1) = buf[m++]; - h_v(i,2) = buf[m++]; - if (omega_flag) { - h_omega(i,0) = buf[m++]; - h_omega(i,1) = buf[m++]; - h_omega(i,2) = buf[m++]; - } - if (angmom_flag) { - h_angmom(i,0) = buf[m++]; - h_angmom(i,1) = buf[m++]; - h_angmom(i,2) = buf[m++]; - } - } - - atomKK->modified(Host,X_MASK|V_MASK|OMEGA_MASK/*|ANGMOM_MASK*/); - - // unpack sub-style contributions as contiguous chunks - - for (k = 0; k < nstyles; k++) - m += styles[k]->unpack_comm_hybrid(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecHybridKokkos::pack_reverse(int n, int first, double *buf) -{ - atomKK->sync(Host,F_MASK); - - int i,k,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - buf[m++] = h_f(i,0); - buf[m++] = h_f(i,1); - buf[m++] = h_f(i,2); - } - - // pack sub-style contributions as contiguous chunks - - for (k = 0; k < nstyles; k++) - m += styles[k]->pack_reverse_hybrid(n,first,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecHybridKokkos::unpack_reverse(int n, int *list, double *buf) -{ - int i,j,k,m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - h_f(j,0) += buf[m++]; - h_f(j,1) += buf[m++]; - h_f(j,2) += buf[m++]; - } - - atomKK->modified(Host,F_MASK); - - // unpack sub-style contributions as contiguous chunks - - for (k = 0; k < nstyles; k++) - m += styles[k]->unpack_reverse_hybrid(n,list,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecHybridKokkos::pack_border(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - atomKK->sync(Host,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK); - - int i,j,k,m; - double dx,dy,dz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - buf[m++] = ubuf(h_tag[j]).d; - buf[m++] = ubuf(h_type[j]).d; - buf[m++] = ubuf(h_mask[j]).d; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = ubuf(h_tag[j]).d; - buf[m++] = ubuf(h_type[j]).d; - buf[m++] = ubuf(h_mask[j]).d; - } - } - - // pack sub-style contributions as contiguous chunks - - for (k = 0; k < nstyles; k++) - m += styles[k]->pack_border_hybrid(n,list,&buf[m]); - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecHybridKokkos::pack_border_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - atomKK->sync(Host,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|V_MASK|OMEGA_MASK/*|ANGMOM_MASK*/); - int i,j,k,m; - double dx,dy,dz,dvx,dvy,dvz; - int omega_flag = atom->omega_flag; - int angmom_flag = atom->angmom_flag; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - buf[m++] = ubuf(h_tag[j]).d; - buf[m++] = ubuf(h_type[j]).d; - buf[m++] = ubuf(h_mask[j]).d; - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - if (omega_flag) { - buf[m++] = h_omega(j,0); - buf[m++] = h_omega(j,1); - buf[m++] = h_omega(j,2); - } - if (angmom_flag) { - buf[m++] = h_angmom(j,0); - buf[m++] = h_angmom(j,1); - buf[m++] = h_angmom(j,2); - } - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = ubuf(h_tag[j]).d; - buf[m++] = ubuf(h_type[j]).d; - buf[m++] = ubuf(h_mask[j]).d; - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - if (omega_flag) { - buf[m++] = h_omega(j,0); - buf[m++] = h_omega(j,1); - buf[m++] = h_omega(j,2); - } - if (angmom_flag) { - buf[m++] = h_angmom(j,0); - buf[m++] = h_angmom(j,1); - buf[m++] = h_angmom(j,2); - } - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = ubuf(h_tag[j]).d; - buf[m++] = ubuf(h_type[j]).d; - buf[m++] = ubuf(h_mask[j]).d; - if (h_mask[i] & deform_groupbit) { - buf[m++] = h_v(j,0) + dvx; - buf[m++] = h_v(j,1) + dvy; - buf[m++] = h_v(j,2) + dvz; - } else { - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - if (omega_flag) { - buf[m++] = h_omega(j,0); - buf[m++] = h_omega(j,1); - buf[m++] = h_omega(j,2); - } - if (angmom_flag) { - buf[m++] = h_angmom(j,0); - buf[m++] = h_angmom(j,1); - buf[m++] = h_angmom(j,2); - } - } - } - } - - // pack sub-style contributions as contiguous chunks - - for (k = 0; k < nstyles; k++) - m += styles[k]->pack_border_hybrid(n,list,&buf[m]); - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecHybridKokkos::unpack_border(int n, int first, double *buf) -{ - int i,k,m,last; - - m = 0; - last = first + n; - while (last > nmax) grow(0); - - for (i = first; i < last; i++) { - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - h_tag[i] = (tagint) ubuf(buf[m++]).i; - h_type[i] = (int) ubuf(buf[m++]).i; - h_mask[i] = (int) ubuf(buf[m++]).i; - } - - atomKK->modified(Host,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK); - - // unpack sub-style contributions as contiguous chunks - - for (k = 0; k < nstyles; k++) - m += styles[k]->unpack_border_hybrid(n,first,&buf[m]); - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecHybridKokkos::unpack_border_vel(int n, int first, double *buf) -{ - int i,k,m,last; - int omega_flag = atom->omega_flag; - int angmom_flag = atom->angmom_flag; - - m = 0; - last = first + n; - while (last > nmax) grow(0); - - for (i = first; i < last; i++) { - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - h_tag[i] = (tagint) ubuf(buf[m++]).i; - h_type[i] = (int) ubuf(buf[m++]).i; - h_mask[i] = (int) ubuf(buf[m++]).i; - h_v(i,0) = buf[m++]; - h_v(i,1) = buf[m++]; - h_v(i,2) = buf[m++]; - if (omega_flag) { - h_omega(i,0) = buf[m++]; - h_omega(i,1) = buf[m++]; - h_omega(i,2) = buf[m++]; - } - if (angmom_flag) { - h_angmom(i,0) = buf[m++]; - h_angmom(i,1) = buf[m++]; - h_angmom(i,2) = buf[m++]; - } - } - - atomKK->modified(Host,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|V_MASK|OMEGA_MASK/*|ANGMOM_MASK*/); - - // unpack sub-style contributions as contiguous chunks - - for (k = 0; k < nstyles; k++) - m += styles[k]->unpack_border_hybrid(n,first,&buf[m]); - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- - pack data for atom I for sending to another proc - pack each sub-style one after the other -------------------------------------------------------------------------- */ - -int AtomVecHybridKokkos::pack_exchange(int i, double *buf) -{ - int k,m; - - int tmp = atom->nextra_grow; - atom->nextra_grow = 0; - - m = 0; - for (k = 0; k < nstyles; k++) - m += styles[k]->pack_exchange(i,&buf[m]); - - atom->nextra_grow = tmp; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]->pack_exchange(i,&buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- - unpack data for single atom received from another proc - unpack each sub-style one after the other - grow() occurs here so arrays for all sub-styles are grown -------------------------------------------------------------------------- */ - -int AtomVecHybridKokkos::unpack_exchange(double *buf) -{ - int k,m; - - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - int tmp = atom->nextra_grow; - atom->nextra_grow = 0; - - m = 0; - for (k = 0; k < nstyles; k++) { - m += styles[k]->unpack_exchange(&buf[m]); - atom->nlocal--; - } - - atom->nextra_grow = tmp; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]-> - unpack_exchange(nlocal,&buf[m]); - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - size of restart data for all atoms owned by this proc - include extra data stored by fixes -------------------------------------------------------------------------- */ - -int AtomVecHybridKokkos::size_restart() -{ - int tmp = atom->nextra_restart; - atom->nextra_restart = 0; - - int n = 0; - for (int k = 0; k < nstyles; k++) - n += styles[k]->size_restart(); - - atom->nextra_restart = tmp; - - int nlocal = atom->nlocal; - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - for (int i = 0; i < nlocal; i++) - n += modify->fix[atom->extra_restart[iextra]]->size_restart(i); - - return n; -} - -/* ---------------------------------------------------------------------- - pack atom I's data for restart file including extra quantities - xyz must be 1st 3 values, so that read_restart can test on them - pack each sub-style one after the other -------------------------------------------------------------------------- */ - -int AtomVecHybridKokkos::pack_restart(int i, double *buf) -{ - int tmp = atom->nextra_restart; - atom->nextra_restart = 0; - - int m = 0; - for (int k = 0; k < nstyles; k++) - m += styles[k]->pack_restart(i,&buf[m]); - - atom->nextra_restart = tmp; - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - m += modify->fix[atom->extra_restart[iextra]]->pack_restart(i,&buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- - unpack data for one atom from restart file including extra quantities - unpack each sub-style one after the other - grow() occurs here so arrays for all sub-styles are grown -------------------------------------------------------------------------- */ - -int AtomVecHybridKokkos::unpack_restart(double *buf) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) { - grow(0); - if (atom->nextra_store) - memory->grow(atom->extra,nmax,atom->nextra_store,"atom:extra"); - } - - int tmp = atom->nextra_store; - atom->nextra_store = 0; - - int m = 0; - for (int k = 0; k < nstyles; k++) { - m += styles[k]->unpack_restart(&buf[m]); - atom->nlocal--; - } - atom->nextra_store = tmp; - - double **extra = atom->extra; - if (atom->nextra_store) { - int size = static_cast (buf[0]) - m; - for (int i = 0; i < size; i++) extra[nlocal][i] = buf[m++]; - } - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - create one atom of itype at coord - create each sub-style one after the other - grow() occurs here so arrays for all sub-styles are grown -------------------------------------------------------------------------- */ - -void AtomVecHybridKokkos::create_atom(int itype, double *coord) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - for (int k = 0; k < nstyles; k++) { - styles[k]->create_atom(itype,coord); - atom->nlocal--; - } - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack one line from Atoms section of data file - grow() occurs here so arrays for all sub-styles are grown -------------------------------------------------------------------------- */ - -void AtomVecHybridKokkos::data_atom(double *coord, imageint imagetmp, - const std::vector &values, std::string &extract) -{ - atomKK->sync(Host,X_MASK|TAG_MASK|TYPE_MASK|IMAGE_MASK|MASK_MASK|V_MASK|OMEGA_MASK/*|ANGMOM_MASK*/); - - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - h_tag[nlocal] = utils::tnumeric(FLERR,values[0],true,lmp); - h_type[nlocal] = utils::inumeric(FLERR,values[1],true,lmp); - extract = values[1]; - if (h_type[nlocal] <= 0 || h_type[nlocal] > atom->ntypes) - error->one(FLERR,"Invalid atom h_type in Atoms section of data file"); - - h_x(nlocal,0) = coord[0]; - h_x(nlocal,1) = coord[1]; - h_x(nlocal,2) = coord[2]; - - h_image[nlocal] = imagetmp; - h_mask[nlocal] = 1; - - h_v(nlocal,0) = 0.0; - h_v(nlocal,1) = 0.0; - h_v(nlocal,2) = 0.0; - if (atom->omega_flag) { - h_omega(nlocal,0) = 0.0; - h_omega(nlocal,1) = 0.0; - h_omega(nlocal,2) = 0.0; - } - if (atom->angmom_flag) { - h_angmom(nlocal,0) = 0.0; - h_angmom(nlocal,1) = 0.0; - h_angmom(nlocal,2) = 0.0; - } - - atomKK->modified(Host,X_MASK|TAG_MASK|TYPE_MASK|IMAGE_MASK|MASK_MASK|V_MASK|OMEGA_MASK/*|ANGMOM_MASK*/); - - // each sub-style parses sub-style specific values - - int m = 5; - for (int k = 0; k < nstyles; k++) - m += styles[k]->data_atom_hybrid(nlocal,values,m); - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack one line from Velocities section of data file -------------------------------------------------------------------------- */ - -void AtomVecHybridKokkos::data_vel(int m, const std::vector &values) -{ - atomKK->sync(Host,V_MASK); - - int ivalue = 1; - h_v(m,0) = utils::numeric(FLERR,values[ivalue++],true,lmp); - h_v(m,1) = utils::numeric(FLERR,values[ivalue++],true,lmp); - h_v(m,2) = utils::numeric(FLERR,values[ivalue++],true,lmp); - - atomKK->modified(Host,V_MASK); - - // each sub-style parses sub-style specific values - - for (int k = 0; k < nstyles; k++) - ivalue += styles[k]->data_vel_hybrid(m,values,ivalue); -} - -/* ---------------------------------------------------------------------- - pack atom info for data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecHybridKokkos::pack_data(double **buf) -{ - atomKK->sync(Host,TAG_MASK|TYPE_MASK|X_MASK); - - int k,m; - - int nlocal = atom->nlocal; - for (int i = 0; i < nlocal; i++) { - buf[i][0] = ubuf(h_tag[i]).d; - buf[i][1] = ubuf(h_type[i]).d; - buf[i][2] = h_x(i,0); - buf[i][3] = h_x(i,1); - buf[i][4] = h_x(i,2); - - m = 5; - for (k = 0; k < nstyles; k++) - m += styles[k]->pack_data_hybrid(i,&buf[i][m]); - - buf[i][m] = ubuf((h_image[i] & IMGMASK) - IMGMAX).d; - buf[i][m+1] = ubuf((h_image[i] >> IMGBITS & IMGMASK) - IMGMAX).d; - buf[i][m+2] = ubuf((h_image[i] >> IMG2BITS) - IMGMAX).d; - } -} - -/* ---------------------------------------------------------------------- - write atom info to data file including 3 h_image flags -------------------------------------------------------------------------- */ - -void AtomVecHybridKokkos::write_data(FILE *fp, int n, double **buf) -{ - int k,m; - - for (int i = 0; i < n; i++) { - fmt::print(fp,"{} {} {:.16e} {:.16e} {:.16e}", ubuf(buf[i][0]).i, ubuf(buf[i][1]).i, - buf[i][2], buf[i][3], buf[i][4]); - - m = 5; - for (k = 0; k < nstyles; k++) - m += styles[k]->write_data_hybrid(fp,&buf[i][m]); - - fmt::print(fp," {} {} {}\n", ubuf(buf[i][m]).i, ubuf(buf[i][m+1]).i, ubuf(buf[i][m+2]).i); - } -} - -/* ---------------------------------------------------------------------- - pack velocity info for data file -------------------------------------------------------------------------- */ - -void AtomVecHybridKokkos::pack_vel(double **buf) -{ - atomKK->sync(Host,V_MASK); - - int k,m; - - int nlocal = atom->nlocal; - for (int i = 0; i < nlocal; i++) { - buf[i][0] = ubuf(h_tag[i]).d; - buf[i][1] = h_v(i,0); - buf[i][2] = h_v(i,1); - buf[i][3] = h_v(i,2); - - m = 4; - for (k = 0; k < nstyles; k++) - m += styles[k]->pack_vel_hybrid(i,&buf[i][m]); - } -} - -/* ---------------------------------------------------------------------- - write velocity info to data file -------------------------------------------------------------------------- */ - -void AtomVecHybridKokkos::write_vel(FILE *fp, int n, double **buf) -{ - int k,m; - - for (int i = 0; i < n; i++) { - fmt::print(fp,"{} {} {} {}", (tagint) ubuf(buf[i][0]).i,buf[i][1],buf[i][2],buf[i][3]); - - m = 4; - for (k = 0; k < nstyles; k++) - m += styles[k]->write_vel_hybrid(fp,&buf[i][m]); - - fprintf(fp,"\n"); - } -} - -/* ---------------------------------------------------------------------- - assign an index to named atom property and return index - returned value encodes which sub-style and index returned by sub-style - return -1 if name is unknown to any sub-styles -------------------------------------------------------------------------- */ - -int AtomVecHybridKokkos::property_atom(const std::string &name) -{ - for (int k = 0; k < nstyles; k++) { - int index = styles[k]->property_atom(name); - if (index >= 0) return index*nstyles + k; - } - return -1; -} - -/* ---------------------------------------------------------------------- - pack per-atom data into buf for ComputePropertyAtom - index maps to data specific to this atom style -------------------------------------------------------------------------- */ - -void AtomVecHybridKokkos::pack_property_atom(int multiindex, double *buf, int nvalues, int groupbit) -{ - int k = multiindex % nstyles; - int index = multiindex/nstyles; - styles[k]->pack_property_atom(index,buf,nvalues,groupbit); -} - -/* ---------------------------------------------------------------------- - allstyles = list of all atom styles in this LAMMPS executable -------------------------------------------------------------------------- */ - -void AtomVecHybridKokkos::build_styles() -{ - nallstyles = 0; -#define ATOM_CLASS -#define AtomStyle(key,Class) nallstyles++; -#include "style_atom.h" -#undef AtomStyle -#undef ATOM_CLASS - - allstyles = new char*[nallstyles]; - - nallstyles = 0; -#define ATOM_CLASS -#define AtomStyle(key,Class) \ - allstyles[nallstyles] = utils::strdup(#key); \ - nallstyles++; -#include "style_atom.h" // IWYU pragma: keep -#undef AtomStyle -#undef ATOM_CLASS -} - -/* ---------------------------------------------------------------------- - allstyles = list of all known atom styles -------------------------------------------------------------------------- */ - -int AtomVecHybridKokkos::known_style(char *str) -{ - for (int i = 0; i < nallstyles; i++) - if (strcmp(str,allstyles[i]) == 0) return 1; - return 0; -} - -/* ---------------------------------------------------------------------- - return # of bytes of allocated memory -------------------------------------------------------------------------- */ - -double AtomVecHybridKokkos::memory_usage() -{ - double bytes = 0; - for (int k = 0; k < nstyles; k++) bytes += styles[k]->memory_usage(); - return bytes; -} +// TODO: move dynamic_cast into init /* ---------------------------------------------------------------------- */ void AtomVecHybridKokkos::sync(ExecutionSpace space, unsigned int h_mask) { - for (int k = 0; k < nstyles; k++) ((AtomVecKokkos*) styles[k])->sync(space,h_mask); + for (int k = 0; k < nstyles; k++) (dynamic_cast(styles[k]))->sync(space,h_mask); } /* ---------------------------------------------------------------------- */ void AtomVecHybridKokkos::sync_overlapping_device(ExecutionSpace space, unsigned int h_mask) { - for (int k = 0; k < nstyles; k++) ((AtomVecKokkos*) styles[k])->sync_overlapping_device(space,h_mask); + for (int k = 0; k < nstyles; k++) (dynamic_cast(styles[k]))->sync_overlapping_device(space,h_mask); } /* ---------------------------------------------------------------------- */ void AtomVecHybridKokkos::modified(ExecutionSpace space, unsigned int h_mask) { - for (int k = 0; k < nstyles; k++) ((AtomVecKokkos*) styles[k])->modified(space,h_mask); + for (int k = 0; k < nstyles; k++) (dynamic_cast(styles[k]))->modified(space,h_mask); } diff --git a/src/KOKKOS/atom_vec_hybrid_kokkos.h b/src/KOKKOS/atom_vec_hybrid_kokkos.h index a815779336..150682ef46 100644 --- a/src/KOKKOS/atom_vec_hybrid_kokkos.h +++ b/src/KOKKOS/atom_vec_hybrid_kokkos.h @@ -22,11 +22,12 @@ AtomStyle(hybrid/kk,AtomVecHybridKokkos); #define LMP_ATOM_VEC_HYBRID_KOKKOS_H #include "atom_vec_kokkos.h" +#include "atom_vec_hybrid.h" #include "kokkos_type.h" namespace LAMMPS_NS { -class AtomVecHybridKokkos : public AtomVecKokkos { +class AtomVecHybridKokkos : public AtomVecKokkos, public AtomVecHybrid { public: int nstyles; class AtomVec **styles; @@ -34,39 +35,6 @@ class AtomVecHybridKokkos : public AtomVecKokkos { AtomVecHybridKokkos(class LAMMPS *); ~AtomVecHybridKokkos() override; - void process_args(int, char **) override; - void init() override; - void grow(int) override; - void grow_pointers() override; - void copy(int, int, int) override; - void clear_bonus() override; - void force_clear(int, size_t) override; - int pack_comm(int, int *, double *, int, int *) override; - int pack_comm_vel(int, int *, double *, int, int *) override; - void unpack_comm(int, int, double *) override; - void unpack_comm_vel(int, int, double *) override; - int pack_reverse(int, int, double *) override; - void unpack_reverse(int, int *, double *) override; - int pack_border(int, int *, double *, int, int *) override; - int pack_border_vel(int, int *, double *, int, int *) override; - void unpack_border(int, int, double *) override; - void unpack_border_vel(int, int, double *) override; - int pack_exchange(int, double *) override; - int unpack_exchange(double *) override; - int size_restart() override; - int pack_restart(int, double *) override; - int unpack_restart(double *) override; - void create_atom(int, double *) override; - void data_atom(double *, imageint, const std::vector &, std::string &) override; - int data_atom_hybrid(int, const std::vector &, int) override {return 0;} - void data_vel(int, const std::vector &) override; - void pack_data(double **) override; - void write_data(FILE *, int, double **) override; - void pack_vel(double **) override; - void write_vel(FILE *, int, double **) override; - int property_atom(const std::string &) override; - void pack_property_atom(int, double *, int, int) override; - double memory_usage() override; int pack_comm_kokkos(const int &n, const DAT::tdual_int_2d &k_sendlist, const int & iswap, @@ -97,10 +65,6 @@ class AtomVecHybridKokkos : public AtomVecKokkos { void sync_overlapping_device(ExecutionSpace space, unsigned int mask) override; private: - tagint *tag; - int *type,*mask; - imageint *image; - double **x,**v,**f; double **omega,**angmom; DAT::t_tagint_1d d_tag; @@ -121,8 +85,6 @@ class AtomVecHybridKokkos : public AtomVecKokkos { DAT::t_v_array d_omega, d_angmom; HAT::t_v_array h_omega, h_angmom; - DAT::tdual_int_1d k_count; - int nallstyles; char **allstyles; @@ -130,8 +92,7 @@ class AtomVecHybridKokkos : public AtomVecKokkos { int known_style(char *); }; -} +} // namespace LAMMPS_NS #endif #endif - diff --git a/src/KOKKOS/atom_vec_kokkos.cpp b/src/KOKKOS/atom_vec_kokkos.cpp index 12b6a5e1af..cc02f1e617 100644 --- a/src/KOKKOS/atom_vec_kokkos.cpp +++ b/src/KOKKOS/atom_vec_kokkos.cpp @@ -32,22 +32,19 @@ AtomVecKokkos::AtomVecKokkos(LAMMPS *lmp) : AtomVec(lmp) no_comm_vel_flag = 0; no_border_vel_flag = 1; + + k_count = DAT::tdual_int_1d("atom::k_count",1); + atomKK = (AtomKokkos *) atom; + commKK = (CommKokkos *) comm; } -/* ---------------------------------------------------------------------- - roundup N so it is a multiple of DELTA - error if N exceeds 32-bit int, since will be used as arg to grow() - overload needed because Kokkos uses a smaller DELTA than in atom_vec.cpp - and an exponential instead of a linear growth -------------------------------------------------------------------------- */ +/* ---------------------------------------------------------------------- */ -bigint AtomVecKokkos::roundup(bigint n) +AtomVecKokkos::~AtomVecKokkos() { - auto DELTA = LMP_KOKKOS_AV_DELTA; - if (n % DELTA) n = n/DELTA * DELTA + DELTA; - if (n > MAXSMALLINT) - error->one(FLERR,"Too many atoms created on one or more procs"); - return n; + // Kokkos already deallocated host memory + + ngrow = 0; } /* ---------------------------------------------------------------------- */ @@ -708,138 +705,6 @@ void AtomVecKokkos::unpack_comm_vel_kokkos(const int &n, const int &first, /* ---------------------------------------------------------------------- */ -int AtomVecKokkos::pack_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - } - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecKokkos::pack_comm_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - if (atom->mask[i] & deform_groupbit) { - buf[m++] = h_v(j,0) + dvx; - buf[m++] = h_v(j,1) + dvy; - buf[m++] = h_v(j,2) + dvz; - } else { - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - } - } - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecKokkos::unpack_comm(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecKokkos::unpack_comm_vel(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - h_v(i,0) = buf[m++]; - h_v(i,1) = buf[m++]; - h_v(i,2) = buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - template struct AtomVecKokkos_PackReverse { typedef DeviceType device_type; @@ -977,84 +842,3 @@ void AtomVecKokkos::unpack_reverse_kokkos(const int &n, atomKK->modified(Device,F_MASK); } } - -/* ---------------------------------------------------------------------- */ - -int AtomVecKokkos::pack_reverse(int n, int first, double *buf) -{ - if (n > 0) - atomKK->sync(Host,F_MASK); - - int m = 0; - const int last = first + n; - for (int i = first; i < last; i++) { - buf[m++] = h_f(i,0); - buf[m++] = h_f(i,1); - buf[m++] = h_f(i,2); - } - - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecKokkos::unpack_reverse(int n, int *list, double *buf) -{ - int m = 0; - for (int i = 0; i < n; i++) { - const int j = list[i]; - h_f(j,0) += buf[m++]; - h_f(j,1) += buf[m++]; - h_f(j,2) += buf[m++]; - } - - if (n > 0) - atomKK->modified(Host,F_MASK); -} - -/* ---------------------------------------------------------------------- - * unpack one line from Velocities section of data file - * ------------------------------------------------------------------------- */ - -void AtomVecKokkos::data_vel(int m, const std::vector &values) -{ - double **v = atom->v; - int ivalue = 1; - v[m][0] = utils::numeric(FLERR,values[ivalue++],true,lmp); - v[m][1] = utils::numeric(FLERR,values[ivalue++],true,lmp); - v[m][2] = utils::numeric(FLERR,values[ivalue++],true,lmp); - - atomKK->modified(Host,V_MASK); -} - -/* ---------------------------------------------------------------------- - * pack velocity info for data file - * ------------------------------------------------------------------------- */ - -void AtomVecKokkos::pack_vel(double **buf) -{ - double **v = atom->v; - tagint *tag = atom->tag; - int nlocal = atom->nlocal; - - atomKK->sync(Host,V_MASK|TAG_MASK); - - for (int i = 0; i < nlocal; i++) { - buf[i][0] = ubuf(tag[i]).d; - buf[i][1] = v[i][0]; - buf[i][2] = v[i][1]; - buf[i][3] = v[i][2]; - } -} - -/* ---------------------------------------------------------------------- - * write velocity info to data file - * ------------------------------------------------------------------------- */ - -void AtomVecKokkos::write_vel(FILE *fp, int n, double **buf) -{ - for (int i = 0; i < n; i++) - fprintf(fp,TAGINT_FORMAT " %-1.16e %-1.16e %-1.16e\n", - (tagint) ubuf(buf[i][0]).i,buf[i][1],buf[i][2],buf[i][3]); -} - diff --git a/src/KOKKOS/atom_vec_kokkos.h b/src/KOKKOS/atom_vec_kokkos.h index 0c8174ed9c..b7047ad38b 100644 --- a/src/KOKKOS/atom_vec_kokkos.h +++ b/src/KOKKOS/atom_vec_kokkos.h @@ -33,20 +33,10 @@ union d_ubuf { d_ubuf(int arg) : i(arg) {} }; -class AtomVecKokkos : public AtomVec { +class AtomVecKokkos : virtual public AtomVec { public: AtomVecKokkos(class LAMMPS *); - - bigint roundup(bigint) override; - int pack_comm(int, int *, double *, int, int *) override; - int pack_comm_vel(int, int *, double *, int, int *) override; - void unpack_comm(int, int, double *) override; - void unpack_comm_vel(int, int, double *) override; - int pack_reverse(int, int, double *) override; - void unpack_reverse(int, int *, double *) override; - void data_vel(int, const std::vector &) override; - void pack_vel(double **) override; - void write_vel(FILE *, int, double **) override; + ~AtomVecKokkos() override; virtual void sync(ExecutionSpace space, unsigned int mask) = 0; virtual void modified(ExecutionSpace space, unsigned int mask) = 0; @@ -130,7 +120,6 @@ class AtomVecKokkos : public AtomVec { int no_comm_vel_flag,no_border_vel_flag; protected: - HAT::t_x_array h_x; HAT::t_v_array h_v; HAT::t_f_array h_f; @@ -139,6 +128,8 @@ class AtomVecKokkos : public AtomVec { size_t buffer_size; void* buffer; + DAT::tdual_int_1d k_count; + #ifdef LMP_KOKKOS_GPU template Kokkos::Viewmolecule_flag = 1; - - k_count = DAT::tdual_int_1d("atom::k_count",1); - atomKK = (AtomKokkos *) atom; - commKK = (CommKokkos *) comm; } /* ---------------------------------------------------------------------- @@ -233,70 +217,6 @@ void AtomVecMolecularKokkos::grow_pointers() h_improper_atom4 = atomKK->k_improper_atom4.h_view; } -/* ---------------------------------------------------------------------- - copy atom I info to atom J -------------------------------------------------------------------------- */ - -void AtomVecMolecularKokkos::copy(int i, int j, int delflag) -{ - int k; - - h_tag[j] = h_tag[i]; - h_type[j] = h_type[i]; - mask[j] = mask[i]; - h_image[j] = h_image[i]; - h_x(j,0) = h_x(i,0); - h_x(j,1) = h_x(i,1); - h_x(j,2) = h_x(i,2); - h_v(j,0) = h_v(i,0); - h_v(j,1) = h_v(i,1); - h_v(j,2) = h_v(i,2); - - h_molecule(j) = h_molecule(i); - - h_num_bond(j) = h_num_bond(i); - for (k = 0; k < h_num_bond(j); k++) { - h_bond_type(j,k) = h_bond_type(i,k); - h_bond_atom(j,k) = h_bond_atom(i,k); - } - - h_nspecial(j,0) = h_nspecial(i,0); - h_nspecial(j,1) = h_nspecial(i,1); - h_nspecial(j,2) = h_nspecial(i,2); - for (k = 0; k < h_nspecial(j,2); k++) - h_special(j,k) = h_special(i,k); - - h_num_angle(j) = h_num_angle(i); - for (k = 0; k < h_num_angle(j); k++) { - h_angle_type(j,k) = h_angle_type(i,k); - h_angle_atom1(j,k) = h_angle_atom1(i,k); - h_angle_atom2(j,k) = h_angle_atom2(i,k); - h_angle_atom3(j,k) = h_angle_atom3(i,k); - } - - h_num_dihedral(j) = h_num_dihedral(i); - for (k = 0; k < h_num_dihedral(j); k++) { - h_dihedral_type(j,k) = h_dihedral_type(i,k); - h_dihedral_atom1(j,k) = h_dihedral_atom1(i,k); - h_dihedral_atom2(j,k) = h_dihedral_atom2(i,k); - h_dihedral_atom3(j,k) = h_dihedral_atom3(i,k); - h_dihedral_atom4(j,k) = h_dihedral_atom4(i,k); - } - - h_num_improper(j) = h_num_improper(i); - for (k = 0; k < h_num_improper(j); k++) { - h_improper_type(j,k) = h_improper_type(i,k); - h_improper_atom1(j,k) = h_improper_atom1(i,k); - h_improper_atom2(j,k) = h_improper_atom2(i,k); - h_improper_atom3(j,k) = h_improper_atom3(i,k); - h_improper_atom4(j,k) = h_improper_atom4(i,k); - } - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->copy_arrays(i,j,delflag); -} - /* ---------------------------------------------------------------------- */ template @@ -580,171 +500,6 @@ void AtomVecMolecularKokkos::unpack_comm_kokkos(const int &n, const int &first, /* ---------------------------------------------------------------------- */ -int AtomVecMolecularKokkos::pack_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - } - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecMolecularKokkos::pack_comm_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - if (mask[i] & deform_groupbit) { - buf[m++] = h_v(j,0) + dvx; - buf[m++] = h_v(j,1) + dvy; - buf[m++] = h_v(j,2) + dvz; - } else { - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - } - } - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecMolecularKokkos::unpack_comm(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecMolecularKokkos::unpack_comm_vel(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - h_v(i,0) = buf[m++]; - h_v(i,1) = buf[m++]; - h_v(i,2) = buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecMolecularKokkos::pack_reverse(int n, int first, double *buf) -{ - if (n > 0) - atomKK->sync(Host,F_MASK); - - int m = 0; - const int last = first + n; - for (int i = first; i < last; i++) { - buf[m++] = h_f(i,0); - buf[m++] = h_f(i,1); - buf[m++] = h_f(i,2); - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecMolecularKokkos::unpack_reverse(int n, int *list, double *buf) -{ - if (n > 0) - atomKK->modified(Host,F_MASK); - - int m = 0; - for (int i = 0; i < n; i++) { - const int j = list[i]; - h_f(j,0) += buf[m++]; - h_f(j,1) += buf[m++]; - h_f(j,2) += buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - template struct AtomVecMolecularKokkos_PackBorder { typedef DeviceType device_type; @@ -846,149 +601,6 @@ int AtomVecMolecularKokkos::pack_border_kokkos(int n, DAT::tdual_int_2d k_sendli /* ---------------------------------------------------------------------- */ -int AtomVecMolecularKokkos::pack_border(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = ubuf(h_molecule(j)).d; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = ubuf(h_molecule(j)).d; - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecMolecularKokkos::pack_border_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = ubuf(h_molecule(j)).d; - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = ubuf(h_molecule(j)).d; - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = ubuf(h_molecule(j)).d; - if (mask[i] & deform_groupbit) { - buf[m++] = h_v(j,0) + dvx; - buf[m++] = h_v(j,1) + dvy; - buf[m++] = h_v(j,2) + dvz; - } else { - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - } - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecMolecularKokkos::pack_border_hybrid(int n, int *list, double *buf) -{ - int i,j,m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_molecule(j); - } - return m; -} - -/* ---------------------------------------------------------------------- */ - template struct AtomVecMolecularKokkos_UnpackBorder { typedef DeviceType device_type; @@ -1049,78 +661,6 @@ void AtomVecMolecularKokkos::unpack_border_kokkos(const int &n, const int &first /* ---------------------------------------------------------------------- */ -void AtomVecMolecularKokkos::unpack_border(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - while (last > nmax) grow(0); - - for (i = first; i < last; i++) { - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - h_tag(i) = (tagint) ubuf(buf[m++]).i; - h_type(i) = (int) ubuf(buf[m++]).i; - h_mask(i) = (int) ubuf(buf[m++]).i; - h_molecule(i) = (tagint) ubuf(buf[m++]).i; - } - - atomKK->modified(Host,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|MOLECULE_MASK); - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecMolecularKokkos::unpack_border_vel(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - while (last > nmax) grow(0); - - for (i = first; i < last; i++) { - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - h_tag(i) = (tagint) ubuf(buf[m++]).i; - h_type(i) = (int) ubuf(buf[m++]).i; - h_mask(i) = (int) ubuf(buf[m++]).i; - h_molecule(i) = (tagint) ubuf(buf[m++]).i; - h_v(i,0) = buf[m++]; - h_v(i,1) = buf[m++]; - h_v(i,2) = buf[m++]; - } - - atomKK->modified(Host,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|MOLECULE_MASK|V_MASK); - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecMolecularKokkos::unpack_border_hybrid(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) - h_molecule(i) = (tagint) ubuf(buf[m++]).i; - return m; -} - -/* ---------------------------------------------------------------------- */ - template struct AtomVecMolecularKokkos_PackExchangeFunctor { typedef DeviceType device_type; @@ -1393,66 +933,6 @@ int AtomVecMolecularKokkos::pack_exchange_kokkos(const int &nsend,DAT::tdual_xfl /* ---------------------------------------------------------------------- */ -int AtomVecMolecularKokkos::pack_exchange(int i, double *buf) -{ - int k; - int m = 1; - buf[m++] = h_x(i,0); - buf[m++] = h_x(i,1); - buf[m++] = h_x(i,2); - buf[m++] = h_v(i,0); - buf[m++] = h_v(i,1); - buf[m++] = h_v(i,2); - buf[m++] = ubuf(h_tag(i)).d; - buf[m++] = ubuf(h_type(i)).d; - buf[m++] = ubuf(h_mask(i)).d; - buf[m++] = ubuf(h_image(i)).d; - buf[m++] = ubuf(h_molecule(i)).d; - - buf[m++] = ubuf(h_num_bond(i)).d; - for (k = 0; k < h_num_bond(i); k++) { - buf[m++] = ubuf(h_bond_type(i,k)).d; - buf[m++] = ubuf(h_bond_atom(i,k)).d; - } - buf[m++] = ubuf(h_num_angle(i)).d; - for (k = 0; k < h_num_angle(i); k++) { - buf[m++] = ubuf(h_angle_type(i,k)).d; - buf[m++] = ubuf(h_angle_atom1(i,k)).d; - buf[m++] = ubuf(h_angle_atom2(i,k)).d; - buf[m++] = ubuf(h_angle_atom3(i,k)).d; - } - buf[m++] = ubuf(h_num_dihedral(i)).d; - for (k = 0; k < h_num_dihedral(i); k++) { - buf[m++] = ubuf(h_dihedral_type(i,k)).d; - buf[m++] = ubuf(h_dihedral_atom1(i,k)).d; - buf[m++] = ubuf(h_dihedral_atom2(i,k)).d; - buf[m++] = ubuf(h_dihedral_atom3(i,k)).d; - buf[m++] = ubuf(h_dihedral_atom4(i,k)).d; - } - buf[m++] = ubuf(h_num_improper(i)).d; - for (k = 0; k < h_num_improper(i); k++) { - buf[m++] = ubuf(h_improper_type(i,k)).d; - buf[m++] = ubuf(h_improper_atom1(i,k)).d; - buf[m++] = ubuf(h_improper_atom2(i,k)).d; - buf[m++] = ubuf(h_improper_atom3(i,k)).d; - buf[m++] = ubuf(h_improper_atom4(i,k)).d; - } - buf[m++] = ubuf(h_nspecial(i,0)).d; - buf[m++] = ubuf(h_nspecial(i,1)).d; - buf[m++] = ubuf(h_nspecial(i,2)).d; - for (k = 0; k < h_nspecial(i,2); k++) - buf[m++] = ubuf(h_special(i,k)).d; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]->pack_exchange(i,&buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- */ - template struct AtomVecMolecularKokkos_UnpackExchangeFunctor { typedef DeviceType device_type; @@ -1619,444 +1099,6 @@ int AtomVecMolecularKokkos::unpack_exchange_kokkos(DAT::tdual_xfloat_2d &k_buf,i /* ---------------------------------------------------------------------- */ -int AtomVecMolecularKokkos::unpack_exchange(double *buf) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - atomKK->modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK | MOLECULE_MASK | BOND_MASK | - ANGLE_MASK | DIHEDRAL_MASK | IMPROPER_MASK | SPECIAL_MASK); - - int k; - int m = 1; - h_x(nlocal,0) = buf[m++]; - h_x(nlocal,1) = buf[m++]; - h_x(nlocal,2) = buf[m++]; - h_v(nlocal,0) = buf[m++]; - h_v(nlocal,1) = buf[m++]; - h_v(nlocal,2) = buf[m++]; - h_tag(nlocal) = (tagint) ubuf(buf[m++]).i; - h_type(nlocal) = (int) ubuf(buf[m++]).i; - h_mask(nlocal) = (int) ubuf(buf[m++]).i; - h_image(nlocal) = (imageint) ubuf(buf[m++]).i; - h_molecule(nlocal) = (tagint) ubuf(buf[m++]).i; - - h_num_bond(nlocal) = (int) ubuf(buf[m++]).i; - for (k = 0; k < h_num_bond(nlocal); k++) { - h_bond_type(nlocal,k) = (int) ubuf(buf[m++]).i; - h_bond_atom(nlocal,k) = (tagint) ubuf(buf[m++]).i; - } - h_num_angle(nlocal) = (int) ubuf(buf[m++]).i; - for (k = 0; k < h_num_angle(nlocal); k++) { - h_angle_type(nlocal,k) = (int) ubuf(buf[m++]).i; - h_angle_atom1(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_angle_atom2(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_angle_atom3(nlocal,k) = (tagint) ubuf(buf[m++]).i; - } - h_num_dihedral(nlocal) = (int) ubuf(buf[m++]).i; - for (k = 0; k < h_num_dihedral(nlocal); k++) { - h_dihedral_type(nlocal,k) = (int) ubuf(buf[m++]).i; - h_dihedral_atom1(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_dihedral_atom2(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_dihedral_atom3(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_dihedral_atom4(nlocal,k) = (tagint) ubuf(buf[m++]).i; - } - h_num_improper(nlocal) = (int) ubuf(buf[m++]).i; - for (k = 0; k < h_num_improper(nlocal); k++) { - h_improper_type(nlocal,k) = (int) ubuf(buf[m++]).i; - h_improper_atom1(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_improper_atom2(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_improper_atom3(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_improper_atom4(nlocal,k) = (tagint) ubuf(buf[m++]).i; - } - h_nspecial(nlocal,0) = (int) ubuf(buf[m++]).i; - h_nspecial(nlocal,1) = (int) ubuf(buf[m++]).i; - h_nspecial(nlocal,2) = (int) ubuf(buf[m++]).i; - for (k = 0; k < h_nspecial(nlocal,2); k++) - h_special(nlocal,k) = (tagint) ubuf(buf[m++]).i; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]-> - unpack_exchange(nlocal,&buf[m]); - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - size of restart data for all atoms owned by this proc - include extra data stored by fixes -------------------------------------------------------------------------- */ - -int AtomVecMolecularKokkos::size_restart() -{ - int i; - - int nlocal = atom->nlocal; - int n = 0; - for (i = 0; i < nlocal; i++) - n += 16 + 2*num_bond[i] + 4*num_angle[i] + - 5*num_dihedral[i] + 5*num_improper[i]; - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - for (i = 0; i < nlocal; i++) - n += modify->fix[atom->extra_restart[iextra]]->size_restart(i); - - return n; -} - -/* ---------------------------------------------------------------------- - pack atom I's data for restart file including extra quantities - xyz must be 1st 3 values, so that read_restart can test on them - molecular types may be negative, but write as positive -------------------------------------------------------------------------- */ - -int AtomVecMolecularKokkos::pack_restart(int i, double *buf) -{ - atomKK->sync(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK | MOLECULE_MASK | BOND_MASK | - ANGLE_MASK | DIHEDRAL_MASK | IMPROPER_MASK | SPECIAL_MASK); - - int m = 1; - buf[m++] = h_x(i,0); - buf[m++] = h_x(i,1); - buf[m++] = h_x(i,2); - buf[m++] = ubuf(h_tag(i)).d; - buf[m++] = ubuf(h_type(i)).d; - buf[m++] = ubuf(h_mask(i)).d; - buf[m++] = ubuf(h_image(i)).d; - buf[m++] = h_v(i,0); - buf[m++] = h_v(i,1); - buf[m++] = h_v(i,2); - - buf[m++] = ubuf(h_molecule(i)).d; - - buf[m++] = ubuf(h_num_bond(i)).d; - for (int k = 0; k < h_num_bond(i); k++) { - buf[m++] = ubuf(MAX(h_bond_type(i,k),-h_bond_type(i,k))).d; - buf[m++] = ubuf(h_bond_atom(i,k)).d; - } - - buf[m++] = ubuf(h_num_angle(i)).d; - for (int k = 0; k < h_num_angle(i); k++) { - buf[m++] = ubuf(MAX(h_angle_type(i,k),-h_angle_type(i,k))).d; - buf[m++] = ubuf(h_angle_atom1(i,k)).d; - buf[m++] = ubuf(h_angle_atom2(i,k)).d; - buf[m++] = ubuf(h_angle_atom3(i,k)).d; - } - - buf[m++] = ubuf(h_num_dihedral(i)).d; - for (int k = 0; k < h_num_dihedral(i); k++) { - buf[m++] = ubuf(MAX(h_dihedral_type(i,k),-h_dihedral_type(i,k))).d; - buf[m++] = ubuf(h_dihedral_atom1(i,k)).d; - buf[m++] = ubuf(h_dihedral_atom2(i,k)).d; - buf[m++] = ubuf(h_dihedral_atom3(i,k)).d; - buf[m++] = ubuf(h_dihedral_atom4(i,k)).d; - } - - buf[m++] = ubuf(h_num_improper(i)).d; - for (int k = 0; k < h_num_improper(i); k++) { - buf[m++] = ubuf(MAX(h_improper_type(i,k),-h_improper_type(i,k))).d; - buf[m++] = ubuf(h_improper_atom1(i,k)).d; - buf[m++] = ubuf(h_improper_atom2(i,k)).d; - buf[m++] = ubuf(h_improper_atom3(i,k)).d; - buf[m++] = ubuf(h_improper_atom4(i,k)).d; - } - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - m += modify->fix[atom->extra_restart[iextra]]->pack_restart(i,&buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- - unpack data for one atom from restart file including extra quantities -------------------------------------------------------------------------- */ - -int AtomVecMolecularKokkos::unpack_restart(double *buf) -{ - int k; - - int nlocal = atom->nlocal; - if (nlocal == nmax) { - grow(0); - if (atom->nextra_store) - memory->grow(atom->extra,nmax,atom->nextra_store,"atom:extra"); - } - - atomKK->modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK | MOLECULE_MASK | BOND_MASK | - ANGLE_MASK | DIHEDRAL_MASK | IMPROPER_MASK | SPECIAL_MASK); - - int m = 1; - h_x(nlocal,0) = buf[m++]; - h_x(nlocal,1) = buf[m++]; - h_x(nlocal,2) = buf[m++]; - h_tag(nlocal) = (tagint) ubuf(buf[m++]).i; - h_type(nlocal) = (int) ubuf(buf[m++]).i; - h_mask(nlocal) = (int) ubuf(buf[m++]).i; - h_image(nlocal) = (imageint) ubuf(buf[m++]).i; - h_v(nlocal,0) = buf[m++]; - h_v(nlocal,1) = buf[m++]; - h_v(nlocal,2) = buf[m++]; - - h_molecule(nlocal) = (tagint) ubuf(buf[m++]).i; - - h_num_bond(nlocal) = (int) ubuf(buf[m++]).i; - for (k = 0; k < h_num_bond(nlocal); k++) { - h_bond_type(nlocal,k) = (int) ubuf(buf[m++]).i; - h_bond_atom(nlocal,k) = (tagint) ubuf(buf[m++]).i; - } - - h_num_angle(nlocal) = (int) ubuf(buf[m++]).i; - for (k = 0; k < h_num_angle(nlocal); k++) { - h_angle_type(nlocal,k) = (int) ubuf(buf[m++]).i; - h_angle_atom1(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_angle_atom2(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_angle_atom3(nlocal,k) = (tagint) ubuf(buf[m++]).i; - } - - h_num_dihedral(nlocal) = (int) ubuf(buf[m++]).i; - for (k = 0; k < h_num_dihedral(nlocal); k++) { - h_dihedral_type(nlocal,k) = (int) ubuf(buf[m++]).i; - h_dihedral_atom1(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_dihedral_atom2(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_dihedral_atom3(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_dihedral_atom4(nlocal,k) = (tagint) ubuf(buf[m++]).i; - } - - h_num_improper(nlocal) = (int) ubuf(buf[m++]).i; - for (k = 0; k < h_num_improper(nlocal); k++) { - h_improper_type(nlocal,k) = (int) ubuf(buf[m++]).i; - h_improper_atom1(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_improper_atom2(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_improper_atom3(nlocal,k) = (tagint) ubuf(buf[m++]).i; - h_improper_atom4(nlocal,k) = (tagint) ubuf(buf[m++]).i; - } - - h_nspecial(nlocal,0) = h_nspecial(nlocal,1) = h_nspecial(nlocal,2) = 0; - - double **extra = atom->extra; - if (atom->nextra_store) { - int size = static_cast (buf[0]) - m; - for (int i = 0; i < size; i++) extra[nlocal][i] = buf[m++]; - } - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - create one atom of itype at coord - set other values to defaults -------------------------------------------------------------------------- */ - -void AtomVecMolecularKokkos::create_atom(int itype, double *coord) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) { - atomKK->modified(Host,ALL_MASK); - grow(0); - } - atomKK->modified(Host,ALL_MASK); - - tag[nlocal] = 0; - type[nlocal] = itype; - h_x(nlocal,0) = coord[0]; - h_x(nlocal,1) = coord[1]; - h_x(nlocal,2) = coord[2]; - h_mask(nlocal) = 1; - h_image(nlocal) = ((imageint) IMGMAX << IMG2BITS) | - ((imageint) IMGMAX << IMGBITS) | IMGMAX; - h_v(nlocal,0) = 0.0; - h_v(nlocal,1) = 0.0; - h_v(nlocal,2) = 0.0; - - h_molecule(nlocal) = 0; - h_num_bond(nlocal) = 0; - h_num_angle(nlocal) = 0; - h_num_dihedral(nlocal) = 0; - h_num_improper(nlocal) = 0; - h_nspecial(nlocal,0) = h_nspecial(nlocal,1) = h_nspecial(nlocal,2) = 0; - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack one line from Atoms section of data file - initialize other atom quantities -------------------------------------------------------------------------- */ - -void AtomVecMolecularKokkos::data_atom(double *coord, imageint imagetmp, - const std::vector &values, std::string &extract) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - atomKK->modified(Host,ALL_MASK); - - h_tag(nlocal) = utils::inumeric(FLERR,values[0],true,lmp); - h_molecule(nlocal) = utils::inumeric(FLERR,values[1],true,lmp); - h_type(nlocal) = utils::inumeric(FLERR,values[2],true,lmp); - extract = values[2]; - if (h_type(nlocal) <= 0 || h_type(nlocal) > atom->ntypes) - error->one(FLERR,"Invalid atom type in Atoms section of data file"); - - h_x(nlocal,0) = coord[0]; - h_x(nlocal,1) = coord[1]; - h_x(nlocal,2) = coord[2]; - - h_image(nlocal) = imagetmp; - - h_mask(nlocal) = 1; - h_v(nlocal,0) = 0.0; - h_v(nlocal,1) = 0.0; - h_v(nlocal,2) = 0.0; - h_num_bond(nlocal) = 0; - h_num_angle(nlocal) = 0; - h_num_dihedral(nlocal) = 0; - h_num_improper(nlocal) = 0; - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack hybrid quantities from one line in Atoms section of data file - initialize other atom quantities for this sub-style -------------------------------------------------------------------------- */ - -int AtomVecMolecularKokkos::data_atom_hybrid(int nlocal, const std::vector &values, - int offset) -{ - h_molecule(nlocal) = utils::inumeric(FLERR,values[offset],true,lmp); - h_num_bond(nlocal) = 0; - h_num_angle(nlocal) = 0; - h_num_dihedral(nlocal) = 0; - h_num_improper(nlocal) = 0; - return 1; -} - -/* ---------------------------------------------------------------------- - pack atom info for data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecMolecularKokkos::pack_data(double **buf) -{ - int nlocal = atom->nlocal; - for (int i = 0; i < nlocal; i++) { - buf[i][0] = h_tag(i); - buf[i][1] = h_molecule(i); - buf[i][2] = h_type(i); - buf[i][3] = h_x(i,0); - buf[i][4] = h_x(i,1); - buf[i][5] = h_x(i,2); - buf[i][6] = (h_image[i] & IMGMASK) - IMGMAX; - buf[i][7] = (h_image[i] >> IMGBITS & IMGMASK) - IMGMAX; - buf[i][8] = (h_image[i] >> IMG2BITS) - IMGMAX; - } -} - -/* ---------------------------------------------------------------------- - pack hybrid atom info for data file -------------------------------------------------------------------------- */ - -int AtomVecMolecularKokkos::pack_data_hybrid(int i, double *buf) -{ - buf[0] = h_molecule(i); - return 1; -} - -/* ---------------------------------------------------------------------- - write atom info to data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecMolecularKokkos::write_data(FILE *fp, int n, double **buf) -{ - for (int i = 0; i < n; i++) - fprintf(fp,"%d %d %d %-1.16e %-1.16e %-1.16e %d %d %d\n", - (int) buf[i][0],(int) buf[i][1], (int) buf[i][2], - buf[i][3],buf[i][4],buf[i][5], - (int) buf[i][6],(int) buf[i][7],(int) buf[i][8]); -} - -/* ---------------------------------------------------------------------- - write hybrid atom info to data file -------------------------------------------------------------------------- */ - -int AtomVecMolecularKokkos::write_data_hybrid(FILE *fp, double *buf) -{ - fprintf(fp," " TAGINT_FORMAT, (tagint) (buf[0])); - return 1; -} - -/* ---------------------------------------------------------------------- - return # of bytes of allocated memory -------------------------------------------------------------------------- */ - -double AtomVecMolecularKokkos::memory_usage() -{ - double bytes = 0; - - if (atom->memcheck("tag")) bytes += memory->usage(tag,nmax); - if (atom->memcheck("type")) bytes += memory->usage(type,nmax); - if (atom->memcheck("mask")) bytes += memory->usage(mask,nmax); - if (atom->memcheck("image")) bytes += memory->usage(image,nmax); - if (atom->memcheck("x")) bytes += memory->usage(x,nmax,3); - if (atom->memcheck("v")) bytes += memory->usage(v,nmax,3); - if (atom->memcheck("f")) bytes += memory->usage(f,nmax*commKK->nthreads,3); - - if (atom->memcheck("molecule")) bytes += memory->usage(molecule,nmax); - if (atom->memcheck("nspecial")) bytes += memory->usage(nspecial,nmax,3); - if (atom->memcheck("special")) - bytes += memory->usage(special,nmax,atom->maxspecial); - - if (atom->memcheck("num_bond")) bytes += memory->usage(num_bond,nmax); - if (atom->memcheck("bond_type")) - bytes += memory->usage(bond_type,nmax,atom->bond_per_atom); - if (atom->memcheck("bond_atom")) - bytes += memory->usage(bond_atom,nmax,atom->bond_per_atom); - - if (atom->memcheck("num_angle")) bytes += memory->usage(num_angle,nmax); - if (atom->memcheck("angle_type")) - bytes += memory->usage(angle_type,nmax,atom->angle_per_atom); - if (atom->memcheck("angle_atom1")) - bytes += memory->usage(angle_atom1,nmax,atom->angle_per_atom); - if (atom->memcheck("angle_atom2")) - bytes += memory->usage(angle_atom2,nmax,atom->angle_per_atom); - if (atom->memcheck("angle_atom3")) - bytes += memory->usage(angle_atom3,nmax,atom->angle_per_atom); - - if (atom->memcheck("num_dihedral")) bytes += memory->usage(num_dihedral,nmax); - if (atom->memcheck("dihedral_type")) - bytes += memory->usage(dihedral_type,nmax,atom->dihedral_per_atom); - if (atom->memcheck("dihedral_atom1")) - bytes += memory->usage(dihedral_atom1,nmax,atom->dihedral_per_atom); - if (atom->memcheck("dihedral_atom2")) - bytes += memory->usage(dihedral_atom2,nmax,atom->dihedral_per_atom); - if (atom->memcheck("dihedral_atom3")) - bytes += memory->usage(dihedral_atom3,nmax,atom->dihedral_per_atom); - if (atom->memcheck("dihedral_atom4")) - bytes += memory->usage(dihedral_atom4,nmax,atom->dihedral_per_atom); - if (atom->memcheck("num_improper")) bytes += memory->usage(num_improper,nmax); - if (atom->memcheck("improper_type")) - bytes += memory->usage(improper_type,nmax,atom->improper_per_atom); - if (atom->memcheck("improper_atom1")) - bytes += memory->usage(improper_atom1,nmax,atom->improper_per_atom); - if (atom->memcheck("improper_atom2")) - bytes += memory->usage(improper_atom2,nmax,atom->improper_per_atom); - if (atom->memcheck("improper_atom3")) - bytes += memory->usage(improper_atom3,nmax,atom->improper_per_atom); - if (atom->memcheck("improper_atom4")) - bytes += memory->usage(improper_atom4,nmax,atom->improper_per_atom); - - return bytes; -} - -/* ---------------------------------------------------------------------- */ - void AtomVecMolecularKokkos::sync(ExecutionSpace space, unsigned int mask) { if (space == Device) { @@ -2377,4 +1419,3 @@ void AtomVecMolecularKokkos::modified(ExecutionSpace space, unsigned int mask) } } } - diff --git a/src/KOKKOS/atom_vec_molecular_kokkos.h b/src/KOKKOS/atom_vec_molecular_kokkos.h index 7f7cb82028..6c011823fe 100644 --- a/src/KOKKOS/atom_vec_molecular_kokkos.h +++ b/src/KOKKOS/atom_vec_molecular_kokkos.h @@ -24,41 +24,15 @@ AtomStyle(molecular/kk/host,AtomVecMolecularKokkos); #define LMP_ATOM_VEC_MOLECULAR_KOKKOS_H #include "atom_vec_kokkos.h" +#include "atom_vec_molecular.h" namespace LAMMPS_NS { -class AtomVecMolecularKokkos : public AtomVecKokkos { +class AtomVecMolecularKokkos : public AtomVecKokkos, public AtomVecMolecular { public: AtomVecMolecularKokkos(class LAMMPS *); void grow(int) override; - void copy(int, int, int) override; - int pack_comm(int, int *, double *, int, int *) override; - int pack_comm_vel(int, int *, double *, int, int *) override; - void unpack_comm(int, int, double *) override; - void unpack_comm_vel(int, int, double *) override; - int pack_reverse(int, int, double *) override; - void unpack_reverse(int, int *, double *) override; - int pack_border(int, int *, double *, int, int *) override; - int pack_border_vel(int, int *, double *, int, int *) override; - int pack_border_hybrid(int, int *, double *) override; - void unpack_border(int, int, double *) override; - void unpack_border_vel(int, int, double *) override; - int unpack_border_hybrid(int, int, double *) override; - int pack_exchange(int, double *) override; - int unpack_exchange(double *) override; - int size_restart() override; - int pack_restart(int, double *) override; - int unpack_restart(double *) override; - void create_atom(int, double *) override; - void data_atom(double *, imageint, const std::vector &, std::string &) override; - int data_atom_hybrid(int, const std::vector &, int) override; - void pack_data(double **) override; - int pack_data_hybrid(int, double *) override; - void write_data(FILE *, int, double **) override; - int write_data_hybrid(FILE *, double *) override; - double memory_usage() override; - void grow_pointers() override; int pack_comm_kokkos(const int &n, const DAT::tdual_int_2d &k_sendlist, const int & iswap, @@ -89,28 +63,11 @@ class AtomVecMolecularKokkos : public AtomVecKokkos { void sync_overlapping_device(ExecutionSpace space, unsigned int mask) override; protected: - - tagint *tag; - int *type,*mask; - imageint *image; - double **x,**v,**f; - tagint *molecule; - int **nspecial; tagint **special; - int *num_bond; - int **bond_type; tagint **bond_atom; - - int *num_angle; - int **angle_type; tagint **angle_atom1,**angle_atom2,**angle_atom3; - - int *num_dihedral; - int **dihedral_type; tagint **dihedral_atom1,**dihedral_atom2,**dihedral_atom3,**dihedral_atom4; - int *num_improper; - int **improper_type; tagint **improper_atom1,**improper_atom2,**improper_atom3,**improper_atom4; DAT::t_tagint_1d d_tag; @@ -167,13 +124,9 @@ class AtomVecMolecularKokkos : public AtomVecKokkos { HAT::t_int_2d h_improper_type; HAT::t_tagint_2d h_improper_atom1,h_improper_atom2, h_improper_atom3,h_improper_atom4; - - HAT::tdual_int_1d k_count; - }; -} +} // namespace LAMMPS_NS #endif #endif - diff --git a/src/KOKKOS/atom_vec_sphere_kokkos.cpp b/src/KOKKOS/atom_vec_sphere_kokkos.cpp index 023b4ab6a7..b197e7c831 100644 --- a/src/KOKKOS/atom_vec_sphere_kokkos.cpp +++ b/src/KOKKOS/atom_vec_sphere_kokkos.cpp @@ -33,55 +33,12 @@ using namespace MathConst; /* ---------------------------------------------------------------------- */ -AtomVecSphereKokkos::AtomVecSphereKokkos(LAMMPS *lmp) : AtomVecKokkos(lmp) +AtomVecSphereKokkos::AtomVecSphereKokkos(LAMMPS *lmp) : AtomVec(lmp), +AtomVecKokkos(lmp), AtomVecSphere(lmp) { - molecular = Atom::ATOMIC; - - comm_x_only = 1; - comm_f_only = 0; - size_forward = 3; - size_reverse = 6; - size_border = 8; - size_velocity = 6; - size_data_atom = 7; - size_data_vel = 7; - xcol_data = 5; - - atom->sphere_flag = 1; - atom->radius_flag = atom->rmass_flag = atom->omega_flag = - atom->torque_flag = 1; - - k_count = DAT::tdual_int_1d("atom::k_count",1); - atomKK = (AtomKokkos *) atom; - commKK = (CommKokkos *) comm; - no_border_vel_flag = 0; } -/* ---------------------------------------------------------------------- */ - -void AtomVecSphereKokkos::init() -{ - AtomVec::init(); - - // set radvary if particle diameters are time-varying due to fix adapt - - radvary = 0; - comm_x_only = 1; - size_forward = 3; - - for (int i = 0; i < modify->nfix; i++) { - if (strcmp(modify->fix[i]->style,"adapt") == 0) { - FixAdapt *fix = (FixAdapt *) modify->fix[i]; - if (fix->diamflag) { - radvary = 1; - comm_x_only = 0; - size_forward = 5; - } - } - } -} - /* ---------------------------------------------------------------------- grow atom arrays n = 0 grows arrays by a chunk @@ -165,42 +122,6 @@ void AtomVecSphereKokkos::grow_pointers() h_torque = atomKK->k_torque.h_view; } -/* ---------------------------------------------------------------------- - copy atom I info to atom J -------------------------------------------------------------------------- */ - -void AtomVecSphereKokkos::copy(int i, int j, int delflag) -{ - atomKK->sync(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK | RADIUS_MASK | - RMASS_MASK | OMEGA_MASK); - - h_tag[j] = h_tag[i]; - h_type[j] = h_type[i]; - h_mask[j] = h_mask[i]; - h_image[j] = h_image[i]; - h_x(j,0) = h_x(i,0); - h_x(j,1) = h_x(i,1); - h_x(j,2) = h_x(i,2); - h_v(j,0) = h_v(i,0); - h_v(j,1) = h_v(i,1); - h_v(j,2) = h_v(i,2); - - h_radius[j] = h_radius[i]; - h_rmass[j] = h_rmass[i]; - h_omega(j,0) = h_omega(i,0); - h_omega(j,1) = h_omega(i,1); - h_omega(j,2) = h_omega(i,2); - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->copy_arrays(i,j,delflag); - - atomKK->modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK | RADIUS_MASK | - RMASS_MASK | OMEGA_MASK); -} - /* ---------------------------------------------------------------------- */ template @@ -1035,397 +956,6 @@ void AtomVecSphereKokkos::unpack_comm_vel_kokkos( /* ---------------------------------------------------------------------- */ -int AtomVecSphereKokkos::pack_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz; - - if (radvary == 0) { - // Not sure if we need to call sync for X here - atomKK->sync(Host,X_MASK); - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - } - } - } else { - atomKK->sync(Host,X_MASK|RADIUS_MASK|RMASS_MASK); - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - buf[m++] = h_radius[j]; - buf[m++] = h_rmass[j]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = h_radius[j]; - buf[m++] = h_rmass[j]; - } - } - } - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecSphereKokkos::pack_comm_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - - if (radvary == 0) { - atomKK->sync(Host,X_MASK|V_MASK|OMEGA_MASK); - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - buf[m++] = h_omega(j,0); - buf[m++] = h_omega(j,1); - buf[m++] = h_omega(j,2); - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - buf[m++] = h_omega(j,0); - buf[m++] = h_omega(j,1); - buf[m++] = h_omega(j,2); - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - if (mask[i] & deform_groupbit) { - buf[m++] = h_v(j,0) + dvx; - buf[m++] = h_v(j,1) + dvy; - buf[m++] = h_v(j,2) + dvz; - } else { - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - buf[m++] = h_omega(j,0); - buf[m++] = h_omega(j,1); - buf[m++] = h_omega(j,2); - } - } - } - } else { - atomKK->sync(Host,X_MASK|RADIUS_MASK|RMASS_MASK|V_MASK|OMEGA_MASK); - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - buf[m++] = h_radius[j]; - buf[m++] = h_rmass[j]; - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - buf[m++] = h_omega(j,0); - buf[m++] = h_omega(j,1); - buf[m++] = h_omega(j,2); - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = h_radius[j]; - buf[m++] = h_rmass[j]; - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - buf[m++] = h_omega(j,0); - buf[m++] = h_omega(j,1); - buf[m++] = h_omega(j,2); - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = h_radius[j]; - buf[m++] = h_rmass[j]; - if (mask[i] & deform_groupbit) { - buf[m++] = h_v(j,0) + dvx; - buf[m++] = h_v(j,1) + dvy; - buf[m++] = h_v(j,2) + dvz; - } else { - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - buf[m++] = h_omega(j,0); - buf[m++] = h_omega(j,1); - buf[m++] = h_omega(j,2); - } - } - } - } - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecSphereKokkos::pack_comm_hybrid(int n, int *list, double *buf) -{ - if (radvary == 0) return 0; - - atomKK->sync(Host,RADIUS_MASK|RMASS_MASK); - - int m = 0; - for (int i = 0; i < n; i++) { - const int j = list[i]; - buf[m++] = h_radius[j]; - buf[m++] = h_rmass[j]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecSphereKokkos::unpack_comm(int n, int first, double *buf) -{ - if (radvary == 0) { - int m = 0; - const int last = first + n; - for (int i = first; i < last; i++) { - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - } - atomKK->modified(Host,X_MASK); - } else { - int m = 0; - const int last = first + n; - for (int i = first; i < last; i++) { - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - h_radius[i] = buf[m++]; - h_rmass[i] = buf[m++]; - } - atomKK->modified(Host,X_MASK|RADIUS_MASK|RMASS_MASK); - } -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecSphereKokkos::unpack_comm_vel(int n, int first, double *buf) -{ - if (radvary == 0) { - int m = 0; - const int last = first + n; - for (int i = first; i < last; i++) { - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - h_v(i,0) = buf[m++]; - h_v(i,1) = buf[m++]; - h_v(i,2) = buf[m++]; - h_omega(i,0) = buf[m++]; - h_omega(i,1) = buf[m++]; - h_omega(i,2) = buf[m++]; - } - atomKK->modified(Host,X_MASK|V_MASK|OMEGA_MASK); - } else { - int m = 0; - const int last = first + n; - for (int i = first; i < last; i++) { - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - h_radius[i] = buf[m++]; - h_rmass[i] = buf[m++]; - h_v(i,0) = buf[m++]; - h_v(i,1) = buf[m++]; - h_v(i,2) = buf[m++]; - h_omega(i,0) = buf[m++]; - h_omega(i,1) = buf[m++]; - h_omega(i,2) = buf[m++]; - } - atomKK->modified(Host,X_MASK|RADIUS_MASK|RMASS_MASK|V_MASK|OMEGA_MASK); - } -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecSphereKokkos::unpack_comm_hybrid(int n, int first, double *buf) -{ - if (radvary == 0) return 0; - - int m = 0; - const int last = first + n; - for (int i = first; i < last; i++) { - h_radius[i] = buf[m++]; - h_rmass[i] = buf[m++]; - } - atomKK->modified(Host,RADIUS_MASK|RMASS_MASK); - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecSphereKokkos::pack_reverse(int n, int first, double *buf) -{ - if (n > 0) - atomKK->sync(Host,F_MASK|TORQUE_MASK); - - int m = 0; - const int last = first + n; - for (int i = first; i < last; i++) { - buf[m++] = h_f(i,0); - buf[m++] = h_f(i,1); - buf[m++] = h_f(i,2); - buf[m++] = h_torque(i,0); - buf[m++] = h_torque(i,1); - buf[m++] = h_torque(i,2); - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecSphereKokkos::pack_reverse_hybrid(int n, int first, double *buf) -{ - if (n > 0) - atomKK->sync(Host,TORQUE_MASK); - - int m = 0; - const int last = first + n; - for (int i = first; i < last; i++) { - buf[m++] = h_torque(i,0); - buf[m++] = h_torque(i,1); - buf[m++] = h_torque(i,2); - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecSphereKokkos::unpack_reverse(int n, int *list, double *buf) -{ - if (n > 0) { - atomKK->modified(Host,F_MASK|TORQUE_MASK); - } - - int m = 0; - for (int i = 0; i < n; i++) { - const int j = list[i]; - h_f(j,0) += buf[m++]; - h_f(j,1) += buf[m++]; - h_f(j,2) += buf[m++]; - h_torque(j,0) += buf[m++]; - h_torque(j,1) += buf[m++]; - h_torque(j,2) += buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecSphereKokkos::unpack_reverse_hybrid(int n, int *list, double *buf) -{ - if (n > 0) { - atomKK->modified(Host,TORQUE_MASK); - } - - int m = 0; - for (int i = 0; i < n; i++) { - const int j = list[i]; - h_torque(j,0) += buf[m++]; - h_torque(j,1) += buf[m++]; - h_torque(j,2) += buf[m++]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - template struct AtomVecSphereKokkos_PackBorder { typedef DeviceType device_type; @@ -1541,60 +1071,6 @@ int AtomVecSphereKokkos::pack_border_kokkos( /* ---------------------------------------------------------------------- */ -int AtomVecSphereKokkos::pack_border( - int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz; - - atomKK->sync(Host,ALL_MASK); - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - buf[m++] = ubuf(h_tag[j]).d; - buf[m++] = ubuf(h_type[j]).d; - buf[m++] = ubuf(h_mask[j]).d; - buf[m++] = h_radius[j]; - buf[m++] = h_rmass[j]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = ubuf(h_tag[j]).d; - buf[m++] = ubuf(h_type[j]).d; - buf[m++] = ubuf(h_mask[j]).d; - buf[m++] = h_radius[j]; - buf[m++] = h_rmass[j]; - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - template struct AtomVecSphereKokkos_PackBorderVel { typedef DeviceType device_type; @@ -1769,115 +1245,6 @@ int AtomVecSphereKokkos::pack_border_vel_kokkos( /* ---------------------------------------------------------------------- */ -int AtomVecSphereKokkos::pack_border_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - - atomKK->sync(Host,ALL_MASK); - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - buf[m++] = ubuf(h_tag[j]).d; - buf[m++] = ubuf(h_type[j]).d; - buf[m++] = ubuf(h_mask[j]).d; - buf[m++] = h_radius[j]; - buf[m++] = h_rmass[j]; - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - buf[m++] = h_omega(j,0); - buf[m++] = h_omega(j,1); - buf[m++] = h_omega(j,2); - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = ubuf(h_tag[j]).d; - buf[m++] = ubuf(h_type[j]).d; - buf[m++] = ubuf(h_mask[j]).d; - buf[m++] = h_radius[j]; - buf[m++] = h_rmass[j]; - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - buf[m++] = h_omega(j,0); - buf[m++] = h_omega(j,1); - buf[m++] = h_omega(j,2); - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = ubuf(h_tag[j]).d; - buf[m++] = ubuf(h_type[j]).d; - buf[m++] = ubuf(h_mask[j]).d; - buf[m++] = h_radius[j]; - buf[m++] = h_rmass[j]; - if (mask[i] & deform_groupbit) { - buf[m++] = h_v(j,0) + dvx; - buf[m++] = h_v(j,1) + dvy; - buf[m++] = h_v(j,2) + dvz; - } else { - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - buf[m++] = h_omega(j,0); - buf[m++] = h_omega(j,1); - buf[m++] = h_omega(j,2); - } - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecSphereKokkos::pack_border_hybrid(int n, int *list, double *buf) -{ - atomKK->sync(Host,RADIUS_MASK|RMASS_MASK); - - int m = 0; - for (int i = 0; i < n; i++) { - const int j = list[i]; - buf[m++] = h_radius[j]; - buf[m++] = h_rmass[j]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - template struct AtomVecSphereKokkos_UnpackBorder { typedef DeviceType device_type; @@ -1945,34 +1312,6 @@ void AtomVecSphereKokkos::unpack_border_kokkos(const int &n, const int &first, RADIUS_MASK|RMASS_MASK); } -/* ---------------------------------------------------------------------- */ - -void AtomVecSphereKokkos::unpack_border(int n, int first, double *buf) -{ - int m = 0; - const int last = first + n; - while (last > nmax) grow(0); - - for (int i = first; i < last; i++) { - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - h_tag[i] = (tagint) ubuf(buf[m++]).i; - h_type[i] = (int) ubuf(buf[m++]).i; - h_mask[i] = (int) ubuf(buf[m++]).i; - h_radius[i] = buf[m++]; - h_rmass[i] = buf[m++]; - } - - atomKK->modified(Host,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|RADIUS_MASK|RMASS_MASK); - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - - /* ---------------------------------------------------------------------- */ template @@ -2058,53 +1397,6 @@ void AtomVecSphereKokkos::unpack_border_vel_kokkos( /* ---------------------------------------------------------------------- */ -void AtomVecSphereKokkos::unpack_border_vel(int n, int first, double *buf) -{ - int m = 0; - const int last = first + n; - while (last > nmax) grow(0); - - for (int i = first; i < last; i++) { - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - h_tag[i] = (tagint) ubuf(buf[m++]).i; - h_type[i] = (int) ubuf(buf[m++]).i; - h_mask[i] = (int) ubuf(buf[m++]).i; - h_radius[i] = buf[m++]; - h_rmass[i] = buf[m++]; - h_v(i,0) = buf[m++]; - h_v(i,1) = buf[m++]; - h_v(i,2) = buf[m++]; - h_omega(i,0) = buf[m++]; - h_omega(i,1) = buf[m++]; - h_omega(i,2) = buf[m++]; - } - - atomKK->modified(Host,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|RADIUS_MASK|RMASS_MASK|V_MASK|OMEGA_MASK); - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecSphereKokkos::unpack_border_hybrid(int n, int first, double *buf) -{ - int m = 0; - const int last = first + n; - for (int i = first; i < last; i++) { - h_radius[i] = buf[m++]; - h_rmass[i] = buf[m++]; - } - atomKK->modified(Host,RADIUS_MASK|RMASS_MASK); - return m; -} - -/* ---------------------------------------------------------------------- */ - template struct AtomVecSphereKokkos_PackExchangeFunctor { typedef DeviceType device_type; @@ -2233,44 +1525,6 @@ int AtomVecSphereKokkos::pack_exchange_kokkos( return nsend*16; } -/* ---------------------------------------------------------------------- - pack data for atom I for sending to another proc - xyz must be 1st 3 values, so comm::exchange() can test on them -------------------------------------------------------------------------- */ - -int AtomVecSphereKokkos::pack_exchange(int i, double *buf) -{ - atomKK->sync(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK| RADIUS_MASK | RMASS_MASK | - OMEGA_MASK); - - - int m = 1; - buf[m++] = h_x(i,0); - buf[m++] = h_x(i,1); - buf[m++] = h_x(i,2); - buf[m++] = h_v(i,0); - buf[m++] = h_v(i,1); - buf[m++] = h_v(i,2); - buf[m++] = ubuf(h_tag[i]).d; - buf[m++] = ubuf(h_type[i]).d; - buf[m++] = ubuf(h_mask[i]).d; - buf[m++] = ubuf(h_image[i]).d; - - buf[m++] = h_radius[i]; - buf[m++] = h_rmass[i]; - buf[m++] = h_omega(i,0); - buf[m++] = h_omega(i,1); - buf[m++] = h_omega(i,2); - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]->pack_exchange(i,&buf[m]); - - buf[0] = m; - return m; -} - /* ---------------------------------------------------------------------- */ template @@ -2366,437 +1620,6 @@ int AtomVecSphereKokkos::unpack_exchange_kokkos(DAT::tdual_xfloat_2d &k_buf,int /* ---------------------------------------------------------------------- */ -int AtomVecSphereKokkos::unpack_exchange(double *buf) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - int m = 1; - h_x(nlocal,0) = buf[m++]; - h_x(nlocal,1) = buf[m++]; - h_x(nlocal,2) = buf[m++]; - h_v(nlocal,0) = buf[m++]; - h_v(nlocal,1) = buf[m++]; - h_v(nlocal,2) = buf[m++]; - h_tag[nlocal] = (tagint) ubuf(buf[m++]).i; - h_type[nlocal] = (int) ubuf(buf[m++]).i; - h_mask[nlocal] = (int) ubuf(buf[m++]).i; - h_image[nlocal] = (imageint) ubuf(buf[m++]).i; - - h_radius[nlocal] = buf[m++]; - h_rmass[nlocal] = buf[m++]; - h_omega(nlocal,0) = buf[m++]; - h_omega(nlocal,1) = buf[m++]; - h_omega(nlocal,2) = buf[m++]; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]-> - unpack_exchange(nlocal,&buf[m]); - - atomKK->modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK | RADIUS_MASK | RMASS_MASK | - OMEGA_MASK); - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - size of restart data for all atoms owned by this proc - include extra data stored by fixes -------------------------------------------------------------------------- */ - -int AtomVecSphereKokkos::size_restart() -{ - int i; - - int nlocal = atom->nlocal; - int n = 16 * nlocal; - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - for (i = 0; i < nlocal; i++) - n += modify->fix[atom->extra_restart[iextra]]->size_restart(i); - - return n; -} - -/* ---------------------------------------------------------------------- - pack atom I's data for restart file including extra quantities - xyz must be 1st 3 values, so that read_restart can test on them - molecular types may be negative, but write as positive -------------------------------------------------------------------------- */ - -int AtomVecSphereKokkos::pack_restart(int i, double *buf) -{ - atomKK->sync(Host,X_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK | V_MASK | - RADIUS_MASK | RMASS_MASK | OMEGA_MASK); - - int m = 1; - buf[m++] = h_x(i,0); - buf[m++] = h_x(i,1); - buf[m++] = h_x(i,2); - buf[m++] = ubuf(h_tag[i]).d; - buf[m++] = ubuf(h_type[i]).d; - buf[m++] = ubuf(h_mask[i]).d; - buf[m++] = ubuf(h_image[i]).d; - buf[m++] = h_v(i,0); - buf[m++] = h_v(i,1); - buf[m++] = h_v(i,2); - - buf[m++] = h_radius[i]; - buf[m++] = h_rmass[i]; - buf[m++] = h_omega(i,0); - buf[m++] = h_omega(i,1); - buf[m++] = h_omega(i,2); - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - m += modify->fix[atom->extra_restart[iextra]]->pack_restart(i,&buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- - unpack data for one atom from restart file including extra quantities -------------------------------------------------------------------------- */ - -int AtomVecSphereKokkos::unpack_restart(double *buf) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) { - grow(0); - if (atom->nextra_store) - memory->grow(atom->extra,nmax,atom->nextra_store,"atom:extra"); - } - - int m = 1; - h_x(nlocal,0) = buf[m++]; - h_x(nlocal,1) = buf[m++]; - h_x(nlocal,2) = buf[m++]; - h_tag[nlocal] = (tagint) ubuf(buf[m++]).i; - h_type[nlocal] = (int) ubuf(buf[m++]).i; - h_mask[nlocal] = (int) ubuf(buf[m++]).i; - h_image[nlocal] = (imageint) ubuf(buf[m++]).i; - h_v(nlocal,0) = buf[m++]; - h_v(nlocal,1) = buf[m++]; - h_v(nlocal,2) = buf[m++]; - - h_radius[nlocal] = buf[m++]; - h_rmass[nlocal] = buf[m++]; - h_omega(nlocal,0) = buf[m++]; - h_omega(nlocal,1) = buf[m++]; - h_omega(nlocal,2) = buf[m++]; - - double **extra = atom->extra; - if (atom->nextra_store) { - int size = static_cast (buf[0]) - m; - for (int i = 0; i < size; i++) extra[nlocal][i] = buf[m++]; - } - - atomKK->modified(Host,X_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK | V_MASK | - RADIUS_MASK | RMASS_MASK | OMEGA_MASK); - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - create one atom of itype at coord - set other values to defaults -------------------------------------------------------------------------- */ - -void AtomVecSphereKokkos::create_atom(int itype, double *coord) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) { - grow(0); - } - - h_tag[nlocal] = 0; - h_type[nlocal] = itype; - h_x(nlocal,0) = coord[0]; - h_x(nlocal,1) = coord[1]; - h_x(nlocal,2) = coord[2]; - h_mask[nlocal] = 1; - h_image[nlocal] = ((imageint) IMGMAX << IMG2BITS) | - ((imageint) IMGMAX << IMGBITS) | IMGMAX; - h_v(nlocal,0) = 0.0; - h_v(nlocal,1) = 0.0; - h_v(nlocal,2) = 0.0; - - h_radius[nlocal] = 0.5; - h_rmass[nlocal] = 4.0*MY_PI/3.0 * h_radius[nlocal]*h_radius[nlocal]*h_radius[nlocal]; - h_omega(nlocal,0) = 0.0; - h_omega(nlocal,1) = 0.0; - h_omega(nlocal,2) = 0.0; - - atomKK->modified(Host,ALL_MASK); - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack one line from Atoms section of data file - initialize other atom quantities -------------------------------------------------------------------------- */ - -void AtomVecSphereKokkos::data_atom(double *coord, imageint imagetmp, - const std::vector &values, std::string &extract) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - tag[nlocal] = utils::tnumeric(FLERR,values[0],true,lmp); - type[nlocal] = utils::inumeric(FLERR,values[1],true,lmp); - extract = values[1]; - if (type[nlocal] <= 0 || type[nlocal] > atom->ntypes) - error->one(FLERR,"Invalid atom type in Atoms section of data file"); - - radius[nlocal] = 0.5 * utils::numeric(FLERR,values[2],true,lmp); - if (radius[nlocal] < 0.0) - error->one(FLERR,"Invalid radius in Atoms section of data file"); - - double density = utils::numeric(FLERR,values[3],true,lmp); - if (density <= 0.0) - error->one(FLERR,"Invalid density in Atoms section of data file"); - - if (radius[nlocal] == 0.0) rmass[nlocal] = density; - else - rmass[nlocal] = 4.0*MY_PI/3.0 * - radius[nlocal]*radius[nlocal]*radius[nlocal] * density; - - x[nlocal][0] = coord[0]; - x[nlocal][1] = coord[1]; - x[nlocal][2] = coord[2]; - - image[nlocal] = imagetmp; - - mask[nlocal] = 1; - v[nlocal][0] = 0.0; - v[nlocal][1] = 0.0; - v[nlocal][2] = 0.0; - omega[nlocal][0] = 0.0; - omega[nlocal][1] = 0.0; - omega[nlocal][2] = 0.0; - - atomKK->modified(Host,ALL_MASK); - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack hybrid quantities from one line in Atoms section of data file - initialize other atom quantities for this sub-style -------------------------------------------------------------------------- */ - -int AtomVecSphereKokkos::data_atom_hybrid(int nlocal, const std::vector &values, - int offset) -{ - radius[nlocal] = 0.5 * utils::numeric(FLERR,values[offset],true,lmp); - if (radius[nlocal] < 0.0) - error->one(FLERR,"Invalid radius in Atoms section of data file"); - - double density = utils::numeric(FLERR,values[offset+1],true,lmp); - if (density <= 0.0) - error->one(FLERR,"Invalid density in Atoms section of data file"); - - if (radius[nlocal] == 0.0) rmass[nlocal] = density; - else - rmass[nlocal] = 4.0*MY_PI/3.0 * - radius[nlocal]*radius[nlocal]*radius[nlocal] * density; - - - atomKK->modified(Host,RADIUS_MASK|RMASS_MASK); - - return 2; -} - -/* ---------------------------------------------------------------------- - unpack one line from Velocities section of data file -------------------------------------------------------------------------- */ - -void AtomVecSphereKokkos::data_vel(int m, const std::vector &values) -{ - int ivalue = 1; - atomKK->sync(Host,V_MASK|OMEGA_MASK); - h_v(m,0) = utils::numeric(FLERR,values[ivalue++],true,lmp); - h_v(m,1) = utils::numeric(FLERR,values[ivalue++],true,lmp); - h_v(m,2) = utils::numeric(FLERR,values[ivalue++],true,lmp); - h_omega(m,0) = utils::numeric(FLERR,values[ivalue++],true,lmp); - h_omega(m,1) = utils::numeric(FLERR,values[ivalue++],true,lmp); - h_omega(m,2) = utils::numeric(FLERR,values[ivalue++],true,lmp); - atomKK->modified(Host,V_MASK|OMEGA_MASK); -} - -/* ---------------------------------------------------------------------- - unpack hybrid quantities from one line in Velocities section of data file -------------------------------------------------------------------------- */ - -int AtomVecSphereKokkos::data_vel_hybrid(int m, const std::vector &values, - int offset) -{ - atomKK->sync(Host,OMEGA_MASK); - omega[m][0] = utils::numeric(FLERR,values[offset],true,lmp); - omega[m][1] = utils::numeric(FLERR,values[offset+1],true,lmp); - omega[m][2] = utils::numeric(FLERR,values[offset+2],true,lmp); - atomKK->modified(Host,OMEGA_MASK); - return 3; -} - -/* ---------------------------------------------------------------------- - pack atom info for data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecSphereKokkos::pack_data(double **buf) -{ - atomKK->sync(Host,TAG_MASK|TYPE_MASK|RADIUS_MASK|RMASS_MASK|X_MASK|IMAGE_MASK); - - int nlocal = atom->nlocal; - for (int i = 0; i < nlocal; i++) { - buf[i][0] = ubuf(h_tag[i]).d; - buf[i][1] = ubuf(h_type[i]).d; - buf[i][2] = 2.0*h_radius[i]; - if (h_radius[i] == 0.0) buf[i][3] = h_rmass[i]; - else - buf[i][3] = h_rmass[i] / (4.0*MY_PI/3.0 * h_radius[i]*h_radius[i]*h_radius[i]); - buf[i][4] = h_x(i,0); - buf[i][5] = h_x(i,1); - buf[i][6] = h_x(i,2); - buf[i][7] = ubuf((h_image[i] & IMGMASK) - IMGMAX).d; - buf[i][8] = ubuf((h_image[i] >> IMGBITS & IMGMASK) - IMGMAX).d; - buf[i][9] = ubuf((h_image[i] >> IMG2BITS) - IMGMAX).d; - } -} - -/* ---------------------------------------------------------------------- - pack hybrid atom info for data file -------------------------------------------------------------------------- */ - -int AtomVecSphereKokkos::pack_data_hybrid(int i, double *buf) -{ - atomKK->sync(Host,RADIUS_MASK|RMASS_MASK); - - buf[0] = 2.0*h_radius[i]; - if (h_radius[i] == 0.0) buf[1] = h_rmass[i]; - else buf[1] = h_rmass[i] / (4.0*MY_PI/3.0 * h_radius[i]*h_radius[i]*h_radius[i]); - return 2; -} - -/* ---------------------------------------------------------------------- - write atom info to data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecSphereKokkos::write_data(FILE *fp, int n, double **buf) -{ - for (int i = 0; i < n; i++) - fprintf(fp,TAGINT_FORMAT - " %d %-1.16e %-1.16e %-1.16e %-1.16e %-1.16e %d %d %d\n", - (tagint) ubuf(buf[i][0]).i,(int) ubuf(buf[i][1]).i, - buf[i][2],buf[i][3], - buf[i][4],buf[i][5],buf[i][6], - (int) ubuf(buf[i][7]).i,(int) ubuf(buf[i][8]).i, - (int) ubuf(buf[i][9]).i); -} - -/* ---------------------------------------------------------------------- - write hybrid atom info to data file -------------------------------------------------------------------------- */ - -int AtomVecSphereKokkos::write_data_hybrid(FILE *fp, double *buf) -{ - fprintf(fp," %-1.16e %-1.16e",buf[0],buf[1]); - return 2; -} - -/* ---------------------------------------------------------------------- - pack velocity info for data file -------------------------------------------------------------------------- */ - -void AtomVecSphereKokkos::pack_vel(double **buf) -{ - atomKK->sync(Host,TAG_MASK|V_MASK|OMEGA_MASK); - - int nlocal = atom->nlocal; - for (int i = 0; i < nlocal; i++) { - buf[i][0] = ubuf(h_tag[i]).d; - buf[i][1] = h_v(i,0); - buf[i][2] = h_v(i,1); - buf[i][3] = h_v(i,2); - buf[i][4] = h_omega(i,0); - buf[i][5] = h_omega(i,1); - buf[i][6] = h_omega(i,2); - } -} - -/* ---------------------------------------------------------------------- - pack hybrid velocity info for data file -------------------------------------------------------------------------- */ - -int AtomVecSphereKokkos::pack_vel_hybrid(int i, double *buf) -{ - atomKK->sync(Host,OMEGA_MASK); - - buf[0] = h_omega(i,0); - buf[1] = h_omega(i,1); - buf[2] = h_omega(i,2); - return 3; -} - -/* ---------------------------------------------------------------------- - write velocity info to data file -------------------------------------------------------------------------- */ - -void AtomVecSphereKokkos::write_vel(FILE *fp, int n, double **buf) -{ - for (int i = 0; i < n; i++) - fprintf(fp,TAGINT_FORMAT - " %-1.16e %-1.16e %-1.16e %-1.16e %-1.16e %-1.16e\n", - (tagint) ubuf(buf[i][0]).i,buf[i][1],buf[i][2],buf[i][3], - buf[i][4],buf[i][5],buf[i][6]); -} - -/* ---------------------------------------------------------------------- - write hybrid velocity info to data file -------------------------------------------------------------------------- */ - -int AtomVecSphereKokkos::write_vel_hybrid(FILE *fp, double *buf) -{ - fprintf(fp," %-1.16e %-1.16e %-1.16e",buf[0],buf[1],buf[2]); - return 3; -} - -/* ---------------------------------------------------------------------- - return # of bytes of allocated memory -------------------------------------------------------------------------- */ - -double AtomVecSphereKokkos::memory_usage() -{ - double bytes = 0; - - if (atom->memcheck("tag")) bytes += memory->usage(tag,nmax); - if (atom->memcheck("type")) bytes += memory->usage(type,nmax); - if (atom->memcheck("mask")) bytes += memory->usage(mask,nmax); - if (atom->memcheck("image")) bytes += memory->usage(image,nmax); - if (atom->memcheck("x")) bytes += memory->usage(x,nmax,3); - if (atom->memcheck("v")) bytes += memory->usage(v,nmax,3); - if (atom->memcheck("f")) bytes += memory->usage(f,nmax*comm->nthreads,3); - - if (atom->memcheck("radius")) bytes += memory->usage(radius,nmax); - if (atom->memcheck("rmass")) bytes += memory->usage(rmass,nmax); - if (atom->memcheck("omega")) bytes += memory->usage(omega,nmax,3); - if (atom->memcheck("torque")) - bytes += memory->usage(torque,nmax*comm->nthreads,3); - - return bytes; -} - -/* ---------------------------------------------------------------------- */ - void AtomVecSphereKokkos::sync(ExecutionSpace space, unsigned int mask) { if (space == Device) { diff --git a/src/KOKKOS/atom_vec_sphere_kokkos.h b/src/KOKKOS/atom_vec_sphere_kokkos.h index de3cd17065..0783fd874e 100644 --- a/src/KOKKOS/atom_vec_sphere_kokkos.h +++ b/src/KOKKOS/atom_vec_sphere_kokkos.h @@ -24,53 +24,17 @@ AtomStyle(sphere/kk/host,AtomVecSphereKokkos); #define LMP_ATOM_VEC_SPHERE_KOKKOS_H #include "atom_vec_kokkos.h" +#include "atom_vec_sphere.h" #include "kokkos_type.h" namespace LAMMPS_NS { -class AtomVecSphereKokkos : public AtomVecKokkos { +class AtomVecSphereKokkos : public AtomVecKokkos, public AtomVecSphere { public: AtomVecSphereKokkos(class LAMMPS *); - void init() override; void grow(int) override; void grow_pointers() override; - void copy(int, int, int) override; - int pack_comm(int, int *, double *, int, int *) override; - int pack_comm_vel(int, int *, double *, int, int *) override; - int pack_comm_hybrid(int, int *, double *) override; - void unpack_comm(int, int, double *) override; - void unpack_comm_vel(int, int, double *) override; - int unpack_comm_hybrid(int, int, double *) override; - int pack_reverse(int, int, double *) override; - int pack_reverse_hybrid(int, int, double *) override; - void unpack_reverse(int, int *, double *) override; - int unpack_reverse_hybrid(int, int *, double *) override; - int pack_border(int, int *, double *, int, int *) override; - int pack_border_vel(int, int *, double *, int, int *) override; - int pack_border_hybrid(int, int *, double *) override; - void unpack_border(int, int, double *) override; - void unpack_border_vel(int, int, double *) override; - int unpack_border_hybrid(int, int, double *) override; - int pack_exchange(int, double *) override; - int unpack_exchange(double *) override; - int size_restart() override; - int pack_restart(int, double *) override; - int unpack_restart(double *) override; - void create_atom(int, double *) override; - void data_atom(double *, imageint, const std::vector &, std::string &) override; - int data_atom_hybrid(int, const std::vector &, int) override; - void data_vel(int, const std::vector &) override; - int data_vel_hybrid(int, const std::vector &, int) override; - void pack_data(double **) override; - int pack_data_hybrid(int, double *) override; - void write_data(FILE *, int, double **) override; - int write_data_hybrid(FILE *, double *) override; - void pack_vel(double **) override; - int pack_vel_hybrid(int, double *) override; - void write_vel(FILE *, int, double **) override; - int write_vel_hybrid(FILE *, double *) override; - double memory_usage() override; int pack_comm_kokkos(const int &n, const DAT::tdual_int_2d &k_sendlist, const int & iswap, @@ -113,13 +77,7 @@ class AtomVecSphereKokkos : public AtomVecKokkos { void sync_overlapping_device(ExecutionSpace space, unsigned int mask) override; private: - tagint *tag; - int *type,*mask; - imageint *image; - double **x,**v,**f; - double *radius,*rmass; - double **omega,**torque; - int radvary; + double **torque; DAT::t_tagint_1d d_tag; HAT::t_tagint_1d h_tag; @@ -139,12 +97,9 @@ class AtomVecSphereKokkos : public AtomVecKokkos { HAT::t_v_array h_omega; DAT::t_f_array d_torque; HAT::t_f_array h_torque; - - DAT::tdual_int_1d k_count; }; -} +} // namespace LAMMPS_NS #endif #endif - diff --git a/src/KOKKOS/atom_vec_spin_kokkos.cpp b/src/KOKKOS/atom_vec_spin_kokkos.cpp index cc54fefa80..655f2ec8c1 100644 --- a/src/KOKKOS/atom_vec_spin_kokkos.cpp +++ b/src/KOKKOS/atom_vec_spin_kokkos.cpp @@ -41,26 +41,10 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -AtomVecSpinKokkos::AtomVecSpinKokkos(LAMMPS *lmp) : AtomVecKokkos(lmp) +AtomVecSpinKokkos::AtomVecSpinKokkos(LAMMPS *lmp) : AtomVec(lmp), +AtomVecKokkos(lmp), AtomVecSpin(lmp) { - molecular = 0; - mass_type = 1; - forceclearflag = 1; - comm_x_only = comm_f_only = 0; - size_forward = 7; - size_reverse = 9; - size_border = 10; - size_velocity = 3; - size_data_atom = 9; - size_data_vel = 4; - xcol_data = 4; - - atom->sp_flag = 1; - - k_count = DAT::tdual_int_1d("atom::k_count",1); - atomKK = (AtomKokkos *) atom; - commKK = (CommKokkos *) comm; } /* ---------------------------------------------------------------------- @@ -147,33 +131,6 @@ void AtomVecSpinKokkos::grow_pointers() h_fm_long = atomKK->k_fm_long.h_view; } -/* ---------------------------------------------------------------------- - copy atom I info to atom J -------------------------------------------------------------------------- */ - -void AtomVecSpinKokkos::copy(int i, int j, int delflag) -{ - h_tag[j] = h_tag[i]; - h_type[j] = h_type[i]; - mask[j] = mask[i]; - h_image[j] = h_image[i]; - h_x(j,0) = h_x(i,0); - h_x(j,1) = h_x(i,1); - h_x(j,2) = h_x(i,2); - h_v(j,0) = h_v(i,0); - h_v(j,1) = h_v(i,1); - h_v(j,2) = h_v(i,2); - - h_sp(j,0) = h_sp(i,0); - h_sp(j,1) = h_sp(i,1); - h_sp(j,2) = h_sp(i,2); - h_sp(j,3) = h_sp(i,3); - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->copy_arrays(i,j,delflag); -} - /* ---------------------------------------------------------------------- */ template @@ -347,167 +304,6 @@ int AtomVecSpinKokkos::pack_border_kokkos(int n, DAT::tdual_int_2d k_sendlist, D /* ---------------------------------------------------------------------- */ -int AtomVecSpinKokkos::pack_border(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = h_sp(j,0); - buf[m++] = h_sp(j,1); - buf[m++] = h_sp(j,2); - buf[m++] = h_sp(j,3); - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = h_sp(j,0); - buf[m++] = h_sp(j,1); - buf[m++] = h_sp(j,2); - buf[m++] = h_sp(j,3); - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecSpinKokkos::pack_border_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0); - buf[m++] = h_x(j,1); - buf[m++] = h_x(j,2); - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = h_sp(j,0); - buf[m++] = h_sp(j,1); - buf[m++] = h_sp(j,2); - buf[m++] = h_sp(j,3); - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = h_sp(j,0); - buf[m++] = h_sp(j,1); - buf[m++] = h_sp(j,2); - buf[m++] = h_sp(j,3); - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_x(j,0) + dx; - buf[m++] = h_x(j,1) + dy; - buf[m++] = h_x(j,2) + dz; - buf[m++] = ubuf(h_tag(j)).d; - buf[m++] = ubuf(h_type(j)).d; - buf[m++] = ubuf(h_mask(j)).d; - buf[m++] = h_sp(j,0); - buf[m++] = h_sp(j,1); - buf[m++] = h_sp(j,2); - buf[m++] = h_sp(j,3); - if (mask[i] & deform_groupbit) { - buf[m++] = h_v(j,0) + dvx; - buf[m++] = h_v(j,1) + dvy; - buf[m++] = h_v(j,2) + dvz; - } else { - buf[m++] = h_v(j,0); - buf[m++] = h_v(j,1); - buf[m++] = h_v(j,2); - } - } - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecSpinKokkos::pack_border_hybrid(int n, int *list, double *buf) -{ - int i,j,m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = h_sp(j,0); - buf[m++] = h_sp(j,1); - buf[m++] = h_sp(j,2); - buf[m++] = h_sp(j,3); - } - return m; -} - -/* ---------------------------------------------------------------------- */ - template struct AtomVecSpinKokkos_UnpackBorder { typedef DeviceType device_type; @@ -568,87 +364,6 @@ void AtomVecSpinKokkos::unpack_border_kokkos(const int &n, const int &first, /* ---------------------------------------------------------------------- */ -void AtomVecSpinKokkos::unpack_border(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - - for (i = first; i < last; i++) { - if (i == nmax) { - grow(0); - } - atomKK->modified(Host,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|SP_MASK); - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - h_tag(i) = (tagint) ubuf(buf[m++]).i; - h_type(i) = (int) ubuf(buf[m++]).i; - h_mask(i) = (int) ubuf(buf[m++]).i; - h_sp(i,0) = buf[m++]; - h_sp(i,1) = buf[m++]; - h_sp(i,2) = buf[m++]; - h_sp(i,3) = buf[m++]; - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecSpinKokkos::unpack_border_vel(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - if (i == nmax) grow(0); - atomKK->modified(Host,X_MASK|V_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|SP_MASK); - h_x(i,0) = buf[m++]; - h_x(i,1) = buf[m++]; - h_x(i,2) = buf[m++]; - h_tag(i) = (tagint) ubuf(buf[m++]).i; - h_type(i) = (int) ubuf(buf[m++]).i; - h_mask(i) = (int) ubuf(buf[m++]).i; - h_sp(i,0) = buf[m++]; - h_sp(i,1) = buf[m++]; - h_sp(i,2) = buf[m++]; - h_sp(i,3) = buf[m++]; - h_v(i,0) = buf[m++]; - h_v(i,1) = buf[m++]; - h_v(i,2) = buf[m++]; - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecSpinKokkos::unpack_border_hybrid(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - h_sp(i,0) = buf[m++]; - h_sp(i,1) = buf[m++]; - h_sp(i,2) = buf[m++]; - h_sp(i,3) = buf[m++]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - template struct AtomVecSpinKokkos_PackExchangeFunctor { typedef DeviceType device_type; @@ -771,34 +486,6 @@ int AtomVecSpinKokkos::pack_exchange_kokkos(const int &nsend,DAT::tdual_xfloat_2 /* ---------------------------------------------------------------------- */ -int AtomVecSpinKokkos::pack_exchange(int i, double *buf) -{ - int m = 1; - buf[m++] = h_x(i,0); - buf[m++] = h_x(i,1); - buf[m++] = h_x(i,2); - buf[m++] = h_v(i,0); - buf[m++] = h_v(i,1); - buf[m++] = h_v(i,2); - buf[m++] = ubuf(h_tag(i)).d; - buf[m++] = ubuf(h_type(i)).d; - buf[m++] = ubuf(h_mask(i)).d; - buf[m++] = ubuf(h_image(i)).d; - buf[m++] = h_sp(i,0); - buf[m++] = h_sp(i,1); - buf[m++] = h_sp(i,2); - buf[m++] = h_sp(i,3); - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]->pack_exchange(i,&buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- */ - template struct AtomVecSpinKokkos_UnpackExchangeFunctor { typedef DeviceType device_type; @@ -886,321 +573,6 @@ int AtomVecSpinKokkos::unpack_exchange_kokkos(DAT::tdual_xfloat_2d &k_buf,int nr /* ---------------------------------------------------------------------- */ -int AtomVecSpinKokkos::unpack_exchange(double *buf) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - atomKK->modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK | SP_MASK); - - int m = 1; - h_x(nlocal,0) = buf[m++]; - h_x(nlocal,1) = buf[m++]; - h_x(nlocal,2) = buf[m++]; - h_v(nlocal,0) = buf[m++]; - h_v(nlocal,1) = buf[m++]; - h_v(nlocal,2) = buf[m++]; - h_tag(nlocal) = (tagint) ubuf(buf[m++]).i; - h_type(nlocal) = (int) ubuf(buf[m++]).i; - h_mask(nlocal) = (int) ubuf(buf[m++]).i; - h_image(nlocal) = (imageint) ubuf(buf[m++]).i; - h_sp(nlocal,0) = buf[m++]; - h_sp(nlocal,1) = buf[m++]; - h_sp(nlocal,2) = buf[m++]; - h_sp(nlocal,3) = buf[m++]; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]-> - unpack_exchange(nlocal,&buf[m]); - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - size of restart data for all atoms owned by this proc - include extra data stored by fixes -------------------------------------------------------------------------- */ - -int AtomVecSpinKokkos::size_restart() -{ - int i; - - int nlocal = atom->nlocal; - int n = 15 * nlocal; - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - for (i = 0; i < nlocal; i++) - n += modify->fix[atom->extra_restart[iextra]]->size_restart(i); - - return n; -} - -/* ---------------------------------------------------------------------- - pack atom I's data for restart file including extra quantities - xyz must be 1st 3 values, so that read_restart can test on them - molecular types may be negative, but write as positive -------------------------------------------------------------------------- */ - -int AtomVecSpinKokkos::pack_restart(int i, double *buf) -{ - atomKK->sync(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK | SP_MASK); - - int m = 1; - buf[m++] = h_x(i,0); - buf[m++] = h_x(i,1); - buf[m++] = h_x(i,2); - buf[m++] = ubuf(h_tag(i)).d; - buf[m++] = ubuf(h_type(i)).d; - buf[m++] = ubuf(h_mask(i)).d; - buf[m++] = ubuf(h_image(i)).d; - buf[m++] = h_v(i,0); - buf[m++] = h_v(i,1); - buf[m++] = h_v(i,2); - - buf[m++] = h_sp(i,0); - buf[m++] = h_sp(i,1); - buf[m++] = h_sp(i,2); - buf[m++] = h_sp(i,3); - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - m += modify->fix[atom->extra_restart[iextra]]->pack_restart(i,&buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- - unpack data for one atom from restart file including extra quantities -------------------------------------------------------------------------- */ - -int AtomVecSpinKokkos::unpack_restart(double *buf) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) { - grow(0); - if (atom->nextra_store) - memory->grow(atom->extra,nmax,atom->nextra_store,"atom:extra"); - } - - atomKK->modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | - MASK_MASK | IMAGE_MASK | SP_MASK); - - int m = 1; - h_x(nlocal,0) = buf[m++]; - h_x(nlocal,1) = buf[m++]; - h_x(nlocal,2) = buf[m++]; - h_tag(nlocal) = (tagint) ubuf(buf[m++]).i; - h_type(nlocal) = (int) ubuf(buf[m++]).i; - h_mask(nlocal) = (int) ubuf(buf[m++]).i; - h_image(nlocal) = (imageint) ubuf(buf[m++]).i; - h_v(nlocal,0) = buf[m++]; - h_v(nlocal,1) = buf[m++]; - h_v(nlocal,2) = buf[m++]; - - h_sp(nlocal,0) = buf[m++]; - h_sp(nlocal,1) = buf[m++]; - h_sp(nlocal,2) = buf[m++]; - h_sp(nlocal,3) = buf[m++]; - - double **extra = atom->extra; - if (atom->nextra_store) { - int size = static_cast (buf[0]) - m; - for (int i = 0; i < size; i++) extra[nlocal][i] = buf[m++]; - } - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - create one atom of itype at coord - set other values to defaults -------------------------------------------------------------------------- */ - -void AtomVecSpinKokkos::create_atom(int itype, double *coord) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) { - atomKK->modified(Host,ALL_MASK); - grow(0); - } - atomKK->sync(Host,ALL_MASK); - atomKK->modified(Host,ALL_MASK); - - h_tag[nlocal] = 0; - h_type[nlocal] = itype; - h_x(nlocal,0) = coord[0]; - h_x(nlocal,1) = coord[1]; - h_x(nlocal,2) = coord[2]; - h_mask[nlocal] = 1; - h_image[nlocal] = ((imageint) IMGMAX << IMG2BITS) | - ((imageint) IMGMAX << IMGBITS) | IMGMAX; - h_v(nlocal,0) = 0.0; - h_v(nlocal,1) = 0.0; - h_v(nlocal,2) = 0.0; - - h_sp(nlocal,0) = 0.0; - h_sp(nlocal,1) = 0.0; - h_sp(nlocal,2) = 0.0; - h_sp(nlocal,3) = 0.0; - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack one line from Atoms section of data file - initialize other atom quantities -------------------------------------------------------------------------- */ - -void AtomVecSpinKokkos::data_atom(double *coord, imageint imagetmp, - const std::vector &values, std::string &extract) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - h_tag[nlocal] = utils::inumeric(FLERR,values[0],true,lmp); - h_type[nlocal] = utils::inumeric(FLERR,values[1],true,lmp); - extract = values[1]; - if (type[nlocal] <= 0 || type[nlocal] > atom->ntypes) - error->one(FLERR,"Invalid atom type in Atoms section of data file"); - - h_sp(nlocal,3) = utils::numeric(FLERR,values[2],true,lmp); - h_sp(nlocal,0) = utils::numeric(FLERR,values[6],true,lmp); - h_sp(nlocal,1) = utils::numeric(FLERR,values[7],true,lmp); - h_sp(nlocal,2) = utils::numeric(FLERR,values[8],true,lmp); - double inorm = 1.0/sqrt(sp[nlocal][0]*sp[nlocal][0] + - sp[nlocal][1]*sp[nlocal][1] + - sp[nlocal][2]*sp[nlocal][2]); - h_sp(nlocal,0) *= inorm; - h_sp(nlocal,1) *= inorm; - h_sp(nlocal,2) *= inorm; - - h_x(nlocal,0) = coord[0]; - h_x(nlocal,1) = coord[1]; - h_x(nlocal,2) = coord[2]; - - h_image[nlocal] = imagetmp; - - h_mask[nlocal] = 1; - h_v(nlocal,0) = 0.0; - h_v(nlocal,1) = 0.0; - h_v(nlocal,2) = 0.0; - - atomKK->modified(Host,ALL_MASK); - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack hybrid quantities from one line in Atoms section of data file - initialize other atom quantities for this sub-style -------------------------------------------------------------------------- */ - -int AtomVecSpinKokkos::data_atom_hybrid(int nlocal, const std::vector &values, - int offset) -{ - h_sp(nlocal,3) = utils::numeric(FLERR,values[offset],true,lmp); - h_sp(nlocal,0) = utils::numeric(FLERR,values[offset+1],true,lmp); - h_sp(nlocal,1) = utils::numeric(FLERR,values[offset+2],true,lmp); - h_sp(nlocal,2) = utils::numeric(FLERR,values[offset+3],true,lmp); - double inorm = 1.0/sqrt(sp[nlocal][0]*sp[nlocal][0] + - sp[nlocal][1]*sp[nlocal][1] + - sp[nlocal][2]*sp[nlocal][2]); - sp[nlocal][0] *= inorm; - sp[nlocal][1] *= inorm; - sp[nlocal][2] *= inorm; - - return 4; -} - -/* ---------------------------------------------------------------------- - pack atom info for data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecSpinKokkos::pack_data(double **buf) -{ - int nlocal = atom->nlocal; - for (int i = 0; i < nlocal; i++) { - buf[i][0] = h_tag[i]; - buf[i][1] = h_type[i]; - buf[i][2] = h_sp(i,0); - buf[i][3] = h_x(i,0); - buf[i][4] = h_x(i,1); - buf[i][5] = h_x(i,2); - buf[i][2] = h_sp(i,1); - buf[i][2] = h_sp(i,2); - buf[i][2] = h_sp(i,3); - buf[i][6] = (h_image[i] & IMGMASK) - IMGMAX; - buf[i][7] = (h_image[i] >> IMGBITS & IMGMASK) - IMGMAX; - buf[i][8] = (h_image[i] >> IMG2BITS) - IMGMAX; - } -} - -/* ---------------------------------------------------------------------- - pack hybrid atom info for data file -------------------------------------------------------------------------- */ - -int AtomVecSpinKokkos::pack_data_hybrid(int i, double *buf) -{ - buf[0] = h_sp(i,3); - buf[1] = h_sp(i,0); - buf[2] = h_sp(i,1); - buf[3] = h_sp(i,2); - return 4; -} - -/* ---------------------------------------------------------------------- - write atom info to data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecSpinKokkos::write_data(FILE *fp, int n, double **buf) -{ - for (int i = 0; i < n; i++) - fprintf(fp,"%d %d %-1.16e %-1.16e %-1.16e %-1.16e %d %d %d\n", - (int) buf[i][0],(int) buf[i][1],buf[i][2],buf[i][3],buf[i][4], - buf[i][5],(int) buf[i][6],(int) buf[i][7],(int) buf[i][8]); -} - -/* ---------------------------------------------------------------------- - write hybrid atom info to data file -------------------------------------------------------------------------- */ - -int AtomVecSpinKokkos::write_data_hybrid(FILE *fp, double *buf) -{ - fprintf(fp," %-1.16e %-1.16e %-1.16e %-1.16e",buf[0],buf[1],buf[2],buf[3]); - return 4; -} - -/* ---------------------------------------------------------------------- - return # of bytes of allocated memory -------------------------------------------------------------------------- */ - -double AtomVecSpinKokkos::memory_usage() -{ - bigint bytes = 0; - - if (atom->memcheck("tag")) bytes += memory->usage(tag,nmax); - if (atom->memcheck("type")) bytes += memory->usage(type,nmax); - if (atom->memcheck("mask")) bytes += memory->usage(mask,nmax); - if (atom->memcheck("image")) bytes += memory->usage(image,nmax); - if (atom->memcheck("x")) bytes += memory->usage(x,nmax,3); - if (atom->memcheck("v")) bytes += memory->usage(v,nmax,3); - if (atom->memcheck("f")) bytes += memory->usage(f,nmax*commKK->nthreads,3); - - if (atom->memcheck("sp")) bytes += memory->usage(sp,nmax,4); - if (atom->memcheck("fm")) bytes += memory->usage(fm,nmax*comm->nthreads,3); - if (atom->memcheck("fm_long")) bytes += memory->usage(fm_long,nmax*comm->nthreads,3); - - return bytes; -} - -/* ---------------------------------------------------------------------- */ - void AtomVecSpinKokkos::sync(ExecutionSpace space, unsigned int mask) { if (space == Device) { @@ -1303,14 +675,3 @@ void AtomVecSpinKokkos::sync_overlapping_device(ExecutionSpace space, unsigned i perform_async_copy(atomKK->k_fm_long,space); } } - -/* ---------------------------------------------------------------------- - clear all forces (mech and mag) -------------------------------------------------------------------------- */ - -void AtomVecSpinKokkos::force_clear(int n, size_t nbytes) -{ - memset(&f[n][0],0,3*nbytes); - memset(&fm[n][0],0,3*nbytes); - memset(&fm_long[n][0],0,3*nbytes); -} diff --git a/src/KOKKOS/atom_vec_spin_kokkos.h b/src/KOKKOS/atom_vec_spin_kokkos.h index 36895ef632..68834d4ef2 100644 --- a/src/KOKKOS/atom_vec_spin_kokkos.h +++ b/src/KOKKOS/atom_vec_spin_kokkos.h @@ -24,39 +24,15 @@ AtomStyle(spin/kk/host,AtomVecSpinKokkos); #define LMP_ATOM_VEC_SPIN_KOKKOS_H #include "atom_vec_kokkos.h" +#include "atom_vec_spin.h" #include "kokkos_type.h" namespace LAMMPS_NS { -class AtomVecSpinKokkos : public AtomVecKokkos { +class AtomVecSpinKokkos : public AtomVecKokkos, public AtomVecSpin { public: AtomVecSpinKokkos(class LAMMPS *); void grow(int) override; - void copy(int, int, int) override; - int pack_border(int, int *, double *, int, int *) override; - int pack_border_vel(int, int *, double *, int, int *) override; - int pack_border_hybrid(int, int *, double *) override; - void unpack_border(int, int, double *) override; - void unpack_border_vel(int, int, double *) override; - int unpack_border_hybrid(int, int, double *) override; - int pack_exchange(int, double *) override; - int unpack_exchange(double *) override; - int size_restart() override; - int pack_restart(int, double *) override; - int unpack_restart(double *) override; - void create_atom(int, double *) override; - void data_atom(double *, imageint, const std::vector &, std::string &) override; - int data_atom_hybrid(int, const std::vector &, int) override; - void pack_data(double **) override; - int pack_data_hybrid(int, double *) override; - void write_data(FILE *, int, double **) override; - int write_data_hybrid(FILE *, double *) override; - double memory_usage() override; - - // clear magnetic and mechanic forces - - void force_clear(int, size_t) override; - void grow_pointers() override; // input lists to be checked int pack_border_kokkos(int n, DAT::tdual_int_2d k_sendlist, @@ -79,17 +55,6 @@ class AtomVecSpinKokkos : public AtomVecKokkos { void sync_overlapping_device(ExecutionSpace space, unsigned int mask) override; protected: - tagint *tag; - int *type,*mask; - imageint *image; - double **x,**v,**f; // lattice quantities - - // spin quantities - double **sp; // sp[i][0-2] direction of the spin i - // sp[i][3] atomic magnetic moment of the spin i - double **fm; // fm[i][0-2] direction of magnetic precession - double **fm_long; // storage of long-range spin prec. components - DAT::t_tagint_1d d_tag; HAT::t_tagint_1d h_tag; @@ -110,12 +75,9 @@ class AtomVecSpinKokkos : public AtomVecKokkos { HAT::t_sp_array h_sp; HAT::t_fm_array h_fm; HAT::t_fm_long_array h_fm_long; - - DAT::tdual_int_1d k_count; }; -} +} // namespace LAMMPS_NS #endif #endif - diff --git a/src/KOKKOS/comm_kokkos.cpp b/src/KOKKOS/comm_kokkos.cpp index 2b603da635..6fad33a918 100644 --- a/src/KOKKOS/comm_kokkos.cpp +++ b/src/KOKKOS/comm_kokkos.cpp @@ -146,7 +146,9 @@ void CommKokkos::init() if (!comm_f_only) // not all Kokkos atom_vec styles have reverse pack/unpack routines yet reverse_comm_classic = true; - if (ghost_velocity && ((AtomVecKokkos*)atom->avec)->no_comm_vel_flag) // not all Kokkos atom_vec styles have comm vel pack/unpack routines yet + atomKK->avecKK = dynamic_cast(atom->avec); + + if (ghost_velocity && atomKK->avecKK->no_comm_vel_flag) // not all Kokkos atom_vec styles have comm vel pack/unpack routines yet forward_comm_classic = true; } @@ -186,7 +188,6 @@ void CommKokkos::forward_comm_device(int) { int n; MPI_Request request; - AtomVecKokkos *avec = (AtomVecKokkos *) atom->avec; double *buf; // exchange data with another proc @@ -200,7 +201,7 @@ void CommKokkos::forward_comm_device(int) k_swap.sync(); k_swap2.sync(); k_pbc.sync(); - n = avec->pack_comm_self_fused(totalsend,k_sendlist,k_sendnum_scan, + n = atomKK->avecKK->pack_comm_self_fused(totalsend,k_sendlist,k_sendnum_scan, k_firstrecv,k_pbc_flag,k_pbc,k_g2l); } else { @@ -213,7 +214,7 @@ void CommKokkos::forward_comm_device(int) MPI_Irecv(buf,size_forward_recv[iswap],MPI_DOUBLE, recvproc[iswap],0,world,&request); } - n = avec->pack_comm_kokkos(sendnum[iswap],k_sendlist, + n = atomKK->avecKK->pack_comm_kokkos(sendnum[iswap],k_sendlist, iswap,k_buf_send,pbc_flag[iswap],pbc[iswap]); DeviceType().fence(); if (n) { @@ -232,7 +233,7 @@ void CommKokkos::forward_comm_device(int) size_forward_recv[iswap],MPI_DOUBLE, recvproc[iswap],0,world,&request); } - n = avec->pack_comm_vel_kokkos(sendnum[iswap],k_sendlist,iswap, + n = atomKK->avecKK->pack_comm_vel_kokkos(sendnum[iswap],k_sendlist,iswap, k_buf_send,pbc_flag[iswap],pbc[iswap]); DeviceType().fence(); if (n) { @@ -240,34 +241,34 @@ void CommKokkos::forward_comm_device(int) MPI_DOUBLE,sendproc[iswap],0,world); } if (size_forward_recv[iswap]) MPI_Wait(&request,MPI_STATUS_IGNORE); - avec->unpack_comm_vel_kokkos(recvnum[iswap],firstrecv[iswap],k_buf_recv); + atomKK->avecKK->unpack_comm_vel_kokkos(recvnum[iswap],firstrecv[iswap],k_buf_recv); DeviceType().fence(); } else { if (size_forward_recv[iswap]) MPI_Irecv(k_buf_recv.view().data(), size_forward_recv[iswap],MPI_DOUBLE, recvproc[iswap],0,world,&request); - n = avec->pack_comm_kokkos(sendnum[iswap],k_sendlist,iswap, + n = atomKK->avecKK->pack_comm_kokkos(sendnum[iswap],k_sendlist,iswap, k_buf_send,pbc_flag[iswap],pbc[iswap]); DeviceType().fence(); if (n) MPI_Send(k_buf_send.view().data(),n, MPI_DOUBLE,sendproc[iswap],0,world); if (size_forward_recv[iswap]) MPI_Wait(&request,MPI_STATUS_IGNORE); - avec->unpack_comm_kokkos(recvnum[iswap],firstrecv[iswap],k_buf_recv); + atomKK->avecKK->unpack_comm_kokkos(recvnum[iswap],firstrecv[iswap],k_buf_recv); DeviceType().fence(); } } else { if (!ghost_velocity) { if (sendnum[iswap]) - n = avec->pack_comm_self(sendnum[iswap],k_sendlist,iswap, + n = atomKK->avecKK->pack_comm_self(sendnum[iswap],k_sendlist,iswap, firstrecv[iswap],pbc_flag[iswap],pbc[iswap]); DeviceType().fence(); } else { - n = avec->pack_comm_vel_kokkos(sendnum[iswap],k_sendlist,iswap, + n = atomKK->avecKK->pack_comm_vel_kokkos(sendnum[iswap],k_sendlist,iswap, k_buf_send,pbc_flag[iswap],pbc[iswap]); DeviceType().fence(); - avec->unpack_comm_vel_kokkos(recvnum[iswap],firstrecv[iswap],k_buf_send); + atomKK->avecKK->unpack_comm_vel_kokkos(recvnum[iswap],firstrecv[iswap],k_buf_send); DeviceType().fence(); } } @@ -310,7 +311,6 @@ void CommKokkos::reverse_comm_device() { int n; MPI_Request request; - AtomVecKokkos *avec = (AtomVecKokkos *) atom->avec; double *buf; // exchange data with another proc @@ -343,19 +343,19 @@ void CommKokkos::reverse_comm_device() MPI_Irecv(k_buf_recv.view().data(), size_reverse_recv[iswap],MPI_DOUBLE, sendproc[iswap],0,world,&request); - n = avec->pack_reverse_kokkos(recvnum[iswap],firstrecv[iswap],k_buf_send); + n = atomKK->avecKK->pack_reverse_kokkos(recvnum[iswap],firstrecv[iswap],k_buf_send); DeviceType().fence(); if (n) MPI_Send(k_buf_send.view().data(),n, MPI_DOUBLE,recvproc[iswap],0,world); if (size_reverse_recv[iswap]) MPI_Wait(&request,MPI_STATUS_IGNORE); } - avec->unpack_reverse_kokkos(sendnum[iswap],k_sendlist,iswap, + atomKK->avecKK->unpack_reverse_kokkos(sendnum[iswap],k_sendlist,iswap, k_buf_recv); DeviceType().fence(); } else { if (sendnum[iswap]) - n = avec->unpack_reverse_self(sendnum[iswap],k_sendlist,iswap, + n = atomKK->avecKK->unpack_reverse_self(sendnum[iswap],k_sendlist,iswap, firstrecv[iswap]); } } @@ -717,7 +717,6 @@ void CommKokkos::exchange_device() double **x; double *sublo,*subhi; MPI_Request request; - AtomVecKokkos *avec = (AtomVecKokkos *) atom->avec; // clear global->local map for owned and ghost atoms // b/c atoms migrate to new procs in exchange() and @@ -800,7 +799,7 @@ void CommKokkos::exchange_device() nsend = k_count.h_view(); if (nsend > maxsend) grow_send_kokkos(nsend,1); nsend = - avec->pack_exchange_kokkos(k_count.h_view(),k_buf_send, + atomKK->avecKK->pack_exchange_kokkos(k_count.h_view(),k_buf_send, k_exchange_sendlist,k_exchange_copylist, ExecutionSpaceFromDevice::space, dim,lo,hi); @@ -809,8 +808,8 @@ void CommKokkos::exchange_device() while (i < nlocal) { if (x[i][dim] < lo || x[i][dim] >= hi) { if (nsend > maxsend) grow_send_kokkos(nsend,1); - nsend += avec->pack_exchange(i,&buf_send[nsend]); - avec->copy(nlocal-1,i,1); + nsend += atomKK->avecKK->pack_exchange(i,&buf_send[nsend]); + atomKK->avecKK->copy(nlocal-1,i,1); nlocal--; } else i++; } @@ -825,7 +824,7 @@ void CommKokkos::exchange_device() if (procgrid[dim] == 1) { nrecv = nsend; if (nrecv) { - atom->nlocal=avec-> + atom->nlocal=atomKK->avecKK-> unpack_exchange_kokkos(k_buf_send,nrecv,atom->nlocal,dim,lo,hi, ExecutionSpaceFromDevice::space); DeviceType().fence(); @@ -858,7 +857,7 @@ void CommKokkos::exchange_device() } if (nrecv) { - atom->nlocal = avec-> + atom->nlocal = atomKK->avecKK-> unpack_exchange_kokkos(k_buf_recv,nrecv,atom->nlocal,dim,lo,hi, ExecutionSpaceFromDevice::space); DeviceType().fence(); @@ -896,7 +895,7 @@ void CommKokkos::borders() static int print = 1; if (mode != Comm::SINGLE || bordergroup || - (ghost_velocity && ((AtomVecKokkos*)atom->avec)->no_border_vel_flag)) { + (ghost_velocity && atomKK->avecKK->no_border_vel_flag)) { if (print && comm->me==0) { error->warning(FLERR,"Required border comm not yet implemented in Kokkos communication, " "switching to classic exchange/border communication"); @@ -982,7 +981,6 @@ void CommKokkos::borders_device() { double **x; double *mlo,*mhi; MPI_Request request; - AtomVecKokkos *avec = (AtomVecKokkos *) atom->avec; ExecutionSpace exec_space = ExecutionSpaceFromDevice::space; atomKK->sync(exec_space,ALL_MASK); @@ -1122,13 +1120,13 @@ void CommKokkos::borders_device() { if (nsend*size_border > maxsend) grow_send_kokkos(nsend*size_border,0); if (ghost_velocity) { - n = avec-> + n = atomKK->avecKK-> pack_border_vel_kokkos(nsend,k_sendlist,k_buf_send,iswap, pbc_flag[iswap],pbc[iswap],exec_space); DeviceType().fence(); } else { - n = avec-> + n = atomKK->avecKK-> pack_border_kokkos(nsend,k_sendlist,k_buf_send,iswap, pbc_flag[iswap],pbc[iswap],exec_space); DeviceType().fence(); @@ -1157,21 +1155,21 @@ void CommKokkos::borders_device() { if (ghost_velocity) { if (sendproc[iswap] != me) { - avec->unpack_border_vel_kokkos(nrecv,atom->nlocal+atom->nghost, + atomKK->avecKK->unpack_border_vel_kokkos(nrecv,atom->nlocal+atom->nghost, k_buf_recv,exec_space); DeviceType().fence(); } else { - avec->unpack_border_vel_kokkos(nrecv,atom->nlocal+atom->nghost, + atomKK->avecKK->unpack_border_vel_kokkos(nrecv,atom->nlocal+atom->nghost, k_buf_send,exec_space); DeviceType().fence(); } } else { if (sendproc[iswap] != me) { - avec->unpack_border_kokkos(nrecv,atom->nlocal+atom->nghost, + atomKK->avecKK->unpack_border_kokkos(nrecv,atom->nlocal+atom->nghost, k_buf_recv,exec_space); DeviceType().fence(); } else { - avec->unpack_border_kokkos(nrecv,atom->nlocal+atom->nghost, + atomKK->avecKK->unpack_border_kokkos(nrecv,atom->nlocal+atom->nghost, k_buf_send,exec_space); DeviceType().fence(); } @@ -1299,7 +1297,7 @@ void CommKokkos::grow_recv(int n) void CommKokkos::grow_send_kokkos(int n, int flag, ExecutionSpace space) { maxsend = static_cast (BUFFACTOR * n); - int maxsend_border = (maxsend+BUFEXTRA+5)/atom->avec->size_border + 2; + int maxsend_border = (maxsend+BUFEXTRA+5)/atomKK->avecKK->size_border + 2; if (flag) { if (space == Device) k_buf_send.modify(); @@ -1308,9 +1306,9 @@ void CommKokkos::grow_send_kokkos(int n, int flag, ExecutionSpace space) if (ghost_velocity) k_buf_send.resize(maxsend_border, - atom->avec->size_border + atom->avec->size_velocity); + atomKK->avecKK->size_border + atomKK->avecKK->size_velocity); else - k_buf_send.resize(maxsend_border,atom->avec->size_border); + k_buf_send.resize(maxsend_border,atomKK->avecKK->size_border); buf_send = k_buf_send.view().data(); } else { @@ -1318,10 +1316,10 @@ void CommKokkos::grow_send_kokkos(int n, int flag, ExecutionSpace space) k_buf_send = DAT:: tdual_xfloat_2d("comm:k_buf_send", maxsend_border, - atom->avec->size_border + atom->avec->size_velocity); + atomKK->avecKK->size_border + atomKK->avecKK->size_velocity); else k_buf_send = DAT:: - tdual_xfloat_2d("comm:k_buf_send",maxsend_border,atom->avec->size_border); + tdual_xfloat_2d("comm:k_buf_send",maxsend_border,atomKK->avecKK->size_border); buf_send = k_buf_send.view().data(); } } @@ -1333,9 +1331,9 @@ void CommKokkos::grow_send_kokkos(int n, int flag, ExecutionSpace space) void CommKokkos::grow_recv_kokkos(int n, ExecutionSpace /*space*/) { maxrecv = static_cast (BUFFACTOR * n); - int maxrecv_border = (maxrecv+BUFEXTRA+5)/atom->avec->size_border + 2; + int maxrecv_border = (maxrecv+BUFEXTRA+5)/atomKK->avecKK->size_border + 2; k_buf_recv = DAT:: - tdual_xfloat_2d("comm:k_buf_recv",maxrecv_border,atom->avec->size_border); + tdual_xfloat_2d("comm:k_buf_recv",maxrecv_border,atomKK->avecKK->size_border); buf_recv = k_buf_recv.view().data(); } diff --git a/src/KOKKOS/fix_neigh_history_kokkos.cpp b/src/KOKKOS/fix_neigh_history_kokkos.cpp index 4a652783af..390976dd79 100644 --- a/src/KOKKOS/fix_neigh_history_kokkos.cpp +++ b/src/KOKKOS/fix_neigh_history_kokkos.cpp @@ -20,6 +20,7 @@ #include "modify.h" #include "neigh_list_kokkos.h" #include "pair_kokkos.h" +#include "atom_masks.h" using namespace LAMMPS_NS; @@ -170,6 +171,7 @@ template void FixNeighHistoryKokkos::post_neighbor() { tag = atomKK->k_tag.view(); + atomKK->sync(execution_space,TAG_MASK); k_firstflag.sync(); k_firstvalue.sync(); diff --git a/src/KOKKOS/fix_shake_kokkos.cpp b/src/KOKKOS/fix_shake_kokkos.cpp index ce19b29f54..109b1c69b5 100644 --- a/src/KOKKOS/fix_shake_kokkos.cpp +++ b/src/KOKKOS/fix_shake_kokkos.cpp @@ -60,6 +60,8 @@ FixShakeKokkos::FixShakeKokkos(LAMMPS *lmp, int narg, char **arg) : datamask_read = EMPTY_MASK; datamask_modify = EMPTY_MASK; + memory->destroy(xshake); + shake_flag_tmp = shake_flag; shake_atom_tmp = shake_atom; shake_type_tmp = shake_type; diff --git a/src/KOKKOS/min_linesearch_kokkos.cpp b/src/KOKKOS/min_linesearch_kokkos.cpp index 101502d023..920e06f70c 100644 --- a/src/KOKKOS/min_linesearch_kokkos.cpp +++ b/src/KOKKOS/min_linesearch_kokkos.cpp @@ -376,11 +376,15 @@ double MinLineSearchKokkos::alpha_step(double alpha, int resetflag) }); } + atomKK->modified(Device,X_MASK); + // step forward along h if (alpha > 0.0) { if (nextra_global) modify->min_step(alpha,hextra); + atomKK->sync(Device,X_MASK); // positions can be modified by fix box/relax + // local variables for lambda capture auto l_xvec = xvec; diff --git a/src/KOKKOS/pair_adp_kokkos.cpp b/src/KOKKOS/pair_adp_kokkos.cpp index 8817e1fc9f..3873f1e31b 100644 --- a/src/KOKKOS/pair_adp_kokkos.cpp +++ b/src/KOKKOS/pair_adp_kokkos.cpp @@ -111,7 +111,6 @@ void PairADPKokkos::compute(int eflag_in, int vflag_in) x = atomKK->k_x.view(); f = atomKK->k_f.view(); type = atomKK->k_type.view(); - tag = atomKK->k_tag.view(); nlocal = atom->nlocal; nall = atom->nlocal + atom->nghost; newton_pair = force->newton_pair; diff --git a/src/KOKKOS/pair_adp_kokkos.h b/src/KOKKOS/pair_adp_kokkos.h index 15e08cdb89..5714bdb699 100644 --- a/src/KOKKOS/pair_adp_kokkos.h +++ b/src/KOKKOS/pair_adp_kokkos.h @@ -120,7 +120,6 @@ class PairADPKokkos : public PairADP, public KokkosBase typename AT::t_x_array x; typename AT::t_f_array f; typename AT::t_int_1d type; - typename AT::t_tagint_1d tag; DAT::tdual_efloat_1d k_eatom; DAT::tdual_virial_array k_vatom; diff --git a/src/KOKKOS/pair_buck_kokkos.cpp b/src/KOKKOS/pair_buck_kokkos.cpp index 3a6200a7e2..8e69536b38 100644 --- a/src/KOKKOS/pair_buck_kokkos.cpp +++ b/src/KOKKOS/pair_buck_kokkos.cpp @@ -98,7 +98,6 @@ void PairBuckKokkos::compute(int eflag_in, int vflag_in) c_x = atomKK->k_x.view(); f = atomKK->k_f.view(); type = atomKK->k_type.view(); - tag = atomKK->k_tag.view(); nlocal = atom->nlocal; nall = atom->nlocal + atom->nghost; newton_pair = force->newton_pair; diff --git a/src/KOKKOS/pair_buck_kokkos.h b/src/KOKKOS/pair_buck_kokkos.h index c6518b1fae..364716453b 100644 --- a/src/KOKKOS/pair_buck_kokkos.h +++ b/src/KOKKOS/pair_buck_kokkos.h @@ -74,7 +74,6 @@ class PairBuckKokkos : public PairBuck { typename AT::t_x_array c_x; typename AT::t_f_array f; typename AT::t_int_1d_randomread type; - typename AT::t_tagint_1d tag; DAT::tdual_efloat_1d k_eatom; DAT::tdual_virial_array k_vatom; diff --git a/src/KOKKOS/pair_eam_alloy_kokkos.cpp b/src/KOKKOS/pair_eam_alloy_kokkos.cpp index 3aeba1c9bf..0be0dffd93 100644 --- a/src/KOKKOS/pair_eam_alloy_kokkos.cpp +++ b/src/KOKKOS/pair_eam_alloy_kokkos.cpp @@ -110,7 +110,6 @@ void PairEAMAlloyKokkos::compute(int eflag_in, int vflag_in) x = atomKK->k_x.view(); f = atomKK->k_f.view(); type = atomKK->k_type.view(); - tag = atomKK->k_tag.view(); nlocal = atom->nlocal; nall = atom->nlocal + atom->nghost; newton_pair = force->newton_pair; diff --git a/src/KOKKOS/pair_eam_alloy_kokkos.h b/src/KOKKOS/pair_eam_alloy_kokkos.h index 1e936a7574..c6cb73ca5d 100644 --- a/src/KOKKOS/pair_eam_alloy_kokkos.h +++ b/src/KOKKOS/pair_eam_alloy_kokkos.h @@ -119,7 +119,6 @@ class PairEAMAlloyKokkos : public PairEAM, public KokkosBase { typename AT::t_x_array x; typename AT::t_f_array f; typename AT::t_int_1d type; - typename AT::t_tagint_1d tag; DAT::tdual_efloat_1d k_eatom; DAT::tdual_virial_array k_vatom; diff --git a/src/KOKKOS/pair_eam_fs_kokkos.cpp b/src/KOKKOS/pair_eam_fs_kokkos.cpp index bd4bb2a373..bf0f398e60 100644 --- a/src/KOKKOS/pair_eam_fs_kokkos.cpp +++ b/src/KOKKOS/pair_eam_fs_kokkos.cpp @@ -110,7 +110,6 @@ void PairEAMFSKokkos::compute(int eflag_in, int vflag_in) x = atomKK->k_x.view(); f = atomKK->k_f.view(); type = atomKK->k_type.view(); - tag = atomKK->k_tag.view(); nlocal = atom->nlocal; nall = atom->nlocal + atom->nghost; newton_pair = force->newton_pair; diff --git a/src/KOKKOS/pair_eam_fs_kokkos.h b/src/KOKKOS/pair_eam_fs_kokkos.h index f96380ed30..06a395cba7 100644 --- a/src/KOKKOS/pair_eam_fs_kokkos.h +++ b/src/KOKKOS/pair_eam_fs_kokkos.h @@ -119,7 +119,6 @@ class PairEAMFSKokkos : public PairEAM, public KokkosBase { typename AT::t_x_array x; typename AT::t_f_array f; typename AT::t_int_1d type; - typename AT::t_tagint_1d tag; DAT::tdual_efloat_1d k_eatom; DAT::tdual_virial_array k_vatom; diff --git a/src/KOKKOS/pair_eam_kokkos.cpp b/src/KOKKOS/pair_eam_kokkos.cpp index 9928d6a655..6e1cd1feea 100644 --- a/src/KOKKOS/pair_eam_kokkos.cpp +++ b/src/KOKKOS/pair_eam_kokkos.cpp @@ -105,7 +105,6 @@ void PairEAMKokkos::compute(int eflag_in, int vflag_in) x = atomKK->k_x.view(); f = atomKK->k_f.view(); type = atomKK->k_type.view(); - tag = atomKK->k_tag.view(); nlocal = atom->nlocal; nall = atom->nlocal + atom->nghost; newton_pair = force->newton_pair; diff --git a/src/KOKKOS/pair_eam_kokkos.h b/src/KOKKOS/pair_eam_kokkos.h index 867908bb6b..006dceb1f2 100644 --- a/src/KOKKOS/pair_eam_kokkos.h +++ b/src/KOKKOS/pair_eam_kokkos.h @@ -115,7 +115,6 @@ class PairEAMKokkos : public PairEAM, public KokkosBase { typename AT::t_x_array x; typename AT::t_f_array f; typename AT::t_int_1d type; - typename AT::t_tagint_1d tag; DAT::tdual_efloat_1d k_eatom; DAT::tdual_virial_array k_vatom; diff --git a/src/KOKKOS/pair_gran_hooke_history_kokkos.cpp b/src/KOKKOS/pair_gran_hooke_history_kokkos.cpp index 11c2b651f9..2cfbbf0ee7 100644 --- a/src/KOKKOS/pair_gran_hooke_history_kokkos.cpp +++ b/src/KOKKOS/pair_gran_hooke_history_kokkos.cpp @@ -134,7 +134,6 @@ void PairGranHookeHistoryKokkos::compute(int eflag_in, int vflag_in) torque = atomKK->k_torque.view(); type = atomKK->k_type.view(); mask = atomKK->k_mask.view(); - tag = atomKK->k_tag.view(); rmass = atomKK->k_rmass.view(); radius = atomKK->k_radius.view(); nlocal = atom->nlocal; diff --git a/src/KOKKOS/pair_gran_hooke_history_kokkos.h b/src/KOKKOS/pair_gran_hooke_history_kokkos.h index d7477b066d..ef068e970a 100644 --- a/src/KOKKOS/pair_gran_hooke_history_kokkos.h +++ b/src/KOKKOS/pair_gran_hooke_history_kokkos.h @@ -86,7 +86,6 @@ class PairGranHookeHistoryKokkos : public PairGranHookeHistory { DAT::tdual_virial_array k_vatom; typename AT::t_efloat_1d d_eatom; typename AT::t_virial_array d_vatom; - typename AT::t_tagint_1d tag; typename AT::t_neighbors_2d d_neighbors; typename AT::t_int_1d_randomread d_ilist; diff --git a/src/KOKKOS/pair_lj_class2_kokkos.cpp b/src/KOKKOS/pair_lj_class2_kokkos.cpp index dbb95b99ab..d37a190b6c 100644 --- a/src/KOKKOS/pair_lj_class2_kokkos.cpp +++ b/src/KOKKOS/pair_lj_class2_kokkos.cpp @@ -99,7 +99,6 @@ void PairLJClass2Kokkos::compute(int eflag_in, int vflag_in) c_x = atomKK->k_x.view(); f = atomKK->k_f.view(); type = atomKK->k_type.view(); - tag = atomKK->k_tag.view(); nlocal = atom->nlocal; nall = atom->nlocal + atom->nghost; newton_pair = force->newton_pair; diff --git a/src/KOKKOS/pair_lj_class2_kokkos.h b/src/KOKKOS/pair_lj_class2_kokkos.h index 073c6f38d6..0936399ca8 100644 --- a/src/KOKKOS/pair_lj_class2_kokkos.h +++ b/src/KOKKOS/pair_lj_class2_kokkos.h @@ -80,7 +80,6 @@ class PairLJClass2Kokkos : public PairLJClass2 { typename AT::t_x_array c_x; typename AT::t_f_array f; typename AT::t_int_1d_randomread type; - typename AT::t_tagint_1d tag; DAT::tdual_efloat_1d k_eatom; DAT::tdual_virial_array k_vatom; diff --git a/src/KOKKOS/pair_lj_cut_kokkos.cpp b/src/KOKKOS/pair_lj_cut_kokkos.cpp index e818375762..c6353cc083 100644 --- a/src/KOKKOS/pair_lj_cut_kokkos.cpp +++ b/src/KOKKOS/pair_lj_cut_kokkos.cpp @@ -94,7 +94,6 @@ void PairLJCutKokkos::compute(int eflag_in, int vflag_in) c_x = atomKK->k_x.view(); f = atomKK->k_f.view(); type = atomKK->k_type.view(); - tag = atomKK->k_tag.view(); nlocal = atom->nlocal; nall = atom->nlocal + atom->nghost; newton_pair = force->newton_pair; diff --git a/src/KOKKOS/pair_lj_cut_kokkos.h b/src/KOKKOS/pair_lj_cut_kokkos.h index 2659e8a129..106f1a9048 100644 --- a/src/KOKKOS/pair_lj_cut_kokkos.h +++ b/src/KOKKOS/pair_lj_cut_kokkos.h @@ -80,7 +80,6 @@ class PairLJCutKokkos : public PairLJCut { DAT::tdual_virial_array k_vatom; typename AT::t_efloat_1d d_eatom; typename AT::t_virial_array d_vatom; - typename AT::t_tagint_1d tag; int newton_pair; double special_lj[4]; diff --git a/src/KOKKOS/pair_lj_expand_kokkos.cpp b/src/KOKKOS/pair_lj_expand_kokkos.cpp index 90eb02801b..ecdb3a7b22 100644 --- a/src/KOKKOS/pair_lj_expand_kokkos.cpp +++ b/src/KOKKOS/pair_lj_expand_kokkos.cpp @@ -98,7 +98,6 @@ void PairLJExpandKokkos::compute(int eflag_in, int vflag_in) c_x = atomKK->k_x.view(); f = atomKK->k_f.view(); type = atomKK->k_type.view(); - tag = atomKK->k_tag.view(); nlocal = atom->nlocal; nall = atom->nlocal + atom->nghost; newton_pair = force->newton_pair; diff --git a/src/KOKKOS/pair_lj_expand_kokkos.h b/src/KOKKOS/pair_lj_expand_kokkos.h index d5d5fdc731..0df0a6f8f8 100644 --- a/src/KOKKOS/pair_lj_expand_kokkos.h +++ b/src/KOKKOS/pair_lj_expand_kokkos.h @@ -80,7 +80,6 @@ class PairLJExpandKokkos : public PairLJExpand { typename AT::t_x_array c_x; typename AT::t_f_array f; typename AT::t_int_1d_randomread type; - typename AT::t_tagint_1d tag; DAT::tdual_efloat_1d k_eatom; DAT::tdual_virial_array k_vatom; diff --git a/src/KOKKOS/pair_lj_spica_kokkos.cpp b/src/KOKKOS/pair_lj_spica_kokkos.cpp index 4612537ab3..345c18bd30 100644 --- a/src/KOKKOS/pair_lj_spica_kokkos.cpp +++ b/src/KOKKOS/pair_lj_spica_kokkos.cpp @@ -98,7 +98,6 @@ void PairLJSPICAKokkos::compute(int eflag_in, int vflag_in) c_x = atomKK->k_x.view(); f = atomKK->k_f.view(); type = atomKK->k_type.view(); - tag = atomKK->k_tag.view(); nlocal = atom->nlocal; nall = atom->nlocal + atom->nghost; newton_pair = force->newton_pair; diff --git a/src/KOKKOS/pair_lj_spica_kokkos.h b/src/KOKKOS/pair_lj_spica_kokkos.h index 820d6e4cc5..b330af4bfd 100644 --- a/src/KOKKOS/pair_lj_spica_kokkos.h +++ b/src/KOKKOS/pair_lj_spica_kokkos.h @@ -80,7 +80,6 @@ class PairLJSPICAKokkos : public PairLJSPICA { typename AT::t_x_array c_x; typename AT::t_f_array f; typename AT::t_int_1d_randomread type; - typename AT::t_tagint_1d tag; DAT::tdual_efloat_1d k_eatom; DAT::tdual_virial_array k_vatom; diff --git a/src/KOKKOS/pair_morse_kokkos.cpp b/src/KOKKOS/pair_morse_kokkos.cpp index fcb89b26e4..50df64e3ca 100644 --- a/src/KOKKOS/pair_morse_kokkos.cpp +++ b/src/KOKKOS/pair_morse_kokkos.cpp @@ -101,7 +101,6 @@ void PairMorseKokkos::compute(int eflag_in, int vflag_in) c_x = atomKK->k_x.view(); f = atomKK->k_f.view(); type = atomKK->k_type.view(); - tag = atomKK->k_tag.view(); nlocal = atom->nlocal; nall = atom->nlocal + atom->nghost; newton_pair = force->newton_pair; diff --git a/src/KOKKOS/pair_morse_kokkos.h b/src/KOKKOS/pair_morse_kokkos.h index fa8ba8ca21..d06cf2deb1 100644 --- a/src/KOKKOS/pair_morse_kokkos.h +++ b/src/KOKKOS/pair_morse_kokkos.h @@ -80,7 +80,6 @@ class PairMorseKokkos : public PairMorse { DAT::tdual_virial_array k_vatom; typename ArrayTypes::t_efloat_1d d_eatom; typename ArrayTypes::t_virial_array d_vatom; - typename ArrayTypes::t_tagint_1d tag; int newton_pair; double special_lj[4]; diff --git a/src/KOKKOS/pair_reaxff_kokkos.cpp b/src/KOKKOS/pair_reaxff_kokkos.cpp index af3ac26663..0bfcef90cf 100644 --- a/src/KOKKOS/pair_reaxff_kokkos.cpp +++ b/src/KOKKOS/pair_reaxff_kokkos.cpp @@ -63,7 +63,7 @@ PairReaxFFKokkos::PairReaxFFKokkos(LAMMPS *lmp) : PairReaxFF(lmp) kokkosable = 1; atomKK = (AtomKokkos *) atom; execution_space = ExecutionSpaceFromDevice::space; - datamask_read = X_MASK | Q_MASK | F_MASK | TYPE_MASK | ENERGY_MASK | VIRIAL_MASK; + datamask_read = X_MASK | Q_MASK | F_MASK | TAG_MASK | TYPE_MASK | ENERGY_MASK | VIRIAL_MASK; datamask_modify = F_MASK | ENERGY_MASK | VIRIAL_MASK; k_resize_bo = DAT::tdual_int_scalar("pair:resize_bo"); diff --git a/src/KOKKOS/pair_tersoff_kokkos.cpp b/src/KOKKOS/pair_tersoff_kokkos.cpp index 8ae5bf1269..cae17102a8 100644 --- a/src/KOKKOS/pair_tersoff_kokkos.cpp +++ b/src/KOKKOS/pair_tersoff_kokkos.cpp @@ -70,7 +70,7 @@ PairTersoffKokkos::PairTersoffKokkos(LAMMPS *lmp) : PairTersoff(lmp) kokkosable = 1; atomKK = (AtomKokkos *) atom; execution_space = ExecutionSpaceFromDevice::space; - datamask_read = X_MASK | F_MASK | TYPE_MASK | ENERGY_MASK | VIRIAL_MASK; + datamask_read = X_MASK | F_MASK | TAG_MASK | TYPE_MASK | ENERGY_MASK | VIRIAL_MASK; datamask_modify = F_MASK | ENERGY_MASK | VIRIAL_MASK; } diff --git a/src/KOKKOS/pair_tersoff_mod_kokkos.cpp b/src/KOKKOS/pair_tersoff_mod_kokkos.cpp index 0036c7f007..06ef0dcceb 100644 --- a/src/KOKKOS/pair_tersoff_mod_kokkos.cpp +++ b/src/KOKKOS/pair_tersoff_mod_kokkos.cpp @@ -60,7 +60,7 @@ PairTersoffMODKokkos::PairTersoffMODKokkos(LAMMPS *lmp) : PairTersof kokkosable = 1; atomKK = (AtomKokkos *) atom; execution_space = ExecutionSpaceFromDevice::space; - datamask_read = X_MASK | F_MASK | TYPE_MASK | ENERGY_MASK | VIRIAL_MASK; + datamask_read = X_MASK | F_MASK | TAG_MASK | TYPE_MASK | ENERGY_MASK | VIRIAL_MASK; datamask_modify = F_MASK | ENERGY_MASK | VIRIAL_MASK; } diff --git a/src/KOKKOS/pair_tersoff_zbl_kokkos.cpp b/src/KOKKOS/pair_tersoff_zbl_kokkos.cpp index 44d8757a37..accbe9a863 100644 --- a/src/KOKKOS/pair_tersoff_zbl_kokkos.cpp +++ b/src/KOKKOS/pair_tersoff_zbl_kokkos.cpp @@ -62,7 +62,7 @@ PairTersoffZBLKokkos::PairTersoffZBLKokkos(LAMMPS *lmp) : PairTersof kokkosable = 1; atomKK = (AtomKokkos *) atom; execution_space = ExecutionSpaceFromDevice::space; - datamask_read = X_MASK | F_MASK | TYPE_MASK | ENERGY_MASK | VIRIAL_MASK; + datamask_read = X_MASK | F_MASK | TAG_MASK | TYPE_MASK | ENERGY_MASK | VIRIAL_MASK; datamask_modify = F_MASK | ENERGY_MASK | VIRIAL_MASK; if (strcmp(update->unit_style,"metal") == 0) { diff --git a/src/KOKKOS/pair_yukawa_kokkos.cpp b/src/KOKKOS/pair_yukawa_kokkos.cpp index c288198b1b..7bdb9a9617 100644 --- a/src/KOKKOS/pair_yukawa_kokkos.cpp +++ b/src/KOKKOS/pair_yukawa_kokkos.cpp @@ -173,7 +173,6 @@ void PairYukawaKokkos::compute(int eflag_in, int vflag_in) c_x = atomKK->k_x.view(); f = atomKK->k_f.view(); type = atomKK->k_type.view(); - tag = atomKK->k_tag.view(); nlocal = atom->nlocal; nall = atom->nlocal + atom->nghost; newton_pair = force->newton_pair; diff --git a/src/KOKKOS/pair_yukawa_kokkos.h b/src/KOKKOS/pair_yukawa_kokkos.h index b24ff66968..e04f65264b 100644 --- a/src/KOKKOS/pair_yukawa_kokkos.h +++ b/src/KOKKOS/pair_yukawa_kokkos.h @@ -83,7 +83,6 @@ class PairYukawaKokkos : public PairYukawa { DAT::tdual_virial_array k_vatom; typename AT::t_efloat_1d d_eatom; typename AT::t_virial_array d_vatom; - typename AT::t_tagint_1d tag; int newton_pair; double special_lj[4]; diff --git a/src/KSPACE/ewald_disp.cpp b/src/KSPACE/ewald_disp.cpp index 7943ffd194..43b5c8840b 100644 --- a/src/KSPACE/ewald_disp.cpp +++ b/src/KSPACE/ewald_disp.cpp @@ -1209,7 +1209,7 @@ void EwaldDisp::compute_virial_dipole() double *ke, c[EWALD_NFUNCS] = { 8.0*MY_PI*qscale/volume, 2.0*MY_PI*MY_PIS/(12.0*volume), 2.0*MY_PI*MY_PIS/(192.0*volume), 8.0*MY_PI*mumurd2e/volume}; - int i, kx, ky, lbytes = (2*nbox+1)*sizeof(cvector), *type = atom->type; + int i, kx, ky, lbytes = (2*nbox+1)*sizeof(cvector); int func[EWALD_NFUNCS]; memcpy(func, function, EWALD_NFUNCS*sizeof(int)); @@ -1273,7 +1273,6 @@ void EwaldDisp::compute_virial_dipole() vatomj[n] -= mysum[n]; z = (cvector *) ((char *) z+lbytes); - ++type; if (vflag_atom) vatomj += 6; } diff --git a/src/KSPACE/pppm.h b/src/KSPACE/pppm.h index f974f4eb3f..bd17b38629 100644 --- a/src/KSPACE/pppm.h +++ b/src/KSPACE/pppm.h @@ -21,7 +21,7 @@ KSpaceStyle(pppm,PPPM); #define LMP_PPPM_H #include "kspace.h" -#include "lmpfftsettings.h" +#include "lmpfftsettings.h" // IWYU pragma: export namespace LAMMPS_NS { diff --git a/src/LATTE/Install.sh b/src/LATTE/Install.sh index 73f8bc24cb..4d895ca434 100755 --- a/src/LATTE/Install.sh +++ b/src/LATTE/Install.sh @@ -47,7 +47,7 @@ if (test $1 = 1) then fi if (test -e ../Makefile.package.settings) then - sed -i -e '/^include.*latte.*$/d' ../Makefile.package.settings + sed -i -e '/^[ \t]*include.*latte.*$/d' ../Makefile.package.settings # multiline form needed for BSD sed on Macs sed -i -e '4 i \ include ..\/..\/lib\/latte\/Makefile.lammps @@ -61,7 +61,7 @@ elif (test $1 = 0) then fi if (test -e ../Makefile.package.settings) then - sed -i -e '/^include.*latte.*$/d' ../Makefile.package.settings + sed -i -e '/^[ \t]*include.*latte.*$/d' ../Makefile.package.settings fi fi diff --git a/src/MACHDYN/Install.sh b/src/MACHDYN/Install.sh index bf18c332f3..604f53f8b1 100755 --- a/src/MACHDYN/Install.sh +++ b/src/MACHDYN/Install.sh @@ -45,7 +45,7 @@ if (test $1 = 1) then fi if (test -e ../Makefile.package.settings) then - sed -i -e '/^include.*machdyn.*$/d' ../Makefile.package.settings + sed -i -e '/^[ \t]*include.*machdyn.*$/d' ../Makefile.package.settings # multiline form needed for BSD sed on Macs sed -i -e '4 i \ include ..\/..\/lib\/machdyn\/Makefile.lammps @@ -59,7 +59,7 @@ elif (test $1 = 0) then fi if (test -e ../Makefile.package.settings) then - sed -i -e '/^include.*machdyn.*$/d' ../Makefile.package.settings + sed -i -e '/^[ \t]*include.*machdyn.*$/d' ../Makefile.package.settings fi fi diff --git a/src/MACHDYN/atom_vec_smd.cpp b/src/MACHDYN/atom_vec_smd.cpp index 0a7126ee93..d1bae9ecb7 100644 --- a/src/MACHDYN/atom_vec_smd.cpp +++ b/src/MACHDYN/atom_vec_smd.cpp @@ -26,6 +26,8 @@ #include "atom.h" +#include + using namespace LAMMPS_NS; #define NMAT_FULL 9 diff --git a/src/MACHDYN/atom_vec_smd.h b/src/MACHDYN/atom_vec_smd.h index 6d0ba383d4..6ca7f08b4d 100644 --- a/src/MACHDYN/atom_vec_smd.h +++ b/src/MACHDYN/atom_vec_smd.h @@ -35,7 +35,7 @@ AtomStyle(smd,AtomVecSMD); namespace LAMMPS_NS { -class AtomVecSMD : public AtomVec { +class AtomVecSMD : virtual public AtomVec { public: AtomVecSMD(class LAMMPS *); diff --git a/src/MACHDYN/fix_smd_adjust_dt.cpp b/src/MACHDYN/fix_smd_adjust_dt.cpp index 6f7539b476..d2728f1042 100644 --- a/src/MACHDYN/fix_smd_adjust_dt.cpp +++ b/src/MACHDYN/fix_smd_adjust_dt.cpp @@ -43,8 +43,7 @@ using namespace FixConst; FixSMDTlsphDtReset::FixSMDTlsphDtReset(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg) { - if (narg != 4) - error->all(FLERR, "Illegal fix smd/adjust_dt command"); + if (narg != 4) error->all(FLERR, "Illegal fix smd/adjust_dt command"); // set time_depend, else elapsed time accumulation can be messed up @@ -57,7 +56,7 @@ FixSMDTlsphDtReset::FixSMDTlsphDtReset(LAMMPS *lmp, int narg, char **arg) : extvector = 0; restart_global = 1; // this fix stores global (i.e., not per-atom) info: elaspsed time - safety_factor = atof(arg[3]); + safety_factor = utils::numeric(FLERR,arg[3],false,lmp); // initializations t_elapsed = 0.0; diff --git a/src/MACHDYN/pair_smd_hertz.cpp b/src/MACHDYN/pair_smd_hertz.cpp index 7c9eac217f..bf526f5e4e 100644 --- a/src/MACHDYN/pair_smd_hertz.cpp +++ b/src/MACHDYN/pair_smd_hertz.cpp @@ -263,7 +263,7 @@ void PairHertz::coeff(int narg, char **arg) { utils::bounds(FLERR,arg[0], 1, atom->ntypes, ilo, ihi, error); utils::bounds(FLERR,arg[1], 1, atom->ntypes, jlo, jhi, error); - double bulkmodulus_one = atof(arg[2]); + double bulkmodulus_one = utils::numeric(FLERR,arg[2],false,lmp); // set short-range force constant double kn_one = 0.0; diff --git a/src/MACHDYN/pair_smd_triangulated_surface.cpp b/src/MACHDYN/pair_smd_triangulated_surface.cpp index fbd2c14aa6..e1ebc2562d 100644 --- a/src/MACHDYN/pair_smd_triangulated_surface.cpp +++ b/src/MACHDYN/pair_smd_triangulated_surface.cpp @@ -345,7 +345,7 @@ void PairTriSurf::coeff(int narg, char **arg) { utils::bounds(FLERR,arg[0], 1,atom->ntypes, ilo, ihi, error); utils::bounds(FLERR,arg[1], 1,atom->ntypes, jlo, jhi, error); - double bulkmodulus_one = atof(arg[2]); + double bulkmodulus_one = utils::numeric(FLERR,arg[2],false,lmp); // set short-range force constant double kn_one = 0.0; diff --git a/src/MANYBODY/pair_bop.cpp b/src/MANYBODY/pair_bop.cpp index 69557a425e..f8c119c436 100644 --- a/src/MANYBODY/pair_bop.cpp +++ b/src/MANYBODY/pair_bop.cpp @@ -40,7 +40,6 @@ #include "atom.h" #include "comm.h" -#include "domain.h" #include "error.h" #include "force.h" #include "math_special.h" diff --git a/src/MANYBODY/pair_extep.cpp b/src/MANYBODY/pair_extep.cpp index 30d8dc44f9..6a3b302fc1 100644 --- a/src/MANYBODY/pair_extep.cpp +++ b/src/MANYBODY/pair_extep.cpp @@ -32,7 +32,6 @@ #include #include -#include using namespace LAMMPS_NS; using namespace MathConst; diff --git a/src/MANYBODY/pair_sw.cpp b/src/MANYBODY/pair_sw.cpp index 5968c12bde..540fd8772c 100644 --- a/src/MANYBODY/pair_sw.cpp +++ b/src/MANYBODY/pair_sw.cpp @@ -46,6 +46,7 @@ PairSW::PairSW(LAMMPS *lmp) : Pair(lmp) centroidstressflag = CENTROID_NOTAVAIL; unit_convert_flag = utils::get_supported_conversions(utils::ENERGY); skip_threebody_flag = false; + params_mapped = 0; params = nullptr; @@ -225,12 +226,12 @@ void PairSW::compute(int eflag, int vflag) void PairSW::allocate() { allocated = 1; - int n = atom->ntypes; + int np1 = atom->ntypes + 1; - memory->create(setflag,n+1,n+1,"pair:setflag"); - memory->create(cutsq,n+1,n+1,"pair:cutsq"); - memory->create(neighshort,maxshort,"pair:neighshort"); - map = new int[n+1]; + memory->create(setflag, np1, np1, "pair:setflag"); + memory->create(cutsq, np1, np1, "pair:cutsq"); + memory->create(neighshort, maxshort, "pair:neighshort"); + map = new int[np1]; } /* ---------------------------------------------------------------------- @@ -262,12 +263,49 @@ void PairSW::coeff(int narg, char **arg) { if (!allocated) allocate(); - map_element2type(narg-3,arg+3); + // read potential file and set up element maps only once + if (one_coeff || !params_mapped) { + // make certain that the setflag array is always fully initialized + // the sw/intel pair style depends on it + if (!one_coeff) { + for (int i = 0; i <= atom->ntypes; i++) { + for (int j = 0; j <= atom->ntypes; j++) { + setflag[i][j] = 0; + } + } + } - // read potential file and initialize potential parameters + map_element2type(narg-3, arg+3, (one_coeff != 0)); - read_file(arg[2]); - setup_params(); + // read potential file and initialize potential parameters + + read_file(arg[2]); + setup_params(); + params_mapped = 1; + } + + if (!one_coeff) { + int ilo, ihi, jlo, jhi; + utils::bounds(FLERR, arg[0], 1, atom->ntypes, ilo, ihi, error); + utils::bounds(FLERR, arg[1], 1, atom->ntypes, jlo, jhi, error); + + int count = 0; + for (int i = ilo; i <= ihi; i++) { + if (((map[i] >= 0) && (strcmp(arg[i+2], elements[map[i]]) != 0)) || + ((map[i] < 0) && (strcmp(arg[i+2], "NULL") != 0))) + error->all(FLERR, "Must use consistent type to element mappings with threebody off"); + if (map[i] < 0) error->all(FLERR, "Must not set pair_coeff mapped to NULL element"); + for (int j = MAX(jlo, i); j <= jhi; j++) { + if (((map[j] >= 0) && (strcmp(arg[j+2], elements[map[j]]) != 0)) || + ((map[j] < 0) && (strcmp(arg[j+2], "NULL") != 0))) + error->all(FLERR, "Must use consistent type to element mappings with threebody off"); + if (map[j] < 0) error->all(FLERR, "Must not set pair_coeff mapped to NULL element"); + setflag[i][j] = 1; + count++; + } + } + if (count == 0) error->all(FLERR, "Incorrect args for pair coefficients"); + } } /* ---------------------------------------------------------------------- diff --git a/src/MANYBODY/pair_sw.h b/src/MANYBODY/pair_sw.h index bf22ce6390..da25871040 100644 --- a/src/MANYBODY/pair_sw.h +++ b/src/MANYBODY/pair_sw.h @@ -54,6 +54,7 @@ class PairSW : public Pair { int maxshort; // size of short neighbor list array int *neighshort; // short neighbor list array int skip_threebody_flag; // whether to run threebody loop + int params_mapped; // whether parameters have been read and mapped to elements void settings(int, char **) override; virtual void allocate(); diff --git a/src/MC/Install.sh b/src/MC/Install.sh new file mode 100755 index 0000000000..ccf6767c4d --- /dev/null +++ b/src/MC/Install.sh @@ -0,0 +1,63 @@ +# Install/unInstall package files in LAMMPS +# mode = 0/1/2 for uninstall/install/update + +# this is default Install.sh for all packages +# if package has an auxiliary library or a file with a dependency, +# then package dir has its own customized Install.sh + +mode=$1 + +# enforce using portable C locale +LC_ALL=C +export LC_ALL + +# arg1 = file, arg2 = file it depends on + +action () { + if (test $mode = 0) then + rm -f ../$1 + elif (! cmp -s $1 ../$1) then + if (test -z "$2" || test -e ../$2) then + cp $1 .. + if (test $mode = 2) then + echo " updating src/$1" + fi + fi + elif (test -n "$2") then + if (test ! -e ../$2) then + rm -f ../$1 + fi + fi +} + +# all package files with no dependencies + +for file in *.cpp *.h; do + test -f ${file} && action $file +done + + +action fix_atom_swap.cpp +action fix_atom_swap.h +action fix_bond_break.cpp +action fix_bond_break.h +action fix_bond_create_angle.cpp +action fix_bond_create_angle.h +action fix_bond_create.cpp +action fix_bond_create.h +action fix_bond_swap.cpp +action fix_bond_swap.h +action fix_charge_regulation.cpp +action fix_charge_regulation.h +action fix_gcmc.cpp +action fix_gcmc.h +action fix_mol_swap.cpp +action fix_mol_swap.h +action fix_sgcmc.cpp pair_eam.cpp +action fix_sgcmc.h pair_eam.h +action fix_tfmc.cpp +action fix_tfmc.h +action fix_widom.cpp +action fix_widom.h +action pair_dsmc.cpp +action pair_dsmc.h diff --git a/src/MC/fix_mol_swap.cpp b/src/MC/fix_mol_swap.cpp index f6e421fa66..9fa22542b9 100644 --- a/src/MC/fix_mol_swap.cpp +++ b/src/MC/fix_mol_swap.cpp @@ -33,6 +33,7 @@ #include "update.h" #include +#include using namespace LAMMPS_NS; using namespace FixConst; diff --git a/src/MC/fix_sgcmc.cpp b/src/MC/fix_sgcmc.cpp new file mode 100644 index 0000000000..e03ad6cedc --- /dev/null +++ b/src/MC/fix_sgcmc.cpp @@ -0,0 +1,1027 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/, Sandia National Laboratories + LAMMPS development team: developers@lammps.org + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + * Parallel Monte-Carlo code for the semi-grandcanonical ensemble (SGC) + * and the variance-constrained semi-grandcanonical ensemble (VC-SGC). + * + * See Sadigh et al., Phys. Rev. B 85, 184203 (2012) for a + * description of the algorithm. + * + * Code author: Alexander Stukowski (stukowski@mm.tu-darmstadt.de) + * + * Updates for integrtion into LAMMPS: Aidan Thompson, SNL and Axel Kohlmeyer, Temple U +------------------------------------------------------------------------- */ + +#include "fix_sgcmc.h" + +#include "angle.h" +#include "atom.h" +#include "bond.h" +#include "comm.h" +#include "compute.h" +#include "dihedral.h" +#include "domain.h" +#include "error.h" +#include "force.h" +#include "improper.h" +#include "integrate.h" +#include "kspace.h" +#include "modify.h" +#include "neigh_list.h" +#include "neighbor.h" +#include "pair.h" +#include "universe.h" +#include "update.h" + +#include "pair_eam.h" +#include "random_park.h" + +#include +#include +#include + +using namespace LAMMPS_NS; +using namespace FixConst; + +/********************************************************************* + * Constructs the fix object and parses the input parameters + * that control the Monte Carlo routine. + *********************************************************************/ +FixSemiGrandCanonicalMC::FixSemiGrandCanonicalMC(LAMMPS *_lmp, int narg, char **arg) : + Fix(_lmp, narg, arg), random(nullptr), localRandom(nullptr), neighborList(nullptr), + pairEAM(nullptr), compute_pe(nullptr) +{ + scalar_flag = 0; + vector_flag = 1; + extvector = 0; + global_freq = 1; + + // Specifies the number of output fields this fix produces for thermo output. + // It calculates the + // - Number of accepted trial moves + // - Number of rejected trial moves + // - Atom counts for each species. + size_vector = 2 + atom->ntypes; + + // Let LAMMPS know the number of data values per atom to transfer in MPI communication. + comm_forward = 4; + comm_reverse = 3; + + samplingWindowUserSize = 0; + samplingWindowPosition = 5; + nAcceptedSwaps = 0; + nRejectedSwaps = 0; + kappa = 0; + serialMode = false; + + if (domain->triclinic) + error->all(FLERR, "Fix sgcmc does not support non-orthogonal simulation boxes."); + + if (narg < 6) utils::missing_cmd_args(FLERR, "fix sgcmc", error); + + // Parse the number of MD timesteps to do between MC. + nevery_mdsteps = utils::inumeric(FLERR, arg[3], false, lmp); + if (nevery_mdsteps <= 0) error->all(FLERR, "Invalid number of MD timesteps {}", nevery_mdsteps); + if (comm->me == 0) utils::logmesg(lmp, " SGC - Number of MD timesteps: {}\n", nevery_mdsteps); + + // Parse the fraction of atoms swaps attempted during each cycle. + swap_fraction = utils::numeric(FLERR, arg[4], false, lmp); + if ((swap_fraction < 0.0) || (swap_fraction > 1.0)) + error->all(FLERR, "Invalid fraction {} of swap atoms", swap_fraction); + if (comm->me == 0) utils::logmesg(lmp, " SGC - Fraction of swap atoms: {}\n", swap_fraction); + + // Parse temperature for MC. + double temperature = utils::numeric(FLERR, arg[5], false, lmp); + if (temperature <= 0) error->all(FLERR, "Temperature {} invalid", temperature); + if (comm->me == 0) utils::logmesg(lmp, " SGC - Temperature: {}\n", temperature); + beta = 1.0 / (force->boltz * temperature); + + // Parse chemical potentials. + int iarg = 6; + deltamu.resize(atom->ntypes + 1); + deltamu[0] = 0.0; + deltamu[1] = 0.0; + if (atom->ntypes < 2) + error->all(FLERR, "Fix sgcmc can only be used in simulations with at least two atom types."); + for (int i = 2; i <= atom->ntypes; i++, iarg++) { + if (iarg >= narg) error->all(FLERR, "Too few chemical potentials specified"); + deltamu[i] = utils::numeric(FLERR, arg[iarg], false, lmp); + if (comm->me == 0) + utils::logmesg(lmp, " SGC - Chemical potential of species {}: {}\n", i, deltamu[i]); + } + + // Default values for optional parameters (where applicable). + numSamplingWindowMoves = 8; + seed = 324234; + + // Parse extra/optional parameters + while (iarg < narg) { + + if (strcmp(arg[iarg], "randseed") == 0) { + // Random number seed. + if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "fix sgcmc randseed", error); + seed = utils::inumeric(FLERR, arg[iarg + 1], false, lmp); + if (seed <= 0) error->all(FLERR, "Random number seed {} must be positive", seed); + if (comm->me == 0) utils::logmesg(lmp, " SGC - Random number seed: {}\n", seed); + iarg += 2; + + } else if (strcmp(arg[iarg], "window_moves") == 0) { + // Parse number of window moves. + if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "fix sgcmc window_moves", error); + numSamplingWindowMoves = utils::inumeric(FLERR, arg[iarg + 1], false, lmp); + if (numSamplingWindowMoves <= 0) + error->all(FLERR, "Invalid number {} of sampling window moves", numSamplingWindowMoves); + if (comm->me == 0) + utils::logmesg(lmp, " SGC - Number of sampling window moves: {}\n", + numSamplingWindowMoves); + iarg += 2; + + } else if (strcmp(arg[iarg], "window_size") == 0) { + // Parse sampling window size parameter. + if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "fix sgcmc window_moves", error); + samplingWindowUserSize = utils::numeric(FLERR, arg[iarg + 1], false, lmp); + if ((samplingWindowUserSize < 0.5) || (samplingWindowUserSize > 1.0)) + error->all(FLERR, "Sampling window size {} is out of range.", samplingWindowUserSize); + if (comm->me == 0) + utils::logmesg(lmp, " SGC - Sampling window size: {}\n", samplingWindowUserSize); + iarg += 2; + + } else if (strcmp(arg[iarg], "variance") == 0) { + // Parse parameters for variance constraint ensemble. + if (iarg + 1 + atom->ntypes > narg) + utils::missing_cmd_args(FLERR, "fix sgcmc variance", error); + iarg++; + + kappa = utils::numeric(FLERR, arg[iarg], false, lmp); + if (kappa < 0) error->all(FLERR, "Variance constraint parameter must not be negative."); + if (comm->me == 0) utils::logmesg(lmp, " SGC - Kappa: {}\n", kappa); + iarg++; + + targetConcentration.resize(atom->ntypes + 1); + targetConcentration[0] = 1.0; + targetConcentration[1] = 1.0; + for (int i = 2; i <= atom->ntypes; i++, iarg++) { + targetConcentration[i] = utils::numeric(FLERR, arg[iarg], false, lmp); + targetConcentration[1] -= targetConcentration[i]; + } + for (int i = 1; i <= atom->ntypes; i++, iarg++) { + if ((targetConcentration[i] < 0.0) || (targetConcentration[i] > 1.0)) + error->all(FLERR, "Target concentration {} for species {} is out of range", + targetConcentration[i], i); + if (comm->me == 0) + utils::logmesg(lmp, " SGC - Target concentration of species {}: {}\n", i, + targetConcentration[i]); + } + + } else if (strcmp(arg[iarg], "serial") == 0) { + // Switch off second rejection. + serialMode = true; + if (comm->me == 0) + utils::logmesg(lmp, " SGC - Using serial MC version without second rejection.\n"); + iarg++; + + if (comm->nprocs != 1) + error->all(FLERR, "Cannot use serial mode Monte Carlo in a parallel simulation."); + } else { + error->all(FLERR, "Unknown fix sgcmc keyword: {}", arg[iarg]); + } + } + + // Initialize random number generators. + random = new RanPark(lmp, seed); + localRandom = new RanPark(lmp, seed + universe->me); +} + +/********************************************************************* + * Destructor. Cleans up the random number generators. + *********************************************************************/ +FixSemiGrandCanonicalMC::~FixSemiGrandCanonicalMC() +{ + delete random; + delete localRandom; +} + +// clang-format off + +/********************************************************************* + * The return value of this method specifies at which points the + * fix is invoked during the simulation. + *********************************************************************/ +int FixSemiGrandCanonicalMC::setmask() +{ + // We want the MC routine to be called in between the MD steps. + // We need the electron densities for each atom, so after the + // EAM potential has computed them in the force routine is a good + // time to invoke the MC routine. + int mask = 0; + mask |= POST_FORCE; + mask |= POST_FORCE_RESPA; + return mask; +} + +/********************************************************************* + * This gets called by the system before the simulation starts. + *********************************************************************/ +void FixSemiGrandCanonicalMC::init() +{ + // Make sure the user has defined only one Monte-Carlo fix. + int count = 0; + for (int i = 0; i < modify->nfix; i++) + if (strcmp(modify->fix[i]->style,"sgcmc") == 0) count++; + if (count > 1) error->all(FLERR, "More than one fix sgcmc defined."); + + // Save a pointer to the EAM potential. + pairEAM = dynamic_cast(force->pair); + if (!pairEAM) { + if (comm->me == 0) + utils::logmesg(lmp, " SGC - Using naive total energy calculation for MC -> SLOW!\n"); + + if (comm->nprocs > 1) + error->all(FLERR, "Can not run fix vcsgc with naive total energy calculation and more than one MPI process."); + + // Create a compute that will provide the total energy of the system. + // This is needed by computeTotalEnergy(). + char* id_pe = (char*)"thermo_pe"; + int ipe = modify->find_compute(id_pe); + compute_pe = modify->compute[ipe]; + } + interactionRadius = force->pair->cutforce; + if (comm->me == 0) utils::logmesg(lmp, " SGC - Interaction radius: {}\n", interactionRadius); + + // This fix needs a full neighbor list. + neighbor->add_request(this, NeighConst::REQ_FULL); + + // Count local number of atoms from each species. + const int *type = atom->type; + const int *mask = atom->mask; + std::vector localSpeciesCounts(atom->ntypes+1, 0); + for (int i = 0; i < atom->nlocal; i++, ++type) { + if (mask[i] & groupbit) + localSpeciesCounts[*type]++; + } + + // MPI sum to get global concentrations. + speciesCounts.resize(atom->ntypes+1); + MPI_Allreduce(&localSpeciesCounts.front(), &speciesCounts.front(), localSpeciesCounts.size(), + MPI_INT, MPI_SUM, world); +} + +/********************************************************************* + * Assigns the requested neighbor list to the fix. + *********************************************************************/ +void FixSemiGrandCanonicalMC::init_list(int /*id*/, NeighList *ptr) +{ + neighborList = ptr; +} + +/********************************************************************* + * Called after the EAM force calculation during each timestep. + * This method triggers the MC routine from time to time. + *********************************************************************/ +void FixSemiGrandCanonicalMC::post_force(int /*vflag*/) +{ + if ((update->ntimestep % nevery_mdsteps) == 0) + doMC(); +} + +/********************************************************************* + * This routine does one full MC step. + *********************************************************************/ +void FixSemiGrandCanonicalMC::doMC() +{ + /// Reset energy variable to signal the energy calculation routine that + /// it need to recompute the current total energy. + totalPotentialEnergy = 0; + + // Allocate array memory. + changedAtoms.resize(atom->nmax); + + // During the last MD timestep the EAM potential routine has computed the + // electron densities for all atoms that belong to this processor. + // They are stored in the rho array of the PairEAM class. + // But computing the energy change caused by flipping one atom of this processor + // might require the electron densities of atoms that belong to other processors. + // So we first need to fetch those electron densities for our ghost atoms now. + fetchGhostAtomElectronDensities(); + + const int *mask = atom->mask; + + // Reset counters. + int nAcceptedSwapsLocal = 0; + int nRejectedSwapsLocal = 0; + + int oldSpecies, newSpecies; + std::vector deltaN(atom->ntypes+1, 0); //< Local change in number of atoms of each species. + std::vector deltaNGlobal(atom->ntypes+1, 0); //< Global change in number of atoms of each species. + + for (int i = 0; i < numSamplingWindowMoves; i++) { + + // Reset flag array that keeps track of changed per-atom quantities. + std::fill(changedAtoms.begin(), changedAtoms.end(), false); + + // Position the sampling window within the node's boundaries. + // By default the size of the sampling window is the size of the processor bounds minus two cutoff radii. + // This ensures that changing atoms in the sampling windows of two adjacent processors cannot affect + // the same atoms in the region between the two sampling windows. + // For debugging purposes the sampling window can be chosen larger than the default size. Then it is + // considered an 'oversize' window and we have to exchange atom information after each and + // and every swap step, which is very slow. + bool oversizeWindow = placeSamplingWindow(); + + /// The number of times we want to swap an atom. + int nDice = (int)(swap_fraction * numFixAtomsLocal / numSamplingWindowMoves); + + // This number must be synchronized with the other nodes. We take the largest + // of all nodes and skip trial moves later. + int largestnDice; + MPI_Allreduce(&nDice, &largestnDice, 1, MPI_INT, MPI_MAX, world); + + // The probability to do one swap step. + double diceProbability = (double)nDice / (double)largestnDice; + + // Inner MC loop that swaps atom types. + for (int j = 0; j < largestnDice; j++) { + + double deltaE = 0; + std::fill(deltaN.begin(), deltaN.end(), 0); + int selectedAtom = -1, selectedAtomNL = -1; + + // As already said above, we have to do swap steps only with a certain probability + // to keep nodes in sync. + if (localRandom->uniform() <= diceProbability) { + + // Choose a random atom from the pool of atoms that are inside the sampling window. + int index = (int)(localRandom->uniform() * (double)samplingWindowAtoms.size()); + selectedAtomNL = samplingWindowAtoms[index]; + + // Get the real atom index. + selectedAtom = neighborList->ilist[selectedAtomNL]; + oldSpecies = atom->type[selectedAtom]; + + // Choose the new type for the swapping atom by random. + if (atom->ntypes > 2) { + // Use a random number to choose the new species if there are three or more atom types. + newSpecies = (int)(localRandom->uniform() * (atom->ntypes-1)) + 1; + if (newSpecies >= oldSpecies) newSpecies++; + } + else { + // If there are only two atom types, then the decision is clear. + newSpecies = (oldSpecies == 1) ? 2 : 1; + } + deltaN[oldSpecies] = -1; + deltaN[newSpecies] = +1; + + // Compute the energy difference that swapping this atom would cost or gain. + if (pairEAM) { + deltaE = computeEnergyChangeEAM(selectedAtom, selectedAtomNL, oldSpecies, newSpecies); + } else { + // Generic case: + deltaE = computeEnergyChangeGeneric(selectedAtom, oldSpecies, newSpecies); + } + + // Perform inner MC acceptance test. + double dm = 0.0; + if (serialMode && kappa != 0.0) { + for (int i = 2; i <= atom->ntypes; i++) + dm += (deltamu[i] + kappa / atom->natoms * (2.0 * speciesCounts[i] + deltaN[i])) * deltaN[i]; + } + else { + for (int i = 2; i <= atom->ntypes; i++) + dm += deltamu[i] * deltaN[i]; + } + double deltaB = -(deltaE + dm) * beta; + if (deltaB < 0.0) { + if (deltaB < log(localRandom->uniform())) { + std::fill(deltaN.begin(), deltaN.end(), 0); + selectedAtom = -1; + deltaE = 0; + } + } + } + + if (kappa != 0.0 && serialMode == false) { + + // What follows is the second rejection test for the variance-constrained + // semi-grandcanonical method. + + // MPI sum of total change in number of particles. + MPI_Allreduce(&deltaN.front(), &deltaNGlobal.front(), deltaN.size(), MPI_INT, MPI_SUM, world); + + // Perform outer MC acceptance test. + // This is done in sync by all processors. + double A = 0.0; + for (int i = 1; i <= atom->ntypes; i++) { + A += deltaNGlobal[i] * deltaNGlobal[i]; + A += 2.0 * deltaNGlobal[i] * (speciesCounts[i] - (int)(targetConcentration[i] * atom->natoms)); + } + double deltaB = -(kappa / atom->natoms) * A; + if (deltaB < 0.0) { + if (deltaB < log(random->uniform())) { + std::fill(deltaN.begin(), deltaN.end(), 0); + std::fill(deltaNGlobal.begin(), deltaNGlobal.end(), 0); + selectedAtom = -1; + } + } + + // Update global species counters. + for (int i = 1; i <= atom->ntypes; i++) + speciesCounts[i] += deltaNGlobal[i]; + } + else if (serialMode) { + // Update the local species counters. + for (int i = 1; i <= atom->ntypes; i++) + speciesCounts[i] += deltaN[i]; + } + + // Make accepted atom swap permanent. + if (selectedAtom >= 0) { + if (pairEAM) + flipAtomEAM(selectedAtom, selectedAtomNL, oldSpecies, newSpecies); + else + flipAtomGeneric(selectedAtom, oldSpecies, newSpecies); + nAcceptedSwapsLocal++; + } + else { + nRejectedSwapsLocal++; + } + + // Update variable that keeps track of the current total energy. + totalPotentialEnergy += deltaE; + + if (oversizeWindow) { + // In case of an oversized sampling window we have to exchange the atom types and all other + // per-atom quantities after each and every swap step. This is very slow and should only be used + // for debugging purposes. + communicateRhoAndTypes(); + } + } + + // Finally the changed electron densities and atom types must be exchanged before + // the sampling window is moved. + if (!oversizeWindow) + communicateRhoAndTypes(); + } + + // MPI sum total number of accepted/rejected swaps. + MPI_Allreduce(&nAcceptedSwapsLocal, &nAcceptedSwaps, 1, MPI_INT, MPI_SUM, world); + MPI_Allreduce(&nRejectedSwapsLocal, &nRejectedSwaps, 1, MPI_INT, MPI_SUM, world); + + // For (parallelized) semi-grandcanonical MC we have to determine the current concentrations now. + // For the serial version and variance-constrained MC it has already been done in the loop. + if (kappa == 0.0 && serialMode == false) { + const int *type = atom->type; + std::vector localSpeciesCounts(atom->ntypes+1, 0); + for (int i = 0; i < atom->nlocal; i++, ++type) { + if (mask[i] & groupbit) + localSpeciesCounts[*type]++; + } + MPI_Allreduce(&localSpeciesCounts.front(), &speciesCounts.front(), localSpeciesCounts.size(), MPI_INT, MPI_SUM, world); + } +} + +/********************************************************************* + * Fetches the electron densities for the local ghost atoms + * from the neighbor nodes. + *********************************************************************/ +void FixSemiGrandCanonicalMC::fetchGhostAtomElectronDensities() +{ + if (pairEAM) { + // Transfer original EAM rho values. + communicationStage = 1; + comm->forward_comm(this); + } +} + +/********************************************************************* + * Transfers the locally changed electron densities and atom + * types to the neighbors. + *********************************************************************/ +void FixSemiGrandCanonicalMC::communicateRhoAndTypes() +{ + // Electron densities can have changed for real atoms as well as ghost atoms during the last MC step. + // So we have to perform a forward and a reverse communication to keep everything in sync. + // In the array changedAtoms we kept track of which rhos have been changed by the MC. This helps us + // here to not overwrite values when doing the bidirectional exchange. + + if (pairEAM) { + // Transfer changed electron densities of ghost atoms to the real atoms. + communicationStage = 2; + comm->reverse_comm(this); + } + + // Transfer changed atom types and electron densities of the real atoms to the ghost atoms. + communicationStage = 3; + comm->forward_comm(this); +} + +/********************************************************************* + * This is for MPI communication with neighbor nodes. + *********************************************************************/ +int FixSemiGrandCanonicalMC::pack_forward_comm(int n, int *list, double *buf, int /*pbc_flag*/, + int * /*pbc*/) +{ + int m = 0; + if (communicationStage == 1) { + // Send electron densities of local atoms to neighbors. + for (int i = 0; i < n; i++) buf[m++] = pairEAM->rho[list[i]]; + } else if (communicationStage == 3) { + if (pairEAM) { + // Send types and rhos of real atoms to the ghost atoms of the neighbor proc. + for (int i = 0; i < n; i++) { + buf[m++] = atom->type[list[i]]; + buf[m++] = pairEAM->rho[list[i]]; + } + } else { + // Generic potential case: + for (int i = 0; i < n; i++) { + buf[m++] = atom->type[list[i]]; + } + } + } + return m; +} + +/********************************************************************* + * This is for MPI communication with neighbor nodes. + *********************************************************************/ +void FixSemiGrandCanonicalMC::unpack_forward_comm(int n, int first, double* buf) +{ + if (communicationStage == 1) { + // Receive electron densities of ghost atoms from neighbors. + int last = first + n; + for (int i = first; i < last; i++) pairEAM->rho[i] = *buf++; + } else if (communicationStage == 3) { + int last = first + n; + if (pairEAM) { + // Receive types and rhos of real atoms of the neighbor proc and assign them + // to the local ghost atoms. + for (int i = first; i < last; i++, buf += 2) { + atom->type[i] = (int)buf[0]; + // We have to make sure that rhos changed locally do not get overridden by the rhos + // sent by the neighbor procs. + if (!changedAtoms[i]) + pairEAM->rho[i] = buf[1]; + } + } else { + // Generic potential case: + for (int i = first; i < last; i++, buf += 1) { + atom->type[i] = (int)buf[0]; + } + } + } +} + +/********************************************************************* + * This is for MPI communication with neighbor nodes. + *********************************************************************/ +int FixSemiGrandCanonicalMC::pack_reverse_comm(int n, int first, double* buf) +{ + int m = 0; + + // Send changed electron densities of ghost atoms to the real atoms of neighbor procs. + int last = first + n; + for (int i = first; i < last; i++) buf[m++] = pairEAM->rho[i]; + return m; +} + +/********************************************************************* + * This is for MPI communication with neighbor nodes. + *********************************************************************/ +void FixSemiGrandCanonicalMC::unpack_reverse_comm(int n, int *list, double* buf) +{ + // Received changed electron densities of ghost atoms of neighbor procs and assign them to our + // real atoms. + for (int i = 0; i < n; i++, buf++) { + // We have to make sure that rhos changed locally do not get overridden by the rhos + // sent by the neighbor procs. + if (!changedAtoms[list[i]]) + pairEAM->rho[list[i]] = *buf; + } +} + +/********************************************************************* + * Positions the sampling window inside the node's bounding box. + *********************************************************************/ +bool FixSemiGrandCanonicalMC::placeSamplingWindow() +{ + // By default the size of the sampling window is the size of the processor bounds minus two cutoff radii. + // This ensures that changing atoms in the sampling windows of two adjacent processors cannot affect + // the same atoms in the region between the two sampling windows. + // For debugging purposes the sampling window can be chosen larger than the default size. Then it is + // considered an 'oversize' window. + bool oversizeWindow = false; + + // Align the sampling window to one of the 8 corners of the processor cell. + double samplingWindowLo[3]; + double samplingWindowHi[3]; + double margin[3]; + for (int i = 0; i < 3; i++) { + + margin[i] = interactionRadius * 2.0; + if (samplingWindowUserSize > 0.0) { + margin[i] = (domain->subhi[i] - domain->sublo[i]) * (1.0 - samplingWindowUserSize); + if (margin[i] < interactionRadius * 2.0) + oversizeWindow = true; + } + + double shift = (double)((samplingWindowPosition >> i) & 1) * margin[i]; + samplingWindowLo[i] = domain->sublo[i] + shift; + samplingWindowHi[i] = domain->subhi[i] + shift - margin[i]; + + // Check if processor cells are large enough. + // Node bounds must be at least four times as large as the atom interaction radius. + // Sampling window must be at least half as wise as the processor cell to cover the cell completely. + if (samplingWindowHi[i] - samplingWindowLo[i] + 1e-6 < (domain->subhi[i] - domain->sublo[i]) * 0.5) { + error->one(FLERR, "Per-node simulation cell is too small for fix sgcmc. Processor cell size must be at least 4 times cutoff radius."); + } + } + // Increase counter by one. + // Since we are only using the lower 3 bits of the integer value the alignment will + // be the same after 8 iterations. + samplingWindowPosition += 1; + + // Compile a list of atoms that are inside the sampling window. + samplingWindowAtoms.resize(0); + samplingWindowAtoms.reserve(atom->nlocal); + numSamplingWindowAtoms = 0; + numFixAtomsLocal = 0; + + const int *mask = atom->mask; + for (int ii = 0; ii < neighborList->inum; ii++) { + int i = neighborList->ilist[ii]; + if (mask[i] & groupbit) { + numFixAtomsLocal++; + const double* x = atom->x[i]; + // Is atom inside window region? + if (x[0] >= samplingWindowLo[0] && x[0] < samplingWindowHi[0] && + x[1] >= samplingWindowLo[1] && x[1] < samplingWindowHi[1] && + x[2] >= samplingWindowLo[2] && x[2] < samplingWindowHi[2]) + { + // Atoms within a distance of two times the interaction radius from the cell border + // are less often inside the sampling window than atoms in the center of the node cell, + // which are always inside the window. + // We therefore have to increase their probability here to make them chosen + // as often as the core atoms. + int multiplicity = 1; + for (int k=0; k < 3; k++) { + if (x[k] < domain->sublo[k] + margin[k] || + x[k] > domain->subhi[k] - margin[k]) + multiplicity *= 2; + } + + for (int m = 0; m < multiplicity; m++) + samplingWindowAtoms.push_back(ii); + + numSamplingWindowAtoms++; + } + } + } + + return oversizeWindow; +} + +/********************************************************************* + * Calculates the change in energy that swapping the given + * atom would produce. This routine is for the standard EAM potential. + * + * Parameters: + * + * flipAtom [in] + * This specifies the atom to be swapped. It's an index into the local list of atoms. + * + * flipAtomNL [in] + * This specifies the atom to be swapped. It's an index into the neighbor list. + * + * oldSpecies [in] + * The current species of the atom before the routine is called. + * + * newSpecies [in] + * The new species of the atom. The atom's type is not changed by this routine. It only computes the induced energy change. + * + * Return value: + * The expected change in total potential energy. + *********************************************************************/ +double FixSemiGrandCanonicalMC::computeEnergyChangeEAM(int flipAtom, int flipAtomNL, int oldSpecies, int newSpecies) +{ + double p; + int m; + double const* rho = pairEAM->rho; + double* coeff; + double new_total_rho_i = 0.0; + double deltaE = 0.0; + + // Calculate change of electron density at the surrounding + // sites induced by the swapped atom. Then calculate the change of embedding energy for each neighbor atom. + // Also recalculate the total electron density at the site of the swapped atom. + + double xi = atom->x[flipAtom][0]; + double yi = atom->x[flipAtom][1]; + double zi = atom->x[flipAtom][2]; + + // Loop over all neighbors of the selected atom. + int* jlist = neighborList->firstneigh[flipAtomNL]; + int jnum = neighborList->numneigh[flipAtomNL]; + for (int jj = 0; jj < jnum; jj++) { + int j = jlist[jj]; + + double delx = xi - atom->x[j][0]; + double dely = yi - atom->x[j][1]; + double delz = zi - atom->x[j][2]; + double rsq = delx*delx + dely*dely + delz*delz; + if (rsq >= pairEAM->cutforcesq) continue; + + int jtype = atom->type[j]; + double r = sqrt(rsq); + + p = r * pairEAM->rdr + 1.0; + m = static_cast(p); + m = MIN(m, pairEAM->nr - 1); + p -= m; + p = MIN(p, 1.0); + + // Calculate change of pair energy ij. + coeff = pairEAM->z2r_spline[pairEAM->type2z2r[oldSpecies][jtype]][m]; + double oldz2 = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; + coeff = pairEAM->z2r_spline[pairEAM->type2z2r[newSpecies][jtype]][m]; + double newz2 = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; + deltaE += (newz2 - oldz2) / r; + + // Calculate change of electron density at site j. + coeff = pairEAM->rhor_spline[pairEAM->type2rhor[oldSpecies][jtype]][m]; + double oldrho_contr = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; + coeff = pairEAM->rhor_spline[pairEAM->type2rhor[newSpecies][jtype]][m]; + double newrho_contr = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; + double delta_rho = newrho_contr - oldrho_contr; + + // Sum total rho at site of swapped atom. + coeff = pairEAM->rhor_spline[pairEAM->type2rhor[jtype][newSpecies]][m]; + new_total_rho_i += ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; + + // Calculate old embedding energy of atom j. + p = rho[j] * pairEAM->rdrho + 1.0; + m = static_cast(p); + m = MAX(1, MIN(m, pairEAM->nrho - 1)); + p -= m; + p = MIN(p, 1.0); + coeff = pairEAM->frho_spline[pairEAM->type2frho[jtype]][m]; + double oldF = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; + + // Calculate new embedding energy of atom j. + p = (rho[j] + delta_rho) * pairEAM->rdrho + 1.0; + m = static_cast(p); + m = MAX(1, MIN(m, pairEAM->nrho - 1)); + p -= m; + p = MIN(p, 1.0); + coeff = pairEAM->frho_spline[pairEAM->type2frho[jtype]][m]; + double newF = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; + + deltaE += newF - oldF; + } + + // Compute the change in embedding energy of the changing atom. + p = rho[flipAtom] * pairEAM->rdrho + 1.0; + m = static_cast(p); + m = MAX(1, MIN(m, pairEAM->nrho - 1)); + p -= m; + p = MIN(p, 1.0); + coeff = pairEAM->frho_spline[pairEAM->type2frho[oldSpecies]][m]; + double oldF = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; + + p = new_total_rho_i * pairEAM->rdrho + 1.0; + m = static_cast(p); + m = MAX(1, MIN(m, pairEAM->nrho - 1)); + p -= m; + p = MIN(p, 1.0); + coeff = pairEAM->frho_spline[pairEAM->type2frho[newSpecies]][m]; + double newF = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; + + deltaE += newF - oldF; + + return deltaE; +} + +/********************************************************************* + * Calculates the change in energy that swapping the given atom would produce. + * This routine is for the general case of an arbitrary potential and + * IS VERY SLOW! It computes the total energies of the system for the unmodified state + * and for the modified state and then returns the difference of both values. + * This routine should only be used for debugging purposes. + * + * Parameters: + * + * flipAtom [in] + * This specifies the atom to be swapped. It's an index into the local list of atoms. + * + * oldSpecies [in] + * The current species of the atom before the routine is called. + * + * newSpecies [in] + * The new species of the atom. The atom's type is not changed by this method. It only computes the induced energy change. + * + * Return value: + * The expected change in total potential energy. + *********************************************************************/ +double FixSemiGrandCanonicalMC::computeEnergyChangeGeneric(int flipAtom, int oldSpecies, int newSpecies) +{ + // This routine is called even when no trial move is being performed during the + // the current iteration to keep the parallel processors in sync. If no trial + // move is performed then the energy is calculated twice for the same state of the system. + if (flipAtom >= 0) { + // Change system. Perform trial move. + atom->type[flipAtom] = newSpecies; + } + // Transfer changed atom types of the real atoms to the ghost atoms. + communicationStage = 3; + comm->forward_comm(this); + + // Calculate new total energy. + double newEnergy = computeTotalEnergy(); + + // Undo trial move. Restore old system state. + if (flipAtom >= 0) { + atom->type[flipAtom] = oldSpecies; + } + // Transfer changed atom types of the real atoms to the ghost atoms. + communicationStage = 3; + comm->forward_comm(this); + + // Calculate old total energy. + double oldEnergy = computeTotalEnergy(); + + // Restore the correct electron densities and forces. + update->integrate->setup_minimal(0); + fetchGhostAtomElectronDensities(); + + return newEnergy - oldEnergy; +} + +/********************************************************************* + * Lets LAMMPS calculate the total potential energy of the system. + *********************************************************************/ +double FixSemiGrandCanonicalMC::computeTotalEnergy() +{ + int eflag = 1; + int vflag = 0; + + if (force->pair) force->pair->compute(eflag,vflag); + + if (atom->molecular) { + if (force->bond) force->bond->compute(eflag,vflag); + if (force->angle) force->angle->compute(eflag,vflag); + if (force->dihedral) force->dihedral->compute(eflag,vflag); + if (force->improper) force->improper->compute(eflag,vflag); + } + + if (force->kspace) force->kspace->compute(eflag,vflag); + + update->eflag_global = update->ntimestep; + return compute_pe->compute_scalar(); +} + +/********************************************************************* + * Flips the type of one atom and changes the electron densities + * of nearby atoms accordingly. + * This routine is for the case of a standard EAM potential. + * + * Parameters: + * + * flipAtom [in] + * This specifies the atom to be swapped. It's an index into the local list of atoms. + * + * flipAtomNL [in] + * This specifies the atom to be swapped. It's an index into the neighbor list. + * + * oldSpecies [in] + * The current species of the atom before the routine is called. + * + * newSpecies [in] + * The new type to be assigned to the atom. + *********************************************************************/ +void FixSemiGrandCanonicalMC::flipAtomEAM(int flipAtom, int flipAtomNL, int oldSpecies, int newSpecies) +{ + double p; + int m; + double* rho = pairEAM->rho; + double* coeff; + double new_total_rho_i = 0.0; + + // Change atom's type and mark it for exchange. + atom->type[flipAtom] = newSpecies; + changedAtoms[flipAtom] = true; + + // Rescale particle velocity vector to conserve kinetic energy. + double vScaleFactor = sqrt(atom->mass[oldSpecies] / atom->mass[newSpecies]); + atom->v[flipAtom][0] *= vScaleFactor; + atom->v[flipAtom][1] *= vScaleFactor; + atom->v[flipAtom][2] *= vScaleFactor; + + double xi = atom->x[flipAtom][0]; + double yi = atom->x[flipAtom][1]; + double zi = atom->x[flipAtom][2]; + + // Loop over all neighbors of the selected atom. + int* jlist = neighborList->firstneigh[flipAtomNL]; + int jnum = neighborList->numneigh[flipAtomNL]; + for (int jj = 0; jj < jnum; jj++) { + int j = jlist[jj]; + + double delx = xi - atom->x[j][0]; + double dely = yi - atom->x[j][1]; + double delz = zi - atom->x[j][2]; + double rsq = delx*delx + dely*dely + delz*delz; + if (rsq >= pairEAM->cutforcesq) continue; + + int jtype = atom->type[j]; + double r = sqrt(rsq); + p = r * pairEAM->rdr + 1.0; + m = static_cast(p); + m = MIN(m, pairEAM->nr - 1); + p -= m; + p = MIN(p, 1.0); + + // Calculate change of electron density at site j. + coeff = pairEAM->rhor_spline[pairEAM->type2rhor[oldSpecies][jtype]][m]; + double oldrho_contr = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; + coeff = pairEAM->rhor_spline[pairEAM->type2rhor[newSpecies][jtype]][m]; + double newrho_contr = ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; + double delta_rho = newrho_contr - oldrho_contr; + + rho[j] += delta_rho; + + // Sum total rho at site of swapped atom. + coeff = pairEAM->rhor_spline[pairEAM->type2rhor[jtype][newSpecies]][m]; + new_total_rho_i += ((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]; + + // Set the flag for this atom to indicate that its rho has changed and needs + // to be transfered at end of MC step. + changedAtoms[j] = true; + } + + // Store newly calculated electron density at swapped atom site. + rho[flipAtom] = new_total_rho_i; +} + +/********************************************************************* + * Flips the type of one atom. + * This routine is for the generic case. + * + * Parameters: + * + * flipAtom [in] + * This specifies the atom to be swapped. It's an index into the local list of atoms. + * + * oldSpecies [in] + * The current species of the atom before the routine is called. + * + * newSpecies [in] + * The new type to be assigned to the atom. + *********************************************************************/ +void FixSemiGrandCanonicalMC::flipAtomGeneric(int flipAtom, int oldSpecies, int newSpecies) +{ + atom->type[flipAtom] = newSpecies; + + // Rescale particle velocity vector to conserve kinetic energy. + double vScaleFactor = sqrt(atom->mass[oldSpecies] / atom->mass[newSpecies]); + atom->v[flipAtom][0] *= vScaleFactor; + atom->v[flipAtom][1] *= vScaleFactor; + atom->v[flipAtom][2] *= vScaleFactor; + + changedAtoms[flipAtom] = true; +} + +/********************************************************************* + * Lets the fix report one of its internal state variables to LAMMPS. + *********************************************************************/ +double FixSemiGrandCanonicalMC::compute_vector(int index) +{ + if (index == 0) return nAcceptedSwaps; + if (index == 1) return nRejectedSwaps; + index -= 1; + int totalAtoms = 0; + for (int i = 0; i < (int)speciesCounts.size(); i++) + totalAtoms += speciesCounts[i]; + if (index <= atom->ntypes) + return (double)speciesCounts[index] / (totalAtoms > 0 ? totalAtoms : 1); + return 0.0; +} + +/********************************************************************* + * Reports the memory usage of this fix to LAMMPS. + *********************************************************************/ +double FixSemiGrandCanonicalMC::memory_usage() +{ + return (changedAtoms.size() * sizeof(bool)) + + (samplingWindowAtoms.size() * sizeof(int)); +} + diff --git a/src/MC/fix_sgcmc.h b/src/MC/fix_sgcmc.h new file mode 100644 index 0000000000..e2cd15ec2f --- /dev/null +++ b/src/MC/fix_sgcmc.h @@ -0,0 +1,193 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/, Sandia National Laboratories + LAMMPS development team: developers@lammps.org + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + * Parallel Monte-Carlo code for the semi-grandcanonical ensemble (SGC) + * and the variance-constrained semi-grandcanonical ensemble (VC-SGC). + * + * See Sadigh et al., Phys. Rev. B 85, 184203 (2012) for a + * description of the algorithm. + * + * Code author: Alexander Stukowski (stukowski@mm.tu-darmstadt.de) +------------------------------------------------------------------------- */ + +#ifdef FIX_CLASS +// clang-format off +FixStyle(sgcmc,FixSemiGrandCanonicalMC); +// clang-format on +#else + +#ifndef FIX_SGCMC_H +#define FIX_SGCMC_H + +#include "fix.h" + +namespace LAMMPS_NS { + +class FixSemiGrandCanonicalMC : public Fix { + public: + FixSemiGrandCanonicalMC(class LAMMPS *, int, char **); + + ~FixSemiGrandCanonicalMC() override; + + int setmask() override; + void init() override; + void init_list(int id, class NeighList *ptr) override; + void post_force(int vflag) override; + double compute_vector(int index) override; + + int pack_forward_comm(int n, int *list, double *buf, int pbc_flag, int *pbc) override; + void unpack_forward_comm(int n, int first, double *buf) override; + int pack_reverse_comm(int n, int first, double *buf) override; + void unpack_reverse_comm(int n, int *list, double *buf) override; + + double memory_usage() override; + + /******************** Monte-Carlo routines ************************/ + + // This routine does one full MC step. + void doMC(); + + // Fetches the electron densities for the local ghost atoms from the neighbor nodes. + void fetchGhostAtomElectronDensities(); + + // Positions the sampling window inside the node's bounding box. + bool placeSamplingWindow(); + + // Calculates the change in energy that swapping the given atom would produce. + // This routine is for the case of a standard EAM potential. + double computeEnergyChangeEAM(int flipAtom, int flipAtomNL, int oldSpecies, int newSpecies); + + // Calculates the change in energy that swapping the given atom would produce. + // This routine is for the general case of an arbitrary potential and + // IS VERY SLOW! It computes the total energies of the system for the unmodified state + // and for the modified state and then returns the difference of both values. + // This routine should only be used for debugging purposes. + double computeEnergyChangeGeneric(int flipAtom, int oldSpecies, int newSpecies); + + // Lets LAMMPS calculate the total potential energy of the system. + double computeTotalEnergy(); + + // Flips the type of one atom and changes the electron densities of nearby atoms accordingly. + // This routine is for the case of a standard EAM potential. + void flipAtomEAM(int flipAtom, int flipAtomNL, int oldSpecies, int newSpecies); + + // Flips the type of one atom. + // This routine is for the generic case. + void flipAtomGeneric(int flipAtom, int oldSpecies, int newSpecies); + + // Transfers the locally changed electron densities and atom types to the neighbors. + void communicateRhoAndTypes(); + + private: + // The number of MD steps between each MC cycle. + int nevery_mdsteps; + + // The number of times the sampling window should be repositioned during one MC cycle. + int numSamplingWindowMoves; + + // The fraction of atoms that should be swapped per MC step. + double swap_fraction; + + // The maximum interaction radius of all potentials. + double interactionRadius; + + // The inverse MC temperature. + double beta; + + // Chemical potential differences for all species. The differences are relative to the chemical + // potential of the first species. Note that this array is based on index 1 (not 0 as normal C arrays). + // This means the first two elements of this vector are always zero. + std::vector deltamu; + + // Enables serial implementation without second rejection in the VCSGC ensemble. + bool serialMode; + + // The MC variance constraint parameter. + double kappa; + + // The target concentration values for each species. The concentration of first species is + // implicitely defined as one minues all other concentrations. Please note that this vector + // is based on index 1. The first element at index 0 is not used. + std::vector targetConcentration; + + // The master seed value for the random number generators on all nodes. + int seed; + + // The random number generator that is in sync with all other nodes. + class RanPark *random; + + // The local random number generator for this proc only. + class RanPark *localRandom; + + // The total number of atoms of the different species in the whole system. + // Divide this by the total number of atoms to get the global concentration. + // Since LAMMPS atom types start at index 1 this array is also based on index 1. + // The first array element at index 0 is not used. + std::vector speciesCounts; + + // The full neighbor list used by this fix. + class NeighList *neighborList; + + // The user-defined size of the sampling window. It is specified as a fraction + // of the processor's cell boundaries. + // If this parameter is 0 then the default sampling window size is used. + double samplingWindowUserSize; + + // This counter is increased each time the sampling window is repositioned. + // The lowest 3 bits of this integer value specify the alignment of the sampling window in + // the processor cell. That means that after 8 iterations the 8 corners have been sampled + // and it starts at the first corner again. + int samplingWindowPosition; + + // Array with indices of all atoms that are within the sampling window. + // Note 1: that an atom can be more than once in this array if its multiplicity is greater than on. + // Note 2: Indices are into the I array of the neighbor list and not into the atoms array. + std::vector samplingWindowAtoms; + + // The number of atoms inside the sampling window. Counting each atom only once. + int numSamplingWindowAtoms; + + // The number of local atoms that are in the fix group. + int numFixAtomsLocal; + + // Pointer to the EAM potential class. + // This is required to access the Rho arrays calculated by the potential class and its potential tables. + class PairEAM *pairEAM; + + // This array contains a boolean value per atom (real and ghosts) that indicates whether + // the electron density or another property at that site has been affected by one of the accepted MC swaps. + std::vector changedAtoms; + + // This counter indicates the current MPI communication stage to let the + // pack/unpack routines know which data is being transmitted. + int communicationStage; + + // The total number of accepted swaps during the last MC step. + int nAcceptedSwaps; + + // The total number of rejected swaps during the last MC step. + int nRejectedSwaps; + + // Keeps track of the current total potential energy. + // This is only used when no routine is available that can efficiently calculate the + // local energy change due to an atom swap. + double totalPotentialEnergy; + + // A compute used to compute the total potential energy of the system. + class Compute *compute_pe; +}; +} // namespace LAMMPS_NS + +#endif +#endif diff --git a/src/MDI/Install.sh b/src/MDI/Install.sh index bc19162a17..804e66be5e 100755 --- a/src/MDI/Install.sh +++ b/src/MDI/Install.sh @@ -49,7 +49,7 @@ if (test $1 = 1) then fi if (test -e ../Makefile.package.settings) then - sed -i -e '/^include.*mdi.*$/d' ../Makefile.package.settings + sed -i -e '/^[ \t]*include.*mdi.*$/d' ../Makefile.package.settings # multiline form needed for BSD sed on Macs sed -i -e '4 i \ include ..\/..\/lib\/mdi\/Makefile.lammps @@ -65,7 +65,7 @@ elif (test $1 = 0) then fi if (test -e ../Makefile.package.settings) then - sed -i -e '/^include.*mdi.*$/d' ../Makefile.package.settings + sed -i -e '/^[ \t]*include.*mdi.*$/d' ../Makefile.package.settings fi fi diff --git a/src/MESONT/Install.sh b/src/MESONT/Install.sh index 6e51bfae64..09e6c03dde 100644 --- a/src/MESONT/Install.sh +++ b/src/MESONT/Install.sh @@ -47,7 +47,7 @@ if (test $1 = 1) then fi if (test -e ../Makefile.package.settings) then - sed -i -e '/^include.*mesont.*$/d' ../Makefile.package.settings + sed -i -e '/^[ \t]*include.*mesont.*$/d' ../Makefile.package.settings # multiline form needed for BSD sed on Macs sed -i -e '4 i \ include ..\/..\/lib\/mesont\/Makefile.lammps @@ -61,7 +61,7 @@ elif (test $1 = 0) then fi if (test -e ../Makefile.package.settings) then - sed -i -e '/^include.*mesont.*$/d' ../Makefile.package.settings + sed -i -e '/^[ \t]*include.*mesont.*$/d' ../Makefile.package.settings fi fi diff --git a/src/MESONT/atom_vec_mesont.h b/src/MESONT/atom_vec_mesont.h index 3df40dc376..44f3f97084 100644 --- a/src/MESONT/atom_vec_mesont.h +++ b/src/MESONT/atom_vec_mesont.h @@ -26,7 +26,7 @@ AtomStyle(mesont,AtomVecMesoNT); namespace LAMMPS_NS { -class AtomVecMesoNT : public AtomVec { +class AtomVecMesoNT : virtual public AtomVec { public: AtomVecMesoNT(class LAMMPS *); }; diff --git a/src/MISC/fix_ipi.cpp b/src/MISC/fix_ipi.cpp index c84607d0af..039ec225d7 100644 --- a/src/MISC/fix_ipi.cpp +++ b/src/MISC/fix_ipi.cpp @@ -1,4 +1,3 @@ -// clang-format off /* ---------------------------------------------------------------------- LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator https://www.lammps.org/, Sandia National Laboratories @@ -47,12 +46,12 @@ using namespace FixConst; // socket interface #ifndef _WIN32 -#include -#include -#include -#include -#include #include +#include +#include +#include +#include +#include #else #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN @@ -65,8 +64,7 @@ using namespace FixConst; /* Utility functions to simplify the interface with POSIX sockets */ -static void open_socket(int &sockfd, int inet, int port, char* host, - Error *error) +static void open_socket(int &sockfd, int inet, int port, char *host, Error *error) /* Opens a socket. Args: @@ -83,9 +81,9 @@ static void open_socket(int &sockfd, int inet, int port, char* host, int ai_err; #ifdef _WIN32 - error->one(FLERR,"i-PI socket implementation requires UNIX environment"); + error->one(FLERR, "i-PI socket implementation requires UNIX environment"); #else - if (inet>0) { // creates an internet socket + if (inet > 0) { // creates an internet socket // fetches information on the host struct addrinfo hints, *res; @@ -96,40 +94,39 @@ static void open_socket(int &sockfd, int inet, int port, char* host, hints.ai_flags = AI_PASSIVE; ai_err = getaddrinfo(host, std::to_string(port).c_str(), &hints, &res); - if (ai_err!=0) - error->one(FLERR,"Error fetching host data. Wrong host name?"); + if (ai_err != 0) error->one(FLERR, "Error fetching host data. Wrong host name?"); // creates socket sockfd = socket(res->ai_family, res->ai_socktype, res->ai_protocol); - if (sockfd < 0) - error->one(FLERR,"Error opening socket"); + if (sockfd < 0) error->one(FLERR, "Error opening socket"); // makes connection if (connect(sockfd, res->ai_addr, res->ai_addrlen) < 0) - error->one(FLERR,"Error opening INET socket: wrong port or server unreachable"); + error->one(FLERR, "Error opening INET socket: wrong port or server unreachable"); freeaddrinfo(res); - } else { // creates a unix socket + } else { // creates a unix socket struct sockaddr_un serv_addr; // fills up details of the socket address memset(&serv_addr, 0, sizeof(serv_addr)); serv_addr.sun_family = AF_UNIX; strcpy(serv_addr.sun_path, "/tmp/ipi_"); - strcpy(serv_addr.sun_path+9, host); + strcpy(serv_addr.sun_path + 9, host); // creates the socket sockfd = socket(AF_UNIX, SOCK_STREAM, 0); // connects if (connect(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) - error->one(FLERR,"Error opening UNIX socket: server may not be running " + error->one(FLERR, + "Error opening UNIX socket: server may not be running " "or the path to the socket unavailable"); } #endif } -static void writebuffer(int sockfd, const char *data, int len, Error* error) +static void writebuffer(int sockfd, const char *data, int len, Error *error) /* Writes to a socket. Args: @@ -140,14 +137,11 @@ static void writebuffer(int sockfd, const char *data, int len, Error* error) { int n; - n = write(sockfd,data,len); - if (n < 0) - error->one(FLERR,"Error writing to socket: broken connection"); + n = write(sockfd, data, len); + if (n < 0) error->one(FLERR, "Error writing to socket: broken connection"); } - - -static void readbuffer(int sockfd, char *data, int len, Error* error) +static void readbuffer(int sockfd, char *data, int len, Error *error) /* Reads from a socket. Args: @@ -158,44 +152,52 @@ static void readbuffer(int sockfd, char *data, int len, Error* error) { int n, nr; - n = nr = read(sockfd,data,len); + n = nr = read(sockfd, data, len); - while (nr>0 && n 0 && n < len) { + nr = read(sockfd, &data[n], len - n); + n += nr; } - if (n == 0) - error->one(FLERR,"Error reading from socket: broken connection"); + if (n == 0) error->one(FLERR, "Error reading from socket: broken connection"); } /* ---------------------------------------------------------------------- */ -FixIPI::FixIPI(LAMMPS *lmp, int narg, char **arg) : - Fix(lmp, narg, arg), irregular(nullptr) +FixIPI::FixIPI(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg), irregular(nullptr) { - /* format for fix: - * fix num group_id ipi host port [unix] - */ - if (strcmp(style,"ipi") != 0 && narg < 5) - error->all(FLERR,"Illegal fix ipi command"); + if (narg < 5) utils::missing_cmd_args(FLERR, "fix ipi", error); - if (atom->tag_enable == 0) - error->all(FLERR,"Cannot use fix ipi without atom IDs"); + if (atom->tag_enable == 0) error->all(FLERR, "Cannot use fix ipi without atom IDs"); + if (atom->tag_consecutive() == 0) error->all(FLERR, "Fix ipi requires consecutive atom IDs"); + if (strcmp(update->unit_style, "lj") == 0) error->all(FLERR, "Fix ipi does not support lj units"); - if (atom->tag_consecutive() == 0) - error->all(FLERR,"Fix ipi requires consecutive atom IDs"); - - if (strcmp(arg[1],"all") != 0) - error->warning(FLERR,"Fix ipi always uses group all"); + if ((strcmp(arg[1], "all") != 0) && (comm->me == 0)) + error->warning(FLERR, "Not using group 'all' with fix ipi can result in undefined behavior"); host = strdup(arg[3]); - port = utils::inumeric(FLERR,arg[4],false,lmp); + port = utils::inumeric(FLERR, arg[4], false, lmp); - inet = ((narg > 5) && (strcmp(arg[5],"unix") == 0) ) ? 0 : 1; - master = (comm->me==0) ? 1 : 0; - // check if forces should be reinitialized and set flag - reset_flag = ((narg > 6 && (strcmp(arg[5],"reset") == 0 )) || ((narg > 5) && (strcmp(arg[5],"reset") == 0)) ) ? 1 : 0; + master = (comm->me == 0) ? 1 : 0; + inet = 1; + reset_flag = 0; + + int iarg = 5; + while (iarg < narg) { + if (strcmp(arg[iarg], "unix") == 0) { + inet = 0; + ++iarg; + } else if (strcmp(arg[iarg], "reset") == 0) { + reset_flag = 1; + ++iarg; + } else { + error->all(FLERR, "Unknown fix ipi keyword: {}", arg[iarg]); + } + } + + // sanity check + if (inet && ((port <= 1024) || (port > 65536))) + error->all(FLERR, "Invalid port for fix ipi: {}", port); hasdata = bsize = 0; @@ -223,7 +225,6 @@ FixIPI::~FixIPI() delete irregular; } - /* ---------------------------------------------------------------------- */ int FixIPI::setmask() @@ -240,9 +241,11 @@ void FixIPI::init() { //only opens socket on master process if (master) { - if (!socketflag) open_socket(ipisock, inet, port, host, error); - } else ipisock=0; - //! should check for success in socket opening -- but the current open_socket routine dies brutally if unsuccessful + if (!socketflag) open_socket(ipisock, inet, port, host, error); + } else + ipisock = 0; + // TODO: should check for success in socket opening, + // but the current open_socket routine dies brutally if unsuccessful // tell lammps we have assigned a socket socketflag = 1; @@ -252,11 +255,13 @@ void FixIPI::init() kspace_flag = (force->kspace) ? 1 : 0; - // makes sure that neighbor lists are re-built at each step (cannot make assumptions when cycling over beads!) + // makes sure that neighbor lists are re-built at each step + // (cannot make assumptions when cycling over beads!) neighbor->delay = 0; neighbor->every = 1; } +// clang-format off void FixIPI::initial_integrate(int /*vflag*/) { /* This is called at the beginning of the integration loop, diff --git a/src/MISC/pair_srp_react.cpp b/src/MISC/pair_srp_react.cpp index 38a09a7d1b..f8cbafaca9 100644 --- a/src/MISC/pair_srp_react.cpp +++ b/src/MISC/pair_srp_react.cpp @@ -34,14 +34,11 @@ There is an example script for this package in examples/PACKAGES/srp_react/. #include "error.h" #include "fix_srp_react.h" #include "force.h" -#include "memory.h" #include "modify.h" -#include "neigh_list.h" #include "neighbor.h" #include "output.h" #include "thermo.h" -#include #include using namespace LAMMPS_NS; diff --git a/src/MISC/pair_tracker.cpp b/src/MISC/pair_tracker.cpp index c994b02df5..1a9fb1f7c7 100644 --- a/src/MISC/pair_tracker.cpp +++ b/src/MISC/pair_tracker.cpp @@ -27,8 +27,8 @@ #include "neighbor.h" #include "tokenizer.h" #include "update.h" -#include "utils.h" +#include #include using namespace LAMMPS_NS; diff --git a/src/ML-HDNNP/Install.sh b/src/ML-HDNNP/Install.sh index 74e5f1b91e..f343f38851 100644 --- a/src/ML-HDNNP/Install.sh +++ b/src/ML-HDNNP/Install.sh @@ -46,7 +46,7 @@ if (test $1 = 1) then fi if (test -e ../Makefile.package.settings) then - sed -i -e '/^include.*hdnnp.*$/d' ../Makefile.package.settings + sed -i -e '/^[ \t]*include.*hdnnp.*$/d' ../Makefile.package.settings # multiline form needed for BSD sed on Macs sed -i -e '4 i \ include ..\/..\/lib\/hdnnp\/Makefile.lammps @@ -60,7 +60,7 @@ elif (test $1 = 0) then fi if (test -e ../Makefile.package.settings) then - sed -i -e '/^include.*hdnnp.*$/d' ../Makefile.package.settings + sed -i -e '/^[ \t]*include.*hdnnp.*$/d' ../Makefile.package.settings fi fi diff --git a/src/ML-IAP/Install.sh b/src/ML-IAP/Install.sh index 27c9b19b01..18812c6026 100755 --- a/src/ML-IAP/Install.sh +++ b/src/ML-IAP/Install.sh @@ -52,7 +52,7 @@ if (test $1 = 1) then sed -i -e 's|^PKG_INC =[ \t]*|&-DMLIAP_PYTHON |' ../Makefile.package fi if (test -e ../Makefile.package.settings) then - sed -i -e '/^include.*python.*mliap_python.*$/d' ../Makefile.package.settings + sed -i -e '/^[ \t]*include.*python.*mliap_python.*$/d' ../Makefile.package.settings # multiline form needed for BSD sed on Macs sed -i -e '4 i \ include ..\/..\/lib\/python\/Makefile.mliap_python @@ -68,7 +68,7 @@ elif (test $1 = 0) then fi rm -f ../mliap_model_python_couple.cpp ../mliap_model_python_couple.h \ ../mliap_unified_couple.cpp ../mliap_unified_couple.h - sed -i -e '/^include.*python.*mliap_python.*$/d' ../Makefile.package.settings + sed -i -e '/^[ \t]*include.*python.*mliap_python.*$/d' ../Makefile.package.settings elif (test $1 = 2) then if (type cythonize > /dev/null 2>&1 && test -e ../python_impl.cpp) then @@ -77,12 +77,12 @@ elif (test $1 = 2) then fi rm -f ../mliap_model_python_couple.cpp ../mliap_model_python_couple.h \ ../mliap_unified_couple.cpp ../mliap_unified_couple.h - sed -i -e '/^include.*python.*mliap_python.*$/d' ../Makefile.package.settings + sed -i -e '/^[ \t]*include.*python.*mliap_python.*$/d' ../Makefile.package.settings if (test -e ../Makefile.package) then sed -i -e 's|^PKG_INC =[ \t]*|&-DMLIAP_PYTHON |' ../Makefile.package fi if (test -e ../Makefile.package.settings) then - sed -i -e '/^include.*python.*mliap_python.*$/d' ../Makefile.package.settings + sed -i -e '/^[ \t]*include.*python.*mliap_python.*$/d' ../Makefile.package.settings # multiline form needed for BSD sed on Macs sed -i -e '4 i \ include ..\/..\/lib\/python\/Makefile.mliap_python diff --git a/src/ML-IAP/compute_mliap.cpp b/src/ML-IAP/compute_mliap.cpp index 2c025f025a..161613fae6 100644 --- a/src/ML-IAP/compute_mliap.cpp +++ b/src/ML-IAP/compute_mliap.cpp @@ -98,9 +98,7 @@ ComputeMLIAP::ComputeMLIAP(LAMMPS *lmp, int narg, char **arg) : descriptorflag = 1; } else if (strcmp(arg[iarg],"gradgradflag") == 0) { if (iarg+1 > narg) error->all(FLERR,"Illegal compute mliap command"); - gradgradflag = atoi(arg[iarg+1]); - if (gradgradflag != 0 && gradgradflag != 1) - error->all(FLERR,"Illegal compute mliap command"); + gradgradflag = utils::logical(FLERR, arg[iarg+1], false, lmp); iarg += 2; } else error->all(FLERR,"Illegal compute mliap command"); diff --git a/src/ML-IAP/mliap_model.h b/src/ML-IAP/mliap_model.h index f2a6f4a998..0f7a8e8e4f 100644 --- a/src/ML-IAP/mliap_model.h +++ b/src/ML-IAP/mliap_model.h @@ -14,7 +14,7 @@ #ifndef LMP_MLIAP_MODEL_H #define LMP_MLIAP_MODEL_H -#include "pointers.h" +#include "pointers.h" // IWYU pragma: export namespace LAMMPS_NS { diff --git a/src/ML-IAP/mliap_model_python.cpp b/src/ML-IAP/mliap_model_python.cpp index e1859d8e1d..5bd6b45c92 100644 --- a/src/ML-IAP/mliap_model_python.cpp +++ b/src/ML-IAP/mliap_model_python.cpp @@ -26,7 +26,6 @@ #include "mliap_model_python_couple.h" #include "pair_mliap.h" #include "python_compat.h" -#include "utils.h" #include diff --git a/src/ML-IAP/pair_mliap.cpp b/src/ML-IAP/pair_mliap.cpp index 38d98510ce..a79a8c0627 100644 --- a/src/ML-IAP/pair_mliap.cpp +++ b/src/ML-IAP/pair_mliap.cpp @@ -30,12 +30,10 @@ #endif #include "atom.h" -#include "comm.h" #include "error.h" #include "force.h" #include "memory.h" #include "neighbor.h" -#include "neigh_request.h" #include #include diff --git a/src/ML-PACE/Install.sh b/src/ML-PACE/Install.sh index c099ddd2c4..c0a0958424 100644 --- a/src/ML-PACE/Install.sh +++ b/src/ML-PACE/Install.sh @@ -44,7 +44,7 @@ if (test $1 = 1) then fi if (test -e ../Makefile.package.settings) then - sed -i -e '/^include.*pace.*$/d' ../Makefile.package.settings + sed -i -e '/^[ \t]*include.*pace.*$/d' ../Makefile.package.settings # multiline form needed for BSD sed on Macs sed -i -e '4 i \ include ..\/..\/lib\/pace\/Makefile.lammps @@ -58,7 +58,7 @@ elif (test $1 = 0) then fi if (test -e ../Makefile.package.settings) then - sed -i -e '/^include.*pace.*$/d' ../Makefile.package.settings + sed -i -e '/^[ \t]*include.*pace.*$/d' ../Makefile.package.settings fi fi diff --git a/src/ML-PACE/pair_pace_extrapolation.cpp b/src/ML-PACE/pair_pace_extrapolation.cpp index d95c4cfb91..ec185e75df 100644 --- a/src/ML-PACE/pair_pace_extrapolation.cpp +++ b/src/ML-PACE/pair_pace_extrapolation.cpp @@ -96,6 +96,7 @@ PairPACEExtrapolation::PairPACEExtrapolation(LAMMPS *lmp) : Pair(lmp) aceimpl = new ACEALImpl; scale = nullptr; + flag_compute_extrapolation_grade = 0; extrapolation_grade_gamma = nullptr; } diff --git a/src/ML-PACE/pair_pace_extrapolation.h b/src/ML-PACE/pair_pace_extrapolation.h index 4c31fcbc3f..c5d9da23db 100644 --- a/src/ML-PACE/pair_pace_extrapolation.h +++ b/src/ML-PACE/pair_pace_extrapolation.h @@ -51,7 +51,6 @@ class PairPACEExtrapolation : public Pair { void allocate(); std::vector element_names; // list of elements (used by dump pace/extrapolation) - int nelements; // # of unique elements double *extrapolation_grade_gamma; //per-atom gamma value int flag_compute_extrapolation_grade; diff --git a/src/ML-POD/Install.sh b/src/ML-POD/Install.sh new file mode 100755 index 0000000000..a62887e1b3 --- /dev/null +++ b/src/ML-POD/Install.sh @@ -0,0 +1,59 @@ +# Install/unInstall package files in LAMMPS +# mode = 0/1/2 for uninstall/install/update + +mode=$1 + +# enforce using portable C locale +LC_ALL=C +export LC_ALL + +# arg1 = file, arg2 = file it depends on + +action () { + if (test $mode = 0) then + rm -f ../$1 + elif (! cmp -s $1 ../$1) then + if (test -z "$2" || test -e ../$2) then + cp $1 .. + if (test $mode = 2) then + echo " updating src/$1" + fi + fi + elif (test -n "$2") then + if (test ! -e ../$2) then + rm -f ../$1 + fi + fi +} + +# all package files with no dependencies + +for file in *.cpp *.h; do + test -f ${file} && action $file +done + +if (test $1 = 1) then + if (test -e ../Makefile.package) then + sed -i -e 's/[^ \t]*mlpod[^ \t]* //g' ../Makefile.package + sed -i -e 's|^PKG_PATH =[ \t]*|&-L../../lib/mlpod |' ../Makefile.package + sed -i -e 's|^PKG_LIB =[ \t]*|&-lmlpod |' ../Makefile.package + sed -i -e 's|^PKG_SYSPATH =[ \t]*|&$(mlpod_SYSPATH) |' ../Makefile.package + sed -i -e 's|^PKG_SYSLIB =[ \t]*|&$(mlpod_SYSLIB) |' ../Makefile.package + fi + if (test -e ../Makefile.package.settings) then + sed -i -e '/^[ \t]*include.*mlpod.*$/d' ../Makefile.package.settings + # multiline form needed for BSD sed on Macs + sed -i -e '4 i \ +include ..\/..\/lib\/mlpod\/Makefile.lammps +' ../Makefile.package.settings + fi + +elif (test $1 = 0) then + if (test -e ../Makefile.package) then + sed -i -e 's/[^ \t]*mlpod[^ \t]* //g' ../Makefile.package + fi + if (test -e ../Makefile.package.settings) then + sed -i -e '/^[ \t]*include.*mlpod.*$/d' ../Makefile.package.settings + fi +fi + diff --git a/src/ML-POD/fitpod_command.cpp b/src/ML-POD/fitpod_command.cpp new file mode 100644 index 0000000000..97ef93ab91 --- /dev/null +++ b/src/ML-POD/fitpod_command.cpp @@ -0,0 +1,1817 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/ Sandia National Laboratories + LAMMPS development team: developers@lammps.org + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Contributing authors: Ngoc Cuong Nguyen (MIT) and Andrew Rohskopf (SNL) +------------------------------------------------------------------------- */ + +#include "fitpod_command.h" + +#include "mlpod.h" + +#include "comm.h" +#include "error.h" +#include "math_special.h" +#include "memory.h" +#include "tokenizer.h" + +#include +#include +#include +#include + +using namespace LAMMPS_NS; +using MathSpecial::powint; + +#define MAXLINE 1024 + +static constexpr double SMALL = 1.0e-10; + +FitPOD::FitPOD(LAMMPS *_lmp) : Command(_lmp), podptr(nullptr) +{ +} + +void FitPOD::command(int narg, char **arg) +{ + if (narg < 2) utils::missing_cmd_args(FLERR, "fitpod", error); + + std::string pod_file = std::string(arg[0]); // pod input file + std::string data_file = std::string(arg[1]); // data input file + std::string coeff_file; // coefficient input file + + if (narg > 2) + coeff_file = std::string(arg[2]); // coefficient input file + else + coeff_file = ""; + + podptr = new MLPOD(lmp, pod_file, coeff_file); + read_data_files(data_file, podptr->pod.species); + + if ((int) traindata.data_path.size() > 1) + allocate_memory(traindata); + else if ((int) testdata.data_path.size() > 1) + allocate_memory(testdata); + + // get POD coefficients from an input file + + if (coeff_file != "") podArrayCopy(desc.c, podptr->pod.coeff, podptr->pod.nd); + + // compute POD coefficients using least-squares method + + least_squares_fit(traindata); + + // calculate errors for the training data set + + if ((traindata.training_analysis) && ((int) traindata.data_path.size() > 1) ) + error_analysis(traindata, desc.c); + + // calculate errors for the test data set + + if ((testdata.test_analysis) && ((int) testdata.data_path.size() > 1) && (testdata.data_path != traindata.data_path)) + error_analysis(testdata, desc.c); + + // calculate energy and force for the training data set + + if ((traindata.training_calculation) && ((int) traindata.data_path.size() > 1) ) + energyforce_calculation(traindata, desc.c); + + // calculate energy and force for the test data set + + if ((testdata.test_calculation) && ((int) testdata.data_path.size() > 1) && (testdata.data_path != traindata.data_path) ) + energyforce_calculation(testdata, desc.c); + + // deallocate training data + + if ((int) traindata.data_path.size() > 1){ + memory->destroy(traindata.lattice); + memory->destroy(traindata.energy); + memory->destroy(traindata.stress); + memory->destroy(traindata.position); + memory->destroy(traindata.force); + memory->destroy(traindata.atomtype); + } + + // deallocate testing data + + if ((int) testdata.data_path.size() > 1 && (testdata.data_path != traindata.data_path)){ + memory->destroy(testdata.lattice); + memory->destroy(testdata.energy); + memory->destroy(testdata.stress); + memory->destroy(testdata.position); + memory->destroy(testdata.force); + memory->destroy(testdata.atomtype); + } + + // deallocate descriptors + + memory->destroy(desc.gd); + memory->destroy(desc.gdd); + memory->destroy(desc.A); + memory->destroy(desc.b); + memory->destroy(desc.c); + memory->destroy(desc.tmpint); + + // deallocate neighbor data + + memory->destroy(nb.alist); + memory->destroy(nb.pairnum); + memory->destroy(nb.pairnum_cumsum); + memory->destroy(nb.pairlist); + memory->destroy(nb.y); + delete podptr; +} + +/* ---------------------------------------------------------------------- */ + +int FitPOD::read_data_file(double *fitting_weights, std::string &file_format, + std::string &file_extension, std::string &test_path, + std::string &training_path, std::string &filenametag, + const std::string &data_file) +{ + int precision = 8; + + std::string datafilename = data_file; + FILE *fpdata; + if (comm->me == 0) { + + fpdata = utils::open_potential(datafilename,lmp,nullptr); + if (fpdata == nullptr) + error->one(FLERR,"Cannot open training data file {}: ", datafilename, utils::getsyserror()); + } + + // loop through lines of training data file and parse keywords + + char line[MAXLINE],*ptr; + int eof = 0; + while (true) { + if (comm->me == 0) { + ptr = fgets(line,MAXLINE,fpdata); + if (ptr == nullptr) { + eof = 1; + fclose(fpdata); + } + } + MPI_Bcast(&eof,1,MPI_INT,0,world); + if (eof) break; + MPI_Bcast(line,MAXLINE,MPI_CHAR,0,world); + + // words = ptrs to all words in line + // strip single and double quotes from words + + std::vector words; + try { + words = Tokenizer(utils::trim_comment(line),"\"' \t\n\r\f").as_vector(); + } catch (TokenizerException &) { + // ignore + } + + if (words.size() == 0) continue; + + auto keywd = words[0]; + + if (words.size() != 2) + error->one(FLERR,"Improper POD file.", utils::getsyserror()); + + // settings for fitting weights + + if (keywd == "fitting_weight_energy") fitting_weights[0] = utils::numeric(FLERR,words[1],false,lmp); + if (keywd == "fitting_weight_force") fitting_weights[1] = utils::numeric(FLERR,words[1],false,lmp); + if (keywd == "fitting_weight_stress") fitting_weights[2] = utils::numeric(FLERR,words[1],false,lmp); + if (keywd == "error_analysis_for_training_data_set") fitting_weights[3] = utils::numeric(FLERR,words[1],false,lmp); + if (keywd == "error_analysis_for_test_data_set") fitting_weights[4] = utils::numeric(FLERR,words[1],false,lmp); + if (keywd == "energy_force_calculation_for_training_data_set") fitting_weights[5] = utils::numeric(FLERR,words[1],false,lmp); + if (keywd == "energy_force_calculation_for_test_data_set") fitting_weights[6] = utils::numeric(FLERR,words[1],false,lmp); + if (keywd == "fraction_training_data_set") fitting_weights[7] = utils::numeric(FLERR,words[1],false,lmp); + if (keywd == "fraction_test_data_set") fitting_weights[8] = utils::numeric(FLERR,words[1],false,lmp); + if (keywd == "randomize_training_data_set") fitting_weights[9] = utils::numeric(FLERR,words[1],false,lmp); + if (keywd == "randomize_test_data_set") fitting_weights[10] = utils::numeric(FLERR,words[1],false,lmp); + if (keywd == "fitting_regularization_parameter") fitting_weights[11] = utils::numeric(FLERR,words[1],false,lmp); + if (keywd == "precision_for_pod_coefficients") precision = utils::inumeric(FLERR,words[1],false,lmp); + + // other settings + + if (keywd == "file_format") file_format = words[1]; + if (keywd == "file_extension") file_extension = words[1]; + if (keywd == "path_to_training_data_set") training_path = words[1]; + if (keywd == "path_to_test_data_set") test_path = words[1]; + if (keywd == "basename_for_output_files") filenametag = words[1]; + } + + if (comm->me == 0) { + utils::logmesg(lmp, "**************** Begin of Data File ****************\n"); + utils::logmesg(lmp, "file format: {}\n", file_format); + utils::logmesg(lmp, "file extension: {}\n", file_extension); + utils::logmesg(lmp, "path to training data set: {}\n", training_path); + utils::logmesg(lmp, "path to test data set: {}\n", test_path); + utils::logmesg(lmp, "training fraction: {}\n", fitting_weights[7]); + utils::logmesg(lmp, "test fraction: {}\n", fitting_weights[8]); + utils::logmesg(lmp, "randomize training data set: {}\n", fitting_weights[9]); + utils::logmesg(lmp, "randomize test data set: {}\n", fitting_weights[10]); + utils::logmesg(lmp, "error analysis for training data set: {}\n", fitting_weights[3]); + utils::logmesg(lmp, "error analysis for test data set: {}\n", fitting_weights[4]); + utils::logmesg(lmp, "energy/force calculation for training data set: {}\n", fitting_weights[5]); + utils::logmesg(lmp, "energy/force calculation for test data set: {}\n", fitting_weights[6]); + utils::logmesg(lmp, "fitting weight for energy: {}\n", fitting_weights[0]); + utils::logmesg(lmp, "fitting weight for force: {}\n", fitting_weights[1]); + utils::logmesg(lmp, "fitting weight for stress: {}\n", fitting_weights[2]); + utils::logmesg(lmp, "fitting regularization parameter: {}\n", fitting_weights[11]); + utils::logmesg(lmp, "**************** End of Data File ****************\n"); + } + + return precision; +} + +void FitPOD::get_exyz_files(std::vector& files, const std::string &datapath, + const std::string &extension) +{ + auto allfiles = platform::list_directory(datapath); + std::sort(allfiles.begin(), allfiles.end()); + for (const auto &fname : allfiles) { + if (utils::strmatch(fname, fmt::format(".*\\.{}$", extension))) + files.push_back(datapath + platform::filepathsep + fname); + } +} + +int FitPOD::get_number_atom_exyz(std::vector& num_atom, int& num_atom_sum, std::string file) +{ + std::string filename = std::move(file); + FILE *fp; + if (comm->me == 0) { + fp = utils::open_potential(filename,lmp,nullptr); + if (fp == nullptr) + error->one(FLERR,"Cannot open POD coefficient file {}: ", filename, utils::getsyserror()); + } + + char line[MAXLINE],*ptr; + int eof = 0; + int num_configs = 0; + num_atom_sum = 0; + + // loop over all lines of this xyz file and extract number of atoms and number of configs + + while (true) { + if (comm->me == 0) { + ptr = fgets(line,MAXLINE,fp); + if (ptr == nullptr) { + eof = 1; + fclose(fp); + } + } + MPI_Bcast(&eof,1,MPI_INT,0,world); + if (eof) break; + MPI_Bcast(line,MAXLINE,MPI_CHAR,0,world); + + // words = ptrs to all words in line + // strip single and double quotes from words + + std::vector words; + try { + words = Tokenizer(utils::trim_comment(line),"\"' \t\n\r\f").as_vector(); + } catch (TokenizerException &) { + // ignore + } + + if (words.size() == 0) continue; + + int natom; + if (words.size() == 1) { + natom = utils::inumeric(FLERR,words[0],false,lmp); + num_atom.push_back(natom); + num_configs += 1; + num_atom_sum += natom; + } + } + return num_configs; +} + +int FitPOD::get_number_atoms(std::vector& num_atom, std::vector &num_atom_sum, std::vector& num_config, std::vector training_files) +{ + int nfiles = training_files.size(); // number of files + int d, n; + + for (int i=0; i species) +{ + + std::string filename = std::move(file); + FILE *fp; + if (comm->me == 0) { + fp = utils::open_potential(filename,lmp,nullptr); + if (fp == nullptr) + error->one(FLERR,"Cannot open POD coefficient file {}: ", filename, utils::getsyserror()); + } + + char line[MAXLINE],*ptr; + int eof = 0; + int cfi = 0; + int nat = 0; + int ns = species.size(); + + // loop over all lines of this xyz file and extract training data + + while (true) { + if (comm->me == 0) { + ptr = fgets(line,MAXLINE,fp); + if (ptr == nullptr) { + eof = 1; + fclose(fp); + } + } + MPI_Bcast(&eof,1,MPI_INT,0,world); + if (eof) break; + MPI_Bcast(line,MAXLINE,MPI_CHAR,0,world); + + // words = ptrs to all words in line + // strip single and double quotes from words + + std::vector words; + try { + words = Tokenizer(utils::trim_comment(line),"\"' \t\n\r\f").as_vector(); + } catch (TokenizerException &) { + // ignore + } + + if (words.size() == 0) continue; + + ValueTokenizer text(utils::trim_comment(line),"\"' \t\n\r\f"); + if (text.contains("attice")) { + + // find the word containing "lattice" + + auto it = std::find_if(words.begin(), words.end(), [](const std::string& str) { return str.find("attice") != std::string::npos; }); + + // get index of element from iterator + + int index = std::distance(words.begin(), it); + + if (words[index].find("=") != std::string::npos) { + + // lattice numbers start at index + 1 + + for (int k = 0; k < 9; k++) { + lattice[k + 9*cfi] = utils::numeric(FLERR,words[index+1+k],false,lmp); + } + } else { + + // lattice numbers start at index + 2 + + for (int k = 0; k < 9; k++) { + lattice[k + 9*cfi] = utils::numeric(FLERR,words[index+2+k],false,lmp); + } + } + + // find the word containing "energy" + + it = std::find_if(words.begin(), words.end(), [](const std::string& str) { return str.find("nergy") != std::string::npos; }); + + // get index of element from iterator + + index = std::distance(words.begin(), it); + + if (words[index].find("=") != std::string::npos) { + + // energy is after "=" inside this string + + std::size_t found = words[index].find("="); + energy[cfi] = utils::numeric(FLERR,words[index].substr(found+1),false,lmp); + } else { + + // energy is at index + 2 + + energy[cfi] = utils::numeric(FLERR,words[index+2],false,lmp); + + } + + // find the word containing "stress" + + it = std::find_if(words.begin(), words.end(), [](const std::string& str) { return str.find("tress") != std::string::npos; }); + + // get index of element from iterator + + index = std::distance(words.begin(), it); + + if (words[index].find("=") != std::string::npos) { + + // stress numbers start at index + 1 + + for (int k = 0; k < 9; k++) { + stress[k + 9*cfi] = utils::numeric(FLERR,words[index+1+k],false,lmp); + } + } else { + + // lattice numbers start at index + 2 + + for (int k = 0; k < 9; k++) { + stress[k + 9*cfi] = utils::numeric(FLERR,words[index+2+k],false,lmp); + } + } + + cfi += 1; + + } + + // loop over atoms + + else if (words.size() > 1) { + + for (int ii = 0; ii < ns; ii++) + if (species[ii] == words[0]) + atomtype[nat] = ii+1; + + for (int k = 0; k < 6; k++) { + if (k <= 2) pos[k + 3*nat] = utils::numeric(FLERR,words[1+k],false,lmp); + if (k > 2 ) forces[k-3 + 3*nat] = utils::numeric(FLERR,words[1+k],false,lmp); + } + nat += 1; + } + } +} + +void FitPOD::get_data(datastruct &data, const std::vector& species) +{ + get_exyz_files(data.data_files, data.data_path, data.file_extension); + data.num_atom_sum = get_number_atoms(data.num_atom, data.num_atom_each_file, data.num_config, data.data_files); + data.num_config_sum = data.num_atom.size(); + size_t maxname = 9; + for (const auto &fname : data.data_files) maxname = MAX(maxname,fname.size()); + maxname -= data.data_path.size()+1; + const std::string sepline(maxname+46, '-'); + if (comm->me == 0) + utils::logmesg(lmp, "{}\n {:^{}} | number of configurations | number of atoms\n{}\n", + sepline, "data file", maxname, sepline); + int i = 0; + for (const auto &fname : data.data_files) { + std::string filename = fname.substr(data.data_path.size()+1); + data.filenames.push_back(filename); + if (comm->me == 0) + utils::logmesg(lmp, " {:<{}} | {:>10} | {:>8}\n", + filename, maxname, data.num_config[i], data.num_atom_each_file[i]); + ++i; + } + if (comm->me == 0) { + utils::logmesg(lmp, "{}\n", sepline); + utils::logmesg(lmp, "number of files: {}\n", data.data_files.size()); + utils::logmesg(lmp, "number of configurations in all files: {}\n", data.num_config_sum); + utils::logmesg(lmp, "number of atoms in all files: {}\n", data.num_atom_sum); + } + + if (data.data_files.size() < 1) error->all(FLERR, "Cannot fit potential without data files"); + + int n = data.num_config_sum; + memory->create(data.lattice, 9*n, "fitpod:lattice"); + memory->create(data.stress, 9*n, "fitpod:stress"); + memory->create(data.energy, n, "fitpod:energy"); + n = data.num_atom_sum; + memory->create(data.position, 3*n, "fitpod:position"); + memory->create(data.force, 3*n, "fitpod:force"); + memory->create(data.atomtype, n, "fitpod:atomtype"); + + int nfiles = data.data_files.size(); // number of files + int nconfigs = 0; + int natoms = 0; + for (int i=0; ime == 0) { + utils::logmesg(lmp, "minimum number of atoms: {}\n", data.num_atom_min); + utils::logmesg(lmp, "maximum number of atoms: {}\n", data.num_atom_max); + } +} + +std::vector FitPOD::linspace(int start_in, int end_in, int num_in) +{ + + std::vector linspaced; + + double start = static_cast(start_in); + double end = static_cast(end_in); + double num = static_cast(num_in); + + int elm; + + if (num == 0) { return linspaced; } + if (num == 1) + { + elm = (int) std::round(start); + linspaced.push_back(elm); + return linspaced; + } + + double delta = (end - start) / (num - 1); + + for(int i=0; i < num-1; ++i) + { + elm = (int) std::round(start + delta * i); + linspaced.push_back(elm); + } + + elm = (int) std::round(end); + linspaced.push_back(elm); + + return linspaced; +} + +std::vector FitPOD::shuffle(int start_in, int end_in, int num_in) +{ + int sz = end_in - start_in + 1; + std::vector myvector(sz); + + for (int i = 0; i shuffle_vec(num_in); + for (int i = 0; i FitPOD::select(int n, double fraction, int randomize) +{ + std::vector selected; + + int m = (int) std::round(n*fraction); + m = MAX(m, 1); + + selected = (randomize==1) ? shuffle(1, n, m) : linspace(1, n, m); + + return selected; +} + +void FitPOD::select_data(datastruct &newdata, const datastruct &data) +{ + double fraction = data.fraction; + int randomize = data.randomize; + + if (comm->me == 0) { + if (randomize==1) + utils::logmesg(lmp, "Select {} fraction of the data set at random using shuffle\n", data.fraction); + else + utils::logmesg(lmp, "Select {} fraction of the data set deterministically using linspace\n", data.fraction); + } + + int nfiles = data.data_files.size(); // number of files + std::vector> selected(nfiles); + + newdata.num_config.resize(nfiles); + newdata.num_config_cumsum.resize(nfiles+1); + newdata.num_atom_each_file.resize(nfiles); + + for (int file = 0; file < nfiles; file++) { + int nconfigs = data.num_config[file]; + selected[file] = select(nconfigs, fraction, randomize); + int ns = (int) selected[file].size(); // number of selected configurations + + newdata.num_config[file] = ns; + int num_atom_sum = 0; + for (int ii=0; ii < ns; ii++) { // loop over each selected configuration in a file + int ci = data.num_config_cumsum[file] + selected[file][ii] - 1; + int natom = data.num_atom[ci]; + newdata.num_atom.push_back(natom); + num_atom_sum += natom; + } + newdata.num_atom_each_file[file] = num_atom_sum; + } + int len = newdata.num_atom.size(); + newdata.num_atom_min = podArrayMin(&newdata.num_atom[0], len); + newdata.num_atom_max = podArrayMax(&newdata.num_atom[0], len); + newdata.num_atom_cumsum.resize(len+1); + podCumsum(&newdata.num_atom_cumsum[0], &newdata.num_atom[0], len+1); + newdata.num_atom_sum = newdata.num_atom_cumsum[len]; + podCumsum(&newdata.num_config_cumsum[0], &newdata.num_config[0], nfiles+1); + newdata.num_config_sum = newdata.num_atom.size(); + + int n = data.num_config_sum; + memory->create(newdata.lattice, 9*n, "fitpod:newdata_lattice"); + memory->create(newdata.stress, 9*n, "fitpod:newdata_stress"); + memory->create(newdata.energy, n, "fitpod:newdata_energy"); + n = data.num_atom_sum; + memory->create(newdata.position, 3*n, "fitpod:newdata_position"); + memory->create(newdata.force, 3*n, "fitpod:newdata_force"); + memory->create(newdata.atomtype, n, "fitpod:newdata_atomtype"); + + int cn = 0; + int dim = 3; + for (int file = 0; file < nfiles; file++) { + int ns = (int) selected[file].size(); // number of selected configurations + for (int ii=0; ii < ns; ii++) { // loop over each selected configuration in a file + int ci = data.num_config_cumsum[file] + selected[file][ii] - 1; + int natom = data.num_atom[ci]; + int natom_cumsum = data.num_atom_cumsum[ci]; + + int natomnew = newdata.num_atom[cn]; + int natomnew_cumsum = newdata.num_atom_cumsum[cn]; + + if (natom != natomnew) + error->all(FLERR,"number of atoms in the new data set must be the same as that in the old data set."); + + int *atomtype = &data.atomtype[natom_cumsum]; + double *position = &data.position[dim*natom_cumsum]; + double *force = &data.force[dim*natom_cumsum]; + + newdata.energy[cn] = data.energy[ci]; + for (int j=0; j<9; j++) { + newdata.stress[j+9*cn] = data.stress[j+9*ci]; + newdata.lattice[j+9*cn] = data.lattice[j+9*ci]; + } + + for (int na=0; name == 0) + utils::logmesg(lmp, "{:-<{}}\n {:^{}} | # configs (selected) | # atoms (selected) " + "| # configs (original) | # atoms (original)\n{:-<{}}\n", + "", maxname+90, "data_file", maxname, "", maxname+90); + for (int i=0; i< (int) newdata.data_files.size(); i++) { + std::string filename = newdata.data_files[i].substr(newdata.data_path.size()+1,newdata.data_files[i].size()); + newdata.filenames.emplace_back(filename.c_str()); + if (comm->me == 0) + utils::logmesg(lmp, " {:<{}} | {:>8} | {:>8} | {:>8} | {:>8}\n", + newdata.filenames[i], maxname, newdata.num_config[i], newdata.num_atom_each_file[i], + data.num_config[i], data.num_atom_each_file[i]); + } + if (comm->me == 0) { + utils::logmesg(lmp, "{:-<{}}\nnumber of files: {}\n", "", maxname+90, newdata.data_files.size()); + utils::logmesg(lmp, "number of configurations in all files (selected and original): {} and {}\n", newdata.num_config_sum, data.num_config_sum); + utils::logmesg(lmp, "number of atoms in all files (selected and original: {} and {}\n", newdata.num_atom_sum, data.num_atom_sum); + } +} + +void FitPOD::read_data_files(const std::string& data_file, const std::vector& species) +{ + datastruct data; + + // read data input file to datastruct + + data.precision = read_data_file(data.fitting_weights, data.file_format, data.file_extension, + testdata.data_path, data.data_path, data.filenametag, data_file); + + data.training_analysis = (int) data.fitting_weights[3]; + data.test_analysis = (int) data.fitting_weights[4]; + data.training_calculation = (int) data.fitting_weights[5]; + data.test_calculation = (int) data.fitting_weights[6]; + data.fraction = data.fitting_weights[7]; + data.randomize = (int) data.fitting_weights[9]; + + data.copydatainfo(traindata); + + if (data.fraction >= 1.0) { + if (comm->me == 0) + utils::logmesg(lmp, "**************** Begin of Training Data Set ****************\n"); + if (traindata.data_path.size() > 1) + get_data(traindata, species); + else + error->all(FLERR,"data set is not found"); + if (comm->me == 0) + utils::logmesg(lmp, "**************** End of Training Data Set ****************\n"); + } else { + if (comm->me == 0) + utils::logmesg(lmp, "**************** Begin of Training Data Set ****************\n"); + if (data.data_path.size() > 1) + get_data(data, species); + else + error->all(FLERR,"data set is not found"); + if (comm->me == 0) + utils::logmesg(lmp, "**************** End of Training Data Set ****************\n"); + + if (comm->me == 0) + utils::logmesg(lmp, "**************** Begin of Select Training Data Set ****************\n"); + select_data(traindata, data); + if (comm->me == 0) + utils::logmesg(lmp, "**************** End of Select Training Data Set ****************\n"); + + memory->destroy(data.lattice); + memory->destroy(data.energy); + memory->destroy(data.stress); + memory->destroy(data.position); + memory->destroy(data.force); + memory->destroy(data.atomtype); + } + + if (((int) testdata.data_path.size() > 1) && (testdata.data_path != traindata.data_path)) { + testdata.training = 0; + testdata.file_format = traindata.file_format; + testdata.file_extension = traindata.file_extension; + testdata.training_analysis = traindata.training_analysis; + testdata.test_analysis = traindata.test_analysis; + testdata.training_calculation = traindata.training_calculation; + testdata.test_calculation = traindata.test_calculation; + testdata.fraction = traindata.fitting_weights[8]; + testdata.randomize = (int) traindata.fitting_weights[10]; + if (comm->me == 0) + utils::logmesg(lmp, "**************** Begin of Test Data Set ****************\n"); + get_data(testdata, species); + if (comm->me == 0) + utils::logmesg(lmp, "**************** End of Test Data Set ****************\n"); + } + else { + testdata.data_path = traindata.data_path; + } +} + +int FitPOD::latticecoords(double *y, int *alist, double *x, double *a1, double *a2, double *a3, double rcut, int *pbc, int nx) +{ + int m=0, n=0, p=0; + if (pbc[0] == 1) m = (int) ceil(rcut/a1[0]); + if (pbc[1] == 1) n = (int) ceil(rcut/a2[1]); + if (pbc[2] == 1) p = (int) ceil(rcut/a3[2]); + + // index for the center lattice + + int ind = m + (2*m+1)*(n) + (2*m+1)*(2*n+1)*(p); + + // number of lattices + + int nl = (2*m+1)*(2*n+1)*(2*p+1); + + for (int j=0; j<3*nx; j++) + y[j] = x[j]; + int q = nx; + + for (int i = 0; i < (2*p+1); i++) + for (int j = 0; j < (2*n+1); j++) + for (int k = 0; k < (2*m+1); k++) { + int ii = k + (2*m+1)*j + (2*m+1)*(2*n+1)*i; + if (ii != ind) { + double x0 = a1[0]*(k - m) + a2[0]*(j - n) + a3[0]*(i - p); + double x1 = a1[1]*(k - m) + a2[1]*(j - n) + a3[1]*(i - p); + double x2 = a1[2]*(k - m) + a2[2]*(j - n) + a3[2]*(i - p); + for (int jj=0; jj SMALL) && (rijsq <= rcutsq)) { + inc += 1; + neighlist[k] = j; + k += 1; + } + } + numneigh[i] = inc; + } + return k; +} + +int FitPOD::podfullneighborlist(double *y, int *alist, int *neighlist, int *numneigh, int *numneighsum, + double *x, double *a1, double *a2, double *a3, double rcut, int *pbc, int nx) +{ + double rcutsq = rcut*rcut; + int dim = 3, nl = 0, nn = 0; + + // number of lattices + + nl = latticecoords(y, alist, x, a1, a2, a3, rcut, pbc, nx); + int N = nx*nl; + + // total number of neighbors + + nn = podneighborlist(neighlist, numneigh, y, rcutsq, nx, N, dim); + + podCumsum(numneighsum, numneigh, nx+1); + + return nn; +} + +void FitPOD::allocate_memory(const datastruct &data) +{ + int nd = podptr->pod.nd; + memory->create(desc.gd, nd, "fitpod:desc_gd"); + memory->create(desc.A, nd*nd, "fitpod:desc_A"); + memory->create(desc.b, nd, "fitpod:desc_b"); + memory->create(desc.c, nd, "fitpod:desc_c"); + podArraySetValue(desc.A, 0.0, nd*nd); + podArraySetValue(desc.b, 0.0, nd); + podArraySetValue(desc.c, 0.0, nd); + + int dim = 3; + int natom_max = data.num_atom_max; + int nd1 = podptr->pod.nd1; + int nd2 = podptr->pod.nd2; + int nd3 = podptr->pod.nd3; + int nd4 = podptr->pod.nd4; + int nelements = podptr->pod.nelements; + int nbesselpars = podptr->pod.nbesselpars; + int nrbf2 = podptr->pod.nbf2; + int nabf3 = podptr->pod.nabf3; + int nrbf3 = podptr->pod.nrbf3; + int *pdegree2 = podptr->pod.twobody; + int *pdegree3 = podptr->pod.threebody; + int *pbc = podptr->pod.pbc; + double rcut = podptr->pod.rcut; + + int Nj=0, Nij=0; + int m=0, n=0, p=0, nl=0, ny=0, na=0, np=0; + + for (int ci=0; ci<(int) data.num_atom.size(); ci++) + { + int natom = data.num_atom[ci]; + double *lattice = &data.lattice[9*ci]; + double *a1 = &lattice[0]; + double *a2 = &lattice[3]; + double *a3 = &lattice[6]; + if (pbc[0] == 1) m = (int) ceil(rcut/a1[0]); + if (pbc[1] == 1) n = (int) ceil(rcut/a2[1]); + if (pbc[2] == 1) p = (int) ceil(rcut/a3[2]); + + // number of lattices + + nl = (2*m+1)*(2*n+1)*(2*p+1); + ny = MAX(ny,dim*natom*nl); + na = MAX(na, natom*nl); + np = MAX(np, natom*natom*nl); + } + + memory->create(nb.y, ny, "fitpod:nb_y"); + memory->create(nb.alist, na, "fitpod:nb_alist"); + memory->create(nb.pairnum, natom_max, "fitpod:nb_pairnum"); + memory->create(nb.pairnum_cumsum, natom_max+1, "fitpod:nb_pairnum_cumsum"); + memory->create(nb.pairlist, np, "fitpod:nb_pairlist"); + + nb.natom_max = natom_max; + nb.sze = nelements*nelements; + nb.sza = na; + nb.szy = ny; + nb.szp = np; + + if (comm->me == 0) + utils::logmesg(lmp,"**************** Begin of Memory Allocation ****************\n"); + + int szd = 0, szi=0, szsnap=0; + for (int ci=0; ci<(int) data.num_atom.size(); ci++) + { + int natom = data.num_atom[ci]; + int natom_cumsum = data.num_atom_cumsum[ci]; + double *x = &data.position[dim*natom_cumsum]; + double *lattice = &data.lattice[9*ci]; + double *a1 = &lattice[0]; + double *a2 = &lattice[3]; + double *a3 = &lattice[6]; + + Nij = podfullneighborlist(nb.y, nb.alist, nb.pairlist, nb.pairnum, nb.pairnum_cumsum, x, a1, a2, a3, rcut, pbc, natom); + + int ns2 = pdegree2[0]*nbesselpars + pdegree2[1]; + int ns3 = pdegree3[0]*nbesselpars + pdegree3[1]; + + int szd1 = 3*Nij+ (1+dim)*Nij*MAX(nrbf2+ns2,nrbf3+ns3) + (nabf3+1)*7; + int szi1 = 6*Nij + 2*natom+1 + (Nj-1)*Nj; + szd = MAX(szd, szd1); + szi = MAX(szi, szi1); + + if (podptr->sna.twojmax>0) { + szd1 = 0; + szd1 += Nij*dim; // rij + szd1 += MAX(2*podptr->sna.idxu_max*Nij, 2*podptr->sna.idxz_max*podptr->sna.ndoubles*natom); // (Ur, Ui) and (Zr, Zi) + szd1 += 2*podptr->sna.idxu_max*dim*Nij; // dUr, dUi + szd1 += MAX(podptr->sna.idxb_max*podptr->sna.ntriples*dim*Nij, 2*podptr->sna.idxu_max*podptr->sna.nelements*natom); // dblist and (Utotr, Utoti) + szsnap = MAX(szsnap, szd1); + } + } + + szd = MAX(szsnap, szd); + szd = MAX(natom_max*(nd1+nd2+nd3+nd4) + szd, dim*natom_max*(nd-nd1-nd2-nd3-nd4)); + szd = dim*natom_max*(nd1+nd2+nd3+nd4) + szd; + + // gdd includes linear descriptors derivatives, quadratic descriptors derivatives and temporary memory + + memory->create(desc.gdd, szd, "fitpod:desc_gdd"); + memory->create(desc.tmpint, szi, "fitpod:desc_tmpint"); + desc.szd = szd; + desc.szi = szi; + + if (comm->me == 0) { + utils::logmesg(lmp, "maximum number of atoms in periodic domain: {}\n", natom_max); + utils::logmesg(lmp, "maximum number of atoms in extended domain: {}\n", nb.sza); + utils::logmesg(lmp, "maximum number of neighbors in extended domain: {}\n", nb.szp); + utils::logmesg(lmp, "size of double memory: {}\n", szd); + utils::logmesg(lmp, "size of int memory: {}\n", szi); + utils::logmesg(lmp, "size of descriptor matrix: {} x {}\n", nd, nd); + utils::logmesg(lmp, "**************** End of Memory Allocation ****************\n"); + } +} + +void FitPOD::linear_descriptors(const datastruct &data, int ci) +{ + int dim = 3; + int nd1 = podptr->pod.nd1; + int nd2 = podptr->pod.nd2; + int nd3 = podptr->pod.nd3; + int nd4 = podptr->pod.nd4; + int nd1234 = nd1+nd2+nd3+nd4; + int *pbc = podptr->pod.pbc; + double rcut = podptr->pod.rcut; + + int natom = data.num_atom[ci]; + int natom_cumsum = data.num_atom_cumsum[ci]; + int *atomtype = &data.atomtype[natom_cumsum]; + double *position = &data.position[dim*natom_cumsum]; + double *lattice = &data.lattice[9*ci]; + double *a1 = &lattice[0]; + double *a2 = &lattice[3]; + double *a3 = &lattice[6]; + + // neighbor list + int Nij = podfullneighborlist(nb.y, nb.alist, nb.pairlist, nb.pairnum, nb.pairnum_cumsum, + position, a1, a2, a3, rcut, pbc, natom); + + int *tmpint = &desc.tmpint[0]; + double *tmpmem = &desc.gdd[dim*natom*nd1234+natom*nd1234]; + podptr->linear_descriptors(desc.gd, desc.gdd, nb.y, tmpmem, atomtype, nb.alist, + nb.pairlist, nb.pairnum, nb.pairnum_cumsum, tmpint, natom, Nij); + +} + +void FitPOD::quadratic_descriptors(const datastruct &data, int ci) +{ + int dim = 3; + int natom = data.num_atom[ci]; + int nd1 = podptr->pod.nd1; + int nd2 = podptr->pod.nd2; + int nd3 = podptr->pod.nd3; + int nd4 = podptr->pod.nd4; + int nd22 = podptr->pod.nd22; + int nd23 = podptr->pod.nd23; + int nd24 = podptr->pod.nd24; + int nd33 = podptr->pod.nd33; + int nd34 = podptr->pod.nd34; + int nd44 = podptr->pod.nd44; + int nd123 = nd1+nd2+nd3; + int nd1234 = nd1+nd2+nd3+nd4; + + double *fatom2 = &desc.gdd[dim*natom*(nd1)]; + double *fatom3 = &desc.gdd[dim*natom*(nd1+nd2)]; + double *fatom4 = &desc.gdd[dim*natom*(nd123)]; + + // global descriptors for four-body quadratic22 potential + + if (nd22 > 0) { + int nq2 = podptr->pod.quadratic22[0]*podptr->pod.nc2; + podptr->quadratic_descriptors(&desc.gd[nd1234], &desc.gdd[dim*natom*nd1234], + &desc.gd[nd1], fatom2, nq2, dim*natom); + } + + // global descriptors for four-body quadratic23 potential + + if (nd23 > 0) { + int nq2 = podptr->pod.quadratic23[0]*podptr->pod.nc2; + int nq3 = podptr->pod.quadratic23[1]*podptr->pod.nc3; + podptr->quadratic_descriptors(&desc.gd[nd1234+nd22], &desc.gdd[dim*natom*(nd1234+nd22)], + &desc.gd[nd1], &desc.gd[nd1+nd2], fatom2, fatom3, nq2, nq3, dim*natom); + } + + // global descriptors for five-body quadratic24 potential + + if (nd24 > 0) { + int nq2 = podptr->pod.quadratic24[0]*podptr->pod.nc2; + int nq4 = podptr->pod.quadratic24[1]*podptr->pod.nc4; + podptr->quadratic_descriptors(&desc.gd[nd1234+nd22+nd23], &desc.gdd[dim*natom*(nd1234+nd22+nd23)], + &desc.gd[nd1], &desc.gd[nd1+nd2+nd3], fatom2, fatom4, nq2, nq4, dim*natom); + } + + // global descriptors for five-body quadratic33 potential + + if (nd33 > 0) { + int nq3 = podptr->pod.quadratic33[0]*podptr->pod.nc3; + podptr->quadratic_descriptors(&desc.gd[nd1234+nd22+nd23+nd24], &desc.gdd[dim*natom*(nd1234+nd22+nd23+nd24)], + &desc.gd[nd1+nd2], fatom3, nq3, dim*natom); + } + + // global descriptors for six-body quadratic34 potential + + if (nd34 > 0) { + int nq3 = podptr->pod.quadratic34[0]*podptr->pod.nc3; + int nq4 = podptr->pod.quadratic34[1]*podptr->pod.nc4; + podptr->quadratic_descriptors(&desc.gd[nd1234+nd22+nd23+nd24+nd33], &desc.gdd[dim*natom*(nd1234+nd22+nd23+nd24+nd33)], + &desc.gd[nd1+nd2], &desc.gd[nd1+nd2+nd3], fatom3, fatom4, nq3, nq4, dim*natom); + } + + // global descriptors for seven-body quadratic44 potential + + if (nd44 > 0) { + int nq4 = podptr->pod.quadratic44[0]*podptr->pod.nc4; + podptr->quadratic_descriptors(&desc.gd[nd1234+nd22+nd23+nd24+nd33+nd34], &desc.gdd[dim*natom*(nd1234+nd22+nd23+nd24+nd33+nd34)], + &desc.gd[nd1+nd2+nd3], fatom4, nq4, dim*natom); + } + + // normalize quadratic descriptors + + for (int i=0; i<(nd22+nd23+nd24+nd33+nd34+nd44); i++) + desc.gd[nd1234+i] = desc.gd[nd1234+i]/(natom); + + for (int i=0; ipod.nd1; + int nd2 = podptr->pod.nd2; + int nd3 = podptr->pod.nd3; + int nd4 = podptr->pod.nd4; + int nd22 = podptr->pod.nd22; + int nd23 = podptr->pod.nd23; + int nd24 = podptr->pod.nd24; + int nd33 = podptr->pod.nd33; + int nd34 = podptr->pod.nd34; + int nd44 = podptr->pod.nd44; + int nd234 = podptr->pod.nd234; + int nd333 = podptr->pod.nd333; + int nd444 = podptr->pod.nd444; + int nd123 = nd1+nd2+nd3; + int nd1234 = nd1+nd2+nd3+nd4; + + // global descriptors for seven-body cubic234 potential + if (nd234 > 0) { + int nq2 = podptr->pod.cubic234[0]*podptr->pod.nc2; + int nq3 = podptr->pod.cubic234[1]*podptr->pod.nc3; + int nq4 = podptr->pod.cubic234[2]*podptr->pod.nc4; + int np3 = nd1234+nd22+nd23+nd24+nd33+nd34+nd44; + double *eatom2 = &desc.gd[nd1]; + double *eatom3 = &desc.gd[nd1+nd2]; + double *eatom4 = &desc.gd[nd123]; + double *fatom2 = &desc.gdd[dim*natom*(nd1)]; + double *fatom3 = &desc.gdd[dim*natom*(nd1+nd2)]; + double *fatom4 = &desc.gdd[dim*natom*(nd123)]; + podptr->cubic_descriptors(&desc.gd[np3], &desc.gdd[dim*natom*np3], + eatom2, eatom3, eatom4, fatom2, fatom3, fatom4, nq2, nq3, nq4, dim*natom); + } + + // global descriptors for seven-body cubic333 potential + + if (nd333 > 0) { + int nq3 = podptr->pod.cubic333[0]*podptr->pod.nc3; + int np3 = nd1234+nd22+nd23+nd24+nd33+nd34+nd44+nd234; + double *eatom3 = &desc.gd[nd1+nd2]; + double *fatom3 = &desc.gdd[dim*natom*(nd1+nd2)]; + podptr->cubic_descriptors(&desc.gd[np3], &desc.gdd[dim*natom*np3], + eatom3, fatom3, nq3, dim*natom); + } + + // global descriptors for ten-body cubic444 potential + + if (nd444 > 0) { + int nq4 = podptr->pod.cubic444[0]*podptr->pod.nc4; + int np4 = nd1234+nd22+nd23+nd24+nd33+nd34+nd44+nd234+nd333; + double *eatom4 = &desc.gd[nd123]; + double *fatom4 = &desc.gdd[dim*natom*(nd123)]; + podptr->cubic_descriptors(&desc.gd[np4], &desc.gdd[dim*natom*(np4)], + eatom4, fatom4, nq4, dim*natom); + } + + // normalize cubic descriptors + int nd = podptr->pod.nd; + for (int i=(nd1234+nd22+nd23+nd24+nd33+nd34+nd44); ipod.nd; + int nforce = dim*natom; + + // compute energy weight and force weight + + double normconst = 1.0; + if (data.normalizeenergy==1) normconst = 1.0/natom; + double we = data.fitting_weights[0]; + double wf = data.fitting_weights[1]; + double we2 = (we*we)*(normconst*normconst); + double wf2 = (wf*wf); + + // get energy and force from the training data set + + double energy = data.energy[ci]; + double *force = &data.force[dim*natom_cumsum]; + + // least-square matrix for all descriptors: A = A + (we*we)*(gd^T * gd) + + podKron(desc.A, desc.gd, desc.gd, we2, nd, nd); + + // least-square matrix for all descriptors derivatives: A = A + (wf*wf) * (gdd^T * gdd) + + char cht = 'T'; + char chn = 'N'; + double one = 1.0; + int inc1 = 1; + DGEMM(&cht, &chn, &nd, &nd, &nforce, &wf2, desc.gdd, &nforce, desc.gdd, &nforce, &one, desc.A, &nd); + + // least-square vector for all descriptors: b = b + (we*we*energy)*gd + + double wee = we2*energy; + for (int i = 0; i< nd; i++) + desc.b[i] += wee*desc.gd[i]; + + // least-square vector for all descriptors derivatives: b = b + (wf*wf) * (gdd^T * f) + + DGEMV(&cht, &nforce, &nd, &wf2, desc.gdd, &nforce, force, &inc1, &one, desc.b, &inc1); + +} + +void FitPOD::least_squares_fit(const datastruct &data) +{ + if (comm->me == 0) + utils::logmesg(lmp, "**************** Begin of Least-Squares Fitting ****************\n"); + + // loop over each configuration in the training data set + + for (int ci=0; ci < (int) data.num_atom.size(); ci++) { + + if ((ci % 100)==0) { + if (comm->me == 0) + utils::logmesg(lmp, "Configuration: # {}\n", ci+1); + } + + if ((ci % comm->nprocs) == comm->me) { + + // compute linear POD descriptors + + linear_descriptors(data, ci); + + // compute quadratic POD descriptors + + quadratic_descriptors(data, ci); + + // compute cubic POD descriptors + + cubic_descriptors(data, ci); + + // assemble the least-squares linear system + + least_squares_matrix(data, ci); + } + } + + int nd = podptr->pod.nd; + + MPI_Allreduce(MPI_IN_PLACE, desc.b, nd, MPI_DOUBLE, MPI_SUM, world); + MPI_Allreduce(MPI_IN_PLACE, desc.A, nd*nd, MPI_DOUBLE, MPI_SUM, world); + + if (comm->me == 0) { + + // symmetrize A + + for (int i = 0; i fabs(desc.b[i])) ? maxb : fabs(desc.b[i]); + + maxb = 1.0/maxb; + for (int i = 0; ime == 0) { // save coefficients into a text file + std::string filename = data.filenametag + "_coefficients" + ".pod"; + FILE *fp = fopen(filename.c_str(), "w"); + + fmt::print(fp, "POD_coefficients: {}\n", nd); + for (int count = 0; count < nd; count++) { + fmt::print(fp, "{:<10.{}f}\n", desc.c[count], data.precision); + } + fclose(fp); + utils::logmesg(lmp, "**************** End of Least-Squares Fitting ****************\n"); + } +} + +double FitPOD::energyforce_calculation(double *force, double *coeff, const datastruct &data, int ci) +{ + int dim = 3; + int *pbc = podptr->pod.pbc; + double rcut = podptr->pod.rcut; + int nd1234 = podptr->pod.nd1 + podptr->pod.nd2 + podptr->pod.nd3 + podptr->pod.nd4; + + int natom = data.num_atom[ci]; + int natom_cumsum2 = data.num_atom_cumsum[ci]; + int *atomtype = &data.atomtype[natom_cumsum2]; + double *position = &data.position[dim*natom_cumsum2]; + double *lattice = &data.lattice[9*ci]; + double *a1 = &lattice[0]; + double *a2 = &lattice[3]; + double *a3 = &lattice[6]; + + // neighbor list + + int Nij = podfullneighborlist(nb.y, nb.alist, nb.pairlist, nb.pairnum, nb.pairnum_cumsum, + position, a1, a2, a3, rcut, pbc, natom); + + double *tmpmem = &desc.gdd[0]; + int *tmpint = &desc.tmpint[0]; + double *rij = &tmpmem[0]; // 3*Nij + int *ai = &tmpint[0]; // Nij + int *aj = &tmpint[Nij]; // Nij + int *ti = &tmpint[2*Nij]; // Nij + int *tj = &tmpint[3*Nij]; // Nij + int *idxi = &tmpint[4*Nij]; // Nij + podptr->podNeighPairs(rij, nb.y, idxi, ai, aj, ti, tj, nb.pairnum_cumsum, atomtype, nb.pairlist, nb.alist, natom); + + double *effectivecoeff = &tmpmem[3*Nij]; // 3*Nij + podArraySetValue(effectivecoeff, 0.0, nd1234); + + double energy = podptr->energyforce_calculation(force, coeff, effectivecoeff, desc.gd, rij, + &tmpmem[3*Nij+nd1234], nb.pairnum_cumsum, atomtype, idxi, ai, aj, ti, tj, natom, Nij); + + return energy; +} + +void FitPOD::print_analysis(const datastruct &data, double *outarray, double *errors) +{ + int nfiles = data.data_files.size(); // number of files + int lm = 10; + for (int i = 0; i < nfiles; i++) + lm = MAX(lm, (int) data.filenames[i].size()); + lm = lm + 2; + + std::string filename_errors = fmt::format("{}_{}_errors.pod", data.filenametag, data.training ? "training" : "test"); + std::string filename_analysis = fmt::format("{}_{}_analysis.pod", data.filenametag, data.training ? "training" : "test"); + + FILE *fp_errors = nullptr; + FILE *fp_analysis = nullptr; + fp_errors = fopen(filename_errors.c_str(), "w"); + fp_analysis = fopen(filename_analysis.c_str(), "w"); + + std::string mystr = fmt::format("**************** Begin of Error Analysis for the {} Data Set ****************\n", + data.training ? "Training" : "Test"); + + utils::logmesg(lmp, mystr); + fmt::print(fp_errors, mystr); + + std::string sa(lm+80,'-'); + sa += '\n'; + std::string sb = fmt::format(" {:^{}} | # configs | # atoms | MAE energy | RMSE energy | MAE force | RMSE force\n", + "File", lm); + utils::logmesg(lmp, sa + sb + sa); + fmt::print(fp_errors, sa + sb + sa); + + int ci=0, m=8, nc=0, nf=0; + for (int file = 0; file < nfiles; file++) { + fmt::print(fp_analysis, "# {}\n", data.filenames[file]); + fmt::print(fp_analysis, " config # atoms energy DFT energy energy error " + " force DFT force force error\n"); + + int nforceall = 0; + int nconfigs = data.num_config[file]; + nc += nconfigs; + for (int ii=0; ii < nconfigs; ii++) { // loop over each configuration in a file + fmt::print(fp_analysis, "{:6} {:8} ", outarray[m*ci], outarray[1 + m*ci]); + for(int count = 2; count < m; count ++) + fmt::print(fp_analysis, "{:<15.10} ", outarray[count + m*ci]); + fmt::print(fp_analysis, "\n"); + + nforceall += 3*data.num_atom[ci]; + ci += 1; + } + nf += nforceall; + + int q = file+1; + auto s = fmt::format("{:<{}} {:>10} {:>11} {:<10.6f} {:<10.6f} {:<10.6f} {:<10.6f}\n", + data.filenames[file], lm, nconfigs, nforceall/3, + errors[0 + 4*q], errors[1 + 4*q], errors[2 + 4*q], errors[3 + 4*q]); + utils::logmesg(lmp, s); + fmt::print(fp_errors, s); + } + utils::logmesg(lmp, sa); + fmt::print(fp_errors, sa); + + auto s = fmt::format("{:<{}} {:>10} {:>11} {:<10.6f} {:<10.6f} {:<10.6f} {:<10.6f}\n", + "All files", lm, nc, nf/3, errors[0], errors[1], errors[2], errors[3]); + utils::logmesg(lmp, s + sa); + fmt::print(fp_errors, "{}", s + sa); + + mystr = fmt::format("**************** End of Error Analysis for the {} Data Set ****************\n", + data.training ? "Training" : "Test"); + + utils::logmesg(lmp, mystr); + fmt::print(fp_errors, mystr); + + fclose(fp_errors); + fclose(fp_analysis); +} + +void FitPOD::error_analysis(const datastruct &data, double *coeff) +{ + int dim = 3; + double energy; + std::vector force(dim*data.num_atom_max); + + int nfiles = data.data_files.size(); // number of files + int num_configs = data.num_atom.size(); // number of configurations in all files + + int m = 8; + std::vector outarray(m*num_configs); + for (int i=0; i ssrarray(num_configs); + for (int i=0; i errors(4*(nfiles+1)); + for (int i=0; i<4*(nfiles+1); i++) + errors[i] = 0.0; + + int nd1 = podptr->pod.nd1; + int nd2 = podptr->pod.nd2; + int nd3 = podptr->pod.nd3; + int nd4 = podptr->pod.nd4; + int nd22 = podptr->pod.nd22; + int nd23 = podptr->pod.nd23; + int nd24 = podptr->pod.nd24; + int nd33 = podptr->pod.nd33; + int nd34 = podptr->pod.nd34; + int nd44 = podptr->pod.nd44; + int nd1234 = nd1+nd2+nd3+nd4; + int nd = podptr->pod.nd; + + std::vector newcoeff(nd); + for (int j=0; jme == 0) + utils::logmesg(lmp, "**************** Begin of Error Calculation ****************\n"); + + int ci = 0; // configuration counter + for (int file = 0; file < nfiles; file++) { // loop over each file in the training data set + + int nconfigs = data.num_config[file]; + for (int ii=0; ii < nconfigs; ii++) { // loop over each configuration in a file + + if ((ci % 100)==0) { + if (comm->me == 0) + utils::logmesg(lmp, "Configuration: # {}\n", ci+1); + } + + if ((ci % comm->nprocs) == comm->me) { + int natom = data.num_atom[ci]; + int nforce = dim*natom; + + for (int j=nd1234; j<(nd1234+nd22+nd23+nd24+nd33+nd34+nd44); j++) + newcoeff[j] = coeff[j]/(natom); + + for (int j=(nd1234+nd22+nd23+nd24+nd33+nd34+nd44); jme == 0) { + utils::logmesg(lmp, "**************** End of Error Calculation ****************\n"); + print_analysis(data, outarray.data(), errors.data()); + } +} + +void FitPOD::energyforce_calculation(const datastruct &data, double *coeff) +{ + int dim = 3; + double energy; + std::vector force(1+dim*data.num_atom_max); + + int nfiles = data.data_files.size(); // number of files + + if (comm->me == 0) + utils::logmesg(lmp, "**************** Begin of Energy/Force Calculation ****************\n"); + + int ci = 0; // configuration counter + for (int file = 0; file < nfiles; file++) { // loop over each file in the data set + + int nconfigs = data.num_config[file]; + for (int ii=0; ii < nconfigs; ii++) { // loop over each configuration in a file + if ((ci % 100)==0) { + if (comm->me == 0) utils::logmesg(lmp, "Configuration: # {}\n", ci+1); + } + + int natom = data.num_atom[ci]; + int nforce = dim*natom; + + if ((ci % comm->nprocs) == comm->me) { + energy = energyforce_calculation(force.data()+1, coeff, data, ci); + + // save energy and force into a binary file + + force[0] = energy; + std::string filename = "energyforce_config" + std::to_string(ci+1) + ".bin"; + + FILE *fp = fopen(filename.c_str(), "wb"); + + fwrite( reinterpret_cast( force.data() ), sizeof(double) * (1 + nforce), 1, fp); + + fclose(fp); + } + ci += 1; + } + } + if (comm->me == 0) + utils::logmesg(lmp, "**************** End of Energy/Force Calculation ****************\n"); +} + +void FitPOD::print_matrix(const char *desc, int m, int n, double **a, int /*lda*/ ) +{ + int i, j; + printf( "\n %s\n", desc ); + + for( i = 0; i < m; i++ ) + { + for( j = 0; j < n; j++ ) printf( " %6.12f", a[j][i] ); + printf( "\n" ); + } +} + +void FitPOD::print_matrix(const char *desc, int m, int n, double *a, int lda ) +{ + int i, j; + printf( "\n %s\n", desc ); + + for( i = 0; i < m; i++ ) + { + for( j = 0; j < n; j++ ) printf( " %6.12f", a[i+j*lda] ); + printf( "\n" ); + } +} + +void FitPOD::print_matrix(const char *desc, int m, int n, int *a, int lda) +{ + int i, j; + printf( "\n %s\n", desc ); + + for( i = 0; i < m; i++ ) + { + for( j = 0; j < n; j++ ) printf( " %d", a[i+j*lda] ); + printf( "\n" ); + } +} + +void FitPOD::podArrayFill(int* output, int start, int length) +{ + for (int j = 0; j < length; ++j) + output[j] = start + j; +} + +double FitPOD::podArraySum(double *a, int n) +{ + double e = a[0]; + for (int i=1; ib) + b = a[i]; + return b; +} + +int FitPOD::podArrayMin(int *a, int n) +{ + int b = a[0]; + for (int i=1; ib) + b = a[i]; + return b; +} + +void FitPOD::podKron(double *C, double *A, double *B, double alpha, int M1, int M2) +{ + int M = M1*M2; + for (int idx=0; idx data_files; + std::vector filenames; + std::string filenametag = "pod"; + + std::vector num_atom; + std::vector num_atom_cumsum; + std::vector num_atom_each_file; + std::vector num_config; + std::vector num_config_cumsum; + int num_atom_sum; + int num_atom_min; + int num_atom_max; + int num_config_sum; + + double *lattice; + double *energy; + double *stress; + double *position; + double *force; + int *atomtype; + + int training = 1; + int normalizeenergy = 1; + int training_analysis = 1; + int test_analysis = 1; + int training_calculation = 0; + int test_calculation = 0; + int randomize = 1; + int precision = 8; + double fraction = 1.0; + + double fitting_weights[12] = {100.0, 1.0, 0.0, 1, 1, 0, 0, 1, 1, 1, 1, 1e-10}; + + void copydatainfo(datastruct &data) const + { + data.data_path = data_path; + data.file_format = file_format; + data.file_extension = file_extension; + data.data_files = data_files; + data.filenametag = filenametag; + data.filenames = filenames; + data.training_analysis = training_analysis; + data.test_analysis = test_analysis; + data.training_calculation = training_calculation; + data.test_calculation = test_calculation; + data.fraction = fraction; + data.randomize = randomize; + data.precision = precision; + data.training = training; + data.normalizeenergy = normalizeenergy; + for (int i = 0; i < 12; i++) data.fitting_weights[i] = fitting_weights[i]; + } + }; + + struct neighborstruct { + int *alist; + int *pairnum; + int *pairnum_cumsum; + int *pairlist; + double *y; + + int natom; + int nalist; + int natom_max; + int sze; + int sza; + int szy; + int szp; + }; + + struct descriptorstruct { + double *gd; // global descriptors + double *gdd; // derivatives of global descriptors and peratom descriptors + double *A; // least-square matrix for all descriptors + double *b; // least-square vector for all descriptors + double *c; // coefficents of descriptors + int *tmpint; + int szd; + int szi; + }; + + datastruct traindata; + datastruct testdata; + descriptorstruct desc; + neighborstruct nb; + class MLPOD *podptr; + + // functions for collecting/collating arrays + + void print_matrix(const char *desc, int m, int n, int *a, int lda); + void print_matrix(const char *desc, int m, int n, double *a, int lda); + void print_matrix(const char *desc, int m, int n, double **a, int lda); + void podCumsum(int *output, int *input, int length); + double podArrayNorm(double *a, int n); + double podArrayErrorNorm(double *a, double *b, int n); + void podArraySetValue(double *y, double a, int n); + void podArrayCopy(double *y, double *x, int n); + void podArrayFill(int *output, int start, int length); + double podArrayMin(double *a, int n); + double podArrayMax(double *a, int n); + double podArraySum(double *a, int n); + int podArrayMin(int *a, int n); + int podArrayMax(int *a, int n); + void podKron(double *C, double *A, double *B, double alpha, int M1, int M2); + void rotation_matrix(double *Rmat, double alpha, double beta, double gamma); + void triclinic_lattice_conversion(double *a, double *b, double *c, double *A, double *B, + double *C); + void matrix33_multiplication(double *xrot, double *Rmat, double *x, int natom); + void matrix33_inverse(double *invA, double *A1, double *A2, double *A3); + + // functions for reading input files and fitting + + int read_data_file(double *fitting_weights, std::string &file_format, std::string &file_extension, + std::string &test_path, std::string &training_path, std::string &filenametag, + const std::string &data_file); + void get_exyz_files(std::vector &, const std::string &, const std::string &); + int get_number_atom_exyz(std::vector &num_atom, int &num_atom_sum, std::string file); + int get_number_atoms(std::vector &num_atom, std::vector &num_atom_sum, + std::vector &num_config, std::vector training_files); + void read_exyz_file(double *lattice, double *stress, double *energy, double *pos, double *forces, + int *atomtype, std::string file, std::vector species); + void get_data(datastruct &data, const std::vector& species); + std::vector linspace(int start_in, int end_in, int num_in); + std::vector shuffle(int start_in, int end_in, int num_in); + std::vector select(int n, double fraction, int randomize); + void select_data(datastruct &newdata, const datastruct &data); + void read_data_files(const std::string& data_file, const std::vector& species); + int latticecoords(double *y, int *alist, double *x, double *a1, double *a2, double *a3, + double rcut, int *pbc, int nx); + int podneighborlist(int *neighlist, int *numneigh, double *r, double rcutsq, int nx, int N, + int dim); + int podfullneighborlist(double *y, int *alist, int *neighlist, int *numneigh, int *numneighsum, + double *x, double *a1, double *a2, double *a3, double rcut, int *pbc, + int nx); + void allocate_memory(const datastruct &data); + void linear_descriptors(const datastruct &data, int ci); + void quadratic_descriptors(const datastruct &data, int ci); + void cubic_descriptors(const datastruct &data, int ci); + void least_squares_matrix(const datastruct &data, int ci); + void least_squares_fit(const datastruct &data); + void print_analysis(const datastruct &data, double *outarray, double *errors); + void error_analysis(const datastruct &data, double *coeff); + double energyforce_calculation(double *force, double *coeff, const datastruct &data, int ci); + void energyforce_calculation(const datastruct &data, double *coeff); +}; + +} // namespace LAMMPS_NS + +#endif +#endif diff --git a/src/ML-POD/mlpod.cpp b/src/ML-POD/mlpod.cpp new file mode 100644 index 0000000000..ef729e3ce6 --- /dev/null +++ b/src/ML-POD/mlpod.cpp @@ -0,0 +1,3698 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/ Sandia National Laboratories + LAMMPS development team: developers@lammps.org + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Contributing authors: Ngoc Cuong Nguyen (MIT) and Andrew Rohskopf (SNL) +------------------------------------------------------------------------- */ + +// POD header file + +#include "mlpod.h" + +// LAMMPS header files + +#include "comm.h" +#include "error.h" +#include "math_const.h" +#include "math_special.h" +#include "memory.h" +#include "tokenizer.h" + +#include + +using namespace LAMMPS_NS; +using MathConst::MY_PI; +using MathSpecial::cube; +using MathSpecial::powint; + +#define MAXLINE 1024 + +MLPOD::podstruct::podstruct() : + twobody{5, 10, 10}, threebody{4, 8, 8, 5}, fourbody{0, 0, 0, 0}, pbc(nullptr), + elemindex(nullptr), quadratic22{0, 0}, quadratic23{0, 0}, quadratic24{0, 0}, quadratic33{0, 0}, + quadratic34{0, 0}, quadratic44{0, 0}, cubic234{0, 0, 0}, cubic333{0, 0, 0}, cubic444{0, 0, 0}, + besselparams(nullptr), coeff(nullptr), Phi2(nullptr), Phi3(nullptr), Phi4(nullptr), + Lambda2(nullptr), Lambda3(nullptr), Lambda4(nullptr) +{ +} + +MLPOD::podstruct::~podstruct() +{ + delete[] pbc; + delete[] elemindex; + delete[] besselparams; +} + +MLPOD::MLPOD(LAMMPS *_lmp, const std::string &pod_file, const std::string &coeff_file) : + Pointers(_lmp) +{ + // read pod input file to podstruct + + read_pod(pod_file); + + // read pod coefficient file to podstruct + + if (coeff_file != "") read_coeff_file(coeff_file); + + if (pod.snaptwojmax > 0) InitSnap(); +} + +MLPOD::~MLPOD() +{ + // deallocate pod arrays + + memory->destroy(pod.coeff); + if (pod.ns2 > 0) { + memory->destroy(pod.Phi2); + memory->destroy(pod.Lambda2); + } + if (pod.ns3 > 0) { + memory->destroy(pod.Phi3); + memory->destroy(pod.Lambda3); + } + if (pod.ns4 > 0) { + memory->destroy(pod.Phi4); + memory->destroy(pod.Lambda4); + } + + // deallocate snap arrays if used + + if (pod.snaptwojmax > 0) { + memory->destroy(sna.map); + memory->destroy(sna.idx_max); + memory->destroy(sna.idxz); + memory->destroy(sna.idxb); + memory->destroy(sna.idxb_block); + memory->destroy(sna.idxu_block); + memory->destroy(sna.idxz_block); + memory->destroy(sna.idxcg_block); + memory->destroy(sna.rootpqarray); + memory->destroy(sna.cglist); + memory->destroy(sna.fac); + memory->destroy(sna.bzero); + memory->destroy(sna.wjelem); + memory->destroy(sna.radelem); + memory->destroy(sna.rcutsq); + } +} + +// clang-format off + +void MLPOD::podMatMul(double *c, double *a, double *b, int r1, int c1, int c2) +{ + int i, j, k; + + for(j = 0; j < c2; j++) + for(i = 0; i < r1; i++) + c[i + r1*j] = 0.0; + + for(j = 0; j < c2; j++) + for(i = 0; i < r1; i++) + for(k = 0; k < c1; k++) + c[i + r1*j] += a[i + r1*k] * b[k + c1*j]; +} + +void MLPOD::podArrayFill(int* output, int start, int length) +{ + for (int j = 0; j < length; ++j) + output[j] = start + j; +} + +void MLPOD::podArraySetValue(double *y, double a, int n) +{ + for (int i=0; icreate(xij, N, "pod:xij"); + memory->create(S, N*ns, "pod:S"); + memory->create(Q, N*ns, "pod:Q"); + memory->create(A, ns*ns, "pod:A"); + memory->create(b, ns, "pod:ns"); + + for (int i=0; i= max(1,3*N-1) + int info = 1; // = 0: successful exit + std::vector work(lwork); + DSYEV(&chv, &chu, &ns, A, &ns, b, work.data(), &lwork, &info); + + // order eigenvalues and eigenvectors from largest to smallest + + for (int j=0; jdestroy(xij); + memory->destroy(S); + memory->destroy(A); + memory->destroy(b); + memory->destroy(Q); +} + +void MLPOD::read_pod(const std::string &pod_file) +{ + pod.nbesselpars = 3; + delete[] pod.besselparams; + pod.besselparams = new double[3]; + delete[] pod.pbc; + pod.pbc = new int[3]; + + pod.besselparams[0] = 0.0; + pod.besselparams[1] = 2.0; + pod.besselparams[2] = 4.0; + + pod.nelements = 0; + pod.onebody = 1; + pod.besseldegree = 3; + pod.inversedegree = 6; + pod.quadraticpod = 0; + pod.rin = 0.5; + pod.rcut = 4.6; + + pod.snaptwojmax = 0; + pod.snapchemflag = 0; + pod.snaprfac0 = 0.99363; + + sna.twojmax = 0; + sna.ntypes = 0; + + std::string podfilename = pod_file; + FILE *fppod; + if (comm->me == 0) { + + fppod = utils::open_potential(podfilename,lmp,nullptr); + if (fppod == nullptr) + error->one(FLERR,"Cannot open POD coefficient file {}: ", + podfilename, utils::getsyserror()); + } + + // loop through lines of POD file and parse keywords + + char line[MAXLINE],*ptr; + int eof = 0; + while (true) { + if (comm->me == 0) { + ptr = fgets(line,MAXLINE,fppod); + if (ptr == nullptr) { + eof = 1; + fclose(fppod); + } + } + MPI_Bcast(&eof,1,MPI_INT,0,world); + if (eof) break; + MPI_Bcast(line,MAXLINE,MPI_CHAR,0,world); + + // words = ptrs to all words in line + // strip single and double quotes from words + + std::vector words; + try { + words = Tokenizer(utils::trim_comment(line),"\"' \t\n\r\f").as_vector(); + } catch (TokenizerException &) { + // ignore + } + + if (words.size() == 0) continue; + + auto keywd = words[0]; + + if (keywd == "species") { + pod.nelements = words.size()-1; + for (int ielem = 1; ielem <= pod.nelements; ielem++) { + pod.species.push_back(words[ielem]); + } + } + + if (keywd == "pbc") { + if (words.size() != 4) + error->one(FLERR,"Improper POD file.", utils::getsyserror()); + pod.pbc[0] = utils::inumeric(FLERR,words[1],false,lmp); + pod.pbc[1] = utils::inumeric(FLERR,words[2],false,lmp); + pod.pbc[2] = utils::inumeric(FLERR,words[3],false,lmp); + } + + if ((keywd != "#") && (keywd != "species") && (keywd != "pbc")) { + + if (words.size() != 2) + error->one(FLERR,"Improper POD file.", utils::getsyserror()); + + if (keywd == "rin") pod.rin = utils::numeric(FLERR,words[1],false,lmp); + if (keywd == "rcut") pod.rcut = utils::numeric(FLERR,words[1],false,lmp); + if (keywd == "bessel_scaling_parameter1") + pod.besselparams[0] = utils::numeric(FLERR,words[1],false,lmp); + if (keywd == "bessel_scaling_parameter2") + pod.besselparams[1] = utils::numeric(FLERR,words[1],false,lmp); + if (keywd == "bessel_scaling_parameter3") + pod.besselparams[2] = utils::numeric(FLERR,words[1],false,lmp); + if (keywd == "bessel_polynomial_degree") + pod.besseldegree = utils::inumeric(FLERR,words[1],false,lmp); + if (keywd == "inverse_polynomial_degree") + pod.inversedegree = utils::inumeric(FLERR,words[1],false,lmp); + if (keywd == "onebody") pod.onebody = utils::inumeric(FLERR,words[1],false,lmp); + if (keywd == "twobody_bessel_polynomial_degree") + pod.twobody[0] = utils::inumeric(FLERR,words[1],false,lmp); + if (keywd == "twobody_inverse_polynomial_degree") + pod.twobody[1] = utils::inumeric(FLERR,words[1],false,lmp); + if (keywd == "twobody_number_radial_basis_functions") + pod.twobody[2] = utils::inumeric(FLERR,words[1],false,lmp); + if (keywd == "threebody_bessel_polynomial_degree") + pod.threebody[0] = utils::inumeric(FLERR,words[1],false,lmp); + if (keywd == "threebody_inverse_polynomial_degree") + pod.threebody[1] = utils::inumeric(FLERR,words[1],false,lmp); + if (keywd == "threebody_number_radial_basis_functions") + pod.threebody[2] = utils::inumeric(FLERR,words[1],false,lmp); + if (keywd == "threebody_number_angular_basis_functions") + pod.threebody[3] = utils::inumeric(FLERR,words[1],false,lmp)-1; + if (keywd == "fourbody_bessel_polynomial_degree") + pod.fourbody[0] = utils::inumeric(FLERR,words[1],false,lmp); + if (keywd == "fourbody_inverse_polynomial_degree") + pod.fourbody[1] = utils::inumeric(FLERR,words[1],false,lmp); + if (keywd == "fourbody_number_radial_basis_functions") + pod.fourbody[2] = utils::inumeric(FLERR,words[1],false,lmp); + if (keywd == "fourbody_snap_twojmax") + pod.snaptwojmax = utils::inumeric(FLERR,words[1],false,lmp); + if (keywd == "fourbody_snap_chemflag") + pod.snapchemflag = utils::inumeric(FLERR,words[1],false,lmp); + if (keywd == "fourbody_snap_rfac0") + pod.snaprfac0 = utils::numeric(FLERR,words[1],false,lmp); + if (keywd == "fourbody_snap_neighbor_weight1") + pod.snapelementweight[0] = utils::numeric(FLERR,words[1],false,lmp); + if (keywd == "fourbody_snap_neighbor_weight2") + pod.snapelementweight[1] = utils::numeric(FLERR,words[1],false,lmp); + if (keywd == "fourbody_snap_neighbor_weight3") + pod.snapelementweight[2] = utils::numeric(FLERR,words[1],false,lmp); + if (keywd == "fourbody_snap_neighbor_weight4") + pod.snapelementweight[3] = utils::numeric(FLERR,words[1],false,lmp); + if (keywd == "fourbody_snap_neighbor_weight5") + pod.snapelementweight[4] = utils::numeric(FLERR,words[1],false,lmp); + if (keywd == "quadratic_pod_potential") + pod.quadraticpod = utils::inumeric(FLERR,words[1],false,lmp); + if (keywd == "quadratic22_number_twobody_basis_functions") + pod.quadratic22[0] = utils::inumeric(FLERR,words[1],false,lmp); + if (keywd == "quadratic22_number_twobody_basis_functions") + pod.quadratic22[1] = utils::inumeric(FLERR,words[1],false,lmp); + if (keywd == "quadratic23_number_twobody_basis_functions") + pod.quadratic23[0] = utils::inumeric(FLERR,words[1],false,lmp); + if (keywd == "quadratic23_number_threebody_basis_functions") + pod.quadratic23[1] = utils::inumeric(FLERR,words[1],false,lmp); + if (keywd == "quadratic24_number_twobody_basis_functions") + pod.quadratic24[0] = utils::inumeric(FLERR,words[1],false,lmp); + if (keywd == "quadratic24_number_fourbody_basis_functions") + pod.quadratic24[1] = utils::inumeric(FLERR,words[1],false,lmp); + if (keywd == "quadratic33_number_threebody_basis_functions") + pod.quadratic33[0] = utils::inumeric(FLERR,words[1],false,lmp); + if (keywd == "quadratic33_number_threebody_basis_functions") + pod.quadratic33[1] = utils::inumeric(FLERR,words[1],false,lmp); + if (keywd == "quadratic34_number_threebody_basis_functions") + pod.quadratic34[0] = utils::inumeric(FLERR,words[1],false,lmp); + if (keywd == "quadratic34_number_fourbody_basis_functions") + pod.quadratic34[1] = utils::inumeric(FLERR,words[1],false,lmp); + if (keywd == "quadratic44_number_fourbody_basis_functions") + pod.quadratic44[0] = utils::inumeric(FLERR,words[1],false,lmp); + if (keywd == "quadratic44_number_fourbody_basis_functions") + pod.quadratic44[1] = utils::inumeric(FLERR,words[1],false,lmp); + if (keywd == "cubic234_number_twobody_basis_functions") + pod.cubic234[0] = utils::inumeric(FLERR,words[1],false,lmp); + if (keywd == "cubic234_number_threebody_basis_functions") + pod.cubic234[1] = utils::inumeric(FLERR,words[1],false,lmp); + if (keywd == "cubic234_number_fourbody_basis_functions") + pod.cubic234[2] = utils::inumeric(FLERR,words[1],false,lmp); + if (keywd == "cubic333_number_threebody_basis_functions") + pod.cubic333[0] = utils::inumeric(FLERR,words[1],false,lmp); + if (keywd == "cubic444_number_fourbody_basis_functions") + pod.cubic444[0] = utils::inumeric(FLERR,words[1],false,lmp); + } + } + + pod.twobody[0] = pod.besseldegree; + pod.twobody[1] = pod.inversedegree; + pod.threebody[0] = pod.besseldegree; + pod.threebody[1] = pod.inversedegree; + + // number of snapshots + + pod.ns2 = pod.nbesselpars*pod.twobody[0] + pod.twobody[1]; + pod.ns3 = pod.nbesselpars*pod.threebody[0] + pod.threebody[1]; + pod.ns4 = pod.nbesselpars*pod.fourbody[0] + pod.fourbody[1]; + + for (int i = 0; i < pod.nbesselpars; i++) + if (fabs(pod.besselparams[i]) < 1e-3) pod.besselparams[i] = 1e-3; + + // allocate memory for eigenvectors and eigenvalues + + if (pod.ns2 > 0) { + memory->create(pod.Phi2, pod.ns2*pod.ns2, "pod:pod_Phi2"); + memory->create(pod.Lambda2, pod.ns2, "pod:pod_Lambda2"); + } + if (pod.ns3 > 0) { + memory->create(pod.Phi3, pod.ns3*pod.ns3, "pod:pod_Phi3"); + memory->create(pod.Lambda3, pod.ns3, "pod:pod_Lambda3"); + } + if (pod.ns4 > 0) { + memory->create(pod.Phi4, pod.ns4*pod.ns4, "pod:pod_Phi4"); + memory->create(pod.Lambda4, pod.ns4, "pod:pod_Lambda4"); + } + + if (pod.ns2 > 0) { + podeigenvaluedecomposition(pod.Phi2, pod.Lambda2, pod.besselparams, pod.rin, pod.rcut, + pod.twobody[0], pod.twobody[1], pod.nbesselpars, 2000); + +// /* Print eigenvalues */ +// print_matrix( "Eigenvalues for two-body potential:", 1, pod.ns2, pod.Lambda2, 1 ); +// +// /* Print eigenvectors */ +// print_matrix( "Eigenvectors for two-body potential:", pod.ns2, pod.ns2, pod.Phi2, pod.ns2); + } + if (pod.ns3 > 0) { + podeigenvaluedecomposition(pod.Phi3, pod.Lambda3, pod.besselparams, pod.rin, pod.rcut, + pod.threebody[0], pod.threebody[1], pod.nbesselpars, 2000); + } + if (pod.ns4 > 0) { + podeigenvaluedecomposition(pod.Phi4, pod.Lambda4, pod.besselparams, pod.rin, pod.rcut, + pod.fourbody[0], pod.fourbody[1], pod.nbesselpars, 2000); + } + + // number of chemical combinations + + pod.nc2 = pod.nelements*(pod.nelements+1)/2; + pod.nc3 = pod.nelements*pod.nelements*(pod.nelements+1)/2; + pod.nc4 = pod.snapchemflag ? pod.nelements*pod.nelements*pod.nelements*pod.nelements : pod.nelements; + + // number of basis functions and descriptors for one-body potential + + if (pod.onebody==1) { + pod.nbf1 = 1; + pod.nd1 = pod.nelements; + } else { + pod.nbf1 = 0; + pod.nd1 = 0; + } + + // number of basis functions and descriptors for two-body potential + + pod.nbf2 = pod.twobody[2]; + pod.nd2 = pod.nbf2*pod.nc2; + + // number of basis functions and descriptors for three-body potential + + pod.nrbf3 = pod.threebody[2]; + pod.nabf3 = pod.threebody[3]; + pod.nbf3 = pod.nrbf3*(1 + pod.nabf3); + pod.nd3 = pod.nbf3*pod.nc3; + + // number of basis functions and descriptors for four-body potential + + int twojmax = pod.snaptwojmax; + int idxb_count = 0; + if (twojmax > 0) { + for(int j1 = 0; j1 <= twojmax; j1++) + for(int j2 = 0; j2 <= j1; j2++) + for(int j = j1 - j2; j <= MIN(twojmax, j1 + j2); j += 2) + if (j >= j1) idxb_count++; + } + pod.nbf4 = idxb_count; + pod.nd4 = pod.nbf4*pod.nc4; + + if (pod.quadraticpod==1) { + pod.quadratic23[0] = pod.nbf2; + pod.quadratic23[1] = pod.nbf3; + } + + pod.quadratic22[0] = MIN(pod.quadratic22[0], pod.nbf2); + pod.quadratic22[1] = MIN(pod.quadratic22[1], pod.nbf2); + pod.quadratic23[0] = MIN(pod.quadratic23[0], pod.nbf2); + pod.quadratic23[1] = MIN(pod.quadratic23[1], pod.nbf3); + pod.quadratic24[0] = MIN(pod.quadratic24[0], pod.nbf2); + pod.quadratic24[1] = MIN(pod.quadratic24[1], pod.nbf4); + pod.quadratic33[0] = MIN(pod.quadratic33[0], pod.nbf3); + pod.quadratic33[1] = MIN(pod.quadratic33[1], pod.nbf3); + pod.quadratic34[0] = MIN(pod.quadratic34[0], pod.nbf3); + pod.quadratic34[1] = MIN(pod.quadratic34[1], pod.nbf4); + pod.quadratic44[0] = MIN(pod.quadratic44[0], pod.nbf4); + pod.quadratic44[1] = MIN(pod.quadratic44[1], pod.nbf4); + + pod.cubic234[0] = MIN(pod.cubic234[0], pod.nbf2); + pod.cubic234[1] = MIN(pod.cubic234[1], pod.nbf3); + pod.cubic234[2] = MIN(pod.cubic234[2], pod.nbf4); + pod.cubic333[0] = MIN(pod.cubic333[0], pod.nbf3); + pod.cubic333[1] = MIN(pod.cubic333[0], pod.nbf3); + pod.cubic333[2] = MIN(pod.cubic333[0], pod.nbf3); + pod.cubic444[0] = MIN(pod.cubic444[0], pod.nbf4); + pod.cubic444[1] = MIN(pod.cubic444[0], pod.nbf4); + pod.cubic444[2] = MIN(pod.cubic444[0], pod.nbf4); + + // number of descriptors for quadratic POD potentials + + pod.nd22 = pod.quadratic22[0]*pod.quadratic22[1]*pod.nc2*pod.nc2; + pod.nd23 = pod.quadratic23[0]*pod.quadratic23[1]*pod.nc2*pod.nc3; + pod.nd24 = pod.quadratic24[0]*pod.quadratic24[1]*pod.nc2*pod.nc4; + pod.nd33 = pod.quadratic33[0]*pod.quadratic33[1]*pod.nc3*pod.nc3; + pod.nd34 = pod.quadratic34[0]*pod.quadratic34[1]*pod.nc3*pod.nc4; + pod.nd44 = pod.quadratic44[0]*pod.quadratic44[1]*pod.nc4*pod.nc4; + + int nq; + nq = pod.quadratic22[0]*pod.nc2; pod.nd22 = nq*(nq+1)/2; + nq = pod.quadratic33[0]*pod.nc3; pod.nd33 = nq*(nq+1)/2; + nq = pod.quadratic44[0]*pod.nc4; pod.nd44 = nq*(nq+1)/2; + + // number of descriptors for cubic POD potentials + + pod.nd234 = pod.cubic234[0]*pod.cubic234[1]*pod.cubic234[2]*pod.nc2*pod.nc3*pod.nc4; + nq = pod.cubic333[0]*pod.nc3; pod.nd333 = nq*(nq+1)*(nq+2)/6; + nq = pod.cubic444[0]*pod.nc4; pod.nd444 = nq*(nq+1)*(nq+2)/6; + + // total number of descriptors for all POD potentials + + pod.nd = pod.nd1 + pod.nd2 + pod.nd3 + pod.nd4 + pod.nd22 + pod.nd23 + pod.nd24 + + pod.nd33 + pod.nd34 + pod.nd44 + pod.nd234 + pod.nd333 + pod.nd444; + pod.nd1234 = pod.nd1 + pod.nd2 + pod.nd3 + pod.nd4; + + int nelements = pod.nelements; + delete[] pod.elemindex; + pod.elemindex = new int[nelements*nelements]; + + int k = 1; + for (int i=0; i < nelements; i++) { + for (int j=i; j < nelements; j++) { + pod.elemindex[i + nelements*j] = k; + pod.elemindex[j + nelements*i] = k; + k += 1; + } + } + + if (comm->me == 0) { + utils::logmesg(lmp, "**************** Begin of POD Potentials ****************\n"); + utils::logmesg(lmp, "species: "); + for (int i=0; ime == 0) { + + fpcoeff = utils::open_potential(coefffilename,lmp,nullptr); + if (fpcoeff == nullptr) + error->one(FLERR,"Cannot open POD coefficient file {}: ", + coefffilename, utils::getsyserror()); + } + + // check format for first line of file + + char line[MAXLINE],*ptr; + int eof = 0; + int nwords = 0; + while (nwords == 0) { + if (comm->me == 0) { + ptr = fgets(line,MAXLINE,fpcoeff); + if (ptr == nullptr) { + eof = 1; + fclose(fpcoeff); + } + } + MPI_Bcast(&eof,1,MPI_INT,0,world); + if (eof) break; + MPI_Bcast(line,MAXLINE,MPI_CHAR,0,world); + + // strip comment, skip line if blank + + nwords = utils::count_words(utils::trim_comment(line)); + } + + if (nwords != 2) + error->all(FLERR,"Incorrect format in POD coefficient file"); + + // strip single and double quotes from words + + int ncoeffall; + std::string tmp_str; + try { + ValueTokenizer words(utils::trim_comment(line),"\"' \t\n\r\f"); + tmp_str = words.next_string(); + ncoeffall = words.next_int(); + } catch (TokenizerException &e) { + error->all(FLERR,"Incorrect format in POD coefficient file: {}", e.what()); + } + + // loop over single block of coefficients and insert values in pod.coeff + + memory->create(pod.coeff, ncoeffall, "pod:pod_coeff"); + + for (int icoeff = 0; icoeff < ncoeffall; icoeff++) { + if (comm->me == 0) { + ptr = fgets(line,MAXLINE,fpcoeff); + if (ptr == nullptr) { + eof = 1; + fclose(fpcoeff); + } + } + + MPI_Bcast(&eof,1,MPI_INT,0,world); + if (eof) + error->all(FLERR,"Incorrect format in POD coefficient file"); + MPI_Bcast(line,MAXLINE,MPI_CHAR,0,world); + + try { + ValueTokenizer coeff(utils::trim_comment(line)); + if (coeff.count() != 1) + error->all(FLERR,"Incorrect format in POD coefficient file"); + + pod.coeff[icoeff] = coeff.next_double(); + } catch (TokenizerException &e) { + error->all(FLERR,"Incorrect format in POD coefficient file: {}", e.what()); + } + } + if (comm->me == 0) { + if (!eof) fclose(fpcoeff); + } +} + +/*********************************************************************************************************/ + +void MLPOD::linear_descriptors(double *gd, double *efatom, double *y, double *tmpmem, + int *atomtype, int *alist, int *pairlist, int * /*pairnum*/, + int *pairnumsum, int *tmpint, int natom, int Nij) +{ + int dim = 3; + int nelements = pod.nelements; + int nbesselpars = pod.nbesselpars; + int nrbf2 = pod.nbf2; + int nabf3 = pod.nabf3; + int nrbf3 = pod.nrbf3; + int nd1 = pod.nd1; + int nd2 = pod.nd2; + int nd3 = pod.nd3; + int nd4 = pod.nd4; + int nd1234 = nd1+nd2+nd3+nd4; + int *pdegree2 = pod.twobody; + int *elemindex = pod.elemindex; + double rin = pod.rin; + double rcut = pod.rcut; + double *Phi2 = pod.Phi2; + double *besselparams = pod.besselparams; + + double *fatom1 = &efatom[0]; + double *fatom2 = &efatom[dim*natom*(nd1)]; + double *fatom3 = &efatom[dim*natom*(nd1+nd2)]; + double *fatom4 = &efatom[dim*natom*(nd1+nd2+nd3)]; + double *eatom1 = &efatom[dim*natom*(nd1+nd2+nd3+nd4)]; + double *eatom2 = &efatom[dim*natom*(nd1+nd2+nd3+nd4)+natom*nd1]; + double *eatom3 = &efatom[dim*natom*(nd1+nd2+nd3+nd4)+natom*(nd1+nd2)]; + double *eatom4 = &efatom[dim*natom*(nd1+nd2+nd3+nd4)+natom*(nd1+nd2+nd3)]; + + podArraySetValue(fatom1, 0.0, (1+dim)*natom*(nd1+nd2+nd3+nd4)); + + double *rij = &tmpmem[0]; // 3*Nij + int *ai = &tmpint[0]; // Nij + int *aj = &tmpint[Nij]; // Nij + int *ti = &tmpint[2*Nij]; // Nij + int *tj = &tmpint[3*Nij]; // Nij + podNeighPairs(rij, y, ai, aj, ti, tj, pairlist, pairnumsum, atomtype, + alist, natom, dim); + + // peratom descriptors for one-body, two-body, and three-body linear potentials + + poddesc(eatom1, fatom1, eatom2, fatom2, eatom3, fatom3, rij, Phi2, besselparams, + &tmpmem[3*Nij], rin, rcut, pairnumsum, atomtype, ai, aj, ti, tj, elemindex, pdegree2, + nbesselpars, nrbf2, nrbf3, nabf3, nelements, Nij, natom); + + if (pod.snaptwojmax > 0) + snapdesc(eatom4, fatom4, rij, &tmpmem[3*Nij], atomtype, ai, aj, ti, tj, natom, Nij); + + // global descriptors for one-body, two-body, three-body, and four-bodt linear potentials + + podArraySetValue(tmpmem, 1.0, natom); + + char cht = 'T'; + double one = 1.0, zero = 0.0; + int inc1 = 1; + DGEMV(&cht, &natom, &nd1234, &one, eatom1, &natom, tmpmem, &inc1, &zero, gd, &inc1); +} + +void MLPOD::quadratic_descriptors(double* d23, double *dd23, double* d2, double *d3, double* dd2, double *dd3, + int M2, int M3, int N) +{ + for (int m3 = 0; m3 0) energy += quadratic_coefficients(c2, d2, coeff22, pod.quadratic22, nc2); + + // calculate energy for quadratic23 potential + + if (nd23 > 0) energy += quadratic_coefficients(c2, c3, d2, d3, coeff23, pod.quadratic23, nc2, nc3); + + // calculate energy for quadratic24 potential + + if (nd24 > 0) energy += quadratic_coefficients(c2, c4, d2, d4, coeff24, pod.quadratic24, nc2, nc4); + + // calculate energy for quadratic33 potential + + if (nd33 > 0) energy += quadratic_coefficients(c3, d3, coeff33, pod.quadratic33, nc3); + + // calculate energy for quadratic34 potential + + if (nd34 > 0) energy += quadratic_coefficients(c3, c4, d3, d4, coeff34, pod.quadratic34, nc3, nc4); + + // calculate energy for quadratic44 potential + + if (nd44 > 0) energy += quadratic_coefficients(c4, d4, coeff44, pod.quadratic44, nc4); + + // calculate energy for cubic234 potential + + if (nd234 > 0) energy += cubic_coefficients(c2, c3, c4, d2, d3, d4, coeff234, pod.cubic234, nc2, nc3, nc4); + + // calculate energy for cubic333 potential + + if (nd333 > 0) energy += cubic_coefficients(c3, d3, coeff333, pod.cubic333, nc3); + + // calculate energy for cubic444 potential + + if (nd444 > 0) energy += cubic_coefficients(c4, d4, coeff444, pod.cubic444, nc4); + + // calculate effective POD coefficients + + for (int i=0; i< nd1234; i++) c1[i] += coeff[i]; + + // calculate force = gdd * c1 + + char chn = 'N'; + double one = 1.0, zero = 0.0; + int inc1 = 1; + DGEMV(&chn, &nforce, &nd1234, &one, gdd, &nforce, c1, &inc1, &zero, force, &inc1); + + return energy; +} + +double MLPOD::energyforce_calculation(double *force, double *gd, double *gdd, double *coeff, double *y, + int *atomtype, int *alist, int *pairlist, int *pairnum, int *pairnumsum, int *tmpint, int natom, int Nij) +{ + int dim = 3; + int nd1234 = pod.nd1+pod.nd2+pod.nd3+pod.nd4; + double *tmpmem = &gdd[dim*natom*nd1234+natom*nd1234]; + + // calculate POD and SNAP descriptors and their derivatives + + linear_descriptors(gd, gdd, y, tmpmem, atomtype, alist, + pairlist, pairnum, pairnumsum, tmpint, natom, Nij); + + // calculate energy and force + + double energy = 0.0; + energy = calculate_energyforce(force, gd, gdd, coeff, &gdd[dim*natom*nd1234], natom); + + return energy; +} + +void MLPOD::podNeighPairs(double *xij, double *x, int *ai, int *aj, int *ti, int *tj, + int *pairlist, int *pairnumsum, int *atomtype, int *alist, int inum, int dim) +{ + for (int ii=0; ii j) + ik = lk + s; + k = aj[ik]; // atom k + typek = tj[ik] - 1; + xik1 = yij[0+dim*ik]; // xk - xi + xik2 = yij[1+dim*ik]; // xk - xi + xik3 = yij[2+dim*ik]; // xk - xi + riksq = xik1*xik1 + xik2*xik2 + xik3*xik3; + rik = sqrt(riksq); + + xdot = xij1*xik1 + xij2*xik2 + xij3*xik3; + costhe = xdot/(rij*rik); + costhe = costhe > 1.0 ? 1.0 : costhe; + costhe = costhe < -1.0 ? -1.0 : costhe; + xdot = costhe*(rij*rik); + + sinthe = sqrt(1.0 - costhe*costhe); + sinthe = sinthe > 1e-12 ? sinthe : 1e-12; + theta = acos(costhe); + dtheta = -1.0/sinthe; + + tm1 = 1.0/(rij*rijsq*rik); + tm2 = 1.0/(rij*riksq*rik); + dct1 = (xik1*rijsq - xij1*xdot)*tm1; + dct2 = (xik2*rijsq - xij2*xdot)*tm1; + dct3 = (xik3*rijsq - xij3*xdot)*tm1; + dct4 = (xij1*riksq - xik1*xdot)*tm2; + dct5 = (xij2*riksq - xik2*xdot)*tm2; + dct6 = (xij3*riksq - xik3*xdot)*tm2; + + for (int p=0; p = j1) idxb_count++; + + int idxb_max = idxb_count; + idx_max[2] = idxb_max; + + idxb_count = 0; + for(int j1 = 0; j1 <= twojmax; j1++) + for(int j2 = 0; j2 <= j1; j2++) + for(int j = j1 - j2; j <= MIN(twojmax, j1 + j2); j += 2) + if (j >= j1) { + idxb[idxb_count*3 + 0] = j1; + idxb[idxb_count*3 + 1] = j2; + idxb[idxb_count*3 + 2] = j; + idxb_count++; + } + + idxb_count = 0; + for(int j1 = 0; j1 <= twojmax; j1++) + for(int j2 = 0; j2 <= j1; j2++) + for(int j = j1 - j2; j <= MIN(twojmax, j1 + j2); j += 2) { + if (j >= j1) { + idxb_block[j + j2*jdim + j1*jdim*jdim] = idxb_count; + idxb_count++; + } + } + + // index list for zlist + + int idxz_count = 0; + + for(int j1 = 0; j1 <= twojmax; j1++) + for(int j2 = 0; j2 <= j1; j2++) + for(int j = j1 - j2; j <= MIN(twojmax, j1 + j2); j += 2) + for (int mb = 0; 2*mb <= j; mb++) + for (int ma = 0; ma <= j; ma++) + idxz_count++; + + int idxz_max = idxz_count; + idx_max[3] = idxz_max; + + idxz_count = 0; + for(int j1 = 0; j1 <= twojmax; j1++) + for(int j2 = 0; j2 <= j1; j2++) + for(int j = j1 - j2; j <= MIN(twojmax, j1 + j2); j += 2) { + idxz_block[j + j2*jdim + j1*jdim*jdim] = idxz_count; + + for (int mb = 0; 2*mb <= j; mb++) + for (int ma = 0; ma <= j; ma++) { + + idxz[idxz_count*10 + 0] = j1; + idxz[idxz_count*10 + 1] = j2; + idxz[idxz_count*10 + 2] = j; + idxz[idxz_count*10 + 3] = MAX(0, (2 * ma - j - j2 + j1) / 2); + idxz[idxz_count*10 + 4] = (2 * ma - j - (2 * idxz[idxz_count*10 + 3] - j1) + j2) / 2; + idxz[idxz_count*10 + 5] = MIN(j1, (2 * ma - j + j2 + j1) / 2) - idxz[idxz_count*10 + 3] + 1; + idxz[idxz_count*10 + 6] = MAX(0, (2 * mb - j - j2 + j1) / 2); + idxz[idxz_count*10 + 7] = (2 * mb - j - (2 * idxz[idxz_count*10 + 6] - j1) + j2) / 2; + idxz[idxz_count*10 + 8] = MIN(j1, (2 * mb - j + j2 + j1) / 2) - idxz[idxz_count*10 + 6] + 1; + + const int jju = idxu_block[j] + (j+1)*mb + ma; + idxz[idxz_count*10 + 9] = jju; + + idxz_count++; + } + } +}; + +void snapInitRootpqArray(double *rootpqarray, int twojmax) +{ + int jdim = twojmax + 1; + for (int p = 1; p <= twojmax; p++) + for (int q = 1; q <= twojmax; q++) + rootpqarray[p*jdim + q] = sqrt(((double) p)/q); +}; + +double snapDeltacg(double *factorial, int j1, int j2, int j) +{ + double sfaccg = factorial[(j1 + j2 + j) / 2 + 1]; + return sqrt(factorial[(j1 + j2 - j) / 2] * + factorial[(j1 - j2 + j) / 2] * + factorial[(-j1 + j2 + j) / 2] / sfaccg); +}; + +void snapInitClebschGordan(double *cglist, double *factorial, int twojmax) +{ + double sum,dcg,sfaccg; + int m, aa2, bb2, cc2; + int ifac; + + int idxcg_count = 0; + for(int j1 = 0; j1 <= twojmax; j1++) + for(int j2 = 0; j2 <= j1; j2++) + for(int j = j1 - j2; j <= MIN(twojmax, j1 + j2); j += 2) { + for (int m1 = 0; m1 <= j1; m1++) { + aa2 = 2 * m1 - j1; + + for (int m2 = 0; m2 <= j2; m2++) { + + bb2 = 2 * m2 - j2; + m = (aa2 + bb2 + j) / 2; + + if(m < 0 || m > j) { + cglist[idxcg_count] = 0.0; + idxcg_count++; + continue; + } + + sum = 0.0; + + for (int z = MAX(0, MAX(-(j - j2 + aa2) + / 2, -(j - j1 - bb2) / 2)); + z <= MIN((j1 + j2 - j) / 2, + MIN((j1 - aa2) / 2, (j2 + bb2) / 2)); + z++) { + ifac = z % 2 ? -1 : 1; + sum += ifac / + (factorial[z] * + factorial[(j1 + j2 - j) / 2 - z] * + factorial[(j1 - aa2) / 2 - z] * + factorial[(j2 + bb2) / 2 - z] * + factorial[(j - j2 + aa2) / 2 + z] * + factorial[(j - j1 - bb2) / 2 + z]); + } + + cc2 = 2 * m - j; + dcg = snapDeltacg(factorial, j1, j2, j); + sfaccg = sqrt(factorial[(j1 + aa2) / 2] * + factorial[(j1 - aa2) / 2] * + factorial[(j2 + bb2) / 2] * + factorial[(j2 - bb2) / 2] * + factorial[(j + cc2) / 2] * + factorial[(j - cc2) / 2] * + (j + 1)); + + cglist[idxcg_count] = sum * dcg * sfaccg; + idxcg_count++; + } + } + } +} + +void snapInitSna(double *rootpqarray, double *cglist, double *factorial, int *idx_max, int *idxz, + int *idxz_block, int *idxb, int *idxb_block, int *idxu_block, int *idxcg_block, int twojmax) +{ + snapBuildIndexList(idx_max, idxz, idxz_block, idxb, + idxb_block, idxu_block, idxcg_block, twojmax); + + snapInitRootpqArray(rootpqarray, twojmax); + snapInitClebschGordan(cglist, factorial, twojmax); +} + +void MLPOD::snapSetup(int twojmax, int ntypes) +{ + sna.twojmax = twojmax; + sna.ntypes = ntypes; + + int jdim = twojmax + 1; + int jdimpq = twojmax + 2; + + memory->create(sna.map, ntypes+1, "pod:sna_map"); + memory->create(sna.idxcg_block, jdim*jdim*jdim, "pod:sna_idxcg_block"); + memory->create(sna.idxz_block, jdim*jdim*jdim, "pod:sna_idxz_block"); + memory->create(sna.idxb_block, jdim*jdim*jdim, "pod:sna_idxb_block"); + memory->create(sna.idxu_block, jdim, "pod:sna_idxu_block"); + memory->create(sna.idx_max, 5, "pod:sna_idx_max"); + + int idxb_count = 0; + for(int j1 = 0; j1 <= twojmax; j1++) + for(int j2 = 0; j2 <= j1; j2++) + for(int j = j1 - j2; j <= MIN(twojmax, j1 + j2); j += 2) + if (j >= j1) idxb_count++; + + int idxz_count = 0; + for(int j1 = 0; j1 <= twojmax; j1++) + for(int j2 = 0; j2 <= j1; j2++) + for(int j = j1 - j2; j <= MIN(twojmax, j1 + j2); j += 2) + for (int mb = 0; 2*mb <= j; mb++) + for (int ma = 0; ma <= j; ma++) + idxz_count++; + + int idxcg_count = 0; + for(int j1 = 0; j1 <= twojmax; j1++) + for(int j2 = 0; j2 <= j1; j2++) + for(int j = j1 - j2; j <= MIN(twojmax, j1 + j2); j += 2) { + for (int m1 = 0; m1 <= j1; m1++) + for (int m2 = 0; m2 <= j2; m2++) + idxcg_count++; + } + + memory->create(sna.idxz, idxz_count*10, "pod:sna_idxz"); + memory->create(sna.idxb, idxb_count*3, "pod:sna_idxb"); + memory->create(sna.rcutsq, (ntypes+1)*(ntypes+1), "pod:sna_rcutsq"); + memory->create(sna.radelem, ntypes+1, "pod:sna_radelem"); + memory->create(sna.wjelem, ntypes+1, "pod:sna_wjelem"); + memory->create(sna.rootpqarray, jdimpq*jdimpq, "pod:sna_rootpqarray"); + memory->create(sna.cglist, idxcg_count, "pod:sna_cglist"); + memory->create(sna.bzero, jdim, "pod:sna_bzero"); + memory->create(sna.fac, 168, "pod:sna_fac"); + + for (int i=0; i rcutij) { + sfac = 0.0; + dsfac = 0.0; + } + else { + double rcutfac0 = MY_PI / (rcutij - rmin0); + sfac = 0.5 * (cos((r - rmin0) * rcutfac0) + 1.0); + dsfac = -0.5 * sin((r - rmin0) * rcutfac0) * rcutfac0; + } + } + sfac *= wjelem[tj[ij]]; + dsfac *= wjelem[tj[ij]]; + + double r0inv, dr0invdr; + double a_r, a_i, b_r, b_i; + double da_r[3], da_i[3], db_r[3], db_i[3]; + double dz0[3], dr0inv[3]; + double rootpq; + int jdim = twojmax + 1; + + r0inv = 1.0 / sqrt(r * r + z0 * z0); + a_r = r0inv * z0; + a_i = -r0inv * z; + b_r = r0inv * y; + b_i = -r0inv * x; + + dr0invdr = -cube(r0inv) * (r + z0 * dz0dr); + + dr0inv[0] = dr0invdr * ux; + dr0inv[1] = dr0invdr * uy; + dr0inv[2] = dr0invdr * uz; + + dz0[0] = dz0dr * ux; + dz0[1] = dz0dr * uy; + dz0[2] = dz0dr * uz; + + for (int k = 0; k < 3; k++) { + da_r[k] = dz0[k] * r0inv + z0 * dr0inv[k]; + da_i[k] = -z * dr0inv[k]; + } + da_i[2] += -r0inv; + + for (int k = 0; k < 3; k++) { + db_r[k] = y * dr0inv[k]; + db_i[k] = -x * dr0inv[k]; + } + db_i[0] += -r0inv; + db_r[1] += r0inv; + + Sr[ij+0*ijnum] = 1.0; + Si[ij+0*ijnum] = 0.0; + Srx[ij+0*ijnum] = 0.0; + Six[ij+0*ijnum] = 0.0; + Sry[ij+0*ijnum] = 0.0; + Siy[ij+0*ijnum] = 0.0; + Srz[ij+0*ijnum] = 0.0; + Siz[ij+0*ijnum] = 0.0; + for (int j = 1; j <= twojmax; j++) { + int jju = idxu_block[j]; + int jjup = idxu_block[j-1]; + + // fill in left side of matrix layer from previous layer + + for (int mb = 0; 2*mb <= j; mb++) { + Sr[ij+jju*ijnum] = 0.0; + Si[ij+jju*ijnum] = 0.0; + Srx[ij+jju*ijnum] = 0.0; + Six[ij+jju*ijnum] = 0.0; + Sry[ij+jju*ijnum] = 0.0; + Siy[ij+jju*ijnum] = 0.0; + Srz[ij+jju*ijnum] = 0.0; + Siz[ij+jju*ijnum] = 0.0; + for (int ma = 0; ma < j; ma++) { + rootpq = rootpqarray[(j - ma)*jdim + (j - mb)]; + int njju = ij+jju*ijnum; + int njju1 = ij+(jju+1)*ijnum; + int njjup = ij+jjup*ijnum; + double u_r = Sr[njjup]; + double u_i = Si[njjup]; + double ux_r = Srx[njjup]; + double ux_i = Six[njjup]; + double uy_r = Sry[njjup]; + double uy_i = Siy[njjup]; + double uz_r = Srz[njjup]; + double uz_i = Siz[njjup]; + + Sr[njju] += rootpq * (a_r * u_r + a_i * u_i); + Si[njju] += rootpq * (a_r * u_i - a_i * u_r); + Srx[njju] += rootpq * (da_r[0] * u_r + da_i[0] * u_i + a_r * ux_r + a_i * ux_i); + Six[njju] += rootpq * (da_r[0] * u_i - da_i[0] * u_r + a_r * ux_i - a_i * ux_r); + Sry[njju] += rootpq * (da_r[1] * u_r + da_i[1] * u_i + a_r * uy_r + a_i * uy_i); + Siy[njju] += rootpq * (da_r[1] * u_i - da_i[1] * u_r + a_r * uy_i - a_i * uy_r); + Srz[njju] += rootpq * (da_r[2] * u_r + da_i[2] * u_i + a_r * uz_r + a_i * uz_i); + Siz[njju] += rootpq * (da_r[2] * u_i - da_i[2] * u_r + a_r * uz_i - a_i * uz_r); + + rootpq = rootpqarray[(ma + 1)*jdim + (j - mb)]; + Sr[njju1] = -rootpq * (b_r * u_r + b_i * u_i); + Si[njju1] = -rootpq * (b_r * u_i - b_i * u_r); + Srx[njju1] = -rootpq * (db_r[0] * u_r + db_i[0] * u_i + b_r * ux_r + b_i * ux_i); + Six[njju1] = -rootpq * (db_r[0] * u_i - db_i[0] * u_r + b_r * ux_i - b_i * ux_r); + Sry[njju1] = -rootpq * (db_r[1] * u_r + db_i[1] * u_i + b_r * uy_r + b_i * uy_i); + Siy[njju1] = -rootpq * (db_r[1] * u_i - db_i[1] * u_r + b_r * uy_i - b_i * uy_r); + Srz[njju1] = -rootpq * (db_r[2] * u_r + db_i[2] * u_i + b_r * uz_r + b_i * uz_i); + Siz[njju1] = -rootpq * (db_r[2] * u_i - db_i[2] * u_r + b_r * uz_i - b_i * uz_r); + jju++; + jjup++; + } + jju++; + } + + jju = idxu_block[j]; + jjup = jju+(j+1)*(j+1)-1; + int mbpar = 1; + for (int mb = 0; 2*mb <= j; mb++) { + int mapar = mbpar; + for (int ma = 0; ma <= j; ma++) { + int njju = ij+jju*ijnum; + int njjup = ij+jjup*ijnum; + if (mapar == 1) { + Sr[njjup] = Sr[njju]; + Si[njjup] = -Si[njju]; + if (j%2==1 && mb==(j/2)) { + Srx[njjup] = Srx[njju]; + Six[njjup] = -Six[njju]; + Sry[njjup] = Sry[njju]; + Siy[njjup] = -Siy[njju]; + Srz[njjup] = Srz[njju]; + Siz[njjup] = -Siz[njju]; + } + } else { + Sr[njjup] = -Sr[njju]; + Si[njjup] = Si[njju]; + if (j%2==1 && mb==(j/2)) { + Srx[njjup] = -Srx[njju]; + Six[njjup] = Six[njju]; + Sry[njjup] = -Sry[njju]; + Siy[njjup] = Siy[njju]; + Srz[njjup] = -Srz[njju]; + Siz[njjup] = Siz[njju]; + } + } + mapar = -mapar; + jju++; + jjup--; + } + mbpar = -mbpar; + } + } + + for (int j = 0; j <= twojmax; j++) { + int jju = idxu_block[j]; + for (int mb = 0; 2*mb <= j; mb++) + for (int ma = 0; ma <= j; ma++) { + int ijk = ij+jju*ijnum; + Srx[ijk] = dsfac * Sr[ijk] * ux + sfac * Srx[ijk]; + Six[ijk] = dsfac * Si[ijk] * ux + sfac * Six[ijk]; + Sry[ijk] = dsfac * Sr[ijk] * uy + sfac * Sry[ijk]; + Siy[ijk] = dsfac * Si[ijk] * uy + sfac * Siy[ijk]; + Srz[ijk] = dsfac * Sr[ijk] * uz + sfac * Srz[ijk]; + Siz[ijk] = dsfac * Si[ijk] * uz + sfac * Siz[ijk]; + jju++; + } + } + + for (int k=0; k 1e-20) { + rij[ninside*3 + 0] = delx; + rij[ninside*3 + 1] = dely; + rij[ninside*3 + 2] = delz; + idxi[ninside] = ii; + ai[ninside] = gi; + aj[ninside] = gj; + ti[ninside] = itype; + tj[ninside] = atomtype[gj]; + ninside++; + pairnumsum[ii+1] += 1; + } + } + } + + pairnumsum[0] = 0; + for (int ii=0; ii j) + ik = lk + s; + typek = tj[ik] - 1; + xik1 = yij[0+dim*ik]; // xk - xi + xik2 = yij[1+dim*ik]; // xk - xi + xik3 = yij[2+dim*ik]; // xk - xi s + riksq = xik1*xik1 + xik2*xik2 + xik3*xik3; + rik = sqrt(riksq); + + xdot = xij1*xik1 + xij2*xik2 + xij3*xik3; + costhe = xdot/(rij*rik); + costhe = costhe > 1.0 ? 1.0 : costhe; + costhe = costhe < -1.0 ? -1.0 : costhe; + theta = acos(costhe); + + for (int p=0; p rcutij) { + sfac = 0.0; + } + else { + double rcutfac0 = MY_PI / (rcutij - rmin0); + sfac = 0.5 * (cos((r - rmin0) * rcutfac0) + 1.0); + } + } + sfac *= wjelem[tj[ij]]; + + double r0inv; + double a_r, a_i, b_r, b_i; + double rootpq; + int jdim = twojmax + 1; + + r0inv = 1.0 / sqrt(r * r + z0 * z0); + a_r = r0inv * z0; + a_i = -r0inv * z; + b_r = r0inv * y; + b_i = -r0inv * x; + + Sr[ij+0*ijnum] = 1.0; + Si[ij+0*ijnum] = 0.0; + for (int j = 1; j <= twojmax; j++) { + int jju = idxu_block[j]; + int jjup = idxu_block[j-1]; + + // fill in left side of matrix layer from previous layer + + for (int mb = 0; 2*mb <= j; mb++) { + Sr[ij+jju*ijnum] = 0.0; + Si[ij+jju*ijnum] = 0.0; + for (int ma = 0; ma < j; ma++) { + rootpq = rootpqarray[(j - ma)*jdim + (j - mb)]; + int njju = ij+jju*ijnum; + int njju1 = ij+(jju+1)*ijnum; + int njjup = ij+jjup*ijnum; + double u_r = Sr[njjup]; + double u_i = Si[njjup]; + + Sr[njju] += rootpq * (a_r * u_r + a_i * u_i); + Si[njju] += rootpq * (a_r * u_i - a_i * u_r); + + rootpq = rootpqarray[(ma + 1)*jdim + (j - mb)]; + Sr[njju1] = -rootpq * (b_r * u_r + b_i * u_i); + Si[njju1] = -rootpq * (b_r * u_i - b_i * u_r); + jju++; + jjup++; + } + jju++; + } + + jju = idxu_block[j]; + jjup = jju+(j+1)*(j+1)-1; + int mbpar = 1; + for (int mb = 0; 2*mb <= j; mb++) { + int mapar = mbpar; + for (int ma = 0; ma <= j; ma++) { + int njju = ij+jju*ijnum; + int njjup = ij+jjup*ijnum; + if (mapar == 1) { + Sr[njjup] = Sr[njju]; + Si[njjup] = -Si[njju]; + } else { + Sr[njjup] = -Sr[njju]; + Si[njjup] = Si[njju]; + } + mapar = -mapar; + jju++; + jjup--; + } + mbpar = -mbpar; + } + } + + for (int k=0; k 0) + snapdesc_ij(eatom4, rij, tmpmem, atomtype, idxi, ti, tj, natom, Nij); + + // global descriptors for one-body, two-body, three-body, and four-bodt linear potentials + + podArraySetValue(tmpmem, 1.0, natom); + + char cht = 'T'; + double one = 1.0; + int inc1 = 1; + DGEMV(&cht, &natom, &nd1234, &one, eatom1, &natom, tmpmem, &inc1, &one, gd, &inc1); +} + +double MLPOD::calculate_energy(double *effectivecoeff, double *gd, double *coeff) +{ + int nd1 = pod.nd1; + int nd2 = pod.nd2; + int nd3 = pod.nd3; + int nd4 = pod.nd4; + int nd1234 = nd1+nd2+nd3+nd4; + int nd22 = pod.nd22; + int nd23 = pod.nd23; + int nd24 = pod.nd24; + int nd33 = pod.nd33; + int nd34 = pod.nd34; + int nd44 = pod.nd44; + int nd234 = pod.nd234; + int nd333 = pod.nd333; + int nd444 = pod.nd444; + int nc2 = pod.nc2; + int nc3 = pod.nc3; + int nc4 = pod.nc4; + + // two-body, three-body, and four-body descriptors + + double *d2 = &gd[nd1]; + double *d3 = &gd[nd1+nd2]; + double *d4 = &gd[nd1+nd2+nd3]; + + // quadratic and cubic POD coefficients + + double *coeff22 = &coeff[nd1234]; + double *coeff23 = &coeff[nd1234+nd22]; + double *coeff24 = &coeff[nd1234+nd22+nd23]; + double *coeff33 = &coeff[nd1234+nd22+nd23+nd24]; + double *coeff34 = &coeff[nd1234+nd22+nd23+nd24+nd33]; + double *coeff44 = &coeff[nd1234+nd22+nd23+nd24+nd33+nd34]; + double *coeff234 = &coeff[nd1234+nd22+nd23+nd24+nd33+nd34+nd44]; + double *coeff333 = &coeff[nd1234+nd22+nd23+nd24+nd33+nd34+nd44+nd234]; + double *coeff444 = &coeff[nd1234+nd22+nd23+nd24+nd33+nd34+nd44+nd234+nd333]; + + // calculate energy for linear potentials + + double energy = 0.0; + for (int i=0; i< nd1234; i++) { + effectivecoeff[i] = 0.0; + energy += coeff[i]*gd[i]; + } + + // effective POD coefficients for calculating force + + double *c2 = &effectivecoeff[nd1]; + double *c3 = &effectivecoeff[nd1+nd2]; + double *c4 = &effectivecoeff[nd1+nd2+nd3]; + + // calculate energy for quadratic22 potential + + if (nd22 > 0) energy += quadratic_coefficients(c2, d2, coeff22, pod.quadratic22, nc2); + + // calculate energy for quadratic23 potential + + if (nd23 > 0) energy += quadratic_coefficients(c2, c3, d2, d3, coeff23, pod.quadratic23, nc2, nc3); + + // calculate energy for quadratic24 potential + + if (nd24 > 0) energy += quadratic_coefficients(c2, c4, d2, d4, coeff24, pod.quadratic24, nc2, nc4); + + // calculate energy for quadratic33 potential + + if (nd33 > 0) energy += quadratic_coefficients(c3, d3, coeff33, pod.quadratic33, nc3); + + // calculate energy for quadratic34 potential + + if (nd34 > 0) energy += quadratic_coefficients(c3, c4, d3, d4, coeff34, pod.quadratic34, nc3, nc4); + + // calculate energy for quadratic44 potential + + if (nd44 > 0) energy += quadratic_coefficients(c4, d4, coeff44, pod.quadratic44, nc4); + + // calculate energy for cubic234 potential + + if (nd234 > 0) energy += cubic_coefficients(c2, c3, c4, d2, d3, d4, coeff234, pod.cubic234, nc2, nc3, nc4); + + // calculate energy for cubic333 potential + + if (nd333 > 0) energy += cubic_coefficients(c3, d3, coeff333, pod.cubic333, nc3); + + // calculate energy for cubic444 potential + + if (nd444 > 0) energy += cubic_coefficients(c4, d4, coeff444, pod.cubic444, nc4); + + // calculate effective POD coefficients + + for (int i=0; i< nd1234; i++) effectivecoeff[i] += coeff[i]; + + return energy; +} + +double MLPOD::calculate_energy(double *energycoeff, double *forcecoeff, double *gd, + double *gdall, double *coeff) +{ + int nd1 = pod.nd1; + int nd2 = pod.nd2; + int nd3 = pod.nd3; + int nd4 = pod.nd4; + int nd1234 = nd1+nd2+nd3+nd4; + int nd22 = pod.nd22; + int nd23 = pod.nd23; + int nd24 = pod.nd24; + int nd33 = pod.nd33; + int nd34 = pod.nd34; + int nd44 = pod.nd44; + int nd234 = pod.nd234; + int nd333 = pod.nd333; + int nd444 = pod.nd444; + int nc2 = pod.nc2; + int nc3 = pod.nc3; + int nc4 = pod.nc4; + + // quadratic and cubic POD coefficients + + double *coeff22 = &coeff[nd1234]; + double *coeff23 = &coeff[nd1234+nd22]; + double *coeff24 = &coeff[nd1234+nd22+nd23]; + double *coeff33 = &coeff[nd1234+nd22+nd23+nd24]; + double *coeff34 = &coeff[nd1234+nd22+nd23+nd24+nd33]; + double *coeff44 = &coeff[nd1234+nd22+nd23+nd24+nd33+nd34]; + double *coeff234 = &coeff[nd1234+nd22+nd23+nd24+nd33+nd34+nd44]; + double *coeff333 = &coeff[nd1234+nd22+nd23+nd24+nd33+nd34+nd44+nd234]; + double *coeff444 = &coeff[nd1234+nd22+nd23+nd24+nd33+nd34+nd44+nd234+nd333]; + + // sum global descriptors over all MPI ranks + + MPI_Allreduce(gd, gdall, nd1234, MPI_DOUBLE, MPI_SUM, world); + + for (int i=0; i< nd1234; i++) { + energycoeff[i] = 0.0; + forcecoeff[i] = 0.0; + } + + // effective POD coefficients for calculating force + + double *c2 = &forcecoeff[nd1]; + double *c3 = &forcecoeff[nd1+nd2]; + double *c4 = &forcecoeff[nd1+nd2+nd3]; + + // effective POD coefficients for calculating energy + + double *ce2 = &energycoeff[nd1]; + double *ce3 = &energycoeff[nd1+nd2]; + double *ce4 = &energycoeff[nd1+nd2+nd3]; + + // two-body, three-body, and four-body descriptors + + double *d2 = &gdall[nd1]; + double *d3 = &gdall[nd1+nd2]; + double *d4 = &gdall[nd1+nd2+nd3]; + + // calculate energy for quadratic22 potential + + if (nd22 > 0) quadratic_coefficients(ce2, c2, d2, coeff22, pod.quadratic22, nc2); + + // calculate energy for quadratic23 potential + + if (nd23 > 0) quadratic_coefficients(ce2, ce3, c2, c3, d2, d3, coeff23, pod.quadratic23, nc2, nc3); + + // calculate energy for quadratic24 potential + + if (nd24 > 0) quadratic_coefficients(ce2, ce4, c2, c4, d2, d4, coeff24, pod.quadratic24, nc2, nc4); + + // calculate energy for quadratic33 potential + + if (nd33 > 0) quadratic_coefficients(ce3, c3, d3, coeff33, pod.quadratic33, nc3); + + // calculate energy for quadratic34 potential + + if (nd34 > 0) quadratic_coefficients(ce3, ce4, c3, c4, d3, d4, coeff34, pod.quadratic34, nc3, nc4); + + // calculate energy for quadratic44 potential + + if (nd44 > 0) quadratic_coefficients(ce4, c4, d4, coeff44, pod.quadratic44, nc4); + + // calculate energy for cubic234 potential + + if (nd234 > 0) cubic_coefficients(ce2, ce3, ce4, c2, c3, c4, d2, d3, d4, coeff234, pod.cubic234, nc2, nc3, nc4); + + // calculate energy for cubic333 potential + + if (nd333 > 0) cubic_coefficients(ce3, c3, d3, coeff333, pod.cubic333, nc3); + + // calculate energy for cubic444 potential + + if (nd444 > 0) cubic_coefficients(ce4, c4, d4, coeff444, pod.cubic444, nc4); + + // calculate effective POD coefficients + + for (int i=0; i< nd1234; i++) { + energycoeff[i] += coeff[i]; + forcecoeff[i] += coeff[i]; + } + + // calculate energy + + double energy = 0.0; + for (int i=0; i< nd1234; i++) + energy += energycoeff[i]*gd[i]; + + return energy; +} + +void MLPOD::pod2body_force(double *force, double *fij, double *coeff2, int *ai, int *aj, int *ti, + int *tj, int *elemindex, int nelements, int nbf, int /*natom*/, int N) +{ + int nelements2 = nelements*(nelements+1)/2; + for (int n=0; n j) + ik = lk + s; + k = aj[ik]; // atom k + typek = tj[ik] - 1; + xik1 = yij[0+dim*ik]; // xk - xi + xik2 = yij[1+dim*ik]; // xk - xi + xik3 = yij[2+dim*ik]; // xk - xi s + riksq = xik1*xik1 + xik2*xik2 + xik3*xik3; + rik = sqrt(riksq); + + xdot = xij1*xik1 + xij2*xik2 + xij3*xik3; + costhe = xdot/(rij*rik); + costhe = costhe > 1.0 ? 1.0 : costhe; + costhe = costhe < -1.0 ? -1.0 : costhe; + xdot = costhe*(rij*rik); + + sinthe = sqrt(1.0 - costhe*costhe); + sinthe = sinthe > 1e-12 ? sinthe : 1e-12; + theta = acos(costhe); + dtheta = -1.0/sinthe; + + tm1 = 1.0/(rij*rijsq*rik); + tm2 = 1.0/(rij*riksq*rik); + dct1 = (xik1*rijsq - xij1*xdot)*tm1; + dct2 = (xik2*rijsq - xij2*xdot)*tm1; + dct3 = (xik3*rijsq - xij3*xdot)*tm1; + dct4 = (xij1*riksq - xik1*xdot)*tm2; + dct5 = (xij2*riksq - xik2*xdot)*tm2; + dct6 = (xij3*riksq - xik3*xdot)*tm2; + + for (int p=0; p 0) + pod4body_force(force, rij, coeff4, tmpmem, atomtype, idxi, ai, aj, ti, tj, natom, Nij); +} + +double MLPOD::energyforce_calculation(double *force, double *podcoeff, double *effectivecoeff, double *gd, double *rij, + double *tmpmem, int *pairnumsum, int *atomtype, int *idxi, int *ai, int *aj, int *ti, int *tj, int natom, int Nij) +{ + int nd1234 = pod.nd1+pod.nd2+pod.nd3+pod.nd4; + double *eatom = &tmpmem[0]; + + podArraySetValue(gd, 0.0, nd1234); + linear_descriptors_ij(gd, eatom, rij, &tmpmem[natom*nd1234], pairnumsum, atomtype, idxi, ti, tj, natom, Nij); + + // Need to do MPI_Allreduce on gd for parallel + + double energy = calculate_energy(effectivecoeff, gd, podcoeff); + + podArraySetValue(force, 0.0, 3*natom); + + calculate_force(force, effectivecoeff, rij, tmpmem, pairnumsum, atomtype, idxi, ai, aj, ti, tj, natom, Nij); + + return energy; +} + + +void MLPOD::pod2body_force(double **force, double *fij, double *coeff2, int *ai, int *aj, int *ti, + int *tj, int *elemindex, int nelements, int nbf, int /*natom*/, int N) +{ + int nelements2 = nelements*(nelements+1)/2; + for (int n=0; n j) + ik = lk + s; + k = aj[ik]; // atom k + typek = tj[ik] - 1; + xik1 = yij[0+dim*ik]; // xk - xi + xik2 = yij[1+dim*ik]; // xk - xi + xik3 = yij[2+dim*ik]; // xk - xi s + riksq = xik1*xik1 + xik2*xik2 + xik3*xik3; + rik = sqrt(riksq); + + xdot = xij1*xik1 + xij2*xik2 + xij3*xik3; + costhe = xdot/(rij*rik); + costhe = costhe > 1.0 ? 1.0 : costhe; + costhe = costhe < -1.0 ? -1.0 : costhe; + xdot = costhe*(rij*rik); + + sinthe = pow(1.0 - costhe*costhe, 0.5); + sinthe = sinthe > 1e-12 ? sinthe : 1e-12; + theta = acos(costhe); + dtheta = -1.0/sinthe; + + tm1 = 1.0/(rij*rijsq*rik); + tm2 = 1.0/(rij*riksq*rik); + dct1 = (xik1*rijsq - xij1*xdot)*tm1; + dct2 = (xik2*rijsq - xij2*xdot)*tm1; + dct3 = (xik3*rijsq - xij3*xdot)*tm1; + dct4 = (xij1*riksq - xik1*xdot)*tm2; + dct5 = (xij2*riksq - xik2*xdot)*tm2; + dct6 = (xij3*riksq - xik3*xdot)*tm2; + + for (int p=0; p 0) + pod4body_force(force, rij, coeff4, tmpmem, atomtype, idxi, ai, aj, ti, tj, natom, Nij); +} diff --git a/src/ML-POD/mlpod.h b/src/ML-POD/mlpod.h new file mode 100644 index 0000000000..54e75988be --- /dev/null +++ b/src/ML-POD/mlpod.h @@ -0,0 +1,308 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/ Sandia National Laboratories + LAMMPS development team: developers@lammps.org + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifndef LMP_MLPOD_H +#define LMP_MLPOD_H + +#include "pointers.h" + +#define DDOT ddot_ +#define DGEMV dgemv_ +#define DGEMM dgemm_ +#define DGETRF dgetrf_ +#define DGETRI dgetri_ +#define DSYEV dsyev_ +#define DPOSV dposv_ + +extern "C" { +double DDOT(int *, double *, int *, double *, int *); +void DGEMV(char *, int *, int *, double *, double *, int *, double *, int *, double *, double *, + int *); +void DGEMM(char *, char *, int *, int *, int *, double *, double *, int *, double *, int *, + double *, double *, int *); +void DGETRF(int *, int *, double *, int *, int *, int *); +void DGETRI(int *, double *, int *, int *, double *, int *, int *); +void DSYEV(char *, char *, int *, double *, int *, double *, double *, int *, int *); +void DPOSV(char *, int *, int *, double *, int *, double *, int *, int *); +} + +namespace LAMMPS_NS { + +class MLPOD : protected Pointers { + + private: + // functions for reading input files + + void read_pod(const std::string &pod_file); + void read_coeff_file(const std::string &coeff_file); + + // functions for calculating/collating POD descriptors/coefficients for energies + + void podradialbasis(double *rbf, double *drbf, double *xij, double *besselparams, double rin, + double rmax, int besseldegree, int inversedegree, int nbesselpars, int N); + void pod1body(double *eatom, double *fatom, int *atomtype, int nelements, int natom); + void podtally2b(double *eatom, double *fatom, double *eij, double *fij, int *ai, int *aj, int *ti, + int *tj, int *elemindex, int nelements, int nbf, int natom, int N); + void pod3body(double *eatom, double *fatom, double *rij, double *e2ij, double *f2ij, + double *tmpmem, int *elemindex, int *pairnumsum, int *ai, int *aj, int *ti, int *tj, + int nrbf, int nabf, int nelements, int natom, int Nij); + void poddesc(double *eatom1, double *fatom1, double *eatom2, double *fatom2, double *eatom3, + double *fatom3, double *rij, double *Phi, double *besselparams, double *tmpmem, + double rin, double rcut, int *pairnumsum, int *atomtype, int *ai, int *aj, int *ti, + int *tj, int *elemindex, int *pdegree, int nbesselpars, int nrbf2, int nrbf3, + int nabf, int nelements, int Nij, int natom); + double quadratic_coefficients(double *c2, double *c3, double *d2, double *d3, double *coeff23, + int *quadratic, int nc2, int nc3); + double quadratic_coefficients(double *c3, double *d3, double *coeff33, int *quadratic, int nc3); + double cubic_coefficients(double *c2, double *c3, double *c4, double *d2, double *d3, double *d4, + double *coeff234, int *cubic, int nc2, int nc3, int nc4); + double cubic_coefficients(double *c3, double *d3, double *coeff333, int *cubic, int nc3); + double quadratic_coefficients(double *ce2, double *ce3, double *c2, double *c3, double *d2, + double *d3, double *coeff23, int *quadratic, int nc2, int nc3); + double quadratic_coefficients(double *ce3, double *c3, double *d3, double *coeff33, + int *quadratic, int nc3); + double cubic_coefficients(double *ce2, double *ce3, double *ce4, double *c2, double *c3, + double *c4, double *d2, double *d3, double *d4, double *coeff234, + int *cubic, int nc2, int nc3, int nc4); + double cubic_coefficients(double *ce3, double *c3, double *d3, double *coeff333, int *cubic, + int nc3); + + // functions for calculating/collating SNAP descriptors/coefficients for energies + + void snapSetup(int twojmax, int ntypes); + void InitSnap(); + void snapComputeUlist(double *Sr, double *Si, double *dSr, double *dSi, double *rootpqarray, + double *rij, double *wjelem, double *radelem, double rmin0, double rfac0, + double rcutfac, int *idxu_block, int *ti, int *tj, int twojmax, + int idxu_max, int ijnum, int switch_flag); + void snapZeroUarraytot2(double *Stotr, double *Stoti, double wself, int *idxu_block, int *type, + int *map, int *ai, int wselfall_flag, int chemflag, int idxu_max, + int nelements, int twojmax, int inum); + void snapAddUarraytot(double *Stotr, double *Stoti, double *Sr, double *Si, int *map, int *ai, + int *tj, int idxu_max, int inum, int ijnum, int chemflag); + void snapComputeZi2(double *zlist_r, double *zlist_i, double *Stotr, double *Stoti, + double *cglist, int *idxz, int *idxu_block, int *idxcg_block, int twojmax, + int idxu_max, int idxz_max, int nelements, int bnorm_flag, int inum); + void snapComputeBi1(double *blist, double *zlist_r, double *zlist_i, double *Stotr, double *Stoti, + int *idxb, int *idxu_block, int *idxz_block, int twojmax, int idxb_max, + int idxu_max, int idxz_max, int nelements, int inum); + void snapComputeDbidrj(double *dblist, double *zlist_r, double *zlist_i, double *dulist_r, + double *dulist_i, int *idxb, int *idxu_block, int *idxz_block, int *map, + int *ai, int *tj, int twojmax, int idxb_max, int idxu_max, int idxz_max, + int nelements, int bnorm_flag, int chemflag, int inum, int ijnum); + void snapdesc(double *blist, double *bd, double *rij, double *tmpmem, int *atomtype, int *ai, + int *aj, int *ti, int *tj, int natom, int Nij); + + // functions for calculating/collating POD descriptors/coefficients for forces + + void podradialbasis(double *rbf, double *xij, double *besselparams, double rin, double rmax, + int besseldegree, int inversedegree, int nbesselpars, int N); + void pod1body(double *eatom, int *atomtype, int nelements, int natom); + void podtally2b(double *eatom, double *eij, int *ai, int *ti, int *tj, int *elemindex, + int nelements, int nbf, int natom, int N); + void pod3body(double *eatom, double *yij, double *e2ij, double *tmpmem, int *elemindex, + int *pairnumsum, int *ai, int *ti, int *tj, int nrbf, int nabf, int nelements, + int natom, int Nij); + void poddesc_ij(double *eatom1, double *eatom2, double *eatom3, double *rij, double *Phi, + double *besselparams, double *tmpmem, double rin, double rcut, int *pairnumsum, + int *atomtype, int *ai, int *ti, int *tj, int *elemindex, int *pdegree, + int nbesselpars, int nrbf2, int nrbf3, int nabf, int nelements, int Nij, + int natom); + void snapComputeUij(double *Sr, double *Si, double *rootpqarray, double *rij, double *wjelem, + double *radelem, double rmin0, double rfac0, double rcutfac, int *idxu_block, + int *ti, int *tj, int twojmax, int idxu_max, int ijnum, int switch_flag); + void snapdesc_ij(double *blist, double *rij, double *tmpmem, int *atomtype, int *ai, int *ti, + int *tj, int natom, int Nij); + void pod2body_force(double *force, double *fij, double *coeff2, int *ai, int *aj, int *ti, + int *tj, int *elemindex, int nelements, int nbf, int natom, int Nij); + void pod3body_force(double *force, double *yij, double *e2ij, double *f2ij, double *coeff3, + double *tmpmem, int *elemindex, int *pairnumsum, int *ai, int *aj, int *ti, + int *tj, int nrbf, int nabf, int nelements, int natom, int Nij); + void snapTallyForce(double *force, double *dbdr, double *coeff4, int *ai, int *aj, int *ti, + int ijnum, int ncoeff, int ntype); + void pod4body_force(double *force, double *rij, double *coeff4, double *tmpmem, int *atomtype, + int *idxi, int *ai, int *aj, int *ti, int *tj, int natom, int Nij); + void pod2body_force(double **force, double *fij, double *coeff2, int *ai, int *aj, int *ti, + int *tj, int *elemindex, int nelements, int nbf, int natom, int Nij); + void pod3body_force(double **force, double *yij, double *e2ij, double *f2ij, double *coeff3, + double *tmpmem, int *elemindex, int *pairnumsum, int *ai, int *aj, int *ti, + int *tj, int nrbf, int nabf, int nelements, int natom, int Nij); + void snapTallyForce(double **force, double *dbdr, double *coeff4, int *ai, int *aj, int *ti, + int ijnum, int ncoeff, int ntype); + void pod4body_force(double **force, double *rij, double *coeff4, double *tmpmem, int *atomtype, + int *idxi, int *ai, int *aj, int *ti, int *tj, int natom, int Nij); + + // eigenproblem functions + + void podeigenvaluedecomposition(double *Phi, double *Lambda, double *besselparams, double rin, + double rcut, int besseldegree, int inversedegree, int nbesselpars, + int N); + + public: + MLPOD(LAMMPS *, const std::string &pod_file, const std::string &coeff_file); + + MLPOD(LAMMPS *lmp) : Pointers(lmp){}; + ~MLPOD() override; + + struct podstruct { + podstruct(); + virtual ~podstruct(); + + std::vector species; + int twobody[3]; + int threebody[4]; + int fourbody[4]; + int *pbc; + int *elemindex; + + int quadratic22[2]; + int quadratic23[2]; + int quadratic24[2]; + int quadratic33[2]; + int quadratic34[2]; + int quadratic44[2]; + int cubic234[3]; + int cubic333[3]; + int cubic444[3]; + int nelements; + int onebody; + int besseldegree; + int inversedegree; + + int quadraticpod; + + double rin; + double rcut; + double *besselparams; + double *coeff; + double *Phi2, *Phi3, *Phi4, *Lambda2, *Lambda3, *Lambda4; + + // variables declaring number of snapshots, descriptors, and combinations + + int nbesselpars = 3; + int ns2, ns3, + ns4; // number of snapshots for radial basis functions for linear POD potentials + int nc2, nc3, nc4; // number of chemical combinations for linear POD potentials + int nbf1, nbf2, nbf3, nbf4; // number of basis functions for linear POD potentials + int nd1, nd2, nd3, nd4; // number of descriptors for linear POD potentials + int nd22, nd23, nd24, nd33, nd34, nd44; // number of descriptors for quadratic POD potentials + int nd234, nd333, nd444; // number of descriptors for cubic POD potentials + int nrbf3, nabf3, nrbf4, nabf4; + int nd, nd1234; + + int snaptwojmax; // also used to tell if SNAP is used when allocating/deallocating + int snapchemflag; + double snaprfac0; + double snapelementradius[10]; + double snapelementweight[10]; + }; + + struct snastruct { + int twojmax; + int ncoeff; + int idxb_max; + int idxu_max; + int idxz_max; + int idxcg_max; + int ntypes; + int nelements; + int ndoubles; // number of multi-element pairs + int ntriples; // number of multi-element triplets + int bnormflag; + int chemflag; + int switchflag; + int bzeroflag; + int wselfallflag; + + double wself; + double rmin0; + double rfac0; + double rcutfac; + double rcutmax; + + int *map; // map types to [0,nelements) + int *idx_max; + int *idxz; + int *idxz_block; + int *idxb; + int *idxb_block; + int *idxu_block; + int *idxcg_block; + + double *rcutsq; + double *radelem; + double *wjelem; + double *bzero; + double *fac; + double *rootpqarray; + double *cglist; + }; + + podstruct pod; + snastruct sna; + + // functions for collecting/collating arrays + + void podMatMul(double *c, double *a, double *b, int r1, int c1, int c2); + void podArraySetValue(double *y, double a, int n); + void podArrayCopy(double *y, double *x, int n); + void podArrayFill(int *output, int start, int length); + + // functions for calculating energy and force descriptors + + void podNeighPairs(double *xij, double *x, int *ai, int *aj, int *ti, int *tj, int *pairlist, + int *pairnumsum, int *atomtype, int *alist, int inum, int dim); + void linear_descriptors(double *gd, double *efatom, double *y, double *tmpmem, int *atomtype, + int *alist, int *pairlist, int *pairnum, int *pairnumsum, int *tmpint, + int natom, int Nij); + void quadratic_descriptors(double *d23, double *dd23, double *d2, double *d3, double *dd2, + double *dd3, int M2, int M3, int N); + void quadratic_descriptors(double *d33, double *dd33, double *d3, double *dd3, int M3, int N); + void cubic_descriptors(double *d234, double *dd234, double *d2, double *d3, double *d4, + double *dd2, double *dd3, double *dd4, int M2, int M3, int M4, int N); + void cubic_descriptors(double *d333, double *Dd333, double *d3, double *Dd3, int M3, int N); + double calculate_energyforce(double *force, double *gd, double *gdd, double *coeff, double *tmp, + int natom); + double energyforce_calculation(double *f, double *gd, double *gdd, double *coeff, double *y, + int *atomtype, int *alist, int *pairlist, int *pairnum, + int *pairnumsum, int *tmpint, int natom, int Nij); + + // functions for calculating energies and forces + + void podNeighPairs(double *rij, double *x, int *idxi, int *ai, int *aj, int *ti, int *tj, + int *pairnumsum, int *atomtype, int *jlist, int *alist, int inum); + int lammpsNeighPairs(double *rij, double **x, double rcutsq, int *idxi, int *ai, int *aj, int *ti, + int *tj, int *pairnumsum, int *atomtype, int *numneigh, int *ilist, + int **jlist, int inum); + void linear_descriptors_ij(double *gd, double *eatom, double *rij, double *tmpmem, + int *pairnumsum, int *atomtype, int *ai, int *ti, int *tj, int natom, + int Nij); + double calculate_energy(double *effectivecoeff, double *gd, double *coeff); + double calculate_energy(double *energycoeff, double *forcecoeff, double *gd, double *gdall, + double *coeff); + void calculate_force(double *force, double *effectivecoeff, double *rij, double *tmpmem, + int *pairnumsum, int *atomtype, int *idxi, int *ai, int *aj, int *ti, + int *tj, int natom, int Nij); + void calculate_force(double **force, double *effectivecoeff, double *rij, double *tmpmem, + int *pairnumsum, int *atomtype, int *idxi, int *ai, int *aj, int *ti, + int *tj, int natom, int Nij); + double energyforce_calculation(double *force, double *podcoeff, double *effectivecoeff, + double *gd, double *rij, double *tmpmem, int *pairnumsum, + int *atomtype, int *idxi, int *ai, int *aj, int *ti, int *tj, + int natom, int Nij); + +}; + +} // namespace LAMMPS_NS + +#endif diff --git a/src/ML-POD/pair_pod.cpp b/src/ML-POD/pair_pod.cpp new file mode 100644 index 0000000000..d106b11a18 --- /dev/null +++ b/src/ML-POD/pair_pod.cpp @@ -0,0 +1,330 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/ Sandia National Laboratories + LAMMPS development team: developers@lammps.org + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Contributing authors: Ngoc Cuong Nguyen (MIT) and Andrew Rohskopf (SNL) +------------------------------------------------------------------------- */ + +#include "pair_pod.h" + +#include "mlpod.h" + +#include "atom.h" +#include "comm.h" +#include "error.h" +#include "force.h" +#include "memory.h" +#include "neigh_list.h" +#include "neighbor.h" + +using namespace LAMMPS_NS; + +/* ---------------------------------------------------------------------- */ + +PairPOD::PairPOD(LAMMPS *lmp) : + Pair(lmp), gd(nullptr), gdall(nullptr), podcoeff(nullptr), newpodcoeff(nullptr), + energycoeff(nullptr), forcecoeff(nullptr), podptr(nullptr), tmpmem(nullptr), typeai(nullptr), + numneighsum(nullptr), rij(nullptr), idxi(nullptr), ai(nullptr), aj(nullptr), ti(nullptr), + tj(nullptr) +{ + single_enable = 0; + restartinfo = 0; + one_coeff = 1; + manybody_flag = 1; + centroidstressflag = CENTROID_NOTAVAIL; + peratom_warn = true; + + dim = 3; + nablockmax = 0; + nij = 0; + nijmax = 0; + szd = 0; +} + +/* ---------------------------------------------------------------------- */ + +PairPOD::~PairPOD() +{ + free_tempmemory(); + memory->destroy(podcoeff); + memory->destroy(newpodcoeff); + memory->destroy(gd); + memory->destroy(gdall); + memory->destroy(energycoeff); + memory->destroy(forcecoeff); + + delete podptr; + + if (allocated) { + memory->destroy(setflag); + memory->destroy(cutsq); + } +} + +void PairPOD::compute(int eflag, int vflag) +{ + ev_init(eflag, vflag); + + // we must enforce using F dot r, since we have no energy or stress tally calls. + vflag_fdotr = 1; + + if (peratom_warn && (vflag_atom || eflag_atom)) { + peratom_warn = false; + if (comm->me == 0) + error->warning(FLERR, "Pair style pod does not support per-atom energies or stresses"); + } + + double **x = atom->x; + double **f = atom->f; + int **firstneigh = list->firstneigh; + int *numneigh = list->numneigh; + int *type = atom->type; + int *ilist = list->ilist; + int inum = list->inum; + + // initialize global descriptors to zero + + int nd1234 = podptr->pod.nd1234; + podptr->podArraySetValue(gd, 0.0, nd1234); + + for (int ii = 0; ii < inum; ii++) { + int i = ilist[ii]; + int jnum = numneigh[i]; + + // allocate temporary memory + + if (nijmax < jnum) { + nijmax = MAX(nijmax, jnum); + nablockmax = 1; + free_tempmemory(); + estimate_tempmemory(); + allocate_tempmemory(); + } + + // get neighbor pairs for atom i + + lammpsNeighPairs(x, firstneigh, type, map, numneigh, i); + + // compute global POD descriptors for atom i + + podptr->linear_descriptors_ij(gd, tmpmem, rij, &tmpmem[nd1234], numneighsum, typeai, idxi, ti, + tj, 1, nij); + } + + int nd22 = podptr->pod.nd22; + int nd23 = podptr->pod.nd23; + int nd24 = podptr->pod.nd24; + int nd33 = podptr->pod.nd33; + int nd34 = podptr->pod.nd34; + int nd44 = podptr->pod.nd44; + int nd = podptr->pod.nd; + bigint natom = atom->natoms; + + for (int j = nd1234; j < (nd1234 + nd22 + nd23 + nd24 + nd33 + nd34 + nd44); j++) + newpodcoeff[j] = podcoeff[j] / (natom); + + for (int j = (nd1234 + nd22 + nd23 + nd24 + nd33 + nd34 + nd44); j < nd; j++) + newpodcoeff[j] = podcoeff[j] / (natom * natom); + + // compute energy and effective coefficients + eng_vdwl = podptr->calculate_energy(energycoeff, forcecoeff, gd, gdall, newpodcoeff); + + for (int ii = 0; ii < inum; ii++) { + int i = ilist[ii]; + + // get neighbor pairs for atom i + + lammpsNeighPairs(x, firstneigh, type, map, numneigh, i); + + // compute atomic force for atom i + + podptr->calculate_force(f, forcecoeff, rij, tmpmem, numneighsum, typeai, idxi, ai, aj, ti, tj, + 1, nij); + } + + if (vflag_fdotr) virial_fdotr_compute(); +} + +/* ---------------------------------------------------------------------- + global settings +------------------------------------------------------------------------- */ + +void PairPOD::settings(int narg, char ** /* arg */) +{ + if (narg > 0) error->all(FLERR, "Pair style pod accepts no arguments"); +} + +/* ---------------------------------------------------------------------- + set coeffs for one or more type pairs +------------------------------------------------------------------------- */ + +void PairPOD::coeff(int narg, char **arg) +{ + const int np1 = atom->ntypes + 1; + memory->destroy(setflag); + memory->destroy(cutsq); + memory->create(setflag, np1, np1, "pair:setflag"); + memory->create(cutsq, np1, np1, "pair:cutsq"); + delete[] map; + map = new int[np1]; + allocated = 1; + + if (narg < 4) utils::missing_cmd_args(FLERR, "pair_coeff", error); + map_element2type(narg - 4, arg + 4); + + std::string pod_file = std::string(arg[2]); // pod input file + std::string coeff_file = std::string(arg[3]); // coefficient input file + + delete podptr; + podptr = new MLPOD(lmp, pod_file, coeff_file); + + if (coeff_file != "") { + memory->destroy(podcoeff); + memory->destroy(newpodcoeff); + memory->destroy(energycoeff); + memory->destroy(forcecoeff); + memory->destroy(gd); + memory->destroy(gdall); + memory->create(podcoeff, podptr->pod.nd, "pair:podcoeff"); + memory->create(newpodcoeff, podptr->pod.nd, "pair:newpodcoeff"); + memory->create(energycoeff, podptr->pod.nd1234, "pair:energycoeff"); + memory->create(forcecoeff, podptr->pod.nd1234, "pair:forcecoeff"); + memory->create(gd, podptr->pod.nd1234, "pair:gd"); + memory->create(gdall, podptr->pod.nd1234, "pair:gdall"); + podptr->podArrayCopy(podcoeff, podptr->pod.coeff, podptr->pod.nd); + podptr->podArrayCopy(newpodcoeff, podptr->pod.coeff, podptr->pod.nd); + } + + for (int ii = 0; ii < np1; ii++) + for (int jj = 0; jj < np1; jj++) cutsq[ii][jj] = podptr->pod.rcut * podptr->pod.rcut; +} + +/* ---------------------------------------------------------------------- + init specific to this pair style +------------------------------------------------------------------------- */ + +void PairPOD::init_style() +{ + if (force->newton_pair == 0) error->all(FLERR, "Pair style pod requires newton pair on"); + + // need a full neighbor list + + neighbor->add_request(this, NeighConst::REQ_FULL); + + // reset flag to print warning about per-atom energies or stresses + peratom_warn = true; +} + +/* ---------------------------------------------------------------------- + init for one type pair i,j and corresponding j,i +------------------------------------------------------------------------- */ + +double PairPOD::init_one(int i, int j) +{ + if (setflag[i][j] == 0) error->all(FLERR, "All pair coeffs are not set"); + return podptr->pod.rcut; +} + +/* ---------------------------------------------------------------------- + memory usage +------------------------------------------------------------------------- */ + +double PairPOD::memory_usage() +{ + double bytes = Pair::memory_usage(); + return bytes; +} + +void PairPOD::free_tempmemory() +{ + memory->destroy(rij); + memory->destroy(idxi); + memory->destroy(ai); + memory->destroy(aj); + memory->destroy(ti); + memory->destroy(tj); + memory->destroy(numneighsum); + memory->destroy(typeai); + memory->destroy(tmpmem); +} + +void PairPOD::allocate_tempmemory() +{ + memory->create(rij, dim * nijmax, "pair:rij"); + memory->create(idxi, nijmax, "pair:idxi"); + memory->create(ai, nijmax, "pair:ai"); + memory->create(aj, nijmax, "pair:aj"); + memory->create(ti, nijmax, "pair:ti"); + memory->create(tj, nijmax, "pair:tj"); + memory->create(numneighsum, nablockmax + 1, "pair:numneighsum"); + memory->create(typeai, nablockmax, "pair:typeai"); + memory->create(tmpmem, szd, "pair:tmpmem"); +} + +void PairPOD::estimate_tempmemory() +{ + int nrbf2 = podptr->pod.nbf2; + int nabf3 = podptr->pod.nabf3; + int nrbf3 = podptr->pod.nrbf3; + int ns2 = podptr->pod.ns2; + int ns3 = podptr->pod.ns3; + + szd = dim * nijmax + (1 + dim) * nijmax * MAX(nrbf2 + ns2, nrbf3 + ns3) + (nabf3 + 1) * 7; + int szsnap = 0; + if (podptr->sna.twojmax > 0) { + szsnap += nijmax * dim; + szsnap += MAX(2 * podptr->sna.idxu_max * nijmax, + 2 * podptr->sna.idxz_max * podptr->sna.ndoubles * + nablockmax); // (Ur, Ui) and (Zr, Zi) + szsnap += 2 * podptr->sna.idxu_max * dim * nijmax; // dUr, dUi + szsnap += MAX(podptr->sna.idxb_max * podptr->sna.ntriples * dim * nijmax, + 2 * podptr->sna.idxu_max * podptr->sna.nelements * + nablockmax); // dblist and (Utotr, Utoti) + } + + szd = MAX(szsnap, szd); + szd = nablockmax * (podptr->pod.nd1234) + szd; +} + +void PairPOD::lammpsNeighPairs(double **x, int **firstneigh, int *atomtypes, int *map, + int *numneigh, int gi) +{ + + double rcutsq = podptr->pod.rcut * podptr->pod.rcut; + + nij = 0; + int itype = map[atomtypes[gi]] + 1; + int m = numneigh[gi]; + typeai[0] = itype; + for (int l = 0; l < m; l++) { // loop over each atom around atom i + int gj = firstneigh[gi][l]; // atom j + double delx = x[gj][0] - x[gi][0]; // xj - xi + double dely = x[gj][1] - x[gi][1]; // xj - xi + double delz = x[gj][2] - x[gi][2]; // xj - xi + double rsq = delx * delx + dely * dely + delz * delz; + if (rsq < rcutsq && rsq > 1e-20) { + rij[nij * 3 + 0] = delx; + rij[nij * 3 + 1] = dely; + rij[nij * 3 + 2] = delz; + idxi[nij] = 0; + ai[nij] = gi; + aj[nij] = gj; + ti[nij] = itype; + tj[nij] = map[atomtypes[gj]] + 1; + nij++; + } + } + + numneighsum[0] = 0; + numneighsum[1] = nij; +} diff --git a/src/ML-POD/pair_pod.h b/src/ML-POD/pair_pod.h new file mode 100644 index 0000000000..62b6e99f3b --- /dev/null +++ b/src/ML-POD/pair_pod.h @@ -0,0 +1,81 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/ Sandia National Laboratories + LAMMPS development team: developers@lammps.org + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifdef PAIR_CLASS +// clang-format off +PairStyle(pod,PairPOD); +// clang-format on +#else + +#ifndef LMP_PAIR_POD_H +#define LMP_PAIR_POD_H + +#include "pair.h" + +namespace LAMMPS_NS { + +class PairPOD : public Pair { + public: + PairPOD(class LAMMPS *); + ~PairPOD() override; + void compute(int, int) override; + + void settings(int, char **) override; + void coeff(int, char **) override; + void init_style() override; + double init_one(int, int) override; + double memory_usage() override; + + int dim; // typically 3 + + double *gd; // global linear descriptors + double *gdall; // global linear descriptors summed over all MPI ranks + double *podcoeff; // POD coefficients + double *newpodcoeff; // normalized POD coefficients + double *energycoeff; // energy coefficients + double *forcecoeff; // force coefficients + + void estimate_tempmemory(); + void free_tempmemory(); + void allocate_tempmemory(); + + void lammpsNeighPairs(double **x, int **firstneigh, int *atomtype, int *map, int *numneigh, + int i); + + protected: + int nablockmax; // maximum number of atoms per computation block + int nij; // number of atom pairs + int nijmax; // maximum number of atom pairs + int szd; // size of tmpmem + + class MLPOD *podptr; + + // temporary arrays for computation blocks + + double *tmpmem; // temporary memory + int *typeai; // types of atoms I only + int *numneighsum; // cumulative sum for an array of numbers of neighbors + double *rij; // (xj - xi) for all pairs (I, J) + int *idxi; // storing linear indices for all pairs (I, J) + int *ai; // IDs of atoms I for all pairs (I, J) + int *aj; // IDs of atoms J for all pairs (I, J) + int *ti; // types of atoms I for all pairs (I, J) + int *tj; // types of atoms J for all pairs (I, J) + + bool peratom_warn; // print warning about missing per-atom energies or stresses +}; + +} // namespace LAMMPS_NS + +#endif +#endif diff --git a/src/ML-QUIP/Install.sh b/src/ML-QUIP/Install.sh index 20174e664a..03f93c14b8 100755 --- a/src/ML-QUIP/Install.sh +++ b/src/ML-QUIP/Install.sh @@ -44,7 +44,7 @@ if (test $1 = 1) then fi if (test -e ../Makefile.package.settings) then - sed -i -e '/^include.*quip.*$/d' ../Makefile.package.settings + sed -i -e '/^[ \t]*include.*quip.*$/d' ../Makefile.package.settings # multiline form needed for BSD sed on Macs sed -i -e '4 i \ include ..\/..\/lib\/quip\/Makefile.lammps\ @@ -58,7 +58,7 @@ elif (test $1 = 0) then fi if (test -e ../Makefile.package.settings) then - sed -i -e '/^include.*quip.*$/d' ../Makefile.package.settings + sed -i -e '/^[ \t]*include.*quip.*$/d' ../Makefile.package.settings fi fi diff --git a/src/ML-SNAP/compute_grid.cpp b/src/ML-SNAP/compute_grid.cpp index 797020013c..d70344e1fb 100644 --- a/src/ML-SNAP/compute_grid.cpp +++ b/src/ML-SNAP/compute_grid.cpp @@ -13,14 +13,10 @@ #include "compute_grid.h" -#include "atom.h" #include "comm.h" #include "domain.h" #include "error.h" -#include "force.h" #include "memory.h" -#include "modify.h" -#include "update.h" #include diff --git a/src/ML-SNAP/compute_grid_local.cpp b/src/ML-SNAP/compute_grid_local.cpp index 6f15186625..36c4d25305 100644 --- a/src/ML-SNAP/compute_grid_local.cpp +++ b/src/ML-SNAP/compute_grid_local.cpp @@ -13,14 +13,10 @@ #include "compute_grid_local.h" -#include "atom.h" #include "comm.h" #include "domain.h" #include "error.h" -#include "force.h" #include "memory.h" -#include "modify.h" -#include "update.h" #include diff --git a/src/ML-SNAP/compute_sna_grid.cpp b/src/ML-SNAP/compute_sna_grid.cpp index f209cf9fe8..2e2f0cbb66 100644 --- a/src/ML-SNAP/compute_sna_grid.cpp +++ b/src/ML-SNAP/compute_sna_grid.cpp @@ -16,13 +16,11 @@ #include "atom.h" #include "comm.h" #include "error.h" -#include "force.h" #include "memory.h" #include "modify.h" #include "sna.h" #include "update.h" -#include #include using namespace LAMMPS_NS; diff --git a/src/ML-SNAP/compute_sna_grid_local.cpp b/src/ML-SNAP/compute_sna_grid_local.cpp index b74fbe59e5..09c989bffb 100644 --- a/src/ML-SNAP/compute_sna_grid_local.cpp +++ b/src/ML-SNAP/compute_sna_grid_local.cpp @@ -16,13 +16,11 @@ #include "atom.h" #include "comm.h" #include "error.h" -#include "force.h" #include "memory.h" #include "modify.h" #include "sna.h" #include "update.h" -#include #include using namespace LAMMPS_NS; diff --git a/src/MOLECULE/angle_cosine.cpp b/src/MOLECULE/angle_cosine.cpp index b547345b1f..86d67f94aa 100644 --- a/src/MOLECULE/angle_cosine.cpp +++ b/src/MOLECULE/angle_cosine.cpp @@ -23,6 +23,7 @@ #include "neighbor.h" #include +#include using namespace LAMMPS_NS; using MathConst::MY_PI; diff --git a/src/MOLECULE/angle_harmonic.cpp b/src/MOLECULE/angle_harmonic.cpp index ddcf44ff45..4d0683b9bc 100644 --- a/src/MOLECULE/angle_harmonic.cpp +++ b/src/MOLECULE/angle_harmonic.cpp @@ -23,6 +23,7 @@ #include "neighbor.h" #include +#include using namespace LAMMPS_NS; using MathConst::DEG2RAD; diff --git a/src/MOLECULE/angle_table.cpp b/src/MOLECULE/angle_table.cpp index 4a89591612..03027700a6 100644 --- a/src/MOLECULE/angle_table.cpp +++ b/src/MOLECULE/angle_table.cpp @@ -405,6 +405,9 @@ void AngleTable::read_table(Table *tb, char *file, char *keyword) reader.skip_line(); for (int i = 0; i < tb->ninput; i++) { line = reader.next_line(); + if (!line) + error->one(FLERR, "Data missing when parsing angle table '{}' line {} of {}.", keyword, i + 1, + tb->ninput); try { ValueTokenizer values(line); values.next_int(); diff --git a/src/MOLECULE/atom_vec_angle.h b/src/MOLECULE/atom_vec_angle.h index 59bca56d82..76ef120176 100644 --- a/src/MOLECULE/atom_vec_angle.h +++ b/src/MOLECULE/atom_vec_angle.h @@ -24,7 +24,7 @@ AtomStyle(angle,AtomVecAngle); namespace LAMMPS_NS { -class AtomVecAngle : public AtomVec { +class AtomVecAngle : virtual public AtomVec { public: AtomVecAngle(class LAMMPS *); ~AtomVecAngle() override; @@ -35,7 +35,7 @@ class AtomVecAngle : public AtomVec { void unpack_restart_init(int) override; void data_atom_post(int) override; - private: + protected: int *num_bond, *num_angle; int **bond_type, **angle_type; int **nspecial; diff --git a/src/MOLECULE/atom_vec_bond.h b/src/MOLECULE/atom_vec_bond.h index ab61089227..7c99829484 100644 --- a/src/MOLECULE/atom_vec_bond.h +++ b/src/MOLECULE/atom_vec_bond.h @@ -24,7 +24,7 @@ AtomStyle(bond,AtomVecBond); namespace LAMMPS_NS { -class AtomVecBond : public AtomVec { +class AtomVecBond : virtual public AtomVec { public: AtomVecBond(class LAMMPS *); ~AtomVecBond() override; @@ -35,7 +35,7 @@ class AtomVecBond : public AtomVec { void unpack_restart_init(int) override; void data_atom_post(int) override; - private: + protected: int *num_bond; int **bond_type; int **nspecial; diff --git a/src/MOLECULE/atom_vec_full.h b/src/MOLECULE/atom_vec_full.h index 91e8085f0d..ed3be02812 100644 --- a/src/MOLECULE/atom_vec_full.h +++ b/src/MOLECULE/atom_vec_full.h @@ -24,7 +24,7 @@ AtomStyle(full,AtomVecFull); namespace LAMMPS_NS { -class AtomVecFull : public AtomVec { +class AtomVecFull : virtual public AtomVec { public: AtomVecFull(class LAMMPS *); ~AtomVecFull() override; @@ -35,7 +35,7 @@ class AtomVecFull : public AtomVec { void unpack_restart_init(int) override; void data_atom_post(int) override; - private: + protected: int *num_bond, *num_angle, *num_dihedral, *num_improper; int **bond_type, **angle_type, **dihedral_type, **improper_type; int **nspecial; diff --git a/src/MOLECULE/atom_vec_molecular.h b/src/MOLECULE/atom_vec_molecular.h index 8f2bb1dfba..50434d0ae0 100644 --- a/src/MOLECULE/atom_vec_molecular.h +++ b/src/MOLECULE/atom_vec_molecular.h @@ -24,7 +24,7 @@ AtomStyle(molecular,AtomVecMolecular); namespace LAMMPS_NS { -class AtomVecMolecular : public AtomVec { +class AtomVecMolecular : virtual public AtomVec { public: AtomVecMolecular(class LAMMPS *); ~AtomVecMolecular() override; @@ -35,7 +35,7 @@ class AtomVecMolecular : public AtomVec { void unpack_restart_init(int) override; void data_atom_post(int) override; - private: + protected: int *num_bond, *num_angle, *num_dihedral, *num_improper; int **bond_type, **angle_type, **dihedral_type, **improper_type; int **nspecial; diff --git a/src/MOLECULE/atom_vec_template.h b/src/MOLECULE/atom_vec_template.h index f812273f0c..9a13ee2029 100644 --- a/src/MOLECULE/atom_vec_template.h +++ b/src/MOLECULE/atom_vec_template.h @@ -24,7 +24,7 @@ AtomStyle(template,AtomVecTemplate); namespace LAMMPS_NS { -class AtomVecTemplate : public AtomVec { +class AtomVecTemplate : virtual public AtomVec { public: AtomVecTemplate(class LAMMPS *); diff --git a/src/MOLECULE/bond_table.cpp b/src/MOLECULE/bond_table.cpp index 0b9cde32e1..5978d63561 100644 --- a/src/MOLECULE/bond_table.cpp +++ b/src/MOLECULE/bond_table.cpp @@ -330,6 +330,9 @@ void BondTable::read_table(Table *tb, char *file, char *keyword) reader.skip_line(); for (int i = 0; i < tb->ninput; i++) { line = reader.next_line(); + if (!line) + error->one(FLERR, "Data missing when parsing bond table '{}' line {} of {}.", keyword, i + 1, + tb->ninput); try { ValueTokenizer values(line); values.next_int(); diff --git a/src/MOLECULE/dihedral_table.cpp b/src/MOLECULE/dihedral_table.cpp index 4ad2a57a46..070d0a6972 100644 --- a/src/MOLECULE/dihedral_table.cpp +++ b/src/MOLECULE/dihedral_table.cpp @@ -1021,6 +1021,9 @@ void DihedralTable::read_table(Table *tb, char *file, char *keyword) for (int i = 0; i < tb->ninput; i++) { line = reader.next_line(); + if (!line) + error->one(FLERR, "Data missing when parsing dihedral table '{}' line {} of {}.", + keyword, i + 1, tb->ninput); try { ValueTokenizer values(line); if (tb->f_unspecified) { diff --git a/src/MOLFILE/Install.sh b/src/MOLFILE/Install.sh index 85885f66b9..3ae4357ade 100755 --- a/src/MOLFILE/Install.sh +++ b/src/MOLFILE/Install.sh @@ -44,7 +44,7 @@ if (test $1 = 1) then fi if (test -e ../Makefile.package.settings) then - sed -i -e '/^include.*molfile.*$/d' ../Makefile.package.settings + sed -i -e '/^[ \t]*include.*molfile.*$/d' ../Makefile.package.settings # multiline form needed for BSD sed on Macs sed -i -e '4 i \ include ..\/..\/lib\/molfile\/Makefile.lammps @@ -58,7 +58,7 @@ elif (test $1 = 0) then fi if (test -e ../Makefile.package.settings) then - sed -i -e '/^include.*molfile.*$/d' ../Makefile.package.settings + sed -i -e '/^[ \t]*include.*molfile.*$/d' ../Makefile.package.settings fi fi diff --git a/src/MSCG/Install.sh b/src/MSCG/Install.sh index 353403c7da..67f0f837ce 100755 --- a/src/MSCG/Install.sh +++ b/src/MSCG/Install.sh @@ -43,7 +43,7 @@ if (test $1 = 1) then fi if (test -e ../Makefile.package.settings) then - sed -i -e '/^include.*mscg.*$/d' ../Makefile.package.settings + sed -i -e '/^[ \t]*include.*mscg.*$/d' ../Makefile.package.settings # multiline form needed for BSD sed on Macs sed -i -e '4 i \ include ..\/..\/lib\/mscg\/Makefile.lammps @@ -57,7 +57,7 @@ elif (test $1 = 0) then fi if (test -e ../Makefile.package.settings) then - sed -i -e '/^include.*mscg.*$/d' ../Makefile.package.settings + sed -i -e '/^[ \t]*include.*mscg.*$/d' ../Makefile.package.settings fi fi diff --git a/src/Makefile b/src/Makefile index 923cc535fd..6f3ece5376 100644 --- a/src/Makefile +++ b/src/Makefile @@ -55,7 +55,7 @@ PACKAGE = \ awpmd \ bocs \ body \ - bpm \ + bpm \ brownian \ cg-dna \ cg-spica \ @@ -99,6 +99,7 @@ PACKAGE = \ misc \ ml-hdnnp \ ml-pace \ + ml-pod \ ml-quip \ ml-rann \ ml-snap \ @@ -228,6 +229,7 @@ PACKLIB = \ molfile \ netcdf \ ml-pace \ + ml-pod \ plumed \ qmmm \ ml-quip \ @@ -238,7 +240,7 @@ PACKLIB = \ PACKSYS = compress latboltz mpiio python -PACKINT = atc awpmd colvars electrode gpu kokkos mesont poems +PACKINT = atc awpmd colvars electrode gpu kokkos mesont ml-pod poems PACKEXT = \ adios \ diff --git a/src/NETCDF/Install.sh b/src/NETCDF/Install.sh index 4d21f0f894..8c70d84fd8 100755 --- a/src/NETCDF/Install.sh +++ b/src/NETCDF/Install.sh @@ -42,7 +42,7 @@ if (test $1 = 1) then fi if (test -e ../Makefile.package.settings) then - sed -i -e '/^include.*netcdf.*$/d' ../Makefile.package.settings + sed -i -e '/^[ \t]*include.*netcdf.*$/d' ../Makefile.package.settings # multiline form needed for BSD sed on Macs sed -i -e '4 i \ include ..\/..\/lib\/netcdf\/Makefile.lammps @@ -57,7 +57,7 @@ elif (test $1 = 0) then fi if (test -e ../Makefile.package.settings) then - sed -i -e '/^include.*netcdf.*$/d' ../Makefile.package.settings + sed -i -e '/^[ \t]*include.*netcdf.*$/d' ../Makefile.package.settings fi fi diff --git a/src/OPENMP/fix_omp.cpp b/src/OPENMP/fix_omp.cpp index 411b16441b..3a249bad82 100644 --- a/src/OPENMP/fix_omp.cpp +++ b/src/OPENMP/fix_omp.cpp @@ -25,7 +25,6 @@ #include "error.h" #include "force.h" #include "neighbor.h" -#include "neigh_request.h" #include "universe.h" #include "update.h" diff --git a/src/OPENMP/pair_brownian_omp.cpp b/src/OPENMP/pair_brownian_omp.cpp index de095bb063..45288f13dd 100644 --- a/src/OPENMP/pair_brownian_omp.cpp +++ b/src/OPENMP/pair_brownian_omp.cpp @@ -197,7 +197,6 @@ void PairBrownianOMP::eval(int iifrom, int iito, ThrData * const thr) double prethermostat; double xl[3],a_sq,a_sh,a_pu,Fbmag; double p1[3],p2[3],p3[3]; - int overlaps = 0; // scale factor for Brownian moments @@ -252,10 +251,6 @@ void PairBrownianOMP::eval(int iifrom, int iito, ThrData * const thr) h_sep = r - 2.0*radi; - // check for overlaps - - if (h_sep < 0.0) overlaps++; - // if less than minimum gap, use minimum gap instead if (r < cut_inner[itype][jtype]) diff --git a/src/OPENMP/pair_brownian_poly_omp.cpp b/src/OPENMP/pair_brownian_poly_omp.cpp index 2d28c47a1d..91a496979d 100644 --- a/src/OPENMP/pair_brownian_poly_omp.cpp +++ b/src/OPENMP/pair_brownian_poly_omp.cpp @@ -187,7 +187,6 @@ void PairBrownianPolyOMP::eval(int iifrom, int iito, ThrData * const thr) RanMars &rng = *random_thr[thr->get_tid()]; double vxmu2f = force->vxmu2f; - int overlaps = 0; double randr; double prethermostat; double xl[3],a_sq,a_sh,a_pu,Fbmag; @@ -248,10 +247,6 @@ void PairBrownianPolyOMP::eval(int iifrom, int iito, ThrData * const thr) h_sep = r - radi-radj; - // check for overlaps - - if (h_sep < 0.0) overlaps++; - // if less than minimum gap, use minimum gap instead if (r < cut_inner[itype][jtype]) diff --git a/src/OPENMP/pair_lubricate_omp.cpp b/src/OPENMP/pair_lubricate_omp.cpp index 260fcdfdc7..2145744a5b 100644 --- a/src/OPENMP/pair_lubricate_omp.cpp +++ b/src/OPENMP/pair_lubricate_omp.cpp @@ -162,8 +162,6 @@ void PairLubricateOMP::eval(int iifrom, int iito, ThrData * const thr) const int * const type = atom->type; const int nlocal = atom->nlocal; - int overlaps = 0; - ilist = list->ilist; numneigh = list->numneigh; firstneigh = list->firstneigh; @@ -317,10 +315,6 @@ void PairLubricateOMP::eval(int iifrom, int iito, ThrData * const thr) h_sep = r - 2.0*radi; - // check for overlaps - - if (h_sep < 0.0) overlaps++; - // if less than the minimum gap use the minimum gap instead if (r < cut_inner[itype][jtype]) diff --git a/src/OPENMP/pair_lubricate_poly_omp.cpp b/src/OPENMP/pair_lubricate_poly_omp.cpp index b4c2380532..5b98ec7b14 100644 --- a/src/OPENMP/pair_lubricate_poly_omp.cpp +++ b/src/OPENMP/pair_lubricate_poly_omp.cpp @@ -163,8 +163,6 @@ void PairLubricatePolyOMP::eval(int iifrom, int iito, ThrData * const thr) const int * const type = atom->type; const int nlocal = atom->nlocal; - int overlaps = 0; - ilist = list->ilist; numneigh = list->numneigh; firstneigh = list->firstneigh; @@ -322,10 +320,6 @@ void PairLubricatePolyOMP::eval(int iifrom, int iito, ThrData * const thr) h_sep = r - radi-radj; - // check for overlaps - - if (h_sep < 0.0) overlaps++; - // if less than the minimum gap use the minimum gap instead if (r < cut_inner[itype][jtype]) diff --git a/src/OPENMP/reaxff_hydrogen_bonds_omp.cpp b/src/OPENMP/reaxff_hydrogen_bonds_omp.cpp index e8db77389f..6e1db5ffe7 100644 --- a/src/OPENMP/reaxff_hydrogen_bonds_omp.cpp +++ b/src/OPENMP/reaxff_hydrogen_bonds_omp.cpp @@ -56,7 +56,6 @@ namespace ReaxFF { int start_j, end_j, hb_start_j, hb_end_j; int hblist[MAX_BONDS]; int itr, top; - int num_hb_intrs = 0; double r_jk, theta, cos_theta, sin_xhz4, cos_xhz1, sin_theta2; double e_hb, e_hb_thr = 0.0, exp_hb2, exp_hb3, CEhb1, CEhb2, CEhb3; rvec dcos_theta_di, dcos_theta_dj, dcos_theta_dk; @@ -140,7 +139,6 @@ namespace ReaxFF { type_i = system->my_atoms[i].type; if (type_i < 0) continue; hbp = &(system->reax_param.hbp[type_i][type_j][type_k]); - ++num_hb_intrs; Calculate_Theta(pbond_ij->dvec, pbond_ij->d, dvec_jk, r_jk, &theta, &cos_theta); diff --git a/src/OPT/pair_ilp_graphene_hbn_opt.cpp b/src/OPT/pair_ilp_graphene_hbn_opt.cpp index b93979b3f7..586c44be08 100644 --- a/src/OPT/pair_ilp_graphene_hbn_opt.cpp +++ b/src/OPT/pair_ilp_graphene_hbn_opt.cpp @@ -23,17 +23,15 @@ #include "atom.h" #include "citeme.h" -#include "comm.h" #include "error.h" #include "force.h" #include "interlayer_taper.h" #include "memory.h" #include "neigh_list.h" -#include "neigh_request.h" #include "neighbor.h" #include -#include +#include using namespace LAMMPS_NS; using namespace InterLayer; diff --git a/src/OPT/pair_ilp_tmd_opt.cpp b/src/OPT/pair_ilp_tmd_opt.cpp index 4a394ea5b8..834f2a0c9f 100644 --- a/src/OPT/pair_ilp_tmd_opt.cpp +++ b/src/OPT/pair_ilp_tmd_opt.cpp @@ -33,17 +33,10 @@ #include "pair_ilp_tmd_opt.h" #include "atom.h" -#include "citeme.h" #include "comm.h" -#include "error.h" -#include "force.h" #include "interlayer_taper.h" #include "memory.h" -#include "neigh_list.h" -#include "neigh_request.h" -#include "neighbor.h" -#include #include using namespace LAMMPS_NS; diff --git a/src/OPT/pair_saip_metal_opt.cpp b/src/OPT/pair_saip_metal_opt.cpp index d63294a5c4..e64b3a189e 100644 --- a/src/OPT/pair_saip_metal_opt.cpp +++ b/src/OPT/pair_saip_metal_opt.cpp @@ -34,17 +34,10 @@ #include "pair_saip_metal_opt.h" #include "atom.h" -#include "citeme.h" #include "comm.h" -#include "error.h" -#include "force.h" #include "interlayer_taper.h" #include "memory.h" -#include "neigh_list.h" -#include "neigh_request.h" -#include "neighbor.h" -#include #include using namespace LAMMPS_NS; diff --git a/src/PERI/atom_vec_peri.h b/src/PERI/atom_vec_peri.h index e3072d127d..4e05a1728b 100644 --- a/src/PERI/atom_vec_peri.h +++ b/src/PERI/atom_vec_peri.h @@ -24,7 +24,7 @@ AtomStyle(peri,AtomVecPeri); namespace LAMMPS_NS { -class AtomVecPeri : public AtomVec { +class AtomVecPeri : virtual public AtomVec { public: AtomVecPeri(class LAMMPS *); diff --git a/src/PERI/fix_peri_neigh.cpp b/src/PERI/fix_peri_neigh.cpp index 71542b78c5..3d965b7280 100644 --- a/src/PERI/fix_peri_neigh.cpp +++ b/src/PERI/fix_peri_neigh.cpp @@ -27,7 +27,6 @@ #include "comm.h" #include "neighbor.h" #include "neigh_list.h" -#include "neigh_request.h" #include "pair.h" #include "lattice.h" #include "memory.h" diff --git a/src/PHONON/third_order.cpp b/src/PHONON/third_order.cpp index b7bba13c9f..4a8948de77 100644 --- a/src/PHONON/third_order.cpp +++ b/src/PHONON/third_order.cpp @@ -34,7 +34,6 @@ #include "memory.h" #include "modify.h" #include "neigh_list.h" -#include "neigh_request.h" #include "neighbor.h" #include "pair.h" #include "timer.h" diff --git a/src/PLUGIN/Install.sh b/src/PLUGIN/Install.sh index 0df642193e..86de36d7df 100755 --- a/src/PLUGIN/Install.sh +++ b/src/PLUGIN/Install.sh @@ -44,7 +44,7 @@ if (test $1 = 1) then fi if (test -e ../Makefile.package.settings) then - sed -i -e '/^include.*plugin.*$/d' ../Makefile.package.settings + sed -i -e '/^[ \t]*include.*plugin.*$/d' ../Makefile.package.settings # multiline form needed for BSD sed on Macs sed -i -e '4 i \ include ..\/..\/lib\/plugin\/Makefile.lammps @@ -58,7 +58,7 @@ elif (test $1 = 0) then fi if (test -e ../Makefile.package.settings) then - sed -i -e '/^include.*plugin.*$/d' ../Makefile.package.settings + sed -i -e '/^[ \t]*include.*plugin.*$/d' ../Makefile.package.settings fi fi diff --git a/src/PLUGIN/plugin.cpp b/src/PLUGIN/plugin.cpp index 6cb8c14b8a..f4a0903be4 100644 --- a/src/PLUGIN/plugin.cpp +++ b/src/PLUGIN/plugin.cpp @@ -21,7 +21,6 @@ #include "force.h" #include "input.h" #include "modify.h" -#include "region.h" #include #include diff --git a/src/PLUMED/Install.sh b/src/PLUMED/Install.sh index f879d42feb..500a55ec77 100755 --- a/src/PLUMED/Install.sh +++ b/src/PLUMED/Install.sh @@ -45,7 +45,7 @@ if (test $1 = 1) then fi if (test -e ../Makefile.package.settings) then - sed -i -e '/^include.*plumed.*$/d' ../Makefile.package.settings + sed -i -e '/^[ \t]*include.*plumed.*$/d' ../Makefile.package.settings # multiline form needed for BSD sed on Macs sed -i -e '4 i \ include ..\/..\/lib\/plumed\/Makefile.lammps @@ -59,7 +59,7 @@ elif (test $1 = 0) then fi if (test -e ../Makefile.package.settings) then - sed -i -e '/^include.*plumed.*$/d' ../Makefile.package.settings + sed -i -e '/^[ \t]*include.*plumed.*$/d' ../Makefile.package.settings fi fi diff --git a/src/POEMS/Install.sh b/src/POEMS/Install.sh index be407d76f0..37f8404738 100755 --- a/src/POEMS/Install.sh +++ b/src/POEMS/Install.sh @@ -44,7 +44,7 @@ if (test $1 = 1) then fi if (test -e ../Makefile.package.settings) then - sed -i -e '/^include.*poems.*$/d' ../Makefile.package.settings + sed -i -e '/^[ \t]*include.*poems.*$/d' ../Makefile.package.settings # multiline form needed for BSD sed on Macs sed -i -e '4 i \ include ..\/..\/lib\/poems\/Makefile.lammps @@ -58,7 +58,7 @@ elif (test $1 = 0) then fi if (test -e ../Makefile.package.settings) then - sed -i -e '/^include.*poems.*$/d' ../Makefile.package.settings + sed -i -e '/^[ \t]*include.*poems.*$/d' ../Makefile.package.settings fi fi diff --git a/src/PYTHON/Install.sh b/src/PYTHON/Install.sh index 8c394d43ad..b23cf574f8 100755 --- a/src/PYTHON/Install.sh +++ b/src/PYTHON/Install.sh @@ -50,7 +50,7 @@ if (test $1 = 1) then fi if (test -e ../Makefile.package.settings) then - sed -i -e '/^include.*python.*$/d' ../Makefile.package.settings + sed -i -e '/^[ \t]*include.*python.*$/d' ../Makefile.package.settings # multiline form needed for BSD sed on Macs sed -i -e '4 i \ include ..\/..\/lib\/python\/Makefile.lammps @@ -65,7 +65,7 @@ elif (test $1 = 0) then fi if (test -e ../Makefile.package.settings) then - sed -i -e '/^include.*python.*$/d' ../Makefile.package.settings + sed -i -e '/^[ \t]*include.*python.*$/d' ../Makefile.package.settings fi fi diff --git a/src/PYTHON/python_impl.cpp b/src/PYTHON/python_impl.cpp index 92668674d1..9177381a35 100644 --- a/src/PYTHON/python_impl.cpp +++ b/src/PYTHON/python_impl.cpp @@ -112,37 +112,42 @@ PythonImpl::~PythonImpl() void PythonImpl::command(int narg, char **arg) { - if (narg < 2) error->all(FLERR, "Invalid python command"); + if (narg < 2) utils::missing_cmd_args(FLERR, "python", error); // if invoke is only keyword, invoke the previously defined function if (narg == 2 && strcmp(arg[1], "invoke") == 0) { int ifunc = find(arg[0]); - if (ifunc < 0) error->all(FLERR, "Python invoke of undefined function"); + if (ifunc < 0) error->all(FLERR, "Python invoke of unknown function: {}", arg[0]); char *str = nullptr; if (pfuncs[ifunc].noutput) { str = input->variable->pythonstyle(pfuncs[ifunc].ovarname, pfuncs[ifunc].name); - if (!str) error->all(FLERR, "Python variable does not match Python function"); + if (!str) + error->all(FLERR, + "Python variable {} does not match variable {} " + "registered with Python function {}", + arg[0], pfuncs[ifunc].ovarname, pfuncs[ifunc].name); } invoke_function(ifunc, str); return; } - // if source is only keyword, execute the python code + // if source is only keyword, execute the python code in file - if (narg == 3 && strcmp(arg[1], "source") == 0) { - int err; + if ((narg > 1) && (strcmp(arg[0], "source") == 0)) { + int err = -1; - FILE *fp = fopen(arg[2], "r"); - if (fp == nullptr) + if ((narg > 2) && (strcmp(arg[1], "here") == 0)) { err = execute_string(arg[2]); - else - err = execute_file(arg[2]); - - if (fp) fclose(fp); - if (err) error->all(FLERR, "Could not process Python source command"); + } else { + if (platform::file_is_readable(arg[1])) + err = execute_file(arg[1]); + else + error->all(FLERR, "Could not open python source file {} for processing", arg[1]); + } + if (err) error->all(FLERR, "Failure in python source command"); return; } @@ -162,48 +167,51 @@ void PythonImpl::command(int narg, char **arg) int iarg = 1; while (iarg < narg) { if (strcmp(arg[iarg], "input") == 0) { - if (iarg + 2 > narg) error->all(FLERR, "Invalid python command"); + if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "python input", error); ninput = utils::inumeric(FLERR, arg[iarg + 1], false, lmp); - if (ninput < 0) error->all(FLERR, "Invalid python command"); + if (ninput < 0) error->all(FLERR, "Invalid number of python input arguments: {}", ninput); iarg += 2; delete[] istr; istr = new char *[ninput]; - if (iarg + ninput > narg) error->all(FLERR, "Invalid python command"); + if (iarg + ninput > narg) utils::missing_cmd_args(FLERR, "python input", error); for (int i = 0; i < ninput; i++) istr[i] = arg[iarg + i]; iarg += ninput; } else if (strcmp(arg[iarg], "return") == 0) { - if (iarg + 2 > narg) error->all(FLERR, "Invalid python command"); + if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "python return", error); noutput = 1; ostr = arg[iarg + 1]; iarg += 2; } else if (strcmp(arg[iarg], "format") == 0) { - if (iarg + 2 > narg) error->all(FLERR, "Invalid python command"); + if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "python format", error); format = utils::strdup(arg[iarg + 1]); iarg += 2; } else if (strcmp(arg[iarg], "length") == 0) { - if (iarg + 2 > narg) error->all(FLERR, "Invalid python command"); + if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "python length", error); length_longstr = utils::inumeric(FLERR, arg[iarg + 1], false, lmp); - if (length_longstr <= 0) error->all(FLERR, "Invalid python command"); + if (length_longstr <= 0) error->all(FLERR, "Invalid python return value length"); iarg += 2; } else if (strcmp(arg[iarg], "file") == 0) { - if (iarg + 2 > narg) error->all(FLERR, "Invalid python command"); + if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "python file", error); delete[] pyfile; pyfile = utils::strdup(arg[iarg + 1]); iarg += 2; } else if (strcmp(arg[iarg], "here") == 0) { - if (iarg + 2 > narg) error->all(FLERR, "Invalid python command"); + if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "python here", error); herestr = arg[iarg + 1]; iarg += 2; } else if (strcmp(arg[iarg], "exists") == 0) { existflag = 1; iarg++; } else - error->all(FLERR, "Invalid python command"); + error->all(FLERR, "Unknown python command keyword: {}", arg[iarg]); } - if (pyfile && herestr) error->all(FLERR, "Invalid python command"); - if (pyfile && existflag) error->all(FLERR, "Invalid python command"); - if (herestr && existflag) error->all(FLERR, "Invalid python command"); + if (pyfile && herestr) + error->all(FLERR, "Must not use python 'file' and 'here' keywords at the same time"); + if (pyfile && existflag) + error->all(FLERR, "Must not use python 'file' and 'exists' keywords at the same time"); + if (herestr && existflag) + error->all(FLERR, "Must not use python 'here' and 'exists' keywords at the same time"); // create or overwrite entry in pfuncs vector with name = arg[0] @@ -221,23 +229,21 @@ void PythonImpl::command(int narg, char **arg) if (fp == nullptr) { PyUtils::Print_Errors(); - error->all(FLERR, "Could not open Python file"); + error->all(FLERR, "Could not open Python file: {}", pyfile); } int err = PyRun_SimpleFile(fp, pyfile); - if (err) { PyUtils::Print_Errors(); - error->all(FLERR, "Could not process Python file"); + error->all(FLERR, "Could not process Python file: {}", pyfile); } - fclose(fp); + } else if (herestr) { int err = PyRun_SimpleString(herestr); - if (err) { PyUtils::Print_Errors(); - error->all(FLERR, "Could not process Python string"); + error->all(FLERR, "Could not process Python string: {}", herestr); } } @@ -280,14 +286,17 @@ void PythonImpl::invoke_function(int ifunc, char *result) int ninput = pfuncs[ifunc].ninput; PyObject *pArgs = PyTuple_New(ninput); - if (!pArgs) { error->all(FLERR, "Could not create Python function arguments"); } + if (!pArgs) + error->all(FLERR, "Could not prepare arguments for Python function {}", pfuncs[ifunc].name); for (int i = 0; i < ninput; i++) { int itype = pfuncs[ifunc].itype[i]; if (itype == INT) { if (pfuncs[ifunc].ivarflag[i]) { str = input->variable->retrieve(pfuncs[ifunc].svalue[i]); - if (!str) { error->all(FLERR, "Could not evaluate Python function input variable"); } + if (!str) + error->all(FLERR, "Could not evaluate Python function {} input variable: {}", + pfuncs[ifunc].name, pfuncs[ifunc].svalue[i]); pValue = PY_INT_FROM_LONG(atoi(str)); } else { pValue = PY_INT_FROM_LONG(pfuncs[ifunc].ivalue[i]); @@ -295,7 +304,9 @@ void PythonImpl::invoke_function(int ifunc, char *result) } else if (itype == DOUBLE) { if (pfuncs[ifunc].ivarflag[i]) { str = input->variable->retrieve(pfuncs[ifunc].svalue[i]); - if (!str) { error->all(FLERR, "Could not evaluate Python function input variable"); } + if (!str) + error->all(FLERR, "Could not evaluate Python function {} input variable: {}", + pfuncs[ifunc].name, pfuncs[ifunc].svalue[i]); pValue = PyFloat_FromDouble(atof(str)); } else { pValue = PyFloat_FromDouble(pfuncs[ifunc].dvalue[i]); @@ -303,7 +314,9 @@ void PythonImpl::invoke_function(int ifunc, char *result) } else if (itype == STRING) { if (pfuncs[ifunc].ivarflag[i]) { str = input->variable->retrieve(pfuncs[ifunc].svalue[i]); - if (!str) { error->all(FLERR, "Could not evaluate Python function input variable"); } + if (!str) + error->all(FLERR, "Could not evaluate Python function {} input variable: {}", + pfuncs[ifunc].name, pfuncs[ifunc].svalue[i]); pValue = PY_STRING_FROM_STRING(str); } else { pValue = PY_STRING_FROM_STRING(pfuncs[ifunc].svalue[i]); @@ -311,7 +324,7 @@ void PythonImpl::invoke_function(int ifunc, char *result) } else if (itype == PTR) { pValue = PY_VOID_POINTER(lmp); } else { - error->all(FLERR, "Unsupported variable type"); + error->all(FLERR, "Unsupported variable type: {}", itype); } PyTuple_SetItem(pArgs, i, pValue); } @@ -324,7 +337,7 @@ void PythonImpl::invoke_function(int ifunc, char *result) if (!pValue) { PyUtils::Print_Errors(); - error->one(FLERR, "Python function evaluation failed"); + error->one(FLERR, "Python evaluation of function {} failed", pfuncs[ifunc].name); } // function returned a value @@ -365,9 +378,9 @@ int PythonImpl::variable_match(const char *name, const char *varname, int numeri { int ifunc = find(name); if (ifunc < 0) return -1; - if (pfuncs[ifunc].noutput == 0) return -1; - if (strcmp(pfuncs[ifunc].ovarname, varname) != 0) return -1; - if (numeric && pfuncs[ifunc].otype == STRING) return -1; + if (pfuncs[ifunc].noutput == 0) return -2; + if (strcmp(pfuncs[ifunc].ovarname, varname) != 0) return -3; + if (numeric && pfuncs[ifunc].otype == STRING) return -4; return ifunc; } @@ -400,9 +413,10 @@ int PythonImpl::create_entry(char *name, int ninput, int noutput, int length_lon pfuncs[ifunc].noutput = noutput; if (!format && ninput + noutput) - error->all(FLERR, "Invalid python command"); + error->all(FLERR, "Missing python format keyword"); else if (format && ((int) strlen(format) != ninput + noutput)) - error->all(FLERR, "Invalid python command"); + error->all(FLERR, "Input/output arguments ({}) and format characters ({}) are inconsistent", + (ninput + noutput), strlen(format)); // process inputs as values or variables @@ -448,7 +462,7 @@ int PythonImpl::create_entry(char *name, int ninput, int noutput, int length_lon if (strcmp(istr[i], "SELF") != 0) error->all(FLERR, "Invalid python command"); } else - error->all(FLERR, "Invalid python command"); + error->all(FLERR, "Invalid python format character: {}", type); } // process output as value or variable @@ -465,7 +479,7 @@ int PythonImpl::create_entry(char *name, int ninput, int noutput, int length_lon else if (type == 's') pfuncs[ifunc].otype = STRING; else - error->all(FLERR, "Invalid python command"); + error->all(FLERR, "Invalid python return format character: {}", type); if (length_longstr) { if (pfuncs[ifunc].otype != STRING) @@ -486,7 +500,9 @@ int PythonImpl::create_entry(char *name, int ninput, int noutput, int length_lon int PythonImpl::execute_string(char *cmd) { PyUtils::GIL lock; - return PyRun_SimpleString(cmd); + int err = PyRun_SimpleString(cmd); + if (err) PyUtils::Print_Errors(); + return err; } /* ---------------------------------------------------------------------- */ @@ -498,6 +514,7 @@ int PythonImpl::execute_file(char *fname) PyUtils::GIL lock; int err = PyRun_SimpleFile(fp, fname); + if (err) PyUtils::Print_Errors(); if (fp) fclose(fp); return err; diff --git a/src/QEQ/fix_qeq.cpp b/src/QEQ/fix_qeq.cpp index fd02f8f240..c8112ca24d 100644 --- a/src/QEQ/fix_qeq.cpp +++ b/src/QEQ/fix_qeq.cpp @@ -60,7 +60,7 @@ FixQEq::FixQEq(LAMMPS *lmp, int narg, char **arg) : b_t(nullptr), p(nullptr), q(nullptr), r(nullptr), d(nullptr), qf(nullptr), q1(nullptr), q2(nullptr), qv(nullptr) { - if (narg < 8) error->all(FLERR,"Illegal fix qeq command"); + if (narg < 8) utils::missing_cmd_args(FLERR, "fix " + std::string(style), error); scalar_flag = 1; extscalar = 0; diff --git a/src/QEQ/fix_qeq_dynamic.cpp b/src/QEQ/fix_qeq_dynamic.cpp index 8e66d7e25f..3bc0650ef1 100644 --- a/src/QEQ/fix_qeq_dynamic.cpp +++ b/src/QEQ/fix_qeq_dynamic.cpp @@ -1,4 +1,3 @@ -// clang-format off /* ---------------------------------------------------------------------- LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator https://www.lammps.org/, Sandia National Laboratories @@ -34,8 +33,7 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -FixQEqDynamic::FixQEqDynamic(LAMMPS *lmp, int narg, char **arg) : - FixQEq(lmp, narg, arg) +FixQEqDynamic::FixQEqDynamic(LAMMPS *lmp, int narg, char **arg) : FixQEq(lmp, narg, arg) { qdamp = 0.10; qstep = 0.02; @@ -43,19 +41,20 @@ FixQEqDynamic::FixQEqDynamic(LAMMPS *lmp, int narg, char **arg) : int iarg = 8; while (iarg < narg) { - if (strcmp(arg[iarg],"qdamp") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix qeq/dynamic command"); - qdamp = atof(arg[iarg+1]); + if (strcmp(arg[iarg], "qdamp") == 0) { + if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "fix qeq/dynamic qdamp", error); + qdamp = utils::numeric(FLERR, arg[iarg + 1], false, lmp); iarg += 2; - } else if (strcmp(arg[iarg],"qstep") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix qeq/dynamic command"); - qstep = atof(arg[iarg+1]); + } else if (strcmp(arg[iarg], "qstep") == 0) { + if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "fix qeq/dynamic qstep", error); + qstep = utils::numeric(FLERR, arg[iarg + 1], false, lmp); iarg += 2; - } else if (strcmp(arg[iarg],"warn") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix qeq/dynamic command"); - maxwarn = utils::logical(FLERR,arg[iarg+1],false,lmp); + } else if (strcmp(arg[iarg], "warn") == 0) { + if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "fix qeq/dynamic warn", error); + maxwarn = utils::logical(FLERR, arg[iarg + 1], false, lmp); iarg += 2; - } else error->all(FLERR,"Illegal fix qeq/dynamic command"); + } else + error->all(FLERR, "Unknown fix qeq/dynamic keyword: {}", arg[iarg]); } } @@ -69,16 +68,17 @@ void FixQEqDynamic::init() if (tolerance < 1e-4) if (comm->me == 0) - error->warning(FLERR,"Fix qeq/dynamic tolerance may be too small for damped dynamics"); + error->warning(FLERR, "Fix qeq/dynamic tolerance {} may be too small for damped dynamics", + tolerance); } /* ---------------------------------------------------------------------- */ void FixQEqDynamic::pre_force(int /*vflag*/) { - int i,ii,iloop,inum,*ilist; - double qmass,dtq2; - double enegchkall,enegmaxall; + int i, ii, iloop, inum, *ilist; + double qmass, dtq2; + double enegchkall, enegmaxall; double *q = atom->q; int *mask = atom->mask; @@ -94,20 +94,20 @@ void FixQEqDynamic::pre_force(int /*vflag*/) inum = list->inum; ilist = list->ilist; - qmass = 0.016; - dtq2 = 0.5*qstep*qstep/qmass; + qmass = 0.016; + dtq2 = 0.5 * qstep * qstep / qmass; for (ii = 0; ii < inum; ii++) { i = ilist[ii]; q1[i] = q2[i] = qf[i] = 0.0; } - for (iloop = 0; iloop < maxiter; iloop ++) { + for (iloop = 0; iloop < maxiter; iloop++) { for (ii = 0; ii < inum; ii++) { i = ilist[ii]; if (mask[i] & groupbit) { - q1[i] += qf[i]*dtq2 - qdamp*q1[i]; - q[i] += q1[i]; + q1[i] += qf[i] * dtq2 - qdamp * q1[i]; + q[i] += q1[i]; } } @@ -119,34 +119,32 @@ void FixQEqDynamic::pre_force(int /*vflag*/) enegchk = enegmax = 0.0; - for (ii = 0; ii < inum ; ii++) { + for (ii = 0; ii < inum; ii++) { i = ilist[ii]; if (mask[i] & groupbit) { - q2[i] = enegtot-qf[i]; - enegmax = MAX(enegmax,fabs(q2[i])); + q2[i] = enegtot - qf[i]; + enegmax = MAX(enegmax, fabs(q2[i])); enegchk += fabs(q2[i]); qf[i] = q2[i]; } } - MPI_Allreduce(&enegchk,&enegchkall,1,MPI_DOUBLE,MPI_SUM,world); - enegchk = enegchkall/ngroup; - MPI_Allreduce(&enegmax,&enegmaxall,1,MPI_DOUBLE,MPI_MAX,world); + MPI_Allreduce(&enegchk, &enegchkall, 1, MPI_DOUBLE, MPI_SUM, world); + enegchk = enegchkall / ngroup; + MPI_Allreduce(&enegmax, &enegmaxall, 1, MPI_DOUBLE, MPI_MAX, world); enegmax = enegmaxall; - if ((enegchk <= tolerance) && (enegmax <= 100.0*tolerance)) break; + if ((enegchk <= tolerance) && (enegmax <= 100.0 * tolerance)) break; for (ii = 0; ii < inum; ii++) { i = ilist[ii]; - if (mask[i] & groupbit) - q1[i] += qf[i]*dtq2 - qdamp*q1[i]; + if (mask[i] & groupbit) q1[i] += qf[i] * dtq2 - qdamp * q1[i]; } } matvecs = iloop; if ((comm->me == 0) && maxwarn && (iloop >= maxiter)) - error->warning(FLERR,"Charges did not converge at step {}: {}", - update->ntimestep,enegchk); + error->warning(FLERR, "Charges did not converge at step {}: {}", update->ntimestep, enegchk); if (force->kspace) force->kspace->qsum_qsq(); } @@ -172,8 +170,7 @@ double FixQEqDynamic::compute_eneg() for (ii = 0; ii < inum; ii++) { i = ilist[ii]; - if (mask[i] & groupbit) - qf[i] = 0.0; + if (mask[i] & groupbit) qf[i] = 0.0; } // communicating charge force to all nodes, first forward then reverse @@ -198,12 +195,12 @@ double FixQEqDynamic::compute_eneg() delr[0] = x[i][0] - x[j][0]; delr[1] = x[i][1] - x[j][1]; delr[2] = x[i][2] - x[j][2]; - rsq = delr[0]*delr[0] + delr[1]*delr[1] + delr[2]*delr[2]; + rsq = delr[0] * delr[0] + delr[1] * delr[1] + delr[2] * delr[2]; if (rsq > cutoff_sq) continue; r = sqrt(rsq); - rinv = 1.0/r; + rinv = 1.0 / r; qf[i] += q[j] * rinv; qf[j] += q[i] * rinv; } @@ -218,20 +215,17 @@ double FixQEqDynamic::compute_eneg() eneg = enegtot = 0.0; for (ii = 0; ii < inum; ii++) { i = ilist[ii]; - if (mask[i] & groupbit) - eneg += qf[i]; + if (mask[i] & groupbit) eneg += qf[i]; } - MPI_Allreduce(&eneg,&enegtot,1,MPI_DOUBLE,MPI_SUM,world); + MPI_Allreduce(&eneg, &enegtot, 1, MPI_DOUBLE, MPI_SUM, world); return enegtot; - } /* ---------------------------------------------------------------------- */ -int FixQEqDynamic::pack_forward_comm(int n, int *list, double *buf, - int /*pbc_flag*/, int * /*pbc*/) +int FixQEqDynamic::pack_forward_comm(int n, int *list, double *buf, int /*pbc_flag*/, int * /*pbc*/) { - int m=0; + int m = 0; if (pack_flag == 1) for (m = 0; m < n; m++) buf[m] = atom->q[list[m]]; diff --git a/src/QEQ/fix_qeq_fire.cpp b/src/QEQ/fix_qeq_fire.cpp index b84cb3ca83..34ef51d947 100644 --- a/src/QEQ/fix_qeq_fire.cpp +++ b/src/QEQ/fix_qeq_fire.cpp @@ -1,4 +1,3 @@ -// clang-format off /* ---------------------------------------------------------------------- LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator https://www.lammps.org/, Sandia National Laboratories @@ -45,7 +44,7 @@ using namespace FixConst; /* ---------------------------------------------------------------------- */ FixQEqFire::FixQEqFire(LAMMPS *lmp, int narg, char **arg) : - FixQEq(lmp, narg, arg), comb(nullptr), comb3(nullptr) + FixQEq(lmp, narg, arg), comb(nullptr), comb3(nullptr) { qdamp = 0.20; qstep = 0.20; @@ -53,19 +52,20 @@ FixQEqFire::FixQEqFire(LAMMPS *lmp, int narg, char **arg) : int iarg = 8; while (iarg < narg) { - if (strcmp(arg[iarg],"qdamp") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix qeq/fire command"); - qdamp = atof(arg[iarg+1]); + if (strcmp(arg[iarg], "qdamp") == 0) { + if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "fix qeq/fire qdamp", error); + qdamp = utils::numeric(FLERR, arg[iarg + 1], false, lmp); iarg += 2; - } else if (strcmp(arg[iarg],"qstep") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix qeq/fire command"); - qstep = atof(arg[iarg+1]); + } else if (strcmp(arg[iarg], "qstep") == 0) { + if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "fix qeq/fire qstep", error); + qstep = utils::numeric(FLERR, arg[iarg + 1], false, lmp); iarg += 2; - } else if (strcmp(arg[iarg],"warn") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix qeq/fire command"); - maxwarn = utils::logical(FLERR,arg[iarg+1],false,lmp); + } else if (strcmp(arg[iarg], "warn") == 0) { + if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "fix qeq/fire warn", error); + maxwarn = utils::logical(FLERR, arg[iarg + 1], false, lmp); iarg += 2; - } else error->all(FLERR,"Illegal fix qeq/fire command"); + } else + error->all(FLERR, "Unknown fix qeq/fire keyword: {}", arg[iarg]); } } @@ -79,10 +79,11 @@ void FixQEqFire::init() if (tolerance < 1e-4) if (comm->me == 0) - error->warning(FLERR,"Fix qeq/fire tolerance may be too small for damped fires"); + error->warning(FLERR, "Fix qeq/fire tolerance {} may be too small for damped fires", + tolerance); - comb3 = dynamic_cast(force->pair_match("^comb3",0)); - if (!comb3) comb = dynamic_cast(force->pair_match("^comb",0)); + comb3 = dynamic_cast(force->pair_match("^comb3", 0)); + if (!comb3) comb = dynamic_cast(force->pair_match("^comb", 0)); } /* ---------------------------------------------------------------------- */ @@ -90,13 +91,13 @@ void FixQEqFire::init() void FixQEqFire::pre_force(int /*vflag*/) { int inum, *ilist; - int i,ii,iloop; + int i, ii, iloop; double *q = atom->q; - double vmax,vdotf,vdotfall,vdotv,vdotvall,fdotf,fdotfall; - double scale1,scale2; - double dtvone,dtv; - double enegtot,enegchk; + double vmax, vdotf, vdotfall, vdotv, vdotvall, fdotf, fdotfall; + double scale1, scale2; + double dtvone, dtv; + double enegtot, enegchk; double alpha = qdamp; double dt, dtmax; double enegchkall; @@ -118,15 +119,15 @@ void FixQEqFire::pre_force(int /*vflag*/) dt = qstep; dtmax = TMAX * dt; - for (iloop = 0; iloop < maxiter; iloop ++) { + for (iloop = 0; iloop < maxiter; iloop++) { pack_flag = 1; comm->forward_comm(this); if (comb) { - comb->yasu_char(qf,igroup); + comb->yasu_char(qf, igroup); enegtot = comb->enegtot / ngroup; } else if (comb3) { - comb3->combqeq(qf,igroup); + comb3->combqeq(qf, igroup); enegtot = comb3->enegtot / ngroup; } else { enegtot = compute_eneg(); @@ -135,7 +136,7 @@ void FixQEqFire::pre_force(int /*vflag*/) for (ii = 0; ii < inum; ii++) { i = ilist[ii]; - qf[i] -= enegtot; // Enforce adiabatic + qf[i] -= enegtot; // Enforce adiabatic } // FIRE minimization algorithm @@ -143,30 +144,32 @@ void FixQEqFire::pre_force(int /*vflag*/) vdotf = 0.0; for (ii = 0; ii < inum; ii++) { i = ilist[ii]; - vdotf += (qv[i]*qf[i]); + vdotf += (qv[i] * qf[i]); } - MPI_Allreduce(&vdotf,&vdotfall,1,MPI_DOUBLE,MPI_SUM,world); + MPI_Allreduce(&vdotf, &vdotfall, 1, MPI_DOUBLE, MPI_SUM, world); if (vdotfall > 0.0) { vdotv = fdotf = 0.0; for (ii = 0; ii < inum; ii++) { i = ilist[ii]; - vdotv += qv[i]*qv[i]; - fdotf += qf[i]*qf[i]; + vdotv += qv[i] * qv[i]; + fdotf += qf[i] * qf[i]; } - MPI_Allreduce(&vdotv,&vdotvall,1,MPI_DOUBLE,MPI_SUM,world); - MPI_Allreduce(&fdotf,&fdotfall,1,MPI_DOUBLE,MPI_SUM,world); + MPI_Allreduce(&vdotv, &vdotvall, 1, MPI_DOUBLE, MPI_SUM, world); + MPI_Allreduce(&fdotf, &fdotfall, 1, MPI_DOUBLE, MPI_SUM, world); scale1 = 1.0 - alpha; - if (fdotfall == 0.0) scale2 = 0.0; - else scale2 = alpha * sqrt(vdotvall/fdotfall); + if (fdotfall == 0.0) + scale2 = 0.0; + else + scale2 = alpha * sqrt(vdotvall / fdotfall); for (ii = 0; ii < inum; ii++) { i = ilist[ii]; - qv[i] = scale1*qv[i] + scale2*qf[i]; + qv[i] = scale1 * qv[i] + scale2 * qf[i]; } if (ntimestep - last_negative > DELAYSTEP) { - dt = MIN(dt*DT_GROW,dtmax); + dt = MIN(dt * DT_GROW, dtmax); alpha *= ALPHA_SHRINK; } } else { @@ -184,10 +187,10 @@ void FixQEqFire::pre_force(int /*vflag*/) double dmax = 0.1; for (ii = 0; ii < inum; ii++) { i = ilist[ii]; - vmax = MAX(fabs(qv[i]),0); - if (dtvone*vmax > dmax) dtvone = dmax/vmax; + vmax = MAX(fabs(qv[i]), 0); + if (dtvone * vmax > dmax) dtvone = dmax / vmax; } - MPI_Allreduce(&dtvone,&dtv,1,MPI_DOUBLE,MPI_MIN,world); + MPI_Allreduce(&dtvone, &dtv, 1, MPI_DOUBLE, MPI_MIN, world); //dtv = dt; // Euler integration step @@ -198,7 +201,7 @@ void FixQEqFire::pre_force(int /*vflag*/) qv[i] += dtv * qf[i]; enegchk += fabs(qf[i]); } - MPI_Allreduce(&enegchk,&enegchkall,1,MPI_DOUBLE,MPI_SUM,world); + MPI_Allreduce(&enegchk, &enegchkall, 1, MPI_DOUBLE, MPI_SUM, world); enegchk = enegchkall / ngroup; if (enegchk < tolerance) break; @@ -206,8 +209,7 @@ void FixQEqFire::pre_force(int /*vflag*/) matvecs = iloop; if ((comm->me == 0) && maxwarn && (iloop >= maxiter)) - error->warning(FLERR,"Charges did not converge at step {}: {}", - update->ntimestep,enegchk); + error->warning(FLERR, "Charges did not converge at step {}: {}", update->ntimestep, enegchk); if (force->kspace) force->kspace->qsum_qsq(); } @@ -233,8 +235,7 @@ double FixQEqFire::compute_eneg() for (ii = 0; ii < inum; ii++) { i = ilist[ii]; - if (mask[i] & groupbit) - qf[i] = 0.0; + if (mask[i] & groupbit) qf[i] = 0.0; } // communicating charge force to all nodes, first forward then reverse @@ -259,12 +260,12 @@ double FixQEqFire::compute_eneg() delr[0] = x[i][0] - x[j][0]; delr[1] = x[i][1] - x[j][1]; delr[2] = x[i][2] - x[j][2]; - rsq = delr[0]*delr[0] + delr[1]*delr[1] + delr[2]*delr[2]; + rsq = delr[0] * delr[0] + delr[1] * delr[1] + delr[2] * delr[2]; if (rsq > cutoff_sq) continue; r = sqrt(rsq); - rinv = 1.0/r; + rinv = 1.0 / r; qf[i] += q[j] * rinv; qf[j] += q[i] * rinv; } @@ -279,18 +280,15 @@ double FixQEqFire::compute_eneg() eneg = enegtot = 0.0; for (ii = 0; ii < inum; ii++) { i = ilist[ii]; - if (mask[i] & groupbit) - eneg += qf[i]; + if (mask[i] & groupbit) eneg += qf[i]; } - MPI_Allreduce(&eneg,&enegtot,1,MPI_DOUBLE,MPI_SUM,world); + MPI_Allreduce(&eneg, &enegtot, 1, MPI_DOUBLE, MPI_SUM, world); return enegtot; - } /* ---------------------------------------------------------------------- */ -int FixQEqFire::pack_forward_comm(int n, int *list, double *buf, - int /*pbc_flag*/, int * /*pbc*/) +int FixQEqFire::pack_forward_comm(int n, int *list, double *buf, int /*pbc_flag*/, int * /*pbc*/) { int m = 0; diff --git a/src/QEQ/fix_qeq_point.cpp b/src/QEQ/fix_qeq_point.cpp index 4f82bea4b5..3eb150559c 100644 --- a/src/QEQ/fix_qeq_point.cpp +++ b/src/QEQ/fix_qeq_point.cpp @@ -1,4 +1,3 @@ -// clang-format off /* ---------------------------------------------------------------------- LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator https://www.lammps.org/, Sandia National Laboratories @@ -35,13 +34,15 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -FixQEqPoint::FixQEqPoint(LAMMPS *lmp, int narg, char **arg) : - FixQEq(lmp, narg, arg) { +FixQEqPoint::FixQEqPoint(LAMMPS *lmp, int narg, char **arg) : FixQEq(lmp, narg, arg) +{ if (narg == 10) { - if (strcmp(arg[8],"warn") == 0) { - maxwarn = utils::logical(FLERR,arg[9],false,lmp); - } else error->all(FLERR,"Illegal fix qeq/point command"); - } else if (narg > 8) error->all(FLERR,"Illegal fix qeq/point command"); + if (strcmp(arg[8], "warn") == 0) { + maxwarn = utils::logical(FLERR, arg[9], false, lmp); + } else + error->all(FLERR, "Illegal fix qeq/point command"); + } else if (narg > 8) + error->all(FLERR, "Illegal fix qeq/point command"); } /* ---------------------------------------------------------------------- */ @@ -53,9 +54,11 @@ void FixQEqPoint::init() neighbor->add_request(this, NeighConst::REQ_FULL); int ntypes = atom->ntypes; - memory->create(shld,ntypes+1,ntypes+1,"qeq:shielding"); + memory->create(shld, ntypes + 1, ntypes + 1, "qeq:shielding"); } +// clang-format off + /* ---------------------------------------------------------------------- */ void FixQEqPoint::pre_force(int /*vflag*/) diff --git a/src/QEQ/fix_qeq_shielded.cpp b/src/QEQ/fix_qeq_shielded.cpp index 1a575e2c8c..6987732048 100644 --- a/src/QEQ/fix_qeq_shielded.cpp +++ b/src/QEQ/fix_qeq_shielded.cpp @@ -1,4 +1,3 @@ -// clang-format off /* ---------------------------------------------------------------------- LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator https://www.lammps.org/, Sandia National Laboratories @@ -36,13 +35,15 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -FixQEqShielded::FixQEqShielded(LAMMPS *lmp, int narg, char **arg) : - FixQEq(lmp, narg, arg) { +FixQEqShielded::FixQEqShielded(LAMMPS *lmp, int narg, char **arg) : FixQEq(lmp, narg, arg) +{ if (narg == 10) { - if (strcmp(arg[8],"warn") == 0) { - maxwarn = utils::logical(FLERR,arg[9],false,lmp); - } else error->all(FLERR,"Illegal fix qeq/shielded command"); - } else if (narg > 8) error->all(FLERR,"Illegal fix qeq/shielded command"); + if (strcmp(arg[8], "warn") == 0) { + maxwarn = utils::logical(FLERR, arg[9], false, lmp); + } else + error->all(FLERR, "Illegal fix qeq/shielded command"); + } else if (narg > 8) + error->all(FLERR, "Illegal fix qeq/shielded command"); if (reax_flag) extract_reax(); } @@ -55,14 +56,13 @@ void FixQEqShielded::init() neighbor->add_request(this, NeighConst::REQ_FULL); int ntypes = atom->ntypes; - memory->create(shld,ntypes+1,ntypes+1,"qeq:shielding"); + memory->create(shld, ntypes + 1, ntypes + 1, "qeq:shielding"); init_shielding(); int i; for (i = 1; i <= ntypes; i++) { - if (gamma[i] == 0.0) - error->all(FLERR,"Invalid param file for fix qeq/shielded"); + if (gamma[i] == 0.0) error->all(FLERR, "Invalid param file for fix qeq/shielded"); } } @@ -70,17 +70,17 @@ void FixQEqShielded::init() void FixQEqShielded::extract_reax() { - Pair *pair = force->pair_match("^reax..",0); - if (pair == nullptr) error->all(FLERR,"No pair reaxff for fix qeq/shielded"); + Pair *pair = force->pair_match("^reax..", 0); + if (pair == nullptr) error->all(FLERR, "No pair reaxff for fix qeq/shielded"); int tmp; - chi = (double *) pair->extract("chi",tmp); - eta = (double *) pair->extract("eta",tmp); - gamma = (double *) pair->extract("gamma",tmp); + chi = (double *) pair->extract("chi", tmp); + eta = (double *) pair->extract("eta", tmp); + gamma = (double *) pair->extract("gamma", tmp); if (chi == nullptr || eta == nullptr || gamma == nullptr) error->all(FLERR, "Fix qeq/shielded could not extract params from pair reaxff"); } - +// clang-format off /* ---------------------------------------------------------------------- */ void FixQEqShielded::init_shielding() diff --git a/src/QEQ/fix_qeq_slater.cpp b/src/QEQ/fix_qeq_slater.cpp index 645164b45b..e80bad04b9 100644 --- a/src/QEQ/fix_qeq_slater.cpp +++ b/src/QEQ/fix_qeq_slater.cpp @@ -1,4 +1,3 @@ -// clang-format off /* ---------------------------------------------------------------------- LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator https://www.lammps.org/, Sandia National Laboratories @@ -38,23 +37,23 @@ using namespace FixConst; /* ---------------------------------------------------------------------- */ -FixQEqSlater::FixQEqSlater(LAMMPS *lmp, int narg, char **arg) : - FixQEq(lmp, narg, arg) +FixQEqSlater::FixQEqSlater(LAMMPS *lmp, int narg, char **arg) : FixQEq(lmp, narg, arg) { alpha = 0.20; // optional arg int iarg = 8; while (iarg < narg) { - if (strcmp(arg[iarg],"alpha") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix qeq/slater command"); - alpha = atof(arg[iarg+1]); + if (strcmp(arg[iarg], "alpha") == 0) { + if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "fix qeq/slater alpha", error); + alpha = utils::numeric(FLERR, arg[iarg + 1], false, lmp); iarg += 2; - } else if (strcmp(arg[iarg],"warn") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix qeq/slater command"); - maxwarn = utils::logical(FLERR,arg[iarg+1],false,lmp); + } else if (strcmp(arg[iarg], "warn") == 0) { + if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "fix qeq/slater warn", error); + maxwarn = utils::logical(FLERR, arg[iarg + 1], false, lmp); iarg += 2; - } else error->all(FLERR,"Illegal fix qeq/slater command"); + } else + error->all(FLERR, "Unknown fix qeq/slater keyword: {}", arg[iarg]); } if (streitz_flag) extract_streitz(); @@ -70,8 +69,7 @@ void FixQEqSlater::init() int ntypes = atom->ntypes; for (int i = 1; i <= ntypes; i++) { - if (zeta[i] == 0.0) - error->all(FLERR,"Invalid param file for fix qeq/slater"); + if (zeta[i] == 0.0) error->all(FLERR, "Invalid parameter file values for fix qeq/slater"); } } @@ -79,21 +77,19 @@ void FixQEqSlater::init() void FixQEqSlater::extract_streitz() { - Pair *pair = force->pair_match("coul/streitz",1); - if (pair == nullptr) error->all(FLERR,"No pair coul/streitz for fix qeq/slater"); + Pair *pair = force->pair_match("coul/streitz", 1); + if (pair == nullptr) error->all(FLERR, "No pair style coul/streitz for fix qeq/slater"); int tmp; - chi = (double *) pair->extract("chi",tmp); - eta = (double *) pair->extract("eta",tmp); - gamma = (double *) pair->extract("gamma",tmp); - zeta = (double *) pair->extract("zeta",tmp); - zcore = (double *) pair->extract("zcore",tmp); - if (chi == nullptr || eta == nullptr || gamma == nullptr - || zeta == nullptr || zcore == nullptr) - error->all(FLERR, - "Fix qeq/slater could not extract params from pair coul/streitz"); - + chi = (double *) pair->extract("chi", tmp); + eta = (double *) pair->extract("eta", tmp); + gamma = (double *) pair->extract("gamma", tmp); + zeta = (double *) pair->extract("zeta", tmp); + zcore = (double *) pair->extract("zcore", tmp); + if (chi == nullptr || eta == nullptr || gamma == nullptr || zeta == nullptr || zcore == nullptr) + error->all(FLERR, "Fix qeq/slater could not extract parameters from pair coul/streitz"); } +// clang-format off /* ---------------------------------------------------------------------- */ void FixQEqSlater::pre_force(int /*vflag*/) diff --git a/src/QMMM/Install.sh b/src/QMMM/Install.sh index 4bede66d80..0c9643b84e 100755 --- a/src/QMMM/Install.sh +++ b/src/QMMM/Install.sh @@ -47,7 +47,7 @@ if (test $1 = 1) then fi if (test -e ../Makefile.package.settings) then - sed -i -e '/^include.*qmmm.*$/d' ../Makefile.package.settings + sed -i -e '/^[ \t]*include.*qmmm.*$/d' ../Makefile.package.settings # multiline form needed for BSD sed on Macs sed -i -e '4 i \ include ..\/..\/lib\/qmmm\/Makefile.lammps @@ -62,7 +62,7 @@ elif (test $1 = 0) then fi if (test -e ../Makefile.package.settings) then - sed -i -e '/^include.*qmmm.*$/d' ../Makefile.package.settings + sed -i -e '/^[ \t]*include.*qmmm.*$/d' ../Makefile.package.settings fi fi diff --git a/src/QTB/fix_qbmsst.cpp b/src/QTB/fix_qbmsst.cpp index 839e08662c..b5fb5ca77c 100644 --- a/src/QTB/fix_qbmsst.cpp +++ b/src/QTB/fix_qbmsst.cpp @@ -45,7 +45,7 @@ using namespace MathConst; FixQBMSST::FixQBMSST(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg) { - if (narg < 5) error->all(FLERR,"Illegal fix qbmsst command"); + if (narg < 5) utils::missing_cmd_args(FLERR,"fix qbmsst",error); if (strcmp(arg[3],"x") == 0) { direction = 0; @@ -57,11 +57,10 @@ FixQBMSST::FixQBMSST(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg) direction = 2; box_change |= BOX_CHANGE_Z; } else { - error->all(FLERR,"Illegal fix qbmsst command"); + error->all(FLERR,"Unknown fix qbmsst direction keyword: {}", arg[3]); } - velocity = atof(arg[4]); - if (velocity < 0) - error->all(FLERR,"Illegal fix qbmsst command"); + velocity = utils::numeric(FLERR,arg[4],false,lmp); + if (velocity < 0) error->all(FLERR,"Illegal fix qbmsst velocity value {}", velocity); // default parameters diff --git a/src/REACTION/fix_bond_react.cpp b/src/REACTION/fix_bond_react.cpp index 5dc5967c29..87d83da1ae 100644 --- a/src/REACTION/fix_bond_react.cpp +++ b/src/REACTION/fix_bond_react.cpp @@ -22,6 +22,7 @@ Contributing Author: Jacob Gissinger (jacob.r.gissinger@gmail.com) #include "atom_vec.h" #include "citeme.h" #include "comm.h" +#include "compute.h" #include "domain.h" #include "error.h" #include "fix_bond_history.h" @@ -34,11 +35,10 @@ Contributing Author: Jacob Gissinger (jacob.r.gissinger@gmail.com) #include "modify.h" #include "molecule.h" #include "neigh_list.h" -#include "neigh_request.h" #include "neighbor.h" #include "pair.h" #include "random_mars.h" -#include "reset_mol_ids.h" +#include "reset_atoms_mol.h" #include "respa.h" #include "update.h" #include "variable.h" @@ -51,6 +51,7 @@ Contributing Author: Jacob Gissinger (jacob.r.gissinger@gmail.com) #include #include +#include using namespace LAMMPS_NS; using namespace FixConst; @@ -80,7 +81,7 @@ static const char cite_fix_bond_react[] = #define DELTA 16 #define MAXGUESS 20 // max # of guesses allowed by superimpose algorithm #define MAXCONARGS 14 // max # of arguments for any type of constraint + rxnID -#define NUMVARVALS 4 // max # of keyword values that have variables as input +#define NUMVARVALS 5 // max # of keyword values that have variables as input // various statuses of superimpose algorithm: // ACCEPT: site successfully matched to pre-reacted template @@ -98,7 +99,7 @@ enum{DISTANCE,ANGLE,DIHEDRAL,ARRHENIUS,RMSD,CUSTOM}; enum{ATOM,FRAG}; // keyword values that accept variables as input -enum{NEVERY,RMIN,RMAX,PROB}; +enum{NEVERY,RMIN,RMAX,PROB,NRATE}; // flag for one-proc vs shared reaction sites enum{LOCAL,GLOBAL}; @@ -118,11 +119,8 @@ FixBondReact::FixBondReact(LAMMPS *lmp, int narg, char **arg) : fix3 = nullptr; reset_mol_ids = nullptr; - if (narg < 8) error->all(FLERR,"Illegal fix bond/react command: " - "too few arguments"); + if (narg < 8) utils::missing_cmd_args(FLERR,"fix bond/react", error); - MPI_Comm_rank(world,&me); - MPI_Comm_size(world,&nprocs); newton_bond = force->newton_bond; restart_global = 1; @@ -138,10 +136,15 @@ FixBondReact::FixBondReact(LAMMPS *lmp, int narg, char **arg) : status = PROCEED; // reaction functions used by 'custom' constraint - nrxnfunction = 2; + nrxnfunction = 3; rxnfunclist.resize(nrxnfunction); + peratomflag.resize(nrxnfunction); rxnfunclist[0] = "rxnsum"; + peratomflag[0] = 1; rxnfunclist[1] = "rxnave"; + peratomflag[1] = 1; + rxnfunclist[2] = "rxnbond"; + peratomflag[2] = 0; nvvec = 0; ncustomvars = 0; vvec = nullptr; @@ -204,7 +207,7 @@ FixBondReact::FixBondReact(LAMMPS *lmp, int narg, char **arg) : if (reset_mol_ids_flag) { delete reset_mol_ids; - reset_mol_ids = new ResetMolIDs(lmp); + reset_mol_ids = new ResetAtomsMol(lmp); reset_mol_ids->create_computes(id,group->names[igroup]); } @@ -224,8 +227,10 @@ FixBondReact::FixBondReact(LAMMPS *lmp, int narg, char **arg) : memory->create(nghostlyskips,nreacts,"bond/react:nghostlyskips"); memory->create(seed,nreacts,"bond/react:seed"); memory->create(limit_duration,nreacts,"bond/react:limit_duration"); + memory->create(rate_limit,3,nreacts,"bond/react:rate_limit"); memory->create(stabilize_steps_flag,nreacts,"bond/react:stabilize_steps_flag"); memory->create(custom_charges_fragid,nreacts,"bond/react:custom_charges_fragid"); + memory->create(rescale_charges_flag,nreacts,"bond/react:rescale_charges_flag"); memory->create(create_atoms_flag,nreacts,"bond/react:create_atoms_flag"); memory->create(modify_create_fragid,nreacts,"bond/react:modify_create_fragid"); memory->create(overlapsq,nreacts,"bond/react:overlapsq"); @@ -249,8 +254,11 @@ FixBondReact::FixBondReact(LAMMPS *lmp, int narg, char **arg) : fraction[i] = 1; seed[i] = 12345; max_rxn[i] = INT_MAX; + for (int j = 0; j < 3; j++) + rate_limit[j][i] = 0; stabilize_steps_flag[i] = 0; custom_charges_fragid[i] = -1; + rescale_charges_flag[i] = 0; create_atoms_flag[i] = 0; modify_create_fragid[i] = -1; overlapsq[i] = 0; @@ -286,55 +294,31 @@ FixBondReact::FixBondReact(LAMMPS *lmp, int narg, char **arg) : if (groupid == -1) error->all(FLERR,"Could not find fix group ID"); groupbits[rxn] = group->bitmask[groupid]; - if (strncmp(arg[iarg],"v_",2) == 0) { - const char *str = &arg[iarg][2]; - var_id[NEVERY][rxn] = input->variable->find(str); - if (var_id[NEVERY][rxn] < 0) - error->all(FLERR,"Fix bond/react: Variable name {} does not exist", str); - if (!input->variable->equalstyle(var_id[NEVERY][rxn])) - error->all(FLERR,"Fix bond/react: Variable {} is not equal-style", str); - var_flag[NEVERY][rxn] = 1; - } else { + if (strncmp(arg[iarg],"v_",2) == 0) read_variable_keyword(&arg[iarg][2],NEVERY,rxn); + else { nevery[rxn] = utils::inumeric(FLERR,arg[iarg],false,lmp); if (nevery[rxn] <= 0) error->all(FLERR,"Illegal fix bond/react command: " "'Nevery' must be a positive integer"); } iarg++; + double cutoff; if (strncmp(arg[iarg],"v_",2) == 0) { - const char *str = &arg[iarg][2]; - var_id[RMIN][rxn] = input->variable->find(str); - if (var_id[RMIN][rxn] < 0) - error->all(FLERR,"Fix bond/react: Variable name {} does not exist", str); - if (!input->variable->equalstyle(var_id[RMIN][rxn])) - error->all(FLERR,"Fix bond/react: Variable {} is not equal-style", str); - double cutoff = input->variable->compute_equal(var_id[RMIN][rxn]); - cutsq[rxn][0] = cutoff*cutoff; - var_flag[RMIN][rxn] = 1; - } else { - double cutoff = utils::numeric(FLERR,arg[iarg],false,lmp); + read_variable_keyword(&arg[iarg][2],RMIN,rxn); + cutoff = input->variable->compute_equal(var_id[RMIN][rxn]); + } else cutoff = utils::numeric(FLERR,arg[iarg],false,lmp); if (cutoff < 0.0) error->all(FLERR,"Illegal fix bond/react command: " "'Rmin' cannot be negative"); cutsq[rxn][0] = cutoff*cutoff; - } iarg++; if (strncmp(arg[iarg],"v_",2) == 0) { - const char *str = &arg[iarg][2]; - var_id[RMAX][rxn] = input->variable->find(str); - if (var_id[RMAX][rxn] < 0) - error->all(FLERR,"Fix bond/react: Variable name {} does not exist", str); - if (!input->variable->equalstyle(var_id[RMAX][rxn])) - error->all(FLERR,"Fix bond/react: Variable is {} not equal-style", str); - double cutoff = input->variable->compute_equal(var_id[RMAX][rxn]); - cutsq[rxn][1] = cutoff*cutoff; - var_flag[RMAX][rxn] = 1; - } else { - double cutoff = utils::numeric(FLERR,arg[iarg],false,lmp); + read_variable_keyword(&arg[iarg][2],RMAX,rxn); + cutoff = input->variable->compute_equal(var_id[RMAX][rxn]); + } else cutoff = utils::numeric(FLERR,arg[iarg],false,lmp); if (cutoff < 0.0) error->all(FLERR,"Illegal fix bond/react command:" "'Rmax' cannot be negative"); cutsq[rxn][1] = cutoff*cutoff; - } iarg++; unreacted_mol[rxn] = atom->find_molecule(arg[iarg++]); @@ -344,7 +328,7 @@ FixBondReact::FixBondReact(LAMMPS *lmp, int narg, char **arg) : if (reacted_mol[rxn] == -1) error->all(FLERR,"Reacted molecule template ID for " "fix bond/react does not exist"); - // read superimpose file + //read map file files[rxn] = utils::strdup(arg[iarg]); iarg++; @@ -354,14 +338,8 @@ FixBondReact::FixBondReact(LAMMPS *lmp, int narg, char **arg) : "'prob' keyword has too few arguments"); // check if probability is a variable if (strncmp(arg[iarg+1],"v_",2) == 0) { - const char *str = &arg[iarg+1][2]; - var_id[PROB][rxn] = input->variable->find(str); - if (var_id[PROB][rxn] < 0) - error->all(FLERR,"Fix bond/react: Variable name {} does not exist", str); - if (!input->variable->equalstyle(var_id[PROB][rxn])) - error->all(FLERR,"Fix bond/react: Variable {} is not equal-style", str); + read_variable_keyword(&arg[iarg+1][2],PROB,rxn); fraction[rxn] = input->variable->compute_equal(var_id[PROB][rxn]); - var_flag[PROB][rxn] = 1; } else { // otherwise probability should be a number fraction[rxn] = utils::numeric(FLERR,arg[iarg+1],false,lmp); @@ -380,6 +358,14 @@ FixBondReact::FixBondReact(LAMMPS *lmp, int narg, char **arg) : if (max_rxn[rxn] < 0) error->all(FLERR,"Illegal fix bond/react command: " "'max_rxn' cannot be negative"); iarg += 2; + } else if (strcmp(arg[iarg],"rate_limit") == 0) { + if (iarg+3 > narg) error->all(FLERR,"Illegal fix bond/react command: " + "'rate_limit' has too few arguments"); + rate_limit[0][rxn] = 1; // serves as flag for rate_limit keyword + if (strncmp(arg[iarg+1],"v_",2) == 0) read_variable_keyword(&arg[iarg+1][2],NRATE,rxn); + else rate_limit[1][rxn] = utils::numeric(FLERR,arg[iarg+1],false,lmp); + rate_limit[2][rxn] = utils::numeric(FLERR,arg[iarg+2],false,lmp); + iarg += 3; } else if (strcmp(arg[iarg],"stabilize_steps") == 0) { if (stabilization_flag == 0) error->all(FLERR,"Stabilize_steps keyword " "used without stabilization keyword"); @@ -398,6 +384,13 @@ FixBondReact::FixBondReact(LAMMPS *lmp, int narg, char **arg) : "'custom_charges' keyword does not exist"); } iarg += 2; + } else if (strcmp(arg[iarg],"rescale_charges") == 0) { + if (iarg+2 > narg) error->all(FLERR,"Illegal fix bond/react command: " + "'rescale_charges' has too few arguments"); + if (strcmp(arg[iarg+1],"no") == 0) rescale_charges_flag[rxn] = 0; //default + else if (strcmp(arg[iarg+1],"yes") == 0) rescale_charges_flag[rxn] = 1; + else error->one(FLERR,"Bond/react: Illegal option for 'rescale_charges' keyword"); + iarg += 2; } else if (strcmp(arg[iarg],"molecule") == 0) { if (iarg+2 > narg) error->all(FLERR,"Illegal fix bond/react command: " "'molecule' has too few arguments"); @@ -433,21 +426,24 @@ FixBondReact::FixBondReact(LAMMPS *lmp, int narg, char **arg) : } max_natoms = 0; // the number of atoms in largest molecule template + max_rate_limit_steps = 0; for (int myrxn = 0; myrxn < nreacts; myrxn++) { twomol = atom->molecules[reacted_mol[myrxn]]; max_natoms = MAX(max_natoms,twomol->natoms); + max_rate_limit_steps = MAX(max_rate_limit_steps,rate_limit[2][myrxn]); } memory->create(equivalences,max_natoms,2,nreacts,"bond/react:equivalences"); memory->create(reverse_equiv,max_natoms,2,nreacts,"bond/react:reverse_equiv"); memory->create(edge,max_natoms,nreacts,"bond/react:edge"); memory->create(landlocked_atoms,max_natoms,nreacts,"bond/react:landlocked_atoms"); + memory->create(store_rxn_count,max_rate_limit_steps,nreacts,"bond/react:store_rxn_count"); memory->create(custom_charges,max_natoms,nreacts,"bond/react:custom_charges"); memory->create(delete_atoms,max_natoms,nreacts,"bond/react:delete_atoms"); memory->create(create_atoms,max_natoms,nreacts,"bond/react:create_atoms"); memory->create(chiral_atoms,max_natoms,6,nreacts,"bond/react:chiral_atoms"); - for (int j = 0; j < nreacts; j++) + for (int j = 0; j < nreacts; j++) { for (int i = 0; i < max_natoms; i++) { edge[i][j] = 0; custom_charges[i][j] = 1; // update all partial charges by default @@ -462,6 +458,10 @@ FixBondReact::FixBondReact(LAMMPS *lmp, int narg, char **arg) : equivalences[i][m][j] = i+1; } } + for (int i = 0; i < max_rate_limit_steps; i++) { + store_rxn_count[i][j] = -1; + } + } // read all map files afterward for (int i = 0; i < nreacts; i++) { @@ -471,7 +471,7 @@ FixBondReact::FixBondReact(LAMMPS *lmp, int narg, char **arg) : onemol->check_attributes(); twomol->check_attributes(); get_molxspecials(); - read(i); + read_map_file(i); fclose(fp); if (ncreate == 0 && onemol->natoms != twomol->natoms) error->all(FLERR,"Fix bond/react: Reaction templates must contain the same number of atoms"); @@ -493,7 +493,7 @@ FixBondReact::FixBondReact(LAMMPS *lmp, int narg, char **arg) : for (int i = 0; i < nreacts; i++) { for (int j = 0; j < nconstraints[i]; j++) { if (constraints[j][i].type == ARRHENIUS) { - rrhandom[tmp++] = new RanMars(lmp,(int) constraints[j][i].par[4] + me); + rrhandom[tmp++] = new RanMars(lmp,(int) constraints[j][i].par[4] + comm->me); } } } @@ -528,7 +528,7 @@ FixBondReact::FixBondReact(LAMMPS *lmp, int narg, char **arg) : random = new RanMars*[nreacts]; for (int i = 0; i < nreacts; i++) { - random[i] = new RanMars(lmp,seed[i] + me); + random[i] = new RanMars(lmp,seed[i] + comm->me); } // set comm sizes needed by this fix @@ -598,6 +598,7 @@ FixBondReact::~FixBondReact() memory->destroy(equivalences); memory->destroy(reverse_equiv); memory->destroy(landlocked_atoms); + memory->destroy(store_rxn_count); memory->destroy(custom_charges); memory->destroy(delete_atoms); memory->destroy(create_atoms); @@ -617,8 +618,10 @@ FixBondReact::~FixBondReact() memory->destroy(limit_duration); memory->destroy(var_flag); memory->destroy(var_id); + memory->destroy(rate_limit); memory->destroy(stabilize_steps_flag); memory->destroy(custom_charges_fragid); + memory->destroy(rescale_charges_flag); memory->destroy(molecule_keyword); memory->destroy(nconstraints); memory->destroy(constraintstr); @@ -819,6 +822,16 @@ void FixBondReact::init_list(int /*id*/, NeighList *ptr) void FixBondReact::post_integrate() { + // update store_rxn_count on every step + for (int myrxn = 0; myrxn < nreacts; myrxn++) { + if (rate_limit[0][myrxn] == 1) { + for (int i = rate_limit[2][myrxn]-1; i > 0; i--) { + store_rxn_count[i][myrxn] = store_rxn_count[i-1][myrxn]; + } + store_rxn_count[0][myrxn] = reaction_count_total[myrxn]; + } + } + // check if any reactions could occur on this timestep int nevery_check = 1; for (int i = 0; i < nreacts; i++) { @@ -873,6 +886,8 @@ void FixBondReact::post_integrate() for (int i = 0; i < nreacts; i++) { nattempt[i] = 0; } + // reset per-bond compute map flag + atoms2bondflag = 0; int nlocal = atom->nlocal; int nall = atom->nlocal + atom->nghost; @@ -911,8 +926,22 @@ void FixBondReact::post_integrate() int j; for (rxnID = 0; rxnID < nreacts; rxnID++) { + int rate_limit_flag = 1; + if (rate_limit[0][rxnID] == 1) { + int myrxn_count = store_rxn_count[rate_limit[2][rxnID]-1][rxnID]; + if (myrxn_count == -1) rate_limit_flag = 0; + else { + int nrxns_delta = reaction_count_total[rxnID] - myrxn_count; + int my_nrate; + if (var_flag[NRATE][rxnID] == 1) { + my_nrate = input->variable->compute_equal(var_id[NRATE][rxnID]); + } else my_nrate = rate_limit[1][rxnID]; + if (nrxns_delta > my_nrate) rate_limit_flag = 0; + } + } if ((update->ntimestep % nevery[rxnID]) || - (max_rxn[rxnID] <= reaction_count_total[rxnID])) continue; + (max_rxn[rxnID] <= reaction_count_total[rxnID]) || + (rate_limit_flag == 0)) continue; for (int ii = 0; ii < nall; ii++) { partner[ii] = 0; finalpartner[ii] = 0; @@ -1221,6 +1250,7 @@ void FixBondReact::close_partner() void FixBondReact::superimpose_algorithm() { + const int nprocs = comm->nprocs; local_num_mega = 0; ghostly_num_mega = 0; @@ -1370,7 +1400,7 @@ void FixBondReact::superimpose_algorithm() MPI_Allreduce(&local_rxn_count[0],&reaction_count[0],nreacts,MPI_INT,MPI_SUM,world); int rxnflag = 0; - if (me == 0) + if (comm->me == 0) for (int i = 0; i < nreacts; i++) { reaction_count_total[i] += reaction_count[i] + ghostly_rxn_count[i]; rxnflag += reaction_count[i] + ghostly_rxn_count[i]; @@ -1385,18 +1415,37 @@ void FixBondReact::superimpose_algorithm() std::random_device rnd; std::minstd_rand park_rng(rnd()); - // check if we overstepped our reaction limit + // check if we overstepped our reaction limit, via either max_rxn or rate_limit for (int i = 0; i < nreacts; i++) { - if (reaction_count_total[i] > max_rxn[i]) { + int overstep = 0; + int max_rxn_overstep = reaction_count_total[i] - max_rxn[i]; + overstep = MAX(overstep,max_rxn_overstep); + if (rate_limit[0][i] == 1) { + int myrxn_count = store_rxn_count[rate_limit[2][i]-1][i]; + if (myrxn_count != -1) { + int nrxn_delta = reaction_count_total[i] - myrxn_count; + int my_nrate; + if (var_flag[NRATE][i] == 1) { + my_nrate = input->variable->compute_equal(var_id[NRATE][i]); + } else my_nrate = rate_limit[1][i]; + int rate_limit_overstep = nrxn_delta - my_nrate; + overstep = MAX(overstep,rate_limit_overstep); + } + } + + if (overstep > 0) { // let's randomly choose rxns to skip, unbiasedly from local and ghostly int *local_rxncounts; int *all_localskips; memory->create(local_rxncounts,nprocs,"bond/react:local_rxncounts"); memory->create(all_localskips,nprocs,"bond/react:all_localskips"); MPI_Gather(&local_rxn_count[i],1,MPI_INT,local_rxncounts,1,MPI_INT,0,world); - if (me == 0) { - int overstep = reaction_count_total[i] - max_rxn[i]; + if (comm->me == 0) { int delta_rxn = reaction_count[i] + ghostly_rxn_count[i]; + // when using variable input for rate_limit, rate_limit_overstep could be > delta_rxn (below) + // we need to limit overstep to the number of reactions on this timestep + // essentially skipping all reactions, would be more efficient to use a skip_all flag + if (overstep > delta_rxn) overstep = delta_rxn; int *rxn_by_proc; memory->create(rxn_by_proc,delta_rxn,"bond/react:rxn_by_proc"); for (int j = 0; j < delta_rxn; j++) @@ -1414,14 +1463,15 @@ void FixBondReact::superimpose_algorithm() else all_localskips[rxn_by_proc[j]]++; } memory->destroy(rxn_by_proc); + reaction_count_total[i] -= overstep; } - reaction_count_total[i] = max_rxn[i]; MPI_Scatter(&all_localskips[0],1,MPI_INT,&nlocalskips[i],1,MPI_INT,0,world); MPI_Bcast(&nghostlyskips[i],1,MPI_INT,0,world); memory->destroy(local_rxncounts); memory->destroy(all_localskips); } } + MPI_Bcast(&reaction_count_total[0], nreacts, MPI_INT, 0, world); // this updates topology next step next_reneighbor = update->ntimestep; @@ -2118,7 +2168,7 @@ double FixBondReact::get_temperature(tagint **myglove, int row_offset, int col) } /* ---------------------------------------------------------------------- -get per-atom variable names used by custom constraint +get per-atom variable names used by custom constraint ------------------------------------------------------------------------- */ void FixBondReact::customvarnames() @@ -2140,6 +2190,7 @@ void FixBondReact::customvarnames() // find next reaction special function occurrence pos1 = std::string::npos; for (int i = 0; i < nrxnfunction; i++) { + if (peratomflag[i] == 0) continue; pos = varstr.find(rxnfunclist[i],prev3+1); if (pos == std::string::npos) continue; if (pos < pos1) pos1 = pos; @@ -2257,16 +2308,71 @@ double FixBondReact::custom_constraint(const std::string& varstr) evlstr.push_back(varstr.substr(prev3+1)); for (auto & evl : evlstr) evlcat += evl; - return input->variable->compute_equal(evlcat.c_str()); + return input->variable->compute_equal(evlcat); } /* ---------------------------------------------------------------------- -currently two 'rxn' functions: rxnsum and rxnave +currently three 'rxn' functions: rxnsum, rxnave, and rxnbond ------------------------------------------------------------------------- */ double FixBondReact::rxnfunction(const std::string& rxnfunc, const std::string& varid, const std::string& fragid) { + int ifrag = -1; + if (fragid != "all") { + ifrag = onemol->findfragment(fragid.c_str()); + if (ifrag < 0) error->one(FLERR,"Bond/react: Molecule fragment " + "in reaction special function does not exist"); + } + + // start with 'rxnbond' per-bond function + // for 'rxnbond', varid corresponds to 'compute bond/local' name, + // and fragid is a pre-reaction fragment containing the two atoms in the bond + if (rxnfunc == "rxnbond") { + int icompute,ibond,nsum; + double perbondval; + std::set aset; + std::string computeid = varid; + std::map,int>::iterator it; + + if (computeid.substr(0,2) != "c_") error->one(FLERR,"Bond/react: Reaction special function compute " + "name should begin with 'c_'"); + computeid = computeid.substr(2); + icompute = modify->find_compute(computeid); + if (icompute < 0) error->one(FLERR,"Bond/react: Reaction special function compute name does not exist"); + cperbond = modify->compute[icompute]; + std::string compute_style = cperbond->style; + if (compute_style != "bond/local") error->one(FLERR,"Bond/react: Compute used by reaction " + "special function 'rxnbond' must be of style 'bond/local'"); + if (cperbond->size_local_cols > 0) error->one(FLERR,"Bond/react: 'Compute bond/local' used by reaction " + "special function 'rxnbond' must compute one value"); + + if (atoms2bondflag == 0) { + atoms2bondflag = 1; + get_atoms2bond(cperbond->groupbit); + } + + nsum = 0; + for (int i = 0; i < onemol->natoms; i++) { + if (onemol->fragmentmask[ifrag][i]) { + aset.insert(glove[i][1]); + nsum++; + } + } + if (nsum != 2) error->one(FLERR,"Bond/react: Molecule fragment of reaction special function 'rxnbond' " + "must contain exactly two atoms"); + + if (cperbond->invoked_local != lmp->update->ntimestep) + cperbond->compute_local(); + + it = atoms2bond.find(aset); + if (it == atoms2bond.end()) error->one(FLERR,"Bond/react: Unable to locate bond referenced by " + "reaction special function 'rxnbond'"); + ibond = it->second; + perbondval = cperbond->vector_local[ibond]; + return perbondval; + } + int ivar = -1; for (int i = 0; i < ncustomvars; i++) { if (varid == customvarstrs[i]) { @@ -2280,13 +2386,6 @@ double FixBondReact::rxnfunction(const std::string& rxnfunc, const std::string& error->one(FLERR,"Fix bond/react: Reaction special function variable " "name does not exist"); - int ifrag = -1; - if (fragid != "all") { - ifrag = onemol->findfragment(fragid.c_str()); - if (ifrag < 0) error->one(FLERR,"Fix bond/react: Molecule fragment " - "in reaction special function does not exist"); - } - int iatom; int nsum = 0; double sumvvec = 0; @@ -2313,6 +2412,39 @@ double FixBondReact::rxnfunction(const std::string& rxnfunc, const std::string& return 0.0; } +/* ---------------------------------------------------------------------- +populate map to get bond index from atom IDs +------------------------------------------------------------------------- */ + +void FixBondReact::get_atoms2bond(int cgroupbit) +{ + int i,m,atom1,atom2,btype,nb; + std::set aset; + + int nlocal = atom->nlocal; + tagint *tag = atom->tag; + int *num_bond = atom->num_bond; + tagint **bond_atom = atom->bond_atom; + int **bond_type = atom->bond_type; + int *mask = atom->mask; + + m = 0; + atoms2bond.clear(); + for (atom1 = 0; atom1 < nlocal; atom1++) { + if (!(mask[atom1] & cgroupbit)) continue; + nb = num_bond[atom1]; + for (i = 0; i < nb; i++) { + btype = bond_type[atom1][i]; + atom2 = atom->map(bond_atom[atom1][i]); + if (atom2 < 0 || !(mask[atom2] & cgroupbit)) continue; + if (newton_bond == 0 && tag[atom1] > tag[atom2]) continue; + if (btype == 0) continue; + aset = {tag[atom1], tag[atom2]}; + atoms2bond.insert(std::make_pair(aset,m++)); + } + } +} + /* ---------------------------------------------------------------------- return handedness (1 or -1) of a chiral center, given ordered set of coordinates ------------------------------------------------------------------------- */ @@ -2483,7 +2615,7 @@ void FixBondReact::find_landlocked_atoms(int myrxn) } // also, if atoms change number of bonds, but aren't landlocked, that could be bad - if (me == 0) + if (comm->me == 0) for (int i = 0; i < twomol->natoms; i++) { if ((create_atoms[i][myrxn] == 0) && (twomol_nxspecial[i][0] != onemol_nxspecial[equivalences[i][1][myrxn]-1][0]) && @@ -2815,6 +2947,7 @@ broadcast entries of mega_glove which contain nonlocal atoms for perusal by all void FixBondReact::ghost_glovecast() { #if !defined(MPI_STUBS) + const int nprocs = comm->nprocs; global_megasize = 0; @@ -2833,7 +2966,7 @@ void FixBondReact::ghost_glovecast() int *allstarts = new int[nprocs]; int start = 0; - for (int i = 0; i < me; i++) { + for (int i = 0; i < comm->me; i++) { start += allncols[i]; } MPI_Allgather(&start, 1, MPI_INT, allstarts, 1, MPI_INT, world); @@ -2861,7 +2994,7 @@ void FixBondReact::ghost_glovecast() } } // let's send to root, dedup, then broadcast - if (me == 0) { + if (comm->me == 0) { MPI_Gatherv(MPI_IN_PLACE, ghostly_num_mega, column, // Note: some values ignored for MPI_IN_PLACE &(global_mega_glove[0][0]), allncols, allstarts, column, 0, world); @@ -2871,7 +3004,7 @@ void FixBondReact::ghost_glovecast() column, 0, world); } - if (me == 0) dedup_mega_gloves(GLOBAL); // global_mega_glove mode + if (comm->me == 0) dedup_mega_gloves(GLOBAL); // global_mega_glove mode MPI_Bcast(&global_megasize,1,MPI_INT,0,world); MPI_Bcast(&(global_mega_glove[0][0]), global_megasize, column, 0, world); @@ -2985,6 +3118,8 @@ void FixBondReact::update_everything() } delete [] iskip; + if (update_num_mega == 0) continue; + // if inserted atoms and global map exists, reset map now instead // of waiting for comm since other pre-exchange fixes may use it // invoke map_init() b/c atom count has grown @@ -3012,6 +3147,33 @@ void FixBondReact::update_everything() } } + // get charge rescale delta + double charge_rescale_addend = 0; + if (rescale_charges_flag[rxnID] == 1) { + double sim_total_charge = 0; + double mol_total_charge = 0; + int n_custom_charge = 0; + for (int i = 0; i < update_num_mega; i++) { + rxnID = update_mega_glove[0][i]; + twomol = atom->molecules[reacted_mol[rxnID]]; + for (int j = 0; j < twomol->natoms; j++) { + int jj = equivalences[j][1][rxnID]-1; + if (atom->map(update_mega_glove[jj+1][i]) >= 0 && + atom->map(update_mega_glove[jj+1][i]) < nlocal) { + if (landlocked_atoms[j][rxnID] == 1) + type[atom->map(update_mega_glove[jj+1][i])] = twomol->type[j]; + if (twomol->qflag && atom->q_flag && custom_charges[jj][rxnID] == 1) { + double *q = atom->q; + sim_total_charge += q[atom->map(update_mega_glove[jj+1][i])]; + mol_total_charge += twomol->q[j]; + n_custom_charge++; + } + } + } + } + charge_rescale_addend = (sim_total_charge-mol_total_charge)/n_custom_charge; + } + // update charges and types of landlocked atoms for (int i = 0; i < update_num_mega; i++) { rxnID = update_mega_glove[0][i]; @@ -3024,7 +3186,7 @@ void FixBondReact::update_everything() type[atom->map(update_mega_glove[jj+1][i])] = twomol->type[j]; if (twomol->qflag && atom->q_flag && custom_charges[jj][rxnID] == 1) { double *q = atom->q; - q[atom->map(update_mega_glove[jj+1][i])] = twomol->q[j]; + q[atom->map(update_mega_glove[jj+1][i])] = twomol->q[j]+charge_rescale_addend; } } } @@ -3584,7 +3746,7 @@ int FixBondReact::insert_atoms(tagint **my_mega_glove, int iupdate) Superpose3D superposer(n2superpose); int fitroot = 0; if (ifit >= 0 && ifit < atom->nlocal) { - fitroot = me; + fitroot = comm->me; // get 'temperatere' averaged over site, used for created atoms' vels t = get_temperature(my_mega_glove,1,iupdate); @@ -3602,7 +3764,8 @@ int FixBondReact::insert_atoms(tagint **my_mega_glove, int iupdate) int ipre = equivalences[j][1][rxnID]-1; // equiv pre-reaction template index if (!create_atoms[j][rxnID] && !delete_atoms[ipre][rxnID]) { if (atom->map(my_mega_glove[ipre+1][iupdate]) < 0) { - error->warning(FLERR," eligible atoms skipped for created-atoms fit on rank {}\n",me); + error->warning(FLERR," eligible atoms skipped for created-atoms fit on rank {}\n", + comm->me); continue; } iatom = atom->map(my_mega_glove[ipre+1][iupdate]); @@ -3630,7 +3793,7 @@ int FixBondReact::insert_atoms(tagint **my_mega_glove, int iupdate) if (create_atoms[m][rxnID] == 1) { // apply optimal rotation/translation for created atom coords // also map coords back into simulation box - if (fitroot == me) { + if (fitroot == comm->me) { MathExtra::matvec(rotmat,twomol->x[m],coords[m]); for (int i = 0; i < 3; i++) coords[m][i] += superposer.T[i]; imageflags[m] = atom->image[ifit]; @@ -3718,7 +3881,7 @@ int FixBondReact::insert_atoms(tagint **my_mega_glove, int iupdate) int root = 0; if (flag) { - root = me; + root = comm->me; atom->avec->create_atom(twomol->type[m],coords[m]); int n = atom->nlocal - 1; @@ -3795,10 +3958,24 @@ int FixBondReact::insert_atoms(tagint **my_mega_glove, int iupdate) } /* ---------------------------------------------------------------------- -read superimpose file +add equal-style variable to keyword argument list ------------------------------------------------------------------------- */ -void FixBondReact::read(int myrxn) +void FixBondReact::read_variable_keyword(const char *myarg, int keyword, int myrxn) +{ + var_id[keyword][myrxn] = input->variable->find(myarg); + if (var_id[keyword][myrxn] < 0) + error->all(FLERR,"Fix bond/react: Variable name {} does not exist",myarg); + if (!input->variable->equalstyle(var_id[keyword][myrxn])) + error->all(FLERR,"Fix bond/react: Variable {} is not equal-style",myarg); + var_flag[keyword][myrxn] = 1; +} + +/* ---------------------------------------------------------------------- +read map file +------------------------------------------------------------------------- */ + +void FixBondReact::read_map_file(int myrxn) { char line[MAXLINE],keyword[MAXLINE]; char *eof,*ptr; @@ -3850,7 +4027,7 @@ void FixBondReact::read(int myrxn) while (strlen(keyword)) { if (strcmp(keyword,"InitiatorIDs") == 0 || strcmp(keyword,"BondingIDs") == 0) { if (strcmp(keyword,"BondingIDs") == 0) - if (me == 0) error->warning(FLERR,"Fix bond/react: The BondingIDs section title has been deprecated. Please use InitiatorIDs instead."); + if (comm->me == 0) error->warning(FLERR,"Fix bond/react: The BondingIDs section title has been deprecated. Please use InitiatorIDs instead."); bondflag = 1; readline(line); sscanf(line,"%d",&ibonding[myrxn]); @@ -4097,12 +4274,14 @@ void FixBondReact::readID(char *strarg, int iconstr, int myrxn, int i) if (isalpha(strarg[0])) { constraints[iconstr][myrxn].idtype[i] = FRAG; // fragment vs. atom ID flag int ifragment = onemol->findfragment(strarg); - if (ifragment < 0) error->one(FLERR,"Fix bond/react: Molecule fragment does not exist"); + if (ifragment < 0) + error->one(FLERR,"Fix bond/react: Molecule fragment {} does not exist", strarg); constraints[iconstr][myrxn].id[i] = ifragment; } else { constraints[iconstr][myrxn].idtype[i] = ATOM; // fragment vs. atom ID flag - int iatom = atoi(strarg); - if (iatom > onemol->natoms) error->one(FLERR,"Fix bond/react: Invalid template atom ID in map file"); + int iatom = utils::inumeric(FLERR, strarg, true, lmp); + if (iatom > onemol->natoms) + error->one(FLERR,"Fix bond/react: Invalid template atom ID {} in map file", strarg); constraints[iconstr][myrxn].id[i] = iatom; } } @@ -4110,13 +4289,13 @@ void FixBondReact::readID(char *strarg, int iconstr, int myrxn, int i) void FixBondReact::open(char *file) { fp = fopen(file,"r"); - if (fp == nullptr) error->one(FLERR, "Fix bond/react: Cannot open map file {}",file); + if (fp == nullptr) error->one(FLERR, "Fix bond/react: Cannot open map file {}", file); } void FixBondReact::readline(char *line) { int n; - if (me == 0) { + if (comm->me == 0) { if (fgets(line,MAXLINE,fp) == nullptr) n = 0; else n = strlen(line) + 1; } @@ -4133,7 +4312,7 @@ void FixBondReact::parse_keyword(int flag, char *line, char *keyword) // eof is set to 1 if any read hits end-of-file int eof = 0; - if (me == 0) { + if (comm->me == 0) { if (fgets(line,MAXLINE,fp) == nullptr) eof = 1; while (eof == 0 && strspn(line," \t\n\r") == strlen(line)) { if (fgets(line,MAXLINE,fp) == nullptr) eof = 1; @@ -4152,7 +4331,7 @@ void FixBondReact::parse_keyword(int flag, char *line, char *keyword) // bcast keyword line to all procs int n; - if (me == 0) n = strlen(line) + 1; + if (comm->me == 0) n = strlen(line) + 1; MPI_Bcast(&n,1,MPI_INT,0,world); MPI_Bcast(line,n,MPI_CHAR,0,world); } @@ -4299,34 +4478,71 @@ void FixBondReact::unpack_reverse_comm(int n, int *list, double *buf) void FixBondReact::write_restart(FILE *fp) { + int revision = 1; set[0].nreacts = nreacts; + set[0].max_rate_limit_steps = max_rate_limit_steps; + for (int i = 0; i < nreacts; i++) { set[i].reaction_count_total = reaction_count_total[i]; + strncpy(set[i].rxn_name,rxn_name[i],MAXLINE-1); set[i].rxn_name[MAXLINE-1] = '\0'; } - if (me == 0) { - int size = nreacts*sizeof(Set); - fwrite(&size,sizeof(int),1,fp); - fwrite(set,sizeof(Set),nreacts,fp); + int rbufcount = max_rate_limit_steps*nreacts; + int *rbuf; + if (rbufcount) { + memory->create(rbuf,rbufcount,"bond/react:rbuf"); + memcpy(rbuf,&store_rxn_count[0][0],sizeof(int)*rbufcount); } + + if (comm->me == 0) { + int size = nreacts*sizeof(Set)+(rbufcount+1)*sizeof(int); + fwrite(&size,sizeof(int),1,fp); + fwrite(&revision,sizeof(int),1,fp); + fwrite(set,sizeof(Set),nreacts,fp); + if (rbufcount) fwrite(rbuf,sizeof(int),rbufcount,fp); + } + if (rbufcount) memory->destroy(rbuf); } /* ---------------------------------------------------------------------- use selected state info from restart file to restart the Fix + bond/react restart revisions numbers added after LAMMPS version 3 Nov 2022 ------------------------------------------------------------------------- */ void FixBondReact::restart(char *buf) { - Set *set_restart = (Set *) buf; - for (int i = 0; i < set_restart[0].nreacts; i++) { + int n,revision,r_nreacts,r_max_rate_limit_steps,ibufcount,n2cpy; + int **ibuf; + + n = 0; + if (lmp->restart_ver > utils::date2num("3 Nov 2022")) revision = buf[n++]; + else revision = 0; + + Set *set_restart = (Set *) &buf[n*sizeof(int)]; + r_nreacts = set_restart[0].nreacts; + + if (revision > 0) { + r_max_rate_limit_steps = set_restart[0].max_rate_limit_steps; + ibufcount = r_max_rate_limit_steps*r_nreacts; + memory->create(ibuf,r_max_rate_limit_steps,r_nreacts,"bond/react:ibuf"); + memcpy(&ibuf[0][0],&buf[sizeof(int)+r_nreacts*sizeof(Set)],sizeof(int)*ibufcount); + n2cpy = r_max_rate_limit_steps; + } else n2cpy = 0; + + if (max_rate_limit_steps < n2cpy) n2cpy = max_rate_limit_steps; + for (int i = 0; i < r_nreacts; i++) { for (int j = 0; j < nreacts; j++) { if (strcmp(set_restart[i].rxn_name,rxn_name[j]) == 0) { reaction_count_total[j] = set_restart[i].reaction_count_total; + // read rate_limit restart information + for (int k = 0; k < n2cpy; k++) + store_rxn_count[k][j] = ibuf[k][i]; } } } + if (revision > 0) memory->destroy(ibuf); } /* ---------------------------------------------------------------------- diff --git a/src/REACTION/fix_bond_react.h b/src/REACTION/fix_bond_react.h index e9ca7ec362..4751bc4eef 100644 --- a/src/REACTION/fix_bond_react.h +++ b/src/REACTION/fix_bond_react.h @@ -26,6 +26,9 @@ FixStyle(bond/react,FixBondReact); #include "fix.h" +#include +#include + namespace LAMMPS_NS { class FixBondReact : public Fix { @@ -51,7 +54,6 @@ class FixBondReact : public Fix { double memory_usage() override; private: - int me, nprocs; int newton_bond; int nreacts; int *nevery; @@ -64,8 +66,11 @@ class FixBondReact : public Fix { int stabilization_flag; int reset_mol_ids_flag; int custom_exclude_flag; + int **rate_limit; + int **store_rxn_count; int *stabilize_steps_flag; int *custom_charges_fragid; + int *rescale_charges_flag; int *create_atoms_flag; int *modify_create_fragid; double *overlapsq; @@ -74,9 +79,11 @@ class FixBondReact : public Fix { int *nconstraints; char **constraintstr; int nrxnfunction; - std::vector rxnfunclist; + std::vector rxnfunclist; // lists current special rxn function + std::vector peratomflag; // 1 if special rxn function uses per-atom variable (vs. per-bond) + int atoms2bondflag; // 1 if atoms2bond map has been populated on this timestep int narrhenius; - int **var_flag, **var_id; // for keyword values with variable inputs + int **var_flag, **var_id; // for keyword values with variable inputs int status; int *groupbits; @@ -86,6 +93,7 @@ class FixBondReact : public Fix { int *reaction_count_total; int nmax; // max num local atoms int max_natoms; // max natoms in a molecule template + int max_rate_limit_steps; // max rate limit interval tagint *partner, *finalpartner; double **distsq; int *nattempt; @@ -102,7 +110,7 @@ class FixBondReact : public Fix { class RanMars **random; // random number for 'prob' keyword class RanMars **rrhandom; // random number for Arrhenius constraint class NeighList *list; - class ResetMolIDs *reset_mol_ids; // class for resetting mol IDs + class ResetAtomsMol *reset_mol_ids; // class for resetting mol IDs int *reacted_mol, *unreacted_mol; int *limit_duration; // indicates how long to relax @@ -160,7 +168,8 @@ class FixBondReact : public Fix { // but whose first neighbors haven't int glove_counter; // used to determine when to terminate Superimpose Algorithm - void read(int); + void read_variable_keyword(const char *, int, int); + void read_map_file(int); void EdgeIDs(char *, int); void Equivalences(char *, int); void DeleteAtoms(char *, int); @@ -184,6 +193,7 @@ class FixBondReact : public Fix { double custom_constraint(const std::string &); // evaulate expression for custom constraint double rxnfunction(const std::string &, const std::string &, const std::string &); // eval rxn_sum and rxn_ave + void get_atoms2bond(int); int get_chirality(double[12]); // get handedness given an ordered set of coordinates void open(char *); @@ -198,16 +208,18 @@ class FixBondReact : public Fix { void ghost_glovecast(); void update_everything(); int insert_atoms(tagint **, int); - void unlimit_bond(); + void unlimit_bond(); // removes atoms from stabilization, and other post-reaction every-step operations void limit_bond(int); void dedup_mega_gloves(int); //dedup global mega_glove void write_restart(FILE *) override; void restart(char *buf) override; + // store restart data struct Set { int nreacts; char rxn_name[MAXLINE]; int reaction_count_total; + int max_rate_limit_steps; }; Set *set; @@ -221,7 +233,9 @@ class FixBondReact : public Fix { int ncustomvars; std::vector customvarstrs; int nvvec; - double **vvec; // per-atom vector to store variable constraint atom-style variable values + double **vvec; // per-atom vector to store custom constraint atom-style variable values + class Compute *cperbond; // pointer to 'compute bond/local' used by custom constraint ('rxnbond' function) + std::map, int> atoms2bond; // maps atom pair to index of local bond array std::vector> constraints; // DEBUG diff --git a/src/REAXFF/pair_reaxff.cpp b/src/REAXFF/pair_reaxff.cpp index 63c5e0d730..ef859a0cda 100644 --- a/src/REAXFF/pair_reaxff.cpp +++ b/src/REAXFF/pair_reaxff.cpp @@ -587,8 +587,8 @@ void PairReaxFF::set_far_nbr(far_neighbor_data *fdest, int PairReaxFF::estimate_reax_lists() { int itr_i, itr_j, i, j; - int num_nbrs, num_marked; - int *ilist, *jlist, *numneigh, **firstneigh, *marked; + int num_nbrs; + int *ilist, *jlist, *numneigh, **firstneigh; double d_sqr; rvec dvec; double **x; @@ -602,15 +602,11 @@ int PairReaxFF::estimate_reax_lists() firstneigh = list->firstneigh; num_nbrs = 0; - num_marked = 0; - marked = (int*) calloc(api->system->N, sizeof(int)); int numall = list->inum + list->gnum; for (itr_i = 0; itr_i < numall; ++itr_i) { i = ilist[itr_i]; - marked[i] = 1; - ++num_marked; jlist = firstneigh[i]; for (itr_j = 0; itr_j < numneigh[i]; ++itr_j) { @@ -623,8 +619,6 @@ int PairReaxFF::estimate_reax_lists() } } - free(marked); - return static_cast (MAX(num_nbrs*safezone, mincap*REAX_MIN_NBRS)); } diff --git a/src/REAXFF/reaxff_hydrogen_bonds.cpp b/src/REAXFF/reaxff_hydrogen_bonds.cpp index 5c7629ffb7..6f5c663da0 100644 --- a/src/REAXFF/reaxff_hydrogen_bonds.cpp +++ b/src/REAXFF/reaxff_hydrogen_bonds.cpp @@ -39,7 +39,6 @@ namespace ReaxFF { int start_j, end_j, hb_start_j, hb_end_j; int hblist[MAX_BONDS]; int itr, top; - int num_hb_intrs = 0; double r_jk, theta, cos_theta, sin_xhz4, cos_xhz1, sin_theta2; double e_hb, exp_hb2, exp_hb3, CEhb1, CEhb2, CEhb3; rvec dcos_theta_di, dcos_theta_dj, dcos_theta_dk; @@ -102,7 +101,6 @@ namespace ReaxFF { if (type_i < 0) continue; hbp = &(system->reax_param.hbp[type_i][type_j][type_k]); if (hbp->r0_hb <= 0.0) continue; - ++num_hb_intrs; Calculate_Theta(pbond_ij->dvec, pbond_ij->d, dvec_jk, r_jk, &theta, &cos_theta); diff --git a/src/REAXFF/reaxff_torsion_angles.cpp b/src/REAXFF/reaxff_torsion_angles.cpp index 2b94bf50ae..e9b6bc618d 100644 --- a/src/REAXFF/reaxff_torsion_angles.cpp +++ b/src/REAXFF/reaxff_torsion_angles.cpp @@ -119,7 +119,6 @@ namespace ReaxFF { int type_i, type_j, type_k, type_l; int start_j, end_j; int start_pj, end_pj, start_pk, end_pk; - int num_frb_intrs = 0; double Delta_j, Delta_k; double r_ij, r_jk, r_kl, r_li; @@ -242,7 +241,6 @@ namespace ReaxFF { if (i != l && fbh->cnt && bo_kl->BO > control->thb_cut/*0*/ && bo_ij->BO * bo_jk->BO * bo_kl->BO > control->thb_cut/*0*/) { - ++num_frb_intrs; r_kl = pbond_kl->d; BOA_kl = bo_kl->BO - control->thb_cut; diff --git a/src/REPLICA/fix_pimd.cpp b/src/REPLICA/fix_pimd.cpp index 969d412b89..40e203d3c2 100644 --- a/src/REPLICA/fix_pimd.cpp +++ b/src/REPLICA/fix_pimd.cpp @@ -102,6 +102,9 @@ FixPIMD::FixPIMD(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg) error->universe_all(FLERR, fmt::format("Unknown keyword {} for fix pimd", arg[i])); } + if (strcmp(update->unit_style, "lj") == 0) + error->all(FLERR, "Fix pimd does not support lj units"); + /* Initiation */ size_peratom_cols = 12 * nhc_nchain + 3; diff --git a/src/REPLICA/hyper.cpp b/src/REPLICA/hyper.cpp index f045ae7a43..2c7d13766f 100644 --- a/src/REPLICA/hyper.cpp +++ b/src/REPLICA/hyper.cpp @@ -22,7 +22,6 @@ #include "fix_event_hyper.h" #include "fix_hyper.h" #include "integrate.h" -#include "memory.h" #include "min.h" #include "modify.h" #include "neighbor.h" diff --git a/src/REPLICA/neb.cpp b/src/REPLICA/neb.cpp index b58982928a..9c5befaf36 100644 --- a/src/REPLICA/neb.cpp +++ b/src/REPLICA/neb.cpp @@ -108,9 +108,9 @@ NEB::~NEB() void NEB::command(int narg, char **arg) { if (domain->box_exist == 0) - error->all(FLERR,"NEB command before simulation box is defined"); + error->universe_all(FLERR,"NEB command before simulation box is defined"); - if (narg < 6) error->universe_all(FLERR,"Illegal NEB command"); + if (narg < 6) error->universe_all(FLERR,"Illegal NEB command: missing argument(s)"); etol = utils::numeric(FLERR,arg[0],false,lmp); ftol = utils::numeric(FLERR,arg[1],false,lmp); @@ -120,11 +120,14 @@ void NEB::command(int narg, char **arg) // error checks - if (etol < 0.0) error->all(FLERR,"Illegal NEB command"); - if (ftol < 0.0) error->all(FLERR,"Illegal NEB command"); - if (nevery <= 0) error->universe_all(FLERR,"Illegal NEB command"); - if (n1steps % nevery || n2steps % nevery) - error->universe_all(FLERR,"Illegal NEB command"); + if (etol < 0.0) error->universe_all(FLERR, fmt::format("Illegal NEB energy tolerance: {}", etol)); + if (ftol < 0.0) error->universe_all(FLERR, fmt::format("Illegal NEB force tolerance: {}", ftol)); + if (nevery <= 0) + error->universe_all(FLERR,fmt::format("Illegal NEB command every parameter: {}", nevery)); + if (n1steps % nevery) + error->all(FLERR, fmt::format("NEB N1 value {} incompatible with every {}", n1steps, nevery)); + if (n2steps % nevery) + error->all(FLERR, fmt::format("NEB N2 value {} incompatible with every {}", n2steps, nevery)); // replica info @@ -136,26 +139,38 @@ void NEB::command(int narg, char **arg) // error checks - if (nreplica == 1) error->all(FLERR,"Cannot use NEB with a single replica"); + if (nreplica == 1) error->universe_all(FLERR,"Cannot use NEB with a single replica"); if (atom->map_style == Atom::MAP_NONE) - error->all(FLERR,"Cannot use NEB unless atom map exists"); + error->universe_all(FLERR,"Cannot use NEB without an atom map"); // process file-style setting to setup initial configs for all replicas - - if (strcmp(arg[5],"final") == 0) { - if (narg != 7 && narg !=8) error->universe_all(FLERR,"Illegal NEB command"); - inpfile = arg[6]; - readfile(inpfile,0); - } else if (strcmp(arg[5],"each") == 0) { - if (narg != 7 && narg !=8) error->universe_all(FLERR,"Illegal NEB command"); - inpfile = arg[6]; - readfile(inpfile,1); - } else if (strcmp(arg[5],"none") == 0) { - if (narg != 6 && narg !=7) error->universe_all(FLERR,"Illegal NEB command"); - } else error->universe_all(FLERR,"Illegal NEB command"); - + int iarg = 5; + int filecmd = 0; verbose=false; - if (strcmp(arg[narg-1],"verbose") == 0) verbose=true; + while (iarg < narg) { + if (strcmp(arg[iarg],"final") == 0) { + if (iarg + 2 > narg) error->universe_all(FLERR,"Illegal NEB command: missing arguments"); + inpfile = arg[iarg+1]; + readfile(inpfile,0); + filecmd = 1; + iarg += 2; + } else if (strcmp(arg[iarg],"each") == 0) { + if (iarg + 2 > narg) error->universe_all(FLERR,"Illegal NEB command: missing arguments"); + inpfile = arg[iarg+1]; + readfile(inpfile,1); + filecmd = 1; + iarg += 2; + } else if (strcmp(arg[iarg],"none") == 0) { + filecmd = 1; + ++iarg; + } else if (strcmp(arg[iarg],"verbose") == 0) { + verbose=true; + ++iarg; + } else error->universe_all(FLERR,fmt::format("Unknown NEB command keyword: {}", arg[iarg])); + } + + if (!filecmd) error->universe_all(FLERR, "NEB is missing 'final', 'each', or 'none' keyword"); + // run the NEB calculation run(); @@ -176,7 +191,7 @@ void NEB::run() auto fixes = modify->get_fix_by_style("^neb$"); if (fixes.size() != 1) - error->all(FLERR,"NEB requires use of exactly one fix neb instance"); + error->universe_all(FLERR,"NEB requires use of exactly one fix neb instance"); fneb = dynamic_cast(fixes[0]); if (verbose) numall =7; @@ -194,7 +209,7 @@ void NEB::run() lmp->init(); if (update->minimize->searchflag) - error->all(FLERR,"NEB requires damped dynamics minimizer"); + error->universe_all(FLERR,"NEB requires a damped dynamics minimizer"); // setup regular NEB minimization FILE *uscreen = universe->uscreen; @@ -207,38 +222,43 @@ void NEB::run() update->endstep = update->laststep = update->firststep + n1steps; update->nsteps = n1steps; update->max_eval = n1steps; - if (update->laststep < 0) - error->all(FLERR,"Too many timesteps for NEB"); + if (update->laststep < 0) error->universe_all(FLERR,"Too many timesteps for NEB"); update->minimize->setup(); if (me_universe == 0) { if (uscreen) { + fmt::print(uscreen," Step {:^14} {:^14} {:^14} {:^14} {:^14} {:^14} {:^14} {:^14} ", + "MaxReplicaForce", "MaxAtomForce", "GradV0","GradV1","GradVc","EBF", "EBR", "RDT"); + for (int i = 1; i <= nreplica; ++i) + fmt::print(uscreen, "{:^14} {:^14} ", "RD"+std::to_string(i), "PE"+std::to_string(i)); + if (verbose) { - fprintf(uscreen,"Step MaxReplicaForce MaxAtomForce " - "GradV0 GradV1 GradVc EBF EBR RDT RD1 PE1 RD2 PE2 ... " - "RDN PEN pathangle1 angletangrad1 anglegrad1 gradV1 " - "ReplicaForce1 MaxAtomForce1 pathangle2 angletangrad2 " - "... ReplicaForceN MaxAtomForceN\n"); - } else { - fprintf(uscreen,"Step MaxReplicaForce MaxAtomForce " - "GradV0 GradV1 GradVc EBF EBR RDT RD1 PE1 RD2 PE2 ... " - "RDN PEN\n"); + for (int i = 1; i <= nreplica; ++i) { + auto idx = std::to_string(i); + fmt::print(uscreen, "{:^12}{:^12}{:^12} {:^12} {:^12}{:^12} ", + "pathangle"+idx, "angletangrad"+idx, "anglegrad"+idx, "gradV"+idx, + "RepForce"+idx, "MaxAtomForce"+idx); + } } + fprintf(uscreen,"\n"); } if (ulogfile) { + fmt::print(ulogfile," Step {:^14} {:^14} {:^14} {:^14} {:^14} {:^14} {:^14} {:^14} ", + "MaxReplicaForce", "MaxAtomForce", "GradV0","GradV1","GradVc","EBF", "EBR", "RDT"); + for (int i = 1; i <= nreplica; ++i) + fmt::print(ulogfile, "{:^14} {:^14} ", "RD"+std::to_string(i), "PE"+std::to_string(i)); + if (verbose) { - fprintf(ulogfile,"Step MaxReplicaForce MaxAtomForce " - "GradV0 GradV1 GradVc EBF EBR RDT RD1 PE1 RD2 PE2 ... " - "RDN PEN pathangle1 angletangrad1 anglegrad1 gradV1 " - "ReplicaForce1 MaxAtomForce1 pathangle2 angletangrad2 " - "... ReplicaForceN MaxAtomForceN\n"); - } else { - fprintf(ulogfile,"Step MaxReplicaForce MaxAtomForce " - "GradV0 GradV1 GradVc EBF EBR RDT RD1 PE1 RD2 PE2 ... " - "RDN PEN\n"); + for (int i = 1; i <= nreplica; ++i) { + auto idx = std::to_string(i); + fmt::print(ulogfile, "{:^12}{:^12}{:^12} {:^12} {:^12}{:^12} ", + "pathangle"+idx, "angletangrad"+idx, "anglegrad"+idx, "gradV"+idx, + "RepForce"+idx, "MaxAtomForce"+idx); + } } + fprintf(ulogfile,"\n"); } } print_status(); @@ -292,8 +312,7 @@ void NEB::run() update->endstep = update->laststep = update->firststep + n2steps; update->nsteps = n2steps; update->max_eval = n2steps; - if (update->laststep < 0) - error->all(FLERR,"Too many timesteps"); + if (update->laststep < 0) error->universe_all(FLERR,"Too many timesteps"); update->minimize->init(); fneb->rclimber = top; @@ -301,34 +320,37 @@ void NEB::run() if (me_universe == 0) { if (uscreen) { + fmt::print(uscreen," Step {:^14} {:^14} {:^14} {:^14} {:^14} {:^14} {:^14} {:^14} ", + "MaxReplicaForce", "MaxAtomForce", "GradV0","GradV1","GradVc","EBF", "EBR", "RDT"); + for (int i = 1; i <= nreplica; ++i) + fmt::print(uscreen, "{:^14} {:^14} ", "RD"+std::to_string(i), "PE"+std::to_string(i)); + if (verbose) { - fprintf(uscreen,"Step MaxReplicaForce MaxAtomForce " - "GradV0 GradV1 GradVc EBF EBR RDT " - "RD1 PE1 RD2 PE2 ... RDN PEN " - "pathangle1 angletangrad1 anglegrad1 gradV1 " - "ReplicaForce1 MaxAtomForce1 pathangle2 angletangrad2 " - "... ReplicaForceN MaxAtomForceN\n"); - } else { - fprintf(uscreen,"Step MaxReplicaForce MaxAtomForce " - "GradV0 GradV1 GradVc " - "EBF EBR RDT " - "RD1 PE1 RD2 PE2 ... RDN PEN\n"); + for (int i = 1; i <= nreplica; ++i) { + auto idx = std::to_string(i); + fmt::print(uscreen, "{:^12}{:^12}{:^12} {:^12} {:^12}{:^12} ", + "pathangle"+idx, "angletangrad"+idx, "anglegrad"+idx, "gradV"+idx, + "RepForce"+idx, "MaxAtomForce"+idx); + } } + fprintf(uscreen,"\n"); } + if (ulogfile) { + fmt::print(ulogfile," Step {:^14} {:^14} {:^14} {:^14} {:^14} {:^14} {:^14} {:^14} ", + "MaxReplicaForce", "MaxAtomForce", "GradV0","GradV1","GradVc","EBF", "EBR", "RDT"); + for (int i = 1; i <= nreplica; ++i) + fmt::print(ulogfile, "{:^14} {:^14} ", "RD"+std::to_string(i), "PE"+std::to_string(i)); + if (verbose) { - fprintf(ulogfile,"Step MaxReplicaForce MaxAtomForce " - "GradV0 GradV1 GradVc EBF EBR RDT " - "RD1 PE1 RD2 PE2 ... RDN PEN " - "pathangle1 angletangrad1 anglegrad1 gradV1 " - "ReplicaForce1 MaxAtomForce1 pathangle2 angletangrad2 " - "... ReplicaForceN MaxAtomForceN\n"); - } else { - fprintf(ulogfile,"Step MaxReplicaForce MaxAtomForce " - "GradV0 GradV1 GradVc " - "EBF EBR RDT " - "RD1 PE1 RD2 PE2 ... RDN PEN\n"); + for (int i = 1; i <= nreplica; ++i) { + auto idx = std::to_string(i); + fmt::print(ulogfile, "{:^12}{:^12}{:^12} {:^12} {:^12}{:^12} ", + "pathangle"+idx, "angletangrad"+idx, "anglegrad"+idx, "gradV"+idx, + "RepForce"+idx, "MaxAtomForce"+idx); + } } + fprintf(ulogfile,"\n"); } } print_status(); @@ -420,7 +442,7 @@ void NEB::readfile(char *file, int flag) } MPI_Bcast(&nlines,1,MPI_INT,0,world); if (nlines < 0) - error->all(FLERR,"Incorrectly formatted NEB file"); + error->universe_all(FLERR,"Incorrectly formatted NEB file"); } auto buffer = new char[CHUNK*MAXLINE]; @@ -542,11 +564,11 @@ void NEB::open(char *file) if (platform::has_compress_extension(file)) { compressed = 1; fp = platform::compressed_read(file); - if (!fp) error->one(FLERR,"Cannot open compressed file"); + if (!fp) error->one(FLERR,"Cannot open compressed file {}: {}", file, utils::getsyserror()); } else fp = fopen(file,"r"); if (fp == nullptr) - error->one(FLERR,"Cannot open file {}: {}",file,utils::getsyserror()); + error->one(FLERR,"Cannot open file {}: {}", file, utils::getsyserror()); } /* ---------------------------------------------------------------------- @@ -626,19 +648,19 @@ void NEB::print_status() if (me_universe == 0) { constexpr double todeg=180.0/MY_PI; - std::string mesg = fmt::format("{} {:12.8g} {:12.8g} ",update->ntimestep,fmaxreplica,fmaxatom); - mesg += fmt::format("{:12.8g} {:12.8g} {:12.8g} ",gradvnorm0,gradvnorm1,gradvnormc); - mesg += fmt::format("{:12.8g} {:12.8g} {:12.8g} ",ebf,ebr,endpt); - for (int i = 0; i < nreplica; i++) mesg += fmt::format("{:12.8g} {:12.8g} ",rdist[i],all[i][0]); + std::string mesg = fmt::format("{:10} {:<14.8g} {:<14.8g} ",update->ntimestep,fmaxreplica,fmaxatom); + mesg += fmt::format("{:<14.8g} {:<14.8g} {:<14.8g} ",gradvnorm0,gradvnorm1,gradvnormc); + mesg += fmt::format("{:<14.8g} {:<14.8g} {:<14.8g} ",ebf,ebr,endpt); + for (int i = 0; i < nreplica; i++) mesg += fmt::format("{:<14.8g} {:<14.8g} ",rdist[i],all[i][0]); if (verbose) { - mesg += fmt::format("{:12.5g} {:12.5g} {:12.5g} {:12.5g} {:12.5g} {:12.5g}", + mesg += fmt::format("{:<12.5g} {:<12.5g} {:<12.5g} {:<12.5g} {:<12.5g} {:<12.5g}", NAN,180-acos(all[0][5])*todeg,180-acos(all[0][6])*todeg, all[0][3],freplica[0],fmaxatomInRepl[0]); for (int i = 1; i < nreplica-1; i++) - mesg += fmt::format("{:12.5g} {:12.5g} {:12.5g} {:12.5g} {:12.5g} {:12.5g}", + mesg += fmt::format("{:<12.5g} {:<12.5g} {:<12.5g} {:<12.5g} {:<12.5g} {:<12.5g}", 180-acos(all[i][4])*todeg,180-acos(all[i][5])*todeg, 180-acos(all[i][6])*todeg,all[i][3],freplica[i],fmaxatomInRepl[i]); - mesg += fmt::format("{:12.5g} {:12.5g} {:12.5g} {:12.5g} {:12.5g} {:12.5g}", + mesg += fmt::format("{:<12.5g} {:<12.5g} {:<12.5g} {:<12.5g} {:<12.5g} {:<12.5g}", NAN,180-acos(all[nreplica-1][5])*todeg,NAN,all[nreplica-1][3], freplica[nreplica-1],fmaxatomInRepl[nreplica-1]); } @@ -650,4 +672,8 @@ void NEB::print_status() fflush(universe->ulogfile); } } + if (verbose) { + delete[] freplica; + delete[] fmaxatomInRepl; + } } diff --git a/src/RIGID/fix_shake.cpp b/src/RIGID/fix_shake.cpp index 7c08ca7b4b..1678a36e02 100644 --- a/src/RIGID/fix_shake.cpp +++ b/src/RIGID/fix_shake.cpp @@ -869,13 +869,11 @@ void FixShake::find_clusters() // else it's an error flag = 0; - int flag2 = 0; for (i = 0; i < nlocal; i++) for (j = 0; j < npartner[i]; j++) { if (partner_type[i][j] == 0) flag++; if (!(mask[i] & groupbit)) continue; if (!(partner_mask[i][j] & groupbit)) continue; - if (partner_bondtype[i][j] == 0) flag2++; } MPI_Allreduce(&flag,&flag_all,1,MPI_INT,MPI_SUM,world); diff --git a/src/SPH/atom_vec_sph.cpp b/src/SPH/atom_vec_sph.cpp index c27a53069e..8d92558655 100644 --- a/src/SPH/atom_vec_sph.cpp +++ b/src/SPH/atom_vec_sph.cpp @@ -15,6 +15,8 @@ #include "atom.h" +#include + using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ diff --git a/src/SPH/atom_vec_sph.h b/src/SPH/atom_vec_sph.h index 8e607f3b45..e2b15709c5 100644 --- a/src/SPH/atom_vec_sph.h +++ b/src/SPH/atom_vec_sph.h @@ -24,7 +24,7 @@ AtomStyle(sph,AtomVecSPH); namespace LAMMPS_NS { -class AtomVecSPH : public AtomVec { +class AtomVecSPH : virtual public AtomVec { public: AtomVecSPH(class LAMMPS *); diff --git a/src/SPIN/atom_vec_spin.cpp b/src/SPIN/atom_vec_spin.cpp index 5534f148d3..9a7e4c6aac 100644 --- a/src/SPIN/atom_vec_spin.cpp +++ b/src/SPIN/atom_vec_spin.cpp @@ -28,6 +28,7 @@ #include "atom.h" #include +#include using namespace LAMMPS_NS; diff --git a/src/SPIN/atom_vec_spin.h b/src/SPIN/atom_vec_spin.h index f2eb24afc9..bf11d5856e 100644 --- a/src/SPIN/atom_vec_spin.h +++ b/src/SPIN/atom_vec_spin.h @@ -24,7 +24,7 @@ AtomStyle(spin,AtomVecSpin); namespace LAMMPS_NS { -class AtomVecSpin : public AtomVec { +class AtomVecSpin : virtual public AtomVec { public: AtomVecSpin(class LAMMPS *); @@ -32,7 +32,7 @@ class AtomVecSpin : public AtomVec { void force_clear(int, size_t) override; void data_atom_post(int) override; - private: + protected: double **sp, **fm, **fm_long; }; diff --git a/src/SPIN/fix_setforce_spin.cpp b/src/SPIN/fix_setforce_spin.cpp index b54dbf1b7e..156fe6afbe 100644 --- a/src/SPIN/fix_setforce_spin.cpp +++ b/src/SPIN/fix_setforce_spin.cpp @@ -24,7 +24,6 @@ #include "fix_setforce_spin.h" #include "atom.h" -#include "domain.h" #include "input.h" #include "memory.h" #include "modify.h" diff --git a/src/SPIN/pair_spin.cpp b/src/SPIN/pair_spin.cpp index 15446a2b83..909d9a977a 100644 --- a/src/SPIN/pair_spin.cpp +++ b/src/SPIN/pair_spin.cpp @@ -32,7 +32,6 @@ #include "math_const.h" #include "memory.h" #include "modify.h" -#include "neigh_request.h" #include "neighbor.h" #include "pair.h" #include "update.h" diff --git a/src/STUBS/mpi.cpp b/src/STUBS/mpi.cpp index b68270bbe8..53b83236ba 100644 --- a/src/STUBS/mpi.cpp +++ b/src/STUBS/mpi.cpp @@ -19,7 +19,6 @@ #include #include -#include #include #if defined(_WIN32) diff --git a/src/VORONOI/Install.sh b/src/VORONOI/Install.sh index 6373506b19..c7f897e5e6 100755 --- a/src/VORONOI/Install.sh +++ b/src/VORONOI/Install.sh @@ -48,7 +48,7 @@ if (test $1 = 1) then fi if (test -e ../Makefile.package.settings) then - sed -i -e '/^include.*voronoi.*$/d' ../Makefile.package.settings + sed -i -e '/^[ \t]*include.*voronoi.*$/d' ../Makefile.package.settings # multiline form needed for BSD sed on Macs sed -i -e '4 i \ include ..\/..\/lib\/voronoi\/Makefile.lammps @@ -63,7 +63,7 @@ elif (test $1 = 0) then fi if (test -e ../Makefile.package.settings) then - sed -i -e '/^include.*voronoi.*$/d' ../Makefile.package.settings + sed -i -e '/^[ \t]*include.*voronoi.*$/d' ../Makefile.package.settings fi fi diff --git a/src/VTK/Install.sh b/src/VTK/Install.sh index 3749242fb2..fda4287d51 100755 --- a/src/VTK/Install.sh +++ b/src/VTK/Install.sh @@ -43,7 +43,7 @@ if (test $1 = 1) then fi if (test -e ../Makefile.package.settings) then - sed -i -e '/^include.*vtk.*$/d' ../Makefile.package.settings + sed -i -e '/^[ \t]*include.*vtk.*$/d' ../Makefile.package.settings # multiline form needed for BSD sed on Macs sed -i -e '4 i \ include ..\/..\/lib\/vtk\/Makefile.lammps @@ -58,7 +58,7 @@ elif (test $1 = 0) then fi if (test -e ../Makefile.package.settings) then - sed -i -e '/^include.*vtk.*$/d' ../Makefile.package.settings + sed -i -e '/^[ \t]*include.*vtk.*$/d' ../Makefile.package.settings fi fi diff --git a/src/angle_hybrid.cpp b/src/angle_hybrid.cpp index db768fb243..7419139942 100644 --- a/src/angle_hybrid.cpp +++ b/src/angle_hybrid.cpp @@ -20,7 +20,6 @@ #include "memory.h" #include "neighbor.h" -#include #include using namespace LAMMPS_NS; @@ -306,6 +305,16 @@ void AngleHybrid::coeff(int narg, char **arg) void AngleHybrid::init_style() { + // error if sub-style is not used + + int used; + for (int istyle = 0; istyle < nstyles; ++istyle) { + used = 0; + for (int itype = 1; itype <= atom->nangletypes; ++itype) + if (map[itype] == istyle) used = 1; + if (used == 0) error->all(FLERR, "Angle hybrid sub-style {} is not used", keywords[istyle]); + } + for (int m = 0; m < nstyles; m++) if (styles[m]) styles[m]->init_style(); } diff --git a/src/atom.h b/src/atom.h index 944e0e1484..e8b1330651 100644 --- a/src/atom.h +++ b/src/atom.h @@ -21,9 +21,10 @@ namespace LAMMPS_NS { -// forward declaration +// forward declarations class AtomVec; +class Molecule; class Atom : protected Pointers { public: @@ -252,7 +253,7 @@ class Atom : protected Pointers { // 1st molecule in template stores nset = # in set int nmolecule; - class Molecule **molecules; + Molecule **molecules; // type label maps @@ -354,7 +355,7 @@ class Atom : protected Pointers { void add_molecule(int, char **); int find_molecule(const char *); std::vector get_molecule_by_id(const std::string &); - void add_molecule_atom(class Molecule *, int, int, tagint); + void add_molecule_atom(Molecule *, int, int, tagint); void add_label_map(); diff --git a/src/atom_vec.cpp b/src/atom_vec.cpp index e431488a39..bfda951823 100644 --- a/src/atom_vec.cpp +++ b/src/atom_vec.cpp @@ -20,12 +20,8 @@ #include "fix.h" #include "force.h" #include "label_map.h" -#include "math_const.h" #include "memory.h" #include "modify.h" -#include "tokenizer.h" - -#include using namespace LAMMPS_NS; diff --git a/src/atom_vec.h b/src/atom_vec.h index d5294d2f86..a4db054752 100644 --- a/src/atom_vec.h +++ b/src/atom_vec.h @@ -157,21 +157,6 @@ class AtomVec : protected Pointers { virtual double memory_usage(); virtual double memory_usage_bonus() { return 0; } - // old hybrid functions, needed by Kokkos package - - virtual int pack_comm_hybrid(int, int *, double *) { return 0; } - virtual int unpack_comm_hybrid(int, int, double *) { return 0; } - virtual int pack_reverse_hybrid(int, int, double *) { return 0; } - virtual int unpack_reverse_hybrid(int, int *, double *) { return 0; } - virtual int pack_border_hybrid(int, int *, double *) { return 0; } - virtual int unpack_border_hybrid(int, int, double *) { return 0; } - virtual int data_atom_hybrid(int, const std::vector &, int) { return 0; } - virtual int data_vel_hybrid(int, const std::vector &, int) { return 0; } - virtual int pack_data_hybrid(int, double *) { return 0; } - virtual int write_data_hybrid(FILE *, double *) { return 0; } - virtual int pack_vel_hybrid(int, double *) { return 0; } - virtual int write_vel_hybrid(FILE *, double *) { return 0; } - protected: int nmax; // local copy of atom->nmax int deform_vremap; // local copy of domain properties diff --git a/src/atom_vec_atomic.h b/src/atom_vec_atomic.h index 5afd63bd7c..6fdd570c2e 100644 --- a/src/atom_vec_atomic.h +++ b/src/atom_vec_atomic.h @@ -24,7 +24,7 @@ AtomStyle(atomic,AtomVecAtomic); namespace LAMMPS_NS { -class AtomVecAtomic : public AtomVec { +class AtomVecAtomic : virtual public AtomVec { public: AtomVecAtomic(class LAMMPS *); }; diff --git a/src/atom_vec_body.cpp b/src/atom_vec_body.cpp index 6da3ee6671..538e9783df 100644 --- a/src/atom_vec_body.cpp +++ b/src/atom_vec_body.cpp @@ -22,6 +22,8 @@ #include "modify.h" #include "my_pool_chunk.h" +#include + using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ diff --git a/src/atom_vec_charge.h b/src/atom_vec_charge.h index 5f3bc333e7..2953b7cfcb 100644 --- a/src/atom_vec_charge.h +++ b/src/atom_vec_charge.h @@ -24,7 +24,7 @@ AtomStyle(charge,AtomVecCharge); namespace LAMMPS_NS { -class AtomVecCharge : public AtomVec { +class AtomVecCharge : virtual public AtomVec { public: AtomVecCharge(class LAMMPS *); }; diff --git a/src/atom_vec_ellipsoid.cpp b/src/atom_vec_ellipsoid.cpp index c87179183c..59b8310d3f 100644 --- a/src/atom_vec_ellipsoid.cpp +++ b/src/atom_vec_ellipsoid.cpp @@ -25,6 +25,8 @@ #include "memory.h" #include "modify.h" +#include + using namespace LAMMPS_NS; using MathConst::MY_PI; diff --git a/src/atom_vec_hybrid.cpp b/src/atom_vec_hybrid.cpp index 5e70890414..c81ea56202 100644 --- a/src/atom_vec_hybrid.cpp +++ b/src/atom_vec_hybrid.cpp @@ -16,7 +16,6 @@ #include "atom.h" #include "comm.h" #include "error.h" -#include "tokenizer.h" #include #include diff --git a/src/atom_vec_hybrid.h b/src/atom_vec_hybrid.h index 8a81282f5b..afe44bae6e 100644 --- a/src/atom_vec_hybrid.h +++ b/src/atom_vec_hybrid.h @@ -24,7 +24,7 @@ AtomStyle(hybrid,AtomVecHybrid); namespace LAMMPS_NS { -class AtomVecHybrid : public AtomVec { +class AtomVecHybrid : virtual public AtomVec { public: int nstyles; class AtomVec **styles; diff --git a/src/atom_vec_line.cpp b/src/atom_vec_line.cpp index 92cb994f96..ff09bed6d0 100644 --- a/src/atom_vec_line.cpp +++ b/src/atom_vec_line.cpp @@ -22,6 +22,7 @@ #include "modify.h" #include +#include using namespace LAMMPS_NS; using MathConst::MY_PI; diff --git a/src/atom_vec_sphere.cpp b/src/atom_vec_sphere.cpp index c18e68855c..d2f9c51880 100644 --- a/src/atom_vec_sphere.cpp +++ b/src/atom_vec_sphere.cpp @@ -20,6 +20,8 @@ #include "math_const.h" #include "modify.h" +#include + using namespace LAMMPS_NS; using namespace MathConst; diff --git a/src/atom_vec_sphere.h b/src/atom_vec_sphere.h index 2e42e95fc1..88a879d611 100644 --- a/src/atom_vec_sphere.h +++ b/src/atom_vec_sphere.h @@ -24,7 +24,7 @@ AtomStyle(sphere,AtomVecSphere); namespace LAMMPS_NS { -class AtomVecSphere : public AtomVec { +class AtomVecSphere : virtual public AtomVec { public: AtomVecSphere(class LAMMPS *); void process_args(int, char **) override; @@ -36,7 +36,7 @@ class AtomVecSphere : public AtomVec { void pack_data_pre(int) override; void pack_data_post(int) override; - private: + protected: double *radius, *rmass; double **omega; diff --git a/src/atom_vec_tri.cpp b/src/atom_vec_tri.cpp index 6c66907518..a46609b02c 100644 --- a/src/atom_vec_tri.cpp +++ b/src/atom_vec_tri.cpp @@ -24,6 +24,7 @@ #include "modify.h" #include +#include using namespace LAMMPS_NS; using MathConst::MY_PI; diff --git a/src/bond_hybrid.cpp b/src/bond_hybrid.cpp index 74ee0e3494..4e477ab3a6 100644 --- a/src/bond_hybrid.cpp +++ b/src/bond_hybrid.cpp @@ -20,7 +20,6 @@ #include "memory.h" #include "neighbor.h" -#include #include using namespace LAMMPS_NS; @@ -334,6 +333,16 @@ void BondHybrid::coeff(int narg, char **arg) void BondHybrid::init_style() { + // error if sub-style is not used + + int used; + for (int istyle = 0; istyle < nstyles; ++istyle) { + used = 0; + for (int itype = 1; itype <= atom->nbondtypes; ++itype) + if (map[itype] == istyle) used = 1; + if (used == 0) error->all(FLERR, "Bond hybrid sub-style {} is not used", keywords[istyle]); + } + for (int m = 0; m < nstyles; m++) if (styles[m]) styles[m]->init_style(); diff --git a/src/change_box.cpp b/src/change_box.cpp index 8ecaeaafe0..1cef7c96a5 100644 --- a/src/change_box.cpp +++ b/src/change_box.cpp @@ -281,9 +281,7 @@ void ChangeBox::command(int narg, char **arg) } else if (ops[m].style == BOUNDARY) { domain->set_boundary(3,&arg[ops[m].boundindex],1); if (domain->dimension == 2 && domain->zperiodic == 0) - error->all(FLERR, - "Cannot change box z boundary to " - "non-periodic for a 2d simulation"); + error->all(FLERR, "Cannot change box z boundary to non-periodic for a 2d simulation"); domain->set_initial_box(); domain->set_global_box(); domain->set_local_box(); diff --git a/src/compute_angmom_chunk.h b/src/compute_angmom_chunk.h index f86c69fc67..04023dbe44 100644 --- a/src/compute_angmom_chunk.h +++ b/src/compute_angmom_chunk.h @@ -23,6 +23,7 @@ ComputeStyle(angmom/chunk,ComputeAngmomChunk); #include "compute.h" namespace LAMMPS_NS { + class Fix; class ComputeAngmomChunk : public Compute { public: @@ -34,8 +35,8 @@ class ComputeAngmomChunk : public Compute { void lock_enable() override; void lock_disable() override; int lock_length() override; - void lock(class Fix *, bigint, bigint) override; - void unlock(class Fix *) override; + void lock(Fix *, bigint, bigint) override; + void unlock(Fix *) override; double memory_usage() override; diff --git a/src/compute_cluster_atom.cpp b/src/compute_cluster_atom.cpp index 59139f4c68..0a0a36debd 100644 --- a/src/compute_cluster_atom.cpp +++ b/src/compute_cluster_atom.cpp @@ -17,7 +17,6 @@ #include "comm.h" #include "error.h" #include "force.h" -#include "group.h" #include "memory.h" #include "modify.h" #include "neigh_list.h" diff --git a/src/compute_com_chunk.h b/src/compute_com_chunk.h index bd7c8f6fe0..c617e181fe 100644 --- a/src/compute_com_chunk.h +++ b/src/compute_com_chunk.h @@ -23,6 +23,7 @@ ComputeStyle(com/chunk,ComputeCOMChunk); #include "compute.h" namespace LAMMPS_NS { +class Fix; class ComputeCOMChunk : public Compute { public: @@ -38,8 +39,8 @@ class ComputeCOMChunk : public Compute { void lock_enable() override; void lock_disable() override; int lock_length() override; - void lock(class Fix *, bigint, bigint) override; - void unlock(class Fix *) override; + void lock(Fix *, bigint, bigint) override; + void unlock(Fix *) override; double memory_usage() override; diff --git a/src/compute_dipole_chunk.h b/src/compute_dipole_chunk.h index df2a75712e..42198fe478 100644 --- a/src/compute_dipole_chunk.h +++ b/src/compute_dipole_chunk.h @@ -23,6 +23,7 @@ ComputeStyle(dipole/chunk,ComputeDipoleChunk); #include "compute.h" namespace LAMMPS_NS { +class Fix; class ComputeDipoleChunk : public Compute { public: @@ -34,8 +35,8 @@ class ComputeDipoleChunk : public Compute { void lock_enable() override; void lock_disable() override; int lock_length() override; - void lock(class Fix *, bigint, bigint) override; - void unlock(class Fix *) override; + void lock(Fix *, bigint, bigint) override; + void unlock(Fix *) override; double memory_usage() override; diff --git a/src/compute_fragment_atom.cpp b/src/compute_fragment_atom.cpp index 177b62b5ac..a1fd19d7af 100644 --- a/src/compute_fragment_atom.cpp +++ b/src/compute_fragment_atom.cpp @@ -148,11 +148,7 @@ void ComputeFragmentAtom::compute_peratom() commflag = 1; - int iteration = 0; - while (true) { - iteration++; - comm->forward_comm(this); done = 1; diff --git a/src/compute_reduce.cpp b/src/compute_reduce.cpp index 14c381c84d..f2afeab3e6 100644 --- a/src/compute_reduce.cpp +++ b/src/compute_reduce.cpp @@ -26,6 +26,7 @@ #include "update.h" #include "variable.h" +#include #include using namespace LAMMPS_NS; diff --git a/src/compute_reduce_region.cpp b/src/compute_reduce_region.cpp index f79e160684..efce00ff66 100644 --- a/src/compute_reduce_region.cpp +++ b/src/compute_reduce_region.cpp @@ -15,13 +15,11 @@ #include "arg_info.h" #include "atom.h" -#include "domain.h" #include "error.h" #include "fix.h" #include "group.h" #include "input.h" #include "memory.h" -#include "modify.h" #include "region.h" #include "update.h" #include "variable.h" diff --git a/src/create_atoms.cpp b/src/create_atoms.cpp index 7fda4a4cdb..9c66d1d19b 100644 --- a/src/create_atoms.cpp +++ b/src/create_atoms.cpp @@ -38,7 +38,9 @@ #include "text_file_reader.h" #include "variable.h" +#include #include +#include using namespace LAMMPS_NS; using MathConst::MY_2PI; diff --git a/src/create_bonds.cpp b/src/create_bonds.cpp index 3b36f45500..c6d3f1838e 100644 --- a/src/create_bonds.cpp +++ b/src/create_bonds.cpp @@ -26,7 +26,6 @@ #include "force.h" #include "group.h" #include "neigh_list.h" -#include "neigh_request.h" #include "neighbor.h" #include "special.h" diff --git a/src/deprecated.cpp b/src/deprecated.cpp index 3558935cb3..c39cab1104 100644 --- a/src/deprecated.cpp +++ b/src/deprecated.cpp @@ -32,16 +32,29 @@ void Deprecated::command(int narg, char **arg) if (cmd == "DEPRECATED") { if (lmp->comm->me == 0) utils::logmesg(lmp, "\nCommand 'DEPRECATED' is a dummy command\n\n"); return; - } else if (cmd == "reset_ids") { + } else if (cmd == "box") { if (lmp->comm->me == 0) - utils::logmesg(lmp, "\n'reset_ids' has been renamed to 'reset_atom_ids'\n\n"); + utils::logmesg(lmp, "\nThe 'box' command has been removed and will be ignored\n\n"); + return; } else if (utils::strmatch(cmd, "^kim_")) { - if (lmp->comm->me == 0) - utils::logmesg(lmp, - "\nWARNING: 'kim_' has been renamed to 'kim '. " - "Please update your input.\n\n"); std::string newcmd("kim"); newcmd += " " + cmd.substr(4); + if (lmp->comm->me == 0) + utils::logmesg(lmp, "\nWARNING: '{}' has been renamed to '{}'. Please update your input.\n\n", + cmd, newcmd); + for (int i = 0; i < narg; ++i) { + newcmd.append(1, ' '); + newcmd.append(arg[i]); + } + input->one(newcmd); + return; + } else if (utils::strmatch(cmd, "^reset_")) { + std::string newcmd("reset_atoms"); + if ((cmd == "reset_ids") || (cmd == "reset_atom_ids")) newcmd += " id"; + if (cmd == "reset_mol_ids") newcmd += " mol"; + if (lmp->comm->me == 0) + utils::logmesg(lmp, "\nWARNING: '{}' has been renamed to '{}'. Please update your input.\n\n", + cmd, newcmd); for (int i = 0; i < narg; ++i) { newcmd.append(1, ' '); newcmd.append(arg[i]); diff --git a/src/deprecated.h b/src/deprecated.h index e2e7e396e9..085bf5d47d 100644 --- a/src/deprecated.h +++ b/src/deprecated.h @@ -14,12 +14,15 @@ #ifdef COMMAND_CLASS // clang-format off CommandStyle(DEPRECATED,Deprecated); -CommandStyle(reset_ids,Deprecated); +CommandStyle(box,Deprecated); CommandStyle(kim_init,Deprecated); CommandStyle(kim_interactions,Deprecated); CommandStyle(kim_param,Deprecated); CommandStyle(kim_property,Deprecated); CommandStyle(kim_query,Deprecated); +CommandStyle(reset_ids,Deprecated); +CommandStyle(reset_atom_ids,Deprecated); +CommandStyle(reset_mol_ids,Deprecated); CommandStyle(message,Deprecated); CommandStyle(server,Deprecated); // clang-format on diff --git a/src/dihedral_hybrid.cpp b/src/dihedral_hybrid.cpp index 129ea9a975..d38ccf5d52 100644 --- a/src/dihedral_hybrid.cpp +++ b/src/dihedral_hybrid.cpp @@ -20,7 +20,6 @@ #include "memory.h" #include "neighbor.h" -#include #include using namespace LAMMPS_NS; @@ -313,6 +312,16 @@ void DihedralHybrid::coeff(int narg, char **arg) void DihedralHybrid::init_style() { + // error if sub-style is not used + + int used; + for (int istyle = 0; istyle < nstyles; ++istyle) { + used = 0; + for (int itype = 1; itype <= atom->ndihedraltypes; ++itype) + if (map[itype] == istyle) used = 1; + if (used == 0) error->all(FLERR, "Dihedral hybrid sub-style {} is not used", keywords[istyle]); + } + for (int m = 0; m < nstyles; m++) if (styles[m]) styles[m]->init_style(); } diff --git a/src/domain.cpp b/src/domain.cpp index fe57aa6a96..97f626cbcd 100644 --- a/src/domain.cpp +++ b/src/domain.cpp @@ -82,7 +82,6 @@ Domain::Domain(LAMMPS *lmp) : Pointers(lmp) minzlo = minzhi = 0.0; triclinic = 0; - tiltsmall = 1; boxlo[0] = boxlo[1] = boxlo[2] = -0.5; boxhi[0] = boxhi[1] = boxhi[2] = 0.5; @@ -212,16 +211,13 @@ void Domain::set_initial_box(int expandflag) if (dimension == 2 && (xz != 0.0 || yz != 0.0)) error->all(FLERR,"Cannot skew triclinic box in z for 2d simulation"); - // error check or warning on triclinic tilt factors + // check on triclinic tilt factors if (triclinic) { - if ((fabs(xy/(boxhi[0]-boxlo[0])) > 0.5 && xperiodic) || - (fabs(xz/(boxhi[0]-boxlo[0])) > 0.5 && xperiodic) || - (fabs(yz/(boxhi[1]-boxlo[1])) > 0.5 && yperiodic)) { - if (tiltsmall) - error->all(FLERR,"Triclinic box skew is too large"); - else if (comm->me == 0) - error->warning(FLERR,"Triclinic box skew is large"); + if ((fabs(xy/(boxhi[1]-boxlo[1])) > 0.5 && yperiodic) || + ((fabs(xz)+fabs(yz))/(boxhi[2]-boxlo[2]) > 0.5 && zperiodic)) { + if (comm->me == 0) + error->warning(FLERR,"Triclinic box skew is large. LAMMPS will run inefficiently."); } } @@ -981,25 +977,33 @@ void Domain::subbox_too_small_check(double thresh) this should not be used if atom has moved infinitely far outside box b/c while could iterate forever e.g. fix shake prediction of new position with highly overlapped atoms - use minimum_image_once() instead + uses minimum_image_once() instead ------------------------------------------------------------------------- */ +static constexpr double MAXIMGCOUNT = 16; + void Domain::minimum_image(double &dx, double &dy, double &dz) { if (triclinic == 0) { if (xperiodic) { + if (fabs(dx) > (MAXIMGCOUNT * xprd)) + error->one(FLERR, "Atoms have moved too far apart ({}) for minimum image\n", dx); while (fabs(dx) > xprd_half) { if (dx < 0.0) dx += xprd; else dx -= xprd; } } if (yperiodic) { + if (fabs(dy) > (MAXIMGCOUNT * yprd)) + error->one(FLERR, "Atoms have moved too far apart ({}) for minimum image\n", dy); while (fabs(dy) > yprd_half) { if (dy < 0.0) dy += yprd; else dy -= yprd; } } if (zperiodic) { + if (fabs(dz) > (MAXIMGCOUNT * zprd)) + error->one(FLERR, "Atoms have moved too far apart ({}) for minimum image\n", dz); while (fabs(dz) > zprd_half) { if (dz < 0.0) dz += zprd; else dz -= zprd; @@ -1008,6 +1012,8 @@ void Domain::minimum_image(double &dx, double &dy, double &dz) } else { if (zperiodic) { + if (fabs(dz) > (MAXIMGCOUNT * zprd)) + error->one(FLERR, "Atoms have moved too far apart ({}) for minimum image\n", dz); while (fabs(dz) > zprd_half) { if (dz < 0.0) { dz += zprd; @@ -1021,6 +1027,8 @@ void Domain::minimum_image(double &dx, double &dy, double &dz) } } if (yperiodic) { + if (fabs(dy) > (MAXIMGCOUNT * yprd)) + error->one(FLERR, "Atoms have moved too far apart ({}) for minimum image\n", dy); while (fabs(dy) > yprd_half) { if (dy < 0.0) { dy += yprd; @@ -1032,6 +1040,8 @@ void Domain::minimum_image(double &dx, double &dy, double &dz) } } if (xperiodic) { + if (fabs(dx) > (MAXIMGCOUNT * xprd)) + error->one(FLERR, "Atoms have moved too far apart ({}) for minimum image\n", dx); while (fabs(dx) > xprd_half) { if (dx < 0.0) dx += xprd; else dx -= xprd; @@ -1040,75 +1050,6 @@ void Domain::minimum_image(double &dx, double &dy, double &dz) } } -/* ---------------------------------------------------------------------- - minimum image convention in periodic dimensions - use 1/2 of box size as test - for triclinic, also add/subtract tilt factors in other dims as needed - changed "if" to "while" to enable distance to - far-away ghost atom returned by atom->map() to be wrapped back into box - could be problem for looking up atom IDs when cutoff > boxsize - this should not be used if atom has moved infinitely far outside box - b/c while could iterate forever - e.g. fix shake prediction of new position with highly overlapped atoms - use minimum_image_once() instead -------------------------------------------------------------------------- */ - -void Domain::minimum_image(double *delta) -{ - if (triclinic == 0) { - if (xperiodic) { - while (fabs(delta[0]) > xprd_half) { - if (delta[0] < 0.0) delta[0] += xprd; - else delta[0] -= xprd; - } - } - if (yperiodic) { - while (fabs(delta[1]) > yprd_half) { - if (delta[1] < 0.0) delta[1] += yprd; - else delta[1] -= yprd; - } - } - if (zperiodic) { - while (fabs(delta[2]) > zprd_half) { - if (delta[2] < 0.0) delta[2] += zprd; - else delta[2] -= zprd; - } - } - - } else { - if (zperiodic) { - while (fabs(delta[2]) > zprd_half) { - if (delta[2] < 0.0) { - delta[2] += zprd; - delta[1] += yz; - delta[0] += xz; - } else { - delta[2] -= zprd; - delta[1] -= yz; - delta[0] -= xz; - } - } - } - if (yperiodic) { - while (fabs(delta[1]) > yprd_half) { - if (delta[1] < 0.0) { - delta[1] += yprd; - delta[0] += xy; - } else { - delta[1] -= yprd; - delta[0] -= xy; - } - } - } - if (xperiodic) { - while (fabs(delta[0]) > xprd_half) { - if (delta[0] < 0.0) delta[0] += xprd; - else delta[0] -= xprd; - } - } - } -} - /* ---------------------------------------------------------------------- minimum image convention in periodic dimensions use 1/2 of box size as test @@ -1929,26 +1870,6 @@ void Domain::set_boundary(int narg, char **arg, int flag) } } -/* ---------------------------------------------------------------------- - set domain attributes -------------------------------------------------------------------------- */ - -void Domain::set_box(int narg, char **arg) -{ - if (narg < 1) utils::missing_cmd_args(FLERR, "box", error); - - int iarg = 0; - while (iarg < narg) { - if (strcmp(arg[iarg],"tilt") == 0) { - if (iarg+2 > narg) utils::missing_cmd_args(FLERR, "box tilt", error); - if (strcmp(arg[iarg+1],"small") == 0) tiltsmall = 1; - else if (strcmp(arg[iarg+1],"large") == 0) tiltsmall = 0; - else error->all(FLERR,"Unknown box tilt argument: {}", arg[iarg+1]); - iarg += 2; - } else error->all(FLERR,"Unknown box keyword: {}", arg[iarg]); - } -} - /* ---------------------------------------------------------------------- print box info, orthogonal or triclinic ------------------------------------------------------------------------- */ diff --git a/src/domain.h b/src/domain.h index 6bb39c747a..1999baac2b 100644 --- a/src/domain.h +++ b/src/domain.h @@ -19,7 +19,6 @@ #include #include #include -#include namespace LAMMPS_NS { class Region; @@ -41,7 +40,6 @@ class Domain : protected Pointers { // 3 = shrink-wrap non-per w/ min int triclinic; // 0 = orthog box, 1 = triclinic - int tiltsmall; // 1 if limit tilt, else 0 // orthogonal box @@ -120,7 +118,7 @@ class Domain : protected Pointers { void box_too_small_check(); void subbox_too_small_check(double); void minimum_image(double &, double &, double &); - void minimum_image(double *); + void minimum_image(double *delta) { minimum_image(delta[0], delta[1], delta[2]); } void minimum_image_once(double *); int closest_image(int, int); int closest_image(const double *const, int); @@ -141,7 +139,6 @@ class Domain : protected Pointers { const std::vector get_region_by_style(const std::string &) const; const std::vector get_region_list(); void set_boundary(int, char **, int); - void set_box(int, char **); void print_box(const std::string &); void boundary_string(char *); diff --git a/src/dump.cpp b/src/dump.cpp index 93d9ee30bf..82a25c31f2 100644 --- a/src/dump.cpp +++ b/src/dump.cpp @@ -29,6 +29,7 @@ #include "variable.h" #include +#include using namespace LAMMPS_NS; diff --git a/src/error.cpp b/src/error.cpp index bf0f56d7a6..c49bc6ce58 100644 --- a/src/error.cpp +++ b/src/error.cpp @@ -122,7 +122,7 @@ void Error::universe_one(const std::string &file, int line, const std::string &s void Error::universe_warn(const std::string &file, int line, const std::string &str) { ++numwarn; - if ((numwarn > maxwarn) || (allwarn > maxwarn) || (maxwarn < 0)) return; + if ((maxwarn != 0) && ((numwarn > maxwarn) || (allwarn > maxwarn) || (maxwarn < 0))) return; if (universe->uscreen) fmt::print(universe->uscreen,"WARNING on proc {}: {} ({}:{})\n", universe->me,str,truncpath(file),line); @@ -254,7 +254,7 @@ void Error::_one(const std::string &file, int line, fmt::string_view format, void Error::warning(const std::string &file, int line, const std::string &str) { ++numwarn; - if ((numwarn > maxwarn) || (allwarn > maxwarn) || (maxwarn < 0)) return; + if ((maxwarn != 0) && ((numwarn > maxwarn) || (allwarn > maxwarn) || (maxwarn < 0))) return; std::string mesg = fmt::format("WARNING: {} ({}:{})\n", str,truncpath(file),line); if (screen) fputs(mesg.c_str(),screen); diff --git a/src/finish.cpp b/src/finish.cpp index 3217d025f9..554f250fe1 100644 --- a/src/finish.cpp +++ b/src/finish.cpp @@ -24,8 +24,6 @@ #include "memory.h" // IWYU pragma: keep #include "min.h" #include "molecule.h" -#include "neigh_list.h" -#include "neigh_request.h" #include "neighbor.h" // IWYU pragma: keep #include "output.h" #include "pair.h" diff --git a/src/fix_ave_time.cpp b/src/fix_ave_time.cpp index 0d1797fc6d..6c0397c74b 100644 --- a/src/fix_ave_time.cpp +++ b/src/fix_ave_time.cpp @@ -29,6 +29,7 @@ #include "variable.h" #include +#include using namespace LAMMPS_NS; using namespace FixConst; diff --git a/src/fix_bond_history.cpp b/src/fix_bond_history.cpp index a2da9f8b6e..cae9dc744d 100644 --- a/src/fix_bond_history.cpp +++ b/src/fix_bond_history.cpp @@ -264,6 +264,9 @@ void FixBondHistory::write_restart(FILE *fp) double list[1]; list[n++] = stored_flag; + // Update stored values if needed + pre_exchange(); + if (comm->me == 0) { int size = n * sizeof(double); fwrite(&size, sizeof(int), 1, fp); diff --git a/src/fix_bond_history.h b/src/fix_bond_history.h index 23d6a62d52..fafcf52bd9 100644 --- a/src/fix_bond_history.h +++ b/src/fix_bond_history.h @@ -24,7 +24,6 @@ FixStyle(BOND_HISTORY,FixBondHistory); #include #include -#include namespace LAMMPS_NS { diff --git a/src/fix_nve.cpp b/src/fix_nve.cpp index af87eb42d8..30c1f24867 100644 --- a/src/fix_nve.cpp +++ b/src/fix_nve.cpp @@ -15,7 +15,6 @@ #include "fix_nve.h" #include "atom.h" -#include "error.h" #include "force.h" #include "respa.h" #include "update.h" diff --git a/src/fix_nve_noforce.cpp b/src/fix_nve_noforce.cpp index aaac45adb0..27fcc49f13 100644 --- a/src/fix_nve_noforce.cpp +++ b/src/fix_nve_noforce.cpp @@ -14,7 +14,6 @@ #include "fix_nve_noforce.h" #include "atom.h" -#include "error.h" #include "respa.h" #include "update.h" diff --git a/src/fix_pair.cpp b/src/fix_pair.cpp index 360cee2d5a..5e5ccbf810 100644 --- a/src/fix_pair.cpp +++ b/src/fix_pair.cpp @@ -15,19 +15,12 @@ #include "fix_pair.h" #include "atom.h" -#include "dump.h" #include "error.h" #include "force.h" #include "fix.h" -#include "input.h" #include "memory.h" #include "pair.h" -#include "output.h" -#include "variable.h" #include "update.h" -#include "variable.h" - -#include using namespace LAMMPS_NS; using namespace FixConst; diff --git a/src/fix_property_atom.cpp b/src/fix_property_atom.cpp index 68440e4d58..95e25c59b2 100644 --- a/src/fix_property_atom.cpp +++ b/src/fix_property_atom.cpp @@ -275,6 +275,7 @@ void FixPropertyAtom::read_data_section(char *keyword, int n, char *buf, tagint for (int i = 0; i < n; i++) { next = strchr(buf, '\n'); + if (!next) error->all(FLERR, "Unexpected end of file while reading data section"); *next = '\0'; try { @@ -324,12 +325,12 @@ void FixPropertyAtom::read_data_section(char *keyword, int n, char *buf, tagint } /* ---------------------------------------------------------------------- - return # of lines in section of data file labeled by keyword + return # of lines in section of data file labeled by keyword. -1 signals use # of added atoms ------------------------------------------------------------------------- */ bigint FixPropertyAtom::read_data_skip_lines(char * /*keyword*/) { - return atom->natoms; + return -1; } /* ---------------------------------------------------------------------- diff --git a/src/fix_store_global.cpp b/src/fix_store_global.cpp index 0d71deb1fa..cebf4f7690 100644 --- a/src/fix_store_global.cpp +++ b/src/fix_store_global.cpp @@ -13,7 +13,6 @@ #include "fix_store_global.h" -#include "atom.h" #include "comm.h" #include "error.h" #include "memory.h" diff --git a/src/fix_store_local.cpp b/src/fix_store_local.cpp index 74083257d0..d32f0e8178 100644 --- a/src/fix_store_local.cpp +++ b/src/fix_store_local.cpp @@ -14,7 +14,6 @@ #include "fix_store_local.h" #include "atom.h" -#include "comm.h" #include "error.h" #include "memory.h" #include "update.h" diff --git a/src/fix_store_peratom.cpp b/src/fix_store_peratom.cpp index d11cb7d8c1..6f5637e3f6 100644 --- a/src/fix_store_peratom.cpp +++ b/src/fix_store_peratom.cpp @@ -14,7 +14,6 @@ #include "fix_store_peratom.h" #include "atom.h" -#include "comm.h" #include "error.h" #include "memory.h" diff --git a/src/fix_update_special_bonds.cpp b/src/fix_update_special_bonds.cpp index b96b079846..1c2f91f06b 100644 --- a/src/fix_update_special_bonds.cpp +++ b/src/fix_update_special_bonds.cpp @@ -15,11 +15,11 @@ #include "atom.h" #include "atom_vec.h" +#include "comm.h" #include "error.h" #include "force.h" #include "modify.h" #include "neigh_list.h" -#include "neighbor.h" #include "pair.h" #include @@ -35,6 +35,8 @@ FixUpdateSpecialBonds::FixUpdateSpecialBonds(LAMMPS *lmp, int narg, char **arg) Fix(lmp, narg, arg) { if (narg != 3) error->all(FLERR, "Illegal fix update/special/bonds command"); + + restart_global = 1; } /* ---------------------------------------------------------------------- */ @@ -70,12 +72,6 @@ void FixUpdateSpecialBonds::setup(int /*vflag*/) force->special_coul[3] != 1.0) error->all(FLERR, "Fix update/special/bonds requires special Coulomb weights = 1,1,1"); // Implies neighbor->special_flag = [X, 2, 1, 1] - - new_broken_pairs.clear(); - broken_pairs.clear(); - - new_created_pairs.clear(); - created_pairs.clear(); } /* ---------------------------------------------------------------------- @@ -247,3 +243,18 @@ void FixUpdateSpecialBonds::add_created_bond(int i, int j) new_created_pairs.push_back(tag_pair); created_pairs.push_back(tag_pair); } + +/* ---------------------------------------------------------------------- + Use write_restart to invoke pre_exchange +------------------------------------------------------------------------- */ + +void FixUpdateSpecialBonds::write_restart(FILE *fp) +{ + // Call pre-exchange to process any broken/created bonds + + pre_exchange(); + if (comm->me == 0) { + int size = 0; + fwrite(&size,sizeof(int),1,fp); + } +} diff --git a/src/fix_update_special_bonds.h b/src/fix_update_special_bonds.h index 722d8f5369..30d0faeb4b 100644 --- a/src/fix_update_special_bonds.h +++ b/src/fix_update_special_bonds.h @@ -23,7 +23,6 @@ FixStyle(UPDATE_SPECIAL_BONDS,FixUpdateSpecialBonds); #include "fix.h" #include -#include namespace LAMMPS_NS { @@ -36,6 +35,7 @@ class FixUpdateSpecialBonds : public Fix { void pre_force(int) override; void add_broken_bond(int, int); void add_created_bond(int, int); + void write_restart(FILE *) override; protected: // Create two arrays to store bonds broken this timestep (new) diff --git a/src/image.cpp b/src/image.cpp index 8c503adf92..9587d4ca81 100644 --- a/src/image.cpp +++ b/src/image.cpp @@ -981,7 +981,6 @@ void Image::compute_SSAO() double minPeak = -1; double peakLen = 0.0; - int stepsTaken = 1; while ((small > 0 && ind <= end) || (small < 0 && ind >= end)) { if (ind < 0 || ind >= (width*height)) { break; @@ -1001,7 +1000,6 @@ void Image::compute_SSAO() ind += large; err -= 1.0; } - stepsTaken ++; } if (peakLen > 0) { diff --git a/src/imbalance_neigh.cpp b/src/imbalance_neigh.cpp index ade49dd8e4..40b7f6b249 100644 --- a/src/imbalance_neigh.cpp +++ b/src/imbalance_neigh.cpp @@ -17,8 +17,6 @@ #include "atom.h" #include "comm.h" #include "error.h" -#include "neigh_list.h" -#include "neigh_request.h" #include "neighbor.h" using namespace LAMMPS_NS; diff --git a/src/improper_hybrid.cpp b/src/improper_hybrid.cpp index 6d73ed7cc7..9aa20d236e 100644 --- a/src/improper_hybrid.cpp +++ b/src/improper_hybrid.cpp @@ -20,7 +20,6 @@ #include "memory.h" #include "neighbor.h" -#include #include using namespace LAMMPS_NS; @@ -305,6 +304,16 @@ void ImproperHybrid::coeff(int narg, char **arg) void ImproperHybrid::init_style() { + // error if sub-style is not used + + int used; + for (int istyle = 0; istyle < nstyles; ++istyle) { + used = 0; + for (int itype = 1; itype <= atom->nimpropertypes; ++itype) + if (map[itype] == istyle) used = 1; + if (used == 0) error->all(FLERR, "Improper hybrid sub-style {} is not used", keywords[istyle]); + } + for (int m = 0; m < nstyles; m++) if (styles[m]) styles[m]->init_style(); } diff --git a/src/info.cpp b/src/info.cpp index 1e1e8122aa..cd1b2eddf6 100644 --- a/src/info.cpp +++ b/src/info.cpp @@ -63,7 +63,9 @@ #endif #if defined(__linux__) +#include #include +#include #endif namespace LAMMPS_NS { @@ -1185,11 +1187,10 @@ bool Info::has_accelerator_feature(const std::string &package, } if (category == "api") { #if defined(_OPENMP) - if (setting == "openmp") return true; + return setting == "openmp"; #else - if (setting == "serial") return true; + return setting == "serial"; #endif - return false; } } #endif @@ -1198,7 +1199,7 @@ bool Info::has_accelerator_feature(const std::string &package, if (category == "precision") { if (setting == "double") return true; else if (setting == "mixed") return true; - else if (setting == "single")return true; + else if (setting == "single") return true; else return false; } if (category == "api") { diff --git a/src/input.cpp b/src/input.cpp index 5128f0261f..f18ef1efb8 100644 --- a/src/input.cpp +++ b/src/input.cpp @@ -749,77 +749,77 @@ int Input::execute_command() { int flag = 1; - if (!strcmp(command,"clear")) clear(); - else if (!strcmp(command,"echo")) echo(); - else if (!strcmp(command,"if")) ifthenelse(); - else if (!strcmp(command,"include")) include(); - else if (!strcmp(command,"jump")) jump(); - else if (!strcmp(command,"label")) label(); - else if (!strcmp(command,"log")) log(); - else if (!strcmp(command,"next")) next_command(); - else if (!strcmp(command,"partition")) partition(); - else if (!strcmp(command,"print")) print(); - else if (!strcmp(command,"python")) python(); - else if (!strcmp(command,"quit")) quit(); - else if (!strcmp(command,"shell")) shell(); - else if (!strcmp(command,"variable")) variable_command(); + std::string mycmd = command; + if (mycmd == "clear") clear(); + else if (mycmd == "echo") echo(); + else if (mycmd == "if") ifthenelse(); + else if (mycmd == "include") include(); + else if (mycmd == "jump") jump(); + else if (mycmd == "label") label(); + else if (mycmd == "log") log(); + else if (mycmd == "next") next_command(); + else if (mycmd == "partition") partition(); + else if (mycmd == "print") print(); + else if (mycmd == "python") python(); + else if (mycmd == "quit") quit(); + else if (mycmd == "shell") shell(); + else if (mycmd == "variable") variable_command(); - else if (!strcmp(command,"angle_coeff")) angle_coeff(); - else if (!strcmp(command,"angle_style")) angle_style(); - else if (!strcmp(command,"atom_modify")) atom_modify(); - else if (!strcmp(command,"atom_style")) atom_style(); - else if (!strcmp(command,"bond_coeff")) bond_coeff(); - else if (!strcmp(command,"bond_style")) bond_style(); - else if (!strcmp(command,"bond_write")) bond_write(); - else if (!strcmp(command,"boundary")) boundary(); - else if (!strcmp(command,"box")) box(); - else if (!strcmp(command,"comm_modify")) comm_modify(); - else if (!strcmp(command,"comm_style")) comm_style(); - else if (!strcmp(command,"compute")) compute(); - else if (!strcmp(command,"compute_modify")) compute_modify(); - else if (!strcmp(command,"dielectric")) dielectric(); - else if (!strcmp(command,"dihedral_coeff")) dihedral_coeff(); - else if (!strcmp(command,"dihedral_style")) dihedral_style(); - else if (!strcmp(command,"dimension")) dimension(); - else if (!strcmp(command,"dump")) dump(); - else if (!strcmp(command,"dump_modify")) dump_modify(); - else if (!strcmp(command,"fix")) fix(); - else if (!strcmp(command,"fix_modify")) fix_modify(); - else if (!strcmp(command,"group")) group_command(); - else if (!strcmp(command,"improper_coeff")) improper_coeff(); - else if (!strcmp(command,"improper_style")) improper_style(); - else if (!strcmp(command,"kspace_modify")) kspace_modify(); - else if (!strcmp(command,"kspace_style")) kspace_style(); - else if (!strcmp(command,"labelmap")) labelmap(); - else if (!strcmp(command,"lattice")) lattice(); - else if (!strcmp(command,"mass")) mass(); - else if (!strcmp(command,"min_modify")) min_modify(); - else if (!strcmp(command,"min_style")) min_style(); - else if (!strcmp(command,"molecule")) molecule(); - else if (!strcmp(command,"neigh_modify")) neigh_modify(); - else if (!strcmp(command,"neighbor")) neighbor_command(); - else if (!strcmp(command,"newton")) newton(); - else if (!strcmp(command,"package")) package(); - else if (!strcmp(command,"pair_coeff")) pair_coeff(); - else if (!strcmp(command,"pair_modify")) pair_modify(); - else if (!strcmp(command,"pair_style")) pair_style(); - else if (!strcmp(command,"pair_write")) pair_write(); - else if (!strcmp(command,"processors")) processors(); - else if (!strcmp(command,"region")) region(); - else if (!strcmp(command,"reset_timestep")) reset_timestep(); - else if (!strcmp(command,"restart")) restart(); - else if (!strcmp(command,"run_style")) run_style(); - else if (!strcmp(command,"special_bonds")) special_bonds(); - else if (!strcmp(command,"suffix")) suffix(); - else if (!strcmp(command,"thermo")) thermo(); - else if (!strcmp(command,"thermo_modify")) thermo_modify(); - else if (!strcmp(command,"thermo_style")) thermo_style(); - else if (!strcmp(command,"timestep")) timestep(); - else if (!strcmp(command,"timer")) timer_command(); - else if (!strcmp(command,"uncompute")) uncompute(); - else if (!strcmp(command,"undump")) undump(); - else if (!strcmp(command,"unfix")) unfix(); - else if (!strcmp(command,"units")) units(); + else if (mycmd == "angle_coeff") angle_coeff(); + else if (mycmd == "angle_style") angle_style(); + else if (mycmd == "atom_modify") atom_modify(); + else if (mycmd == "atom_style") atom_style(); + else if (mycmd == "bond_coeff") bond_coeff(); + else if (mycmd == "bond_style") bond_style(); + else if (mycmd == "bond_write") bond_write(); + else if (mycmd == "boundary") boundary(); + else if (mycmd == "comm_modify") comm_modify(); + else if (mycmd == "comm_style") comm_style(); + else if (mycmd == "compute") compute(); + else if (mycmd == "compute_modify") compute_modify(); + else if (mycmd == "dielectric") dielectric(); + else if (mycmd == "dihedral_coeff") dihedral_coeff(); + else if (mycmd == "dihedral_style") dihedral_style(); + else if (mycmd == "dimension") dimension(); + else if (mycmd == "dump") dump(); + else if (mycmd == "dump_modify") dump_modify(); + else if (mycmd == "fix") fix(); + else if (mycmd == "fix_modify") fix_modify(); + else if (mycmd == "group") group_command(); + else if (mycmd == "improper_coeff") improper_coeff(); + else if (mycmd == "improper_style") improper_style(); + else if (mycmd == "kspace_modify") kspace_modify(); + else if (mycmd == "kspace_style") kspace_style(); + else if (mycmd == "labelmap") labelmap(); + else if (mycmd == "lattice") lattice(); + else if (mycmd == "mass") mass(); + else if (mycmd == "min_modify") min_modify(); + else if (mycmd == "min_style") min_style(); + else if (mycmd == "molecule") molecule(); + else if (mycmd == "neigh_modify") neigh_modify(); + else if (mycmd == "neighbor") neighbor_command(); + else if (mycmd == "newton") newton(); + else if (mycmd == "package") package(); + else if (mycmd == "pair_coeff") pair_coeff(); + else if (mycmd == "pair_modify") pair_modify(); + else if (mycmd == "pair_style") pair_style(); + else if (mycmd == "pair_write") pair_write(); + else if (mycmd == "processors") processors(); + else if (mycmd == "region") region(); + else if (mycmd == "reset_timestep") reset_timestep(); + else if (mycmd == "restart") restart(); + else if (mycmd == "run_style") run_style(); + else if (mycmd == "special_bonds") special_bonds(); + else if (mycmd == "suffix") suffix(); + else if (mycmd == "thermo") thermo(); + else if (mycmd == "thermo_modify") thermo_modify(); + else if (mycmd == "thermo_style") thermo_style(); + else if (mycmd == "timestep") timestep(); + else if (mycmd == "timer") timer_command(); + else if (mycmd == "uncompute") uncompute(); + else if (mycmd == "undump") undump(); + else if (mycmd == "unfix") unfix(); + else if (mycmd == "units") units(); else flag = 0; @@ -827,10 +827,15 @@ int Input::execute_command() if (flag) return 0; + // process "meta-commands", i.e. commands that may have sub-commands + // they return 1 if there was a match and 0 if not + + if (mycmd == "reset_atoms") flag = meta(mycmd); + if (flag) return 0; + // invoke commands added via style_command.h // try suffixed version first - std::string mycmd = command; if (lmp->suffix_enable && lmp->non_pair_suffix()) { mycmd = command + std::string("/") + lmp->non_pair_suffix(); if (command_map->find(mycmd) == command_map->end()) { @@ -1411,15 +1416,6 @@ void Input::boundary() /* ---------------------------------------------------------------------- */ -void Input::box() -{ - if (domain->box_exist) - error->all(FLERR,"Box command after simulation box is defined"); - domain->set_box(narg,arg); -} - -/* ---------------------------------------------------------------------- */ - void Input::comm_modify() { comm->modify_params(narg,arg); @@ -1728,7 +1724,7 @@ void Input::pair_coeff() if (force->pair == nullptr) error->all(FLERR,"Pair_coeff command without a pair style"); if (narg < 2) utils::missing_cmd_args(FLERR,"pair_coeff", error); if (force->pair->one_coeff && ((strcmp(arg[0],"*") != 0) || (strcmp(arg[1],"*") != 0))) - error->all(FLERR,"Pair_coeff must start with * * for this pair style"); + error->all(FLERR,"Pair_coeff must start with * * for pair style {}", force->pair_style); char *newarg0 = utils::expand_type(FLERR, arg[0], Atom::ATOM, lmp); if (newarg0) arg[0] = newarg0; @@ -1988,3 +1984,21 @@ void Input::units() error->all(FLERR,"Units command after simulation box is defined"); update->set_units(arg[0]); } + +/* ---------------------------------------------------------------------- */ +/* ---------------------------------------------------------------------- + function for meta commands +------------------------------------------------------------------------- */ +/* ---------------------------------------------------------------------- */ + +int Input::meta(const std::string &prefix) +{ + auto mycmd = fmt::format("{}_{}", utils::uppercase(prefix), utils::uppercase(arg[0])); + if (command_map->find(mycmd) != command_map->end()) { + CommandCreator &command_creator = (*command_map)[mycmd]; + Command *cmd = command_creator(lmp); + cmd->command(narg-1,arg+1); + delete cmd; + return 1; + } else return 0; +} diff --git a/src/input.h b/src/input.h index de4c393693..5a29484cbc 100644 --- a/src/input.h +++ b/src/input.h @@ -70,6 +70,8 @@ class Input : protected Pointers { void reallocate(char *&, int &, int); // reallocate a char string int execute_command(); // execute a single command + int meta(const std::string &); // process meta-commands + void clear(); // input script commands void echo(); void ifthenelse(); @@ -94,7 +96,6 @@ class Input : protected Pointers { void bond_style(); void bond_write(); void boundary(); - void box(); void comm_modify(); void comm_style(); void compute(); @@ -143,7 +144,5 @@ class Input : protected Pointers { void unfix(); void units(); }; - } // namespace LAMMPS_NS - #endif diff --git a/src/label_map.cpp b/src/label_map.cpp index e1cde7cae4..67b1ae480d 100644 --- a/src/label_map.cpp +++ b/src/label_map.cpp @@ -17,7 +17,6 @@ #include "comm.h" #include "error.h" #include "force.h" -#include "memory.h" #include diff --git a/src/lammps.cpp b/src/lammps.cpp index 5e9fed61b7..cc32578f22 100644 --- a/src/lammps.cpp +++ b/src/lammps.cpp @@ -527,7 +527,7 @@ LAMMPS::LAMMPS(int narg, char **arg, MPI_Comm communicator) : // warn against using I/O redirection in parallel runs if ((inflag == 0) && (universe->nprocs > 1)) error->warning(FLERR, "Using I/O redirection is unreliable with parallel runs. " - "Better use -in switch to read input file."); + "Better to use the -in switch to read input files."); utils::flush_buffers(this); } diff --git a/src/lattice.cpp b/src/lattice.cpp index 53f4996581..edb482cfac 100644 --- a/src/lattice.cpp +++ b/src/lattice.cpp @@ -53,14 +53,7 @@ Lattice::Lattice(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp) if (style == NONE) { if (narg != 2) error->all(FLERR,"Illegal lattice command: expected 2 arguments but found {}", narg); - // Domain creates a default lattice of style "none" - // before Force class is instantiated, just use atof() in that case - - if (force) - xlattice = ylattice = zlattice = utils::numeric(FLERR,arg[1],false,lmp); - else - xlattice = ylattice = zlattice = atof(arg[1]); - + xlattice = ylattice = zlattice = utils::numeric(FLERR,arg[1],false,lmp); if (xlattice <= 0.0) error->all(FLERR, "Invalid lattice none argument: {}", arg[1]); return; } diff --git a/src/library.cpp b/src/library.cpp index a1cc67cfa5..1e3c96cdcf 100644 --- a/src/library.cpp +++ b/src/library.cpp @@ -983,7 +983,7 @@ be called without a valid LAMMPS object handle (it is ignored). **Image masks** These settings are related to how LAMMPS stores and interprets periodic images. The values are used -internally by the Fortran interface and are not likely to be useful to users. +internally by the :doc:`Fortran interface ` and are not likely to be useful to users. .. list-table:: :header-rows: 1 @@ -1015,8 +1015,17 @@ internally by the Fortran interface and are not likely to be useful to users. * - box_exist - 1 if the simulation box is defined, 0 if not. See :doc:`create_box`. + * - kokkos_active + - 1 if the KOKKOS package is compiled in **and** activated, 0 if not. + See :doc:`Speed_kokkos`. + * - kokkos_nthreads + - Number of Kokkos threads per MPI process, 0 if Kokkos is not active. + See :doc:`Speed_kokkos`. + * - kokkos_ngpus + - Number of Kokkos gpus per physical node, 0 if Kokkos is not active or no GPU support. + See :doc:`Speed_kokkos`. * - nthreads - - Number of requested OpenMP threads for LAMMPS' execution + - Number of requested OpenMP threads per MPI process for LAMMPS' execution * - newton_bond - 1 if Newton's 3rd law is applied to bonded interactions, 0 if not. * - newton_pair @@ -1126,6 +1135,9 @@ int lammps_extract_setting(void *handle, const char *keyword) if (strcmp(keyword,"dimension") == 0) return lmp->domain->dimension; if (strcmp(keyword,"box_exist") == 0) return lmp->domain->box_exist; + if (strcmp(keyword,"kokkos_active") == 0) return (lmp->kokkos) ? 1 : 0; + if (strcmp(keyword,"kokkos_nthreads") == 0) return (lmp->kokkos) ? lmp->kokkos->nthreads : 0; + if (strcmp(keyword,"kokkos_ngpus") == 0) return (lmp->kokkos) ? lmp->kokkos->ngpus : 0; if (strcmp(keyword,"newton_bond") == 0) return lmp->force->newton_bond; if (strcmp(keyword,"newton_pair") == 0) return lmp->force->newton_pair; if (strcmp(keyword,"triclinic") == 0) return lmp->domain->triclinic; diff --git a/src/modify.cpp b/src/modify.cpp index 20fc46a775..8336a67a71 100644 --- a/src/modify.cpp +++ b/src/modify.cpp @@ -925,8 +925,8 @@ Fix *Modify::add_fix(int narg, char **arg, int trysuffix) // if yes, pass state info to the Fix so it can reset itself for (int i = 0; i < nfix_restart_global; i++) - if (strcmp(id_restart_global[i], fix[ifix]->id) == 0 && - strcmp(style_restart_global[i], fix[ifix]->style) == 0) { + if ((strcmp(id_restart_global[i], fix[ifix]->id) == 0) && + (utils::strip_style_suffix(fix[ifix]->style, lmp) == style_restart_global[i])) { fix[ifix]->restart(state_restart_global[i]); used_restart_global[i] = 1; fix[ifix]->restart_reset = 1; @@ -1448,9 +1448,10 @@ void Modify::write_restart(FILE *fp) n = strlen(fix[i]->id) + 1; fwrite(&n, sizeof(int), 1, fp); fwrite(fix[i]->id, sizeof(char), n, fp); - n = strlen(fix[i]->style) + 1; + auto fix_style = utils::strip_style_suffix(fix[i]->style, lmp); + n = fix_style.size() + 1; fwrite(&n, sizeof(int), 1, fp); - fwrite(fix[i]->style, sizeof(char), n, fp); + fwrite(fix_style.c_str(), sizeof(char), n, fp); } fix[i]->write_restart(fp); } diff --git a/src/modify.h b/src/modify.h index 994f8ad724..b508022461 100644 --- a/src/modify.h +++ b/src/modify.h @@ -17,7 +17,6 @@ #include "pointers.h" #include -#include namespace LAMMPS_NS { diff --git a/src/pair.cpp b/src/pair.cpp index dad914e012..fc7232d615 100644 --- a/src/pair.cpp +++ b/src/pair.cpp @@ -821,7 +821,7 @@ void Pair::map_element2type(int narg, char **arg, bool update_setflag) // elements = list of element names if (narg != ntypes) - error->all(FLERR,"Incorrect args for pair coefficients"); + error->all(FLERR,"Number of element to type mappings does not match number of atom types"); if (elements) { for (i = 0; i < nelements; i++) delete[] elements[i]; diff --git a/src/pair_hybrid.cpp b/src/pair_hybrid.cpp index 8dbdfa2318..0c1bf1b6d5 100644 --- a/src/pair_hybrid.cpp +++ b/src/pair_hybrid.cpp @@ -271,10 +271,9 @@ void PairHybrid::allocate() void PairHybrid::settings(int narg, char **arg) { - if (narg < 1) error->all(FLERR,"Illegal pair_style command"); + if (narg < 1) utils::missing_cmd_args(FLERR, "pair_style hybrid", error); if (lmp->kokkos && !utils::strmatch(force->pair_style,"^hybrid.*/kk$")) - error->all(FLERR,"Must use pair_style {}/kk with Kokkos", - force->pair_style); + error->all(FLERR,"Must use pair_style {}/kk with Kokkos", force->pair_style); // delete old lists, since cannot just change settings @@ -326,9 +325,9 @@ void PairHybrid::settings(int narg, char **arg) nstyles = 0; while (iarg < narg) { if (utils::strmatch(arg[iarg],"^hybrid")) - error->all(FLERR,"Pair style hybrid cannot have hybrid as an argument"); + error->all(FLERR,"Pair style hybrid cannot have hybrid as a sub-style"); if (strcmp(arg[iarg],"none") == 0) - error->all(FLERR,"Pair style hybrid cannot have none as an argument"); + error->all(FLERR,"Pair style hybrid cannot have none as a sub-style"); styles[nstyles] = force->new_pair(arg[iarg],1,dummy); keywords[nstyles] = force->store_style(arg[iarg],0); @@ -478,7 +477,7 @@ void PairHybrid::init_svector() void PairHybrid::coeff(int narg, char **arg) { - if (narg < 3) error->all(FLERR,"Incorrect args for pair coefficients"); + if (narg < 3) utils::missing_cmd_args(FLERR,"pair_coeff", error); if (!allocated) allocate(); int ilo,ihi,jlo,jhi; @@ -497,7 +496,7 @@ void PairHybrid::coeff(int narg, char **arg) if (strcmp(arg[2],keywords[m]) == 0) { if (multiple[m]) { multflag = 1; - if (narg < 4) error->all(FLERR,"Incorrect args for pair coefficients"); + if (narg < 4) utils::missing_cmd_args(FLERR, "pair_coeff", error); if (multiple[m] == utils::inumeric(FLERR,arg[3],false,lmp)) break; else continue; } else break; @@ -507,7 +506,7 @@ void PairHybrid::coeff(int narg, char **arg) int none = 0; if (m == nstyles) { if (strcmp(arg[2],"none") == 0) none = 1; - else error->all(FLERR,"Pair coeff for hybrid has invalid style: {}",arg[2]); + else error->all(FLERR,"Pair coeff for hybrid has invalid style: {}", arg[2]); } // move 1st/2nd args to 2nd/3rd args @@ -527,7 +526,7 @@ void PairHybrid::coeff(int narg, char **arg) if (!none && styles[m]->one_coeff) { if ((strcmp(arg[0],"*") != 0) || (strcmp(arg[1],"*") != 0)) - error->all(FLERR,"Incorrect args for pair coefficients"); + error->all(FLERR,"Pair_coeff must start with * * for sub-style {}", keywords[m]); for (int i = 1; i <= atom->ntypes; i++) for (int j = i; j <= atom->ntypes; j++) if (nmap[i][j] && map[i][j][0] == m) { @@ -578,7 +577,7 @@ void PairHybrid::init_style() for (jtype = itype; jtype <= ntypes; jtype++) for (m = 0; m < nmap[itype][jtype]; m++) if (map[itype][jtype][m] == istyle) used = 1; - if (used == 0) error->all(FLERR,"Pair hybrid sub-style is not used"); + if (used == 0) error->all(FLERR,"Pair hybrid sub-style {} is not used", keywords[istyle]); } // The GPU library uses global data for each pair style, so the diff --git a/src/pair_table.cpp b/src/pair_table.cpp index e8a7530d6b..3e293cb414 100644 --- a/src/pair_table.cpp +++ b/src/pair_table.cpp @@ -398,6 +398,9 @@ void PairTable::read_table(Table *tb, char *file, char *keyword) reader.skip_line(); for (int i = 0; i < tb->ninput; i++) { line = reader.next_line(); + if (!line) + error->one(FLERR, "Data missing when parsing pair table '{}' line {} of {}.", keyword, i + 1, + tb->ninput); try { ValueTokenizer values(line); values.next_int(); diff --git a/src/pair_zero.cpp b/src/pair_zero.cpp index 3e4785b2fb..c62479d1c4 100644 --- a/src/pair_zero.cpp +++ b/src/pair_zero.cpp @@ -21,7 +21,6 @@ #include "comm.h" #include "error.h" #include "memory.h" -#include "neigh_list.h" #include "neighbor.h" #include diff --git a/src/platform.cpp b/src/platform.cpp index 2d9c3aa6a8..861e3d7722 100644 --- a/src/platform.cpp +++ b/src/platform.cpp @@ -16,6 +16,8 @@ * the "utils" namespace with convenience and utility functions. */ #include "platform.h" + +#include "fmt/format.h" #include "text_file_reader.h" #include "utils.h" diff --git a/src/pointers.h b/src/pointers.h index 494daa8ffb..09efa49cbc 100644 --- a/src/pointers.h +++ b/src/pointers.h @@ -28,6 +28,7 @@ #include // IWYU pragme: export #include // IWYU pragma: export #include // IWYU pragma: export +#include // IWYU pragma: export #include "fmt/format.h" // IWYU pragma: export #include "lammps.h" // IWYU pragma: export diff --git a/src/random_mars.cpp b/src/random_mars.cpp index fc5418146a..8f1105e0d9 100644 --- a/src/random_mars.cpp +++ b/src/random_mars.cpp @@ -187,7 +187,7 @@ double RanMars::besselexp(double theta, double alpha, double cp) void RanMars::select_subset(bigint ntarget, int nmine, int *mark, int *next) { - int mode,index,oldindex,newvalue,nflip,which,niter; + int mode,index,oldindex,newvalue,nflip,which; int active[2],first[2]; int newactive[2],newfirst[2],newlast[2]; bigint nmark,nflipall; @@ -209,8 +209,6 @@ void RanMars::select_subset(bigint ntarget, int nmine, int *mark, int *next) if (nmine > 0) next[nmine-1] = -1; nmark = 0; - niter = 0; - while (nmark != ntarget) { // choose to ADD or SUBTRACT from current nmark @@ -285,13 +283,6 @@ void RanMars::select_subset(bigint ntarget, int nmine, int *mark, int *next) if (mode == ADD) nmark += nflipall; else if (mode == SUBTRACT) nmark -= nflipall; - - niter++; - - // DEBUG output of stats - - //if (comm->me == 0) printf("%d %ld %ld %g %ld\n", - // niter,nmark,nactiveall,thresh,nflipall); } } diff --git a/src/read_data.cpp b/src/read_data.cpp index ee6399a2d3..9d9d7139a5 100644 --- a/src/read_data.cpp +++ b/src/read_data.cpp @@ -41,6 +41,7 @@ #include #include +#include #include using namespace LAMMPS_NS; @@ -875,10 +876,13 @@ void ReadData::command(int narg, char **arg) int i; for (i = 0; i < nfix; i++) if (strcmp(keyword, fix_section[i]) == 0) { - if (firstpass) + if (firstpass) { fix(fix_index[i], keyword); - else - skip_lines(fix_index[i]->read_data_skip_lines(keyword)); + } else { + auto nskip = fix_index[i]->read_data_skip_lines(keyword); + if (nskip < 0) nskip = natoms; + skip_lines(nskip); + } break; } if (i == nfix) @@ -2225,6 +2229,7 @@ void ReadData::fix(Fix *ifix, char *keyword) int nchunk, eof; bigint nline = ifix->read_data_skip_lines(keyword); + if (nline < 0) nline = natoms; bigint nread = 0; while (nread < nline) { diff --git a/src/read_restart.cpp b/src/read_restart.cpp index d4b455aaf9..aa9f5fe8ee 100644 --- a/src/read_restart.cpp +++ b/src/read_restart.cpp @@ -769,7 +769,7 @@ void ReadRestart::header() argcopy[i] = read_string(); atom->create_avec(style,nargcopy,argcopy,1); if (comm->me ==0) - utils::logmesg(lmp," restoring atom style {} from restart\n",style); + utils::logmesg(lmp," restoring atom style {} from restart\n",atom->atom_style); for (int i = 0; i < nargcopy; i++) delete[] argcopy[i]; delete[] argcopy; delete[] style; diff --git a/src/reader_native.cpp b/src/reader_native.cpp index e2bc74d64a..3e7d01550d 100644 --- a/src/reader_native.cpp +++ b/src/reader_native.cpp @@ -19,6 +19,7 @@ #include "tokenizer.h" #include +#include #include using namespace LAMMPS_NS; diff --git a/src/region_ellipsoid.cpp b/src/region_ellipsoid.cpp index a84bb61242..9a3b77bd8f 100644 --- a/src/region_ellipsoid.cpp +++ b/src/region_ellipsoid.cpp @@ -16,7 +16,6 @@ #include "domain.h" #include "error.h" #include "input.h" -#include "update.h" #include "variable.h" #include diff --git a/src/reset_atom_ids.cpp b/src/reset_atoms_id.cpp similarity index 66% rename from src/reset_atom_ids.cpp rename to src/reset_atoms_id.cpp index 1faa9a8e7d..c0fce95326 100644 --- a/src/reset_atom_ids.cpp +++ b/src/reset_atoms_id.cpp @@ -1,4 +1,3 @@ -// clang-format off /* ---------------------------------------------------------------------- LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator https://www.lammps.org/, Sandia National Laboratories @@ -12,7 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ -#include "reset_atom_ids.h" +#include "reset_atoms_id.h" #include "atom.h" #include "atom_vec.h" @@ -32,7 +31,7 @@ using namespace LAMMPS_NS; #if defined(LMP_QSORT) // allocate space for static class variable // prototype for non-class function -ResetIDs::AtomRvous *ResetIDs::sortrvous; +ResetAtomsID::AtomRvous *ResetAtomsID::sortrvous; static int compare_coords(const void *, const void *); #else // prototype for non-class function @@ -44,22 +43,23 @@ static int compare_coords(const int, const int, void *); /* ---------------------------------------------------------------------- */ -ResetIDs::ResetIDs(LAMMPS *lmp) : Command(lmp) {} +ResetAtomsID::ResetAtomsID(LAMMPS *lmp) : Command(lmp) { + binlo = binhi = -1; +} /* ---------------------------------------------------------------------- */ -void ResetIDs::command(int narg, char **arg) +void ResetAtomsID::command(int narg, char **arg) { if (domain->box_exist == 0) - error->all(FLERR,"Reset_ids command before simulation box is defined"); - if (atom->tag_enable == 0) - error->all(FLERR,"Cannot use reset_atom_ids unless atoms have IDs"); + error->all(FLERR, "Reset_atoms id command before simulation box is defined"); + if (atom->tag_enable == 0) error->all(FLERR, "Cannot use reset_atoms id unless atoms have IDs"); for (int i = 0; i < modify->nfix; i++) if (modify->fix[i]->stores_ids) - error->all(FLERR,"Cannot use reset_atom_ids when a fix exists that stores atom IDs"); + error->all(FLERR, "Cannot use reset_atoms id when a fix exists that stores atom IDs"); - if (comm->me == 0) utils::logmesg(lmp,"Resetting atom IDs ...\n"); + if (comm->me == 0) utils::logmesg(lmp, "Resetting atom IDs ...\n"); // process args @@ -67,11 +67,12 @@ void ResetIDs::command(int narg, char **arg) int iarg = 0; while (iarg < narg) { - if (strcmp(arg[iarg],"sort") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal reset_atom_ids command"); - sortflag = utils::logical(FLERR,arg[iarg+1],false,lmp); + if (strcmp(arg[iarg], "sort") == 0) { + if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "reset_atoms id", error); + sortflag = utils::logical(FLERR, arg[iarg + 1], false, lmp); iarg += 2; - } else error->all(FLERR,"Illegal reset_atom_ids command"); + } else + error->all(FLERR, "Unknown reset_atoms id keyword: {}", arg[iarg]); } // create an atom map if one doesn't exist already @@ -99,7 +100,7 @@ void ResetIDs::command(int narg, char **arg) comm->setup(); comm->exchange(); comm->borders(); - if (domain->triclinic) domain->lamda2x(atom->nlocal+atom->nghost); + if (domain->triclinic) domain->lamda2x(atom->nlocal + atom->nghost); // oldIDs = copy of current owned IDs @@ -108,7 +109,7 @@ void ResetIDs::command(int narg, char **arg) int nall = nlocal + atom->nghost; tagint *oldIDs; - memory->create(oldIDs,nlocal,"reset_atom_ids:oldIDs"); + memory->create(oldIDs, nlocal, "reset_atom_ids:oldIDs"); for (int i = 0; i < nlocal; i++) { oldIDs[i] = tag[i]; @@ -119,22 +120,24 @@ void ResetIDs::command(int narg, char **arg) // if sortflag = no: use fast tag_extend() // if sortflag = yes: use slower full spatial sort plus rendezvous comm - if (sortflag == 0) atom->tag_extend(); - else sort(); + if (sortflag == 0) + atom->tag_extend(); + else + sort(); // newIDs = copy of new IDs // restore old IDs, consistent with existing atom map // forward_comm_array acquires new IDs for ghost atoms double **newIDs; - memory->create(newIDs,nall,1,"reset_atom_ids:newIDs"); + memory->create(newIDs, nall, 1, "reset_atom_ids:newIDs"); for (int i = 0; i < nlocal; i++) { newIDs[i][0] = ubuf(tag[i]).d; tag[i] = oldIDs[i]; } - comm->forward_comm_array(1,newIDs); + comm->forward_comm_array(1, newIDs); // loop over bonds, angles, etc and reset IDs in stored topology arrays // only necessary for molecular = Atom::MOLECULAR, not molecular = Atom::TEMPLATE @@ -143,7 +146,7 @@ void ResetIDs::command(int narg, char **arg) int badcount = 0; if (atom->molecular == Atom::MOLECULAR) { - int j,m; + int j, m; tagint oldID; if (atom->avec->bonds_allow) { @@ -153,8 +156,10 @@ void ResetIDs::command(int narg, char **arg) for (j = 0; j < num_bond[i]; j++) { oldID = bond_atom[i][j]; m = atom->map(oldID); - if (m >= 0) bond_atom[i][j] = (tagint) ubuf(newIDs[m][0]).i; - else badcount++; + if (m >= 0) + bond_atom[i][j] = (tagint) ubuf(newIDs[m][0]).i; + else + badcount++; } } } @@ -168,18 +173,24 @@ void ResetIDs::command(int narg, char **arg) for (j = 0; j < num_angle[i]; j++) { oldID = angle_atom1[i][j]; m = atom->map(oldID); - if (m >= 0) angle_atom1[i][j] = (tagint) ubuf(newIDs[m][0]).i; - else badcount++; + if (m >= 0) + angle_atom1[i][j] = (tagint) ubuf(newIDs[m][0]).i; + else + badcount++; oldID = angle_atom2[i][j]; m = atom->map(oldID); - if (m >= 0) angle_atom2[i][j] = (tagint) ubuf(newIDs[m][0]).i; - else badcount++; + if (m >= 0) + angle_atom2[i][j] = (tagint) ubuf(newIDs[m][0]).i; + else + badcount++; oldID = angle_atom3[i][j]; m = atom->map(oldID); - if (m >= 0) angle_atom3[i][j] = (tagint) ubuf(newIDs[m][0]).i; - else badcount++; + if (m >= 0) + angle_atom3[i][j] = (tagint) ubuf(newIDs[m][0]).i; + else + badcount++; } } } @@ -194,23 +205,31 @@ void ResetIDs::command(int narg, char **arg) for (j = 0; j < num_dihedral[i]; j++) { oldID = dihedral_atom1[i][j]; m = atom->map(oldID); - if (m >= 0) dihedral_atom1[i][j] = (tagint) ubuf(newIDs[m][0]).i; - else badcount++; + if (m >= 0) + dihedral_atom1[i][j] = (tagint) ubuf(newIDs[m][0]).i; + else + badcount++; oldID = dihedral_atom2[i][j]; m = atom->map(oldID); - if (m >= 0) dihedral_atom2[i][j] = (tagint) ubuf(newIDs[m][0]).i; - else badcount++; + if (m >= 0) + dihedral_atom2[i][j] = (tagint) ubuf(newIDs[m][0]).i; + else + badcount++; oldID = dihedral_atom3[i][j]; m = atom->map(oldID); - if (m >= 0) dihedral_atom3[i][j] = (tagint) ubuf(newIDs[m][0]).i; - else badcount++; + if (m >= 0) + dihedral_atom3[i][j] = (tagint) ubuf(newIDs[m][0]).i; + else + badcount++; oldID = dihedral_atom4[i][j]; m = atom->map(oldID); - if (m >= 0) dihedral_atom4[i][j] = (tagint) ubuf(newIDs[m][0]).i; - else badcount++; + if (m >= 0) + dihedral_atom4[i][j] = (tagint) ubuf(newIDs[m][0]).i; + else + badcount++; } } } @@ -225,23 +244,31 @@ void ResetIDs::command(int narg, char **arg) for (j = 0; j < num_improper[i]; j++) { oldID = improper_atom1[i][j]; m = atom->map(oldID); - if (m >= 0) improper_atom1[i][j] = (tagint) ubuf(newIDs[m][0]).i; - else badcount++; + if (m >= 0) + improper_atom1[i][j] = (tagint) ubuf(newIDs[m][0]).i; + else + badcount++; oldID = improper_atom2[i][j]; m = atom->map(oldID); - if (m >= 0) improper_atom2[i][j] = (tagint) ubuf(newIDs[m][0]).i; - else badcount++; + if (m >= 0) + improper_atom2[i][j] = (tagint) ubuf(newIDs[m][0]).i; + else + badcount++; oldID = improper_atom3[i][j]; m = atom->map(oldID); - if (m >= 0) improper_atom3[i][j] = (tagint) ubuf(newIDs[m][0]).i; - else badcount++; + if (m >= 0) + improper_atom3[i][j] = (tagint) ubuf(newIDs[m][0]).i; + else + badcount++; oldID = improper_atom4[i][j]; m = atom->map(oldID); - if (m >= 0) improper_atom4[i][j] = (tagint) ubuf(newIDs[m][0]).i; - else badcount++; + if (m >= 0) + improper_atom4[i][j] = (tagint) ubuf(newIDs[m][0]).i; + else + badcount++; } } } @@ -250,10 +277,10 @@ void ResetIDs::command(int narg, char **arg) // error check int all; - MPI_Allreduce(&badcount,&all,1,MPI_INT,MPI_SUM,world); + MPI_Allreduce(&badcount, &all, 1, MPI_INT, MPI_SUM, world); if (all) - error->all(FLERR,"Reset_ids missing {} bond topology atom IDs - " - "use comm_modify cutoff",all); + error->all(FLERR, + "reset_atoms id is missing {} bond topology atom IDs - use comm_modify cutoff", all); // reset IDs and atom map for owned atoms @@ -287,9 +314,9 @@ void ResetIDs::command(int narg, char **arg) spatial sort of atoms followed by rendezvous comm to reset atom IDs ------------------------------------------------------------------------- */ -void ResetIDs::sort() +void ResetAtomsID::sort() { - double mylo[3],myhi[3],bboxlo[3],bboxhi[3]; + double mylo[3], myhi[3], bboxlo[3], bboxhi[3]; int me = comm->me; int nprocs = comm->nprocs; @@ -306,12 +333,12 @@ void ResetIDs::sort() myhi[0] = myhi[1] = myhi[2] = -BIG; for (int i = 0; i < nlocal; i++) { - mylo[0] = MIN(mylo[0],x[i][0]); - mylo[1] = MIN(mylo[1],x[i][1]); - mylo[2] = MIN(mylo[2],x[i][2]); - myhi[0] = MAX(myhi[0],x[i][0]); - myhi[1] = MAX(myhi[1],x[i][1]); - myhi[2] = MAX(myhi[2],x[i][2]); + mylo[0] = MIN(mylo[0], x[i][0]); + mylo[1] = MIN(mylo[1], x[i][1]); + mylo[2] = MIN(mylo[2], x[i][2]); + myhi[0] = MAX(myhi[0], x[i][0]); + myhi[1] = MAX(myhi[1], x[i][1]); + myhi[2] = MAX(myhi[2], x[i][2]); } if (dim == 2) mylo[2] = myhi[2] = 0.0; @@ -325,15 +352,15 @@ void ResetIDs::sort() } } - MPI_Allreduce(mylo,bboxlo,3,MPI_DOUBLE,MPI_MIN,world); - MPI_Allreduce(myhi,bboxhi,3,MPI_DOUBLE,MPI_MAX,world); + MPI_Allreduce(mylo, bboxlo, 3, MPI_DOUBLE, MPI_MIN, world); + MPI_Allreduce(myhi, bboxhi, 3, MPI_DOUBLE, MPI_MAX, world); - bboxlo[0] -= 0.0001 * (bboxhi[0]-bboxlo[0]); - bboxlo[1] -= 0.0001 * (bboxhi[1]-bboxlo[1]); - bboxlo[2] -= 0.0001 * (bboxhi[2]-bboxlo[2]); - bboxhi[0] += 0.0001 * (bboxhi[0]-bboxlo[0]); - bboxhi[1] += 0.0001 * (bboxhi[1]-bboxlo[1]); - bboxhi[2] += 0.0001 * (bboxhi[2]-bboxlo[2]); + bboxlo[0] -= 0.0001 * (bboxhi[0] - bboxlo[0]); + bboxlo[1] -= 0.0001 * (bboxhi[1] - bboxlo[1]); + bboxlo[2] -= 0.0001 * (bboxhi[2] - bboxlo[2]); + bboxhi[0] += 0.0001 * (bboxhi[0] - bboxlo[0]); + bboxhi[1] += 0.0001 * (bboxhi[1] - bboxlo[1]); + bboxhi[2] += 0.0001 * (bboxhi[2] - bboxlo[2]); // nbin_estimate = estimate of total number of bins, each with PERBIN atoms // binsize = edge length of a cubic bin @@ -342,19 +369,23 @@ void ResetIDs::sort() bigint nbin_estimate = atom->natoms / PERBIN + 1; double vol; - if (dim == 2) vol = (bboxhi[0]-bboxlo[0]) * (bboxhi[1]-bboxlo[1]); - else vol = (bboxhi[0]-bboxlo[0]) * (bboxhi[1]-bboxlo[1]) * (bboxhi[2]-bboxlo[2]); - double binsize = pow(vol/nbin_estimate,1.0/dim); + if (dim == 2) + vol = (bboxhi[0] - bboxlo[0]) * (bboxhi[1] - bboxlo[1]); + else + vol = (bboxhi[0] - bboxlo[0]) * (bboxhi[1] - bboxlo[1]) * (bboxhi[2] - bboxlo[2]); + double binsize = pow(vol / nbin_estimate, 1.0 / dim); - int nbinx = static_cast ((bboxhi[0]-bboxlo[0]) / binsize) + 1; - int nbiny = static_cast ((bboxhi[1]-bboxlo[1]) / binsize) + 1; - int nbinz = static_cast ((bboxhi[2]-bboxlo[2]) / binsize) + 1; + int nbinx = static_cast((bboxhi[0] - bboxlo[0]) / binsize) + 1; + int nbiny = static_cast((bboxhi[1] - bboxlo[1]) / binsize) + 1; + int nbinz = static_cast((bboxhi[2] - bboxlo[2]) / binsize) + 1; - double invx = 1.0 / (bboxhi[0]-bboxlo[0]); - double invy = 1.0 / (bboxhi[1]-bboxlo[1]); + double invx = 1.0 / (bboxhi[0] - bboxlo[0]); + double invy = 1.0 / (bboxhi[1] - bboxlo[1]); double invz; - if (dim == 2) invz = 0.0; - else invz = 1.0 / (bboxhi[2]-bboxlo[2]); + if (dim == 2) + invz = 0.0; + else + invz = 1.0 / (bboxhi[2] - bboxlo[2]); // nbins = actual total number of bins // bins are split evenly across procs @@ -366,18 +397,18 @@ void ResetIDs::sort() // binlo to binhi-1 = bin indices this proc will own in Rvous decomp // bins are numbered from 0 to Nbins-1 - bigint nbins = (bigint) nbinx*nbiny*nbinz; + bigint nbins = (bigint) nbinx * nbiny * nbinz; bigint nlo = nbins / nprocs; bigint nhi = nlo + 1; bigint nplo = nprocs - (nbins % nprocs); - bigint nbinlo = nplo*nlo; + bigint nbinlo = nplo * nlo; if (me < nplo) { binlo = me * nlo; - binhi = (me+1) * nlo; + binhi = (me + 1) * nlo; } else { - binlo = nbinlo + (me-nplo) * nhi; - binhi = nbinlo + (me+1-nplo) * nhi; + binlo = nbinlo + (me - nplo) * nhi; + binhi = nbinlo + (me + 1 - nplo) * nhi; } // fill atombuf with info on my atoms @@ -385,20 +416,23 @@ void ResetIDs::sort() // proclist = proc that owns ibin int *proclist; - memory->create(proclist,nlocal,"special:proclist"); - auto atombuf = (AtomRvous *) memory->smalloc((bigint) nlocal*sizeof(AtomRvous),"resetIDs:idbuf"); + memory->create(proclist, nlocal, "special:proclist"); + auto atombuf = + (AtomRvous *) memory->smalloc((bigint) nlocal * sizeof(AtomRvous), "resetIDs:idbuf"); - int ibinx,ibiny,ibinz,iproc; + int ibinx, ibiny, ibinz, iproc; bigint ibin; for (int i = 0; i < nlocal; i++) { - ibinx = static_cast ((x[i][0]-bboxlo[0])*invx * nbinx); - ibiny = static_cast ((x[i][1]-bboxlo[1])*invy * nbiny); - ibinz = static_cast ((x[i][2]-bboxlo[2])*invz * nbinz); - ibin = (bigint) ibinz*nbiny*nbinx + (bigint) ibiny*nbinx + ibinx; + ibinx = static_cast((x[i][0] - bboxlo[0]) * invx * nbinx); + ibiny = static_cast((x[i][1] - bboxlo[1]) * invy * nbiny); + ibinz = static_cast((x[i][2] - bboxlo[2]) * invz * nbinz); + ibin = (bigint) ibinz * nbiny * nbinx + (bigint) ibiny * nbinx + ibinx; - if (ibin < nbinlo) iproc = ibin / nlo; - else iproc = nplo + (ibin-nbinlo) / nhi; + if (ibin < nbinlo) + iproc = ibin / nlo; + else + iproc = nplo + (ibin - nbinlo) / nhi; proclist[i] = iproc; atombuf[i].ibin = ibin; @@ -412,8 +446,8 @@ void ResetIDs::sort() // perform rendezvous operation, send atombuf to other procs char *buf; - int nreturn = comm->rendezvous(1,nlocal,(char *) atombuf,sizeof(AtomRvous),0,proclist, - sort_bins,0,buf,sizeof(IDRvous),(void *) this); + int nreturn = comm->rendezvous(1, nlocal, (char *) atombuf, sizeof(AtomRvous), 0, proclist, + sort_bins, 0, buf, sizeof(IDRvous), (void *) this); auto outbuf = (IDRvous *) buf; memory->destroy(proclist); @@ -437,27 +471,30 @@ void ResetIDs::sort() outbuf = list of N IDRvous datums, sent back to sending proc ------------------------------------------------------------------------- */ -int ResetIDs::sort_bins(int n, char *inbuf, int &flag, int *&proclist, char *&outbuf, void *ptr) +int ResetAtomsID::sort_bins(int n, char *inbuf, int &flag, int *&proclist, char *&outbuf, void *ptr) { - int i,ibin,index; + int i, ibin, index; - auto rptr = (ResetIDs *) ptr; + auto rptr = (ResetAtomsID *) ptr; Memory *memory = rptr->memory; Error *error = rptr->error; MPI_Comm world = rptr->world; bigint binlo = rptr->binlo; bigint binhi = rptr->binhi; + if ((binlo < 0) || (binhi < 0)) + error->one(FLERR, "Called sort_bins without previous setup of bins"); + // nbins = my subset of bins from binlo to binhi-1 // initialize linked lists of my Rvous atoms in each bin - int *next,*head,*last,*count; + int *next, *head, *last, *count; int nbins = binhi - binlo; - memory->create(next,n,"resetIDs:next"); - memory->create(head,nbins,"resetIDs:head"); - memory->create(last,nbins,"resetIDs:last"); - memory->create(count,nbins,"resetIDs:count"); + memory->create(next, n, "resetIDs:next"); + memory->create(head, nbins, "resetIDs:head"); + memory->create(last, nbins, "resetIDs:last"); + memory->create(count, nbins, "resetIDs:count"); for (i = 0; i < n; i++) next[i] = -1; @@ -472,7 +509,7 @@ int ResetIDs::sort_bins(int n, char *inbuf, int &flag, int *&proclist, char *&ou if (in[i].ibin < binlo || in[i].ibin >= binhi) { //printf("BAD me %d i %d %d ibin %d binlohi %d %d\n", // rptr->comm->me,i,n,in[i].ibin,binlo,binhi); - error->one(FLERR,"Bad spatial bin assignment in reset_atom_ids sort"); + error->one(FLERR, "Bad spatial bin assignment in reset_atoms id sort"); } ibin = in[i].ibin - binlo; if (head[ibin] < 0) head[ibin] = i; @@ -482,11 +519,10 @@ int ResetIDs::sort_bins(int n, char *inbuf, int &flag, int *&proclist, char *&ou } int maxcount = 0; - for (ibin = 0; ibin < nbins; ibin++) - maxcount = MAX(maxcount,count[ibin]); + for (ibin = 0; ibin < nbins; ibin++) maxcount = MAX(maxcount, count[ibin]); int *order; - memory->create(order,maxcount,"resetIDs:order"); + memory->create(order, maxcount, "resetIDs:order"); // sort atoms in each bin by their spatial position // recreate linked list for each bin based on sorted order @@ -498,12 +534,11 @@ int ResetIDs::sort_bins(int n, char *inbuf, int &flag, int *&proclist, char *&ou index = next[index]; } - #if defined(LMP_QSORT) sortrvous = in; - qsort(order,count[ibin],sizeof(int),compare_coords); + qsort(order, count[ibin], sizeof(int), compare_coords); #else - utils::merge_sort(order,count[ibin],(void *) in,compare_coords); + utils::merge_sort(order, count[ibin], (void *) in, compare_coords); #endif head[ibin] = last[ibin] = -1; @@ -518,15 +553,15 @@ int ResetIDs::sort_bins(int n, char *inbuf, int &flag, int *&proclist, char *&ou tagint ntag = n; tagint nprev; - MPI_Scan(&ntag,&nprev,1,MPI_LMP_TAGINT,MPI_SUM,world); + MPI_Scan(&ntag, &nprev, 1, MPI_LMP_TAGINT, MPI_SUM, world); nprev -= n; // loop over bins and sorted atoms in each bin, reset ids to be consecutive // pass outbuf of IDRvous datums back to comm->rendezvous int nout = n; - memory->create(proclist,nout,"resetIDs:proclist"); - auto out = (IDRvous *) memory->smalloc(nout*sizeof(IDRvous),"resetIDs:out"); + memory->create(proclist, nout, "resetIDs:proclist"); + auto out = (IDRvous *) memory->smalloc(nout * sizeof(IDRvous), "resetIDs:out"); tagint one = nprev + 1; for (ibin = 0; ibin < nbins; ibin++) { @@ -567,7 +602,7 @@ int compare_coords(const void *iptr, const void *jptr) { int i = *((int *) iptr); int j = *((int *) jptr); - ResetIDs::AtomRvous *rvous = ResetIDs::sortrvous; + ResetAtomsID::AtomRvous *rvous = ResetAtomsID::sortrvous; double *xi = rvous[i].x; double *xj = rvous[j].x; if (xi[0] < xj[0]) return -1; @@ -588,7 +623,7 @@ int compare_coords(const void *iptr, const void *jptr) int compare_coords(const int i, const int j, void *ptr) { - auto rvous = (ResetIDs::AtomRvous *) ptr; + auto rvous = (ResetAtomsID::AtomRvous *) ptr; double *xi = rvous[i].x; double *xj = rvous[j].x; if (xi[0] < xj[0]) return -1; diff --git a/src/reset_atom_ids.h b/src/reset_atoms_id.h similarity index 88% rename from src/reset_atom_ids.h rename to src/reset_atoms_id.h index 0da02a0ffc..9d80505586 100644 --- a/src/reset_atom_ids.h +++ b/src/reset_atoms_id.h @@ -13,18 +13,18 @@ #ifdef COMMAND_CLASS // clang-format off -CommandStyle(reset_atom_ids,ResetIDs); +CommandStyle(RESET_ATOMS_ID,ResetAtomsID); // clang-format on #else -#ifndef LMP_RESET_IDS_H -#define LMP_RESET_IDS_H +#ifndef LMP_RESET_ATOMS_ID_H +#define LMP_RESET_ATOMS_ID_H #include "command.h" namespace LAMMPS_NS { -class ResetIDs : public Command { +class ResetAtomsID : public Command { public: struct AtomRvous { bigint ibin; @@ -42,7 +42,7 @@ class ResetIDs : public Command { static AtomRvous *sortrvous; #endif - ResetIDs(class LAMMPS *); + ResetAtomsID(class LAMMPS *); void command(int, char **) override; private: @@ -54,8 +54,6 @@ class ResetIDs : public Command { void sort(); }; - } // namespace LAMMPS_NS - #endif #endif diff --git a/src/reset_atoms_image.cpp b/src/reset_atoms_image.cpp new file mode 100644 index 0000000000..56a1bf9f99 --- /dev/null +++ b/src/reset_atoms_image.cpp @@ -0,0 +1,140 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/, Sandia National Laboratories + LAMMPS development team: developers@lammps.org + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#include "reset_atoms_image.h" + +#include "atom.h" +#include "atom_vec.h" +#include "comm.h" +#include "compute.h" +#include "domain.h" +#include "error.h" +#include "group.h" +#include "input.h" +#include "modify.h" +#include "variable.h" + +#include + +using namespace LAMMPS_NS; + +/* ---------------------------------------------------------------------- */ + +ResetAtomsImage::ResetAtomsImage(LAMMPS *lmp) : Command(lmp) {} + +/* ---------------------------------------------------------------------- + called as reset_atoms image command in input script +------------------------------------------------------------------------- */ + +void ResetAtomsImage::command(int narg, char **arg) +{ + if (domain->box_exist == 0) + error->all(FLERR, "Reset_atoms image command before simulation box is defined"); + if (atom->tag_enable == 0) + error->all(FLERR, "Cannot use reset_atoms image unless atoms have IDs"); + if (atom->avec->bonds_allow == 0) + error->all(FLERR, "Cannot use reset_atoms image used when bonds are not allowed"); + + // process args + + if (narg < 1) utils::missing_cmd_args(FLERR, "reset_atoms image", error); + if (narg > 1) error->all(FLERR, "Unknown reset_atoms image keyword: {}", arg[1]); + int igroup = group->find(arg[0]); + if (igroup < 0) error->all(FLERR, "Could not find reset_atoms image group {}", arg[0]); + int groupbit = group->bitmask[igroup]; + + if (comm->me == 0) utils::logmesg(lmp, "Resetting image flags ...\n"); + + // record wall time for resetting molecule IDs + + MPI_Barrier(world); + double time1 = platform::walltime(); + + // initialize system since comm->borders() will be invoked + + lmp->init(); + + // setup domain, communication + // exchange will clear map, borders will reset + // this is the map needed to lookup current global IDs for bond topology + + if (domain->triclinic) domain->x2lamda(atom->nlocal); + domain->pbc(); + domain->reset_box(); + comm->setup(); + comm->exchange(); + comm->borders(); + if (domain->triclinic) domain->lamda2x(atom->nlocal + atom->nghost); + + // create computes and variables + + auto frags = modify->add_compute("frags_r_i_f all fragment/atom single yes"); + auto chunk = modify->add_compute("chunk_r_i_f all chunk/atom c_frags_r_i_f compress yes"); + auto flags = modify->add_compute("flags_r_i_f all property/atom ix iy iz"); + input->variable->set("ix_r_i_f atom c_flags_r_i_f[1]"); + input->variable->set("iy_r_i_f atom c_flags_r_i_f[2]"); + input->variable->set("iz_r_i_f atom c_flags_r_i_f[3]"); + auto ifmin = modify->add_compute("ifmin_r_i_f all reduce/chunk chunk_r_i_f min " + "v_ix_r_i_f v_iy_r_i_f v_iz_r_i_f"); + auto ifmax = modify->add_compute("ifmax_r_i_f all reduce/chunk chunk_r_i_f max " + "v_ix_r_i_f v_iy_r_i_f v_iz_r_i_f"); + auto cdist = modify->add_compute("cdist_r_i_f all chunk/spread/atom chunk_r_i_f " + "c_ifmax_r_i_f[*] c_ifmin_r_i_f[*]"); + + // trigger computes + + frags->compute_peratom(); + chunk->compute_peratom(); + flags->compute_peratom(); + ifmin->compute_array(); + ifmax->compute_array(); + cdist->compute_peratom(); + + // reset image flags for atoms in group + + const int *const mask = atom->mask; + const int nlocal = atom->nlocal; + imageint *image = atom->image; + + for (int i = 0; i < nlocal; i++) { + if (mask[i] & groupbit) { + int ix = (image[i] & IMGMASK) - IMGMAX; + int iy = (image[i] >> IMGBITS & IMGMASK) - IMGMAX; + int iz = (image[i] >> IMG2BITS) - IMGMAX; + ix -= (int) floor(0.5 * (cdist->array_atom[i][0] + cdist->array_atom[i][3])); + iy -= (int) floor(0.5 * (cdist->array_atom[i][1] + cdist->array_atom[i][4])); + iz -= (int) floor(0.5 * (cdist->array_atom[i][2] + cdist->array_atom[i][5])); + image[i] = ((imageint) (ix + IMGMAX) & IMGMASK) | + (((imageint) (iy + IMGMAX) & IMGMASK) << IMGBITS) | + (((imageint) (iz + IMGMAX) & IMGMASK) << IMG2BITS); + } + } + + // cleanup + + modify->delete_compute("cdist_r_i_f"); + modify->delete_compute("ifmax_r_i_f"); + modify->delete_compute("ifmin_r_i_f"); + modify->delete_compute("flags_r_i_f"); + modify->delete_compute("chunk_r_i_f"); + modify->delete_compute("frags_r_i_f"); + input->variable->set("ix_r_i_f delete"); + input->variable->set("iy_r_i_f delete"); + input->variable->set("iz_r_i_f delete"); + + // total time + + MPI_Barrier(world); + if (comm->me == 0) + utils::logmesg(lmp, " reset_atoms image CPU = {:.3f} seconds\n", platform::walltime() - time1); +} diff --git a/src/reset_atoms_image.h b/src/reset_atoms_image.h new file mode 100644 index 0000000000..314f2dd086 --- /dev/null +++ b/src/reset_atoms_image.h @@ -0,0 +1,34 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/, Sandia National Laboratories + LAMMPS development team: developers@lammps.org + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifdef COMMAND_CLASS +// clang-format off +CommandStyle(RESET_ATOMS_IMAGE,ResetAtomsImage); +// clang-format on +#else + +#ifndef LMP_RESET_ATOMS_IMAGE_H +#define LMP_RESET_ATOMS_IMAGE_H + +#include "command.h" + +namespace LAMMPS_NS { + +class ResetAtomsImage : public Command { + public: + ResetAtomsImage(class LAMMPS *); + void command(int, char **) override; +}; +} // namespace LAMMPS_NS +#endif +#endif diff --git a/src/reset_mol_ids.cpp b/src/reset_atoms_mol.cpp similarity index 62% rename from src/reset_mol_ids.cpp rename to src/reset_atoms_mol.cpp index 0a0f9dfa1a..ee4c28136f 100644 --- a/src/reset_mol_ids.cpp +++ b/src/reset_atoms_mol.cpp @@ -1,4 +1,3 @@ -// clang-format off /* ---------------------------------------------------------------------- LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator https://www.lammps.org/, Sandia National Laboratories @@ -16,7 +15,7 @@ Contributing author: Jacob Gissinger (jacob.gissinger@colorado.edu) ------------------------------------------------------------------------- */ -#include "reset_mol_ids.h" +#include "reset_atoms_mol.h" #include "atom.h" #include "comm.h" @@ -33,10 +32,8 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -ResetMolIDs::ResetMolIDs(LAMMPS *lmp) : Command(lmp) { - cfa = nullptr; - cca = nullptr; - +ResetAtomsMol::ResetAtomsMol(LAMMPS *lmp) : Command(lmp), cfa(nullptr), cca(nullptr) +{ // default settings compressflag = 1; @@ -49,49 +46,49 @@ ResetMolIDs::ResetMolIDs(LAMMPS *lmp) : Command(lmp) { /* ---------------------------------------------------------------------- */ -ResetMolIDs::~ResetMolIDs() +ResetAtomsMol::~ResetAtomsMol() { if (!idfrag.empty()) modify->delete_compute(idfrag); if (compressflag && !idchunk.empty()) modify->delete_compute(idchunk); } /* ---------------------------------------------------------------------- - called as reset_mol_ids command in input script + called as reset_atoms mol command in input script ------------------------------------------------------------------------- */ -void ResetMolIDs::command(int narg, char **arg) +void ResetAtomsMol::command(int narg, char **arg) { if (domain->box_exist == 0) - error->all(FLERR,"Reset_mol_ids command before simulation box is defined"); - if (atom->tag_enable == 0) - error->all(FLERR,"Cannot use reset_mol_ids unless atoms have IDs"); + error->all(FLERR, "Reset_atoms mol command before simulation box is defined"); + if (atom->tag_enable == 0) error->all(FLERR, "Cannot use reset_atoms mol unless atoms have IDs"); if (atom->molecular != Atom::MOLECULAR) - error->all(FLERR,"Can only use reset_mol_ids on molecular systems"); + error->all(FLERR, "Can only use reset_atoms mol on molecular systems"); // process args - if (narg < 1) error->all(FLERR,"Illegal reset_mol_ids command"); + if (narg < 1) utils::missing_cmd_args(FLERR, "reset_atoms mol", error); char *groupid = arg[0]; int iarg = 1; while (iarg < narg) { - if (strcmp(arg[iarg],"compress") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal reset_mol_ids command"); - compressflag = utils::logical(FLERR,arg[iarg+1],false,lmp); + if (strcmp(arg[iarg], "compress") == 0) { + if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "reset_atoms mol compress", error); + compressflag = utils::logical(FLERR, arg[iarg + 1], false, lmp); iarg += 2; - } else if (strcmp(arg[iarg],"single") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal reset_mol_ids command"); - singleflag = utils::logical(FLERR,arg[iarg+1],false,lmp); + } else if (strcmp(arg[iarg], "single") == 0) { + if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "reset_atoms mol single", error); + singleflag = utils::logical(FLERR, arg[iarg + 1], false, lmp); iarg += 2; - } else if (strcmp(arg[iarg],"offset") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal reset_mol_ids command"); - offset = utils::tnumeric(FLERR,arg[iarg+1],true,lmp); - if (offset < -1) error->all(FLERR,"Illegal reset_mol_ids command"); + } else if (strcmp(arg[iarg], "offset") == 0) { + if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "reset_atoms mol offset", error); + offset = utils::tnumeric(FLERR, arg[iarg + 1], true, lmp); + if (offset < -1) error->all(FLERR, "Illegal reset_atoms mol offset: {}", offset); iarg += 2; - } else error->all(FLERR,"Illegal reset_mol_ids command"); + } else + error->all(FLERR, "Unknown reset_atoms mol keyword: {}", arg[iarg]); } - if (comm->me == 0) utils::logmesg(lmp,"Resetting molecule IDs ...\n"); + if (comm->me == 0) utils::logmesg(lmp, "Resetting molecule IDs ...\n"); // record wall time for resetting molecule IDs @@ -112,11 +109,11 @@ void ResetMolIDs::command(int narg, char **arg) comm->setup(); comm->exchange(); comm->borders(); - if (domain->triclinic) domain->lamda2x(atom->nlocal+atom->nghost); + if (domain->triclinic) domain->lamda2x(atom->nlocal + atom->nghost); // create computes - create_computes((char *) "COMMAND",groupid); + create_computes((char *) "COMMAND", groupid); // reset molecule IDs @@ -128,44 +125,43 @@ void ResetMolIDs::command(int narg, char **arg) if (comm->me == 0) { if (nchunk < 0) - utils::logmesg(lmp," number of new molecule IDs = unknown\n"); + utils::logmesg(lmp, " number of new molecule IDs = unknown\n"); else - utils::logmesg(lmp," number of new molecule IDs = {}\n",nchunk); - utils::logmesg(lmp," reset_mol_ids CPU = {:.3f} seconds\n", - platform::walltime()-time1); + utils::logmesg(lmp, " number of new molecule IDs = {}\n", nchunk); + utils::logmesg(lmp, " reset_atoms mol CPU = {:.3f} seconds\n", platform::walltime() - time1); } } /* ---------------------------------------------------------------------- - create computes used by reset_mol_ids + create computes used by reset_atoms_mol ------------------------------------------------------------------------- */ -void ResetMolIDs::create_computes(char *fixid, char *groupid) +void ResetAtomsMol::create_computes(char *fixid, char *groupid) { int igroup = group->find(groupid); - if (igroup == -1) error->all(FLERR,"Could not find reset_mol_ids group ID"); + if (igroup < 0) error->all(FLERR, "Could not find reset_atoms mol group {}", groupid); groupbit = group->bitmask[igroup]; // create instances of compute fragment/atom, compute reduce (if needed), // and compute chunk/atom. all use the group-ID for this command. // 'fixid' allows for creating independent instances of the computes - idfrag = fmt::format("{}_reset_mol_ids_FRAGMENT_ATOM",fixid); + idfrag = fmt::format("{}_reset_atoms_mol_FRAGMENT_ATOM", fixid); auto use_single = singleflag ? "yes" : "no"; - cfa = dynamic_cast( - modify->add_compute(fmt::format("{} {} fragment/atom single {}",idfrag,groupid,use_single))); + cfa = dynamic_cast(modify->add_compute( + fmt::format("{} {} fragment/atom single {}", idfrag, groupid, use_single))); - idchunk = fmt::format("{}_reset_mol_ids_CHUNK_ATOM",fixid); + idchunk = fmt::format("{}_reset_atoms_mol_CHUNK_ATOM", fixid); if (compressflag) - cca = dynamic_cast( - modify->add_compute(fmt::format("{} {} chunk/atom molecule compress yes",idchunk,groupid))); + cca = dynamic_cast(modify->add_compute( + fmt::format("{} {} chunk/atom molecule compress yes", idchunk, groupid))); } /* ---------------------------------------------------------------------- called from command() and directly from fixes that update molecules ------------------------------------------------------------------------- */ -void ResetMolIDs::reset() +void ResetAtomsMol::reset() { // invoke peratom method of compute fragment/atom // walks bond connectivity and assigns each atom a fragment ID @@ -181,8 +177,7 @@ void ResetMolIDs::reset() int nlocal = atom->nlocal; for (int i = 0; i < nlocal; i++) - if (mask[i] & groupbit) - molecule[i] = static_cast (fragIDs[i]); + if (mask[i] & groupbit) molecule[i] = static_cast(fragIDs[i]); // if compressflag = 0, done // set nchunk = -1 since cannot easily determine # of new molecule IDs @@ -208,7 +203,7 @@ void ResetMolIDs::reset() for (int i = 0; i < nlocal; i++) if (mask[i] & groupbit) if (fragIDs[i] == 0.0) mysingle = 1; - MPI_Allreduce(&mysingle,&singleexist,1,MPI_INT,MPI_MAX,world); + MPI_Allreduce(&mysingle, &singleexist, 1, MPI_INT, MPI_MAX, world); if (singleexist) nchunk--; } @@ -220,10 +215,10 @@ void ResetMolIDs::reset() if (groupbit != 1) { tagint mymol = 0; for (int i = 0; i < nlocal; i++) - if (!(mask[i] & groupbit)) - mymol = MAX(mymol,molecule[i]); - MPI_Allreduce(&mymol,&offset,1,MPI_LMP_TAGINT,MPI_MAX,world); - } else offset = 0; + if (!(mask[i] & groupbit)) mymol = MAX(mymol, molecule[i]); + MPI_Allreduce(&mymol, &offset, 1, MPI_LMP_TAGINT, MPI_MAX, world); + } else + offset = 0; } // reset molecule ID for all atoms in group @@ -231,11 +226,14 @@ void ResetMolIDs::reset() for (int i = 0; i < nlocal; i++) { if (mask[i] & groupbit) { - auto newid = static_cast(chunkIDs[i]); + auto newid = static_cast(chunkIDs[i]); if (singleexist) { - if (newid == 1) newid = 0; - else newid += offset - 1; - } else newid += offset; + if (newid == 1) + newid = 0; + else + newid += offset - 1; + } else + newid += offset; molecule[i] = newid; } } diff --git a/src/reset_mol_ids.h b/src/reset_atoms_mol.h similarity index 85% rename from src/reset_mol_ids.h rename to src/reset_atoms_mol.h index c25cb96726..3fad2560df 100644 --- a/src/reset_mol_ids.h +++ b/src/reset_atoms_mol.h @@ -13,21 +13,21 @@ #ifdef COMMAND_CLASS // clang-format off -CommandStyle(reset_mol_ids,ResetMolIDs); +CommandStyle(RESET_ATOMS_MOL,ResetAtomsMol); // clang-format on #else -#ifndef LMP_RESET_MOL_IDS_H -#define LMP_RESET_MOL_IDS_H +#ifndef LMP_RESET_ATOMS_MOL_H +#define LMP_RESET_ATOMS_MOL_H #include "command.h" namespace LAMMPS_NS { -class ResetMolIDs : public Command { +class ResetAtomsMol : public Command { public: - ResetMolIDs(class LAMMPS *); - ~ResetMolIDs() override; + ResetAtomsMol(class LAMMPS *); + ~ResetAtomsMol() override; void command(int, char **) override; void create_computes(char *, char *); void reset(); @@ -43,7 +43,6 @@ class ResetMolIDs : public Command { class ComputeFragmentAtom *cfa; class ComputeChunkAtom *cca; }; - } // namespace LAMMPS_NS #endif diff --git a/src/respa.cpp b/src/respa.cpp index 3e90a8baf9..71878a5af3 100644 --- a/src/respa.cpp +++ b/src/respa.cpp @@ -372,7 +372,7 @@ void Respa::setup(int flag) mesg += fmt::format(" {}:{}", ilevel + 1, step[ilevel]); mesg += "\n r-RESPA fixes :"; - for (int l = 0; l < modify->n_post_force_respa_any; ++l) { + for (int l = 0; l < modify->n_post_force_respa; ++l) { Fix *f = modify->get_fix_by_index(modify->list_post_force_respa[l]); if (f->respa_level >= 0) mesg += fmt::format(" {}:{}[{}]", MIN(f->respa_level + 1, nlevels), f->style, f->id); diff --git a/src/text_file_reader.h b/src/text_file_reader.h index a725a6f81b..cc62471f66 100644 --- a/src/text_file_reader.h +++ b/src/text_file_reader.h @@ -21,6 +21,8 @@ #include "tokenizer.h" // IWYU pragma: export #include +#include +#include namespace LAMMPS_NS { class TextFileReader { diff --git a/src/thermo.cpp b/src/thermo.cpp index 8dccceae8d..122463a25f 100644 --- a/src/thermo.cpp +++ b/src/thermo.cpp @@ -47,6 +47,7 @@ #include #include +#include using namespace LAMMPS_NS; using namespace MathConst; diff --git a/src/timer.cpp b/src/timer.cpp index 23f060491e..5bc397714a 100644 --- a/src/timer.cpp +++ b/src/timer.cpp @@ -18,6 +18,7 @@ #include "fmt/chrono.h" #include +#include using namespace LAMMPS_NS; diff --git a/src/utils.cpp b/src/utils.cpp index ab9791c715..30a47f3263 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -866,6 +866,30 @@ std::string utils::star_subst(const std::string &name, bigint step, int pad) return fmt::format("{}{:0{}}{}", name.substr(0, star), step, pad, name.substr(star + 1)); } + +/* ---------------------------------------------------------------------- + Remove accelerator style suffix from string +------------------------------------------------------------------------- */ +std::string utils::strip_style_suffix(const std::string &style, LAMMPS *lmp) +{ + std::string newstyle = style; + if (lmp->suffix_enable) { + if (lmp->suffix) { + if (utils::strmatch(style, fmt::format("/{}$", lmp->suffix))) { + newstyle.resize(style.size() - strlen(lmp->suffix) - 1); + return newstyle; + } + } + if (lmp->suffix2) { + if (utils::strmatch(style, fmt::format("/{}$", lmp->suffix2))) { + newstyle.resize(style.size() - strlen(lmp->suffix2) - 1); + return newstyle; + } + } + } + return newstyle; +} + /* ---------------------------------------------------------------------- Replace UTF-8 encoded chars with known ASCII equivalents ------------------------------------------------------------------------- */ diff --git a/src/utils.h b/src/utils.h index 52ada7c8cc..048de17998 100644 --- a/src/utils.h +++ b/src/utils.h @@ -430,7 +430,23 @@ namespace utils { std::string star_subst(const std::string &name, bigint step, int pad); - /*! Check if a string will likely have UTF-8 encoded characters + /*! Remove style suffix from string if suffix flag is active + * + * +\verbatim embed:rst + +This will try to undo the effect from using the :doc:`suffix command ` +or the *-suffix/-sf* command line flag and return correspondingly modified string. + +\endverbatim + * + * \param style string of style name + * \param lmp pointer to the LAMMPS class (has suffix_flag and suffix strings) + * \return processed string */ + + std::string strip_style_suffix(const std::string &style, LAMMPS *lmp); + +/*! Check if a string will likely have UTF-8 encoded characters * * UTF-8 uses the 7-bit standard ASCII table for the first 127 characters and * all other characters are encoded as multiple bytes. For the multi-byte diff --git a/src/variable.cpp b/src/variable.cpp index 819f130a02..c07e62648b 100644 --- a/src/variable.cpp +++ b/src/variable.cpp @@ -985,8 +985,21 @@ char *Variable::retrieve(const char *name) str = data[ivar][1] = utils::strdup(result); } else if (style[ivar] == PYTHON) { int ifunc = python->variable_match(data[ivar][0],name,0); - if (ifunc < 0) - error->all(FLERR,"Python variable {} does not match Python function {}", name, data[ivar][0]); + if (ifunc < 0) { + if (ifunc == -1) { + error->all(FLERR, "Could not find Python function {} linked to variable {}", + data[ivar][0], name); + } else if (ifunc == -2) { + error->all(FLERR, "Python function {} for variable {} does not have a return value", + data[ivar][0], name); + } else if (ifunc == -3) { + error->all(FLERR,"Python variable {} does not match variable name registered with " + "Python function {}", name, data[ivar][0]); + } else { + error->all(FLERR, "Unknown error verifying function {} linked to python style variable {}", + data[ivar][0],name); + } + } python->invoke_function(ifunc,data[ivar][1]); str = data[ivar][1]; // if Python func returns a string longer than VALUELENGTH @@ -4516,7 +4529,7 @@ void Variable::peratom2global(int flag, char *word, double *vector, int nstride, error->one(FLERR,"Variable uses atom property that isn't allocated"); mine = atom->q[index]; } - else error->one(FLERR,"Invalid atom vector in variable formula"); + else error->one(FLERR,"Invalid atom vector {} in variable formula", word); } else mine = vector[index*nstride]; diff --git a/src/write_restart.cpp b/src/write_restart.cpp index e9d6278033..d8fe7c1d2b 100644 --- a/src/write_restart.cpp +++ b/src/write_restart.cpp @@ -449,7 +449,7 @@ void WriteRestart::header() // write atom_style and its args - write_string(ATOM_STYLE,atom->atom_style); + write_string(ATOM_STYLE,utils::strip_style_suffix(atom->atom_style,lmp)); fwrite(&atom->avec->nargcopy,sizeof(int),1,fp); for (int i = 0; i < atom->avec->nargcopy; i++) { int n = strlen(atom->avec->argcopy[i]) + 1; @@ -542,26 +542,26 @@ void WriteRestart::force_fields() { if (force->pair) { if (force->pair->restartinfo) { - write_string(PAIR,force->pair_style); + write_string(PAIR,utils::strip_style_suffix(force->pair_style,lmp)); force->pair->write_restart(fp); } else { - write_string(NO_PAIR,force->pair_style); + write_string(NO_PAIR,utils::strip_style_suffix(force->pair_style,lmp)); } } if (atom->avec->bonds_allow && force->bond) { - write_string(BOND,force->bond_style); + write_string(BOND,utils::strip_style_suffix(force->bond_style,lmp)); force->bond->write_restart(fp); } if (atom->avec->angles_allow && force->angle) { - write_string(ANGLE,force->angle_style); + write_string(ANGLE,utils::strip_style_suffix(force->angle_style,lmp)); force->angle->write_restart(fp); } if (atom->avec->dihedrals_allow && force->dihedral) { - write_string(DIHEDRAL,force->dihedral_style); + write_string(DIHEDRAL,utils::strip_style_suffix(force->dihedral_style,lmp)); force->dihedral->write_restart(fp); } if (atom->avec->impropers_allow && force->improper) { - write_string(IMPROPER,force->improper_style); + write_string(IMPROPER,utils::strip_style_suffix(force->improper_style,lmp)); force->improper->write_restart(fp); } @@ -672,12 +672,12 @@ void WriteRestart::write_double(int flag, double value) byte) into the restart file ------------------------------------------------------------------------- */ -void WriteRestart::write_string(int flag, const char *value) +void WriteRestart::write_string(int flag, const std::string &value) { - int n = strlen(value) + 1; + int n = value.size() + 1; fwrite(&flag,sizeof(int),1,fp); fwrite(&n,sizeof(int),1,fp); - fwrite(value,sizeof(char),n,fp); + fwrite(value.c_str(),sizeof(char),n,fp); } /* ---------------------------------------------------------------------- diff --git a/src/write_restart.h b/src/write_restart.h index 4209476547..390e143ed5 100644 --- a/src/write_restart.h +++ b/src/write_restart.h @@ -62,7 +62,7 @@ class WriteRestart : public Command { void write_int(int, int); void write_bigint(int, bigint); void write_double(int, double); - void write_string(int, const char *); + void write_string(int, const std::string &); void write_int_vec(int, int, int *); void write_double_vec(int, int, double *); }; diff --git a/tools/README b/tools/README index 22d9c8ea18..82af6f3f66 100644 --- a/tools/README +++ b/tools/README @@ -48,6 +48,7 @@ smd convert Smooth Mach Dynamics triangles to VTK spin perform a cubic polynomial interpolation of a GNEB MEP stl_bin2txt convert binary STL files to ASCII swig Interface file and demo scripts for SWIG wrappers for the LAMMPS C library interface +tabulate Python scripts to generate tabulated potential files for LAMMPS tinker2lmp.py convert Tinker input files to LAMMPS input files valgrind suppression files for use with valgrind's memcheck tool vim add-ons to VIM editor for editing LAMMPS input scripts diff --git a/tools/coding_standard/versiontags.py b/tools/coding_standard/versiontags.py index 75a37dfbcc..0b4597046f 100644 --- a/tools/coding_standard/versiontags.py +++ b/tools/coding_standard/versiontags.py @@ -36,7 +36,7 @@ patterns: """ def check_pending_tag(f): - pattern = re.compile(r'^ *\.\. +version(changed|added):: +TBD') + pattern = re.compile(r'^ *\.\. +(version(changed|added)|deprecated):: +TBD') last_line = "\n" lineno = 1 errors = set() diff --git a/tools/tabulate/README.md b/tools/tabulate/README.md new file mode 100644 index 0000000000..cf6a92d166 --- /dev/null +++ b/tools/tabulate/README.md @@ -0,0 +1,39 @@ +# Python scripts to generate tabulated potential files for LAMMPS + +This directory contains a Python module 'tabulate' that can be used to +generate tabulated potential files for pair style table, bond style +table, and angle style table + +To create tables, you need to define your energy and - optionally - +force functions and then an instance of either the PairTabulate(), +BondTabulate(), AngleTabulate(), or DihedralTabulate() class from the +tabulate module and call its run() method to generate the table. Most +of the settings (number of points, minimum, maximum etc.) are provided +as command line flags. The run() method may be called multiple times to +generate multiple tables, for instance after changing parameters of the +energy/force functions. If the force function is not provided, the +force will be determined through numerical differentiation. + +Please see the individual tabulation scripts in this folder for examples: + +| ------------------------------|----------------------------------------------------------------------------| +| File | Description | +| ------------------------------|----------------------------------------------------------------------------| +| pair_lj_tabulate.py | creates two Lennard-Jones pair potential tables with different parameters | +| bond_morse_tabulate.py | creates a table for a Morse bond potential table | +| angle_harmonic_tabulate.py | creates a table for a harmonic angle potential table | +| dihedral_harmonic_tabulate.py | creates a table for a harmonic dihedral potential table | +| pair_hybrid_tabulate.py | creates a Morse/Lennard-Jones hybrid potential table with smooth switching | +| ------------------------------|----------------------------------------------------------------------------| + +Common command line flags: + +``` +options: + -h, --help show this help message and exit + --num-points NUM, -n NUM Number of tabulated points (default: 1000) + --filename FILENAME, -f FILENAME Name of output file (default: -) + --diff-num, -d Differentiate energy function numerically + --inner XMIN, -i XMIN Inner cutoff of table (required for pair) + --outer XMAX, -o XMAX Outer cutoff of table (required) +``` diff --git a/tools/tabulate/angle_harmonic_tabulate.py b/tools/tabulate/angle_harmonic_tabulate.py new file mode 100755 index 0000000000..665b392198 --- /dev/null +++ b/tools/tabulate/angle_harmonic_tabulate.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python3 + +from tabulate import AngleTabulate + +################################################################################ +import math + +def harmonic_energy(theta): + k = 100.0 + thetazero = 120.0 + # the force constant in LAMMPS is in energy per radians^2 so convert from degrees to radians + deg2rad = math.pi / 180.0 + t = (theta - thetazero) * deg2rad + f = k * t * t + return f + +################################################################################ + +if __name__ == "__main__": + atable = AngleTabulate(harmonic_energy, units='real') + atable.run('HARM') diff --git a/tools/tabulate/bond_morse_tabulate.py b/tools/tabulate/bond_morse_tabulate.py new file mode 100755 index 0000000000..2301343d4e --- /dev/null +++ b/tools/tabulate/bond_morse_tabulate.py @@ -0,0 +1,28 @@ +#!/usr/bin/env python3 + +from tabulate import BondTabulate + +################################################################################ +import math + +def morse_energy(r): + depth = 1.0 + width = 2.0 + rzero = 1.2 + ralpha = math.exp(-width*(r-rzero)) + f = depth * (-1.0 + (1.0 - ralpha) * (1.0 - ralpha)) + return f + +def morse_force(r): + depth = 1.0 + width = 2.0 + rzero = 1.2 + ralpha = math.exp(-width*(r-rzero)) + f = -2.0 * depth * width * (1.0 -ralpha) * ralpha + return f + +################################################################################ + +if __name__ == "__main__": + btable = BondTabulate(morse_energy, morse_force, units='lj') + btable.run('MORSE') diff --git a/tools/tabulate/dihedral_harmonic_tabulate.py b/tools/tabulate/dihedral_harmonic_tabulate.py new file mode 100755 index 0000000000..085cc73c3b --- /dev/null +++ b/tools/tabulate/dihedral_harmonic_tabulate.py @@ -0,0 +1,19 @@ +#!/usr/bin/env python3 + +from tabulate import DihedralTabulate + +################################################################################ +import math + +def harmonic_energy(theta): + k = 100.0 + # the force constant in LAMMPS is in energy per radians^2 so convert from degrees to radians + deg2rad = math.pi / 180.0 + f = k * (1 - math.cos(2.0 * deg2rad * theta)) + return f + +################################################################################ + +if __name__ == "__main__": + dtable = DihedralTabulate(harmonic_energy, units='metal') + dtable.run('HARM') diff --git a/tools/tabulate/pair_hybrid_tabulate.py b/tools/tabulate/pair_hybrid_tabulate.py new file mode 100755 index 0000000000..dabc0c7e85 --- /dev/null +++ b/tools/tabulate/pair_hybrid_tabulate.py @@ -0,0 +1,31 @@ +#!/usr/bin/env python3 + +from tabulate import PairTabulate + +################################################################################ +import math + +# hybrid potential using Morse for repulsive and LJ for attractive. +# using tanh() as smooth switching function between the two. + +def hybrid_energy(r): + depth = 1.0 + width = 5.0 + epsilon = 1.0 + sigma = 1.0 + rzero = 1.2 + + f1 = 4.0*epsilon*(math.pow(sigma/r,12.0) - math.pow(sigma/r,6.0)) + + ralpha = math.exp(-width*(r-rzero)) + f2 = depth * (-1.0 + (1.0 - ralpha) * (1.0 - ralpha)) + + switch = 0.5*math.tanh(10.0*(r - rzero)) + 0.5 + f = switch*f1 + (1.0 - switch)*f2 + return f + +################################################################################ + +if __name__ == "__main__": + ptable = PairTabulate(hybrid_energy, units='lj', comment='Morse repulsion + LJ attraction') + ptable.run('MORSE_LJ') diff --git a/tools/tabulate/pair_lj_tabulate.py b/tools/tabulate/pair_lj_tabulate.py new file mode 100755 index 0000000000..713b10a761 --- /dev/null +++ b/tools/tabulate/pair_lj_tabulate.py @@ -0,0 +1,26 @@ +#!/usr/bin/env python + +from tabulate import PairTabulate + +################################################################################ +import math +epsilon = 1.0 +sigma = 1.0 + +def lj_energy(r): + f = 4.0*epsilon*(math.pow(sigma/r,12.0) - math.pow(sigma/r,6.0)) + return f + +def lj_force(r): + epsilon = 1.0 + sigma = 1.0 + f = -4.0*epsilon*(-12.0*math.pow(sigma/r,12.0)/r + 6.0*math.pow(sigma/r,6.0)/r) + return f +################################################################################ + +if __name__ == "__main__": + ptable = PairTabulate(lj_energy, lj_force) + ptable.run('LJ_11') + epsilon = 1.0 + sigma = 1.5 + ptable.run('LJ_12') diff --git a/tools/tabulate/tabulate.py b/tools/tabulate/tabulate.py new file mode 100755 index 0000000000..58b7055791 --- /dev/null +++ b/tools/tabulate/tabulate.py @@ -0,0 +1,279 @@ +# ---------------------------------------------------------------------- +# LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator +# https://www.lammps.org/ Sandia National Laboratories +# LAMMPS Development team: developers@lammps.org +# +# Copyright (2003) Sandia Corporation. Under the terms of Contract +# DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains +# certain rights in this software. This software is distributed under +# the GNU General Public License. +# +# See the README file in the top-level LAMMPS directory. +# ------------------------------------------------------------------------- +""" +Python classes and support functions to generate tabulated potential files for LAMMPS. +""" + +# for python2/3 compatibility +from __future__ import print_function + +import sys +import argparse +from os import path +from datetime import datetime + +######################################################################## + +def numdiff(x, func): + """ Get the value of the first derivative of a function 'func(x)' at 'x' + from numerical differentiation.""" + + # optimal delta x value for 2-point numerical differentiation of two floating point numbers + epsilon = 6.05504e-6 + fval1 = func(x - epsilon) + fval2 = func(x + epsilon) + return 0.5 * (fval2-fval1) / epsilon + +######################################################################## + +def mktable(tstyle, label, num, xmin, xmax, efunc, diff=False, ffunc=None): + """ Do the tabulation of the provided energy function. Compute force from + numerical differentiation if no force function is provided. Also detect + minimum for use to determine potential shifting in bonded potentials.""" + + # must use numerical differentiation if no force function provided + if not ffunc: + diff = True + + print("# Creating %s table %s with %d points from %g to %g" % (tstyle, label, num, xmin, xmax)) + + table = [] + delx = (xmax - xmin) / (float(num) - 1.0) + emin = 999999999.0 + xzero = 0.0 + + for i in range(0,num): + x = xmin + i*delx + energy = efunc(x) + if energy < emin: + emin = energy + xzero = x + if diff: + force = -numdiff(x, efunc) + else: + force = ffunc(x) + table.append([i+1, x, energy, force]) + + return table, xzero + + +######################################################################## +# base class with shared functionality +class Tabulate(object): + """Base tabulation class. Contains all shared functionality: common argument parsing, + output file handling, table writing""" + + def __init__(self, style, efunc, ffunc=None, units=None, comment=None): + self.fp = sys.stdout + self.tstyle = style + self.energyfunc = efunc + self.forcefunc = ffunc + self.units = units + self.comment = comment + self.eshift = 0.0 + self.args = None + self.diff = True + + self.parser = argparse.ArgumentParser(description='Tool to generate tabulated ' + + self.tstyle + ' potential files for LAMMPS') + self.parser.add_argument('--num-points', '-n', dest='num', default=1000, type=int, + help="Number of tabulated points") + self.parser.add_argument('--filename', '-f', dest='filename', default='-', + help="Name of output file") + self.parser.add_argument('--diff-num', '-d', dest='diff',default=False, + action='store_true', + help="Differentiate energy function numerically") + self.parser.add_argument('--inner', '-i', dest='xmin', required=True, type=float, + help="Inner cutoff of table") + self.parser.add_argument('--outer', '-o', dest='xmax', required=True, type=float, + help="Outer cutoff of table") + + def openfile(self, label): + """Open table file, if needed and print label for new table entry""" + if self.args and self.args.filename != '-': + try: + if path.isfile(self.args.filename): + self.fp = open(self.args.filename, 'a') + print("# Appending table to file " + self.args.filename) + else: + self.fp = open(self.args.filename, 'w') + print("# Writing table to new file " + self.args.filename) + self.fp.write('# DATE: ' + datetime.now().date().isoformat()) + if self.units: + self.fp.write(' UNITS: ' + str(self.units)) + if self.comment: + self.fp.write(' COMMENT: ' + str(self.comment) + '\n') + except IOError: + sys.exit("Cannot open file %s for writing table data" % self.args.filename) + self.fp.write('\n' + label + '\n') + + def writetable(self, table, offset): + """ Formatted output tabulated data with 4 columns""" + for i,r,energy,force in table: + self.fp.write("%8d %- 22.15g %- 22.15g %- 22.15g\n" % (i, r, energy - offset, force)) + + def helpexit(self, text): + """ Convenience function to exit program with error and help message""" + sys.exit('\n' + text + '\n\n' + self.parser.format_help()) + +################################################################################ +# create tabulation for pair styles +class PairTabulate(Tabulate): + def __init__(self, efunc, ffunc=None, units=None, comment=None): + super(PairTabulate, self).__init__('pair', efunc, ffunc, units, comment) + self.parser.add_argument('--eshift', '-e', dest='eshift', default=False, + action='store_true', + help="Shift potential energy to be zero at outer cutoff") + try: + self.args = self.parser.parse_args() + except argparse.ArgumentError: + sys.exit() + + def run(self, label): + # sanity checks + if self.args.num < 2: + self.helpexit('Expect 2 or more points in table for tabulation') + if self.args.xmin <= 0.0: + self.helpexit('Inner tabulation cutoff must be > 0 for pair style table') + if self.args.xmax <= self.args.xmin: + self.helpexit('Outer cutoff must be larger than inner cutoff') + + self.diff = self.args.diff + if not self.forcefunc: + self.diff = True + offset = 0.0 + if self.args.eshift: + offset=self.energyfunc(self.args.xmax) + + table, dummy = mktable(self.tstyle, label, self.args.num, self.args.xmin, self.args.xmax, + self.energyfunc, self.args.diff, self.forcefunc) + + # open table file + self.openfile(label) + + # write pair style specific header + if self.forcefunc: + diffmin = -numdiff(self.args.xmin, self.forcefunc) + diffmax = -numdiff(self.args.xmax, self.forcefunc) + self.fp.write("N %d R %g %g FPRIME %- 22.15g %- 22.15g\n\n" + % (self.args.num, self.args.xmin, self.args.xmax, diffmin, diffmax)) + else: + self.fp.write("N %d R %g %g\n\n" % (self.args.num, self.args.xmin, self.args.xmax)) + + self.writetable(table, offset) + if self.args.filename != '-': + self.fp.close() + + +################################################################################ +# shared functionality to create tabulation for bond or angle styles +class BondAngleTabulate(Tabulate): + def __init__(self, style, efunc, ffunc=None, units=None, comment=None): + super(BondAngleTabulate, self).__init__(style, efunc, ffunc, units, comment) + self.parser.add_argument('--eshift', '-e', dest='eshift', default=False, + action='store_true', + help="Shift potential energy to be zero at minimum") + idx = [a.dest for a in self.parser._actions].index('xmin') + self.parser._actions[idx].required=False + self.parser._actions[idx].default=0.0 + if style == 'angle': + idx = [a.dest for a in self.parser._actions].index('xmax') + self.parser._actions[idx].required=False + self.parser._actions[idx].default=180.0 + try: + self.args = self.parser.parse_args() + except argparse.ArgumentError: + sys.exit() + + def run(self, label): + # sanity checks + if self.args.num < 2: + self.helpexit('Expect 2 or more points in table for tabulation') + if self.args.xmin < 0.0: + self.helpexit('Inner cutoff must not be negative') + if self.tstyle == 'angle' and self.args.xmax > 180.0: + self.helpexit('Outer cutoff must not be larger than 180.0 degrees') + + self.diff = self.args.diff + if not self.forcefunc: + self.diff = True + + table, xzero = mktable(self.tstyle, label, self.args.num, self.args.xmin, self.args.xmax, + self.energyfunc, self.args.diff, self.forcefunc) + print("# Minimum energy of tabulated potential is at %g" % xzero) + offset = 0.0 + if self.args.eshift: + offset=self.energyfunc(xzero) + + self.openfile(label) + + if self.forcefunc: + diffmin = -numdiff(self.args.xmin, self.forcefunc) + diffmax = -numdiff(self.args.xmax, self.forcefunc) + self.fp.write("N %d FP %- 22.15g %- 22.15g EQ %g\n\n" % + (self.args.num, diffmin, diffmax, xzero)) + else: + self.fp.write("N %d EQ %g\n\n" % (self.args.num, xzero)) + + self.writetable(table, offset) + if self.args.filename != '-': + self.fp.close() + +################################################################################ +class BondTabulate(BondAngleTabulate): + def __init__(self, efunc, ffunc=None, units=None, comment=None): + super(BondTabulate, self).__init__('bond', efunc, ffunc, units, comment) + +################################################################################ +class AngleTabulate(BondAngleTabulate): + def __init__(self, efunc, ffunc=None, units=None, comment=None): + super(AngleTabulate, self).__init__('angle', efunc, ffunc, units, comment) + +################################################################################ +# create tabulation for dihdedral +class DihedralTabulate(Tabulate): + def __init__(self, efunc, ffunc=None, units=None, comment=None): + super(DihedralTabulate, self).__init__('dihedral', efunc, ffunc, units, comment) + idx = [a.dest for a in self.parser._actions].index('xmin') + self.parser._actions[idx].required=False + self.parser._actions[idx].default=-180.0 + idx = [a.dest for a in self.parser._actions].index('xmax') + self.parser._actions[idx].required=False + self.parser._actions[idx].default=179.999999 + try: + self.args = self.parser.parse_args() + except argparse.ArgumentError: + sys.exit() + + def run(self, label): + # sanity checks + if self.args.num < 2: + self.helpexit('Expect 2 or more points in table for tabulation') + if self.args.xmin < -180 or self.args.xmin > 0.0: + self.helpexit('Inner cutoff must be within -180.0 and 0.0 degrees') + if self.args.xmax < 0.0 or self.args.xmin > 360.0: + self.helpexit('Outer cutoff must be within 0.0 and 360.0 degrees') + if (self.args.xmax - self.args.xmin) >= 360.0: + self.helpexit('Inner and outer cutoff range must be less than 360.0 degrees') + + self.diff = self.args.diff + if not self.forcefunc: + self.diff = True + + table, dummy = mktable(self.tstyle, label, self.args.num, self.args.xmin, self.args.xmax, + self.energyfunc, self.args.diff, self.forcefunc) + self.openfile(label) + self.fp.write("N %d DEGREES \n\n" % (self.args.num)) + self.writetable(table, 0.0) + if self.args.filename != '-': + self.fp.close() diff --git a/unittest/c-library/test_library_properties.cpp b/unittest/c-library/test_library_properties.cpp index bbb363dfab..bb0f6e2894 100644 --- a/unittest/c-library/test_library_properties.cpp +++ b/unittest/c-library/test_library_properties.cpp @@ -209,6 +209,10 @@ TEST_F(LibraryProperties, setting) lammps_command(lmp, "dimension 3"); if (!verbose) ::testing::internal::GetCapturedStdout(); + EXPECT_EQ(lammps_extract_setting(lmp, "kokkos_active"), 0); + EXPECT_EQ(lammps_extract_setting(lmp, "kokkos_nthreads"), 0); + EXPECT_EQ(lammps_extract_setting(lmp, "kokkos_ngpus"), 0); + EXPECT_EQ(lammps_extract_setting(lmp, "world_size"), 1); EXPECT_EQ(lammps_extract_setting(lmp, "world_rank"), 0); EXPECT_EQ(lammps_extract_setting(lmp, "universe_size"), 1); @@ -545,3 +549,27 @@ TEST_F(AtomProperties, position) EXPECT_DOUBLE_EQ(x[1][1], 0.1); EXPECT_DOUBLE_EQ(x[1][2], 0.1); } + +TEST(SystemSettings, kokkos) +{ + if (!lammps_config_has_package("KOKKOS")) GTEST_SKIP(); + if (!lammps_config_accelerator("KOKKOS", "api", "openmp")) GTEST_SKIP(); + + // clang-format off + const char *args[] = {"SystemSettings", "-log", "none", "-echo", "screen", "-nocite", + "-k", "on", "t", "4", "-sf", "kk"}; + // clang-format on + char **argv = (char **)args; + int argc = sizeof(args) / sizeof(char *); + + ::testing::internal::CaptureStdout(); + void *lmp = lammps_open_no_mpi(argc, argv, nullptr); + std::string output = ::testing::internal::GetCapturedStdout(); + if (verbose) std::cout << output; + EXPECT_THAT(output, StartsWith("LAMMPS (")); + + EXPECT_EQ(lammps_extract_setting(lmp, "kokkos_active"), 1); + EXPECT_EQ(lammps_extract_setting(lmp, "kokkos_nthreads"), 4); + EXPECT_EQ(lammps_extract_setting(lmp, "kokkos_ngpus"), 0); + lammps_close(lmp); +} diff --git a/unittest/commands/CMakeLists.txt b/unittest/commands/CMakeLists.txt index c9a7c7df59..aa1bd22fa4 100644 --- a/unittest/commands/CMakeLists.txt +++ b/unittest/commands/CMakeLists.txt @@ -53,10 +53,10 @@ endif() target_link_libraries(test_kim_commands PRIVATE lammps GTest::GMock) add_test(NAME KimCommands COMMAND test_kim_commands) -add_executable(test_reset_ids test_reset_ids.cpp) -target_compile_definitions(test_reset_ids PRIVATE -DTEST_INPUT_FOLDER=${CMAKE_CURRENT_SOURCE_DIR}) -target_link_libraries(test_reset_ids PRIVATE lammps GTest::GMock) -add_test(NAME ResetIDs COMMAND test_reset_ids) +add_executable(test_reset_atoms test_reset_atoms.cpp) +target_compile_definitions(test_reset_atoms PRIVATE -DTEST_INPUT_FOLDER=${CMAKE_CURRENT_SOURCE_DIR}) +target_link_libraries(test_reset_atoms PRIVATE lammps GTest::GMock) +add_test(NAME ResetAtoms COMMAND test_reset_atoms) if(PKG_MOLECULE) add_executable(test_compute_global test_compute_global.cpp) diff --git a/unittest/commands/test_kim_commands.cpp b/unittest/commands/test_kim_commands.cpp index 0868d20a8d..988b0db69a 100644 --- a/unittest/commands/test_kim_commands.cpp +++ b/unittest/commands/test_kim_commands.cpp @@ -307,17 +307,17 @@ TEST_F(KimCommandsTest, kim_param) ASSERT_THAT(variable->retrieve("shift"), StrEq("2")); - TEST_FAILURE(".*ERROR: Illegal variable name in 'kim param get'.*", + TEST_FAILURE(".*ERROR: Illegal variable name 'list' in 'kim param get'.*", command("kim param get cutoffs 1:3 list");); - TEST_FAILURE(".*ERROR: Illegal variable name in 'kim param get'.*", + TEST_FAILURE(".*ERROR: Illegal variable name 'list' in 'kim param get'.*", command("kim param get cutoffs 1:3 cutoffs_1 cutoffs_2 list");); - TEST_FAILURE(".*ERROR: Illegal variable name in 'kim param get'.*", + TEST_FAILURE(".*ERROR: Illegal variable name 'split' in 'kim param get'.*", command("kim param get cutoffs 1:3 split");); - TEST_FAILURE(".*ERROR: Illegal variable name in 'kim param get'.*", + TEST_FAILURE(".*ERROR: Illegal variable name 'split' in 'kim param get'.*", command("kim param get cutoffs 1:3 cutoffs_1 cutoffs_2 split");); - TEST_FAILURE(".*ERROR: Illegal variable name in 'kim param get'.*", + TEST_FAILURE(".*ERROR: Illegal variable name 'explicit' in 'kim param get'.*", command("kim param get cutoffs 1:3 explicit");); - TEST_FAILURE(".*ERROR: Illegal variable name in 'kim param get'.*", + TEST_FAILURE(".*ERROR: Illegal variable name 'explicit' in 'kim param get'.*", command("kim param get cutoffs 1:3 cutoffs_1 cutoffs_2 explicit");); TEST_FAILURE(".*ERROR: Wrong number of arguments in 'kim param get' " "command.\nThe LAMMPS '3' variable names or 'cutoffs " diff --git a/unittest/commands/test_reset_ids.cpp b/unittest/commands/test_reset_atoms.cpp similarity index 68% rename from unittest/commands/test_reset_ids.cpp rename to unittest/commands/test_reset_atoms.cpp index a31f665159..a0afe36324 100644 --- a/unittest/commands/test_reset_ids.cpp +++ b/unittest/commands/test_reset_atoms.cpp @@ -17,6 +17,7 @@ #include "info.h" #include "input.h" #include "lammps.h" +#include "library.h" #include "output.h" #include "update.h" #include "utils.h" @@ -36,11 +37,11 @@ namespace LAMMPS_NS { #define STRINGIFY(val) XSTR(val) #define XSTR(val) #val -class ResetIDsTest : public LAMMPSTest { +class ResetAtomsIDTest : public LAMMPSTest { protected: void SetUp() override { - testbinary = "ResetIDsTest"; + testbinary = "ResetAtomsIDTest"; LAMMPSTest::SetUp(); if (info->has_style("atom", "full")) { BEGIN_HIDE_OUTPUT(); @@ -51,7 +52,7 @@ protected: } }; -TEST_F(ResetIDsTest, MolIDAll) +TEST_F(ResetAtomsIDTest, MolIDAll) { if (lmp->atom->natoms == 0) GTEST_SKIP(); @@ -89,7 +90,7 @@ TEST_F(ResetIDsTest, MolIDAll) // the original data file has two different molecule IDs // for two residues of the same molecule/fragment. BEGIN_HIDE_OUTPUT(); - command("reset_mol_ids all"); + command("reset_atoms mol all"); END_HIDE_OUTPUT(); ASSERT_EQ(molid[GETIDX(1)], 1); @@ -123,7 +124,7 @@ TEST_F(ResetIDsTest, MolIDAll) ASSERT_EQ(molid[GETIDX(29)], 5); } -TEST_F(ResetIDsTest, DeletePlusAtomID) +TEST_F(ResetAtomsIDTest, DeletePlusAtomID) { if (lmp->atom->natoms == 0) GTEST_SKIP(); @@ -134,7 +135,7 @@ TEST_F(ResetIDsTest, DeletePlusAtomID) command("group allwater molecule 3:6"); command("group twowater molecule 4:6:2"); command("delete_atoms group twowater compress no bond yes"); - command("reset_mol_ids all"); + command("reset_atoms mol all"); END_HIDE_OUTPUT(); ASSERT_EQ(lmp->atom->natoms, 23); ASSERT_EQ(lmp->atom->map_tag_max, 26); @@ -193,7 +194,7 @@ TEST_F(ResetIDsTest, DeletePlusAtomID) ASSERT_GE(GETIDX(26), 0); BEGIN_HIDE_OUTPUT(); - command("reset_atom_ids"); + command("reset_atoms id"); END_HIDE_OUTPUT(); ASSERT_EQ(lmp->atom->map_tag_max, 23); @@ -201,7 +202,7 @@ TEST_F(ResetIDsTest, DeletePlusAtomID) ASSERT_GE(GETIDX(i), 0); } -TEST_F(ResetIDsTest, PartialOffset) +TEST_F(ResetAtomsIDTest, PartialOffset) { if (lmp->atom->natoms == 0) GTEST_SKIP(); @@ -211,7 +212,7 @@ TEST_F(ResetIDsTest, PartialOffset) BEGIN_HIDE_OUTPUT(); command("group allwater molecule 3:6"); command("group nowater subtract all allwater"); - command("reset_mol_ids allwater offset 4"); + command("reset_atoms mol allwater offset 4"); END_HIDE_OUTPUT(); ASSERT_EQ(lmp->atom->natoms, 29); ASSERT_EQ(lmp->atom->map_tag_max, 29); @@ -247,7 +248,7 @@ TEST_F(ResetIDsTest, PartialOffset) ASSERT_EQ(molid[GETIDX(29)], 8); BEGIN_HIDE_OUTPUT(); - command("reset_mol_ids nowater offset 0"); + command("reset_atoms mol nowater offset 0"); END_HIDE_OUTPUT(); ASSERT_EQ(molid[GETIDX(1)], 1); @@ -281,7 +282,7 @@ TEST_F(ResetIDsTest, PartialOffset) ASSERT_EQ(molid[GETIDX(29)], 8); } -TEST_F(ResetIDsTest, DeleteAdd) +TEST_F(ResetAtomsIDTest, DeleteAdd) { if (lmp->atom->natoms == 0) GTEST_SKIP(); @@ -293,7 +294,7 @@ TEST_F(ResetIDsTest, DeleteAdd) command("group twowater molecule 4:6:2"); command("group nowater subtract all allwater"); command("delete_atoms group twowater compress no bond yes mol yes"); - command("reset_mol_ids allwater"); + command("reset_atoms mol allwater"); END_HIDE_OUTPUT(); ASSERT_EQ(lmp->atom->natoms, 23); ASSERT_EQ(lmp->atom->map_tag_max, 26); @@ -352,7 +353,7 @@ TEST_F(ResetIDsTest, DeleteAdd) ASSERT_GE(GETIDX(26), 0); BEGIN_HIDE_OUTPUT(); - command("reset_atom_ids sort yes"); + command("reset_atoms id sort yes"); END_HIDE_OUTPUT(); ASSERT_EQ(lmp->atom->map_tag_max, 23); @@ -360,7 +361,7 @@ TEST_F(ResetIDsTest, DeleteAdd) ASSERT_GE(GETIDX(i), 0); BEGIN_HIDE_OUTPUT(); - command("reset_mol_ids nowater offset 1"); + command("reset_atoms mol nowater offset 1"); END_HIDE_OUTPUT(); ASSERT_EQ(molid[GETIDX(1)], 2); @@ -392,7 +393,7 @@ TEST_F(ResetIDsTest, DeleteAdd) command("create_atoms 2 single 1.0 0.0 0.0"); command("create_atoms 3 single 2.0 0.0 0.0"); command("create_atoms 4 single 3.0 0.0 0.0"); - command("reset_mol_ids all single yes"); + command("reset_atoms mol all single yes"); END_HIDE_OUTPUT(); ASSERT_EQ(lmp->atom->natoms, 27); ASSERT_EQ(lmp->atom->map_tag_max, 27); @@ -406,7 +407,7 @@ TEST_F(ResetIDsTest, DeleteAdd) ASSERT_EQ(molid[GETIDX(27)], 7); BEGIN_HIDE_OUTPUT(); - command("reset_mol_ids all single no"); + command("reset_atoms mol all single no"); END_HIDE_OUTPUT(); ASSERT_EQ(molid[GETIDX(21)], 3); @@ -418,7 +419,7 @@ TEST_F(ResetIDsTest, DeleteAdd) ASSERT_EQ(molid[GETIDX(27)], 0); BEGIN_HIDE_OUTPUT(); - command("reset_mol_ids all compress no single yes"); + command("reset_atoms mol all compress no single yes"); END_HIDE_OUTPUT(); ASSERT_EQ(molid[GETIDX(21)], 21); @@ -430,7 +431,7 @@ TEST_F(ResetIDsTest, DeleteAdd) ASSERT_EQ(molid[GETIDX(27)], 27); } -TEST_F(ResetIDsTest, TopologyData) +TEST_F(ResetAtomsIDTest, TopologyData) { if (lmp->atom->natoms == 0) GTEST_SKIP(); @@ -525,7 +526,7 @@ TEST_F(ResetIDsTest, TopologyData) ASSERT_EQ(angle_atom3[GETIDX(24)][0], 26); BEGIN_HIDE_OUTPUT(); - command("reset_atom_ids sort yes"); + command("reset_atoms id sort yes"); END_HIDE_OUTPUT(); num_bond = lmp->atom->num_bond; @@ -618,63 +619,186 @@ TEST_F(ResetIDsTest, TopologyData) ASSERT_EQ(angle_atom3[GETIDX(22)][0], 23); } -TEST_F(ResetIDsTest, DeathTests) +TEST_F(ResetAtomsIDTest, DeathTests) { if (lmp->atom->natoms == 0) GTEST_SKIP(); - TEST_FAILURE(".*ERROR: Illegal reset_mol_ids command.*", command("reset_mol_ids");); - TEST_FAILURE(".*ERROR: Illegal reset_mol_ids command.*", - command("reset_mol_ids all offset 1 1");); - TEST_FAILURE(".*ERROR: Illegal reset_mol_ids command.*", - command("reset_mol_ids all offset -2");); - TEST_FAILURE(".*ERROR on proc 0: Expected integer.*", command("reset_mol_ids all offset xxx");); + TEST_FAILURE(".*ERROR: Illegal reset_atoms mol command.*", command("reset_atoms mol");); + TEST_FAILURE(".*ERROR: Unknown reset_atoms mol keyword: 1.*", + command("reset_atoms mol all offset 1 1");); + TEST_FAILURE(".*ERROR: Illegal reset_atoms mol offset: -2.*", + command("reset_atoms mol all offset -2");); TEST_FAILURE(".*ERROR on proc 0: Expected integer.*", - command("reset_mol_ids all compress yes single no offset xxx");); - TEST_FAILURE(".*ERROR: Illegal reset_mol_ids command.*", command("reset_mol_ids all offset");); - TEST_FAILURE(".*ERROR: Illegal reset_mol_ids command.*", - command("reset_mol_ids all compress");); + command("reset_atoms mol all offset xxx");); + TEST_FAILURE(".*ERROR on proc 0: Expected integer.*", + command("reset_atoms mol all compress yes single no offset xxx");); + TEST_FAILURE(".*ERROR: Illegal reset_atoms mol offset command: missing argument.*", + command("reset_atoms mol all offset");); + TEST_FAILURE(".*ERROR: Illegal reset_atoms mol compress command: missing argument.*", + command("reset_atoms mol all compress");); TEST_FAILURE(".*ERROR: Expected boolean parameter instead of 'xxx'.*", - command("reset_mol_ids all compress xxx");); - TEST_FAILURE(".*ERROR: Illegal reset_mol_ids command.*", command("reset_mol_ids all single");); + command("reset_atoms mol all compress xxx");); + TEST_FAILURE(".*ERROR: Illegal reset_atoms mol single command: missing argument.*", + command("reset_atoms mol all single");); TEST_FAILURE(".*ERROR: Expected boolean parameter instead of 'xxx'.*", - command("reset_mol_ids all single xxx");); + command("reset_atoms mol all single xxx");); + + TEST_FAILURE(".*ERROR: Illegal reset_atoms image command: missing argument.*", + command("reset_atoms image");); + TEST_FAILURE(".*ERROR: Unknown reset_atoms image keyword: xxx.*", + command("reset_atoms image all xxx");); + TEST_FAILURE(".*ERROR: Could not find reset_atoms image group xxx.*", + command("reset_atoms image xxx");); } -class ResetMolIDsTest : public LAMMPSTest { +class ResetAtomsMolTest : public LAMMPSTest { protected: void SetUp() override { - testbinary = "ResetIDsTest"; + testbinary = "ResetAtomsMolTest"; LAMMPSTest::SetUp(); } }; -TEST_F(ResetMolIDsTest, FailBeforeBox) +TEST_F(ResetAtomsMolTest, FailBeforeBox) { - TEST_FAILURE(".*ERROR: Reset_mol_ids command before simulation box is.*", - command("reset_mol_ids all");); + TEST_FAILURE(".*ERROR: Reset_atoms id command before simulation box is.*", + command("reset_atoms id");); + TEST_FAILURE(".*ERROR: Reset_atoms mol command before simulation box is.*", + command("reset_atoms mol all");); + TEST_FAILURE(".*ERROR: Reset_atoms image command before simulation box is.*", + command("reset_atoms image all");); } -TEST_F(ResetMolIDsTest, FailMissingId) +TEST_F(ResetAtomsMolTest, FailMissingId) { BEGIN_HIDE_OUTPUT(); command("atom_modify id no"); command("region box block 0 1 0 1 0 1"); command("create_box 1 box"); END_HIDE_OUTPUT(); - TEST_FAILURE(".*ERROR: Cannot use reset_mol_ids unless.*", command("reset_mol_ids all");); + TEST_FAILURE(".*ERROR: Cannot use reset_atoms mol unless.*", command("reset_atoms mol all");); + TEST_FAILURE(".*ERROR: Cannot use reset_atoms image unless.*", + command("reset_atoms image all");); } -TEST_F(ResetMolIDsTest, FailOnlyMolecular) +TEST_F(ResetAtomsMolTest, FailOnlyMolecular) { BEGIN_HIDE_OUTPUT(); command("clear"); command("region box block 0 1 0 1 0 1"); command("create_box 1 box"); END_HIDE_OUTPUT(); - TEST_FAILURE(".*ERROR: Can only use reset_mol_ids.*", command("reset_mol_ids all");); + TEST_FAILURE(".*ERROR: Can only use reset_atoms mol.*", command("reset_atoms mol all");); } + +class ResetAtomsImageTest : public LAMMPSTest { +protected: + void SetUp() override + { + testbinary = "ResetAtomsImageTest"; + LAMMPSTest::SetUp(); + if (info->has_style("atom", "full")) { + BEGIN_HIDE_OUTPUT(); + command("variable input_dir index \"" STRINGIFY(TEST_INPUT_FOLDER) "\""); + command("include \"${input_dir}/in.fourmol\""); + command("create_atoms 1 single 1.0 1.0 1.0"); + command("create_atoms 1 single 2.0 1.0 1.0"); + command("create_atoms 1 single 1.0 2.0 1.0"); + command("set atom 1*7 image 1 1 -1"); + command("set atom 8*9 image 2 -1 0"); + command("set atom 8*9 image 2 -1 0"); + command("set atom 10 image 2 0 0"); + command("set atom 11*12 image 2 0 -1"); + command("set atom 13*15 image 1 0 0"); + command("set atom 16*17 image 0 1 1"); + command("set atom 18*19 image 0 1 0"); + command("set atom 20 image 0 2 0"); + command("set atom 21*23 image 20 -1 0"); + command("set atom 27*28 image 1 0 0"); + command("set atom 29 image 1 2 0"); + command("set atom 31 image -2 0 1"); + command("set atom 32 image 0 20 0"); + END_HIDE_OUTPUT(); + } + } +}; + +TEST_F(ResetAtomsImageTest, ResetAtomsImage) +{ + if (lmp->atom->natoms == 0) GTEST_SKIP(); + EXPECT_EQ(lmp->atom->image[GETIDX(1)], lammps_encode_image_flags(1, 1, -1)); + EXPECT_EQ(lmp->atom->image[GETIDX(2)], lammps_encode_image_flags(1, 1, -1)); + EXPECT_EQ(lmp->atom->image[GETIDX(3)], lammps_encode_image_flags(1, 1, -1)); + EXPECT_EQ(lmp->atom->image[GETIDX(4)], lammps_encode_image_flags(1, 1, -1)); + EXPECT_EQ(lmp->atom->image[GETIDX(5)], lammps_encode_image_flags(1, 1, -1)); + EXPECT_EQ(lmp->atom->image[GETIDX(6)], lammps_encode_image_flags(1, 1, -1)); + EXPECT_EQ(lmp->atom->image[GETIDX(7)], lammps_encode_image_flags(1, 1, -1)); + EXPECT_EQ(lmp->atom->image[GETIDX(8)], lammps_encode_image_flags(2, -1, 0)); + EXPECT_EQ(lmp->atom->image[GETIDX(9)], lammps_encode_image_flags(2, -1, 0)); + EXPECT_EQ(lmp->atom->image[GETIDX(10)], lammps_encode_image_flags(2, 0, 0)); + EXPECT_EQ(lmp->atom->image[GETIDX(11)], lammps_encode_image_flags(2, 0, -1)); + EXPECT_EQ(lmp->atom->image[GETIDX(12)], lammps_encode_image_flags(2, 0, -1)); + EXPECT_EQ(lmp->atom->image[GETIDX(13)], lammps_encode_image_flags(1, 0, 0)); + EXPECT_EQ(lmp->atom->image[GETIDX(14)], lammps_encode_image_flags(1, 0, 0)); + EXPECT_EQ(lmp->atom->image[GETIDX(15)], lammps_encode_image_flags(1, 0, 0)); + EXPECT_EQ(lmp->atom->image[GETIDX(16)], lammps_encode_image_flags(0, 1, 1)); + EXPECT_EQ(lmp->atom->image[GETIDX(17)], lammps_encode_image_flags(0, 1, 1)); + EXPECT_EQ(lmp->atom->image[GETIDX(18)], lammps_encode_image_flags(0, 1, 0)); + EXPECT_EQ(lmp->atom->image[GETIDX(19)], lammps_encode_image_flags(0, 1, 0)); + EXPECT_EQ(lmp->atom->image[GETIDX(20)], lammps_encode_image_flags(0, 2, 0)); + EXPECT_EQ(lmp->atom->image[GETIDX(21)], lammps_encode_image_flags(20, -1, 0)); + EXPECT_EQ(lmp->atom->image[GETIDX(22)], lammps_encode_image_flags(20, -1, 0)); + EXPECT_EQ(lmp->atom->image[GETIDX(23)], lammps_encode_image_flags(20, -1, 0)); + EXPECT_EQ(lmp->atom->image[GETIDX(24)], lammps_encode_image_flags(0, 0, 0)); + EXPECT_EQ(lmp->atom->image[GETIDX(25)], lammps_encode_image_flags(0, 0, 0)); + EXPECT_EQ(lmp->atom->image[GETIDX(26)], lammps_encode_image_flags(0, 0, 0)); + EXPECT_EQ(lmp->atom->image[GETIDX(27)], lammps_encode_image_flags(1, 0, 0)); + EXPECT_EQ(lmp->atom->image[GETIDX(28)], lammps_encode_image_flags(1, 0, 0)); + EXPECT_EQ(lmp->atom->image[GETIDX(29)], lammps_encode_image_flags(1, 2, 0)); + EXPECT_EQ(lmp->atom->image[GETIDX(30)], lammps_encode_image_flags(0, 0, 0)); + EXPECT_EQ(lmp->atom->image[GETIDX(31)], lammps_encode_image_flags(-2, 0, 1)); + EXPECT_EQ(lmp->atom->image[GETIDX(32)], lammps_encode_image_flags(0, 20, 0)); + BEGIN_HIDE_OUTPUT(); + command("group subset id 5:32"); + command("reset_atoms image subset"); + END_HIDE_OUTPUT(); + EXPECT_EQ(lmp->atom->image[GETIDX(1)], lammps_encode_image_flags(1, 1, -1)); + EXPECT_EQ(lmp->atom->image[GETIDX(2)], lammps_encode_image_flags(1, 1, -1)); + EXPECT_EQ(lmp->atom->image[GETIDX(3)], lammps_encode_image_flags(1, 1, -1)); + EXPECT_EQ(lmp->atom->image[GETIDX(4)], lammps_encode_image_flags(1, 1, -1)); + EXPECT_EQ(lmp->atom->image[GETIDX(5)], lammps_encode_image_flags(0, 1, -1)); + EXPECT_EQ(lmp->atom->image[GETIDX(6)], lammps_encode_image_flags(0, 1, -1)); + EXPECT_EQ(lmp->atom->image[GETIDX(7)], lammps_encode_image_flags(0, 1, -1)); + EXPECT_EQ(lmp->atom->image[GETIDX(8)], lammps_encode_image_flags(1, -1, 0)); + EXPECT_EQ(lmp->atom->image[GETIDX(9)], lammps_encode_image_flags(1, -1, 0)); + EXPECT_EQ(lmp->atom->image[GETIDX(10)], lammps_encode_image_flags(1, 0, 0)); + EXPECT_EQ(lmp->atom->image[GETIDX(11)], lammps_encode_image_flags(1, 0, -1)); + EXPECT_EQ(lmp->atom->image[GETIDX(12)], lammps_encode_image_flags(1, 0, -1)); + EXPECT_EQ(lmp->atom->image[GETIDX(13)], lammps_encode_image_flags(0, 0, 0)); + EXPECT_EQ(lmp->atom->image[GETIDX(14)], lammps_encode_image_flags(0, 0, 0)); + EXPECT_EQ(lmp->atom->image[GETIDX(15)], lammps_encode_image_flags(0, 0, 0)); + EXPECT_EQ(lmp->atom->image[GETIDX(16)], lammps_encode_image_flags(-1, 1, 1)); + EXPECT_EQ(lmp->atom->image[GETIDX(17)], lammps_encode_image_flags(-1, 1, 1)); + EXPECT_EQ(lmp->atom->image[GETIDX(18)], lammps_encode_image_flags(0, 0, 0)); + EXPECT_EQ(lmp->atom->image[GETIDX(19)], lammps_encode_image_flags(0, 0, 0)); + EXPECT_EQ(lmp->atom->image[GETIDX(20)], lammps_encode_image_flags(0, 1, 0)); + EXPECT_EQ(lmp->atom->image[GETIDX(21)], lammps_encode_image_flags(0, 0, 0)); + EXPECT_EQ(lmp->atom->image[GETIDX(22)], lammps_encode_image_flags(0, 0, 0)); + EXPECT_EQ(lmp->atom->image[GETIDX(23)], lammps_encode_image_flags(0, 0, 0)); + EXPECT_EQ(lmp->atom->image[GETIDX(24)], lammps_encode_image_flags(0, 0, 0)); + EXPECT_EQ(lmp->atom->image[GETIDX(25)], lammps_encode_image_flags(0, 0, 0)); + EXPECT_EQ(lmp->atom->image[GETIDX(26)], lammps_encode_image_flags(0, 0, 0)); + EXPECT_EQ(lmp->atom->image[GETIDX(27)], lammps_encode_image_flags(0, -1, 0)); + EXPECT_EQ(lmp->atom->image[GETIDX(28)], lammps_encode_image_flags(0, -1, 0)); + EXPECT_EQ(lmp->atom->image[GETIDX(29)], lammps_encode_image_flags(0, 1, 0)); + EXPECT_EQ(lmp->atom->image[GETIDX(30)], lammps_encode_image_flags(0, 0, 0)); + EXPECT_EQ(lmp->atom->image[GETIDX(30)], lammps_encode_image_flags(0, 0, 0)); + EXPECT_EQ(lmp->atom->image[GETIDX(31)], lammps_encode_image_flags(0, 0, 0)); + EXPECT_EQ(lmp->atom->image[GETIDX(32)], lammps_encode_image_flags(0, 0, 0)); +} + } // namespace LAMMPS_NS int main(int argc, char **argv) diff --git a/unittest/commands/test_simple_commands.cpp b/unittest/commands/test_simple_commands.cpp index ade8f85275..db6ee3c1e7 100644 --- a/unittest/commands/test_simple_commands.cpp +++ b/unittest/commands/test_simple_commands.cpp @@ -20,6 +20,7 @@ #include "input.h" #include "output.h" #include "update.h" +#include "utils.h" #include "variable.h" #include "../testing/core.h" @@ -265,14 +266,22 @@ TEST_F(SimpleCommandsTest, Suffix) BEGIN_HIDE_OUTPUT(); command("suffix one"); + command("suffix yes"); END_HIDE_OUTPUT(); ASSERT_THAT(lmp->suffix, StrEq("one")); + ASSERT_EQ(lmp->suffix_enable, 1); + ASSERT_THAT(utils::strip_style_suffix("one/four", lmp), StrEq("one/four")); + ASSERT_THAT(utils::strip_style_suffix("four/one", lmp), StrEq("four")); BEGIN_HIDE_OUTPUT(); command("suffix hybrid two three"); END_HIDE_OUTPUT(); ASSERT_THAT(lmp->suffix, StrEq("two")); ASSERT_THAT(lmp->suffix2, StrEq("three")); + ASSERT_THAT(utils::strip_style_suffix("one/four", lmp), StrEq("one/four")); + ASSERT_THAT(utils::strip_style_suffix("one/two", lmp), StrEq("one")); + ASSERT_THAT(utils::strip_style_suffix("one/three", lmp), StrEq("one")); + ASSERT_THAT(utils::strip_style_suffix("four/one", lmp), StrEq("four/one")); BEGIN_HIDE_OUTPUT(); command("suffix four"); @@ -284,11 +293,13 @@ TEST_F(SimpleCommandsTest, Suffix) command("suffix off"); END_HIDE_OUTPUT(); ASSERT_EQ(lmp->suffix_enable, 0); + ASSERT_THAT(utils::strip_style_suffix("one/four", lmp), StrEq("one/four")); BEGIN_HIDE_OUTPUT(); command("suffix yes"); END_HIDE_OUTPUT(); ASSERT_EQ(lmp->suffix_enable, 1); + ASSERT_THAT(utils::strip_style_suffix("one/four", lmp), StrEq("one")); BEGIN_HIDE_OUTPUT(); command("suffix no"); diff --git a/unittest/force-styles/test_pair_style.cpp b/unittest/force-styles/test_pair_style.cpp index de1ea26d54..385525c90b 100644 --- a/unittest/force-styles/test_pair_style.cpp +++ b/unittest/force-styles/test_pair_style.cpp @@ -379,8 +379,9 @@ TEST(PairStyle, plain) EXPECT_FP_LE_WITH_EPS(pair->eng_vdwl, test_config.run_vdwl, epsilon); EXPECT_FP_LE_WITH_EPS(pair->eng_coul, test_config.run_coul, epsilon); // skip comparing per-atom energy with total energy for "kim" and "in.conp" - if (std::string("kim") != lmp->force->pair_style && - std::string("in.conp") != test_config.input_file) + if ((std::string("kim") != lmp->force->pair_style) && + (std::string("pod") != lmp->force->pair_style) && + (std::string("in.conp") != test_config.input_file)) EXPECT_FP_LE_WITH_EPS((pair->eng_vdwl + pair->eng_coul), energy, epsilon); if (print_stats) std::cerr << "run_energy stats, newton on: " << stats << std::endl; diff --git a/unittest/force-styles/tests/bond-gaussian.yaml b/unittest/force-styles/tests/bond-gaussian.yaml index e6e259b32a..e85d14fba3 100644 --- a/unittest/force-styles/tests/bond-gaussian.yaml +++ b/unittest/force-styles/tests/bond-gaussian.yaml @@ -1,6 +1,7 @@ --- -lammps_version: 17 Feb 2022 -date_generated: Fri Mar 18 22:17:50 2022 +lammps_version: 3 Nov 2022 +tags: generated +date_generated: Mon Nov 21 21:52:14 2022 epsilon: 1e-12 skip_tests: prerequisites: ! | @@ -19,70 +20,70 @@ bond_coeff: ! | equilibrium: 5 1.45 1.37 1.61 2.45 2.85 extract: ! "" natoms: 29 -init_energy: 194.9780382216324 -init_stress: ! |- - -2.4024989684355553e+01 -3.8521513996632500e+01 -1.0851224048428129e+01 1.2562604359180053e+01 1.3677283516797356e+01 4.3206731051245653e+00 +init_energy: 4638.6541482649545 +init_stress: ! |2- + 1.8359565872923367e+03 1.1685750963854580e+03 2.2772768476286187e+03 9.0129794950892881e+02 4.5431504423505157e+02 5.8087298633263757e+01 init_forces: ! |2 - 1 -1.7791337913398690e+00 -5.2745532425491986e+00 -1.9333096530222391e+00 - 2 7.8999913149794128e-293 6.5010830500033665e-293 -9.2980646648301405e-293 + 1 -2.6166538657523114e+02 -2.1914087860149658e+02 3.0394540432772982e+02 + 2 2.5988625278389128e+02 2.1386632535894739e+02 -3.0587871398075208e+02 3 2.4197086198752562e+01 -1.2911571268065043e+01 -1.2153319969868038e+01 4 -3.5002110421521651e+00 9.8124800657318079e-01 -2.4834895420880554e+00 5 -8.7934593181833831e-01 -1.3513167937313169e+00 4.4900533574430685e+00 - 6 -1.9224405194016612e+01 1.9525383982308810e+01 1.1251608936919853e+01 - 7 2.6580140740726381e-131 -1.3633763941647238e-130 -6.8018769495047054e-130 - 8 1.4462104594211977e+00 -1.2568711136582216e+00 7.3991622652588918e-01 - 9 1.2099652614352605e-300 1.3032068217192395e-300 5.3545155818429412e-300 + 6 -3.1076039081690663e+01 8.0316024755627467e+01 3.1453576435533836e+02 + 7 1.1851633887674051e+01 -6.0790640773318657e+01 -3.0328415541841849e+02 + 8 -9.7268051920198786e+01 -1.0757818812527627e+02 -4.3610490313202450e+02 + 9 9.8714262379619981e+01 1.0632131701161805e+02 4.3684481935855041e+02 10 1.8282673669124623e+01 -6.7893037436650294e-01 1.0475143579619905e+01 11 -9.5181855408160265e-01 -2.3577388099405021e+00 -3.8685744266264179e+00 12 -1.1761121482537199e+01 -1.1840691118605761e+01 8.9587696830512531e+00 13 3.9348879648968196e+00 -1.5566010373601853e+00 -7.3956496855403397e-02 14 -1.5580348688551586e+00 3.1703943744370217e-01 -4.0404862787928506e+00 15 -1.0483110905921594e-01 4.0280962447539723e+00 1.4354708657826634e+00 - 16 -8.1019563183350432e+00 1.2376506087197068e+01 -1.2797826282089627e+01 - 17 -9.6845722000297944e-125 6.7536031200741501e-125 2.5693469616608658e-124 - 18 5.0042083741224387e-291 3.2014176819490257e-291 6.0624670892900674e-291 - 19 -5.0042167517970120e-291 -3.2014265949545701e-291 -6.0624614384187022e-291 - 20 8.3776745733654894e-297 8.9130055442585484e-297 -5.6508713648842736e-297 - 21 5.0373663727594610e-296 1.1676684296048456e-296 8.1823232295641435e-296 - 22 -5.1857245273845906e-296 -1.2567112623130275e-296 -8.1358238807042024e-296 - 23 1.4835815462512912e-297 8.9042832708182009e-298 -4.6499348859940937e-298 - 24 6.5124799547612842e-295 -1.0579059065054233e-295 5.4786730014873485e-295 - 25 -6.5176382072810523e-295 1.0492453069148130e-295 -5.4792561056911984e-295 - 26 5.1582525197680877e-298 8.6605995906103569e-298 5.8310420384964103e-299 - 27 -1.5677247388593395e-295 -1.8232011058192963e-295 -3.8038051984576450e-296 - 28 -3.2483754529644398e-299 1.3960035208884715e-299 -2.1978823514938368e-299 - 29 1.5680495764046360e-295 1.8230615054672073e-295 3.8060030808091389e-296 -run_energy: 194.9688901668597 -run_stress: ! |- - -2.4084235648269384e+01 -3.8596877573973650e+01 -1.0971337511117875e+01 1.2627485208541385e+01 1.3589007837800324e+01 4.4518443361436777e+00 + 16 9.5774980977037984e+01 -6.0062791522626100e+01 -2.8838655412045694e+02 + 17 -1.0387693729537303e+02 7.2439297609823171e+01 2.7558872783836733e+02 + 18 -1.7290589161548496e+01 -1.3179016873564919e+02 5.1586854877010114e+02 + 19 -2.6734331696703003e+02 -1.7103176128697325e+02 -3.2387856688053216e+02 + 20 2.8463390612857853e+02 3.0282193002262244e+02 -1.9198998188956895e+02 + 21 -1.3595471277589198e+02 -1.6879175531311859e+02 5.0125731248385966e+02 + 22 -2.4366036541914886e+02 -5.9048783595141884e+01 -3.8227595956741493e+02 + 23 3.7961507819504084e+02 2.2784053890826047e+02 -1.1898135291644472e+02 + 24 1.1246873070738241e+02 -4.4920523111996721e+02 2.6503426336875481e+02 + 25 -3.4676635177604459e+02 5.5824357785083230e+01 -2.9151996318153743e+02 + 26 2.3429762106866218e+02 3.9338087333488397e+02 2.6485699812782624e+01 + 27 6.4413473322621542e+01 -4.9624245043025996e+02 1.7125457908457409e+02 + 28 -3.5866433728099020e+02 1.5413756350253817e+02 -2.4267577083822729e+02 + 29 2.9425086395836865e+02 3.4210488692772179e+02 7.1421191753653204e+01 +run_energy: 4618.705952125554 +run_stress: ! |2- + 1.8397902589595653e+03 1.1724487863122602e+03 2.2782759319716897e+03 9.0366417527896033e+02 4.5574598799336053e+02 5.9672689485998390e+01 run_forces: ! |2 - 1 -1.7800915383536471e+00 -5.2662174638478936e+00 -1.9311810441446928e+00 - 2 9.1200716389742962e-293 7.5205784896271243e-293 -1.0695855329374170e-292 - 3 2.4188774318819682e+01 -1.2910730800434983e+01 -1.2139174094227805e+01 - 4 -3.4905807721708837e+00 9.7423802985974728e-01 -2.4827066691937869e+00 - 5 -8.7826414385513407e-01 -1.3507945719900971e+00 4.4847167409249762e+00 - 6 -1.9198711248640532e+01 1.9501343007070176e+01 1.1259539605043198e+01 - 7 4.0781500460380220e-131 -2.0934766207882755e-130 -1.0411772151605081e-129 - 8 1.4035232720380466e+00 -1.2181526258990241e+00 7.2552718656771575e-01 - 9 1.4877356608185432e-300 1.5947265521745610e-300 6.5759628249586203e-300 - 10 1.8340705485218969e+01 -7.9602516938863732e-01 1.0533434146468263e+01 - 11 -9.4713695434855716e-01 -2.3455928036230933e+00 -3.8477133980837270e+00 - 12 -1.1753841378581289e+01 -1.1839528950721563e+01 8.9356024501072664e+00 - 13 3.9289793641831325e+00 -1.5460483921060724e+00 -7.3078087497547045e-02 - 14 -1.5515717239320088e+00 3.1019421574866657e-01 -4.0233193667488729e+00 - 15 -1.1312732638809736e-01 4.0290637402465492e+00 1.4439547691915919e+00 - 16 -8.1486573539896803e+00 1.2458251785086224e+01 -1.2885602238406578e+01 - 17 -8.5522515805489358e-125 5.9749160301406998e-125 2.2702237597406565e-124 - 18 2.5382954259673697e-291 1.6282298856292719e-291 3.0672317979786876e-291 - 19 -2.5383561239391082e-291 -1.6282944740463789e-291 -3.0671910793881731e-291 - 20 6.0697971738423079e-296 6.4588417107197222e-296 -4.0718590514496707e-296 - 21 3.1636825215784415e-296 7.4502521705718285e-297 5.0914419661316058e-296 - 22 -3.2413538119513539e-296 -7.9143971383319095e-297 -5.0672219270657353e-296 - 23 7.7671290372912634e-298 4.6414496776008138e-298 -2.4220039065870281e-298 - 24 1.1528889554480086e-295 -1.8584672369333140e-296 9.7061626349018667e-296 - 25 -1.1544439355951613e-295 1.8323577266329387e-296 -9.7079719071127095e-296 - 26 1.5549801471527681e-298 2.6109510300375245e-298 1.8092722108425850e-299 - 27 -1.0502291554946705e-295 -1.2226612584790533e-295 -2.5738911540368265e-296 - 28 -1.8342692926757559e-299 7.8715078988712594e-300 -1.2385711775450889e-299 - 29 1.0504125824239381e-295 1.2225825434000646e-295 2.5751297252143716e-296 + 1 -2.6123247146110606e+02 -2.1919307263372883e+02 3.0237555508171170e+02 + 2 2.5946481985769248e+02 2.1395800468042034e+02 -3.0429922592566089e+02 + 3 2.4104808395110172e+01 -1.2865854073142392e+01 -1.2083882913387207e+01 + 4 -3.4905809559903060e+00 9.7423804418107429e-01 -2.4827069981835161e+00 + 5 -8.7826407777385485e-01 -1.3507948021059526e+00 4.4847171151687837e+00 + 6 -3.1019740486745086e+01 8.0315470917380424e+01 3.1385270827879697e+02 + 7 1.1855512952124167e+01 -6.0859047439602143e+01 -3.0267942216207678e+02 + 8 -9.7139239668224732e+01 -1.0689115264867354e+02 -4.3492337910287688e+02 + 9 9.8566534070284817e+01 1.0565669621976006e+02 4.3567718006870649e+02 + 10 1.8332862345492853e+01 -7.7546447474524260e-01 1.0479498854248916e+01 + 11 -9.4713700870724160e-01 -2.3455930111707550e+00 -3.8477135785159731e+00 + 12 -1.1753839309353248e+01 -1.1839526860590677e+01 8.9356008317611710e+00 + 13 3.9289793641852362e+00 -1.5460483921084245e+00 -7.3078087496756511e-02 + 14 -1.5515717239340792e+00 3.1019421574772799e-01 -4.0233193667504690e+00 + 15 -1.1312732638930625e-01 4.0290637402491614e+00 1.4439547691937924e+00 + 16 9.5584985328403420e+01 -6.0034377008082046e+01 -2.8814471939578698e+02 + 17 -1.0371253029506924e+02 7.2457263526211193e+01 2.7530823253114755e+02 + 18 -1.6734173006461219e+01 -1.3081888486925550e+02 5.1373496074962804e+02 + 19 -2.6689091522155491e+02 -1.7109178558868115e+02 -3.2299073527643651e+02 + 20 2.8362508822801612e+02 3.0191067045793665e+02 -1.9074422547319156e+02 + 21 -1.3584009311603779e+02 -1.6741847021957338e+02 4.9993505971275158e+02 + 22 -2.4342958636297089e+02 -5.9309435913166546e+01 -3.8123078015208006e+02 + 23 3.7926967947900869e+02 2.2672790613273992e+02 -1.1870427956067151e+02 + 24 1.1263526323552287e+02 -4.4826736307529882e+02 2.6440276469069875e+02 + 25 -3.4626849198042515e+02 5.5368312528579615e+01 -2.9134479497708327e+02 + 26 2.3363322874490228e+02 3.9289905054671920e+02 2.6942030286384533e+01 + 27 6.4905554146281361e+01 -4.9580198077236491e+02 1.7016719858461872e+02 + 28 -3.5803172302507875e+02 1.5409360889763499e+02 -2.4188045098816568e+02 + 29 2.9312616887879739e+02 3.4170837187472995e+02 7.1713252403546960e+01 ... 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 ... diff --git a/unittest/force-styles/tests/manybody-pair-pod.yaml b/unittest/force-styles/tests/manybody-pair-pod.yaml new file mode 100644 index 0000000000..a0820d97dd --- /dev/null +++ b/unittest/force-styles/tests/manybody-pair-pod.yaml @@ -0,0 +1,156 @@ +--- +lammps_version: 3 Nov 2022 +date_generated: Thu Dec 1 23:18:00 2022 +epsilon: 5e-11 +skip_tests: +prerequisites: ! | + pair pod +pre_commands: ! | + variable newton_pair delete + variable newton_pair index on +post_commands: ! "" +input_file: in.manybody +pair_style: pod +pair_coeff: ! | + * * Ta_param.pod Ta_coeff.pod Ta Ta Ta Ta Ta Ta Ta Ta +extract: ! "" +natoms: 64 +init_vdwl: -528.2910264879091 +init_coul: 0 +init_stress: ! |2- + 8.3402602596264614e+00 2.0643446850903056e+00 1.5678421067854520e+01 -2.9333918215385154e+01 1.1525924506418683e+02 -1.5484432052782759e+00 +init_forces: ! |2 + 1 -2.3392393040434762e+00 6.6115449678096514e+00 6.3527759473517156e+00 + 2 -6.2200179688845711e+00 -2.3262609632188291e+00 -5.8808304295691327e+00 + 3 5.9926007198108278e-01 1.1403349257840218e+00 -9.4165026520447437e-01 + 4 -4.3700401366848958e+00 6.7048502738679057e+00 3.5634847031773593e+00 + 5 -1.7470266510830950e+00 -2.2743594271203493e+00 2.4630591043738376e-01 + 6 2.7662435046081360e+00 7.4528086029205447e+00 1.6339061500227601e+00 + 7 -2.9166253939568025e+00 -2.4536749402602376e+00 2.3182705383557933e+00 + 8 2.8946709981057628e-01 1.5909888405138495e+00 -2.1105547647724223e+00 + 9 -1.5405949554576286e+00 -6.1324586921740476e+00 -7.0213669939760557e+00 + 10 -1.5334402378809839e+00 -4.4115934928250260e+00 -6.0498836493599777e+00 + 11 8.1115391088463884e+00 -8.3763095375040244e+00 5.2840196513645203e+00 + 12 -1.4493449045465287e+01 -9.0119905221230852e+00 -9.1884252425735404e+00 + 13 -3.1435238028908983e+00 1.5461007451567864e+01 -1.0076469584259284e+00 + 14 -5.4205532111806916e+00 9.9326708251595193e+00 2.2979562969461060e+00 + 15 -1.0589399394041576e+01 9.6706823152119537e+00 -8.9048432574359762e+00 + 16 4.5379777179391692e+00 2.6753273724858251e+00 1.6728868669531220e+01 + 17 2.4231102065317467e+00 6.6764545944727640e+00 -1.0929016615111141e+01 + 18 1.9001246269761145e+00 -3.6109316050143847e-01 9.5729789832831536e+00 + 19 -4.4582683048316527e+00 -3.8337351622472888e+00 -2.3885319247539311e-01 + 20 -1.7234496227840264e+01 3.3880881715108195e+00 1.2553324705664071e+00 + 21 3.8327346102873112e+00 1.3689088998574568e+00 -6.7734781208496067e+00 + 22 -1.7001862101985854e+01 7.9556220149572905e+00 -1.1396344475647043e+01 + 23 2.9704272880493647e+00 5.6280520280509627e+00 4.4599373849291188e+00 + 24 5.1191743796738054e+00 5.2439635854557300e+00 6.9669903792262637e+00 + 25 3.1385438320794972e+00 1.5005115524258683e-01 3.5282799800496791e+00 + 26 -1.4971212625777275e+00 -1.5993407658221612e+00 4.4215766627169029e-02 + 27 5.8677239676274295e+00 -1.3937781993546274e+00 3.0680498990918013e+00 + 28 1.6650007215138052e+00 1.4050177349920281e+00 1.1885511993248887e+01 + 29 -8.9875167123509261e+00 8.8933864134358698e-01 -3.6241931326798387e+00 + 30 -3.4012728709189108e+00 5.3067868144126020e+00 -1.7059788210178979e+00 + 31 -1.6808177204782935e+00 3.6001199301353184e+00 -1.8965796755169291e+00 + 32 -8.4589813130988354e+00 1.4471022875060062e+00 -1.9000039702897311e+00 + 33 1.2004088752851128e+01 -7.6040571970971325e+00 8.9711523713098167e+00 + 34 -5.7853936051884869e-01 -5.5952766750718474e-01 1.8048877814027433e+00 + 35 1.7041340304224681e+00 -2.1620245429916412e+00 7.3832310666592491e+00 + 36 1.0759330410207228e+00 -5.2129028438242146e+00 -1.6618705041668638e+00 + 37 -4.3766428392731020e+00 6.0078246009400225e+00 -6.3940625140062162e+00 + 38 5.0631928812981353e-01 -1.9854379582110893e+00 -8.7394124979891918e-01 + 39 3.9645469430932123e+00 -4.0889983203207603e+00 -9.4674125279283405e+00 + 40 1.1408365247060711e+01 -4.9051255563902521e+00 -3.5203986381487034e+00 + 41 8.9930170478826255e-01 -2.9723940028022749e-01 -2.7822061438575032e+00 + 42 -8.2546434609765491e+00 -5.0786202506116558e+00 -3.1610980747309330e+00 + 43 1.7453841082299018e-01 -1.4317767182746747e+01 9.5388782303919595e-01 + 44 9.2833287607601704e+00 -1.0681022246160646e+01 6.1028355724777370e+00 + 45 -6.8974324969212919e-01 6.3655097649365064e+00 -8.9950272187335738e+00 + 46 -1.9136248882346150e+00 -4.0755806589261594e+00 1.1571248503615134e+01 + 47 6.3780001004629598e+00 5.1350413335416709e+00 2.8185819965629695e+00 + 48 2.3349283531253415e+00 2.1970268162712099e+00 1.6856734874305396e-01 + 49 -2.7493238702004135e+00 -1.1923367561779225e+01 -7.9142306720304925e+00 + 50 2.1137961711743793e+00 7.2552695007878203e+00 -3.0372809596181289e+00 + 51 -4.0124421354950526e+00 8.4837473611119112e+00 8.7141826644925846e+00 + 52 1.1814661298567525e+01 -1.2353995700415600e+01 1.3991622034448220e+01 + 53 5.1071497748726138e+00 7.9192961995549869e+00 3.0451616568663176e+00 + 54 5.7344562859078723e+00 -5.6931437492303356e+00 -4.8826542194642482e+00 + 55 7.3943947205193865e+00 -8.5087783592690300e+00 -9.0269109278555035e+00 + 56 -1.2364980298872756e+00 2.8110998820116406e+00 -5.9239020363740682e+00 + 57 6.7325527399301921e-01 -3.6874160252952128e+00 2.8091898013156175e-02 + 58 7.1394993630780750e+00 -4.6917597169219567e+00 3.7096580604620573e+00 + 59 7.1384731244518367e+00 4.5429051835770045e+00 -3.7696484765066689e+00 + 60 -2.7523129793377530e+00 -1.3097943737066757e+01 -7.8971319483098377e+00 + 61 -1.0075765403185517e+00 3.0273548833080430e+00 7.4229195890612620e-01 + 62 -7.4584126192112432e+00 6.1810894357594544e+00 -4.7073228253497668e+00 + 63 5.5714938235965326e+00 -7.2641750905285418e+00 -1.3520886322174430e-01 + 64 6.4220149841744343e+00 6.1375922336668411e+00 1.4507671903798933e+01 +run_vdwl: -528.4347251401716 +run_coul: 0 +run_stress: ! |2- + 7.7971581234640315e+00 1.8180180509574915e+00 1.5567974498446516e+01 -2.9195299100177184e+01 1.1463660454201184e+02 -5.2901271066816291e-01 +run_forces: ! |2 + 1 -2.3557887177307792e+00 6.5793731923015173e+00 6.3446661307546002e+00 + 2 -6.2367472254464031e+00 -2.3761037176199591e+00 -5.8990027484700320e+00 + 3 5.3238059272327787e-01 1.1536607145682118e+00 -8.5829897588453263e-01 + 4 -4.3203333339340588e+00 6.6864673083581083e+00 3.4793826832962589e+00 + 5 -1.7840492185151171e+00 -2.3155960934908837e+00 2.7377581222153680e-01 + 6 2.8816106613622541e+00 7.4501692252795770e+00 1.7092006941013815e+00 + 7 -2.8584187538461769e+00 -2.3893423666220168e+00 2.2712697534638027e+00 + 8 2.6439659507712282e-01 1.5681078897310405e+00 -2.1056485467168455e+00 + 9 -1.6108220540466460e+00 -6.1741812147002300e+00 -7.0538474688530526e+00 + 10 -1.5537395777250562e+00 -4.3955446040745887e+00 -5.9667736677685053e+00 + 11 8.0104517885225182e+00 -8.3131733252237368e+00 5.2213147662230943e+00 + 12 -1.4435736887913940e+01 -8.9362068248018307e+00 -9.1408788688901357e+00 + 13 -2.9914115492926050e+00 1.5429230434822207e+01 -9.0984604918070788e-01 + 14 -5.4746584593313159e+00 9.9027748295330564e+00 2.2366269028203853e+00 + 15 -1.0550844601713422e+01 9.6107656645359096e+00 -8.8185763639657502e+00 + 16 4.5023825249444860e+00 2.6965293303384019e+00 1.6638570998809584e+01 + 17 2.3773309428087694e+00 6.6422561690528514e+00 -1.0829016891781128e+01 + 18 1.8114374434267531e+00 -3.0183319744394677e-01 9.6008681727027714e+00 + 19 -4.5474501019651816e+00 -3.8744552075410721e+00 -2.7559291041454143e-01 + 20 -1.7142681562663874e+01 3.3426003047767030e+00 1.1954254910500022e+00 + 21 3.8576154875972057e+00 1.2952295974238952e+00 -6.8418604194700734e+00 + 22 -1.6932518707227068e+01 7.9121058022000454e+00 -1.1375062696143653e+01 + 23 2.9996562341895361e+00 5.6579801576633635e+00 4.4728006000546641e+00 + 24 5.1680026224182871e+00 5.1810573601411045e+00 6.9298319426021155e+00 + 25 3.1353884361512914e+00 1.6058771944664529e-01 3.4758213715479744e+00 + 26 -1.5161565674716488e+00 -1.5510416049393845e+00 5.1443392259165305e-02 + 27 5.8829868840537012e+00 -1.4576271120974353e+00 3.0939941761392094e+00 + 28 1.6230499697020511e+00 1.4636285126942963e+00 1.1875062811913887e+01 + 29 -9.0044083076844927e+00 8.9978643282364112e-01 -3.6333182759219680e+00 + 30 -3.3592923882740333e+00 5.2571864710026954e+00 -1.7077396196968402e+00 + 31 -1.6500480953824879e+00 3.5931111402419305e+00 -1.8893711494790042e+00 + 32 -8.3873358693088083e+00 1.4007390010793448e+00 -1.9140680409249233e+00 + 33 1.1929925271781036e+01 -7.5607293607213562e+00 8.9276374053193166e+00 + 34 -5.8208023141639853e-01 -5.5745007964822024e-01 1.8277744619456637e+00 + 35 1.7136741165547187e+00 -2.1140334235225700e+00 7.3627368355304368e+00 + 36 9.8461575627457365e-01 -5.1895947221609999e+00 -1.7416681629788844e+00 + 37 -4.3479597602556987e+00 5.9771199348457786e+00 -6.4035952128921325e+00 + 38 5.4022686330729042e-01 -1.9715997267295688e+00 -8.5655067815022723e-01 + 39 3.9223699424296088e+00 -4.0527508147694391e+00 -9.4209981476048874e+00 + 40 1.1452927978439993e+01 -4.8883937399550499e+00 -3.5415966186040104e+00 + 41 9.6744931407782142e-01 -2.1966543538862224e-01 -2.7321296820305050e+00 + 42 -8.2423780480934816e+00 -5.1198905741883944e+00 -3.2132369293703431e+00 + 43 1.3449232112837139e-01 -1.4266031489439955e+01 9.0529636113665890e-01 + 44 9.2864716878942914e+00 -1.0653224674860530e+01 6.0756644746289155e+00 + 45 -7.3279419010510516e-01 6.2791577709783972e+00 -8.9108524114379080e+00 + 46 -1.9039679778788625e+00 -4.0528901631980760e+00 1.1630733460046352e+01 + 47 6.3763337760997540e+00 5.1233125844104510e+00 2.8138206914970656e+00 + 48 2.3380859800951628e+00 2.2326450966381390e+00 1.5287384487626418e-01 + 49 -2.8014223230382376e+00 -1.2044581352367127e+01 -8.0347575819620474e+00 + 50 2.1422145518477187e+00 7.2424826745901107e+00 -3.0637741546937911e+00 + 51 -4.1001979259164552e+00 8.5374368127020315e+00 8.7144930213835430e+00 + 52 1.1806523391252540e+01 -1.2284601329073553e+01 1.3944720496276224e+01 + 53 5.1475653317387939e+00 8.0227245379881804e+00 3.2309313222296896e+00 + 54 5.7087433874913218e+00 -5.6601583438330563e+00 -4.8237069484155661e+00 + 55 7.3380406496835295e+00 -8.4939091917007623e+00 -8.9244600192476753e+00 + 56 -1.2296439276523572e+00 2.7286867585656513e+00 -5.9003523038759793e+00 + 57 6.7476852384192298e-01 -3.7254641308262482e+00 2.8703807089098310e-02 + 58 7.1320373971199791e+00 -4.6322478918816286e+00 3.6412286305653043e+00 + 59 7.1937029046281671e+00 4.5742558433451368e+00 -3.7956679883677404e+00 + 60 -2.8288653495291820e+00 -1.3157182815231137e+01 -8.0095169657552905e+00 + 61 -9.9276745329887783e-01 3.0408835454693719e+00 7.7871977254688995e-01 + 62 -7.4381007616019534e+00 6.1448378054475778e+00 -4.6683183548425067e+00 + 63 5.5682593755810563e+00 -7.3119820285913608e+00 -2.0100166481798887e-01 + 64 6.5075012240147911e+00 6.2545959336473818e+00 1.4555696233577285e+01 +... diff --git a/unittest/force-styles/tests/mol-pair-coul_slater_long.yaml b/unittest/force-styles/tests/mol-pair-coul_slater_long.yaml index 52efdaa52d..ba11503a2c 100644 --- a/unittest/force-styles/tests/mol-pair-coul_slater_long.yaml +++ b/unittest/force-styles/tests/mol-pair-coul_slater_long.yaml @@ -6,6 +6,7 @@ skip_tests: prerequisites: ! | atom full pair coul/slater/long + kspace ewald pre_commands: ! "" post_commands: ! | pair_modify mix arithmetic diff --git a/unittest/force-styles/tests/mol-pair-nm_cut_coul_cut.yaml b/unittest/force-styles/tests/mol-pair-nm_cut_coul_cut.yaml index e10d630408..dc09f6242b 100644 --- a/unittest/force-styles/tests/mol-pair-nm_cut_coul_cut.yaml +++ b/unittest/force-styles/tests/mol-pair-nm_cut_coul_cut.yaml @@ -1,7 +1,7 @@ --- -lammps_version: 17 Feb 2022 -date_generated: Fri Mar 18 22:17:35 2022 -epsilon: 5e-13 +lammps_version: 3 Nov 2022 +date_generated: Wed Nov 23 12:21:08 2022 +epsilon: 2e-12 skip_tests: prerequisites: ! | atom full @@ -33,72 +33,72 @@ extract: ! | nn 2 mm 2 natoms: 29 -init_vdwl: 184.28678589160327 -init_coul: -135.3222017722983 +init_vdwl: 184.287044185624 +init_coul: -137.87932620011787 init_stress: ! |2- - 5.1099535412443879e+02 4.9267015856417487e+02 1.0972826650625757e+03 -1.9179119371088936e+02 -3.5985836516943652e+00 1.6890666491875683e+02 + 5.0652399415102809e+02 4.9736621002026737e+02 1.0945023745733126e+03 -1.9301832865224381e+02 1.8762224642096914e-01 1.7162238049862481e+02 init_forces: ! |2 - 1 -3.3237622364758597e+00 6.7713954997753760e+01 8.3067188829067177e+01 - 2 3.9621008700560012e+01 3.0171229889604540e+01 -4.8145332639882334e+01 - 3 -3.5364644744971940e+01 -9.6539501255026011e+01 -3.5029548782863188e+01 - 4 -5.3015461109817663e-01 1.6289587757514515e-01 -7.2423374326431356e-01 - 5 -5.9482314827521177e-01 3.6012564229132904e-01 7.9763541784878933e-01 - 6 -2.0517469128198312e+02 2.3641073678086124e+02 2.8403110395134235e+02 - 7 1.4287738299209584e+01 -8.3042673557006708e+01 -4.2404138177988466e+02 - 8 3.4432579872496632e+01 -2.3062478463316680e+01 1.0196257581358861e+02 - 9 2.1504316475975024e+01 1.5520947058320779e+01 8.8721284584619994e+01 - 10 1.3156277736186865e+02 -1.5256269193303697e+02 -4.7528776206099316e+01 - 11 -1.1549608580120421e+00 7.0751627315313514e-01 -1.2306532477500820e+00 - 12 8.2305373454600836e+00 2.8332067643232048e+00 -1.6285990412442382e+00 - 13 2.2152653863898988e-01 -2.5442239617884921e-01 -1.7821156240885982e-02 - 14 -1.4864243248803288e+00 4.9691633196181018e-01 -6.5591950906426355e-01 - 15 1.9536455977505707e-01 4.6553673584615141e-01 -7.3823010387388632e-01 - 16 1.1408068052592634e+02 -8.3363365075734180e+01 -2.9358101411834207e+02 - 17 -1.1530269288646562e+02 8.4705249217102178e+01 2.9252691476710731e+02 - 18 1.2607896146319246e+00 6.6515350853351460e+00 -9.8941034529134715e+00 - 19 1.6182226631729169e+00 -1.6594283813607693e+00 5.6553541079235838e+00 - 20 -3.4521573063242741e+00 -3.1789176785999720e+00 4.2591620921699045e+00 - 21 -1.5230523428245663e+01 -1.8827777303529409e+01 4.5543598985413915e+01 - 22 -2.5331360436022880e+01 -5.4301878248720961e+00 -3.5349975516643234e+01 - 23 4.0112972843495513e+01 2.2949867135700025e+01 -9.6970781334064569e+00 + 1 -3.5396501309981954e+00 6.6944364611585584e+01 8.3059219120660856e+01 + 2 3.9621008700560019e+01 3.0171229889604543e+01 -4.8145332639882334e+01 + 3 -3.5309288471259912e+01 -9.6592073986045776e+01 -3.5059191984527324e+01 + 4 -5.3015461109817674e-01 1.6289587757514493e-01 -7.2423374326431356e-01 + 5 -5.9482314827521177e-01 3.6012564229132926e-01 7.9763541784878955e-01 + 6 -2.0517469128198312e+02 2.3641073678086121e+02 2.8403110395134229e+02 + 7 1.4287738299209584e+01 -8.3042673557006694e+01 -4.2404138177988466e+02 + 8 3.4432579872496632e+01 -2.3062478463316697e+01 1.0196257581358860e+02 + 9 2.1504316475975028e+01 1.5520947058320786e+01 8.8721284584619994e+01 + 10 1.3157989652366749e+02 -1.5248002606214345e+02 -4.7534699865938585e+01 + 11 -1.1549608580120423e+00 7.0751627315313514e-01 -1.2306532477500822e+00 + 12 7.2669942071383717e+00 2.0827730884953919e+00 -9.0483043978096866e-01 + 13 2.2152653863898994e-01 -2.5442239617884937e-01 -1.7821156240885788e-02 + 14 -1.4864243248803288e+00 4.9691633196180973e-01 -6.5591950906426388e-01 + 15 1.9536455977505737e-01 4.6553673584615107e-01 -7.3823010387388610e-01 + 16 1.1427944925864990e+02 -8.2676440560459525e+01 -2.9356712075009648e+02 + 17 -1.1530269288646562e+02 8.4705249217102164e+01 2.9252691476710731e+02 + 18 1.2607896146319251e+00 6.6515350853351460e+00 -9.8941034529134697e+00 + 19 1.6182226631729160e+00 -1.6594283813607693e+00 5.6553541079235821e+00 + 20 -3.4521573063242741e+00 -3.1789176785999724e+00 4.2591620921699054e+00 + 21 -1.5285879701957692e+01 -1.8775204572509647e+01 4.5573242187078066e+01 + 22 -2.5331360436022880e+01 -5.4301878248720943e+00 -3.5349975516643234e+01 + 23 4.0112972843495520e+01 2.2949867135700025e+01 -9.6970781334064569e+00 24 6.6473466694181287e+00 -4.2720688813774373e+01 2.5475101119120744e+01 25 -3.3278855135511762e+01 2.8247579501663811e+00 -2.7042493390233950e+01 26 2.5709355480930235e+01 3.9014887914531776e+01 2.6900053403817590e+00 - 27 1.0035511306793698e+01 -4.5249946085110551e+01 1.8136503701331897e+01 - 28 -3.9953070294941519e+01 1.3962092508592026e+01 -2.6231057257176037e+01 - 29 3.0657392434855581e+01 3.0940622604427993e+01 8.6697893689665211e+00 -run_vdwl: 182.40565476045293 -run_coul: -135.3428229317011 + 27 1.0999054445115412e+01 -4.4499512409282737e+01 1.7412735099868630e+01 + 28 -3.9953070294941519e+01 1.3962092508592027e+01 -2.6231057257176040e+01 + 29 3.0657392434855577e+01 3.0940622604427993e+01 8.6697893689665193e+00 +run_vdwl: 182.40627457531505 +run_coul: -137.89878255208336 run_stress: ! |2- - 5.0949331883645084e+02 4.9079274612266465e+02 1.0779924919705209e+03 -1.8978874005409725e+02 -2.3414288930535676e+00 1.6680086396779814e+02 + 5.0502284487804911e+02 4.9549254038893065e+02 1.0752131218453601e+03 -1.9101402318764428e+02 1.4448370451390913e+00 1.6951693900962570e+02 run_forces: ! |2 - 1 -3.0222512967714557e+00 6.7548505252631742e+01 8.2368596588550062e+01 - 2 3.9249247328631569e+01 2.9923489231546629e+01 -4.7570871930892892e+01 - 3 -3.5327226055520775e+01 -9.6102750283993871e+01 -3.4890589040756382e+01 - 4 -5.2696455605069259e-01 1.6213860296922811e-01 -7.2430457126338410e-01 - 5 -5.9400169113171586e-01 3.6136912208033589e-01 7.9530286564994024e-01 - 6 -2.0274433560773628e+02 2.3284786713406370e+02 2.7401951211582013e+02 - 7 1.4053553144930220e+01 -8.1102084254822103e+01 -4.1219124551744085e+02 - 8 3.2718675446198795e+01 -2.1551046804011083e+01 1.0097962112112319e+02 - 9 2.1323856224128093e+01 1.5222193966786529e+01 8.7834851199368813e+01 - 10 1.3130268818222987e+02 -1.5219622702094762e+02 -4.7515342312770102e+01 - 11 -1.1541261444752642e+00 7.1381752451384339e-01 -1.2230561924848902e+00 - 12 8.2264000446385346e+00 2.8299212831552727e+00 -1.6299507774035358e+00 - 13 2.1792987819368359e-01 -2.5267817510362128e-01 -1.9040070778804069e-02 - 14 -1.4863827602148627e+00 4.9691341825375590e-01 -6.4929126993868946e-01 - 15 1.9516446161304488e-01 4.6409461483290748e-01 -7.4066880359248788e-01 - 16 1.1245063534493042e+02 -8.2380964098503739e+01 -2.8939941367324343e+02 - 17 -1.1367888495468203e+02 8.3736413965239862e+01 2.8833591319216583e+02 - 18 1.2131213413750925e+00 6.6087858905244472e+00 -9.8443684782076062e+00 - 19 1.6546892701962139e+00 -1.6335518483372100e+00 5.6675264381026587e+00 - 20 -3.4406155231052553e+00 -3.1608955862760086e+00 4.2021081664244280e+00 - 21 -1.5380842837515630e+01 -1.8832663749099712e+01 4.5639191584555739e+01 - 22 -2.5437261250740086e+01 -5.4851555768258553e+00 -3.5409747254511750e+01 - 23 4.0368809860056317e+01 2.3008461599616822e+01 -9.7324663526701478e+00 - 24 7.1229399666679027e+00 -4.3444645139181588e+01 2.6085435505612736e+01 - 25 -3.4137823679541398e+01 2.8946896673905611e+00 -2.7774080649897098e+01 - 26 2.6093689208699011e+01 3.9671650206452789e+01 2.8124886686652082e+00 - 27 1.0189565500107717e+01 -4.5358416256293751e+01 1.8141445825723800e+01 - 28 -4.0123206182868742e+01 1.4015089779144132e+01 -2.6301107890805710e+01 - 29 3.0672957337757669e+01 3.0995677534193614e+01 8.7335515148952023e+00 + 1 -3.2370828229989943e+00 6.6780774771428867e+01 8.2360566992843957e+01 + 2 3.9248669659652556e+01 2.9923101710814461e+01 -4.7570156486162247e+01 + 3 -3.5272405495891725e+01 -9.6156898011190052e+01 -3.4920858821878639e+01 + 4 -5.2696307806019427e-01 1.6213782144861011e-01 -7.2430297098202856e-01 + 5 -5.9400132072875222e-01 3.6136881819958322e-01 7.9530174833943768e-01 + 6 -2.0274433109253258e+02 2.3284785750828254e+02 2.7401951291433039e+02 + 7 1.4053553193905296e+01 -8.1102076691627317e+01 -4.1219125509985423e+02 + 8 3.2718449282709940e+01 -2.1550864085726676e+01 1.0097970359571399e+02 + 9 2.1323849598698548e+01 1.5222193680732165e+01 8.7834847272654116e+01 + 10 1.3131984144877813e+02 -1.5211385896116542e+02 -4.7521267129265915e+01 + 11 -1.1541259655305498e+00 7.1381836660091746e-01 -1.2230539280652590e+00 + 12 7.2630852175005964e+00 2.0798061880380749e+00 -9.0633631991268937e-01 + 13 2.1792142656044974e-01 -2.5267485273151963e-01 -1.9040900180560982e-02 + 14 -1.4863809886398240e+00 4.9691277039032383e-01 -6.4928587974626595e-01 + 15 1.9516412586808574e-01 4.6408847437290568e-01 -7.4067142611860370e-01 + 16 1.1264998906650452e+02 -8.1693726909197835e+01 -2.8938652282069330e+02 + 17 -1.1367940494205878e+02 8.3736184613376594e+01 2.8833692617302631e+02 + 18 1.2131256191519586e+00 6.6087841118467869e+00 -9.8443636765781175e+00 + 19 1.6546867296048959e+00 -1.6335521580158148e+00 5.6675246971307507e+00 + 20 -3.4406162815803181e+00 -3.1608941993411719e+00 4.2021061175034422e+00 + 21 -1.5436168448451303e+01 -1.8780058922578032e+01 4.5668818732530838e+01 + 22 -2.5437256643599888e+01 -5.4851610900512116e+00 -3.5409746057405300e+01 + 23 4.0368779518163102e+01 2.3008433743607917e+01 -9.7324579117657564e+00 + 24 7.1229403171558960e+00 -4.3444642379685369e+01 2.6085431366299698e+01 + 25 -3.4137823381351410e+01 2.8946870622451546e+00 -2.7774076485443004e+01 + 26 2.6093689507109417e+01 3.9671649820489279e+01 2.8124906008412616e+00 + 27 1.1152133422843132e+01 -4.4609063038241878e+01 1.7417265391517304e+01 + 28 -4.0123145645809892e+01 1.4014953690801475e+01 -2.6300937504650808e+01 + 29 3.0673827973027787e+01 3.0996718146876649e+01 8.7338378159710270e+00 ... diff --git a/unittest/force-styles/tests/mol-pair-nm_cut_coul_long.yaml b/unittest/force-styles/tests/mol-pair-nm_cut_coul_long.yaml index b3c77b862c..8bc69e85f4 100644 --- a/unittest/force-styles/tests/mol-pair-nm_cut_coul_long.yaml +++ b/unittest/force-styles/tests/mol-pair-nm_cut_coul_long.yaml @@ -1,6 +1,6 @@ --- -lammps_version: 17 Feb 2022 -date_generated: Fri Mar 18 22:17:35 2022 +lammps_version: 3 Nov 2022 +date_generated: Wed Nov 23 12:21:08 2022 epsilon: 7.5e-13 skip_tests: prerequisites: ! | @@ -39,72 +39,72 @@ extract: ! | mm 2 cut_coul 0 natoms: 29 -init_vdwl: 184.28678589160327 +init_vdwl: 184.287044185624 init_coul: 225.82181512692495 init_stress: ! |2- - 5.1535561642229106e+02 5.0058662653359033e+02 1.1159625282020661e+03 -1.8397466102442883e+02 -2.0220636765660638e+00 1.7544854550792292e+02 + 5.1535625659153879e+02 5.0058721227699067e+02 1.1159628277106565e+03 -1.8397448571567824e+02 -2.0224936628921029e+00 1.7544839728662993e+02 init_forces: ! |2 - 1 -3.0654526282473653e+00 6.6615864099533127e+01 8.2943973715838268e+01 - 2 3.9068866013811309e+01 2.9455617832505151e+01 -4.7591021495719247e+01 - 3 -3.5280048507313708e+01 -9.6589706921967377e+01 -3.5074530442718626e+01 - 4 -6.6290078829733745e-01 1.7069498108397532e-01 -6.5698974844320646e-01 - 5 -7.3666031116459629e-01 3.1866503947918778e-01 8.0597153193899140e-01 - 6 -2.0569141405030027e+02 2.3627567491105717e+02 2.8443813098936624e+02 - 7 1.4533357696957466e+01 -8.2901362570668283e+01 -4.2411675286042595e+02 - 8 3.4572734326141102e+01 -2.2709011166557751e+01 1.0190201388959704e+02 - 9 2.1302134918689685e+01 1.5382116555420744e+01 8.8486496066808485e+01 - 10 1.3163065394972341e+02 -1.5255187760681488e+02 -4.7566872183542166e+01 - 11 -1.0673114564038046e+00 6.0655281622864732e-01 -1.2545988594461333e+00 - 12 7.7809585200300058e+00 3.1160398793201316e+00 -1.4701791888504216e+00 - 13 5.3014557250212346e-01 -2.5075115207640880e-01 -1.8692015200156273e-01 - 14 -1.3123789187002088e+00 4.0626415990577358e-01 -7.3662740015731798e-01 - 15 3.2883564820812672e-01 4.2874288932750715e-01 -7.8340375997477496e-01 - 16 1.1459556574512777e+02 -8.2820743414973677e+01 -2.9444590351113385e+02 - 17 -1.1537978255115650e+02 8.4825361701504292e+01 2.9365401995966459e+02 - 18 3.5910667886316144e-01 4.7762805533526835e+00 -7.8633657965049659e+00 - 19 1.9899962970618248e+00 -7.2139551998620521e-01 5.5216058955830674e+00 - 20 -2.9130824841870520e+00 -3.9872076040781708e+00 4.1253374345150986e+00 - 21 -1.5875835643064573e+01 -1.5889863208570942e+01 4.7172258432278930e+01 - 22 -2.5015657684773860e+01 -7.0704088600117272e+00 -3.6174324111002065e+01 - 23 4.0477622003880207e+01 2.3373134480751212e+01 -1.0495870801503438e+01 + 1 -3.0654561493791848e+00 6.6615850470254358e+01 8.2943973912197166e+01 + 2 3.9068866013811295e+01 2.9455617832505151e+01 -4.7591021495719239e+01 + 3 -3.5280084914007190e+01 -9.6589672345953218e+01 -3.5074510946988802e+01 + 4 -6.6290078829733778e-01 1.7069498108397516e-01 -6.5698974844320646e-01 + 5 -7.3666031116459629e-01 3.1866503947918762e-01 8.0597153193899174e-01 + 6 -2.0569141405030027e+02 2.3627567491105717e+02 2.8443813098936630e+02 + 7 1.4533357696957466e+01 -8.2901362570668297e+01 -4.2411675286042589e+02 + 8 3.4572734326141102e+01 -2.2709011166557758e+01 1.0190201388959706e+02 + 9 2.1302134918689685e+01 1.5382116555420737e+01 8.8486496066808471e+01 + 10 1.3163065501356638e+02 -1.5255187246967631e+02 -4.7566872551658555e+01 + 11 -1.0673114564038049e+00 6.0655281622864710e-01 -1.2545988594461335e+00 + 12 7.7810444548679740e+00 3.1161068077157283e+00 -1.4702437390869596e+00 + 13 5.3014557250212357e-01 -2.5075115207640869e-01 -1.8692015200156262e-01 + 14 -1.3123789187002091e+00 4.0626415990577341e-01 -7.3662740015731820e-01 + 15 3.2883564820812672e-01 4.2874288932750720e-01 -7.8340375997477496e-01 + 16 1.1459556820241663e+02 -8.2820734922833438e+01 -2.9444590333937629e+02 + 17 -1.1537978255115650e+02 8.4825361701504292e+01 2.9365401995966465e+02 + 18 3.5910667886316239e-01 4.7762805533526844e+00 -7.8633657965049650e+00 + 19 1.9899962970618255e+00 -7.2139551998620499e-01 5.5216058955830682e+00 + 20 -2.9130824841870520e+00 -3.9872076040781712e+00 4.1253374345150977e+00 + 21 -1.5875799236371092e+01 -1.5889897784585100e+01 4.7172238936549107e+01 + 22 -2.5015657684773856e+01 -7.0704088600117272e+00 -3.6174324111002072e+01 + 23 4.0477622003880199e+01 2.3373134480751215e+01 -1.0495870801503438e+01 24 7.4996662349142147e+00 -4.3426856761904077e+01 2.2815324534810056e+01 25 -3.3807147976811798e+01 2.9988027310973613e+00 -2.7577372367283733e+01 - 26 2.5746888892709649e+01 4.0174454060022633e+01 4.1505216253578832e+00 - 27 1.0861995979992932e+01 -4.6328822142297405e+01 1.8883010243779164e+01 - 28 -4.0470174882584459e+01 1.5020795051869365e+01 -2.6766823901697389e+01 - 29 2.9999319404392626e+01 3.1302945187447804e+01 7.8628922608669090e+00 -run_vdwl: 182.40255929507265 -run_coul: 225.80523122237145 + 26 2.5746888892709649e+01 4.0174454060022640e+01 4.1505216253578832e+00 + 27 1.0861910045154971e+01 -4.6328889070692995e+01 1.8883074794015705e+01 + 28 -4.0470174882584466e+01 1.5020795051869364e+01 -2.6766823901697389e+01 + 29 2.9999319404392619e+01 3.1302945187447808e+01 7.8628922608669081e+00 +run_vdwl: 182.4028175410934 +run_coul: 225.8052312234039 run_stress: ! |2- - 5.1384631551491782e+02 4.9870417055031982e+02 1.0966342093912015e+03 -1.8197324336578851e+02 -7.7105078556388151e-01 1.7333789878387816e+02 + 5.1384695555524797e+02 4.9870475622702440e+02 1.0966345088415544e+03 -1.8197306815785140e+02 -7.7148065920433828e-01 1.7333775064278868e+02 run_forces: ! |2 - 1 -2.7683190788522740e+00 6.6449095933852917e+01 8.2247798763054263e+01 - 2 3.8702194737017720e+01 2.9212212087553127e+01 -4.7019606503568262e+01 - 3 -3.5243454712977965e+01 -9.6154953753202179e+01 -3.4936504547233788e+01 - 4 -6.5977694961123645e-01 1.7011044348999105e-01 -6.5636000725760957e-01 - 5 -7.3566520752177100e-01 3.2004552783623724e-01 8.0428279587216267e-01 - 6 -2.0326269571945986e+02 2.3271299846462981e+02 2.7442711029956843e+02 - 7 1.4300022426556877e+01 -8.0959802783401827e+01 -4.1226588339681336e+02 - 8 3.2858865815794836e+01 -2.1199692716643838e+01 1.0091081448967174e+02 - 9 2.1122712553671928e+01 1.5084944366082448e+01 8.7605507483986727e+01 - 10 1.3136998924075732e+02 -1.5218480626807963e+02 -4.7552578947927799e+01 - 11 -1.0661815519248918e+00 6.1243966630893298e-01 -1.2462619432373649e+00 - 12 7.7760226803888877e+00 3.1127903917502313e+00 -1.4744683960464942e+00 - 13 5.2674567614856260e-01 -2.4917750370694214e-01 -1.8723948852408964e-01 - 14 -1.3120520030459297e+00 4.0614121490067551e-01 -7.2914653810616858e-01 - 15 3.2867638556545775e-01 4.2750422420803547e-01 -7.8475645386864112e-01 - 16 1.1296204426736116e+02 -8.1834725178344044e+01 -2.9024712497341085e+02 - 17 -1.1375160210673371e+02 8.3851461683740141e+01 2.8944627577285223e+02 - 18 3.0738271507674780e-01 4.7275452047652715e+00 -7.8225407640491564e+00 - 19 2.0274564843313856e+00 -6.9333851982762851e-01 5.5367198586609998e+00 - 20 -2.8992094355719793e+00 -3.9662518101373307e+00 4.0716447585419049e+00 - 21 -1.6026802334504676e+01 -1.5883942063853187e+01 4.7256123626066532e+01 - 22 -2.5118526633549543e+01 -7.1302229414472507e+00 -3.6226155173751806e+01 - 23 4.0731190500597606e+01 2.3426593800522156e+01 -1.0527512154067734e+01 - 24 7.9759015134187958e+00 -4.4140032709411031e+01 2.3421942671527756e+01 - 25 -3.4663427794559517e+01 3.0656502790867206e+00 -2.8305771158291158e+01 - 26 2.6127821098995337e+01 4.0822834309889892e+01 4.2748874027969199e+00 - 27 1.1011144648995060e+01 -4.6436392031462617e+01 1.8878782007839565e+01 - 28 -4.0634772085359785e+01 1.5071357955251854e+01 -2.6829753884337045e+01 - 29 3.0014314868995513e+01 3.1359612725649200e+01 7.9297744000519685e+00 + 1 -2.7683225482283809e+00 6.6449082401023148e+01 8.2247798981789643e+01 + 2 3.8702194726711895e+01 2.9212212080708927e+01 -4.7019606490893651e+01 + 3 -3.5243491151797656e+01 -9.6154919282511642e+01 -3.4936485094808461e+01 + 4 -6.5977694998018921e-01 1.7011044357157604e-01 -6.5636000759126256e-01 + 5 -7.3566520753163211e-01 3.2004552769599226e-01 8.0428279621249554e-01 + 6 -2.0326269572309553e+02 2.3271299846832454e+02 2.7442711030170454e+02 + 7 1.4300022426979604e+01 -8.0959802783845490e+01 -4.1226588339625141e+02 + 8 3.2858865805990142e+01 -2.1199692705942155e+01 1.0091081449262803e+02 + 9 2.1122712553325698e+01 1.5084944366414280e+01 8.7605507484381420e+01 + 10 1.3136999033009897e+02 -1.5218480112815018e+02 -4.7552579328976627e+01 + 11 -1.0661815520486129e+00 6.1243966623508861e-01 -1.2462619432216921e+00 + 12 7.7761085744513680e+00 3.1128572757481363e+00 -1.4745329169765931e+00 + 13 5.2674567689395169e-01 -2.4917750397088440e-01 -1.8723948847901425e-01 + 14 -1.3120520033096184e+00 4.0614121494992139e-01 -7.2914653857642009e-01 + 15 3.2867638550341521e-01 4.2750422476572436e-01 -7.8475645363096747e-01 + 16 1.1296204673281163e+02 -8.1834716679121783e+01 -2.9024712481379936e+02 + 17 -1.1375160211353307e+02 8.3851461680840046e+01 2.8944627578500337e+02 + 18 3.0738271486215951e-01 4.7275452050710545e+00 -7.8225407641446587e+00 + 19 2.0274564844173879e+00 -6.9333851990195527e-01 5.5367198587099775e+00 + 20 -2.8992094355377156e+00 -3.9662518102337199e+00 4.0716447585813889e+00 + 21 -1.6026765950606343e+01 -1.5883976653313633e+01 4.7256104141803178e+01 + 22 -2.5118526637643978e+01 -7.1302229387234384e+00 -3.6226155173665845e+01 + 23 4.0731190519921540e+01 2.3426593817372833e+01 -1.0527512159329465e+01 + 24 7.9759015134016398e+00 -4.4140032709414839e+01 2.3421942671485997e+01 + 25 -3.4663427794542088e+01 3.0656502790778966e+00 -2.8305771158233721e+01 + 26 2.6127821099004976e+01 4.0822834309892897e+01 4.2748874028091679e+00 + 27 1.1011058821774000e+01 -4.6436458847462333e+01 1.8878846579362040e+01 + 28 -4.0634772090200137e+01 1.5071357967752173e+01 -2.6829753899915300e+01 + 29 3.0014314791906596e+01 3.1359612633147766e+01 7.9297743740230970e+00 ... diff --git a/unittest/force-styles/tests/mol-pair-nm_cut_coul_table.yaml b/unittest/force-styles/tests/mol-pair-nm_cut_coul_table.yaml index f53a664d2a..c6c13ec92a 100644 --- a/unittest/force-styles/tests/mol-pair-nm_cut_coul_table.yaml +++ b/unittest/force-styles/tests/mol-pair-nm_cut_coul_table.yaml @@ -1,6 +1,6 @@ --- -lammps_version: 17 Feb 2022 -date_generated: Fri Mar 18 22:17:35 2022 +lammps_version: 3 Nov 2022 +date_generated: Wed Nov 23 12:21:08 2022 epsilon: 5e-12 skip_tests: gpu prerequisites: ! | @@ -39,72 +39,72 @@ extract: ! | mm 2 cut_coul 0 natoms: 29 -init_vdwl: 184.28678589160327 -init_coul: 225.82185134782813 +init_vdwl: 184.287044185624 +init_coul: 225.8218513478281 init_stress: ! |2- - 5.1535563668501300e+02 5.0058663228965906e+02 1.1159625416266908e+03 -1.8397465772983549e+02 -2.0220541814186075e+00 1.7544854959858193e+02 + 5.1535627685426095e+02 5.0058721803305957e+02 1.1159628411352805e+03 -1.8397448242108504e+02 -2.0224841677449517e+00 1.7544840137728934e+02 init_forces: ! |2 - 1 -3.0654541322175968e+00 6.6615863677171617e+01 8.2943971924222254e+01 + 1 -3.0654576533494127e+00 6.6615850047892891e+01 8.2943972120581122e+01 2 3.9068865513677615e+01 2.9455617099928201e+01 -4.7591020157569005e+01 - 3 -3.5280048398649157e+01 -9.6589707037291518e+01 -3.5074530567243464e+01 - 4 -6.6290079171346505e-01 1.7069544377339213e-01 -6.5698955820925042e-01 - 5 -7.3666014335594099e-01 3.1866598696678072e-01 8.0597176706748563e-01 - 6 -2.0569141450616158e+02 2.3627567585415383e+02 2.8443812919367736e+02 - 7 1.4533356899344014e+01 -8.2901362616912394e+01 -4.2411675492205256e+02 - 8 3.4572733596567637e+01 -2.2709011431274082e+01 1.0190201593114163e+02 - 9 2.1302136717273982e+01 1.5382115964517633e+01 8.8486497965632879e+01 - 10 1.3163065406656153e+02 -1.5255187717021275e+02 -4.7566872791707098e+01 - 11 -1.0673115707973471e+00 6.0655351752474329e-01 -1.2545987554013556e+00 - 12 7.7809586887870594e+00 3.1160399372388605e+00 -1.4701800924466619e+00 - 13 5.3014565234400191e-01 -2.5075128500262650e-01 -1.8692002168697544e-01 - 14 -1.3123790631110117e+00 4.0626403937555045e-01 -7.3662725812128549e-01 - 15 3.2883559728278194e-01 4.2874259749687393e-01 -7.8340316469885862e-01 - 16 1.1459556694004317e+02 -8.2820744612264363e+01 -2.9444590318663785e+02 - 17 -1.1537978278388316e+02 8.4825361961770099e+01 2.9365401989722858e+02 - 18 3.5910722977056597e-01 4.7762805084795117e+00 -7.8633666628226111e+00 - 19 1.9899942949153411e+00 -7.2139693846497077e-01 5.5216057638120377e+00 - 20 -2.9130806625761494e+00 -3.9872064081602967e+00 4.1253385233400710e+00 - 21 -1.5875836014985955e+01 -1.5889862643744696e+01 4.7172259002528357e+01 - 22 -2.5015660385936844e+01 -7.0704105161901349e+00 -3.6174325746867012e+01 - 23 4.0477625196492205e+01 2.3373135655738206e+01 -1.0495869916757165e+01 + 3 -3.5280084805342639e+01 -9.6589672461277360e+01 -3.5074511071513633e+01 + 4 -6.6290079171346505e-01 1.7069544377339210e-01 -6.5698955820925031e-01 + 5 -7.3666014335594110e-01 3.1866598696678072e-01 8.0597176706748597e-01 + 6 -2.0569141450616158e+02 2.3627567585415389e+02 2.8443812919367736e+02 + 7 1.4533356899344010e+01 -8.2901362616912380e+01 -4.2411675492205251e+02 + 8 3.4572733596567609e+01 -2.2709011431274096e+01 1.0190201593114163e+02 + 9 2.1302136717273982e+01 1.5382115964517647e+01 8.8486497965632879e+01 + 10 1.3163065513040453e+02 -1.5255187203307418e+02 -4.7566873159823480e+01 + 11 -1.0673115707973471e+00 6.0655351752474307e-01 -1.2545987554013558e+00 + 12 7.7810446236250250e+00 3.1161068656344568e+00 -1.4702446426831981e+00 + 13 5.3014565234400202e-01 -2.5075128500262667e-01 -1.8692002168697544e-01 + 14 -1.3123790631110113e+00 4.0626403937555039e-01 -7.3662725812128527e-01 + 15 3.2883559728278206e-01 4.2874259749687393e-01 -7.8340316469885873e-01 + 16 1.1459556939733203e+02 -8.2820736120124138e+01 -2.9444590301488040e+02 + 17 -1.1537978278388316e+02 8.4825361961770113e+01 2.9365401989722858e+02 + 18 3.5910722977056608e-01 4.7762805084795099e+00 -7.8633666628226058e+00 + 19 1.9899942949153395e+00 -7.2139693846497099e-01 5.5216057638120368e+00 + 20 -2.9130806625761498e+00 -3.9872064081602954e+00 4.1253385233400701e+00 + 21 -1.5875799608292471e+01 -1.5889897219758861e+01 4.7172239506798533e+01 + 22 -2.5015660385936840e+01 -7.0704105161901358e+00 -3.6174325746867005e+01 + 23 4.0477625196492198e+01 2.3373135655738203e+01 -1.0495869916757163e+01 24 7.4996665312988062e+00 -4.3426856369883282e+01 2.2815324088130364e+01 25 -3.3807149952465473e+01 2.9988014337987989e+00 -2.7577373212676150e+01 - 26 2.5746891183225689e+01 4.0174455514363842e+01 4.1505232593253609e+00 - 27 1.0861995864629581e+01 -4.6328821976580151e+01 1.8883010049856995e+01 - 28 -4.0470177594126923e+01 1.5020794116966732e+01 -2.6766825117758021e+01 - 29 2.9999322027766638e+01 3.1302945696716428e+01 7.8628937666919105e+00 -run_vdwl: 182.40255928657774 -run_coul: 225.80526621801556 + 26 2.5746891183225689e+01 4.0174455514363835e+01 4.1505232593253609e+00 + 27 1.0861909929791622e+01 -4.6328888904975756e+01 1.8883074600093536e+01 + 28 -4.0470177594126930e+01 1.5020794116966732e+01 -2.6766825117758025e+01 + 29 2.9999322027766638e+01 3.1302945696716428e+01 7.8628937666919114e+00 +run_vdwl: 182.40281753260578 +run_coul: 225.80526621917056 run_stress: ! |2- - 5.1384633450263470e+02 4.9870417152157029e+02 1.0966342229480442e+03 -1.8197323856665997e+02 -7.7104387031605370e-01 1.7333790492919763e+02 + 5.1384697454379841e+02 4.9870475719746798e+02 1.0966345223981718e+03 -1.8197306335846980e+02 -7.7147374345845032e-01 1.7333775678806884e+02 run_forces: ! |2 - 1 -2.7683205204507280e+00 6.6449095490165703e+01 8.2247797711895885e+01 - 2 3.8702193821877493e+01 2.9212211419425969e+01 -4.7019604804325617e+01 - 3 -3.5243454585514591e+01 -9.6154953863738911e+01 -3.4936504643788560e+01 - 4 -6.5977687131041252e-01 1.7011085278366439e-01 -6.5635985341126124e-01 - 5 -7.3566505234358270e-01 3.2004653103552905e-01 8.0428307532511589e-01 - 6 -2.0326269614835340e+02 2.3271299913843555e+02 2.7442710822013873e+02 - 7 1.4300021996054623e+01 -8.0959802494991251e+01 -4.1226588541677728e+02 - 8 3.2858865265765651e+01 -2.1199693568720125e+01 1.0091081733429107e+02 - 9 2.1122714604067934e+01 1.5084943250328770e+01 8.7605509332947179e+01 - 10 1.3136998941143941e+02 -1.5218480590048722e+02 -4.7552579577409830e+01 - 11 -1.0661815608329375e+00 6.1244026211185132e-01 -1.2462619124968015e+00 - 12 7.7760233760077231e+00 3.1127902634122728e+00 -1.4744694804987457e+00 - 13 5.2674586924271427e-01 -2.4917758586878880e-01 -1.8723934835850795e-01 - 14 -1.3120523259791150e+00 4.0614108203397964e-01 -7.2914636677516875e-01 - 15 3.2867610981988737e-01 4.2750390948272482e-01 -7.8475586802253572e-01 - 16 1.1296204447867072e+02 -8.1834725270478103e+01 -2.9024712501702589e+02 - 17 -1.1375160235079549e+02 8.3851462518713276e+01 2.8944627514695969e+02 - 18 3.0738345014064944e-01 4.7275451584201162e+00 -7.8225421226147951e+00 - 19 2.0274544872239728e+00 -6.9334025263478072e-01 5.5367196067976767e+00 - 20 -2.8992075327228490e+00 -3.9662506277601803e+00 4.0716458277265861e+00 - 21 -1.6026802838192324e+01 -1.5883941405520059e+01 4.7256124362739875e+01 - 22 -2.5118529350290316e+01 -7.1302246487029537e+00 -3.6226156710291576e+01 - 23 4.0731193744183564e+01 2.3426594982025247e+01 -1.0527511305357223e+01 - 24 7.9759015601633747e+00 -4.4140032390736621e+01 2.3421941942737131e+01 - 25 -3.4663429593566200e+01 3.0656489475373521e+00 -2.8305771699474640e+01 - 26 2.6127823323620827e+01 4.0822835743219649e+01 4.2748889953069069e+00 - 27 1.1011144344413010e+01 -4.6436391929690870e+01 1.8878781879279799e+01 - 28 -4.0634774700271556e+01 1.5071357061734957e+01 -2.6829755168650092e+01 - 29 3.0014317587931910e+01 3.1359613328463354e+01 7.9297758591329561e+00 + 1 -2.7683239898506331e+00 6.6449081957468636e+01 8.2247797930661747e+01 + 2 3.8702193811582511e+01 2.9212211412571293e+01 -4.7019604791653393e+01 + 3 -3.5243491024333295e+01 -9.6154919393054271e+01 -3.4936485191359907e+01 + 4 -6.5977687168190458e-01 1.7011085284653316e-01 -6.5635985375283568e-01 + 5 -7.3566505234995705e-01 3.2004653083828444e-01 8.0428307567331736e-01 + 6 -2.0326269615165228e+02 2.3271299914190627e+02 2.7442710822226110e+02 + 7 1.4300021996095619e+01 -8.0959802495291143e+01 -4.1226588541635073e+02 + 8 3.2858865255384757e+01 -2.1199693557841638e+01 1.0091081733750200e+02 + 9 2.1122714603970017e+01 1.5084943250468159e+01 8.7605509333063679e+01 + 10 1.3136999050087155e+02 -1.5218480076049869e+02 -4.7552579958511345e+01 + 11 -1.0661815608470382e+00 6.1244026210440039e-01 -1.2462619124717631e+00 + 12 7.7761092701979475e+00 3.1128571473156490e+00 -1.4745340012267927e+00 + 13 5.2674586999352180e-01 -2.4917758618970665e-01 -1.8723934833596209e-01 + 14 -1.3120523262243908e+00 4.0614108204631622e-01 -7.2914636724809301e-01 + 15 3.2867610975969386e-01 4.2750391001876636e-01 -7.8475586778582129e-01 + 16 1.1296204694413225e+02 -8.1834716771070589e+01 -2.9024712485782527e+02 + 17 -1.1375160235744099e+02 8.3851462515852432e+01 2.8944627515943881e+02 + 18 3.0738344999939127e-01 4.7275451584991384e+00 -7.8225421226024254e+00 + 19 2.0274544872772347e+00 -6.9334025264774690e-01 5.5367196067971562e+00 + 20 -2.8992075326987843e+00 -3.9662506277824492e+00 4.0716458277284353e+00 + 21 -1.6026766454385204e+01 -1.5883975994889351e+01 4.7256104878610991e+01 + 22 -2.5118529354380893e+01 -7.1302246459886085e+00 -3.6226156710215299e+01 + 23 4.0731193763533284e+01 2.3426594998848003e+01 -1.0527511310640200e+01 + 24 7.9759015601568057e+00 -4.4140032390724294e+01 2.3421941942726932e+01 + 25 -3.4663429593560622e+01 3.0656489475121842e+00 -2.8305771699451558e+01 + 26 2.6127823323623851e+01 4.0822835743217404e+01 4.2748889953099694e+00 + 27 1.1011058517091254e+01 -4.6436458745736758e+01 1.8878846450788387e+01 + 28 -4.0634774705109990e+01 1.5071357074236101e+01 -2.6829755184229253e+01 + 29 3.0014317510846237e+01 3.1359613235965710e+01 7.9297758330981845e+00 ... diff --git a/unittest/formats/test_atom_styles.cpp b/unittest/formats/test_atom_styles.cpp index 4de794a1ca..6d1c0f479e 100644 --- a/unittest/formats/test_atom_styles.cpp +++ b/unittest/formats/test_atom_styles.cpp @@ -1147,7 +1147,7 @@ TEST_F(AtomStyleTest, ellipsoid) auto type = lmp->atom->type; auto ellipsoid = lmp->atom->ellipsoid; auto rmass = lmp->atom->rmass; - auto avec = (AtomVecEllipsoid *)lmp->atom->avec; + auto avec = dynamic_cast(lmp->atom->avec); auto bonus = avec->bonus; EXPECT_NEAR(x[GETIDX(1)][0], -2.0, EPSILON); EXPECT_NEAR(x[GETIDX(1)][1], 2.0, EPSILON); @@ -1258,7 +1258,7 @@ TEST_F(AtomStyleTest, ellipsoid) type = lmp->atom->type; ellipsoid = lmp->atom->ellipsoid; rmass = lmp->atom->rmass; - avec = (AtomVecEllipsoid *)lmp->atom->avec; + avec = dynamic_cast(lmp->atom->avec); bonus = avec->bonus; ASSERT_EQ(type[GETIDX(1)], 1); ASSERT_EQ(type[GETIDX(3)], 2); @@ -1323,7 +1323,7 @@ TEST_F(AtomStyleTest, ellipsoid) ellipsoid = lmp->atom->ellipsoid; rmass = lmp->atom->rmass; - avec = (AtomVecEllipsoid *)lmp->atom->avec; + avec = dynamic_cast(lmp->atom->avec); bonus = avec->bonus; ASSERT_EQ(type[GETIDX(1)], 1); ASSERT_EQ(type[GETIDX(2)], 3); @@ -1476,7 +1476,7 @@ TEST_F(AtomStyleTest, line) auto type = lmp->atom->type; auto line = lmp->atom->line; auto rmass = lmp->atom->rmass; - auto avec = (AtomVecLine *)lmp->atom->avec; + auto avec = dynamic_cast(lmp->atom->avec); auto bonus = avec->bonus; EXPECT_NEAR(x[GETIDX(1)][0], -2.0, EPSILON); EXPECT_NEAR(x[GETIDX(1)][1], 2.0, EPSILON); @@ -1569,7 +1569,7 @@ TEST_F(AtomStyleTest, line) type = lmp->atom->type; line = lmp->atom->line; rmass = lmp->atom->rmass; - avec = (AtomVecLine *)lmp->atom->avec; + avec = dynamic_cast(lmp->atom->avec); bonus = avec->bonus; ASSERT_EQ(type[GETIDX(1)], 1); ASSERT_EQ(type[GETIDX(3)], 2); @@ -1614,7 +1614,7 @@ TEST_F(AtomStyleTest, line) line = lmp->atom->line; rmass = lmp->atom->rmass; - avec = (AtomVecLine *)lmp->atom->avec; + avec = dynamic_cast(lmp->atom->avec); bonus = avec->bonus; ASSERT_EQ(type[GETIDX(1)], 1); ASSERT_EQ(type[GETIDX(2)], 3); @@ -1760,7 +1760,7 @@ TEST_F(AtomStyleTest, tri) auto tri = lmp->atom->tri; auto rmass = lmp->atom->rmass; auto radius = lmp->atom->radius; - auto avec = (AtomVecTri *)lmp->atom->avec; + auto avec = dynamic_cast(lmp->atom->avec); auto bonus = avec->bonus; EXPECT_NEAR(x[GETIDX(1)][0], -2.0, EPSILON); EXPECT_NEAR(x[GETIDX(1)][1], 2.0, EPSILON); @@ -1914,7 +1914,7 @@ TEST_F(AtomStyleTest, tri) tri = lmp->atom->tri; rmass = lmp->atom->rmass; radius = lmp->atom->radius; - avec = (AtomVecTri *)lmp->atom->avec; + avec = dynamic_cast(lmp->atom->avec); bonus = avec->bonus; ASSERT_EQ(type[GETIDX(1)], 1); ASSERT_EQ(type[GETIDX(3)], 2); @@ -2023,7 +2023,7 @@ TEST_F(AtomStyleTest, tri) tri = lmp->atom->tri; rmass = lmp->atom->rmass; - avec = (AtomVecTri *)lmp->atom->avec; + avec = dynamic_cast(lmp->atom->avec); bonus = avec->bonus; ASSERT_EQ(type[GETIDX(1)], 1); ASSERT_EQ(type[GETIDX(2)], 3); @@ -2081,7 +2081,7 @@ TEST_F(AtomStyleTest, body_nparticle) ASSERT_ATOM_STATE_EQ(lmp->atom, expected); - auto avec = (AtomVecBody *)lmp->atom->avec; + auto avec = dynamic_cast(lmp->atom->avec); ASSERT_NE(lmp->atom->avec, nullptr); ASSERT_NE(avec->bptr, nullptr); ASSERT_THAT(std::string(avec->bptr->style), Eq("nparticle")); @@ -2344,7 +2344,7 @@ TEST_F(AtomStyleTest, body_nparticle) rmass = lmp->atom->rmass; radius = lmp->atom->radius; angmom = lmp->atom->angmom; - avec = (AtomVecBody *)lmp->atom->avec; + avec = dynamic_cast(lmp->atom->avec); bonus = avec->bonus; EXPECT_NEAR(x[GETIDX(1)][0], -2.0, EPSILON); EXPECT_NEAR(x[GETIDX(1)][1], 2.0, EPSILON); @@ -2484,7 +2484,7 @@ TEST_F(AtomStyleTest, body_nparticle) command("replicate 1 1 2"); END_HIDE_OUTPUT(); ASSERT_THAT(std::string(lmp->atom->atom_style), Eq("body")); - avec = (AtomVecBody *)lmp->atom->avec; + avec = dynamic_cast(lmp->atom->avec); ASSERT_THAT(std::string(avec->bptr->style), Eq("nparticle")); ASSERT_NE(lmp->atom->avec, nullptr); ASSERT_EQ(lmp->atom->natoms, 8); @@ -2599,7 +2599,7 @@ TEST_F(AtomStyleTest, body_nparticle) body = lmp->atom->body; rmass = lmp->atom->rmass; radius = lmp->atom->radius; - avec = (AtomVecBody *)lmp->atom->avec; + avec = dynamic_cast(lmp->atom->avec); bonus = avec->bonus; ASSERT_EQ(type[GETIDX(1)], 1); ASSERT_EQ(type[GETIDX(2)], 3); @@ -3048,7 +3048,7 @@ TEST_F(AtomStyleTest, template_charge) ASSERT_ATOM_STATE_EQ(lmp->atom, expected); - auto hybrid = (AtomVecHybrid *)lmp->atom->avec; + auto hybrid = dynamic_cast(lmp->atom->avec); ASSERT_THAT(std::string(lmp->atom->atom_style), Eq("hybrid")); ASSERT_EQ(hybrid->nstyles, 2); ASSERT_THAT(std::string(hybrid->keywords[0]), Eq("template")); @@ -3079,7 +3079,7 @@ TEST_F(AtomStyleTest, template_charge) command("pair_coeff * *"); END_HIDE_OUTPUT(); ASSERT_NE(lmp->atom->avec, nullptr); - hybrid = (AtomVecHybrid *)lmp->atom->avec; + hybrid = dynamic_cast(lmp->atom->avec); ASSERT_THAT(std::string(lmp->atom->atom_style), Eq("hybrid")); ASSERT_EQ(hybrid->nstyles, 2); ASSERT_THAT(std::string(hybrid->keywords[0]), Eq("template")); @@ -4189,7 +4189,7 @@ TEST_F(AtomStyleTest, full_ellipsoid) ASSERT_ATOM_STATE_EQ(lmp->atom, expected); - auto hybrid = (AtomVecHybrid *)lmp->atom->avec; + auto hybrid = dynamic_cast(lmp->atom->avec); ASSERT_THAT(std::string(lmp->atom->atom_style), Eq("hybrid")); ASSERT_EQ(hybrid->nstyles, 2); ASSERT_THAT(std::string(hybrid->keywords[0]), Eq("full")); @@ -4276,7 +4276,7 @@ TEST_F(AtomStyleTest, full_ellipsoid) END_HIDE_OUTPUT(); ASSERT_THAT(std::string(lmp->atom->atom_style), Eq("hybrid")); ASSERT_NE(lmp->atom->avec, nullptr); - hybrid = (AtomVecHybrid *)lmp->atom->avec; + hybrid = dynamic_cast(lmp->atom->avec); ASSERT_EQ(hybrid->nstyles, 2); ASSERT_THAT(std::string(hybrid->keywords[0]), Eq("full")); ASSERT_THAT(std::string(hybrid->keywords[1]), Eq("ellipsoid")); @@ -4306,7 +4306,7 @@ TEST_F(AtomStyleTest, full_ellipsoid) auto ellipsoid = lmp->atom->ellipsoid; auto rmass = lmp->atom->rmass; - auto avec = (AtomVecEllipsoid *)hybrid->styles[1]; + auto avec = dynamic_cast(hybrid->styles[1]); auto bonus = avec->bonus; EXPECT_NEAR(x[GETIDX(1)][0], -2.0, EPSILON); EXPECT_NEAR(x[GETIDX(1)][1], 2.0, EPSILON); @@ -4408,7 +4408,7 @@ TEST_F(AtomStyleTest, full_ellipsoid) command("replicate 1 1 2 bbox"); END_HIDE_OUTPUT(); ASSERT_THAT(std::string(lmp->atom->atom_style), Eq("hybrid")); - hybrid = (AtomVecHybrid *)lmp->atom->avec; + hybrid = dynamic_cast(lmp->atom->avec); ASSERT_EQ(hybrid->nstyles, 2); ASSERT_THAT(std::string(hybrid->keywords[0]), Eq("full")); ASSERT_THAT(std::string(hybrid->keywords[1]), Eq("ellipsoid")); @@ -4429,7 +4429,7 @@ TEST_F(AtomStyleTest, full_ellipsoid) type = lmp->atom->type; ellipsoid = lmp->atom->ellipsoid; rmass = lmp->atom->rmass; - avec = (AtomVecEllipsoid *)hybrid->styles[1]; + avec = dynamic_cast(hybrid->styles[1]); bonus = avec->bonus; ASSERT_EQ(type[GETIDX(1)], 1); ASSERT_EQ(type[GETIDX(3)], 2); @@ -4494,8 +4494,8 @@ TEST_F(AtomStyleTest, full_ellipsoid) ellipsoid = lmp->atom->ellipsoid; rmass = lmp->atom->rmass; - hybrid = (AtomVecHybrid *)lmp->atom->avec; - avec = (AtomVecEllipsoid *)hybrid->styles[1]; + hybrid = dynamic_cast(lmp->atom->avec); + avec = dynamic_cast(hybrid->styles[1]); bonus = avec->bonus; ASSERT_EQ(type[GETIDX(1)], 1); ASSERT_EQ(type[GETIDX(2)], 3); @@ -4839,7 +4839,7 @@ TEST_F(AtomStyleTest, oxdna) ASSERT_ATOM_STATE_EQ(lmp->atom, expected); - auto hybrid = (AtomVecHybrid *)lmp->atom->avec; + auto hybrid = dynamic_cast(lmp->atom->avec); ASSERT_THAT(std::string(lmp->atom->atom_style), Eq("hybrid")); ASSERT_EQ(hybrid->nstyles, 3); ASSERT_THAT(std::string(hybrid->keywords[0]), Eq("bond")); @@ -5014,7 +5014,7 @@ TEST_F(AtomStyleTest, oxdna) ASSERT_THAT(std::string(lmp->atom->atom_style), Eq("hybrid")); ASSERT_NE(lmp->atom->avec, nullptr); - hybrid = (AtomVecHybrid *)lmp->atom->avec; + hybrid = dynamic_cast(lmp->atom->avec); ASSERT_EQ(hybrid->nstyles, 3); ASSERT_THAT(std::string(hybrid->keywords[0]), Eq("bond")); @@ -5058,7 +5058,7 @@ TEST_F(AtomStyleTest, oxdna) auto ellipsoid = lmp->atom->ellipsoid; auto rmass = lmp->atom->rmass; - auto avec = (AtomVecEllipsoid *)hybrid->styles[1]; + auto avec = dynamic_cast(hybrid->styles[1]); auto bonus = avec->bonus; EXPECT_NEAR(x[GETIDX(1)][0], -0.33741452300167507, EPSILON); diff --git a/unittest/formats/test_file_operations.cpp b/unittest/formats/test_file_operations.cpp index 9c75029130..d48dee34b2 100644 --- a/unittest/formats/test_file_operations.cpp +++ b/unittest/formats/test_file_operations.cpp @@ -469,6 +469,8 @@ TEST_F(FileOperationsTest, write_data) TEST_FAILURE(".*ERROR: Cannot open file noexist.data: No such file or directory.*", command("read_data noexist.data");); + TEST_FAILURE(".*ERROR: Unknown read_data keyword xxx.*", + command("read_data noexist.data xxx");); BEGIN_HIDE_OUTPUT(); command("pair_style zero 1.0"); @@ -501,6 +503,116 @@ TEST_F(FileOperationsTest, write_data) delete_file("triclinic.data"); } +#define GETIDX(i) lmp->atom->map(i) +TEST_F(FileOperationsTest, read_data_fix) +{ + ASSERT_EQ(lmp->restart_ver, -1); + BEGIN_HIDE_OUTPUT(); + command("echo none"); + command("atom_modify map array"); + command("fix MoleculeIDs all property/atom mol"); + command("region box block -2 2 -2 2 -2 2"); + command("create_box 1 box"); + command("create_atoms 1 single 1.0 0.0 0.0"); + command("create_atoms 1 single 0.0 1.0 0.0"); + command("create_atoms 1 single 1.0 0.0 1.0"); + command("create_atoms 1 single 0.0 1.0 1.0"); + command("mass 1 1.0"); + command("set atom 1*2 mol 1"); + command("set atom 3*4 mol 2"); + command("write_data test_mol_id.data"); + lmp->atom->molecule[0] = 5; + lmp->atom->molecule[1] = 6; + lmp->atom->molecule[2] = 5; + lmp->atom->molecule[3] = 6; + lmp->atom->tag[0] = 9; + lmp->atom->tag[1] = 6; + lmp->atom->tag[2] = 7; + lmp->atom->tag[3] = 8; + lmp->atom->map_init(1); + lmp->atom->map_set(); + command("write_data test_mol_id_merge.data"); + command("clear"); + END_HIDE_OUTPUT(); + TEST_FAILURE(".*ERROR: Cannot use read_data add before simulation box is defined.*", + command("read_data test_mol_id.data add append");); + + BEGIN_HIDE_OUTPUT(); + command("atom_modify map array"); + command("fix MoleculeIDs all property/atom mol"); + command("read_data test_mol_id.data fix MoleculeIDs NULL Molecules"); + command("read_data test_mol_id_merge.data add merge fix MoleculeIDs NULL Molecules"); + END_HIDE_OUTPUT(); + + EXPECT_EQ(lmp->atom->natoms, 8); + EXPECT_EQ(lmp->atom->molecule[GETIDX(1)], 1); + EXPECT_EQ(lmp->atom->molecule[GETIDX(2)], 1); + EXPECT_EQ(lmp->atom->molecule[GETIDX(3)], 2); + EXPECT_EQ(lmp->atom->molecule[GETIDX(4)], 2); + EXPECT_EQ(lmp->atom->molecule[GETIDX(6)], 6); + EXPECT_EQ(lmp->atom->molecule[GETIDX(7)], 5); + EXPECT_EQ(lmp->atom->molecule[GETIDX(8)], 6); + EXPECT_EQ(lmp->atom->molecule[GETIDX(9)], 5); + EXPECT_EQ(lmp->atom->tag[GETIDX(1)], 1); + EXPECT_EQ(lmp->atom->tag[GETIDX(2)], 2); + EXPECT_EQ(lmp->atom->tag[GETIDX(3)], 3); + EXPECT_EQ(lmp->atom->tag[GETIDX(4)], 4); + EXPECT_EQ(lmp->atom->tag[GETIDX(6)], 6); + EXPECT_EQ(lmp->atom->tag[GETIDX(7)], 7); + EXPECT_EQ(lmp->atom->tag[GETIDX(8)], 8); + EXPECT_EQ(lmp->atom->tag[GETIDX(9)], 9); + + BEGIN_HIDE_OUTPUT(); + command("clear"); + command("atom_modify map array"); + command("fix MoleculeIDs all property/atom mol"); + command("read_data test_mol_id.data fix MoleculeIDs NULL Molecules"); + command("read_data test_mol_id.data add append fix MoleculeIDs NULL Molecules"); + END_HIDE_OUTPUT(); + EXPECT_EQ(lmp->atom->natoms, 8); + EXPECT_EQ(lmp->atom->molecule[GETIDX(1)], 1); + EXPECT_EQ(lmp->atom->molecule[GETIDX(2)], 1); + EXPECT_EQ(lmp->atom->molecule[GETIDX(3)], 2); + EXPECT_EQ(lmp->atom->molecule[GETIDX(4)], 2); + EXPECT_EQ(lmp->atom->molecule[GETIDX(5)], 1); + EXPECT_EQ(lmp->atom->molecule[GETIDX(6)], 1); + EXPECT_EQ(lmp->atom->molecule[GETIDX(7)], 2); + EXPECT_EQ(lmp->atom->molecule[GETIDX(8)], 2); + EXPECT_EQ(lmp->atom->tag[GETIDX(1)], 1); + EXPECT_EQ(lmp->atom->tag[GETIDX(2)], 2); + EXPECT_EQ(lmp->atom->tag[GETIDX(3)], 3); + EXPECT_EQ(lmp->atom->tag[GETIDX(4)], 4); + EXPECT_EQ(lmp->atom->tag[GETIDX(5)], 5); + EXPECT_EQ(lmp->atom->tag[GETIDX(6)], 6); + EXPECT_EQ(lmp->atom->tag[GETIDX(7)], 7); + EXPECT_EQ(lmp->atom->tag[GETIDX(8)], 8); + + BEGIN_HIDE_OUTPUT(); + command("clear"); + command("atom_modify map array"); + command("fix MoleculeIDs all property/atom mol"); + command("read_data test_mol_id.data fix MoleculeIDs NULL Molecules"); + command("read_data test_mol_id.data add 6 4 fix MoleculeIDs NULL Molecules"); + END_HIDE_OUTPUT(); + EXPECT_EQ(lmp->atom->natoms, 8); + EXPECT_EQ(lmp->atom->molecule[GETIDX(1)], 1); + EXPECT_EQ(lmp->atom->molecule[GETIDX(2)], 1); + EXPECT_EQ(lmp->atom->molecule[GETIDX(3)], 2); + EXPECT_EQ(lmp->atom->molecule[GETIDX(4)], 2); + EXPECT_EQ(lmp->atom->molecule[GETIDX(7)], 1); + EXPECT_EQ(lmp->atom->molecule[GETIDX(8)], 1); + EXPECT_EQ(lmp->atom->molecule[GETIDX(9)], 2); + EXPECT_EQ(lmp->atom->molecule[GETIDX(10)], 2); + EXPECT_EQ(lmp->atom->tag[GETIDX(1)], 1); + EXPECT_EQ(lmp->atom->tag[GETIDX(2)], 2); + EXPECT_EQ(lmp->atom->tag[GETIDX(3)], 3); + EXPECT_EQ(lmp->atom->tag[GETIDX(4)], 4); + EXPECT_EQ(lmp->atom->tag[GETIDX(7)], 7); + EXPECT_EQ(lmp->atom->tag[GETIDX(8)], 8); + EXPECT_EQ(lmp->atom->tag[GETIDX(9)], 9); + EXPECT_EQ(lmp->atom->tag[GETIDX(10)], 10); +} + int main(int argc, char **argv) { MPI_Init(&argc, &argv); diff --git a/unittest/fortran/CMakeLists.txt b/unittest/fortran/CMakeLists.txt index f66b333db1..b534835a5e 100644 --- a/unittest/fortran/CMakeLists.txt +++ b/unittest/fortran/CMakeLists.txt @@ -21,20 +21,6 @@ if(CMAKE_Fortran_COMPILER) endif() get_filename_component(LAMMPS_FORTRAN_MODULE ${LAMMPS_SOURCE_DIR}/../fortran/lammps.f90 ABSOLUTE) - if(BUILD_MPI) - find_package(MPI REQUIRED) - if((NOT MPI_Fortran_FOUND) OR (NOT MPI_Fortran_HAVE_F77_HEADER)) - message(STATUS "Skipping Tests for the LAMMPS Fortran Module: no MPI support for Fortran") - return() - endif() - else() - add_library(fmpi_stubs STATIC mpi_stubs.f90) - get_filename_component(_tmp_fc ${CMAKE_Fortran_COMPILER} NAME) - if (_tmp_fc STREQUAL "flang") - target_link_libraries(fmpi_stubs PUBLIC gfortran) - endif() - add_library(MPI::MPI_Fortran ALIAS fmpi_stubs) - endif() add_library(flammps STATIC ${LAMMPS_FORTRAN_MODULE} keepstuff.f90) get_filename_component(_tmp_fc ${CMAKE_Fortran_COMPILER} NAME) @@ -42,66 +28,62 @@ if(CMAKE_Fortran_COMPILER) target_link_libraries(flammps PUBLIC gfortran) endif() - if(MPI_Fortran_HAVE_F90_MODULE) - add_executable(test_fortran_create wrap_create.cpp test_fortran_create.f90) - target_link_libraries(test_fortran_create PRIVATE flammps lammps MPI::MPI_Fortran GTest::GTestMain) - target_include_directories(test_fortran_create PRIVATE "${LAMMPS_SOURCE_DIR}/../fortran") - add_test(NAME FortranOpen COMMAND test_fortran_create) - else() - message(STATUS "Skipping FortranOpen test since no working F90 MPI module was found") - endif() + add_executable(test_fortran_create wrap_create.cpp test_fortran_create.f90) + target_link_libraries(test_fortran_create PRIVATE flammps lammps GTest::GTestMain) + target_include_directories(test_fortran_create PRIVATE "${LAMMPS_SOURCE_DIR}/../fortran") + add_test(NAME FortranOpen COMMAND test_fortran_create) add_executable(test_fortran_commands wrap_commands.cpp test_fortran_commands.f90) - target_link_libraries(test_fortran_commands PRIVATE flammps lammps MPI::MPI_Fortran GTest::GTestMain) + target_link_libraries(test_fortran_commands PRIVATE flammps lammps GTest::GTestMain) add_test(NAME FortranCommands COMMAND test_fortran_commands) add_executable(test_fortran_get_thermo wrap_get_thermo.cpp test_fortran_get_thermo.f90) - target_link_libraries(test_fortran_get_thermo PRIVATE flammps lammps MPI::MPI_Fortran GTest::GTestMain) + target_link_libraries(test_fortran_get_thermo PRIVATE flammps lammps GTest::GTestMain) add_test(NAME FortranGetThermo COMMAND test_fortran_get_thermo) add_executable(test_fortran_box wrap_box.cpp test_fortran_box.f90) - target_link_libraries(test_fortran_box PRIVATE flammps lammps MPI::MPI_Fortran GTest::GTestMain) + target_link_libraries(test_fortran_box PRIVATE flammps lammps GTest::GTestMain) add_test(NAME FortranBox COMMAND test_fortran_box) add_executable(test_fortran_properties wrap_properties.cpp test_fortran_properties.f90 test_fortran_commands.f90) - target_link_libraries(test_fortran_properties PRIVATE flammps lammps MPI::MPI_Fortran GTest::GMockMain) + target_link_libraries(test_fortran_properties PRIVATE flammps lammps GTest::GMockMain) add_test(NAME FortranProperties COMMAND test_fortran_properties) add_executable(test_fortran_extract_global wrap_extract_global.cpp test_fortran_extract_global.f90) - target_link_libraries(test_fortran_extract_global PRIVATE flammps lammps MPI::MPI_Fortran GTest::GTestMain) + target_link_libraries(test_fortran_extract_global PRIVATE flammps lammps GTest::GTestMain) add_test(NAME FortranExtractGlobal COMMAND test_fortran_extract_global) add_executable(test_fortran_extract_atom wrap_extract_atom.cpp test_fortran_extract_atom.f90) - target_link_libraries(test_fortran_extract_atom PRIVATE flammps lammps MPI::MPI_Fortran GTest::GTestMain) + target_link_libraries(test_fortran_extract_atom PRIVATE flammps lammps GTest::GTestMain) add_test(NAME FortranExtractAtom COMMAND test_fortran_extract_atom) add_executable(test_fortran_extract_compute wrap_extract_compute.cpp test_fortran_extract_compute.f90) - target_link_libraries(test_fortran_extract_compute PRIVATE flammps lammps MPI::MPI_Fortran GTest::GTestMain) + target_link_libraries(test_fortran_extract_compute PRIVATE flammps lammps GTest::GTestMain) add_test(NAME FortranExtractCompute COMMAND test_fortran_extract_compute) add_executable(test_fortran_extract_fix wrap_extract_fix.cpp test_fortran_extract_fix.f90) - target_link_libraries(test_fortran_extract_fix PRIVATE flammps lammps MPI::MPI_Fortran GTest::GTestMain) + target_link_libraries(test_fortran_extract_fix PRIVATE flammps lammps GTest::GTestMain) add_test(NAME FortranExtractFix COMMAND test_fortran_extract_fix) add_executable(test_fortran_extract_variable wrap_extract_variable.cpp test_fortran_extract_variable.f90) target_compile_definitions(test_fortran_extract_variable PRIVATE -DTEST_INPUT_FOLDER=${CMAKE_CURRENT_SOURCE_DIR}) - target_link_libraries(test_fortran_extract_variable PRIVATE flammps lammps MPI::MPI_Fortran GTest::GTestMain) + target_link_libraries(test_fortran_extract_variable PRIVATE flammps lammps GTest::GTestMain) add_test(NAME FortranExtractVariable COMMAND test_fortran_extract_variable) add_executable(test_fortran_gather_scatter wrap_gather_scatter.cpp test_fortran_gather_scatter.f90) - target_link_libraries(test_fortran_gather_scatter PRIVATE flammps lammps MPI::MPI_Fortran GTest::GTestMain) + target_link_libraries(test_fortran_gather_scatter PRIVATE flammps lammps GTest::GTestMain) add_test(NAME FortranGatherScatter COMMAND test_fortran_gather_scatter) add_executable(test_fortran_create_atoms wrap_create_atoms.cpp test_fortran_create_atoms.f90) - target_link_libraries(test_fortran_create_atoms PRIVATE flammps lammps MPI::MPI_Fortran GTest::GTestMain) + target_link_libraries(test_fortran_create_atoms PRIVATE flammps lammps GTest::GTestMain) add_test(NAME FortranCreateAtoms COMMAND test_fortran_create_atoms) add_executable(test_fortran_configuration wrap_configuration.cpp test_fortran_configuration.f90 test_fortran_commands.f90) - target_link_libraries(test_fortran_configuration PRIVATE flammps lammps MPI::MPI_Fortran GTest::GMockMain) + target_link_libraries(test_fortran_configuration PRIVATE flammps lammps GTest::GMockMain) add_test(NAME FortranConfiguration COMMAND test_fortran_configuration) add_executable(test_fortran_neighlist wrap_neighlist.cpp test_fortran_neighlist.f90) - target_link_libraries(test_fortran_neighlist PRIVATE flammps lammps MPI::MPI_Fortran GTest::GMockMain) + target_link_libraries(test_fortran_neighlist PRIVATE flammps lammps GTest::GMockMain) add_test(NAME FortranNeighlist COMMAND test_fortran_neighlist) else() diff --git a/unittest/fortran/mpi_stubs.f90 b/unittest/fortran/mpi_stubs.f90 deleted file mode 100644 index 8601f436d2..0000000000 --- a/unittest/fortran/mpi_stubs.f90 +++ /dev/null @@ -1,20 +0,0 @@ -MODULE MPI - IMPLICIT NONE - PRIVATE - - INTEGER, PARAMETER :: MPI_COMM_WORLD=0 - INTEGER, PARAMETER :: MPI_SUCCESS=0 - - PUBLIC :: MPI_COMM_WORLD, MPI_SUCCESS, & - mpi_comm_split - -CONTAINS - - SUBROUTINE mpi_comm_split(comm,color,key,newcomm,ierr) - INTEGER, INTENT(in) :: comm,color,key - INTEGER, INTENT(out) :: newcomm,ierr - - newcomm = comm + 1 - ierr = 0 - END SUBROUTINE mpi_comm_split -END MODULE MPI diff --git a/unittest/fortran/test_fortran_create.f90 b/unittest/fortran/test_fortran_create.f90 index 4ea2a33cfe..fed67064f0 100644 --- a/unittest/fortran/test_fortran_create.f90 +++ b/unittest/fortran/test_fortran_create.f90 @@ -1,3 +1,20 @@ +MODULE MYMPI + USE, INTRINSIC :: ISO_C_BINDING, ONLY: c_int + + IMPLICIT NONE + PRIVATE + PUBLIC :: lmp_comm_split + + INTERFACE + FUNCTION lmp_comm_split(color, key) BIND(C,name='create_mpi_comm_split') + IMPORT :: c_int + IMPLICIT NONE + INTEGER(c_int), VALUE, INTENT(IN) :: color, key + INTEGER(c_int) :: lmp_comm_split + END FUNCTION lmp_comm_split + END INTERFACE +END MODULE MYMPI + FUNCTION f_lammps_no_mpi_no_args() BIND(C, name="f_lammps_no_mpi_no_args") USE ISO_C_BINDING, ONLY: c_ptr USE liblammps @@ -25,35 +42,35 @@ END FUNCTION f_lammps_no_mpi_with_args FUNCTION f_lammps_open_no_args() BIND(C, name="f_lammps_open_no_args") USE ISO_C_BINDING, ONLY: c_ptr - USE MPI, ONLY: MPI_COMM_WORLD, mpi_comm_split + USE MYMPI, ONLY: lmp_comm_split USE liblammps USE keepstuff, ONLY: lmp,mycomm IMPLICIT NONE TYPE(c_ptr) :: f_lammps_open_no_args - INTEGER :: color, key, ierr + INTEGER :: color, key color = 1 key = 1 - CALL mpi_comm_split(MPI_COMM_WORLD, color, key, mycomm, ierr) + mycomm = lmp_comm_split(color, key) lmp = lammps(comm=mycomm) f_lammps_open_no_args = lmp%handle END FUNCTION f_lammps_open_no_args FUNCTION f_lammps_open_with_args() BIND(C, name="f_lammps_open_with_args") USE ISO_C_BINDING, ONLY: c_ptr - USE MPI, ONLY: MPI_COMM_WORLD, mpi_comm_split + USE MYMPI, ONLY: lmp_comm_split USE liblammps USE keepstuff, ONLY: lmp,mycomm IMPLICIT NONE TYPE(c_ptr) :: f_lammps_open_with_args - INTEGER :: color, key, ierr + INTEGER :: color, key CHARACTER(len=12), DIMENSION(4), PARAMETER :: args = & [ CHARACTER(len=12) :: 'liblammps', '-log', 'none', '-nocite' ] color = 2 key = 1 - CALL mpi_comm_split(MPI_COMM_WORLD, color, key, mycomm, ierr) + mycomm = lmp_comm_split(color, key) lmp = lammps(args,mycomm) f_lammps_open_with_args = lmp%handle END FUNCTION f_lammps_open_with_args diff --git a/unittest/fortran/wrap_create.cpp b/unittest/fortran/wrap_create.cpp index 04a62e4040..789e9fca6a 100644 --- a/unittest/fortran/wrap_create.cpp +++ b/unittest/fortran/wrap_create.cpp @@ -17,6 +17,14 @@ void f_lammps_close(); int f_lammps_get_comm(); } +// C wrapper to split MPI communicator w/o requiring a Fortran MPI lib +extern "C" int create_mpi_comm_split(int color, int key) +{ + MPI_Comm c_newcomm = MPI_COMM_NULL; + MPI_Comm_split(MPI_COMM_WORLD, color, key, &c_newcomm); + return MPI_Comm_c2f(c_newcomm); +} + TEST(open_no_mpi, no_args) { ::testing::internal::CaptureStdout(); diff --git a/unittest/fortran/wrap_gather_scatter.cpp b/unittest/fortran/wrap_gather_scatter.cpp index 9eb6082202..f200e91b48 100644 --- a/unittest/fortran/wrap_gather_scatter.cpp +++ b/unittest/fortran/wrap_gather_scatter.cpp @@ -208,11 +208,11 @@ TEST_F(LAMMPS_gather_scatter, scatter_atoms_subset_mask) TEST_F(LAMMPS_gather_scatter, gather_bonds) { - f_lammps_setup_gather_bonds(); + if (!lammps_has_style(lmp, "atom", "full")) GTEST_SKIP(); + f_lammps_setup_gather_bonds(); #ifdef LAMMPS_BIGBIG - EXPECT_EQ(f_lammps_test_gather_bonds_big(), 1); + EXPECT_EQ(f_lammps_test_gather_bonds_big(), 1); #else - EXPECT_EQ(f_lammps_test_gather_bonds_small(), 1); + EXPECT_EQ(f_lammps_test_gather_bonds_small(), 1); #endif - }; diff --git a/unittest/python/test_python_package.cpp b/unittest/python/test_python_package.cpp index 4e5aa53b0c..f998ebbcd8 100644 --- a/unittest/python/test_python_package.cpp +++ b/unittest/python/test_python_package.cpp @@ -276,7 +276,7 @@ TEST_F(PythonPackageTest, RunSource) { // execute python script from file auto output = CAPTURE_OUTPUT([&] { - command("python xyz source ${input_dir}/run.py"); + command("python source ${input_dir}/run.py"); }); ASSERT_THAT(output, HasSubstr(LOREM_IPSUM)); @@ -286,7 +286,7 @@ TEST_F(PythonPackageTest, RunSourceInline) { // execute inline python script auto output = CAPTURE_OUTPUT([&] { - command("python xyz source \"\"\"\n" + command("python source here \"\"\"\n" "from __future__ import print_function\n" "print(2+2)\n" "\"\"\"");