diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 007ac2ca3c..59a937faba 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -59,7 +59,8 @@ src/VTK/* @rbberger # individual files in packages src/GPU/pair_vashishta_gpu.* @andeplane -src/KOKKOS/pair_vashishta_kokkos.* @andeplane +src/KOKKOS/pair_vashishta_kokkos.* @andeplane @stanmoore1 +src/KOSSOS/pair_pod_kokkos.* @exapde @stanmoore1 src/MANYBODY/pair_vashishta_table.* @andeplane src/MANYBODY/pair_atm.* @sergeylishchuk src/MANYBODY/pair_nb3b_screened.* @flodesani diff --git a/.gitignore b/.gitignore index 4faef4b8db..d96f0b4b5f 100644 --- a/.gitignore +++ b/.gitignore @@ -43,12 +43,12 @@ Thumbs.db #cmake /build* -/CMakeCache.txt -/CMakeFiles/ -/Testing +CMakeCache.txt +CMakeFiles /Makefile -/Testing -/cmake_install.cmake +Testing +Temporary +cmake_install.cmake /lmp out/Debug out/RelWithDebInfo @@ -60,3 +60,4 @@ src/Makefile.package.settings-e /cmake/build/x64-Debug-Clang /install/x64-GUI-MSVC /install +.Rhistory diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 16e9aab97c..e66b6b17a7 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -23,6 +23,7 @@ project(lammps CXX) set(SOVERSION 0) get_property(BUILD_IS_MULTI_CONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) +include(GNUInstallDirs) get_filename_component(LAMMPS_DIR ${CMAKE_CURRENT_SOURCE_DIR}/.. ABSOLUTE) get_filename_component(LAMMPS_LIB_BINARY_DIR ${CMAKE_BINARY_DIR}/lib ABSOLUTE) # collect all executables and shared libs in the top level build folder @@ -208,7 +209,7 @@ else() unset(CMAKE_CXX_CLANG_TIDY CACHE) endif() -include(GNUInstallDirs) + file(GLOB ALL_SOURCES CONFIGURE_DEPENDS ${LAMMPS_SOURCE_DIR}/[^.]*.cpp) file(GLOB MAIN_SOURCES CONFIGURE_DEPENDS ${LAMMPS_SOURCE_DIR}/main.cpp) list(REMOVE_ITEM ALL_SOURCES ${MAIN_SOURCES}) @@ -282,10 +283,10 @@ set(STANDARD_PACKAGES ML-HDNNP ML-IAP ML-PACE + ML-POD ML-QUIP ML-RANN ML-SNAP - ML-POD ML-UF3 MOFFF MOLECULE diff --git a/cmake/presets/all_off.cmake b/cmake/presets/all_off.cmake index 5c427c698e..f2f5782480 100644 --- a/cmake/presets/all_off.cmake +++ b/cmake/presets/all_off.cmake @@ -26,8 +26,8 @@ set(ALL_PACKAGES DPD-REACT DPD-SMOOTH DRUDE - ELECTRODE EFF + ELECTRODE EXTRA-COMMAND EXTRA-COMPUTE EXTRA-DUMP diff --git a/cmake/presets/all_on.cmake b/cmake/presets/all_on.cmake index c09541377d..8dc4632138 100644 --- a/cmake/presets/all_on.cmake +++ b/cmake/presets/all_on.cmake @@ -28,8 +28,8 @@ set(ALL_PACKAGES DPD-REACT DPD-SMOOTH DRUDE - ELECTRODE EFF + ELECTRODE EXTRA-COMMAND EXTRA-COMPUTE EXTRA-DUMP diff --git a/cmake/presets/mingw-cross.cmake b/cmake/presets/mingw-cross.cmake index 8ca9b97e35..100ce13632 100644 --- a/cmake/presets/mingw-cross.cmake +++ b/cmake/presets/mingw-cross.cmake @@ -22,8 +22,8 @@ set(WIN_PACKAGES DPD-REACT DPD-SMOOTH DRUDE - ELECTRODE EFF + ELECTRODE EXTRA-COMMAND EXTRA-COMPUTE EXTRA-DUMP @@ -33,7 +33,6 @@ set(WIN_PACKAGES FEP GPU GRANULAR - INTEL INTERLAYER KSPACE LEPTON diff --git a/cmake/presets/windows.cmake b/cmake/presets/windows.cmake index 5e400e9de9..403d40efa4 100644 --- a/cmake/presets/windows.cmake +++ b/cmake/presets/windows.cmake @@ -52,8 +52,8 @@ set(WIN_PACKAGES ORIENT PERI PHONON - POEMS PLUGIN + POEMS PTM QEQ QTB diff --git a/doc/lammps.1 b/doc/lammps.1 index 27ec20b1d3..a66083ed07 100644 --- a/doc/lammps.1 +++ b/doc/lammps.1 @@ -1,7 +1,7 @@ -.TH LAMMPS "1" "17 April 2024" "2024-04-17" +.TH LAMMPS "1" "27 June 2024" "2024-06-27" .SH NAME .B LAMMPS -\- Molecular Dynamics Simulator. Version 17 April 2024 +\- Molecular Dynamics Simulator. Version 27 June 2024 .SH SYNOPSIS .B lmp diff --git a/doc/src/Commands_compute.rst b/doc/src/Commands_compute.rst index 394a5bee3a..e5ec34fc22 100644 --- a/doc/src/Commands_compute.rst +++ b/doc/src/Commands_compute.rst @@ -108,6 +108,10 @@ KOKKOS, o = OPENMP, t = OPT. * :doc:`pe/mol/tally ` * :doc:`pe/tally ` * :doc:`plasticity/atom ` + * :doc:`pod/atom ` + * :doc:`podd/atom ` + * :doc:`pod/local ` + * :doc:`pod/global ` * :doc:`pressure ` * :doc:`pressure/alchemy ` * :doc:`pressure/uef ` diff --git a/doc/src/Commands_pair.rst b/doc/src/Commands_pair.rst index c559afeae3..37ca74d49b 100644 --- a/doc/src/Commands_pair.rst +++ b/doc/src/Commands_pair.rst @@ -247,7 +247,7 @@ OPT. * :doc:`pace (k) ` * :doc:`pace/extrapolation (k) ` * :doc:`pedone (o) ` - * :doc:`pod ` + * :doc:`pod (k) ` * :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 e37f8755d7..4955bc6f0b 100644 --- a/doc/src/Commands_removed.rst +++ b/doc/src/Commands_removed.rst @@ -151,10 +151,10 @@ and allow running LAMMPS with GPU acceleration. i-PI tool --------- -.. versionchanged:: TBD +.. versionchanged:: 27June2024 The i-PI tool has been removed from the LAMMPS distribution. Instead, -instructions to install i-PI from PyPi via pip are provided. +instructions to install i-PI from PyPI via pip are provided. restart2data tool ----------------- diff --git a/doc/src/Developer_utils.rst b/doc/src/Developer_utils.rst index 76e90e17ba..2923e5b29c 100644 --- a/doc/src/Developer_utils.rst +++ b/doc/src/Developer_utils.rst @@ -211,6 +211,9 @@ Argument processing .. doxygenfunction:: bounds :project: progguide +.. doxygenfunction:: bounds_typelabel + :project: progguide + .. doxygenfunction:: expand_args :project: progguide diff --git a/doc/src/Developer_write_pair.rst b/doc/src/Developer_write_pair.rst index d70f8ec50b..c286b9e1dd 100644 --- a/doc/src/Developer_write_pair.rst +++ b/doc/src/Developer_write_pair.rst @@ -50,6 +50,30 @@ We are looking at the following cases: - `Case 3: a potential requiring communication`_ - `Case 4: potentials without a compute() function`_ +Package and build system considerations +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +In general, new pair styles should be added to the :ref:`EXTRA-PAIR +package ` unless they are an accelerated pair style and +then they should be added to the corresponding accelerator package +(:ref:`GPU `, :ref:`INTEL `, :ref:`KOKKOS +`, :ref:`OPENMP `, :ref:`OPT `). If +you feel that your contribution should be added to a different package, +please consult with the LAMMPS developers first. + +The contributed code needs to support the :doc:`traditional GNU make +build process ` **and** the :doc:`CMake build process +`. For the GNU make process and if the package has an +``Install.sh`` file, most likely that file needs to be updated to +correctly copy the sources when installing the package and properly +delete them when uninstalling. This is particularly important when +added a new pair style that is a derived class from an existing pair +style in a package, so that its installation depends on the the +installation status of the package of the derived class. For the CMake +process, it is sometimes necessary to make changes to the package +specific CMake scripting in ``cmake/Modules/Packages``. + + ---- Case 1: a pairwise additive model diff --git a/doc/src/Howto_bioFF.rst b/doc/src/Howto_bioFF.rst index 8899f7520c..7418a43861 100644 --- a/doc/src/Howto_bioFF.rst +++ b/doc/src/Howto_bioFF.rst @@ -1,6 +1,10 @@ CHARMM, AMBER, COMPASS, and DREIDING force fields ================================================= +A compact summary of the concepts, definitions, and properties of +force fields with explicit bonded interactions (like the ones discussed +in this HowTo) is given in :ref:`(Gissinger) `. + A force field has 2 parts: the formulas that define it and the coefficients used for a particular system. Here we only discuss formulas implemented in LAMMPS that correspond to formulas commonly used @@ -11,12 +15,42 @@ commands like :doc:`pair_coeff ` or :doc:`bond_coeff ` and so on. See the :doc:`Tools ` doc page for additional tools that can use CHARMM, AMBER, or Materials Studio generated files to assign force field coefficients and convert their -output into LAMMPS input. +output into LAMMPS input. LAMMPS input scripts can also be generated by +`charmm-gui.org `_. -See :ref:`(MacKerell) ` for a description of the CHARMM -force field. See :ref:`(Cornell) ` for a description of -the AMBER force field. See :ref:`(Sun) ` for a description -of the COMPASS force field. +CHARMM and AMBER +---------------- + +The `CHARMM force field +`_ :ref:`(MacKerell) +` and `AMBER force field +`_ :ref:`(Cornell) ` +have potential energy function of the form + +.. math:: + + V & = \sum_{bonds} E_b + \sum_{angles} \!E_a + \!\overbrace{\sum_{dihedral} \!\!E_d}^{\substack{ + \text{charmm} \\ + \text{charmmfsw} + }} +\!\!\! \sum_{impropers} \!\!\!E_i \\[.6em] + & \quad + \!\!\!\!\!\!\!\!\!\!\underbrace{~\sum_{pairs} \left(E_{LJ}+E_{coul}\right)}_{\substack{ + \text{lj/charmm/coul/charmm} \\ + \text{lj/charmm/coul/charmm/implicit} \\ + \text{lj/charmm/coul/long} \\ + \text{lj/charmm/coul/msm} \\ + \text{lj/charmmfsw/coul/charmmfsh} \\ + \text{lj/charmmfsw/coul/long} + }} \!\!\!\!\!\!\!\!+ \!\!\sum_{special}\! E_s + \!\!\!\!\sum_{residues} \!\!\!{\scriptstyle\mathrm{CMAP}(\phi,\psi)} + + +The terms are computed by bond styles (relationship between 2 atoms), +angle styles (between 3 atoms) , dihedral/improper styles (between 4 +atoms), pair styles (non-covalently bonded pair interactions) and +special bonds. The CMAP term (see :doc:`fix cmap ` command for +details) corrects for pairs of dihedral angles ("Correction MAP") to +significantly improve the structural and dynamic properties of proteins +in crystalline and solution environments :ref:`(Brooks) +`. The AMBER force field does not include the CMAP term. The interaction styles listed below compute force field formulas that are consistent with common options in CHARMM or AMBER. See each @@ -31,10 +65,81 @@ command's documentation for the formula it computes. * :doc:`pair_style ` lj/charmm/coul/charmm * :doc:`pair_style ` lj/charmm/coul/charmm/implicit * :doc:`pair_style ` lj/charmm/coul/long - * :doc:`special_bonds ` charmm * :doc:`special_bonds ` amber +The pair styles compute Lennard Jones (LJ) and Coulombic interactions +with additional switching or shifting functions that ramp the energy +and/or force smoothly to zero between an inner :math:`(a)` and outer +:math:`(b)` cutoff. The older styles with *charmm* (not *charmmfsw* or +*charmmfsh*\ ) in their name compute the LJ and Coulombic interactions +with an energy switching function (esw) S(r) which ramps the energy +smoothly to zero between the inner and outer cutoff. This can cause +irregularities in pairwise forces (due to the discontinuous second +derivative of energy at the boundaries of the switching region), which +in some cases can result in complications in energy minimization and +detectable artifacts in MD simulations. + +.. grid:: 1 1 2 2 + + .. grid-item:: + + .. math:: + + LJ(r) &= 4 \epsilon \left[ \left(\frac{\sigma}{r}\right)^{12} - + \left(\frac{\sigma}{r}\right)^6 \right]\\[.6em] + C(r) &= \frac{C q_i q_j}{ \epsilon r}\\[.6em] + S(r) &= \frac{ \left(b^2 - r^2\right)^2 \left(b^2 + 2r^2 - 3{a^2}\right)} + { \left(b^2 - a^2\right)^3 }\\[.6em] + E_{LJ}(r) &= \begin{cases} + LJ(r), & r \leq a \\ + LJ(r) S(r), & a < r \leq b \\ + 0, &r > b + \end{cases} \\[.6em] + E_{coul}(r) &= \begin{cases} + C(r), & r \leq a \\ + C(r) S(r), & a < r \leq b \\ + 0, & r > b + \end{cases} + + .. grid-item:: + + .. image:: img/howto_charmm_ELJ.png + :align: center + +The newer styles with *charmmfsw* or *charmmfsh* in their name replace +energy switching with force switching (fsw) for LJ interactions and +force shifting (fsh) functions for Coulombic interactions +:ref:`(Steinbach) ` + +.. grid:: 1 1 2 2 + + .. grid-item:: + + .. math:: + + E_{LJ}(r) = & \begin{cases} + 4 \epsilon \sigma^6 \left(\frac{\displaystyle\sigma + ^6-r^6}{\displaystyle r^{12}}-\frac{\displaystyle\sigma ^6}{\displaystyle a^6 + b^6}+\frac{\displaystyle 1}{\displaystyle a^3 b^3}\right) & r\leq a \\ + \frac{\displaystyle 4 \epsilon \sigma^6 \left(\sigma ^6 + \left(b^6-r^6\right)^2-b^3 r^6 \left(a^3+b^3\right) + \left(b^3-r^3\right)^2\right)}{\displaystyle b^6 r^{12} + \left(b^6-a^6\right)} & ab + \end{cases}\\[.6em] + E_{coul}(r) & = \begin{cases} + C(r) \frac{\displaystyle (b-r)^2}{\displaystyle r b^2}, & r \leq b \\ + 0, & r > b + \end{cases} + + .. grid-item:: + .. image:: img/howto_charmmfsw_ELJ.png + :align: center + +These styles are used by LAMMPS input scripts generated by +https://charmm-gui.org/ :ref:`(Brooks) `. + .. note:: For CHARMM, newer *charmmfsw* or *charmmfsh* styles were released in @@ -43,17 +148,33 @@ command's documentation for the formula it computes. ` and :doc:`dihedral charmm ` doc pages. +.. note:: + + The TIP3P water model is strongly recommended for use with the CHARMM + force field. In fact, `"using the SPC model with CHARMM parameters is + a bad idea" + `_ and `"to + enable TIP4P style water in CHARMM, you would have to write a new pair + style" + `_ + . LAMMPS input scripts generated by Solution Builder on https://charmm-gui.org + use TIP3P molecules for solvation. Any other water model can and + probably will lead to false conclusions. + +COMPASS +------- + COMPASS is a general force field for atomistic simulation of common organic molecules, inorganic small molecules, and polymers which was -developed using ab initio and empirical parameterization techniques. -See the :doc:`Tools ` page for the msi2lmp tool for creating -LAMMPS template input and data files from BIOVIA's Materials Studio -files. Please note that the msi2lmp tool is very old and largely -unmaintained, so it does not support all features of Materials Studio -provided force field files, especially additions during the last decade. -You should watch the output carefully and compare results, where -possible. See :ref:`(Sun) ` for a description of the COMPASS force -field. +developed using ab initio and empirical parameterization techniques +:ref:`(Sun) `. See the :doc:`Tools ` page for the +msi2lmp tool for creating LAMMPS template input and data files from +BIOVIA's Materials Studio files. Please note that the msi2lmp tool is +very old and largely unmaintained, so it does not support all features +of Materials Studio provided force field files, especially additions +during the last decade. You should watch the output carefully and +compare results, where possible. See :ref:`(Sun) ` for a +description of the COMPASS force field. These interaction styles listed below compute force field formulas that are consistent with the COMPASS force field. See each command's @@ -70,14 +191,21 @@ documentation for the formula it computes. * :doc:`special_bonds ` lj/coul 0 0 1 -DREIDING is a generic force field developed by the `Goddard group `_ at Caltech and is useful for -predicting structures and dynamics of organic, biological and main-group -inorganic molecules. The philosophy in DREIDING is to use general force -constants and geometry parameters based on simple hybridization -considerations, rather than individual force constants and geometric -parameters that depend on the particular combinations of atoms involved -in the bond, angle, or torsion terms. DREIDING has an :doc:`explicit hydrogen bond term ` to describe interactions involving a -hydrogen atom on very electronegative atoms (N, O, F). +DREIDING +-------- + +DREIDING is a generic force field developed by the `Goddard group +`_ at Caltech and is useful for predicting +structures and dynamics of organic, biological and main-group inorganic +molecules. The philosophy in DREIDING is to use general force constants +and geometry parameters based on simple hybridization considerations, +rather than individual force constants and geometric parameters that +depend on the particular combinations of atoms involved in the bond, +angle, or torsion terms. DREIDING has an :doc:`explicit hydrogen bond +term ` to describe interactions involving a +hydrogen atom on very electronegative atoms (N, O, F). Unlike CHARMM +or AMBER, the DREIDING force field has not been parameterized for +considering solvents (like water). See :ref:`(Mayo) ` for a description of the DREIDING force field @@ -110,21 +238,31 @@ documentation for the formula it computes. ---------- +.. _Typelabel2: + +**(Gissinger)** J. R. Gissinger, I. Nikiforov, Y. Afshar, B. Waters, M. Choi, D. S. Karls, A. Stukowski, W. Im, H. Heinz, A. Kohlmeyer, and E. B. Tadmor, J Phys Chem B, 128, 3282-3297 (2024). + .. _howto-MacKerell: -**(MacKerell)** MacKerell, Bashford, Bellott, Dunbrack, Evanseck, Field, -Fischer, Gao, Guo, Ha, et al, J Phys Chem, 102, 3586 (1998). +**(MacKerell)** MacKerell, Bashford, Bellott, Dunbrack, Evanseck, Field, Fischer, Gao, Guo, Ha, et al (1998). J Phys Chem, 102, 3586 . https://doi.org/10.1021/jp973084f .. _howto-Cornell: -**(Cornell)** Cornell, Cieplak, Bayly, Gould, Merz, Ferguson, -Spellmeyer, Fox, Caldwell, Kollman, JACS 117, 5179-5197 (1995). +**(Cornell)** Cornell, Cieplak, Bayly, Gould, Merz, Ferguson, Spellmeyer, Fox, Caldwell, Kollman (1995). JACS 117, 5179-5197. https://doi.org/10.1021/ja00124a002 + +.. _howto-Steinbach: + +**(Steinbach)** Steinbach, Brooks (1994). J Comput Chem, 15, 667. https://doi.org/10.1002/jcc.540150702 + +.. _howto-Brooks: + +**(Brooks)** Brooks, et al (2009). J Comput Chem, 30, 1545. https://onlinelibrary.wiley.com/doi/10.1002/jcc.21287 .. _howto-Sun: -**(Sun)** Sun, J. Phys. Chem. B, 102, 7338-7364 (1998). +**(Sun)** Sun (1998). J. Phys. Chem. B, 102, 7338-7364. https://doi.org/10.1021/jp980939v .. _howto-Mayo: -**(Mayo)** Mayo, Olfason, Goddard III, J Phys Chem, 94, 8897-8909 -(1990). +**(Mayo)** Mayo, Olfason, Goddard III (1990). J Phys Chem, 94, 8897-8909. https://doi.org/10.1021/j100389a010 + diff --git a/doc/src/Tools.rst b/doc/src/Tools.rst index e5429bc68d..0732398e53 100644 --- a/doc/src/Tools.rst +++ b/doc/src/Tools.rst @@ -379,7 +379,7 @@ See README file in the tools/fep directory. i-PI tool ------------------- -.. versionchanged:: TBD +.. versionchanged:: 27June2024 The tools/i-pi directory used to contain a bundled version of the i-PI software package for use with LAMMPS. This version, however, was @@ -389,7 +389,7 @@ The i-PI package was created and is maintained by Michele Ceriotti, michele.ceriotti at gmail.com, to interface to a variety of molecular dynamics codes. -i-PI is now available via PyPi using the pip package manager at: +i-PI is now available via PyPI using the pip package manager at: https://pypi.org/project/ipi/ Here are the commands to set up a virtual environment and install @@ -839,7 +839,7 @@ and LAMMPS GUI can be launched from anywhere from the command line. The standard CMake build procedure can be applied and the ``mingw-cross.cmake`` preset used. By using ``mingw64-cmake`` the CMake -command will automatically include a suitable CMake toolset file (the +command will automatically include a suitable CMake toolchain file (the regular cmake command can be used after that to modify the configuration settings, if needed). After building the libraries and executables, you can build the target 'zip' (i.e. ``cmake --build --target zip`` diff --git a/doc/src/atom_modify.rst b/doc/src/atom_modify.rst index 21590e6680..0d750f1755 100644 --- a/doc/src/atom_modify.rst +++ b/doc/src/atom_modify.rst @@ -71,11 +71,11 @@ all atoms, e.g. in a data or restart file. atom IDs are required, due to how neighbor lists are built. The *map* keyword determines how atoms with specific IDs are found -when required. An example are the bond (angle, etc) methods which -need to find the local index of an atom with a specific global ID -which is a bond (angle, etc) partner. LAMMPS performs this operation -efficiently by creating a "map", which is either an *array* or *hash* -table, as described below. +when required. For example, the bond (angle, etc) methods need to +find the local index of an atom with a specific global ID which is a +bond (angle, etc) partner. LAMMPS performs this operation efficiently +by creating a "map", which is either an *array* or *hash* table, as +described below. When the *map* keyword is not specified in your input script, LAMMPS only creates a map for :doc:`atom_styles ` for molecular @@ -83,34 +83,39 @@ systems which have permanent bonds (angles, etc). No map is created for atomic systems, since it is normally not needed. However some LAMMPS commands require a map, even for atomic systems, and will generate an error if one does not exist. The *map* keyword thus -allows you to force the creation of a map. The *yes* value will -create either an *array* or *hash* style map, as explained in the next -paragraph. The *array* and *hash* values create an array-style or -hash-style map respectively. +allows you to force the creation of a map. -For an *array*\ -style map, each processor stores a lookup table of -length N, where N is the largest atom ID in the system. This is a -fast, simple method for many simulations, but requires too much memory -for large simulations. For a *hash*\ -style map, a hash table is -created on each processor, which finds an atom ID in constant time -(independent of the global number of atom IDs). It can be slightly -slower than the *array* map, but its memory cost is proportional to -the number of atoms owned by a processor, i.e. N/P when N is the total -number of atoms in the system and P is the number of processors. +Specifying a value of *yes* will create either an array-style or +hash-style map, depending on the size of the system. If no atom ID is +larger than 1 million, then an array-style map is used, otherwise a +hash-style map is used. Specifying a value of *array* or *hash* +creates an array-style or hash-style map respectively, regardless of +the size of the system. -The *first* keyword allows a :doc:`group ` to be specified whose -atoms will be maintained as the first atoms in each processor's list -of owned atoms. This in only useful when the specified group is a -small fraction of all the atoms, and there are other operations LAMMPS -is performing that will be sped-up significantly by being able to loop -over the smaller set of atoms. Otherwise the reordering required by -this option will be a net slow-down. The :doc:`neigh_modify include ` and :doc:`comm_modify group ` -commands are two examples of commands that require this setting to -work efficiently. Several :doc:`fixes `, most notably time -integration fixes like :doc:`fix nve `, also take advantage of -this setting if the group they operate on is the group specified by -this command. Note that specifying "all" as the group-ID effectively -turns off the *first* option. +For an array-style map, each processor stores a lookup table of length +N, where N is the largest atom ID in the system. This is a fast, +simple method for many simulations, but requires too much memory for +large simulations. For a hash-style map, a hash table is created on +each processor, which finds an atom ID in constant time (independent +of the global number of atom IDs). It can be slightly slower than the +*array* map, but its memory cost is proportional to the number of +atoms owned by a processor, i.e. N/P when N is the total number of +atoms in the system and P is the number of processors. + +The *first* keyword allows a :doc:`group ` to be specified +whose atoms will be maintained as the first atoms in each processor's +list of owned atoms. This in only useful when the specified group is +a small fraction of all the atoms, and there are other operations +LAMMPS is performing that will be sped-up significantly by being able +to loop over the smaller set of atoms. Otherwise the reordering +required by this option will be a net slow-down. The +:doc:`neigh_modify include ` and :doc:`comm_modify group +` commands are two examples of commands that require this +setting to work efficiently. Several :doc:`fixes `, most notably +time integration fixes like :doc:`fix nve `, also take +advantage of this setting if the group they operate on is the group +specified by this command. Note that specifying "all" as the group-ID +effectively turns off the *first* option. It is OK to use the *first* keyword with a group that has not yet been defined, e.g. to use the atom_modify first command at the beginning of @@ -148,15 +153,16 @@ cache locality will be undermined. .. note:: - Running a simulation with sorting on versus off should not - change the simulation results in a statistical sense. However, a - different ordering will induce round-off differences, which will lead - to diverging trajectories over time when comparing two simulations. - Various commands, particularly those which use random numbers - (e.g. :doc:`velocity create `, and :doc:`fix langevin `), may generate (statistically identical) - results which depend on the order in which atoms are processed. The - order of atoms in a :doc:`dump ` file will also typically change - if sorting is enabled. + Running a simulation with sorting on versus off should not change + the simulation results in a statistical sense. However, a + different ordering will induce round-off differences, which will + lead to diverging trajectories over time when comparing two + simulations. Various commands, particularly those which use random + numbers (e.g. :doc:`velocity create `, and :doc:`fix + langevin `), may generate (statistically identical) + results which depend on the order in which atoms are processed. + The order of atoms in a :doc:`dump ` file will also typically + change if sorting is enabled. .. note:: @@ -183,12 +189,13 @@ Default By default, *id* is yes. By default, atomic systems (no bond topology info) do not use a map. For molecular systems (with bond topology -info), a map is used. The default map style is array if no atom ID is -larger than 1 million, otherwise the default is hash. By default, a -"first" group is not defined. By default, sorting is enabled with a -frequency of 1000 and a binsize of 0.0, which means the neighbor -cutoff will be used to set the bin size. If no neighbor cutoff is -defined, sorting will be turned off. +info), the default is to use a map of either *array* or *hash* style +depending on the size of the sustem, as explained above for the *map +yes* keyword/value option. By default, a *first* group is not +defined. By default, sorting is enabled with a frequency of 1000 and +a binsize of 0.0, which means the neighbor cutoff will be used to set +the bin size. If no neighbor cutoff is defined, sorting will be turned +off. ---------- diff --git a/doc/src/compute.rst b/doc/src/compute.rst index 21c172317e..0690ec57c3 100644 --- a/doc/src/compute.rst +++ b/doc/src/compute.rst @@ -272,6 +272,10 @@ The individual style names on the :doc:`Commands compute ` pag * :doc:`pe/mol/tally ` - potential energy between two groups of atoms separated into intermolecular and intramolecular components via the tally callback mechanism * :doc:`pe/tally ` - potential energy between two groups of atoms via the tally callback mechanism * :doc:`plasticity/atom ` - Peridynamic plasticity for each atom +* :doc:`pod/atom ` - POD descriptors for each atom +* :doc:`podd/atom ` - derivative of POD descriptors for each atom +* :doc:`pod/local ` - local POD descriptors and their derivatives +* :doc:`pod/global ` - global POD descriptors and their derivatives * :doc:`pressure ` - total pressure and pressure tensor * :doc:`pressure/alchemy ` - mixed system total pressure and pressure tensor for :doc:`fix alchemy ` runs * :doc:`pressure/uef ` - pressure tensor in the reference frame of an applied flow field diff --git a/doc/src/compute_pod_atom.rst b/doc/src/compute_pod_atom.rst new file mode 100644 index 0000000000..caa70dfa2c --- /dev/null +++ b/doc/src/compute_pod_atom.rst @@ -0,0 +1,145 @@ +.. index:: compute pod/atom +.. index:: compute podd/atom +.. index:: compute pod/local +.. index:: compute pod/global + +compute pod/atom command +======================== + +compute podd/atom command +========================= + +compute pod/local command +========================= + +compute pod/global command +========================== + +Syntax +"""""" + +.. code-block:: LAMMPS + + compute ID group-ID pod/atom param.pod coefficients.pod + compute ID group-ID podd/atom param.pod coefficients.pod + compute ID group-ID pod/local param.pod coefficients.pod + compute ID group-ID pod/global param.pod coefficients.pod + +* ID, group-ID are documented in :doc:`compute ` command +* pod/atom = style name of this compute command +* param.pod = the parameter file specifies parameters of the POD descriptors +* coefficients.pod = the coefficient file specifies coefficients of the POD potential + +Examples +"""""""" + +.. code-block:: LAMMPS + + compute d all pod/atom Ta_param.pod + compute dd all podd/atom Ta_param.pod + compute ldd all pod/local Ta_param.pod + compute gdd all podd/global Ta_param.pod + compute d all pod/atom Ta_param.pod Ta_coefficients.pod + compute dd all podd/atom Ta_param.pod Ta_coefficients.pod + compute ldd all pod/local Ta_param.pod Ta_coefficients.pod + compute gdd all podd/global Ta_param.pod Ta_coefficients.pod + +Description +""""""""""" + +.. versionadded:: 27June2024 + +Define a computation that calculates a set of quantities related to the +POD descriptors of the atoms in a group. These computes are used +primarily for calculating the dependence of energy and force components +on the linear coefficients in the :doc:`pod pair_style `, +which is useful when training a POD potential to match target data. POD +descriptors of an atom are characterized by the radial and angular +distribution of neighbor atoms. The detailed mathematical definition is +given in the papers by :ref:`(Nguyen and Rohskopf) `, +:ref:`(Nguyen2023) `, :ref:`(Nguyen2024) `, +and :ref:`(Nguyen and Sema) `. + +Compute *pod/atom* calculates the per-atom POD descriptors. + +Compute *podd/atom* calculates derivatives of the per-atom POD +descriptors with respect to atom positions. + +Compute *pod/local* calculates the per-atom POD descriptors and their +derivatives with respect to atom positions. + +Compute *pod/global* calculates the global POD descriptors and their +derivatives with respect to atom positions. + +Examples how to use Compute POD commands are found in the directory +``examples/PACKAGES/pod``. + + +.. warning:: + + All of these compute styles produce *very* large per-atom output + arrays that scale with the total number of atoms in the system. + This will result in *very* large memory consumption for systems + with a large number of atoms. + +---------- + +Output info +""""""""""" + +Compute *pod/atom* produces an 2D array of size :math:`N \times M`, +where :math:`N` is the number of atoms and :math:`M` is the number of +descriptors. Each column corresponds to a particular POD descriptor. + +Compute *podd/atom* produces an 2D array of size :math:`N \times (M * 3 +N)`. Each column corresponds to a particular derivative of a POD +descriptor. + +Compute *pod/local* produces an 2D array of size :math:`(1 + 3N) \times +(M * N)`. The first row contains the per-atom descriptors, and the last +3N rows contain the derivatives of the per-atom descriptors with respect +to atom positions. + +Compute *pod/global* produces an 2D array of size :math:`(1 + 3N) \times +(M)`. The first row contains the global descriptors, and the last 3N +rows contain the derivatives of the global descriptors with respect to +atom positions. + +Restrictions +"""""""""""" + +These computes are part of the ML-POD package. They are only enabled +if LAMMPS was built with that package. See the :doc:`Build package +` page for more info. + +Related commands +"""""""""""""""" + +:doc:`fitpod `, +:doc:`pair_style pod ` + + +Default +""""""" + +none + +---------- + +.. _Nguyen20222c: + +**(Nguyen and Rohskopf)** Nguyen and Rohskopf, Journal of Computational Physics, 480, 112030, (2023). + +.. _Nguyen20232c: + +**(Nguyen2023)** Nguyen, Physical Review B, 107(14), 144103, (2023). + +.. _Nguyen20242c: + +**(Nguyen2024)** Nguyen, Journal of Computational Physics, 113102, (2024). + +.. _Nguyen20243c: + +**(Nguyen and Sema)** Nguyen and Sema, https://arxiv.org/abs/2405.00306, (2024). + + diff --git a/doc/src/fitpod_command.rst b/doc/src/fitpod_command.rst index 28afb990ff..3b348fa339 100644 --- a/doc/src/fitpod_command.rst +++ b/doc/src/fitpod_command.rst @@ -1,18 +1,19 @@ .. index:: fitpod fitpod command -====================== +============== Syntax """""" .. code-block:: LAMMPS - fitpod Ta_param.pod Ta_data.pod + fitpod Ta_param.pod Ta_data.pod Ta_coefficients.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 +* Ta_coefficients.pod (optional) = an input file that specifies trainable coefficients of a POD potential Examples """""""" @@ -20,20 +21,26 @@ Examples .. code-block:: LAMMPS fitpod Ta_param.pod Ta_data.pod + fitpod Ta_param.pod Ta_data.pod Ta_coefficients.pod Description """"""""""" .. versionadded:: 22Dec2022 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. +orthogonal descriptors (POD); please see :ref:`(Nguyen and Rohskopf) +`, :ref:`(Nguyen2023) `, :ref:`(Nguyen2024) +`, and :ref:`(Nguyen and Sema) ` for details. +The fitted POD potential can be used to run MD simulations via +:doc:`pair_style pod `. -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): +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. All keywords +except *species* have default values. If a keyword is not set in the +input file, its default value is used. 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``) .. list-table:: :header-rows: 1 @@ -52,7 +59,7 @@ above): - INT - three integer constants specify boundary conditions * - rin - - 1.0 + - 0.5 - REAL - a real number specifies the inner cut-off radius * - rcut @@ -60,46 +67,75 @@ above): - REAL - a real number specifies the outer cut-off radius * - bessel_polynomial_degree - - 3 + - 4 - INT - the maximum degree of Bessel polynomials * - inverse_polynomial_degree - - 6 + - 8 - INT - the maximum degree of inverse radial basis functions + * - number_of_environment_clusters + - 1 + - INT + - the number of clusters for environment-adaptive potentials + * - number_of_principal_components + - 2 + - INT + - the number of principal components for dimensionality reduction * - onebody - 1 - BOOL - turns on/off one-body potential * - twobody_number_radial_basis_functions - - 6 + - 8 - INT - number of radial basis functions for two-body potential * - threebody_number_radial_basis_functions - - 5 + - 6 - INT - number of radial basis functions for three-body potential - * - threebody_number_angular_basis_functions + * - threebody_angular_degree - 5 - INT - - number of angular basis functions for three-body potential - * - fourbody_snap_twojmax + - angular degree for three-body potential + * - fourbody_number_radial_basis_functions + - 4 + - INT + - number of radial basis functions for four-body potential + * - fourbody_angular_degree + - 3 + - INT + - angular degree for four-body potential + * - fivebody_number_radial_basis_functions - 0 - INT - - band limit for SNAP bispectrum components (0,2,4,6,8... allowed) - * - fourbody_snap_chemflag + - number of radial basis functions for five-body potential + * - fivebody_angular_degree - 0 - - BOOL - - turns on/off the explicit multi-element variant of the SNAP bispectrum components - * - quadratic_pod_potential + - INT + - angular degree for five-body potential + * - sixbody_number_radial_basis_functions - 0 - - BOOL - - turns on/off quadratic POD potential + - INT + - number of radial basis functions for six-body potential + * - sixbody_angular_degree + - 0 + - INT + - angular degree for six-body potential + * - sevenbody_number_radial_basis_functions + - 0 + - INT + - number of radial basis functions for seven-body potential + * - sevenbody_angular_degree + - 0 + - INT + - angular degree for seven-body potential + +Note that both the number of radial basis functions and angular degree +must decrease as the body order increases. The next table describes all +keywords that can be used in the second input file (i.e. ``Ta_data.pod`` +in the example above): -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 @@ -125,6 +161,10 @@ describes all keywords that can be used in the second input file - "" - STRING - specifies the path to test data files in double quotes + * - path_to_environment_configuration_set + - "" + - STRING + - specifies the path to environment configuration files in double quotes * - fraction_training_data_set - 1.0 - REAL @@ -133,6 +173,14 @@ describes all keywords that can be used in the second input file - 0 - BOOL - turns on/off randomization of the training set + * - fraction_test_data_set + - 1.0 + - REAL + - a real number (<= 1.0) specifies the fraction of the test set used to validate POD + * - randomize_test_data_set + - 0 + - BOOL + - turns on/off randomization of the test set * - fitting_weight_energy - 100.0 - REAL @@ -161,6 +209,10 @@ describes all keywords that can be used in the second input file - 8 - INT - number of digits after the decimal points for numbers in the coefficient file + * - group_weights + - global + - STRING + - ``table`` uses group weights defined for each group named by filename 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 @@ -172,14 +224,44 @@ successful training, a number of output files are produced, if enabled: * ``_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. +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 and the Github repo +https://github.com/cesmix-mit/pod-examples. -Parameterized Potential Energy Surface -"""""""""""""""""""""""""""""""""""""" +Loss Function Group Weights +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The *group_weights* keyword in the ``data.pod`` file is responsible for +weighting certain groups of configurations in the loss function. For +example: + +.. code-block:: LAMMPS + + group_weights table + Displaced_A15 100.0 1.0 + Displaced_BCC 100.0 1.0 + Displaced_FCC 100.0 1.0 + Elastic_BCC 100.0 1.0 + Elastic_FCC 100.0 1.0 + GSF_110 100.0 1.0 + GSF_112 100.0 1.0 + Liquid 100.0 1.0 + Surface 100.0 1.0 + Volume_A15 100.0 1.0 + Volume_BCC 100.0 1.0 + Volume_FCC 100.0 1.0 + +This will apply an energy weight of ``100.0`` and a force weight of +``1.0`` for all groups in the ``Ta`` example. The groups are named by +their respective filename. If certain groups are left out of this table, +then the globally defined weights from the ``fitting_weight_energy`` and +``fitting_weight_force`` keywords will be used. + +POD Potential +""""""""""""" 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` @@ -187,535 +269,82 @@ 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 +Z_2, \ldots, Z_N) \in \mathbb{N}^{N}`. The total energy of the +POD potential is expressed as :math:`E(\boldsymbol R, \boldsymbol Z) = +\sum_{i=1}^N E_i(\boldsymbol R_i, \boldsymbol Z_i)`, where .. 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. - + E_i(\boldsymbol R_i, \boldsymbol Z_i) \ = \ \sum_{m=1}^M c_m \mathcal{D}_{im}(\boldsymbol R_i, \boldsymbol Z_i) + + +Here :math:`c_m` are trainable coefficients and +:math:`\mathcal{D}_{im}(\boldsymbol R_i, \boldsymbol Z_i)` are per-atom +POD descriptors. Summing the per-atom descriptors over :math:`i` yields +the global descriptors :math:`d_m(\boldsymbol R, \boldsymbol Z) = +\sum_{i=1}^N \mathcal{D}_{im}(\boldsymbol R_i, \boldsymbol Z_i)`. It +thus follows that :math:`E(\boldsymbol R, \boldsymbol Z) = \sum_{m=1}^M +c_m d_m(\boldsymbol R, \boldsymbol Z)`. + +The per-atom POD descriptors include one, two, three, four, five, six, +and seven-body descriptors, which can be specified in the first input +file. Furthermore, the per-atom POD descriptors also depend on the +number of environment clusters specified in the first input file. +Please see :ref:`(Nguyen2024) ` and :ref:`(Nguyen and Sema) +` for the detailed description of the per-atom POD +descriptors. Training """""""" -POD potentials are trained using the least-squares regression against +A POD potential is 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 j-th configuration. The training configurations are extracted from +the extended XYZ files located in a directory (i.e., +path_to_training_data_set in the second input file). 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, + {\min}_{\boldsymbol c \in \mathbb{R}^{M}} \ w_E \|\boldsymbol A \boldsymbol c - \bar{\boldsymbol E}^{\star} \|^2 + w_F \|\boldsymbol B \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. +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. +Validation +"""""""""" +POD potential can be validated on a test dataset in a directory +specified by setting path_to_test_data_set in the second input file. It +is possible to validate the POD potential after the training is +complete. This is done by providing the coefficient file as an input to +:doc:`fitpod `, for example, + +.. code-block:: LAMMPS + + fitpod Ta_param.pod Ta_data.pod Ta_coefficients.pod Restrictions """""""""""" @@ -727,7 +356,11 @@ LAMMPS was built with that package. See the :doc:`Build package Related commands """""""""""""""" -:doc:`pair_style pod ` +:doc:`pair_style pod `, +:doc:`compute pod/atom `, +:doc:`compute podd/atom `, +:doc:`compute pod/local `, +:doc:`compute pod/global ` Default """"""" @@ -736,10 +369,20 @@ The keyword defaults are also given in the description of the input files. ---------- -.. _Grepl20072: +.. _Nguyen20222a: -**(Grepl)** Grepl, Maday, Nguyen, and Patera, ESAIM: Mathematical Modelling and Numerical Analysis 41(3), 575-605, (2007). +**(Nguyen and Rohskopf)** Nguyen and Rohskopf, Journal of Computational Physics, 480, 112030, (2023). + +.. _Nguyen20232a: + +**(Nguyen2023)** Nguyen, Physical Review B, 107(14), 144103, (2023). + +.. _Nguyen20242a: + +**(Nguyen2024)** Nguyen, Journal of Computational Physics, 113102, (2024). + +.. _Nguyen20243a: + +**(Nguyen and Sema)** Nguyen and Sema, https://arxiv.org/abs/2405.00306, (2024). -.. _Nguyen20222: -**(Nguyen)** Nguyen and Rohskopf, arXiv preprint arXiv:2209.02362 (2022). diff --git a/doc/src/fix_ipi.rst b/doc/src/fix_ipi.rst index a1951d8996..2e19363f33 100644 --- a/doc/src/fix_ipi.rst +++ b/doc/src/fix_ipi.rst @@ -80,7 +80,7 @@ Obtaining i-PI """""""""""""" Here are the commands to set up a virtual environment and install -i-PI into it with all its dependencies via the PyPi repository and +i-PI into it with all its dependencies via the PyPI repository and the pip package manager. .. code-block:: sh diff --git a/doc/src/img/howto_charmm_ELJ.png b/doc/src/img/howto_charmm_ELJ.png new file mode 100644 index 0000000000..f55e553ef9 Binary files /dev/null and b/doc/src/img/howto_charmm_ELJ.png differ diff --git a/doc/src/img/howto_charmmfsw_ELJ.png b/doc/src/img/howto_charmmfsw_ELJ.png new file mode 100644 index 0000000000..6c08eb98cf Binary files /dev/null and b/doc/src/img/howto_charmmfsw_ELJ.png differ diff --git a/doc/src/labelmap.rst b/doc/src/labelmap.rst index 254086274c..2374116509 100644 --- a/doc/src/labelmap.rst +++ b/doc/src/labelmap.rst @@ -44,8 +44,8 @@ The label map can also be defined by the :doc:`read_data ` command when it reads these sections in a data file: Atom Type Labels, Bond Type Labels, etc. See the :doc:`Howto type labels ` doc page for a general discussion of how type -labels can be used. See :ref:`(Gissinger) ` for a discussion -of the type label implementation in LAMMPS and its uses. +labels can be used. See :ref:`(Gissinger) ` for a +discussion of the type label implementation in LAMMPS and its uses. Valid type labels can contain any alphanumeric character, but must not start with a number, a '#', or a '*' character. They can contain other @@ -103,6 +103,6 @@ none ----------- -.. _Typelabel: +.. _Typelabel1: **(Gissinger)** J. R. Gissinger, I. Nikiforov, Y. Afshar, B. Waters, M. Choi, D. S. Karls, A. Stukowski, W. Im, H. Heinz, A. Kohlmeyer, and E. B. Tadmor, J Phys Chem B, 128, 3282-3297 (2024). diff --git a/doc/src/pair_charmm.rst b/doc/src/pair_charmm.rst index 30b03ad872..15ed40e0ec 100644 --- a/doc/src/pair_charmm.rst +++ b/doc/src/pair_charmm.rst @@ -112,26 +112,22 @@ Description These pair styles compute Lennard Jones (LJ) and Coulombic interactions with additional switching or shifting functions that ramp the energy and/or force smoothly to zero between an inner and outer -cutoff. They are implementations of the widely used CHARMM force -field used in the `CHARMM `_ MD code (and -others). See :ref:`(MacKerell) ` for a description of the -CHARMM force field. +cutoff. They implement the widely used CHARMM force field, see +:doc:`Howto discussion on biomolecular force fields ` for +details. The styles with *charmm* (not *charmmfsw* or *charmmfsh*\ ) in their name are the older, original LAMMPS implementations. They compute the -LJ and Coulombic interactions with an energy switching function (esw, -shown in the formula below as S(r)), which ramps the energy smoothly -to zero between the inner and outer cutoff. This can cause -irregularities in pairwise forces (due to the discontinuous second -derivative of energy at the boundaries of the switching region), which -in some cases can result in detectable artifacts in an MD simulation. +LJ and Coulombic interactions with an energy switching function which +ramps the energy smoothly to zero between the inner and outer cutoff. +This can cause irregularities in pairwise forces (due to the discontinuous +second derivative of energy at the boundaries of the switching region), +which in some cases can result in detectable artifacts in an MD simulation. The newer styles with *charmmfsw* or *charmmfsh* in their name replace the energy switching with force switching (fsw) and force shifting (fsh) functions, for LJ and Coulombic interactions respectively. -These follow the formulas and description given in -:ref:`(Steinbach) ` and :ref:`(Brooks) ` to minimize these -artifacts. + .. note:: @@ -152,26 +148,6 @@ artifacts. the CHARMM force field energies and forces, when using one of these two CHARMM pair styles. -.. math:: - - E = & LJ(r) \qquad \qquad \qquad r < r_{\rm in} \\ - = & S(r) * LJ(r) \qquad \qquad r_{\rm in} < r < r_{\rm out} \\ - = & 0 \qquad \qquad \qquad \qquad r > r_{\rm out} \\ - E = & C(r) \qquad \qquad \qquad r < r_{\rm in} \\ - = & S(r) * C(r) \qquad \qquad r_{\rm in} < r < r_{\rm out} \\ - = & 0 \qquad \qquad \qquad \qquad r > r_{\rm out} \\ - LJ(r) = & 4 \epsilon \left[ \left(\frac{\sigma}{r}\right)^{12} - - \left(\frac{\sigma}{r}\right)^6 \right] \\ - C(r) = & \frac{C q_i q_j}{ \epsilon r} \\ - S(r) = & \frac{ \left[r_{\rm out}^2 - r^2\right]^2 - \left[r_{\rm out}^2 + 2r^2 - 3{r_{\rm in}^2}\right]} - { \left[r_{\rm out}^2 - {r_{\rm in}}^2\right]^3 } - -where S(r) is the energy switching function mentioned above for the -*charmm* styles. See the :ref:`(Steinbach) ` paper for the -functional forms of the force switching and force shifting functions -used in the *charmmfsw* and *charmmfsh* styles. - When using the *lj/charmm/coul/charmm styles*, both the LJ and Coulombic terms require an inner and outer cutoff. They can be the same for both formulas or different depending on whether 2 or 4 diff --git a/doc/src/pair_dpd_coul_slater_long.rst b/doc/src/pair_dpd_coul_slater_long.rst index 24e8a3b09f..069c34c018 100644 --- a/doc/src/pair_dpd_coul_slater_long.rst +++ b/doc/src/pair_dpd_coul_slater_long.rst @@ -13,16 +13,11 @@ Syntax pair_style dpd/coul/slater/long T cutoff_DPD seed lambda cutoff_coul - pair_coeff I J a_IJ Gamma is_charged - -* T = temperature (temperature units) (dpd only) +* T = temperature (temperature units) * cutoff_DPD = global cutoff for DPD interactions (distance units) * seed = random # seed (positive integer) * lambda = decay length of the charge (distance units) -* cutoff_coul = real part cutoff for Coulombic interactions (distance units) -* I,J = numeric atom types, or type labels -* Gamma = DPD Gamma coefficient -* is_charged (boolean) set to yes if I and J are charged beads +* cutoff_coul = global cutoff for Coulombic interactions (distance units) Examples """""""" @@ -30,66 +25,90 @@ Examples .. code-block:: LAMMPS pair_style dpd/coul/slater/long 1.0 2.5 34387 0.25 3.0 - pair_coeff 1 1 78.0 4.5 # not charged by default + + pair_coeff 1 1 78.0 4.5 # not charged by default pair_coeff 2 2 78.0 4.5 yes Description """"""""""" -.. versionadded:: TBD +.. versionadded:: 27June2024 -Style *dpd/coul/slater/long* computes a force field for dissipative particle dynamics -(DPD) following the exposition in :ref:`(Groot) ` with the addition of -electrostatic interactions. The coulombic forces in mesoscopic models -employ potentials without explicit excluded-volume interactions. -The goal is to prevent artificial ionic pair formation by including a charge -distribution in the Coulomb potential, following the formulation of -:ref:`(Melchor) `: +Style *dpd/coul/slater/long* computes a force field for dissipative +particle dynamics (DPD) following the exposition in :ref:`(Groot) +`. It also allows for the use of charged particles in the +model by adding a long-range Coulombic term to the DPD interactions. +The short-range portion of the Coulombics is calculated by this pair +style. The long-range Coulombics are computed by use of the +:doc:`kspace_style ` command, e.g. using the Ewald or +PPPM styles. -The force on bead I due to bead J is given as a sum -of 4 terms +Coulombic forces in mesoscopic models such as DPD employ potentials +without explicit excluded-volume interactions. The goal is to prevent +artificial ionic pair formation by including a charge distribution in +the Coulomb potential, following the formulation in :ref:`(Melchor1) +`. + +.. note:: + + This pair style is effectively the combination of the + :doc:`pair_style dpd ` and :doc:`pair_style + coul/slater/long ` commands, but should be more + efficient (especially on GPUs) than using :doc:`pair_style + hybrid/overlay dpd coul/slater/long `. That is + particularly true for the GPU package version of the pair style since + this version is compatible with computing neighbor lists on the GPU + instead of the CPU as is required for hybrid styles. + +In the charged DPD model, the force on bead I due to bead J is given +as a sum of 4 terms: .. math:: \vec{f} = & (F^C + F^D + F^R + F^E) \hat{r_{ij}} \\ - F^C = & A w(r) \qquad \qquad \qquad \qquad \qquad r < r_c \\ - F^D = & - \gamma w^2(r) (\hat{r_{ij}} \bullet \vec{v}_{ij}) \qquad \qquad r < r_c \\ - F^R = & \sigma w(r) \alpha (\Delta t)^{-1/2} \qquad \qquad \qquad r < r_c \\ - w(r) = & 1 - \frac{r}{r_c} \\ - F^E = & \frac{Cq_iq_j}{\epsilon r^2} \left( 1- exp\left( \frac{2r_{ij}}{\lambda} \right) \left( 1 + \frac{2r_{ij}}{\lambda} \left( 1 + \frac{r_{ij}}{\lambda} \right)\right) \right) + F^C = & A w(r) \qquad \qquad \qquad \qquad \qquad r < r_{DPD} \\ + F^D = & - \gamma w^2(r) (\hat{r_{ij}} \bullet \vec{v}_{ij}) \qquad \qquad r < r_{DPD} \\ + F^R = & \sigma w(r) \alpha (\Delta t)^{-1/2} \qquad \qquad \qquad r < r_{DPD} \\ + w(r) = & 1 - \frac{r}{r_{DPD}} \\ + F^E = & \frac{C q_iq_j}{\epsilon r^2} \left( 1- exp\left( \frac{2r_{ij}}{\lambda} \right) \left( 1 + \frac{2r_{ij}}{\lambda} \left( 1 + \frac{r_{ij}}{\lambda} \right)\right) \right) -where :math:`F^C` is a conservative force, :math:`F^D` is a dissipative -force, :math:`F^R` is a random force, and :math:`F^E` is an electrostatic force. -:math:`\hat{r_{ij}}` is a unit vector in the direction -:math:`r_i - r_j`, :math:`\vec{v}_{ij}` is -the vector difference in velocities of the two atoms :math:`\vec{v}_i - +where :math:`F^C` is a conservative force, :math:`F^D` is a +dissipative force, :math:`F^R` is a random force, and :math:`F^E` is +an electrostatic force. :math:`\hat{r_{ij}}` is a unit vector in the +direction :math:`r_i - r_j`, :math:`\vec{v}_{ij}` is the vector +difference in velocities of the two atoms :math:`\vec{v}_i - \vec{v}_j`, :math:`\alpha` is a Gaussian random number with zero mean and unit variance, *dt* is the timestep size, and :math:`w(r)` is a -weighting factor that varies between 0 and 1. :math:`r_c` is the -pairwise cutoff. :math:`\sigma` is set equal to :math:`\sqrt{2 k_B T -\gamma}`, where :math:`k_B` is the Boltzmann constant and *T* is the -temperature parameter in the pair_style command. -C is the same Coulomb conversion factor as in the pair_styles -coul/cut and coul/long. In this way the Coulomb -interaction between ions is corrected at small distances r, and -the long-range interactions are computed either by the Ewald or the PPPM technique. +weighting factor that varies between 0 and 1. +:math:`\sigma` is set equal to :math:`\sqrt{2 k_B T \gamma}`, where +:math:`k_B` is the Boltzmann constant and *T* is the temperature +parameter in the pair_style command. -The following parameters must be defined for each -pair of atoms types via the :doc:`pair_coeff ` command as in -the examples above, or in the data file or restart files read by the +:math:`r_{DPD}` is the pairwise cutoff for the first 3 DPD terms in +the formula as specified by *cutoff_DPD*. For the :math:`F^E` term, +pairwise interactions within the specified *cutoff_coul* distance are +computed directly; interactions beyond that distance are computed in +reciprocal space. *C* is the same Coulomb conversion factor used in +the Coulombic formulas described on the :doc:`pair_coul ` +doc page. + +The following parameters must be defined for each pair of atoms types +via the :doc:`pair_coeff ` command as in the examples +above, or in the data file or restart files read by the :doc:`read_data ` or :doc:`read_restart ` commands: * A (force units) * :math:`\gamma` (force/velocity units) -* is_charged (boolean) +* is_charged (optional boolean, default = no) - -.. note:: - - This style is the combination of :doc:`pair_style dpd ` and :doc:`pair_style coul/slater/long `. +The *is_charged* parameter is optional and can be specified as *yes* or +*no*. *Yes* should be used for interactions between two types of +charged particles. *No* is the default and should be used for +interactions between two types of particles when one or both are +uncharged. ---------- @@ -116,17 +135,17 @@ pressure. This pair style writes its information to :doc:`binary restart files `, so pair_style and pair_coeff commands do not need to be specified in an input script that reads a restart file. Note that the -user-specified random number seed is stored in the restart file, so when -a simulation is restarted, each processor will re-initialize its random -number generator the same way it did initially. This means the random -forces will be random, but will not be the same as they would have been -if the original simulation had continued past the restart time. +user-specified random number seed is stored in the restart file, so +when a simulation is restarted, each processor will re-initialize its +random number generator the same way it did initially. This means the +random forces will be random, but will not be the same as they would +have been if the original simulation had continued past the restart +time. This pair style can only be used via the *pair* keyword of the -:doc:`run_style respa ` command. They do not support the +:doc:`run_style respa ` command. It does not support the *inner*, *middle*, *outer* keywords. - ---------- Restrictions @@ -138,17 +157,17 @@ LAMMPS was built with that package. See the :doc:`Build package The default frequency for rebuilding neighbor lists is every 10 steps (see the :doc:`neigh_modify ` command). This may be too -infrequent since particles move rapidly and -can overlap by large amounts. If this setting yields a non-zero number -of "dangerous" reneighborings (printed at the end of a simulation), you -should experiment with forcing reneighboring more often and see if -system energies/trajectories change. +infrequent since particles move rapidly and can overlap by large +amounts. If this setting yields a non-zero number of "dangerous" +reneighborings (printed at the end of a simulation), you should +experiment with forcing reneighboring more often and see if system +energies/trajectories change. -This pair style requires you to use the :doc:`comm_modify vel yes +This pair style requires use of the :doc:`comm_modify vel yes ` command so that velocities are stored by ghost atoms. -This pair style also requires the long-range solvers included in the KSPACE package. - +This pair style also requires use of a long-range solvers from the +KSPACE package. This pair style will not restart exactly when using the :doc:`read_restart ` command, though they should provide @@ -160,13 +179,11 @@ Related commands """""""""""""""" :doc:`pair_style dpd `, :doc:`pair_style coul/slater/long `, -:doc:`pair_coeff `, :doc:`fix nvt `, :doc:`fix langevin `, -:doc:`pair_style srp `, :doc:`fix mvv/dpd `. Default """"""" -is_charged = no +For the pair_coeff command, the default is is_charged = no. ---------- diff --git a/doc/src/pair_pod.rst b/doc/src/pair_pod.rst index cb4edcb9e9..0c7f188b3f 100644 --- a/doc/src/pair_pod.rst +++ b/doc/src/pair_pod.rst @@ -1,8 +1,11 @@ .. index:: pair_style pod +.. index:: pair_style pod/kk pair_style pod command ======================== +Accelerator Variants: *pod/kk* + Syntax """""" @@ -24,29 +27,33 @@ Description .. versionadded:: 22Dec2022 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. +potential :ref:`(Nguyen and Rohskopf) `, +:ref:`(Nguyen2023) `, :ref:`(Nguyen2024) `, +and :ref:`(Nguyen and Sema) `. The :doc:`fitpod +` is used to fit the POD potential. Only a single pair_coeff command is used with the *pod* style which -specifies a POD parameter file followed by a coefficient file. +specifies a POD parameter file followed by a coefficient file, a +projection matrix file, and a centroid 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: +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. -* POD_coefficients: *ncoeff* +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: -This is followed by *ncoeff* coefficients, one per line. The coefficient +* model_coefficients: *ncoeff* *nproj* *ncentroid* + +This is followed by *ncoeff* coefficients, *nproj* projection matrix entries, +and *ncentroid* centroid coordinates, 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: @@ -67,7 +74,33 @@ 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. +directory lammps/examples/PACKAGES/pod and the Github repo https://github.com/cesmix-mit/pod-examples. + +---------- + +Mixing, shift, table, tail correction, restart, rRESPA info +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + +For atom type pairs I,J and I != J, where types I and J correspond to +two different element types, mixing is performed by LAMMPS with +user-specifiable parameters as described above. You never need to +specify a pair_coeff command with I != J arguments for this style. + +This pair style does not support the :doc:`pair_modify ` +shift, table, and tail options. + +This pair style does not write its information to :doc:`binary restart +files `, since it is stored in potential files. Thus, you need +to re-specify the pair_style and pair_coeff commands in an input script +that reads a restart file. + +This pair style can only be used via the *pair* keyword of the +:doc:`run_style respa ` command. It does not support the +*inner*, *middle*, *outer* keywords. + +---------- + +.. include:: accel_styles.rst ---------- @@ -78,12 +111,14 @@ 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 `, +:doc:`compute pod/atom `, +:doc:`compute podd/atom `, +:doc:`compute pod/local `, +:doc:`compute pod/global ` Default """"""" @@ -92,6 +127,20 @@ none ---------- -.. _Nguyen20221: +.. _Nguyen20222b: + +**(Nguyen and Rohskopf)** Nguyen and Rohskopf, Journal of Computational Physics, 480, 112030, (2023). + +.. _Nguyen20232b: + +**(Nguyen2023)** Nguyen, Physical Review B, 107(14), 144103, (2023). + +.. _Nguyen20242b: + +**(Nguyen2024)** Nguyen, Journal of Computational Physics, 113102, (2024). + +.. _Nguyen20243b: + +**(Nguyen and Sema)** Nguyen and Sema, https://arxiv.org/abs/2405.00306, (2024). + -**(Nguyen)** Nguyen and Rohskopf, arXiv preprint arXiv:2209.02362 (2022). diff --git a/doc/src/pair_uf3.rst b/doc/src/pair_uf3.rst index ce07e2206f..b6bb990385 100644 --- a/doc/src/pair_uf3.rst +++ b/doc/src/pair_uf3.rst @@ -36,7 +36,7 @@ Examples Description """"""""""" -.. versionadded:: TBD +.. versionadded:: 27June2024 The *uf3* style computes the :ref:`Ultra-Fast Force Fields (UF3) ` potential, a machine-learning interatomic potential. In UF3, diff --git a/doc/src/variable.rst b/doc/src/variable.rst index 4ac978e26d..330e44139e 100644 --- a/doc/src/variable.rst +++ b/doc/src/variable.rst @@ -67,7 +67,7 @@ Syntax bound(group,dir,region), gyration(group,region), ke(group,reigon), angmom(group,dim,region), torque(group,dim,region), inertia(group,dimdim,region), omega(group,dim,region) - special functions = sum(x), min(x), max(x), ave(x), trap(x), slope(x), sort(x), rsort(x), gmask(x), rmask(x), grmask(x,y), next(x), is_file(name), is_os(name), extract_setting(name), label2type(kind,label), is_typelabel(kind,label) + special functions = sum(x), min(x), max(x), ave(x), trap(x), slope(x), sort(x), rsort(x), gmask(x), rmask(x), grmask(x,y), next(x), is_file(name), is_os(name), extract_setting(name), label2type(kind,label), is_typelabel(kind,label), is_timeout() feature functions = is_available(category,feature), is_active(category,feature), is_defined(category,id) atom value = id[i], mass[i], type[i], mol[i], x[i], y[i], z[i], vx[i], vy[i], vz[i], fx[i], fy[i], fz[i], q[i] atom vector = id, mass, type, mol, radius, q, x, y, z, vx, vy, vz, fx, fy, fz @@ -547,7 +547,7 @@ variables. +------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Region functions | count(ID,IDR), mass(ID,IDR), charge(ID,IDR), xcm(ID,dim,IDR), vcm(ID,dim,IDR), fcm(ID,dim,IDR), bound(ID,dir,IDR), gyration(ID,IDR), ke(ID,IDR), angmom(ID,dim,IDR), torque(ID,dim,IDR), inertia(ID,dimdim,IDR), omega(ID,dim,IDR) | +------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| Special functions | sum(x), min(x), max(x), ave(x), trap(x), slope(x), sort(x), rsort(x), gmask(x), rmask(x), grmask(x,y), next(x), is_file(name), is_os(name), extract_setting(name), label2type(kind,label), is_typelabel(kind,label) | +| Special functions | sum(x), min(x), max(x), ave(x), trap(x), slope(x), sort(x), rsort(x), gmask(x), rmask(x), grmask(x,y), next(x), is_file(name), is_os(name), extract_setting(name), label2type(kind,label), is_typelabel(kind,label), is_timeout() | +------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Feature functions | is_available(category,feature), is_active(category,feature), is_defined(category,id) | +------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ @@ -957,7 +957,7 @@ of points, equally spaced by 1 in their x coordinate: (1,V1), (2,V2), length N. The returned value is the slope of the line. If the line has a single point or is vertical, it returns 1.0e20. -.. versionadded:: TBD +.. versionadded:: 27June2024 The sort(x) and rsort(x) functions sort the data of the input vector by their numeric value: sort(x) sorts in ascending order, rsort(x) sorts @@ -1042,6 +1042,20 @@ label2type(), but returns 1 if the type label has been assigned, otherwise it returns 0. This function can be used to check if a particular type label already exists in the simulation. +.. versionadded:: TBD + +The is_timeout() function returns 1 when the :doc:`timer timeout +` has expired otherwise it returns 0. This function can be used +to check inputs in combination with the :doc:`if command ` to +execute commands after the timer has expired. Example: + +.. code-block:: LAMMPS + + variable timeout equal is_timeout() + timer timeout 0:10:00 every 10 + run 10000 + if ${timeout} then "print 'Timer has expired'" + ---------- Feature Functions diff --git a/doc/utils/requirements.txt b/doc/utils/requirements.txt index 5bb8e3911d..83d4999dd7 100644 --- a/doc/utils/requirements.txt +++ b/doc/utils/requirements.txt @@ -1,6 +1,7 @@ Sphinx >= 5.3.0, <8.0 sphinxcontrib-spelling sphinxcontrib-jquery +sphinx-design git+https://github.com/akohlmey/sphinx-fortran@parallel-read sphinx-tabs>=3.4.1 breathe diff --git a/doc/utils/sphinx-config/conf.py.in b/doc/utils/sphinx-config/conf.py.in index c0805ba6b1..337485e689 100644 --- a/doc/utils/sphinx-config/conf.py.in +++ b/doc/utils/sphinx-config/conf.py.in @@ -57,6 +57,7 @@ extensions = [ 'table_from_list', 'tab_or_note', 'breathe', + 'sphinx_design' ] images_config = { diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index e99b96fbb4..c300cf608d 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -1173,6 +1173,7 @@ finitecutflag Finnis Fiorin fitpod +fivebody fixID fj Fji @@ -2897,6 +2898,7 @@ Pmolrotate Pmoltrans pN png +podd Podhorszki Poiseuille poisson @@ -3370,6 +3372,7 @@ setmask Setmask setpoint setvel +sevenbody sfftw sfree Sg @@ -3420,6 +3423,7 @@ SiO Siochi Sirk Sival +sixbody sizeI sizeJ sizex @@ -3735,7 +3739,6 @@ tokyo tol tomic toolchain -toolset topologies Toporov Torder @@ -3813,6 +3816,7 @@ typeJ typelabel typeN typesafe +typestr Tz Tzou ub diff --git a/examples/PACKAGES/pod/InP/InP_coefficients.pod b/examples/PACKAGES/pod/InP/InP_coefficients.pod new file mode 100644 index 0000000000..faccfa072d --- /dev/null +++ b/examples/PACKAGES/pod/InP/InP_coefficients.pod @@ -0,0 +1,305 @@ +model_coefficients: 304 0 0 +-3.756301 +914.674801 +-370.747265 +-141.227291 +97.101196 +-59.216907 +9.975284 +87.329406 +-10.969150 +14.411744 +-2.270453 +0.798817 +-0.121719 +114.805574 +-2631.563672 +-869.027988 +-1038.286258 +2431.480027 +31.972558 +139.437898 +29.230520 +39.179879 +-189.998549 +-16.358691 +18.699184 +13.386293 +12.847911 +7.310155 +1.677341 +-9.237073 +-2.228285 +0.137303 +6.446888 +-0.385837 +0.272000 +0.111052 +-1.264342 +-0.711451 +450.463638 +-499.339551 +550.704146 +-1638.278950 +-1311.408792 +-24.811632 +-14.000684 +-39.928838 +44.690659 +35.934791 +-0.425535 +16.810067 +-1.951262 +26.118670 +28.549237 +-1.779991 +-1.907896 +4.278671 +-5.852529 +-11.518503 +0.285252 +0.210939 +-1.153276 +0.744801 +2.765281 +-365.425648 +892.154409 +616.198109 +-808.930752 +-241.494545 +60.329248 +-50.220263 +-89.366098 +47.692144 +12.376825 +-11.304060 +-0.465577 +20.908593 +0.768057 +-0.296966 +-1.434787 +0.089423 +-3.273582 +1.085951 +1.627005 +0.063449 +0.501713 +-0.025247 +-1.127277 +-0.619276 +-950.742997 +11175.508296 +1041.077100 +-8713.542159 +11.024588 +-193.368092 +-17.871650 +193.000879 +-1.221800 +0.201038 +-0.297456 +10.197177 +0.118306 +-2.486775 +0.340362 +0.179573 +2064.315112 +11898.567992 +-7130.614814 +-2965.017905 +-36.665484 +-156.646217 +112.838247 +64.147104 +-0.187677 +8.822337 +-2.516814 +0.833110 +-0.808597 +-3.112898 +2.172317 +1.684634 +-5.757502 +4129.051881 +-2191.420379 +-5640.863432 +2.123836 +-34.024960 +35.525113 +106.884920 +0.406772 +6.365527 +-0.015093 +2.711538 +-0.263692 +-0.604293 +0.790243 +1.092726 +593.864089 +-2785.368577 +-1100.723468 +4424.744171 +-20.023164 +47.252092 +34.797296 +-101.504738 +-1.911711 +-0.110737 +3.998625 +-2.768303 +-0.189524 +0.793288 +-0.405026 +-1.116385 +4.808874 +86.919761 +-10.887316 +14.382398 +-2.271034 +0.710124 +-0.114050 +170.975102 +-54.119757 +-23.638119 +28.153323 +-15.183264 +2.919447 +-185.866164 +-1165.581453 +-1256.610349 +1133.815010 +814.761739 +9.901474 +31.315227 +40.389531 +-39.201068 +-50.871475 +3.268994 +19.578821 +12.684861 +-13.440885 +2.022633 +1.483279 +-4.388229 +0.944679 +3.110080 +-2.163427 +0.160512 +-0.197641 +-1.121333 +1.023995 +2.077494 +-78.649494 +15.740666 +1379.998028 +-267.931116 +-631.685867 +0.779724 +-28.384680 +-104.334909 +40.727192 +54.977623 +4.534376 +13.738711 +2.994157 +-10.950852 +-4.057951 +1.099589 +-1.782453 +3.174200 +2.605193 +-1.835511 +0.063386 +0.124447 +-0.881517 +-0.703873 +0.712785 +-567.114384 +363.884433 +-300.309621 +-1421.591050 +-1083.371637 +45.559123 +-7.797512 +24.330267 +71.829748 +60.799510 +-2.099976 +-9.821055 +-6.488823 +9.426431 +6.385231 +-0.836215 +3.533300 +2.741734 +-3.602311 +-3.863372 +-0.122980 +-0.147120 +-0.378902 +-0.232987 +0.445875 +-237.448044 +442.663085 +2103.157345 +-2382.920549 +0.583996 +-6.353184 +-17.798247 +72.320744 +-0.422216 +1.198193 +3.257409 +6.944903 +0.255190 +-0.887514 +-0.316214 +0.345565 +-242.443134 +4329.522091 +534.487792 +-4571.367114 +-9.591790 +-62.990215 +20.323544 +169.640829 +-2.788146 +2.114659 +7.272737 +21.210166 +0.904969 +-1.154060 +-1.376235 +-1.148246 +129.689234 +5953.209838 +667.823321 +-83.797221 +3.417016 +-126.968016 +-14.909772 +41.785404 +1.415997 +-5.278588 +-0.463605 +8.009232 +0.030211 +-0.765006 +-0.826223 +0.103515 +147.565462 +4404.556538 +3774.833555 +-2327.923578 +-5.422196 +-107.433002 +-70.175719 +74.887031 +-0.424490 +-6.620110 +-2.179770 +5.588150 +-0.222514 +-0.435209 +0.034179 +0.388588 diff --git a/examples/PACKAGES/pod/Ta_Quadratic/Ta_data.pod b/examples/PACKAGES/pod/InP/InP_data.pod similarity index 58% rename from examples/PACKAGES/pod/Ta_Quadratic/Ta_data.pod rename to examples/PACKAGES/pod/InP/InP_data.pod index 2aed5d60dd..7dfc09fd38 100644 --- a/examples/PACKAGES/pod/Ta_Quadratic/Ta_data.pod +++ b/examples/PACKAGES/pod/InP/InP_data.pod @@ -1,20 +1,21 @@ file_format extxyz file_extension xyz -path_to_training_data_set "../Ta/XYZ" -path_to_test_data_set "../Ta/XYZ" +path_to_training_data_set "XYZ" +path_to_test_data_set "XYZ" +path_to_environment_configuration_set "XYZ" fitting_weight_energy 100.0 fitting_weight_force 1.0 -fitting_regularization_parameter 1e-10 +fitting_regularization_parameter 1e-12 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 +basename_for_output_files InP # number of digits after the decimal point for pod coefficients -precision_for_pod_coefficients 5 +precision_for_pod_coefficients 6 diff --git a/examples/PACKAGES/pod/InP/InP_param.pod b/examples/PACKAGES/pod/InP/InP_param.pod new file mode 100644 index 0000000000..08d3cbd412 --- /dev/null +++ b/examples/PACKAGES/pod/InP/InP_param.pod @@ -0,0 +1,48 @@ +# chemical element symbols +species In P + +# periodic boundary conditions +pbc 1 1 1 + +# inner cut-off radius +rin 0.8 + +# outer cut-off radius +rcut 5.0 + +# use only for enviroment-adaptive potentials +number_of_environment_clusters 1 + +# principal_components of local descriptors +number_of_principal_components 2 + +# polynomial degrees for radial basis functions +bessel_polynomial_degree 4 +inverse_polynomial_degree 8 + +# 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_angular_degree 4 + +# four-body linear POD potential +fourbody_number_radial_basis_functions 4 +fourbody_angular_degree 2 + +# five-body linear POD potential +fivebody_number_radial_basis_functions 0 +fivebody_angular_degree 0 + +# six-body linear POD potential +sixbody_number_radial_basis_functions 0 +sixbody_angular_degree 0 + +# seven-body linear POD potential +sevenbody_number_radial_basis_functions 0 +sevenbody_angular_degree 0 + diff --git a/examples/PACKAGES/pod/InP/InP_training_analysis.pod b/examples/PACKAGES/pod/InP/InP_training_analysis.pod new file mode 100644 index 0000000000..c5978b4f41 --- /dev/null +++ b/examples/PACKAGES/pod/InP/InP_training_analysis.pod @@ -0,0 +1,1932 @@ +# Bulk.xyz + config # atoms volume energy DFT energy energy error force DFT force force error + 1 8 198.155287 -38.7142527 -38.72767843 0.001678216549 6.295437039e-14 0 1.001296846e-14 +# EOS.xyz + config # atoms volume energy DFT energy energy error force DFT force force error + 2 4 100.2503986 -19.34119279 -19.33946215 0.0004326611879 0.06711672157 0.004696 0.01040891634 + 3 4 87.78666244 -18.97507078 -18.99216114 0.004272590246 0.0921948579 0.015096 0.01790247305 + 4 4 84.97085209 -18.74485578 -18.75980296 0.003736795403 0.1445652479 0.026416 0.0285296792 + 5 4 82.52133779 -18.48336398 -18.49408247 0.002679621564 0.204459569 0.036914 0.04029250893 + 6 4 80.35345611 -18.19667652 -18.20222587 0.001387336859 0.2609967925 0.055734 0.05282608186 + 7 4 78.40832856 -17.88702363 -17.88899513 0.0004928743307 0.3331404351 0.063452 0.06612221232 + 8 4 76.64099144 -17.5584741 -17.55730043 0.0002934176408 0.4032831914 0.080334 0.08066051764 + 9 4 75.04528905 -17.21835854 -17.2153404 0.0007545342183 0.5044230229 0.087346 0.09875170581 + 10 4 73.54481067 -16.85564361 -16.85354169 0.0005254799895 0.6206833374 0.104282 0.1209082138 + 11 4 95.10547773 -19.29849191 -19.30657301 0.002020274276 0.01107877122 0.007376 0.0006388833987 + 12 4 91.0912603 -19.16490969 -19.18005062 0.003785233211 0.04261952943 0.009042 0.008630599736 + 13 4 133.5525685 -17.87016662 -17.83772988 0.00810918539 0.06023506826 0.00984 0.01168970277 + 14 4 103.4647206 -19.30816075 -19.30159325 0.001641875814 0.08325884021 0.004756 0.01308430812 + 15 4 107.3699915 -19.20438939 -19.20780056 0.0008527912821 0.05045401328 0.000514 0.008330624503 + 16 4 112.3942784 -19.0449568 -19.02621709 0.004684928181 0.06542263844 0.00049 0.01083729791 + 17 4 119.5073443 -18.7116458 -18.68388388 0.00694047906 0.03149028764 0.005468 0.006171255461 + 18 8 125 -24.90402469 -24.90732287 0.0004122725924 2.120052354e-13 0 3.533631721e-14 + 19 8 125.751501 -25.32593152 -25.33111609 0.000648070627 1.855681908e-13 0 2.977248078e-14 + 20 8 125 -34.1306733 -34.11351114 0.00214526983 2.107129136e-14 0 3.234263281e-15 + 21 8 126.506008 -25.73866893 -25.74566406 0.0008743906955 3.068919123e-13 0 5.246728977e-14 + 22 8 127.263527 -26.14241366 -26.1510292 0.001076942689 4.443348898e-13 0 7.630007737e-14 + 23 8 128.024064 -26.53733606 -26.54747446 0.001267300611 3.650160727e-13 0 6.500355809e-14 + 24 8 128.787625 -26.92360021 -26.93512423 0.001440502614 2.360835421e-13 0 3.975523614e-14 + 25 8 129.554216 -27.30136406 -27.3140736 0.001588692672 3.658450198e-13 0 6.010007307e-14 + 26 8 130.323843 -27.67077954 -27.68445805 0.001709813913 1.712785934e-13 0 2.999452538e-14 + 27 8 131.096512 -28.03199274 -28.04644254 0.001806225048 1.533791492e-13 0 2.552587771e-14 + 28 8 131.872229 -28.38514408 -28.400158 0.001876739913 1.164238116e-13 0 2.002102188e-14 + 29 8 132.651 -28.7303685 -28.74572124 0.001919092806 2.893581151e-13 0 4.934941344e-14 + 30 8 133.432831 -29.06779564 -29.0832711 0.001934432199 1.391778701e-13 0 2.377727644e-14 + 31 8 132.651 -35.59602814 -35.60415475 0.001015826139 1.122420132e-13 0 1.753298217e-14 + 32 8 134.217728 -29.3975501 -29.41294262 0.001924065454 3.038656689e-13 0 4.987676938e-14 + 33 8 135.005697 -29.71975159 -29.73481243 0.001882604646 1.515014749e-13 0 2.575717417e-14 + 34 8 135.796744 -30.03451525 -30.04902687 0.001813952399 2.876096334e-13 0 4.718910448e-14 + 35 8 136.590875 -30.34195182 -30.35573414 0.001722790348 3.38400877e-13 0 5.85411349e-14 + 36 8 137.388096 -30.64216792 -30.65504269 0.001609346582 4.726965504e-13 0 8.307706375e-14 + 37 8 138.188413 -30.93526631 -30.94704781 0.001472687261 4.109208686e-13 0 6.826483823e-14 + 38 8 138.991832 -31.22134616 -31.23186179 0.001314453749 1.218514658e-13 0 2.031245542e-14 + 39 8 139.798359 -31.50050329 -31.50962505 0.001140220421 2.015321164e-13 0 3.149332647e-14 + 40 8 140.608 -31.77283045 -31.78044211 0.0009514570428 2.106780929e-13 0 3.373227623e-14 + 41 8 141.420761 -32.03841763 -32.04448224 0.0007580758701 3.291275771e-13 0 5.363764988e-14 + 42 8 140.608 -36.55772971 -36.57876366 0.002629243454 9.469273174e-14 0 1.522483356e-14 + 43 8 142.236648 -32.29735228 -32.30180778 0.0005569373789 2.195289666e-13 0 3.634130034e-14 + 44 8 143.055667 -32.54971961 -32.55240718 0.0003359460022 2.564620474e-13 0 4.091171846e-14 + 45 8 143.877824 -32.79560287 -32.79646907 0.0001082748383 1.388261422e-13 0 2.455905849e-14 + 46 8 144.703125 -33.0350836 -33.0341342 0.000118675575 8.878230772e-14 0 1.40350694e-14 + 47 8 145.531576 -33.26824192 -33.26546078 0.0003476429419 1.107578655e-13 0 1.813364274e-14 + 48 8 146.363183 -33.49515677 -33.4905808 0.0005719957242 1.124750174e-13 0 1.83973207e-14 + 49 8 147.197952 -33.71590615 -33.70959217 0.0007892472898 1.581120916e-13 0 2.577105196e-14 + 50 8 148.035889 -33.93056741 -33.92253789 0.001003690304 1.601498541e-13 0 2.389292468e-14 + 51 8 148.877 -34.13921746 -34.12960189 0.001201946146 1.299656777e-13 0 2.102484853e-14 + 52 8 149.721291 -34.34193297 -34.3308093 0.001390459219 2.114973405e-13 0 3.46759658e-14 + 53 8 148.877 -37.11337019 -37.12608044 0.001588781299 4.438547723e-14 0 6.519942956e-15 + 54 8 150.568768 -34.53879064 -34.52629014 0.001562562212 3.57767505e-13 0 5.77038417e-14 + 55 8 151.419437 -34.72986733 -34.71610965 0.001719709628 1.129431907e-13 0 1.711131237e-14 + 56 8 152.273304 -34.9152403 -34.90038699 0.001856663168 9.209632916e-14 0 1.458092906e-14 + 57 8 153.130375 -35.09498734 -35.07920914 0.001972275052 1.651847707e-13 0 2.654358215e-14 + 58 8 153.990656 -35.26918695 -35.25266839 0.002064820348 2.178540205e-13 0 3.863113533e-14 + 59 8 154.854153 -35.43791845 -35.42083938 0.002134883141 2.275918207e-13 0 3.872827984e-14 + 60 8 155.720872 -35.60126206 -35.58377308 0.002186122667 2.013056315e-13 0 3.199292683e-14 + 61 8 156.590819 -35.75929906 -35.74165769 0.002205171711 3.270916194e-13 0 5.238864897e-14 + 62 8 157.464 -35.9121118 -35.89454795 0.002195480918 1.566843717e-13 0 2.638630055e-14 + 63 8 158.340421 -36.05978373 -36.04247856 0.002163146364 1.471988685e-13 0 2.336556874e-14 + 64 8 157.464 -37.32735447 -37.32262953 0.0005906170637 3.985130574e-14 0 5.104321388e-15 + 65 8 159.220088 -36.20239947 -36.18557035 0.00210364029 1.763124698e-13 0 2.87964097e-14 + 66 8 160.103007 -36.34004476 -36.32389911 0.002018206127 5.697726866e-14 0 9.344377124e-15 + 67 8 160.989184 -36.47280642 -36.45752485 0.001910196485 1.975928454e-13 0 2.924975077e-14 + 68 8 161.878625 -36.60077232 -36.58655803 0.001776786564 1.555190252e-13 0 2.624289674e-14 + 69 8 162.771336 -36.72403126 -36.71102998 0.00162516042 1.412460708e-13 0 2.504940699e-14 + 70 8 163.667323 -36.84267287 -36.83107858 0.00144928636 2.003522571e-13 0 3.272844958e-14 + 71 8 164.566592 -36.95678745 -36.94671248 0.001259371456 2.802794912e-13 0 4.816517555e-14 + 72 8 165.469149 -37.06646582 -37.05803876 0.001053382772 1.501596136e-13 0 2.396925251e-14 + 73 8 166.375 -37.17179911 -37.16514204 0.0008321341323 5.511762558e-14 0 8.525587643e-15 + 74 8 167.284151 -37.27287855 -37.26803657 0.0006052473145 9.834232472e-14 0 1.762479052e-14 + 75 8 166.375 -37.24337005 -37.23643929 0.0008663449821 7.193383609e-14 0 9.097007751e-15 + 76 8 168.196608 -37.3697952 -37.36679872 0.0003745603949 1.247370278e-13 0 2.163547119e-14 + 77 8 169.112377 -37.46263974 -37.46157771 0.0001327534529 1.644603556e-13 0 2.518124598e-14 + 78 8 170.031464 -37.55150212 -37.55237754 0.0001094280476 1.000876217e-13 0 1.617918762e-14 + 79 8 170.953875 -37.63647131 -37.6392704 0.0003498868469 1.237283914e-13 0 2.00719071e-14 + 80 8 171.879616 -37.71763497 -37.72232209 0.0005858902543 1.1589855e-13 0 1.841351146e-14 + 81 8 172.808693 -37.79507914 -37.80157766 0.0008123150872 1.562897313e-13 0 2.502165142e-14 + 82 8 173.741112 -37.86888791 -37.87745843 0.001071315566 9.890270877e-14 0 1.448378454e-14 + 83 8 174.676879 -37.93914308 -37.94934999 0.001275863594 4.971171589e-14 0 7.433868336e-15 + 84 8 175.616 -38.00592389 -38.01765923 0.001466916916 2.357725957e-13 0 4.002816597e-14 + 85 8 176.558481 -38.06930668 -38.08244214 0.001641931917 9.399919782e-14 0 1.53233907e-14 + 86 8 175.616 -36.91159044 -36.92303918 0.0014310923 1.339836444e-13 0 2.427135868e-14 + 87 8 177.504328 -38.12936462 -38.14373382 0.001796150207 8.346269116e-14 0 1.405126016e-14 + 88 8 178.453547 -38.18616744 -38.20162048 0.001931630609 7.090560403e-14 0 1.097039126e-14 + 89 8 179.406144 -38.23978123 -38.25614712 0.00204573683 2.0462588e-13 0 3.108624469e-14 + 90 8 180.362125 -38.29026825 -38.30736293 0.002136834871 1.332582387e-13 0 2.197316403e-14 + 91 8 181.321496 -38.33768682 -38.35533434 0.002205940396 2.138344018e-13 0 3.67298784e-14 + 92 8 182.284263 -38.3820912 -38.40014053 0.002256166343 9.767720229e-14 0 1.706389659e-14 + 93 8 183.250432 -38.42353164 -38.44178079 0.002281143553 5.579154461e-14 0 9.012466699e-15 + 94 8 184.220009 -38.46205442 -38.48039501 0.002292573571 1.271642832e-13 0 2.144118216e-14 + 95 8 185.193 -38.497702 -38.51595497 0.002281621574 9.534022447e-14 0 1.486658019e-14 + 96 8 186.169411 -38.53051324 -38.54855587 0.00225532886 1.343761993e-13 0 2.300705922e-14 + 97 8 185.193 -36.40728171 -36.42582461 0.002317863018 3.728109844e-14 0 5.238184183e-15 + 98 8 187.149248 -38.56052374 -38.57822204 0.002212287058 1.210326629e-13 0 2.001177002e-14 + 99 8 188.132517 -38.58776624 -38.60507996 0.002164215247 1.827469955e-13 0 2.709002004e-14 + 100 8 189.119224 -38.61227107 -38.62911702 0.002105744085 1.11818836e-13 0 1.864538616e-14 + 101 8 190.109375 -38.63406676 -38.65037737 0.002038826527 4.734898438e-14 0 8.10983225e-15 + 102 8 191.102976 -38.65318065 -38.66895988 0.00197240398 4.766169611e-13 0 7.396340485e-14 + 103 8 192.100033 -38.66963957 -38.68491445 0.001909359901 3.949754638e-14 0 6.445365075e-15 + 104 8 193.100552 -38.68347056 -38.69826028 0.0018487148 6.030624548e-14 0 9.948928255e-15 + 105 8 194.104539 -38.69470157 -38.70903762 0.001792006038 9.213473725e-14 0 1.528927448e-14 + 106 8 195.112 -38.70336215 -38.71735037 0.001748527793 1.109561733e-13 0 1.686310235e-14 + 107 8 196.122941 -38.70948404 -38.72316577 0.001710215895 6.429045107e-14 0 1.149239847e-14 + 108 8 195.112 -35.7778757 -35.78277343 0.00061221655 2.431616332e-14 0 3.581646775e-15 + 109 8 197.137368 -38.71310172 -38.72661844 0.001689590126 5.158256025e-14 0 8.690964615e-15 + 110 8 198.155287 -38.7142527 -38.72767843 0.001678216549 6.295437039e-14 0 1.001296846e-14 + 111 8 199.176704 -38.71297772 -38.72640441 0.001678335766 1.486959607e-13 0 2.249314739e-14 + 112 8 200.201625 -38.70932072 -38.72284809 0.001690921727 7.483452632e-14 0 1.283796564e-14 + 113 8 201.230056 -38.70332849 -38.71708504 0.001719568745 7.139256276e-14 0 1.011472084e-14 + 114 8 202.262003 -38.69505027 -38.70909826 0.001755998973 6.964302642e-14 0 1.121769778e-14 + 115 8 203.297472 -38.68453702 -38.69896441 0.001803424077 1.020500203e-13 0 1.557006477e-14 + 116 8 204.336469 -38.67184068 -38.68669915 0.001857308565 9.935211667e-14 0 1.716416722e-14 + 117 8 205.379 -38.65701341 -38.67236985 0.001919555536 8.333501328e-14 0 1.49671038e-14 + 118 8 206.425071 -38.64010685 -38.65601166 0.001988100659 3.510246123e-14 0 6.352462501e-15 + 119 8 205.379 -35.04118028 -35.02683676 0.001792939447 5.615527816e-15 0 6.958062516e-16 + 120 8 207.474688 -38.62117171 -38.63763952 0.002058475908 6.191049403e-14 0 9.797560927e-15 + 121 8 208.527857 -38.60025741 -38.61729887 0.002130182498 4.810564452e-14 0 6.746513099e-15 + 122 8 209.584584 -38.57741206 -38.59504202 0.002203745201 3.945529953e-14 0 6.402572273e-15 + 123 8 210.644875 -38.55268252 -38.57091757 0.002279381049 3.772859434e-14 0 6.467852489e-15 + 124 8 211.708736 -38.52611453 -38.54483207 0.002339693042 8.68311853e-14 0 1.290685828e-14 + 125 8 212.776173 -38.49775274 -38.51692278 0.002396254899 3.451612793e-13 0 6.290533311e-14 + 126 8 213.847192 -38.46764082 -38.48723722 0.002449550179 4.41984402e-14 0 7.712912938e-15 + 127 8 214.921799 -38.4358214 -38.45580608 0.002498084944 1.269043508e-13 0 2.107469528e-14 + 128 8 216 -38.40233612 -38.422684 0.002543485334 5.178925639e-15 0 5.181042106e-16 + 129 8 217.081801 -38.36722559 -38.38786893 0.002580417895 6.979659645e-14 0 1.140349389e-14 + 130 8 216 -34.21158269 -34.18453509 0.003380949962 3.119928743e-14 0 4.049035345e-15 + 131 8 218.167208 -38.33052941 -38.35142959 0.002612522434 9.714451465e-17 0 8.67361738e-18 + 132 8 219.256227 -38.29228617 -38.31340288 0.002639588684 5.951022605e-14 0 9.329342854e-15 + 133 8 220.348864 -38.25253343 -38.27379064 0.002657151706 5.712469007e-14 0 9.946904411e-15 + 134 8 221.445125 -38.21130771 -38.2326318 0.002665511067 1.117880436e-13 0 1.878705524e-14 + 135 8 222.545016 -38.16864453 -38.18997547 0.002666367484 2.071965859e-13 0 3.870977613e-14 + 136 8 223.648543 -38.12457835 -38.14582587 0.002655939449 2.058408579e-16 0 2.197316403e-17 + 137 8 224.755712 -38.07914262 -38.10025273 0.00263876354 1.468138905e-13 0 2.651698305e-14 + 138 8 225.866529 -38.03236973 -38.05325723 0.002610937175 3.451317917e-13 0 5.350812386e-14 + 139 8 226.981 -37.98429105 -38.00487503 0.002572997512 9.348719405e-14 0 1.632837384e-14 + 140 8 228.099131 -37.9349369 -37.95513783 0.002525116488 4.463150068e-14 0 7.762309314e-15 + 141 8 226.981 -33.30623515 -33.27865849 0.003447082751 3.066484039e-14 0 3.719670099e-15 + 142 8 229.220928 -37.88433656 -37.90408137 0.002468100725 7.275703143e-14 0 1.291443804e-14 + 143 8 230.346397 -37.8325183 -37.85171281 0.002399313766 4.66192054e-14 0 6.945832798e-15 + 144 8 231.475544 -37.77950932 -37.79810848 0.002324894385 5.252166826e-14 0 8.808925811e-15 + 145 8 232.608375 -37.72533583 -37.74324741 0.002238947175 3.588132565e-14 0 5.677171696e-15 + 146 8 233.744896 -37.670023 -37.68719388 0.002146360408 2.113801663e-16 0 2.312964635e-17 + 147 8 234.885113 -37.61359498 -37.62994505 0.002043758624 3.926512526e-14 0 6.50290007e-15 + 148 8 236.029032 -37.55607495 -37.57155158 0.001934578684 2.313889636e-16 0 2.428612866e-17 + 149 8 237.176659 -37.49748509 -37.51201295 0.001815983009 7.050563351e-14 0 1.218816714e-14 + 150 8 238.328 -37.4378466 -37.45137883 0.001691528718 8.610722362e-14 0 1.480181718e-14 + 151 8 239.483061 -37.37717976 -37.38964471 0.001558118906 1.122677318e-13 0 1.849215225e-14 + 152 8 238.328 -32.34565431 -32.32877917 0.002109392889 5.347012123e-14 0 7.420001288e-15 + 153 8 240.641848 -37.3155039 -37.32690218 0.001424784768 1.282578933e-13 0 2.131049966e-14 + 154 8 241.804367 -37.25283747 -37.26310398 0.001283313566 1.755416734e-16 0 2.312964635e-17 + 155 8 242.970624 -37.18919804 -37.19829938 0.001137667388 1.269457894e-13 0 1.903916839e-14 + 156 8 244.140625 -37.12460235 -37.13249287 0.0009863152027 3.905555679e-16 0 3.469446952e-17 + 157 8 245.314376 -37.05906633 -37.06573351 0.0008333969247 5.477212815e-14 0 8.960424995e-15 + 158 8 246.491883 -36.99260518 -36.99800673 0.0006751932201 2.443436684e-16 0 2.891205793e-17 + 159 8 247.673152 -36.92523337 -36.92936808 0.0005168385399 5.486786255e-14 0 9.078386191e-15 + 160 8 248.858189 -36.85696471 -36.85984394 0.0003599036232 5.262621823e-14 0 9.020562075e-15 + 161 8 250.047 -36.78781241 -36.78941041 0.0001997499438 7.783706765e-14 0 1.266984203e-14 + 162 8 251.239591 -36.71778913 -36.7181241 4.187110571e-05 4.870181213e-14 0 7.541999432e-15 + 163 8 250.047 -31.3510836 -31.3503623 9.016217495e-05 1.569220498e-14 0 2.183565217e-15 + 164 8 252.435968 -36.64690705 -36.64599517 0.0001139850724 2.379336331e-13 0 3.776146063e-14 + 165 8 253.636137 -36.57517793 -36.57305178 0.00026576878 4.056560936e-14 0 7.317641863e-15 + 166 8 254.840104 -36.50261319 -36.49930427 0.000413614742 1.814593691e-13 0 2.581557653e-14 + 167 8 256.047875 -36.42922397 -36.42477099 0.0005566230344 1.022426573e-13 0 1.601352153e-14 + 168 8 257.259456 -36.35502125 -36.34947486 0.0006932991765 3.653506149e-14 0 6.150751205e-15 + 169 8 258.474853 -36.28001589 -36.27344512 0.0008213459657 3.73558748e-14 0 6.285192274e-15 + 170 8 259.694072 -36.20421873 -36.19668091 0.0009422270264 4.680769173e-14 0 7.939540229e-15 + 171 8 260.917119 -36.1276407 -36.11922297 0.001052215787 3.570650705e-14 0 6.676950659e-15 + 172 8 262.144 -36.0502929 -36.04105252 0.001155047317 3.164944978e-14 0 5.187690555e-15 + 173 8 263.374721 -35.9721867 -35.96224375 0.001242869229 2.373291208e-14 0 4.245446587e-15 + 174 8 262.144 -30.34107885 -30.35511573 0.00175461053 9.949895322e-15 0 1.499490413e-15 + 175 8 264.609288 -35.89333385 -35.88278096 0.001319111554 2.399980443e-14 0 4.296042688e-15 + 176 8 265.847707 -35.81374655 -35.80269997 0.001380823022 1.53288925e-13 0 2.661470581e-14 + 177 8 267.089984 -35.73343759 -35.72200298 0.001429326121 4.931196072e-14 0 8.483665159e-15 + 178 8 268.336125 -35.65242041 -35.6407125 0.001463488356 5.540145777e-14 0 9.575673587e-15 + 179 8 269.586136 -35.57070923 -35.55886015 0.001481134516 6.886729291e-14 0 9.846001329e-15 + 180 8 270.840023 -35.48831913 -35.47646305 0.001482009877 2.532194272e-14 0 4.016896769e-15 + 181 8 272.097792 -35.40526615 -35.3935225 0.001467956588 1.04347186e-14 0 1.733422433e-15 + 182 8 273.359449 -35.32156737 -35.31009264 0.001434341872 4.810403626e-14 0 8.166789004e-15 + 183 8 274.625 -35.23724099 -35.22614866 0.00138654154 1.570092459e-16 0 9.251858539e-18 + 184 8 275.894451 -35.15230639 -35.1417472 0.001319898604 4.509058799e-14 0 7.042688192e-15 + 185 8 274.625 -29.33006454 -29.35393013 0.002983199063 3.57676204e-14 0 5.310739806e-15 + 186 8 277.167808 -35.06678419 -35.05687287 0.001238915486 7.637055038e-15 0 1.12771482e-15 + 187 8 278.445077 -34.98069633 -34.9715572 0.001142390801 2.329455436e-14 0 3.108190788e-15 + 188 8 279.726264 -34.89406602 -34.8858121 0.001031740415 7.414847091e-14 0 1.186897802e-14 + 189 8 281.011375 -34.80691785 -34.799632 0.0009107312251 2.746830084e-14 0 5.106013991e-15 + 190 8 282.300416 -34.71927769 -34.71307221 0.0007756848171 2.745638995e-14 0 4.450722198e-15 + 191 8 283.593393 -34.63117271 -34.62612209 0.0006313269271 1.570092459e-16 0 9.251858539e-18 + 192 8 284.890312 -34.54263129 -34.53878034 0.000481368577 2.862476485e-14 0 4.862863584e-15 + 193 8 286.191179 -34.45368296 -34.45107583 0.0003258910512 5.265851305e-14 0 7.905424001e-15 + 194 8 287.496 -34.36435824 -34.36303293 0.0001656643411 1.662148733e-14 0 2.680509171e-15 + 195 8 288.804781 -34.27468853 -34.27464647 5.257493757e-06 5.214850899e-14 0 7.762742995e-15 + 196 8 287.496 -28.33047355 -28.35738967 0.003364515461 1.333290575e-14 0 1.868992272e-15 + 197 8 290.117528 -34.18470585 -34.18592693 0.0001526344838 3.029701906e-14 0 4.645155788e-15 + 198 8 291.434247 -34.09444268 -34.09689499 0.0003065386318 2.346379319e-12 0 2.589744825e-13 + 199 8 292.754944 -34.00393162 -34.00755617 0.0004530684547 2.190242114e-14 0 3.889105473e-15 + 200 8 294.079625 -33.91320512 -33.91794704 0.0005927398445 3.573916544e-14 0 4.989317697e-15 + 201 8 295.408296 -33.82229509 -33.82804203 0.0007183672728 1.411445588e-14 0 2.299701228e-15 + 202 8 296.740963 -33.73123252 -33.73788122 0.0008310876064 2.339234133e-14 0 3.838653932e-15 + 203 8 298.077632 -33.64004702 -33.64736294 0.0009144900027 7.270157167e-14 0 1.328313906e-14 + 204 8 299.418309 -33.54876637 -33.55659435 0.0009784975969 2.531275734e-14 0 4.076509818e-15 + 205 8 300.763 -33.457416 -33.46561093 0.001024366444 2.022302224e-14 0 3.487408568e-15 + 206 8 302.111711 -33.36601847 -33.3743829 0.00104555316 3.71540055e-14 0 5.922436297e-15 + 207 8 300.763 -27.3558672 -27.37270755 0.002105043639 6.801455845e-15 0 1.068875406e-15 + 208 8 303.464448 -33.27459297 -33.28297289 0.001047489826 2.894496873e-14 0 4.739788567e-15 + 209 8 304.821217 -33.18315474 -33.19133336 0.001022326921 3.259815066e-15 0 5.348911418e-16 + 210 8 306.182024 -33.09171463 -33.09950342 0.000973598312 1.987655439e-14 0 3.029830076e-15 + 211 8 307.546875 -33.0002786 -33.00751748 0.0009048595549 5.724272058e-16 0 7.372574773e-17 + 212 8 308.915776 -32.90884736 -32.91533251 0.0008106439924 2.969336915e-14 0 4.270338062e-15 + 213 8 310.288733 -32.81741604 -32.82301548 0.0006999296728 3.638078291e-14 0 5.845290795e-15 + 214 8 311.665752 -32.72597407 -32.73053126 0.0005696485291 3.554285564e-14 0 5.735424975e-15 + 215 8 313.046839 -32.63450511 -32.63790296 0.0004247317369 1.920360169e-14 0 3.071617035e-15 + 216 8 314.432 -32.54298721 -32.54515815 0.0002713677551 2.206421661e-14 0 3.047227003e-15 + 217 8 315.821241 -32.4513932 -32.45227645 0.0001104062309 1.696693749e-14 0 2.950952109e-15 + 218 8 314.432 -26.41476214 -26.40530829 0.001181731704 8.499993976e-15 0 1.059330411e-15 + 219 8 317.214568 -32.35969125 -32.35928901 5.027948983e-05 8.683430364e-16 0 9.295226625e-17 + 220 8 318.611987 -32.26784566 -32.26618801 0.0002072059961 2.710250122e-14 0 4.492425583e-15 + 221 8 320.013504 -32.17581793 -32.17302023 0.000349712615 1.771873954e-14 0 2.938924806e-15 + 222 8 321.419125 -32.08356797 -32.07976201 0.0004757453347 3.125763876e-14 0 5.322310631e-15 + 223 8 322.828856 -31.99105549 -31.98643212 0.0005779210837 2.095383931e-14 0 3.222980693e-15 + 224 8 324.242703 -31.89824145 -31.89303281 0.0006510798232 2.56159825e-14 0 3.895179546e-15 + 225 8 325.660672 -31.80508954 -31.7995724 0.0006896426916 1.875853974e-14 0 3.20064627e-15 + 226 8 327.082769 -31.71156751 -31.70606552 0.0006877482544 1.36470958e-14 0 2.239319284e-15 + 227 8 328.509 -31.61764821 -31.61253519 0.0006391277609 2.652773658e-14 0 4.789031251e-15 + 228 8 329.939371 -31.52331038 -31.51893479 0.0005469485826 1.284542182e-15 0 1.866450864e-16 + 229 8 328.509 -25.49085762 -25.46097964 0.003734747468 1.534653847e-14 0 2.988530214e-15 + 230 8 331.373888 -31.42853884 -31.4253319 0.0004008673531 2.05548609e-14 0 3.591261645e-15 + 231 8 332.812557 -31.33332432 -31.33169244 0.0002039846397 2.70987135e-14 0 3.897203359e-15 + 232 8 334.255384 -31.23766276 -31.23803137 4.607659399e-05 1.894219518e-14 0 3.330171002e-15 + 233 8 335.702375 -31.14155432 -31.14436083 0.0003508138795 9.535431147e-15 0 1.604603333e-15 + 234 8 337.153536 -31.04500223 -31.05068709 0.0007106077219 2.31834593e-14 0 3.821042989e-15 + 235 8 338.608873 -30.94801169 -30.95700452 0.001124104108 1.67181359e-14 0 2.393068822e-15 + 236 8 340.068392 -30.85058901 -30.86332188 0.001591608606 1.326796759e-15 0 2.320297375e-16 + 237 8 341.532099 -30.75274107 -30.7696645 0.002115428921 1.711505543e-14 0 2.629317174e-15 + 238 8 85.184 -6.91781874 -6.89948088 0.002292232518 6.062844144e-13 0 1.069894374e-13 + 239 8 91.125 -14.4369629 -14.49028692 0.006665502722 6.570926909e-14 0 8.974079527e-15 + 240 8 97.336 -20.61472513 -20.57465163 0.005009187374 1.541506384e-13 0 2.276862626e-14 + 241 8 103.823 -25.39405133 -25.39183412 0.00027715116 1.714429587e-13 0 2.876404916e-14 + 242 8 106.496424 -10.11137872 -10.10117778 0.001275117386 3.50156475e-13 0 5.365673184e-14 + 243 8 107.171875 -10.82724647 -10.82503199 0.0002768093864 1.796789613e-13 0 3.026080544e-14 + 244 8 107.850176 -11.53159366 -11.53495144 0.0004197227736 4.009486356e-13 0 6.738591167e-14 + 245 8 108.531333 -12.22433983 -12.23116604 0.0008532764122 5.039310433e-13 0 8.115094245e-14 + 246 8 109.215352 -12.90538942 -12.91385694 0.001058440046 5.293258224e-13 0 9.104840724e-14 + 247 8 109.902239 -13.5746364 -13.58325688 0.001077560422 4.187060782e-13 0 7.106410368e-14 + 248 8 110.592 -14.23196999 -14.23951689 0.0009433627983 5.761754402e-13 0 9.126756064e-14 + 249 8 111.284641 -14.87728149 -14.88293767 0.0007070224316 4.215786774e-13 0 6.742870151e-14 + 250 8 110.592 -29.12285109 -29.14301897 0.002520984578 4.734798814e-13 0 9.362798312e-14 + 251 8 111.980168 -15.51047199 -15.51365959 0.0003984501844 2.968979096e-13 0 4.694508671e-14 + 252 8 112.678587 -16.13146066 -16.13191396 5.666232307e-05 5.547563893e-13 0 9.89856345e-14 + 253 8 113.379904 -16.74019321 -16.7378373 0.0002944886148 2.834106387e-13 0 4.76389761e-14 + 254 8 114.084125 -17.3366497 -17.33167358 0.0006220155195 4.21587897e-13 0 7.079348681e-14 + 255 8 114.791256 -17.92085102 -17.91364266 0.0009010450975 3.729284003e-13 0 6.771782209e-14 + 256 8 115.501303 -18.49286288 -18.48381583 0.001130880891 4.648654953e-13 0 7.574901354e-14 + 257 8 116.214272 -19.0527966 -19.04244391 0.001294086215 3.292879254e-13 0 5.488954199e-14 + 258 8 116.930169 -19.60080602 -19.58971605 0.001386246836 3.850707147e-13 0 6.099865983e-14 + 259 8 117.649 -20.13708059 -20.12573781 0.001417847131 3.289284989e-13 0 4.895331825e-14 + 260 8 118.370771 -20.66183554 -20.6507896 0.001380742126 2.535487533e-13 0 3.824140079e-14 + 261 8 117.649 -32.02300608 -32.00130598 0.002712512827 3.874663669e-14 0 6.256966081e-15 + 262 8 119.095488 -21.17530111 -21.16497388 0.001290903566 2.125979266e-13 0 3.4434261e-14 + 263 8 119.823157 -21.67771287 -21.66845698 0.001156985748 3.804940913e-13 0 6.542451766e-14 + 264 8 120.553784 -22.16930493 -22.16144572 0.000982401647 3.990974066e-13 0 6.578707486e-14 + 265 8 121.287375 -22.65030645 -22.64405994 0.0007808133394 2.212756636e-13 0 3.890522164e-14 + 266 8 122.023936 -23.12094027 -23.1164565 0.000560471146 3.262720311e-13 0 5.239963556e-14 + 267 8 122.763473 -23.58142268 -23.5788357 0.0003233728012 4.553300312e-13 0 7.597221463e-14 + 268 8 123.505992 -24.03196333 -24.0313324 7.886635967e-05 4.175910148e-13 0 6.208690969e-14 + 269 8 124.251499 -24.47276521 -24.47411204 0.0001683534951 2.392421678e-13 0 3.637252536e-14 +# Shear.xyz + config # atoms volume energy DFT energy energy error force DFT force force error + 270 8 200.201625 -17.79471256 -17.80095971 0.0007808943549 34.93477356 34.86621731 0.03191102677 + 271 8 200.201625 -18.68131072 -18.68039145 0.0001149088037 31.08995391 31.10971303 0.003742291359 + 272 8 200.201625 -18.74685769 -18.74847294 0.0002019057056 30.88282161 30.87108939 0.003456164845 + 273 8 200.201625 -18.65916996 -18.66050137 0.0001664263927 31.37021721 31.34839688 0.009204293634 + 274 8 200.201625 -17.73748678 -17.72226746 0.001902415593 35.40937207 35.4991231 0.0142104708 + 275 8 200.201625 -18.61000368 -18.61280191 0.0003497790838 31.47876955 31.47627702 0.002761618926 + 276 8 200.201625 -18.77766091 -18.77926611 0.0002006502929 30.77406064 30.75201265 0.004214743953 + 277 8 200.201625 -18.79982567 -18.80113601 0.0001637926777 30.74392831 30.70416935 0.006518734155 + 278 8 200.201625 -18.58554482 -18.58622087 8.450631245e-05 31.52252685 31.5380751 0.004538920752 + 279 8 200.201625 -18.78245915 -18.78332932 0.0001087716614 30.69357846 30.68923945 0.002368663503 + 280 8 200.201625 -18.40542292 -18.40404938 0.0001716925824 32.51641699 32.52382115 0.008549844722 + 281 8 200.201625 -18.74365937 -18.74540916 0.0002187242825 30.94868656 30.92452189 0.006196425127 + 282 8 200.201625 -18.73340995 -18.73534983 0.0002424845716 31.0044134 30.97910612 0.007054911197 + 283 8 200.201625 -18.81192209 -18.8134127 0.0001863266112 30.70470325 30.65993833 0.005916601744 + 284 8 200.201625 -18.41561988 -18.41797991 0.000295003715 32.38543817 32.38768122 0.003707707844 + 285 8 200.201625 -18.53172166 -18.53413003 0.0003010467036 31.87678518 31.87155042 0.005322935135 + 286 8 200.201625 -18.66871087 -18.66826987 5.512517065e-05 31.15085106 31.16861455 0.003448192799 + 287 8 200.201625 -18.60630606 -18.60668646 4.754950839e-05 31.638129 31.62081008 0.01069633397 + 288 8 200.201625 -18.78703551 -18.78856529 0.0001912223505 30.74769626 30.72095906 0.004614933764 + 289 8 200.201625 -18.75601817 -18.75078927 0.0006536128035 30.72886768 30.76438387 0.005060735942 + 290 8 200.201625 -17.71296853 -17.6965478 0.002052591689 35.51566879 35.60991003 0.01467006237 + 291 8 200.201625 -18.8060086 -18.80734294 0.0001667924431 30.69929973 30.66240229 0.005085009823 + 292 8 200.201625 -18.4402779 -18.44403239 0.0004693118293 32.20593511 32.21047876 0.003008847626 + 293 8 200.201625 -18.76046879 -18.75459744 0.0007339184468 30.70666375 30.74413719 0.005272894402 + 294 8 200.201625 -18.79472227 -18.79627044 0.0001935215634 30.74357473 30.70910318 0.00583981198 + 295 8 200.201625 -18.60047946 -18.60324612 0.0003458330895 31.52369628 31.52149145 0.002816483228 + 296 8 200.201625 -18.7763928 -18.77797969 0.0001983608365 30.79719568 30.77105182 0.005170206322 + 297 8 200.201625 -17.99341029 -17.98503897 0.001046415267 34.31096338 34.36653327 0.01164237971 + 298 8 200.201625 -18.37173163 -18.37037378 0.0001697312151 32.43822909 32.44728299 0.01376241699 + 299 8 200.201625 -17.92082459 -17.92840077 0.0009470223867 34.42098283 34.39992976 0.01884848552 + 300 8 200.201625 -18.7113951 -18.70860148 0.0003492025083 30.94161098 30.96851628 0.004755659814 + 301 8 200.201625 -18.6174017 -18.62007006 0.0003335452593 31.44098312 31.4396675 0.002580793843 + 302 8 200.201625 -18.7903804 -18.79181491 0.0001793131331 30.7717244 30.73621055 0.00650619702 + 303 8 200.201625 -17.48896318 -17.46686581 0.00276217097 36.45188247 36.57228469 0.01586654641 + 304 8 200.201625 -18.31557449 -18.31273123 0.0003554069066 32.91519238 32.93362227 0.008954961101 + 305 8 200.201625 -18.68575479 -18.68749049 0.0002169624774 31.22426202 31.20308311 0.007750558835 + 306 8 200.201625 -18.78061217 -18.78234842 0.0002170306968 30.78477496 30.75647741 0.00553669563 + 307 8 200.201625 -18.60943951 -18.61129142 0.0002314892156 31.55615458 31.54266348 0.007130226705 + 308 8 200.201625 -18.5311923 -18.52820447 0.0003734792538 31.73390885 31.75743244 0.01012461657 + 309 8 200.201625 -18.77387262 -18.77505826 0.000148205456 30.74112847 30.73398918 0.002733038061 + 310 8 200.201625 -18.58067055 -18.57500616 0.0007080488231 31.50537443 31.53640779 0.01066851507 + 311 8 200.201625 -18.55145809 -18.55015461 0.0001629348715 31.65379585 31.67509141 0.007984006191 + 312 8 200.201625 -18.37653331 -18.37420108 0.0002915287341 32.6595118 32.67186311 0.008987075052 + 313 8 200.201625 -18.71583901 -18.7179035 0.000258060751 31.03272384 31.01949294 0.004207417666 + 314 8 200.201625 -18.58381614 -18.58658856 0.0003465519189 31.60629169 31.60336662 0.003040255058 + 315 8 200.201625 -18.77610886 -18.77718203 0.0001341459021 30.72282175 30.71814784 0.002425657383 + 316 8 200.201625 -18.75796466 -18.75225185 0.0007141017001 30.71864407 30.75561682 0.00516668529 + 317 8 200.201625 -18.77335694 -18.77487112 0.0001892720172 30.77404517 30.75754523 0.003734059321 + 318 8 200.201625 -18.72405782 -18.71489311 0.001145589008 30.85620205 30.90256808 0.008304057116 + 319 8 200.201625 -18.70631832 -18.70510716 0.0001513946562 30.97997893 30.99982205 0.003064392424 + 320 8 200.201625 -18.81183536 -18.81319946 0.0001705130485 30.70732255 30.662448 0.006096512607 + 321 8 200.201625 -18.71878699 -18.72005006 0.0001578839795 31.12953881 31.09704221 0.01002346822 + 322 8 200.201625 -18.79162091 -18.79330401 0.0002103875878 30.69661882 30.67688332 0.003967257941 + 323 8 200.201625 -18.52725216 -18.52778204 6.623448288e-05 31.9641801 31.95690629 0.009163032159 + 324 8 200.201625 -18.66889335 -18.67017106 0.0001597139049 31.33113028 31.30774889 0.009376754725 + 325 8 200.201625 -18.31539614 -18.31454982 0.0001057898218 32.68570957 32.68887063 0.01515947899 + 326 8 200.201625 -18.254927 -18.25209125 0.0003544691368 33.16940068 33.19261114 0.008783479209 + 327 8 200.201625 -18.26413507 -18.26131527 0.0003524755226 33.13206332 33.15470979 0.008909115865 + 328 8 200.201625 -18.24007558 -18.23576264 0.0005391180436 33.25276664 33.28122576 0.01027395775 + 329 8 200.201625 -18.57666044 -18.57834149 0.0002101317817 31.57566056 31.58679659 0.003080636489 + 330 8 200.201625 -18.08822323 -18.08078438 0.0009298565127 33.91362946 33.96153029 0.01194345816 + 331 8 200.201625 -18.15965061 -18.1541524 0.0006872759132 33.59878801 33.63615606 0.01079241239 + 332 8 200.201625 -18.8066187 -18.80812943 0.0001888408782 30.70054171 30.66226658 0.005175781922 + 333 8 200.201625 -18.4603311 -18.45862654 0.0002130697624 32.05072636 32.06781818 0.01113170016 + 334 8 200.201625 -18.73243182 -18.7335534 0.0001401975154 31.06930527 31.03524619 0.009803334608 + 335 8 200.201625 -18.75269448 -18.7539424 0.0001559900061 30.83061491 30.82626173 0.002471925017 + 336 8 200.201625 -18.53046844 -18.53130782 0.0001049223655 31.93742051 31.93006002 0.008522676078 + 337 8 200.201625 -18.74204433 -18.7439547 0.0002387958702 30.95250236 30.92891554 0.00607790143 + 338 8 200.201625 -18.76652202 -18.76303401 0.0004360007585 30.69293481 30.72149267 0.003612915298 + 339 8 200.201625 -18.43371814 -18.4360942 0.0002970075472 32.30744355 32.30814542 0.003831153263 + 340 8 200.201625 -18.78218359 -18.78367204 0.0001860566463 30.77701822 30.74912507 0.005223233425 + 341 8 200.201625 -18.79078199 -18.79244275 0.0002075954249 30.73755765 30.70862765 0.004923715718 + 342 8 200.201625 -18.29590915 -18.29577447 1.683497049e-05 32.95114584 32.96461268 0.005738863491 + 343 8 200.201625 -18.73699166 -18.73895195 0.000245036339 30.98694742 30.96153909 0.006932313217 + 344 8 200.201625 -18.6916694 -18.6904893 0.0001475119687 31.0422557 31.06287081 0.003761778143 + 345 8 200.201625 -18.33823586 -18.34245514 0.0005274102583 32.67607485 32.68013891 0.003702734807 + 346 8 200.201625 -18.81117201 -18.81259133 0.0001774147742 30.702053 30.65860384 0.005525990939 + 347 8 200.201625 -18.78157556 -18.78237822 0.0001003320877 30.69308742 30.6903958 0.002166875226 + 348 8 200.201625 -18.6353546 -18.63785271 0.0003122635114 31.39303227 31.38434601 0.004271715397 + 349 8 200.201625 -17.97637235 -17.96935603 0.0008770401442 34.36711136 34.41867543 0.009994588462 + 350 8 200.201625 -18.21251891 -18.21701939 0.0005625599476 33.22500817 33.23095042 0.004911595025 + 351 8 200.201625 -18.79785493 -18.79944176 0.0001983542713 30.70066752 30.6722835 0.004606548638 + 352 8 200.201625 -17.79089005 -17.79759717 0.0008383894168 34.95205275 34.88650965 0.03105842935 + 353 8 200.201625 -18.75483551 -18.75020027 0.0005794046586 30.73867042 30.77170688 0.004737204946 + 354 8 200.201625 -18.75607824 -18.74299885 0.0016349232 30.70092482 30.75814585 0.01075952715 + 355 8 200.201625 -18.66878405 -18.66399993 0.0005980153948 31.1176618 31.15107427 0.007534294607 + 356 8 200.201625 -18.81232452 -18.81376554 0.0001801277731 30.70368888 30.65881666 0.005852363906 + 357 8 200.201625 -18.70149589 -18.69316334 0.001041568482 30.9587837 31.00233788 0.008714435205 + 358 8 200.201625 -17.6306123 -17.6399728 0.001170062677 35.6312084 35.54302363 0.03809034723 + 359 8 200.201625 -18.79173552 -18.79301852 0.0001603755312 30.79879848 30.75699261 0.007988864637 + 360 8 200.201625 -17.84057247 -17.82732118 0.001656411113 34.97623472 35.05515663 0.013994195 + 361 8 200.201625 -18.80542419 -18.80699389 0.0001962125449 30.70168267 30.66435337 0.005132222457 + 362 8 200.201625 -18.47343608 -18.47479948 0.0001704254493 32.01336605 32.02656356 0.00728610904 + 363 8 200.201625 -18.77324188 -18.77478411 0.0001927787239 30.7644886 30.75076917 0.003472516431 + 364 8 200.201625 -18.75928635 -18.76082939 0.0001928795898 30.92074433 30.8870055 0.008104427665 + 365 8 200.201625 -18.67567647 -18.67696621 0.0001612170291 31.14801014 31.15491253 0.002346689251 + 366 8 200.201625 -18.49352508 -18.49616665 0.00033019604 32.02977796 32.02831481 0.003786488709 + 367 8 200.201625 -18.68344887 -18.68542851 0.0002474544389 31.21677313 31.19821303 0.006653647859 + 368 8 200.201625 -18.72163172 -18.72335907 0.0002159186369 30.97466009 30.97010729 0.002607309418 + 369 8 200.201625 -18.7632303 -18.76448698 0.0001570855782 30.78393952 30.77889664 0.002529757701 + 370 8 200.201625 -18.71012146 -18.71230841 0.0002733688114 31.06476697 31.05039833 0.004869664506 + 371 8 200.201625 -18.41172999 -18.41091728 0.0001015891124 32.47908778 32.48491841 0.008170341325 + 372 8 200.201625 -18.75556482 -18.75682973 0.0001581132232 30.81782117 30.81325815 0.002488820833 + 373 8 200.201625 -17.93912493 -17.94657606 0.0009313909929 34.35344039 34.34024531 0.01647115888 + 374 8 200.201625 -18.69945975 -18.70156293 0.0002628974395 31.11163737 31.09822538 0.004614105503 + 375 8 200.201625 -18.54013549 -18.54065233 6.460546468e-05 31.91140162 31.90258588 0.009475610144 + 376 8 200.201625 -17.77248425 -17.75809166 0.001799073417 35.26127216 35.34678274 0.01399547339 + 377 8 200.201625 -18.46718799 -18.46796327 9.691051362e-05 32.21105218 32.20974735 0.0076316922 + 378 8 200.201625 -18.54624141 -18.54770762 0.0001832758816 31.84734077 31.83919545 0.007502383283 + 379 8 200.201625 -18.68141198 -18.68245573 0.0001304693443 31.29007264 31.26362036 0.01001814439 + 380 8 200.201625 -18.70036844 -18.70232185 0.0002441756883 31.13450591 31.11596503 0.006362722302 + 381 8 200.201625 -18.69410806 -18.6952961 0.0001485053232 31.06933005 31.07498893 0.002209956418 + 382 8 200.201625 -18.70308674 -18.70410237 0.0001269535125 31.19435078 31.16503451 0.009890031019 + 383 8 200.201625 -17.63871801 -17.64876551 0.001255937375 35.61713402 35.57471684 0.02762845659 + 384 8 200.201625 -18.26670531 -18.26877384 0.0002585660518 32.9090814 32.90861979 0.01381930311 + 385 8 200.201625 -18.43874924 -18.44239522 0.000455746891 32.21296993 32.21770238 0.003040524913 + 386 8 200.201625 -18.49389284 -18.49310999 9.785580765e-05 32.13894368 32.13635013 0.01015091559 + 387 8 200.201625 -17.72410344 -17.73330976 0.001150790622 35.25843135 35.2240878 0.0245076362 + 388 8 200.201625 -18.72050069 -18.72240731 0.0002383277895 31.04140169 31.02175449 0.00604872095 + 389 8 200.201625 -18.43155643 -18.43545377 0.0004871670763 32.24820972 32.25222723 0.003034141756 + 390 8 200.201625 -18.14281332 -18.13656392 0.0007811744592 33.67832571 33.71950341 0.01149242922 + 391 8 200.201625 -18.25982905 -18.25564709 0.0005227446337 33.16972153 33.19650807 0.01030054826 + 392 8 200.201625 -17.8296484 -17.83556042 0.0007390027661 34.78677474 34.72589843 0.02963486252 + 393 8 200.201625 -18.76830631 -18.76968583 0.0001724395375 30.88308464 30.84783219 0.007885774353 + 394 8 200.201625 -18.79492526 -18.79665676 0.0002164375914 30.69882393 30.67419428 0.004351587058 + 395 8 200.201625 -18.31621139 -18.31590836 3.787894438e-05 32.87190483 32.88449413 0.006286007946 + 396 8 200.201625 -18.77263578 -18.77376553 0.0001412190444 30.73582984 30.73213531 0.002326710766 + 397 8 200.201625 -18.52423064 -18.52700698 0.0003470429524 31.89876722 31.89467197 0.004547105807 + 398 8 200.201625 -18.8025075 -18.80405955 0.0001940065037 30.71565227 30.67859201 0.005498191788 + 399 8 200.201625 -18.62780722 -18.63022467 0.0003021817604 31.39809386 31.39604338 0.002667490861 + 400 8 200.201625 -18.56594866 -18.56593522 1.679937726e-06 31.81704277 31.80522202 0.01052323831 + 401 8 200.201625 -18.7591434 -18.7540651 0.0006347879008 30.71566262 30.75059105 0.004834108772 + 402 8 200.201625 -18.60596698 -18.60657675 7.62215421e-05 31.43588966 31.45079872 0.00380044804 + 403 8 200.201625 -18.79374487 -18.79516598 0.0001776382814 30.69745527 30.67537097 0.004144175971 + 404 8 200.201625 -18.31979594 -18.31625635 0.0004424483288 32.90980949 32.92969527 0.009747729651 + 405 8 200.201625 -18.62161189 -18.62218809 7.202557767e-05 31.5691953 31.54975296 0.01070157992 + 406 8 200.201625 -17.73413764 -17.74190222 0.0009705726038 35.19405708 35.12280232 0.03287945722 + 407 8 200.201625 -18.57533773 -18.5778669 0.0003161459374 31.68206752 31.67345633 0.005419349253 + 408 8 200.201625 -18.7565192 -18.75505313 0.0001832583358 30.75526352 30.77433295 0.003072323993 + 409 8 200.201625 -18.33916335 -18.33870261 5.759237478e-05 32.77408169 32.78524675 0.006334466664 + 410 8 200.201625 -18.74511421 -18.74145732 0.0004571111064 30.78724658 30.81679883 0.004464753144 + 411 8 200.201625 -18.66736239 -18.66922438 0.0002327489617 31.31161133 31.29091084 0.008026756486 + 412 8 200.201625 -18.79189462 -18.79326129 0.000170834174 30.78695217 30.74660231 0.007436794023 + 413 8 200.201625 -18.18749152 -18.18331241 0.0005223890028 33.46630166 33.49774409 0.009607661767 + 414 8 200.201625 -18.4199727 -18.42218258 0.000276235531 32.37564388 32.37742266 0.004454353749 + 415 8 200.201625 -17.62980425 -17.6117973 0.002250868953 35.86153193 35.96382909 0.01460305558 + 416 8 200.201625 -18.76073784 -18.76227085 0.0001916264501 30.9005195 30.86930477 0.007398927993 + 417 8 200.201625 -18.72949039 -18.7265579 0.0003665608558 30.86248585 30.8891889 0.004296083588 + 418 8 200.201625 -18.76840755 -18.7685133 1.321927964e-05 30.73005908 30.73653279 0.002242791743 + 419 8 200.201625 -18.37458468 -18.37588222 0.0001621919507 32.43930883 32.44792064 0.01083725555 + 420 8 200.201625 -18.74010038 -18.74186806 0.0002209603654 30.97095351 30.94582142 0.006587161388 + 421 8 200.201625 -18.61654549 -18.60947674 0.0008835942674 31.34125019 31.37718999 0.01056524789 + 422 8 200.201625 -18.37990636 -18.37862569 0.0001600842187 32.62603837 32.63570634 0.008164590773 + 423 8 200.201625 -18.72740364 -18.72939625 0.0002490760958 30.95668232 30.94902395 0.002973428997 + 424 8 200.201625 -18.77052977 -18.77139949 0.0001087154497 30.74348873 30.74113259 0.002169265397 + 425 8 200.201625 -18.71500931 -18.71713735 0.0002660046294 31.04286095 31.02825046 0.004829636273 + 426 8 200.201625 -18.65197838 -18.65442505 0.0003058339426 31.33556825 31.32262916 0.005455968616 + 427 8 200.201625 -18.18884328 -18.18875211 1.139603979e-05 33.23589743 33.22208863 0.0191568198 + 428 8 200.201625 -18.78597787 -18.78745411 0.0001845294779 30.71628884 30.69908838 0.003753217365 + 429 8 200.201625 -18.55841828 -18.55912984 8.894498355e-05 31.82626096 31.81551763 0.009370862308 + 430 8 200.201625 -18.76160897 -18.76334394 0.000216871662 30.86599335 30.84069904 0.005893275079 + 431 8 200.201625 -18.71536039 -18.71479286 7.094067937e-05 30.94721944 30.96317402 0.002870621697 + 432 8 200.201625 -17.92901981 -17.93603642 0.0008770757911 34.41165929 34.40578313 0.01452501605 + 433 8 200.201625 -18.62754734 -18.6206866 0.0008575921659 31.29270275 31.3290308 0.01013306778 + 434 8 200.201625 -17.92549512 -17.93081234 0.0006646530462 34.37872851 34.33552317 0.02441575083 + 435 8 200.201625 -17.46706477 -17.44432291 0.002842732596 36.54280225 36.6652175 0.01641586353 + 436 8 200.201625 -18.79464866 -18.79630926 0.0002075753352 30.70938713 30.68254484 0.004515360755 + 437 8 200.201625 -17.92014791 -17.92317595 0.0003785051214 34.39699412 34.34133084 0.02817456585 + 438 8 200.201625 -18.66305695 -18.66436098 0.0001630031544 31.35538442 31.33285431 0.009314207962 + 439 8 200.201625 -17.60094345 -17.61169923 0.001344472308 35.76070814 35.68593966 0.03456367278 + 440 8 200.201625 -18.81220289 -18.81370198 0.000187386826 30.70321408 30.65843981 0.005799199887 + 441 8 200.201625 -18.75601276 -18.73813685 0.002234488302 30.69322963 30.75983264 0.01379383973 + 442 8 200.201625 -18.37956488 -18.38322679 0.0004577383284 32.44481199 32.45126966 0.006478821923 + 443 8 200.201625 -18.80430254 -18.80577552 0.0001841231212 30.71500879 30.67625814 0.005692146359 + 444 8 200.201625 -18.47664022 -18.47475705 0.0002353963008 31.97753487 31.9959509 0.01088879524 + 445 8 200.201625 -18.70843762 -18.71052377 0.0002607686452 31.05146232 31.04241522 0.0035627176 + 446 8 200.201625 -17.3374308 -17.35153546 0.001763082654 36.85821977 36.72274189 0.05282992257 + 447 8 200.201625 -17.7309355 -17.71632772 0.001825972255 35.42963714 35.51660537 0.01332683221 + 448 8 200.201625 -18.69472466 -18.69683378 0.0002636397715 31.12186169 31.11155255 0.00414484672 + 449 8 200.201625 -18.41950374 -18.42340297 0.0004874031976 32.30315793 32.30718188 0.00311797994 + 450 8 200.201625 -18.61257757 -18.61323076 8.164901349e-05 31.59963476 31.58190786 0.0102490995 + 451 8 200.201625 -18.71465122 -18.71558931 0.0001172613908 31.14741316 31.11625616 0.009954721636 + 452 8 200.201625 -18.75266244 -18.74566427 0.0008747711567 30.73473482 30.77627348 0.006402998837 + 453 8 200.201625 -17.58985642 -17.57042347 0.002429118645 36.03071422 36.13867277 0.01496767362 + 454 8 200.201625 -18.66672185 -18.66823293 0.0001888847853 31.19175388 31.19775228 0.002292114139 + 455 8 200.201625 -18.81218293 -18.81366876 0.0001857286091 30.70028355 30.65598116 0.005421063674 + 456 8 200.201625 -18.75038408 -18.73739316 0.001623864636 30.72658688 30.78324651 0.01078674622 + 457 8 200.201625 -18.47684191 -18.47688547 5.444974977e-06 32.1900159 32.18833376 0.008851856959 + 458 8 200.201625 -18.31453643 -18.31133234 0.000400510822 32.92821722 32.94791811 0.009508351086 + 459 8 200.201625 -18.69127414 -18.69356093 0.0002858493694 31.15382407 31.13966747 0.005238456725 + 460 8 200.201625 -18.10330246 -18.09696924 0.0007916530171 33.84033128 33.88370274 0.01106099934 + 461 8 200.201625 -18.14670281 -18.14205241 0.0005813005642 33.64000737 33.67527792 0.00964566167 + 462 8 200.201625 -18.66094355 -18.66331038 0.0002958533639 31.25661555 31.25161481 0.003053052445 + 463 8 200.201625 -18.77142284 -18.77240477 0.0001227415644 30.74387769 30.7398245 0.002368899438 + 464 8 200.201625 -18.75292617 -18.75472104 0.0002243589522 30.86097339 30.84696879 0.003732966723 + 465 8 200.201625 -18.77142272 -18.77330066 0.0002347421626 30.79109919 30.77192711 0.00410053446 + 466 8 200.201625 -18.52350347 -18.52332792 2.194359388e-05 31.99996933 31.99320205 0.01006940941 + 467 8 200.201625 -18.75768345 -18.75823395 6.88127051e-05 30.78955651 30.79218216 0.001904524656 + 468 8 200.201625 -18.5904803 -18.59256889 0.0002610739771 31.63152294 31.62072561 0.006714710315 + 469 8 200.201625 -18.13433971 -18.12807892 0.0007825983813 33.71208308 33.75360766 0.01132855295 + 470 8 200.201625 -18.78732511 -18.7890744 0.0002186608118 30.7615739 30.73091038 0.005582181525 + 471 8 200.201625 -17.99763497 -17.99072331 0.0008639578228 34.2774975 34.32753031 0.0100640992 + 472 8 200.201625 -18.40459715 -18.40559989 0.0001253423446 32.30582798 32.31644775 0.01035371501 + 473 8 200.201625 -18.7712298 -18.77092381 3.824813641e-05 30.70961119 30.71933479 0.00250730276 + 474 8 200.201625 -18.59498704 -18.59697853 0.0002489359173 31.60920127 31.59859157 0.006551019795 + 475 8 200.201625 -18.61078783 -18.61112908 4.265635389e-05 31.61817435 31.60040455 0.0106858373 + 476 8 200.201625 -18.78191402 -18.78348666 0.0001965796876 30.78896527 30.75864715 0.005937498913 + 477 8 200.201625 -18.69812488 -18.69215046 0.0007468020291 30.98249926 31.01998569 0.007460186251 + 478 8 200.201625 -18.59911873 -18.60188327 0.0003455676338 31.52250524 31.52162549 0.00254943698 + 479 8 200.201625 -18.63138541 -18.63412583 0.0003425528529 31.3907662 31.38613995 0.003125254564 + 480 8 200.201625 -18.69103593 -18.69193839 0.0001128071066 31.0737471 31.08264053 0.00245611887 + 481 8 200.201625 -18.76695473 -18.7673997 5.562181401e-05 30.74328425 30.74699922 0.001997238016 + 482 8 200.201625 -18.50905884 -18.51116877 0.0002637412007 31.9834399 31.97965362 0.005467209487 + 483 8 200.201625 -18.79810321 -18.79963279 0.000191197897 30.74041727 30.70287664 0.006204726575 + 484 8 200.201625 -18.7729234 -18.77306827 1.810827351e-05 30.7075587 30.71441656 0.002263841323 + 485 8 200.201625 -18.6720337 -18.67290321 0.0001086893179 31.34225956 31.31621145 0.01051121173 + 486 8 200.201625 -18.34308819 -18.34089468 0.0002741889287 32.79332348 32.80806727 0.008550784209 + 487 8 200.201625 -18.69373664 -18.69579446 0.0002572278931 31.0935755 31.09139 0.002389545549 + 488 8 200.201625 -18.70086048 -18.69940455 0.0001819908221 30.99811938 31.0199515 0.003897477227 + 489 8 200.201625 -18.76087249 -18.75849803 0.000296807839 30.72894795 30.75196603 0.003294452323 + 490 8 200.201625 -18.77009329 -18.76880081 0.0001615598714 30.69974957 30.7164453 0.002968860053 + 491 8 200.201625 -18.74560896 -18.74710089 0.0001864915957 30.99028155 30.95694666 0.00877722604 + 492 8 200.201625 -18.04302614 -18.04622779 0.0004002065512 33.87205549 33.84238403 0.02163190295 + 493 8 200.201625 -18.6063607 -18.59824479 0.001014488605 31.38426049 31.42118793 0.01146375784 + 494 8 200.201625 -18.6204596 -18.61162092 0.001104835519 31.31890469 31.35803781 0.01150845556 + 495 8 200.201625 -17.92795176 -17.93512657 0.0008968506951 34.38609895 34.36216856 0.01965473256 + 496 8 200.201625 -18.79929072 -18.80088715 0.0001995537399 30.74132993 30.7021325 0.006449539961 + 497 8 200.201625 -18.74347134 -18.74494871 0.0001846707777 30.87906807 30.87294665 0.00274100913 + 498 8 200.201625 -18.14428575 -18.14948465 0.0006498626936 33.50704938 33.51124268 0.006826225318 + 499 8 200.201625 -18.08368419 -18.07909181 0.0005740477159 33.89732159 33.93544574 0.008684869556 + 500 8 200.201625 -18.47193162 -18.47261644 8.560285758e-05 32.01337189 32.02783639 0.008321033215 + 501 8 200.201625 -18.74485582 -18.74665822 0.0002253004337 30.89904147 30.88500626 0.003723487354 + 502 8 200.201625 -18.66897005 -18.67136397 0.0002992398864 31.23428137 31.22549918 0.003772376841 + 503 8 200.201625 -17.39966914 -17.41289033 0.001652648436 36.60474687 36.50971105 0.04191652855 + 504 8 200.201625 -17.77351197 -17.78141256 0.0009875739876 35.03024445 34.97286649 0.02867276838 + 505 8 200.201625 -18.74038607 -18.74217395 0.0002234847715 30.89607621 30.88860356 0.002895626053 + 506 8 200.201625 -18.76985139 -18.76987679 3.175165093e-06 30.71970276 30.72750335 0.002348903893 + 507 8 200.201625 -18.42069694 -18.42438577 0.0004611034284 32.28649244 32.29186889 0.003192006093 + 508 8 200.201625 -18.56935834 -18.5710242 0.0002082325842 31.74325244 31.73288257 0.007621723833 + 509 8 200.201625 -18.8073557 -18.83346821 0.00326406352 30.72628008 30.41547528 0.03914653592 + 510 8 200.201625 -18.66084694 -18.66312623 0.0002849112633 31.29350003 31.28094749 0.005462159442 + 511 8 200.201625 -18.73335993 -18.73537963 0.0002524627 30.95817333 30.94272399 0.00432895221 + 512 8 200.201625 -18.44399838 -18.44703354 0.0003793944121 32.23664175 32.2377014 0.003116994874 + 513 8 200.201625 -18.78095731 -18.78257673 0.0002024272279 30.78935039 30.75973747 0.005659497757 + 514 8 200.201625 -18.61718623 -18.61757155 4.816496747e-05 31.58872881 31.57012038 0.01066045479 + 515 8 200.201625 -17.83808461 -17.8248249 0.001657464051 34.98638754 35.06541425 0.01396599462 + 516 8 200.201625 -18.78128199 -18.78290949 0.0002034376241 30.727388 30.71300403 0.003497711138 + 517 8 200.201625 -18.68106839 -18.68225296 0.0001480718159 31.12149667 31.12926123 0.002397470657 + 518 8 200.201625 -18.47061452 -18.46229665 0.001039733329 31.98598225 32.00833127 0.01576486319 + 519 8 200.201625 -18.25620501 -18.2553917 0.0001016639098 33.13261902 33.15041853 0.006488948454 + 520 8 200.201625 -18.73174084 -18.73163332 1.344021121e-05 30.88093625 30.8935044 0.002693345121 + 521 8 200.201625 -18.80651907 -18.80788792 0.0001711060175 30.71250683 30.67197783 0.005737990784 + 522 8 200.201625 -18.72454019 -18.72603215 0.0001864947237 31.08056194 31.05060159 0.008911054458 + 523 8 200.201625 -18.79139473 -18.79275448 0.0001699691646 30.79217168 30.75134868 0.007608208873 + 524 8 200.201625 -18.52999447 -18.53031454 4.00090005e-05 31.96032801 31.95264196 0.009602527868 + 525 8 200.201625 -18.66002534 -18.66074621 9.010835657e-05 31.39071877 31.36687035 0.01031119764 + 526 8 200.201625 -18.52674085 -18.52078574 0.0007443884574 31.74248294 31.76963682 0.01258602858 + 527 8 200.201625 -18.66072973 -18.66222276 0.0001866292346 31.3465767 31.3266515 0.008329302698 + 528 8 200.201625 -17.94290667 -17.94740908 0.0005628010684 34.30351275 34.26095217 0.02441287042 + 529 8 200.201625 -18.74746129 -18.7476613 2.50007441e-05 30.82325195 30.83084335 0.002343347579 + 530 8 200.201625 -17.74220781 -17.72800147 0.001775792233 35.38159444 35.46700802 0.01322709374 + 531 8 200.201625 -18.48398932 -18.48743544 0.000430765511 32.02540286 32.02832722 0.002697937669 + 532 8 200.201625 -18.73063201 -18.73260237 0.0002462950615 30.99344639 30.97323669 0.005837065571 + 533 8 200.201625 -18.41707429 -18.42087555 0.0004751579301 32.32458843 32.3279602 0.003118702688 + 534 8 200.201625 -18.7704059 -18.76983836 7.094307762e-05 30.71113519 30.72213262 0.002611096722 + 535 8 200.201625 -17.89007342 -17.89784223 0.0009711017387 34.55611348 34.53563681 0.01906831954 + 536 8 200.201625 -18.67919659 -18.68139514 0.0002748192184 31.15809324 31.15627195 0.002355772391 + 537 8 200.201625 -18.79908376 -18.80064764 0.0001954848509 30.69766636 30.66856199 0.004652461869 + 538 8 200.201625 -18.7519967 -18.74504884 0.000868482304 30.73811707 30.77938269 0.006367190478 + 539 8 200.201625 -18.65915142 -18.66005422 0.000112849556 31.39647269 31.37212149 0.01046238069 + 540 8 200.201625 -18.77166025 -18.77340211 0.0002177331222 30.8335371 30.80416434 0.006141140094 + 541 8 200.201625 -18.54987879 -18.55295657 0.0003847227516 31.7501615 31.74906423 0.002832288264 + 542 8 200.201625 -18.40687251 -18.41070213 0.0004787022846 32.33881461 32.34452344 0.004284056224 + 543 8 200.201625 -17.89938616 -17.88856291 0.00135290563 34.7171973 34.78534974 0.01268293761 + 544 8 200.201625 -18.59463153 -18.59477836 1.835365308e-05 31.68886543 31.67341166 0.01058220694 + 545 8 200.201625 -18.01829636 -18.02137446 0.0003847624197 33.97804857 33.94393986 0.02274242766 + 546 8 200.201625 -18.72981038 -18.7307373 0.0001158646687 30.90820819 30.91299611 0.002100314409 + 547 8 200.201625 -18.09460469 -18.09027425 0.0005413050494 33.85168642 33.88885464 0.008766518992 + 548 8 200.201625 -18.79197204 -18.79335343 0.000172673938 30.69498473 30.67599676 0.003891064118 + 549 8 200.201625 -18.63076867 -18.63120248 5.422603413e-05 31.32426076 31.33966545 0.003507693203 + 550 8 200.201625 -18.67631328 -18.6784368 0.000265439663 31.18397677 31.17929812 0.002788881035 + 551 8 200.201625 -18.76039243 -18.75114728 0.001155643357 30.69163246 30.73982493 0.008024318581 + 552 8 200.201625 -18.704454 -18.70583195 0.0001722434956 31.17185386 31.14421208 0.009151494364 + 553 8 200.201625 -18.75549398 -18.75681641 0.0001653042991 30.95854019 30.921787 0.009115152752 + 554 8 200.201625 -18.80538379 -18.80684013 0.0001820430224 30.7202287 30.67910581 0.006161882163 + 555 8 200.201625 -18.48228809 -18.4840621 0.0002217516288 32.11209744 32.10984834 0.005847197749 + 556 8 200.201625 -18.63352935 -18.63592691 0.0002996948571 31.4146225 31.4037294 0.005161280739 + 557 8 200.201625 -18.76287858 -18.76452336 0.0002055977706 30.90487658 30.87041301 0.008056346529 + 558 8 200.201625 -18.62619143 -18.62526181 0.0001162026123 31.33010762 31.35115512 0.005339382738 + 559 8 200.201625 -18.72114755 -18.72123383 1.078455185e-05 30.93528764 30.9458618 0.002582912633 + 560 8 200.201625 -18.76488249 -18.76046279 0.0005524621028 30.69316198 30.72575808 0.004159766977 + 561 8 200.201625 -18.73126424 -18.732629 0.0001705955158 31.04779057 31.01773725 0.008648044647 + 562 8 200.201625 -18.37843804 -18.37603134 0.0003008371558 32.64990784 32.66208798 0.008901344985 + 563 8 200.201625 -18.77180774 -18.7731619 0.0001692702342 30.88263778 30.84420089 0.008570401799 + 564 8 200.201625 -18.53731619 -18.53216409 0.0006440121433 31.69791612 31.72504262 0.01171129772 + 565 8 200.201625 -18.73365332 -18.73539263 0.0002174133694 31.01366065 30.98676475 0.007532161564 + 566 8 200.201625 -18.69061059 -18.69280383 0.000274155231 31.15322417 31.14008455 0.004990390731 + 567 8 200.201625 -18.78951171 -18.79104996 0.0001922813705 30.78005769 30.74333236 0.006709107886 + 568 8 200.201625 -18.06806397 -18.07161118 0.0004434014606 33.76578106 33.74134139 0.02021750743 + 569 8 200.201625 -18.40239755 -18.40144347 0.0001192604466 32.52374853 32.53072022 0.00826792412 + 570 8 200.201625 -18.32293195 -18.32645301 0.0004401323376 32.76118636 32.7663243 0.003859269737 + 571 8 200.201625 -18.75394552 -18.75267663 0.0001586111056 30.7700239 30.78777797 0.003004230352 + 572 8 200.201625 -18.72292611 -18.72489852 0.0002465508427 31.04370177 31.02098102 0.00676872541 + 573 8 200.201625 -18.7576314 -18.75950863 0.0002346537099 30.84667879 30.83016668 0.003860321776 + 574 8 200.201625 -18.47854592 -18.47940182 0.0001069877462 31.98668706 32.00108484 0.007812578095 + 575 8 200.201625 -18.03064904 -18.02259285 0.00100702358 34.15733362 34.21050276 0.01198935612 + 576 8 200.201625 -18.6873706 -18.68871226 0.0001677080654 31.09771547 31.10351269 0.002222814615 + 577 8 200.201625 -18.66738155 -18.6687865 0.0001756187351 31.32695091 31.30501687 0.008839803654 + 578 8 200.201625 -18.7551275 -18.75659384 0.00018329235 30.82784297 30.82069275 0.002819868163 + 579 8 200.201625 -18.59939718 -18.59995825 7.013413299e-05 31.65653522 31.64059464 0.01013288155 + 580 8 200.201625 -18.76097268 -18.76113973 2.088101242e-05 30.76098449 30.76839872 0.002315899608 + 581 8 200.201625 -18.80083287 -18.80217784 0.000168120969 30.75749472 30.71424315 0.007424221992 + 582 8 200.201625 -18.19674305 -18.20186302 0.0006399967213 33.27613166 33.2798813 0.006096460558 + 583 8 200.201625 -18.53790551 -18.54092515 0.0003774551078 31.80249416 31.80211829 0.00277446066 + 584 8 200.201625 -18.73218823 -18.73358612 0.00017473614 31.04560532 31.01497647 0.008748207271 + 585 8 200.201625 -18.74526589 -18.74091997 0.0005432402933 30.78277514 30.81498501 0.004524094162 + 586 8 200.201625 -18.71567083 -18.69908999 0.002072604817 30.87788097 30.93813246 0.01330390019 + 587 8 200.201625 -18.68651679 -18.68871417 0.0002746719303 31.15213696 31.14369227 0.003747715228 + 588 8 200.201625 -18.77936775 -18.7810821 0.0002142942558 30.753203 30.73411684 0.003955626249 + 589 8 200.201625 -17.73421129 -17.74322493 0.001126704942 35.1995983 35.14356721 0.02838669658 + 590 8 200.201625 -18.30208368 -18.29871267 0.0004213766126 32.98105085 33.0019943 0.009537238903 + 591 8 200.201625 -18.14755131 -18.15325866 0.000713418344 33.46578603 33.46490766 0.01006037224 + 592 8 200.201625 -18.6025509 -18.60290278 4.398507623e-05 31.44336507 31.46025977 0.00463809576 + 593 8 200.201625 -18.65907311 -18.66078818 0.0002143842042 31.34795483 31.32865154 0.008058784662 + 594 8 200.201625 -18.70767472 -18.7053415 0.0002916530866 30.96143432 30.98694306 0.004136091807 + 595 8 200.201625 -18.75735894 -18.74623602 0.001390365022 30.70030439 30.75310722 0.009343015248 + 596 8 200.201625 -18.1541197 -18.14838807 0.0007164542143 33.62241876 33.66053127 0.01081462908 + 597 8 200.201625 -18.62105536 -18.62371537 0.0003325018211 31.43917513 31.43454783 0.003051855344 + 598 8 200.201625 -18.67733356 -18.67834085 0.000125911786 31.31518139 31.28854353 0.01036630957 + 599 8 200.201625 -18.59540576 -18.59660671 0.0001501186827 31.65154065 31.63704651 0.009027090721 + 600 8 200.201625 -18.76283489 -18.76451397 0.0002098844561 30.88719059 30.85598004 0.007088272815 + 601 8 200.201625 -18.21957707 -18.21818192 0.0001743932852 33.09956053 33.08838733 0.01915630634 + 602 8 200.201625 -18.76810791 -18.7652206 0.0003609143312 30.69252674 30.71780143 0.003422285292 + 603 8 200.201625 -18.64958953 -18.65141935 0.0002287280509 31.37860997 31.3616151 0.007301144968 + 604 8 200.201625 -18.64869192 -18.64954351 0.0001064491127 31.4387006 31.41628364 0.01025749325 + 605 8 200.201625 -18.52823947 -18.53017605 0.0002420725543 31.91486227 31.90844345 0.006721727558 + 606 8 200.201625 -18.76041025 -18.76206564 0.0002069236799 30.90568792 30.8733052 0.007527439386 + 607 8 200.201625 -18.22395784 -18.22903582 0.0006347473863 33.12659199 33.12716182 0.009402169333 + 608 8 200.201625 -18.61160741 -18.61183888 2.893342614e-05 31.6127633 31.59525028 0.01057188058 + 609 8 200.201625 -18.7842429 -18.78582688 0.0001979977793 30.80734145 30.77042018 0.007159767729 + 610 8 200.201625 -18.33190925 -18.33189416 1.88670556e-06 32.61623614 32.62120095 0.01389077157 + 611 8 200.201625 -18.7971023 -18.79850544 0.0001753928562 30.76024631 30.71977199 0.006963819325 + 612 8 200.201625 -18.80619722 -18.80748435 0.000160890661 30.7259983 30.68323853 0.00653711956 + 613 8 200.201625 -18.7065878 -18.70876476 0.0002721203749 31.08673335 31.07104568 0.00505000986 + 614 8 200.201625 -18.02120358 -18.02219921 0.0001244539597 33.96096683 33.91912841 0.02481538015 + 615 8 200.201625 -18.16700126 -18.17025857 0.0004071638879 33.34287272 33.33269249 0.01625034745 +# Strain.xyz + config # atoms volume energy DFT energy energy error force DFT force force error + 616 8 200.3335508 -38.68900179 -38.70258669 0.001698113057 9.565186643e-05 0 1.608156277e-05 + 617 8 229.4398214 -37.68676889 -37.67775132 0.001127196544 5.182495209e-05 0 7.298172495e-06 + 618 8 228.0782799 -37.90625827 -37.92256116 0.002037861352 8.592653988e-05 0 1.557756838e-05 + 619 8 217.5990433 -38.33496346 -38.35404444 0.002385123021 7.515002823e-05 0 1.257115363e-05 + 620 8 203.2571875 -37.98265342 -37.97890348 0.0004687424768 5.830887351e-05 0 9.791334031e-06 + 621 8 202.6170281 -38.12129844 -38.10663521 0.001832903296 8.065913458e-05 0 1.209999551e-05 + 622 8 166.9416446 -37.05570303 -37.06560865 0.0012382023 0.0002042435177 0 3.126256473e-05 + 623 8 211.7144728 -38.43592269 -38.44489458 0.001121486296 7.737346865e-05 0 1.286364658e-05 + 624 8 214.1832155 -38.22730582 -38.22591978 0.0001732545822 7.47689263e-05 0 1.180430186e-05 + 625 8 196.1054575 -38.69736158 -38.71102348 0.001707737721 6.957694407e-05 0 9.08607354e-06 + 626 8 177.8472768 -37.93770754 -37.9483308 0.001327907438 0.0001584098134 0 2.95542407e-05 + 627 8 189.5028666 -38.13640688 -38.13417254 0.0002792918924 0.000119036187 0 2.101015014e-05 + 628 8 162.7593198 -36.66604204 -36.6664979 5.698213209e-05 0.0002855913925 0 4.903520566e-05 + 629 8 184.9266458 -38.44838203 -38.46259083 0.001776099527 0.0001269777129 0 2.001870663e-05 + 630 8 189.2373161 -38.08092174 -38.07805907 0.00035783359 0.0001038943262 0 1.778666194e-05 + 631 8 187.4715245 -38.4088435 -38.41703276 0.001023657832 8.411252547e-05 0 1.14327751e-05 + 632 8 211.5385643 -38.45414035 -38.4679551 0.001726843449 9.078143599e-05 0 1.71098302e-05 + 633 8 163.0620529 -36.28138033 -36.26472406 0.002082033375 0.0002868930147 0 5.038282066e-05 + 634 8 202.9235577 -38.11919963 -38.1282619 0.001132784366 8.308928705e-05 0 1.509920182e-05 + 635 8 180.9458101 -38.06398427 -38.08222169 0.002279677784 0.0001208916357 0 1.701634743e-05 + 636 8 221.7281625 -38.1262812 -38.1401102 0.001728624765 6.796200825e-05 0 9.454784836e-06 + 637 8 198.326172 -38.27957016 -38.28172569 0.0002694410784 6.212151485e-05 0 9.327522978e-06 + 638 8 191.0071238 -38.27417249 -38.28758136 0.001676108218 9.032820238e-05 0 1.579931208e-05 + 639 8 176.7300035 -37.3164002 -37.3050262 0.001421749397 0.0001457613277 0 2.330018138e-05 + 640 8 165.8100483 -36.9469799 -36.95721097 0.001278883313 0.000161656213 0 2.657122608e-05 + 641 8 195.8480944 -38.43793509 -38.43899557 0.0001325595105 9.439718829e-05 0 1.557868903e-05 + 642 8 169.2676996 -37.05623147 -37.05934352 0.0003890064263 0.0001099479053 0 1.906299299e-05 + 643 8 163.1648708 -36.71295378 -36.71493496 0.0002476474388 0.0001324062273 0 2.28514266e-05 + 644 8 188.1146032 -38.32599667 -38.33632133 0.001290582961 8.989250849e-05 0 1.328474765e-05 + 645 8 163.5437223 -36.79995378 -36.79425161 0.0007127706842 0.0002857716922 0 4.694955308e-05 + 646 8 221.1237548 -38.19697768 -38.21519129 0.002276700687 7.82639317e-05 0 1.344669681e-05 + 647 8 227.4098215 -37.96509744 -37.98550076 0.002550415257 5.272192113e-05 0 7.301672215e-06 + 648 8 194.0426321 -38.16999474 -38.15380832 0.002023302267 0.0001009482624 0 1.842051635e-05 + 649 8 218.2653475 -38.07207877 -38.07617611 0.000512167194 7.262325601e-05 0 1.269270931e-05 + 650 8 221.0594946 -38.09388983 -38.10211299 0.001027895326 7.350428377e-05 0 1.23281321e-05 + 651 8 202.4676955 -38.39442112 -38.39252912 0.0002365004311 6.427898847e-05 0 8.624722605e-06 + 652 8 246.3593029 -36.97318701 -36.97481197 0.0002031203774 7.372238022e-05 0 1.19516651e-05 + 653 8 200.3581393 -38.18771035 -38.16239523 0.003164390023 8.592749392e-05 0 1.497731472e-05 + 654 8 141.8890198 -32.22832294 -32.18589704 0.005303237558 0.0007949273387 0 0.0001425816998 + 655 8 191.7516584 -38.38969283 -38.39299598 0.0004128942838 3.959778699e-05 0 6.33383739e-06 + 656 8 178.5473794 -37.96953636 -37.98407917 0.001817850836 0.0001100999621 0 1.45011719e-05 + 657 8 177.8713076 -37.94220621 -37.95163819 0.001178997275 0.0001463276505 0 2.437035126e-05 + 658 8 203.7057823 -38.24724384 -38.24193762 0.0006632770912 9.189089607e-05 0 1.716805388e-05 + 659 8 221.8525243 -37.87980926 -37.87591984 0.0004861779772 6.102191707e-05 0 7.832806743e-06 + 660 8 149.0403918 -34.14688004 -34.1201446 0.00334193005 0.0005425421144 0 9.277248336e-05 + 661 8 180.8623672 -38.22030399 -38.23180712 0.001437891445 0.000132481799 0 2.374044652e-05 + 662 8 137.6430743 -30.75067723 -30.75189792 0.0001525863087 0.0008478360848 0 0.0001399223898 + 663 8 197.135318 -38.25399699 -38.23907453 0.001865307148 8.987368694e-05 0 1.367724269e-05 + 664 8 173.2294161 -37.65401281 -37.6586922 0.0005849239339 0.0001663713111 0 2.627670756e-05 + 665 8 169.9240347 -37.52746913 -37.53059169 0.000390319576 0.0002199781681 0 3.992745905e-05 + 666 8 186.4922502 -38.24489666 -38.25030306 0.0006757994994 9.373511935e-05 0 1.282517361e-05 + 667 8 231.7140705 -37.44952369 -37.44655603 0.0003709571321 3.612101668e-05 0 5.350798343e-06 + 668 8 188.2844459 -38.39683433 -38.40387361 0.0008799095774 0.0001150494083 0 2.047477688e-05 + 669 8 176.2720605 -37.64584351 -37.64901469 0.0003963976809 0.0001398472609 0 1.999640383e-05 + 670 8 148.3227116 -33.9844539 -33.95941672 0.003129647704 0.0005371046372 0 9.739829648e-05 + 671 8 169.4815337 -37.40392308 -37.41150461 0.000947690729 0.0002083233424 0 3.134838333e-05 + 672 8 223.5961964 -37.88761469 -37.88116747 0.0008059024676 9.488657888e-05 0 1.902928889e-05 + 673 8 210.7071543 -38.47200694 -38.48146633 0.001182424066 2.300922039e-05 0 2.99314086e-06 + 674 8 189.0498251 -38.35458372 -38.36376178 0.001147257943 0.0001048027015 0 1.46918256e-05 + 675 8 189.2172923 -38.17584385 -38.17149294 0.0005438638397 0.0001107404791 0 1.91614175e-05 + 676 8 165.8045836 -36.98808622 -36.99497347 0.0008609063984 0.000210350609 0 3.503226931e-05 + 677 8 223.3891367 -37.85173352 -37.84502676 0.0008383452939 6.940207997e-05 0 1.126803655e-05 + 678 8 251.2864893 -36.70149785 -36.69980308 0.0002118463533 7.515892093e-05 0 1.193587641e-05 + 679 8 150.038164 -34.41243931 -34.39618318 0.002032015987 0.0004506173566 0 7.094386586e-05 + 680 8 176.6711513 -37.94683433 -37.9620267 0.00189904638 0.0001105230248 0 1.56001515e-05 + 681 8 173.6781768 -37.58151422 -37.58580998 0.000536969536 0.0001846678477 0 2.972207079e-05 + 682 8 164.4272804 -36.73404298 -36.73718943 0.000393306772 0.0003053545494 0 5.432995601e-05 + 683 8 201.9318491 -38.6308909 -38.64271162 0.001477590429 9.182793132e-05 0 1.676881837e-05 + 684 8 178.915824 -38.05711719 -38.06390433 0.0008483928318 8.979089667e-05 0 1.401912544e-05 + 685 8 186.137401 -38.34255314 -38.3506291 0.001009494578 0.0001074991027 0 1.593390785e-05 + 686 8 214.4694873 -38.2039676 -38.20349423 5.917104872e-05 7.123738757e-05 0 1.262502052e-05 + 687 8 181.5897676 -38.16082777 -38.17182774 0.001374996628 0.0001512081239 0 2.936299349e-05 + 688 8 167.515933 -37.1953563 -37.20028774 0.0006164301302 0.0001634142417 0 2.208647351e-05 + 689 8 176.0508922 -37.98652457 -37.9956655 0.001142616791 0.0001820613461 0 3.355022809e-05 + 690 8 182.8085861 -37.65443303 -37.6417173 0.001589466417 0.0001396055456 0 2.32864336e-05 + 691 8 210.0945817 -38.13903245 -38.13342759 0.0007006069398 8.008181722e-05 0 1.548056507e-05 + 692 8 178.665713 -37.92143544 -37.92785728 0.000802729864 0.0001197488576 0 2.076982429e-05 + 693 8 215.9752421 -38.03071102 -38.01680861 0.001737801463 6.099345495e-05 0 8.355789878e-06 + 694 8 165.0314682 -36.85741316 -36.86219055 0.0005971741301 0.0002759078594 0 4.623447885e-05 + 695 8 165.1229899 -36.39465194 -36.37496414 0.002460975521 0.0002562720956 0 3.996770096e-05 + 696 8 203.8768931 -38.59573659 -38.60882595 0.001636169911 6.061466221e-05 0 8.089240079e-06 + 697 8 195.7185102 -38.41169951 -38.41164674 6.595696587e-06 8.65857827e-05 0 1.438301137e-05 + 698 8 195.0149707 -38.36783057 -38.37471854 0.0008609959366 8.316533808e-05 0 1.431834984e-05 + 699 8 210.025617 -38.53801479 -38.5528798 0.001858126595 6.404460009e-05 0 9.548948316e-06 + 700 8 178.1759417 -37.74542964 -37.74907836 0.0004560901244 0.0001377822456 0 2.272161785e-05 + 701 8 215.9057921 -37.99679295 -37.98660224 0.001273838407 8.093702605e-05 0 1.475684462e-05 + 702 8 203.217777 -38.04303212 -38.05536061 0.00154106102 8.596219765e-05 0 1.608969823e-05 + 703 8 232.680727 -37.69388864 -37.70848743 0.001824848879 9.352238478e-05 0 1.741747267e-05 + 704 8 177.8274734 -37.69736244 -37.69848404 0.0001401999353 0.0001000187928 0 1.589597179e-05 + 705 8 209.6322873 -38.16613353 -38.1581976 0.0009919907125 6.679790761e-05 0 9.420783051e-06 + 706 8 189.3908007 -38.22333961 -38.2271875 0.0004809863767 8.994729002e-05 0 1.283798437e-05 + 707 8 211.7697192 -38.1199037 -38.10974495 0.001269843317 7.738216315e-05 0 1.187062744e-05 + 708 8 187.516657 -38.19041113 -38.18945929 0.0001189793854 0.000116549757 0 2.043618298e-05 + 709 8 178.988231 -37.85526105 -37.87240443 0.002142922306 0.0001414184348 0 1.986176198e-05 + 710 8 176.9270057 -37.8699407 -37.88970065 0.002469994012 0.0001188355274 0 1.719012565e-05 + 711 8 188.9104606 -38.48920711 -38.49810833 0.001112652665 9.119586443e-05 0 1.332633576e-05 + 712 8 158.7492019 -36.10210454 -36.09178528 0.001289907483 0.0002848209654 0 4.090885095e-05 + 713 8 217.9860651 -37.65045986 -37.64255672 0.0009878926648 6.493865308e-05 0 1.123805816e-05 + 714 8 175.5110877 -37.52996755 -37.53226806 0.0002875632349 0.0001514099397 0 2.574758877e-05 + 715 8 183.072822 -37.63457737 -37.61645032 0.002265881283 9.892357528e-05 0 1.345059485e-05 + 716 8 208.5037009 -38.34567575 -38.33706113 0.001076826956 7.851891539e-05 0 1.408905915e-05 + 717 8 203.2642284 -38.58030909 -38.58927092 0.00112022858 7.230667024e-05 0 9.534541993e-06 + 718 8 195.1625734 -38.29227498 -38.28361504 0.00108249284 7.652887337e-05 0 1.159167401e-05 + 719 8 199.8729233 -38.49304326 -38.49831134 0.0006585102717 6.407599598e-05 0 8.47945696e-06 + 720 8 164.697941 -36.85345875 -36.86418265 0.001340488012 0.0002803640475 0 5.265797096e-05 + 721 8 191.9163409 -38.12696453 -38.12571285 0.0001564602743 5.816503243e-05 0 9.852044788e-06 + 722 8 169.4969962 -37.15307914 -37.16018574 0.0008883245504 0.0002068609572 0 3.15773118e-05 + 723 8 228.1120265 -37.83539171 -37.84172597 0.000791783025 5.288804707e-05 0 7.388091665e-06 + 724 8 168.8944757 -37.30742515 -37.31755842 0.001266659341 0.0002067444179 0 3.030916057e-05 + 725 8 180.9898447 -38.1437995 -38.15256177 0.001095284114 0.0001547589141 0 2.600691229e-05 + 726 8 158.9971961 -35.96380193 -35.95761802 0.0007729887954 0.0002902255432 0 4.615340561e-05 + 727 8 151.0609459 -34.63407543 -34.61909272 0.001872838383 0.0004839510766 0 7.394246745e-05 + 728 8 176.4503294 -37.83687922 -37.85506345 0.00227302925 0.0001453821318 0 2.481579901e-05 + 729 8 181.5066021 -37.89505808 -37.89464269 5.192315662e-05 0.0001304506073 0 2.273730814e-05 + 730 8 203.909696 -38.59096266 -38.6013366 0.001296743008 9.473850361e-05 0 1.76056299e-05 + 731 8 205.1126777 -38.62972341 -38.64391104 0.001773453948 8.759095623e-05 0 1.647261185e-05 + 732 8 184.5445717 -38.24463573 -38.25124586 0.0008262664803 0.0001213825912 0 2.007118304e-05 + 733 8 199.8401153 -38.48718548 -38.49052576 0.0004175355955 7.765142322e-05 0 1.202645854e-05 + 734 8 223.1986796 -38.00766009 -38.00996625 0.0002882697141 8.055533497e-05 0 1.404964883e-05 + 735 8 199.6805693 -38.11980976 -38.12342029 0.0004513161181 4.012871004e-05 0 5.839774644e-06 + 736 8 252.8403791 -36.60467775 -36.60069974 0.000497250998 4.362622093e-05 0 5.800414461e-06 + 737 8 198.5107918 -38.54782154 -38.55416607 0.0007930665431 8.000233616e-05 0 1.209506428e-05 + 738 8 240.2746556 -37.12835962 -37.1201504 0.001026152991 7.196035985e-05 0 1.119271318e-05 + 739 8 259.7921517 -36.17903854 -36.16807589 0.00137033142 8.573248044e-05 0 1.415301596e-05 + 740 8 208.9685096 -38.25515989 -38.25731067 0.0002688475667 6.62769562e-05 0 9.766768348e-06 + 741 8 177.7599007 -37.93571206 -37.94132829 0.0007020287773 0.0001203311204 0 1.99352064e-05 + 742 8 172.6442454 -37.38973837 -37.40288021 0.001642729557 0.0001853464431 0 2.767064783e-05 + 743 8 241.5000559 -37.19108733 -37.18998008 0.0001384067498 2.758449295e-05 0 3.960379498e-06 + 744 8 196.2156966 -38.33425212 -38.32809071 0.0007701762906 7.977303582e-05 0 1.403479802e-05 + 745 8 203.9057851 -38.27831601 -38.26043357 0.002235305183 6.417934147e-05 0 9.690866397e-06 + 746 8 199.4411869 -38.49270061 -38.50073488 0.001004283446 7.615440794e-05 0 1.148120704e-05 + 747 8 161.6371721 -36.55747018 -36.54552229 0.001493485917 0.0002872363855 0 5.343042756e-05 + 748 8 190.7988936 -38.33197655 -38.33313359 0.0001446297125 6.61851655e-05 0 7.875518902e-06 + 749 8 177.5846932 -38.07878165 -38.08884104 0.001257423163 0.000118602778 0 1.669279909e-05 + 750 8 183.4941491 -38.13629079 -38.14896174 0.00158386899 5.201648347e-05 0 7.243552467e-06 + 751 8 217.0790583 -38.1187873 -38.11551751 0.0004087232175 7.383534434e-05 0 1.286490531e-05 + 752 8 190.5854002 -38.00960069 -38.00238369 0.0009021249034 6.555276633e-05 0 9.668217029e-06 + 753 8 186.9273445 -38.50128355 -38.51484545 0.00169523789 4.668932778e-05 0 6.789835811e-06 + 754 8 163.1480345 -36.62536379 -36.63011742 0.0005942033321 0.0002950135761 0 5.206052484e-05 + 755 8 175.7133436 -37.50201783 -37.50782974 0.0007264883235 0.0001716260945 0 2.877899224e-05 + 756 8 187.4352249 -38.18666547 -38.19574518 0.001134963534 0.0001175302187 0 1.941783691e-05 + 757 8 235.9667545 -37.44503979 -37.44663736 0.0001996958052 9.085965042e-05 0 1.576522309e-05 + 758 8 188.7917546 -38.50931842 -38.51944094 0.001265314401 9.935993794e-05 0 1.586135015e-05 + 759 8 198.6797261 -38.54672635 -38.55319409 0.0008084670611 8.454946359e-05 0 1.462436025e-05 + 760 8 218.5738522 -38.25109833 -38.26396663 0.001608537217 6.740437564e-05 0 9.828373314e-06 + 761 8 197.9237998 -38.50230642 -38.5080721 0.0007207101233 6.765638008e-05 0 1.05562173e-05 + 762 8 202.6115429 -38.26328527 -38.26933466 0.0007561742151 8.360131716e-05 0 1.519744708e-05 + 763 8 161.98975 -36.52381648 -36.530783 0.0008708153465 0.0003177760264 0 5.027555656e-05 + 764 8 192.1771401 -38.54692677 -38.55583708 0.001113788897 7.742294499e-05 0 1.295922584e-05 + 765 8 167.5395855 -37.13350481 -37.13792633 0.0005526900662 7.492273242e-05 0 8.677670895e-06 + 766 8 169.0524849 -37.03521571 -37.03710464 0.0002361168381 0.0001334344122 0 2.003872764e-05 + 767 8 236.4569363 -37.52667701 -37.54088985 0.001776604625 8.222171663e-05 0 1.303342758e-05 + 768 8 182.4185299 -38.28059759 -38.29103906 0.001305183795 0.0001514926106 0 2.670442636e-05 + 769 8 190.3775792 -38.06492959 -38.05365894 0.001408831485 7.758697086e-05 0 1.271874462e-05 + 770 8 176.8166536 -38.06265271 -38.07517253 0.001564976951 0.0001663099553 0 3.068635209e-05 + 771 8 194.4023596 -38.66487612 -38.67858527 0.001713643699 8.661441163e-05 0 1.481497229e-05 + 772 8 229.8429753 -37.49601896 -37.49215139 0.0004834464247 6.334027133e-05 0 9.8555576e-06 + 773 8 205.2030871 -38.40357353 -38.40770728 0.0005167185693 5.213201662e-05 0 7.683153403e-06 + 774 8 192.603993 -38.27014338 -38.27252129 0.0002972385992 7.38870664e-05 0 1.031445298e-05 + 775 8 199.8416718 -38.63634062 -38.64865823 0.001539701522 7.400143237e-05 0 1.295695436e-05 + 776 8 206.3467645 -38.15703361 -38.13954779 0.002185727175 6.871551371e-05 0 1.111826858e-05 + 777 8 189.698767 -38.15853975 -38.16755307 0.001126665579 9.645496133e-05 0 1.512372093e-05 + 778 8 199.5217211 -38.17311714 -38.14767289 0.003180531242 8.582987676e-05 0 1.420162512e-05 +# aIn.xyz + config # atoms volume energy DFT energy energy error force DFT force force error + 779 216 5415.868678 -1039.810638 -1039.913414 0.000475817934 0.7908453706 1.017938253 0.00887792571 + 780 216 5415.868678 -1039.83496 -1039.940401 0.000488154643 0.4821880233 0.4416147911 0.00639702109 + 781 216 5415.868678 -1039.841654 -1039.942313 0.000466015385 0.4174423784 0.3740876674 0.006529851822 + 782 216 5415.868678 -1039.847249 -1039.948068 0.0004667560501 0.3369747877 0.220094134 0.006374820356 + 783 216 5415.868678 -1039.850755 -1039.950337 0.0004610296759 0.2853210325 0.1757734766 0.006908579125 + 784 216 5415.868678 -1039.851664 -1039.95188 0.0004639619833 0.2824033978 0.1165465795 0.006438661107 + 785 216 5415.868678 -1039.852094 -1039.952499 0.0004648354938 0.2915021701 0.1440125494 0.00621825641 + 786 216 5415.868678 -1039.853277 -1039.952996 0.0004616627392 0.2793208878 0.1072842068 0.006290779169 + 787 216 5415.868678 -1039.719247 -1039.962403 0.001125723319 1.142002702 1.1595725 0.01185348845 + 788 216 5415.868678 -1039.758684 -1039.990461 0.00107304533 0.7589264701 0.4417744661 0.009895997148 + 789 216 5415.868678 -1039.769672 -1039.988357 0.001012432308 0.6587898325 0.3432431721 0.01053518293 + 790 216 5415.868678 -1039.777008 -1039.992099 0.0009957879837 0.6140227028 0.2217566222 0.0106841028 + 791 216 5415.868678 -1039.783777 -1039.993394 0.0009704482934 0.5769587866 0.1853806847 0.0112042626 + 792 216 5415.868678 -1039.78524 -1039.993081 0.0009622302513 0.5705819769 0.2083624888 0.0112978411 + 793 216 5415.868678 -1039.810638 -1039.913414 0.000475817934 0.7908453706 1.017938253 0.00887792571 + 794 216 5415.868678 -1039.83496 -1039.940401 0.000488154643 0.4821880233 0.4416147911 0.00639702109 + 795 216 5415.868678 -1039.841654 -1039.942313 0.000466015385 0.4174423784 0.3740876674 0.006529851822 + 796 216 5415.868678 -1039.847249 -1039.948068 0.0004667560501 0.3369747877 0.220094134 0.006374820356 + 797 216 5415.868678 -1039.850755 -1039.950337 0.0004610296759 0.2853210325 0.1757734766 0.006908579125 + 798 216 5415.868678 -1039.851664 -1039.95188 0.0004639619833 0.2824033978 0.1165465795 0.006438661107 + 799 216 5415.868678 -1039.852094 -1039.952499 0.0004648354938 0.2915021701 0.1440125494 0.00621825641 + 800 216 5415.868678 -1039.853277 -1039.952996 0.0004616627392 0.2793208878 0.1072842068 0.006290779169 + 801 216 5415.868678 -1039.810638 -1039.913414 0.000475817934 0.7908453706 1.017938253 0.00887792571 + 802 216 5415.868678 -1039.83496 -1039.940401 0.000488154643 0.4821880233 0.4416147911 0.00639702109 + 803 216 5415.868678 -1039.841654 -1039.942313 0.000466015385 0.4174423784 0.3740876674 0.006529851822 + 804 216 5415.868678 -1039.847249 -1039.948068 0.0004667560501 0.3369747877 0.220094134 0.006374820356 + 805 216 5415.868678 -1039.850755 -1039.950337 0.0004610296759 0.2853210325 0.1757734766 0.006908579125 + 806 216 5415.868678 -1039.851664 -1039.95188 0.0004639619833 0.2824033978 0.1165465795 0.006438661107 + 807 216 5415.868678 -1039.852094 -1039.952499 0.0004648354938 0.2915021701 0.1440125494 0.00621825641 + 808 216 5415.868678 -1039.853277 -1039.952996 0.0004616627392 0.2793208878 0.1072842068 0.006290779169 + 809 216 5415.868678 -1039.819259 -1039.947071 0.0005917214968 0.6248439038 0.7413807657 0.007257904505 + 810 216 5415.868678 -1039.834587 -1039.966695 0.0006116118938 0.4438648629 0.4245499835 0.006125332449 + 811 216 5415.868678 -1039.843652 -1039.974893 0.0006076006336 0.3153769418 0.2530880664 0.006828137121 + 812 216 5415.868678 -1039.845743 -1039.977291 0.0006090191895 0.2846083615 0.129504055 0.006137806865 + 813 216 5415.868678 -1039.846548 -1039.977676 0.0006070750176 0.2744060698 0.1182526597 0.00604680368 + 814 216 5415.868678 -1039.846972 -1039.978139 0.0006072549335 0.2699708532 0.07186824953 0.006071019897 + 815 216 5415.868678 -1039.847116 -1039.978057 0.0006062111458 0.271417089 0.08924101881 0.006452719032 + 816 216 5415.868678 -1039.847285 -1039.978138 0.0006058017662 0.2723847177 0.06099855641 0.006417310026 + 817 216 5415.868678 -1039.847267 -1039.977959 0.0006050547795 0.275475896 0.06363151345 0.00642468613 + 818 216 5415.868678 -1039.76918 -1040.021046 0.001166042806 0.6108081687 0.7322829425 0.008792820145 + 819 216 5415.868678 -1039.780157 -1040.03964 0.001201308987 0.4937934609 0.4170669564 0.008448572548 + 820 216 5415.868678 -1039.782327 -1040.046627 0.001223609217 0.5246572602 0.2544630439 0.009210089878 + 821 216 5415.868678 -1039.784791 -1040.048072 0.001218892596 0.5065173074 0.1307610506 0.008805855102 + 822 216 5415.868678 -1039.785891 -1040.047681 0.001211994738 0.5004783679 0.1384518274 0.008649415031 + 823 216 5415.868678 -1039.786287 -1040.048038 0.00121180898 0.5175289273 0.08134266113 0.008734825384 + 824 216 5415.868678 -1039.786273 -1040.047773 0.00121064837 0.5361902605 0.09315793582 0.008934301572 + 825 216 5415.868678 -1039.787684 -1040.047133 0.001201148943 0.5319223186 0.06687219325 0.008900748196 + 826 216 5415.868678 -1039.789831 -1040.045233 0.001182416907 0.527942943 0.08595855114 0.009012583417 + 827 216 5415.868678 -1039.719247 -1039.962403 0.001125723319 1.142002702 1.1595725 0.01185348845 + 828 216 5415.868678 -1039.758684 -1039.990461 0.00107304533 0.7589264701 0.4417744661 0.009895997148 + 829 216 5415.868678 -1039.769672 -1039.988357 0.001012432308 0.6587898325 0.3432431721 0.01053518293 + 830 216 5415.868678 -1039.777008 -1039.992099 0.0009957879837 0.6140227028 0.2217566222 0.0106841028 + 831 216 5415.868678 -1039.783777 -1039.993394 0.0009704482934 0.5769587866 0.1853806847 0.0112042626 + 832 216 5415.868678 -1039.78524 -1039.993081 0.0009622302513 0.5705819769 0.2083624888 0.0112978411 +# aP.xyz + config # atoms volume energy DFT energy energy error force DFT force force error + 833 216 5415.868678 -1045.065221 -1045.371605 0.001418441699 0.801164225 0.2056122414 0.0107651657 + 834 216 5415.868678 -1045.07194 -1045.387251 0.001459771438 0.6615176103 0.5634887309 0.01282321356 + 835 216 5415.868678 -1045.070862 -1045.372662 0.001397221876 0.7256170371 0.1267534799 0.01087032015 + 836 216 5415.868678 -1045.076593 -1045.3726 0.001370403352 0.6410809756 0.1260010575 0.01128154866 + 837 216 5415.868678 -1045.078578 -1045.373362 0.001364737846 0.6149509059 0.1115001942 0.01106009175 + 838 216 5415.868678 -1045.082007 -1045.374601 0.001354601022 0.5610734179 0.200863598 0.01069609574 + 839 216 5415.868678 -1045.08228 -1045.374654 0.001353581516 0.5533446973 0.2537893242 0.01066775093 + 840 216 5415.868678 -1045.08233 -1045.375055 0.001355207869 0.5495622579 0.2678066546 0.01067155036 + 841 216 5415.868678 -1045.082206 -1045.37638 0.001361915942 0.5425204126 0.3115796338 0.01067378198 + 842 216 5415.868678 -1045.080622 -1045.37952 0.001383787615 0.5509218511 0.399180933 0.01098583873 + 843 216 5415.868678 -875.3019893 -875.1039748 0.0009167338555 22.55027528 21.65242249 0.113459931 + 844 216 5415.868678 -891.5587531 -891.3737103 0.000856679865 14.33899516 15.02942454 0.1413291263 + 845 216 5415.868678 -1045.589047 -1045.918791 0.001526593913 0.2546239753 0.08711264222 0.005239438152 + 846 216 5415.868678 -1045.589513 -1045.91902 0.001525498016 0.2392067915 0.05122783398 0.005238222153 + 847 216 5415.868678 -1045.589794 -1045.919073 0.001524436535 0.2294465313 0.051086047 0.005328355228 + 848 216 5415.868678 -1045.589957 -1045.919187 0.00152421304 0.2253050415 0.03946791996 0.005225495396 + 849 216 5415.868678 -1045.59021 -1045.919279 0.00152347094 0.2189563994 0.05102014202 0.005126419839 + 850 216 5415.868678 -1045.590336 -1045.919343 0.001523182909 0.2154363659 0.03612120006 0.005027204927 + 851 216 5415.868678 -1045.590451 -1045.919359 0.001522723966 0.2116966921 0.02945396537 0.004959923112 + 852 216 5415.868678 -1045.590476 -1045.919408 0.001522832896 0.210928191 0.01787469703 0.005033930589 + 853 216 5415.868678 -1045.590484 -1045.919437 0.001522928346 0.2106669045 0.01385266321 0.005124297048 +# aa.xyz + config # atoms volume energy DFT energy energy error force DFT force force error + 854 216 5415.868678 -1042.270887 -1042.707856 0.002023004826 1.25107143 1.124941462 0.01624040842 + 855 216 5415.868678 -1042.32413 -1042.753184 0.001986362246 0.7064879363 0.03353359845 0.0168270554 + 856 216 5415.868678 -1042.31072 -1042.744782 0.002009544989 0.8301452262 0.3864978695 0.01605311372 + 857 216 5415.868678 -1042.319118 -1042.7478 0.001984641017 0.7352830586 0.2784465482 0.01715606599 + 858 216 5415.868678 -1042.321577 -1042.750729 0.00198681364 0.7194060863 0.154138691 0.01680965884 + 859 216 5415.868678 -1042.322632 -1042.751675 0.001986312789 0.7196490673 0.1271175868 0.01672156891 + 860 216 5415.868678 -1042.323527 -1042.752367 0.00198536986 0.7157164229 0.07123730969 0.01674595253 + 861 216 5415.868678 -1042.324039 -1042.752493 0.001983585673 0.7149845404 0.08295995956 0.01685091534 + 862 216 5415.868678 -1042.324675 -1042.752825 0.001982176099 0.7068616533 0.05721258148 0.01691010466 + 863 216 5415.868678 -1042.325222 -1042.752919 0.001980076759 0.698505118 0.06234967692 0.01703858141 + 864 216 5415.868678 -1042.270887 -1042.707856 0.002023004826 1.25107143 1.124941462 0.01624040842 + 865 216 5415.868678 -1042.32413 -1042.753184 0.001986362246 0.7064879363 0.03353359845 0.0168270554 + 866 216 5415.868678 -1042.31072 -1042.744782 0.002009544989 0.8301452262 0.3864978695 0.01605311372 + 867 216 5415.868678 -1042.319118 -1042.7478 0.001984641017 0.7352830586 0.2784465482 0.01715606599 + 868 216 5415.868678 -1042.321577 -1042.750729 0.00198681364 0.7194060863 0.154138691 0.01680965884 + 869 216 5415.868678 -1042.322632 -1042.751675 0.001986312789 0.7196490673 0.1271175868 0.01672156891 + 870 216 5415.868678 -1042.323527 -1042.752367 0.00198536986 0.7157164229 0.07123730969 0.01674595253 + 871 216 5415.868678 -1042.324039 -1042.752493 0.001983585673 0.7149845404 0.08295995956 0.01685091534 + 872 216 5415.868678 -1042.324675 -1042.752825 0.001982176099 0.7068616533 0.05721258148 0.01691010466 + 873 216 5415.868678 -1042.325222 -1042.752919 0.001980076759 0.698505118 0.06234967692 0.01703858141 +# iIn.xyz + config # atoms volume energy DFT energy energy error force DFT force force error + 874 217 5415.868678 -1044.184718 -1044.368209 0.0008455786364 1.828385114 1.590246474 0.01172777209 + 875 217 5415.868678 -1044.235789 -1044.41869 0.0008428609853 0.4687739472 0.04093255819 0.01230559269 + 876 217 5415.868678 -1044.236013 -1044.418765 0.0008421755811 0.4722656267 0.03129665068 0.0123606598 + 877 217 5415.868678 -1044.231448 -1044.415602 0.0008486376619 0.546262094 0.3219369032 0.0123618746 + 878 217 5415.868678 -1044.233433 -1044.417297 0.0008472978093 0.4708396576 0.1309562771 0.01214180685 + 879 217 5415.868678 -1044.233942 -1044.417879 0.0008476375083 0.4679714571 0.08456632131 0.01216655718 + 880 217 5415.868678 -1044.234458 -1044.41819 0.0008466898631 0.467611175 0.05834004719 0.01221299712 + 881 217 5415.868678 -1044.234631 -1044.418353 0.0008466462735 0.4699018049 0.03210812629 0.01223152653 + 882 217 5415.868678 -1044.234702 -1044.418397 0.0008465191123 0.4725657719 0.03769394437 0.01223274438 + 883 217 5415.868678 -1044.234972 -1044.418504 0.0008457685411 0.4710558642 0.03139040994 0.01223321077 + 884 217 5415.868678 -1044.235664 -1044.41864 0.0008432067075 0.4676813421 0.04872803704 0.01227415742 + 885 217 5415.868678 -1044.175036 -1044.709392 0.002462470757 0.8913849656 0.9751257662 0.01237053473 + 886 217 5415.868678 -1044.195519 -1044.737893 0.002499417416 0.5665622759 0.3531211174 0.01289097818 + 887 217 5415.868678 -1044.196923 -1044.7396 0.002500814861 0.5478496347 0.3683173175 0.01357600642 + 888 217 5415.868678 -1044.195111 -1044.744346 0.002531036109 0.5529371904 0.1556555709 0.0133020372 + 889 217 5415.868678 -1044.19353 -1044.745134 0.00254195665 0.5669622351 0.1334004578 0.01352876269 + 890 217 5415.868678 -1044.192452 -1044.745909 0.002550495655 0.5802145991 0.07807150022 0.01322620412 + 891 217 5415.868678 -1044.191101 -1044.746182 0.00255797646 0.596040811 0.07664864454 0.01298190406 + 892 217 5415.868678 -1045.030892 -1045.289392 0.00119124481 0.7700587988 0.1544435002 0.01614497292 + 893 217 5415.868678 -1045.031891 -1045.290273 0.00119070183 0.7694442701 0.09249652649 0.01631314832 + 894 217 5415.868678 -1045.032645 -1045.29058 0.001188640011 0.7731528369 0.1043850086 0.01653684364 + 895 217 5415.868678 -1045.034094 -1045.291072 0.001184232733 0.7699045006 0.07778684432 0.01643397203 + 896 217 5415.868678 -1045.036163 -1045.291378 0.001176109611 0.7671277032 0.08875913387 0.01629267088 + 897 217 5415.868678 -1045.038103 -1045.291838 0.001169283905 0.7655030679 0.05687541319 0.01611889099 + 898 217 5415.868678 -1045.039296 -1045.291966 0.001164373842 0.7655117648 0.06699555054 0.01603419592 + 899 217 5415.868678 -1045.041628 -1045.292279 0.001155074485 0.757204469 0.04065622818 0.01618922403 + 900 217 5415.868678 -1044.902883 -1045.129497 0.001044300421 1.01682156 0.7578153703 0.01550970304 + 901 217 5415.868678 -1044.916841 -1045.146191 0.001056911734 0.7979066027 0.2651785197 0.01539218474 + 902 217 5415.868678 -1044.917583 -1045.147154 0.00105792891 0.799024712 0.272664719 0.01543380459 + 903 217 5415.868678 -1044.920093 -1045.150105 0.001059963104 0.7910871847 0.1577057675 0.01537499489 + 904 217 5415.868678 -1044.921795 -1045.151247 0.0010573852 0.790843495 0.1509006587 0.01545126518 + 905 217 5415.868678 -1044.567889 -1045.041747 0.002183678909 1.192036657 0.9639030481 0.01311452065 + 906 217 5415.868678 -1044.591667 -1045.064022 0.002176751195 0.7230072118 0.4678250268 0.01360671222 + 907 217 5415.868678 -1044.591768 -1045.064022 0.00217628747 0.7300595205 0.4885069345 0.01370259646 + 908 217 5415.868678 -1044.595858 -1045.071225 0.002190628176 0.6884312226 0.1976647031 0.01388991093 + 909 217 5415.868678 -1044.595907 -1045.071961 0.00219379609 0.6958504443 0.1735815301 0.01415745045 + 910 217 5415.868678 -1044.567889 -1045.041747 0.002183678909 1.192036657 0.9639030481 0.01311452065 + 911 217 5415.868678 -1044.591667 -1045.064022 0.002176751195 0.7230072118 0.4678250268 0.01360671222 + 912 217 5415.868678 -1044.591768 -1045.064022 0.00217628747 0.7300595205 0.4885069345 0.01370259646 + 913 217 5415.868678 -1044.595858 -1045.071225 0.002190628176 0.6884312226 0.1976647031 0.01388991093 + 914 217 5415.868678 -1044.595907 -1045.071961 0.00219379609 0.6958504443 0.1735815301 0.01415745045 +# iP.xyz + config # atoms volume energy DFT energy energy error force DFT force force error + 915 217 5415.868678 -1047.852178 -1047.962871 0.000510106911 0.5013604968 0.1666941805 0.009512339587 + 916 217 5415.868678 -1047.853065 -1047.963557 0.0005091787946 0.4721276693 0.062384911 0.009842481754 + 917 217 5415.868678 -1047.85311 -1047.963554 0.0005089580052 0.4712341001 0.06583336322 0.009892273059 + 918 217 5415.868678 -1047.853255 -1047.963727 0.0005090911379 0.4712323688 0.04913103115 0.009922170782 + 919 217 5415.868678 -1047.853381 -1047.96383 0.0005089795821 0.4761837248 0.06683339966 0.01003548125 + 920 217 5415.868678 -1047.853481 -1047.963947 0.0005090602007 0.4748145971 0.05616451051 0.01002056878 + 921 217 5415.868678 -1047.853619 -1047.964084 0.0005090565246 0.4724082071 0.04961047584 0.009979221773 + 922 217 5415.868678 -1047.88602 -1048.121118 0.001083399652 0.3499283599 0.2809369675 0.00852670778 + 923 217 5415.868678 -1047.887246 -1048.125913 0.00109984748 0.3539036523 0.06774237004 0.008124590412 + 924 217 5415.868678 -1047.886651 -1048.126029 0.001103128519 0.3583526032 0.08499741858 0.007853741543 + 925 217 5415.868678 -1047.886814 -1048.12339 0.001090210817 0.3670377883 0.1577884027 0.007991890471 + 926 217 5415.868678 -1047.886874 -1048.123456 0.001090237166 0.3726563309 0.1781628968 0.008192218112 + 927 217 5415.868678 -1047.887561 -1048.124344 0.00109116518 0.3521135306 0.09111081152 0.008329775023 + 928 217 5415.868678 -1047.887563 -1048.124351 0.001091185133 0.3537121777 0.09792675782 0.008366610199 + 929 217 5415.868678 -1047.887835 -1048.124774 0.001091885059 0.3544588145 0.07568275 0.008412938799 + 930 217 5415.868678 -1047.888126 -1048.125116 0.001092118727 0.3580532784 0.07452922015 0.008490218485 + 931 217 5415.868678 -1047.888022 -1048.125451 0.0010941446 0.3548415732 0.05461869489 0.008436326941 + 932 217 5415.868678 -1047.887414 -1048.125749 0.001098316775 0.3532950834 0.08069659617 0.008238015891 + 933 217 5415.868678 -1048.266423 -1048.650761 0.001771143161 0.4693529314 0.2177323323 0.00874335961 + 934 217 5415.868678 -1048.267678 -1048.651819 0.001770234455 0.4341095255 0.09934669065 0.008708458149 + 935 217 5415.868678 -1048.267693 -1048.651815 0.001770148104 0.4340454084 0.1011917514 0.008710895569 + 936 217 5415.868678 -1048.268354 -1048.652225 0.001768989816 0.4333248545 0.07297778791 0.008614728161 + 937 217 5415.868678 -1048.269232 -1048.652465 0.001766053095 0.4346944656 0.09805056398 0.008593529969 + 938 217 5415.868678 -1048.270136 -1048.6528 0.001763430531 0.4301738457 0.07826885322 0.008525935629 + 939 217 5415.868678 -1048.260003 -1048.646292 0.001780133479 0.5474553136 0.2128658241 0.009620066398 + 940 217 5415.868678 -1048.262128 -1048.64733 0.00177512335 0.4932449311 0.09943664187 0.009661832379 + 941 217 5415.868678 -1048.262187 -1048.647328 0.001774840595 0.491948054 0.1036313663 0.009666067998 + 942 217 5415.868678 -1048.262965 -1048.647762 0.001773258513 0.4917679489 0.07611764095 0.009551607688 + 943 217 5415.868678 -1048.26411 -1048.648045 0.00176928604 0.4942342518 0.1081873822 0.009449126369 + 944 217 5415.868678 -1048.265148 -1048.648374 0.001766016539 0.4858661888 0.09237285975 0.009441492164 + 945 217 5415.868678 -1047.933811 -1048.20699 0.00125888781 0.4160601851 0.2151057956 0.01011311227 + 946 217 5415.868678 -1047.940088 -1048.210499 0.001246135285 0.4059539576 0.02549285035 0.01005916846 + 947 217 5415.868678 -1047.934315 -1048.208565 0.001263823316 0.4254353845 0.1244230481 0.00990874376 + 948 217 5415.868678 -1047.934486 -1048.208999 0.001265036959 0.4452570222 0.1167395518 0.01019903868 + 949 217 5415.868678 -1047.935791 -1048.209563 0.001261619185 0.4342653249 0.07604204528 0.00992823264 + 950 217 5415.868678 -1047.937179 -1048.20979 0.001256273243 0.4246020927 0.07088630399 0.009806176598 + 951 217 5415.868678 -1047.938317 -1048.210046 0.001252206104 0.4088297166 0.04610705322 0.009993958313 + 952 217 5415.868678 -1047.939342 -1048.210101 0.001247738446 0.3948480996 0.05938067539 0.01023144507 + 953 217 5415.868678 -1047.93973 -1048.210298 0.001246855602 0.3976679754 0.0418114201 0.01016476279 + 954 217 5415.868678 -1047.939946 -1048.210352 0.001246110616 0.4001946624 0.04570540702 0.009990927155 + 955 217 5415.868678 -1047.22627 -1046.891795 0.001541359733 0.6085889766 0.1700518373 0.008080805649 + 956 217 5415.868678 -1047.241883 -1046.896057 0.001593665684 0.5692671115 0.02034620982 0.008741109293 + 957 217 5415.868678 -1047.242445 -1046.89605 0.001596288061 0.5676759413 0.02580251953 0.008717574029 + 958 217 5415.868678 -1047.226959 -1046.892878 0.001539542023 0.6132072782 0.1187286726 0.0081823364 + 959 217 5415.868678 -1047.227872 -1046.893467 0.001541036776 0.6217573368 0.1479406956 0.008945010057 + 960 217 5415.868678 -1047.230487 -1046.894322 0.00154914456 0.6119502028 0.1167119712 0.008853822655 + 961 217 5415.868678 -1047.237363 -1046.895491 0.001575446683 0.5871694114 0.08258878379 0.008688212255 + 962 217 5415.868678 -1047.239663 -1046.895856 0.001584362917 0.5750529401 0.04173884989 0.008596377456 + 963 217 5415.868678 -1047.24046 -1046.895895 0.001587857727 0.5709410745 0.04118416521 0.008562811812 + 964 217 5415.868678 -1047.240973 -1046.895999 0.001589741528 0.5708386442 0.02244058595 0.008662951228 + 965 217 5415.868678 -1047.241303 -1046.896018 0.001591174748 0.571009143 0.02951170575 0.008760687518 + 966 217 5415.868678 -1047.853034 -1047.962887 0.0005062361166 0.4939611253 0.1640326518 0.009352467084 + 967 217 5415.868678 -1047.853784 -1047.963621 0.0005061602818 0.4748369486 0.06859171758 0.009668995027 + 968 217 5415.868678 -1047.853832 -1047.963624 0.000505953776 0.4751331617 0.07541819671 0.009724690153 + 969 217 5415.868678 -1047.854117 -1047.963809 0.0005054945124 0.4719781675 0.05603855868 0.009756042007 + 970 217 5415.868678 -1047.854436 -1047.963984 0.0005048311883 0.4720780537 0.07159590343 0.009862937443 + 971 217 5415.868678 -1047.85458 -1047.964158 0.000504968158 0.4698545308 0.05239334705 0.009822408452 + 972 217 5415.868678 -1047.854681 -1047.964298 0.0005051516593 0.4676523163 0.04998721177 0.009744400217 + 973 217 5415.868678 -1047.935187 -1048.207636 0.001255525306 0.4130705046 0.2107035176 0.01003245671 + 974 217 5415.868678 -1047.939834 -1048.210544 0.001247509681 0.4054111036 0.02276257474 0.009944259183 + 975 217 5415.868678 -1047.940121 -1048.210581 0.001246360868 0.4082717977 0.0347022053 0.009935778073 + 976 217 5415.868678 -1047.935737 -1048.20913 0.001259876592 0.4214184837 0.1138751307 0.009895571475 + 977 217 5415.868678 -1047.935938 -1048.209503 0.00126066849 0.4367298556 0.1048268015 0.01019612147 + 978 217 5415.868678 -1047.93702 -1048.209977 0.001257868492 0.4270379386 0.06440798169 0.009992464095 + 979 217 5415.868678 -1047.938917 -1048.210069 0.001249543976 0.4143004365 0.09181000988 0.009801668523 + 980 217 5415.868678 -1047.939497 -1048.210334 0.001248098842 0.4045226102 0.0472477842 0.01022628608 + 981 217 5415.868678 -1047.939461 -1048.210341 0.001248297163 0.4051729493 0.04343080238 0.0101920002 + 982 217 5415.868678 -1047.939556 -1048.210453 0.001248370933 0.4042975646 0.02592953378 0.01005545662 + 983 217 5415.868678 -1047.939595 -1048.210475 0.001248292894 0.4041092081 0.03036606273 0.009984175049 + 984 217 5415.868678 -1047.449774 -1047.556397 0.0004913494006 0.5874017699 0.2219852875 0.01108819681 + 985 217 5415.868678 -1047.458396 -1047.558337 0.0004605571859 0.5616156595 0.02097634267 0.01128824691 + 986 217 5415.868678 -1047.458856 -1047.558346 0.0004584778787 0.5593300756 0.02774914188 0.01128972884 + 987 217 5415.868678 -1047.451177 -1047.557624 0.000490539471 0.5842609559 0.06408359988 0.01126387964 + 988 217 5415.868678 -1047.451193 -1047.557624 0.0004904696594 0.5849359412 0.06428820445 0.01131710927 + 989 217 5415.868678 -1047.452085 -1047.557789 0.0004871179575 0.5783247772 0.04599249524 0.01130840941 + 990 217 5415.868678 -1047.453434 -1047.557881 0.0004813212898 0.5691911147 0.0604720343 0.0113275916 + 991 217 5415.868678 -1047.454317 -1047.558001 0.0004778062756 0.5670843179 0.04955803213 0.011365922 + 992 217 5415.868678 -1047.456841 -1047.558168 0.0004669446174 0.5614803258 0.03898771179 0.0114191087 + 993 217 5415.868678 -1047.457201 -1047.558246 0.0004656414637 0.5630690232 0.02526134694 0.01136719437 + 994 217 5415.868678 -1047.457642 -1047.558285 0.0004637918893 0.5656203589 0.03121301858 0.01130130442 + 995 217 5415.868678 -1047.269378 -1047.199833 0.0003204845704 0.3745311668 0.1094295726 0.008598465236 + 996 217 5415.868678 -1047.270083 -1047.200383 0.0003211973188 0.3688567878 0.0725054687 0.008536386235 + 997 217 5415.868678 -1047.270934 -1047.200815 0.0003231300892 0.3665487357 0.06576947468 0.008423316632 + 998 217 5415.868678 -1047.271576 -1047.201052 0.0003249975527 0.3630960734 0.04258302345 0.008607800469 + 999 217 5415.868678 -1047.272337 -1047.201187 0.0003278784255 0.360168596 0.04583802548 0.008870574468 + 1000 217 5415.868678 -1047.272973 -1047.201282 0.0003303716903 0.3538699484 0.0222291738 0.008622388083 + 1001 217 5415.868678 -1047.273303 -1047.201287 0.000331870763 0.3511446406 0.02343844764 0.008495805618 + 1002 217 5415.868678 -1047.273721 -1047.201326 0.0003336205695 0.3458207262 0.01731841477 0.008516740759 + 1003 217 5415.868678 -1047.274383 -1047.20132 0.0003366972311 0.3373837281 0.03172999738 0.008759602253 + 1004 217 5415.868678 -1048.07978 -1048.350803 0.001248951685 0.8772555354 0.3293338275 0.01335446486 + 1005 217 5415.868678 -1048.086775 -1048.353641 0.001229795668 0.8144420304 0.1576327256 0.01374292593 + 1006 217 5415.868678 -1048.088077 -1048.353731 0.001224212527 0.8098079983 0.1782837436 0.0138418457 + 1007 217 5415.868678 -1048.093031 -1048.354993 0.001207199225 0.782894271 0.1279739886 0.01383112095 + 1008 217 5415.868678 -1048.099925 -1048.355858 0.001179415777 0.7574998681 0.1748097437 0.01382441107 + 1009 217 5415.868678 -1048.254847 -1048.645441 0.001799973565 0.5461739023 0.2062737777 0.009423788472 + 1010 217 5415.868678 -1048.257193 -1048.646427 0.001793703316 0.4905441379 0.102252127 0.009359425629 + 1011 217 5415.868678 -1048.257328 -1048.646423 0.001793063675 0.4877139668 0.1082905235 0.009373382245 + 1012 217 5415.868678 -1048.258424 -1048.646912 0.001790268179 0.4874933534 0.082360134 0.009272174322 + 1013 217 5415.868678 -1048.260392 -1048.647309 0.001783026047 0.4900262453 0.1221519993 0.00928978104 + 1014 217 5415.868678 -1048.261548 -1048.647665 0.001779341224 0.4824953825 0.1072878071 0.009268513676 +# s_aIn.xyz + config # atoms volume energy DFT energy energy error force DFT force force error + 1015 64 1604.70183 -304.1810657 -304.1183733 0.0009795678428 1.565507629 2.305478012 0.05504200165 + 1016 64 1604.70183 -304.3914299 -304.3336151 0.0009033564244 0.2562407932 0.2453241073 0.01198660434 + 1017 64 1604.70183 -304.3939863 -304.3359385 0.0009069971342 0.2786955277 0.297290712 0.01125313267 + 1018 64 1604.70183 -304.3987889 -304.3410358 0.0009023918616 0.232763913 0.1889651571 0.008656773523 + 1019 64 1604.70183 -304.4001024 -304.3415103 0.0009155017093 0.2370293563 0.2390069121 0.009561275046 + 1020 64 1604.70183 -304.4044168 -304.3453396 0.0009230815114 0.1861803073 0.1580702694 0.008988118166 + 1021 64 1604.70183 -304.4059607 -304.345879 0.0009387774907 0.1877917509 0.2095346853 0.009957165185 + 1022 64 1604.70183 -304.4085448 -304.3486891 0.0009352452583 0.1529528127 0.1167269161 0.008849997943 + 1023 64 1604.70183 -304.408623 -304.3486878 0.0009364876967 0.1542165241 0.1257882307 0.008955191215 + 1024 64 1604.70183 -304.4094024 -304.3496753 0.0009332350419 0.1478567812 0.08656506058 0.008252268014 + 1025 64 1604.70183 -304.4094204 -304.3496649 0.0009336791586 0.1505616541 0.09839553946 0.008272174153 + 1026 64 1604.70183 -304.289355 -304.2685389 0.000325251555 0.7805210533 0.7739179453 0.02014453492 + 1027 64 1604.70183 -304.4099237 -304.35005 0.0009355263432 0.1451913236 0.05548809965 0.00785129701 + 1028 64 1604.70183 -304.4099285 -304.3500317 0.0009358861935 0.1456946931 0.05817914918 0.007852792121 + 1029 64 1604.70183 -304.4102752 -304.3500689 0.0009407233824 0.1410863583 0.04746432576 0.007800152175 + 1030 64 1604.70183 -304.4103082 -304.350039 0.0009417059547 0.1411764185 0.05392276555 0.007858070998 + 1031 64 1604.70183 -304.4105893 -304.3501572 0.0009442526071 0.1382657254 0.04149611324 0.007700825619 + 1032 64 1604.70183 -304.4108747 -304.3500998 0.0009496074355 0.138855402 0.06573590905 0.007839359868 + 1033 64 1604.70183 -304.4110173 -304.3502019 0.0009502411077 0.1359833981 0.04268446609 0.007763989369 + 1034 64 1604.70183 -304.4111171 -304.3501966 0.0009518818619 0.1355274337 0.03759303824 0.007852269107 + 1035 64 1604.70183 -304.4111366 -304.3502444 0.0009514406092 0.1368818708 0.0266449967 0.007662709097 + 1036 64 1604.70183 -304.4111094 -304.3502394 0.0009510934149 0.1415645569 0.03983014607 0.007533435141 + 1037 64 1604.70183 -304.3044705 -304.2786375 0.0004036402839 0.6693609708 0.6274608625 0.01996972489 + 1038 64 1604.70183 -304.4111519 -304.3502727 0.0009512380666 0.14195552 0.03407361622 0.00746055166 + 1039 64 1604.70183 -304.4111999 -304.350279 0.0009518894626 0.1449101125 0.03649228113 0.00740722711 + 1040 64 1604.70183 -304.4113436 -304.3503264 0.0009533943474 0.141362681 0.02060734287 0.007367146173 + 1041 64 1604.70183 -304.4114384 -304.3503244 0.0009549066059 0.13929162 0.02262962547 0.007428772677 + 1042 64 1604.70183 -304.3221067 -304.2930629 0.0004538094292 0.5760569086 0.4591655993 0.0173098889 + 1043 64 1604.70183 -304.3451857 -304.302465 0.000667510842 0.4942167614 0.5271467328 0.02010460066 + 1044 64 1604.70183 -304.3600357 -304.3134536 0.0007278466268 0.3963868988 0.3510297438 0.01700651885 + 1045 64 1604.70183 -304.3719663 -304.3167565 0.0008626531924 0.3460367188 0.3867991703 0.01666762527 + 1046 64 1604.70183 -304.3803577 -304.3243676 0.000874844823 0.285840248 0.2703584674 0.0141175169 + 1047 64 1604.70183 -304.3857753 -304.3264944 0.000926263896 0.2943293048 0.3661117953 0.01544961516 + 1048 64 1604.70183 -304.3203445 -304.2154142 0.001639534616 1.132523241 1.908531017 0.04661597503 + 1049 64 1604.70183 -304.4087594 -304.3466019 0.0009712107865 0.1643463824 0.1267964189 0.008569624329 + 1050 64 1604.70183 -304.4086107 -304.346789 0.0009659645404 0.1725786747 0.1407880367 0.008806071671 + 1051 64 1604.70183 -304.4094226 -304.3482432 0.0009559272451 0.162146421 0.08364019503 0.007764233046 + 1052 64 1604.70183 -304.4095427 -304.3484492 0.0009545860613 0.1674249634 0.1088728733 0.008040756729 + 1053 64 1604.70183 -304.4104756 -304.3493906 0.0009544524078 0.1537587182 0.07352911164 0.007901357965 + 1054 64 1604.70183 -304.4107687 -304.3495352 0.000956772727 0.1526972396 0.094011125 0.008331099188 + 1055 64 1604.70183 -304.4114607 -304.3501963 0.000957255379 0.1394873417 0.03544713083 0.007540804339 + 1056 64 1604.70183 -304.4114928 -304.3502027 0.000957657353 0.1392255117 0.03877790682 0.007589084834 + 1057 64 1604.70183 -304.4116225 -304.3502773 0.0009585187667 0.1363117951 0.02709318802 0.00764990066 + 1058 64 1604.70183 -304.4116087 -304.350282 0.000958230929 0.1364124547 0.02146921678 0.007580385763 + 1059 64 1604.70183 -304.3831409 -304.3175555 0.001024772666 0.4324561786 0.5662425474 0.0142545705 + 1060 64 1604.70183 -304.388638 -304.3233002 0.001020902585 0.36413796 0.4481290039 0.01314094075 + 1061 64 1604.70183 -304.3947814 -304.3306785 0.00100160861 0.2802763264 0.2795396786 0.01016164191 + 1062 64 1604.70183 -304.3992137 -304.3336518 0.001024403905 0.2325148246 0.2667651444 0.01152142421 + 1063 64 1604.70183 -304.4021826 -304.3370519 0.00101766748 0.1968564322 0.1924812547 0.01061648811 + 1064 64 1604.70183 -304.4051594 -304.3391477 0.001031432319 0.186074912 0.2418722263 0.0118606842 + 1065 64 1604.70183 -304.407093 -304.342178 0.001014296656 0.1589718372 0.1716629176 0.01041105962 + 1066 64 1604.70183 -304.4081057 -304.3442946 0.0009970479051 0.1725088705 0.2018779887 0.009531861563 + 1067 64 1604.70183 -304.3374126 -304.2640743 0.001145910637 0.8593624147 1.396101735 0.03290037813 + 1068 64 1604.70183 -304.4038483 -304.3490246 0.0008566199701 0.1623666425 0.09932478683 0.008317000915 + 1069 64 1604.70183 -304.4045113 -304.3488221 0.0008701437059 0.1821636499 0.1438079047 0.008319786517 + 1070 64 1604.70183 -304.4056645 -304.349352 0.0008798825777 0.1721869676 0.09614615623 0.007722864405 + 1071 64 1604.70183 -304.4067312 -304.3493327 0.0008968522104 0.1713927746 0.0925277669 0.007610347628 + 1072 64 1604.70183 -304.407749 -304.3496936 0.0009071162394 0.1562494675 0.06338859632 0.007737863997 + 1073 64 1604.70183 -304.4087416 -304.3497312 0.0009220379387 0.1456167128 0.08614316355 0.008484631554 + 1074 64 1604.70183 -304.408934 -304.3500268 0.0009204255476 0.1482232313 0.06542982386 0.007925951525 + 1075 64 1604.70183 -304.4089371 -304.3500416 0.0009202425634 0.1462754681 0.05506129626 0.00789152301 + 1076 64 1604.70183 -304.4092348 -304.3502275 0.0009219890146 0.1446291818 0.04561884242 0.007891039697 + 1077 64 1604.70183 -304.4097258 -304.3502694 0.0009290072627 0.1479845032 0.08354333774 0.008391570211 + 1078 64 1604.70183 -304.3756768 -304.326355 0.0007706527183 0.4457955283 0.578792049 0.01483363699 + 1079 64 1604.70183 -304.4098813 -304.3503325 0.0009304489755 0.1454001409 0.0724799242 0.008275637399 + 1080 64 1604.70183 -304.4102471 -304.3503793 0.000935434545 0.139993574 0.05049620186 0.007943045459 + 1081 64 1604.70183 -304.4102962 -304.3504279 0.0009354414418 0.1388310796 0.04120066338 0.007857225738 + 1082 64 1604.70183 -304.4103753 -304.3504582 0.0009362042643 0.1377184389 0.0366293139 0.007700558765 + 1083 64 1604.70183 -304.4104263 -304.3504801 0.0009366598398 0.1370590373 0.02817199712 0.007737110718 + 1084 64 1604.70183 -304.410488 -304.350421 0.0009385471537 0.1387931982 0.04689948858 0.008028527331 + 1085 64 1604.70183 -304.410507 -304.3504164 0.0009389152005 0.1391742949 0.04395007538 0.007996301636 + 1086 64 1604.70183 -304.4105466 -304.3503903 0.0009399412339 0.14061144 0.03544340682 0.007808996888 + 1087 64 1604.70183 -304.4105833 -304.3504112 0.0009401889413 0.139901149 0.02819657383 0.00773101486 + 1088 64 1604.70183 -304.410652 -304.3504197 0.0009411293709 0.1397650775 0.03228016109 0.007627305057 + 1089 64 1604.70183 -304.383319 -304.3352632 0.0007508717263 0.3600590749 0.450703478 0.01294425408 + 1090 64 1604.70183 -304.3899765 -304.3426703 0.0007391584003 0.2750229849 0.269858148 0.009013347438 + 1091 64 1604.70183 -304.3941281 -304.3449414 0.0007685415389 0.2417328945 0.2579784508 0.01043241772 + 1092 64 1604.70183 -304.3973982 -304.34731 0.0007826277151 0.1999560194 0.1648922505 0.009055196386 + 1093 64 1604.70183 -304.3999624 -304.3474875 0.0008199215246 0.178856989 0.1803554071 0.01005112943 + 1094 64 1604.70183 -304.4017867 -304.3485934 0.0008311460158 0.155907315 0.1129201486 0.009114499516 + 1095 64 1604.70183 -304.4027455 -304.3483492 0.0008499418947 0.1599494193 0.1350301486 0.00912359478 + 1096 64 1604.70183 -304.2342914 -304.200768 0.0005238042537 1.184782717 1.819144301 0.04227503511 + 1097 64 1604.70183 -304.3795358 -304.3500865 0.0004601447515 0.2488266109 0.1781286592 0.01071467621 + 1098 64 1604.70183 -304.3852397 -304.3487458 0.0005702171784 0.2592590775 0.2557877428 0.01057235429 + 1099 64 1604.70183 -304.3908199 -304.3497132 0.0006422931446 0.2245474586 0.1685316444 0.008577790443 + 1100 64 1604.70183 -304.3960611 -304.3482204 0.0007475103425 0.214715755 0.1810683098 0.008387820117 + 1101 64 1604.70183 -304.3997962 -304.3489849 0.0007939274364 0.1820368735 0.1209871218 0.008209936684 + 1102 64 1604.70183 -304.4023643 -304.348199 0.0008463333445 0.1791617479 0.1869501129 0.009648804318 + 1103 64 1604.70183 -304.4048598 -304.3488678 0.0008748759482 0.1585402681 0.1442073789 0.009142622261 + 1104 64 1604.70183 -304.4079486 -304.34865 0.0009265410993 0.1465193893 0.1459071245 0.009291945871 + 1105 64 1604.70183 -304.4089875 -304.3497252 0.0009259734732 0.1371049829 0.08860906191 0.008593367303 + 1106 64 1604.70183 -304.4093795 -304.3498542 0.0009300828779 0.1491388931 0.1194539436 0.00892689158 + 1107 64 1604.70183 -304.300046 -304.3035592 5.489385375e-05 0.6350707167 0.7503816521 0.01908765464 + 1108 64 1604.70183 -304.4098855 -304.3503282 0.0009305834606 0.1460322465 0.0588052323 0.007974474444 + 1109 64 1604.70183 -304.4098943 -304.3502574 0.0009318260502 0.1497652391 0.06564837125 0.007807299893 + 1110 64 1604.70183 -304.4102331 -304.3502904 0.0009366053437 0.1445121088 0.04628024245 0.007576000651 + 1111 64 1604.70183 -304.4103189 -304.3502211 0.0009390282669 0.144389338 0.05833414675 0.007620165335 + 1112 64 1604.70183 -304.4106679 -304.3503077 0.0009431291989 0.1398920778 0.03940909731 0.007662921948 + 1113 64 1604.70183 -304.4109044 -304.3502268 0.0009480877728 0.1392832517 0.05597878554 0.007884986546 + 1114 64 1604.70183 -304.4111524 -304.3503044 0.0009507501814 0.1349660065 0.03320318545 0.007726932813 + 1115 64 1604.70183 -304.4112294 -304.3502741 0.0009524271575 0.1344176289 0.04045773374 0.007806225186 + 1116 64 1604.70183 -304.4112882 -304.3503404 0.0009523091979 0.1349102289 0.02473106492 0.007621603277 + 1117 64 1604.70183 -304.4112809 -304.3503155 0.0009525850275 0.1371640303 0.03600013931 0.007577381946 + 1118 64 1604.70183 -304.3104297 -304.3154027 7.770264027e-05 0.5921972245 0.6793914655 0.01925883797 + 1119 64 1604.70183 -304.4112774 -304.3503299 0.0009523042519 0.1396309788 0.02419966905 0.007443317694 + 1120 64 1604.70183 -304.4112756 -304.3503274 0.0009523150934 0.1397753296 0.02469985988 0.007442942105 + 1121 64 1604.70183 -304.3260453 -304.3327701 0.0001050764912 0.5024443778 0.4354527263 0.0152348235 + 1122 64 1604.70183 -304.3373253 -304.3397328 3.761684625e-05 0.4986590783 0.4426639499 0.01638664931 + 1123 64 1604.70183 -304.3495569 -304.3467402 4.401249387e-05 0.4122905493 0.2665571133 0.01298927022 + 1124 64 1604.70183 -304.3585043 -304.3468491 0.0001821128841 0.3675884873 0.284577944 0.01318421389 + 1125 64 1604.70183 -304.3665897 -304.3493543 0.0002693023183 0.3048402431 0.1894246511 0.01188934259 + 1126 64 1604.70183 -304.3727495 -304.3482961 0.0003820851455 0.279276131 0.2496174364 0.01238820062 + 1127 64 1604.70183 -304.3741956 -304.2953059 0.001232651032 0.7003222271 1.159131838 0.02992718099 + 1128 64 1604.70183 -304.4004855 -304.3391168 0.0009588871425 0.3664208351 0.4811979703 0.01305389614 + 1129 64 1604.70183 -304.4067408 -304.346488 0.0009414504008 0.2605266027 0.2926965945 0.009242445258 + 1130 64 1604.70183 -304.4096809 -304.3494364 0.0009413199488 0.1888336436 0.1251155094 0.006745464517 + 1131 64 1604.70183 -304.4107346 -304.3497882 0.0009522874742 0.1633623575 0.1004341895 0.0075782181 + 1132 64 1604.70183 -304.4113387 -304.3501299 0.0009563879644 0.1443307987 0.04727131497 0.007499507401 + 1133 64 1604.70183 -304.4116073 -304.3501685 0.0009599804796 0.1358264401 0.04241239203 0.007601713694 + 1134 64 1604.70183 -304.4116752 -304.3502635 0.0009595572065 0.1333654932 0.02432923322 0.007542832823 + 1135 64 1604.70183 -304.4117149 -304.3503013 0.000959587776 0.1318822112 0.02105703398 0.007608722098 +# s_aP.xyz + config # atoms volume energy DFT energy energy error force DFT force force error + 1136 64 1604.70183 -309.5939689 -309.5645615 0.0004594904367 1.042473629 1.174034422 0.0423082882 + 1137 64 1604.70183 -309.6874561 -309.6192877 0.001065132154 0.7106242724 0.2107551128 0.02879623985 + 1138 64 1604.70183 -309.7092914 -309.6178884 0.0014281718 0.8449988237 0.3533983686 0.0292290749 + 1139 64 1604.70183 -309.7578248 -309.6208873 0.00213964818 1.09947422 0.8490534251 0.03107236882 + 1140 64 1604.70183 -309.8528493 -309.7123879 0.002194708792 1.372799186 1.843144508 0.03966184761 + 1141 64 1604.70183 -309.7939114 -309.7689498 0.0003900241713 1.650032012 2.44211318 0.0716667932 + 1142 64 1604.70183 -309.8870562 -309.8072173 0.001247482744 1.410939728 2.164385201 0.05176961502 + 1143 64 1604.70183 -309.8611093 -309.8197081 0.0006468937476 1.487048003 2.255019865 0.06269227362 + 1144 64 1604.70183 -309.88114 -309.8236384 0.0008984617601 1.435107123 2.203594228 0.0569194139 + 1145 64 1604.70183 -309.8809886 -309.8238835 0.0008922674034 1.435356503 2.20362982 0.05701138485 + 1146 64 1604.70183 -309.880507 -309.8245826 0.0008738188423 1.436246147 2.203531171 0.05726779563 + 1147 64 1604.70183 -309.6268567 -309.6085506 0.0002860330157 0.7444589747 0.5078419856 0.02941974642 + 1148 64 1604.70183 -309.8794966 -309.8258097 0.0008388583275 1.437988743 2.20380512 0.05779054084 + 1149 64 1604.70183 -309.8769334 -309.8275635 0.0007714050771 1.442691369 2.20431713 0.05881174674 + 1150 64 1604.70183 -309.8698649 -309.828368 0.0006483894319 1.456649702 2.20988047 0.06076779839 + 1151 64 1604.70183 -309.8745692 -309.8282987 0.0007229767694 1.4472282 2.205565897 0.05955984471 + 1152 64 1604.70183 -309.8751535 -309.8292816 0.0007167485257 1.44447812 2.200711234 0.05942671548 + 1153 64 1604.70183 -309.8768973 -309.8322164 0.0006981391424 1.436273595 2.185999735 0.05904262805 + 1154 64 1604.70183 -309.8803916 -309.8380237 0.000661998079 1.419655593 2.156043025 0.05824671627 + 1155 64 1604.70183 -309.8872098 -309.8493878 0.0005909681959 1.386810223 2.094604659 0.05657552994 + 1156 64 1604.70183 -309.9002585 -309.8711276 0.0004551713438 1.322179959 1.974304378 0.05339895955 + 1157 64 1604.70183 -309.9240812 -309.9105879 0.0002108324853 1.19776992 1.739494388 0.0470955878 + 1158 64 1604.70183 -309.6353 -309.6153095 0.0003123513142 0.6515366589 0.3247832504 0.02565465289 + 1159 64 1604.70183 -309.9624258 -309.9735887 0.0001744203003 0.9780033708 1.308701431 0.03738715476 + 1160 64 1604.70183 -310.001705 -310.0361345 0.000537960819 0.7796216653 0.8981766384 0.02552317636 + 1161 64 1604.70183 -310.0036471 -310.0386054 0.0005462232219 0.8044202531 0.9679520871 0.02733688373 + 1162 64 1604.70183 -310.0147061 -310.0539583 0.0006133152802 0.7631770866 0.8749575048 0.02497767805 + 1163 64 1604.70183 -310.0419554 -310.0904039 0.0007570082689 0.6658630379 0.6430068668 0.02186975313 + 1164 64 1604.70183 -310.0696763 -310.1198924 0.0007846273051 0.6426429483 0.6616123356 0.02409477903 + 1165 64 1604.70183 -310.0858976 -310.1379828 0.0008138308874 0.5636670099 0.4935629591 0.01951879407 + 1166 64 1604.70183 -310.1078836 -310.1566017 0.0007612203738 0.5159437685 0.5032513707 0.01820602054 + 1167 64 1604.70183 -310.1216306 -310.1695802 0.000749213184 0.4259280461 0.2617804208 0.01498349913 + 1168 64 1604.70183 -310.1262913 -310.1723392 0.0007194990682 0.4321037048 0.2705581096 0.01582319677 + 1169 64 1604.70183 -309.641999 -309.6183459 0.0003695791218 0.6050483579 0.2305600362 0.02533894861 + 1170 64 1604.70183 -310.1329673 -310.1769834 0.0006877527345 0.3577158479 0.170313541 0.0143476669 + 1171 64 1604.70183 -310.1376078 -310.1787788 0.0006432963082 0.3071356925 0.1972305034 0.01459569127 + 1172 64 1604.70183 -310.1416752 -310.1815303 0.000622736522 0.2470983872 0.1251851177 0.01245331601 + 1173 64 1604.70183 -310.1432968 -310.1820678 0.0006057979157 0.2306695458 0.1585959534 0.01225923053 + 1174 64 1604.70183 -310.1456296 -310.1841624 0.0006020757731 0.2036094642 0.09967902361 0.01131605281 + 1175 64 1604.70183 -310.1465878 -310.1846642 0.0005949449286 0.1976101792 0.1273746281 0.01174769336 + 1176 64 1604.70183 -310.1471716 -310.1859281 0.0006055717069 0.2128638665 0.07082877443 0.01086201723 + 1177 64 1604.70183 -310.1471246 -310.1859591 0.0006067884969 0.2189389536 0.08070849483 0.01074934643 + 1178 64 1604.70183 -310.1476402 -310.1863376 0.0006046456272 0.2121418657 0.04493171576 0.0114572539 + 1179 64 1604.70183 -310.1476036 -310.1863486 0.0006053910595 0.2119870839 0.03516103194 0.01128061835 + 1180 64 1604.70183 -309.6512847 -309.6188774 0.0005063635743 0.5584963148 0.2627178404 0.02741173692 + 1181 64 1604.70183 -310.1478239 -310.1864675 0.0006038071493 0.2083686877 0.025736163 0.01110285368 + 1182 64 1604.70183 -310.1479674 -310.1865067 0.0006021767729 0.2066273048 0.0378189683 0.01100708723 + 1183 64 1604.70183 -310.1481885 -310.1865935 0.0006000772417 0.2013310138 0.02376550031 0.01102732349 + 1184 64 1604.70183 -310.1484014 -310.1866387 0.0005974579093 0.1965206379 0.02528965919 0.01112154369 + 1185 64 1604.70183 -310.1485283 -310.1866817 0.0005961479389 0.1944824249 0.01685182506 0.01104145246 + 1186 64 1604.70183 -310.1486145 -310.1866935 0.0005949849098 0.1933498568 0.02352505679 0.01109051249 + 1187 64 1604.70183 -309.6583687 -309.6208955 0.0005855181518 0.5397345544 0.1627840742 0.0263766182 + 1188 64 1604.70183 -309.665461 -309.6203363 0.0007050734359 0.5676268214 0.1825192619 0.02582677042 + 1189 64 1604.70183 -309.6719199 -309.620892 0.0007973120058 0.600249898 0.1336064543 0.02606835924 + 1190 64 1604.70183 -309.6806047 -309.6193699 0.0009567938142 0.668924646 0.2090184596 0.02873610053 + 1191 64 1604.70183 -309.5605332 -310.0309165 0.007349738015 0.9968089712 0.8565470368 0.03475566132 + 1192 64 1604.70183 -309.6060218 -310.0664563 0.007194289355 0.6339096876 0.03680205134 0.0352298968 + 1193 64 1604.70183 -309.6068688 -310.0665204 0.007182056756 0.626463316 0.0486802411 0.03521247877 + 1194 64 1604.70183 -309.6066525 -310.0666919 0.007188115222 0.627318983 0.02927834268 0.0347335066 + 1195 64 1604.70183 -309.6064949 -310.066714 0.00719092366 0.6283188423 0.03451481121 0.03464053246 + 1196 64 1604.70183 -309.6058411 -310.066808 0.007202607851 0.6297454323 0.01985463832 0.03485265866 + 1197 64 1604.70183 -309.6055644 -310.0668162 0.00720706058 0.6304578352 0.02495493993 0.03494837831 + 1198 64 1604.70183 -309.6048459 -310.066846 0.007218752179 0.632403942 0.01344916451 0.0347606669 + 1199 64 1604.70183 -309.6048144 -310.0668458 0.00721924012 0.6324967217 0.01412536219 0.03473567325 + 1200 64 1604.70183 -309.584564 -310.0551585 0.007353039606 0.7808884414 0.357326643 0.03573913608 + 1201 64 1604.70183 -309.5927683 -310.0589913 0.007284733414 0.6954685138 0.2588645421 0.03837009541 + 1202 64 1604.70183 -309.5954127 -310.0618428 0.007287970438 0.6766308636 0.1650632833 0.03708476344 + 1203 64 1604.70183 -309.5977454 -310.0632792 0.007273965626 0.6640478654 0.1621634578 0.03569638026 + 1204 64 1604.70183 -309.5997366 -310.0647059 0.007265145878 0.6591298982 0.1048719784 0.03582853501 + 1205 64 1604.70183 -309.6020137 -310.0654337 0.007240937093 0.6580124867 0.11110601 0.03612380008 + 1206 64 1604.70183 -309.6041855 -310.0661409 0.007218052914 0.6471776754 0.0545589596 0.03548033671 + 1207 64 1604.70183 -309.604879 -310.066204 0.007208202864 0.6443969767 0.05988659423 0.03526923837 +# s_aa.xyz + config # atoms volume energy DFT energy energy error force DFT force force error + 1208 64 1604.70183 -306.7940335 -306.8765446 0.001289235701 1.436164002 1.550741673 0.03721963214 + 1209 64 1604.70183 -306.8894608 -306.9635484 0.001157618808 0.6511090306 0.08313926166 0.0378965797 + 1210 64 1604.70183 -306.8878253 -306.9641139 0.001192008889 0.66123524 0.04751845787 0.03761946759 + 1211 64 1604.70183 -306.886731 -306.9642579 0.00121135815 0.6683145743 0.05885677407 0.03743150591 + 1212 64 1604.70183 -306.8860427 -306.9645616 0.001226858211 0.6673999208 0.03569772073 0.03741220646 + 1213 64 1604.70183 -306.8855934 -306.9646359 0.001235038901 0.6673046679 0.04336334878 0.03745656827 + 1214 64 1604.70183 -306.8855103 -306.9647287 0.001237786422 0.6642990478 0.02612272166 0.03766276532 + 1215 64 1604.70183 -306.8854656 -306.9647237 0.001238408412 0.6636526089 0.03123046945 0.03772681043 + 1216 64 1604.70183 -306.8853289 -306.9647937 0.001241637613 0.6625514237 0.01837334842 0.03767702402 + 1217 64 1604.70183 -306.8852462 -306.9647952 0.00124295196 0.6622043602 0.02338071211 0.03765046774 + 1218 64 1604.70183 -306.8636478 -306.9489638 0.001333062663 0.858673314 0.4964505719 0.03180877204 + 1219 64 1604.70183 -306.8773749 -306.95465 0.001207424861 0.7196536467 0.3360787319 0.03519228092 + 1220 64 1604.70183 -306.883256 -306.9587198 0.001179121972 0.6761350656 0.1913594238 0.03562738463 + 1221 64 1604.70183 -306.8873328 -306.9598374 0.001132885177 0.6517047056 0.1824304626 0.03608290839 + 1222 64 1604.70183 -306.8894 -306.9613685 0.001124508142 0.6405294295 0.1314812763 0.0370611491 + 1223 64 1604.70183 -306.8926709 -306.9618848 0.001081467082 0.6283577276 0.191630116 0.04003386117 + 1224 64 1604.70183 -306.8920305 -306.9622122 0.001096588087 0.6294949169 0.1490140669 0.03915905711 + 1225 64 1604.70183 -306.8906004 -306.9634019 0.001137524229 0.6415705236 0.07684625941 0.0383253601 +# s_iIn.xyz + config # atoms volume energy DFT energy energy error force DFT force force error + 1226 65 1604.70183 -308.3245203 -307.9990581 0.005007110346 2.779207509 3.441754242 0.0564744198 + 1227 65 1604.70183 -308.6062748 -308.4144059 0.002951829204 0.457855745 0.08997623964 0.02420958679 + 1228 65 1604.70183 -308.6055633 -308.4146382 0.002937308295 0.4584127959 0.1092471882 0.02490062444 + 1229 65 1604.70183 -308.6045565 -308.4154013 0.002910080624 0.469387204 0.06911367211 0.02432308754 + 1230 65 1604.70183 -308.6034953 -308.415618 0.002890421121 0.4809249109 0.08345509896 0.02444513516 + 1231 65 1604.70183 -308.603785 -308.4161263 0.002887055579 0.4697212502 0.05432206118 0.0242028204 + 1232 65 1604.70183 -308.6038277 -308.4162335 0.002886064835 0.4650710589 0.06705929869 0.02438651462 + 1233 65 1604.70183 -308.6042518 -308.4165185 0.002888205099 0.4667108606 0.04128920457 0.02409383148 + 1234 65 1604.70183 -308.6042721 -308.41652 0.002888494529 0.4670335288 0.04492898089 0.02411761006 + 1235 65 1604.70183 -308.6049218 -308.4167061 0.002895625555 0.4573182868 0.03427145373 0.02422216515 + 1236 65 1604.70183 -308.6051209 -308.4167327 0.002898279151 0.4543962278 0.04208936552 0.02430834637 + 1237 65 1604.70183 -308.5537235 -308.3156704 0.00366235587 0.8384169944 1.095651338 0.03227322732 + 1238 65 1604.70183 -308.6054289 -308.4169299 0.002899985664 0.4563630788 0.03151013935 0.02443958845 + 1239 65 1604.70183 -308.6054963 -308.416954 0.00290064951 0.4570773908 0.03865944535 0.02451012875 + 1240 65 1604.70183 -308.6057803 -308.4170952 0.002902847629 0.4534348692 0.0222460715 0.02449917538 + 1241 65 1604.70183 -308.605875 -308.4171212 0.00290390467 0.4522491493 0.02719889895 0.02456231937 + 1242 65 1604.70183 -308.6059838 -308.4171286 0.002905465536 0.4520555207 0.0194709944 0.02444862051 + 1243 65 1604.70183 -308.6059747 -308.4171356 0.002905217643 0.4519538928 0.01523572781 0.02442693124 + 1244 65 1604.70183 -308.5582251 -308.3230075 0.003618732426 0.8840447315 1.126599892 0.03316384713 + 1245 65 1604.70183 -308.5889228 -308.3701717 0.00336540142 0.5738535621 0.648593671 0.02613956786 + 1246 65 1604.70183 -308.5962389 -308.3853208 0.003244894233 0.5938114735 0.6385477863 0.02559676451 + 1247 65 1604.70183 -308.6060656 -308.4029863 0.003124296467 0.4578598962 0.3442512187 0.02364129662 + 1248 65 1604.70183 -308.6077772 -308.4075278 0.003080759093 0.4339083692 0.3449502837 0.02523811273 + 1249 65 1604.70183 -308.6077638 -308.4127166 0.003000725427 0.4401967785 0.1481680844 0.02406415903 + 1250 65 1604.70183 -308.6067069 -308.4130973 0.002978609189 0.4652027629 0.1597902756 0.02438311415 + 1251 65 1604.70183 -308.5129577 -308.6167958 0.001597508683 1.885028683 2.852768231 0.05973414476 + 1252 65 1604.70183 -308.6893746 -308.9170738 0.003503065627 0.6150773035 0.1352086416 0.03081930354 + 1253 65 1604.70183 -308.6888515 -308.9177141 0.003520962332 0.6140231627 0.1628826239 0.03139011134 + 1254 65 1604.70183 -308.6881118 -308.9193611 0.003557681627 0.6232722378 0.08820903018 0.03105880339 + 1255 65 1604.70183 -308.687318 -308.9195378 0.003572612163 0.6323926947 0.107968378 0.03120073197 + 1256 65 1604.70183 -308.6875218 -308.920185 0.003579434533 0.6228422971 0.06171824913 0.03056262325 + 1257 65 1604.70183 -308.6875122 -308.9201947 0.003579731623 0.6222378455 0.06652360994 0.03057236783 + 1258 65 1604.70183 -308.6874808 -308.9204921 0.003584789696 0.6255975301 0.03993431489 0.0304208578 + 1259 65 1604.70183 -308.6874205 -308.920519 0.003586129585 0.6272723564 0.04802080375 0.03043819431 + 1260 65 1604.70183 -308.6876316 -308.9206738 0.003585264581 0.6207107422 0.03157448802 0.03063765139 + 1261 65 1604.70183 -308.6876555 -308.9206785 0.0035849703 0.6196134724 0.03684938922 0.03068813947 + 1262 65 1604.70183 -308.6613412 -308.8525904 0.002942295684 0.753019333 0.8898080397 0.03304441794 + 1263 65 1604.70183 -308.6872075 -308.9207652 0.00359319405 0.6270165756 0.0258968568 0.03065823685 + 1264 65 1604.70183 -308.6870273 -308.920767 0.003595995703 0.6298246241 0.03383547696 0.03064320358 + 1265 65 1604.70183 -308.6873449 -308.920822 0.003591956249 0.6257078051 0.0173254023 0.03056928675 + 1266 65 1604.70183 -308.687371 -308.9208223 0.003591557128 0.6253669473 0.0181348984 0.03056299432 + 1267 65 1604.70183 -308.6713046 -308.8649401 0.002979007234 0.6908727699 0.8198898761 0.0353476545 + 1268 65 1604.70183 -308.6834023 -308.8899041 0.003176950699 0.6056515474 0.4426657752 0.03163112521 + 1269 65 1604.70183 -308.6878379 -308.8965266 0.003210594825 0.5986428783 0.4287734665 0.03389193379 + 1270 65 1604.70183 -308.6905338 -308.9050188 0.003299769299 0.5862632802 0.2665119179 0.03185525674 + 1271 65 1604.70183 -308.6899586 -308.9083473 0.003359826291 0.6062915966 0.3056093386 0.03082923218 + 1272 65 1604.70183 -308.6904542 -308.9130965 0.00342526582 0.604655112 0.1844420899 0.03031441308 + 1273 65 1604.70183 -308.6890976 -308.9140188 0.003460325371 0.6255489879 0.2282513436 0.03063179931 + 1274 65 1604.70183 -309.4256164 -309.3691182 0.0008692032123 1.437815742 2.020276788 0.05677004035 + 1275 65 1604.70183 -309.5400936 -309.5146967 0.0003907220605 0.7318510125 0.06118717011 0.03718261807 + 1276 65 1604.70183 -309.5407806 -309.5148047 0.0003996290857 0.7281903112 0.07058777014 0.03729632267 + 1277 65 1604.70183 -309.5413233 -309.5151345 0.0004029047033 0.7280085189 0.04201719477 0.03712967395 + 1278 65 1604.70183 -309.5415922 -309.5152025 0.000405995123 0.72878388 0.0580625214 0.03702158117 + 1279 65 1604.70183 -309.5419329 -309.5154343 0.0004076704851 0.7257746874 0.03531064522 0.03707790196 + 1280 65 1604.70183 -309.5420531 -309.5154715 0.0004089473989 0.7245225873 0.04223218265 0.03707983087 + 1281 65 1604.70183 -309.5416639 -309.5156045 0.0004009146676 0.7289971141 0.02606522271 0.03687960858 + 1282 65 1604.70183 -309.5414901 -309.5156119 0.0003981269938 0.730919745 0.03465477955 0.03685578426 + 1283 65 1604.70183 -309.5415337 -309.5156876 0.0003976323933 0.7282404683 0.02432195266 0.0368729797 + 1284 65 1604.70183 -309.5415308 -309.5156871 0.0003975948276 0.7283441837 0.02398627549 0.03687112159 + 1285 65 1604.70183 -309.5013732 -309.4863816 0.0002306403903 0.9023517851 0.6088466764 0.0375905383 + 1286 65 1604.70183 -309.5085655 -309.4925326 0.0002466612286 0.870538061 0.5367648908 0.03867197121 + 1287 65 1604.70183 -309.5201297 -309.503522 0.0002555029518 0.8047125465 0.3010106009 0.03775365357 + 1288 65 1604.70183 -309.5266437 -309.5069551 0.0003029018144 0.7813124806 0.2862146586 0.03872670315 + 1289 65 1604.70183 -309.5319958 -309.5108334 0.0003255760955 0.7528696384 0.1736893616 0.03803420494 + 1290 65 1604.70183 -309.5363465 -309.5124736 0.0003672755085 0.7345411083 0.1747690184 0.03758478287 + 1291 65 1604.70183 -309.5380801 -309.513947 0.0003712788018 0.7379119371 0.09145900731 0.03706282061 + 1292 65 1604.70183 -309.5384423 -309.5140637 0.0003750551542 0.7415166329 0.1055625178 0.03696228559 + 1293 65 1604.70183 -309.193915 -308.9876108 0.003173912094 2.370166986 3.369528918 0.07569046838 + 1294 65 1604.70183 -309.4345423 -309.3185853 0.001783953729 0.7599020621 0.1300677154 0.0395726298 + 1295 65 1604.70183 -309.4353462 -309.318886 0.001791695891 0.7526870383 0.1593159524 0.03983935117 + 1296 65 1604.70183 -309.4340273 -309.3207419 0.001742852149 0.7619715056 0.1009829002 0.03942935474 + 1297 65 1604.70183 -309.432815 -309.321086 0.001718907324 0.7703893488 0.1287832777 0.0394546075 + 1298 65 1604.70183 -309.4308775 -309.3223733 0.001669295024 0.7665499825 0.07485259621 0.03932599867 + 1299 65 1604.70183 -309.4301585 -309.322468 0.001656777144 0.7672161201 0.08949052748 0.03934685031 + 1300 65 1604.70183 -309.4277057 -309.3230186 0.001610571586 0.7787234734 0.05851577257 0.03953140159 + 1301 65 1604.70183 -309.4269995 -309.3230433 0.00159932648 0.7824048147 0.06872746543 0.03958898046 + 1302 65 1604.70183 -309.4258254 -309.3233695 0.00157624458 0.7879347553 0.03873356362 0.03966151408 + 1303 65 1604.70183 -309.4256782 -309.3233729 0.001573928567 0.7887270184 0.04249452865 0.03970657587 + 1304 65 1604.70183 -309.3897656 -309.2696756 0.001847537742 0.9322336332 0.6965971345 0.04085163841 + 1305 65 1604.70183 -309.4255348 -309.3234569 0.001570428096 0.7917722431 0.02794548003 0.03972938174 + 1306 65 1604.70183 -309.4255272 -309.3234554 0.001570334512 0.7918722619 0.02854991492 0.03973466958 + 1307 65 1604.70183 -309.4260075 -309.3235117 0.001576858707 0.7881577183 0.01648901944 0.0398337122 + 1308 65 1604.70183 -309.426038 -309.3235109 0.001577339816 0.7879297522 0.01772431779 0.03984717757 + 1309 65 1604.70183 -309.3938797 -309.2717447 0.001878999389 0.9028153433 0.6965989888 0.04165985085 + 1310 65 1604.70183 -309.4080111 -309.2899774 0.001815902194 0.8260915811 0.4077923177 0.03949806363 + 1311 65 1604.70183 -309.4156759 -309.2966514 0.0018311466 0.8026043572 0.392635015 0.04046148143 + 1312 65 1604.70183 -309.4217171 -309.304246 0.001807248046 0.7817472516 0.2714570542 0.03985547558 + 1313 65 1604.70183 -309.4268514 -309.3094173 0.00180667763 0.7829475422 0.3024801867 0.04026972581 + 1314 65 1604.70183 -309.4304914 -309.314558 0.001783590063 0.7754466101 0.1807447293 0.03945134852 + 1315 65 1604.70183 -309.4312994 -309.3156286 0.001779550899 0.7875003302 0.219559556 0.03915372962 + 1316 65 1604.70183 -309.193915 -308.9876108 0.003173912094 2.370166986 3.369528918 0.07569046838 + 1317 65 1604.70183 -309.4345423 -309.3185853 0.001783953729 0.7599020621 0.1300677154 0.0395726298 + 1318 65 1604.70183 -309.4353462 -309.318886 0.001791695891 0.7526870383 0.1593159524 0.03983935117 + 1319 65 1604.70183 -309.4340273 -309.3207419 0.001742852149 0.7619715056 0.1009829002 0.03942935474 + 1320 65 1604.70183 -309.432815 -309.321086 0.001718907324 0.7703893488 0.1287832777 0.0394546075 + 1321 65 1604.70183 -309.4308775 -309.3223733 0.001669295024 0.7665499825 0.07485259621 0.03932599867 + 1322 65 1604.70183 -309.4301585 -309.322468 0.001656777144 0.7672161201 0.08949052748 0.03934685031 + 1323 65 1604.70183 -309.4277057 -309.3230186 0.001610571586 0.7787234734 0.05851577257 0.03953140159 + 1324 65 1604.70183 -309.4269995 -309.3230433 0.00159932648 0.7824048147 0.06872746543 0.03958898046 + 1325 65 1604.70183 -309.4258254 -309.3233695 0.00157624458 0.7879347553 0.03873356362 0.03966151408 + 1326 65 1604.70183 -309.4256782 -309.3233729 0.001573928567 0.7887270184 0.04249452865 0.03970657587 + 1327 65 1604.70183 -309.3897656 -309.2696756 0.001847537742 0.9322336332 0.6965971345 0.04085163841 + 1328 65 1604.70183 -309.4255348 -309.3234569 0.001570428096 0.7917722431 0.02794548003 0.03972938174 + 1329 65 1604.70183 -309.4255272 -309.3234554 0.001570334512 0.7918722619 0.02854991492 0.03973466958 + 1330 65 1604.70183 -309.4260075 -309.3235117 0.001576858707 0.7881577183 0.01648901944 0.0398337122 + 1331 65 1604.70183 -309.426038 -309.3235109 0.001577339816 0.7879297522 0.01772431779 0.03984717757 + 1332 65 1604.70183 -309.3938797 -309.2717447 0.001878999389 0.9028153433 0.6965989888 0.04165985085 + 1333 65 1604.70183 -309.4080111 -309.2899774 0.001815902194 0.8260915811 0.4077923177 0.03949806363 + 1334 65 1604.70183 -309.4156759 -309.2966514 0.0018311466 0.8026043572 0.392635015 0.04046148143 + 1335 65 1604.70183 -309.4217171 -309.304246 0.001807248046 0.7817472516 0.2714570542 0.03985547558 + 1336 65 1604.70183 -309.4268514 -309.3094173 0.00180667763 0.7829475422 0.3024801867 0.04026972581 + 1337 65 1604.70183 -309.4304914 -309.314558 0.001783590063 0.7754466101 0.1807447293 0.03945134852 + 1338 65 1604.70183 -309.4312994 -309.3156286 0.001779550899 0.7875003302 0.219559556 0.03915372962 + 1339 65 1604.70183 -308.9162309 -308.9630782 0.0007207274683 2.066277492 2.800626938 0.06114266406 + 1340 65 1604.70183 -309.1039277 -309.2065215 0.001578366484 0.6544581748 0.138418872 0.03224620578 + 1341 65 1604.70183 -309.1079855 -309.2079046 0.001537216969 0.6391784711 0.1695431883 0.03207823342 + 1342 65 1604.70183 -309.1115493 -309.209983 0.001514363992 0.635000055 0.1308716977 0.03234218525 + 1343 65 1604.70183 -309.11195 -309.2100901 0.001509847227 0.6360980694 0.1474462682 0.03249179813 + 1344 65 1604.70183 -309.1144527 -309.2120228 0.001501079953 0.6345184352 0.1313400831 0.03166474269 + 1345 65 1604.70183 -309.1146806 -309.2121515 0.001499553506 0.6364927018 0.1467476357 0.03160684471 + 1346 65 1604.70183 -309.1172752 -309.2140983 0.001489585422 0.6293465976 0.09611299438 0.03197835899 + 1347 65 1604.70183 -309.1187122 -309.2149834 0.001481094899 0.6293124814 0.1160960545 0.03243180431 + 1348 65 1604.70183 -309.1205584 -309.2164585 0.001475386297 0.6296078699 0.07866559763 0.03183650212 + 1349 65 1604.70183 -309.1223379 -309.2175399 0.001464645658 0.6424836707 0.1578762878 0.031665919 + 1350 65 1604.70183 -309.0592267 -309.1662917 0.001647153397 0.8577828883 0.7475202955 0.03572659541 + 1351 65 1604.70183 -309.1247691 -309.2177195 0.001430006789 0.624895562 0.1872886534 0.03408935424 + 1352 65 1604.70183 -309.124036 -309.218303 0.001450261865 0.626153986 0.07405831134 0.03255366139 + 1353 65 1604.70183 -309.1246069 -309.2185313 0.001444991184 0.6285176928 0.0851505638 0.03258250186 + 1354 65 1604.70183 -309.1245369 -309.2185433 0.001446252481 0.6270333985 0.06798810227 0.03257095601 + 1355 65 1604.70183 -309.1252469 -309.2188022 0.0014393121 0.6279676687 0.04126023346 0.03259779399 + 1356 65 1604.70183 -309.1256323 -309.218868 0.001434395781 0.6289867216 0.04668529029 0.03267191865 + 1357 65 1604.70183 -309.1261228 -309.2190464 0.001429594171 0.6257533094 0.02864289769 0.03273210687 + 1358 65 1604.70183 -309.1265001 -309.2191158 0.00142485714 0.6235016483 0.04103123196 0.03281188682 + 1359 65 1604.70183 -309.126729 -309.2193034 0.001424221593 0.6255198203 0.03118479854 0.0327848248 + 1360 65 1604.70183 -309.1269816 -309.2194759 0.00142298836 0.6289530433 0.04280295274 0.0328756331 + 1361 65 1604.70183 -309.0630197 -309.1692546 0.001634383103 0.8580276183 0.7633188526 0.03723203798 + 1362 65 1604.70183 -309.1273706 -309.2196605 0.001419844477 0.6284761031 0.02997866313 0.03295726008 + 1363 65 1604.70183 -309.1275805 -309.2197312 0.001417703314 0.6285527044 0.03975648274 0.03305442701 + 1364 65 1604.70183 -309.0779533 -309.187105 0.001679256836 0.7228233403 0.3835624808 0.03468202789 + 1365 65 1604.70183 -309.080487 -309.1882585 0.001658023507 0.7169742776 0.4423665736 0.0356260294 + 1366 65 1604.70183 -309.0862228 -309.1955048 0.001681261735 0.712998292 0.2406913048 0.03384944116 + 1367 65 1604.70183 -309.08758 -309.1967467 0.001679488205 0.7419764145 0.2826530301 0.03384988724 + 1368 65 1604.70183 -309.093098 -309.2007993 0.00165694379 0.7039792758 0.1910941657 0.03317801903 + 1369 65 1604.70183 -309.0987388 -309.2034724 0.00161128727 0.680040898 0.2151638473 0.03300237588 +# s_iP.xyz + config # atoms volume energy DFT energy energy error force DFT force force error + 1370 65 1604.70183 -312.294816 -312.1064156 0.002898467488 1.069066861 1.657687119 0.04361178404 + 1371 65 1604.70183 -312.3625834 -312.2174988 0.002232070281 0.4605113923 0.0826119634 0.02247609873 + 1372 65 1604.70183 -312.3627564 -312.2176788 0.002231963802 0.4598337205 0.09577527079 0.02260501476 + 1373 65 1604.70183 -312.3629301 -312.2184497 0.002222775551 0.4646090366 0.06132694502 0.02203608534 + 1374 65 1604.70183 -312.362726 -312.2187629 0.002214817303 0.4759024039 0.1096795721 0.02182101175 + 1375 65 1604.70183 -312.3635528 -312.2191496 0.002221588372 0.4601054657 0.08667491656 0.02283770646 + 1376 65 1604.70183 -312.3634044 -312.2192308 0.002218056423 0.4630115748 0.04768612191 0.02235717884 + 1377 65 1604.70183 -312.3634556 -312.219395 0.002216317397 0.4652659307 0.03276624032 0.02215870314 + 1378 65 1604.70183 -312.363417 -312.2194334 0.002215132712 0.4683871032 0.04507641972 0.02200336349 + 1379 65 1604.70183 -312.3636793 -312.2196116 0.00221642638 0.4670979717 0.03047486901 0.02218357253 + 1380 65 1604.70183 -312.3638725 -312.2197113 0.002217865176 0.46678415 0.03907189658 0.02240614205 + 1381 65 1604.70183 -312.3441859 -312.1896011 0.00237822785 0.5837662134 0.5552583025 0.02523073988 + 1382 65 1604.70183 -312.3641465 -312.2198852 0.002219404982 0.4660891497 0.02976997141 0.02244979126 + 1383 65 1604.70183 -312.364281 -312.2199516 0.002220451986 0.4663977601 0.03952582496 0.02247918113 + 1384 65 1604.70183 -312.3643786 -312.2201631 0.002218699538 0.469485468 0.02648351986 0.02248872808 + 1385 65 1604.70183 -312.3643987 -312.2202301 0.002217979255 0.4723245952 0.03554112535 0.022519955 + 1386 65 1604.70183 -312.3645395 -312.220395 0.002217606969 0.4725800672 0.02638162014 0.02257273332 + 1387 65 1604.70183 -312.3646021 -312.2204531 0.00221767758 0.4736421242 0.03851421937 0.02263564385 + 1388 65 1604.70183 -312.3647089 -312.2205957 0.002217125184 0.4752751112 0.04015446359 0.0227686653 + 1389 65 1604.70183 -312.3649809 -312.2210001 0.002215089591 0.4819712479 0.06125012442 0.02321693121 + 1390 65 1604.70183 -312.365309 -312.2216823 0.002209641889 0.5018516707 0.127738152 0.02426163715 + 1391 65 1604.70183 -312.3648627 -312.2225228 0.002189845233 0.5631458274 0.2753225514 0.02662812302 + 1392 65 1604.70183 -312.349001 -312.1960763 0.002352687533 0.5453695918 0.4721624472 0.02319898794 + 1393 65 1604.70183 -312.3575804 -312.2218095 0.002088783302 0.7393977285 0.5851750769 0.03230235466 + 1394 65 1604.70183 -312.3614178 -312.2224637 0.002137754464 0.6693425208 0.4696368815 0.03016339213 + 1395 65 1604.70183 -312.3556471 -312.205204 0.002314510427 0.484964551 0.2948484111 0.0224906001 + 1396 65 1604.70183 -312.3597868 -312.2097333 0.002308515559 0.4612174098 0.2698684355 0.02471109823 + 1397 65 1604.70183 -312.3611081 -312.2134778 0.002271236564 0.4531544107 0.1535766773 0.02347767272 + 1398 65 1604.70183 -312.3607648 -312.2147912 0.002245747506 0.4750010072 0.1627557782 0.02266643323 + 1399 65 1604.70183 -312.3615355 -312.2161771 0.002236283207 0.4707557985 0.1038810932 0.02256334267 + 1400 65 1604.70183 -312.361527 -312.2162846 0.002234497968 0.4790703656 0.1306384371 0.02255172547 + 1401 65 1604.70183 -312.1304288 -312.0094186 0.001861696922 1.824520377 2.761689725 0.0447577635 + 1402 65 1604.70183 -312.3007011 -312.2917783 0.0001372746496 0.3157038148 0.1088094589 0.01775325862 + 1403 65 1604.70183 -312.3002002 -312.2924141 0.0001197869048 0.3074116866 0.1058273719 0.01787400006 + 1404 65 1604.70183 -312.2994795 -312.293034 9.916086337e-05 0.3038005449 0.06008167285 0.01747255981 + 1405 65 1604.70183 -312.2988717 -312.2931628 8.782945558e-05 0.30644785 0.07186056592 0.0174296426 + 1406 65 1604.70183 -312.298058 -312.2934651 7.066126834e-05 0.3072788785 0.04874214637 0.01707756556 + 1407 65 1604.70183 -312.2976456 -312.2934936 6.387703341e-05 0.3102738074 0.06431543277 0.01702591735 + 1408 65 1604.70183 -312.2969886 -312.2936868 5.079672234e-05 0.3078423034 0.04786194818 0.01736955794 + 1409 65 1604.70183 -312.2967309 -312.2936992 4.664222813e-05 0.3086142282 0.05908802148 0.01747682094 + 1410 65 1604.70183 -312.2959104 -312.2938174 3.219960882e-05 0.3139566761 0.05733188331 0.016467119 + 1411 65 1604.70183 -312.2960615 -312.2938211 3.446785242e-05 0.3124936782 0.04690513771 0.01659561468 + 1412 65 1604.70183 -312.2689973 -312.2285727 0.000621916615 0.6049172608 0.8795445231 0.02359022394 + 1413 65 1604.70183 -312.2958452 -312.2939276 2.950040059e-05 0.3145020945 0.03497701698 0.01682430001 + 1414 65 1604.70183 -312.295775 -312.2939326 2.834386173e-05 0.3157193197 0.04254563899 0.01692328597 + 1415 65 1604.70183 -312.2957702 -312.2940641 2.624805794e-05 0.3158471989 0.04238810739 0.01695889828 + 1416 65 1604.70183 -312.2957891 -312.2943333 2.239789981e-05 0.3195279172 0.08542958409 0.01727573129 + 1417 65 1604.70183 -312.2962551 -312.2947244 2.354960549e-05 0.325996799 0.09482068225 0.01726611349 + 1418 65 1604.70183 -312.2962697 -312.2947245 2.377254132e-05 0.3265874325 0.0989506874 0.01727768296 + 1419 65 1604.70183 -312.2966468 -312.2950057 2.524694839e-05 0.3247739611 0.08581638057 0.01681963491 + 1420 65 1604.70183 -312.2975719 -312.295297 3.499818345e-05 0.3308345269 0.1731068406 0.01630057995 + 1421 65 1604.70183 -312.2978409 -312.29544 3.69371961e-05 0.331976553 0.1768624607 0.0163484175 + 1422 65 1604.70183 -312.2986981 -312.2958892 4.321371546e-05 0.3357430972 0.191888832 0.0165429902 + 1423 65 1604.70183 -312.2771952 -312.2399742 0.0005726308483 0.5551647245 0.8357718198 0.02524971216 + 1424 65 1604.70183 -312.3006023 -312.2968905 5.710488234e-05 0.3453622435 0.2241439295 0.01694939347 + 1425 65 1604.70183 -312.3050624 -312.2992858 8.887045147e-05 0.371711583 0.2940926924 0.01784895275 + 1426 65 1604.70183 -312.3157781 -312.3055753 0.0001569654985 0.4436937627 0.4447822223 0.02042245282 + 1427 65 1604.70183 -312.337829 -312.3229186 0.0002293904272 0.6572263121 0.761608579 0.02867129701 + 1428 65 1604.70183 -312.3434691 -312.3563291 0.0001978465252 1.259960831 1.493029397 0.04723881002 + 1429 65 1604.70183 -312.3432816 -312.3564962 0.0002033013476 1.263101521 1.495738598 0.047225999 + 1430 65 1604.70183 -312.3427113 -312.3569139 0.0002185022082 1.272371884 1.507655233 0.04746748947 + 1431 65 1604.70183 -312.3414639 -312.3577405 0.0002504087202 1.29098644 1.531639184 0.04794749438 + 1432 65 1604.70183 -312.2929609 -312.2666967 0.0004040647705 0.3579076112 0.4903169532 0.0200427783 + 1433 65 1604.70183 -312.2981125 -312.2755264 0.0003474778717 0.3314428839 0.5181548416 0.02191335903 + 1434 65 1604.70183 -312.2985336 -312.2847642 0.0002118371804 0.444419904 0.3854652273 0.01647663244 + 1435 65 1604.70183 -312.2980452 -312.2848573 0.0002028908633 0.4767951563 0.4245026405 0.01637573657 + 1436 65 1604.70183 -312.3005023 -312.2902378 0.0001579145384 0.3334248192 0.1891256354 0.01821055215 + 1437 65 1604.70183 -312.3005452 -312.2902483 0.0001584134697 0.3345218671 0.1787910358 0.01800387967 + 1438 65 1604.70183 -312.6990365 -312.7405613 0.0006388427242 1.239851851 1.937896006 0.0423766372 + 1439 65 1604.70183 -312.7913567 -312.870317 0.00121477395 0.4191998519 0.07278135669 0.01899280622 + 1440 65 1604.70183 -312.7915552 -312.8705004 0.001214542047 0.4216531294 0.08426801205 0.01902198597 + 1441 65 1604.70183 -312.7915084 -312.8709317 0.001221896193 0.4164423112 0.05060552547 0.01891298777 + 1442 65 1604.70183 -312.7912996 -312.8710638 0.001227141077 0.4146712076 0.06525547566 0.01905799612 + 1443 65 1604.70183 -312.7905928 -312.8713727 0.001242767937 0.4149505331 0.04126523561 0.01857495073 + 1444 65 1604.70183 -312.7900481 -312.8714565 0.001252437186 0.4161565831 0.04923255969 0.01842672254 + 1445 65 1604.70183 -312.7894551 -312.8716455 0.001264467269 0.4174676848 0.03252482529 0.01800985737 + 1446 65 1604.70183 -312.789138 -312.8716705 0.001269731277 0.4187090562 0.04455467087 0.01792164104 + 1447 65 1604.70183 -312.788677 -312.8717849 0.001278581863 0.4182640392 0.03204215839 0.0180942584 + 1448 65 1604.70183 -312.7885355 -312.8717902 0.001280842579 0.4186387918 0.03811008445 0.01819860848 + 1449 65 1604.70183 -312.7651385 -312.845919 0.001242776884 0.5785337165 0.5525076996 0.02182966219 + 1450 65 1604.70183 -312.7881232 -312.871858 0.001288227829 0.4182067136 0.03277788196 0.01818487041 + 1451 65 1604.70183 -312.7881091 -312.8718575 0.001288436535 0.418271825 0.03355283043 0.01817918275 + 1452 65 1604.70183 -312.7696748 -312.8501606 0.001238241947 0.5383112075 0.5057147985 0.0222394857 + 1453 65 1604.70183 -312.7780046 -312.8599995 0.001261460197 0.4772691666 0.3010213589 0.01895780395 + 1454 65 1604.70183 -312.7835257 -312.8637044 0.001233519392 0.4544929306 0.2919634715 0.02046729248 + 1455 65 1604.70183 -312.7870644 -312.8673608 0.001235329416 0.4344260518 0.1735004231 0.01896362011 + 1456 65 1604.70183 -312.7880974 -312.8679859 0.001229053421 0.4566073792 0.2172682873 0.01871407809 + 1457 65 1604.70183 -312.7908266 -312.8695929 0.001211789768 0.4204932046 0.1224136373 0.01931054111 + 1458 65 1604.70183 -312.7908 -312.8695934 0.001212206335 0.4206182642 0.1205737127 0.0192918716 + 1459 65 1604.70183 -312.3301257 -312.3206748 0.0001453982119 2.183997845 3.389739231 0.0789370238 + 1460 65 1604.70183 -312.5427384 -312.654817 0.001724285948 0.555583088 0.145299961 0.02851174266 + 1461 65 1604.70183 -312.5435916 -312.6557767 0.001725924293 0.5591594279 0.1638706858 0.02853434398 + 1462 65 1604.70183 -312.5442628 -312.6571103 0.001736115912 0.5588739776 0.09919509428 0.02814252216 + 1463 65 1604.70183 -312.5443231 -312.6575315 0.001741667918 0.5674744399 0.1167795243 0.02810911879 + 1464 65 1604.70183 -312.5450816 -312.6582116 0.001740462614 0.5606523026 0.07141543596 0.02797858317 + 1465 65 1604.70183 -312.545237 -312.6582727 0.001739010649 0.5608592923 0.08591795037 0.02800192541 + 1466 65 1604.70183 -312.5458714 -312.658692 0.00173570116 0.556693609 0.05464787808 0.02798526245 + 1467 65 1604.70183 -312.5460309 -312.6587369 0.001733938853 0.5568084097 0.06975183178 0.02801198664 + 1468 65 1604.70183 -312.5463694 -312.6590101 0.001732933323 0.5597935498 0.05304330046 0.02799034932 + 1469 65 1604.70183 -312.5464281 -312.6590221 0.001732214619 0.5613026494 0.06581872891 0.02798115967 + 1470 65 1604.70183 -312.5040054 -312.6055894 0.001562830741 0.7593692721 0.7900772516 0.03687407045 + 1471 65 1604.70183 -312.5469705 -312.6591795 0.001726293174 0.5603704916 0.05486684366 0.02785052481 + 1472 65 1604.70183 -312.5469761 -312.659179 0.001726198333 0.5603534701 0.05470551136 0.02784888894 + 1473 65 1604.70183 -312.5475643 -312.6593069 0.001719117537 0.5595575925 0.03277021192 0.02788652929 + 1474 65 1604.70183 -312.5476692 -312.6593087 0.001717530415 0.5596217632 0.03619545847 0.02786239893 + 1475 65 1604.70183 -312.548035 -312.65938 0.001712999268 0.5576819199 0.02054233675 0.02802646747 + 1476 65 1604.70183 -312.5482249 -312.6593876 0.001710194535 0.5568213953 0.02544780837 0.02813139482 + 1477 65 1604.70183 -312.5062797 -312.6078171 0.001562113431 0.7494015306 0.7921786049 0.03680302887 + 1478 65 1604.70183 -312.5202835 -312.6304102 0.001694256856 0.6582526398 0.4484425148 0.03163294781 + 1479 65 1604.70183 -312.5251127 -312.6365985 0.001715167392 0.6603897758 0.4575187639 0.03156341192 + 1480 65 1604.70183 -312.5321277 -312.6453488 0.001741862813 0.622339977 0.3062924865 0.02969526613 + 1481 65 1604.70183 -312.5342926 -312.6474673 0.001741148478 0.6697376165 0.4179093656 0.02934549279 + 1482 65 1604.70183 -312.5404798 -312.6525929 0.001724816206 0.5708894757 0.1985261599 0.02869332145 + 1483 65 1604.70183 -312.5412947 -312.652785 0.001715233928 0.5629160932 0.2240826165 0.02879881511 + 1484 65 1604.70183 -312.6765618 -312.7159502 0.000605974389 1.397388507 2.168297738 0.04960087259 + 1485 65 1604.70183 -312.779697 -312.8654033 0.00131855829 0.4549975656 0.08500929041 0.02193088006 + 1486 65 1604.70183 -312.7799126 -312.865742 0.001320453486 0.4553413684 0.09784340803 0.02178779699 + 1487 65 1604.70183 -312.7799285 -312.8663836 0.001330079487 0.4515688791 0.05970326011 0.02185378742 + 1488 65 1604.70183 -312.7797903 -312.8665704 0.0013350791 0.4511438816 0.07126206381 0.022015953 + 1489 65 1604.70183 -312.7793464 -312.8670142 0.001348735708 0.4537690182 0.05108921113 0.02160555866 + 1490 65 1604.70183 -312.7785126 -312.8672384 0.001365011429 0.4609804606 0.09110849495 0.02118198836 + 1491 65 1604.70183 -312.7783599 -312.8674458 0.001370552064 0.458981507 0.07799756682 0.02105341776 + 1492 65 1604.70183 -312.7777122 -312.8677627 0.001385393051 0.4563754214 0.08841182136 0.02070556265 + 1493 65 1604.70183 -312.7778522 -312.8680543 0.001387723245 0.4564888481 0.05695538054 0.02066651751 + 1494 65 1604.70183 -312.7778622 -312.8682015 0.001389835714 0.4616137388 0.07864845119 0.02074927106 + 1495 65 1604.70183 -312.7566533 -312.8425211 0.001321041808 0.6025600472 0.5226966217 0.02386235323 + 1496 65 1604.70183 -312.7783396 -312.8684803 0.001386780089 0.4556953638 0.06082312863 0.02069854078 + 1497 65 1604.70183 -312.7790462 -312.8686936 0.001379190933 0.4478968426 0.08369111397 0.02077572779 + 1498 65 1604.70183 -312.7795018 -312.8690064 0.001376994273 0.4462725046 0.05605501197 0.02044104297 + 1499 65 1604.70183 -312.7798848 -312.869152 0.001373340783 0.4470051933 0.0657281091 0.02016757192 + 1500 65 1604.70183 -312.7801513 -312.8693929 0.001372947583 0.4432584272 0.04290395344 0.02001669751 + 1501 65 1604.70183 -312.7802758 -312.8694605 0.001372072731 0.4416408007 0.05182760441 0.01998626657 + 1502 65 1604.70183 -312.7804071 -312.8696538 0.001373026058 0.4441182912 0.04127732369 0.01986764811 + 1503 65 1604.70183 -312.7804703 -312.8697356 0.001373312327 0.4499850412 0.0780404356 0.0198147305 + 1504 65 1604.70183 -312.7805826 -312.8698108 0.001372741027 0.4485352991 0.07443355489 0.01976776173 + 1505 65 1604.70183 -312.7808922 -312.8700026 0.001370928452 0.4445494583 0.06964737679 0.01976996124 + 1506 65 1604.70183 -312.7603767 -312.8456189 0.00131141847 0.5634132458 0.4828166376 0.02408225204 + 1507 65 1604.70183 -312.7810488 -312.8700916 0.00136988941 0.441106491 0.05064571752 0.01973081569 + 1508 65 1604.70183 -312.78131 -312.8701628 0.001366966531 0.4359220472 0.04654086702 0.01961729651 + 1509 65 1604.70183 -312.7814585 -312.8702158 0.001365496889 0.4367108247 0.03628201067 0.01949824312 + 1510 65 1604.70183 -312.7817626 -312.8702555 0.0013614292 0.4396459243 0.04666243871 0.01925894458 + 1511 65 1604.70183 -312.767376 -312.8545239 0.001340736966 0.5185512984 0.2930063883 0.02198000132 + 1512 65 1604.70183 -312.7719386 -312.8580391 0.001324623596 0.5089466984 0.2946344923 0.0230005219 + 1513 65 1604.70183 -312.7758897 -312.8618364 0.001322257288 0.4623479215 0.1824399 0.02252861573 + 1514 65 1604.70183 -312.7773164 -312.8626371 0.00131262673 0.4678559155 0.2350394036 0.022630625 + 1515 65 1604.70183 -312.7791619 -312.8644913 0.001312759645 0.4604328842 0.1366550997 0.02225699396 + 1516 65 1604.70183 -312.7791294 -312.8644947 0.001313311867 0.4595598419 0.1312536124 0.02224957616 + 1517 65 1604.70183 -312.4362346 -312.333868 0.001574870173 0.7195735474 1.188326454 0.03522891393 + 1518 65 1604.70183 -312.4806168 -312.3972401 0.001282718576 0.3858781745 0.04371284253 0.01960669136 + 1519 65 1604.70183 -312.4810517 -312.3973262 0.001288083691 0.3847613279 0.05404305614 0.01980358626 + 1520 65 1604.70183 -312.4813362 -312.3975356 0.001289240269 0.3849852576 0.04083076281 0.01953136448 + 1521 65 1604.70183 -312.4816223 -312.3976308 0.001292175567 0.3868185001 0.06360311688 0.01928738974 + 1522 65 1604.70183 -312.482008 -312.3977584 0.001296148806 0.3866827659 0.04995381103 0.01924120508 + 1523 65 1604.70183 -312.4828516 -312.3978692 0.001307420989 0.3893406727 0.04464682791 0.01930221814 + 1524 65 1604.70183 -312.4833094 -312.3979567 0.001313117778 0.3886421064 0.02073837783 0.01930200077 + 1525 65 1604.70183 -312.4835472 -312.3979634 0.001316672986 0.3887189472 0.0206079852 0.01937863585 + 1526 65 1604.70183 -312.4838831 -312.39799 0.001321431418 0.3863260457 0.01504015176 0.01941496991 + 1527 65 1604.70183 -312.4842658 -312.3979969 0.001327215205 0.3837638602 0.02235873024 0.01963300805 + 1528 65 1604.70183 -312.4577871 -312.3781124 0.001225764489 0.4769977415 0.4628637028 0.01842130557 + 1529 65 1604.70183 -312.4599404 -312.3827926 0.001186889548 0.4840732416 0.4064338063 0.01837589372 + 1530 65 1604.70183 -312.4661417 -312.3897535 0.001175202483 0.4396950642 0.2636090059 0.01645228827 + 1531 65 1604.70183 -312.4726884 -312.3938568 0.00121279398 0.4203402845 0.2298444864 0.01863059026 + 1532 65 1604.70183 -312.4771182 -312.3961663 0.00124541356 0.396507845 0.09724602398 0.01940263071 + 1533 65 1604.70183 -312.4787171 -312.3963796 0.001266729703 0.3923664921 0.09586946525 0.020065397 + 1534 65 1604.70183 -312.4795697 -312.3968549 0.001272535082 0.3888094156 0.05675509794 0.0195774975 + 1535 65 1604.70183 -312.4799162 -312.3969261 0.001276771864 0.3891614921 0.07047845301 0.01935178131 + 1536 65 1604.70183 -311.7492335 -311.2348682 0.007913312315 0.8268562398 0.9996564599 0.03468202613 + 1537 65 1604.70183 -311.781622 -311.2747215 0.007798469119 0.5623017232 0.02195966038 0.02268638892 + 1538 65 1604.70183 -311.7825977 -311.2746781 0.007814147136 0.5595975276 0.02455441698 0.02300459585 + 1539 65 1604.70183 -311.7834657 -311.2746607 0.007827770341 0.5570587277 0.01258058516 0.0228354203 + 1540 65 1604.70183 -311.7836665 -311.2746492 0.007831034472 0.5564958675 0.01392046238 0.02283693382 + 1541 65 1604.70183 -311.7687099 -311.2651045 0.007747776271 0.638673712 0.3484006169 0.02187960211 + 1542 65 1604.70183 -311.7714367 -311.2674219 0.007754073982 0.616982704 0.2979994374 0.02248468838 + 1543 65 1604.70183 -311.7744774 -311.2710971 0.007744311484 0.5948183462 0.191070337 0.02210922634 + 1544 65 1604.70183 -311.7771985 -311.2731729 0.007754239443 0.5768976823 0.1657195843 0.02427987162 + 1545 65 1604.70183 -311.7783346 -311.2743766 0.007753199865 0.5722702447 0.07826520167 0.02341033109 + 1546 65 1604.70183 -311.778843 -311.2745599 0.007758200683 0.5717641709 0.06924284238 0.02311250787 + 1547 65 1604.70183 -311.7800014 -311.2747141 0.007773651436 0.5672850607 0.03444687336 0.02260794535 + 1548 65 1604.70183 -311.7804808 -311.2747033 0.007781192016 0.5656326855 0.03900213994 0.02257612975 + 1549 65 1604.70183 -312.3082768 -312.1287363 0.002762160322 0.9937571194 1.54194865 0.04271787948 + 1550 65 1604.70183 -312.3637667 -312.2187507 0.002231015909 0.4628345358 0.05918640633 0.02238640539 + 1551 65 1604.70183 -312.3637858 -312.2190409 0.002226844498 0.4646089431 0.0742889861 0.02255158412 + 1552 65 1604.70183 -312.363872 -312.219555 0.002220261086 0.465813825 0.04892267893 0.02232967964 + 1553 65 1604.70183 -312.3637756 -312.2198484 0.002214264748 0.4692499044 0.06180177563 0.02225122632 + 1554 65 1604.70183 -312.3638142 -312.220153 0.002210172508 0.4689833257 0.03887495663 0.02229579968 + 1555 65 1604.70183 -312.3637464 -312.2202354 0.002207861745 0.4699013104 0.05066776441 0.02243774535 + 1556 65 1604.70183 -312.3635848 -312.2204422 0.002202193454 0.4763927034 0.04499900624 0.02258776673 + 1557 65 1604.70183 -312.3636699 -312.2204062 0.002204056649 0.4734080655 0.03359847056 0.02255952741 + 1558 65 1604.70183 -312.3495541 -312.1986598 0.002321450015 0.5637137448 0.477116045 0.02534858106 + 1559 65 1604.70183 -312.3527505 -312.2025184 0.002311263239 0.5426381082 0.4257655759 0.0251759323 + 1560 65 1604.70183 -312.3579655 -312.2095824 0.002282817438 0.4903834391 0.2631201474 0.02315254758 + 1561 65 1604.70183 -312.3605326 -312.212478 0.002277762043 0.497277362 0.2720535465 0.02297177056 + 1562 65 1604.70183 -312.3626327 -312.2159609 0.002256489286 0.4658800704 0.1496272607 0.02241245333 + 1563 65 1604.70183 -312.3627486 -312.2166428 0.002247781032 0.4831652299 0.1829420177 0.02231453636 + 1564 65 1604.70183 -312.3635665 -312.2180967 0.002237996378 0.4627721478 0.08310642569 0.02243038828 + 1565 65 1604.70183 -312.3635418 -312.2181582 0.002236670308 0.4646124883 0.09241389332 0.02252860088 + 1566 65 1604.70183 -312.3942681 -312.236188 0.002432000945 1.094298732 1.961407897 0.05375712392 + 1567 65 1604.70183 -312.4869719 -312.3977724 0.001372300111 0.3706584829 0.06357048513 0.01995325012 + 1568 65 1604.70183 -312.4865767 -312.3979004 0.00136425054 0.3721146701 0.07353398066 0.01982498417 + 1569 65 1604.70183 -312.4859195 -312.3981568 0.001350195238 0.3774018211 0.03222553356 0.01991589141 + 1570 65 1604.70183 -312.4856624 -312.3981508 0.001346332269 0.3797506414 0.03899801706 0.02007698239 + 1571 65 1604.70183 -312.4849374 -312.3981887 0.001334595336 0.3875195633 0.0268252255 0.01952047051 + 1572 65 1604.70183 -312.484974 -312.3981899 0.001335139394 0.387084382 0.02592544977 0.0195296183 + 1573 65 1604.70183 -312.4588466 -312.3596196 0.001526569571 0.5702196798 0.7481307177 0.02605165882 + 1574 65 1604.70183 -312.4683668 -312.3756551 0.001426333531 0.5117985065 0.5543902615 0.02028563559 + 1575 65 1604.70183 -312.4773698 -312.387789 0.001378165965 0.4316779392 0.3104521376 0.01880514048 + 1576 65 1604.70183 -312.4823153 -312.3920315 0.001388980907 0.406017079 0.2443965406 0.02005375729 + 1577 65 1604.70183 -312.4847332 -312.3947988 0.001383606883 0.3852699275 0.1302215855 0.01940168317 + 1578 65 1604.70183 -312.4856349 -312.3954613 0.001387285232 0.3876370163 0.1302137945 0.01947310885 + 1579 65 1604.70183 -312.4864878 -312.3964778 0.0013847695 0.3792657631 0.09065542118 0.01961982311 + 1580 65 1604.70183 -312.4871484 -312.3970449 0.00138620749 0.3736193162 0.1153045014 0.02048246561 + 1581 65 1604.70183 -311.9180566 -311.7370707 0.002784398278 1.179441505 1.617388931 0.0400588388 + 1582 65 1604.70183 -311.9750311 -311.8253939 0.002302111347 0.5495699941 0.07287883312 0.02842653066 + 1583 65 1604.70183 -311.9731197 -311.8255611 0.002270133592 0.554200062 0.09144487456 0.02926279781 + 1584 65 1604.70183 -311.9700779 -311.8260534 0.002215761745 0.5681172691 0.05727231457 0.02871478557 + 1585 65 1604.70183 -311.9686199 -311.8261188 0.002192325011 0.5753215756 0.06211705222 0.02843736146 + 1586 65 1604.70183 -311.9675129 -311.8264523 0.002170163328 0.5732714552 0.04122839703 0.02837850286 + 1587 65 1604.70183 -311.9666742 -311.8265429 0.002155866251 0.5731058413 0.05666638895 0.02832685586 + 1588 65 1604.70183 -311.9654879 -311.8266866 0.002135404393 0.5787372099 0.03534014898 0.02832581007 + 1589 65 1604.70183 -311.965299 -311.8266893 0.002132457329 0.5799347601 0.03917127154 0.02837238114 + 1590 65 1604.70183 -311.9648368 -311.8267943 0.002123731083 0.5790000955 0.02331143541 0.02834912757 + 1591 65 1604.70183 -311.964685 -311.8268049 0.002121231573 0.5790364216 0.02847534254 0.02835989958 + 1592 65 1604.70183 -311.9695702 -311.807836 0.002488218498 0.6282994997 0.4364812907 0.0288348501 + 1593 65 1604.70183 -311.9731145 -311.8096876 0.002514260233 0.5893992446 0.4247065819 0.0300443313 + 1594 65 1604.70183 -311.9774761 -311.8167905 0.002472085536 0.5469810803 0.256668869 0.02896798092 + 1595 65 1604.70183 -311.9796453 -311.819826 0.002458758401 0.531238914 0.2401659989 0.02989740093 + 1596 65 1604.70183 -311.9793634 -311.8225373 0.00241271044 0.5396054491 0.1373546088 0.0290475267 + 1597 65 1604.70183 -311.9779358 -311.8234045 0.00237740451 0.5663080312 0.150141204 0.02826341013 + 1598 65 1604.70183 -311.9770839 -311.8245661 0.002346427873 0.5495692834 0.09489433833 0.02801193898 + 1599 65 1604.70183 -311.9766454 -311.8246518 0.002338362817 0.5494711523 0.1160296015 0.0278747262 + 1600 65 1604.70183 -311.7802918 -311.61284 0.00257618018 0.7636515487 1.389388578 0.04120677492 + 1601 65 1604.70183 -311.8206605 -311.6908775 0.001996661576 0.2680937408 0.107279865 0.01627751131 + 1602 65 1604.70183 -311.8187373 -311.6934138 0.001928053938 0.2933621856 0.1196836435 0.01742674534 + 1603 65 1604.70183 -311.817551 -311.6942056 0.001897621435 0.3099417409 0.1484302015 0.01834165278 + 1604 65 1604.70183 -311.8165486 -311.695683 0.001859471327 0.324343151 0.1457329572 0.01886384969 + 1605 65 1604.70183 -311.8125168 -311.6995205 0.001738404564 0.381503845 0.166436411 0.02045612639 + 1606 65 1604.70183 -311.8123291 -311.7017357 0.001701436466 0.3910796447 0.1463846837 0.0202653457 + 1607 65 1604.70183 -311.8104516 -311.706665 0.00159671753 0.4388808877 0.1841154237 0.02097034068 + 1608 65 1604.70183 -311.811363 -311.7093732 0.001569073065 0.4368520707 0.1517065309 0.02107624388 + 1609 65 1604.70183 -311.8126981 -311.7151929 0.001500079787 0.4496267584 0.1847180673 0.02189218225 + 1610 65 1604.70183 -311.8091008 -311.7153281 0.001442656956 0.5480229085 0.5104476857 0.02892444008 + 1611 65 1604.70183 -311.8100599 -311.6734324 0.002101961702 0.419681362 0.483687256 0.01952505673 + 1612 65 1604.70183 -311.8125282 -311.7168022 0.001472708114 0.4682809169 0.2630679349 0.02310610802 + 1613 65 1604.70183 -311.8130631 -311.71827 0.001458356082 0.4699322659 0.248599392 0.02296512267 + 1614 65 1604.70183 -311.8141706 -311.7218214 0.001420757288 0.4800878711 0.2183110861 0.02340301546 + 1615 65 1604.70183 -311.8142848 -311.7251301 0.001371609461 0.5200900825 0.2417327988 0.0251784488 + 1616 65 1604.70183 -311.8160016 -311.72737 0.001363562494 0.5115203077 0.179752837 0.02517522337 + 1617 65 1604.70183 -311.817988 -311.7297102 0.001358120307 0.5204274668 0.2020669559 0.0261887877 + 1618 65 1604.70183 -311.8202423 -311.7320295 0.00135712035 0.5128855149 0.1403102391 0.02630461186 + 1619 65 1604.70183 -311.8222066 -311.7336903 0.001361788902 0.5168695997 0.146467297 0.02700011784 + 1620 65 1604.70183 -311.8241238 -311.7350658 0.001370122224 0.5060568192 0.09099578139 0.0270451964 + 1621 65 1604.70183 -311.8249029 -311.735314 0.001378289549 0.5038228522 0.1250668592 0.02722287721 + 1622 65 1604.70183 -311.813123 -311.6796296 0.002053743648 0.3901576875 0.3524291236 0.01702911484 + 1623 65 1604.70183 -311.8264098 -311.7364508 0.001383984523 0.4994684758 0.09106363231 0.02727555962 + 1624 65 1604.70183 -311.8273163 -311.7369162 0.001390770616 0.5060086639 0.1245486893 0.02731818802 + 1625 65 1604.70183 -311.8288725 -311.7380594 0.001397125181 0.5119532412 0.09655823044 0.02680125947 + 1626 65 1604.70183 -311.8302467 -311.7384547 0.001412184768 0.526686591 0.1667789581 0.02627220007 + 1627 65 1604.70183 -311.8317422 -311.7391844 0.001423965561 0.5288108677 0.1591503132 0.02633856344 + 1628 65 1604.70183 -311.8360919 -311.7410332 0.001462441313 0.5374937577 0.1684189821 0.02663804084 + 1629 65 1604.70183 -311.8445678 -311.7433445 0.001557282339 0.5620451103 0.284113402 0.02869201075 + 1630 65 1604.70183 -311.8611895 -311.7416526 0.001839029612 0.625273212 0.6078985961 0.03445476037 + 1631 65 1604.70183 -311.8546973 -311.7435502 0.00170995644 0.5986320118 0.4741557584 0.03188375988 + 1632 65 1604.70183 -311.8556264 -311.7438906 0.001719012651 0.600161044 0.4791641612 0.03195850081 + 1633 65 1604.70183 -311.8168136 -311.6843619 0.002037719997 0.3392772319 0.206768869 0.01384999635 + 1634 65 1604.70183 -311.8584188 -311.7449019 0.001746413233 0.604701117 0.4950837039 0.0322560808 + 1635 65 1604.70183 -311.8640325 -311.7467965 0.001803630042 0.6134142896 0.5286605228 0.03304283559 + 1636 65 1604.70183 -311.8748775 -311.7494632 0.001929450919 0.6301111011 0.6063389044 0.03586931949 + 1637 65 1604.70183 -311.8905324 -311.7404734 0.002308600444 0.6714680664 0.8492895568 0.04408444453 + 1638 65 1604.70183 -311.8774528 -311.749702 0.001965395907 0.6344481172 0.6294937719 0.03670238831 + 1639 65 1604.70183 -311.8814046 -311.7543466 0.001954738667 0.6291578726 0.5897539351 0.03593731791 + 1640 65 1604.70183 -311.8910814 -311.7653682 0.001934049969 0.6268717605 0.508858474 0.03371713954 + 1641 65 1604.70183 -311.8985407 -311.7660341 0.002038562786 0.6875094267 0.6384762549 0.03476379696 + 1642 65 1604.70183 -311.8964044 -311.7700033 0.001944633811 0.6424314636 0.5096465215 0.03309099062 + 1643 65 1604.70183 -311.8989792 -311.7761928 0.00188902067 0.6345395995 0.4397650545 0.03205766557 + 1644 65 1604.70183 -311.8191455 -311.6860327 0.00204788918 0.3093536941 0.1920151336 0.01599830068 + 1645 65 1604.70183 -311.9038811 -311.7889904 0.001767549829 0.6352934841 0.3419756759 0.02890005444 + 1646 65 1604.70183 -311.9013006 -311.788549 0.001734639681 0.7378446912 0.7049765192 0.03152075638 + 1647 65 1604.70183 -311.9047167 -311.7931456 0.001716479534 0.6675280528 0.4531293554 0.02775368758 + 1648 65 1604.70183 -311.9090878 -311.8008879 0.001664615036 0.6527794773 0.3454249312 0.02781405129 + 1649 65 1604.70183 -311.9133569 -311.8096147 0.001596033352 0.6640247637 0.2678307655 0.02879226542 + 1650 65 1604.70183 -311.9133044 -311.8097347 0.001593379521 0.6700958724 0.2876800076 0.02895722054 + 1651 65 1604.70183 -311.9197176 -311.8139623 0.001627004448 0.6488549703 0.1975828832 0.02925450988 + 1652 65 1604.70183 -311.9266845 -311.81628 0.001698531231 0.643327126 0.2364727963 0.03005556131 + 1653 65 1604.70183 -311.9342178 -311.8197224 0.001761468219 0.6090277178 0.1780470023 0.02932318911 + 1654 65 1604.70183 -311.9384628 -311.8205408 0.001814184022 0.6121189209 0.2543760847 0.02877264113 + 1655 65 1604.70183 -311.8207229 -311.6877615 0.0020455599 0.2732083272 0.1142191814 0.01488396011 + 1656 65 1604.70183 -311.9441915 -311.8229968 0.001864532692 0.60070368 0.1602485431 0.02845358321 + 1657 65 1604.70183 -311.9509158 -311.82413 0.001950550996 0.605223185 0.1424902397 0.0280584889 + 1658 65 1604.70183 -311.9542982 -311.8251371 0.001987092751 0.5931856385 0.08989768538 0.02801085882 + 1659 65 1604.70183 -311.8215401 -311.6883861 0.002048523347 0.2551235258 0.111609603 0.01525670681 + 1660 65 1604.70183 -311.8215111 -311.6892595 0.002034640451 0.2544248914 0.08685349601 0.01530245028 + 1661 65 1604.70183 -311.8210666 -311.6898947 0.002018029509 0.264018475 0.1223252968 0.01603891044 + 1662 65 1604.70183 -312.4510516 -312.3850669 0.001015149301 1.522265355 2.12467322 0.05755549483 + 1663 65 1604.70183 -312.5939004 -312.5900157 5.976380462e-05 0.7679606447 0.09288650788 0.0352848764 + 1664 65 1604.70183 -312.5944529 -312.5903197 6.358735871e-05 0.7717795815 0.1082413149 0.03551486939 + 1665 65 1604.70183 -312.5963249 -312.5912064 7.874701099e-05 0.7689353364 0.07061411505 0.03552537901 + 1666 65 1604.70183 -312.5980076 -312.5916557 9.772176943e-05 0.769748962 0.09532302583 0.03578366263 + 1667 65 1604.70183 -312.6001851 -312.5924708 0.0001186819718 0.763577756 0.06268508776 0.03551504872 + 1668 65 1604.70183 -312.601531 -312.5928123 0.0001341339244 0.7612928907 0.07237214568 0.03546180126 + 1669 65 1604.70183 -312.6028149 -312.5933086 0.0001462511039 0.7596040638 0.0407745443 0.0355234709 + 1670 65 1604.70183 -312.603302 -312.5934126 0.0001521456716 0.7598997392 0.05425314955 0.03561897284 + 1671 65 1604.70183 -312.604353 -312.5937509 0.0001631099114 0.7582568732 0.03495556667 0.03545174365 + 1672 65 1604.70183 -312.6047681 -312.5938293 0.0001682901366 0.7580297703 0.04355003891 0.03541801555 + 1673 65 1604.70183 -312.5385398 -312.5262227 0.0001894938588 0.9736787374 0.8335388397 0.03998658645 + 1674 65 1604.70183 -312.6055759 -312.5940644 0.0001770999593 0.7613620706 0.03338051978 0.03551080869 + 1675 65 1604.70183 -312.6058732 -312.5941113 0.0001809526389 0.7629261458 0.04454970651 0.03556052259 + 1676 65 1604.70183 -312.6067489 -312.594274 0.000191921201 0.7621712029 0.02917220281 0.03566270432 + 1677 65 1604.70183 -312.6070595 -312.594306 0.0001962067984 0.7623459129 0.03633247821 0.03571588937 + 1678 65 1604.70183 -312.5498612 -312.5413246 0.0001313326187 0.9372070459 0.7588044149 0.03712241372 + 1679 65 1604.70183 -312.5698048 -312.5649386 7.486440338e-05 0.8291170078 0.4596108311 0.03560294506 + 1680 65 1604.70183 -312.5823295 -312.574856 0.0001149778168 0.7844661491 0.45636622 0.03759474437 + 1681 65 1604.70183 -312.5889116 -312.5840378 7.498039044e-05 0.7620519386 0.2546907237 0.0366835935 + 1682 65 1604.70183 -312.5899057 -312.5853166 7.060108625e-05 0.7846375186 0.3093502651 0.03691977727 + 1683 65 1604.70183 -312.5924205 -312.5886299 5.831668979e-05 0.7688682082 0.161112223 0.03532007323 + 1684 65 1604.70183 -312.5924206 -312.5886298 5.83202896e-05 0.7688974004 0.1612943761 0.03532295395 + 1685 65 1604.70183 -312.6739458 -312.7220629 0.0007402629507 1.343192198 2.018991348 0.04527449813 + 1686 65 1604.70183 -312.7816631 -312.8657124 0.00129306555 0.4641675188 0.10066527 0.02146506191 + 1687 65 1604.70183 -312.7824096 -312.8661537 0.001288371058 0.4593230578 0.1160045485 0.02140721242 + 1688 65 1604.70183 -312.7827097 -312.8670765 0.001297951341 0.4517517795 0.07223430571 0.02117155404 + 1689 65 1604.70183 -312.7827062 -312.867388 0.001302795928 0.449515524 0.09349027471 0.02138303966 + 1690 65 1604.70183 -312.782481 -312.8681361 0.001317770758 0.4484735522 0.06209768045 0.02071424159 + 1691 65 1604.70183 -312.7820984 -312.8684286 0.001328157453 0.4503763125 0.08406537966 0.02040153776 + 1692 65 1604.70183 -312.7821998 -312.8690162 0.001335637848 0.4443115411 0.06841735028 0.01988575967 + 1693 65 1604.70183 -312.7821284 -312.8690893 0.001337859188 0.4443389193 0.09535145 0.01972203653 + 1694 65 1604.70183 -312.7823322 -312.8694314 0.001339986902 0.4430941658 0.06817042813 0.01978224298 + 1695 65 1604.70183 -312.7823842 -312.8695849 0.001341548832 0.4457852869 0.08261573572 0.01996550908 + 1696 65 1604.70183 -312.7473949 -312.8362187 0.001366519515 0.6483196753 0.5837512579 0.02394935356 + 1697 65 1604.70183 -312.7827559 -312.8699095 0.00134082469 0.4407412927 0.05698701413 0.01979459368 + 1698 65 1604.70183 -312.7830046 -312.8700714 0.001339490054 0.4376862761 0.06448288233 0.01976308597 + 1699 65 1604.70183 -312.7833527 -312.8703353 0.001338193557 0.434404203 0.04067737912 0.01949855309 + 1700 65 1604.70183 -312.7523629 -312.8407055 0.001359117163 0.6093201484 0.5469053726 0.02446462271 + 1701 65 1604.70183 -312.7622365 -312.8522602 0.001384980202 0.5530309795 0.3270158208 0.02116709364 + 1702 65 1604.70183 -312.7688518 -312.8567924 0.001352932475 0.5388133143 0.3140059434 0.02284913669 + 1703 65 1604.70183 -312.7744321 -312.8612237 0.001335255217 0.4898473658 0.1939039557 0.02183653241 + 1704 65 1604.70183 -312.7769584 -312.8622631 0.00131238102 0.4911278463 0.2438804772 0.0217209834 + 1705 65 1604.70183 -312.7802896 -312.8644083 0.001294134453 0.4777001073 0.1566249126 0.02192511623 + 1706 65 1604.70183 -312.780274 -312.8644088 0.001294382113 0.4775291363 0.1553162351 0.0219119218 +# s_vIn.xyz + config # atoms volume energy DFT energy energy error force DFT force force error + 1707 63 1604.70183 -302.4723613 -301.963864 0.00807138611 0.7503228209 1.255303072 0.0411580261 + 1708 63 1604.70183 -302.5717986 -302.0639546 0.008061015576 0.6187164138 0.1439802587 0.02075486367 + 1709 63 1604.70183 -302.5825981 -302.0650808 0.008214560288 0.6244236845 0.1518789276 0.02150426704 + 1710 63 1604.70183 -302.5901442 -302.0666063 0.008310125706 0.6198998723 0.06759786497 0.02257459914 + 1711 63 1604.70183 -302.593363 -302.066815 0.008357905249 0.6199076487 0.07299485635 0.02333115775 + 1712 63 1604.70183 -302.5945672 -302.0672434 0.008370219359 0.630274001 0.03153428306 0.02339946701 + 1713 63 1604.70183 -302.5950709 -302.0673202 0.008376994643 0.6357040225 0.03175548866 0.02354731292 + 1714 63 1604.70183 -302.5957252 -302.0673961 0.008386175162 0.637111431 0.0141777282 0.02371649196 + 1715 63 1604.70183 -302.5957163 -302.067397 0.008386021098 0.6370587111 0.01392129466 0.02371037802 + 1716 63 1604.70183 -302.4988 -302.0161101 0.007661744499 0.4741019735 0.5230398817 0.02392615243 + 1717 63 1604.70183 -302.503196 -302.0242245 0.007602723414 0.4439845687 0.3934456449 0.01954618673 + 1718 63 1604.70183 -302.5080162 -302.0319351 0.007556843796 0.4343436784 0.3097762997 0.01835533205 + 1719 63 1604.70183 -302.5166858 -302.041557 0.007541726152 0.4729170245 0.3339746283 0.022282543 + 1720 63 1604.70183 -302.5184911 -302.0422479 0.007559415992 0.4963638653 0.3907744969 0.02355220095 + 1721 63 1604.70183 -302.5264677 -302.0489124 0.007580244183 0.5171429359 0.3084001845 0.0223657876 + 1722 63 1604.70183 -302.5511078 -302.0592399 0.007807428146 0.6003753884 0.2324725691 0.02006992626 + 1723 63 1604.70183 -302.556945 -302.0598006 0.007891181519 0.6221745869 0.264032255 0.02043094953 +# s_vP.xyz + config # atoms volume energy DFT energy energy error force DFT force force error + 1724 63 1604.70183 -300.8841803 -300.8419004 0.0006711100353 0.6284308222 1.051115235 0.03060541665 + 1725 63 1604.70183 -300.919395 -300.9042829 0.0002398756467 0.2584053828 0.03525655982 0.01299814918 + 1726 63 1604.70183 -300.919457 -300.9042834 0.0002408492179 0.2582084264 0.0375543632 0.01297038629 + 1727 63 1604.70183 -300.9197674 -300.9043871 0.0002441315514 0.2567899241 0.02279477012 0.01313182525 + 1728 63 1604.70183 -300.9199797 -300.9044126 0.0002470957789 0.2563631424 0.02889282738 0.01327873862 + 1729 63 1604.70183 -300.9201918 -300.9044777 0.0002494303526 0.2556511224 0.01859520366 0.01338702613 + 1730 63 1604.70183 -300.9202783 -300.9044856 0.000250677807 0.2555672795 0.02383622137 0.01346213722 + 1731 63 1604.70183 -300.9057188 -300.8798081 0.0004112816685 0.3639121046 0.4768100719 0.01722846904 + 1732 63 1604.70183 -300.9113719 -300.8874447 0.0003797956265 0.2864976135 0.3262189728 0.01565917116 + 1733 63 1604.70183 -300.9139695 -300.8921993 0.0003455593334 0.2439364264 0.2272705484 0.01406696992 + 1734 63 1604.70183 -300.9160005 -300.8951476 0.0003309989191 0.2257008668 0.2720266612 0.01616324974 + 1735 63 1604.70183 -300.9168436 -300.8991251 0.0002812465133 0.2191318649 0.18899597 0.01461972498 + 1736 63 1604.70183 -300.9171561 -300.9020577 0.0002396568126 0.2571616872 0.1812047891 0.01401691193 + 1737 63 1604.70183 -300.9183327 -300.903866 0.0002296301987 0.2581850822 0.07416054433 0.01298592399 + 1738 63 1604.70183 -300.9186132 -300.9039829 0.0002322262162 0.2636685075 0.07637585509 0.01316668971 + 1739 63 1604.70183 -300.761731 -300.7360143 0.0004082013901 1.088711264 1.699764745 0.04991863474 + 1740 63 1604.70183 -300.8774963 -300.9010154 0.0003733197156 0.3607214994 0.09504134909 0.01755173421 + 1741 63 1604.70183 -300.8786136 -300.9012712 0.0003596452757 0.3589639067 0.119374214 0.01804353093 + 1742 63 1604.70183 -300.880973 -300.9024223 0.0003404644159 0.3485633579 0.07390057041 0.01757646984 + 1743 63 1604.70183 -300.8826168 -300.9027788 0.000320032806 0.3445418235 0.08547472507 0.01764048595 + 1744 63 1604.70183 -300.8843564 -300.9033786 0.0003019393787 0.340641137 0.06234713001 0.01751041824 + 1745 63 1604.70183 -300.8848447 -300.9034138 0.0002947492049 0.3409421669 0.08066884258 0.01765797968 + 1746 63 1604.70183 -300.8866912 -300.903892 0.0002730290476 0.3352449255 0.06653314188 0.01747264198 + 1747 63 1604.70183 -300.8900552 -300.9042326 0.0002250376891 0.3295433142 0.1065524981 0.01776518759 + 1748 63 1604.70183 -300.8914458 -300.9046115 0.0002089783543 0.323406022 0.08556001491 0.0175519089 + 1749 63 1604.70183 -300.895163 -300.9051837 0.0001590574148 0.309224247 0.0656817627 0.01711876094 + 1750 63 1604.70183 -300.8187471 -300.8329203 0.0002249710683 0.66864894 0.7696926803 0.02893295017 + 1751 63 1604.70183 -300.9006657 -300.9039288 5.179512331e-05 0.3015549559 0.1959501679 0.01784227538 + 1752 63 1604.70183 -300.8971273 -300.9051255 0.0001269544058 0.3038211379 0.0951464456 0.01720447875 + 1753 63 1604.70183 -300.8988964 -300.9054262 0.0001036472504 0.2994103378 0.06599897376 0.01645634222 + 1754 63 1604.70183 -300.9012511 -300.9053614 6.524274878e-05 0.2989152142 0.08283985757 0.01600751186 + 1755 63 1604.70183 -300.9028834 -300.9055698 4.264202282e-05 0.2962186456 0.06327067003 0.01571353764 + 1756 63 1604.70183 -300.9045357 -300.9054704 1.483672216e-05 0.2973243048 0.09085590033 0.01575272449 + 1757 63 1604.70183 -300.9063552 -300.9057429 9.71799273e-06 0.2884807401 0.06941819226 0.01542035128 + 1758 63 1604.70183 -300.9088724 -300.9057308 4.986613893e-05 0.2793016715 0.08288516362 0.01507898621 + 1759 63 1604.70183 -300.9124503 -300.9040208 0.0001338020263 0.2812060245 0.1928511178 0.01489387029 + 1760 63 1604.70183 -300.9109141 -300.9051512 9.147555261e-05 0.2768512385 0.1334998331 0.01491976915 + 1761 63 1604.70183 -300.8321213 -300.8505367 0.0002923070174 0.5785146021 0.6213955083 0.02714672019 + 1762 63 1604.70183 -300.9118449 -300.9051298 0.0001065894855 0.2734464626 0.1256294185 0.01463001989 + 1763 63 1604.70183 -300.9142963 -300.9048357 0.0001501672728 0.2662175163 0.1107049978 0.01404799852 + 1764 63 1604.70183 -300.8440167 -300.8676537 0.0003751906939 0.5188260296 0.4282552364 0.02256107812 + 1765 63 1604.70183 -300.8533013 -300.8785697 0.0004010870151 0.5278911297 0.4623712699 0.02278426515 + 1766 63 1604.70183 -300.8631711 -300.8902517 0.0004298512535 0.4598639491 0.2758713346 0.019775999 + 1767 63 1604.70183 -300.868526 -300.8946842 0.0004152100696 0.4364336409 0.2591136678 0.01977322923 + 1768 63 1604.70183 -300.8732182 -300.8986431 0.0004035700916 0.3865654608 0.1411599181 0.01802163002 + 1769 63 1604.70183 -300.8747167 -300.8991785 0.0003882834203 0.3761269693 0.1663823221 0.0180423025 + 1770 63 1604.70183 -300.761731 -300.7360143 0.0004082013901 1.088711264 1.699764745 0.04991863474 + 1771 63 1604.70183 -300.8774963 -300.9010154 0.0003733197156 0.3607214994 0.09504134909 0.01755173421 + 1772 63 1604.70183 -300.8786136 -300.9012712 0.0003596452757 0.3589639067 0.119374214 0.01804353093 + 1773 63 1604.70183 -300.880973 -300.9024223 0.0003404644159 0.3485633579 0.07390057041 0.01757646984 + 1774 63 1604.70183 -300.8826168 -300.9027788 0.000320032806 0.3445418235 0.08547472507 0.01764048595 + 1775 63 1604.70183 -300.8843564 -300.9033786 0.0003019393787 0.340641137 0.06234713001 0.01751041824 + 1776 63 1604.70183 -300.8848447 -300.9034138 0.0002947492049 0.3409421669 0.08066884258 0.01765797968 + 1777 63 1604.70183 -300.8866912 -300.903892 0.0002730290476 0.3352449255 0.06653314188 0.01747264198 + 1778 63 1604.70183 -300.8900552 -300.9042326 0.0002250376891 0.3295433142 0.1065524981 0.01776518759 + 1779 63 1604.70183 -300.8914458 -300.9046115 0.0002089783543 0.323406022 0.08556001491 0.0175519089 + 1780 63 1604.70183 -300.895163 -300.9051837 0.0001590574148 0.309224247 0.0656817627 0.01711876094 + 1781 63 1604.70183 -300.8187471 -300.8329203 0.0002249710683 0.66864894 0.7696926803 0.02893295017 + 1782 63 1604.70183 -300.9006657 -300.9039288 5.179512331e-05 0.3015549559 0.1959501679 0.01784227538 + 1783 63 1604.70183 -300.8971273 -300.9051255 0.0001269544058 0.3038211379 0.0951464456 0.01720447875 + 1784 63 1604.70183 -300.8988964 -300.9054262 0.0001036472504 0.2994103378 0.06599897376 0.01645634222 + 1785 63 1604.70183 -300.9012511 -300.9053614 6.524274878e-05 0.2989152142 0.08283985757 0.01600751186 + 1786 63 1604.70183 -300.9028834 -300.9055698 4.264202282e-05 0.2962186456 0.06327067003 0.01571353764 + 1787 63 1604.70183 -300.9045357 -300.9054704 1.483672216e-05 0.2973243048 0.09085590033 0.01575272449 + 1788 63 1604.70183 -300.9063552 -300.9057429 9.71799273e-06 0.2884807401 0.06941819226 0.01542035128 + 1789 63 1604.70183 -300.9088724 -300.9057308 4.986613893e-05 0.2793016715 0.08288516362 0.01507898621 + 1790 63 1604.70183 -300.9124503 -300.9040208 0.0001338020263 0.2812060245 0.1928511178 0.01489387029 + 1791 63 1604.70183 -300.9109141 -300.9051512 9.147555261e-05 0.2768512385 0.1334998331 0.01491976915 + 1792 63 1604.70183 -300.8321213 -300.8505367 0.0002923070174 0.5785146021 0.6213955083 0.02714672019 + 1793 63 1604.70183 -300.9118449 -300.9051298 0.0001065894855 0.2734464626 0.1256294185 0.01463001989 + 1794 63 1604.70183 -300.9142963 -300.9048357 0.0001501672728 0.2662175163 0.1107049978 0.01404799852 + 1795 63 1604.70183 -300.8440167 -300.8676537 0.0003751906939 0.5188260296 0.4282552364 0.02256107812 + 1796 63 1604.70183 -300.8533013 -300.8785697 0.0004010870151 0.5278911297 0.4623712699 0.02278426515 + 1797 63 1604.70183 -300.8631711 -300.8902517 0.0004298512535 0.4598639491 0.2758713346 0.019775999 + 1798 63 1604.70183 -300.868526 -300.8946842 0.0004152100696 0.4364336409 0.2591136678 0.01977322923 + 1799 63 1604.70183 -300.8732182 -300.8986431 0.0004035700916 0.3865654608 0.1411599181 0.01802163002 + 1800 63 1604.70183 -300.8747167 -300.8991785 0.0003882834203 0.3761269693 0.1663823221 0.0180423025 +# s_vv.xyz + config # atoms volume energy DFT energy energy error force DFT force force error + 1801 62 1604.70183 -294.9672599 -294.8464567 0.001948438254 1.218592891 1.936865193 0.07017898882 + 1802 62 1604.70183 -295.0806403 -295.0536882 0.0004347107556 0.4790988623 0.08041896133 0.02586848956 + 1803 62 1604.70183 -295.0802893 -295.0537321 0.0004283418966 0.4769065652 0.07305595364 0.02581295717 + 1804 62 1604.70183 -295.082277 -295.0540018 0.0004560523149 0.4827633663 0.04177577511 0.0261722975 + 1805 62 1604.70183 -295.0831119 -295.0539914 0.0004696866105 0.4862810393 0.04851777377 0.0263634702 + 1806 62 1604.70183 -295.084722 -295.0539856 0.0004957492172 0.4859169347 0.02910152903 0.02721708228 + 1807 62 1604.70183 -295.0851873 -295.053941 0.0005039725832 0.4862267386 0.03746575669 0.02747371134 + 1808 62 1604.70183 -295.0865698 -295.053892 0.0005270617212 0.491291173 0.0277012169 0.02755786861 + 1809 62 1604.70183 -295.087454 -295.0538036 0.0005427479138 0.4947408414 0.03202675709 0.02758035141 + 1810 62 1604.70183 -295.0882799 -295.0537477 0.0005569707518 0.4985048115 0.02262651179 0.02774193499 + 1811 62 1604.70183 -295.0881928 -295.0537638 0.0005553056396 0.4980384905 0.01969124237 0.02772529649 + 1812 62 1604.70183 -295.0299407 -294.970757 0.0009545770193 0.7396456888 0.805841392 0.04335219622 + 1813 62 1604.70183 -295.0386565 -294.9904052 0.0007782470124 0.6635399904 0.5736876726 0.03643190175 + 1814 62 1604.70183 -295.0444726 -295.005392 0.0006303314528 0.5735987201 0.4288010958 0.03344109746 + 1815 62 1604.70183 -295.0497423 -295.0199643 0.0004802911362 0.4468853577 0.4788589248 0.03319399744 + 1816 62 1604.70183 -295.0511289 -295.0334233 0.0002855751486 0.412914223 0.3523211178 0.02798643806 + 1817 62 1604.70183 -295.0579787 -295.0457463 0.0001972962478 0.4728593576 0.364632667 0.02225997414 + 1818 62 1604.70183 -295.0715407 -295.0529039 0.0003005931017 0.4519887681 0.1424499642 0.02461639629 + 1819 62 1604.70183 -295.075468 -295.0528367 0.0003650211985 0.4598058593 0.1613427988 0.02601893431 + 1820 62 1604.70183 -295.6437402 -295.7667974 0.001984794478 1.101951383 1.241933429 0.07065064344 + 1821 62 1604.70183 -295.6584317 -295.8428527 0.002974532108 0.9059245159 0.06042308731 0.05397637275 + 1822 62 1604.70183 -295.6569539 -295.8430049 0.003000823493 0.9094440307 0.06690064222 0.05432239756 + 1823 62 1604.70183 -295.6564417 -295.8432599 0.003013196244 0.9085919464 0.03776811079 0.0541815139 + 1824 62 1604.70183 -295.6563667 -295.8432638 0.003014469616 0.9086613285 0.04101536582 0.0541603965 + 1825 62 1604.70183 -295.6563009 -295.8433898 0.003017563205 0.9083144105 0.02632908316 0.05437937781 + 1826 62 1604.70183 -295.6561776 -295.8434206 0.003020049312 0.9084065836 0.03543869754 0.05456180745 + 1827 62 1604.70183 -295.6557963 -295.8435125 0.003027680833 0.9083240905 0.02411023484 0.05431494177 + 1828 62 1604.70183 -295.6555947 -295.8435306 0.00303122537 0.9083567026 0.03077112026 0.05419333611 + 1829 62 1604.70183 -295.6552005 -295.8436004 0.003038707443 0.9077274908 0.01562662785 0.05419756291 + 1830 62 1604.70183 -295.6550681 -295.8436057 0.003040928899 0.9075878917 0.01708384052 0.05421249554 + 1831 62 1604.70183 -295.6648112 -295.8167845 0.002451182587 0.9539499354 0.4894330363 0.05675946661 + 1832 62 1604.70183 -295.6653242 -295.8230259 0.002543575659 0.9619624781 0.3758007258 0.05332120959 + 1833 62 1604.70183 -295.669588 -295.8292232 0.002574759832 0.9252453911 0.2702858705 0.0539704111 + 1834 62 1604.70183 -295.6742885 -295.83394 0.002575022934 0.8769729734 0.3148796555 0.05736904735 + 1835 62 1604.70183 -295.6707998 -295.8386637 0.002707482523 0.8782946659 0.1730625895 0.0560009008 + 1836 62 1604.70183 -295.6665416 -295.8399442 0.002796816345 0.8904229731 0.1749793019 0.05515358217 + 1837 62 1604.70183 -295.6633037 -295.8416248 0.002876145486 0.8955998748 0.1010047833 0.05420821043 + 1838 62 1604.70183 -295.6604964 -295.8420227 0.00292784398 0.9024681482 0.1152879517 0.05365567368 + 1839 62 1604.70183 -295.0461481 -294.8382597 0.003353038484 1.376007463 2.058118771 0.07224160463 + 1840 62 1604.70183 -295.1913814 -295.0875434 0.001674805691 0.5384196148 0.1272566374 0.02884710964 + 1841 62 1604.70183 -295.1933389 -295.0877404 0.001703201426 0.5410283372 0.1535920653 0.02886210343 + 1842 62 1604.70183 -295.1981877 -295.0897485 0.00174901827 0.5321510958 0.0919085924 0.02901561245 + 1843 62 1604.70183 -295.200779 -295.0902028 0.001783487411 0.5323027483 0.1148826245 0.0291975135 + 1844 62 1604.70183 -295.2038752 -295.0912372 0.001816742655 0.5270744721 0.07476920569 0.03063740088 + 1845 62 1604.70183 -295.2039072 -295.091241 0.001817196234 0.5270243274 0.07566021039 0.03064624634 + 1846 62 1604.70183 -295.204807 -295.0919271 0.001820643746 0.5297843394 0.05720549079 0.03055348833 + 1847 62 1604.70183 -295.2056422 -295.0923212 0.001827758618 0.5355035428 0.08758261141 0.03054338637 + 1848 62 1604.70183 -295.2059626 -295.0928299 0.001824721919 0.5401130703 0.05949483075 0.03049009024 + 1849 62 1604.70183 -295.2062009 -295.0932507 0.001821776549 0.5493673198 0.05423584132 0.03047836645 + 1850 62 1604.70183 -295.1209612 -294.981282 0.002252891456 0.8897996853 0.9234967041 0.04631741112 + 1851 62 1604.70183 -295.2065108 -295.0935197 0.001822437283 0.54608975 0.03621646964 0.03069436061 + 1852 62 1604.70183 -295.2068164 -295.0937106 0.001824287496 0.5427350597 0.04645181891 0.03111035478 + 1853 62 1604.70183 -295.206795 -295.0938805 0.001821201387 0.542289608 0.03076074258 0.03089061049 + 1854 62 1604.70183 -295.2067584 -295.093914 0.001820072237 0.5423513532 0.03399974318 0.03080694168 + 1855 62 1604.70183 -295.2065054 -295.0939969 0.001814654016 0.5431894835 0.02214248645 0.03079316353 + 1856 62 1604.70183 -295.2062055 -295.0940078 0.001809639985 0.5444393002 0.03072664822 0.03075298998 + 1857 62 1604.70183 -295.205989 -295.0940237 0.001805892068 0.5439592622 0.01965117363 0.03070060288 + 1858 62 1604.70183 -295.2058644 -295.0940064 0.001804160999 0.5438513129 0.02250610148 0.03064219726 + 1859 62 1604.70183 -295.13325 -295.0077715 0.002023846035 0.8068358492 0.6723254144 0.04044178823 + 1860 62 1604.70183 -295.1436331 -295.0284846 0.001857234389 0.7267919929 0.4990357282 0.03730438599 + 1861 62 1604.70183 -295.1525145 -295.0474413 0.001694729171 0.6685615954 0.5617965412 0.03668174015 + 1862 62 1604.70183 -295.1609362 -295.0650615 0.001546366017 0.6192067901 0.3763318358 0.03169583822 + 1863 62 1604.70183 -295.1686429 -295.0746943 0.00151529915 0.6225145556 0.4005004763 0.02822416942 + 1864 62 1604.70183 -295.1809286 -295.083709 0.001568057798 0.5558429155 0.1971474907 0.02853862703 + 1865 62 1604.70183 -295.1849742 -295.0842832 0.001624048373 0.5478533467 0.2301211223 0.02973137408 +# vP.xyz + config # atoms volume energy DFT energy energy error force DFT force force error + 1866 215 5415.868678 -1036.385715 -1036.518623 0.0006181733332 0.2431233829 0.1455333724 0.005585521055 + 1867 215 5415.868678 -1036.384949 -1036.524675 0.0006498895246 0.2141173893 0.04865629092 0.00529898731 + 1868 215 5415.868678 -1036.385733 -1036.519724 0.0006232139374 0.235014552 0.1182395714 0.00558028699 + 1869 215 5415.868678 -1036.385495 -1036.521456 0.0006323721406 0.2251511787 0.1204748543 0.005807924957 + 1870 215 5415.868678 -1036.385246 -1036.521815 0.0006352031266 0.225887845 0.1537923189 0.006003361061 + 1871 215 5415.868678 -1036.385015 -1036.522616 0.0006400020199 0.2255660556 0.1181713349 0.005730052687 + 1872 215 5415.868678 -1036.384202 -1036.523741 0.0006490150934 0.2372088591 0.09590202083 0.005383730036 + 1873 215 5415.868678 -1036.38431 -1036.524159 0.0006504598813 0.2337842778 0.06651800554 0.005128186479 + 1874 215 5415.868678 -1036.384343 -1036.524443 0.0006516260193 0.2332451848 0.06506700127 0.004942329637 + 1875 215 5415.868678 -1036.384694 -1036.524643 0.0006509222256 0.2225473259 0.03789590619 0.005057838722 +# vv.xyz + config # atoms volume energy DFT energy energy error force DFT force force error + 1876 214 5415.868678 -1030.597339 -1030.827092 0.00107361233 0.6568010127 0.3690492999 0.0163065602 + 1877 214 5415.868678 -1030.594629 -1030.831236 0.0011056399 0.6357552261 0.206246824 0.01610434446 + 1878 214 5415.868678 -1030.590721 -1030.832172 0.001128277401 0.6329388724 0.1753841469 0.01617119335 + 1879 214 5415.868678 -1030.586604 -1030.833731 0.001154798659 0.622831011 0.1305811393 0.01575711862 + 1880 214 5415.868678 -1030.574281 -1030.835231 0.001219390099 0.6058441093 0.1712622619 0.01462296559 + 1881 214 5415.868678 -1030.577119 -1030.835309 0.001206496713 0.6078344155 0.1384739781 0.0149084475 + 1882 214 5415.868678 -1030.573021 -1030.836422 0.001230843439 0.5944631515 0.08661607918 0.01427931238 + 1883 214 5415.868678 -1031.088359 -1031.461821 0.001745151303 1.034421614 0.2826455022 0.02606357092 + 1884 214 5415.868678 -1031.091064 -1031.465067 0.001747677127 0.9999048413 0.2065295166 0.02710925733 + 1885 214 5415.868678 -1031.094371 -1031.4678 0.00174499978 0.9485372815 0.2160317144 0.02943944547 + 1886 214 5415.868678 -1031.088638 -1031.470432 0.001784087942 0.9757776537 0.1228543654 0.02787463064 + 1887 214 5415.868678 -1031.081777 -1031.471654 0.001821852033 1.009792825 0.1258656337 0.026410081 + 1888 214 5415.868678 -1031.080586 -1031.472689 0.001832259675 0.9991562544 0.07554789307 0.02736556898 + 1889 214 5415.868678 -1031.078938 -1031.473011 0.00184146258 0.9907336313 0.110225689 0.02845759869 + 1890 214 5415.868678 -1031.07504 -1031.4736 0.001862430081 1.000961382 0.07186162854 0.02803213684 + 1891 214 5415.868678 -1030.690689 -1030.838186 0.0006892363267 0.7780571869 0.4067819182 0.01689825621 + 1892 214 5415.868678 -1030.690244 -1030.843044 0.0007140167877 0.7445713294 0.2451309087 0.01688677179 + 1893 214 5415.868678 -1030.687684 -1030.844175 0.0007312652947 0.7279686394 0.2296418926 0.01780386462 + 1894 214 5415.868678 -1030.684559 -1030.846722 0.00075777015 0.7177620911 0.1735900426 0.01718475276 diff --git a/examples/PACKAGES/pod/InP/InP_training_errors.pod b/examples/PACKAGES/pod/InP/InP_training_errors.pod new file mode 100644 index 0000000000..475faf24e0 --- /dev/null +++ b/examples/PACKAGES/pod/InP/InP_training_errors.pod @@ -0,0 +1,27 @@ +**************** Begin of Error Analysis for the Training Data Set **************** +-------------------------------------------------------------------------------------------- + File | # configs | # atoms | MAE energy | RMSE energy | MAE force | RMSE force +-------------------------------------------------------------------------------------------- +Bulk.xyz 1 8 0.001678 0.001678 0.000000 0.000000 +EOS.xyz 268 2080 0.001463 0.001817 0.001107 0.015463 +Shear.xyz 346 2768 0.000415 0.000640 0.008336 0.012865 +Strain.xyz 163 1304 0.001129 0.001374 0.000021 0.000036 +aIn.xyz 54 11664 0.000737 0.000796 0.007969 0.016112 +aP.xyz 21 4536 0.001396 0.001407 0.019599 0.054174 +aa.xyz 20 4320 0.001991 0.001991 0.016735 0.027955 +iIn.xyz 41 8897 0.001548 0.001687 0.013910 0.025462 +iP.xyz 100 21700 0.001090 0.001203 0.009692 0.018549 +s_aIn.xyz 121 7744 0.000856 0.000889 0.011041 0.017399 +s_aP.xyz 72 4608 0.002255 0.003587 0.032425 0.045878 +s_aa.xyz 18 1152 0.001198 0.001200 0.037169 0.047713 +s_iIn.xyz 144 9360 0.002014 0.002255 0.035374 0.050726 +s_iP.xyz 337 21905 0.001655 0.002178 0.025130 0.038368 +s_vIn.xyz 17 1071 0.007984 0.007992 0.023190 0.039575 +s_vP.xyz 77 4851 0.000245 0.000281 0.018303 0.025819 +s_vv.xyz 65 4030 0.001759 0.001986 0.039037 0.052667 +vP.xyz 10 2150 0.000640 0.000640 0.005452 0.009834 +vv.xyz 19 4066 0.001336 0.001403 0.020930 0.034386 +-------------------------------------------------------------------------------------------- +All files 1894 118214 0.001288 0.001855 0.018109 0.032649 +-------------------------------------------------------------------------------------------- +**************** End of Error Analysis for the Training Data Set **************** diff --git a/examples/PACKAGES/pod/InP/README.md b/examples/PACKAGES/pod/InP/README.md new file mode 100644 index 0000000000..9555fa2123 --- /dev/null +++ b/examples/PACKAGES/pod/InP/README.md @@ -0,0 +1,16 @@ +### POD example for InP + +We will fit a potential to the `InP` training data in the `XYZ` directory, which houses `.xyz` files + +Please download the training data from [the repo](https://github.com/cesmix-mit/pod-examples/tree/main/JCP2023_InP/XYZ) + +Fit POD with + + lmp -in in.fitpod + +This creates `InP_coefficients.pod` for the linear model, which we can use to run MD with + + lmp -in in.pod + + + diff --git a/examples/PACKAGES/pod/InP/in.fitpod b/examples/PACKAGES/pod/InP/in.fitpod new file mode 100644 index 0000000000..cfb230c7d6 --- /dev/null +++ b/examples/PACKAGES/pod/InP/in.fitpod @@ -0,0 +1 @@ +fitpod InP_param.pod InP_data.pod \ No newline at end of file diff --git a/examples/PACKAGES/pod/Ta_Quadratic/in.pod b/examples/PACKAGES/pod/InP/in.pod similarity index 63% rename from examples/PACKAGES/pod/Ta_Quadratic/in.pod rename to examples/PACKAGES/pod/InP/in.pod index bde2df00a1..81a0998971 100644 --- a/examples/PACKAGES/pod/Ta_Quadratic/in.pod +++ b/examples/PACKAGES/pod/InP/in.pod @@ -1,13 +1,13 @@ -# Demonstrate POD Ta potential +# Demonstrate POD potential for InP # Initialize simulation variable nsteps index 100 variable nrep equal 4 -variable a equal 3.316 +variable a equal 5.83 units metal -# generate the box and atom positions using a BCC lattice +# generate the box and atom positions using a FCC lattice variable nx equal ${nrep} variable ny equal ${nrep} @@ -15,17 +15,17 @@ variable nz equal ${nrep} boundary p p p -lattice bcc $a +lattice diamond $a region box block 0 ${nx} 0 ${ny} 0 ${nz} -create_box 1 box -create_atoms 1 box - -mass 1 180.88 +create_box 2 box +create_atoms 1 box basis 5 2 basis 6 2 basis 7 2 basis 8 2 +mass 1 114.76 +mass 2 30.98 # POD potential pair_style pod -pair_coeff * * Ta_param.pod Ta_coefficients.pod Ta +pair_coeff * * InP_param.pod InP_coefficients.pod In P # Setup output @@ -44,4 +44,3 @@ velocity all create 300.0 4928459 loop geom fix 1 all nve run ${nsteps} - diff --git a/examples/PACKAGES/pod/InP/log.22May24.fitpod.g++.1 b/examples/PACKAGES/pod/InP/log.22May24.fitpod.g++.1 new file mode 100644 index 0000000000..c5bd10bac8 --- /dev/null +++ b/examples/PACKAGES/pod/InP/log.22May24.fitpod.g++.1 @@ -0,0 +1,163 @@ +LAMMPS (17 Apr 2024 - Development - patch_17Apr2024-176-gc2e4ad220f-modified) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98) + using 1 OpenMP thread(s) per MPI task +fitpod InP_param.pod InP_data.pod +**************** Begin of POD Potentials **************** +species: In P +periodic boundary conditions: 1 1 1 +number of environment clusters: 1 +number of principal compoments: 2 +inner cut-off radius: 0.8 +outer cut-off radius: 5 +bessel polynomial degree: 4 +inverse polynomial degree: 8 +one-body potential: 1 +two-body radial basis functions: 6 +three-body radial basis functions: 5 +three-body angular degree: 4 +four-body radial basis functions: 4 +four-body angular degree: 2 +five-body radial basis functions: 0 +five-body angular degree: 0 +six-body radial basis functions: 0 +six-body angular degree: 0 +seven-body radial basis functions: 0 +seven-body angular degree: 0 +number of local descriptors per element for one-body potential: 1 +number of local descriptors per element for two-body potential: 12 +number of local descriptors per element for three-body potential: 75 +number of local descriptors per element for four-body potential: 64 +number of local descriptors per element for five-body potential: 0 +number of local descriptors per element for six-body potential: 0 +number of local descriptors per element for seven-body potential: 0 +number of local descriptors per element for all potentials: 152 +number of global descriptors: 304 +**************** 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 +path to environment configuration set: XYZ +basename for output files: InP +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 +save pod descriptors: 0 +compute pod descriptors: 0 +**************** End of Data File **************** +**************** Begin of Training Data Set **************** +-------------------------------------------------------- + data file | number of configurations | number of atoms +-------------------------------------------------------- + Bulk.xyz | 1 | 8 + EOS.xyz | 268 | 2080 + Shear.xyz | 346 | 2768 + Strain.xyz | 163 | 1304 + aIn.xyz | 54 | 11664 + aP.xyz | 21 | 4536 + aa.xyz | 20 | 4320 + iIn.xyz | 41 | 8897 + iP.xyz | 100 | 21700 + s_aIn.xyz | 121 | 7744 + s_aP.xyz | 72 | 4608 + s_aa.xyz | 18 | 1152 + s_iIn.xyz | 144 | 9360 + s_iP.xyz | 337 | 21905 + s_vIn.xyz | 17 | 1071 + s_vP.xyz | 77 | 4851 + s_vv.xyz | 65 | 4030 + vP.xyz | 10 | 2150 + vv.xyz | 19 | 4066 +-------------------------------------------------------- +number of files: 19 +number of configurations in all files: 1894 +number of atoms in all files: 118214 +minimum number of atoms: 4 +maximum number of atoms: 217 +**************** End of Training Data Set **************** +**************** Begin of Memory Allocation **************** +maximum number of atoms in periodic domain: 217 +maximum number of atoms in extended domain: 5859 +maximum number of neighbors in extended domain: 1271403 +size of double memory: 5555904 +size of descriptor matrix: 304 x 304 +**************** End of Memory Allocation **************** +**************** Begin of Least-Squares Fitting **************** +Configuration: # 1 +Configuration: # 101 +Configuration: # 201 +Configuration: # 301 +Configuration: # 401 +Configuration: # 501 +Configuration: # 601 +Configuration: # 701 +Configuration: # 801 +Configuration: # 901 +Configuration: # 1001 +Configuration: # 1101 +Configuration: # 1201 +Configuration: # 1301 +Configuration: # 1401 +Configuration: # 1501 +Configuration: # 1601 +Configuration: # 1701 +Configuration: # 1801 +**************** Begin of Error Calculation **************** +Configuration: # 1 +Configuration: # 101 +Configuration: # 201 +Configuration: # 301 +Configuration: # 401 +Configuration: # 501 +Configuration: # 601 +Configuration: # 701 +Configuration: # 801 +Configuration: # 901 +Configuration: # 1001 +Configuration: # 1101 +Configuration: # 1201 +Configuration: # 1301 +Configuration: # 1401 +Configuration: # 1501 +Configuration: # 1601 +Configuration: # 1701 +Configuration: # 1801 +**************** End of Error Calculation **************** +**************** Begin of Error Analysis for the Training Data Set **************** +-------------------------------------------------------------------------------------------- + File | # configs | # atoms | MAE energy | RMSE energy | MAE force | RMSE force +-------------------------------------------------------------------------------------------- +Bulk.xyz 1 8 0.001678 0.001678 0.000000 0.000000 +EOS.xyz 268 2080 0.001463 0.001817 0.001107 0.015464 +Shear.xyz 346 2768 0.000415 0.000640 0.008335 0.012863 +Strain.xyz 163 1304 0.001129 0.001374 0.000021 0.000036 +aIn.xyz 54 11664 0.000737 0.000796 0.007969 0.016112 +aP.xyz 21 4536 0.001396 0.001407 0.019599 0.054174 +aa.xyz 20 4320 0.001991 0.001991 0.016735 0.027955 +iIn.xyz 41 8897 0.001548 0.001687 0.013910 0.025462 +iP.xyz 100 21700 0.001090 0.001203 0.009692 0.018549 +s_aIn.xyz 121 7744 0.000856 0.000889 0.011041 0.017399 +s_aP.xyz 72 4608 0.002255 0.003587 0.032425 0.045878 +s_aa.xyz 18 1152 0.001198 0.001200 0.037169 0.047713 +s_iIn.xyz 144 9360 0.002014 0.002255 0.035374 0.050726 +s_iP.xyz 337 21905 0.001655 0.002178 0.025130 0.038368 +s_vIn.xyz 17 1071 0.007984 0.007992 0.023190 0.039575 +s_vP.xyz 77 4851 0.000245 0.000281 0.018303 0.025818 +s_vv.xyz 65 4030 0.001759 0.001986 0.039037 0.052667 +vP.xyz 10 2150 0.000640 0.000640 0.005452 0.009834 +vv.xyz 19 4066 0.001336 0.001403 0.020930 0.034386 +-------------------------------------------------------------------------------------------- +All files 1894 118214 0.001288 0.001855 0.018109 0.032648 +-------------------------------------------------------------------------------------------- +**************** End of Error Analysis for the Training Data Set **************** +Total wall time: 0:00:27 diff --git a/examples/PACKAGES/pod/InP/log.22May24.fitpod.g++.4 b/examples/PACKAGES/pod/InP/log.22May24.fitpod.g++.4 new file mode 100644 index 0000000000..928591cbcf --- /dev/null +++ b/examples/PACKAGES/pod/InP/log.22May24.fitpod.g++.4 @@ -0,0 +1,163 @@ +LAMMPS (17 Apr 2024 - Development - patch_17Apr2024-176-gc2e4ad220f-modified) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98) + using 1 OpenMP thread(s) per MPI task +fitpod InP_param.pod InP_data.pod +**************** Begin of POD Potentials **************** +species: In P +periodic boundary conditions: 1 1 1 +number of environment clusters: 1 +number of principal compoments: 2 +inner cut-off radius: 0.8 +outer cut-off radius: 5 +bessel polynomial degree: 4 +inverse polynomial degree: 8 +one-body potential: 1 +two-body radial basis functions: 6 +three-body radial basis functions: 5 +three-body angular degree: 4 +four-body radial basis functions: 4 +four-body angular degree: 2 +five-body radial basis functions: 0 +five-body angular degree: 0 +six-body radial basis functions: 0 +six-body angular degree: 0 +seven-body radial basis functions: 0 +seven-body angular degree: 0 +number of local descriptors per element for one-body potential: 1 +number of local descriptors per element for two-body potential: 12 +number of local descriptors per element for three-body potential: 75 +number of local descriptors per element for four-body potential: 64 +number of local descriptors per element for five-body potential: 0 +number of local descriptors per element for six-body potential: 0 +number of local descriptors per element for seven-body potential: 0 +number of local descriptors per element for all potentials: 152 +number of global descriptors: 304 +**************** 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 +path to environment configuration set: XYZ +basename for output files: InP +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 +save pod descriptors: 0 +compute pod descriptors: 0 +**************** End of Data File **************** +**************** Begin of Training Data Set **************** +-------------------------------------------------------- + data file | number of configurations | number of atoms +-------------------------------------------------------- + Bulk.xyz | 1 | 8 + EOS.xyz | 268 | 2080 + Shear.xyz | 346 | 2768 + Strain.xyz | 163 | 1304 + aIn.xyz | 54 | 11664 + aP.xyz | 21 | 4536 + aa.xyz | 20 | 4320 + iIn.xyz | 41 | 8897 + iP.xyz | 100 | 21700 + s_aIn.xyz | 121 | 7744 + s_aP.xyz | 72 | 4608 + s_aa.xyz | 18 | 1152 + s_iIn.xyz | 144 | 9360 + s_iP.xyz | 337 | 21905 + s_vIn.xyz | 17 | 1071 + s_vP.xyz | 77 | 4851 + s_vv.xyz | 65 | 4030 + vP.xyz | 10 | 2150 + vv.xyz | 19 | 4066 +-------------------------------------------------------- +number of files: 19 +number of configurations in all files: 1894 +number of atoms in all files: 118214 +minimum number of atoms: 4 +maximum number of atoms: 217 +**************** End of Training Data Set **************** +**************** Begin of Memory Allocation **************** +maximum number of atoms in periodic domain: 217 +maximum number of atoms in extended domain: 5859 +maximum number of neighbors in extended domain: 1271403 +size of double memory: 5555904 +size of descriptor matrix: 304 x 304 +**************** End of Memory Allocation **************** +**************** Begin of Least-Squares Fitting **************** +Configuration: # 1 +Configuration: # 101 +Configuration: # 201 +Configuration: # 301 +Configuration: # 401 +Configuration: # 501 +Configuration: # 601 +Configuration: # 701 +Configuration: # 801 +Configuration: # 901 +Configuration: # 1001 +Configuration: # 1101 +Configuration: # 1201 +Configuration: # 1301 +Configuration: # 1401 +Configuration: # 1501 +Configuration: # 1601 +Configuration: # 1701 +Configuration: # 1801 +**************** Begin of Error Calculation **************** +Configuration: # 1 +Configuration: # 101 +Configuration: # 201 +Configuration: # 301 +Configuration: # 401 +Configuration: # 501 +Configuration: # 601 +Configuration: # 701 +Configuration: # 801 +Configuration: # 901 +Configuration: # 1001 +Configuration: # 1101 +Configuration: # 1201 +Configuration: # 1301 +Configuration: # 1401 +Configuration: # 1501 +Configuration: # 1601 +Configuration: # 1701 +Configuration: # 1801 +**************** End of Error Calculation **************** +**************** Begin of Error Analysis for the Training Data Set **************** +-------------------------------------------------------------------------------------------- + File | # configs | # atoms | MAE energy | RMSE energy | MAE force | RMSE force +-------------------------------------------------------------------------------------------- +Bulk.xyz 1 8 0.001678 0.001678 0.000000 0.000000 +EOS.xyz 268 2080 0.001463 0.001817 0.001107 0.015463 +Shear.xyz 346 2768 0.000415 0.000640 0.008336 0.012865 +Strain.xyz 163 1304 0.001129 0.001374 0.000021 0.000036 +aIn.xyz 54 11664 0.000737 0.000796 0.007969 0.016112 +aP.xyz 21 4536 0.001396 0.001407 0.019599 0.054174 +aa.xyz 20 4320 0.001991 0.001991 0.016735 0.027955 +iIn.xyz 41 8897 0.001548 0.001687 0.013910 0.025462 +iP.xyz 100 21700 0.001090 0.001203 0.009692 0.018549 +s_aIn.xyz 121 7744 0.000856 0.000889 0.011041 0.017399 +s_aP.xyz 72 4608 0.002255 0.003587 0.032425 0.045878 +s_aa.xyz 18 1152 0.001198 0.001200 0.037169 0.047713 +s_iIn.xyz 144 9360 0.002014 0.002255 0.035374 0.050726 +s_iP.xyz 337 21905 0.001655 0.002178 0.025130 0.038368 +s_vIn.xyz 17 1071 0.007984 0.007992 0.023190 0.039575 +s_vP.xyz 77 4851 0.000245 0.000281 0.018303 0.025819 +s_vv.xyz 65 4030 0.001759 0.001986 0.039037 0.052667 +vP.xyz 10 2150 0.000640 0.000640 0.005452 0.009834 +vv.xyz 19 4066 0.001336 0.001403 0.020930 0.034386 +-------------------------------------------------------------------------------------------- +All files 1894 118214 0.001288 0.001855 0.018109 0.032649 +-------------------------------------------------------------------------------------------- +**************** End of Error Analysis for the Training Data Set **************** +Total wall time: 0:00:10 diff --git a/examples/PACKAGES/pod/InP/log.22May24.pod.g++.1 b/examples/PACKAGES/pod/InP/log.22May24.pod.g++.1 new file mode 100644 index 0000000000..99ee0b90b0 --- /dev/null +++ b/examples/PACKAGES/pod/InP/log.22May24.pod.g++.1 @@ -0,0 +1,155 @@ +LAMMPS (17 Apr 2024 - Development - patch_17Apr2024-176-gc2e4ad220f-modified) +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 potential for InP + +# Initialize simulation + +variable nsteps index 100 +variable nrep equal 4 +variable a equal 5.83 +units metal + +# generate the box and atom positions using a FCC 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 diamond $a +lattice diamond 5.83 +Lattice spacing in x,y,z = 5.83 5.83 5.83 +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 2 box +Created orthogonal box = (0 0 0) to (23.32 23.32 23.32) + 1 by 1 by 1 MPI processor grid +create_atoms 1 box basis 5 2 basis 6 2 basis 7 2 basis 8 2 +Created 512 atoms + using lattice units in orthogonal box = (0 0 0) to (23.32 23.32 23.32) + create_atoms CPU = 0.001 seconds + +mass 1 114.76 +mass 2 30.98 + +# POD potential +pair_style pod +pair_coeff * * InP_param.pod InP_coefficients.pod In P +**************** Begin of POD Potentials **************** +species: In P +periodic boundary conditions: 1 1 1 +number of environment clusters: 1 +number of principal compoments: 2 +inner cut-off radius: 0.8 +outer cut-off radius: 5 +bessel polynomial degree: 4 +inverse polynomial degree: 8 +one-body potential: 1 +two-body radial basis functions: 6 +three-body radial basis functions: 5 +three-body angular degree: 4 +four-body radial basis functions: 4 +four-body angular degree: 2 +five-body radial basis functions: 0 +five-body angular degree: 0 +six-body radial basis functions: 0 +six-body angular degree: 0 +seven-body radial basis functions: 0 +seven-body angular degree: 0 +number of local descriptors per element for one-body potential: 1 +number of local descriptors per element for two-body potential: 12 +number of local descriptors per element for three-body potential: 75 +number of local descriptors per element for four-body potential: 64 +number of local descriptors per element for five-body potential: 0 +number of local descriptors per element for six-body potential: 0 +number of local descriptors per element for seven-body potential: 0 +number of local descriptors per element for all potentials: 152 +number of global descriptors: 304 +**************** End of POD Potentials **************** + +**************** Begin of Model Coefficients **************** +total number of coefficients for POD potential: 304 +total number of elements for PCA projection matrix: 0 +total number of elements for PCA centroids: 0 +**************** End of Model Coefficients **************** + + +# 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 = 8 8 8 + 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.244 | 3.244 | 3.244 Mbytes + Step Temp E_pair E_mol TotEng Press + 0 300 -4.8392777 0 -4.8005754 1561.0654 + 10 291.27079 -4.8381515 0 -4.8005753 1709.509 + 20 266.69372 -4.8349805 0 -4.8005749 2126.86 + 30 230.86163 -4.8303573 0 -4.8005744 2735.6894 + 40 190.64668 -4.8251686 0 -4.8005738 3416.9247 + 50 153.9516 -4.8204341 0 -4.8005732 4022.2533 + 60 127.93805 -4.8170778 0 -4.8005728 4405.9763 + 70 117.12501 -4.8156828 0 -4.8005727 4475.6131 + 80 122.09497 -4.8163242 0 -4.800573 4231.7934 + 90 139.42686 -4.8185607 0 -4.8005735 3766.8505 + 100 162.84813 -4.8215828 0 -4.8005741 3221.8605 +Loop time of 2.18542 on 1 procs for 100 steps with 512 atoms + +Performance: 1.977 ns/day, 12.141 hours/ns, 45.758 timesteps/s, 23.428 katom-step/s +97.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.1829 | 2.1829 | 2.1829 | 0.0 | 99.88 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0.00080748 | 0.00080748 | 0.00080748 | 0.0 | 0.04 +Output | 0.00033584 | 0.00033584 | 0.00033584 | 0.0 | 0.02 +Modify | 0.00071224 | 0.00071224 | 0.00071224 | 0.0 | 0.03 +Other | | 0.000686 | | | 0.03 + +Nlocal: 512 ave 512 max 512 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 1451 ave 1451 max 1451 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: 17408 ave 17408 max 17408 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 17408 +Ave neighs/atom = 34 +Neighbor list builds = 0 +Dangerous builds = 0 + +Total wall time: 0:00:02 diff --git a/examples/PACKAGES/pod/InP/log.22May24.pod.g++.4 b/examples/PACKAGES/pod/InP/log.22May24.pod.g++.4 new file mode 100644 index 0000000000..67f8575cf5 --- /dev/null +++ b/examples/PACKAGES/pod/InP/log.22May24.pod.g++.4 @@ -0,0 +1,155 @@ +LAMMPS (17 Apr 2024 - Development - patch_17Apr2024-176-gc2e4ad220f-modified) +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 potential for InP + +# Initialize simulation + +variable nsteps index 100 +variable nrep equal 4 +variable a equal 5.83 +units metal + +# generate the box and atom positions using a FCC 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 diamond $a +lattice diamond 5.83 +Lattice spacing in x,y,z = 5.83 5.83 5.83 +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 2 box +Created orthogonal box = (0 0 0) to (23.32 23.32 23.32) + 1 by 2 by 2 MPI processor grid +create_atoms 1 box basis 5 2 basis 6 2 basis 7 2 basis 8 2 +Created 512 atoms + using lattice units in orthogonal box = (0 0 0) to (23.32 23.32 23.32) + create_atoms CPU = 0.001 seconds + +mass 1 114.76 +mass 2 30.98 + +# POD potential +pair_style pod +pair_coeff * * InP_param.pod InP_coefficients.pod In P +**************** Begin of POD Potentials **************** +species: In P +periodic boundary conditions: 1 1 1 +number of environment clusters: 1 +number of principal compoments: 2 +inner cut-off radius: 0.8 +outer cut-off radius: 5 +bessel polynomial degree: 4 +inverse polynomial degree: 8 +one-body potential: 1 +two-body radial basis functions: 6 +three-body radial basis functions: 5 +three-body angular degree: 4 +four-body radial basis functions: 4 +four-body angular degree: 2 +five-body radial basis functions: 0 +five-body angular degree: 0 +six-body radial basis functions: 0 +six-body angular degree: 0 +seven-body radial basis functions: 0 +seven-body angular degree: 0 +number of local descriptors per element for one-body potential: 1 +number of local descriptors per element for two-body potential: 12 +number of local descriptors per element for three-body potential: 75 +number of local descriptors per element for four-body potential: 64 +number of local descriptors per element for five-body potential: 0 +number of local descriptors per element for six-body potential: 0 +number of local descriptors per element for seven-body potential: 0 +number of local descriptors per element for all potentials: 152 +number of global descriptors: 304 +**************** End of POD Potentials **************** + +**************** Begin of Model Coefficients **************** +total number of coefficients for POD potential: 304 +total number of elements for PCA projection matrix: 0 +total number of elements for PCA centroids: 0 +**************** End of Model Coefficients **************** + + +# 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 = 8 8 8 + 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.215 | 3.215 | 3.215 Mbytes + Step Temp E_pair E_mol TotEng Press + 0 300 -4.8392777 0 -4.8005754 1561.0654 + 10 291.27079 -4.8381515 0 -4.8005753 1709.509 + 20 266.69372 -4.8349805 0 -4.8005749 2126.86 + 30 230.86163 -4.8303573 0 -4.8005744 2735.6894 + 40 190.64668 -4.8251686 0 -4.8005738 3416.9247 + 50 153.9516 -4.8204341 0 -4.8005732 4022.2533 + 60 127.93805 -4.8170778 0 -4.8005728 4405.9763 + 70 117.12501 -4.8156828 0 -4.8005727 4475.6131 + 80 122.09497 -4.8163242 0 -4.800573 4231.7934 + 90 139.42686 -4.8185607 0 -4.8005735 3766.8505 + 100 162.84813 -4.8215828 0 -4.8005741 3221.8605 +Loop time of 0.818141 on 4 procs for 100 steps with 512 atoms + +Performance: 5.280 ns/day, 4.545 hours/ns, 122.228 timesteps/s, 62.581 katom-step/s +94.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 | 0.70717 | 0.7255 | 0.75748 | 2.2 | 88.68 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0.05765 | 0.088203 | 0.10797 | 6.3 | 10.78 +Output | 0.00030107 | 0.00039215 | 0.00055987 | 0.0 | 0.05 +Modify | 0.00051915 | 0.00059064 | 0.00069306 | 0.0 | 0.07 +Other | | 0.003452 | | | 0.42 + +Nlocal: 128 ave 128 max 128 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +Nghost: 783 ave 783 max 783 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: 4352 ave 4352 max 4352 min +Histogram: 4 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 17408 +Ave neighs/atom = 34 +Neighbor list builds = 0 +Dangerous builds = 0 + +Total wall time: 0:00:00 diff --git a/examples/PACKAGES/pod/README.md b/examples/PACKAGES/pod/README.md index 2c6db69200..1f7714d4db 100644 --- a/examples/PACKAGES/pod/README.md +++ b/examples/PACKAGES/pod/README.md @@ -3,19 +3,36 @@ Go to `lammps` directory and build with the POD package: cd path/to/lammps - mkdir build-pod - cd build-pod + mkdir build + cd build cmake -C ../cmake/presets/basic.cmake -D PKG_ML-POD=on ../cmake cmake --build . -### Fit a POD potential for tantalum +### Compile LAMMPS/POD with Kokkos + + cmake -C ../cmake/presets/basic.cmake -C ../cmake/presets/kokkos-cuda.cmake -D PKG_ML-POD=on ../cmake + +### Fit a POD potential for Tantalum Go to `lammps/examples/PACKAGES/pod/Ta` directory and run - lmp -in in.podfit + lmp -in Ta_fit.pod -See the README in `lammps/examples/PACKAGES/pod/Ta` for instructions on how to run MD with the potential. +This creates `Ta_coefficients.pod` for the linear model, which we can use to run MD with + + lmp -in Ta_mdrun.pod + +### Fit a POD potential for Indium Phosphide + +Go to `lammps/examples/PACKAGES/pod/InP` directory and run + + lmp -in InP_fit.pod + +This creates `InP_coefficients.pod` for the linear model, which we can use to run MD with + + lmp -in InP_mdrun.pod ### 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/Ta_coeff.pod b/examples/PACKAGES/pod/Ta/Ta_coeff.pod deleted file mode 120000 index ddf9c1426d..0000000000 --- a/examples/PACKAGES/pod/Ta/Ta_coeff.pod +++ /dev/null @@ -1 +0,0 @@ -../../../../potentials/Ta_coeff.pod \ No newline at end of file diff --git a/examples/PACKAGES/pod/Ta/Ta_coeff.pod b/examples/PACKAGES/pod/Ta/Ta_coeff.pod new file mode 100644 index 0000000000..ab5e5fd43a --- /dev/null +++ b/examples/PACKAGES/pod/Ta/Ta_coeff.pod @@ -0,0 +1,33 @@ +model_coefficients: 32 0 0 +-4.45745 +29.40034 +-13.69439 +-0.32907 +-0.14786 +-1.35221 +-0.59315 +-26.30409 +-33.37233 +162.42473 +144.67248 +-149.50021 +1.78603 +2.49026 +-11.04768 +-11.14333 +12.40537 +0.48284 +0.39345 +-2.25812 +-1.38908 +1.31551 +0.02974 +-0.05094 +-0.21177 +0.12127 +0.23170 +0.02426 +-0.15305 +-0.10803 +0.25628 +0.01291 diff --git a/examples/PACKAGES/pod/Ta/Ta_coefficients.pod b/examples/PACKAGES/pod/Ta/Ta_coefficients.pod index 5222e9e600..ab5e5fd43a 100644 --- a/examples/PACKAGES/pod/Ta/Ta_coefficients.pod +++ b/examples/PACKAGES/pod/Ta/Ta_coefficients.pod @@ -1,33 +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 +model_coefficients: 32 0 0 +-4.45745 +29.40034 +-13.69439 +-0.32907 +-0.14786 +-1.35221 +-0.59315 +-26.30409 +-33.37233 +162.42473 +144.67248 +-149.50021 +1.78603 +2.49026 +-11.04768 +-11.14333 +12.40537 +0.48284 +0.39345 +-2.25812 +-1.38908 +1.31551 +0.02974 +-0.05094 +-0.21177 +0.12127 +0.23170 +0.02426 +-0.15305 +-0.10803 +0.25628 +0.01291 diff --git a/examples/PACKAGES/pod/Ta/Ta_data.pod b/examples/PACKAGES/pod/Ta/Ta_data.pod index 0933f3e79a..477d27dfed 100644 --- a/examples/PACKAGES/pod/Ta/Ta_data.pod +++ b/examples/PACKAGES/pod/Ta/Ta_data.pod @@ -3,10 +3,11 @@ file_extension xyz path_to_training_data_set "XYZ" path_to_test_data_set "XYZ" +path_to_environment_configuration_set "XYZ" fitting_weight_energy 100.0 fitting_weight_force 1.0 -fitting_regularization_parameter 1e-10 +fitting_regularization_parameter 1e-12 error_analysis_for_training_data_set 1 error_analysis_for_test_data_set 0 @@ -17,4 +18,3 @@ 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 index 00c01b01a6..f5dbaf9254 100644 --- a/examples/PACKAGES/pod/Ta/Ta_param.pod +++ b/examples/PACKAGES/pod/Ta/Ta_param.pod @@ -1,4 +1,3 @@ -# 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 @@ -11,22 +10,37 @@ rin 1.0 # outer cut-off radius rcut 5.0 +# use only for enviroment-adaptive potentials +number_of_environment_clusters 1 + +# principal_components of local descriptors +number_of_principal_components 2 + # 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 +threebody_angular_degree 4 + +# four-body linear POD potential +fourbody_number_radial_basis_functions 0 +fourbody_angular_degree 0 + +# five-body linear POD potential +fivebody_number_radial_basis_functions 0 +fivebody_angular_degree 0 + +# six-body linear POD potential +sixbody_number_radial_basis_functions 0 +sixbody_angular_degree 0 + +# seven-body linear POD potential +sevenbody_number_radial_basis_functions 0 +sevenbody_angular_degree 0 -# 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 index ff9704ce8a..c1910e232d 100644 --- a/examples/PACKAGES/pod/Ta/Ta_training_analysis.pod +++ b/examples/PACKAGES/pod/Ta/Ta_training_analysis.pod @@ -1,387 +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.709417684 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.01162059588 8.165654685 8.821346913 0.1141641875 + config # atoms volume energy DFT energy energy error force DFT force force error + 1 64 1191.016129 -753.1698421 -754.220443 0.01641563835 7.40295037 8.398670477 0.1439758999 + 2 64 1191.016129 -752.7395784 -753.865255 0.01758869658 8.280515739 9.134430545 0.1607787343 + 3 64 1191.016129 -753.08785 -754.0221 0.01459765574 7.697535492 9.017261102 0.1420603113 + 4 64 1191.016129 -753.3517402 -754.279613 0.01449801277 7.132364917 8.381725092 0.1340575727 + 5 64 1191.016129 -752.7757043 -753.777209 0.01564851147 8.360253864 9.478314477 0.1513006151 + 6 64 1191.016129 -753.0381763 -754.048643 0.01578854208 7.591838888 8.465317938 0.1285134018 + 7 64 1191.016129 -753.3574797 -754.317603 0.01500192578 7.082010429 8.127690491 0.1223953112 + 8 64 1191.016129 -753.1004299 -753.969161 0.01357392266 7.903578432 9.425464952 0.1365521197 + 9 64 1191.016129 -753.1947122 -754.141988 0.01480118465 7.516622986 8.821346913 0.1457127007 # 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.00920424781 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.007491515672 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 + config # atoms volume energy DFT energy energy error force DFT force force error + 10 54 988.0479474 -631.5404329 -631.019667 0.009643812587 15.64136862 16.625876 0.2725503749 + 11 54 988.0479474 -632.1993857 -631.719595 0.008885012437 14.51345042 15.58666626 0.2369926956 + 12 54 988.0479474 -631.7954039 -631.386255 0.007576831115 15.20757603 15.92378883 0.2310810758 + 13 54 988.0479474 -633.0131535 -632.575826 0.00809865759 13.46782392 14.55977162 0.2185066317 + 14 54 988.0479474 -630.6309514 -630.450212 0.003347025529 17.00218411 16.96340726 0.2580441627 + 15 54 988.0479474 -631.9637644 -631.669379 0.00545158078 15.32548025 16.05757315 0.2336752679 + 16 54 988.0479474 -632.6507522 -632.431277 0.004064355464 14.35795151 14.69810718 0.2158812969 + 17 54 988.0479474 -631.5521869 -630.960068 0.0109651643 14.75319251 15.99073148 0.2285673047 + 18 54 988.0479474 -624.854495 -623.378198 0.02733883252 23.58927768 24.67640432 0.3545478911 # 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.000713101184 6.153574445 6.021098636 0.08137696888 - 22 48 -556.2639568 -556.196151 0.00141262046 5.066504178 5.127955094 0.08649299664 - 23 48 -555.6269121 -555.488929 0.002874647697 6.848109843 7.050223459 0.08116202322 - 24 48 -556.1089332 -556.027926 0.001687649405 5.662035842 5.611881174 0.07953916326 - 25 48 -556.0580873 -555.968399 0.001868505799 5.879931332 5.979217189 0.07470196865 - 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 + config # atoms volume energy DFT energy energy error force DFT force force error + 19 48 889.0559462 -555.8989975 -555.899463 9.69792269e-06 6.387988875 6.084617063 0.07805905013 + 20 48 889.0559462 -555.8789297 -555.922478 0.000907256654 6.632232564 6.297071211 0.1040918647 + 21 48 889.0559462 -555.7628778 -555.800269 0.0007789836645 6.45057814 6.021098636 0.09471102034 + 22 48 889.0559462 -556.2253041 -556.196151 0.0006073561042 5.301350042 5.127955094 0.09123176401 + 23 48 889.0559462 -555.5406596 -555.488929 0.001077721414 7.195160551 7.050223459 0.08747135986 + 24 48 889.0559462 -556.0330633 -556.027926 0.0001070272218 6.009103539 5.611881174 0.08935441647 + 25 48 889.0559462 -555.9945281 -555.968399 0.0005443553218 6.212902066 5.979217189 0.081244274 + 26 48 889.0559462 -555.9554151 -556.047132 0.001910769529 6.012019145 5.544452585 0.09545132709 + 27 48 889.0559462 -555.7366233 -555.747848 0.0002338482448 6.764939057 6.47892568 0.1011665243 # 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.044193543e-06 0 4.166082999e-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.128171197e-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.932733888e-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.0005151850613 0.0006668258323 0.0006406777661 8.58562287e-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.242828165e-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.005856419419 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.690218902e-07 0 3.245696976e-07 - 60 2 -23.68115817 -23.690362 0.004601914896 0.0006345480975 0.0006067503605 9.377221838e-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.124695951e-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.702826801e-05 - 67 2 -23.67700773 -23.690457 0.006724637324 0.0006187196638 0.0005939831647 7.080762895e-06 - 68 2 -23.67552804 -23.689792 0.007131981721 0.0008698720997 0.0008340587509 1.418233126e-05 - 69 2 -23.67583966 -23.690006 0.007083167888 0.0006146073806 0.0005897694465 8.07065747e-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.623275772e-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.188704983e-07 0 2.129270726e-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.698202031e-07 0 3.95870452e-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.422528505e-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.454253265e-06 - 83 2 -23.68196226 -23.69017 0.004103870298 0.0009041773842 0.0008750051428 9.854119736e-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.90881572e-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.13023928e-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.7469499e-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.275875006e-06 - 96 2 -23.6789537 -23.690581 0.005813649829 7.452601432e-07 0 2.355432868e-07 - 97 2 -23.6840847 -23.688755 0.002335150427 0.0006519723076 0.0006251143895 8.25078808e-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.270984336e-06 - 101 2 -23.67450636 -23.68941 0.007451817634 0.0006119997091 0.0005883553348 7.715800125e-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.033875201e-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.002209950672 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.723949094e-07 0 2.648676661e-07 - 113 2 -23.68208689 -23.689952 0.003932553163 7.386833996e-07 0 2.88150653e-07 - 114 2 -23.67935439 -23.69061 0.005627806504 0.0008872685213 0.0008580011655 1.019979918e-05 - 115 2 -23.68099138 -23.690595 0.004801812376 0.0008956193373 0.0008680069124 9.843191998e-06 - 116 2 -23.67743565 -23.690231 0.006397673953 0.0006194343635 0.0005925892338 8.542917156e-06 - 117 2 -23.67809541 -23.690469 0.006186797077 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.007590778783 0.0008650318724 0.0008320192305 1.23538989e-05 - 120 2 -23.68501591 -23.687426 0.001205043669 0.001145633567 0.00109577735 2.03694619e-05 - 121 2 -23.68302307 -23.689562 0.003269464306 0.0006474095532 0.0006265237426 6.532536015e-06 - 122 2 -23.68134549 -23.6904 0.004527256823 4.272990756e-07 0 1.732352808e-07 - 123 2 -23.67843015 -23.690561 0.006065426647 0.0006235069318 0.0005982273815 6.816496585e-06 - 124 2 -23.67292129 -23.689107 0.00809285397 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 + config # atoms volume energy DFT energy energy error force DFT force force error + 28 2 36.40799882 -23.68590704 -23.689367 0.001729981765 0.0005857469375 0.0006222748589 9.806537327e-06 + 29 2 36.47727251 -23.68481169 -23.689888 0.00253815708 0.0005821264542 0.0006166052222 8.797319207e-06 + 30 2 36.47184897 -23.68494784 -23.689996 0.002524078869 0.0008240616654 0.0008810425642 2.037428468e-05 + 31 2 36.62078348 -23.68225087 -23.690957 0.004353065844 9.422546395e-07 0 3.770200667e-07 + 32 2 36.71197042 -23.67989944 -23.690521 0.005310779451 0.000566950477 0.0005982273815 8.158760804e-06 + 33 2 36.77593928 -23.67819051 -23.69038 0.00609474427 0.0005635032259 0.0005925723585 7.849374173e-06 + 34 2 36.36547558 -23.68676383 -23.689202 0.001219083545 0.0005885128327 0.0006279363025 1.053580541e-05 + 35 2 36.55974375 -23.68319963 -23.690482 0.003641183354 0.000815464884 0.0008640138888 1.662920456e-05 + 36 2 36.46414346 -23.68507116 -23.689902 0.002415420054 0.0005812774047 0.0006152154094 9.669302107e-06 + 37 2 36.63368821 -23.6817672 -23.690563 0.004397900334 0.0005717456253 0.0006038725031 8.311567538e-06 + 38 2 36.45345189 -23.68547117 -23.690207 0.002367914312 0.001009744333 0.00107369735 2.610693709e-05 + 39 2 36.38484847 -23.68616091 -23.689285 0.001562044483 0.0008322058899 0.000890013483 1.991679691e-05 + 40 2 36.43347895 -23.68567207 -23.689768 0.002047966899 0.001012061035 0.001080249045 2.782864008e-05 + 41 2 36.50220719 -23.68411383 -23.68968 0.002783085738 0.0008199315614 0.0008680034562 1.637343483e-05 + 42 2 36.50719109 -23.68445604 -23.690074 0.002808981302 0.001296718439 0.001373818765 2.64147971e-05 + 43 2 36.28428565 -23.68777598 -23.688108 0.0001660085343 0.000594221946 0.0006336134468 1.099939509e-05 + 44 2 36.3642236 -23.68663754 -23.689241 0.001301727662 0.0008329159633 0.0008880101351 1.874593476e-05 + 45 2 36.40397469 -23.68626116 -23.68952 0.001629419996 0.0008297070704 0.0008860011287 1.917842744e-05 + 46 2 36.15958616 -23.68901859 -23.686278 0.001370293226 0.0006010646632 0.0006406777661 1.138305654e-05 + 47 2 36.85012426 -23.6762264 -23.690097 0.006935298115 0.0007925625457 0.0008410160522 1.643998947e-05 + 48 2 36.76983294 -23.67871264 -23.690811 0.006049181932 0.0007984019479 0.0008500070588 1.765059262e-05 + 49 2 36.6630398 -23.68078335 -23.690266 0.004741323226 0.0009871892379 0.001044322747 2.331514572e-05 + 50 2 36.55357619 -23.68366573 -23.690597 0.003465633435 0.0009975988347 0.001050833003 2.173210926e-05 + 51 2 36.65271066 -23.68154759 -23.690673 0.004562704504 0.0005710871669 0.0006038907186 8.900574077e-06 + 52 2 36.56222224 -23.68337216 -23.690551 0.003589418943 0.0008144210952 0.0008590064028 1.523928952e-05 + 53 2 36.56679849 -23.68340668 -23.690693 0.003643158311 0.0008137974304 0.0008590110593 1.595698248e-05 + 54 2 36.59811665 -23.6823077 -23.69021 0.003951151804 0.0008145831598 0.0008730051546 2.003359235e-05 + 55 2 36.34900278 -23.68697807 -23.688943 0.0009824644101 0.0008322110648 0.0008800306813 1.744870469e-05 + 56 2 36.74034826 -23.67898787 -23.690136 0.005574066484 0.0005652132989 0.000593996633 7.92587851e-06 + 57 2 36.23610366 -23.68828866 -23.687444 0.0004223293819 0.0008436278789 0.000903059245 2.177751265e-05 + 58 2 36.42259639 -23.68591698 -23.689801 0.001942008249 0.0008265155784 0.0008740011442 1.602155127e-05 + 59 2 36.58194 -23.68291534 -23.690408 0.003746329075 7.853116414e-07 0 2.932806621e-07 + 60 2 36.59950783 -23.68250113 -23.690362 0.003930433448 0.0005739954417 0.0006067503605 1.009250412e-05 + 61 2 37.02589653 -23.67131384 -23.688881 0.008783582181 0.0007776878254 0.0008250054545 1.619373008e-05 + 62 2 36.71189602 -23.67982686 -23.690515 0.005344069182 0.001390387166 0.001475779794 3.436613175e-05 + 63 2 36.78962367 -23.67814275 -23.690551 0.006204123773 0.0005637977551 0.0005996599036 1.001095778e-05 + 64 2 36.42642467 -23.68541088 -23.689487 0.002038057601 0.0005844344049 0.0006194384554 9.105178613e-06 + 65 2 36.4423543 -23.68559418 -23.68986 0.002132908295 0.0008266682194 0.0008860124153 2.074533254e-05 + 66 2 36.39164409 -23.68624726 -23.689288 0.001520371922 0.001312283722 0.001396479144 2.724122629e-05 + 67 2 36.83059874 -23.67704953 -23.690457 0.006703736699 0.0005605067938 0.0005939831647 8.903855256e-06 + 68 2 36.8936692 -23.67527599 -23.689792 0.007258002565 0.000787658236 0.0008340587509 1.727027889e-05 + 69 2 36.88495742 -23.67562381 -23.690006 0.007191094218 0.0005570824127 0.0005897694465 9.526352044e-06 + 70 2 36.7928657 -23.67798232 -23.690571 0.00629434147 0.0005623157716 0.0005939781141 8.388724073e-06 + 71 2 36.50844234 -23.6845524 -23.690213 0.002830300186 0.001007417856 0.001084315452 3.13901245e-05 + 72 2 36.74419477 -23.67922697 -23.690617 0.005695015742 0.0005656413796 0.0006024682564 9.800558604e-06 + 73 2 36.49448266 -23.68420852 -23.689761 0.002776239615 0.0008225588858 0.0008790688255 2.057348461e-05 + 74 2 36.83933705 -23.67673911 -23.69027 0.006765442668 6.51984476e-07 0 1.932645324e-07 + 75 2 36.5709148 -23.68309624 -23.690599 0.003751378046 0.0005763054751 0.0006137752031 9.640531893e-06 + 76 2 36.67683082 -23.68088394 -23.69061 0.004863030461 8.763722169e-07 0 3.577227741e-07 + 77 2 36.66115635 -23.68104805 -23.690603 0.004777472809 0.0008071491031 0.0008590331775 1.853779451e-05 + 78 2 36.25583797 -23.68810086 -23.687908 9.643173451e-05 0.0008433322094 0.0009010105438 2.010525612e-05 + 79 2 36.69315685 -23.68027964 -23.690688 0.005204178753 0.0008040458508 0.0008470064935 1.442630316e-05 + 80 2 36.46769977 -23.68522986 -23.689988 0.002379071717 0.0005827976437 0.0006194465272 9.763878015e-06 + 81 2 36.44434113 -23.68541392 -23.689613 0.00209953858 0.0008243238033 0.0008740732235 1.862099135e-05 + 82 2 36.57453003 -23.68327227 -23.690678 0.003702863528 0.0005762034709 0.0006123757017 9.833686501e-06 + 83 2 36.54218785 -23.68361157 -23.69017 0.003279215566 0.0008176791029 0.0008750051428 1.921467316e-05 + 84 2 36.26350252 -23.68802292 -23.687892 6.545993121e-05 0.001032253376 0.001112070142 3.258468659e-05 + 85 2 36.49725495 -23.68460293 -23.690132 0.002764534398 0.0008196684225 0.000868018433 1.73736591e-05 + 86 2 36.66468316 -23.68110857 -23.690843 0.004867214139 0.0005702307406 0.0006081134763 9.414220345e-06 + 87 2 36.69098146 -23.68038294 -23.690598 0.005107529327 0.001139059342 0.001217674833 2.06566425e-05 + 88 2 36.7498524 -23.67919254 -23.690656 0.005731731866 0.0005658199144 0.0006024765556 1.012824587e-05 + 89 2 36.72620595 -23.67950048 -23.690254 0.005376762214 0.0009822281627 0.001043496047 2.500732518e-05 + 90 2 36.7046344 -23.68037755 -23.690694 0.00515822503 0.0005678245812 0.0006010740387 9.481625137e-06 + 91 2 36.53215524 -23.6837194 -23.690097 0.00318880242 0.0008183268201 0.0008730234819 1.936710758e-05 + 92 2 36.28988463 -23.68778953 -23.688402 0.000306233365 0.0005932101303 0.000632180354 1.068318322e-05 + 93 2 36.330155 -23.68704981 -23.688669 0.0008095957127 0.001023514967 0.001092474256 2.815195409e-05 + 94 2 36.65451876 -23.68118381 -23.690538 0.004677093696 0.0008073441427 0.0008610145179 1.797964322e-05 + 95 2 36.46623662 -23.68497164 -23.689722 0.002375180903 0.0005838510966 0.0006251287867 1.162407198e-05 + 96 2 36.73431174 -23.67954699 -23.690581 0.005517005254 6.747207861e-07 0 2.132659501e-07 + 97 2 36.34544239 -23.68680631 -23.688755 0.0009743455055 0.0005885973278 0.0006251143895 1.022234556e-05 + 98 2 36.9736935 -23.67299367 -23.689312 0.008159162687 0.0007819742447 0.0008290597083 1.76069415e-05 + 99 2 36.24487417 -23.68822174 -23.687388 0.0004168686754 0.001036416473 0.001120237475 3.421810783e-05 + 100 2 36.57555586 -23.68319244 -23.690664 0.003735779019 0.0005756998982 0.0006109402589 8.460885317e-06 + 101 2 36.94151938 -23.67402837 -23.68941 0.00769081595 0.0005547944898 0.0005883553348 9.667605875e-06 + 102 2 36.45547212 -23.68530561 -23.690035 0.002364692981 0.0008249402484 0.0008810062429 1.906781709e-05 + 103 2 36.88496132 -23.67563424 -23.690015 0.007190382353 0.000790172518 0.0008450195264 1.940915801e-05 + 104 2 36.76103389 -23.67899294 -23.690752 0.005879529841 0.0005653529749 0.0005996415596 9.061380987e-06 + 105 2 36.45404349 -23.68506744 -23.689825 0.002378779626 0.0008251854421 0.0008800215906 1.852267093e-05 + 106 2 36.74654739 -23.67929575 -23.690562 0.005633127253 0.000801763107 0.0008560011682 1.842443236e-05 + 107 2 36.74084732 -23.67927675 -23.690622 0.005672626415 0.0007986783077 0.0008390017878 1.383930455e-05 + 108 2 36.33025646 -23.68714468 -23.688764 0.0008096596348 0.0008354959994 0.0008910185183 1.950545073e-05 + 109 2 36.44122368 -23.68556667 -23.690011 0.002222166915 0.0005839138329 0.0006194287691 9.095263256e-06 + 110 2 36.25348342 -23.68799518 -23.687696 0.0001495917205 0.001029561919 0.001087589996 2.368346819e-05 + 111 2 36.69693588 -23.68052902 -23.691019 0.005244990763 0.0008045111684 0.0008540035129 1.660792245e-05 + 112 2 36.3425194 -23.68713615 -23.689025 0.0009444242204 6.048393422e-07 0 2.391864739e-07 + 113 2 36.51656499 -23.68385666 -23.689952 0.003047669619 6.637963301e-07 0 2.603475835e-07 + 114 2 36.71447816 -23.68006157 -23.69061 0.005274216197 0.0008035446124 0.0008580011655 1.851139775e-05 + 115 2 36.62519495 -23.68220128 -23.690595 0.004196860391 0.0008113491541 0.0008680069124 1.944419979e-05 + 116 2 36.80154127 -23.67766382 -23.690231 0.006283590712 0.0005612910408 0.0005925892338 9.235122707e-06 + 117 2 36.77742539 -23.67845523 -23.690469 0.006006884644 0.0007980880228 0.0008500294113 1.88002833e-05 + 118 2 36.50183296 -23.68462479 -23.690482 0.002928604258 0.0008206653147 0.0008740102974 1.862862483e-05 + 119 2 36.93568763 -23.67391526 -23.689613 0.007848867984 0.0007836859568 0.0008320192305 1.723468539e-05 + 120 2 36.23289183 -23.68838681 -23.687426 0.0004804048231 0.001032041797 0.00109577735 2.600453853e-05 + 121 2 36.44295904 -23.68519521 -23.689562 0.002183395162 0.0005844757167 0.0006265237426 1.128889659e-05 + 122 2 36.59751671 -23.68271637 -23.6904 0.003841815485 3.610825174e-07 0 1.4665868e-07 + 123 2 36.76766724 -23.67885647 -23.690561 0.005852264977 0.0005645533896 0.0005982273815 8.625051998e-06 + 124 2 37.00025894 -23.67207453 -23.689107 0.008516233835 0.0007781106616 0.0008180073349 1.390580399e-05 + 125 2 36.58722353 -23.68265657 -23.690145 0.00374421628 0.0008159137665 0.0008740766557 2.136045675e-05 + 126 2 36.79405605 -23.67803714 -23.690482 0.006222430293 0.0005630702013 0.0005939983165 8.85354297e-06 + 127 2 36.45320348 -23.68530353 -23.689864 0.002280236365 0.0008267100988 0.0008860124153 2.061923922e-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.004139951294 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.0001329997121 - 145 4 -46.44458344 -46.435608 0.00224385943 0.000711021509 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.002671271631 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.0009954281391 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.00269384137 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.718665563e-07 0 1.784212677e-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.0009134543992 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.000174152867 - 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.86450807e-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 + config # atoms volume energy DFT energy energy error force DFT force force error + 128 4 74.14589882 -46.45131085 -46.437936 0.003343711499 0.0008256456522 0.001265949446 0.0001479290162 + 129 4 74.26852111 -46.45483689 -46.438504 0.00408322283 0.0008748833702 0.001492549497 0.0001669960806 + 130 4 74.05957274 -46.44875622 -46.436378 0.00309455485 0.0005424811735 0.000810592376 0.0001015808542 + 131 4 74.30647158 -46.45520791 -46.441551 0.003414228451 0.001024641 0.001283675193 8.610021967e-05 + 132 4 73.40902276 -46.4265266 -46.416957 0.002392400067 0.0008639837782 0.001186145859 9.385948781e-05 + 133 4 74.1804881 -46.45258342 -46.440495 0.003022104862 0.0008837693055 0.001212440514 7.54705377e-05 + 134 4 74.17596744 -46.45191353 -46.437972 0.00348538317 0.001290912634 0.002358226452 0.0002715207448 + 135 4 74.73528136 -46.46363987 -46.44586 0.004444967559 0.001259032014 0.002033949852 0.0002223899959 + 136 4 74.0787509 -46.44925412 -46.435744 0.003377531217 0.0009337469328 0.001690849491 0.0002527015084 + 137 4 74.24609528 -46.45412062 -46.438209 0.003977905441 0.0008183472184 0.001160049999 8.303212282e-05 + 138 4 73.73005434 -46.43863377 -46.42629 0.003085943173 0.0005398665308 0.0005297018029 9.433755819e-06 + 139 4 74.33993289 -46.45634184 -46.443301 0.003260209859 0.001019667847 0.001818421568 0.0002031714008 + 140 4 74.20715045 -46.45310823 -46.439002 0.003526557791 0.001120917878 0.001416973535 8.385490094e-05 + 141 4 73.89686848 -46.44426829 -46.432438 0.002957572572 0.001055104669 0.001010469198 5.761635655e-05 + 142 4 73.27773838 -46.42097352 -46.412654 0.002079881174 0.001288759108 0.001801959766 0.0001651013922 + 143 4 74.40027968 -46.45756841 -46.443231 0.003584351835 0.0008139750432 0.001691590967 0.0002012572515 + 144 4 73.86123747 -46.44349423 -46.431513 0.002995306686 0.00134586635 0.001680544852 8.973225319e-05 + 145 4 73.96908649 -46.4465827 -46.435608 0.002743674619 0.0008335711035 0.0009593039143 3.003885348e-05 + 146 4 74.18717232 -46.45311791 -46.437689 0.003857228017 0.0008866862425 0.001217708504 0.0001038986229 + 147 4 73.76897316 -46.43964365 -46.428447 0.002799161691 0.0009977338004 0.002060081552 0.0002905770514 + 148 4 73.9161373 -46.44497446 -46.432255 0.003179865353 0.0006398887096 0.0006274201144 6.119155431e-05 + 149 4 74.36502962 -46.45637695 -46.442315 0.003515486518 0.001024758209 0.002424436842 0.0003681838217 + 150 4 74.11860796 -46.45104156 -46.436613 0.003607139707 0.000542307804 0.0005321240457 4.066198978e-05 + 151 4 73.86741001 -46.44297515 -46.430825 0.003037538607 0.0009095490857 0.001399987143 0.000130785128 + 152 4 73.94132612 -46.44533403 -46.43312 0.003053507676 0.0005400988424 0.0007272771136 5.413031343e-05 + 153 4 73.9811119 -46.44719039 -46.434347 0.003210848405 0.0008341122771 0.001284451634 0.0001304096221 + 154 4 73.82698041 -46.441812 -46.430573 0.002809749316 0.0008428066075 0.001315746176 0.0001159814943 + 155 4 74.70690467 -46.4633092 -46.445665 0.004411050207 0.001032736499 0.00180789159 0.0002150498129 + 156 4 74.08446722 -46.44922009 -46.435898 0.003330522688 0.0008301151804 0.001869300939 0.0002469789922 + 157 4 74.25274774 -46.45452028 -46.442107 0.003103319043 0.0006221716513 0.0006020930161 2.151286804e-05 + 158 4 74.05043726 -46.44881316 -46.434432 0.003595289303 0.0009353943426 0.001092982159 7.589096221e-05 + 159 4 74.16653794 -46.45216046 -46.436308 0.003963116012 0.001165997488 0.001839150891 0.0002017849653 + 160 4 73.62293094 -46.43471139 -46.423938 0.002693346975 0.0009282950076 0.001463463016 0.0001806433153 + 161 4 73.74948122 -46.43915587 -46.428115 0.002760218433 0.000645515606 0.0008584497656 7.555218569e-05 + 162 4 73.70731572 -46.4377108 -46.4269 0.002702698795 0.001146432571 0.001845719914 0.0002177014657 + 163 4 73.59054722 -46.43424497 -46.421142 0.003275743402 0.001070285015 0.001309150106 6.310130391e-05 + 164 4 73.85798892 -46.44313986 -46.432233 0.002726715023 0.000770442732 0.0007253109678 2.477634456e-05 + 165 4 73.86179419 -46.44300648 -46.429408 0.003399620631 0.000833457346 0.001068327665 6.682329804e-05 + 166 4 74.58468636 -46.46113881 -46.445145 0.003998452755 0.0009654561253 0.001776038288 0.0002133574173 + 167 4 74.02247797 -46.44776713 -46.435868 0.002974783408 0.001172308278 0.002376074704 0.0003537233362 + 168 4 74.20501804 -46.45335725 -46.439663 0.003423562793 0.0005357335948 0.001119403413 0.0001057861048 + 169 4 73.72492498 -46.43827692 -46.428287 0.00249748019 0.001199172287 0.001277000392 3.442241395e-05 + 170 4 73.62492908 -46.43462391 -46.424584 0.002509976491 0.0006543042024 0.0008032957114 4.113076772e-05 + 171 4 73.28647 -46.42133993 -46.413045 0.002073732867 0.001025290654 0.001248322074 5.004201967e-05 + 172 4 74.01119894 -46.44792434 -46.436994 0.002732584481 0.0009408903639 0.001331939188 0.0001513955587 + 173 4 74.45838911 -46.45890245 -46.443604 0.003824612242 0.0008652237342 0.001177046303 0.0001036876632 + 174 4 74.29439096 -46.45481655 -46.439718 0.003774637959 7.937739607e-07 0 2.16900779e-07 + 175 4 74.12581885 -46.45104078 -46.435527 0.003878446058 0.001033999404 0.0009338393866 5.850821011e-05 + 176 4 73.97170625 -46.44716581 -46.434787 0.003094701764 0.001051431266 0.00117329195 5.01747675e-05 + 177 4 74.0799757 -46.44974298 -46.434929 0.003703495842 0.001176626647 0.001349491756 5.454636617e-05 + 178 4 73.74433679 -46.4388625 -46.426499 0.003090875895 0.001072266841 0.001248937949 5.553437534e-05 + 179 4 74.14770713 -46.45110145 -46.437025 0.003519111637 0.0007601929639 0.000938418883 6.871857646e-05 + 180 4 73.80957625 -46.44091488 -46.428937 0.002994470545 0.001060607401 0.001286352984 7.2762261e-05 + 181 4 74.32407369 -46.45577946 -46.442516 0.003315864517 0.0006130126198 0.00094855469 0.0001237589752 + 182 4 73.84764949 -46.44267435 -46.428736 0.003484586658 0.0009114051058 0.001424321593 0.0001319991106 + 183 4 73.97111028 -46.44621408 -46.433359 0.003213769843 0.001054983475 0.001276381604 6.67936474e-05 + 184 4 74.25298337 -46.45429983 -46.438799 0.003875207653 0.0007658804804 0.0008186940821 3.523360132e-05 + 185 4 74.36513571 -46.45635746 -46.441993 0.003591113969 0.0008209061886 0.001887735151 0.0002392272687 + 186 4 74.14572274 -46.45131062 -46.439033 0.003069403991 0.0007583547125 0.000821568013 4.304382184e-05 + 187 4 74.11964094 -46.45043541 -46.436967 0.003367101873 0.0009904274689 0.001482323514 0.0001528507492 + 188 4 73.76706483 -46.43970043 -46.427245 0.003113856835 0.001008693047 0.001293885621 8.257978381e-05 + 189 4 74.21830016 -46.45309069 -46.438046 0.003761172827 0.00116354854 0.001627288542 0.0001286952583 + 190 4 73.51075683 -46.43047578 -46.420083 0.00259819585 0.001334826131 0.002395244873 0.0003392003683 + 191 4 74.62704502 -46.46197961 -46.445247 0.004183151461 0.0008490345633 0.001219330964 8.984638543e-05 + 192 4 74.54172989 -46.46048301 -46.446044 0.003609751612 0.0008018136666 0.001305329077 0.0001126246298 + 193 4 74.05152275 -46.4491333 -46.434472 0.003665324806 0.0008288481706 0.0008323340675 5.797426995e-05 + 194 4 74.415732 -46.45806324 -46.44458 0.003370810956 0.0006130004847 0.0009744208536 6.665443495e-05 + 195 4 74.3298536 -46.45570744 -46.441776 0.003482860273 0.001025864906 0.001339231869 0.0001026437813 + 196 4 74.14951222 -46.45110489 -46.436389 0.003678973505 0.00117751644 0.001786741168 0.0001566147507 + 197 4 74.58621137 -46.46129862 -46.446416 0.003720653765 0.0006013410942 0.0006588778339 4.718503395e-05 + 198 4 74.93791818 -46.4668018 -46.449806 0.00424894914 0.001116402603 0.002135055034 0.0002754987197 + 199 4 73.6789527 -46.43686767 -46.427189 0.002419668309 0.0009202462101 0.001050788276 3.832148023e-05 + 200 4 73.72666848 -46.43838466 -46.427857 0.002631914057 0.000916598926 0.001487666629 0.0001502215435 + 201 4 74.38554824 -46.45730744 -46.44004 0.004316858848 0.0006147077527 0.000757202747 3.915525299e-05 + 202 4 74.09024992 -46.45025082 -46.437214 0.003259204623 0.000823112906 0.001505586265 0.0001621804833 + 203 4 73.60013606 -46.433967 -46.422628 0.002834751082 0.0008553071125 0.001601713458 0.000233732131 + 204 4 74.47827164 -46.45874769 -46.443535 0.00380317303 0.001150644704 0.001590304373 0.0001312331936 + 205 4 74.22558703 -46.45321801 -46.439922 0.003324001852 0.001030412749 0.001530493385 0.0001208769886 + 206 4 74.15291432 -46.45141844 -46.437675 0.003435859942 0.001323881965 0.002440246094 0.000351523644 + 207 4 74.50981896 -46.45987915 -46.445558 0.003580287949 0.0008016583891 0.00113392416 9.087921501e-05 + 208 4 74.19814905 -46.45309789 -46.439106 0.003497972207 0.001159709328 0.001830731002 0.0002004464824 + 209 4 74.51720313 -46.45968457 -46.443073 0.004152892794 0.0005327789399 0.0005766870902 1.911195046e-05 + 210 4 74.29924604 -46.45529068 -46.4397 0.003897668752 0.0008203202583 0.001204174406 8.707934353e-05 + 211 4 74.09425795 -46.45003681 -46.436374 0.003415701915 0.0008937039936 0.001461656594 0.0001906816478 + 212 4 73.73717548 -46.43887502 -46.426557 0.003079503833 0.0008473432438 0.001359624213 0.0001078467328 + 213 4 73.99983876 -46.44675075 -46.434009 0.00318543858 0.0009993979373 0.001391131194 0.000126864771 + 214 4 74.07916779 -46.4492147 -46.436262 0.003238173905 0.0012911873 0.002503347159 0.0002946038716 + 215 4 73.94744484 -46.44611874 -46.434505 0.0029034362 0.0009930846846 0.001041637173 1.44560542e-05 + 216 4 74.2021224 -46.45267242 -46.438768 0.003476105557 0.0009790325482 0.001098285027 5.900684038e-05 + 217 4 74.20389194 -46.45287404 -46.440254 0.003155011025 0.0005440222637 0.0006069892915 4.917760806e-05 + 218 4 73.66782167 -46.43682196 -46.42286 0.003490490208 0.0005521691303 0.0007365242698 6.657586723e-05 + 219 4 73.46349993 -46.42843317 -46.418078 0.002588792975 0.001215695483 0.002028412187 0.0002117690174 + 220 4 74.30307454 -46.45509879 -46.440513 0.003646448628 0.0008205757569 0.001158189967 0.000110036346 + 221 4 73.21819832 -46.41838058 -46.409824 0.002139145869 0.000869266353 0.001759573812 0.0002125030952 + 222 4 74.35772636 -46.45658501 -46.440329 0.004064003047 0.0006179175264 0.0009534044263 8.737057714e-05 + 223 4 74.17615527 -46.45177345 -46.43773 0.003510862689 0.0007631781991 0.000926180328 6.446679043e-05 + 224 4 73.43860935 -46.4277585 -46.416525 0.002808375906 0.0006623119965 0.0007573664899 4.251239635e-05 + 225 4 74.31356506 -46.45553467 -46.440293 0.003810416894 0.0008201864367 0.0007725386722 1.244767351e-05 + 226 4 74.25452523 -46.45450406 -46.43839 0.004028515986 0.000624431309 0.0005612022808 1.898088401e-05 + 227 4 74.27331932 -46.45546024 -46.438916 0.004136060657 0.0008098609869 0.001650878554 0.0001889274693 # 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.0474563559 - 229 24 -279.902595 -279.784296 0.004929123882 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.002054016531 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 + config # atoms volume energy DFT energy energy error force DFT force force error + 228 24 828.0362386 -278.8410589 -279.068761 0.009487586046 2.726148177 1.756353161 0.06344241374 + 229 24 828.0362386 -280.0438878 -279.784296 0.01081632552 1.025836691 0.9057668891 0.03431923408 + 230 24 828.0362386 -280.1389453 -279.901657 0.009887011104 0.3820870056 0.001565946359 0.02063932212 + 231 24 828.0362386 -279.7578636 -279.584238 0.007234400289 1.646483877 1.035572248 0.06317254006 + 232 24 828.0362386 -280.0438905 -279.784283 0.01081698125 1.025825697 0.9056396189 0.03433377902 + 233 24 828.0362386 -279.2779929 -279.302158 0.001006879708 2.597392642 1.771965137 0.07498219236 + 234 24 828.0362386 -279.7119341 -279.55564 0.006512252548 2.085996302 1.405626506 0.06414553539 + 235 24 828.0362386 -279.1342144 -279.246939 0.004696857796 1.7145726 0.4813964151 0.09091186796 + 236 24 828.0362386 -279.2779974 -279.302157 0.001006650079 2.59739139 1.771953347 0.07498197018 + 237 24 828.0362386 -279.1342234 -279.246935 0.004696316576 1.714140427 0.4809484798 0.09087969403 + 238 24 828.0362386 -280.1388645 -279.896025 0.01011831143 0.3833172699 0.01060549839 0.0205724723 + 239 24 828.0362386 -279.7581378 -279.584237 0.007245866604 1.645952103 1.035836121 0.06318595533 + 240 24 828.0362386 -278.9562357 -279.124427 0.007007972259 2.699607205 1.809545887 0.07438804482 + 241 24 828.0362386 -279.4052861 -279.379366 0.00108000439 1.874556392 0.8982692706 0.08646596743 + 242 24 828.0362386 -279.4051598 -279.37937 0.001074574944 1.874858028 0.898081355 0.08649971418 + 243 24 828.0362386 -278.9562334 -279.124427 0.007008065732 2.699608673 1.809523374 0.07438947193 + 244 24 828.0362386 -280.1389453 -279.901657 0.009887011104 0.382087008 0.001570374478 0.02063718463 + 245 24 828.0362386 -280.0482205 -279.79264 0.01064918897 0.9069086057 0.8392614852 0.03243659951 + 246 24 828.0362386 -280.1388645 -279.896025 0.01011831143 0.3833172675 0.01060243293 0.02057250032 + 247 24 828.0362386 -279.0366628 -279.206496 0.007076382361 1.638514407 0.005326518563 0.08048168704 + 248 24 828.0362386 -279.7119391 -279.55564 0.006512460902 2.085987992 1.4056319 0.06414586851 + 249 24 828.0362386 -280.0482407 -279.79264 0.01065002958 0.9067922986 0.8392625708 0.03242814224 # 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.009371679668 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.007516682784 3.756566851 1.772040852 0.1806000978 - 257 30 -345.6468551 -345.594794 0.001735368441 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.1517605656 - 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.002359225816 3.517317775 2.542628782 0.122092966 - 271 30 -346.7846048 -346.393931 0.01302245877 1.941770224 1.211680725 0.09898842713 + config # atoms volume energy DFT energy energy error force DFT force force error + 250 30 1075.650827 -344.9605863 -345.175835 0.007174958242 2.758670703 1.057395322 0.1516335449 + 251 30 1075.650827 -346.7372372 -346.361714 0.01251744041 1.674795336 1.220284939 0.09596889278 + 252 30 1075.650827 -346.1686186 -345.795524 0.0124364868 2.551456187 2.112860875 0.1075528655 + 253 30 1075.650827 -344.7305027 -345.164602 0.01446997708 3.364761651 1.765832199 0.1653996104 + 254 30 1075.650827 -346.8954513 -346.593523 0.01006427628 1.339499001 0.01148867129 0.08728299447 + 255 30 1075.650827 -346.7069529 -346.396186 0.01035889705 1.846653887 0.9954683928 0.09979294451 + 256 30 1075.650827 -344.9126927 -345.319406 0.01355711006 3.783666815 1.772040852 0.1835364962 + 257 30 1075.650827 -345.4584504 -345.594794 0.004544785139 3.694055398 1.516014157 0.1747792869 + 258 30 1075.650827 -346.1486771 -345.98566 0.005433903845 2.934925394 1.406252265 0.1397537934 + 259 30 1075.650827 -345.5181007 -345.383994 0.00447022439 2.558293398 0.963574308 0.1353120293 + 260 30 1075.650827 -346.8950741 -346.582564 0.01041700207 1.340303074 0.0126740587 0.08735503715 + 261 30 1075.650827 -345.1232455 -345.452139 0.01096311715 4.843836394 2.787719406 0.158731815 + 262 30 1075.650827 -346.8954617 -346.593523 0.01006462208 1.339471584 0.01148834 0.08728175252 + 263 30 1075.650827 -345.3878123 -345.281949 0.003528777779 3.04388336 1.873142686 0.1266226401 + 264 30 1075.650827 -346.0211337 -345.928661 0.003082422836 3.704012447 2.100874472 0.1385926656 + 265 30 1075.650827 -344.4666474 -345.111657 0.0215003205 5.060940978 3.358068319 0.1556709723 + 266 30 1075.650827 -346.731384 -346.367123 0.01214203185 1.743704774 1.335797131 0.0964003512 + 267 30 1075.650827 -346.8950084 -346.582565 0.0104147809 1.34025766 0.01254743735 0.08735400875 + 268 30 1075.650827 -344.3283906 -344.91356 0.01950564575 4.516603649 3.441834403 0.1385132929 + 269 30 1075.650827 -346.2085633 -345.836703 0.01239534254 2.265804409 1.608769148 0.108126121 + 270 30 1075.650827 -344.700705 -344.984307 0.009453398382 3.625655349 2.542628782 0.1276641348 + 271 30 1075.650827 -346.7005545 -346.393931 0.01022078221 2.065166442 1.211680725 0.1018842071 # 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 + config # atoms volume energy DFT energy energy error force DFT force force error + 272 100 2002.996789 -1105.503318 -1105.601723 0.0009840495195 33.67286942 31.39853886 0.5196524511 + 273 100 2002.996789 -1100.916702 -1099.673012 0.01243689799 34.89745034 32.03167218 0.569788481 + 274 100 2002.996789 -1125.248108 -1121.31506 0.03933048075 23.1042808 20.81076453 0.4236223924 # Surface.xyz - config # atoms energy DFT energy energy error force DFT force force error - 275 24 -279.9941674 -279.911828 0.003430809358 0.2809230274 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.0817493 - 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 + config # atoms volume energy DFT energy energy error force DFT force force error + 275 24 828.0362197 -280.1388649 -279.911828 0.009459870394 0.3833165637 0.002753093533 0.0209958793 + 276 48 1756.536679 -551.9765065 -555.359452 0.07047803038 5.695770431 0.003020630398 0.1710474815 + 277 40 1394.433693 -457.8965908 -459.216162 0.03298927919 6.47605009 5.0461364 0.1141155284 + 278 40 1394.433693 -459.4317427 -461.144076 0.04280833158 2.948762022 0.005582740008 0.1122771088 + 279 24 828.0362197 -279.9357878 -279.635146 0.01252674323 2.282528363 1.288799837 0.0489285834 + 280 30 1075.65076 -346.8954518 -346.592525 0.01009756105 1.339498529 0.008446203407 0.08713647389 + 281 30 1075.65076 -345.7511061 -345.744506 0.0002200037964 4.894457614 3.124961367 0.1246204459 # Volume_A15.xyz - config # atoms energy DFT energy energy error force DFT force force error - 282 8 -66.46788051 -66.990732 0.06535643627 8.928342366e-15 0 1.501728429e-15 - 283 8 -72.67646146 -72.957807 0.03516819273 3.04869178e-14 0 5.1001593e-15 - 284 8 -94.20621366 -94.145745 0.00755858243 1.880283026e-14 0 2.444387059e-15 - 285 8 -94.43981933 -94.554682 0.01435783313 5.684495802e-15 0 8.992080697e-16 - 286 8 -79.39814886 -79.438363 0.005026767696 1.186991025e-14 0 1.998979685e-15 - 287 8 -69.38946962 -69.627817 0.02979342197 5.582708452e-15 0 9.058870552e-16 - 288 8 -83.05531805 -82.604907 0.05630138147 5.067400154e-15 0 8.060681752e-16 - 289 8 14.36690687 14.89048 0.0654466408 7.096605716e-14 0 9.778491674e-15 - 290 8 -94.13472519 -94.367599 0.02910922586 1.767991013e-14 0 2.1395518e-15 - 291 8 -89.38757156 -89.248227 0.01741807051 8.884610804e-15 0 1.30769238e-15 - 292 8 -87.49741165 -87.211997 0.03567683079 8.006170389e-15 0 1.152290069e-15 - 293 8 -93.42285179 -93.66897 0.03076477666 2.280172604e-15 0 3.891032311e-16 - 294 8 -8.05187323 -7.989166 0.007838403785 7.482512497e-14 0 1.195728177e-14 - 295 8 -85.3779751 -84.982834 0.04939263793 3.220622406e-15 0 4.863008144e-16 - 296 8 -92.37490481 -92.536373 0.0201835236 1.673164165e-14 0 2.290124109e-15 - 297 8 -26.56925158 -26.77612 0.02585855302 4.751528484e-14 0 7.423756449e-15 - 298 8 -77.90929192 -77.544107 0.04564811452 4.617032687e-15 0 7.294873617e-16 - 299 8 -80.55632181 -80.114217 0.05526310126 8.324980615e-15 0 1.201946528e-15 - 300 8 -41.83202596 -42.143041 0.03887688062 3.384606082e-14 0 5.356279237e-15 - 301 8 -91.02235339 -91.040671 0.002289700675 3.337550263e-15 0 5.490399801e-16 - 302 8 -84.76781055 -84.499231 0.03357244376 3.246108052e-14 0 5.927694678e-15 - 303 8 -60.71236154 -61.825173 0.1391014324 7.918599116e-15 0 1.30776466e-15 - 304 8 -91.5794594 -91.156873 0.05282330009 3.642169681e-15 0 5.988997276e-16 - 305 8 -54.28408457 -54.658744 0.04683242815 8.878350559e-14 0 1.511496461e-14 - 306 8 -72.29317827 -72.277255 0.00199040924 2.467731222e-15 0 3.339523392e-16 - 307 8 -75.14428628 -74.923334 0.02761903549 3.575872549e-15 0 5.510457542e-16 - 308 8 -64.41647714 -64.798066 0.04769860741 1.525236831e-14 0 2.48556962e-15 - 309 8 -93.29905733 -93.048342 0.03133941583 1.463792794e-14 0 2.408158856e-15 - 310 8 -63.56375833 -64.38702 0.1029077093 2.897725758e-15 0 5.108399236e-16 - 311 8 -88.81067445 -88.352871 0.05722543104 1.077500255e-14 0 1.707889472e-15 + config # atoms volume energy DFT energy energy error force DFT force force error + 282 8 300.763 -66.50302875 -66.990732 0.06096290674 1.941277332e-14 0 3.37325783e-15 + 283 8 97.336 -72.75000964 -72.957807 0.0259746695 1.351006698e-13 0 2.177344384e-14 + 284 8 140.608 -94.15533163 -94.145745 0.001198328985 4.044529328e-14 0 6.693247629e-15 + 285 8 148.877 -94.40707977 -94.554682 0.01845027858 6.513916874e-14 0 1.052717644e-14 + 286 8 103.823 -79.45083178 -79.438363 0.001558598047 1.722214314e-13 0 2.77785865e-14 + 287 8 287.496 -69.43914664 -69.627817 0.02358379473 1.869801108e-14 0 2.486725909e-15 + 288 8 226.981 -83.07759076 -82.604907 0.05908546939 1.580586786e-14 0 2.506150792e-15 + 289 8 64 14.38834339 14.89048 0.06276707625 3.142551462e-13 0 4.611672661e-14 + 290 8 157.464 -94.121065 -94.367599 0.03081674996 4.627906691e-14 0 7.060581015e-15 + 291 8 195.112 -89.39236133 -89.248227 0.01801679107 2.992297744e-14 0 4.401789389e-15 + 292 8 205.379 -87.50415023 -87.211997 0.03651915426 2.29993221e-14 0 3.752044138e-15 + 293 8 166.375 -93.42125038 -93.66897 0.03096495278 2.907694533e-14 0 4.724788551e-15 + 294 8 68.921 -8.019333034 -7.989166 0.003770879216 3.356694228e-13 0 6.09434176e-14 + 295 8 216 -85.39060668 -84.982834 0.0509715856 9.263122354e-15 0 1.424782104e-15 + 296 8 175.616 -92.37850178 -92.536373 0.01973390211 3.567976799e-14 0 6.038472675e-15 + 297 8 74.088 -26.52314912 -26.77612 0.03162135966 2.830510779e-13 0 4.116147259e-14 + 298 8 250.047 -77.95455874 -77.544107 0.05130646772 1.722828231e-14 0 2.531351199e-15 + 299 8 238.328 -80.59031991 -80.114217 0.05951286389 1.790178605e-14 0 2.961270842e-15 + 300 8 79.507 -41.81723354 -42.143041 0.04072593188 2.017987815e-13 0 3.254206583e-14 + 301 8 185.193 -91.02736742 -91.040671 0.001662947812 2.413722535e-14 0 4.098218376e-15 + 302 8 110.592 -84.77992099 -84.499231 0.035086249 6.257383276e-14 0 9.730565054e-15 + 303 8 328.509 -60.69292469 -61.825173 0.1415310384 2.336487667e-14 0 4.192320181e-15 + 304 8 125 -91.53133052 -91.156873 0.04680718995 4.580314378e-14 0 7.417918736e-15 + 305 8 85.184 -54.31160005 -54.658744 0.04339299436 2.081820808e-13 0 3.494754179e-14 + 306 8 274.625 -72.34854762 -72.277255 0.008911577286 3.722472678e-15 0 6.21411631e-16 + 307 8 262.144 -75.19753913 -74.923334 0.03427564069 1.368884593e-14 0 2.258168709e-15 + 308 8 91.125 -64.47776048 -64.798066 0.04003818964 1.208370656e-13 0 1.995060684e-14 + 309 8 132.651 -93.2347704 -93.048342 0.02330355033 5.798970328e-14 0 9.670321353e-15 + 310 8 314.432 -63.5755377 -64.38702 0.1014352879 7.556804155e-15 0 1.29652209e-15 + 311 8 117.649 -88.79067694 -88.352871 0.05472574302 7.470145864e-14 0 1.29226998e-14 # Volume_BCC.xyz - config # atoms energy DFT energy energy error force DFT force force error - 312 2 -16.38936242 -16.763625 0.1871312901 5.164700352e-16 0 1.827242061e-16 - 313 2 16.19675433 16.314145 0.05869533666 6.530646709e-14 0 1.921032777e-14 - 314 2 -21.24238574 -21.209071 0.01665736942 1.908874745e-15 0 7.170229344e-16 - 315 2 -15.80560502 -15.780524 0.01254051029 3.122816732e-14 0 1.231252513e-14 - 316 2 -19.05526774 -19.002205 0.02653137194 7.555287577e-15 0 2.037557095e-15 - 317 2 -22.67434567 -22.620568 0.02688883674 1.349360652e-15 0 4.857225733e-16 - 318 2 4.04311049 4.096885 0.02688725502 1.772872048e-14 0 6.601201067e-15 - 319 2 56.2105911 56.26276 0.02608445186 1.377801077e-13 0 4.795418557e-14 - 320 2 -22.55797904 -22.585113 0.01356697915 3.380715703e-15 0 1.276756478e-15 - 321 2 -21.75972417 -21.795501 0.0178884163 1.168374574e-15 0 4.533410684e-16 - 322 2 33.30678917 33.110078 0.09835558332 3.387360342e-14 0 9.173217741e-15 - 323 2 -20.82125169 -20.885998 0.0323731563 9.918492908e-16 0 3.654484123e-16 - 324 2 -23.55239721 -23.601336 0.02446939304 2.356479148e-15 0 7.090682208e-16 - 325 2 -23.17147126 -23.207313 0.01792086946 1.448170847e-15 0 4.901445524e-16 - 326 2 -19.78146338 -19.898089 0.05831281177 7.349099448e-15 0 2.984880861e-15 - 327 2 -23.45038238 -23.405474 0.02245418985 2.124472575e-15 0 7.6356745e-16 - 328 2 -4.653232293 -4.781324 0.06404585371 1.121589994e-14 0 3.980033895e-15 - 329 2 -18.67517238 -18.864936 0.09488180756 4.972820174e-16 0 1.896631e-16 - 330 2 -17.53439276 -17.813086 0.1393466189 8.350923499e-16 0 3.215020842e-16 - 331 2 -11.04889659 -11.197201 0.07415220345 1.822150476e-14 0 6.092637968e-15 - 332 2 -23.68489671 -23.696705 0.00590414498 1.240124986e-15 0 4.153217122e-16 + config # atoms volume energy DFT energy energy error force DFT force force error + 312 2 74.088 -16.41904746 -16.763625 0.172288768 8.881784197e-16 0 2.960594732e-16 + 313 2 13.824 16.2292442 16.314145 0.04245040205 6.132313711e-13 0 2.290852693e-13 + 314 2 27 -21.2109771 -21.209071 0.0009530502432 1.123466673e-14 0 3.552712694e-15 + 315 2 21.952 -15.82599793 -15.780524 0.02273696393 2.538428743e-13 0 1.020665034e-13 + 316 2 24.389 -19.01309058 -19.002205 0.005442789013 7.306210466e-15 0 2.50031477e-15 + 317 2 29.791 -22.67048776 -22.620568 0.02495988117 2.031435111e-14 0 8.215650382e-15 + 318 2 15.625 4.095802366 4.096885 0.0005413171271 6.359497134e-14 0 2.069640755e-14 + 319 2 10.648 56.21520101 56.26276 0.0237794968 6.137452342e-13 0 2.262703913e-13 + 320 2 46.656 -22.54194179 -22.585113 0.02158560454 1.006819876e-14 0 3.996802889e-15 + 321 2 50.653 -21.73865048 -21.795501 0.0284252602 1.776356839e-15 0 5.921189465e-16 + 322 2 12.167 33.26085588 33.110078 0.0753889407 1.720476052e-13 0 4.707345624e-14 + 323 2 54.872 -20.80030783 -20.885998 0.04284508708 1.538370149e-15 0 5.921189465e-16 + 324 2 39.304 -23.54386901 -23.601336 0.02873349282 4.528839094e-15 0 1.480297366e-15 + 325 2 42.875 -23.16144784 -23.207313 0.02293258231 2.082963029e-15 0 7.401486831e-16 + 326 2 59.319 -19.76694674 -19.898089 0.06557112796 4.389974022e-14 0 1.776356839e-14 + 327 2 32.768 -23.46365391 -23.405474 0.0290899572 1.331156944e-14 0 5.403085387e-15 + 328 2 17.576 -4.6700202 -4.781324 0.05565189983 4.987657631e-14 0 1.465494393e-14 + 329 2 64 -18.67254286 -18.864936 0.09619657243 8.881784197e-16 0 2.960594732e-16 + 330 2 68.921 -17.54726713 -17.813086 0.1329094363 1.371024298e-15 0 4.440892099e-16 + 331 2 19.683 -11.12327165 -11.197201 0.03696467615 4.343228798e-14 0 1.539509261e-14 + 332 2 35.937 -23.68985458 -23.696705 0.003425208911 8.588276581e-15 0 2.812564996e-15 # Volume_FCC.xyz - config # atoms energy DFT energy energy error force DFT force force error - 333 4 -19.13390887 -19.075994 0.01447871809 1.022152812e-14 0 2.293587909e-15 - 334 4 -35.26038882 -34.873619 0.0966924543 1.299038035e-15 0 3.09937261e-16 - 335 4 -43.93272346 -43.950003 0.004319884816 1.839067075e-15 0 3.483902981e-16 - 336 4 -41.03733831 -40.991909 0.01135732773 4.481141716e-15 0 9.930207698e-16 - 337 4 -43.4228254 -43.453929 0.007775899668 3.563251054e-14 0 1.025252039e-14 - 338 4 -42.67289278 -42.686077 0.003296053998 3.08362874e-15 0 8.245357522e-16 - 339 4 -33.58842759 -33.224653 0.09094364633 7.806891681e-16 0 2.054201716e-16 - 340 4 -27.01189372 -26.862709 0.03729618105 6.429823751e-15 0 1.469359846e-15 - 341 4 -25.59030438 -25.519883 0.01760534598 1.262126674e-15 0 3.031429274e-16 - 342 4 3.441093749 3.463071 0.005494312714 2.222300041e-14 0 5.686075706e-15 - 343 4 -31.9073245 -31.59595 0.07784362479 8.772505365e-16 0 2.178523565e-16 - 344 4 -45.06068744 -45.100466 0.009944641012 2.844345405e-15 0 6.141228113e-16 - 345 4 -46.03981427 -46.052258 0.0031109323 3.085311895e-15 0 7.534482297e-16 - 346 4 -30.24326213 -30.001189 0.06051828302 1.033301257e-15 0 2.648344507e-16 - 347 4 -22.957351 -22.8504 0.02673775024 1.649470508e-15 0 4.625206468e-16 - 348 4 -9.130654755 -9.164691 0.008509061334 1.441769296e-14 0 2.967949237e-15 - 349 4 -24.21746226 -24.150343 0.01677981454 9.080179666e-16 0 2.344767898e-16 - 350 4 -46.44761241 -46.426795 0.005204351765 1.356833237e-15 0 3.249715312e-16 - 351 4 -28.62111495 -28.451145 0.04249248833 8.73448718e-15 0 2.511662753e-15 - 352 4 40.31615798 40.341566 0.006352005142 4.072809775e-14 0 8.11641299e-15 - 353 4 19.51151427 19.617912 0.02659943252 2.395447746e-14 0 5.536534686e-15 - 354 4 -27.06356399 -26.954384 0.02729499736 7.989451601e-16 0 1.662443331e-16 - 355 4 -46.3678929 -46.323696 0.01104922394 3.225354336e-15 0 8.604228441e-16 - 356 4 -45.87221055 -45.828947 0.01081588677 3.654195723e-15 0 9.691321819e-16 - 357 4 -38.47076405 -38.16029 0.0776185126 1.743572283e-15 0 4.628820475e-16 - 358 4 -33.06813795 -32.919741 0.03709923634 1.476523661e-14 0 4.182418301e-15 - 359 4 -41.34431995 -41.272675 0.01791123821 3.354385367e-15 0 9.014870014e-16 - 360 4 -39.95757678 -39.753322 0.05106369446 1.803308855e-15 0 4.257287097e-16 - 361 4 -37.66252943 -37.547435 0.02877360828 4.901403086e-15 0 1.0480621e-15 - 362 4 -36.89659259 -36.52595 0.09266064636 2.659569984e-15 0 6.744460314e-16 - 363 4 -45.03250721 -45.016087 0.004105053075 1.580168365e-15 0 3.385601984e-16 + config # atoms volume energy DFT energy energy error force DFT force force error + 333 4 39.304 -19.04121551 -19.075994 0.008694621404 9.324046941e-14 0 2.550216982e-14 + 334 4 140.608 -35.2532829 -34.873619 0.09491597439 7.957989483e-17 0 1.134599845e-17 + 335 4 97.336 -43.90903851 -43.950003 0.01024112333 9.677895068e-15 0 2.24135791e-15 + 336 4 54.872 -41.05446227 -40.991909 0.01563831765 1.98280496e-14 0 4.875440329e-15 + 337 4 59.319 -43.40999789 -43.453929 0.01098277702 9.570074295e-14 0 2.719164593e-14 + 338 4 103.823 -42.63532355 -42.686077 0.01268836179 2.539930576e-15 0 4.806204543e-16 + 339 4 148.877 -33.58964546 -33.224653 0.09124811554 2.796923066e-17 0 3.296205444e-18 + 340 4 42.875 -26.8499756 -26.862709 0.003183350784 4.824942051e-14 0 1.148213469e-14 + 341 4 195.112 -25.5782856 -25.519883 0.01460065124 2.683808864e-16 0 5.477307421e-17 + 342 4 32.768 3.274215348 3.463071 0.04721391298 1.751484723e-13 0 4.608697683e-14 + 343 4 157.464 -31.91218763 -31.59595 0.07905940659 3.590442267e-17 0 4.231376791e-18 + 344 4 64 -45.05473725 -45.100466 0.01143218825 7.235555613e-15 0 1.620123306e-15 + 345 4 68.921 -46.04331302 -46.052258 0.002236244179 5.893206675e-15 0 1.299708229e-15 + 346 4 166.375 -30.2468098 -30.001189 0.06140519937 2.820758891e-16 0 5.580616674e-17 + 347 4 216 -22.95485577 -22.8504 0.02611394167 1.164554524e-16 0 2.312964635e-17 + 348 4 35.937 -9.215415964 -9.164691 0.01268124103 4.893101434e-14 0 1.156092005e-14 + 349 4 205.379 -24.20645978 -24.150343 0.01402919404 2.781506505e-18 0 3.278036852e-19 + 350 4 74.088 -46.44951294 -46.426795 0.005679484598 2.411816735e-15 0 4.763070257e-16 + 351 4 175.616 -28.61960857 -28.451145 0.04211589328 1.078338842e-14 0 3.09506759e-15 + 352 4 27 40.45415396 40.341566 0.02814698887 1.556900619e-13 0 3.789568123e-14 + 353 4 29.791 19.42166568 19.617912 0.04906157941 1.398773649e-13 0 3.335786504e-14 + 354 4 185.193 -27.05578105 -26.954384 0.02534926276 2.758936733e-16 0 5.630535877e-17 + 355 4 79.507 -46.36425384 -46.323696 0.01013945879 2.152124725e-15 0 4.437884935e-16 + 356 4 85.184 -45.86352273 -45.828947 0.008643933117 3.448840532e-14 0 9.539924949e-15 + 357 4 125 -38.44027502 -38.16029 0.06999625463 1.884407826e-15 0 4.44194105e-16 + 358 4 46.656 -32.97168631 -32.919741 0.01298632653 1.142146022e-13 0 2.894877625e-14 + 359 4 110.592 -41.29864314 -41.272675 0.006492033936 3.342024128e-14 0 9.358862094e-15 + 360 4 117.649 -39.91686354 -39.753322 0.04088538603 7.303704341e-15 0 1.704201263e-15 + 361 4 50.653 -37.65718147 -37.547435 0.02743661628 2.105764443e-14 0 5.292352205e-15 + 362 4 132.651 -36.87810682 -36.52595 0.08803920465 3.379802923e-17 0 3.983135944e-18 + 363 4 91.125 -45.01844387 -45.016087 0.0005892174087 1.081458604e-14 0 2.513809578e-15 diff --git a/examples/PACKAGES/pod/Ta/Ta_training_errors.pod b/examples/PACKAGES/pod/Ta/Ta_training_errors.pod index 39b7af3723..02d9f823fc 100644 --- a/examples/PACKAGES/pod/Ta/Ta_training_errors.pod +++ b/examples/PACKAGES/pod/Ta/Ta_training_errors.pod @@ -2,19 +2,19 @@ --------------------------------------------------------------------------------------------------- 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 +Displaced_A15.xyz 9 576 0.015324 0.015365 0.140594 0.184797 +Displaced_BCC.xyz 9 486 0.009486 0.011643 0.249983 0.320375 +Displaced_FCC.xyz 9 432 0.000686 0.000880 0.091420 0.113585 +Elastic_BCC.xyz 100 200 0.003796 0.004379 0.000015 0.000020 +Elastic_FCC.xyz 100 400 0.003332 0.003372 0.000122 0.000178 +GSF_110.xyz 22 528 0.007027 0.007797 0.057637 0.115638 +GSF_112.xyz 22 660 0.010396 0.011347 0.125237 0.198553 +Liquid.xyz 3 300 0.017584 0.023822 0.504354 0.660300 +Surface.xyz 7 236 0.025511 0.034302 0.107190 0.285034 +Volume_A15.xyz 30 240 0.038624 0.048355 0.000000 0.000000 +Volume_BCC.xyz 21 42 0.044423 0.061685 0.000000 0.000000 +Volume_FCC.xyz 31 124 0.030062 0.041271 0.000000 0.000000 --------------------------------------------------------------------------------------------------- -All files 363 4224 0.012917 0.025797 0.122473 0.260052 +All files 363 4224 0.012618 0.024806 0.125879 0.247229 --------------------------------------------------------------------------------------------------- **************** End of Error Analysis for the Training Data Set **************** diff --git a/examples/PACKAGES/pod/Ta/in.fitpod b/examples/PACKAGES/pod/Ta/in.fitpod index 7b932558ea..2c2a5e57bb 100644 --- a/examples/PACKAGES/pod/Ta/in.fitpod +++ b/examples/PACKAGES/pod/Ta/in.fitpod @@ -1,5 +1 @@ -# Demonstrate fitpod for POD potential - -units metal -fitpod Ta_param.pod Ta_data.pod - +fitpod Ta_param.pod Ta_data.pod \ No newline at end of file diff --git a/examples/PACKAGES/pod/Ta/in.pod b/examples/PACKAGES/pod/Ta/in.pod index 866ee40549..5d2d646835 100644 --- a/examples/PACKAGES/pod/Ta/in.pod +++ b/examples/PACKAGES/pod/Ta/in.pod @@ -44,4 +44,3 @@ velocity all create 300.0 4928459 loop geom fix 1 all nve run ${nsteps} - diff --git a/examples/PACKAGES/pod/Ta/in.pod.compute b/examples/PACKAGES/pod/Ta/in.pod.compute new file mode 100644 index 0000000000..609c794e7f --- /dev/null +++ b/examples/PACKAGES/pod/Ta/in.pod.compute @@ -0,0 +1,52 @@ +# Demonstrate bispectrum computes + +# initialize simulation + +variable nsteps index 0 +variable nrep equal 2 +variable a equal 2.0 +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 + +atom_modify map hash +lattice bcc $a +region box block 0 ${nx} 0 ${ny} 0 ${nz} +create_box 2 box +create_atoms 2 box + +mass * 180.88 + +displace_atoms all random 0.1 0.1 0.1 123456 + +# set up dummy potential to satisfy cutoff +variable rcutfac equal 6.0 +pair_style zero ${rcutfac} +pair_coeff * * + +# set up per-atom computes + +compute ld all pod/atom Ta_param.pod Ta_coefficients.pod Ta Ta +compute dd all podd/atom Ta_param.pod Ta_coefficients.pod Ta Ta + +# set up compute snap generating global array + +compute gdd all pod/global Ta_param.pod Ta_coefficients.pod Ta Ta +#fix gdd all ave/time 1 1 1 c_gdd[*] file pod.gdd.dat mode vector + +compute ldd all pod/local Ta_param.pod Ta_coefficients.pod Ta Ta +#fix ldd all ave/time 1 1 1 c_ldd[*] file pod.ldd.dat mode vector + +#dump mydump_ld all custom 1000 dump_ld id c_ld[*] +#dump mydump_dd all custom 1000 dump_dd id c_dd[*] + +variable sample_ld1 equal C_ld[1][10] # Arbitrary local descriptor +fix ldprint all print 1 "${sample_ld1}" + +run ${nsteps} diff --git a/examples/PACKAGES/pod/Ta/log.4Jan23.fitpod.g++.4 b/examples/PACKAGES/pod/Ta/log.22May24.fitpod.g++.1 similarity index 57% rename from examples/PACKAGES/pod/Ta/log.4Jan23.fitpod.g++.4 rename to examples/PACKAGES/pod/Ta/log.22May24.fitpod.g++.1 index 18c7775bd7..2b9c569949 100644 --- a/examples/PACKAGES/pod/Ta/log.4Jan23.fitpod.g++.4 +++ b/examples/PACKAGES/pod/Ta/log.22May24.fitpod.g++.1 @@ -1,32 +1,37 @@ -LAMMPS (22 Dec 2022) +LAMMPS (17 Apr 2024 - Development - patch_17Apr2024-177-g86abf4f680-modified) +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 +number of environment clusters: 1 +number of principal compoments: 2 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 +two-body radial basis functions: 6 +three-body radial basis functions: 5 +three-body angular degree: 4 +four-body radial basis functions: 0 +four-body angular degree: 0 +five-body radial basis functions: 0 +five-body angular degree: 0 +six-body radial basis functions: 0 +six-body angular degree: 0 +seven-body radial basis functions: 0 +seven-body angular degree: 0 +number of local descriptors per element for one-body potential: 1 +number of local descriptors per element for two-body potential: 6 +number of local descriptors per element for three-body potential: 25 +number of local descriptors per element for four-body potential: 0 +number of local descriptors per element for five-body potential: 0 +number of local descriptors per element for six-body potential: 0 +number of local descriptors per element for seven-body potential: 0 +number of local descriptors per element for all potentials: 32 +number of global descriptors: 32 **************** End of POD Potentials **************** **************** Begin of Data File **************** @@ -34,6 +39,8 @@ file format: extxyz file extension: xyz path to training data set: XYZ path to test data set: XYZ +path to environment configuration set: XYZ +basename for output files: Ta training fraction: 1 test fraction: 1 randomize training data set: 1 @@ -45,7 +52,8 @@ energy/force calculation for test data set: 0 fitting weight for energy: 100 fitting weight for force: 1 fitting weight for stress: 0 -fitting regularization parameter: 1e-10 +save pod descriptors: 0 +compute pod descriptors: 0 **************** End of Data File **************** **************** Begin of Training Data Set **************** --------------------------------------------------------------- @@ -74,8 +82,7 @@ maximum number of atoms: 100 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 double memory: 232128 size of descriptor matrix: 32 x 32 **************** End of Memory Allocation **************** **************** Begin of Least-Squares Fitting **************** @@ -83,7 +90,6 @@ Configuration: # 1 Configuration: # 101 Configuration: # 201 Configuration: # 301 -**************** End of Least-Squares Fitting **************** **************** Begin of Error Calculation **************** Configuration: # 1 Configuration: # 101 @@ -94,21 +100,20 @@ Configuration: # 301 --------------------------------------------------------------------------------------------------- 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 +Displaced_A15.xyz 9 576 0.015324 0.015365 0.140594 0.184797 +Displaced_BCC.xyz 9 486 0.009486 0.011643 0.249983 0.320375 +Displaced_FCC.xyz 9 432 0.000686 0.000880 0.091420 0.113585 +Elastic_BCC.xyz 100 200 0.003796 0.004379 0.000015 0.000020 +Elastic_FCC.xyz 100 400 0.003332 0.003372 0.000122 0.000178 +GSF_110.xyz 22 528 0.007027 0.007797 0.057637 0.115638 +GSF_112.xyz 22 660 0.010396 0.011347 0.125237 0.198553 +Liquid.xyz 3 300 0.017584 0.023822 0.504354 0.660300 +Surface.xyz 7 236 0.025511 0.034302 0.107190 0.285034 +Volume_A15.xyz 30 240 0.038624 0.048355 0.000000 0.000000 +Volume_BCC.xyz 21 42 0.044423 0.061685 0.000000 0.000000 +Volume_FCC.xyz 31 124 0.030062 0.041271 0.000000 0.000000 --------------------------------------------------------------------------------------------------- -All files 363 4224 0.012917 0.025797 0.122473 0.260052 +All files 363 4224 0.012618 0.024806 0.125879 0.247229 --------------------------------------------------------------------------------------------------- **************** End of Error Analysis for the Training Data Set **************** - Total wall time: 0:00:00 diff --git a/examples/PACKAGES/pod/Ta/log.4Jan23.fitpod.g++.1 b/examples/PACKAGES/pod/Ta/log.22May24.fitpod.g++.4 similarity index 57% rename from examples/PACKAGES/pod/Ta/log.4Jan23.fitpod.g++.1 rename to examples/PACKAGES/pod/Ta/log.22May24.fitpod.g++.4 index fa625116f3..2b9c569949 100644 --- a/examples/PACKAGES/pod/Ta/log.4Jan23.fitpod.g++.1 +++ b/examples/PACKAGES/pod/Ta/log.22May24.fitpod.g++.4 @@ -1,32 +1,37 @@ -LAMMPS (22 Dec 2022) +LAMMPS (17 Apr 2024 - Development - patch_17Apr2024-177-g86abf4f680-modified) +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 +number of environment clusters: 1 +number of principal compoments: 2 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 +two-body radial basis functions: 6 +three-body radial basis functions: 5 +three-body angular degree: 4 +four-body radial basis functions: 0 +four-body angular degree: 0 +five-body radial basis functions: 0 +five-body angular degree: 0 +six-body radial basis functions: 0 +six-body angular degree: 0 +seven-body radial basis functions: 0 +seven-body angular degree: 0 +number of local descriptors per element for one-body potential: 1 +number of local descriptors per element for two-body potential: 6 +number of local descriptors per element for three-body potential: 25 +number of local descriptors per element for four-body potential: 0 +number of local descriptors per element for five-body potential: 0 +number of local descriptors per element for six-body potential: 0 +number of local descriptors per element for seven-body potential: 0 +number of local descriptors per element for all potentials: 32 +number of global descriptors: 32 **************** End of POD Potentials **************** **************** Begin of Data File **************** @@ -34,6 +39,8 @@ file format: extxyz file extension: xyz path to training data set: XYZ path to test data set: XYZ +path to environment configuration set: XYZ +basename for output files: Ta training fraction: 1 test fraction: 1 randomize training data set: 1 @@ -45,7 +52,8 @@ energy/force calculation for test data set: 0 fitting weight for energy: 100 fitting weight for force: 1 fitting weight for stress: 0 -fitting regularization parameter: 1e-10 +save pod descriptors: 0 +compute pod descriptors: 0 **************** End of Data File **************** **************** Begin of Training Data Set **************** --------------------------------------------------------------- @@ -74,8 +82,7 @@ maximum number of atoms: 100 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 double memory: 232128 size of descriptor matrix: 32 x 32 **************** End of Memory Allocation **************** **************** Begin of Least-Squares Fitting **************** @@ -83,7 +90,6 @@ Configuration: # 1 Configuration: # 101 Configuration: # 201 Configuration: # 301 -**************** End of Least-Squares Fitting **************** **************** Begin of Error Calculation **************** Configuration: # 1 Configuration: # 101 @@ -94,21 +100,20 @@ Configuration: # 301 --------------------------------------------------------------------------------------------------- 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 +Displaced_A15.xyz 9 576 0.015324 0.015365 0.140594 0.184797 +Displaced_BCC.xyz 9 486 0.009486 0.011643 0.249983 0.320375 +Displaced_FCC.xyz 9 432 0.000686 0.000880 0.091420 0.113585 +Elastic_BCC.xyz 100 200 0.003796 0.004379 0.000015 0.000020 +Elastic_FCC.xyz 100 400 0.003332 0.003372 0.000122 0.000178 +GSF_110.xyz 22 528 0.007027 0.007797 0.057637 0.115638 +GSF_112.xyz 22 660 0.010396 0.011347 0.125237 0.198553 +Liquid.xyz 3 300 0.017584 0.023822 0.504354 0.660300 +Surface.xyz 7 236 0.025511 0.034302 0.107190 0.285034 +Volume_A15.xyz 30 240 0.038624 0.048355 0.000000 0.000000 +Volume_BCC.xyz 21 42 0.044423 0.061685 0.000000 0.000000 +Volume_FCC.xyz 31 124 0.030062 0.041271 0.000000 0.000000 --------------------------------------------------------------------------------------------------- -All files 363 4224 0.012917 0.025797 0.122473 0.260052 +All files 363 4224 0.012618 0.024806 0.125879 0.247229 --------------------------------------------------------------------------------------------------- **************** End of Error Analysis for the Training Data Set **************** - -Total wall time: 0:00:01 +Total wall time: 0:00:00 diff --git a/examples/PACKAGES/pod/Ta/log.22May24.pod.compute.g++.1 b/examples/PACKAGES/pod/Ta/log.22May24.pod.compute.g++.1 new file mode 100644 index 0000000000..b32649c492 --- /dev/null +++ b/examples/PACKAGES/pod/Ta/log.22May24.pod.compute.g++.1 @@ -0,0 +1,293 @@ +LAMMPS (17 Apr 2024 - Development - patch_17Apr2024-177-g86abf4f680-modified) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98) + using 1 OpenMP thread(s) per MPI task +# Demonstrate bispectrum computes + +# initialize simulation + +variable nsteps index 0 +variable nrep equal 2 +variable a equal 2.0 +units metal + +# generate the box and atom positions using a BCC lattice + +variable nx equal ${nrep} +variable nx equal 2 +variable ny equal ${nrep} +variable ny equal 2 +variable nz equal ${nrep} +variable nz equal 2 + +boundary p p p + +atom_modify map hash +lattice bcc $a +lattice bcc 2 +Lattice spacing in x,y,z = 2 2 2 +region box block 0 ${nx} 0 ${ny} 0 ${nz} +region box block 0 2 0 ${ny} 0 ${nz} +region box block 0 2 0 2 0 ${nz} +region box block 0 2 0 2 0 2 +create_box 2 box +Created orthogonal box = (0 0 0) to (4 4 4) + 1 by 1 by 1 MPI processor grid +create_atoms 2 box +Created 16 atoms + using lattice units in orthogonal box = (0 0 0) to (4 4 4) + create_atoms CPU = 0.001 seconds + +mass * 180.88 + +displace_atoms all random 0.1 0.1 0.1 123456 +Displacing atoms ... + +# set up dummy potential to satisfy cutoff +variable rcutfac equal 6.0 +pair_style zero ${rcutfac} +pair_style zero 6 +pair_coeff * * + +# set up per-atom computes + +compute ld all pod/atom Ta_param.pod Ta_coefficients.pod Ta Ta +**************** Begin of POD Potentials **************** +species: Ta +periodic boundary conditions: 1 1 1 +number of environment clusters: 1 +number of principal compoments: 2 +inner cut-off radius: 1 +outer cut-off radius: 5 +bessel polynomial degree: 3 +inverse polynomial degree: 6 +one-body potential: 1 +two-body radial basis functions: 6 +three-body radial basis functions: 5 +three-body angular degree: 4 +four-body radial basis functions: 0 +four-body angular degree: 0 +five-body radial basis functions: 0 +five-body angular degree: 0 +six-body radial basis functions: 0 +six-body angular degree: 0 +seven-body radial basis functions: 0 +seven-body angular degree: 0 +number of local descriptors per element for one-body potential: 1 +number of local descriptors per element for two-body potential: 6 +number of local descriptors per element for three-body potential: 25 +number of local descriptors per element for four-body potential: 0 +number of local descriptors per element for five-body potential: 0 +number of local descriptors per element for six-body potential: 0 +number of local descriptors per element for seven-body potential: 0 +number of local descriptors per element for all potentials: 32 +number of global descriptors: 32 +**************** End of POD Potentials **************** + +**************** Begin of Model Coefficients **************** +total number of coefficients for POD potential: 32 +total number of elements for PCA projection matrix: 0 +total number of elements for PCA centroids: 0 +**************** End of Model Coefficients **************** + +compute dd all podd/atom Ta_param.pod Ta_coefficients.pod Ta Ta +**************** Begin of POD Potentials **************** +species: Ta +periodic boundary conditions: 1 1 1 +number of environment clusters: 1 +number of principal compoments: 2 +inner cut-off radius: 1 +outer cut-off radius: 5 +bessel polynomial degree: 3 +inverse polynomial degree: 6 +one-body potential: 1 +two-body radial basis functions: 6 +three-body radial basis functions: 5 +three-body angular degree: 4 +four-body radial basis functions: 0 +four-body angular degree: 0 +five-body radial basis functions: 0 +five-body angular degree: 0 +six-body radial basis functions: 0 +six-body angular degree: 0 +seven-body radial basis functions: 0 +seven-body angular degree: 0 +number of local descriptors per element for one-body potential: 1 +number of local descriptors per element for two-body potential: 6 +number of local descriptors per element for three-body potential: 25 +number of local descriptors per element for four-body potential: 0 +number of local descriptors per element for five-body potential: 0 +number of local descriptors per element for six-body potential: 0 +number of local descriptors per element for seven-body potential: 0 +number of local descriptors per element for all potentials: 32 +number of global descriptors: 32 +**************** End of POD Potentials **************** + +**************** Begin of Model Coefficients **************** +total number of coefficients for POD potential: 32 +total number of elements for PCA projection matrix: 0 +total number of elements for PCA centroids: 0 +**************** End of Model Coefficients **************** + + +# set up compute snap generating global array + +compute gdd all pod/gdd Ta_param.pod Ta_coefficients.pod Ta Ta +**************** Begin of POD Potentials **************** +species: Ta +periodic boundary conditions: 1 1 1 +number of environment clusters: 1 +number of principal compoments: 2 +inner cut-off radius: 1 +outer cut-off radius: 5 +bessel polynomial degree: 3 +inverse polynomial degree: 6 +one-body potential: 1 +two-body radial basis functions: 6 +three-body radial basis functions: 5 +three-body angular degree: 4 +four-body radial basis functions: 0 +four-body angular degree: 0 +five-body radial basis functions: 0 +five-body angular degree: 0 +six-body radial basis functions: 0 +six-body angular degree: 0 +seven-body radial basis functions: 0 +seven-body angular degree: 0 +number of local descriptors per element for one-body potential: 1 +number of local descriptors per element for two-body potential: 6 +number of local descriptors per element for three-body potential: 25 +number of local descriptors per element for four-body potential: 0 +number of local descriptors per element for five-body potential: 0 +number of local descriptors per element for six-body potential: 0 +number of local descriptors per element for seven-body potential: 0 +number of local descriptors per element for all potentials: 32 +number of global descriptors: 32 +**************** End of POD Potentials **************** + +**************** Begin of Model Coefficients **************** +total number of coefficients for POD potential: 32 +total number of elements for PCA projection matrix: 0 +total number of elements for PCA centroids: 0 +**************** End of Model Coefficients **************** + +#fix gdd all ave/time 1 1 1 c_gdd[*] file pod.gdd.dat mode vector + +compute ldd all pod/ldd Ta_param.pod Ta_coefficients.pod Ta Ta +**************** Begin of POD Potentials **************** +species: Ta +periodic boundary conditions: 1 1 1 +number of environment clusters: 1 +number of principal compoments: 2 +inner cut-off radius: 1 +outer cut-off radius: 5 +bessel polynomial degree: 3 +inverse polynomial degree: 6 +one-body potential: 1 +two-body radial basis functions: 6 +three-body radial basis functions: 5 +three-body angular degree: 4 +four-body radial basis functions: 0 +four-body angular degree: 0 +five-body radial basis functions: 0 +five-body angular degree: 0 +six-body radial basis functions: 0 +six-body angular degree: 0 +seven-body radial basis functions: 0 +seven-body angular degree: 0 +number of local descriptors per element for one-body potential: 1 +number of local descriptors per element for two-body potential: 6 +number of local descriptors per element for three-body potential: 25 +number of local descriptors per element for four-body potential: 0 +number of local descriptors per element for five-body potential: 0 +number of local descriptors per element for six-body potential: 0 +number of local descriptors per element for seven-body potential: 0 +number of local descriptors per element for all potentials: 32 +number of global descriptors: 32 +**************** End of POD Potentials **************** + +**************** Begin of Model Coefficients **************** +total number of coefficients for POD potential: 32 +total number of elements for PCA projection matrix: 0 +total number of elements for PCA centroids: 0 +**************** End of Model Coefficients **************** + +#fix ldd all ave/time 1 1 1 c_ldd[*] file pod.ldd.dat mode vector + +#dump mydump_ld all custom 1000 dump_ld id c_ld[*] +#dump mydump_dd all custom 1000 dump_dd id c_dd[*] + +variable sample_ld1 equal C_ld[1][10] # Arbitrary local descriptor +fix ldprint all print 1 "${sample_ld1}" + +run ${nsteps} +run 0 +WARNING: No fixes with time integration, atoms won't move (src/verlet.cpp:60) +Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule +WARNING: More than one compute pod (src/ML-POD/compute_pod_atom.cpp:87) +WARNING: More than one compute pod (src/ML-POD/compute_podd_atom.cpp:87) +WARNING: More than one compute pod (src/ML-POD/compute_pod_global.cpp:87) +WARNING: More than one compute pod (src/ML-POD/compute_pod_local.cpp:89) +Neighbor list info ... + update: every = 1 steps, delay = 0 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 8 + ghost atom cutoff = 8 + binsize = 4, bins = 1 1 1 + 5 neighbor lists, perpetual/occasional/extra = 1 4 0 + (1) pair zero, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d + bin: standard + (2) compute pod/atom, occasional + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard + (3) compute podd/atom, occasional + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard + (4) compute pod/gdd, occasional + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard + (5) compute pod/ldd, occasional + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +0.344594831165384 +Per MPI rank memory allocation (min/avg/max) = 6.326 | 6.326 | 6.326 Mbytes + Step Temp E_pair E_mol TotEng Press + 0 0 0 0 0 0 +Loop time of 1.207e-06 on 1 procs for 0 steps with 16 atoms + +165.7% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 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.207e-06 | | |100.00 + +Nlocal: 16 ave 16 max 16 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 1984 ave 1984 max 1984 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 4311 ave 4311 max 4311 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +FullNghs: 8623 ave 8623 max 8623 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 8623 +Ave neighs/atom = 538.9375 +Neighbor list builds = 0 +Dangerous builds = 0 +Total wall time: 0:00:00 diff --git a/examples/PACKAGES/pod/Ta/log.22May24.pod.g++.1 b/examples/PACKAGES/pod/Ta/log.22May24.pod.g++.1 new file mode 100644 index 0000000000..f72962432d --- /dev/null +++ b/examples/PACKAGES/pod/Ta/log.22May24.pod.g++.1 @@ -0,0 +1,155 @@ +LAMMPS (17 Apr 2024 - Development - patch_17Apr2024-177-g86abf4f680-modified) +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.001 seconds + +mass 1 180.88 + + +# POD potential +pair_style pod +pair_coeff * * Ta_param.pod Ta_coeff.pod Ta +**************** Begin of POD Potentials **************** +species: Ta +periodic boundary conditions: 1 1 1 +number of environment clusters: 1 +number of principal compoments: 2 +inner cut-off radius: 1 +outer cut-off radius: 5 +bessel polynomial degree: 3 +inverse polynomial degree: 6 +one-body potential: 1 +two-body radial basis functions: 6 +three-body radial basis functions: 5 +three-body angular degree: 4 +four-body radial basis functions: 0 +four-body angular degree: 0 +five-body radial basis functions: 0 +five-body angular degree: 0 +six-body radial basis functions: 0 +six-body angular degree: 0 +seven-body radial basis functions: 0 +seven-body angular degree: 0 +number of local descriptors per element for one-body potential: 1 +number of local descriptors per element for two-body potential: 6 +number of local descriptors per element for three-body potential: 25 +number of local descriptors per element for four-body potential: 0 +number of local descriptors per element for five-body potential: 0 +number of local descriptors per element for six-body potential: 0 +number of local descriptors per element for seven-body potential: 0 +number of local descriptors per element for all potentials: 32 +number of global descriptors: 32 +**************** End of POD Potentials **************** + +**************** Begin of Model Coefficients **************** +total number of coefficients for POD potential: 32 +total number of elements for PCA projection matrix: 0 +total number of elements for PCA centroids: 0 +**************** End of Model Coefficients **************** + + +# 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.207 | 3.207 | 3.207 Mbytes + Step Temp E_pair E_mol TotEng Press + 0 300 -11.842971 0 -11.804496 -24843.054 + 10 296.87227 -11.84257 0 -11.804496 -24609.859 + 20 287.65971 -11.841388 0 -11.804496 -23926.722 + 30 272.87511 -11.839492 0 -11.804496 -22841.672 + 40 253.34724 -11.836988 0 -11.804496 -21429.268 + 50 230.17169 -11.834015 0 -11.804496 -19782.77 + 60 204.64408 -11.830741 0 -11.804496 -18004.755 + 70 178.17888 -11.827347 0 -11.804495 -16197.482 + 80 152.21769 -11.824017 0 -11.804495 -14454.425 + 90 128.13189 -11.820928 0 -11.804495 -12854.075 + 100 107.12666 -11.818234 0 -11.804495 -11456.437 +Loop time of 0.394952 on 1 procs for 100 steps with 128 atoms + +Performance: 10.938 ns/day, 2.194 hours/ns, 253.196 timesteps/s, 32.409 katom-step/s +97.4% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.39249 | 0.39249 | 0.39249 | 0.0 | 99.38 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0.00087496 | 0.00087496 | 0.00087496 | 0.0 | 0.22 +Output | 0.00030885 | 0.00030885 | 0.00030885 | 0.0 | 0.08 +Modify | 0.00053218 | 0.00053218 | 0.00053218 | 0.0 | 0.13 +Other | | 0.0007481 | | | 0.19 + +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:00 diff --git a/examples/PACKAGES/pod/Ta/log.22May24.pod.g++.4 b/examples/PACKAGES/pod/Ta/log.22May24.pod.g++.4 new file mode 100644 index 0000000000..3b66d3969f --- /dev/null +++ b/examples/PACKAGES/pod/Ta/log.22May24.pod.g++.4 @@ -0,0 +1,155 @@ +LAMMPS (17 Apr 2024 - Development - patch_17Apr2024-177-g86abf4f680-modified) +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.001 seconds + +mass 1 180.88 + + +# POD potential +pair_style pod +pair_coeff * * Ta_param.pod Ta_coeff.pod Ta +**************** Begin of POD Potentials **************** +species: Ta +periodic boundary conditions: 1 1 1 +number of environment clusters: 1 +number of principal compoments: 2 +inner cut-off radius: 1 +outer cut-off radius: 5 +bessel polynomial degree: 3 +inverse polynomial degree: 6 +one-body potential: 1 +two-body radial basis functions: 6 +three-body radial basis functions: 5 +three-body angular degree: 4 +four-body radial basis functions: 0 +four-body angular degree: 0 +five-body radial basis functions: 0 +five-body angular degree: 0 +six-body radial basis functions: 0 +six-body angular degree: 0 +seven-body radial basis functions: 0 +seven-body angular degree: 0 +number of local descriptors per element for one-body potential: 1 +number of local descriptors per element for two-body potential: 6 +number of local descriptors per element for three-body potential: 25 +number of local descriptors per element for four-body potential: 0 +number of local descriptors per element for five-body potential: 0 +number of local descriptors per element for six-body potential: 0 +number of local descriptors per element for seven-body potential: 0 +number of local descriptors per element for all potentials: 32 +number of global descriptors: 32 +**************** End of POD Potentials **************** + +**************** Begin of Model Coefficients **************** +total number of coefficients for POD potential: 32 +total number of elements for PCA projection matrix: 0 +total number of elements for PCA centroids: 0 +**************** End of Model Coefficients **************** + + +# 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.187 | 3.187 | 3.187 Mbytes + Step Temp E_pair E_mol TotEng Press + 0 300 -11.842971 0 -11.804496 -24843.054 + 10 296.87227 -11.84257 0 -11.804496 -24609.859 + 20 287.65971 -11.841388 0 -11.804496 -23926.722 + 30 272.87511 -11.839492 0 -11.804496 -22841.672 + 40 253.34724 -11.836988 0 -11.804496 -21429.268 + 50 230.17169 -11.834015 0 -11.804496 -19782.77 + 60 204.64408 -11.830741 0 -11.804496 -18004.755 + 70 178.17888 -11.827347 0 -11.804495 -16197.482 + 80 152.21769 -11.824017 0 -11.804495 -14454.425 + 90 128.13189 -11.820928 0 -11.804495 -12854.075 + 100 107.12666 -11.818234 0 -11.804495 -11456.437 +Loop time of 0.153961 on 4 procs for 100 steps with 128 atoms + +Performance: 28.059 ns/day, 0.855 hours/ns, 649.516 timesteps/s, 83.138 katom-step/s +96.2% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.1281 | 0.12977 | 0.1312 | 0.3 | 84.29 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0.01967 | 0.021169 | 0.022796 | 0.8 | 13.75 +Output | 0.00045049 | 0.00053796 | 0.00078459 | 0.0 | 0.35 +Modify | 0.00039544 | 0.0004393 | 0.00048043 | 0.0 | 0.29 +Other | | 0.002049 | | | 1.33 + +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/log.4Jan23.fitpod.g++.4 b/examples/PACKAGES/pod/Ta/log.24June24.fitpod.g++.1 similarity index 55% rename from examples/PACKAGES/pod/Ta_Quadratic/log.4Jan23.fitpod.g++.4 rename to examples/PACKAGES/pod/Ta/log.24June24.fitpod.g++.1 index 6de2055d56..6dd2ab946c 100644 --- a/examples/PACKAGES/pod/Ta_Quadratic/log.4Jan23.fitpod.g++.4 +++ b/examples/PACKAGES/pod/Ta/log.24June24.fitpod.g++.1 @@ -1,39 +1,46 @@ -LAMMPS (22 Dec 2022) +LAMMPS (17 Apr 2024 - Development - patch_17Apr2024-179-g353121c942-modified) +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 +number of environment clusters: 1 +number of principal compoments: 2 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 +two-body radial basis functions: 6 +three-body radial basis functions: 5 +three-body angular degree: 4 +four-body radial basis functions: 0 +four-body angular degree: 0 +five-body radial basis functions: 0 +five-body angular degree: 0 +six-body radial basis functions: 0 +six-body angular degree: 0 +seven-body radial basis functions: 0 +seven-body angular degree: 0 +number of local descriptors per element for one-body potential: 1 +number of local descriptors per element for two-body potential: 6 +number of local descriptors per element for three-body potential: 25 +number of local descriptors per element for four-body potential: 0 +number of local descriptors per element for five-body potential: 0 +number of local descriptors per element for six-body potential: 0 +number of local descriptors per element for seven-body potential: 0 +number of local descriptors per element for all potentials: 32 +number of global descriptors: 32 **************** 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 +path to training data set: XYZ +path to test data set: XYZ +path to environment configuration set: XYZ +basename for output files: Ta training fraction: 1 test fraction: 1 randomize training data set: 1 @@ -45,7 +52,8 @@ energy/force calculation for test data set: 0 fitting weight for energy: 100 fitting weight for force: 1 fitting weight for stress: 0 -fitting regularization parameter: 1e-10 +save pod descriptors: 0 +compute pod descriptors: 0 **************** End of Data File **************** **************** Begin of Training Data Set **************** --------------------------------------------------------------- @@ -74,16 +82,14 @@ maximum number of atoms: 100 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 +size of double memory: 232128 +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 @@ -94,21 +100,20 @@ Configuration: # 301 --------------------------------------------------------------------------------------------------- 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 +Displaced_A15.xyz 9 576 0.015324 0.015365 0.140594 0.184797 +Displaced_BCC.xyz 9 486 0.009486 0.011643 0.249983 0.320375 +Displaced_FCC.xyz 9 432 0.000686 0.000880 0.091420 0.113585 +Elastic_BCC.xyz 100 200 0.003796 0.004379 0.000015 0.000020 +Elastic_FCC.xyz 100 400 0.003332 0.003372 0.000122 0.000178 +GSF_110.xyz 22 528 0.007027 0.007797 0.057637 0.115638 +GSF_112.xyz 22 660 0.010396 0.011347 0.125237 0.198553 +Liquid.xyz 3 300 0.017584 0.023822 0.504354 0.660300 +Surface.xyz 7 236 0.025511 0.034302 0.107190 0.285034 +Volume_A15.xyz 30 240 0.038624 0.048355 0.000000 0.000000 +Volume_BCC.xyz 21 42 0.044423 0.061685 0.000000 0.000000 +Volume_FCC.xyz 31 124 0.030062 0.041271 0.000000 0.000000 --------------------------------------------------------------------------------------------------- -All files 363 4224 0.001053 0.002171 0.059051 0.106960 +All files 363 4224 0.012618 0.024806 0.125879 0.247229 --------------------------------------------------------------------------------------------------- **************** End of Error Analysis for the Training Data Set **************** - Total wall time: 0:00:00 diff --git a/examples/PACKAGES/pod/Ta/log.24June24.pod.compute.g++.1 b/examples/PACKAGES/pod/Ta/log.24June24.pod.compute.g++.1 new file mode 100644 index 0000000000..f120ddd5e5 --- /dev/null +++ b/examples/PACKAGES/pod/Ta/log.24June24.pod.compute.g++.1 @@ -0,0 +1,293 @@ +LAMMPS (17 Apr 2024 - Development - patch_17Apr2024-179-g353121c942-modified) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98) + using 1 OpenMP thread(s) per MPI task +# Demonstrate bispectrum computes + +# initialize simulation + +variable nsteps index 0 +variable nrep equal 2 +variable a equal 2.0 +units metal + +# generate the box and atom positions using a BCC lattice + +variable nx equal ${nrep} +variable nx equal 2 +variable ny equal ${nrep} +variable ny equal 2 +variable nz equal ${nrep} +variable nz equal 2 + +boundary p p p + +atom_modify map hash +lattice bcc $a +lattice bcc 2 +Lattice spacing in x,y,z = 2 2 2 +region box block 0 ${nx} 0 ${ny} 0 ${nz} +region box block 0 2 0 ${ny} 0 ${nz} +region box block 0 2 0 2 0 ${nz} +region box block 0 2 0 2 0 2 +create_box 2 box +Created orthogonal box = (0 0 0) to (4 4 4) + 1 by 1 by 1 MPI processor grid +create_atoms 2 box +Created 16 atoms + using lattice units in orthogonal box = (0 0 0) to (4 4 4) + create_atoms CPU = 0.001 seconds + +mass * 180.88 + +displace_atoms all random 0.1 0.1 0.1 123456 +Displacing atoms ... + +# set up dummy potential to satisfy cutoff +variable rcutfac equal 6.0 +pair_style zero ${rcutfac} +pair_style zero 6 +pair_coeff * * + +# set up per-atom computes + +compute ld all pod/atom Ta_param.pod Ta_coefficients.pod Ta Ta +**************** Begin of POD Potentials **************** +species: Ta +periodic boundary conditions: 1 1 1 +number of environment clusters: 1 +number of principal compoments: 2 +inner cut-off radius: 1 +outer cut-off radius: 5 +bessel polynomial degree: 3 +inverse polynomial degree: 6 +one-body potential: 1 +two-body radial basis functions: 6 +three-body radial basis functions: 5 +three-body angular degree: 4 +four-body radial basis functions: 0 +four-body angular degree: 0 +five-body radial basis functions: 0 +five-body angular degree: 0 +six-body radial basis functions: 0 +six-body angular degree: 0 +seven-body radial basis functions: 0 +seven-body angular degree: 0 +number of local descriptors per element for one-body potential: 1 +number of local descriptors per element for two-body potential: 6 +number of local descriptors per element for three-body potential: 25 +number of local descriptors per element for four-body potential: 0 +number of local descriptors per element for five-body potential: 0 +number of local descriptors per element for six-body potential: 0 +number of local descriptors per element for seven-body potential: 0 +number of local descriptors per element for all potentials: 32 +number of global descriptors: 32 +**************** End of POD Potentials **************** + +**************** Begin of Model Coefficients **************** +total number of coefficients for POD potential: 32 +total number of elements for PCA projection matrix: 0 +total number of elements for PCA centroids: 0 +**************** End of Model Coefficients **************** + +compute dd all podd/atom Ta_param.pod Ta_coefficients.pod Ta Ta +**************** Begin of POD Potentials **************** +species: Ta +periodic boundary conditions: 1 1 1 +number of environment clusters: 1 +number of principal compoments: 2 +inner cut-off radius: 1 +outer cut-off radius: 5 +bessel polynomial degree: 3 +inverse polynomial degree: 6 +one-body potential: 1 +two-body radial basis functions: 6 +three-body radial basis functions: 5 +three-body angular degree: 4 +four-body radial basis functions: 0 +four-body angular degree: 0 +five-body radial basis functions: 0 +five-body angular degree: 0 +six-body radial basis functions: 0 +six-body angular degree: 0 +seven-body radial basis functions: 0 +seven-body angular degree: 0 +number of local descriptors per element for one-body potential: 1 +number of local descriptors per element for two-body potential: 6 +number of local descriptors per element for three-body potential: 25 +number of local descriptors per element for four-body potential: 0 +number of local descriptors per element for five-body potential: 0 +number of local descriptors per element for six-body potential: 0 +number of local descriptors per element for seven-body potential: 0 +number of local descriptors per element for all potentials: 32 +number of global descriptors: 32 +**************** End of POD Potentials **************** + +**************** Begin of Model Coefficients **************** +total number of coefficients for POD potential: 32 +total number of elements for PCA projection matrix: 0 +total number of elements for PCA centroids: 0 +**************** End of Model Coefficients **************** + + +# set up compute snap generating global array + +compute gdd all pod/global Ta_param.pod Ta_coefficients.pod Ta Ta +**************** Begin of POD Potentials **************** +species: Ta +periodic boundary conditions: 1 1 1 +number of environment clusters: 1 +number of principal compoments: 2 +inner cut-off radius: 1 +outer cut-off radius: 5 +bessel polynomial degree: 3 +inverse polynomial degree: 6 +one-body potential: 1 +two-body radial basis functions: 6 +three-body radial basis functions: 5 +three-body angular degree: 4 +four-body radial basis functions: 0 +four-body angular degree: 0 +five-body radial basis functions: 0 +five-body angular degree: 0 +six-body radial basis functions: 0 +six-body angular degree: 0 +seven-body radial basis functions: 0 +seven-body angular degree: 0 +number of local descriptors per element for one-body potential: 1 +number of local descriptors per element for two-body potential: 6 +number of local descriptors per element for three-body potential: 25 +number of local descriptors per element for four-body potential: 0 +number of local descriptors per element for five-body potential: 0 +number of local descriptors per element for six-body potential: 0 +number of local descriptors per element for seven-body potential: 0 +number of local descriptors per element for all potentials: 32 +number of global descriptors: 32 +**************** End of POD Potentials **************** + +**************** Begin of Model Coefficients **************** +total number of coefficients for POD potential: 32 +total number of elements for PCA projection matrix: 0 +total number of elements for PCA centroids: 0 +**************** End of Model Coefficients **************** + +#fix gdd all ave/time 1 1 1 c_gdd[*] file pod.gdd.dat mode vector + +compute ldd all pod/local Ta_param.pod Ta_coefficients.pod Ta Ta +**************** Begin of POD Potentials **************** +species: Ta +periodic boundary conditions: 1 1 1 +number of environment clusters: 1 +number of principal compoments: 2 +inner cut-off radius: 1 +outer cut-off radius: 5 +bessel polynomial degree: 3 +inverse polynomial degree: 6 +one-body potential: 1 +two-body radial basis functions: 6 +three-body radial basis functions: 5 +three-body angular degree: 4 +four-body radial basis functions: 0 +four-body angular degree: 0 +five-body radial basis functions: 0 +five-body angular degree: 0 +six-body radial basis functions: 0 +six-body angular degree: 0 +seven-body radial basis functions: 0 +seven-body angular degree: 0 +number of local descriptors per element for one-body potential: 1 +number of local descriptors per element for two-body potential: 6 +number of local descriptors per element for three-body potential: 25 +number of local descriptors per element for four-body potential: 0 +number of local descriptors per element for five-body potential: 0 +number of local descriptors per element for six-body potential: 0 +number of local descriptors per element for seven-body potential: 0 +number of local descriptors per element for all potentials: 32 +number of global descriptors: 32 +**************** End of POD Potentials **************** + +**************** Begin of Model Coefficients **************** +total number of coefficients for POD potential: 32 +total number of elements for PCA projection matrix: 0 +total number of elements for PCA centroids: 0 +**************** End of Model Coefficients **************** + +#fix ldd all ave/time 1 1 1 c_ldd[*] file pod.ldd.dat mode vector + +#dump mydump_ld all custom 1000 dump_ld id c_ld[*] +#dump mydump_dd all custom 1000 dump_dd id c_dd[*] + +variable sample_ld1 equal C_ld[1][10] # Arbitrary local descriptor +fix ldprint all print 1 "${sample_ld1}" + +run ${nsteps} +run 0 +WARNING: No fixes with time integration, atoms won't move (src/verlet.cpp:60) +Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule +WARNING: More than one compute pod (src/ML-POD/compute_pod_atom.cpp:87) +WARNING: More than one compute pod (src/ML-POD/compute_podd_atom.cpp:87) +WARNING: More than one compute pod (src/ML-POD/compute_pod_global.cpp:87) +WARNING: More than one compute pod (src/ML-POD/compute_pod_local.cpp:89) +Neighbor list info ... + update: every = 1 steps, delay = 0 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 8 + ghost atom cutoff = 8 + binsize = 4, bins = 1 1 1 + 5 neighbor lists, perpetual/occasional/extra = 1 4 0 + (1) pair zero, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d + bin: standard + (2) compute pod/atom, occasional + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard + (3) compute podd/atom, occasional + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard + (4) compute pod/global, occasional + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard + (5) compute pod/local, occasional + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +0.344594831165384 +Per MPI rank memory allocation (min/avg/max) = 6.326 | 6.326 | 6.326 Mbytes + Step Temp E_pair E_mol TotEng Press + 0 0 0 0 0 0 +Loop time of 1.23e-06 on 1 procs for 0 steps with 16 atoms + +243.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 | 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.23e-06 | | |100.00 + +Nlocal: 16 ave 16 max 16 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 1984 ave 1984 max 1984 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 4311 ave 4311 max 4311 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +FullNghs: 8623 ave 8623 max 8623 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 8623 +Ave neighs/atom = 538.9375 +Neighbor list builds = 0 +Dangerous builds = 0 +Total wall time: 0:00:00 diff --git a/examples/PACKAGES/pod/Ta/log.4Jan23.pod.g++.1 b/examples/PACKAGES/pod/Ta/log.4Jan23.pod.g++.1 deleted file mode 100644 index e7c52bfd13..0000000000 --- a/examples/PACKAGES/pod/Ta/log.4Jan23.pod.g++.1 +++ /dev/null @@ -1,142 +0,0 @@ -LAMMPS (22 Dec 2022) - 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 1.51641 on 1 procs for 100 steps with 128 atoms - -Performance: 2.849 ns/day, 8.425 hours/ns, 65.945 timesteps/s, 8.441 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 | 1.5158 | 1.5158 | 1.5158 | 0.0 | 99.96 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.00023616 | 0.00023616 | 0.00023616 | 0.0 | 0.02 -Output | 0.00010779 | 0.00010779 | 0.00010779 | 0.0 | 0.01 -Modify | 9.7284e-05 | 9.7284e-05 | 9.7284e-05 | 0.0 | 0.01 -Other | | 0.0001254 | | | 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:01 diff --git a/examples/PACKAGES/pod/Ta/log.4Jan23.pod.g++.4 b/examples/PACKAGES/pod/Ta/log.4Jan23.pod.g++.4 deleted file mode 100644 index 8d3496f563..0000000000 --- a/examples/PACKAGES/pod/Ta/log.4Jan23.pod.g++.4 +++ /dev/null @@ -1,142 +0,0 @@ -LAMMPS (22 Dec 2022) - 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.437423 on 4 procs for 100 steps with 128 atoms - -Performance: 9.876 ns/day, 2.430 hours/ns, 228.612 timesteps/s, 29.262 katom-step/s -98.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 | 0.41133 | 0.41882 | 0.42464 | 0.7 | 95.75 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.011279 | 0.017302 | 0.024975 | 3.7 | 3.96 -Output | 0.00012956 | 0.00029493 | 0.00077991 | 0.0 | 0.07 -Modify | 4.2093e-05 | 4.7838e-05 | 5.3039e-05 | 0.0 | 0.01 -Other | | 0.0009598 | | | 0.22 - -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 deleted file mode 100644 index de76b2e90e..0000000000 --- a/examples/PACKAGES/pod/Ta_Quadratic/Ta_coefficients.pod +++ /dev/null @@ -1,183 +0,0 @@ -POD_coefficients: 182 --4.35182 -3.57837 -2.25497 -4.84612 --2.06319 --1.17070 --0.23842 -9.17160 -36.02366 -16.65304 --141.18403 -37.17722 -0.46028 --9.76148 --0.03681 -15.64520 -2.29791 -0.02143 -2.69735 --0.35336 -0.51108 --2.36290 -0.18617 --0.13079 -1.02666 -0.21514 -0.08075 --0.28347 --0.45059 --0.24762 --1.13671 --0.30577 -0.60504 -0.31285 --0.10639 --0.06957 -0.21961 --0.10426 -0.80318 --11.41460 --10.26102 --0.03887 --18.86071 --4.47372 --1.76858 --0.92503 -0.42654 -0.35849 -0.56611 --0.79354 -5.65136 -8.75283 --6.22283 --4.34623 -10.20031 -6.53360 -7.16688 -2.19236 -5.90789 -3.52173 -7.97264 -0.21104 --0.01015 -0.01023 -0.03088 -0.10222 -0.05366 --0.08037 --3.17612 --3.45669 --0.79282 --2.38323 --0.69797 --1.44780 --0.03351 --0.05645 -0.01901 --0.01923 -0.05401 --0.02095 -1.45651 -1.58812 -1.41188 -2.18122 -3.04893 -1.09294 -3.03781 -1.07249 -0.50262 -0.81150 -0.35997 -0.64602 --0.04245 -0.00113 --0.02894 -0.04382 --0.06556 -0.00052 -4.67541 -0.11812 -1.52428 --0.17075 -0.20231 -0.36857 -0.61744 -0.20190 --0.00816 -0.16194 --0.12948 --0.02136 --2.19271 -0.62510 -0.20030 --0.27621 --0.58116 --0.21792 --1.82295 --0.32166 --0.64550 --0.11580 --0.02438 --0.08057 -0.19538 -0.04119 -0.00323 -0.06530 --0.02547 --0.01404 -0.22336 --0.48191 --0.10715 --0.25685 --0.65069 --0.31428 --0.06947 -0.11924 -0.05467 -0.12105 --0.03980 --0.00295 --2.14413 -0.82345 -0.23083 --0.24925 --0.36678 --0.16709 -1.20410 --0.47756 --0.11104 -0.09587 -0.03722 -0.00309 --0.29879 --0.06463 --0.10236 --0.02276 --0.06012 --0.02985 -12.06876 --3.39995 -0.85590 --0.77481 --1.13392 --0.40511 --0.08005 --0.07162 --0.05978 --0.02407 --0.06031 --0.02307 --10.24105 -2.49356 --1.14052 -0.70453 -0.99988 -0.33862 -2.43469 --1.16557 --0.23708 -0.03482 --0.05280 --0.02735 diff --git a/examples/PACKAGES/pod/Ta_Quadratic/Ta_param.pod b/examples/PACKAGES/pod/Ta_Quadratic/Ta_param.pod deleted file mode 100644 index adfe772d10..0000000000 --- a/examples/PACKAGES/pod/Ta_Quadratic/Ta_param.pod +++ /dev/null @@ -1,33 +0,0 @@ -# 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 deleted file mode 100644 index b87f585e66..0000000000 --- a/examples/PACKAGES/pod/Ta_Quadratic/Ta_training_analysis.pod +++ /dev/null @@ -1,387 +0,0 @@ -# Displaced_A15.xyz - config # atoms energy DFT energy energy error force DFT force force error - 1 64 -754.2481469 -754.220443 0.0004328739544 8.011514562 8.398670477 0.06376624845 - 2 64 -753.8045629 -753.865255 0.0009483144042 9.036674821 9.134430545 0.07283326238 - 3 64 -754.1013214 -754.0221 0.001237834258 8.637024088 9.017261102 0.06364800593 - 4 64 -754.2847414 -754.279613 8.013173542e-05 8.107730622 8.381725092 0.06510174353 - 5 64 -753.8382044 -753.777209 0.0009530527364 9.104258904 9.478314477 0.07200164536 - 6 64 -754.0793448 -754.048643 0.0004797149286 8.152198894 8.465317938 0.06707941365 - 7 64 -754.3310528 -754.317603 0.0002101531052 7.9440922 8.127690491 0.05987172107 - 8 64 -754.0070856 -753.969161 0.0005925720361 9.179443805 9.425464952 0.06695320222 - 9 64 -754.1450602 -754.141988 4.800358611e-05 8.574170786 8.821346913 0.06628506232 -# Displaced_BCC.xyz - config # atoms energy DFT energy energy error force DFT force force error - 10 54 -630.8081935 -631.019667 0.003916175555 15.97497534 16.625876 0.1021118679 - 11 54 -631.4580134 -631.719595 0.004844103559 15.24068949 15.58666626 0.1043856792 - 12 54 -631.1667566 -631.386255 0.004064785931 15.46091788 15.92378883 0.1062824093 - 13 54 -632.3004944 -632.575826 0.005098733346 14.4261974 14.55977162 0.0983914465 - 14 54 -630.089475 -630.450212 0.006680315456 16.78432947 16.96340726 0.1085102316 - 15 54 -631.3402507 -631.669379 0.006094968558 15.8289421 16.05757315 0.1000888617 - 16 54 -632.0447348 -632.431277 0.007158189539 14.73098416 14.69810718 0.09621569386 - 17 54 -630.7186536 -630.960068 0.004470636457 15.62236511 15.99073148 0.1063789621 - 18 54 -623.3884977 -623.378198 0.0001907343232 23.9739298 24.67640432 0.1519105596 -# Displaced_FCC.xyz - config # atoms energy DFT energy energy error force DFT force force error - 19 48 -556.0112403 -555.899463 0.002328692864 5.300795546 6.084617063 0.07215982294 - 20 48 -555.9884377 -555.922478 0.001374159425 5.509767245 6.297071211 0.08438730171 - 21 48 -555.8765558 -555.800269 0.001589309295 5.420812146 6.021098636 0.07404418561 - 22 48 -556.2511475 -556.196151 0.001145760427 4.541854917 5.127955094 0.06609455537 - 23 48 -555.6590668 -555.488929 0.003544536845 6.087063152 7.050223459 0.09107542897 - 24 48 -556.1020655 -556.027926 0.001544573067 5.048523277 5.611881174 0.06751584111 - 25 48 -556.0607474 -555.968399 0.001923924855 5.209756732 5.979217189 0.08024047849 - 26 48 -556.0598015 -556.047132 0.0002639485133 4.995519804 5.544452585 0.07745361595 - 27 48 -555.8256424 -555.747848 0.00162071731 5.762702675 6.47892568 0.08480576837 -# Elastic_BCC.xyz - config # atoms energy DFT energy energy error force DFT force force error - 28 2 -23.69025375 -23.689367 0.0004433751768 0.0006229111456 0.0006222748589 9.850534294e-07 - 29 2 -23.690768 -23.689888 0.0004399996606 0.0006181832344 0.0006166052222 1.005063831e-06 - 30 2 -23.69082186 -23.689996 0.0004129292199 0.0008798076914 0.0008810425642 1.748431771e-06 - 31 2 -23.69166748 -23.690957 0.0003552395228 1.000599546e-06 0 4.011214433e-07 - 32 2 -23.69137648 -23.690521 0.0004277406839 0.0005992884516 0.0005982273815 7.219402767e-07 - 33 2 -23.69120607 -23.69038 0.000413036746 0.000594795449 0.0005925723585 9.949794864e-07 - 34 2 -23.6900782 -23.689202 0.000438099978 0.0006263336007 0.0006279363025 1.111474332e-06 - 35 2 -23.69121642 -23.690482 0.0003672088475 0.00086350893 0.0008640138888 1.400551425e-06 - 36 2 -23.69074792 -23.689902 0.0004229601404 0.0006176589245 0.0006152154094 9.894995842e-07 - 37 2 -23.6914111 -23.690563 0.0004240514006 0.0006052368582 0.0006038725031 4.148713688e-07 - 38 2 -23.69095105 -23.690207 0.0003720253444 0.001071999394 0.00107369735 7.195087511e-07 - 39 2 -23.69007856 -23.689285 0.0003967806815 0.0008875291033 0.000890013483 1.187797446e-06 - 40 2 -23.69061639 -23.689768 0.0004241940528 0.00107874486 0.001080249045 1.09850755e-06 - 41 2 -23.69064479 -23.68968 0.0004823957182 0.0008702114429 0.0008680034562 8.482668094e-07 - 42 2 -23.6910243 -23.690074 0.0004751495365 0.001368926593 0.001373818765 2.351835771e-06 - 43 2 -23.68910107 -23.688108 0.0004965341502 0.0006334704764 0.0006336134468 5.990110163e-07 - 44 2 -23.69003986 -23.689241 0.0003994287496 0.0008886654529 0.0008880101351 1.319380731e-06 - 45 2 -23.69042994 -23.68952 0.0004549677771 0.0008868888968 0.0008860011287 4.688590432e-07 - 46 2 -23.68738487 -23.686278 0.0005534329248 0.0006426681164 0.0006406777661 9.718938063e-07 - 47 2 -23.69095089 -23.690097 0.0004269463837 0.0008409065407 0.0008410160522 1.331153983e-06 - 48 2 -23.69158161 -23.690811 0.0003853032969 0.0008464480591 0.0008500070588 1.611890257e-06 - 49 2 -23.69114597 -23.690266 0.0004399838162 0.001039354626 0.001044322747 3.354760892e-06 - 50 2 -23.6914223 -23.690597 0.0004126524984 0.001045529019 0.001050833003 2.164890519e-06 - 51 2 -23.69157045 -23.690673 0.000448723371 0.0006045419676 0.0006038907186 7.138092253e-07 - 52 2 -23.69135377 -23.690551 0.0004013838132 0.0008554941993 0.0008590064028 1.199818147e-06 - 53 2 -23.6914855 -23.690693 0.0003962481391 0.0008561040807 0.0008590110593 1.062310127e-06 - 54 2 -23.69110782 -23.69021 0.0004489100066 0.0008699576152 0.0008730051546 1.100920756e-06 - 55 2 -23.68987142 -23.688943 0.0004642105928 0.0008789741194 0.0008800306813 8.92018913e-07 - 56 2 -23.69108099 -23.690136 0.0004724937378 0.0005971006713 0.000593996633 9.809423198e-07 - 57 2 -23.6884849 -23.687444 0.0005204491042 0.000904649919 0.000903059245 1.159812589e-06 - 58 2 -23.69061659 -23.689801 0.0004077963743 0.0008734822906 0.0008740011442 2.825876968e-07 - 59 2 -23.69129673 -23.690408 0.0004443659273 8.294238722e-07 0 3.094976672e-07 - 60 2 -23.69128183 -23.690362 0.0004599146039 0.0006083806397 0.0006067503605 7.610598464e-07 - 61 2 -23.68992958 -23.688881 0.0005242884644 0.000821029922 0.0008250054545 1.71686782e-06 - 62 2 -23.6913441 -23.690515 0.0004145518648 0.001475621399 0.001475779794 2.84677577e-06 - 63 2 -23.69141171 -23.690551 0.0004303564504 0.0005957866015 0.0005996599036 1.20514709e-06 - 64 2 -23.69029628 -23.689487 0.0004046403158 0.0006212225944 0.0006194384554 9.873937532e-07 - 65 2 -23.69072139 -23.68986 0.0004306945962 0.0008858828979 0.0008860124153 5.860284088e-07 - 66 2 -23.69018379 -23.689288 0.0004478949008 0.001400963016 0.001396479144 1.244329984e-06 - 67 2 -23.69129611 -23.690457 0.0004195546182 0.0005914019669 0.0005939831647 1.147186262e-06 - 68 2 -23.69084551 -23.689792 0.0005267528672 0.0008274902414 0.0008340587509 2.923475453e-06 - 69 2 -23.69101454 -23.690006 0.0005042723904 0.0005874526839 0.0005897694465 1.183912924e-06 - 70 2 -23.69137638 -23.690571 0.000402691994 0.0005935054979 0.0005939781141 8.884918862e-07 - 71 2 -23.69114123 -23.690213 0.0004641143201 0.001085937193 0.001084315452 6.623820068e-07 - 72 2 -23.69146017 -23.690617 0.0004215869658 0.0005980165481 0.0006024682564 1.268404944e-06 - 73 2 -23.69063494 -23.689761 0.0004369696294 0.0008787872001 0.0008790688255 2.274049375e-06 - 74 2 -23.69116059 -23.69027 0.0004452958397 6.913233052e-07 0 2.060281613e-07 - 75 2 -23.69134793 -23.690599 0.0003744660576 0.0006108390866 0.0006137752031 6.96527736e-07 - 76 2 -23.69149586 -23.69061 0.0004429283645 9.198413091e-07 0 3.754401369e-07 - 77 2 -23.69139951 -23.690603 0.0003982565418 0.0008543320292 0.0008590331775 1.578633627e-06 - 78 2 -23.68884519 -23.687908 0.0004685934904 0.0009053957054 0.0009010105438 1.657834627e-06 - 79 2 -23.69142551 -23.690688 0.0003687527847 0.0008461959647 0.0008470064935 1.246502358e-06 - 80 2 -23.69088798 -23.689988 0.0004499883039 0.0006191457459 0.0006194465272 7.974697206e-07 - 81 2 -23.69054504 -23.689613 0.0004660181693 0.0008740608763 0.0008740732235 7.595219281e-07 - 82 2 -23.69150291 -23.690678 0.0004124547512 0.000610815565 0.0006123757017 8.071847352e-07 - 83 2 -23.69107508 -23.69017 0.0004525405781 0.0008712164372 0.0008750051428 1.391960695e-06 - 84 2 -23.68888774 -23.687892 0.0004978720826 0.001115255323 0.001112070142 1.300271383e-06 - 85 2 -23.69100617 -23.690132 0.0004370853773 0.0008623539978 0.000868018433 1.989797184e-06 - 86 2 -23.69156961 -23.690843 0.0003633026522 0.0006034844173 0.0006081134763 1.367563513e-06 - 87 2 -23.6914135 -23.690598 0.0004077495027 0.001205622469 0.001217674833 4.139579599e-06 - 88 2 -23.69152569 -23.690656 0.0004348453461 0.0005982210923 0.0006024765556 1.339909066e-06 - 89 2 -23.69122964 -23.690254 0.00048782182 0.001039614512 0.001043496047 2.818899799e-06 - 90 2 -23.69160573 -23.690694 0.0004558641588 0.0006005238032 0.0006010740387 4.468144277e-07 - 91 2 -23.69097667 -23.690097 0.0004398327929 0.0008742196236 0.0008730234819 9.401054078e-07 - 92 2 -23.68931978 -23.688402 0.000458891277 0.0006323492378 0.000632180354 2.788895255e-07 - 93 2 -23.68957636 -23.688669 0.0004536814608 0.001093068336 0.001092474256 1.597403354e-06 - 94 2 -23.69136079 -23.690538 0.0004113951269 0.0008559692215 0.0008610145179 1.717480332e-06 - 95 2 -23.69064046 -23.689722 0.0004592296819 0.0006203235661 0.0006251287867 1.466428815e-06 - 96 2 -23.69148677 -23.690581 0.0004528827615 7.127210559e-07 0 2.255863159e-07 - 97 2 -23.68967251 -23.688755 0.0004587561741 0.0006269092047 0.0006251143895 8.456044924e-07 - 98 2 -23.69038245 -23.689312 0.0005352258985 0.0008260738577 0.0008290597083 1.434578094e-06 - 99 2 -23.6885155 -23.687388 0.000563750435 0.001127068066 0.001120237475 2.790106364e-06 - 100 2 -23.69147138 -23.690664 0.0004036883861 0.0006101343713 0.0006109402589 2.333308226e-07 - 101 2 -23.69059185 -23.68941 0.0005909264985 0.0005851627979 0.0005883553348 1.578359791e-06 - 102 2 -23.69082355 -23.690035 0.0003942730081 0.0008795919888 0.0008810062429 8.322915827e-07 - 103 2 -23.69101815 -23.690015 0.0005015766298 0.0008420116739 0.0008450195264 1.339928081e-06 - 104 2 -23.6915919 -23.690752 0.0004199497676 0.0005974770628 0.0005996415596 9.70808844e-07 - 105 2 -23.69060481 -23.689825 0.0003899065755 0.0008774617579 0.0008800215906 1.681761199e-06 - 106 2 -23.69149834 -23.690562 0.0004681676 0.0008527074936 0.0008560011682 1.11226924e-06 - 107 2 -23.69145561 -23.690622 0.0004168050595 0.0008363624298 0.0008390017878 8.930611273e-07 - 108 2 -23.68965306 -23.688764 0.0004445297309 0.0008936263738 0.0008910185183 1.309339573e-06 - 109 2 -23.69077552 -23.690011 0.0003822592712 0.0006203793746 0.0006194287691 3.133550229e-07 - 110 2 -23.68867102 -23.687696 0.0004875100015 0.001086068328 0.001087589996 1.327020171e-06 - 111 2 -23.69172933 -23.691019 0.0003551646935 0.000852013148 0.0008540035129 9.847230007e-07 - 112 2 -23.68991099 -23.689025 0.000442996005 6.46227386e-07 0 2.557212911e-07 - 113 2 -23.69080506 -23.689952 0.0004265318142 7.012777671e-07 0 2.758977769e-07 - 114 2 -23.69152793 -23.69061 0.0004589654148 0.0008542966264 0.0008580011655 1.338482046e-06 - 115 2 -23.69153556 -23.690595 0.0004702783823 0.000867974804 0.0008680069124 6.687384672e-07 - 116 2 -23.69117399 -23.690231 0.000471493636 0.0005924023762 0.0005925892338 1.259776007e-07 - 117 2 -23.69139497 -23.690469 0.0004629856458 0.0008486906688 0.0008500294113 6.344879116e-07 - 118 2 -23.69122801 -23.690482 0.0003730070077 0.0008734801582 0.0008740102974 2.172190141e-07 - 119 2 -23.69055118 -23.689613 0.0004690919274 0.0008237358825 0.0008320192305 2.927942421e-06 - 120 2 -23.68847553 -23.687426 0.0005247657372 0.001093739709 0.00109577735 8.307823424e-07 - 121 2 -23.69041353 -23.689562 0.000425762889 0.0006210724415 0.0006265237426 1.574752432e-06 - 122 2 -23.69137916 -23.6904 0.0004895814578 3.712921801e-07 0 1.509058252e-07 - 123 2 -23.69152029 -23.690561 0.0004796427403 0.0005964911748 0.0005982273815 1.201511775e-06 - 124 2 -23.69012377 -23.689107 0.0005083837539 0.0008124995989 0.0008180073349 1.97846325e-06 - 125 2 -23.69112303 -23.690145 0.000489014125 0.0008742245309 0.0008740766557 1.981010569e-06 - 126 2 -23.6913827 -23.690482 0.00045035056 0.0005944563316 0.0005939983165 2.227151791e-07 - 127 2 -23.69071568 -23.689864 0.0004258388591 0.0008855411376 0.0008860124153 7.974985004e-07 -# Elastic_FCC.xyz - config # atoms energy DFT energy energy error force DFT force force error - 128 4 -46.43709855 -46.437936 0.0002093617328 0.0008950059332 0.001265949446 0.0001464529791 - 129 4 -46.4407039 -46.438504 0.0005499744469 0.0009975948265 0.001492549497 0.0001384062515 - 130 4 -46.43497365 -46.436378 0.0003510867184 0.0005521282525 0.000810592376 9.989141969e-05 - 131 4 -46.44077415 -46.441551 0.0001942123898 0.001132197907 0.001283675193 6.296966657e-05 - 132 4 -46.41517164 -46.416957 0.0004463408133 0.000917990147 0.001186145859 8.226324971e-05 - 133 4 -46.43849879 -46.440495 0.0004990529713 0.001000780113 0.001212440514 6.935590465e-05 - 134 4 -46.43777706 -46.437972 4.873595839e-05 0.001389269665 0.002358226452 0.0002414827518 - 135 4 -46.44772061 -46.44586 0.0004651524929 0.00136379307 0.002033949852 0.0001874009366 - 136 4 -46.43566097 -46.435744 2.075858871e-05 0.0009531675039 0.001690849491 0.0002499304712 - 137 4 -46.4397151 -46.438209 0.0003765248409 0.0008871611703 0.001160049999 6.827992039e-05 - 138 4 -46.42609455 -46.42629 4.886349894e-05 0.0005556350766 0.0005297018029 1.21651498e-05 - 139 4 -46.44149051 -46.443301 0.0004526223375 0.001132510738 0.001818421568 0.0001734412988 - 140 4 -46.43896893 -46.439002 8.267473937e-06 0.001179879164 0.001416973535 6.937478941e-05 - 141 4 -46.43123555 -46.432438 0.0003006112875 0.001147766739 0.001010469198 6.008540236e-05 - 142 4 -46.41017485 -46.412654 0.0006197883649 0.001371501311 0.001801959766 0.0001610014112 - 143 4 -46.44246774 -46.443231 0.0001908144167 0.0008879088126 0.001691590967 0.0001867981938 - 144 4 -46.43057135 -46.431513 0.0002354128564 0.001455115574 0.001680544852 7.970584502e-05 - 145 4 -46.43314849 -46.435608 0.0006148766383 0.000895665005 0.0009593039143 1.661569891e-05 - 146 4 -46.43895751 -46.437689 0.0003171270659 0.001001644887 0.001217708504 8.864745791e-05 - 147 4 -46.4271122 -46.428447 0.0003336990143 0.001053852574 0.002060081552 0.0002791878204 - 148 4 -46.43182739 -46.432255 0.000106902789 0.0007125255966 0.0006274201144 7.371627608e-05 - 149 4 -46.44177161 -46.442315 0.0001358463057 0.001140463867 0.002424436842 0.0003371037421 - 150 4 -46.43717254 -46.436613 0.000139884251 0.0005515470124 0.0005321240457 4.25980675e-05 - 151 4 -46.43004027 -46.430825 0.0001961823592 0.001008902912 0.001399987143 0.0001075255834 - 152 4 -46.43208405 -46.43312 0.0002589881882 0.0005518528033 0.0007272771136 5.274203147e-05 - 153 4 -46.43371444 -46.434347 0.000158140244 0.0008969169177 0.001284451634 0.000116451331 - 154 4 -46.42879982 -46.430573 0.0004432948912 0.0009069765322 0.001315746176 0.0001014266222 - 155 4 -46.44729799 -46.445665 0.0004082485341 0.001210137892 0.00180789159 0.0001638465464 - 156 4 -46.43544342 -46.435898 0.0001136447769 0.0008978231434 0.001869300939 0.0002335504461 - 157 4 -46.44021163 -46.442107 0.0004738424917 0.0007064270827 0.0006020930161 3.471655618e-05 - 158 4 -46.43498956 -46.434432 0.0001393896227 0.0009533481605 0.001092982159 7.242855265e-05 - 159 4 -46.43803608 -46.436308 0.0004320210529 0.001263659168 0.001839150891 0.0001727461868 - 160 4 -46.42268734 -46.423938 0.0003126642441 0.001014412719 0.001463463016 0.0001717552709 - 161 4 -46.42662921 -46.428115 0.0003714482928 0.0007136207063 0.0008584497656 6.405723837e-05 - 162 4 -46.42531434 -46.4269 0.0003964160099 0.001206355349 0.001845719914 0.0002046485876 - 163 4 -46.42224822 -46.421142 0.00027655517 0.001156356408 0.001309150106 4.994079618e-05 - 164 4 -46.4302643 -46.432233 0.0004921743842 0.0007882966199 0.0007253109678 2.466489974e-05 - 165 4 -46.43017473 -46.429408 0.0001916835518 0.000899021915 0.001068327665 6.208651635e-05 - 166 4 -46.44541887 -46.445145 6.846642975e-05 0.001028604344 0.001776038288 0.0001975509563 - 167 4 -46.43410132 -46.435868 0.0004416698523 0.00126629641 0.002376074704 0.0003279007933 - 168 4 -46.43919494 -46.439663 0.0001170158831 0.0005441672792 0.001119403413 0.0001039537827 - 169 4 -46.42584101 -46.428287 0.0006114968909 0.001286554794 0.001277000392 3.606396056e-05 - 170 4 -46.42254993 -46.424584 0.000508517271 0.0007166928246 0.0008032957114 3.058246984e-05 - 171 4 -46.41053526 -46.413045 0.0006274344802 0.001077488731 0.001248322074 4.395073797e-05 - 172 4 -46.43440112 -46.436994 0.0006482191497 0.0009567631962 0.001331939188 0.0001491134491 - 173 4 -46.44377744 -46.443604 4.335911262e-05 0.0009956173287 0.001177046303 8.761456142e-05 - 174 4 -46.44028269 -46.439718 0.0001411716593 9.067044161e-07 0 2.475504855e-07 - 175 4 -46.43723548 -46.435527 0.0004271206705 0.001133620344 0.0009338393866 8.014312499e-05 - 176 4 -46.43396161 -46.434787 0.0002063465503 0.001150111339 0.00117329195 4.934565354e-05 - 177 4 -46.43612253 -46.434929 0.0002983823621 0.001267526966 0.001349491756 5.093502218e-05 - 178 4 -46.42638491 -46.426499 2.852244117e-05 0.001164859691 0.001248937949 4.347949244e-05 - 179 4 -46.43717201 -46.437025 3.675245971e-05 0.0007725496777 0.000938418883 6.831038049e-05 - 180 4 -46.4281895 -46.428937 0.0001868757356 0.001151243959 0.001286352984 4.994282406e-05 - 181 4 -46.44116364 -46.442516 0.0003380892793 0.0007032387465 0.00094855469 0.0001088604201 - 182 4 -46.42978258 -46.428736 0.0002616440103 0.001009629916 0.001424321593 0.0001089615662 - 183 4 -46.43305551 -46.433359 7.587361447e-05 0.001156682853 0.001276381604 4.128766832e-05 - 184 4 -46.44006475 -46.438799 0.0003164382753 0.0007752996065 0.0008186940821 3.548756745e-05 - 185 4 -46.44169053 -46.441993 7.561864672e-05 0.0008970969052 0.001887735151 0.0002223397932 - 186 4 -46.43727222 -46.439033 0.0004401954936 0.0007708721088 0.000821568013 4.107007018e-05 - 187 4 -46.43632517 -46.436967 0.0001604574289 0.001052390296 0.001482323514 0.0001388091482 - 188 4 -46.42718259 -46.427245 1.560352526e-05 0.001072419721 0.001293885621 7.709435507e-05 - 189 4 -46.43874841 -46.438046 0.0001756024201 0.001260671216 0.001627288542 0.0001002074435 - 190 4 -46.41877429 -46.420083 0.0003271768634 0.00142160315 0.002395244873 0.0003233098312 - 191 4 -46.44621445 -46.445247 0.0002418615665 0.0009904374428 0.001219330964 5.687306262e-05 - 192 4 -46.44511464 -46.446044 0.0002323410927 0.0008790838348 0.001305329077 0.0001107509197 - 193 4 -46.43564394 -46.434472 0.0002929851777 0.000890378693 0.0008323340675 4.743679034e-05 - 194 4 -46.44317175 -46.44458 0.0003520619573 0.0007034014662 0.0009744208536 5.172015881e-05 - 195 4 -46.44087095 -46.441776 0.0002262624122 0.00113922313 0.001339231869 8.765052415e-05 - 196 4 -46.43719326 -46.436389 0.0002010659177 0.001277508928 0.001786741168 0.0001303767454 - 197 4 -46.44563996 -46.446416 0.0001940097871 0.0007007387602 0.0006588778339 5.645487424e-05 - 198 4 -46.44980864 -46.449806 6.606823266e-07 0.001232826529 0.002135055034 0.0002384857832 - 199 4 -46.42466674 -46.427189 0.0006305654832 0.001011828255 0.001050788276 2.797047454e-05 - 200 4 -46.42588993 -46.427857 0.000491766418 0.001010915484 0.001487666629 0.0001398462887 - 201 4 -46.44273693 -46.44004 0.0006742317456 0.0007050795233 0.000757202747 2.506458135e-05 - 202 4 -46.43659247 -46.437214 0.0001553829854 0.0008924045914 0.001505586265 0.0001475571029 - 203 4 -46.42189527 -46.422628 0.0001831835233 0.0009120248848 0.001601713458 0.0002207350143 - 204 4 -46.44387014 -46.443535 8.378431277e-05 0.001253187495 0.001590304373 0.0001006147174 - 205 4 -46.4386991 -46.439922 0.0003057254875 0.001138308324 0.001530493385 0.0001018467819 - 206 4 -46.43732669 -46.437675 8.707637653e-05 0.00144833639 0.002440246094 0.0003149341193 - 207 4 -46.44459348 -46.445558 0.0002411303465 0.0008716893522 0.00113392416 7.56134454e-05 - 208 4 -46.43888136 -46.439106 5.615896373e-05 0.001259801268 0.001830731002 0.0001709222499 - 209 4 -46.44452218 -46.443073 0.000362294488 0.0005355233492 0.0005766870902 1.79131844e-05 - 210 4 -46.44072829 -46.4397 0.0002570727366 0.0008912594074 0.001204174406 7.190949652e-05 - 211 4 -46.43632905 -46.436374 1.123701302e-05 0.00100454144 0.001461656594 0.0001640759619 - 212 4 -46.42622449 -46.426557 8.312836801e-05 0.0009090508417 0.001359624213 9.618645017e-05 - 213 4 -46.43334095 -46.434009 0.0001670117853 0.001064727099 0.001391131194 0.0001118380718 - 214 4 -46.43528491 -46.436262 0.0002442735765 0.001381671175 0.002503347159 0.0002862586192 - 215 4 -46.43302209 -46.434505 0.0003707286996 0.001050895795 0.001041637173 1.894959196e-05 - 216 4 -46.43866543 -46.438768 2.564354619e-05 0.001038218613 0.001098285027 4.514351427e-05 - 217 4 -46.43867092 -46.440254 0.000395771139 0.0005510961745 0.0006069892915 4.783705107e-05 - 218 4 -46.42481603 -46.42286 0.0004890086715 0.0005673661918 0.0007365242698 6.506184883e-05 - 219 4 -46.41707211 -46.418078 0.0002514715464 0.001292943265 0.002028412187 0.0002017017408 - 220 4 -46.44058128 -46.440513 1.706961588e-05 0.0008917162415 0.001158189967 9.459271337e-05 - 221 4 -46.40786735 -46.409824 0.000489161666 0.000915995593 0.001759573812 0.0002027400318 - 222 4 -46.44176165 -46.440329 0.0003581615225 0.0007050784001 0.0009534044263 7.330945846e-05 - 223 4 -46.43764613 -46.43773 2.096761683e-05 0.000774718051 0.000926180328 6.358620287e-05 - 224 4 -46.41646676 -46.416525 1.456068592e-05 0.0007183862165 0.0007573664899 3.367541267e-05 - 225 4 -46.44086814 -46.440293 0.0001437843048 0.0008909024924 0.0007725386722 2.803785114e-05 - 226 4 -46.44027213 -46.43839 0.0004705337314 0.000707862011 0.0005612022808 3.305821092e-05 - 227 4 -46.44117428 -46.438916 0.0005645706045 0.0008843758872 0.001650878554 0.0001728226219 -# GSF_110.xyz - config # atoms energy DFT energy energy error force DFT force force error - 228 24 -278.9717069 -279.068761 0.004043919984 1.716820818 1.756353161 0.02195804808 - 229 24 -279.8354387 -279.784296 0.002130947227 0.8360148085 0.9057668891 0.02306494198 - 230 24 -279.920921 -279.901657 0.0008026661363 0.2958425997 0.001565946359 0.01411644584 - 231 24 -279.6113309 -279.584238 0.001128870276 1.136927478 1.035572248 0.0268109436 - 232 24 -279.8354404 -279.784283 0.002131557004 0.8360112083 0.9056396189 0.02305363685 - 233 24 -279.302435 -279.302158 1.154096848e-05 1.736732738 1.771965137 0.03376130194 - 234 24 -279.5958843 -279.55564 0.001676844981 1.457718936 1.405626506 0.02601748107 - 235 24 -279.1575825 -279.246939 0.003723187357 0.7701803397 0.4813964151 0.04047323625 - 236 24 -279.3024375 -279.302157 1.168852836e-05 1.736736025 1.771953347 0.03376039536 - 237 24 -279.1575946 -279.246935 0.003722518226 0.7692677843 0.4809484798 0.04044520421 - 238 24 -279.9208868 -279.896025 0.001035907873 0.2963184571 0.01060549839 0.01410249844 - 239 24 -279.6115695 -279.584237 0.001138852664 1.13770573 1.035836121 0.02686761528 - 240 24 -279.064529 -279.124427 0.002495750967 1.76375665 1.809545887 0.03536482035 - 241 24 -279.3562359 -279.379366 0.000963755899 1.070359933 0.8982692706 0.03586365384 - 242 24 -279.3561337 -279.37937 0.0009681791432 1.070187041 0.898081355 0.03582334182 - 243 24 -279.0645273 -279.124427 0.002495818902 1.763753116 1.809523374 0.03536507377 - 244 24 -279.920921 -279.901657 0.0008026661364 0.295842601 0.001570374478 0.01411415473 - 245 24 -279.835369 -279.79264 0.001780376182 0.7694168746 0.8392614852 0.02365583077 - 246 24 -279.9208868 -279.896025 0.001035907873 0.2963184557 0.01060243293 0.01410273421 - 247 24 -279.0819585 -279.206496 0.005189061107 0.548788431 0.005326518563 0.03225764062 - 248 24 -279.5958869 -279.55564 0.001676956181 1.457719116 1.4056319 0.02601845486 - 249 24 -279.8353874 -279.79264 0.001781141415 0.7694021079 0.8392625708 0.0236575616 -# GSF_112.xyz - config # atoms energy DFT energy energy error force DFT force force error - 250 30 -345.1958147 -345.175835 0.0006659888828 1.417827685 1.057395322 0.04924259711 - 251 30 -346.4091654 -346.361714 0.001581712645 1.014644886 1.220284939 0.04659093523 - 252 30 -345.9623042 -345.795524 0.005559340233 1.678459906 2.112860875 0.06265040874 - 253 30 -345.1047773 -345.164602 0.001994157897 1.817583015 1.765832199 0.05258058387 - 254 30 -346.5687925 -346.593523 0.0008243492414 0.5266160053 0.01148867129 0.03755504848 - 255 30 -346.4165137 -346.396186 0.0006775885975 1.101956458 0.9954683928 0.04399110332 - 256 30 -345.2521553 -345.319406 0.00224168982 2.024011434 1.772040852 0.05936118376 - 257 30 -345.5898528 -345.594794 0.0001647082757 2.048144835 1.516014157 0.06040121307 - 258 30 -346.0297765 -345.98566 0.001470549283 1.767327791 1.406252265 0.05243702855 - 259 30 -345.5053828 -345.383994 0.004046292585 1.336428571 0.963574308 0.05104895348 - 260 30 -346.5686342 -346.582564 0.0004643258311 0.5264214865 0.0126740587 0.03760971825 - 261 30 -345.4208872 -345.452139 0.001041727499 3.011665478 2.787719406 0.06345649484 - 262 30 -346.5687922 -346.593523 0.000824358736 0.5266293188 0.01148834 0.03755660424 - 263 30 -345.4303122 -345.281949 0.004945440141 1.947208063 1.873142686 0.05337069289 - 264 30 -345.95932 -345.928661 0.001021967701 2.362723976 2.100874472 0.05002108374 - 265 30 -345.0137677 -345.111657 0.003262976998 3.19378163 3.358068319 0.06536423133 - 266 30 -346.4078756 -346.367123 0.001358420679 1.085591236 1.335797131 0.04639235845 - 267 30 -346.5685864 -346.582565 0.0004659529893 0.5264879505 0.01254743735 0.03760890253 - 268 30 -344.8663405 -344.91356 0.001573984549 2.930408919 3.441834403 0.06926998065 - 269 30 -345.9709087 -345.836703 0.004473521714 1.391835251 1.608769148 0.0557054003 - 270 30 -345.0229891 -344.984307 0.001289401895 2.372016819 2.542628782 0.05571749983 - 271 30 -346.4089445 -346.393931 0.0005004501598 1.297845976 1.211680725 0.04319349672 -# Liquid.xyz - config # atoms energy DFT energy energy error force DFT force force error - 272 100 -1105.559726 -1105.601723 0.0004199683753 30.70196346 31.39853886 0.2273901869 - 273 100 -1099.629534 -1099.673012 0.0004347802829 31.98646736 32.03167218 0.2226202775 - 274 100 -1121.43168 -1121.31506 0.001166195007 21.23863202 20.81076453 0.2037539309 -# Surface.xyz - config # atoms energy DFT energy energy error force DFT force force error - 275 24 -279.9208871 -279.911828 0.0003774634676 0.2963192975 0.002753093533 0.01433131958 - 276 48 -554.241479 -555.359452 0.02329110353 1.363109446 0.003020630398 0.0573825018 - 277 40 -459.5808398 -459.216162 0.009116945293 3.33149843 5.0461364 0.07877996461 - 278 40 -460.5932467 -461.144076 0.01377073163 0.8854479197 0.005582740008 0.03813349763 - 279 24 -279.8214986 -279.635146 0.007764693427 0.982012045 1.288799837 0.01857540863 - 280 30 -346.5687933 -346.592525 0.000791056775 0.5266154723 0.008446203407 0.03726637101 - 281 30 -346.0051971 -345.744506 0.008689702509 2.266739618 3.124961367 0.06591070739 -# Volume_A15.xyz - config # atoms energy DFT energy energy error force DFT force force error - 282 8 -67.00264003 -66.990732 0.001488503243 8.978495355e-15 0 1.554167674e-15 - 283 8 -72.95775645 -72.957807 6.318335608e-06 6.173563626e-14 0 9.086337007e-15 - 284 8 -94.15079079 -94.145745 0.0006307242955 1.257001279e-14 0 1.651353601e-15 - 285 8 -94.55576971 -94.554682 0.0001359640227 7.864226848e-15 0 1.351609702e-15 - 286 8 -79.41650989 -79.438363 0.002731638712 2.922311383e-14 0 4.6112564e-15 - 287 8 -69.6319055 -69.627817 0.0005110626381 3.131450246e-15 0 5.512083845e-16 - 288 8 -82.6140242 -82.604907 0.001139650038 1.015341342e-14 0 1.573105072e-15 - 289 8 14.8871533 14.89048 0.0004158371788 2.179622647e-13 0 3.718594804e-14 - 290 8 -94.35602701 -94.367599 0.001446498413 1.681327296e-14 0 2.430951383e-15 - 291 8 -89.2494361 -89.248227 0.0001511372198 1.602695388e-14 0 2.27566808e-15 - 292 8 -87.22359357 -87.211997 0.001449571359 5.891018761e-15 0 1.023486851e-15 - 293 8 -93.64917633 -93.66897 0.002474209194 1.737070481e-15 0 2.726891929e-16 - 294 8 -7.974970896 -7.989166 0.001774387948 5.346466786e-13 0 7.317740119e-14 - 295 8 -84.99735697 -84.982834 0.001815371577 1.628985705e-15 0 2.68014777e-16 - 296 8 -92.51696442 -92.536373 0.002426072159 3.702813287e-14 0 5.965135793e-15 - 297 8 -26.79883523 -26.77612 0.002839403163 2.314654929e-13 0 3.768467838e-14 - 298 8 -77.53738473 -77.544107 0.0008402842141 2.975839122e-15 0 5.1405639e-16 - 299 8 -80.11476757 -80.114217 6.882064461e-05 9.414427891e-15 0 1.325473296e-15 - 300 8 -42.12903262 -42.143041 0.001751047533 2.610061598e-13 0 3.565304919e-14 - 301 8 -91.02990946 -91.040671 0.001345192241 8.368513177e-15 0 1.310872707e-15 - 302 8 -84.50933121 -84.499231 0.001262526145 5.714110441e-14 0 1.066782658e-14 - 303 8 -61.79844789 -61.825173 0.003340638518 6.62953849e-15 0 1.015391475e-15 - 304 8 -91.13057644 -91.156873 0.003287069749 4.719369293e-15 0 6.76336609e-16 - 305 8 -54.64916677 -54.658744 0.001197153514 1.464956394e-13 0 2.113576767e-14 - 306 8 -72.27319255 -72.277255 0.0005078062019 8.658199332e-16 0 1.410908427e-16 - 307 8 -74.9147183 -74.923334 0.001076962465 4.434219242e-15 0 6.615078855e-16 - 308 8 -64.81833247 -64.798066 0.002533308735 3.748412002e-14 0 5.576268614e-15 - 309 8 -93.03489726 -93.048342 0.001680592822 1.857310674e-14 0 2.604235054e-15 - 310 8 -64.39098013 -64.38702 0.0004950167019 5.001001166e-15 0 5.722057666e-16 - 311 8 -88.36401125 -88.352871 0.001392531574 1.47982807e-14 0 2.645507511e-15 -# Volume_BCC.xyz - config # atoms energy DFT energy energy error force DFT force force error - 312 2 -16.76594323 -16.763625 0.0011591154 3.058627912e-16 0 7.979727989e-17 - 313 2 16.31372699 16.314145 0.0002090027274 8.186542193e-13 0 2.624717573e-13 - 314 2 -21.21034402 -21.209071 0.000636508568 6.029606478e-15 0 1.688464572e-15 - 315 2 -15.7845968 -15.780524 0.002036397536 5.051396178e-14 0 1.863971217e-14 - 316 2 -18.99841038 -19.002205 0.001897311189 3.70201696e-14 0 1.247006253e-14 - 317 2 -22.6245193 -22.620568 0.001975650815 3.866866338e-15 0 1.424786215e-15 - 318 2 4.098164527 4.096885 0.0006397634862 6.334293648e-14 0 2.151519703e-14 - 319 2 56.26275599 56.26276 2.005221472e-06 2.247995559e-12 0 7.580021273e-13 - 320 2 -22.58944012 -22.585113 0.002163562406 1.113168148e-15 0 3.747002708e-16 - 321 2 -21.79724015 -21.795501 0.0008695760695 1.09344287e-15 0 3.700743415e-16 - 322 2 33.11015633 33.110078 3.916354612e-05 4.904232742e-13 0 1.492139745e-13 - 323 2 -20.88315873 -20.885998 0.001419634185 1.859416424e-15 0 7.401486831e-16 - 324 2 -23.59568898 -23.601336 0.002823509954 1.486164289e-15 0 4.916167932e-16 - 325 2 -23.20858071 -23.207313 0.0006338528204 8.900302643e-16 0 3.147520853e-16 - 326 2 -19.89310507 -19.898089 0.002491965758 8.784897284e-16 0 3.064678141e-16 - 327 2 -23.40543384 -23.405474 2.007854096e-05 9.04864091e-16 0 2.55004351e-16 - 328 2 -4.783890314 -4.781324 0.00128315718 1.026901322e-13 0 2.670433319e-14 - 329 2 -18.86311291 -18.864936 0.0009115426716 2.305551267e-16 0 7.864079758e-17 - 330 2 -17.81642588 -17.813086 0.001669937839 1.716587549e-16 0 6.245004514e-17 - 331 2 -11.19369732 -11.197201 0.001751842379 6.247077482e-14 0 2.245483891e-14 - 332 2 -23.6830862 -23.696705 0.006809399945 1.843658888e-15 0 7.087971703e-16 -# Volume_FCC.xyz - config # atoms energy DFT energy energy error force DFT force force error - 333 4 -19.07363592 -19.075994 0.0005895202867 4.838977351e-14 0 1.162785146e-14 - 334 4 -34.87911157 -34.873619 0.001373142448 2.834773835e-16 0 5.955883934e-17 - 335 4 -43.95312208 -43.950003 0.0007797711561 2.246784353e-15 0 4.928060275e-16 - 336 4 -40.99484531 -40.991909 0.0007340763059 8.408019466e-15 0 2.017013582e-15 - 337 4 -43.44688587 -43.453929 0.001760782795 1.105978561e-14 0 2.960654589e-15 - 338 4 -42.69057259 -42.686077 0.001123896575 2.15077979e-15 0 5.053466326e-16 - 339 4 -33.22567657 -33.224653 0.0002558935333 6.71927174e-16 0 1.601728009e-16 - 340 4 -26.86518979 -26.862709 0.0006201969912 3.31529179e-14 0 7.652202346e-15 - 341 4 -25.52095377 -25.519883 0.0002676922193 3.655453829e-16 0 7.199102425e-17 - 342 4 3.462101367 3.463071 0.0002424081278 1.816025861e-13 0 4.023864575e-14 - 343 4 -31.5932268 -31.59595 0.0006807997919 3.628185658e-16 0 8.557969148e-17 - 344 4 -45.10086835 -45.100466 0.0001005873411 2.465692424e-15 0 5.323999453e-16 - 345 4 -46.05341345 -46.052258 0.0002888629271 8.511696107e-16 0 1.9963776e-16 - 346 4 -29.99832749 -30.001189 0.0007153784531 3.847020655e-16 0 1.014813233e-16 - 347 4 -22.85257327 -22.8504 0.0005433170403 7.603433695e-16 0 2.026735261e-16 - 348 4 -9.165925377 -9.164691 0.0003085942037 6.355991568e-14 0 1.496321874e-14 - 349 4 -24.14844545 -24.150343 0.0004743875843 4.762376771e-16 0 9.887923813e-17 - 350 4 -46.43546878 -46.426795 0.002168445654 2.389854689e-15 0 6.508104241e-16 - 351 4 -28.45126723 -28.451145 3.055783253e-05 7.811231556e-15 0 2.246466901e-15 - 352 4 40.34134283 40.341566 5.579164045e-05 4.392900751e-13 0 1.047052708e-13 - 353 4 19.618876 19.617912 0.0002409995917 2.653013854e-13 0 4.82657932e-14 - 354 4 -26.95747287 -26.954384 0.0007722170381 5.063966549e-16 0 1.225871256e-16 - 355 4 -46.33491981 -46.323696 0.002805953551 3.211950954e-15 0 8.731441496e-16 - 356 4 -45.83316791 -45.828947 0.001055227438 1.228572267e-14 0 3.512236798e-15 - 357 4 -38.16058675 -38.16029 7.418651586e-05 1.457184241e-15 0 3.625572065e-16 - 358 4 -32.91257363 -32.919741 0.001791843199 5.73065335e-14 0 1.529158744e-14 - 359 4 -41.2675262 -41.272675 0.001287199354 7.138843467e-15 0 2.027950471e-15 - 360 4 -39.74460494 -39.753322 0.002179265661 7.861049173e-16 0 1.651275908e-16 - 361 4 -37.55548161 -37.547435 0.002011652753 1.155947671e-14 0 2.497062164e-15 - 362 4 -36.53186908 -36.52595 0.001479769423 3.660718685e-16 0 9.51206706e-17 - 363 4 -45.01550153 -45.016087 0.0001463673621 1.766214736e-15 0 4.760370339e-16 diff --git a/examples/PACKAGES/pod/Ta_Quadratic/Ta_training_errors.pod b/examples/PACKAGES/pod/Ta_Quadratic/Ta_training_errors.pod deleted file mode 100644 index b375be15d6..0000000000 --- a/examples/PACKAGES/pod/Ta_Quadratic/Ta_training_errors.pod +++ /dev/null @@ -1,20 +0,0 @@ -**************** 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.027303 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 deleted file mode 100644 index 7b932558ea..0000000000 --- a/examples/PACKAGES/pod/Ta_Quadratic/in.fitpod +++ /dev/null @@ -1,5 +0,0 @@ -# Demonstrate fitpod for POD potential - -units metal -fitpod Ta_param.pod Ta_data.pod - diff --git a/examples/PACKAGES/pod/Ta_Quadratic/log.4Jan23.fitpod.g++.1 b/examples/PACKAGES/pod/Ta_Quadratic/log.4Jan23.fitpod.g++.1 deleted file mode 100644 index 751bb0ffd8..0000000000 --- a/examples/PACKAGES/pod/Ta_Quadratic/log.4Jan23.fitpod.g++.1 +++ /dev/null @@ -1,114 +0,0 @@ -LAMMPS (22 Dec 2022) - 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 -fitting regularization parameter: 1e-10 -**************** 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.027303 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.4Jan23.pod.g++.1 b/examples/PACKAGES/pod/Ta_Quadratic/log.4Jan23.pod.g++.1 deleted file mode 100644 index 08b43e2262..0000000000 --- a/examples/PACKAGES/pod/Ta_Quadratic/log.4Jan23.pod.g++.1 +++ /dev/null @@ -1,142 +0,0 @@ -LAMMPS (22 Dec 2022) - 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.847697 0 -11.809222 13502.169 - 10 296.47494 -11.847245 0 -11.809222 13529.584 - 20 286.0918 -11.845913 0 -11.809222 13613.884 - 30 269.42275 -11.843776 0 -11.809222 13759.746 - 40 247.39423 -11.84095 0 -11.809222 13972.073 - 50 221.23976 -11.837596 0 -11.809222 14253.202 - 60 192.43252 -11.833901 0 -11.809222 14600.367 - 70 162.59874 -11.830075 0 -11.809221 15004.156 - 80 133.41531 -11.826332 0 -11.809221 15448.418 - 90 106.49785 -11.82288 0 -11.809221 15911.638 - 100 83.288219 -11.819903 0 -11.809221 16369.373 -Loop time of 1.51781 on 1 procs for 100 steps with 128 atoms - -Performance: 2.846 ns/day, 8.432 hours/ns, 65.884 timesteps/s, 8.433 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 | 1.5172 | 1.5172 | 1.5172 | 0.0 | 99.96 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.0002542 | 0.0002542 | 0.0002542 | 0.0 | 0.02 -Output | 0.00013308 | 0.00013308 | 0.00013308 | 0.0 | 0.01 -Modify | 0.00012159 | 0.00012159 | 0.00012159 | 0.0 | 0.01 -Other | | 0.0001446 | | | 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:01 diff --git a/examples/PACKAGES/pod/Ta_Quadratic/log.4Jan23.pod.g++.4 b/examples/PACKAGES/pod/Ta_Quadratic/log.4Jan23.pod.g++.4 deleted file mode 100644 index d94755ed0e..0000000000 --- a/examples/PACKAGES/pod/Ta_Quadratic/log.4Jan23.pod.g++.4 +++ /dev/null @@ -1,142 +0,0 @@ -LAMMPS (22 Dec 2022) - 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.847697 0 -11.809222 13502.169 - 10 296.47494 -11.847245 0 -11.809222 13529.584 - 20 286.0918 -11.845913 0 -11.809222 13613.884 - 30 269.42275 -11.843776 0 -11.809222 13759.746 - 40 247.39423 -11.84095 0 -11.809222 13972.073 - 50 221.23976 -11.837596 0 -11.809222 14253.202 - 60 192.43252 -11.833901 0 -11.809222 14600.367 - 70 162.59874 -11.830075 0 -11.809221 15004.156 - 80 133.41531 -11.826332 0 -11.809221 15448.418 - 90 106.49785 -11.82288 0 -11.809221 15911.638 - 100 83.288219 -11.819903 0 -11.809221 16369.373 -Loop time of 0.427448 on 4 procs for 100 steps with 128 atoms - -Performance: 10.106 ns/day, 2.375 hours/ns, 233.947 timesteps/s, 29.945 katom-step/s -97.9% 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.40622 | 0.40946 | 0.419 | 0.9 | 95.79 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.0071192 | 0.016995 | 0.020439 | 4.4 | 3.98 -Output | 0.00012904 | 0.0002071 | 0.00043132 | 0.0 | 0.05 -Modify | 3.905e-05 | 4.8089e-05 | 5.5714e-05 | 0.0 | 0.01 -Other | | 0.0007341 | | | 0.17 - -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/potentials/Ta_coeff.pod b/potentials/Ta_coeff.pod index 5222e9e600..ab5e5fd43a 100644 --- a/potentials/Ta_coeff.pod +++ b/potentials/Ta_coeff.pod @@ -1,33 +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 +model_coefficients: 32 0 0 +-4.45745 +29.40034 +-13.69439 +-0.32907 +-0.14786 +-1.35221 +-0.59315 +-26.30409 +-33.37233 +162.42473 +144.67248 +-149.50021 +1.78603 +2.49026 +-11.04768 +-11.14333 +12.40537 +0.48284 +0.39345 +-2.25812 +-1.38908 +1.31551 +0.02974 +-0.05094 +-0.21177 +0.12127 +0.23170 +0.02426 +-0.15305 +-0.10803 +0.25628 +0.01291 diff --git a/potentials/Ta_param.pod b/potentials/Ta_param.pod index 888dcb1b34..f5dbaf9254 100644 --- a/potentials/Ta_param.pod +++ b/potentials/Ta_param.pod @@ -1,4 +1,3 @@ -# 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 @@ -11,28 +10,37 @@ rin 1.0 # outer cut-off radius rcut 5.0 +# use only for enviroment-adaptive potentials +number_of_environment_clusters 1 + +# principal_components of local descriptors +number_of_principal_components 2 + # 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 +threebody_angular_degree 4 -# four-body linear SNAP potential -fourbody_snap_twojmax 0 +# four-body linear POD potential +fourbody_number_radial_basis_functions 0 +fourbody_angular_degree 0 -# quadratic POD potential -quadratic_pod_potential 0 +# five-body linear POD potential +fivebody_number_radial_basis_functions 0 +fivebody_angular_degree 0 + +# six-body linear POD potential +sixbody_number_radial_basis_functions 0 +sixbody_angular_degree 0 + +# seven-body linear POD potential +sevenbody_number_radial_basis_functions 0 +sevenbody_angular_degree 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 2e89eb79d3..39c5de7555 100644 --- a/src/.gitignore +++ b/src/.gitignore @@ -109,6 +109,8 @@ /pair_pod.cpp /pair_pod.h +/eapod.cpp +/eapod.h /fitpod_command.cpp /fitpod_command.h /mlpod.cpp @@ -249,6 +251,14 @@ /compute_grid.h /compute_grid_local.cpp /compute_grid_local.h +/compute_pod_atom.cpp +/compute_pod_atom.h +/compute_pod_global.cpp +/compute_pod_global.h +/compute_pod_local.cpp +/compute_pod_local.h +/compute_podd_atom.cpp +/compute_podd_atom.h /compute_sna_atom.cpp /compute_sna_atom.h /compute_snad_atom.cpp diff --git a/src/Depend.sh b/src/Depend.sh index 280fcdc4d8..e55b100975 100755 --- a/src/Depend.sh +++ b/src/Depend.sh @@ -185,6 +185,10 @@ if (test $1 = "ML-PACE") then depend KOKKOS fi +if (test $1 = "ML-POD") then + depend KOKKOS +fi + if (test $1 = "ML-SNAP") then depend ML-IAP depend KOKKOS diff --git a/src/FEP/fix_adapt_fep.cpp b/src/FEP/fix_adapt_fep.cpp index 668a3c2260..d343c16aae 100644 --- a/src/FEP/fix_adapt_fep.cpp +++ b/src/FEP/fix_adapt_fep.cpp @@ -92,9 +92,9 @@ FixAdaptFEP::FixAdaptFEP(LAMMPS *lmp, int narg, char **arg) : adapt[nadapt].pstyle = utils::strdup(arg[iarg+1]); adapt[nadapt].pparam = utils::strdup(arg[iarg+2]); utils::bounds_typelabel(FLERR, arg[iarg+3], 1, atom->ntypes, - adapt[nadapt].ilo, adapt[nadapt].ihi, error, lmp, Atom::ATOM); + adapt[nadapt].ilo, adapt[nadapt].ihi, lmp, Atom::ATOM); utils::bounds_typelabel(FLERR, arg[iarg+4], 1, atom->ntypes, - adapt[nadapt].jlo, adapt[nadapt].jhi, error, lmp, Atom::ATOM); + adapt[nadapt].jlo, adapt[nadapt].jhi, lmp, Atom::ATOM); // switch i,j if i > j, if wildcards were not used @@ -131,7 +131,7 @@ FixAdaptFEP::FixAdaptFEP(LAMMPS *lmp, int narg, char **arg) : chgflag = 1; } else error->all(FLERR,"Illegal fix adapt/fep command"); utils::bounds_typelabel(FLERR, arg[iarg+2], 1, atom->ntypes, - adapt[nadapt].ilo, adapt[nadapt].ihi, error, lmp, Atom::ATOM); + adapt[nadapt].ilo, adapt[nadapt].ihi, lmp, Atom::ATOM); if (utils::strmatch(arg[iarg+3],"^v_")) { adapt[nadapt].var = utils::strdup(arg[iarg+3]+2); } else error->all(FLERR,"Illegal fix adapt/fep command"); diff --git a/src/GRANULAR/fix_pour.cpp b/src/GRANULAR/fix_pour.cpp index 2dcaf9069f..a4e76aa87a 100644 --- a/src/GRANULAR/fix_pour.cpp +++ b/src/GRANULAR/fix_pour.cpp @@ -703,7 +703,7 @@ void FixPour::pre_exchange() // rebuild atom map if (atom->map_style != Atom::MAP_NONE) { - if (success) atom->map_init(); + atom->map_init(); atom->map_set(); } diff --git a/src/INTEL/fix_nh_intel.cpp b/src/INTEL/fix_nh_intel.cpp index 5455576a1c..8de52835e2 100644 --- a/src/INTEL/fix_nh_intel.cpp +++ b/src/INTEL/fix_nh_intel.cpp @@ -26,6 +26,7 @@ #include "memory.h" #include "modify.h" #include "neighbor.h" +#include "respa.h" #include "update.h" #include @@ -335,8 +336,13 @@ void FixNHIntel::reset_dt() // If using respa, then remap is performed in innermost level - if (utils::strmatch(update->integrate_style,"^respa")) + if (utils::strmatch(update->integrate_style,"^respa")) { + auto respa_ptr = dynamic_cast(update->integrate); + if (!respa_ptr) error->all(FLERR, "Failure to access Respa style {}", update->integrate_style); + nlevels_respa = respa_ptr->nlevels; + step_respa = respa_ptr->step; dto = 0.5*step_respa[0]; + } if (pstat_flag) pdrag_factor = 1.0 - (update->dt * p_freq_max * drag / nc_pchain); diff --git a/src/KOKKOS/Install.sh b/src/KOKKOS/Install.sh index 25a9bcd0c2..aa920981e2 100755 --- a/src/KOKKOS/Install.sh +++ b/src/KOKKOS/Install.sh @@ -358,6 +358,8 @@ action pair_multi_lucy_rx_kokkos.cpp pair_multi_lucy_rx.cpp action pair_multi_lucy_rx_kokkos.h pair_multi_lucy_rx.h action pair_pace_extrapolation_kokkos.cpp pair_pace_extrapolation.cpp action pair_pace_extrapolation_kokkos.h pair_pace_extrapolation.h +action pair_pod_kokkos.cpp pair_pod.cpp +action pair_pod_kokkos.h pair_pod.h action pair_pace_kokkos.cpp pair_pace.cpp action pair_pace_kokkos.h pair_pace.h action pair_reaxff_kokkos.cpp pair_reaxff.cpp diff --git a/src/KOKKOS/pair_buck_kokkos.cpp b/src/KOKKOS/pair_buck_kokkos.cpp index 88b0445dc8..4e3debaacb 100644 --- a/src/KOKKOS/pair_buck_kokkos.cpp +++ b/src/KOKKOS/pair_buck_kokkos.cpp @@ -138,9 +138,7 @@ template template KOKKOS_INLINE_FUNCTION F_FLOAT PairBuckKokkos:: -compute_fpair(const F_FLOAT& rsq, const int& i, const int&j, const int& itype, const int& jtype) const { - (void) i; - (void) j; +compute_fpair(const F_FLOAT &rsq, const int &, const int &, const int &itype, const int &jtype) const { const F_FLOAT r2inv = 1.0/rsq; const F_FLOAT r6inv = r2inv*r2inv*r2inv; const F_FLOAT r = sqrt(rsq); @@ -157,9 +155,7 @@ template template KOKKOS_INLINE_FUNCTION F_FLOAT PairBuckKokkos:: -compute_evdwl(const F_FLOAT& rsq, const int& i, const int&j, const int& itype, const int& jtype) const { - (void) i; - (void) j; +compute_evdwl(const F_FLOAT &rsq, const int &, const int &, const int &itype, const int &jtype) const { const F_FLOAT r2inv = 1.0/rsq; const F_FLOAT r6inv = r2inv*r2inv*r2inv; const F_FLOAT r = sqrt(rsq); diff --git a/src/KOKKOS/pair_lj_class2_coul_cut_kokkos.cpp b/src/KOKKOS/pair_lj_class2_coul_cut_kokkos.cpp index 7d2db17440..de4d3b9df8 100644 --- a/src/KOKKOS/pair_lj_class2_coul_cut_kokkos.cpp +++ b/src/KOKKOS/pair_lj_class2_coul_cut_kokkos.cpp @@ -155,10 +155,8 @@ template template KOKKOS_INLINE_FUNCTION F_FLOAT PairLJClass2CoulCutKokkos:: -compute_fpair(const F_FLOAT& rsq, const int& i, const int&j, - const int& itype, const int& jtype) const { - (void) i; - (void) j; +compute_fpair(const F_FLOAT &rsq, const int &, const int &, + const int &itype, const int &jtype) const { const F_FLOAT r2inv = 1.0/rsq; const F_FLOAT rinv = sqrt(r2inv); const F_FLOAT r3inv = r2inv*rinv; @@ -178,9 +176,9 @@ template template KOKKOS_INLINE_FUNCTION F_FLOAT PairLJClass2CoulCutKokkos:: -compute_fcoul(const F_FLOAT& rsq, const int& /*i*/, const int&j, - const int& /*itype*/, const int& /*jtype*/, - const F_FLOAT& factor_coul, const F_FLOAT& qtmp) const { +compute_fcoul(const F_FLOAT &rsq, const int &/*i*/, const int &j, + const int &/*itype*/, const int &/*jtype*/, + const F_FLOAT &factor_coul, const F_FLOAT &qtmp) const { const F_FLOAT r2inv = 1.0/rsq; const F_FLOAT rinv = sqrt(r2inv); F_FLOAT forcecoul; diff --git a/src/KOKKOS/pair_lj_class2_coul_long_kokkos.cpp b/src/KOKKOS/pair_lj_class2_coul_long_kokkos.cpp index b5d55a023a..04dc746f09 100644 --- a/src/KOKKOS/pair_lj_class2_coul_long_kokkos.cpp +++ b/src/KOKKOS/pair_lj_class2_coul_long_kokkos.cpp @@ -160,10 +160,8 @@ template template KOKKOS_INLINE_FUNCTION F_FLOAT PairLJClass2CoulLongKokkos:: -compute_fpair(const F_FLOAT& rsq, const int& i, const int&j, - const int& itype, const int& jtype) const { - (void) i; - (void) j; +compute_fpair(const F_FLOAT &rsq, const int &, const int &, + const int &itype, const int &jtype) const { const F_FLOAT r2inv = 1.0/rsq; const F_FLOAT rinv = sqrt(r2inv); const F_FLOAT r3inv = r2inv*rinv; @@ -183,9 +181,9 @@ template template KOKKOS_INLINE_FUNCTION F_FLOAT PairLJClass2CoulLongKokkos:: -compute_fcoul(const F_FLOAT& rsq, const int& /*i*/, const int&j, - const int& /*itype*/, const int& /*jtype*/, - const F_FLOAT& factor_coul, const F_FLOAT& qtmp) const { +compute_fcoul(const F_FLOAT &rsq, const int &/*i*/, const int &j, + const int &/*itype*/, const int &/*jtype*/, + const F_FLOAT &factor_coul, const F_FLOAT &qtmp) const { if (Specialisation::DoTable && rsq > tabinnersq) { union_int_float_t rsq_lookup; rsq_lookup.f = rsq; diff --git a/src/KOKKOS/pair_lj_class2_kokkos.cpp b/src/KOKKOS/pair_lj_class2_kokkos.cpp index 9ee1b93bd8..47bd3fc108 100644 --- a/src/KOKKOS/pair_lj_class2_kokkos.cpp +++ b/src/KOKKOS/pair_lj_class2_kokkos.cpp @@ -139,9 +139,7 @@ template template KOKKOS_INLINE_FUNCTION F_FLOAT PairLJClass2Kokkos:: -compute_fpair(const F_FLOAT& rsq, const int& i, const int&j, const int& itype, const int& jtype) const { - (void) i; - (void) j; +compute_fpair(const F_FLOAT &rsq, const int &, const int &, const int &itype, const int &jtype) const { const F_FLOAT r2inv = 1.0/rsq; const F_FLOAT rinv = sqrt(r2inv); const F_FLOAT r3inv = r2inv*rinv; @@ -159,9 +157,7 @@ template template KOKKOS_INLINE_FUNCTION F_FLOAT PairLJClass2Kokkos:: -compute_evdwl(const F_FLOAT& rsq, const int& i, const int&j, const int& itype, const int& jtype) const { - (void) i; - (void) j; +compute_evdwl(const F_FLOAT &rsq, const int &, const int &, const int &itype, const int &jtype) const { const F_FLOAT r2inv = 1.0/rsq; const F_FLOAT rinv = sqrt(r2inv); const F_FLOAT r3inv = r2inv*rinv; diff --git a/src/KOKKOS/pair_lj_cut_kokkos.cpp b/src/KOKKOS/pair_lj_cut_kokkos.cpp index 566d74088c..ccc56a707d 100644 --- a/src/KOKKOS/pair_lj_cut_kokkos.cpp +++ b/src/KOKKOS/pair_lj_cut_kokkos.cpp @@ -133,9 +133,7 @@ template template KOKKOS_INLINE_FUNCTION F_FLOAT PairLJCutKokkos:: -compute_fpair(const F_FLOAT& rsq, const int& i, const int&j, const int& itype, const int& jtype) const { - (void) i; - (void) j; +compute_fpair(const F_FLOAT &rsq, const int &, const int &, const int &itype, const int &jtype) const { const F_FLOAT r2inv = 1.0/rsq; const F_FLOAT r6inv = r2inv*r2inv*r2inv; @@ -150,9 +148,7 @@ template template KOKKOS_INLINE_FUNCTION F_FLOAT PairLJCutKokkos:: -compute_evdwl(const F_FLOAT& rsq, const int& i, const int&j, const int& itype, const int& jtype) const { - (void) i; - (void) j; +compute_evdwl(const F_FLOAT &rsq, const int &, const int &, const int &itype, const int &jtype) const { const F_FLOAT r2inv = 1.0/rsq; const F_FLOAT r6inv = r2inv*r2inv*r2inv; diff --git a/src/KOKKOS/pair_lj_spica_kokkos.cpp b/src/KOKKOS/pair_lj_spica_kokkos.cpp index a6a31b31a2..1f6cccf073 100644 --- a/src/KOKKOS/pair_lj_spica_kokkos.cpp +++ b/src/KOKKOS/pair_lj_spica_kokkos.cpp @@ -138,39 +138,13 @@ template template KOKKOS_INLINE_FUNCTION F_FLOAT PairLJSPICAKokkos:: -compute_fpair(const F_FLOAT& rsq, const int& i, const int&j, const int& itype, const int& jtype) const { - (void) i; - (void) j; +compute_fpair(const F_FLOAT &rsq, const int &, const int &, const int &itype, const int &jtype) const { const F_FLOAT r2inv = 1.0/rsq; const int ljt = (STACKPARAMS?m_params[itype][jtype].lj_type:params(itype,jtype).lj_type); const F_FLOAT lj_1 = (STACKPARAMS?m_params[itype][jtype].lj1:params(itype,jtype).lj1); const F_FLOAT lj_2 = (STACKPARAMS?m_params[itype][jtype].lj2:params(itype,jtype).lj2); - /*if (ljt == LJ12_4) { - - const F_FLOAT r4inv=r2inv*r2inv; - return r4inv*(lj_1*r4inv*r4inv - lj_2) * r2inv; - - } else if (ljt == LJ9_6) { - - const F_FLOAT r3inv = r2inv*sqrt(r2inv); - const F_FLOAT r6inv = r3inv*r3inv; - return r6inv*(lj_1*r3inv - lj_2) * r2inv; - - } else if (ljt == LJ12_6) { - - const double r6inv = r2inv*r2inv*r2inv; - return r6inv*(lj_1*r6inv - lj_2) * r2inv; - - } else if (ljt == LJ12_5) { - - const F_FLOAT r5inv = r2inv*r2inv*sqrt(r2inv); - const F_FLOAT r7inv = r5inv*r2inv; - return r5inv*(lj_1*r7inv - lj_2) * r2inv; - - } - if (ljt!=LJ12_4 && ljt!=LJ9_6 && ljt!=LJ12_6 && ljt!=LJ12_5) return 0.0;*/ const F_FLOAT r4inv=r2inv*r2inv; const F_FLOAT r6inv=r2inv*r4inv; const F_FLOAT a = ljt==LJ12_4?r4inv:(ljt==LJ12_5?r4inv*sqrt(r2inv):r6inv); @@ -182,9 +156,7 @@ template template KOKKOS_INLINE_FUNCTION F_FLOAT PairLJSPICAKokkos:: -compute_evdwl(const F_FLOAT& rsq, const int& i, const int&j, const int& itype, const int& jtype) const { - (void) i; - (void) j; +compute_evdwl(const F_FLOAT &rsq, const int &, const int &, const int &itype, const int &jtype) const { const F_FLOAT r2inv = 1.0/rsq; const int ljt = (STACKPARAMS?m_params[itype][jtype].lj_type:params(itype,jtype).lj_type); diff --git a/src/KOKKOS/pair_morse_kokkos.cpp b/src/KOKKOS/pair_morse_kokkos.cpp index f0a5415d60..581311a965 100644 --- a/src/KOKKOS/pair_morse_kokkos.cpp +++ b/src/KOKKOS/pair_morse_kokkos.cpp @@ -140,9 +140,7 @@ template template KOKKOS_INLINE_FUNCTION F_FLOAT PairMorseKokkos:: -compute_fpair(const F_FLOAT& rsq, const int& i, const int&j, const int& itype, const int& jtype) const { - (void) i; - (void) j; +compute_fpair(const F_FLOAT &rsq, const int &, const int &, const int &itype, const int &jtype) const { const F_FLOAT rr = sqrt(rsq); const F_FLOAT r0 = STACKPARAMS ? m_params[itype][jtype].r0 : params(itype,jtype).r0; const F_FLOAT d0 = STACKPARAMS ? m_params[itype][jtype].d0 : params(itype,jtype).d0; @@ -162,9 +160,7 @@ template template KOKKOS_INLINE_FUNCTION F_FLOAT PairMorseKokkos:: -compute_evdwl(const F_FLOAT& rsq, const int& i, const int&j, const int& itype, const int& jtype) const { - (void) i; - (void) j; +compute_evdwl(const F_FLOAT &rsq, const int &, const int &, const int &itype, const int &jtype) const { const F_FLOAT rr = sqrt(rsq); const F_FLOAT r0 = STACKPARAMS ? m_params[itype][jtype].r0 : params(itype,jtype).r0; const F_FLOAT d0 = STACKPARAMS ? m_params[itype][jtype].d0 : params(itype,jtype).d0; diff --git a/src/KOKKOS/pair_pod_kokkos.cpp b/src/KOKKOS/pair_pod_kokkos.cpp new file mode 100644 index 0000000000..b0cab5a1df --- /dev/null +++ b/src/KOKKOS/pair_pod_kokkos.cpp @@ -0,0 +1,1852 @@ +// clang-format off +/* -*- 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 + aE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Contributing author: Ngoc Cuong Nguyen (MIT) +------------------------------------------------------------------------- */ + +#include "pair_pod_kokkos.h" + +#include "atom_kokkos.h" +#include "atom_masks.h" +#include "comm.h" +#include "error.h" +#include "force.h" +#include "kokkos.h" +#include "math_const.h" +#include "memory_kokkos.h" +#include "neighbor_kokkos.h" +#include "neigh_request.h" + +#include +#include + +#include "eapod.h" + +using namespace LAMMPS_NS; +using namespace MathConst; +using MathSpecial::powint; + +enum{FS,FS_SHIFTEDSCALED}; + +/* ---------------------------------------------------------------------- */ + +template +PairPODKokkos::PairPODKokkos(LAMMPS *lmp) : PairPOD(lmp) +{ + respa_enable = 0; + + kokkosable = 1; + atomKK = (AtomKokkos *) atom; + execution_space = ExecutionSpaceFromDevice::space; + datamask_read = EMPTY_MASK; + datamask_modify = EMPTY_MASK; + + ni = 0; + nimax = 0; + nij = 0; + nijmax = 0; + atomBlockSize = 2048; + nAtomBlocks = 0; + timing = 0; + for (int i=0; i<100; i++) comptime[i] = 0; + + host_flag = (execution_space == Host); +} + +/* ---------------------------------------------------------------------- + check if allocated, since class can be destructed when incomplete +------------------------------------------------------------------------- */ + +template +PairPODKokkos::~PairPODKokkos() +{ + if (copymode) return; + + memoryKK->destroy_kokkos(k_eatom,eatom); + memoryKK->destroy_kokkos(k_vatom,vatom); +} + +/* ---------------------------------------------------------------------- + init specific to this pair style +------------------------------------------------------------------------- */ + +template +void PairPODKokkos::init_style() +{ + if (host_flag) { + if (lmp->kokkos->nthreads > 1) + error->all(FLERR,"Pair style pod/kk can currently only run on a single " + "CPU thread"); + + PairPOD::init_style(); + return; + } + + if (atom->tag_enable == 0) error->all(FLERR, "Pair style POD requires atom IDs"); + if (force->newton_pair == 0) error->all(FLERR, "Pair style POD requires newton pair on"); + + neighflag = lmp->kokkos->neighflag; + + auto request = neighbor->add_request(this, NeighConst::REQ_FULL); + request->set_kokkos_host(std::is_same_v && + !std::is_same_v); + request->set_kokkos_device(std::is_same_v); + if (neighflag == FULL) + error->all(FLERR,"Must use half neighbor list style with pair pace/kk"); +} + +/* ---------------------------------------------------------------------- + init for one type pair i,j and corresponding j,i +------------------------------------------------------------------------- */ + +template +double PairPODKokkos::init_one(int i, int j) +{ + double cutone = PairPOD::init_one(i,j); + + k_cutsq.h_view(i,j) = k_cutsq.h_view(j,i) = cutone*cutone; + k_cutsq.template modify(); + + return cutone; +} + +/* ---------------------------------------------------------------------- + set coeffs for one or more type pairs +------------------------------------------------------------------------- */ + +template +void PairPODKokkos::coeff(int narg, char **arg) +{ + if (narg < 5) utils::missing_cmd_args(FLERR, "pair_coeff", error); + + PairPOD::coeff(narg,arg); // create a PairPOD object + + copy_from_pod_class(PairPOD::fastpodptr); // copy parameters and arrays from pod class + + int n = atom->ntypes + 1; + MemKK::realloc_kokkos(d_map, "pair_pod:map", n); + + MemKK::realloc_kokkos(k_cutsq, "pair_pod:cutsq", n, n); + d_cutsq = k_cutsq.template view(); + + MemKK::realloc_kokkos(k_scale, "pair_pod:scale", n, n); + d_scale = k_scale.template view(); + + // Set up element lists + + auto h_map = Kokkos::create_mirror_view(d_map); + + for (int i = 1; i <= atom->ntypes; i++) + h_map(i) = map[i]; + + Kokkos::deep_copy(d_map,h_map); +} + +/* ---------------------------------------------------------------------- */ + +template +void PairPODKokkos::allocate() +{ + PairPOD::allocate(); +} + +template +struct FindMaxNumNeighs { + typedef DeviceType device_type; + NeighListKokkos k_list; + + FindMaxNumNeighs(NeighListKokkos* nl): k_list(*nl) {} + ~FindMaxNumNeighs() {k_list.copymode = 1;} + + KOKKOS_INLINE_FUNCTION + void operator() (const int& ii, int& max_neighs) const { + const int i = k_list.d_ilist[ii]; + const int num_neighs = k_list.d_numneigh[i]; + if (max_neighs +void PairPODKokkos::compute(int eflag_in, int vflag_in) +{ + eflag = eflag_in; + vflag = vflag_in; + + if (neighflag == FULL) no_virial_fdotr_compute = 1; + + ev_init(eflag,vflag,0); + + // reallocate per-atom arrays if necessary + if (eflag_atom) { + memoryKK->destroy_kokkos(k_eatom,eatom); + memoryKK->create_kokkos(k_eatom,eatom,maxeatom,"pair:eatom"); + d_eatom = k_eatom.view(); + } + if (vflag_atom) { + memoryKK->destroy_kokkos(k_vatom,vatom); + memoryKK->create_kokkos(k_vatom,vatom,maxvatom,"pair:vatom"); + d_vatom = k_vatom.view(); + } + + copymode = 1; + int newton_pair = force->newton_pair; + if (newton_pair == false) + error->all(FLERR,"PairPODKokkos requires 'newton on'"); + + atomKK->sync(execution_space,X_MASK|F_MASK|TYPE_MASK); + x = atomKK->k_x.view(); + f = atomKK->k_f.view(); + type = atomKK->k_type.view(); + + maxneigh = 0; + if (host_flag) { + inum = list->inum; + d_numneigh = typename ArrayTypes::t_int_1d("pair_pod:numneigh",inum); + for (int i=0; inumneigh[i]; + d_ilist = typename ArrayTypes::t_int_1d("pair_pod:ilist",inum); + for (int i=0; iilist[i]; + + int maxn = 0; + for (int i=0; inumneigh[i]) maxn = list->numneigh[i]; + MemoryKokkos::realloc_kokkos(d_neighbors,"neighlist:neighbors",inum,maxn); + for (int i=0; iilist[i]; + int m = list->numneigh[gi]; + if (maxneighfirstneigh[gi][l]; + } + } + } + else { + NeighListKokkos* k_list = static_cast*>(list); + d_numneigh = k_list->d_numneigh; + d_neighbors = k_list->d_neighbors; + d_ilist = k_list->d_ilist; + inum = list->inum; + int maxneighs; + Kokkos::parallel_reduce("PairPODKokkos::find_max_neighs",inum, FindMaxNumNeighs(k_list), Kokkos::Max(maxneighs)); + maxneigh = maxneighs; + } + + auto begin = std::chrono::high_resolution_clock::now(); + auto end = std::chrono::high_resolution_clock::now(); + + // determine the number of atom blocks and divide atoms into blocks + nAtomBlocks = calculateNumberOfIntervals(inum, atomBlockSize); + if (nAtomBlocks > 100) nAtomBlocks = 100; + divideInterval(atomBlocks, inum, nAtomBlocks); + + int nmax = 0; + for (int block=0; block(end-begin).count()/1e6; + + begin = std::chrono::high_resolution_clock::now(); + // obtain the neighbors within rcut + NeighborList(rij, numij, typeai, idxi, ai, aj, ti, tj, rcutsq, gi1, ni); + Kokkos::fence(); + end = std::chrono::high_resolution_clock::now(); + comptime[1] += std::chrono::duration_cast(end-begin).count()/1e6; + + // compute atomic energy and force for the current atom block + begin = std::chrono::high_resolution_clock::now(); + blockatom_energyforce(ei, fij, ni, nij); + Kokkos::fence(); + end = std::chrono::high_resolution_clock::now(); + comptime[2] += std::chrono::duration_cast(end-begin).count()/1e6; + + begin = std::chrono::high_resolution_clock::now(); + // tally atomic energy to global energy + tallyenergy(ei, gi1, ni); + + // tally atomic force to global force + tallyforce(fij, ai, aj, nij); + + // tally atomic stress + if (vflag) { + tallystress(fij, rij, ai, aj, nij); + } + Kokkos::fence(); + end = std::chrono::high_resolution_clock::now(); + comptime[3] += std::chrono::duration_cast(end-begin).count()/1e6; + + //savedatafordebugging(); + } + + if (vflag_fdotr) pair_virial_fdotr_compute(this); + + if (eflag_atom) { + k_eatom.template modify(); + k_eatom.template sync(); + } + + if (vflag_atom) { + k_vatom.template modify(); + k_vatom.template sync(); + } + + atomKK->modified(execution_space,F_MASK); + + copymode = 0; +} + +template +void PairPODKokkos::copy_from_pod_class(EAPOD *podptr) +{ + nelements = podptr->nelements; // number of elements + onebody = podptr->onebody; // one-body descriptors + besseldegree = podptr->besseldegree; // degree of Bessel functions + inversedegree = podptr->inversedegree; // degree of inverse functions + nbesselpars = podptr->nbesselpars; // number of Bessel parameters + nCoeffPerElement = podptr->nCoeffPerElement; // number of coefficients per element = (nl1 + Mdesc*nClusters) + ns = podptr->ns; // number of snapshots for radial basis functions + nl1 = podptr->nl1; // number of one-body descriptors + nl2 = podptr->nl2; // number of two-body descriptors + nl3 = podptr->nl3; // number of three-body descriptors + nl4 = podptr->nl4; // number of four-body descriptors + nl23 = podptr->nl23; // number of two-body x three-body descriptors + nl33 = podptr->nl33; // number of three-body x three-body descriptors + nl34 = podptr->nl34; // number of three-body x four-body descriptors + nl44 = podptr->nl44; // number of four-body x four-body descriptors + nl = podptr->nl; // number of local descriptors + nrbf2 = podptr->nrbf2; + nrbf3 = podptr->nrbf3; + nrbf4 = podptr->nrbf4; + nrbfmax = podptr->nrbfmax; // number of radial basis functions + nabf3 = podptr->nabf3; // number of three-body angular basis functions + nabf4 = podptr->nabf4; // number of four-body angular basis functions + K3 = podptr->K3; // number of three-body monomials + K4 = podptr->K4; // number of four-body monomials + Q4 = podptr->Q4; // number of four-body monomial coefficients + nClusters = podptr->nClusters; // number of environment clusters + nComponents = podptr->nComponents; // number of principal components + Mdesc = podptr->Mdesc; // number of base descriptors + + rin = podptr->rin; + rcut = podptr->rcut; + rmax = rcut - rin; + + MemKK::realloc_kokkos(besselparams, "pair_pod:besselparams", 3); + auto h_besselparams = Kokkos::create_mirror_view(besselparams); + h_besselparams[0] = podptr->besselparams[0]; + h_besselparams[1] = podptr->besselparams[1]; + h_besselparams[2] = podptr->besselparams[2]; + Kokkos::deep_copy(besselparams, h_besselparams); + + MemKK::realloc_kokkos(elemindex, "pair_pod:elemindex", nelements*nelements); + auto h_elemindex = Kokkos::create_mirror_view(elemindex); + for (int i=0; ielemindex[i]; + Kokkos::deep_copy(elemindex, h_elemindex); + + MemKK::realloc_kokkos(Phi, "pair_pod:Phi", ns*ns); + auto h_Phi = Kokkos::create_mirror_view(Phi); + for (int i=0; iPhi[i]; + Kokkos::deep_copy(Phi, h_Phi); + + MemKK::realloc_kokkos(coefficients, "pair_pod:coefficients", nCoeffPerElement * nelements); + auto h_coefficients = Kokkos::create_mirror_view(coefficients); + for (int i=0; icoeff[i]; + Kokkos::deep_copy(coefficients, h_coefficients); + + if (nClusters > 1) { + MemKK::realloc_kokkos(Proj, "pair_pod:Proj", Mdesc * nComponents * nelements); + auto h_Proj = Kokkos::create_mirror_view(Proj); + for (int i=0; iProj[i]; + Kokkos::deep_copy(Proj, h_Proj); + + MemKK::realloc_kokkos(Centroids, "pair_pod:Centroids", nClusters * nComponents * nelements); + auto h_Centroids = Kokkos::create_mirror_view(Centroids); + for (int i=0; iCentroids[i]; + Kokkos::deep_copy(Centroids, h_Centroids); + } + + MemKK::realloc_kokkos(pn3, "pair_pod:pn3", nabf3+1); // array stores the number of monomials for each degree + MemKK::realloc_kokkos(pq3, "pair_pod:pq3", K3*2); // array needed for the recursive computation of the angular basis functions + MemKK::realloc_kokkos(pc3, "pair_pod:pc3", K3); // array needed for the computation of the three-body descriptors + MemKK::realloc_kokkos(pa4, "pair_pod:pa4", nabf4+1); // this array is a subset of the array {0, 1, 4, 10, 19, 29, 47, 74, 89, 119, 155, 209, 230, 275, 335, 425, 533, 561, 624, 714, 849, 949, 1129, 1345} + MemKK::realloc_kokkos(pb4, "pair_pod:pb4", Q4*3); // array stores the indices of the monomials needed for the computation of the angular basis functions + MemKK::realloc_kokkos(pc4, "pair_pod:pc4", Q4); // array of monomial coefficients needed for the computation of the four-body descriptors + + auto h_pn3 = Kokkos::create_mirror_view(pn3); + for (int i=0; ipn3[i]; + Kokkos::deep_copy(pn3, h_pn3); + + auto h_pq3 = Kokkos::create_mirror_view(pq3); + for (int i = 0; i < K3*2; i++) h_pq3[i] = podptr->pq3[i]; + Kokkos::deep_copy(pq3, h_pq3); + + auto h_pc3 = Kokkos::create_mirror_view(pc3); + for (int i = 0; i < K3; i++) h_pc3[i] = podptr->pc3[i]; + Kokkos::deep_copy(pc3, h_pc3); + + auto h_pa4 = Kokkos::create_mirror_view(pa4); + for (int i = 0; i < nabf4+1; i++) h_pa4[i] = podptr->pa4[i]; + Kokkos::deep_copy(pa4, h_pa4); + + auto h_pb4 = Kokkos::create_mirror_view(pb4); + for (int i = 0; i < Q4*3; i++) h_pb4[i] = podptr->pb4[i]; + Kokkos::deep_copy(pb4, h_pb4); + + auto h_pc4 = Kokkos::create_mirror_view(pc4); + for (int i = 0; i < Q4; i++) h_pc4[i] = podptr->pc4[i]; + Kokkos::deep_copy(pc4, h_pc4); + + MemKK::realloc_kokkos(ind33l, "pair_pod:ind33l", nl33); + MemKK::realloc_kokkos(ind33r, "pair_pod:ind33r", nl33); + MemKK::realloc_kokkos(ind34l, "pair_pod:ind34l", nl34); + MemKK::realloc_kokkos(ind34r, "pair_pod:ind34r", nl34); + MemKK::realloc_kokkos(ind44l, "pair_pod:ind44l", nl44); + MemKK::realloc_kokkos(ind44r, "pair_pod:ind44r", nl44); + + auto h_ind33l = Kokkos::create_mirror_view(ind33l); + for (int i = 0; i < nl33; i++) h_ind33l[i] = podptr->ind33l[i]; + Kokkos::deep_copy(ind33l, h_ind33l); + + auto h_ind33r = Kokkos::create_mirror_view(ind33r); + for (int i = 0; i < nl33; i++) h_ind33r[i] = podptr->ind33r[i]; + Kokkos::deep_copy(ind33r, h_ind33r); + + auto h_ind34l = Kokkos::create_mirror_view(ind34l); + for (int i = 0; i < nl34; i++) h_ind34l[i] = podptr->ind34l[i]; + Kokkos::deep_copy(ind34l, h_ind34l); + + auto h_ind34r = Kokkos::create_mirror_view(ind34r); + for (int i = 0; i < nl34; i++) h_ind34r[i] = podptr->ind34r[i]; + Kokkos::deep_copy(ind34r, h_ind34r); + + auto h_ind44l = Kokkos::create_mirror_view(ind44l); + for (int i = 0; i < nl44; i++) h_ind44l[i] = podptr->ind44l[i]; + Kokkos::deep_copy(ind44l, h_ind44l); + + auto h_ind44r = Kokkos::create_mirror_view(ind44r); + for (int i = 0; i < nl44; i++) h_ind44r[i] = podptr->ind44r[i]; + Kokkos::deep_copy(ind44r, h_ind44r); +} + +template +void PairPODKokkos::divideInterval(int *intervals, int N, int M) +{ + int intervalSize = N / M; // Basic size of each interval + int remainder = N % M; // Remainder to distribute + intervals[0] = 1; // Start of the first interval + for (int i = 1; i <= M; i++) { + intervals[i] = intervals[i - 1] + intervalSize + (remainder > 0 ? 1 : 0); + if (remainder > 0) { + remainder--; + } + } +} + +template +int PairPODKokkos::calculateNumberOfIntervals(int N, int intervalSize) +{ + int M = N / intervalSize; + if (N % intervalSize != 0) { + M++; // Add an additional interval to cover the remainder + } + + return M; +} + +template +void PairPODKokkos::grow_atoms(int Ni) +{ + if (Ni > nimax) { + nimax = Ni; + MemKK::realloc_kokkos(numij, "pair_pod:numij", nimax+1); + MemKK::realloc_kokkos(ei, "pair_pod:ei", nimax); + MemKK::realloc_kokkos(typeai, "pair_pod:typeai", nimax); + int n = nimax * nelements * K3 * nrbfmax; + MemKK::realloc_kokkos(sumU, "pair_pod:sumU", n); + MemKK::realloc_kokkos(forcecoeff, "pair_pod:forcecoeff", n); + MemKK::realloc_kokkos(bd, "pair_pod:bd", nimax * Mdesc); + MemKK::realloc_kokkos(cb, "pair_pod:cb", nimax * Mdesc); + if (nClusters > 1)MemKK::realloc_kokkos(pd, "pair_pod:pd", nimax * (1 + nComponents + 3*nClusters)); + Kokkos::deep_copy(numij, 0); + } +} + +template +void PairPODKokkos::grow_pairs(int Nij) +{ + if (Nij > nijmax) { + nijmax = Nij; + MemKK::realloc_kokkos(rij, "pair_pod:r_ij", 3 * nijmax); + MemKK::realloc_kokkos(fij, "pair_pod:f_ij", 3 * nijmax); + MemKK::realloc_kokkos(idxi, "pair_pod:idxi", nijmax); + MemKK::realloc_kokkos(ai, "pair_pod:ai", nijmax); + MemKK::realloc_kokkos(aj, "pair_pod:aj", nijmax); + MemKK::realloc_kokkos(ti, "pair_pod:ti", nijmax); + MemKK::realloc_kokkos(tj, "pair_pod:tj", nijmax); + MemKK::realloc_kokkos(rbf, "pair_pod:rbf", nijmax * nrbfmax); + MemKK::realloc_kokkos(rbfx, "pair_pod:rbfx", nijmax * nrbfmax); + MemKK::realloc_kokkos(rbfy, "pair_pod:rbfy", nijmax * nrbfmax); + MemKK::realloc_kokkos(rbfz, "pair_pod:rbfz", nijmax * nrbfmax); + int kmax = (K3 > ns) ? K3 : ns; + MemKK::realloc_kokkos(abf, "pair_pod:abf", nijmax * kmax); + MemKK::realloc_kokkos(abfx, "pair_pod:abfx", nijmax * kmax); + MemKK::realloc_kokkos(abfy, "pair_pod:abfy", nijmax * kmax); + MemKK::realloc_kokkos(abfz, "pair_pod:abfz", nijmax * kmax); + } +} + +template +int PairPODKokkos::NeighborCount(t_pod_1i l_numij, double l_rcutsq, int gi1, int Ni) +{ + // create local shadow views for KOKKOS_LAMBDA to pass them into parallel_for + auto l_ilist = d_ilist; + auto l_x = x; + auto l_numneigh = d_numneigh; + auto l_neighbors = d_neighbors; + + // compute number of pairs for each atom i + Kokkos::parallel_for("NeighborCount", Kokkos::TeamPolicy<>(Ni, Kokkos::AUTO), KOKKOS_LAMBDA(const Kokkos::TeamPolicy<>::member_type& team) { + int i = team.league_rank(); + int gi = l_ilist(gi1 + i); + double xi0 = l_x(gi, 0); + double xi1 = l_x(gi, 1); + double xi2 = l_x(gi, 2); + int jnum = l_numneigh(gi); + int ncount = 0; + Kokkos::parallel_reduce(Kokkos::TeamThreadRange(team,jnum), + [&] (const int jj, int& count) { + int j = l_neighbors(gi,jj); + j &= NEIGHMASK; + double delx = xi0 - l_x(j,0); + double dely = xi1 - l_x(j,1); + double delz = xi2 - l_x(j,2); + double rsq = delx*delx + dely*dely + delz*delz; + if (rsq < l_rcutsq) count++; + },ncount); + + l_numij(i+1) = ncount; + }); + + // accumalative sum + Kokkos::parallel_scan("InclusivePrefixSum", Ni + 1, KOKKOS_LAMBDA(int i, int& update, const bool final) { + if (i > 0) { + update += l_numij(i); + if (final) { + l_numij(i) = update; + } + } + }); + + int total_neighbors = 0; + Kokkos::deep_copy(Kokkos::View(&total_neighbors), Kokkos::subview(l_numij, Ni)); + + return total_neighbors; +} + +template +void PairPODKokkos::NeighborList(t_pod_1d l_rij, t_pod_1i l_numij, t_pod_1i l_typeai, + t_pod_1i l_idxi, t_pod_1i l_ai, t_pod_1i l_aj, t_pod_1i l_ti, t_pod_1i l_tj, double l_rcutsq, int gi1, int Ni) +{ + // create local shadow views for KOKKOS_LAMBDA to pass them into parallel_for + auto l_ilist = d_ilist; + auto l_x = x; + auto l_numneigh = d_numneigh; + auto l_neighbors = d_neighbors; + auto l_map = d_map; + auto l_type = type; + + Kokkos::parallel_for("NeighborList", Kokkos::TeamPolicy<>(Ni, Kokkos::AUTO), KOKKOS_LAMBDA(const Kokkos::TeamPolicy<>::member_type& team) { + int i = team.league_rank(); + int gi = l_ilist(gi1 + i); + double xi0 = l_x(gi, 0); + double xi1 = l_x(gi, 1); + double xi2 = l_x(gi, 2); + int itype = l_map(l_type(gi)) + 1; //map[atomtypes[gi]] + 1; + l_typeai(i) = itype; + int jnum = l_numneigh(gi); + int nij0 = l_numij(i); + Kokkos::parallel_scan(Kokkos::TeamThreadRange(team,jnum), + [&] (const int jj, int& offset, bool final) { + int gj = l_neighbors(gi,jj); + gj &= NEIGHMASK; + double delx = l_x(gj,0) - xi0; + double dely = l_x(gj,1) - xi1; + double delz = l_x(gj,2) - xi2; + double rsq = delx*delx + dely*dely + delz*delz; + if (rsq >= l_rcutsq) return; + if (final) { + int nij1 = nij0 + offset; + l_rij(nij1 * 3 + 0) = delx; + l_rij(nij1 * 3 + 1) = dely; + l_rij(nij1 * 3 + 2) = delz; + l_idxi(nij1) = i; + l_ai(nij1) = gi; + l_aj(nij1) = gj; + l_ti(nij1) = itype; + l_tj(nij1) = l_map(l_type(gj)) + 1; //map[atomtypes[gj)) + 1; + } + offset++; + }); + }); +} + +template +void PairPODKokkos::radialbasis(t_pod_1d rbft, t_pod_1d rbftx, t_pod_1d rbfty, t_pod_1d rbftz, + t_pod_1d l_rij, t_pod_1d l_besselparams, double l_rin, double l_rmax, int l_besseldegree, + int l_inversedegree, int l_nbesselpars, int Nij) +{ + Kokkos::parallel_for("ComputeRadialBasis", Nij, KOKKOS_LAMBDA(int n) { + double xij1 = l_rij(0+3*n); + double xij2 = l_rij(1+3*n); + double xij3 = l_rij(2+3*n); + + double dij = sqrt(xij1*xij1 + xij2*xij2 + xij3*xij3); + double dr1 = xij1/dij; + double dr2 = xij2/dij; + double dr3 = xij3/dij; + + double r = dij - l_rin; + double y = r/l_rmax; + double y2 = y*y; + + double y3 = 1.0 - y2*y; + double y4 = y3*y3 + 1e-6; + double y5 = sqrt(y4); + double y6 = exp(-1.0/y5); + double y7 = y4*sqrt(y4); + + // Calculate the final cutoff function as y6/exp(-1) + double fcut = y6/exp(-1.0); + + // Calculate the derivative of the final cutoff function + double dfcut = ((3.0/(l_rmax*exp(-1.0)))*(y2)*y6*(y*y2 - 1.0))/y7; + + // Calculate fcut/r, fcut/r^2, and dfcut/r + double f1 = fcut/r; + double f2 = f1/r; + double df1 = dfcut/r; + + double alpha = l_besselparams(0); + double t1 = (1.0-exp(-alpha)); + double t2 = exp(-alpha*r/l_rmax); + double x0 = (1.0 - t2)/t1; + double dx0 = (alpha/l_rmax)*t2/t1; + + alpha = l_besselparams(1); + t1 = (1.0-exp(-alpha)); + t2 = exp(-alpha*r/l_rmax); + double x1 = (1.0 - t2)/t1; + double dx1 = (alpha/l_rmax)*t2/t1; + + alpha = l_besselparams(2); + t1 = (1.0-exp(-alpha)); + t2 = exp(-alpha*r/l_rmax); + double x2 = (1.0 - t2)/t1; + double dx2 = (alpha/l_rmax)*t2/t1; + + for (int i=0; i +void PairPODKokkos::matrixMultiply(t_pod_1d a, t_pod_1d b, t_pod_1d c, int r1, int c1, int c2) +{ + Kokkos::parallel_for("MatrixMultiply", r1 * c2, KOKKOS_LAMBDA(int idx) { + int j = idx / r1; // Calculate column index + int i = idx % r1; // Calculate row index + double sum = 0.0; + for (int k = 0; k < c1; ++k) { + sum += a(i + r1*k) * b(k + c1*j); // Manually calculate the 1D index + } + c(i + r1*j) = sum; // Manually calculate the 1D index for c + }); +} + +template +void PairPODKokkos::angularbasis(t_pod_1d l_abf, t_pod_1d l_abfx, t_pod_1d l_abfy, t_pod_1d l_abfz, + t_pod_1d l_rij, t_pod_1i l_pq3, int l_K3, int N) +{ + Kokkos::parallel_for("AngularBasis", N, KOKKOS_LAMBDA(int j) { + double x = l_rij(j*3 + 0); + double y = l_rij(j*3 + 1); + double z = l_rij(j*3 + 2); + + double xx = x*x; + double yy = y*y; + double zz = z*z; + double xy = x*y; + double xz = x*z; + double yz = y*z; + + double dij = sqrt(xx + yy + zz); + const double u = x / dij; + const double v = y / dij; + const double w = z / dij; + + double dij3 = dij * dij * dij; + const double dudx = (yy + zz) / dij3; + const double dudy = -xy / dij3; + const double dudz = -xz / dij3; + + const double dvdx = -xy / dij3; + const double dvdy = (xx + zz) / dij3; + const double dvdz = -yz / dij3; + + const double dwdx = -xz / dij3; + const double dwdy = -yz / dij3; + const double dwdz = (xx + yy) / dij3; + + int idxa = j; + l_abf(idxa) = 1.0; + l_abfx(idxa) = 0.0; + l_abfy(idxa) = 0.0; + l_abfz(idxa) = 0.0; + + // Loop over all angular basis functions + for (int n=1; n +void PairPODKokkos::radialangularsum(t_pod_1d l_sumU, t_pod_1d l_rbf, t_pod_1d l_abf, t_pod_1i l_tj, + t_pod_1i l_numij, const int l_nelements, const int l_nrbf3, const int l_K3, const int Ni, const int Nij) +{ + int totalIterations = l_nrbf3 * l_K3 * Ni; + if (l_nelements==1) { + Kokkos::parallel_for("RadialAngularSum", totalIterations, KOKKOS_LAMBDA(int idx) { + int k = idx % l_K3; + int temp = idx / l_K3; + int m = temp % l_nrbf3; + int i = temp / l_nrbf3; + int kmi = k + l_K3*m + l_K3*l_nrbf3*i; + + int start = l_numij(i); + int nj = l_numij(i+1)-start; + double sum=0.0; + for (int j=0; j +void PairPODKokkos::twobodydesc(t_pod_1d d2, t_pod_1d l_rbf, t_pod_1i l_idxi, t_pod_1i l_tj, + int l_nrbf2, const int Ni, const int Nij) +{ + int totalIterations = l_nrbf2 * Nij; + Kokkos::parallel_for("twobodydesc", totalIterations, KOKKOS_LAMBDA(int idx) { + int n = idx / l_nrbf2; // pair index + int m = idx % l_nrbf2; // rbd index + int i2 = n + Nij * m; // Index of the radial basis function for atom n and RBF m + Kokkos::atomic_add(&d2(l_idxi(n) + Ni * (m + l_nrbf2 * (l_tj(n) - 1))), l_rbf(i2)); // Add the radial basis function to the corresponding descriptor + }); +} + +template +void PairPODKokkos::twobody_forces(t_pod_1d fij, t_pod_1d cb2, t_pod_1d l_rbfx, t_pod_1d l_rbfy, + t_pod_1d l_rbfz, t_pod_1i l_idxi, t_pod_1i l_tj, int l_nrbf2, const int Ni, const int Nij) +{ + int totalIterations = l_nrbf2 * Nij; + Kokkos::parallel_for("twobody_forces", totalIterations, KOKKOS_LAMBDA(int idx) { + int n = idx / l_nrbf2; // pair index + int m = idx % l_nrbf2; // rbd index + int i2 = n + Nij * m; // Index of the radial basis function for atom n and RBF m + int i1 = 3*n; + double c = cb2(l_idxi(n) + Ni*m + Ni*l_nrbf2*(l_tj(n) - 1)); + Kokkos::atomic_add(&fij(0 + i1), c*l_rbfx(i2)); // Add the derivative with respect to x to the corresponding descriptor derivative + Kokkos::atomic_add(&fij(1 + i1), c*l_rbfy(i2)); // Add the derivative with respect to y to the corresponding descriptor derivative + Kokkos::atomic_add(&fij(2 + i1), c*l_rbfz(i2)); // Add the derivative with respect to z to the corresponding descriptor derivative + }); +} + +template +void PairPODKokkos::threebodydesc(t_pod_1d d3, t_pod_1d l_sumU, t_pod_1i l_pc3, t_pod_1i l_pn3, + int l_nelements, int l_nrbf3, int l_nabf3, int l_K3, const int Ni) +{ + int totalIterations = l_nrbf3 * Ni; + Kokkos::parallel_for("ThreeBodyDesc", totalIterations, KOKKOS_LAMBDA(int idx) { + int m = idx % l_nrbf3; + int i = idx / l_nrbf3; + int nmi = l_nelements * l_K3 * m + l_nelements * l_K3 * l_nrbf3*i; + for (int p = 0; p < l_nabf3; p++) { + int n1 = l_pn3(p); + int n2 = l_pn3(p + 1); + int nn = n2 - n1; + int ipm = i + Ni * (p + l_nabf3 * m); + int k = 0; + for (int i1 = 0; i1 < l_nelements; i1++) { + for (int i2 = i1; i2 < l_nelements; i2++) { + double tmp=0; + for (int q = 0; q < nn; q++) { + tmp += l_pc3(n1 + q) * l_sumU(i1 + l_nelements * (n1 + q) + nmi) * l_sumU(i2 + l_nelements * (n1 + q) + nmi); + } + d3(ipm + totalIterations * l_nabf3 * k) = tmp; + k += 1; + } + } + } + }); +} + +template +void PairPODKokkos::threebody_forces(t_pod_1d fij, t_pod_1d cb3, t_pod_1d l_rbf, t_pod_1d l_rbfx, + t_pod_1d l_rbfy, t_pod_1d l_rbfz, t_pod_1d l_abf, t_pod_1d l_abfx, t_pod_1d l_abfy, t_pod_1d l_abfz, + t_pod_1d l_sumU, t_pod_1i l_idxi, t_pod_1i l_tj, t_pod_1i l_pc3, t_pod_1i l_pn3, t_pod_1i l_elemindex, + int l_nelements, int l_nrbf3, int l_nabf3, int l_K3, int Ni, int Nij) +{ + int totalIterations = l_nrbf3 * Nij; + if (l_nelements==1) { + Kokkos::parallel_for("threebody_forces1", totalIterations, KOKKOS_LAMBDA(int idx) { + int j = idx / l_nrbf3; // Calculate j using integer division + int m = idx % l_nrbf3; // Calculate m using modulo operation + int idxR = j + Nij * m; // Pre-compute the index for rbf + double rbfBase = l_rbf(idxR); + double rbfxBase = l_rbfx(idxR); + double rbfyBase = l_rbfy(idxR); + double rbfzBase = l_rbfz(idxR); + double fx = 0; + double fy = 0; + double fz = 0; + for (int p = 0; p < l_nabf3; p++) { + double c3 = 2.0 * cb3(l_idxi(j) + Ni*p + Ni*l_nabf3*m); + int n1 = l_pn3(p); + int nn = l_pn3(p + 1) - n1; + int idxU = l_K3 * m + l_K3*l_nrbf3*l_idxi(j); + for (int q = 0; q < nn; q++) { + int idxNQ = n1 + q; // Combine n1 and q into a single index for pc3 and sumU + double f = c3 * l_pc3(idxNQ) * l_sumU(idxNQ + idxU); + int idxA = j + Nij*idxNQ; // Pre-compute the index for abf + double abfA = l_abf(idxA); + + // Use the pre-computed indices to update dd3 + fx += f * (l_abfx(idxA) * rbfBase + rbfxBase * abfA); + fy += f * (l_abfy(idxA) * rbfBase + rbfyBase * abfA); + fz += f * (l_abfz(idxA) * rbfBase + rbfzBase * abfA); + } + } + int ii = 3 * j; // Pre-compute the base index for dd3 + Kokkos::atomic_add(&fij(0 + ii), fx); // Add the derivative with respect to x to the corresponding descriptor derivative + Kokkos::atomic_add(&fij(1 + ii), fy); // Add the derivative with respect to y to the corresponding descriptor derivative + Kokkos::atomic_add(&fij(2 + ii), fz); // Add the derivative with respect to z to the corresponding descriptor derivative + }); + } + else { + int N3 = Ni * l_nabf3 * l_nrbf3; + Kokkos::parallel_for("threebody_forces2", totalIterations, KOKKOS_LAMBDA(int idx) { + int j = idx / l_nrbf3; // Derive the original j value + int m = idx % l_nrbf3; // Derive the original m value + int i2 = l_tj(j) - 1; + int idxK = l_nelements * l_K3 * m + l_nelements*l_K3*l_nrbf3*l_idxi(j); + int idxR = j + Nij * m; // Pre-compute the index for rbf + double rbfBase = l_rbf(idxR); + double rbfxBase = l_rbfx(idxR); + double rbfyBase = l_rbfy(idxR); + double rbfzBase = l_rbfz(idxR); + double fx = 0; + double fy = 0; + double fz = 0; + for (int p = 0; p < l_nabf3; p++) { + int n1 = l_pn3(p); + int nn = l_pn3(p + 1) - n1; + int jmp = l_idxi(j) + Ni*(p + l_nabf3*m); + for (int i1 = 0; i1 < l_nelements; i1++) { + double c3 = (i1 == i2) ? 2.0 : 1.0; + c3 = c3 * cb3(jmp + N3*l_elemindex(i2 + l_nelements * i1)); + for (int q = 0; q < nn; q++) { + int idxNQ = n1 + q; // Combine n1 and q into a single index + int idxA = j + Nij*idxNQ; // Pre-compute the index for abf + double abfA = l_abf(idxA); + double f = c3 * l_pc3(idxNQ) * l_sumU(i1 + l_nelements * idxNQ + idxK); + fx += f * (l_abfx(idxA) * rbfBase + rbfxBase * abfA); + fy += f * (l_abfy(idxA) * rbfBase + rbfyBase * abfA); + fz += f * (l_abfz(idxA) * rbfBase + rbfzBase * abfA); + } + } + } + int ii = 3 * j; // Pre-compute the base index for dd3 + Kokkos::atomic_add(&fij(0 + ii), fx); // Add the derivative with respect to x to the corresponding descriptor derivative + Kokkos::atomic_add(&fij(1 + ii), fy); // Add the derivative with respect to y to the corresponding descriptor derivative + Kokkos::atomic_add(&fij(2 + ii), fz); // Add the derivative with respect to z to the corresponding descriptor derivative + }); + } +} + +template +void PairPODKokkos::threebody_forcecoeff(t_pod_1d fb3, t_pod_1d cb3, + t_pod_1d l_sumU, t_pod_1i l_pc3, t_pod_1i l_pn3, t_pod_1i l_elemindex, + int l_nelements, int l_nrbf3, int l_nabf3, int l_K3, int Ni) +{ + int totalIterations = l_nrbf3 * Ni; + if (l_nelements==1) { + Kokkos::parallel_for("threebody_forcecoeff1", totalIterations, KOKKOS_LAMBDA(int idx) { + int i = idx / l_nrbf3; // Calculate j using integer division + int m = idx % l_nrbf3; // Calculate m using modulo operation + for (int p = 0; p < l_nabf3; p++) { + double c3 = 2.0 * cb3(i + Ni*p + Ni*l_nabf3*m); + int n1 = l_pn3(p); + int nn = l_pn3(p + 1) - n1; + int idxU = l_K3 * m + l_K3*l_nrbf3*i; + for (int q = 0; q < nn; q++) { + int idxNQ = n1 + q; // Combine n1 and q into a single index for pc3 and sumU + fb3(idxNQ + idxU) += c3 * l_pc3(idxNQ) * l_sumU(idxNQ + idxU); + } + } + }); + } + else { + int N3 = Ni * l_nabf3 * l_nrbf3; + Kokkos::parallel_for("threebody_forcecoeff2", totalIterations, KOKKOS_LAMBDA(int idx) { + int i = idx / l_nrbf3; // Derive the original j value + int m = idx % l_nrbf3; // Derive the original m value + for (int p = 0; p < l_nabf3; p++) { + int n1 = l_pn3(p); + int nn = l_pn3(p + 1) - n1; + int jmp = i + Ni*(p + l_nabf3*m); + for (int q = 0; q < nn; q++) { + int k = n1 + q; // Combine n1 and q into a single index + int idxU = l_nelements * k + l_nelements * l_K3 * m + l_nelements*l_K3*l_nrbf3*i; + for (int i1 = 0; i1 < l_nelements; i1++) { + double tm = l_pc3[k] * l_sumU[i1 + idxU]; + for (int i2 = i1; i2 < l_nelements; i2++) { + int em = l_elemindex[i2 + l_nelements * i1]; + double t1 = tm * cb3[jmp + N3*em]; // Ni * nabf3 * nrbf3 * nelements*(nelements+1)/2 + fb3[i2 + idxU] += t1; // K3*nrbf3*Ni + fb3[i1 + idxU] += l_pc3[k] * cb3[jmp + N3*em] * l_sumU[i2 + idxU]; + } + } + } + } + }); + } +} + +template +void PairPODKokkos::fourbodydesc(t_pod_1d d4, t_pod_1d l_sumU, t_pod_1i l_pa4, t_pod_1i l_pb4, + t_pod_1i l_pc4, int l_nelements, int l_nrbf3, int l_nrbf4, int l_nabf4, int l_K3, int l_Q4, int Ni) +{ + int totalIterations = l_nrbf4 * Ni; + Kokkos::parallel_for("fourbodydesc", totalIterations, KOKKOS_LAMBDA(int idx) { + int m = idx % l_nrbf4; + int i = idx / l_nrbf4; + int idxU = l_nelements * l_K3 * m + l_nelements * l_K3 * l_nrbf3 * i; + for (int p = 0; p < l_nabf4; p++) { + int n1 = l_pa4(p); + int n2 = l_pa4(p + 1); + int nn = n2 - n1; + int k = 0; + for (int i1 = 0; i1 < l_nelements; i1++) { + for (int i2 = i1; i2 < l_nelements; i2++) { + for (int i3 = i2; i3 < l_nelements; i3++) { + double tmp = 0.0; + for (int q = 0; q < nn; q++) { + int c = l_pc4(n1 + q); + int j1 = l_pb4(n1 + q); + int j2 = l_pb4(n1 + q + l_Q4); + int j3 = l_pb4(n1 + q + 2 * l_Q4); + tmp += c * l_sumU(idxU + i1 + l_nelements * j1) * l_sumU(idxU + i2 + l_nelements * j2) * l_sumU(idxU + i3 + l_nelements * j3); + } + int kk = p + l_nabf4 * m + l_nabf4 * l_nrbf4 * k; + d4(i + Ni * kk) = tmp; + k += 1; + } + } + } + } + }); +} + +template +void PairPODKokkos::fourbody_forces(t_pod_1d fij, t_pod_1d cb4, t_pod_1d l_rbf, t_pod_1d l_rbfx, + t_pod_1d l_rbfy, t_pod_1d l_rbfz, t_pod_1d l_abf, t_pod_1d l_abfx, t_pod_1d l_abfy, t_pod_1d l_abfz, + t_pod_1d l_sumU, t_pod_1i l_idxi, t_pod_1i l_tj, t_pod_1i l_pa4, t_pod_1i l_pb4, t_pod_1i l_pc4, + int l_nelements, int l_nrbf3, int l_nrbf4, int l_nabf4, int l_K3, int l_Q4, int Ni, int Nij) +{ + int totalIterations = l_nrbf4 * Nij; + if (l_nelements==1) { + Kokkos::parallel_for("fourbody_forces1", totalIterations, KOKKOS_LAMBDA(int idx) { + int j = idx / l_nrbf4; // Derive the original j value + int m = idx % l_nrbf4; // Derive the original m value + int idxU = l_K3 * m + l_K3*l_nrbf3*l_idxi(j); + int baseIdxJ = j + Nij * m; // Pre-compute the index for rbf + double rbfBase = l_rbf(baseIdxJ); + double rbfxBase = l_rbfx(baseIdxJ); + double rbfyBase = l_rbfy(baseIdxJ); + double rbfzBase = l_rbfz(baseIdxJ); + double fx = 0; + double fy = 0; + double fz = 0; + for (int p = 0; p < l_nabf4; p++) { + int n1 = l_pa4(p); + int n2 = l_pa4(p + 1); + int nn = n2 - n1; + double c4 = cb4(l_idxi(j) + Ni*p + Ni*l_nabf4*m); + for (int q = 0; q < nn; q++) { + int idxNQ = n1 + q; // Combine n1 and q into a single index + double c = c4 * l_pc4[idxNQ]; + int j1 = l_pb4(idxNQ); + int j2 = l_pb4(idxNQ + l_Q4); + int j3 = l_pb4(idxNQ + 2 * l_Q4); + double c1 = l_sumU(idxU + j1); + double c2 = l_sumU(idxU + j2); + double c3 = l_sumU(idxU + j3); + double t12 = c * c1 * c2; + double t13 = c * c1 * c3; + double t23 = c * c2 * c3; + + // Pre-calculate commonly used indices + int baseIdxJ3 = j + Nij * j3; // Common index for j3 terms + int baseIdxJ2 = j + Nij * j2; // Common index for j2 terms + int baseIdxJ1 = j + Nij * j1; // Common index for j1 terms + + // Temporary variables to store repeated calculations + double abfBaseJ1 = l_abf(baseIdxJ1); + double abfBaseJ2 = l_abf(baseIdxJ2); + double abfBaseJ3 = l_abf(baseIdxJ3); + // Update dd4 using pre-computed indices + fx += t12 * (l_abfx(baseIdxJ3) * rbfBase + rbfxBase * abfBaseJ3) + + t13 * (l_abfx(baseIdxJ2) * rbfBase + rbfxBase * abfBaseJ2) + + t23 * (l_abfx(baseIdxJ1) * rbfBase + rbfxBase * abfBaseJ1); + fy += t12 * (l_abfy(baseIdxJ3) * rbfBase + rbfyBase * abfBaseJ3) + + t13 * (l_abfy(baseIdxJ2) * rbfBase + rbfyBase * abfBaseJ2) + + t23 * (l_abfy(baseIdxJ1) * rbfBase + rbfyBase * abfBaseJ1); + fz += t12 * (l_abfz(baseIdxJ3) * rbfBase + rbfzBase * abfBaseJ3) + + t13 * (l_abfz(baseIdxJ2) * rbfBase + rbfzBase * abfBaseJ2) + + t23 * (l_abfz(baseIdxJ1) * rbfBase + rbfzBase * abfBaseJ1); + } + } + int ii = 3 * j; // Pre-compute the base index for dd3 + Kokkos::atomic_add(&fij(0 + ii), fx); // Add the derivative with respect to x to the corresponding descriptor derivative + Kokkos::atomic_add(&fij(1 + ii), fy); // Add the derivative with respect to y to the corresponding descriptor derivative + Kokkos::atomic_add(&fij(2 + ii), fz); // Add the derivative with respect to z to the corresponding descriptor derivative + }); + } + else { + int N3 = Ni * l_nabf4 * l_nrbf4; + Kokkos::parallel_for("fourbody_forces2", totalIterations, KOKKOS_LAMBDA(int idx) { + int j = idx / l_nrbf4; // Derive the original j value + int m = idx % l_nrbf4; // Derive the original m value + int idxM = j + Nij * m; + double rbfM = l_rbf(idxM); + double rbfxM = l_rbfx(idxM); + double rbfyM = l_rbfy(idxM); + double rbfzM = l_rbfz(idxM); + int typej = l_tj(j) - 1; + double fx = 0; + double fy = 0; + double fz = 0; + for (int p = 0; p < l_nabf4; p++) { + int n1 = l_pa4(p); + int n2 = l_pa4(p + 1); + int nn = n2 - n1; + int jpm = l_idxi(j) + Ni*p + Ni*l_nabf4*m; + int k = 0; + for (int i1 = 0; i1 < l_nelements; i1++) { + for (int i2 = i1; i2 < l_nelements; i2++) { + for (int i3 = i2; i3 < l_nelements; i3++) { + for (int q = 0; q < nn; q++) { + double c = l_pc4(n1 + q) * cb4(jpm + N3*k); + int j1 = l_pb4(n1 + q); + int j2 = l_pb4(n1 + q + l_Q4); + int j3 = l_pb4(n1 + q + 2 * l_Q4); + + int idx1 = i1 + l_nelements * j1 + l_nelements * l_K3 * m + l_nelements * l_K3 * l_nrbf3 * l_idxi(j); + int idx2 = i2 + l_nelements * j2 + l_nelements * l_K3 * m + l_nelements * l_K3 * l_nrbf3 * l_idxi(j); + int idx3 = i3 + l_nelements * j3 + l_nelements * l_K3 * m + l_nelements * l_K3 * l_nrbf3 * l_idxi(j); + double c1 = l_sumU(idx1); + double c2 = l_sumU(idx2 ); + double c3 = l_sumU(idx3); + double t12 = c*(c1 * c2); + double t13 = c*(c1 * c3); + double t23 = c*(c2 * c3); + + int idxJ3 = j + Nij * j3; + int idxJ2 = j + Nij * j2; + int idxJ1 = j + Nij * j1; + double abfJ1 = l_abf(idxJ1); + double abfJ2 = l_abf(idxJ2); + double abfJ3 = l_abf(idxJ3); + double abfxJ1 = l_abfx(idxJ1); + double abfxJ2 = l_abfx(idxJ2); + double abfxJ3 = l_abfx(idxJ3); + double abfyJ1 = l_abfy(idxJ1); + double abfyJ2 = l_abfy(idxJ2); + double abfyJ3 = l_abfy(idxJ3); + double abfzJ1 = l_abfz(idxJ1); + double abfzJ2 = l_abfz(idxJ2); + double abfzJ3 = l_abfz(idxJ3); + + // Compute contributions for each condition + if (typej == i3) { + fx += t12 * (abfxJ3 * rbfM + rbfxM * abfJ3); + fy += t12 * (abfyJ3 * rbfM + rbfyM * abfJ3); + fz += t12 * (abfzJ3 * rbfM + rbfzM * abfJ3); + } + if (typej == i2) { + fx += t13 * (abfxJ2 * rbfM + rbfxM * abfJ2); + fy += t13 * (abfyJ2 * rbfM + rbfyM * abfJ2); + fz += t13 * (abfzJ2 * rbfM + rbfzM * abfJ2); + } + if (typej == i1) { + fx += t23 * (abfxJ1 * rbfM + rbfxM * abfJ1); + fy += t23 * (abfyJ1 * rbfM + rbfyM * abfJ1); + fz += t23 * (abfzJ1 * rbfM + rbfzM * abfJ1); + } + } + k += 1; + } + } + } + } + int ii = 3 * j; // Pre-compute the base index for dd3 + Kokkos::atomic_add(&fij(0 + ii), fx); // Add the derivative with respect to x to the corresponding descriptor derivative + Kokkos::atomic_add(&fij(1 + ii), fy); // Add the derivative with respect to y to the corresponding descriptor derivative + Kokkos::atomic_add(&fij(2 + ii), fz); // Add the derivative with respect to z to the corresponding descriptor derivative + }); + } +} + +template +void PairPODKokkos::fourbody_forcecoeff(t_pod_1d fb4, t_pod_1d cb4, + t_pod_1d l_sumU, t_pod_1i l_pa4, t_pod_1i l_pb4, t_pod_1i l_pc4, int l_nelements, + int l_nrbf3, int l_nrbf4, int l_nabf4, int l_K3, int l_Q4, int Ni) +{ + int totalIterations = l_nrbf4 * Ni; + if (l_nelements==1) { + Kokkos::parallel_for("fourbody_forcecoeff1", totalIterations, KOKKOS_LAMBDA(int idx) { + int i = idx / l_nrbf4; // Derive the original j value + int m = idx % l_nrbf4; // Derive the original m value + int idxU = l_K3 * m + l_K3*l_nrbf3*i; + for (int p = 0; p < l_nabf4; p++) { + int n1 = l_pa4(p); + int n2 = l_pa4(p + 1); + int nn = n2 - n1; + double c4 = cb4(i + Ni*p + Ni*l_nabf4*m); + for (int q = 0; q < nn; q++) { + int idxNQ = n1 + q; // Combine n1 and q into a single index + double c = c4 * l_pc4[idxNQ]; + int j1 = idxU + l_pb4(idxNQ); + int j2 = idxU + l_pb4(idxNQ + l_Q4); + int j3 = idxU + l_pb4(idxNQ + 2 * l_Q4); + double c1 = l_sumU(j1); + double c2 = l_sumU(j2); + double c3 = l_sumU(j3); + fb4[j3] += c * c1 * c2; + fb4[j2] += c * c1 * c3; + fb4[j1] += c * c2 * c3; + } + } + }); + } + else { + int N3 = Ni * l_nabf4 * l_nrbf4; + Kokkos::parallel_for("fourbody_forcecoeff2", totalIterations, KOKKOS_LAMBDA(int idx) { + int i = idx / l_nrbf4; // Derive the original j value + int m = idx % l_nrbf4; // Derive the original m value + for (int p = 0; p < l_nabf4; p++) { + int n1 = l_pa4(p); + int n2 = l_pa4(p + 1); + int nn = n2 - n1; + int jpm = i + Ni*p + Ni*l_nabf4*m; + for (int q = 0; q < nn; q++) { + double c = l_pc4(n1 + q); + int j1 = l_pb4(n1 + q); + int j2 = l_pb4(n1 + q + l_Q4); + int j3 = l_pb4(n1 + q + 2 * l_Q4); + int idx1 = l_nelements * j1 + l_nelements * l_K3 * m + l_nelements * l_K3 * l_nrbf3 * i; + int idx2 = l_nelements * j2 + l_nelements * l_K3 * m + l_nelements * l_K3 * l_nrbf3 * i; + int idx3 = l_nelements * j3 + l_nelements * l_K3 * m + l_nelements * l_K3 * l_nrbf3 * i; + int k = 0; + for (int i1 = 0; i1 < l_nelements; i1++) { + double c1 = l_sumU[idx1 + i1]; + for (int i2 = i1; i2 < l_nelements; i2++) { + double c2 = l_sumU[idx2 + i2]; + for (int i3 = i2; i3 < l_nelements; i3++) { + double c3 = l_sumU[idx3 + i3]; + double c4 = c * cb4[jpm + N3*k]; + fb4[idx3 + i3] += c4*(c1 * c2); + fb4[idx2 + i2] += c4*(c1 * c3); + fb4[idx1 + i1] += c4*(c2 * c3); + k += 1; + } + } + } + } + } + }); + } +} + +template +void PairPODKokkos::allbody_forces(t_pod_1d fij, t_pod_1d l_forcecoeff, t_pod_1d l_rbf, t_pod_1d l_rbfx, + t_pod_1d l_rbfy, t_pod_1d l_rbfz, t_pod_1d l_abf, t_pod_1d l_abfx, t_pod_1d l_abfy, t_pod_1d l_abfz, + t_pod_1i l_idxi, t_pod_1i l_tj, int l_nelements, int l_nrbf3, int l_K3, int Nij) +{ + int totalIterations = l_nrbf3 * Nij; + Kokkos::parallel_for("allbody_forces", totalIterations, KOKKOS_LAMBDA(int idx) { + int j = idx / l_nrbf3; // Calculate j using integer division + int m = idx % l_nrbf3; // Calculate m using modulo operation + int i2 = l_tj(j) - 1; + int idxR = j + Nij * m; // Pre-compute the index for rbf + double rbfBase = l_rbf(idxR); + double rbfxBase = l_rbfx(idxR); + double rbfyBase = l_rbfy(idxR); + double rbfzBase = l_rbfz(idxR); + double fx = 0; + double fy = 0; + double fz = 0; + for (int k = 0; k < l_K3; k++) { + int idxU = l_nelements * k + l_nelements * l_K3 * m + l_nelements*l_K3*l_nrbf3*l_idxi[j]; + double fc = l_forcecoeff[i2 + idxU]; + int idxA = j + Nij*k; // Pre-compute the index for abf + double abfA = l_abf[idxA]; + double abfxA = l_abfx[idxA]; + double abfyA = l_abfy[idxA]; + double abfzA = l_abfz[idxA]; + fx += fc * (abfxA * rbfBase + rbfxBase * abfA); // K3*nrbf3*Nij + fy += fc * (abfyA * rbfBase + rbfyBase * abfA); + fz += fc * (abfzA * rbfBase + rbfzBase * abfA); + } + int ii = 3 * j; // Pre-compute the base index for dd3 + Kokkos::atomic_add(&fij(0 + ii), fx); // Add the derivative with respect to x to the corresponding descriptor derivative + Kokkos::atomic_add(&fij(1 + ii), fy); // Add the derivative with respect to y to the corresponding descriptor derivative + Kokkos::atomic_add(&fij(2 + ii), fz); // Add the derivative with respect to z to the corresponding descriptor derivative + }); +} + +template +void PairPODKokkos::crossdesc(t_pod_1d d12, t_pod_1d d1, t_pod_1d d2, t_pod_1i ind1, t_pod_1i ind2, int n12, int Ni) +{ + int totalIterations = n12 * Ni; + Kokkos::parallel_for("crossdesc", totalIterations, KOKKOS_LAMBDA(int idx) { + int n = idx % Ni; + int i = idx / Ni; + + d12(n + Ni * i) = d1(n + Ni * ind1(i)) * d2(n + Ni * ind2(i)); + }); +} + +template +void PairPODKokkos::crossdesc_reduction(t_pod_1d cb1, t_pod_1d cb2, t_pod_1d c12, t_pod_1d d1, + t_pod_1d d2, t_pod_1i ind1, t_pod_1i ind2, int n12, int Ni) +{ + int totalIterations = n12 * Ni; + Kokkos::parallel_for("crossdesc_reduction", totalIterations, KOKKOS_LAMBDA(int idx) { + int n = idx % Ni; // Ni + int m = idx / Ni; // n12 + int k1 = ind1(m); // dd1 + int k2 = ind2(m); // dd2 + int m1 = n + Ni * k1; // d1 + int m2 = n + Ni * k2; // d2 + double c = c12(n + Ni * m); + Kokkos::atomic_add(&cb1(m1), c * d2(m2)); + Kokkos::atomic_add(&cb2(m2), c * d1(m1)); + }); +} + +template +void PairPODKokkos::set_array_to_zero(t_pod_1d a, int N) +{ + Kokkos::parallel_for("initialize_array", N, KOKKOS_LAMBDA(int i) { + a(i) = 0.0; + }); +} + +template +void PairPODKokkos::blockatom_base_descriptors(t_pod_1d bd, int Ni, int Nij) +{ + auto begin = std::chrono::high_resolution_clock::now(); + auto end = std::chrono::high_resolution_clock::now(); + + auto d2 = Kokkos::subview(bd, std::make_pair(0, Ni * nl2)); + auto d3 = Kokkos::subview(bd, std::make_pair(Ni * nl2, Ni * (nl2 + nl3))); + auto d4 = Kokkos::subview(bd, std::make_pair(Ni * (nl2 + nl3), Ni * (nl2 + nl3 + nl4))); + auto d33 = Kokkos::subview(bd, std::make_pair(Ni * (nl2 + nl3 + nl4), Ni * (nl2 + nl3 + nl4 + nl33))); + auto d34 = Kokkos::subview(bd, std::make_pair(Ni * (nl2 + nl3 + nl4 + nl33), Ni * (nl2 + nl3 + nl4 + nl33 + nl34))); + auto d44 = Kokkos::subview(bd, std::make_pair(Ni * (nl2 + nl3 + nl4 + nl33 + nl34), Ni * (nl2 + nl3 + nl4 + nl33 + nl34 + nl44))); + + begin = std::chrono::high_resolution_clock::now(); + radialbasis(abf, abfx, abfy, abfz, rij, besselparams, rin, rmax, + besseldegree, inversedegree, nbesselpars, Nij); + Kokkos::fence(); + end = std::chrono::high_resolution_clock::now(); + comptime[10] += std::chrono::duration_cast(end-begin).count()/1e6; + + begin = std::chrono::high_resolution_clock::now(); + matrixMultiply(abf, Phi, rbf, Nij, ns, nrbfmax); + matrixMultiply(abfx, Phi, rbfx, Nij, ns, nrbfmax); + matrixMultiply(abfy, Phi, rbfy, Nij, ns, nrbfmax); + matrixMultiply(abfz, Phi, rbfz, Nij, ns, nrbfmax); + Kokkos::fence(); + end = std::chrono::high_resolution_clock::now(); + comptime[11] += std::chrono::duration_cast(end-begin).count()/1e6; + + begin = std::chrono::high_resolution_clock::now(); + set_array_to_zero(d2, Ni*nl2); + twobodydesc(d2, rbf, idxi, tj, nrbf2, Ni, Nij); + Kokkos::fence(); + end = std::chrono::high_resolution_clock::now(); + comptime[12] += std::chrono::duration_cast(end-begin).count()/1e6; + + if ((nl3 > 0) && (Nij>1)) { + begin = std::chrono::high_resolution_clock::now(); + angularbasis(abf, abfx, abfy, abfz, rij, pq3, K3, Nij); + Kokkos::fence(); + end = std::chrono::high_resolution_clock::now(); + comptime[13] += std::chrono::duration_cast(end-begin).count()/1e6; + + begin = std::chrono::high_resolution_clock::now(); + set_array_to_zero(sumU, nelements * nrbf3 * K3 * Ni); + radialangularsum(sumU, rbf, abf, tj, numij, nelements, nrbf3, K3, Ni, Nij); + Kokkos::fence(); + end = std::chrono::high_resolution_clock::now(); + comptime[14] += std::chrono::duration_cast(end-begin).count()/1e6; + + begin = std::chrono::high_resolution_clock::now(); + //set_array_to_zero(d3, Ni*nl3); + threebodydesc(d3, sumU, pc3, pn3, nelements, nrbf3, nabf3, K3, Ni); + Kokkos::fence(); + end = std::chrono::high_resolution_clock::now(); + comptime[15] += std::chrono::duration_cast(end-begin).count()/1e6; + } + + if ((nl4 > 0) && (Nij>2)) { + begin = std::chrono::high_resolution_clock::now(); + //set_array_to_zero(d4, Ni*nl4); + fourbodydesc(d4, sumU, pa4, pb4, pc4, nelements, nrbf3, nrbf4, nabf4, K3, Q4, Ni); + Kokkos::fence(); + end = std::chrono::high_resolution_clock::now(); + comptime[16] += std::chrono::duration_cast(end-begin).count()/1e6; + } + + if ((nl33>0) && (Nij>3)) { + begin = std::chrono::high_resolution_clock::now(); + crossdesc(d33, d3, d3, ind33l, ind33r, nl33, Ni); + Kokkos::fence(); + end = std::chrono::high_resolution_clock::now(); + comptime[17] += std::chrono::duration_cast(end-begin).count()/1e6; + } + + if ((nl34>0) && (Nij>4)) { + begin = std::chrono::high_resolution_clock::now(); + crossdesc(d34, d3, d4, ind34l, ind34r, nl34, Ni); + Kokkos::fence(); + end = std::chrono::high_resolution_clock::now(); + comptime[18] += std::chrono::duration_cast(end-begin).count()/1e6; + } + + if ((nl44>0) && (Nij>5)) { + begin = std::chrono::high_resolution_clock::now(); + crossdesc(d44, d4, d4, ind44l, ind44r, nl44, Ni); + Kokkos::fence(); + end = std::chrono::high_resolution_clock::now(); + comptime[19] += std::chrono::duration_cast(end-begin).count()/1e6; + } +} + +template +void PairPODKokkos::blockatom_base_coefficients(t_pod_1d ei, t_pod_1d cb, t_pod_1d B, int Ni) +{ + auto cefs = coefficients; + auto tyai = typeai; + int nDes = Mdesc; + int nCoeff = nCoeffPerElement; + + Kokkos::parallel_for("atomic_energies", Ni, KOKKOS_LAMBDA(int n) { + int nc = nCoeff*(tyai[n]-1); + ei[n] = cefs[0 + nc]; + for (int m=0; m +void PairPODKokkos::blockatom_environment_descriptors(t_pod_1d ei, t_pod_1d cb, t_pod_1d B, int Ni) +{ + auto P = Kokkos::subview(pd, std::make_pair(0, Ni * nClusters)); + auto cp = Kokkos::subview(pd, std::make_pair(Ni * nClusters, 2 * Ni * nClusters)); + auto D = Kokkos::subview(pd, std::make_pair(2 * Ni * nClusters, 3 * Ni * nClusters)); + auto pca = Kokkos::subview(pd, std::make_pair(3 * Ni * nClusters, 3 * Ni * nClusters + Ni * nComponents)); + auto sumD = Kokkos::subview(pd, std::make_pair(3 * Ni * nClusters + Ni * nComponents, 3 * Ni * nClusters + Ni * nComponents + Ni)); + + auto proj = Proj; + auto cent = Centroids; + auto cefs = coefficients; + auto tyai = typeai; + + int nCom = nComponents; + int nCls = nClusters; + int nDes = Mdesc; + int nCoeff = nCoeffPerElement; + + int totalIterations = Ni*nCom; + Kokkos::parallel_for("pca", totalIterations, KOKKOS_LAMBDA(int idx) { + int i = idx % Ni; + int k = idx / Ni; + double sum = 0.0; + int typei = tyai[i]-1; + for (int m = 0; m < nDes; m++) { + sum += proj[k + nCom*m + nCom*nDes*typei] * B[i + Ni*m]; + } + pca[i + Ni*k] = sum; + }); + + totalIterations = Ni*nCls; + Kokkos::parallel_for("inverse_square_distances", totalIterations, KOKKOS_LAMBDA(int idx) { + int i = idx % Ni; + int j = idx / Ni; + int typei = tyai[i]-1; + double sum = 1e-20; + for (int k = 0; k < nCom; k++) { + double c = cent[k + j * nCom + nCls*nCom*typei]; + double p = pca[i + Ni*k]; + sum += (p - c) * (p - c); + } + D[i + Ni*j] = 1.0 / sum; + }); + + Kokkos::parallel_for("Probabilities", Ni, KOKKOS_LAMBDA(int i) { + double sum = 0; + for (int j = 0; j < nCls; j++) sum += D[i + Ni*j]; + sumD[i] = sum; + for (int j = 0; j < nCls; j++) P[i + Ni*j] = D[i + Ni*j]/sum; + }); + + Kokkos::parallel_for("atomic_energies", Ni, KOKKOS_LAMBDA(int n) { + int nc = nCoeff*(tyai[n]-1); + ei[n] = cefs[0 + nc]; + for (int k = 0; k +void PairPODKokkos::blockatom_energyforce(t_pod_1d l_ei, t_pod_1d l_fij, int Ni, int Nij) +{ + auto begin = std::chrono::high_resolution_clock::now(); + auto end = std::chrono::high_resolution_clock::now(); + + // calculate base descriptors and their derivatives with respect to atom coordinates + begin = std::chrono::high_resolution_clock::now(); + blockatom_base_descriptors(bd, Ni, Nij); + Kokkos::fence(); + end = std::chrono::high_resolution_clock::now(); + comptime[4] += std::chrono::duration_cast(end-begin).count()/1e6; + + begin = std::chrono::high_resolution_clock::now(); + if (nClusters > 1) { + blockatom_environment_descriptors(l_ei, cb, bd, Ni); + } + else { + blockatom_base_coefficients(l_ei, cb, bd, Ni); + } + Kokkos::fence(); + end = std::chrono::high_resolution_clock::now(); + comptime[5] += std::chrono::duration_cast(end-begin).count()/1e6; + + begin = std::chrono::high_resolution_clock::now(); + auto d3 = Kokkos::subview(bd, std::make_pair(Ni * nl2, Ni * (nl2 + nl3))); + auto d4 = Kokkos::subview(bd, std::make_pair(Ni * (nl2 + nl3), Ni * (nl2 + nl3 + nl4))); + auto cb2 = Kokkos::subview(cb, std::make_pair(0, Ni * nl2)); + auto cb3 = Kokkos::subview(cb, std::make_pair(Ni * nl2, Ni * (nl2 + nl3))); + auto cb4 = Kokkos::subview(cb, std::make_pair(Ni * (nl2 + nl3), Ni * (nl2 + nl3 + nl4))); + auto cb33 = Kokkos::subview(cb, std::make_pair(Ni * (nl2 + nl3 + nl4), Ni * (nl2 + nl3 + nl4 + nl33))); + auto cb34 = Kokkos::subview(cb, std::make_pair(Ni * (nl2 + nl3 + nl4 + nl33), Ni * (nl2 + nl3 + nl4 + nl33 + nl34))); + auto cb44 = Kokkos::subview(cb, std::make_pair(Ni * (nl2 + nl3 + nl4 + nl33 + nl34), Ni * (nl2 + nl3 + nl4 + nl33 + nl34 + nl44))); + + if ((nl33>0) && (Nij>3)) { + crossdesc_reduction(cb3, cb3, cb33, d3, d3, ind33l, ind33r, nl33, Ni); + } + if ((nl34>0) && (Nij>4)) { + crossdesc_reduction(cb3, cb4, cb34, d3, d4, ind34l, ind34r, nl34, Ni); + } + if ((nl44>0) && (Nij>5)) { + crossdesc_reduction(cb4, cb4, cb44, d4, d4, ind44l, ind44r, nl44, Ni); + } + Kokkos::fence(); + end = std::chrono::high_resolution_clock::now(); + comptime[6] += std::chrono::duration_cast(end-begin).count()/1e6; + + begin = std::chrono::high_resolution_clock::now(); + set_array_to_zero(l_fij, 3*Nij); + if ((nl2 > 0) && (Nij>0)) twobody_forces(l_fij, cb2, rbfx, rbfy, rbfz, idxi, tj, nrbf2, Ni, Nij); + Kokkos::fence(); + end = std::chrono::high_resolution_clock::now(); + comptime[7] += std::chrono::duration_cast(end-begin).count()/1e6; + + set_array_to_zero(forcecoeff, nelements * nrbf3 * K3 * Ni); + if ((nl3 > 0) && (Nij>1)) threebody_forcecoeff(forcecoeff, cb3, sumU, + pc3, pn3, elemindex, nelements, nrbf3, nabf3, K3, Ni); + if ((nl4 > 0) && (Nij>2)) fourbody_forcecoeff(forcecoeff, cb4, sumU, + pa4, pb4, pc4, nelements, nrbf3, nrbf4, nabf4, K3, Q4, Ni); + if ((nl3 > 0) && (Nij>1)) allbody_forces(l_fij, forcecoeff, rbf, rbfx, rbfy, rbfz, abf, abfx, abfy, abfz, + idxi, tj, nelements, nrbf3, K3, Nij); +} + +template +void PairPODKokkos::tallyforce(t_pod_1d l_fij, t_pod_1i l_ai, t_pod_1i l_aj, int Nij) +{ + auto l_f = f; + Kokkos::parallel_for("TallyForce", Nij, KOKKOS_LAMBDA(int n) { + int im = l_ai(n); + int jm = l_aj(n); + int n3 = 3*n; + double fx = l_fij(n3 + 0); + double fy = l_fij(n3 + 1); + double fz = l_fij(n3 + 2); + Kokkos::atomic_add(&l_f(im, 0), fx); + Kokkos::atomic_add(&l_f(im, 1), fy); + Kokkos::atomic_add(&l_f(im, 2), fz); + Kokkos::atomic_sub(&l_f(jm, 0), fx); + Kokkos::atomic_sub(&l_f(jm, 1), fy); + Kokkos::atomic_sub(&l_f(jm, 2), fz); + }); +} + +template +void PairPODKokkos::tallyenergy(t_pod_1d l_ei, int istart, int Ni) +{ + auto l_eatom = d_eatom; + + // For global energy tally + if (eflag_global) { + double local_eng_vdwl = 0.0; + Kokkos::parallel_reduce("GlobalEnergyTally", Ni, KOKKOS_LAMBDA(int k, E_FLOAT& update) { + update += l_ei(k); + }, local_eng_vdwl); + + // Update global energy on the host after the parallel region + eng_vdwl += local_eng_vdwl; + } + + // For per-atom energy tally + if (eflag_atom) { + Kokkos::parallel_for("PerAtomEnergyTally", Ni, KOKKOS_LAMBDA(int k) { + l_eatom(istart + k) += l_ei(k); + }); + } +} + +template +void PairPODKokkos::tallystress(t_pod_1d l_fij, t_pod_1d l_rij, t_pod_1i l_ai, t_pod_1i l_aj, int Nij) +{ + auto l_vatom = d_vatom; + + if (vflag_global) { + for (int j=0; j<3; j++) { + F_FLOAT sum = 0.0; + Kokkos::parallel_reduce("GlobalStressTally", Nij, KOKKOS_LAMBDA(int k, F_FLOAT& update) { + int k3 = 3*k; + update += l_rij(j + k3) * l_fij(j + k3); + }, sum); + virial[j] -= sum; + } + + F_FLOAT sum = 0.0; + Kokkos::parallel_reduce("GlobalStressTally", Nij, KOKKOS_LAMBDA(int k, F_FLOAT& update) { + int k3 = 3*k; + update += l_rij(k3) * l_fij(1 + k3); + }, sum); + virial[3] -= sum; + + sum = 0.0; + Kokkos::parallel_reduce("GlobalStressTally", Nij, KOKKOS_LAMBDA(int k, F_FLOAT& update) { + int k3 = 3*k; + update += l_rij(k3) * l_fij(2 + k3); + }, sum); + virial[4] -= sum; + + sum = 0.0; + Kokkos::parallel_reduce("GlobalStressTally", Nij, KOKKOS_LAMBDA(int k, F_FLOAT& update) { + int k3 = 3*k; + update += l_rij(1+k3) * l_fij(2+k3); + }, sum); + virial[5] -= sum; + } + + if (vflag_atom) { + Kokkos::parallel_for("PerAtomStressTally", Nij, KOKKOS_LAMBDA(int k) { + int i = l_ai(k); + int j = l_aj(k); + int k3 = 3*k; + double v_local[6]; + v_local[0] = -l_rij(k3) * l_fij(k3 + 0); + v_local[1] = -l_rij(k3 + 1) * l_fij(k3 + 1); + v_local[2] = -l_rij(k3 + 2) * l_fij(k3 + 2); + v_local[3] = -l_rij(k3 + 0) * l_fij(k3 + 1); + v_local[4] = -l_rij(k3 + 0) * l_fij(k3 + 2); + v_local[5] = -l_rij(k3 + 1) * l_fij(k3 + 2); + + for (int d = 0; d < 6; ++d) { + Kokkos::atomic_add(&l_vatom(i, d), 0.5 * v_local[d]); + } + + for (int d = 0; d < 6; ++d) { + Kokkos::atomic_add(&l_vatom(j, d), 0.5 * v_local[d]); + } + + }); + } +} + +template +void PairPODKokkos::savematrix2binfile(std::string filename, t_pod_1d d_A, int nrows, int ncols) +{ + auto A = Kokkos::create_mirror_view(d_A); + Kokkos::deep_copy(A, d_A); + + FILE *fp = fopen(filename.c_str(), "wb"); + double sz[2]; + sz[0] = (double) nrows; + sz[1] = (double) ncols; + fwrite( reinterpret_cast( sz ), sizeof(double) * (2), 1, fp); + fwrite( reinterpret_cast( A.data() ), sizeof(double) * (nrows*ncols), 1, fp); + fclose(fp); +} + +template +void PairPODKokkos::saveintmatrix2binfile(std::string filename, t_pod_1i d_A, int nrows, int ncols) +{ + auto A = Kokkos::create_mirror_view(d_A); + Kokkos::deep_copy(A, d_A); + + FILE *fp = fopen(filename.c_str(), "wb"); + int sz[2]; + sz[0] = nrows; + sz[1] = ncols; + fwrite( reinterpret_cast( sz ), sizeof(int) * (2), 1, fp); + fwrite( reinterpret_cast( A.data() ), sizeof(int) * (nrows*ncols), 1, fp); + fclose(fp); +} + +template +void PairPODKokkos::savedatafordebugging() +{ + saveintmatrix2binfile("podkktypeai.bin", typeai, ni, 1); + saveintmatrix2binfile("podkknumij.bin", numij, ni+1, 1); + saveintmatrix2binfile("podkkai.bin", ai, nij, 1); + saveintmatrix2binfile("podkkaj.bin", aj, nij, 1); + saveintmatrix2binfile("podkkti.bin", ti, nij, 1); + saveintmatrix2binfile("podkktj.bin", tj, nij, 1); + saveintmatrix2binfile("podkkidxi.bin", idxi, nij, 1); + savematrix2binfile("podkkrbf.bin", rbf, nrbfmax, nij); + savematrix2binfile("podkkrbfx.bin", rbfx, nrbfmax, nij); + savematrix2binfile("podkkrbfy.bin", rbfy, nrbfmax, nij); + savematrix2binfile("podkkrbfz.bin", rbfz, nrbfmax, nij); + int kmax = (K3 > ns) ? K3 : ns; + savematrix2binfile("podkkabf.bin", abf, kmax, nij); + savematrix2binfile("podkkabfx.bin", abfx, kmax, nij); + savematrix2binfile("podkkabfy.bin", abfy, kmax, nij); + savematrix2binfile("podkkabfz.bin", abfz, kmax, nij); + savematrix2binfile("podkkbd.bin", bd, ni, Mdesc); + savematrix2binfile("podkksumU.bin", sumU, nelements * K3 * nrbfmax, ni); + savematrix2binfile("podkkrij.bin", rij, 3, nij); + savematrix2binfile("podkkfij.bin", fij, 3, nij); + savematrix2binfile("podkkei.bin", ei, ni, 1); + + error->all(FLERR, "Save data and stop the run for debugging"); +} + +/* ---------------------------------------------------------------------- + memory usage of arrays +------------------------------------------------------------------------- */ + +template +double PairPODKokkos::memory_usage() +{ + double bytes = 0; + + return bytes; +} + +/* ---------------------------------------------------------------------- */ + +namespace LAMMPS_NS { +template class PairPODKokkos; +#ifdef LMP_KOKKOS_GPU +template class PairPODKokkos; +#endif +} diff --git a/src/KOKKOS/pair_pod_kokkos.h b/src/KOKKOS/pair_pod_kokkos.h new file mode 100644 index 0000000000..4763261029 --- /dev/null +++ b/src/KOKKOS/pair_pod_kokkos.h @@ -0,0 +1,226 @@ +/* -*- 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/kk,PairPODKokkos); +PairStyle(pod/kk/device,PairPODKokkos); +PairStyle(pod/kk/host,PairPODKokkos); +// clang-format on +#else + +// clang-format off +#ifndef LMP_PAIR_POD_KOKKOS_H +#define LMP_PAIR_POD_KOKKOS_H + +#include "pair_pod.h" +#include "kokkos_type.h" +#include "pair_kokkos.h" + +namespace LAMMPS_NS { + +template +class PairPODKokkos : public PairPOD { + public: + typedef DeviceType device_type; + typedef ArrayTypes AT; + + PairPODKokkos(class LAMMPS *); + ~PairPODKokkos() override; + + void compute(int, int) override; + void coeff(int, char **) override; + void init_style() override; + double init_one(int, int) override; + + int inum, maxneigh; + int host_flag; + + int eflag, vflag; + int neighflag; + + typename AT::t_neighbors_2d d_neighbors; + typename AT::t_int_1d d_ilist; + typename AT::t_int_1d d_numneigh; + + DAT::tdual_efloat_1d k_eatom; + DAT::tdual_virial_array k_vatom; + typename AT::t_efloat_1d d_eatom; + typename AT::t_virial_array d_vatom; + + typename AT::t_x_array_randomread x; + typename AT::t_f_array f; + typename AT::t_int_1d_randomread type; + + typedef Kokkos::DualView tdual_fparams; + tdual_fparams k_cutsq, k_scale; + typedef Kokkos::View t_fparams; + t_fparams d_cutsq, d_scale; + typename AT::t_int_1d d_map; + + friend void pair_virial_fdotr_compute(PairPODKokkos*); + + void grow(int, int); + void copy_from_pod_class(EAPOD *podptr); + void divideInterval(int *intervals, int N, int M); + int calculateNumberOfIntervals(int N, int intervalSize); + void grow_atoms(int Ni); + void grow_pairs(int Nij); + + void allocate() override; + double memory_usage() override; + + typedef Kokkos::View t_pod_1i; + typedef Kokkos::View t_pod_1d; +// typedef Kokkos::View t_pod_2i; +// typedef Kokkos::View t_pod_2d; +// typedef Kokkos::View t_pod_3d3; + + int atomBlockSize; // size of each atom block + int nAtomBlocks; // number of atoms blocks + int atomBlocks[101]; // atom blocks + double comptime[100]; + int timing; + + int ni; // number of atoms i in the current atom block + int nij; // number of pairs (i,j) in the current atom block + int nimax; // maximum number of atoms i + int nijmax; // maximum number of pairs (i,j) + + int nelements; // number of elements + int onebody; // one-body descriptors + int besseldegree; // degree of Bessel functions + int inversedegree; // degree of inverse functions + int nbesselpars; // number of Bessel parameters + int nCoeffPerElement; // number of coefficients per element = (nl1 + Mdesc*nClusters) + int ns; // number of snapshots for radial basis functions + int nl1, nl2, nl3, nl4, nl23, nl33, nl34, nl44, nl; // number of local descriptors + int nrbf2, nrbf3, nrbf4, nrbfmax; // number of radial basis functions + int nabf3, nabf4; // number of angular basis functions + int K3, K4, Q4; // number of monomials + + // environmental variables + int nClusters; // number of environment clusters + int nComponents; // number of principal components + int Mdesc; // number of base descriptors + + double rin; // inner cut-off radius + double rcut; // outer cut-off radius + double rmax; // rcut - rin + double rcutsq; + + t_pod_1d rij; // (xj - xi) for all pairs (I, J) + t_pod_1d fij; // force for all pairs (I, J) + t_pod_1d ei; // energy for each atom I + t_pod_1i typeai; // types of atoms I only + t_pod_1i numij; // number of pairs (I, J) for each atom I + t_pod_1i idxi; // storing linear indices of atom I for all pairs (I, J) + t_pod_1i ai; // IDs of atoms I for all pairs (I, J) + t_pod_1i aj; // IDs of atoms J for all pairs (I, J) + t_pod_1i ti; // types of atoms I for all pairs (I, J) + t_pod_1i tj; // types of atoms J for all pairs (I, J) + + t_pod_1d besselparams; + t_pod_1d Phi; // eigenvectors matrix ns x ns + t_pod_1d rbf; // radial basis functions nij x nrbfmax + t_pod_1d rbfx; // x-derivatives of radial basis functions nij x nrbfmax + t_pod_1d rbfy; // y-derivatives of radial basis functions nij x nrbfmax + t_pod_1d rbfz; // z-derivatives of radial basis functions nij x nrbfmax + t_pod_1d abf; // angular basis functions nij x K3 + t_pod_1d abfx; // x-derivatives of angular basis functions nij x K3 + t_pod_1d abfy; // y-derivatives of angular basis functions nij x K3 + t_pod_1d abfz; // z-derivatives of angular basis functions nij x K3 + t_pod_1d sumU; // sum of radial basis functions ni x K3 x nrbfmax x nelements + t_pod_1d forcecoeff; // force coefficients ni x K3 x nrbfmax x nelements + t_pod_1d Proj; // PCA Projection matrix + t_pod_1d Centroids; // centroids of the clusters + t_pod_1d bd; // base descriptors ni x Mdesc + t_pod_1d cb; // force coefficients for base descriptors ni x Mdesc + t_pod_1d pd; // environment probability descriptors ni x (1 + nComponents + 3*nClusters) + t_pod_1d coefficients; // coefficients nCoeffPerElement x nelements + t_pod_1i pq3, pn3, pc3; // arrays to compute 3-body angular basis functions + t_pod_1i pa4, pb4, pc4; // arrays to compute 4-body angular basis functions + t_pod_1i ind33l, ind33r; // nl33 + t_pod_1i ind34l, ind34r; // nl34 + t_pod_1i ind44l, ind44r; // nl44 + t_pod_1i elemindex; + + void set_array_to_zero(t_pod_1d a, int N); + + int NeighborCount(t_pod_1i, double, int, int); + + void NeighborList(t_pod_1d l_rij, t_pod_1i l_numij, t_pod_1i l_typeai, t_pod_1i l_idxi, + t_pod_1i l_ai, t_pod_1i l_aj, t_pod_1i l_ti, t_pod_1i l_tj, double l_rcutsq, int gi1, int Ni); + + void radialbasis(t_pod_1d rbft, t_pod_1d rbftx, t_pod_1d rbfty, t_pod_1d rbftz, + t_pod_1d rij, t_pod_1d l_besselparams, double l_rin, double l_rmax, int l_besseldegree, + int l_inversedegree, int l_nbesselpars, int Nij); + + void matrixMultiply(t_pod_1d a, t_pod_1d b, t_pod_1d c, int r1, int c1, int c2); + + void angularbasis(t_pod_1d l_abf, t_pod_1d l_abfx, t_pod_1d l_abfy, t_pod_1d l_abfz, + t_pod_1d l_rij, t_pod_1i l_pq3, int l_K3, int N); + + void radialangularsum(t_pod_1d l_sumU, t_pod_1d l_rbf, t_pod_1d l_abf, t_pod_1i l_tj, + t_pod_1i l_numij, const int l_nelements, const int l_nrbf3, const int l_K3, const int Ni, const int Nij); + + void twobodydesc(t_pod_1d d2, t_pod_1d l_rbf, t_pod_1i l_idxi, t_pod_1i l_tj, int l_nrbf2, const int Ni, const int Nij); + + void threebodydesc(t_pod_1d d3, t_pod_1d l_sumU, t_pod_1i l_pc3, t_pod_1i l_pn3, + int l_nelements, int l_nrbf3, int l_nabf3, int l_K3, const int Ni); + + void fourbodydesc(t_pod_1d d4, t_pod_1d l_sumU, t_pod_1i l_pa4, t_pod_1i l_pb4, t_pod_1i l_pc4, + int l_nelements, int l_nrbf3, int l_nrbf4, int l_nabf4, int l_K3, int l_Q4, int Ni); + + void crossdesc(t_pod_1d d12, t_pod_1d d1, t_pod_1d d2, t_pod_1i ind1, t_pod_1i ind2, int n12, int Ni); + + void crossdesc_reduction(t_pod_1d cb1, t_pod_1d cb2, t_pod_1d c12, t_pod_1d d1, + t_pod_1d d2, t_pod_1i ind1, t_pod_1i ind2, int n12, int Ni); + void blockatom_base_descriptors(t_pod_1d bd, int Ni, int Nij); + void blockatom_base_coefficients(t_pod_1d ei, t_pod_1d cb, t_pod_1d B, int Ni); + void blockatom_environment_descriptors(t_pod_1d ei, t_pod_1d cb, t_pod_1d B, int Ni); + + void twobody_forces(t_pod_1d fij, t_pod_1d cb2, t_pod_1d l_rbfx, t_pod_1d l_rbfy, t_pod_1d l_rbfz, + t_pod_1i l_idxi, t_pod_1i l_tj, int l_nrbf2, const int Ni, const int Nij); + void threebody_forces(t_pod_1d fij, t_pod_1d cb3, t_pod_1d l_rbf, t_pod_1d l_rbfx, + t_pod_1d l_rbfy, t_pod_1d l_rbfz, t_pod_1d l_abf, t_pod_1d l_abfx, t_pod_1d l_abfy, t_pod_1d l_abfz, + t_pod_1d l_sumU, t_pod_1i l_idxi, t_pod_1i l_tj, t_pod_1i l_pc3, t_pod_1i l_pn3, t_pod_1i l_elemindex, + int l_nelements, int l_nrbf3, int l_nabf3, int l_K3, int Ni, int Nij); + void fourbody_forces(t_pod_1d fij, t_pod_1d cb4, t_pod_1d l_rbf, t_pod_1d l_rbfx, t_pod_1d l_rbfy, + t_pod_1d l_rbfz, t_pod_1d l_abf, t_pod_1d l_abfx, t_pod_1d l_abfy, t_pod_1d l_abfz, t_pod_1d l_sumU, + t_pod_1i l_idxi, t_pod_1i l_tj, t_pod_1i l_pa4, t_pod_1i l_pb4, t_pod_1i l_pc4, + int l_nelements, int l_nrbf3, int l_nrbf4, int l_nabf4, int l_K3, int l_Q4, int Ni, int Nij); + + void threebody_forcecoeff(t_pod_1d fb3, t_pod_1d cb3, t_pod_1d l_sumU, t_pod_1i l_pc3, + t_pod_1i l_pn3, t_pod_1i l_elemindex, int l_nelements, int l_nrbf3, int l_nabf3, int l_K3, int Ni); + + void fourbody_forcecoeff(t_pod_1d fb4, t_pod_1d cb4, t_pod_1d l_sumU, t_pod_1i l_pa4, + t_pod_1i l_pb4, t_pod_1i l_pc4, int l_nelements, int l_nrbf3, int l_nrbf4, int l_nabf4, int l_K3, int l_Q4, int Ni); + + void allbody_forces(t_pod_1d fij, t_pod_1d l_forcecoeff, t_pod_1d l_rbf, t_pod_1d l_rbfx, + t_pod_1d l_rbfy, t_pod_1d l_rbfz, t_pod_1d l_abf, t_pod_1d l_abfx, t_pod_1d l_abfy, t_pod_1d l_abfz, + t_pod_1i l_idxi, t_pod_1i l_tj, int l_nelements, int l_nrbf3, int l_K3, int Nij); + + void blockatom_energyforce(t_pod_1d l_ei, t_pod_1d l_fij, int Ni, int Nij); + void tallyenergy(t_pod_1d l_ei, int istart, int Ni); + void tallyforce(t_pod_1d l_fij, t_pod_1i l_ai, t_pod_1i l_aj, int Nij); + void tallystress(t_pod_1d l_fij, t_pod_1d l_rij, t_pod_1i l_ai, t_pod_1i l_aj, int Nij); + + void savematrix2binfile(std::string filename, t_pod_1d d_A, int nrows, int ncols); + void saveintmatrix2binfile(std::string filename, t_pod_1i d_A, int nrows, int ncols); + void savedatafordebugging(); +}; +} // namespace LAMMPS_NS + +#endif +#endif diff --git a/src/KOKKOS/pair_soft_kokkos.cpp b/src/KOKKOS/pair_soft_kokkos.cpp index 2b36c22486..5df926e4d2 100644 --- a/src/KOKKOS/pair_soft_kokkos.cpp +++ b/src/KOKKOS/pair_soft_kokkos.cpp @@ -135,16 +135,14 @@ template template KOKKOS_INLINE_FUNCTION F_FLOAT PairSoftKokkos:: -compute_fpair(const F_FLOAT& rsq, const int& i, const int&j, const int& itype, const int& jtype) const { - (void) i; +compute_fpair(const F_FLOAT& rsq, const int &, const int &, const int& itype, const int& jtype) const { const F_FLOAT r = sqrt(rsq); const F_FLOAT cut_ij = STACKPARAMS?m_params[itype][jtype].cut:params(itype,jtype).cut; const F_FLOAT prefactor_ij = STACKPARAMS?m_params[itype][jtype].prefactor:params(itype,jtype).prefactor; const F_FLOAT arg = MY_PI*r/cut_ij; F_FLOAT fpair = 0.0; - if (r > 0.0) fpair = prefactor_ij * - sin(arg) * MY_PI/cut_ij/r; + if (r > 0.0) fpair = prefactor_ij * sin(arg) * MY_PI/cut_ij/r; return fpair; } @@ -153,8 +151,7 @@ template template KOKKOS_INLINE_FUNCTION F_FLOAT PairSoftKokkos:: -compute_evdwl(const F_FLOAT& rsq, const int& i, const int&j, const int& itype, const int& jtype) const { - (void) i; +compute_evdwl(const F_FLOAT& rsq, const int &, const int &, const int& itype, const int& jtype) const { const F_FLOAT r = sqrt(rsq); const F_FLOAT cut_ij = STACKPARAMS?m_params[itype][jtype].cut:params(itype,jtype).cut; const F_FLOAT prefactor_ij = STACKPARAMS?m_params[itype][jtype].prefactor:params(itype,jtype).prefactor; diff --git a/src/KOKKOS/pair_table_kokkos.cpp b/src/KOKKOS/pair_table_kokkos.cpp index 99d01be4a5..fc38cdf19a 100644 --- a/src/KOKKOS/pair_table_kokkos.cpp +++ b/src/KOKKOS/pair_table_kokkos.cpp @@ -202,9 +202,7 @@ template template KOKKOS_INLINE_FUNCTION F_FLOAT PairTableKokkos:: -compute_fpair(const F_FLOAT& rsq, const int& i, const int&j, const int& itype, const int& jtype) const { - (void) i; - (void) j; +compute_fpair(const F_FLOAT &rsq, const int &, const int &, const int &itype, const int &jtype) const { union_int_float_t rsq_lookup; double fpair; const int tidx = d_table_const.tabindex(itype,jtype); @@ -236,9 +234,7 @@ template template KOKKOS_INLINE_FUNCTION F_FLOAT PairTableKokkos:: -compute_evdwl(const F_FLOAT& rsq, const int& i, const int&j, const int& itype, const int& jtype) const { - (void) i; - (void) j; +compute_evdwl(const F_FLOAT &rsq, const int &, const int &, const int &itype, const int &jtype) const { double evdwl; union_int_float_t rsq_lookup; const int tidx = d_table_const.tabindex(itype,jtype); diff --git a/src/KOKKOS/pair_yukawa_colloid_kokkos.cpp b/src/KOKKOS/pair_yukawa_colloid_kokkos.cpp index 9303e0d435..1457e3439d 100644 --- a/src/KOKKOS/pair_yukawa_colloid_kokkos.cpp +++ b/src/KOKKOS/pair_yukawa_colloid_kokkos.cpp @@ -216,10 +216,8 @@ template template KOKKOS_INLINE_FUNCTION F_FLOAT PairYukawaColloidKokkos:: -compute_fpair(const F_FLOAT& rsq, const int& i, const int&j, - const int& itype, const int& jtype) const { - (void) i; - (void) j; +compute_fpair(const F_FLOAT &rsq, const int &i, const int &j, + const int &itype, const int &jtype) const { const F_FLOAT radi = radius[i]; const F_FLOAT radj = radius[j]; const F_FLOAT rr = sqrt(rsq); @@ -242,10 +240,8 @@ template template KOKKOS_INLINE_FUNCTION F_FLOAT PairYukawaColloidKokkos:: -compute_evdwl(const F_FLOAT& rsq, const int& i, const int&j, - const int& itype, const int& jtype) const { - (void) i; - (void) j; +compute_evdwl(const F_FLOAT &rsq, const int &i, const int &j, + const int &itype, const int &jtype) const { const F_FLOAT radi = radius[i]; const F_FLOAT radj = radius[j]; const F_FLOAT rr = sqrt(rsq); diff --git a/src/KOKKOS/pair_yukawa_kokkos.cpp b/src/KOKKOS/pair_yukawa_kokkos.cpp index e51170e195..fda40c14b6 100644 --- a/src/KOKKOS/pair_yukawa_kokkos.cpp +++ b/src/KOKKOS/pair_yukawa_kokkos.cpp @@ -215,10 +215,8 @@ template template KOKKOS_INLINE_FUNCTION F_FLOAT PairYukawaKokkos:: -compute_fpair(const F_FLOAT& rsq, const int& i, const int&j, - const int& itype, const int& jtype) const { - (void) i; - (void) j; +compute_fpair(const F_FLOAT &rsq, const int &, const int &, + const int &itype, const int &jtype) const { const F_FLOAT rr = sqrt(rsq); // Fetch the params either off the stack or from some mapped memory? const F_FLOAT aa = STACKPARAMS ? m_params[itype][jtype].a @@ -241,10 +239,8 @@ template template KOKKOS_INLINE_FUNCTION F_FLOAT PairYukawaKokkos:: -compute_evdwl(const F_FLOAT& rsq, const int& i, const int&j, - const int& itype, const int& jtype) const { - (void) i; - (void) j; +compute_evdwl(const F_FLOAT &rsq, const int &, const int &, + const int &itype, const int &jtype) const { const F_FLOAT rr = sqrt(rsq); const F_FLOAT aa = STACKPARAMS ? m_params[itype][jtype].a : params(itype,jtype).a; diff --git a/src/KOKKOS/pair_zbl_kokkos.cpp b/src/KOKKOS/pair_zbl_kokkos.cpp index e2467ebe95..a91a6642e8 100644 --- a/src/KOKKOS/pair_zbl_kokkos.cpp +++ b/src/KOKKOS/pair_zbl_kokkos.cpp @@ -184,9 +184,7 @@ template template KOKKOS_INLINE_FUNCTION F_FLOAT PairZBLKokkos:: -compute_fpair(const F_FLOAT& rsq, const int& i, const int&j, const int& itype, const int& jtype) const { - (void) i; - (void) j; +compute_fpair(const F_FLOAT& rsq, const int &, const int &, const int &itype, const int &jtype) const { const F_FLOAT r = sqrt(rsq); F_FLOAT fpair = dzbldr(r, itype, jtype); @@ -205,9 +203,7 @@ template template KOKKOS_INLINE_FUNCTION F_FLOAT PairZBLKokkos:: -compute_evdwl(const F_FLOAT& rsq, const int& i, const int&j, const int& itype, const int& jtype) const { - (void) i; - (void) j; +compute_evdwl(const F_FLOAT &rsq, const int &, const int &, const int &itype, const int &jtype) const { const F_FLOAT r = sqrt(rsq); F_FLOAT evdwl = e_zbl(r, itype, jtype); evdwl += d_sw5(itype,jtype); diff --git a/src/ML-POD/compute_pod_atom.cpp b/src/ML-POD/compute_pod_atom.cpp new file mode 100644 index 0000000000..dde7dc7ef7 --- /dev/null +++ b/src/ML-POD/compute_pod_atom.cpp @@ -0,0 +1,277 @@ +// clang-format off +/* ---------------------------------------------------------------------- + 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 "compute_pod_atom.h" + +#include "atom.h" +#include "comm.h" +#include "error.h" +#include "force.h" +#include "memory.h" +#include "modify.h" +#include "neigh_list.h" +#include "neighbor.h" +#include "pair.h" +#include "update.h" + +#include + +#include "eapod.h" + +using namespace LAMMPS_NS; + +enum { SCALAR, VECTOR, ARRAY }; + +ComputePODAtom::ComputePODAtom(LAMMPS *lmp, int narg, char **arg) : + Compute(lmp, narg, arg), list(nullptr), podptr(nullptr), pod(nullptr), tmpmem(nullptr), + rij(nullptr), elements(nullptr), map(nullptr) +{ + int nargmin = 6; + + if (narg < nargmin) error->all(FLERR, "Illegal compute {} command", style); + if (comm->nprocs > 1) error->all(FLERR, "compute command does not support multi processors"); + + std::string pod_file = std::string(arg[3]); // pod input file + std::string coeff_file = std::string(arg[4]); // coefficient input file + podptr = new EAPOD(lmp, pod_file, coeff_file); + + int ntypes = atom->ntypes; + memory->create(map, ntypes + 1, "compute_pod_global:map"); + map_element2type(narg - 5, arg + 5, podptr->nelements); + + cutmax = podptr->rcut; + + nmax = 0; + nijmax = 0; + pod = nullptr; + elements = nullptr; + + size_peratom_cols = podptr->Mdesc * podptr->nClusters; + peratom_flag = 1; +} + +/* ---------------------------------------------------------------------- */ + +ComputePODAtom::~ComputePODAtom() +{ + memory->destroy(map); + memory->destroy(pod); + delete podptr; +} + +/* ---------------------------------------------------------------------- */ + +void ComputePODAtom::init() +{ + if (force->pair == nullptr) + error->all(FLERR,"Compute pod requires a pair style be defined"); + + if (cutmax > force->pair->cutforce) + error->all(FLERR,"Compute pod cutoff is longer than pairwise cutoff"); + + // need an occasional full neighbor list + + neighbor->add_request(this, NeighConst::REQ_FULL | NeighConst::REQ_OCCASIONAL); + + if (modify->get_compute_by_style("pod").size() > 1 && comm->me == 0) + error->warning(FLERR,"More than one compute pod"); +} + + +/* ---------------------------------------------------------------------- */ + +void ComputePODAtom::init_list(int /*id*/, NeighList *ptr) +{ + list = ptr; +} + +/* ---------------------------------------------------------------------- */ + +void ComputePODAtom::compute_peratom() +{ + invoked_peratom = update->ntimestep; + + // grow pod array if necessary + + if (atom->natoms > nmax) { + memory->destroy(pod); + nmax = atom->natoms; + int numdesc = podptr->Mdesc * podptr->nClusters; + memory->create(pod, nmax, numdesc,"sna/atom:sna"); + array_atom = pod; + } + + for (int i = 0; i < atom->natoms; i++) + for (int icoeff = 0; icoeff < size_peratom_cols; icoeff++) { + pod[i][icoeff] = 0.0; + } + + // invoke full neighbor list (will copy or build if necessary) + + neighbor->build_one(list); + + double **x = atom->x; + int **firstneigh = list->firstneigh; + int *numneigh = list->numneigh; + int *type = atom->type; + int *ilist = list->ilist; + int inum = list->inum; + int nClusters = podptr->nClusters; + int Mdesc = podptr->Mdesc; + double rcutsq = podptr->rcut*podptr->rcut; + + 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); + podptr->free_temp_memory(); + podptr->allocate_temp_memory(nijmax); + } + + rij = &podptr->tmpmem[0]; + tmpmem = &podptr->tmpmem[3*nijmax]; + ai = &podptr->tmpint[0]; + aj = &podptr->tmpint[nijmax]; + ti = &podptr->tmpint[2*nijmax]; + tj = &podptr->tmpint[3*nijmax]; + + // get neighbor list for atom i + lammpsNeighborList(x, firstneigh, atom->tag, type, numneigh, rcutsq, i); + + if (nij > 0) { + // peratom base descriptors + double *bd = &podptr->bd[0]; + double *bdd = &podptr->bdd[0]; + podptr->peratombase_descriptors(bd, bdd, rij, tmpmem, tj, nij); + + if (nClusters>1) { + // peratom env descriptors + double *pd = &podptr->pd[0]; + double *pdd = &podptr->pdd[0]; + podptr->peratomenvironment_descriptors(pd, pdd, bd, bdd, tmpmem, ti[0] - 1, nij); + for (int k = 0; k < nClusters; k++) + for (int m = 0; m < Mdesc; m++) { + int mk = m + Mdesc*k; + pod[i][mk] = pd[k]*bd[m]; + // for (int n=0; n 1e-20) { + rij[nij * 3 + 0] = delx; + rij[nij * 3 + 1] = dely; + rij[nij * 3 + 2] = delz; + ai[nij] = atomid[gi]-1; + aj[nij] = atomid[gj]-1; + ti[nij] = itype; + tj[nij] = map[atomtypes[gj]] + 1; + nij++; + } + } +} + +void ComputePODAtom::map_element2type(int narg, char **arg, int nelements) +{ + int i,j; + const int ntypes = atom->ntypes; + + // read args that map atom types to elements in potential file + // map[i] = which element the Ith atom type is, -1 if "NULL" + // nelements = # of unique elements + // elements = list of element names + + if (narg != ntypes) + 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]; + delete[] elements; + } + elements = new char*[ntypes]; + for (i = 0; i < ntypes; i++) elements[i] = nullptr; + + nelements = 0; + map[0] = -1; + for (i = 1; i <= narg; i++) { + std::string entry = arg[i-1]; + if (entry == "NULL") { + map[i] = -1; + continue; + } + for (j = 0; j < nelements; j++) + if (entry == elements[j]) break; + map[i] = j; + if (j == nelements) { + elements[j] = utils::strdup(entry); + nelements++; + } + } +} diff --git a/src/ML-POD/compute_pod_atom.h b/src/ML-POD/compute_pod_atom.h new file mode 100644 index 0000000000..d2f8a9b993 --- /dev/null +++ b/src/ML-POD/compute_pod_atom.h @@ -0,0 +1,61 @@ +/* -*- 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 COMPUTE_CLASS +// clang-format off +ComputeStyle(pod/atom,ComputePODAtom); +// clang-format on +#else + +#ifndef LMP_COMPUTE_POD_ATOM_H +#define LMP_COMPUTE_POD_ATOM_H + +#include "compute.h" + +namespace LAMMPS_NS { + +class ComputePODAtom : public Compute { + public: + ComputePODAtom(class LAMMPS *, int, char **); + ~ComputePODAtom() override; + void init() override; + void init_list(int, class NeighList *) override; + void compute_peratom() override; + double memory_usage() override; + void lammpsNeighborList(double **x, int **firstneigh, tagint *atomid, int *atomtype, + int *numneigh, double rcutsq, int i); + void map_element2type(int narg, char **arg, int nelements); + + private: + class NeighList *list; + class EAPOD *podptr; + double **pod; + double cutmax; + int nmax; + int nij; + int nijmax; + + double *tmpmem; // temporary memory + double *rij; // (xj - xi) for all pairs (I, J) + char **elements; + int *map; + 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) +}; + +} // namespace LAMMPS_NS + +#endif +#endif diff --git a/src/ML-POD/compute_pod_global.cpp b/src/ML-POD/compute_pod_global.cpp new file mode 100644 index 0000000000..14b70a5a90 --- /dev/null +++ b/src/ML-POD/compute_pod_global.cpp @@ -0,0 +1,283 @@ +// clang-format off +/* ---------------------------------------------------------------------- + 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 "compute_pod_global.h" + +#include "atom.h" +#include "comm.h" +#include "error.h" +#include "force.h" +#include "memory.h" +#include "modify.h" +#include "neigh_list.h" +#include "neighbor.h" +#include "pair.h" +#include "update.h" + +#include + +#include "eapod.h" + +using namespace LAMMPS_NS; + +enum { SCALAR, VECTOR, ARRAY }; + +ComputePODGlobal::ComputePODGlobal(LAMMPS *lmp, int narg, char **arg) : + Compute(lmp, narg, arg), list(nullptr), podptr(nullptr), pod(nullptr), tmpmem(nullptr), + rij(nullptr), elements(nullptr), map(nullptr), ai(nullptr), aj(nullptr), ti(nullptr), + tj(nullptr) +{ + array_flag = 1; + extarray = 0; + + int nargmin = 6; + + if (narg < nargmin) error->all(FLERR, "Illegal compute {} command", style); + if (comm->nprocs > 1) error->all(FLERR, "compute command does not support multi processors"); + + std::string pod_file = std::string(arg[3]); // pod input file + std::string coeff_file = std::string(arg[4]); // coefficient input file + podptr = new EAPOD(lmp, pod_file, coeff_file); + + int ntypes = atom->ntypes; + memory->create(map, ntypes + 1, "compute_pod_global:map"); + map_element2type(narg - 5, arg + 5, podptr->nelements); + + size_array_rows = 1 + 3*atom->natoms; + size_array_cols = podptr->nCoeffAll; + cutmax = podptr->rcut; + + nijmax = 0; + pod = nullptr; + elements = nullptr; +} + +/* ---------------------------------------------------------------------- */ + +ComputePODGlobal::~ComputePODGlobal() +{ + memory->destroy(map); + memory->destroy(pod); + delete podptr; +} + +/* ---------------------------------------------------------------------- */ + +void ComputePODGlobal::init() +{ + if (force->pair == nullptr) + error->all(FLERR,"Compute pod requires a pair style be defined"); + + if (cutmax > force->pair->cutforce) + error->all(FLERR,"Compute pod cutoff is longer than pairwise cutoff"); + + // need an occasional full neighbor list + + neighbor->add_request(this, NeighConst::REQ_FULL | NeighConst::REQ_OCCASIONAL); + + if (modify->get_compute_by_style("pod").size() > 1 && comm->me == 0) + error->warning(FLERR,"More than one compute pod"); + + // allocate memory for global array + memory->create(pod,size_array_rows,size_array_cols, + "compute_pod_global:pod"); + array = pod; +} + +/* ---------------------------------------------------------------------- */ + +void ComputePODGlobal::init_list(int /*id*/, NeighList *ptr) +{ + list = ptr; +} + +/* ---------------------------------------------------------------------- */ + +void ComputePODGlobal::compute_array() +{ + // int ntotal = atom->nlocal + atom->nghost; + invoked_peratom = update->ntimestep; + + // clear global array + + for (int irow = 0; irow < size_array_rows; irow++) + for (int icoeff = 0; icoeff < size_array_cols; icoeff++) + pod[irow][icoeff] = 0.0; + + // invoke full neighbor list (will copy or build if necessary) + + neighbor->build_one(list); + + double **x = atom->x; + int **firstneigh = list->firstneigh; + int *numneigh = list->numneigh; + int *type = atom->type; + int *ilist = list->ilist; + int inum = list->inum; + int nClusters = podptr->nClusters; + int Mdesc = podptr->Mdesc; + int nCoeffPerElement = podptr->nCoeffPerElement; + + double rcutsq = podptr->rcut*podptr->rcut; + + 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); + podptr->free_temp_memory(); + podptr->allocate_temp_memory(nijmax); + } + + rij = &podptr->tmpmem[0]; + tmpmem = &podptr->tmpmem[3*nijmax]; + ai = &podptr->tmpint[0]; + aj = &podptr->tmpint[nijmax]; + ti = &podptr->tmpint[2*nijmax]; + tj = &podptr->tmpint[3*nijmax]; + + // get neighbor list for atom i + lammpsNeighborList(x, firstneigh, atom->tag, type, numneigh, rcutsq, i); + + if (nij > 0) { + // peratom base descriptors + double *bd = &podptr->bd[0]; + double *bdd = &podptr->bdd[0]; + podptr->peratombase_descriptors(bd, bdd, rij, tmpmem, tj, nij); + + pod[0][nCoeffPerElement*(ti[0]-1)] += 1.0; // one-body descriptor + + if (nClusters>1) { + // peratom env descriptors + double *pd = &podptr->pd[0]; + double *pdd = &podptr->pdd[0]; + podptr->peratomenvironment_descriptors(pd, pdd, bd, bdd, tmpmem, ti[0] - 1, nij); + + for (int j = 0; j < nClusters; j++) { + for (int m=0; m 1e-20) { + rij[nij * 3 + 0] = delx; + rij[nij * 3 + 1] = dely; + rij[nij * 3 + 2] = delz; + ai[nij] = atomid[gi]-1; + aj[nij] = atomid[gj]-1; + ti[nij] = itype; + tj[nij] = map[atomtypes[gj]] + 1; + nij++; + } + } +} + +void ComputePODGlobal::map_element2type(int narg, char **arg, int nelements) +{ + int i,j; + const int ntypes = atom->ntypes; + + // read args that map atom types to elements in potential file + // map[i] = which element the Ith atom type is, -1 if "NULL" + // nelements = # of unique elements + // elements = list of element names + + if (narg != ntypes) + 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]; + delete[] elements; + } + elements = new char*[ntypes]; + for (i = 0; i < ntypes; i++) elements[i] = nullptr; + + nelements = 0; + map[0] = -1; + for (i = 1; i <= narg; i++) { + std::string entry = arg[i-1]; + if (entry == "NULL") { + map[i] = -1; + continue; + } + for (j = 0; j < nelements; j++) + if (entry == elements[j]) break; + map[i] = j; + if (j == nelements) { + elements[j] = utils::strdup(entry); + nelements++; + } + } +} diff --git a/src/ML-POD/compute_pod_global.h b/src/ML-POD/compute_pod_global.h new file mode 100644 index 0000000000..b637be59d9 --- /dev/null +++ b/src/ML-POD/compute_pod_global.h @@ -0,0 +1,60 @@ +/* -*- 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 COMPUTE_CLASS +// clang-format off +ComputeStyle(pod/global,ComputePODGlobal); +// clang-format on +#else + +#ifndef LMP_COMPUTE_POD_GLOBAL_H +#define LMP_COMPUTE_POD_GLOBAL_H + +#include "compute.h" + +namespace LAMMPS_NS { + +class ComputePODGlobal : public Compute { + public: + ComputePODGlobal(class LAMMPS *, int, char **); + ~ComputePODGlobal() override; + void init() override; + void init_list(int, class NeighList *) override; + void compute_array() override; + double memory_usage() override; + void lammpsNeighborList(double **x, int **firstneigh, tagint *atomid, int *atomtype, + int *numneigh, double rcutsq, int i); + void map_element2type(int narg, char **arg, int nelements); + + private: + class NeighList *list; + class EAPOD *podptr; + double **pod; + double cutmax; + int nij; + int nijmax; + + double *tmpmem; // temporary memory + double *rij; // (xj - xi) for all pairs (I, J) + char **elements; + int *map; + 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) +}; + +} // namespace LAMMPS_NS + +#endif +#endif diff --git a/src/ML-POD/compute_pod_local.cpp b/src/ML-POD/compute_pod_local.cpp new file mode 100644 index 0000000000..2d2c89fd4d --- /dev/null +++ b/src/ML-POD/compute_pod_local.cpp @@ -0,0 +1,280 @@ +// clang-format off +/* ---------------------------------------------------------------------- + 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 "compute_pod_local.h" + +#include "atom.h" +#include "comm.h" +#include "error.h" +#include "force.h" +#include "memory.h" +#include "modify.h" +#include "neigh_list.h" +#include "neighbor.h" +#include "pair.h" +#include "update.h" + +#include + +#include "eapod.h" + +using namespace LAMMPS_NS; + +enum { SCALAR, VECTOR, ARRAY }; + +ComputePODLocal::ComputePODLocal(LAMMPS *lmp, int narg, char **arg) : + Compute(lmp, narg, arg), list(nullptr), podptr(nullptr), pod(nullptr), tmpmem(nullptr), + rij(nullptr), elements(nullptr), map(nullptr), ai(nullptr), aj(nullptr), ti(nullptr), + tj(nullptr) +{ + array_flag = 1; + extarray = 0; + + int nargmin = 6; + + if (narg < nargmin) error->all(FLERR, "Illegal compute {} command", style); + if (comm->nprocs > 1) error->all(FLERR, "compute command does not support multi processors"); + + std::string pod_file = std::string(arg[3]); // pod input file + std::string coeff_file = std::string(arg[4]); // coefficient input file + podptr = new EAPOD(lmp, pod_file, coeff_file); + + int ntypes = atom->ntypes; + memory->create(map, ntypes + 1, "compute_pod_local:map"); + + map_element2type(narg - 5, arg + 5, podptr->nelements); + + int numdesc = podptr->Mdesc * podptr->nClusters; + size_array_rows = 1 + 3*atom->natoms; + size_array_cols = atom->natoms*numdesc; + cutmax = podptr->rcut; + + nijmax = 0; + pod = nullptr; + elements = nullptr; +} + +/* ---------------------------------------------------------------------- */ + +ComputePODLocal::~ComputePODLocal() +{ + memory->destroy(map); + memory->destroy(pod); + delete podptr; +} + +/* ---------------------------------------------------------------------- */ + +void ComputePODLocal::init() +{ + if (force->pair == nullptr) + error->all(FLERR,"Compute pod requires a pair style be defined"); + + if (cutmax > force->pair->cutforce) + error->all(FLERR,"Compute pod cutoff is longer than pairwise cutoff"); + + // need an occasional full neighbor list + + neighbor->add_request(this, NeighConst::REQ_FULL | NeighConst::REQ_OCCASIONAL); + + if (modify->get_compute_by_style("pod").size() > 1 && comm->me == 0) + error->warning(FLERR,"More than one compute pod"); + + // allocate memory for global array + memory->create(pod,size_array_rows,size_array_cols, + "compute_pod_local:pod"); + array = pod; +} + +/* ---------------------------------------------------------------------- */ + +void ComputePODLocal::init_list(int /*id*/, NeighList *ptr) +{ + list = ptr; +} + +/* ---------------------------------------------------------------------- */ + +void ComputePODLocal::compute_array() +{ + // int ntotal = atom->nlocal + atom->nghost; + invoked_peratom = update->ntimestep; + + // clear global array + + for (int irow = 0; irow < size_array_rows; irow++) + for (int icoeff = 0; icoeff < size_array_cols; icoeff++) + pod[irow][icoeff] = 0.0; + + // invoke full neighbor list (will copy or build if necessary) + + neighbor->build_one(list); + + double **x = atom->x; + int **firstneigh = list->firstneigh; + int *numneigh = list->numneigh; + int *type = atom->type; + int *ilist = list->ilist; + int inum = list->inum; + int nClusters = podptr->nClusters; + int Mdesc = podptr->Mdesc; + + double rcutsq = podptr->rcut*podptr->rcut; + + 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); + podptr->free_temp_memory(); + podptr->allocate_temp_memory(nijmax); + } + + rij = &podptr->tmpmem[0]; + tmpmem = &podptr->tmpmem[3*nijmax]; + ai = &podptr->tmpint[0]; + aj = &podptr->tmpint[nijmax]; + ti = &podptr->tmpint[2*nijmax]; + tj = &podptr->tmpint[3*nijmax]; + + // get neighbor list for atom i + lammpsNeighborList(x, firstneigh, atom->tag, type, numneigh, rcutsq, i); + + if (nij > 0) { + // peratom base descriptors + double *bd = &podptr->bd[0]; + double *bdd = &podptr->bdd[0]; + podptr->peratombase_descriptors(bd, bdd, rij, tmpmem, tj, nij); + + if (nClusters>1) { + // peratom env descriptors + double *pd = &podptr->pd[0]; + double *pdd = &podptr->pdd[0]; + podptr->peratomenvironment_descriptors(pd, pdd, bd, bdd, tmpmem, ti[0] - 1, nij); + for (int k = 0; k < nClusters; k++) + for (int m = 0; m < Mdesc; m++) { + int imk = m + Mdesc*k + Mdesc*nClusters*i; + pod[0][imk] = pd[k]*bd[m]; + for (int n=0; n 1e-20) { + rij[nij * 3 + 0] = delx; + rij[nij * 3 + 1] = dely; + rij[nij * 3 + 2] = delz; + ai[nij] = atomid[gi]-1; + aj[nij] = atomid[gj]-1; + ti[nij] = itype; + tj[nij] = map[atomtypes[gj]] + 1; + nij++; + } + } +} + +void ComputePODLocal::map_element2type(int narg, char **arg, int nelements) +{ + int i,j; + const int ntypes = atom->ntypes; + + // read args that map atom types to elements in potential file + // map[i] = which element the Ith atom type is, -1 if "NULL" + // nelements = # of unique elements + // elements = list of element names + + if (narg != ntypes) + 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]; + delete[] elements; + } + elements = new char*[ntypes]; + for (i = 0; i < ntypes; i++) elements[i] = nullptr; + + nelements = 0; + map[0] = -1; + for (i = 1; i <= narg; i++) { + std::string entry = arg[i-1]; + if (entry == "NULL") { + map[i] = -1; + continue; + } + for (j = 0; j < nelements; j++) + if (entry == elements[j]) break; + map[i] = j; + if (j == nelements) { + elements[j] = utils::strdup(entry); + nelements++; + } + } +} diff --git a/src/ML-POD/compute_pod_local.h b/src/ML-POD/compute_pod_local.h new file mode 100644 index 0000000000..3d8137271a --- /dev/null +++ b/src/ML-POD/compute_pod_local.h @@ -0,0 +1,60 @@ +/* -*- 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 COMPUTE_CLASS +// clang-format off +ComputeStyle(pod/local,ComputePODLocal); +// clang-format on +#else + +#ifndef LMP_COMPUTE_POD_LOCAL_H +#define LMP_COMPUTE_POD_LOCAL_H + +#include "compute.h" + +namespace LAMMPS_NS { + +class ComputePODLocal : public Compute { + public: + ComputePODLocal(class LAMMPS *, int, char **); + ~ComputePODLocal() override; + void init() override; + void init_list(int, class NeighList *) override; + void compute_array() override; + double memory_usage() override; + void lammpsNeighborList(double **x, int **firstneigh, tagint *atomid, int *atomtype, + int *numneigh, double rcutsq, int i); + void map_element2type(int narg, char **arg, int nelements); + + private: + class NeighList *list; + class EAPOD *podptr; + double **pod; + double cutmax; + int nij; + int nijmax; + + double *tmpmem; // temporary memory + double *rij; // (xj - xi) for all pairs (I, J) + char **elements; + int *map; + 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) +}; + +} // namespace LAMMPS_NS + +#endif +#endif diff --git a/src/ML-POD/compute_podd_atom.cpp b/src/ML-POD/compute_podd_atom.cpp new file mode 100644 index 0000000000..4ab6e23393 --- /dev/null +++ b/src/ML-POD/compute_podd_atom.cpp @@ -0,0 +1,282 @@ +// clang-format off +/* ---------------------------------------------------------------------- + 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 "compute_podd_atom.h" + +#include "atom.h" +#include "comm.h" +#include "error.h" +#include "force.h" +#include "memory.h" +#include "modify.h" +#include "neigh_list.h" +#include "neighbor.h" +#include "pair.h" +#include "update.h" + +#include + +#include "eapod.h" + +using namespace LAMMPS_NS; + +enum { SCALAR, VECTOR, ARRAY }; + +ComputePODDAtom::ComputePODDAtom(LAMMPS *lmp, int narg, char **arg) : + Compute(lmp, narg, arg), list(nullptr), podptr(nullptr), pod(nullptr), tmpmem(nullptr), + rij(nullptr), elements(nullptr), map(nullptr), ai(nullptr), aj(nullptr), ti(nullptr), + tj(nullptr) +{ + int nargmin = 6; + + if (narg < nargmin) error->all(FLERR, "Illegal compute {} command", style); + if (comm->nprocs > 1) error->all(FLERR, "compute command does not support multi processors"); + + std::string pod_file = std::string(arg[3]); // pod input file + std::string coeff_file = std::string(arg[4]); // coefficient input file + podptr = new EAPOD(lmp, pod_file, coeff_file); + + int ntypes = atom->ntypes; + memory->create(map, ntypes + 1, "compute_pod_global:map"); + map_element2type(narg - 5, arg + 5, podptr->nelements); + + cutmax = podptr->rcut; + + nmax = 0; + nijmax = 0; + pod = nullptr; + elements = nullptr; + + if (((((MAXBIGINT*3.0)*atom->natoms)*podptr->nClusters)*podptr->Mdesc) > (MAXSMALLINT*1.0)) + error->all(FLERR, "Per-atom data too large"); + size_peratom_cols = 3 * atom->natoms * podptr->Mdesc * podptr->nClusters; + peratom_flag = 1; +} + +/* ---------------------------------------------------------------------- */ + +ComputePODDAtom::~ComputePODDAtom() +{ + memory->destroy(map); + memory->destroy(pod); + delete podptr; +} + +/* ---------------------------------------------------------------------- */ + +void ComputePODDAtom::init() +{ + if (force->pair == nullptr) + error->all(FLERR,"Compute pod requires a pair style be defined"); + + if (cutmax > force->pair->cutforce) + error->all(FLERR,"Compute pod cutoff is longer than pairwise cutoff"); + + // need an occasional full neighbor list + + neighbor->add_request(this, NeighConst::REQ_FULL | NeighConst::REQ_OCCASIONAL); + + if (modify->get_compute_by_style("pod").size() > 1 && comm->me == 0) + error->warning(FLERR,"More than one compute pod"); +} + + +/* ---------------------------------------------------------------------- */ + +void ComputePODDAtom::init_list(int /*id*/, NeighList *ptr) +{ + list = ptr; +} + +/* ---------------------------------------------------------------------- */ + +void ComputePODDAtom::compute_peratom() +{ + invoked_peratom = update->ntimestep; + + // grow pod array if necessary + + if (atom->natoms > nmax) { + memory->destroy(pod); + nmax = atom->natoms; + if (((((MAXBIGINT*3.0)*atom->natoms)*podptr->nClusters)*podptr->Mdesc) > (MAXSMALLINT*1.0)) + error->all(FLERR, "Per-atom data too large"); + int numdesc = 3 * atom->natoms * podptr->Mdesc * podptr->nClusters; + memory->create(pod, nmax, numdesc,"podd/atom:pod"); + array_atom = pod; + } + + for (int i = 0; i < atom->natoms; i++) + for (int icoeff = 0; icoeff < size_peratom_cols; icoeff++) { + pod[i][icoeff] = 0.0; + } + + // invoke full neighbor list (will copy or build if necessary) + + neighbor->build_one(list); + + double **x = atom->x; + int **firstneigh = list->firstneigh; + int *numneigh = list->numneigh; + int *type = atom->type; + int *ilist = list->ilist; + int inum = list->inum; + int nClusters = podptr->nClusters; + int Mdesc = podptr->Mdesc; + double rcutsq = podptr->rcut*podptr->rcut; + + 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); + podptr->free_temp_memory(); + podptr->allocate_temp_memory(nijmax); + } + + rij = &podptr->tmpmem[0]; + tmpmem = &podptr->tmpmem[3*nijmax]; + ai = &podptr->tmpint[0]; + aj = &podptr->tmpint[nijmax]; + ti = &podptr->tmpint[2*nijmax]; + tj = &podptr->tmpint[3*nijmax]; + + // get neighbor list for atom i + lammpsNeighborList(x, firstneigh, atom->tag, type, numneigh, rcutsq, i); + + if (nij > 0) { + // peratom base descriptors + double *bd = &podptr->bd[0]; + double *bdd = &podptr->bdd[0]; + podptr->peratombase_descriptors(bd, bdd, rij, tmpmem, tj, nij); + + if (nClusters>1) { + // peratom env descriptors + double *pd = &podptr->pd[0]; + double *pdd = &podptr->pdd[0]; + podptr->peratomenvironment_descriptors(pd, pdd, bd, bdd, tmpmem, ti[0] - 1, nij); + for (int n=0; n 1e-20) { + rij[nij * 3 + 0] = delx; + rij[nij * 3 + 1] = dely; + rij[nij * 3 + 2] = delz; + ai[nij] = atomid[gi]-1; + aj[nij] = atomid[gj]-1; + ti[nij] = itype; + tj[nij] = map[atomtypes[gj]] + 1; + nij++; + } + } +} + +void ComputePODDAtom::map_element2type(int narg, char **arg, int nelements) +{ + int i,j; + const int ntypes = atom->ntypes; + + // read args that map atom types to elements in potential file + // map[i] = which element the Ith atom type is, -1 if "NULL" + // nelements = # of unique elements + // elements = list of element names + + if (narg != ntypes) + 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]; + delete[] elements; + } + elements = new char*[ntypes]; + for (i = 0; i < ntypes; i++) elements[i] = nullptr; + + nelements = 0; + map[0] = -1; + for (i = 1; i <= narg; i++) { + std::string entry = arg[i-1]; + if (entry == "NULL") { + map[i] = -1; + continue; + } + for (j = 0; j < nelements; j++) + if (entry == elements[j]) break; + map[i] = j; + if (j == nelements) { + elements[j] = utils::strdup(entry); + nelements++; + } + } +} diff --git a/src/ML-POD/compute_podd_atom.h b/src/ML-POD/compute_podd_atom.h new file mode 100644 index 0000000000..60802803ce --- /dev/null +++ b/src/ML-POD/compute_podd_atom.h @@ -0,0 +1,61 @@ +/* -*- 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 COMPUTE_CLASS +// clang-format off +ComputeStyle(podd/atom,ComputePODDAtom); +// clang-format on +#else + +#ifndef LMP_COMPUTE_PODD_ATOM_H +#define LMP_COMPUTE_PODD_ATOM_H + +#include "compute.h" + +namespace LAMMPS_NS { + +class ComputePODDAtom : public Compute { + public: + ComputePODDAtom(class LAMMPS *, int, char **); + ~ComputePODDAtom() override; + void init() override; + void init_list(int, class NeighList *) override; + void compute_peratom() override; + double memory_usage() override; + void lammpsNeighborList(double **x, int **firstneigh, tagint *atomid, int *atomtype, + int *numneigh, double rcutsq, int i); + void map_element2type(int narg, char **arg, int nelements); + + private: + class NeighList *list; + class EAPOD *podptr; + double **pod; + double cutmax; + int nmax; + int nij; + int nijmax; + + double *tmpmem; // temporary memory + double *rij; // (xj - xi) for all pairs (I, J) + char **elements; + int *map; + 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) +}; + +} // namespace LAMMPS_NS + +#endif +#endif diff --git a/src/ML-POD/eapod.cpp b/src/ML-POD/eapod.cpp new file mode 100644 index 0000000000..11dace1f28 --- /dev/null +++ b/src/ML-POD/eapod.cpp @@ -0,0 +1,4733 @@ +// clang-format off +/* ---------------------------------------------------------------------- + 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) +------------------------------------------------------------------------- */ + +// LAMMPS header files + +#include "comm.h" +#include "error.h" +#include "math_const.h" +#include "math_special.h" +#include "memory.h" +#include "tokenizer.h" + +#include + +// header file. Moved down here to avoid polluting other headers with its defines +#include "eapod.h" + +using namespace LAMMPS_NS; +using MathConst::MY_PI; +using MathSpecial::cube; +using MathSpecial::powint; + +static constexpr int MAXLINE=1024; + +// constructor +EAPOD::EAPOD(LAMMPS *_lmp, const std::string &pod_file, const std::string &coeff_file) : + Pointers(_lmp), elemindex(nullptr), Phi(nullptr), Lambda(nullptr), coeff(nullptr), + tmpmem(nullptr), Proj(nullptr), Centroids(nullptr), bd(nullptr), bdd(nullptr), pd(nullptr), + pdd(nullptr), pn3(nullptr), pq3(nullptr), pc3(nullptr), pq4(nullptr), pa4(nullptr), + pb4(nullptr), pc4(nullptr), tmpint(nullptr), ind23(nullptr), ind32(nullptr), ind33(nullptr), + ind34(nullptr), ind43(nullptr), ind44(nullptr), ind33l(nullptr), ind33r(nullptr), + ind34l(nullptr), ind34r(nullptr), ind44l(nullptr), ind44r(nullptr) +{ + rin = 0.5; + rcut = 5.0; + nClusters = 1; + nComponents = 1; + nelements = 1; + onebody = 1; + besseldegree = 4; + inversedegree = 8; + nbesselpars = 3; + true4BodyDesc = 1; + ns = nbesselpars*besseldegree + inversedegree; + Njmax = 100; + nrbf2 = 8; + nrbf3 = 6; + nrbf4 = 4; + nabf3 = 5; + nabf4 = 3; + nrbf23 = 0; + nabf23 = 0; + nrbf33 = 0; + nabf33 = 0; + nrbf34 = 0; + nabf34 = 0; + nabf43 = 0; + nrbf44 = 0; + nabf44 = 0; + P3 = 4; + P4 = 3; + P23 = 0; + P33 = 0; + P34 = 0; + P44 = 0; + pdegree[0] = besseldegree; + pdegree[1] = inversedegree; + pbc[0] = 1; + pbc[1] = 1; + pbc[2] = 1; + besselparams[0] = 1e-3; + besselparams[1] = 2.0; + besselparams[2] = 4.0; + + // read pod input file to podstruct + read_pod_file(pod_file); + + if (coeff_file != "") { + read_model_coeff_file(coeff_file); + } +} + +// destructor +EAPOD::~EAPOD() +{ + memory->destroy(elemindex); + memory->destroy(Phi); + memory->destroy(Lambda); + memory->destroy(Proj); + memory->destroy(Centroids); + memory->destroy(bd); + memory->destroy(bdd); + memory->destroy(pd); + memory->destroy(pdd); + memory->destroy(coeff); + memory->destroy(tmpmem); + memory->destroy(tmpint); + memory->destroy(pn3); + memory->destroy(pq3); + memory->destroy(pc3); + memory->destroy(pa4); + memory->destroy(pb4); + memory->destroy(pc4); + memory->destroy(pq4); + memory->destroy(ind23); + memory->destroy(ind32); + memory->destroy(ind33); + memory->destroy(ind34); + memory->destroy(ind43); + memory->destroy(ind44); + memory->destroy(ind33l); + memory->destroy(ind34l); + memory->destroy(ind44l); + memory->destroy(ind33r); + memory->destroy(ind34r); + memory->destroy(ind44r); +} + +void EAPOD::read_pod_file(std::string pod_file) +{ + 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") { + nelements = words.size()-1; + for (int ielem = 1; ielem <= nelements; ielem++) { + species.push_back(words[ielem]); + } + } + + if (keywd == "pbc") { + if (words.size() != 4) + error->one(FLERR,"Improper POD file.", utils::getsyserror()); + pbc[0] = utils::inumeric(FLERR,words[1],false,lmp); + pbc[1] = utils::inumeric(FLERR,words[2],false,lmp); + 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") rin = utils::numeric(FLERR,words[1],false,lmp); + if (keywd == "rcut") rcut = utils::numeric(FLERR,words[1],false,lmp); + if (keywd == "number_of_environment_clusters") + nClusters = utils::inumeric(FLERR,words[1],false,lmp); + if (keywd == "number_of_principal_components") + nComponents = utils::inumeric(FLERR,words[1],false,lmp); + if (keywd == "bessel_polynomial_degree") + besseldegree = utils::inumeric(FLERR,words[1],false,lmp); + if (keywd == "inverse_polynomial_degree") + inversedegree = utils::inumeric(FLERR,words[1],false,lmp); + if (keywd == "onebody") onebody = utils::inumeric(FLERR,words[1],false,lmp); + if (keywd == "twobody_number_radial_basis_functions") + nrbf2 = utils::inumeric(FLERR,words[1],false,lmp); + if (keywd == "threebody_number_radial_basis_functions") + nrbf3 = utils::inumeric(FLERR,words[1],false,lmp); + if (keywd == "threebody_angular_degree") + P3 = utils::inumeric(FLERR,words[1],false,lmp); + if (keywd == "fourbody_number_radial_basis_functions") + nrbf4 = utils::inumeric(FLERR,words[1],false,lmp); + if (keywd == "fourbody_angular_degree") + P4 = utils::inumeric(FLERR,words[1],false,lmp); + if (keywd == "fivebody_number_radial_basis_functions") + nrbf33 = utils::inumeric(FLERR,words[1],false,lmp); + if (keywd == "fivebody_angular_degree") + P33 = utils::inumeric(FLERR,words[1],false,lmp); + if (keywd == "sixbody_number_radial_basis_functions") + nrbf34 = utils::inumeric(FLERR,words[1],false,lmp); + if (keywd == "sixbody_angular_degree") + P34 = utils::inumeric(FLERR,words[1],false,lmp); + if (keywd == "sevenbody_number_radial_basis_functions") + nrbf44 = utils::inumeric(FLERR,words[1],false,lmp); + if (keywd == "sevenbody_angular_degree") + P44 = utils::inumeric(FLERR,words[1],false,lmp); + } + } + if (nrbf3 < nrbf4) error->all(FLERR,"number of four-body radial basis functions must be equal or less than number of three-body radial basis functions"); + if (nrbf4 < nrbf33) error->all(FLERR,"number of five-body radial basis functions must be equal or less than number of four-body radial basis functions"); + if (nrbf4 < nrbf34) error->all(FLERR,"number of six-body radial basis functions must be equal or less than number of four-body radial basis functions"); + if (nrbf4 < nrbf44) error->all(FLERR,"number of seven-body radial basis functions must be equal or less than number of four-body radial basis functions"); + nrbfmax = (nrbf2 < nrbf3) ? nrbf3 : nrbf2; + nrbfmax = (nrbfmax < nrbf4) ? nrbf4 : nrbfmax; + nrbfmax = (nrbfmax < nrbf33) ? nrbf33 : nrbfmax; + nrbfmax = (nrbfmax < nrbf34) ? nrbf34 : nrbfmax; + nrbfmax = (nrbfmax < nrbf44) ? nrbf44 : nrbfmax; + + if (P3 < P4) error->all(FLERR,"four-body angular degree must be equal or less than three-body angular degree"); + if (P4 < P33) error->all(FLERR,"five-body angular degree must be equal or less than four-body angular degree"); + if (P4 < P34) error->all(FLERR,"six-body angular degree must be equal or less than four-body angular degree"); + if (P4 < P44) error->all(FLERR,"seven-body angular degree must be equal or less than four-body angular degree"); + + if (P3 > 12) error->all(FLERR,"three-body angular degree must be equal or less than 12"); + if (P4 > 6) error->all(FLERR,"four-body angular degree must be equal or less than 6"); + + int Ne = nelements; + memory->create(elemindex, Ne*Ne, "elemindex"); + int k = 0; + for (int i1 = 0; i1create(ind23, n23, "ind23"); + memory->create(ind32, n32, "ind32"); + memory->create(ind33, n33, "ind33"); + memory->create(ind34, n34, "ind34"); + memory->create(ind43, n43, "ind43"); + memory->create(ind44, n44, "ind44"); + + indexmap3(ind23, 1, nrbf23, Ne, 1, nrbf2); + indexmap3(ind32, nabf23, nrbf23, Ne*(Ne+1)/2, nabf3, nrbf3); + indexmap3(ind33, nabf33, nrbf33, Ne*(Ne+1)/2, nabf3, nrbf3); + indexmap3(ind34, nabf34, nrbf34, Ne*(Ne+1)/2, nabf3, nrbf3); + indexmap3(ind43, nabf43, nrbf34, Ne*(Ne+1)*(Ne+2)/6, nabf4, nrbf4); + indexmap3(ind44, nabf44, nrbf44, Ne*(Ne+1)*(Ne+2)/6, nabf4, nrbf4); + + nld33 = 0; + nld34 = 0; + nld44 = 0; + int nebf3 = Ne*(Ne+1)/2; + int nebf4 = Ne*(Ne+1)*(Ne+2)/6; + int dabf3[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}; + int dabf4[] = {0, 1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6}; + if (nrbf33>0) { + nld33 = crossindices(dabf3, nabf3, nrbf3, nebf3, dabf3, nabf3, nrbf3, nebf3, P33, nrbf33); + memory->create(ind33l, nld33, "ind33l"); + memory->create(ind33r, nld33, "ind33r"); + crossindices(ind33l, ind33r, dabf3, nabf3, nrbf3, nebf3, dabf3, nabf3, nrbf3, nebf3, P33, nrbf33); + } + if (nrbf34>0) { + nld34 = crossindices(dabf3, nabf3, nrbf3, nebf3, dabf4, nabf4, nrbf4, nebf4, P34, nrbf34); + memory->create(ind34l, nld34, "ind34l"); + memory->create(ind34r, nld34, "ind34r"); + crossindices(ind34l, ind34r, dabf3, nabf3, nrbf3, nebf3, dabf4, nabf4, nrbf4, nebf4, P34, nrbf34); + } + if (nrbf44>0) { + nld44 = crossindices(dabf4, nabf4, nrbf4, nebf4, dabf4, nabf4, nrbf4, nebf4, P44, nrbf44); + memory->create(ind44l, nld44, "ind44l"); + memory->create(ind44r, nld44, "ind44r"); + crossindices(ind44l, ind44r, dabf4, nabf4, nrbf4, nebf4, dabf4, nabf4, nrbf4, nebf4, P44, nrbf44); + } + ngd33 = nld33*Ne; + ngd34 = nld34*Ne; + ngd44 = nld44*Ne; + nl33 = nld33; + nl34 = nld34; + nl44 = nld44; + nd33 = ngd33; + nd34 = ngd34; + nd44 = ngd44; + + Mdesc = nl2 + nl3 + nl4 + nl23 + nl33 + nl34 + nl44; + nl = nl1 + nl2 + nl3 + nl4 + nl23 + nl33 + nl34 + nl44; + nd = nd1 + nd2 + nd3 + nd4 + nd23 + nd33 + nd34 + nd44; + nCoeffPerElement = nl1 + Mdesc*nClusters; + nCoeffAll = nCoeffPerElement*nelements; + + allocate_temp_memory(Njmax); + + 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 model 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 != 4) + error->all(FLERR,"Incorrect format in POD coefficient file"); + + // strip single and double quotes from words + + int ncoeffall, nprojall, ncentall; + std::string tmp_str; + try { + ValueTokenizer words(utils::trim_comment(line),"\"' \t\n\r\f"); + tmp_str = words.next_string(); + ncoeffall = words.next_int(); + nprojall = words.next_int(); + ncentall = 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 coeff + + memory->create(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 model coefficient file"); + MPI_Bcast(line,MAXLINE,MPI_CHAR,0,world); + + try { + ValueTokenizer cff(utils::trim_comment(line)); + if (cff.count() != 1) error->all(FLERR,"Incorrect format in model coefficient file"); + + coeff[icoeff] = cff.next_double(); + } catch (TokenizerException &e) { + error->all(FLERR,"Incorrect format in model coefficient file: {}", e.what()); + } + } + + memory->create(Proj, nprojall, "pod:pca_proj"); + + for (int iproj = 0; iproj < nprojall; iproj++) { + 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 model coefficient file"); + MPI_Bcast(line,MAXLINE,MPI_CHAR,0,world); + + try { + ValueTokenizer cff(utils::trim_comment(line)); + if (cff.count() != 1) error->all(FLERR,"Incorrect format in model coefficient file"); + + Proj[iproj] = cff.next_double(); + } catch (TokenizerException &e) { + error->all(FLERR,"Incorrect format in model coefficient file: {}", e.what()); + } + } + + memory->create(Centroids, ncentall, "pod:pca_cent"); + + for (int icent = 0; icent < ncentall; icent++) { + 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 model coefficient file"); + MPI_Bcast(line,MAXLINE,MPI_CHAR,0,world); + + try { + ValueTokenizer cff(utils::trim_comment(line)); + if (cff.count() != 1) error->all(FLERR,"Incorrect format in model coefficient file"); + + Centroids[icent] = cff.next_double(); + } catch (TokenizerException &e) { + error->all(FLERR,"Incorrect format in model coefficient file: {}", e.what()); + } + } + + if (comm->me == 0) { + if (!eof) fclose(fpcoeff); + } + + + if (ncoeffall != nCoeffAll) + error->all(FLERR,"number of coefficients in the coefficient file is not correct"); + + if (nClusters > 1) { + if (nprojall != nComponents*Mdesc*nelements) + error->all(FLERR,"number of coefficients in the projection file is not correct"); + + if (ncentall != nComponents*nClusters*nelements) + error->all(FLERR,"number of coefficients in the projection file is not correct"); + } + + if (comm->me == 0) { + utils::logmesg(lmp, "**************** Begin of Model Coefficients ****************\n"); + utils::logmesg(lmp, "total number of coefficients for POD potential: {}\n", ncoeffall); + utils::logmesg(lmp, "total number of elements for PCA projection matrix: {}\n", nprojall); + utils::logmesg(lmp, "total number of elements for PCA centroids: {}\n", ncentall); + utils::logmesg(lmp, "**************** End of Model Coefficients ****************\n\n"); + } +} + +int EAPOD::read_coeff_file(std::string coeff_file) +{ + std::string coefffilename = coeff_file; + FILE *fpcoeff; + if (comm->me == 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 coeff + + memory->create(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 cff(utils::trim_comment(line)); + if (cff.count() != 1) + error->all(FLERR,"Incorrect format in POD coefficient file"); + + coeff[icoeff] = cff.next_double(); + } catch (TokenizerException &e) { + error->all(FLERR,"Incorrect format in POD coefficient file: {}", e.what()); + } + } + + if (comm->me == 0) { + if (!eof) fclose(fpcoeff); + } + + if (comm->me == 0) { + utils::logmesg(lmp, "**************** Begin of POD Coefficients ****************\n"); + utils::logmesg(lmp, "total number of coefficients for POD potential: {}\n", ncoeffall); + utils::logmesg(lmp, "**************** End of POD Coefficients ****************\n\n"); + } + + return ncoeffall; +} + +// funcion to read the projection matrix from file. +int EAPOD::read_projection_matrix(std::string proj_file) +{ + std::string projfilename = proj_file; + FILE *fpproj; + if (comm->me == 0) { + + fpproj = utils::open_potential(projfilename,lmp,nullptr); + if (fpproj == nullptr) + error->one(FLERR,"Cannot open PCA projection matrix file {}: ", + projfilename, 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,fpproj); + if (ptr == nullptr) { + eof = 1; + fclose(fpproj); + } + } + 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 PCA projection matrix file"); + + // strip single and double quotes from words + + int nprojall; + std::string tmp_str; + try { + ValueTokenizer words(utils::trim_comment(line),"\"' \t\n\r\f"); + tmp_str = words.next_string(); + nprojall = words.next_int(); + } catch (TokenizerException &e) { + error->all(FLERR,"Incorrect format in PCA projection matrix file: {}", e.what()); + } + + // loop over single block of coefficients and insert values in coeff + + memory->create(Proj, nprojall, "pod:pca_proj"); + + for (int iproj = 0; iproj < nprojall; iproj++) { + if (comm->me == 0) { + ptr = fgets(line,MAXLINE,fpproj); + if (ptr == nullptr) { + eof = 1; + fclose(fpproj); + } + } + + MPI_Bcast(&eof,1,MPI_INT,0,world); + if (eof) + error->all(FLERR,"Incorrect format in PCA projection matrix file"); + MPI_Bcast(line,MAXLINE,MPI_CHAR,0,world); + + try { + ValueTokenizer cff(utils::trim_comment(line)); + if (cff.count() != 1) + error->all(FLERR,"Incorrect format in PCA projection matrix file"); + + Proj[iproj] = cff.next_double(); + } catch (TokenizerException &e) { + error->all(FLERR,"Incorrect format in PCA projection matrix file: {}", e.what()); + } + } + if (comm->me == 0) { + if (!eof) fclose(fpproj); + } + + if (comm->me == 0) { + utils::logmesg(lmp, "**************** Begin of PCA projection matrix ****************\n"); + utils::logmesg(lmp, "total number of elements for PCA projection matrix: {}\n", nprojall); + utils::logmesg(lmp, "**************** End of PCA projection matrix ****************\n\n"); + } + + return nprojall; +} + +// read Centroids from file +int EAPOD::read_centroids(std::string centroids_file) +{ + std::string centfilename = centroids_file; + FILE *fpcent; + if (comm->me == 0) { + + fpcent = utils::open_potential(centfilename,lmp,nullptr); + if (fpcent == nullptr) + error->one(FLERR,"Cannot open PCA centroids file {}: ", + centfilename, 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,fpcent); + if (ptr == nullptr) { + eof = 1; + fclose(fpcent); + } + } + 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 PCA centroids file"); + + // strip single and double quotes from words + + int ncentall; + std::string tmp_str; + try { + ValueTokenizer words(utils::trim_comment(line),"\"' \t\n\r\f"); + tmp_str = words.next_string(); + ncentall = words.next_int(); + } catch (TokenizerException &e) { + error->all(FLERR,"Incorrect format in PCA centroids file: {}", e.what()); + } + + // loop over single block of coefficients and insert values in coeff + + memory->create(Centroids, ncentall, "pod:pca_cent"); + + for (int icent = 0; icent < ncentall; icent++) { + if (comm->me == 0) { + ptr = fgets(line,MAXLINE,fpcent); + if (ptr == nullptr) { + eof = 1; + fclose(fpcent); + } + } + + MPI_Bcast(&eof,1,MPI_INT,0,world); + if (eof) + error->all(FLERR,"Incorrect format in PCA centroids file"); + MPI_Bcast(line,MAXLINE,MPI_CHAR,0,world); + + try { + ValueTokenizer cff(utils::trim_comment(line)); + if (cff.count() != 1) + error->all(FLERR,"Incorrect format in PCA centroids file"); + + Centroids[icent] = cff.next_double(); + } catch (TokenizerException &e) { + error->all(FLERR,"Incorrect format in PCA centroids file: {}", e.what()); + } + } + if (comm->me == 0) { + if (!eof) fclose(fpcent); + } + + if (comm->me == 0) { + utils::logmesg(lmp, "**************** Begin of PCA centroids ****************\n"); + utils::logmesg(lmp, "total number of elements for PCA centroids: {}\n", ncentall); + utils::logmesg(lmp, "**************** End of PCA centroids ****************\n\n"); + } + + return ncentall; +} + + +void EAPOD::peratombase_descriptors(double *bd1, double *bdd1, double *rij, double *temp, + int *tj, int Nj) +{ + for (int i=0; i0) && (Nj>0)) { + twobodydescderiv(d2, dd2, rbf, rbfx, rbfy, rbfz, tj, Nj); + } + + if ((nl3 > 0) && (Nj>1)) { + double *abf = &temp[4*n1 + n5 + 4*n2]; // Nj*K3 + double *abfx = &temp[4*n1 + n5 + 4*n2 + n4]; // Nj*K3 + double *abfy = &temp[4*n1 + n5 + 4*n2 + 2*n4]; // Nj*K3 + double *abfz = &temp[4*n1 + n5 + 4*n2 + 3*n4]; // Nj*K3 + double *tm = &temp[4*n1 + n5 + 4*n2 + 4*n4]; // 4*K3 + + angularbasis(abf, abfx, abfy, abfz, rij, tm, pq3, Nj, K3); + + radialangularbasis(sumU, U, Ux, Uy, Uz, rbf, rbfx, rbfy, rbfz, + abf, abfx, abfy, abfz, tj, Nj, K3, nrbf3, nelements); + + threebodydesc(d3, sumU); + threebodydescderiv(dd3, sumU, Ux, Uy, Uz, tj, Nj); + + if ((nl23>0) && (Nj>2)) { + fourbodydesc23(d23, d2, d3); + fourbodydescderiv23(dd23, d2, d3, dd2, dd3, 3*Nj); + } + + if ((nl33>0) && (Nj>3)) { + crossdesc(d33, d3, d3, ind33l, ind33r, nl33); + crossdescderiv(dd33, d3, d3, dd3, dd3, ind33l, ind33r, nl33, 3*Nj); + } + + if ((nl4 > 0) && (Nj>2)) { + if (K4 < K3) { + for (int m=0; m0) && (Nj>4)) { + crossdesc(d34, d3, d4, ind34l, ind34r, nl34); + crossdescderiv(dd34, d3, d4, dd3, dd4, ind34l, ind34r, nl34, 3*Nj); + } + + if ((nl44>0) && (Nj>5)) { + crossdesc(d44, d4, d4, ind44l, ind44r, nl44); + crossdescderiv(dd44, d4, d4, dd4, dd4, ind44l, ind44r, nl44, 3*Nj); + } + } + } +} + +double EAPOD::peratombase_coefficients(double *cb, double *bd, int *ti) +{ + int nc = nCoeffPerElement*(ti[0]-1); + + double ei = coeff[0 + nc]; + for (int m=0; m0) && (Nj>0)) { + twobodydesc(d2, rbf, tj, Nj); + } + + if ((nl3 > 0) && (Nj>1)) { + double *abf = &temp[4*n1 + n5 + 4*n2]; // Nj*K3 + double *abfx = &temp[4*n1 + n5 + 4*n2 + n4]; // Nj*K3 + double *abfy = &temp[4*n1 + n5 + 4*n2 + 2*n4]; // Nj*K3 + double *abfz = &temp[4*n1 + n5 + 4*n2 + 3*n4]; // Nj*K3 + double *tm = &temp[4*n1 + n5 + 4*n2 + 4*n4]; // 4*K3 + + angularbasis(abf, abfx, abfy, abfz, rij, tm, pq3, Nj, K3); + + radialangularbasis(sumU, U, Ux, Uy, Uz, rbf, rbfx, rbfy, rbfz, + abf, abfx, abfy, abfz, tj, Nj, K3, nrbf3, nelements); + + threebodydesc(d3, sumU); + + if ((nl23>0) && (Nj>2)) { + fourbodydesc23(d23, d2, d3); + } + + if ((nl33>0) && (Nj>3)) { + crossdesc(d33, d3, d3, ind33l, ind33r, nl33); + } + + if ((nl4 > 0) && (Nj>2)) { + fourbodydesc(d4, sumU); + + if ((nl34>0) && (Nj>4)) { + crossdesc(d34, d3, d4, ind34l, ind34r, nl34); + } + + if ((nl44>0) && (Nj>5)) { + crossdesc(d44, d4, d4, ind44l, ind44r, nl44); + } + } + } + + double *cb = &bdd[0]; + if (nClusters > 1) { + e += peratom_environment_descriptors(cb, bd, &temp[4*n1 + n5 + 4*n2], ti); + } + else { + e += peratombase_coefficients(cb, bd, ti); + } + + double *cb2 = &cb[0]; // nl3 + double *cb3 = &cb[nl2]; // nl3 + double *cb4 = &cb[(nl2 + nl3)]; // nl4 + double *cb33 = &cb[(nl2 + nl3 + nl4)]; // nl33 + double *cb34 = &cb[(nl2 + nl3 + nl4 + nl33)]; // nl34 + double *cb44 = &cb[(nl2 + nl3 + nl4 + nl33 + nl34)]; // nl44 + + if ((nl33>0) && (Nj>3)) { + crossdesc_reduction(cb3, cb3, cb33, d3, d3, ind33l, ind33r, nl33); + } + if ((nl34>0) && (Nj>4)) { + crossdesc_reduction(cb3, cb4, cb34, d3, d4, ind34l, ind34r, nl34); + } + if ((nl44>0) && (Nj>5)) { + crossdesc_reduction(cb4, cb4, cb44, d4, d4, ind44l, ind44r, nl44); + } + + if ((nl2 > 0) && (Nj>0)) twobody_forces(fij, cb2, rbfx, rbfy, rbfz, tj, Nj); + + // Initialize forcecoeff to zero + double *forcecoeff = &cb[(nl2 + nl3 + nl4)]; // nl33 + std::fill(forcecoeff, forcecoeff + nelements * K3 * nrbf3, 0.0); + if ((nl3 > 0) && (Nj>1)) threebody_forcecoeff(forcecoeff, cb3, sumU); + if ((nl4 > 0) && (Nj>2)) fourbody_forcecoeff(forcecoeff, cb4, sumU); + if ((nl3 > 0) && (Nj>1)) allbody_forces(fij, forcecoeff, Ux, Uy, Uz, tj, Nj); + + return e; +} + +double EAPOD::peratomenergyforce(double *fij, double *rij, double *temp, + int *ti, int *tj, int Nj) +{ + if (Nj==0) { + return coeff[nCoeffPerElement*(ti[0]-1)]; + } + + int N = 3*Nj; + for (int n=0; n 1) { // multi-environment descriptors + // calculate multi-environment descriptors and their derivatives with respect to atom coordinates + peratomenvironment_descriptors(pd, pdd, bd, bdd, temp, ti[0] - 1, Nj); + + for (int j = 0; jNjmax) { + Njmax = Nj; + free_temp_memory(); + allocate_temp_memory(Njmax); + } + + double *rij = &tmpmem[0]; // 3*Nj + double *fij = &tmpmem[3*Nj]; // 3*Nj + int *ai = &tmpint[0]; // Nj + int *aj = &tmpint[Nj]; // Nj + int *ti = &tmpint[2*Nj]; // Nj + int *tj = &tmpint[3*Nj]; // Nj + + myneighbors(rij, x, ai, aj, ti, tj, jlist, pairnumsum, atomtype, alist, i); + + etot += peratomenergyforce(fij, rij, &tmpmem[6*Nj], ti, tj, Nj); + + tallyforce(force, fij, ai, aj, Nj); + } + } + + return etot; +} + +void EAPOD::base_descriptors(double *basedesc, double *x, + int *atomtype, int *alist, int *jlist, int *pairnumsum, int natom) +{ + for (int i=0; i0) { + // reallocate temporary memory + if (Nj>Njmax) { + Njmax = Nj; + free_temp_memory(); + allocate_temp_memory(Njmax); + if (comm->me == 0) utils::logmesg(lmp, "reallocate temporary memory with Njmax = %d ...\n", Njmax); + } + + double *rij = &tmpmem[0]; // 3*Nj + int *ai = &tmpint[0]; // Nj + int *aj = &tmpint[Nj]; // Nj + int *ti = &tmpint[2*Nj]; // Nj + int *tj = &tmpint[3*Nj]; // Nj + + myneighbors(rij, x, ai, aj, ti, tj, jlist, pairnumsum, atomtype, alist, i); + + // many-body descriptors + peratombase_descriptors(bd, bdd, rij, &tmpmem[3*Nj], tj, Nj); + + for (int m=0; m0) { + gd[nCoeffPerElement*(atomtype[i]-1)] += 1.0; + } + + if (Nj>0) { + // reallocate temporary memory + if (Nj>Njmax) { + Njmax = Nj; + free_temp_memory(); + allocate_temp_memory(Njmax); + if (comm->me == 0) utils::logmesg(lmp, "reallocate temporary memory with Njmax = %d ...\n", Njmax); + } + + double *rij = &tmpmem[0]; // 3*Nj + int *ai = &tmpint[0]; // Nj + int *aj = &tmpint[Nj]; // Nj + int *ti = &tmpint[2*Nj]; // Nj + int *tj = &tmpint[3*Nj]; // Nj + + myneighbors(rij, x, ai, aj, ti, tj, jlist, pairnumsum, atomtype, alist, i); + + // many-body descriptors + peratombase_descriptors(bd, bdd, rij, &tmpmem[3*Nj], tj, Nj); + + for (int m=0; m0) { + gd[nCoeffPerElement*(atomtype[i]-1)] += 1.0; + } + + if (Nj>0) { + // reallocate temporary memory + if (Nj>Njmax) { + Njmax = Nj; + free_temp_memory(); + allocate_temp_memory(Njmax); + if (comm->me == 0) utils::logmesg(lmp, "reallocate temporary memory with Njmax = %d ...\n", Njmax); + } + + double *rij = &tmpmem[0]; // 3*Nj + int *ai = &tmpint[0]; // Nj + int *aj = &tmpint[Nj]; // Nj + int *ti = &tmpint[2*Nj]; // Nj + int *tj = &tmpint[3*Nj]; // Nj + + myneighbors(rij, x, ai, aj, ti, tj, jlist, pairnumsum, atomtype, alist, i); + + // many-body descriptors + peratombase_descriptors(bd, bdd, rij, &tmpmem[3*Nj], tj, Nj); + + // calculate multi-environment descriptors and their derivatives with respect to atom coordinates + peratomenvironment_descriptors(pd, pdd, bd, bdd, tmpmem, ti[0] - 1, Nj); + + for (int j = 0; j < nClusters; j++) { + probdesc[i + natom*(j)] = pd[j]; + for (int m=0; mcreate(coeff, nc, "coeff"); + + // Copy the coefficients + for (int n=0; ncreate(xij, N, "eapod:xij"); + memory->create(S, N*ns, "eapod:S"); + memory->create(Q, N*ns, "eapod:Q"); + memory->create(A, ns*ns, "eapod:A"); + memory->create(work, ns*ns, "eapod:work"); + memory->create(b, ns, "eapod:ns"); + + // Generate the xij array + for (int i=0; i= max(1,3*N-1) + int info = 1; // = 0: successful exit + //double work[ns*ns]; + char chv = 'V'; + char chu = 'U'; + DSYEV(&chv, &chu, &ns, A, &ns, b, work, &lwork, &info); + + // Order eigenvalues and eigenvectors from largest to smallest + for (int j=0; jdestroy(xij); + memory->destroy(S); + memory->destroy(A); + memory->destroy(work); + memory->destroy(b); + memory->destroy(Q); +} + +/** + * @brief Initialize the two-body coefficients. + * + * @param None + */ +void EAPOD::init2body() +{ + // Set the degree of the Bessel function and the inverse distance function + pdegree[0] = besseldegree; + pdegree[1] = inversedegree; + + // Compute the total number of snapshots + ns = nbesselpars * pdegree[0] + pdegree[1]; + + // Allocate memory for the eigenvectors and eigenvalues + memory->create(Phi, ns * ns, "Phi"); + memory->create(Lambda, ns, "Lambda"); + + // Perform eigenvalue decomposition of the snapshots matrix S and store the eigenvectors and eigenvalues + eigenvaluedecomposition(Phi, Lambda, 2000); +} + +/** + * @brief Initialize arrays for the three-body descriptors. + * + * @param Pa3 The degree of the angular basis functions of the three-body descriptors. + */ +void EAPOD::init3body(int Pa3) +{ + // Define the number of monomials for each degree + int npa[] = {0, 1, 4, 10, 20, 35, 56, 84, 120, 165, 220, 286, 364, 455}; + + // Set the number of coefficients, the number of basis functions, and the degree of the Bessel function + nabf3 = Pa3+1; // Number of angular basis functions + K3 = npa[nabf3]; // number of monimials + P3 = nabf3-1; // the degree of angular basis functions of the three-body descriptors + + // Allocate memory for the coefficients, the basis functions, and the cutoff function + memory->create(pn3, nabf3+1, "pn3"); // array stores the number of monomials for each degree + memory->create(pq3, K3*2, "pq3"); // array needed for the recursive computation of the angular basis functions + memory->create(pc3, K3, "pc3"); // array needed for the computation of the three-body descriptors + + // Initialize the arrays + init3bodyarray(pn3, pq3, pc3, nabf3-1); +} + +/** + * @brief Initialize arrays for the four-body descriptors. + * + * @param Pa4 The degree of the angular basis functions of the four-body descriptors. + */ +void EAPOD::init4body(int Pa4) +{ + // Define the number of monomials for each degree + int npa[] = {0, 1, 4, 10, 20, 35, 56, 84, 120, 165, 220, 286, 364, 455}; + + // Define the number of angular basis functions for each degree + int nb[] = {1, 2, 4, 7, 11, 16, 23}; + + // Define the number of terms needed to compute angular basis functions + int ns[] = {0, 1, 4, 10, 19, 29, 47, 74, 89, 119, 155, 209, 230, 275, 335, 425, 533, 561, 624, 714, 849, 949, 1129, 1345}; + + // Set the degree of the angular basis functions of the four-body descriptors + P4 = Pa4; + + // Set the number of monomials for the angular basis functions of the four-body descriptors + K4 = npa[Pa4+1]; + + // Allocate memory for the output arrays + int *pn4, *tm4; + memory->create(pn4, Pa4+2, "pn4"); // array stores the number of monomials for each degree + memory->create(pq4, K4*2, "pq4"); // array needed for the recursive computation of the angular basis functions + memory->create(tm4, K4, "tm4"); + + // Initialize the arrays + init3bodyarray(pn4, pq4, tm4, Pa4); + + // Set the number of angular basis functions for the four-body descriptors + nabf4 = nb[Pa4]; + + // the size of the array pc4 + Q4 = ns[nabf4]; + + // Allocate memory for the coefficients, the basis functions, and the cutoff function + memory->create(pa4, nabf4+1, "pa4"); // this array is a subset of the array ns + memory->create(pb4, Q4*3, "pb4"); // array stores the indices of the monomials needed for the computation of the angular basis functions + memory->create(pc4, Q4, "pc4"); // array of monomial coefficients needed for the computation of the four-body descriptors + + // Initialize the arrays + init4bodyarray(pa4, pb4, pc4, Pa4); + + // Deallocate memory + memory->destroy(pn4); + memory->destroy(tm4); +} + + +/** + * @brief Estimate the amount of memory needed for the computation. + * + * @param Nj Number of neighboring atoms. + * @return int The estimated amount of memory needed. + */ +int EAPOD::estimate_temp_memory(int Nj) +{ + // Determine the maximum number of radial basis functions and angular basis functions + int Kmax = (K3 > K4) ? K3 : K4; + int nrbf34 = (nrbf3 > nrbf4) ? nrbf3 : nrbf4; + int nrbfmax = (nrbf2 > nrbf34) ? nrbf2 : nrbf34; + int Knrbf34 = (K3*nrbf3 > K4*nrbf4) ? K3*nrbf3 : K4*nrbf4; + + // Determine the maximum number of local descriptors + int nld = (nl23 > nl33) ? nl23 : nl33; + nld = (nld > nl34) ? nld : nl34; + nld = (nld > nl44) ? nld : nl44; + + // rij, fij, and d2, dd2, d3, dd3, d4, dd4 + int nmax1 = 6*Nj + nl2 + 3*Nj*nl2 + nl3 + 3*Nj*nl3 + nl4 + 3*Nj*nl4 + nld + 3*Nj*nld; + + // U, Ux, Uy, Uz + int nmax2 = 4*Nj*Knrbf34; + + // sumU and cU + int nmax3 = 2*nelements*Knrbf34; + + // rbf, rbfx, rbfy, rbfz + int nmax4 = 4*Nj*nrbfmax; + + // rbft, rbfxt, rbfyt, rbfzt + int nmax5 = 4*Nj*ns; + + // abf, abfx, abfy, abfz + int nmax6 = 4*(Nj+1)*Kmax; + + // Determine the maximum amount of memory needed for U, Ux, Uy, Uz, sumU, cU, rbf, rbfx, rbfy, rbfz, abf, abfx, abfy, abfz + int nmax7 = (nmax5 > nmax6) ? nmax5 : nmax6; + int nmax8 = nmax2 + nmax3 + nmax4 + nmax7; + + // Determine the total amount of memory needed for all double memory + ndblmem = (nmax1 + nmax8); + + int nmax9 = 6*Nj + nComponents + nClusters + nClusters*nComponents + 2*nClusters*Mdesc + nClusters*nClusters; + if (ndblmem < nmax9) ndblmem = nmax9; + + // Determine the total amount of memory needed for all integer memory + nintmem = 4*Nj; + + // Return the estimated amount of memory needed + return ndblmem; +} + +void EAPOD::allocate_temp_memory(int Nj) +{ + estimate_temp_memory(Nj); + memory->create(tmpmem, ndblmem, "tmpmem"); + memory->create(tmpint, nintmem, "tmpint"); + memory->create(bd, Mdesc, "bdd"); + memory->create(bdd, 3*Nj*Mdesc, "bdd"); + memory->create(pd, nClusters, "bdd"); + memory->create(pdd, 3*Nj*nClusters, "bdd"); +} + +void EAPOD::free_temp_memory() +{ + memory->destroy(tmpmem); + memory->destroy(tmpint); + memory->destroy(bd); + memory->destroy(bdd); + memory->destroy(pd); + memory->destroy(pdd); +} + +/** + * @brief Map a 3D index to a 1D index. + * + * @param indx The 1D index array. + * @param n1 The size of the first dimension. + * @param n2 The size of the second dimension. + * @param n3 The size of the third dimension. + * @param N1 The stride of the first dimension. + * @param N2 The stride of the second dimension. + * @return int The total number of elements in the 1D index array. + */ +int EAPOD::indexmap3(int *indx, int n1, int n2, int n3, int N1, int N2) +{ + int k = 0; + for (int i3=0; i3= m1) && (i2 >= i1) && (a1 + a2 <= dabf12) && (j1+j2 < nrbf12)) { + n += 1; + } + } + } + + return n; +} + +/** + * @brief Calculate the number of cross descriptors between two sets of descriptors and store the indices in two arrays. + * + * @param ind1 Pointer to the array of indices of the first set of descriptors. + * @param ind2 Pointer to the array of indices of the second set of descriptors. + * @param dabf1 Pointer to the array of degrees of angular basis functions of the first set of descriptors. + * @param nabf1 Number of angular basis functions in the first set of descriptors. + * @param nrbf1 Number of radial basis functions in the first set of descriptors. + * @param nebf1 Number of element interactions in the first set of descriptors. + * @param dabf2 Pointer to the array of degrees of angular basis functions of the second set of descriptors. + * @param nabf2 Number of angular basis functions in the second set of descriptors. + * @param nrbf2 Number of radial basis functions in the second set of descriptors. + * @param nebf2 Number of element interactions in the second set descriptors. + * @param dabf12 degree of angular basis functions for the cross descriptors + * @param nrbf12 number of radial basis functions for the cross descriptors + * @return int The number of cross descriptors between two sets of descriptors. + */ +int EAPOD::crossindices(int *ind1, int *ind2, int *dabf1, int nabf1, int nrbf1, int nebf1, + int *dabf2, int nabf2, int nrbf2, int nebf2, int dabf12, int nrbf12) +{ + int n = 0; + + // Loop over the first set of descriptors + for (int i1=0; i1= m1) && (i2 >= i1) && (a1 + a2 <= dabf12) && (j1+j2 < nrbf12)) { + ind1[n] = n1; + ind2[n] = n2; + n += 1; + } + } + } + + return n; +} + +void EAPOD::scalarproduct(double *d, double c, int N) +{ + for (int n=0; n species; + + double rin; + double rcut; + int true4BodyDesc; + + int nelements; // number of elements + int pbc[3]; + int *elemindex; + + int onebody; // one-body descriptors + int besseldegree; + int inversedegree; + int pdegree[2]; + int nbesselpars; + int timing; + double comptime[20]; + double besselparams[3]; + double *Phi; // eigenvectors + double *Lambda; // eigenvalues + double *coeff; // coefficients + //double *newcoeff ; // coefficients + double *tmpmem; + + // environmental variables + int nClusters; // number of environment clusters + int nComponents; // number of principal components + //int nNeighbors; // numbe of neighbors + int Mdesc; // number of base descriptors + + double *Proj; // PCA Projection matrix + double *Centroids; // centroids of the clusters + double *bd; // base descriptors + double *bdd; // derivatives of the base descriptors with respect to the atomic positions + double *pd; // multi-environment descriptors + double * + pdd; // derivative of the multi-environment descriptors with respect to the atomic positions + + int nproj; // number of elements in projection matrix (nComponents * Mdesc * nelements) + int ncentroids; // number of centroids (nComponents * nClusters * nelements) + + int Njmax; + int nCoeffPerElement; // number of coefficients per element = (nl1 + Mdesc*nClusters) + int nCoeffAll; // number of coefficients for all elements = (nl1 + Mdesc*nClusters)*nelements + int ncoeff; // number of coefficients in the input file + int ns; // number of snapshots for radial basis functions + int nd1, nd2, nd3, nd4, nd5, nd6, nd7, nd; // number of global descriptors + int nl1, nl2, nl3, nl4, nl5, nl6, nl7, nl; // number of local descriptors + int nrbf2, nrbf3, nrbf4, nrbfmax; // number of radial basis functions + int nabf3, nabf4; // number of angular basis functions + int P3, P4; // angular polynomial degrees + int K3, K4, Q4; // number of monomials + int *pn3, *pq3, *pc3; // arrays to compute 3-body angular basis functions + int *pq4, *pa4, *pb4, *pc4; // arrays to compute 3-body angular basis functions + int *tmpint; + int nintmem; // number of integers in tmpint array + int ndblmem; // number of doubles in tmpmem array + + // four-body descriptors + int *ind23, *ind32, nrbf23, nabf23, P23, n23, n32, nl23, nd23; + + // five-body descriptors + int *ind33, nrbf33, nabf33, P33, n33, nl33, nd33; + + // six-body descriptors + int *ind34, *ind43, nrbf34, nabf34, nabf43, P34, n34, n43, nl34, nd34; + + // seven-body descriptors + int *ind44, nrbf44, nabf44, P44, n44, nl44, nd44; + + int nld33, nld34, nld44, ngd33, ngd34, ngd44; + int *ind33l, *ind33r, *ind34l, *ind34r, *ind44l, *ind44r; + + EAPOD(LAMMPS *, const std::string &pod_file, const std::string &coeff_file); + + EAPOD(LAMMPS *lmp) : Pointers(lmp){}; + ~EAPOD() override; + + void read_pod_file(std::string pod_file); + void read_model_coeff_file(std::string coeff_file); + int read_coeff_file(std::string coeff_file); + int read_projection_matrix(std::string proj_file); + int read_centroids(std::string centroids_file); + + int estimate_temp_memory(int Nj); + void free_temp_memory(); + void allocate_temp_memory(int Nj); + + //void mknewcoeff(); + + void mknewcoeff(double *c, int nc); + + void twobodydesc(double *d2, double *rbf, int *tj, int N); + void twobodydescderiv(double *d2, double *dd2, double *rbf, double *rbfx, double *rbfy, + double *rbfz, int *tj, int N); + void twobody_forces(double *fij, double *cb2, double *rbfx, double *rbfy, double *rbfz, int *tj, + int Nj); + + void threebodydesc(double *d3, double *sumU); + void threebodydescderiv(double *dd3, double *sumU, double *Ux, double *Uy, double *Uz, + int *atomtype, int N); + void threebody_forcecoeff(double *fb3, double *cb3, double *sumU); + + void fourbodydesc(double *d4, double *sumU); + void fourbodydescderiv(double *d4, double *dd4, double *sumU, double *Ux, double *Uy, double *Uz, + int *atomtype, int N); + void fourbody_forcecoeff(double *fb4, double *cb4, double *sumU); + + void allbody_forces(double *fij, double *forcecoeff, double *rbf, double *rbfx, double *rbfy, + double *rbfz, double *abf, double *abfx, double *abfy, double *abfz, int *tj, + int Nj); + void allbody_forces(double *fij, double *forcecoeff, double *Ux, double *Uy, double *Uz, int *tj, + int Nj); + + void descriptors(double *gd, double *gdd, double *basedesc, double *probdesc, double *x, + int *atomtype, int *alist, int *jlist, int *pairnumsum, int natom); + + void descriptors(double *gd, double *gdd, double *basedesc, double *x, int *atomtype, int *alist, + int *jlist, int *pairnumsum, int natom); + + void peratombase_descriptors(double *bd, double *bdd, double *rij, double *temp, int *tj, int Nj); + double peratombase_coefficients(double *cb, double *bd, int *ti); + double peratom_environment_descriptors(double *cb, double *bd, double *tm, int *ti); + + void peratomenvironment_descriptors(double *P, double *dP_dR, double *B, double *dB_dR, + double *tmp, int elem, int nNeighbors); + + void base_descriptors(double *basedesc, double *x, int *atomtype, int *alist, int *jlist, + int *pairnumsum, int natom); + + void descriptors(double *basedesc, double *probdesc, double *x, int *atomtype, int *alist, + int *jlist, int *pairnumsum, int natom); + + double peratomenergyforce(double *fij, double *rij, double *temp, int *ti, int *tj, int Nj); + double peratomenergyforce2(double *fij, double *rij, double *temp, int *ti, int *tj, int Nj); + + double energyforce(double *force, double *x, int *atomtype, int *alist, int *jlist, + int *pairnumsum, int natom); + + void tallyforce(double *force, double *fij, int *ai, int *aj, int N); + + void fourbodydesc23(double *d23, double *d2, double *d3); + void fourbodydescderiv23(double *dd23, double *d2, double *d3, double *dd2, double *dd3, int N); + + void crossdesc(double *d12, double *d1, double *d2, int *ind1, int *ind2, int n12); + void crossdescderiv(double *dd12, double *d1, double *d2, double *dd1, double *dd2, int *ind1, + int *ind2, int n12, int N); + void crossdesc_reduction(double *cb1, double *cb2, double *c12, double *d1, double *d2, int *ind1, + int *ind2, int n12); +}; + +} // namespace LAMMPS_NS + +#endif diff --git a/src/ML-POD/fitpod_command.cpp b/src/ML-POD/fitpod_command.cpp index ef39962e0b..ba7ffeba3a 100644 --- a/src/ML-POD/fitpod_command.cpp +++ b/src/ML-POD/fitpod_command.cpp @@ -17,8 +17,6 @@ #include "fitpod_command.h" -#include "mlpod.h" - #include "comm.h" #include "error.h" #include "math_special.h" @@ -28,7 +26,11 @@ #include #include #include -#include +#include +#include +#include + +#include "eapod.h" using namespace LAMMPS_NS; using MathSpecial::powint; @@ -36,106 +38,245 @@ using MathSpecial::powint; static constexpr int MAXLINE = 1024; static constexpr double SMALL = 1.0e-10; -FitPOD::FitPOD(LAMMPS *_lmp) : Command(_lmp), podptr(nullptr) +FitPOD::datastruct::datastruct() : + file_format("extxyz"), file_extension("xyz"), filenametag("pod"), group_weight_type("global"), + lattice(nullptr), energy(nullptr), stress(nullptr), position(nullptr), force(nullptr), + atomtype(nullptr), we(nullptr), wf(nullptr), + fitting_weights{100.0, 1.0, 0.0, 1, 1, 0, 0, 1, 1, 1, 1, 1e-10} { + training = 1; + normalizeenergy = 1; + training_analysis = 1; + test_analysis = 1; + training_calculation = 0; + test_calculation = 0; + randomize = 1; + precision = 8; + fraction = 1.0; +} + +void FitPOD::datastruct::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]; + data.we_map = we_map; + data.wf_map = wf_map; +} + +FitPOD::neighborstruct::neighborstruct() : + alist(nullptr), pairnum(nullptr), pairnum_cumsum(nullptr), pairlist(nullptr), y(nullptr) +{ + natom_max = 0; + sze = 0; + sza = 0; + szy = 0; + szp = 0; +} + +FitPOD::descriptorstruct::descriptorstruct() : + bd(nullptr), pd(nullptr), gd(nullptr), gdd(nullptr), A(nullptr), b(nullptr), c(nullptr) +{ + szd = 0; + nCoeffAll = 0; + nClusters = 0; +} + +FitPOD::FitPOD(LAMMPS *_lmp) : Command(_lmp), fastpodptr(nullptr) +{ + save_descriptors = 0; + compute_descriptors = 0; } 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 + 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, proj_file, cent_file; // coefficient input files if (narg > 2) - coeff_file = std::string(arg[2]); // coefficient input file + 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); + fastpodptr = new EAPOD(lmp, pod_file, coeff_file); - if ((int) traindata.data_path.size() > 1) - allocate_memory(traindata); - else if ((int) testdata.data_path.size() > 1) - allocate_memory(testdata); + desc.nCoeffAll = fastpodptr->nCoeffAll; + desc.nClusters = fastpodptr->nClusters; + read_data_files(data_file, fastpodptr->species); - // get POD coefficients from an input file + estimate_memory_neighborstruct(traindata, fastpodptr->pbc, fastpodptr->rcut, + fastpodptr->nelements); + estimate_memory_neighborstruct(testdata, fastpodptr->pbc, fastpodptr->rcut, + fastpodptr->nelements); + if (desc.nClusters > 1) + estimate_memory_neighborstruct(envdata, fastpodptr->pbc, fastpodptr->rcut, + fastpodptr->nelements); + allocate_memory_neighborstruct(); + estimate_memory_fastpod(traindata); + estimate_memory_fastpod(testdata); + allocate_memory_descriptorstruct(fastpodptr->nCoeffAll); - if (coeff_file != "") podArrayCopy(desc.c, podptr->pod.coeff, podptr->pod.nd); + if (coeff_file != "") podArrayCopy(desc.c, fastpodptr->coeff, fastpodptr->nCoeffAll); - // compute POD coefficients using least-squares method + if (((int) envdata.data_path.size() > 1) && (desc.nClusters > 1)) { + environment_cluster_calculation(envdata); + memory->destroy(envdata.lattice); + memory->destroy(envdata.energy); + memory->destroy(envdata.stress); + memory->destroy(envdata.position); + memory->destroy(envdata.force); + memory->destroy(envdata.atomtype); + memory->destroy(envdata.we); + memory->destroy(envdata.wf); + } - least_squares_fit(traindata); + if (compute_descriptors == 0) { - // calculate errors for the training data set + // compute POD coefficients using least-squares method + if (coeff_file == "") { + least_squares_fit(traindata); - if ((traindata.training_analysis) && ((int) traindata.data_path.size() > 1) ) - error_analysis(traindata, desc.c); + if (comm->me == 0) { // save coefficients into a text file + std::string filename = traindata.filenametag + "_coefficients" + ".pod"; + FILE *fp = fopen(filename.c_str(), "w"); - // calculate errors for the test data set + int nCoeffAll = desc.nCoeffAll; + int n1 = 0, n2 = 0; + if (((int) envdata.data_path.size() > 1) && (desc.nClusters > 1)) { + n1 = fastpodptr->nComponents * fastpodptr->Mdesc * fastpodptr->nelements; + n2 = fastpodptr->nComponents * fastpodptr->nClusters * fastpodptr->nelements; + } - if ((testdata.test_analysis) && ((int) testdata.data_path.size() > 1) && (testdata.data_path != traindata.data_path)) - error_analysis(testdata, desc.c); + fmt::print(fp, "model_coefficients: {} {} {}\n", nCoeffAll, n1, n2); + for (int count = 0; count < nCoeffAll; count++) { + fmt::print(fp, "{:<10.{}f}\n", desc.c[count], traindata.precision); + } + for (int count = 0; count < n1; count++) { + fmt::print(fp, "{:<10.{}f}\n", fastpodptr->Proj[count], 14); + } + for (int count = 0; count < n2; count++) { + fmt::print(fp, "{:<10.{}f}\n", fastpodptr->Centroids[count], 14); + } + fclose(fp); + } + } - // calculate energy and force for the training data set + // calculate errors for the training data set - if ((traindata.training_calculation) && ((int) traindata.data_path.size() > 1) ) - energyforce_calculation(traindata, desc.c); + if ((traindata.training_analysis) && ((int) traindata.data_path.size() > 1)) + error_analysis(traindata, desc.c); - // calculate energy and force for the test data set + //error->all(FLERR, "stop after error_analysis"); - if ((testdata.test_calculation) && ((int) testdata.data_path.size() > 1) && (testdata.data_path != traindata.data_path) ) - energyforce_calculation(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); + + if (!((testdata.data_path == traindata.data_path) && (testdata.fraction == 1.0) && + (traindata.fraction == 1.0))) { + // calculate errors for the test data set + + if ((testdata.test_analysis) && ((int) testdata.data_path.size() > 1) && + (testdata.fraction > 0)) { + error_analysis(testdata, desc.c); + } + + // calculate energy and force for the test data set + + if ((testdata.test_analysis) && (testdata.test_calculation) && + ((int) testdata.data_path.size() > 1) && (testdata.fraction > 0)) + energyforce_calculation(testdata); + + // deallocate testing data + + if ((int) testdata.data_path.size() > 1 && (testdata.test_analysis) && + (testdata.fraction > 0)) { + memory->destroy(testdata.lattice); + memory->destroy(testdata.energy); + memory->destroy(testdata.stress); + memory->destroy(testdata.position); + memory->destroy(testdata.force); + memory->destroy(testdata.atomtype); + memory->destroy(testdata.we); + memory->destroy(testdata.wf); + } + } + } else if (compute_descriptors > 0) { + // compute and save POD descriptors + descriptors_calculation(traindata); + + if (!((testdata.data_path == traindata.data_path) && (testdata.fraction == 1.0))) { + if ((int) testdata.data_path.size() > 1) { + descriptors_calculation(testdata); + memory->destroy(testdata.lattice); + memory->destroy(testdata.energy); + memory->destroy(testdata.stress); + memory->destroy(testdata.position); + memory->destroy(testdata.force); + memory->destroy(testdata.atomtype); + memory->destroy(testdata.we); + memory->destroy(testdata.wf); + } + } + } // deallocate training data - if ((int) traindata.data_path.size() > 1){ + 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); + memory->destroy(traindata.we); + memory->destroy(traindata.wf); } // 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(desc.bd); + memory->destroy(desc.pd); + memory->destroy(desc.gd); + memory->destroy(desc.gdd); + // // 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; + + delete fastpodptr; } -/* ---------------------------------------------------------------------- */ - 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) + std::string &file_extension, std::string &env_path, + std::string &test_path, std::string &training_path, + std::string &filenametag, const std::string &data_file, + std::string &group_weight_type, + std::unordered_map &we_map, + std::unordered_map &wf_map) { int precision = 8; @@ -143,60 +284,75 @@ int FitPOD::read_data_file(double *fitting_weights, std::string &file_format, FILE *fpdata; if (comm->me == 0) { - fpdata = utils::open_potential(datafilename,lmp,nullptr); + fpdata = utils::open_potential(datafilename, lmp, nullptr); if (fpdata == nullptr) - error->one(FLERR,"Cannot open training data file {}: ", datafilename, utils::getsyserror()); + error->one(FLERR, "Cannot open training data file {}: ", datafilename, utils::getsyserror()); } // loop through lines of training data file and parse keywords - char line[MAXLINE] = {'\0'}; - char *ptr; + char line[MAXLINE], *ptr; int eof = 0; while (true) { if (comm->me == 0) { - ptr = fgets(line,MAXLINE,fpdata); + ptr = fgets(line, MAXLINE, fpdata); if (ptr == nullptr) { eof = 1; fclose(fpdata); } } - MPI_Bcast(&eof,1,MPI_INT,0,world); + MPI_Bcast(&eof, 1, MPI_INT, 0, world); if (eof) break; - MPI_Bcast(line,MAXLINE,MPI_CHAR,0,world); + 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(); + words = Tokenizer(utils::trim_comment(line), "\"' \t\n\r\f").as_vector(); } catch (TokenizerException &) { // ignore } if (words.size() == 0) continue; - const auto &keywd = words[0]; + auto keywd = words[0]; - if (words.size() != 2) - error->one(FLERR,"Improper POD file.", utils::getsyserror()); + if (words.size() != 2) error->one(FLERR, "Improper POD data 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); + 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); + if (keywd == "save_pod_descriptors") + save_descriptors = utils::inumeric(FLERR, words[1], false, lmp); + if (keywd == "compute_pod_descriptors") + compute_descriptors = utils::inumeric(FLERR, words[1], false, lmp); // other settings @@ -204,7 +360,59 @@ int FitPOD::read_data_file(double *fitting_weights, std::string &file_format, 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 == "path_to_environment_configuration_set") env_path = words[1]; if (keywd == "basename_for_output_files") filenametag = words[1]; + + // group weight table + if (keywd == "group_weights") group_weight_type = words[1]; + if (std::strcmp(group_weight_type.c_str(), "table") == 0) { + // Read the table as a hash map. + // Get next line. + 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); + // Tokenize. + try { + words = Tokenizer(utils::trim_comment(line), "\"' \t\n\r\f").as_vector(); + } catch (TokenizerException &) { + // ignore + } + int numwords = words.size(); + + // Loop over group table entries. + while (numwords == 3) { + + // Insert in map. + we_map[words[0]] = utils::numeric(FLERR, words[1], false, lmp); + wf_map[words[0]] = utils::numeric(FLERR, words[2], false, lmp); + + // Get next line. + 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); + // Tokenize. + try { + words = Tokenizer(utils::trim_comment(line), "\"' \t\n\r\f").as_vector(); + } catch (TokenizerException &) { + // ignore + } + numwords = words.size(); + } + } } if (comm->me == 0) { @@ -213,6 +421,8 @@ int FitPOD::read_data_file(double *fitting_weights, std::string &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, "path to environment configuration set: {}\n", env_path); + utils::logmesg(lmp, "basename for output files: {}\n", filenametag); 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]); @@ -224,36 +434,40 @@ int FitPOD::read_data_file(double *fitting_weights, std::string &file_format, 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, "save pod descriptors: {}\n", save_descriptors); + utils::logmesg(lmp, "compute pod descriptors: {}\n", compute_descriptors); 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) +void FitPOD::get_exyz_files(std::vector &files, std::vector &group_names, + 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))) + if (utils::strmatch(fname, fmt::format(".*\\.{}$", extension))) { files.push_back(datapath + platform::filepathsep + fname); + int start_pos_erase = fname.find(extension) - 1; + std::string substr = fname.substr(0, start_pos_erase); + group_names.push_back(substr); + } } } -int FitPOD::get_number_atom_exyz(std::vector& num_atom, int& num_atom_sum, std::string file) +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); + fp = utils::open_potential(filename, lmp, nullptr); if (fp == nullptr) - error->one(FLERR,"Cannot open POD coefficient file {}: ", filename, utils::getsyserror()); + error->one(FLERR, "Cannot open POD coefficient file {}: ", filename, utils::getsyserror()); } - char line[MAXLINE] = {'\0'}; - char *ptr; + char line[MAXLINE], *ptr; int eof = 0; int num_configs = 0; num_atom_sum = 0; @@ -262,22 +476,22 @@ int FitPOD::get_number_atom_exyz(std::vector& num_atom, int& num_atom_sum, while (true) { if (comm->me == 0) { - ptr = fgets(line,MAXLINE,fp); + ptr = fgets(line, MAXLINE, fp); if (ptr == nullptr) { eof = 1; fclose(fp); } } - MPI_Bcast(&eof,1,MPI_INT,0,world); + MPI_Bcast(&eof, 1, MPI_INT, 0, world); if (eof) break; - MPI_Bcast(line,MAXLINE,MPI_CHAR,0,world); + 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(); + words = Tokenizer(utils::trim_comment(line), "\"' \t\n\r\f").as_vector(); } catch (TokenizerException &) { // ignore } @@ -286,7 +500,7 @@ int FitPOD::get_number_atom_exyz(std::vector& num_atom, int& num_atom_sum, int natom; if (words.size() == 1) { - natom = utils::inumeric(FLERR,words[0],false,lmp); + natom = utils::inumeric(FLERR, words[0], false, lmp); num_atom.push_back(natom); num_configs += 1; num_atom_sum += natom; @@ -295,38 +509,38 @@ int FitPOD::get_number_atom_exyz(std::vector& num_atom, int& num_atom_sum, 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 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 nfiles = training_files.size(); // number of files int d, n; - for (int i=0; i species) +void FitPOD::read_exyz_file(double *lattice, double *stress, double *energy, double *we, double *wf, + double *pos, double *forces, int *atomtype, std::string file, + std::vector species, double we_group, double wf_group) { std::string filename = std::move(file); FILE *fp; if (comm->me == 0) { - fp = utils::open_potential(filename,lmp,nullptr); + fp = utils::open_potential(filename, lmp, nullptr); if (fp == nullptr) - error->one(FLERR,"Cannot open POD coefficient file {}: ", filename, utils::getsyserror()); + error->one(FLERR, "Cannot open POD coefficient file {}: ", filename, utils::getsyserror()); } - char line[MAXLINE] = {'\0'}; - char *ptr; + char line[MAXLINE], *ptr; int eof = 0; int cfi = 0; int nat = 0; @@ -336,34 +550,36 @@ void FitPOD::read_exyz_file(double *lattice, double *stress, double *energy, dou while (true) { if (comm->me == 0) { - ptr = fgets(line,MAXLINE,fp); + ptr = fgets(line, MAXLINE, fp); if (ptr == nullptr) { eof = 1; fclose(fp); } } - MPI_Bcast(&eof,1,MPI_INT,0,world); + MPI_Bcast(&eof, 1, MPI_INT, 0, world); if (eof) break; - MPI_Bcast(line,MAXLINE,MPI_CHAR,0,world); + 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(); + 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"); + 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; }); + 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 @@ -374,65 +590,77 @@ void FitPOD::read_exyz_file(double *lattice, double *stress, double *energy, dou // 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); + 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); + lattice[k + 9 * cfi] = utils::numeric(FLERR, words[index + 2 + k], false, lmp); } } - // find the word containing "energy" + if (compute_descriptors == 0) { - it = std::find_if(words.begin(), words.end(), [](const std::string& str) { return str.find("nergy") != std::string::npos; }); + // find the word containing "energy" - // get index of element from iterator + it = std::find_if(words.begin(), words.end(), [](const std::string &str) { + return str.find("nergy") != std::string::npos; + }); - index = std::distance(words.begin(), it); + // get index of element from iterator - if (words[index].find("=") != std::string::npos) { + index = std::distance(words.begin(), it); - // energy is after "=" inside this string + if (words[index].find("=") != std::string::npos) { - std::size_t found = words[index].find("="); - energy[cfi] = utils::numeric(FLERR,words[index].substr(found+1),false,lmp); - } else { + // energy is after "=" inside this string - // energy is at index + 2 + std::size_t found = words[index].find("="); + energy[cfi] = utils::numeric(FLERR, words[index].substr(found + 1), false, lmp); + } else { - energy[cfi] = utils::numeric(FLERR,words[index+2],false,lmp); + // energy is at index + 2 - } - - // 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); + energy[cfi] = utils::numeric(FLERR, words[index + 2], false, lmp); } - } else { - // lattice numbers start at index + 2 + // find the word containing "stress" - for (int k = 0; k < 9; k++) { - stress[k + 9*cfi] = utils::numeric(FLERR,words[index+2+k],false,lmp); + 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 (index < std::distance(words.begin(), words.end())) { + 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); + } + } } } + // set fitting weights for this config + + we[cfi] = we_group; + wf[cfi] = wf_group; + cfi += 1; - } // loop over atoms @@ -440,37 +668,43 @@ void FitPOD::read_exyz_file(double *lattice, double *stress, double *energy, dou else if (words.size() > 1) { for (int ii = 0; ii < ns; ii++) - if (species[ii] == words[0]) - atomtype[nat] = ii+1; + 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); + if (compute_descriptors > 0) { + for (int k = 0; k < 3; k++) + pos[k + 3 * nat] = utils::numeric(FLERR, words[1 + k], false, lmp); + } else { + 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) +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); + get_exyz_files(data.data_files, data.group_names, 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, '-'); + 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); + 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); + 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]); + utils::logmesg(lmp, " {:<{}} | {:>10} | {:>8}\n", filename, maxname, + data.num_config[i], data.num_atom_each_file[i]); ++i; } if (comm->me == 0) { @@ -480,24 +714,44 @@ void FitPOD::get_data(datastruct &data, const std::vector& species) 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"); + if (data.data_files.size() < 1) + error->all(FLERR, + "Cannot fit potential without data files. The data paths may not be valid. Please " + "check the data paths in the POD data file."); 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.lattice, 9 * n, "fitpod:lattice"); + memory->create(data.stress, 9 * n, "fitpod:stress"); memory->create(data.energy, n, "fitpod:energy"); + // Group weights have same size as energy. + memory->create(data.we, n, "fitpod:we"); + memory->create(data.wf, n, "fitpod:wf"); + n = data.num_atom_sum; - memory->create(data.position, 3*n, "fitpod:position"); - memory->create(data.force, 3*n, "fitpod:force"); + 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 + double we_group, wf_group; // group weights + int nfiles = data.data_files.size(); // number of files int nconfigs = 0; int natoms = 0; - for (int i=0; i& species) int len = data.num_atom.size(); data.num_atom_min = podArrayMin(&data.num_atom[0], len); data.num_atom_max = podArrayMax(&data.num_atom[0], len); - data.num_atom_cumsum.resize(len+1); - podCumsum(&data.num_atom_cumsum[0], &data.num_atom[0], len+1); + data.num_atom_cumsum.resize(len + 1); + podCumsum(&data.num_atom_cumsum[0], &data.num_atom[0], len + 1); - data.num_config_cumsum.resize(nfiles+1); - podCumsum(&data.num_config_cumsum[0], &data.num_config[0], nfiles+1); + data.num_config_cumsum.resize(nfiles + 1); + podCumsum(&data.num_config_cumsum[0], &data.num_config[0], nfiles + 1); // convert all structures to triclinic system constexpr int DIM = 3; - double Qmat[DIM*DIM]; - for (int ci=0; ci FitPOD::linspace(int start_in, int end_in, int num_in) int elm; if (num == 0) { return linspaced; } - if (num == 1) - { + if (num == 1) { elm = (int) std::round(start); linspaced.push_back(elm); return linspaced; @@ -559,8 +812,7 @@ std::vector FitPOD::linspace(int start_in, int end_in, int num_in) double delta = (end - start) / (num - 1); - for(int i=0; i < num-1; ++i) - { + for (int i = 0; i < num - 1; ++i) { elm = (int) std::round(start + delta * i); linspaced.push_back(elm); } @@ -576,15 +828,14 @@ 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); + int m = (int) std::round(n * fraction); m = MAX(m, 1); - selected = (randomize==1) ? shuffle(1, n, m) : linspace(1, n, m); + selected = (randomize == 1) ? shuffle(1, n, m) : linspace(1, n, m); return selected; } @@ -607,28 +858,30 @@ void FitPOD::select_data(datastruct &newdata, const datastruct &data) 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); + 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); + utils::logmesg(lmp, "Select {} fraction of the data set deterministically using linspace\n", + data.fraction); } - int nfiles = data.data_files.size(); // number of files + 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_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 + 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; + 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; @@ -638,27 +891,31 @@ void FitPOD::select_data(datastruct &newdata, const datastruct &data) 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_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); + 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"); + int n = newdata.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"); + // Group weights have same size as energy. + memory->create(newdata.we, n, "fitpod:we"); + memory->create(newdata.wf, n, "fitpod:wf"); + + n = newdata.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 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]; @@ -666,23 +923,27 @@ void FitPOD::select_data(datastruct &newdata, const datastruct &data) 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."); + 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]; + 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]; + newdata.we[cn] = data.we[ci]; + newdata.wf[cn] = data.wf[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) " + 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()); + "", 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]); + 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); + 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) +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.precision = + read_data_file(data.fitting_weights, data.file_format, data.file_extension, envdata.data_path, + testdata.data_path, data.data_path, data.filenametag, data_file, + data.group_weight_type, data.we_map, data.wf_map); data.training_analysis = (int) data.fitting_weights[3]; data.test_analysis = (int) data.fitting_weights[4]; @@ -737,7 +1007,7 @@ void FitPOD::read_data_files(const std::string& data_file, const std::vector 1) get_data(traindata, species); else - error->all(FLERR,"data set is not found"); + error->all(FLERR, "data set is not found"); if (comm->me == 0) utils::logmesg(lmp, "**************** End of Training Data Set ****************\n"); } else { @@ -746,7 +1016,7 @@ void FitPOD::read_data_files(const std::string& data_file, const std::vector 1) get_data(data, species); else - error->all(FLERR,"data set is not found"); + error->all(FLERR, "data set is not found"); if (comm->me == 0) utils::logmesg(lmp, "**************** End of Training Data Set ****************\n"); @@ -764,80 +1034,127 @@ void FitPOD::read_data_files(const std::string& data_file, const std::vectordestroy(data.atomtype); } - if (((int) testdata.data_path.size() > 1) && (testdata.data_path != traindata.data_path)) { + testdata.fraction = traindata.fitting_weights[8]; + testdata.test_analysis = traindata.test_analysis; + testdata.filenametag = traindata.filenametag; + + if (((int) envdata.data_path.size() > 1) && (desc.nClusters > 1)) { + envdata.filenametag = traindata.filenametag; + envdata.file_format = traindata.file_format; + envdata.file_extension = traindata.file_extension; + int tmp = compute_descriptors; + compute_descriptors = 1; + if (comm->me == 0) + utils::logmesg(lmp, + "**************** Begin of Environment Configuration Set ****************\n"); + get_data(envdata, species); + if (comm->me == 0) + utils::logmesg(lmp, + "**************** End of Environment Configuration Set ****************\n"); + compute_descriptors = tmp; + } + + if ((testdata.data_path == traindata.data_path) && (testdata.fraction == 1.0) && + (traindata.fraction == 1.0)) { + testdata.data_path = traindata.data_path; + } else if (((int) testdata.data_path.size() > 1) && (testdata.fraction > 0) && + (testdata.test_analysis)) { 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 { + + if (testdata.fraction >= 1.0) { + 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 { + datastruct datatm; + testdata.copydatainfo(datatm); + + if (comm->me == 0) + utils::logmesg(lmp, "**************** Begin of Test Data Set ****************\n"); + get_data(datatm, species); + if (comm->me == 0) + utils::logmesg(lmp, "**************** End of Test Data Set ****************\n"); + + if (comm->me == 0) + utils::logmesg(lmp, "**************** Begin of Select Test Data Set ****************\n"); + select_data(testdata, datatm); + if (comm->me == 0) + utils::logmesg(lmp, "**************** End of Select Test Data Set ****************\n"); + + memory->destroy(datatm.lattice); + memory->destroy(datatm.energy); + memory->destroy(datatm.stress); + memory->destroy(datatm.position); + memory->destroy(datatm.force); + memory->destroy(datatm.atomtype); + } + } 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 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]); + 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); + 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); + int nl = (2 * m + 1) * (2 * n + 1) * (2 * p + 1); - for (int j=0; j<3*nx; j++) - y[j] = x[j]; + 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; + 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)) { + for (int j = 0; j < N; j++) { + double *rj = &r[dim * j]; + double rijsq = (ri[0] - rj[0]) * (ri[0] - rj[0]) + (ri[1] - rj[1]) * (ri[1] - rj[1]) + + (ri[2] - rj[2]) * ((ri[2] - rj[2])); + if ((rijsq > SMALL) && (rijsq <= rcutsq)) { inc += 1; neighlist[k] = j; k += 1; @@ -848,320 +1165,413 @@ int FitPOD::podneighborlist(int *neighlist, int *numneigh, double *r, double rcu 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) +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; + 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; + int N = nx * nl; // total number of neighbors nn = podneighborlist(neighlist, numneigh, y, rcutsq, nx, N, dim); - podCumsum(numneighsum, numneigh, nx+1); + podCumsum(numneighsum, numneigh, nx + 1); return nn; } -void FitPOD::allocate_memory(const datastruct &data) +void FitPOD::estimate_memory_neighborstruct(const datastruct &data, int *pbc, double rcut, + int nelements) { - 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 m = 0, n = 0, p = 0, nl = 0, ny = 0, na = 0, np = 0; - 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++) - { + for (int ci = 0; ci < (int) data.num_atom.size(); ci++) { int natom = data.num_atom[ci]; - double *lattice = &data.lattice[9*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]); + 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); + 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 = MAX(nb.natom_max, natom_max); + nb.sze = nelements * nelements; + nb.sza = MAX(nb.sza, na); + nb.szy = MAX(nb.szy, ny); + nb.szp = MAX(nb.szp, np); +} - nb.natom_max = natom_max; - nb.sze = nelements*nelements; - nb.sza = na; - nb.szy = ny; - nb.szp = np; +void FitPOD::allocate_memory_neighborstruct() +{ + memory->create(nb.y, nb.szy, "fitpod:nb_y"); + memory->create(nb.alist, nb.sza, "fitpod:nb_alist"); + memory->create(nb.pairnum, nb.natom_max, "fitpod:nb_pairnum"); + memory->create(nb.pairnum_cumsum, nb.natom_max + 1, "fitpod:nb_pairnum_cumsum"); + memory->create(nb.pairlist, nb.szp, "fitpod:nb_pairlist"); +} - 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; +void FitPOD::allocate_memory_descriptorstruct(int nCoeffAll) +{ + memory->create(desc.bd, nb.natom_max * fastpodptr->Mdesc, "fitpod:desc_ld"); + memory->create(desc.pd, nb.natom_max * fastpodptr->nClusters, "fitpod:desc_ld"); + memory->create(desc.gd, nCoeffAll, "fitpod:desc_gd"); + memory->create(desc.A, nCoeffAll * nCoeffAll, "fitpod:desc_A"); + memory->create(desc.b, nCoeffAll, "fitpod:desc_b"); + memory->create(desc.c, nCoeffAll, "fitpod:desc_c"); + memory->create(desc.gdd, desc.szd, "fitpod:desc_gdd"); + podArraySetValue(desc.A, 0.0, nCoeffAll * nCoeffAll); + podArraySetValue(desc.b, 0.0, nCoeffAll); + podArraySetValue(desc.c, 0.0, nCoeffAll); if (comm->me == 0) { - utils::logmesg(lmp, "maximum number of atoms in periodic domain: {}\n", natom_max); + utils::logmesg(lmp, "**************** Begin of Memory Allocation ****************\n"); + utils::logmesg(lmp, "maximum number of atoms in periodic domain: {}\n", nb.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, "size of double memory: {}\n", desc.szd); + utils::logmesg(lmp, "size of descriptor matrix: {} x {}\n", nCoeffAll, nCoeffAll); utils::logmesg(lmp, "**************** End of Memory Allocation ****************\n"); } } -void FitPOD::linear_descriptors(const datastruct &data, int ci) +void FitPOD::estimate_memory_fastpod(const datastruct &data) { 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 *pbc = fastpodptr->pbc; + double rcut = fastpodptr->rcut; + + int Nij = 0, Nijmax = 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); + Nijmax = MAX(Nijmax, Nij); + } + + desc.szd = MAX(desc.szd, 3 * Nijmax * fastpodptr->nCoeffAll); +} + +void FitPOD::local_descriptors_fastpod(const datastruct &data, int ci) +{ + int dim = 3; + int *pbc = fastpodptr->pbc; + double rcut = fastpodptr->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 *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); + podfullneighborlist(nb.y, nb.alist, nb.pairlist, nb.pairnum, nb.pairnum_cumsum, position, a1, a2, + a3, rcut, pbc, natom); + if (desc.nClusters > 1) { + fastpodptr->descriptors(desc.gd, desc.gdd, desc.bd, desc.pd, nb.y, atomtype, nb.alist, + nb.pairlist, nb.pairnum_cumsum, natom); + } else { + fastpodptr->descriptors(desc.gd, desc.gdd, desc.bd, nb.y, atomtype, nb.alist, nb.pairlist, + nb.pairnum_cumsum, natom); + } } -void FitPOD::quadratic_descriptors(const datastruct &data, int ci) +void FitPOD::base_descriptors_fastpod(const datastruct &data, int ci) { int dim = 3; + int *pbc = fastpodptr->pbc; + double rcut = fastpodptr->rcut; + 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; + 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]; - double *fatom2 = &desc.gdd[dim*natom*(nd1)]; - double *fatom3 = &desc.gdd[dim*natom*(nd1+nd2)]; - double *fatom4 = &desc.gdd[dim*natom*(nd123)]; + // neighbor list + podfullneighborlist(nb.y, nb.alist, nb.pairlist, nb.pairnum, nb.pairnum_cumsum, position, a1, a2, + a3, rcut, pbc, natom); - // 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; ibase_descriptors(desc.bd, nb.y, atomtype, nb.alist, nb.pairlist, nb.pairnum_cumsum, + natom); } -void FitPOD::cubic_descriptors(const datastruct &data, int ci) +void FitPOD::descriptors_calculation(const datastruct &data) { - 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 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; + if (comm->me == 0) + utils::logmesg(lmp, "**************** Begin Calculating Descriptors ****************\n"); - // 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); + // loop over each configuration in the training data set + + double sz[2]; + 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 local POD descriptors + local_descriptors_fastpod(data, ci); + + std::string filename0 = + data.data_path + "/basedescriptors_config" + std::to_string(ci + 1) + ".bin"; + FILE *fp0 = fopen(filename0.c_str(), "wb"); + sz[0] = (double) data.num_atom[ci]; + sz[1] = (double) fastpodptr->Mdesc; + fwrite(reinterpret_cast(sz), sizeof(double) * (2), 1, fp0); + fwrite(reinterpret_cast(desc.bd), + sizeof(double) * (data.num_atom[ci] * fastpodptr->Mdesc), 1, fp0); + fclose(fp0); + + if (desc.nClusters > 1) { + std::string filename1 = + data.data_path + "/environmentdescriptors_config" + std::to_string(ci + 1) + ".bin"; + FILE *fp1 = fopen(filename1.c_str(), "wb"); + sz[0] = (double) data.num_atom[ci]; + sz[1] = (double) fastpodptr->nClusters; + fwrite(reinterpret_cast(sz), sizeof(double) * (2), 1, fp1); + fwrite(reinterpret_cast(desc.pd), + sizeof(double) * (data.num_atom[ci] * fastpodptr->nClusters), 1, fp1); + fclose(fp1); + } + + std::string filename = + data.data_path + "/globaldescriptors_config" + std::to_string(ci + 1) + ".bin"; + FILE *fp = fopen(filename.c_str(), "wb"); + + sz[0] = (double) data.num_atom[ci]; + sz[1] = (double) desc.nCoeffAll; + fwrite(reinterpret_cast(sz), sizeof(double) * (2), 1, fp); + fwrite(reinterpret_cast(desc.gd), sizeof(double) * (desc.nCoeffAll), 1, fp); + if (compute_descriptors == 2) { + fwrite(reinterpret_cast(desc.gdd), + sizeof(double) * (3 * data.num_atom[ci] * desc.nCoeffAll), 1, fp); + } + fclose(fp); + } } - // global descriptors for seven-body cubic333 potential + if (comm->me == 0) + utils::logmesg(lmp, "**************** End Calculating Descriptors ****************\n"); +} - 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); +void FitPOD::environment_cluster_calculation(const datastruct &data) +{ + if (comm->me == 0) + utils::logmesg( + lmp, "**************** Begin Calculating Environment Descriptor Matrix ****************\n"); + + int nComponents = fastpodptr->nComponents; + int Mdesc = fastpodptr->Mdesc; + int nClusters = fastpodptr->nClusters; + int nelements = fastpodptr->nelements; + memory->create(fastpodptr->Centroids, nClusters * nComponents * nelements, "fitpod:centroids"); + memory->create(fastpodptr->Proj, Mdesc * nComponents * nelements, "fitpod:P"); + + int nAtoms = 0; + int nTotalAtoms = 0; + for (int ci = 0; ci < (int) data.num_atom.size(); ci++) { + if ((ci % comm->nprocs) == comm->me) nAtoms += data.num_atom[ci]; + nTotalAtoms += data.num_atom[ci]; } - // global descriptors for ten-body cubic444 potential + double *basedescmatrix; + double *pca; + double *A; + double *work; + double *b; + double *Lambda; + int *clusterSizes; + int *assignments; + int *nElemAtoms; + int *nElemAtomsCumSum; + int *nElemAtomsCount; - 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); + memory->create(basedescmatrix, nAtoms * Mdesc, "fitpod:basedescmatrix"); + memory->create(pca, nAtoms * nComponents, "fitpod:pca"); + memory->create(A, Mdesc * Mdesc, "fitpod:A"); + memory->create(work, Mdesc * Mdesc, "fitpod:work"); + memory->create(b, Mdesc, "fitpod:b"); + memory->create(Lambda, Mdesc * nelements, "fitpod:Lambda"); + memory->create(clusterSizes, nClusters * nelements, "fitpod:clusterSizes"); + memory->create(assignments, nAtoms, "fitpod:assignments"); + memory->create(nElemAtoms, nelements, "fitpod:nElemAtoms"); + memory->create(nElemAtomsCumSum, 1 + nelements, "fitpod:nElemAtomsCumSum"); + memory->create(nElemAtomsCount, nelements, "fitpod:nElemAtomsCount"); + + char chn = 'N'; + char cht = 'T'; + char chv = 'V'; + char chu = 'U'; + double alpha = 1.0, beta = 0.0; + + for (int elem = 0; elem < nelements; elem++) { + nElemAtoms[elem] = 0; // number of atoms for this element + } + for (int ci = 0; ci < (int) data.num_atom.size(); ci++) { + if ((ci % comm->nprocs) == comm->me) { + int natom = data.num_atom[ci]; + int natom_cumsum = data.num_atom_cumsum[ci]; + int *atomtype = &data.atomtype[natom_cumsum]; + for (int n = 0; n < natom; n++) nElemAtoms[atomtype[n] - 1] += 1; + } } - // normalize cubic descriptors - int nd = podptr->pod.nd; - for (int i=(nd1234+nd22+nd23+nd24+nd33+nd34+nd44); ime == 0) utils::logmesg(lmp, "Configuration: # {}\n", ci + 1); + } + + if ((ci % comm->nprocs) == comm->me) { + base_descriptors_fastpod(data, ci); + + // basedescmatrix is a Mdesc x nAtoms matrix + int natom = data.num_atom[ci]; + int natom_cumsum = data.num_atom_cumsum[ci]; + int *atomtype = &data.atomtype[natom_cumsum]; + for (int n = 0; n < natom; n++) { + int elem = atomtype[n] - 1; // offset by 1 to match the element index in the C++ code + nElemAtomsCount[elem] += 1; + int k = nElemAtomsCumSum[elem] + nElemAtomsCount[elem] - 1; + for (int m = 0; m < Mdesc; m++) basedescmatrix[m + Mdesc * k] = desc.bd[n + natom * (m)]; + } + } + } + + int save = 0; + for (int elem = 0; elem < nelements; elem++) { // loop over each element + nAtoms = nElemAtoms[elem]; + nTotalAtoms = nAtoms; + MPI_Allreduce(MPI_IN_PLACE, &nTotalAtoms, 1, MPI_INT, MPI_SUM, world); + + double *descmatrix = &basedescmatrix[Mdesc * nElemAtomsCumSum[elem]]; + double *Proj = &fastpodptr->Proj[nComponents * Mdesc * elem]; + double *centroids = &fastpodptr->Centroids[nComponents * nClusters * elem]; + + // Calculate covariance matrix A = basedescmatrix*basedescmatrix'. A is a Mdesc x Mdesc matrix + DGEMM(&chn, &cht, &Mdesc, &Mdesc, &nAtoms, &alpha, descmatrix, &Mdesc, descmatrix, &Mdesc, + &beta, A, &Mdesc); + MPI_Allreduce(MPI_IN_PLACE, A, Mdesc * Mdesc, MPI_DOUBLE, MPI_SUM, world); + + //if (comm->me == 0) print_matrix("A", Mdesc, Mdesc, A, Mdesc); + + if ((comm->me == 0) && (save == 1)) + savematrix2binfile(data.filenametag + "_covariance_matrix_elem" + std::to_string(elem + 1) + + ".bin", + A, Mdesc, Mdesc); + + // Calculate eigenvalues and eigenvectors of A + int lwork = Mdesc * Mdesc; // the length of the array work, lwork >= max(1,3*N-1) + int info = 1; // = 0: successful exit + + DSYEV(&chv, &chu, &Mdesc, A, &Mdesc, b, work, &lwork, &info); + + // order eigenvalues and eigenvectors from largest to smallest + for (int i = 0; i < Mdesc; i++) Lambda[(Mdesc - i - 1)] = b[i]; + + // P is a nComponents x Mdesc matrix + for (int j = 0; j < nComponents; j++) + for (int i = 0; i < Mdesc; i++) + Proj[j + nComponents * i] = + A[i + Mdesc * (Mdesc - j - 1)] * sqrt(fabs(b[(Mdesc - j - 1)] / Lambda[0])); + + // Calculate principal compoment analysis matrix pca = P*descmatrix. pca is a nComponents x nAtoms matrix + DGEMM(&chn, &chn, &nComponents, &nAtoms, &Mdesc, &alpha, Proj, &nComponents, descmatrix, &Mdesc, + &beta, pca, &nComponents); + + // initialize centroids + for (int i = 0; i < nClusters * nComponents; i++) centroids[i] = 0.0; + for (int i = 0; i < nAtoms; i++) { + int m = (i * nClusters) / nAtoms; + for (int j = 0; j < nComponents; j++) + centroids[j + nComponents * m] += pca[j + nComponents * i]; + } + + MPI_Allreduce(MPI_IN_PLACE, centroids, nClusters * nComponents, MPI_DOUBLE, MPI_SUM, world); + double fac = ((double) nClusters) / ((double) nTotalAtoms); + for (int i = 0; i < nClusters * nComponents; i++) centroids[i] = centroids[i] * fac; + + // Calculate centroids using k-means clustering + int max_iter = 100; + KmeansClustering(pca, centroids, assignments, clusterSizes, nAtoms, nClusters, nComponents, + max_iter); + + if (save == 1) { + if (comm->me == 0) { + savematrix2binfile(data.filenametag + "_eigenvector_matrix_elem" + + std::to_string(elem + 1) + ".bin", + A, Mdesc, Mdesc); + savematrix2binfile(data.filenametag + "_eigenvalues_elem" + std::to_string(elem + 1) + + ".bin", + b, Mdesc, 1); + } + savematrix2binfile(data.filenametag + "_desc_matrix_elem" + std::to_string(elem + 1) + + "_proc" + std::to_string(comm->me + 1) + ".bin", + descmatrix, Mdesc, nAtoms); + savematrix2binfile(data.filenametag + "_pca_matrix_elem" + std::to_string(elem + 1) + + "_proc" + std::to_string(comm->me + 1) + ".bin", + pca, nComponents, nAtoms); + saveintmatrix2binfile(data.filenametag + "_cluster_assignments_elem" + + std::to_string(elem + 1) + "_proc" + std::to_string(comm->me + 1) + + ".bin", + assignments, nAtoms, 1); + } + } + + memory->destroy(basedescmatrix); + memory->destroy(pca); + memory->destroy(A); + memory->destroy(work); + memory->destroy(b); + memory->destroy(clusterSizes); + memory->destroy(Lambda); + memory->destroy(assignments); + memory->destroy(nElemAtoms); + memory->destroy(nElemAtomsCumSum); + memory->destroy(nElemAtomsCount); + + if (comm->me == 0) + utils::logmesg( + lmp, "**************** End Calculating Environment Descriptor Matrix ****************\n"); } void FitPOD::least_squares_matrix(const datastruct &data, int ci) @@ -1169,26 +1579,26 @@ void FitPOD::least_squares_matrix(const datastruct &data, int ci) int dim = 3; int natom = data.num_atom[ci]; int natom_cumsum = data.num_atom_cumsum[ci]; - int nd = podptr->pod.nd; - int nforce = dim*natom; + int nCoeffAll = desc.nCoeffAll; + 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); + if (data.normalizeenergy == 1) normconst = 1.0 / natom; + double we = data.we[ci]; + double wf = data.wf[ci]; + 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]; + 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); + podKron(desc.A, desc.gd, desc.gd, we2, nCoeffAll, nCoeffAll); // least-square matrix for all descriptors derivatives: A = A + (wf*wf) * (gdd^T * gdd) @@ -1196,18 +1606,17 @@ void FitPOD::least_squares_matrix(const datastruct &data, int ci) 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); + DGEMM(&cht, &chn, &nCoeffAll, &nCoeffAll, &nforce, &wf2, desc.gdd, &nforce, desc.gdd, &nforce, + &one, desc.A, &nCoeffAll); // 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]; + double wee = we2 * energy; + for (int i = 0; i < nCoeffAll; 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); - + DGEMV(&cht, &nforce, &nCoeffAll, &wf2, desc.gdd, &nforce, force, &inc1, &one, desc.b, &inc1); } void FitPOD::least_squares_fit(const datastruct &data) @@ -1217,26 +1626,28 @@ void FitPOD::least_squares_fit(const datastruct &data) // loop over each configuration in the training data set - for (int ci=0; ci < (int) data.num_atom.size(); ci++) { + 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 % 100) == 0) { + if (comm->me == 0) utils::logmesg(lmp, "Configuration: # {}\n", ci + 1); } if ((ci % comm->nprocs) == comm->me) { // compute linear POD descriptors + local_descriptors_fastpod(data, ci); - linear_descriptors(data, ci); - - // compute quadratic POD descriptors - - quadratic_descriptors(data, ci); - - // compute cubic POD descriptors - - cubic_descriptors(data, ci); + if (save_descriptors > 0) { + std::string filename = + data.data_path + "/descriptors_config" + std::to_string(ci + 1) + ".bin"; + FILE *fp = fopen(filename.c_str(), "wb"); + fwrite(reinterpret_cast(desc.gd), sizeof(double) * (desc.nCoeffAll), 1, fp); + if (save_descriptors == 2) { + fwrite(reinterpret_cast(desc.gdd), + sizeof(double) * (3 * data.num_atom[ci] * desc.nCoeffAll), 1, fp); + } + fclose(fp); + } // assemble the least-squares linear system @@ -1244,172 +1655,159 @@ void FitPOD::least_squares_fit(const datastruct &data) } } - int nd = podptr->pod.nd; + int nCoeffAll = desc.nCoeffAll; - 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); + MPI_Allreduce(MPI_IN_PLACE, desc.b, nCoeffAll, MPI_DOUBLE, MPI_SUM, world); + MPI_Allreduce(MPI_IN_PLACE, desc.A, nCoeffAll * nCoeffAll, 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"); - } + // update coefficients in POD class to compute energy and force + fastpodptr->mknewcoeff(desc.c, nCoeffAll); } -double FitPOD::energyforce_calculation(double *force, double *coeff, const datastruct &data, int ci) +double latticevolume(double *lattice) +{ + double *v1 = &lattice[0]; + double *v2 = &lattice[3]; + double *v3 = &lattice[6]; + + double b0 = v1[1] * v2[2] - v1[2] * v2[1]; + double b1 = v1[2] * v2[0] - v1[0] * v2[2]; + double b2 = v1[0] * v2[1] - v1[1] * v2[0]; + + return (b0 * v3[0] + b1 * v3[1] + b2 * v3[2]); +} + +double FitPOD::energyforce_calculation_fastpod(double *force, 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 *pbc = fastpodptr->pbc; + double rcut = fastpodptr->rcut; 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 *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 + podfullneighborlist(nb.y, nb.alist, nb.pairlist, nb.pairnum, nb.pairnum_cumsum, position, a1, a2, + a3, rcut, pbc, natom); - 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); + double energy = fastpodptr->energyforce(force, nb.y, atomtype, nb.alist, nb.pairlist, + nb.pairnum_cumsum, natom); return energy; } void FitPOD::print_analysis(const datastruct &data, double *outarray, double *errors) { - int nfiles = data.data_files.size(); // number of files + 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()); + 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"); + 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"); + 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,'-'); + 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); + 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; + 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 " + fmt::print(fp_analysis, + " config # atoms volume 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]); + 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]); + + double vol = latticevolume(&data.lattice[9 * ci]); + fmt::print(fp_analysis, "{:<15.10} ", vol); + + 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]; + 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]); + 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]); + 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"); + 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); @@ -1421,87 +1819,64 @@ void FitPOD::print_analysis(const datastruct &data, double *outarray, double *er void FitPOD::error_analysis(const datastruct &data, double *coeff) { int dim = 3; + int nCoeffAll = desc.nCoeffAll; double energy; - std::vector force(dim*data.num_atom_max); + 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 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 outarray(m * num_configs); + for (int i = 0; i < m * num_configs; i++) outarray[i] = 0.0; std::vector 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; + std::vector 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; j newcoeff(nCoeffAll); + for (int j = 0; j < nCoeffAll; j++) newcoeff[j] = coeff[j]; if (comm->me == 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 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 + 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 % 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; + 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"); @@ -1562,40 +1938,39 @@ void FitPOD::error_analysis(const datastruct &data, double *coeff) } } -void FitPOD::energyforce_calculation(const datastruct &data, double *coeff) +void FitPOD::energyforce_calculation(const datastruct &data) { int dim = 3; double energy; - std::vector force(1+dim*data.num_atom_max); + std::vector force(1 + dim * data.num_atom_max); - int nfiles = data.data_files.size(); // number of files + 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 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); + 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; + int nforce = dim * natom; if ((ci % comm->nprocs) == comm->me) { - energy = energyforce_calculation(force.data()+1, coeff, data, ci); + energy = energyforce_calculation_fastpod(force.data() + 1, data, ci); // save energy and force into a binary file - force[0] = energy; - std::string filename = "energyforce_config" + std::to_string(ci+1) + ".bin"; + 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); + fwrite(reinterpret_cast(force.data()), sizeof(double) * (1 + nforce), 1, fp); fclose(fp); } @@ -1606,136 +1981,88 @@ void FitPOD::energyforce_calculation(const datastruct &data, double *coeff) utils::logmesg(lmp, "**************** End of Energy/Force Calculation ****************\n"); } -void FitPOD::print_matrix(const char *desc, int m, int n, double **a, int /*lda*/ ) +void FitPOD::podArrayFill(int *output, int start, int length) { - 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; + 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]; + for (int i = 1; i < n; i++) + if (a[i] > b) b = a[i]; return b; } int FitPOD::podArrayMin(int *a, int n) { int b = a[0]; - for (int i=1; ib) - b = a[i]; + for (int i = 1; i < n; i++) + if (a[i] > b) 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(sz), sizeof(double) * (2), 1, fp); + fwrite(reinterpret_cast(A), sizeof(double) * (nrows * ncols), 1, fp); + fclose(fp); +} + +void FitPOD::saveintmatrix2binfile(std::string filename, int *A, int nrows, int ncols) +{ + FILE *fp = fopen(filename.c_str(), "wb"); + int sz[2]; + sz[0] = nrows; + sz[1] = ncols; + fwrite(reinterpret_cast(sz), sizeof(int) * (2), 1, fp); + fwrite(reinterpret_cast(A), sizeof(int) * (nrows * ncols), 1, fp); + fclose(fp); +} + +void FitPOD::savedata2textfile(std::string filename, std::string text, double *A, int n, int m, + int dim) +{ + if (comm->me == 0) { + int precision = 15; + FILE *fp = fopen(filename.c_str(), "w"); + if (dim == 1) { + fmt::print(fp, text, n); + for (int i = 0; i < n; i++) fmt::print(fp, "{:<10.{}f} \n", A[i], precision); + } else if (dim == 2) { + fmt::print(fp, text, n); + fmt::print(fp, "{} \n", m); + for (int j = 0; j < n; j++) { + for (int i = 0; i < m; i++) fmt::print(fp, "{:<10.{}f} ", A[j + i * n], precision); + fmt::print(fp, " \n"); + } + } + fclose(fp); + } } diff --git a/src/ML-POD/fitpod_command.h b/src/ML-POD/fitpod_command.h index b359130240..b961ddc224 100644 --- a/src/ML-POD/fitpod_command.h +++ b/src/ML-POD/fitpod_command.h @@ -21,6 +21,7 @@ CommandStyle(fitpod,FitPOD); #define LMP_FITPOD_COMMAND_H #include "command.h" +#include namespace LAMMPS_NS { @@ -31,12 +32,17 @@ class FitPOD : public Command { private: struct datastruct { - std::string file_format = "extxyz"; - std::string file_extension = "xyz"; + datastruct(); + void copydatainfo(datastruct &data) const; + + std::string file_format; + std::string file_extension; std::string data_path; - std::vector data_files; + std::vector data_files; // sorted file names + std::vector group_names; // sorted group names std::vector filenames; - std::string filenametag = "pod"; + std::string filenametag; + std::string group_weight_type; std::vector num_atom; std::vector num_atom_cumsum; @@ -54,49 +60,35 @@ class FitPOD : public Command { double *position; double *force; int *atomtype; + // Group weights will have same size as energy. + double *we; + double *wf; - 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; + int training; + int normalizeenergy; + int training_analysis; + int test_analysis; + int training_calculation; + int test_calculation; + int randomize; + int precision; + double fraction; - double fitting_weights[12] = {100.0, 1.0, 0.0, 1, 1, 0, 0, 1, 1, 1, 1, 1e-10}; + std::unordered_map we_map; + std::unordered_map wf_map; - 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]; - } + double fitting_weights[12]; }; struct neighborstruct { + neighborstruct(); + int *alist; int *pairnum; int *pairnum_cumsum; int *pairlist; double *y; - int natom; - int nalist; int natom_max; int sze; int sza; @@ -105,27 +97,30 @@ class FitPOD : public Command { }; struct descriptorstruct { + descriptorstruct(); + + double *bd; // base descriptors + double *pd; // multi-environment descriptors (probabilities) 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; + int nCoeffAll; // number of global descriptors + int nClusters; // number of environment clusters }; + int save_descriptors; + int compute_descriptors; datastruct traindata; datastruct testdata; + datastruct envdata; descriptorstruct desc; neighborstruct nb; - class MLPOD *podptr; + class EAPOD *fastpodptr; // 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); @@ -144,23 +139,40 @@ class FitPOD : public Command { void matrix33_multiplication(double *xrot, double *Rmat, double *x, int natom); void matrix33_inverse(double *invA, double *A1, double *A2, double *A3); + double squareDistance(const double *a, const double *b, int DIMENSIONS); + void assignPointsToClusters(double *points, double *centroids, int *assignments, + int *clusterSizes, int NUM_POINTS, int NUM_CLUSTERS, int DIMENSION); + void updateCentroids(double *points, double *centroids, int *assignments, int *clusterSizes, + int NUM_POINTS, int NUM_CLUSTERS, int DIMENSIONS); + void KmeansClustering(double *points, double *centroids, int *assignments, int *clusterSizes, + int NUM_POINTS, int NUM_CLUSTERS, int DIMENSIONS, int MAX_ITER); + + void savedata2textfile(std::string filename, std::string text, double *A, int n, int m, int dim); + void savematrix2binfile(std::string filename, double *A, int nrows, int ncols); + void saveintmatrix2binfile(std::string filename, int *A, int nrows, int ncols); + // 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 &); + std::string &env_path, std::string &test_path, std::string &training_path, + std::string &filenametag, const std::string &data_file, + std::string &group_weight_type, + std::unordered_map &we_map, + std::unordered_map &wf_map); + void get_exyz_files(std::vector &, 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); + void read_exyz_file(double *lattice, double *stress, double *energy, double *we, double *wf, + double *pos, double *forces, int *atomtype, std::string file, + std::vector species, double we_group, double wf_group); + 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); + 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, @@ -168,19 +180,21 @@ class FitPOD : public Command { 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 estimate_memory_neighborstruct(const datastruct &data, int *pbc, double rcut, int nelements); + void allocate_memory_neighborstruct(); + void allocate_memory_descriptorstruct(int nd); + void estimate_memory_fastpod(const datastruct &data); + void local_descriptors_fastpod(const datastruct &data, int ci); + void base_descriptors_fastpod(const datastruct &data, int ci); void least_squares_matrix(const datastruct &data, int ci); void least_squares_fit(const datastruct &data); + void descriptors_calculation(const datastruct &data); + void environment_cluster_calculation(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); + double energyforce_calculation_fastpod(double *force, const datastruct &data, int ci); + void energyforce_calculation(const datastruct &data); }; - } // namespace LAMMPS_NS - #endif #endif diff --git a/src/ML-POD/mlpod.cpp b/src/ML-POD/mlpod.cpp deleted file mode 100644 index 088b9abadc..0000000000 --- a/src/ML-POD/mlpod.cpp +++ /dev/null @@ -1,3714 +0,0 @@ -/* ---------------------------------------------------------------------- - 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; - -static constexpr int MAXLINE = 1024; - -MLPOD::podstruct::podstruct() : - twobody{4, 8, 6}, threebody{4, 8, 5, 4}, 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), - snapelementradius{0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5}, - snapelementweight{1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0} -{ - snaptwojmax = 0; - snapchemflag = 0; - snaprfac0 = 0.99363; -} - -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] = {'\0'}; - char *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; - - const 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] = {'\0'}; - char *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 deleted file mode 100644 index 54e75988be..0000000000 --- a/src/ML-POD/mlpod.h +++ /dev/null @@ -1,308 +0,0 @@ -/* -*- 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 index d106b11a18..ee70d39df4 100644 --- a/src/ML-POD/pair_pod.cpp +++ b/src/ML-POD/pair_pod.cpp @@ -17,53 +17,137 @@ #include "pair_pod.h" -#include "mlpod.h" - #include "atom.h" #include "comm.h" #include "error.h" #include "force.h" +#include "math_const.h" +#include "math_special.h" #include "memory.h" #include "neigh_list.h" #include "neighbor.h" +#include "tokenizer.h" + +#include +#include +#include + +#include "eapod.h" using namespace LAMMPS_NS; +using MathConst::MY_PI; +using MathSpecial::powint; + +#define MAXLINE 1024 /* ---------------------------------------------------------------------- */ -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) +PairPOD::PairPOD(LAMMPS *lmp) : Pair(lmp), fastpodptr(nullptr) { single_enable = 0; restartinfo = 0; one_coeff = 1; manybody_flag = 1; centroidstressflag = CENTROID_NOTAVAIL; - peratom_warn = true; + peratom_warn = false; - dim = 3; - nablockmax = 0; + ni = 0; + nimax = 0; nij = 0; nijmax = 0; - szd = 0; + atomBlockSize = 10; + nAtomBlocks = 0; + + rij = nullptr; + fij = nullptr; + ei = nullptr; + typeai = nullptr; + numij = nullptr; + idxi = nullptr; + ai = nullptr; + aj = nullptr; + ti = nullptr; + tj = nullptr; + Phi = nullptr; + rbf = nullptr; + rbfx = nullptr; + rbfy = nullptr; + rbfz = nullptr; + abf = nullptr; + abfx = nullptr; + abfy = nullptr; + abfz = nullptr; + sumU = nullptr; + forcecoeff = nullptr; + Centroids = nullptr; + Proj = nullptr; + bd = nullptr; + cb = nullptr; + bdd = nullptr; + pd = nullptr; + pdd = nullptr; + coefficients = nullptr; + pn3 = nullptr; + pc3 = nullptr; + pa4 = nullptr; + pb4 = nullptr; + pc4 = nullptr; + ind33l = nullptr; + ind33r = nullptr; + ind34l = nullptr; + ind34r = nullptr; + ind44l = nullptr; + ind44r = nullptr; + elemindex = nullptr; } /* ---------------------------------------------------------------------- */ PairPOD::~PairPOD() { - free_tempmemory(); - memory->destroy(podcoeff); - memory->destroy(newpodcoeff); - memory->destroy(gd); - memory->destroy(gdall); - memory->destroy(energycoeff); + memory->destroy(rij); + memory->destroy(fij); + memory->destroy(ei); + memory->destroy(typeai); + memory->destroy(numij); + memory->destroy(idxi); + memory->destroy(ai); + memory->destroy(aj); + memory->destroy(ti); + memory->destroy(tj); + memory->destroy(Phi); + memory->destroy(rbf); + memory->destroy(rbfx); + memory->destroy(rbfy); + memory->destroy(rbfz); + memory->destroy(abf); + memory->destroy(abfx); + memory->destroy(abfy); + memory->destroy(abfz); + memory->destroy(sumU); memory->destroy(forcecoeff); + memory->destroy(Centroids); + memory->destroy(Proj); + memory->destroy(bd); + memory->destroy(cb); + memory->destroy(bdd); + memory->destroy(pd); + memory->destroy(pdd); + memory->destroy(coefficients); + memory->destroy(pn3); + memory->destroy(pc3); + memory->destroy(pa4); + memory->destroy(pb4); + memory->destroy(pc4); + memory->destroy(ind33l); + memory->destroy(ind33r); + memory->destroy(ind34l); + memory->destroy(ind34r); + memory->destroy(ind44l); + memory->destroy(ind44r); + memory->destroy(elemindex); - delete podptr; + delete fastpodptr; if (allocated) { memory->destroy(setflag); @@ -75,14 +159,14 @@ 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"); - } +// // 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; @@ -91,65 +175,92 @@ void PairPOD::compute(int eflag, int vflag) int *type = atom->type; int *ilist = list->ilist; int inum = list->inum; + int nlocal = atom->nlocal; + int newton_pair = force->newton_pair; - // initialize global descriptors to zero - - int nd1234 = podptr->pod.nd1234; - podptr->podArraySetValue(gd, 0.0, nd1234); + double rcutsq = rcut*rcut; + double evdwl = 0.0; + int blockMode = 0; + if (blockMode==0) { 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(); + fastpodptr->free_temp_memory(); + fastpodptr->allocate_temp_memory(nijmax); } - // get neighbor pairs for atom i + double *rij1 = &fastpodptr->tmpmem[0]; + double *fij1 = &fastpodptr->tmpmem[3*nijmax]; + double *tmp = &fastpodptr->tmpmem[6*nijmax]; + int *ai1 = &fastpodptr->tmpint[0]; + int *aj1 = &fastpodptr->tmpint[nijmax]; + int *ti1 = &fastpodptr->tmpint[2*nijmax]; + int *tj1 = &fastpodptr->tmpint[3*nijmax]; + lammpsNeighborList(rij1, ai1, aj1, ti1, tj1, x, firstneigh, type, map, numneigh, rcutsq, i); - lammpsNeighPairs(x, firstneigh, type, map, numneigh, i); + evdwl = fastpodptr->peratomenergyforce2(fij1, rij1, tmp, ti1, tj1, nij); - // compute global POD descriptors for atom i + // tally atomic energy to global energy + ev_tally_full(i,2.0*evdwl,0.0,0.0,0.0,0.0,0.0); - podptr->linear_descriptors_ij(gd, tmpmem, rij, &tmpmem[nd1234], numneighsum, typeai, idxi, ti, - tj, 1, nij); + // tally atomic force to global force + tallyforce(f, fij1, ai1, aj1, nij); + + // tally atomic stress + if (vflag) { + for (int jj = 0; jj < nij; jj++) { + int j = aj1[jj]; + ev_tally_xyz(i,j,nlocal,newton_pair,0.0,0.0, + fij1[0 + 3*jj],fij1[1 + 3*jj],fij1[2 + 3*jj], + -rij1[0 + 3*jj], -rij1[1 + 3*jj], -rij1[2 + 3*jj]); + } + } } + } + else if (blockMode == 1) { + // determine the number of atom blocks and divide atoms into blocks + nAtomBlocks = calculateNumberOfIntervals(inum, atomBlockSize); + if (nAtomBlocks > 100) nAtomBlocks = 100; + divideInterval(atomBlocks, inum, nAtomBlocks); - 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; + int nmax = 0; + for (int block =0; blockcalculate_energy(energycoeff, forcecoeff, gd, gdall, newpodcoeff); + // get neighbor list for atoms i in the current atom block + NeighborList(x, firstneigh, type, map, ilist, numneigh, rcutsq, gi1); - for (int ii = 0; ii < inum; ii++) { - int i = ilist[ii]; + // compute atomic energy and force for the current atom block + blockatomenergyforce(ei, fij, ni, nij); - // get neighbor pairs for atom i + // tally atomic energy to global energy + tallyenergy(ei, gi1, ni); - lammpsNeighPairs(x, firstneigh, type, map, numneigh, i); + // tally atomic force to global force + tallyforce(f, fij, ai, aj, nij); - // compute atomic force for atom i + // tally atomic stress + if (vflag) tallystress(fij, rij, ai, aj, nlocal, nij); - podptr->calculate_force(f, forcecoeff, rij, tmpmem, numneighsum, typeai, idxi, ai, aj, ti, tj, - 1, nij); + //savedatafordebugging(); + } } if (vflag_fdotr) virial_fdotr_compute(); @@ -179,34 +290,23 @@ void PairPOD::coeff(int narg, char **arg) map = new int[np1]; allocated = 1; - if (narg < 4) utils::missing_cmd_args(FLERR, "pair_coeff", error); - map_element2type(narg - 4, arg + 4); + if (narg < 5) utils::missing_cmd_args(FLERR, "pair_coeff", error); std::string pod_file = std::string(arg[2]); // pod input file std::string coeff_file = std::string(arg[3]); // coefficient input file + map_element2type(narg - 4, arg + 4); - delete podptr; - podptr = new MLPOD(lmp, pod_file, coeff_file); + delete fastpodptr; + fastpodptr = new EAPOD(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); - } + copy_data_from_pod_class(); + rcut = fastpodptr->rcut; + + memory->destroy(fastpodptr->tmpmem); + memory->destroy(fastpodptr->tmpint); for (int ii = 0; ii < np1; ii++) - for (int jj = 0; jj < np1; jj++) cutsq[ii][jj] = podptr->pod.rcut * podptr->pod.rcut; + for (int jj = 0; jj < np1; jj++) cutsq[ii][jj] = fastpodptr->rcut * fastpodptr->rcut; } /* ---------------------------------------------------------------------- @@ -222,7 +322,7 @@ void PairPOD::init_style() neighbor->add_request(this, NeighConst::REQ_FULL); // reset flag to print warning about per-atom energies or stresses - peratom_warn = true; + peratom_warn = false; } /* ---------------------------------------------------------------------- @@ -232,7 +332,16 @@ void PairPOD::init_style() 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; + + double rcut = 0.0; + rcut = fastpodptr->rcut; + + return rcut; +} + +void PairPOD::allocate() +{ + allocated = 1; } /* ---------------------------------------------------------------------- @@ -245,67 +354,14 @@ double PairPOD::memory_usage() return bytes; } -void PairPOD::free_tempmemory() +void PairPOD::lammpsNeighborList(double *rij1, int *ai1, int *aj1, int *ti1, int *tj1, + double **x, int **firstneigh, int *atomtypes, int *map, + int *numneigh, double rcutsq, int gi) { - 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; + ti1[nij] = itype; 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 @@ -313,18 +369,1778 @@ void PairPOD::lammpsNeighPairs(double **x, int **firstneigh, int *atomtypes, int 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; + rij1[nij * 3 + 0] = delx; + rij1[nij * 3 + 1] = dely; + rij1[nij * 3 + 2] = delz; + ai1[nij] = gi; + aj1[nij] = gj; + ti1[nij] = itype; + tj1[nij] = map[atomtypes[gj]] + 1; nij++; } } - - numneighsum[0] = 0; - numneighsum[1] = nij; +} + +void PairPOD::NeighborCount(double **x, int **firstneigh, int *ilist, int *numneigh, double rcutsq, int gi1) +{ + for (int i=0; i 1e-20) n++; + } + numij[1+i] = n; + } +} + +int PairPOD::numberOfNeighbors() +{ + int n = 0; + for (int i=1; i<=ni; i++) { + n += numij[i]; + numij[i] += numij[i-1]; + } + return n; +} + +void PairPOD::NeighborList(double **x, int **firstneigh, int *atomtypes, int *map, + int *ilist, int *numneigh, double rcutsq, int gi1) +{ + for (int i=0; i 1e-20) { + int nij1 = nij0 + k; + rij[nij1 * 3 + 0] = delx; + rij[nij1 * 3 + 1] = dely; + rij[nij1 * 3 + 2] = delz; + idxi[nij1] = i; + ai[nij1] = gi; + aj[nij1] = gj; + ti[nij1] = itype; + tj[nij1] = map[atomtypes[gj]] + 1; + k++; + } + } + } +} + +void PairPOD::tallyforce(double **force, double *fij, int *ai, int *aj, int N) +{ + for (int n=0; nnelements; // number of elements + onebody = fastpodptr->onebody; // one-body descriptors + besseldegree = fastpodptr->besseldegree; // degree of Bessel functions + inversedegree = fastpodptr->inversedegree; // degree of inverse functions + nbesselpars = fastpodptr->nbesselpars; // number of Bessel parameters + nCoeffPerElement = fastpodptr->nCoeffPerElement; // number of coefficients per element = (nl1 + Mdesc*nClusters) + ns = fastpodptr->ns; // number of snapshots for radial basis functions + nl1 = fastpodptr->nl1; // number of one-body descriptors + nl2 = fastpodptr->nl2; // number of two-body descriptors + nl3 = fastpodptr->nl3; // number of three-body descriptors + nl4 = fastpodptr->nl4; // number of four-body descriptors + nl23 = fastpodptr->nl23; // number of two-body x three-body descriptors + nl33 = fastpodptr->nl33; // number of three-body x three-body descriptors + nl34 = fastpodptr->nl34; // number of three-body x four-body descriptors + nl44 = fastpodptr->nl44; // number of four-body x four-body descriptors + nl = fastpodptr->nl; // number of local descriptors + nrbf2 = fastpodptr->nrbf2; + nrbf3 = fastpodptr->nrbf3; + nrbf4 = fastpodptr->nrbf4; + nrbfmax = fastpodptr->nrbfmax; // number of radial basis functions + nabf3 = fastpodptr->nabf3; // number of three-body angular basis functions + nabf4 = fastpodptr->nabf4; // number of four-body angular basis functions + K3 = fastpodptr->K3; // number of three-body monomials + K4 = fastpodptr->K4; // number of four-body monomials + Q4 = fastpodptr->Q4; // number of four-body monomial coefficients + nClusters = fastpodptr->nClusters; // number of environment clusters + nComponents = fastpodptr->nComponents; // number of principal components + Mdesc = fastpodptr->Mdesc; // number of base descriptors + + rin = fastpodptr->rin; + rcut = fastpodptr->rcut; + rmax = rcut - rin; + besselparams[0] = fastpodptr->besselparams[0]; + besselparams[1] = fastpodptr->besselparams[1]; + besselparams[2] = fastpodptr->besselparams[2]; + + memory->create(abftm, 4*K3, "abftm"); + memory->create(elemindex, nelements*nelements, "elemindex"); + for (int i=0; ielemindex[i]; + + memory->create(Phi, ns * ns, "pair_pod:Phi"); + for (int i=0; iPhi[i]; + + memory->create(coefficients, nCoeffPerElement * nelements, "pair_pod:coefficients"); + for (int i=0; icoeff[i]; + + if (nClusters > 1) { + memory->create(Proj, Mdesc * nComponents * nelements, "pair_pod:Proj"); + for (int i=0; iProj[i]; + + memory->create(Centroids, nClusters * nComponents * nelements, "pair_pod:Centroids"); + for (int i=0; iCentroids[i]; + } + + memory->create(pn3, nabf3+1, "pn3"); // array stores the number of monomials for each degree + memory->create(pq3, K3*2, "pq3"); // array needed for the recursive computation of the angular basis functions + memory->create(pc3, K3, "pc3"); // array needed for the computation of the three-body descriptors + memory->create(pa4, nabf4+1, "pa4"); // this array is a subset of the array {0, 1, 4, 10, 19, 29, 47, 74, 89, 119, 155, 209, 230, 275, 335, 425, 533, 561, 624, 714, 849, 949, 1129, 1345} + memory->create(pb4, Q4*3, "pb4"); // array stores the indices of the monomials needed for the computation of the angular basis functions + memory->create(pc4, Q4, "pc4"); // array of monomial coefficients needed for the computation of the four-body descriptors + for (int i=0; ipn3[i]; + for (int i=0; ipc3[i]; + for (int i=0; ipq3[i]; + for (int i=0; ipa4[i]; + for (int i=0; ipb4[i]; + for (int i=0; ipc4[i]; + + memory->create(ind33l, nl33, "pair_pod:ind33l"); + memory->create(ind33r, nl33, "pair_pod:ind33r"); + memory->create(ind34l, nl34, "pair_pod:ind34l"); + memory->create(ind34r, nl34, "pair_pod:ind34r"); + memory->create(ind44l, nl44, "pair_pod:ind44l"); + memory->create(ind44r, nl44, "pair_pod:ind44r"); + for (int i=0; iind33l[i]; + for (int i=0; iind33r[i]; + for (int i=0; iind34l[i]; + for (int i=0; iind34r[i]; + for (int i=0; iind44l[i]; + for (int i=0; iind44r[i]; +} + +void PairPOD::grow_atoms(int Ni) +{ + if (Ni > nimax) { + memory->destroy(ei); + memory->destroy(typeai); + memory->destroy(numij); + memory->destroy(sumU); + memory->destroy(forcecoeff); + memory->destroy(bd); + memory->destroy(cb); + memory->destroy(pd); + nimax = Ni; + memory->create(ei, nimax, "pair_pod:ei"); + memory->create(typeai, nimax, "pair_pod:typeai"); + memory->create(numij, nimax+1, "pair_pod:typeai"); + int n = nimax * nelements * K3 * nrbfmax; + memory->create(sumU, n , "pair_pod:sumU"); + memory->create(forcecoeff, n , "pair_pod:forcecoeff"); + memory->create(bd, nimax * Mdesc, "pair_pod:bd"); + memory->create(cb, nimax * Mdesc, "pair_pod:bd"); + if (nClusters > 1) memory->create(pd, nimax * (1 + nComponents + 3*nClusters), "pair_pod:pd"); + + for (int i=0; i<=nimax; i++) numij[i] = 0; + } +} + +void PairPOD::grow_pairs(int Nij) +{ + if (Nij > nijmax) { + memory->destroy(rij); + memory->destroy(fij); + memory->destroy(idxi); + memory->destroy(ai); + memory->destroy(aj); + memory->destroy(ti); + memory->destroy(tj); + memory->destroy(rbf); + memory->destroy(rbfx); + memory->destroy(rbfy); + memory->destroy(rbfz); + memory->destroy(abf); + memory->destroy(abfx); + memory->destroy(abfy); + memory->destroy(abfz); + nijmax = Nij; + memory->create(rij, 3 * nijmax, "pair_pod:r_ij"); + memory->create(fij, 3 * nijmax, "pair_pod:f_ij"); + memory->create(idxi, nijmax, "pair_pod:idxi"); + memory->create(ai, nijmax, "pair_pod:ai"); + memory->create(aj, nijmax, "pair_pod:aj"); + memory->create(ti, nijmax, "pair_pod:ti"); + memory->create(tj, nijmax, "pair_pod:tj"); + memory->create(rbf, nijmax * nrbfmax, "pair_pod:rbf"); + memory->create(rbfx, nijmax * nrbfmax, "pair_pod:rbfx"); + memory->create(rbfy, nijmax * nrbfmax, "pair_pod:rbfy"); + memory->create(rbfz, nijmax * nrbfmax, "pair_pod:rbfz"); + int kmax = (K3 > ns) ? K3 : ns; + memory->create(abf, nijmax * kmax, "pair_pod:abf"); + memory->create(abfx, nijmax * kmax, "pair_pod:abfx"); + memory->create(abfy, nijmax * kmax, "pair_pod:abfy"); + memory->create(abfz, nijmax * kmax, "pair_pod:abfz"); + } +} + +void PairPOD::divideInterval(int *intervals, int N, int M) +{ + int intervalSize = N / M; // Basic size of each interval + int remainder = N % M; // Remainder to distribute + intervals[0] = 1; // Start of the first interval + for (int i = 1; i <= M; i++) { + intervals[i] = intervals[i - 1] + intervalSize + (remainder > 0 ? 1 : 0); + if (remainder > 0) { + remainder--; + } + } +} + +int PairPOD::calculateNumberOfIntervals(int N, int intervalSize) +{ + int M = N / intervalSize; + if (N % intervalSize != 0) { + M++; // Add an additional interval to cover the remainder + } + + return M; +} + +void PairPOD::radialbasis(double *rbft, double *rbftx, double *rbfty, double *rbftz, double *rij, int Nij) +{ + // Loop over all neighboring atoms + for (int n=0; n0) && (Nij>0)) { + twobodydesc(d2, Ni, Nij); + } + + if ((nl3 > 0) && (Nij>1)) { + angularbasis(abftm, &abftm[K3], &abftm[2*K3], &abftm[3*K3], Nij); + radialangularsum2(Ni); + threebodydesc(d3, Ni); + + if ((nl33>0) && (Nij>3)) { + crossdesc(d33, d3, d3, ind33l, ind33r, nl33, Ni); + } + + if ((nl4 > 0) && (Nij>2)) { + if (K4 < K3) { + fourbodydesc(d4, Ni); + } + + if ((nl34>0) && (Nij>4)) { + crossdesc(d34, d3, d4, ind34l, ind34r, nl34, Ni); + } + + if ((nl44>0) && (Nij>5)) { + crossdesc(d44, d4, d4, ind44l, ind44r, nl44, Ni); + } + } + } +} + +void PairPOD::blockatombase_descriptors(double *bd1, double *bdd1, int Ni, int Nij) +{ + for (int i=0; i0) && (Nij>0)) { + twobodydescderiv(d2, dd2, Ni, Nij); + } + + if ((nl3 > 0) && (Nij>1)) { + angularbasis(abftm, &abftm[K3], &abftm[2*K3], &abftm[3*K3], Nij); + radialangularsum2(Ni); + + threebodydesc(d3, Ni); + threebodydescderiv(dd3, Nij); + + if ((nl33>0) && (Nij>3)) { + crossdesc(d33, d3, d3, ind33l, ind33r, nl33, Ni); + crossdescderiv(dd33, d3, d3, dd3, dd3, ind33l, ind33r, idxi, nl33, Ni, Nij); + } + + if ((nl4 > 0) && (Nij>2)) { + if (K4 < K3) { + fourbodydesc(d4, Ni); + fourbodydescderiv(dd4, Nij); + } + + if ((nl34>0) && (Nij>4)) { + crossdesc(d34, d3, d4, ind34l, ind34r, nl34, Ni); + crossdescderiv(dd34, d3, d4, dd3, dd4, ind34l, ind34r, idxi, nl34, Ni, Nij); + } + + if ((nl44>0) && (Nij>5)) { + crossdesc(d44, d4, d4, ind44l, ind44r, nl44, Ni); + crossdescderiv(dd44, d4, d4, dd4, dd4, ind44l, ind44r, idxi, nl44, Ni, Nij); + } + } + } +} + +void PairPOD::blockatom_base_coefficients(double *ei, double *cb, double *B, int Ni) +{ + double *cefs = &coefficients[0]; + int *tyai = &typeai[0]; + + int nDes = Mdesc; + int nCoeff = nCoeffPerElement; + + for (int n=0; n 1) { + blockatom_environment_descriptors(ei, cb, bd, Ni); + } + else { + blockatom_base_coefficients(ei, cb, bd, Ni); + } +} + +void PairPOD::blockatom_forces(double *fij, int Ni, int Nij) +{ + + int nld = nl2 + nl3 + nl4; + for (int i=0; i<3*Nij*nld; i++) bdd[i] = 0.0; + + double *dd2 = &bdd[0]; // 3*Nj*nl2 + double *dd3 = &bdd[3*Nij*nl2]; // 3*Nj*nl3 + double *dd4 = &bdd[3*Nij*(nl2+nl3)]; // 3*Nj*nl4 + + if ((nl2 > 0) && (Nij>0)) twobodydescderiv(dd2, Nij); + if ((nl3 > 0) && (Nij>1)) threebodydescderiv(dd3, Nij); + if ((nl4 > 0) && (Nij>2)) fourbodydescderiv(dd4, Nij); + + double *d3 = &bd[Ni*nl2]; // nl3 + double *d4 = &bd[Ni*(nl2 + nl3)]; // nl4 + //double *cb2 = &cb[0]; // nl2 + double *cb3 = &cb[Ni*nl2]; // nl3 + double *cb4 = &cb[Ni*(nl2 + nl3)]; // nl4 + double *cb33 = &cb[Ni*(nl2 + nl3 + nl4)]; // nl33 + double *cb34 = &cb[Ni*(nl2 + nl3 + nl4 + nl33)]; // nl34 + double *cb44 = &cb[Ni*(nl2 + nl3 + nl4 + nl33 + nl34)]; // nl44 + + if (nl33>0) crossdesc_reduction(cb3, cb3, cb33, d3, d3, ind33l, ind33r, nl33, Ni); + + if (nl34>0) crossdesc_reduction(cb3, cb4, cb34, d3, d4, ind34l, ind34r, nl34, Ni); + + if (nl44>0) crossdesc_reduction(cb4, cb4, cb44, d4, d4, ind44l, ind44r, nl44, Ni); + + int N3 = 3*Nij; + for (int n=0; n 1) { + blockatom_environment_descriptors(ei, cb, bd, Ni); + } + else { + blockatom_base_coefficients(ei, cb, bd, Ni); + } + + double *d3 = &bd[Ni*nl2]; // nl3 + double *d4 = &bd[Ni*(nl2 + nl3)]; // nl4 + double *cb2 = &cb[0]; // nl3 + double *cb3 = &cb[Ni*nl2]; // nl3 + double *cb4 = &cb[Ni*(nl2 + nl3)]; // nl4 + double *cb33 = &cb[Ni*(nl2 + nl3 + nl4)]; // nl33 + double *cb34 = &cb[Ni*(nl2 + nl3 + nl4 + nl33)]; // nl34 + double *cb44 = &cb[Ni*(nl2 + nl3 + nl4 + nl33 + nl34)]; // nl44 + + if ((nl33>0) && (Nij>3)) { + crossdesc_reduction(cb3, cb3, cb33, d3, d3, ind33l, ind33r, nl33, Ni); + } + if ((nl34>0) && (Nij>4)) { + crossdesc_reduction(cb3, cb4, cb34, d3, d4, ind34l, ind34r, nl34, Ni); + } + if ((nl44>0) && (Nij>5)) { + crossdesc_reduction(cb4, cb4, cb44, d4, d4, ind44l, ind44r, nl44, Ni); + } + + for (int n=0; n<3*Nij; n++) fij[n] = 0; + if ((nl2 > 0) && (Nij>0)) twobody_forces(fij, cb2, Ni, Nij); + + // Initialize forcecoeff to zero + std::fill(forcecoeff, forcecoeff + Ni * nelements * K3 * nrbf3, 0.0); + if ((nl3 > 0) && (Nij>1)) threebody_forcecoeff(forcecoeff, cb3, Ni); + if ((nl4 > 0) && (Nij>2)) fourbody_forcecoeff(forcecoeff, cb4, Ni); + if ((nl3 > 0) && (Nij>1)) allbody_forces(fij, forcecoeff, Nij); +} + +void PairPOD::blockatomenergyforce(double *ei, double *fij, int Ni, int Nij) +{ + blockatom_energyforce(ei, fij, Ni, Nij); +} + +void PairPOD::savematrix2binfile(std::string filename, double *A, int nrows, int ncols) +{ + FILE *fp = fopen(filename.c_str(), "wb"); + double sz[2]; + sz[0] = (double) nrows; + sz[1] = (double) ncols; + fwrite( reinterpret_cast( sz ), sizeof(double) * (2), 1, fp); + fwrite( reinterpret_cast( A ), sizeof(double) * (nrows*ncols), 1, fp); + fclose(fp); +} + +void PairPOD::saveintmatrix2binfile(std::string filename, int *A, int nrows, int ncols) +{ + FILE *fp = fopen(filename.c_str(), "wb"); + int sz[2]; + sz[0] = nrows; + sz[1] = ncols; + fwrite( reinterpret_cast( sz ), sizeof(int) * (2), 1, fp); + fwrite( reinterpret_cast( A ), sizeof(int) * (nrows*ncols), 1, fp); + fclose(fp); +} + +void PairPOD::savedatafordebugging() +{ + saveintmatrix2binfile("podtypeai.bin", typeai, ni, 1); + saveintmatrix2binfile("podnumij.bin", numij, ni+1, 1); + saveintmatrix2binfile("podai.bin", ai, nij, 1); + saveintmatrix2binfile("podaj.bin", aj, nij, 1); + saveintmatrix2binfile("podti.bin", ti, nij, 1); + saveintmatrix2binfile("podtj.bin", tj, nij, 1); + saveintmatrix2binfile("podidxi.bin", idxi, nij, 1); + savematrix2binfile("podrbf.bin", rbf, nrbfmax, nij); + savematrix2binfile("podrbfx.bin", rbfx, nrbfmax, nij); + savematrix2binfile("podrbfy.bin", rbfy, nrbfmax, nij); + savematrix2binfile("podrbfz.bin", rbfz, nrbfmax, nij); + int kmax = (K3 > ns) ? K3 : ns; + savematrix2binfile("podabf.bin", abf, kmax, nij); + savematrix2binfile("podabfx.bin", abfx, kmax, nij); + savematrix2binfile("podabfy.bin", abfy, kmax, nij); + savematrix2binfile("podabfz.bin", abfz, kmax, nij); + savematrix2binfile("podbdd.bin", bdd, 3*nij, Mdesc); + savematrix2binfile("podbd.bin", bd, ni, Mdesc); + savematrix2binfile("podsumU.bin", sumU, nelements * K3 * nrbfmax, ni); + savematrix2binfile("podrij.bin", rij, 3, nij); + savematrix2binfile("podfij.bin", fij, 3, nij); + savematrix2binfile("podei.bin", ei, ni, 1); + error->all(FLERR, "Save data and stop the run for debugging"); } diff --git a/src/ML-POD/pair_pod.h b/src/ML-POD/pair_pod.h index 62b6e99f3b..fe1b9ab024 100644 --- a/src/ML-POD/pair_pod.h +++ b/src/ML-POD/pair_pod.h @@ -36,41 +36,135 @@ class PairPOD : public Pair { double init_one(int, int) override; double memory_usage() override; - int dim; // typically 3 + void lammpsNeighborList(double *rij1, int *ai1, int *aj1, int *ti1, int *tj1, double **x, + int **firstneigh, int *atomtype, int *map, int *numneigh, double rcutsq, + int i); + void NeighborCount(double **x, int **firstneigh, int *ilist, int *numneigh, double rcutsq, + int i1); + void NeighborList(double **x, int **firstneigh, int *atomtype, int *map, int *ilist, + int *numneigh, double rcutsq, int i1); + void tallyenergy(double *ei, int istart, int Ni); + void tallystress(double *fij, double *rij, int *ai, int *aj, int nlocal, int N); + void tallyforce(double **force, double *fij, int *ai, int *aj, int N); + void divideInterval(int *intervals, int N, int M); + int calculateNumberOfIntervals(int N, int intervalSize); + int numberOfNeighbors(); - 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 copy_data_from_pod_class(); + void radialbasis(double *rbft, double *rbftx, double *rbfty, double *rbftz, double *rij, int Nij); + void orthogonalradialbasis(int Nij); + void angularbasis(double *tm, double *tmu, double *tmv, double *tmw, int N); + void radialangularsum(int Ni, int Nij); + void radialangularsum2(int Ni); + void twobodydesc(double *d2, int Ni, int Nij); + void twobodydescderiv(double *dd2, int Nij); + void twobodydescderiv(double *d2, double *dd2, int Ni, int Nij); + void threebodydesc(double *d3, int Ni); + void threebodydescderiv(double *dd3, int Nij); + void extractsumU(int Ni); + void fourbodydesc(double *d4, int Ni); + void fourbodydescderiv(double *dd4, int Nij); + void crossdesc(double *d12, double *d1, double *d2, int *ind1, int *ind2, int n12, int Ni); + void crossdescderiv(double *dd12, double *d1, double *d2, double *dd1, double *dd2, int *ind1, + int *ind2, int *idxi, int n12, int Ni, int Nij); + void blockatombase_descriptors(double *bd1, double *bdd1, int Ni, int Nij); + void blockatomenergyforce(double *ei, double *fij, int Ni, int Nij); - void estimate_tempmemory(); - void free_tempmemory(); - void allocate_tempmemory(); + void crossdesc_reduction(double *cb1, double *cb2, double *c12, double *d1, double *d2, int *ind1, + int *ind2, int n12, int Ni); + void blockatom_base_descriptors(double *bd1, int Ni, int Nij); + void blockatom_base_coefficients(double *ei, double *cb, double *B, int Ni); + void blockatom_environment_descriptors(double *ei, double *cb, double *B, int Ni); + void blockatom_energyforce(double *ei, double *fij, int Ni, int Nij); + void blockatom_energies(double *ei, int Ni, int Nij); + void blockatom_forces(double *fij, int Ni, int Nij); - void lammpsNeighPairs(double **x, int **firstneigh, int *atomtype, int *map, int *numneigh, - int i); + void twobody_forces(double *fij, double *cb2, int Ni, int Nij); + void threebody_forces(double *fij, double *cb3, int Ni, int Nij); + void fourbody_forces(double *fij, double *cb4, int Ni, int Nij); + + void threebody_forcecoeff(double *fb3, double *cb3, int Ni); + void fourbody_forcecoeff(double *fb4, double *cb4, int Ni); + void allbody_forces(double *fij, double *forcecoeff, int Nij); + + void savematrix2binfile(std::string filename, double *A, int nrows, int ncols); + void saveintmatrix2binfile(std::string filename, int *A, int nrows, int ncols); + void savedatafordebugging(); 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 EAPOD *fastpodptr; + virtual void allocate(); + void grow_atoms(int Ni); + void grow_pairs(int Nij); - class MLPOD *podptr; + int atomBlockSize; // size of each atom block + int nAtomBlocks; // number of atoms blocks + int atomBlocks[101]; // atom blocks - // temporary arrays for computation blocks + int ni; // total number of atoms i + int nij; // total number of pairs (i,j) + int nimax; // maximum number of atoms i + int nijmax; // maximum number of pairs (i,j) - 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) + int nelements; // number of elements + int onebody; // one-body descriptors + int besseldegree; // degree of Bessel functions + int inversedegree; // degree of inverse functions + int nbesselpars; // number of Bessel parameters + int nCoeffPerElement; // number of coefficients per element = (nl1 + Mdesc*nClusters) + int ns; // number of snapshots for radial basis functions + int nl1, nl2, nl3, nl4, nl23, nl33, nl34, nl44, nl; // number of local descriptors + int nrbf2, nrbf3, nrbf4, nrbfmax; // number of radial basis functions + int nabf3, nabf4; // number of angular basis functions + int K3, K4, Q4; // number of monomials + + // environmental variables + int nClusters; // number of environment clusters + int nComponents; // number of principal components + int Mdesc; // number of base descriptors + + double rin; // inner cut-off radius + double rcut; // outer cut-off radius + double rmax; // rcut - rin + + double *rij; // (xj - xi) for all pairs (I, J) + double *fij; // force for all pairs (I, J) + double *ei; // energy for each atom I + int *typeai; // types of atoms I only + int *numij; // number of pairs (I, J) for each atom I + int *idxi; // storing linear indices of atom I 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) + + double besselparams[3]; + double *Phi; // eigenvectors matrix ns x ns + double *rbf; // radial basis functions nij x nrbfmax + double *rbfx; // x-derivatives of radial basis functions nij x nrbfmax + double *rbfy; // y-derivatives of radial basis functions nij x nrbfmax + double *rbfz; // z-derivatives of radial basis functions nij x nrbfmax + double *abf; // angular basis functions nij x K3 + double *abfx; // x-derivatives of angular basis functions nij x K3 + double *abfy; // y-derivatives of angular basis functions nij x K3 + double *abfz; // z-derivatives of angular basis functions nij x K3 + double *abftm; // angular basis functions 4 x K3 + double *sumU; // sum of radial basis functions ni x K3 x nrbfmax x nelements + double *forcecoeff; // force coefficients ni x K3 x nrbfmax x nelements + double *Proj; // PCA Projection matrix + double *Centroids; // centroids of the clusters + double *bd; // base descriptors ni x Mdesc + double *cb; // force coefficients for base descriptors ni x Mdesc + double *pd; // environment probability descriptors ni x nClusters + double *bdd; // base descriptors derivatives 3 x nij x Mdesc + double *pdd; // environment probability descriptors derivatives 3 x nij x nClusters + double *coefficients; // coefficients nCoeffPerElement x nelements + int *pq3, *pn3, *pc3; // arrays to compute 3-body angular basis functions + int *pa4, *pb4, *pc4; // arrays to compute 4-body angular basis functions + int *ind33l, *ind33r; // nl33 + int *ind34l, *ind34r; // nl34 + int *ind44l, *ind44r; // nl44 + int *elemindex; bool peratom_warn; // print warning about missing per-atom energies or stresses }; diff --git a/src/REPLICA/neb.cpp b/src/REPLICA/neb.cpp index d9144a9489..4023f2c0b3 100644 --- a/src/REPLICA/neb.cpp +++ b/src/REPLICA/neb.cpp @@ -198,7 +198,7 @@ void NEB::run() if (me == 0) color = 0; else - color = 1; + color = MPI_UNDEFINED; MPI_Comm_split(uworld, color, 0, &roots); auto fixes = modify->get_fix_by_style("^neb$"); @@ -608,17 +608,20 @@ void NEB::open(char *file) void NEB::print_status() { double fnorm2 = sqrt(update->minimize->fnorm_sqr()); - double fmaxreplica; - MPI_Allreduce(&fnorm2, &fmaxreplica, 1, MPI_DOUBLE, MPI_MAX, roots); double fnorminf = update->minimize->fnorm_inf(); - double fmaxatom; - MPI_Allreduce(&fnorminf, &fmaxatom, 1, MPI_DOUBLE, MPI_MAX, roots); + double fmaxreplica = 0.0; + double fmaxatom = 0.0; - if (print_mode == VERBOSE) { - freplica = new double[nreplica]; - MPI_Allgather(&fnorm2, 1, MPI_DOUBLE, &freplica[0], 1, MPI_DOUBLE, roots); - fmaxatomInRepl = new double[nreplica]; - MPI_Allgather(&fnorminf, 1, MPI_DOUBLE, &fmaxatomInRepl[0], 1, MPI_DOUBLE, roots); + if (me == 0) { + MPI_Allreduce(&fnorm2, &fmaxreplica, 1, MPI_DOUBLE, MPI_MAX, roots); + MPI_Allreduce(&fnorminf, &fmaxatom, 1, MPI_DOUBLE, MPI_MAX, roots); + + if (print_mode == VERBOSE) { + freplica = new double[nreplica]; + MPI_Allgather(&fnorm2, 1, MPI_DOUBLE, &freplica[0], 1, MPI_DOUBLE, roots); + fmaxatomInRepl = new double[nreplica]; + MPI_Allgather(&fnorminf, 1, MPI_DOUBLE, &fmaxatomInRepl[0], 1, MPI_DOUBLE, roots); + } } double one[7]; @@ -703,7 +706,7 @@ void NEB::print_status() fflush(universe->ulogfile); } } - if (print_mode == VERBOSE) { + if ((me == 0) && (print_mode == VERBOSE)) { delete[] freplica; delete[] fmaxatomInRepl; } diff --git a/src/RIGID/fix_shake.cpp b/src/RIGID/fix_shake.cpp index 5df0f525e8..ac71ea01a6 100644 --- a/src/RIGID/fix_shake.cpp +++ b/src/RIGID/fix_shake.cpp @@ -372,7 +372,9 @@ void FixShake::init() // if rRESPA, find associated fix that must exist // could have changed locations in fix list since created // set ptrs to rRESPA variables + // set respa to 0 if verlet is used and to 1 otherwise + respa = 0; fix_respa = nullptr; if (utils::strmatch(update->integrate_style,"^respa")) { if (update->whichflag > 0) { @@ -380,10 +382,12 @@ void FixShake::init() if (fixes.size() > 0) fix_respa = dynamic_cast(fixes.front()); else error->all(FLERR,"Run style respa did not create fix RESPA"); } - auto respa_style = dynamic_cast(update->integrate); - nlevels_respa = respa_style->nlevels; - loop_respa = respa_style->loop; - step_respa = respa_style->step; + auto respa_ptr = dynamic_cast(update->integrate); + if (!respa_ptr) error->all(FLERR, "Failure to access Respa style {}", update->integrate_style); + respa = 1; + nlevels_respa = respa_ptr->nlevels; + loop_respa = respa_ptr->loop; + step_respa = respa_ptr->step; } // set equilibrium bond distances @@ -474,18 +478,22 @@ void FixShake::setup(int vflag) next_output = (ntimestep/output_every)*output_every + output_every; } else next_output = -1; - // set respa to 0 if verlet is used and to 1 otherwise - - if (utils::strmatch(update->integrate_style,"^verlet")) - respa = 0; - else - respa = 1; - if (!respa) { dtv = update->dt; dtfsq = 0.5 * update->dt * update->dt * force->ftm2v; if (!rattle) dtfsq = update->dt * update->dt * force->ftm2v; } else { + auto respa_ptr = dynamic_cast(update->integrate); + if (!respa_ptr) error->all(FLERR, "Failure to access Respa style {}", update->integrate_style); + if (update->whichflag > 0) { + auto fixes = modify->get_fix_by_style("^RESPA"); + if (fixes.size() > 0) fix_respa = dynamic_cast(fixes.front()); + else error->all(FLERR,"Run style respa did not create fix RESPA"); + } + respa = 1; + nlevels_respa = respa_ptr->nlevels; + loop_respa = respa_ptr->loop; + step_respa = respa_ptr->step; dtv = step_respa[0]; dtf_innerhalf = 0.5 * step_respa[0] * force->ftm2v; dtf_inner = dtf_innerhalf; @@ -3124,7 +3132,14 @@ void FixShake::reset_dt() dtv = update->dt; if (rattle) dtfsq = 0.5 * update->dt * update->dt * force->ftm2v; else dtfsq = update->dt * update->dt * force->ftm2v; + respa = 0; } else { + auto respa_ptr = dynamic_cast(update->integrate); + if (!respa_ptr) error->all(FLERR, "Failure to access Respa style {}", update->integrate_style); + respa = 1; + nlevels_respa = respa_ptr->nlevels; + loop_respa = respa_ptr->loop; + step_respa = respa_ptr->step; dtv = step_respa[0]; dtf_innerhalf = 0.5 * step_respa[0] * force->ftm2v; if (rattle) dtf_inner = dtf_innerhalf; diff --git a/src/atom.cpp b/src/atom.cpp index 80451350bc..09aaa4f1d8 100644 --- a/src/atom.cpp +++ b/src/atom.cpp @@ -2010,7 +2010,7 @@ void Atom::set_mass(const char *file, int line, int /*narg*/, char **arg) error->all(file,line, "Cannot set per-type atom mass for atom style {}", atom_style); int lo, hi; - utils::bounds_typelabel(file, line, arg[0], 1, ntypes, lo, hi, error, lmp, Atom::ATOM); + utils::bounds_typelabel(file, line, arg[0], 1, ntypes, lo, hi, lmp, Atom::ATOM); if ((lo < 1) || (hi > ntypes)) error->all(file, line, "Invalid atom type {} for atom mass", arg[0]); diff --git a/src/compute_rdf.cpp b/src/compute_rdf.cpp index d5639bbb34..372bebbfc7 100644 --- a/src/compute_rdf.cpp +++ b/src/compute_rdf.cpp @@ -102,8 +102,8 @@ ComputeRDF::ComputeRDF(LAMMPS *lmp, int narg, char **arg) : } else { iarg = 4; for (int ipair = 0; ipair < npairs; ipair++) { - utils::bounds_typelabel(FLERR, arg[iarg], 1, atom->ntypes, ilo[ipair], ihi[ipair], error, lmp, Atom::ATOM); - utils::bounds_typelabel(FLERR, arg[iarg+1], 1, atom->ntypes, jlo[ipair], jhi[ipair], error, lmp, Atom::ATOM); + utils::bounds_typelabel(FLERR, arg[iarg], 1, atom->ntypes, ilo[ipair], ihi[ipair], lmp, Atom::ATOM); + utils::bounds_typelabel(FLERR, arg[iarg+1], 1, atom->ntypes, jlo[ipair], jhi[ipair], lmp, Atom::ATOM); // switch i,j if i > j, if wildcards were not used diff --git a/src/dump_custom.cpp b/src/dump_custom.cpp index dcd76f3cd1..abdc46c55a 100644 --- a/src/dump_custom.cpp +++ b/src/dump_custom.cpp @@ -325,13 +325,13 @@ void DumpCustom::init_style() pack_choice[n] = &DumpCustom::pack_z; else if (pack_choice[n] == &DumpCustom::pack_xu_triclinic_general) { if (domain->triclinic) pack_choice[n] = &DumpCustom::pack_xu_triclinic; - else pack_choice[n] == &DumpCustom::pack_xu; + else pack_choice[n] = &DumpCustom::pack_xu; } else if (pack_choice[n] == &DumpCustom::pack_yu_triclinic_general) { if (domain->triclinic) pack_choice[n] = &DumpCustom::pack_yu_triclinic; - else pack_choice[n] == &DumpCustom::pack_yu; + else pack_choice[n] = &DumpCustom::pack_yu; } else if (pack_choice[n] == &DumpCustom::pack_zu_triclinic_general) { if (domain->triclinic) pack_choice[n] = &DumpCustom::pack_zu_triclinic; - else pack_choice[n] == &DumpCustom::pack_zu; + else pack_choice[n] = &DumpCustom::pack_zu; } else if (pack_choice[n] == &DumpCustom::pack_vx_triclinic_general) diff --git a/src/fix_adapt.cpp b/src/fix_adapt.cpp index d1fa4b3312..cad157f2be 100644 --- a/src/fix_adapt.cpp +++ b/src/fix_adapt.cpp @@ -100,9 +100,9 @@ FixAdapt::FixAdapt(LAMMPS *lmp, int narg, char **arg) : adapt[nadapt].pstyle = utils::strdup(arg[iarg+1]); adapt[nadapt].pparam = utils::strdup(arg[iarg+2]); utils::bounds_typelabel(FLERR, arg[iarg+3], 1, atom->ntypes, - adapt[nadapt].ilo, adapt[nadapt].ihi, error, lmp, Atom::ATOM); + adapt[nadapt].ilo, adapt[nadapt].ihi, lmp, Atom::ATOM); utils::bounds_typelabel(FLERR, arg[iarg+4], 1, atom->ntypes, - adapt[nadapt].jlo, adapt[nadapt].jhi, error, lmp, Atom::ATOM); + adapt[nadapt].jlo, adapt[nadapt].jhi, lmp, Atom::ATOM); // switch i,j if i > j, if wildcards were not used @@ -127,7 +127,7 @@ FixAdapt::FixAdapt(LAMMPS *lmp, int narg, char **arg) : adapt[nadapt].bstyle = utils::strdup(arg[iarg+1]); adapt[nadapt].bparam = utils::strdup(arg[iarg+2]); utils::bounds_typelabel(FLERR, arg[iarg+3], 1, atom->nbondtypes, - adapt[nadapt].ilo, adapt[nadapt].ihi, error, lmp, Atom::BOND); + adapt[nadapt].ilo, adapt[nadapt].ihi, lmp, Atom::BOND); if (utils::strmatch(arg[iarg+4],"^v_")) { adapt[nadapt].var = utils::strdup(arg[iarg+4]+2); } else error->all(FLERR,"Argument #{} must be variable not {}", iarg+5, arg[iarg+4]); @@ -140,7 +140,7 @@ FixAdapt::FixAdapt(LAMMPS *lmp, int narg, char **arg) : adapt[nadapt].astyle = utils::strdup(arg[iarg+1]); adapt[nadapt].aparam = utils::strdup(arg[iarg+2]); utils::bounds_typelabel(FLERR, arg[iarg+3], 1, atom->nangletypes, - adapt[nadapt].ilo, adapt[nadapt].ihi, error, lmp, Atom::ANGLE); + adapt[nadapt].ilo, adapt[nadapt].ihi, lmp, Atom::ANGLE); if (utils::strmatch(arg[iarg+4],"^v_")) { adapt[nadapt].var = utils::strdup(arg[iarg+4]+2); } else error->all(FLERR,"Argument #{} must be variable not {}", iarg+5, arg[iarg+4]); diff --git a/src/fix_deposit.cpp b/src/fix_deposit.cpp index 62ff530033..d6630bcbf0 100644 --- a/src/fix_deposit.cpp +++ b/src/fix_deposit.cpp @@ -630,7 +630,7 @@ void FixDeposit::pre_exchange() // rebuild atom map if (atom->map_style != Atom::MAP_NONE) { - if (success) atom->map_init(); + atom->map_init(); atom->map_set(); } diff --git a/src/fix_nh.cpp b/src/fix_nh.cpp index a7536800cb..f2ad246611 100644 --- a/src/fix_nh.cpp +++ b/src/fix_nh.cpp @@ -53,7 +53,7 @@ enum{ISO,ANISO,TRICLINIC}; ---------------------------------------------------------------------- */ FixNH::FixNH(LAMMPS *lmp, int narg, char **arg) : - Fix(lmp, narg, arg), id_dilate(nullptr), irregular(nullptr), id_temp(nullptr), + Fix(lmp, narg, arg), id_dilate(nullptr), irregular(nullptr), step_respa(nullptr), id_temp(nullptr), id_press(nullptr), eta(nullptr), eta_dot(nullptr), eta_dotdot(nullptr), eta_mass(nullptr), etap(nullptr), etap_dot(nullptr), etap_dotdot(nullptr), etap_mass(nullptr) { @@ -712,8 +712,10 @@ void FixNH::init() else kspace_flag = 0; if (utils::strmatch(update->integrate_style,"^respa")) { - nlevels_respa = (dynamic_cast(update->integrate))->nlevels; - step_respa = (dynamic_cast(update->integrate))->step; + auto respa_ptr = dynamic_cast(update->integrate); + if (!respa_ptr) error->all(FLERR, "Failure to access Respa style {}", update->integrate_style); + nlevels_respa = respa_ptr->nlevels; + step_respa = respa_ptr->step; dto = 0.5*step_respa[0]; } @@ -1692,8 +1694,13 @@ void FixNH::reset_dt() // If using respa, then remap is performed in innermost level - if (utils::strmatch(update->integrate_style,"^respa")) + if (utils::strmatch(update->integrate_style,"^respa")) { + auto respa_ptr = dynamic_cast(update->integrate); + if (!respa_ptr) error->all(FLERR, "Failure to access Respa style {}", update->integrate_style); + nlevels_respa = respa_ptr->nlevels; + step_respa = respa_ptr->step; dto = 0.5*step_respa[0]; + } if (pstat_flag) pdrag_factor = 1.0 - (update->dt * p_freq_max * drag / nc_pchain); diff --git a/src/library.cpp b/src/library.cpp index 71cf01eff2..bb58762563 100644 --- a/src/library.cpp +++ b/src/library.cpp @@ -1942,7 +1942,7 @@ void *lammps_extract_global(void *handle, const char *name) * \verbatim embed:rst -.. versionadded:: TBD +.. versionadded:: 27June2024 This function returns an integer that corresponds to the local atom index for an atom with the global atom ID *id*. The atom ID is passed @@ -2420,7 +2420,7 @@ use to avoid a memory leak. Example: .. code-block:: c - double *dptr = (double *) lammps_extract_variable(handle,name,NULL); + double *dptr = (double *) lammps_extract_variable(handle, name, NULL); double value = *dptr; lammps_free((void *)dptr); @@ -2431,16 +2431,25 @@ content will not be updated in case the variable is re-evaluated. To avoid a memory leak, this pointer needs to be freed after use in the calling program. -For *vector*\ -style variables, the returned pointer is to actual LAMMPS data. -The pointer should not be deallocated. Its length depends on the variable, -compute, or fix data used to construct the *vector*\ -style variable. -This length can be fetched by calling this function with *group* set to the -constant "LMP_SIZE_VECTOR", which returns a ``void *`` pointer that can be -dereferenced to an integer that is the length of the vector. This pointer -needs to be deallocated when finished with it to avoid memory leaks. +For *vector*\ -style variables, the returned pointer points to actual +LAMMPS data and thus it should **not** be deallocated. Its length +depends on the variable, compute, or fix data used to construct the +*vector*\ -style variable. This length can be fetched by calling this +function with *group* set to a non-NULL pointer (NULL returns the vector). +In that case it will return the vector length as an allocated int +pointer cast to a ``void *`` pointer. That pointer can be recast and +dereferenced to an integer yielding the length of the vector. This pointer +must be deallocated when finished with it to avoid memory leaks. Example: + +.. code-block:: c + + double *vectvals = (double *) lammps_extract_variable(handle, name, NULL); + int *intptr = (int *) lammps_extract_variable(handle, name, 1); + int vectlen = *intptr; + lammps_free((void *)intptr); For other variable styles the returned pointer needs to be cast to -a char pointer. It should not be deallocated. +a char pointer and it should **not** be deallocated. Example: .. code-block:: c @@ -2452,7 +2461,7 @@ a char pointer. It should not be deallocated. LAMMPS cannot easily check if it is valid to access the data referenced by the variables (e.g., computes, fixes, or thermodynamic info), so it may fail with an error. The caller has to make certain - that the data are extracted only when it safe to evaluate the variable + that the data is extracted only when it safe to evaluate the variable and thus an error or crash are avoided. \endverbatim @@ -2487,7 +2496,7 @@ void *lammps_extract_variable(void *handle, const char *name, const char *group) } else if (lmp->input->variable->vectorstyle(ivar)) { double *values = nullptr; int nvector = lmp->input->variable->compute_vector(ivar, &values); - if (group != nullptr && strcmp(group,"LMP_SIZE_VECTOR") == 0) { + if (group) { int* nvecptr = (int *) malloc(sizeof(int)); *nvecptr = nvector; return (void *) nvecptr; diff --git a/src/library.h b/src/library.h index 0e579de2e9..fa4a3bd0a5 100644 --- a/src/library.h +++ b/src/library.h @@ -175,9 +175,9 @@ void *lammps_extract_atom(void *handle, const char *name); * Library functions to access data from computes, fixes, variables in LAMMPS * ---------------------------------------------------------------------- */ -void *lammps_extract_compute(void *handle, const char *, int, int); -void *lammps_extract_fix(void *handle, const char *, int, int, int, int); -void *lammps_extract_variable(void *handle, const char *, const char *); +void *lammps_extract_compute(void *handle, const char *id, int style, int type); +void *lammps_extract_fix(void *handle, const char *id, int style, int type, int nrow, int ncol); +void *lammps_extract_variable(void *handle, const char *name, const char *group); int lammps_extract_variable_datatype(void *handle, const char *name); int lammps_set_variable(void *handle, const char *name, const char *str); int lammps_set_string_variable(void *handle, const char *name, const char *str); diff --git a/src/set.cpp b/src/set.cpp index bc9fb0934f..cd48ba2bfe 100644 --- a/src/set.cpp +++ b/src/set.cpp @@ -758,7 +758,7 @@ void Set::selection(int n) else select[i] = 0; } else if (style == TYPE_SELECT) { - utils::bounds_typelabel(FLERR,id,1,atom->ntypes,nlo,nhi,error,lmp,Atom::ATOM); + utils::bounds_typelabel(FLERR,id,1,atom->ntypes,nlo,nhi,lmp,Atom::ATOM); int *type = atom->type; for (int i = 0; i < n; i++) diff --git a/src/timer.cpp b/src/timer.cpp index 288ac28f43..c6f6401799 100644 --- a/src/timer.cpp +++ b/src/timer.cpp @@ -28,8 +28,8 @@ Timer::Timer(LAMMPS *_lmp) : Pointers(_lmp) { _level = NORMAL; _sync = OFF; - _timeout = -1; - _s_timeout = -1; + _timeout = -1.0; + _s_timeout = -1.0; _checkfreq = 10; _nextcheck = -1; this->_stamp(RESET); @@ -251,7 +251,7 @@ void Timer::modify_params(int narg, char **arg) // format timeout setting std::string timeout = "off"; - if (_timeout >= 0) { + if (_timeout >= 0.0) { std::tm tv = fmt::gmtime((std::time_t) _timeout); timeout = fmt::format("{:02d}:{:%M:%S}", tv.tm_yday * 24 + tv.tm_hour, tv); } diff --git a/src/timer.h b/src/timer.h index f7efa5ac64..371a895d1f 100644 --- a/src/timer.h +++ b/src/timer.h @@ -110,12 +110,12 @@ class Timer : protected Pointers { double previous_cpu; double previous_wall; double timeout_start; - int _level; // level of detail: off=0,loop=1,normal=2,full=3 - int _sync; // if nonzero, synchronize tasks before setting the timer - int _timeout; // max allowed wall time in seconds. infinity if negative - int _s_timeout; // copy of timeout for restoring after a forced timeout - int _checkfreq; // frequency of timeout checking - int _nextcheck; // loop number of next timeout check + double _timeout; // max allowed wall time in seconds. infinity if negative + double _s_timeout; // copy of timeout for restoring after a forced timeout + int _level; // level of detail: off=0,loop=1,normal=2,full=3 + int _sync; // if nonzero, synchronize tasks before setting the timer + int _checkfreq; // frequency of timeout checking + int _nextcheck; // loop number of next timeout check // update one specific timer array void _stamp(enum ttype); diff --git a/src/utils.cpp b/src/utils.cpp index 4c299eec15..87c46c47ab 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -17,6 +17,7 @@ #include "atom.h" #include "comm.h" #include "compute.h" +#include "domain.h" #include "error.h" #include "fix.h" #include "fmt/chrono.h" @@ -648,30 +649,38 @@ template void utils::bounds<>(const char *, int, const std::string &, template void utils::bounds<>(const char *, int, const std::string &, bigint, bigint, long long &, long long &, Error *); +// clang-format on /* ---------------------------------------------------------------------- - wrapper for bounds() that accepts type label input + wrapper for utils::bounds() that accepts type label input ------------------------------------------------------------------------- */ template void utils::bounds_typelabel(const char *file, int line, const std::string &str, bigint nmin, - bigint nmax, TYPE &nlo, TYPE &nhi, Error *error, LAMMPS *lmp, int mode) + bigint nmax, TYPE &nlo, TYPE &nhi, LAMMPS *lmp, int mode) { nlo = nhi = -1; - char *typestr; - if ( typestr = utils::expand_type(FLERR, str, mode, lmp) ) + + // cannot check for typelabels without a LAMMPS instance or a box + if (!lmp || !lmp->domain->box_exist) + utils::bounds(file, line, str, nmin, nmax, nlo, nhi, nullptr); + + char *typestr = nullptr; + if ((typestr = utils::expand_type(FLERR, str, mode, lmp))) nlo = nhi = utils::inumeric(FLERR, typestr, false, lmp); + delete[] typestr; - if (nlo > -1) return; - else utils::bounds(file, line, str, nmin, nmax, nlo, nhi, error); + if (nlo > -1) + return; + else + utils::bounds(file, line, str, nmin, nmax, nlo, nhi, lmp->error); } -template void utils::bounds_typelabel<>(const char *, int, const std::string &, - bigint, bigint, int &, int &, Error *, LAMMPS *, int); -template void utils::bounds_typelabel<>(const char *, int, const std::string &, - bigint, bigint, long &, long &, Error *, LAMMPS *, int); -template void utils::bounds_typelabel<>(const char *, int, const std::string &, - bigint, bigint, long long &, long long &, Error *, LAMMPS *, int); -// clang-format on +template void utils::bounds_typelabel<>(const char *, int, const std::string &, bigint, bigint, + int &, int &, LAMMPS *, int); +template void utils::bounds_typelabel<>(const char *, int, const std::string &, bigint, bigint, + long &, long &, LAMMPS *, int); +template void utils::bounds_typelabel<>(const char *, int, const std::string &, bigint, bigint, + long long &, long long &, LAMMPS *, int); /* ------------------------------------------------------------------------- Expand list of arguments in arg to earg if arg contains wildcards @@ -945,10 +954,11 @@ char *utils::expand_type(const char *file, int line, const std::string &str, int For example, type <= 0 or type > Ntypes is checked in calling routine. ------------------------------------------------------------------------- */ -int utils::expand_type_int(const char *file, int line, const std::string &str, int mode, LAMMPS *lmp) +int utils::expand_type_int(const char *file, int line, const std::string &str, int mode, + LAMMPS *lmp) { char *typestr = expand_type(file, line, str, mode, lmp); - int out = inumeric(file, line, typestr?typestr:str, false, lmp); + int out = inumeric(file, line, typestr ? typestr : str, false, lmp); delete[] typestr; return out; } @@ -1667,7 +1677,7 @@ double utils::timespec2seconds(const std::string ×pec) try { for (i = 0; i < 3; i++) { if (!values.has_next()) break; - vals[i] = values.next_int(); + vals[i] = values.next_double(); } } catch (TokenizerException &) { return -1.0; diff --git a/src/utils.h b/src/utils.h index 01264bdb8e..3b85824a68 100644 --- a/src/utils.h +++ b/src/utils.h @@ -331,18 +331,31 @@ namespace utils { void bounds(const char *file, int line, const std::string &str, bigint nmin, bigint nmax, TYPE &nlo, TYPE &nhi, Error *error); - /*! Same as bounds(), but supports type labels - * - * This functions adds the following case: - * - * - a single type label, typestr: nlo = nhi = label2type(typestr) + /*! Same as utils::bounds(), but string may be a typelabel * +\verbatim embed:rst + +.. versionadded:: 27June2024 + +This functions adds the following case to :cpp:func:`utils::bounds() `: + + - a single type label, typestr: nlo = nhi = label2type(typestr) + +\endverbatim + + * \param file name of source file for error message + * \param line line number in source file for error message + * \param str string to be processed + * \param nmin smallest possible lower bound + * \param nmax largest allowed upper bound + * \param nlo lower bound + * \param nhi upper bound * \param lmp pointer to top-level LAMMPS class instance * \param mode select labelmap using constants from Atom class */ template - void bounds_typelabel(const char *file, int line, const std::string &str, bigint nmin, bigint nmax, - TYPE &nlo, TYPE &nhi, Error *error, LAMMPS *lmp, int mode); + void bounds_typelabel(const char *file, int line, const std::string &str, bigint nmin, + bigint nmax, TYPE &nlo, TYPE &nhi, LAMMPS *lmp, int mode); /*! Expand list of arguments when containing fix/compute wildcards * @@ -418,8 +431,8 @@ namespace utils { * \return index which column of data is referenced (0 for vec, 1-N for array) * \return ArgINFO::COMPUTE or FIX or UNKNOWN or NONE */ - int check_grid_reference(char *errstr, char *ref, int nevery, - char *&id, int &igrid, int &idata, int &index, LAMMPS *lmp); + int check_grid_reference(char *errstr, char *ref, int nevery, char *&id, int &igrid, int &idata, + int &index, LAMMPS *lmp); /*! Parse grid reference into 3 sub-strings * @@ -501,7 +514,7 @@ or the *-suffix/-sf* command line flag and return correspondingly modified strin std::string strip_style_suffix(const std::string &style, LAMMPS *lmp); -/*! Check if a string will likely have UTF-8 encoded characters + /*! 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 f381eecde6..823a68a506 100644 --- a/src/variable.cpp +++ b/src/variable.cpp @@ -34,6 +34,7 @@ #include "random_mars.h" #include "region.h" #include "thermo.h" +#include "timer.h" #include "tokenizer.h" #include "universe.h" #include "update.h" @@ -4276,8 +4277,9 @@ Region *Variable::region_function(char *id, int ivar) return 0 if not a match, 1 if successfully processed customize by adding a special function: sum(x),min(x),max(x),ave(x),trap(x),slope(x), - gmask(x),rmask(x),grmask(x,y),next(x),is_file(x),is_ox(x), - extract_setting(x),label2type(x,y),is_typelabel(x,y) + gmask(x),rmask(x),grmask(x,y),next(x),is_file(x),is_os(x), + extract_setting(x),label2type(x,y),is_tpelabel(x,y) + is_timeout() ------------------------------------------------------------------------- */ // to simplify finding matches and assigning constants for functions operating on vectors @@ -4286,7 +4288,7 @@ static const std::unordered_map special_function_map = { {"sum", SUM}, {"min", XMIN}, {"max", XMAX}, {"ave", AVE}, {"trap", TRAP}, {"slope", SLOPE}, {"sort", SORT}, {"rsort", RSORT}, {"gmask", NOVECTOR}, {"rmask", NOVECTOR}, {"grmask", NOVECTOR}, {"next", NOVECTOR}, {"is_file", NOVECTOR}, {"is_os", NOVECTOR}, {"extract_setting", NOVECTOR}, - {"label2type", NOVECTOR}, {"is_typelabel", NOVECTOR} }; + {"label2type", NOVECTOR}, {"is_typelabel", NOVECTOR}, {"is_timeout", NOVECTOR} }; int Variable::special_function(const std::string &word, char *contents, Tree **tree, Tree **treestack, int &ntreestack, double *argstack, @@ -4765,6 +4767,21 @@ int Variable::special_function(const std::string &word, char *contents, Tree **t newtree->value = value; treestack[ntreestack++] = newtree; } else argstack[nargstack++] = value; + + } else if (word == "is_timeout") { + if ((narg != 1) || (std::string(args[0]).size() != 0)) + print_var_error(FLERR,"Invalid is_timeout() function in variable formula",ivar); + value = timer->is_timeout() ? 1.0 : 0.0; + + // save value in tree or on argstack + + if (tree) { + auto newtree = new Tree(); + newtree->type = VALUE; + newtree->value = value; + treestack[ntreestack++] = newtree; + } else argstack[nargstack++] = value; + } // delete stored args diff --git a/src/version.h b/src/version.h index 64d5210270..eb26209afb 100644 --- a/src/version.h +++ b/src/version.h @@ -1,2 +1 @@ -#define LAMMPS_VERSION "17 Apr 2024" -#define LAMMPS_UPDATE "Development" +#define LAMMPS_VERSION "27 Jun 2024" diff --git a/tools/i-pi/README.md b/tools/i-pi/README.md index d750bb6138..2c522a08bd 100644 --- a/tools/i-pi/README.md +++ b/tools/i-pi/README.md @@ -1,7 +1,7 @@ This folder used to contain a bundled version of [i-PI](https://ipi-code.org) but the bundled version was removed in 06/2024. -i-PI is available via PyPi using the pip package manager at: +i-PI is available via PyPI using the pip package manager at: https://pypi.org/project/ipi/ Here are the commands to set up a virtual environment and diff --git a/unittest/c-library/CMakeLists.txt b/unittest/c-library/CMakeLists.txt index 0ab216caf5..f5793a804e 100644 --- a/unittest/c-library/CMakeLists.txt +++ b/unittest/c-library/CMakeLists.txt @@ -18,6 +18,12 @@ target_compile_definitions(test_library_properties PRIVATE -DTEST_INPUT_FOLDER=$ add_test(NAME LibraryProperties COMMAND test_library_properties) set_tests_properties(LibraryProperties PROPERTIES ENVIRONMENT "LAMMPS_POTENTIALS=${LAMMPS_POTENTIALS_DIR}") +add_executable(test_library_objects test_library_objects.cpp test_main.cpp) +target_link_libraries(test_library_objects PRIVATE lammps GTest::GMock) +target_compile_definitions(test_library_objects PRIVATE -DTEST_INPUT_FOLDER=${CMAKE_CURRENT_SOURCE_DIR}) +add_test(NAME LibraryObjects COMMAND test_library_objects) +set_tests_properties(LibraryObjects PROPERTIES ENVIRONMENT "LAMMPS_POTENTIALS=${LAMMPS_POTENTIALS_DIR}") + add_executable(test_library_scatter_gather test_library_scatter_gather.cpp test_main.cpp) target_link_libraries(test_library_scatter_gather PRIVATE lammps GTest::GMock) target_compile_definitions(test_library_scatter_gather PRIVATE -DTEST_INPUT_FOLDER=${CMAKE_CURRENT_SOURCE_DIR}) diff --git a/unittest/c-library/test_library_objects.cpp b/unittest/c-library/test_library_objects.cpp new file mode 100644 index 0000000000..d224c76225 --- /dev/null +++ b/unittest/c-library/test_library_objects.cpp @@ -0,0 +1,215 @@ +// unit tests for checking and changing simulation properties through the library interface + +#include "library.h" + +#include "atom.h" +#include "input.h" +#include "lammps.h" +#include "lmptype.h" +#include "platform.h" +#include "variable.h" + +#include + +#include "gmock/gmock.h" +#include "gtest/gtest.h" + +#include "test_main.h" + +#define STRINGIFY(val) XSTR(val) +#define XSTR(val) #val + +using ::LAMMPS_NS::Atom; +using ::LAMMPS_NS::bigint; +using ::LAMMPS_NS::Input; +using ::LAMMPS_NS::tagint; +using ::LAMMPS_NS::Variable; +using ::testing::HasSubstr; +using ::testing::StartsWith; +using ::testing::StrEq; + +class LibraryObjects : public ::testing::Test { +protected: + void *lmp; + Variable *variable; + std::string INPUT_DIR = STRINGIFY(TEST_INPUT_FOLDER); + + LibraryObjects() = default; + ~LibraryObjects() override = default; + + void SetUp() override + { + const char *args[] = {"LAMMPS_test", "-log", "none", + "-echo", "screen", "-nocite", + "-var", "input_dir", STRINGIFY(TEST_INPUT_FOLDER), + nullptr}; + + char **argv = (char **)args; + int argc = (sizeof(args) / sizeof(char *)) - 1; + + ::testing::internal::CaptureStdout(); + lmp = lammps_open_no_mpi(argc, argv, nullptr); + variable = ((LAMMPS_NS::LAMMPS *)lmp)->input->variable; + std::string output = ::testing::internal::GetCapturedStdout(); + if (verbose) std::cout << output; + EXPECT_THAT(output, StartsWith("LAMMPS (")); + } + + void TearDown() override + { + ::testing::internal::CaptureStdout(); + lammps_close(lmp); + std::string output = ::testing::internal::GetCapturedStdout(); + EXPECT_THAT(output, HasSubstr("Total wall time:")); + if (verbose) std::cout << output; + lmp = nullptr; + } +}; + +TEST_F(LibraryObjects, variables) +{ + FILE *fp = fopen("test_variable.file", "w"); + fputs("# test file for file style variable\n\n\none\n two \n\n" + "three # with comment\nfour ! with non-comment\n" + "# comments only\n five\n#END\n", + fp); + fclose(fp); + + ::testing::internal::CaptureStdout(); + lammps_command(lmp, "region box block 0 2 0 2 0 2"); + lammps_command(lmp, "create_box 1 box"); + lammps_command(lmp, "mass 1 3.0"); + lammps_command(lmp, "create_atoms 1 single 1.0 1.0 1.5"); + lammps_command(lmp, "create_atoms 1 single 0.2 0.1 0.1"); + lammps_command(lmp, "shell putenv TEST_VARIABLE=simpletest2"); + lammps_command(lmp, "shell putenv TEST_VARIABLE2=simpletest OTHER_VARIABLE=2"); + lammps_command(lmp, "variable one index 1 2 3 4"); + lammps_command(lmp, "variable two equal 1"); + lammps_command(lmp, "variable two equal 2"); + lammps_command(lmp, "variable three string four"); + lammps_command(lmp, "variable three string three"); + lammps_command(lmp, "variable four1 loop 4"); + lammps_command(lmp, "variable four2 loop 2 4"); + lammps_command(lmp, "variable five1 loop 100 pad"); + lammps_command(lmp, "variable five2 loop 10 200 pad"); + lammps_command(lmp, "variable six world one"); + lammps_command(lmp, "variable seven format two \"%5.2f\""); + lammps_command(lmp, "variable eight getenv TEST_VARIABLE2"); + lammps_command(lmp, "variable eight getenv XXX"); + lammps_command(lmp, "variable nine file test_variable.file"); + lammps_command(lmp, "variable ten internal 1.0"); + lammps_command(lmp, "variable ten internal 10.0"); + lammps_command(lmp, "variable ten1 universe 1 2 3 4"); + lammps_command(lmp, "variable ten2 uloop 4"); + lammps_command(lmp, "variable ten3 uloop 4 pad"); + lammps_command(lmp, "variable ten4 vector [0,1,2,3,5,7,11]"); + lammps_command(lmp, "variable ten5 vector [0.5,1.25]"); + lammps_command(lmp, "variable dummy index 0"); + lammps_command(lmp, "variable file equal is_file(MYFILE)"); + lammps_command(lmp, "variable iswin equal is_os(^Windows)"); + lammps_command(lmp, "variable islin equal is_os(^Linux)"); + std::string output = ::testing::internal::GetCapturedStdout(); + if (verbose) std::cout << output; + + EXPECT_EQ(lammps_extract_variable_datatype(lmp, "unknown"), -1); + void *ptr = lammps_extract_variable(lmp, "unknown", NULL); + EXPECT_EQ(ptr, nullptr); + EXPECT_EQ(lammps_extract_variable_datatype(lmp, "one"), LMP_VAR_STRING); + ptr = lammps_extract_variable(lmp, "one", NULL); + EXPECT_NE(ptr, nullptr); + EXPECT_THAT((char *)ptr, StrEq("1")); + EXPECT_EQ(lammps_extract_variable_datatype(lmp, "two"), LMP_VAR_EQUAL); + ptr = lammps_extract_variable(lmp, "two", NULL); + EXPECT_NE(ptr, nullptr); + EXPECT_THAT(*(double *)ptr, 2.0); + lammps_free(ptr); + EXPECT_EQ(lammps_extract_variable_datatype(lmp, "three"), LMP_VAR_STRING); + ptr = lammps_extract_variable(lmp, "three", NULL); + EXPECT_THAT((char *)ptr, StrEq("three")); + EXPECT_EQ(lammps_extract_variable_datatype(lmp, "four1"), LMP_VAR_STRING); + ptr = lammps_extract_variable(lmp, "four1", NULL); + EXPECT_THAT((char *)ptr, StrEq("1")); + EXPECT_EQ(lammps_extract_variable_datatype(lmp, "four2"), LMP_VAR_STRING); + ptr = lammps_extract_variable(lmp, "four2", NULL); + EXPECT_THAT((char *)ptr, StrEq("2")); + EXPECT_EQ(lammps_extract_variable_datatype(lmp, "five1"), LMP_VAR_STRING); + ptr = lammps_extract_variable(lmp, "five1", NULL); + EXPECT_THAT((char *)ptr, StrEq("001")); + EXPECT_EQ(lammps_extract_variable_datatype(lmp, "five2"), LMP_VAR_STRING); + ptr = lammps_extract_variable(lmp, "five2", NULL); + EXPECT_THAT((char *)ptr, StrEq("010")); + EXPECT_EQ(lammps_extract_variable_datatype(lmp, "six"), LMP_VAR_STRING); + ptr = lammps_extract_variable(lmp, "six", NULL); + EXPECT_THAT((char *)ptr, StrEq("one")); + EXPECT_EQ(lammps_extract_variable_datatype(lmp, "seven"), LMP_VAR_STRING); + ptr = lammps_extract_variable(lmp, "seven", NULL); + EXPECT_THAT((char *)ptr, StrEq(" 2.00")); + EXPECT_EQ(lammps_extract_variable_datatype(lmp, "eight"), LMP_VAR_STRING); + ptr = lammps_extract_variable(lmp, "eight", NULL); + EXPECT_THAT((char *)ptr, StrEq("")); + EXPECT_EQ(lammps_extract_variable_datatype(lmp, "nine"), LMP_VAR_STRING); + ptr = lammps_extract_variable(lmp, "nine", NULL); + EXPECT_THAT((char *)ptr, StrEq("one")); + + EXPECT_EQ(lammps_extract_variable_datatype(lmp, "ten"), LMP_VAR_EQUAL); + ptr = lammps_extract_variable(lmp, "ten", NULL); + EXPECT_THAT(*(double *)ptr, 1.0); + lammps_free(ptr); + variable->internal_set(variable->find("ten"), 2.5); + ptr = lammps_extract_variable(lmp, "ten", NULL); + EXPECT_THAT(*(double *)ptr, 2.5); + lammps_free(ptr); + + EXPECT_EQ(lammps_extract_variable_datatype(lmp, "ten1"), LMP_VAR_STRING); + ptr = lammps_extract_variable(lmp, "ten1", NULL); + EXPECT_THAT((char *)ptr, StrEq("1")); + EXPECT_EQ(lammps_extract_variable_datatype(lmp, "ten2"), LMP_VAR_STRING); + ptr = lammps_extract_variable(lmp, "ten2", NULL); + EXPECT_THAT((char *)ptr, StrEq("1")); + EXPECT_EQ(lammps_extract_variable_datatype(lmp, "ten3"), LMP_VAR_STRING); + ptr = lammps_extract_variable(lmp, "ten3", NULL); + EXPECT_THAT((char *)ptr, StrEq("1")); + + EXPECT_EQ(lammps_extract_variable_datatype(lmp, "ten4"), LMP_VAR_VECTOR); + ptr = lammps_extract_variable(lmp, "ten4", (const char *)1); + double *dptr = (double *)lammps_extract_variable(lmp, "ten4", NULL); + EXPECT_EQ((*(int *)ptr), 7); + lammps_free(ptr); + EXPECT_EQ(dptr[0], 0); + EXPECT_EQ(dptr[4], 5); + EXPECT_EQ(dptr[6], 11); + EXPECT_EQ(lammps_extract_variable_datatype(lmp, "ten5"), LMP_VAR_VECTOR); + ptr = lammps_extract_variable(lmp, "ten5", (const char *)1); + dptr = (double *)lammps_extract_variable(lmp, "ten5", NULL); + EXPECT_EQ((*(int *)ptr), 2); + lammps_free(ptr); + EXPECT_EQ(dptr[0], 0.5); + EXPECT_EQ(dptr[1], 1.25); + + EXPECT_EQ(lammps_extract_variable_datatype(lmp, "iswin"), LMP_VAR_EQUAL); + EXPECT_EQ(lammps_extract_variable_datatype(lmp, "islin"), LMP_VAR_EQUAL); +#if defined(_WIN32) + ptr = lammps_extract_variable(lmp, "iswin", NULL); + EXPECT_THAT(*(double *)ptr, 1.0); + lammps_free(ptr); + ptr = lammps_extract_variable(lmp, "islin", NULL); + EXPECT_THAT(*(double *)ptr, 0.0); + lammps_free(ptr); +#elif defined(__linux__) + ptr = lammps_extract_variable(lmp, "iswin", NULL); + EXPECT_THAT(*(double *)ptr, 0.0); + lammps_free(ptr); + ptr = lammps_extract_variable(lmp, "islin", NULL); + EXPECT_THAT(*(double *)ptr, 1.0); + lammps_free(ptr); +#else + ptr = lammps_extract_variable(lmp, "iswin", NULL); + EXPECT_THAT(*(double *)ptr, 0.0); + lammps_free(ptr); + ptr = lammps_extract_variable(lmp, "islin", NULL); + EXPECT_THAT(*(double *)ptr, 0.0); + lammps_free(ptr); +#endif + + LAMMPS_NS::platform::unlink("test_variable.file"); +} diff --git a/unittest/commands/test_variables.cpp b/unittest/commands/test_variables.cpp index 1aa13ecf49..1826263dea 100644 --- a/unittest/commands/test_variables.cpp +++ b/unittest/commands/test_variables.cpp @@ -157,6 +157,7 @@ TEST_F(VariableTest, CreateDelete) ASSERT_THAT(variable->retrieve("three"), StrEq("four")); ASSERT_THAT(variable->retrieve("four2"), StrEq("2")); ASSERT_THAT(variable->retrieve("five1"), StrEq("001")); + ASSERT_THAT(variable->retrieve("five2"), StrEq("010")); ASSERT_THAT(variable->retrieve("seven"), StrEq(" 2.00")); ASSERT_THAT(variable->retrieve("ten"), StrEq("1")); ASSERT_THAT(variable->retrieve("eight"), StrEq("")); diff --git a/unittest/force-styles/test_fix_timestep.cpp b/unittest/force-styles/test_fix_timestep.cpp index 2d2c2fa0b8..64c56f3602 100644 --- a/unittest/force-styles/test_fix_timestep.cpp +++ b/unittest/force-styles/test_fix_timestep.cpp @@ -36,6 +36,7 @@ #include "pair.h" #include "platform.h" #include "universe.h" +#include "update.h" #include "utils.h" #include "variable.h" @@ -61,7 +62,7 @@ void cleanup_lammps(LAMMPS *lmp, const TestConfig &cfg) delete lmp; } -LAMMPS *init_lammps(LAMMPS::argv & args, const TestConfig &cfg, const bool use_respa = false) +LAMMPS *init_lammps(LAMMPS::argv &args, const TestConfig &cfg, const bool use_respa = false) { LAMMPS *lmp; @@ -160,6 +161,13 @@ void restart_lammps(LAMMPS *lmp, const TestConfig &cfg, bool use_rmass, bool use for (auto &post_command : cfg.post_commands) command(post_command); + auto ifix = lmp->modify->get_fix_by_id("test"); + if (ifix && !utils::strmatch(ifix->style, "^move")) { + // must be set to trigger calling Fix::reset_dt() with timestep + lmp->update->first_update = 1; + // test validity of Fix::reset_dt(). With run_style respa there may be segfaults + command("timestep 0.25"); + } command("thermo 2"); command("run 4 post no start 0 stop 8"); } @@ -170,7 +178,7 @@ void generate_yaml_file(const char *outfile, const TestConfig &config) { // initialize system geometry LAMMPS::argv args = {"FixIntegrate", "-log", "none", "-echo", "screen", "-nocite"}; - LAMMPS *lmp = init_lammps(args, config); + LAMMPS *lmp = init_lammps(args, config); if (!lmp) { std::cerr << "One or more prerequisite styles are not available " "in this LAMMPS configuration:\n"; @@ -190,33 +198,31 @@ void generate_yaml_file(const char *outfile, const TestConfig &config) // natoms writer.emit("natoms", natoms); - int ifix = lmp->modify->find_fix("test"); - if (ifix < 0) { + auto ifix = lmp->modify->get_fix_by_id("test"); + if (!ifix) { std::cerr << "ERROR: no fix defined with fix ID 'test'\n"; exit(1); } else { - Fix *fix = lmp->modify->fix[ifix]; - // run_stress, if enabled - if (fix->thermo_virial) { - auto stress = fix->virial; + if (ifix->thermo_virial) { + auto stress = ifix->virial; block = fmt::format("{:23.16e} {:23.16e} {:23.16e} {:23.16e} {:23.16e} {:23.16e}", stress[0], stress[1], stress[2], stress[3], stress[4], stress[5]); writer.emit_block("run_stress", block); } // global scalar - if (fix->scalar_flag) { - double value = fix->compute_scalar(); + if (ifix->scalar_flag) { + double value = ifix->compute_scalar(); writer.emit("global_scalar", value); } // global vector - if (fix->vector_flag) { - int num = fix->size_vector; + if (ifix->vector_flag) { + int num = ifix->size_vector; block = std::to_string(num); for (int i = 0; i < num; ++i) - block += fmt::format(" {}", fix->compute_vector(i)); + block += fmt::format(" {}", ifix->compute_vector(i)); writer.emit_block("global_vector", block); } } @@ -283,37 +289,36 @@ TEST(FixTimestep, plain) EXPECT_POSITIONS("run_pos (normal run, verlet)", lmp->atom, test_config.run_pos, epsilon); EXPECT_VELOCITIES("run_vel (normal run, verlet)", lmp->atom, test_config.run_vel, epsilon); - int ifix = lmp->modify->find_fix("test"); - if (ifix < 0) { + auto ifix = lmp->modify->get_fix_by_id("test"); + if (!ifix) { FAIL() << "ERROR: no fix defined with fix ID 'test'\n"; } else { - Fix *fix = lmp->modify->fix[ifix]; - if (fix->thermo_virial) { - EXPECT_STRESS("run_stress (normal run, verlet)", fix->virial, test_config.run_stress, + if (ifix->thermo_virial) { + EXPECT_STRESS("run_stress (normal run, verlet)", ifix->virial, test_config.run_stress, epsilon); } stats.reset(); // global scalar - if (fix->scalar_flag) { - double value = fix->compute_scalar(); + if (ifix->scalar_flag) { + double value = ifix->compute_scalar(); EXPECT_FP_LE_WITH_EPS(test_config.global_scalar, value, epsilon); } // global vector - if (fix->vector_flag) { - int num = fix->size_vector; + if (ifix->vector_flag) { + int num = ifix->size_vector; EXPECT_EQ(num, test_config.global_vector.size()); for (int i = 0; i < num; ++i) - EXPECT_FP_LE_WITH_EPS(test_config.global_vector[i], fix->compute_vector(i), + EXPECT_FP_LE_WITH_EPS(test_config.global_vector[i], ifix->compute_vector(i), epsilon); } // check t_target for thermostats int dim = -1; - double *ptr = (double *)fix->extract("t_target", dim); + double *ptr = (double *)ifix->extract("t_target", dim); if ((ptr != nullptr) && (dim == 0)) { int ivar = lmp->input->variable->find("t_target"); if (ivar >= 0) { @@ -333,31 +338,30 @@ TEST(FixTimestep, plain) EXPECT_POSITIONS("run_pos (restart, verlet)", lmp->atom, test_config.run_pos, epsilon); EXPECT_VELOCITIES("run_vel (restart, verlet)", lmp->atom, test_config.run_vel, epsilon); - ifix = lmp->modify->find_fix("test"); - if (ifix < 0) { + ifix = lmp->modify->get_fix_by_id("test"); + if (!ifix) { FAIL() << "ERROR: no fix defined with fix ID 'test'\n"; } else { - Fix *fix = lmp->modify->fix[ifix]; - if (fix->thermo_virial) { - EXPECT_STRESS("run_stress (restart, verlet)", fix->virial, test_config.run_stress, + if (ifix->thermo_virial) { + EXPECT_STRESS("run_stress (restart, verlet)", ifix->virial, test_config.run_stress, epsilon); } stats.reset(); // global scalar - if (fix->scalar_flag) { - double value = fix->compute_scalar(); + if (ifix->scalar_flag) { + double value = ifix->compute_scalar(); EXPECT_FP_LE_WITH_EPS(test_config.global_scalar, value, epsilon); } // global vector - if (fix->vector_flag) { - int num = fix->size_vector; + if (ifix->vector_flag) { + int num = ifix->size_vector; EXPECT_EQ(num, test_config.global_vector.size()); for (int i = 0; i < num; ++i) - EXPECT_FP_LE_WITH_EPS(test_config.global_vector[i], fix->compute_vector(i), + EXPECT_FP_LE_WITH_EPS(test_config.global_vector[i], ifix->compute_vector(i), epsilon); } if (print_stats && stats.has_data()) @@ -372,31 +376,30 @@ TEST(FixTimestep, plain) EXPECT_POSITIONS("run_pos (rmass, verlet)", lmp->atom, test_config.run_pos, epsilon); EXPECT_VELOCITIES("run_vel (rmass, verlet)", lmp->atom, test_config.run_vel, epsilon); - ifix = lmp->modify->find_fix("test"); - if (ifix < 0) { + ifix = lmp->modify->get_fix_by_id("test"); + if (!ifix) { FAIL() << "ERROR: no fix defined with fix ID 'test'\n"; } else { - Fix *fix = lmp->modify->fix[ifix]; - if (fix->thermo_virial) { - EXPECT_STRESS("run_stress (rmass, verlet)", fix->virial, test_config.run_stress, + if (ifix->thermo_virial) { + EXPECT_STRESS("run_stress (rmass, verlet)", ifix->virial, test_config.run_stress, epsilon); } stats.reset(); // global scalar - if (fix->scalar_flag) { - double value = fix->compute_scalar(); + if (ifix->scalar_flag) { + double value = ifix->compute_scalar(); EXPECT_FP_LE_WITH_EPS(test_config.global_scalar, value, epsilon); } // global vector - if (fix->vector_flag) { - int num = fix->size_vector; + if (ifix->vector_flag) { + int num = ifix->size_vector; EXPECT_EQ(num, test_config.global_vector.size()); for (int i = 0; i < num; ++i) - EXPECT_FP_LE_WITH_EPS(test_config.global_vector[i], fix->compute_vector(i), + EXPECT_FP_LE_WITH_EPS(test_config.global_vector[i], ifix->compute_vector(i), epsilon); } if (print_stats && stats.has_data()) @@ -406,9 +409,9 @@ TEST(FixTimestep, plain) // rigid fixes need work to test properly with r-RESPA. // fix nve/limit cannot work with r-RESPA - ifix = lmp->modify->find_fix("test"); - if (!utils::strmatch(lmp->modify->fix[ifix]->style, "^rigid") && - !utils::strmatch(lmp->modify->fix[ifix]->style, "^nve/limit")) { + ifix = lmp->modify->get_fix_by_id("test"); + if (ifix && !utils::strmatch(ifix->style, "^rigid") && + !utils::strmatch(ifix->style, "^nve/limit")) { if (!verbose) ::testing::internal::CaptureStdout(); cleanup_lammps(lmp, test_config); if (!verbose) ::testing::internal::GetCapturedStdout(); @@ -424,31 +427,30 @@ TEST(FixTimestep, plain) EXPECT_POSITIONS("run_pos (normal run, respa)", lmp->atom, test_config.run_pos, epsilon); EXPECT_VELOCITIES("run_vel (normal run, respa)", lmp->atom, test_config.run_vel, epsilon); - ifix = lmp->modify->find_fix("test"); - if (ifix < 0) { + ifix = lmp->modify->get_fix_by_id("test"); + if (!ifix) { FAIL() << "ERROR: no fix defined with fix ID 'test'\n"; } else { - Fix *fix = lmp->modify->fix[ifix]; - if (fix->thermo_virial) { - EXPECT_STRESS("run_stress (normal run, respa)", fix->virial, test_config.run_stress, - 1000 * epsilon); + if (ifix->thermo_virial) { + EXPECT_STRESS("run_stress (normal run, respa)", ifix->virial, + test_config.run_stress, 1000 * epsilon); } stats.reset(); // global scalar - if (fix->scalar_flag) { - double value = fix->compute_scalar(); + if (ifix->scalar_flag) { + double value = ifix->compute_scalar(); EXPECT_FP_LE_WITH_EPS(test_config.global_scalar, value, 10 * epsilon); } // global vector - if (fix->vector_flag) { - int num = fix->size_vector; + if (ifix->vector_flag) { + int num = ifix->size_vector; EXPECT_EQ(num, test_config.global_vector.size()); for (int i = 0; i < num; ++i) - EXPECT_FP_LE_WITH_EPS(test_config.global_vector[i], fix->compute_vector(i), + EXPECT_FP_LE_WITH_EPS(test_config.global_vector[i], ifix->compute_vector(i), 10 * epsilon); } if (print_stats && stats.has_data()) @@ -462,31 +464,30 @@ TEST(FixTimestep, plain) EXPECT_POSITIONS("run_pos (restart, respa)", lmp->atom, test_config.run_pos, epsilon); EXPECT_VELOCITIES("run_vel (restart, respa)", lmp->atom, test_config.run_vel, epsilon); - ifix = lmp->modify->find_fix("test"); - if (ifix < 0) { + ifix = lmp->modify->get_fix_by_id("test"); + if (!ifix) { FAIL() << "ERROR: no fix defined with fix ID 'test'\n"; } else { - Fix *fix = lmp->modify->fix[ifix]; - if (fix->thermo_virial) { - EXPECT_STRESS("run_stress (restart, respa)", fix->virial, test_config.run_stress, + if (ifix->thermo_virial) { + EXPECT_STRESS("run_stress (restart, respa)", ifix->virial, test_config.run_stress, 1000 * epsilon); } stats.reset(); // global scalar - if (fix->scalar_flag) { - double value = fix->compute_scalar(); + if (ifix->scalar_flag) { + double value = ifix->compute_scalar(); EXPECT_FP_LE_WITH_EPS(test_config.global_scalar, value, 10 * epsilon); } // global vector - if (fix->vector_flag) { - int num = fix->size_vector; + if (ifix->vector_flag) { + int num = ifix->size_vector; EXPECT_EQ(num, test_config.global_vector.size()); for (int i = 0; i < num; ++i) - EXPECT_FP_LE_WITH_EPS(test_config.global_vector[i], fix->compute_vector(i), + EXPECT_FP_LE_WITH_EPS(test_config.global_vector[i], ifix->compute_vector(i), 10 * epsilon); } if (print_stats && stats.has_data()) @@ -501,31 +502,30 @@ TEST(FixTimestep, plain) EXPECT_POSITIONS("run_pos (rmass, respa)", lmp->atom, test_config.run_pos, epsilon); EXPECT_VELOCITIES("run_vel (rmass, respa)", lmp->atom, test_config.run_vel, epsilon); - ifix = lmp->modify->find_fix("test"); - if (ifix < 0) { + ifix = lmp->modify->get_fix_by_id("test"); + if (!ifix) { FAIL() << "ERROR: no fix defined with fix ID 'test'\n"; } else { - Fix *fix = lmp->modify->fix[ifix]; - if (fix->thermo_virial) { - EXPECT_STRESS("run_stress (rmass, respa)", fix->virial, test_config.run_stress, + if (ifix->thermo_virial) { + EXPECT_STRESS("run_stress (rmass, respa)", ifix->virial, test_config.run_stress, 1000 * epsilon); } stats.reset(); // global scalar - if (fix->scalar_flag) { - double value = fix->compute_scalar(); + if (ifix->scalar_flag) { + double value = ifix->compute_scalar(); EXPECT_FP_LE_WITH_EPS(test_config.global_scalar, value, 10 * epsilon); } // global vector - if (fix->vector_flag) { - int num = fix->size_vector; + if (ifix->vector_flag) { + int num = ifix->size_vector; EXPECT_EQ(num, test_config.global_vector.size()); for (int i = 0; i < num; ++i) - EXPECT_FP_LE_WITH_EPS(test_config.global_vector[i], fix->compute_vector(i), + EXPECT_FP_LE_WITH_EPS(test_config.global_vector[i], ifix->compute_vector(i), 10 * epsilon); } if (print_stats && stats.has_data()) @@ -551,7 +551,6 @@ TEST(FixTimestep, omp) LAMMPS::argv args = {"FixTimestep", "-log", "none", "-echo", "screen", "-nocite", "-pk", "omp", "4", "-sf", "omp"}; - ::testing::internal::CaptureStdout(); LAMMPS *lmp = init_lammps(args, test_config); std::string output = ::testing::internal::GetCapturedStdout(); @@ -584,37 +583,36 @@ TEST(FixTimestep, omp) EXPECT_POSITIONS("run_pos (normal run, verlet)", lmp->atom, test_config.run_pos, epsilon); EXPECT_VELOCITIES("run_vel (normal run, verlet)", lmp->atom, test_config.run_vel, epsilon); - int ifix = lmp->modify->find_fix("test"); - if (ifix < 0) { + auto ifix = lmp->modify->get_fix_by_id("test"); + if (!ifix) { FAIL() << "ERROR: no fix defined with fix ID 'test'\n"; } else { - Fix *fix = lmp->modify->fix[ifix]; - if (fix->thermo_virial) { - EXPECT_STRESS("run_stress (normal run, verlet)", fix->virial, test_config.run_stress, + if (ifix->thermo_virial) { + EXPECT_STRESS("run_stress (normal run, verlet)", ifix->virial, test_config.run_stress, epsilon); } stats.reset(); // global scalar - if (fix->scalar_flag) { - double value = fix->compute_scalar(); + if (ifix->scalar_flag) { + double value = ifix->compute_scalar(); EXPECT_FP_LE_WITH_EPS(test_config.global_scalar, value, epsilon); } // global vector - if (fix->vector_flag) { - int num = fix->size_vector; + if (ifix->vector_flag) { + int num = ifix->size_vector; EXPECT_EQ(num, test_config.global_vector.size()); for (int i = 0; i < num; ++i) - EXPECT_FP_LE_WITH_EPS(test_config.global_vector[i], fix->compute_vector(i), + EXPECT_FP_LE_WITH_EPS(test_config.global_vector[i], ifix->compute_vector(i), epsilon); } // check t_target for thermostats int dim = -1; - double *ptr = (double *)fix->extract("t_target", dim); + double *ptr = (double *)ifix->extract("t_target", dim); if ((ptr != nullptr) && (dim == 0)) { int ivar = lmp->input->variable->find("t_target"); if (ivar >= 0) { @@ -634,31 +632,30 @@ TEST(FixTimestep, omp) EXPECT_POSITIONS("run_pos (restart, verlet)", lmp->atom, test_config.run_pos, epsilon); EXPECT_VELOCITIES("run_vel (restart, verlet)", lmp->atom, test_config.run_vel, epsilon); - ifix = lmp->modify->find_fix("test"); - if (ifix < 0) { + ifix = lmp->modify->get_fix_by_id("test"); + if (!ifix) { FAIL() << "ERROR: no fix defined with fix ID 'test'\n"; } else { - Fix *fix = lmp->modify->fix[ifix]; - if (fix->thermo_virial) { - EXPECT_STRESS("run_stress (restart, verlet)", fix->virial, test_config.run_stress, + if (ifix->thermo_virial) { + EXPECT_STRESS("run_stress (restart, verlet)", ifix->virial, test_config.run_stress, epsilon); } stats.reset(); // global scalar - if (fix->scalar_flag) { - double value = fix->compute_scalar(); + if (ifix->scalar_flag) { + double value = ifix->compute_scalar(); EXPECT_FP_LE_WITH_EPS(test_config.global_scalar, value, epsilon); } // global vector - if (fix->vector_flag) { - int num = fix->size_vector; + if (ifix->vector_flag) { + int num = ifix->size_vector; EXPECT_EQ(num, test_config.global_vector.size()); for (int i = 0; i < num; ++i) - EXPECT_FP_LE_WITH_EPS(test_config.global_vector[i], fix->compute_vector(i), + EXPECT_FP_LE_WITH_EPS(test_config.global_vector[i], ifix->compute_vector(i), epsilon); } if (print_stats && stats.has_data()) @@ -673,31 +670,30 @@ TEST(FixTimestep, omp) EXPECT_POSITIONS("run_pos (rmass, verlet)", lmp->atom, test_config.run_pos, epsilon); EXPECT_VELOCITIES("run_vel (rmass, verlet)", lmp->atom, test_config.run_vel, epsilon); - ifix = lmp->modify->find_fix("test"); - if (ifix < 0) { + ifix = lmp->modify->get_fix_by_id("test"); + if (!ifix) { FAIL() << "ERROR: no fix defined with fix ID 'test'\n"; } else { - Fix *fix = lmp->modify->fix[ifix]; - if (fix->thermo_virial) { - EXPECT_STRESS("run_stress (rmass, verlet)", fix->virial, test_config.run_stress, + if (ifix->thermo_virial) { + EXPECT_STRESS("run_stress (rmass, verlet)", ifix->virial, test_config.run_stress, epsilon); } stats.reset(); // global scalar - if (fix->scalar_flag) { - double value = fix->compute_scalar(); + if (ifix->scalar_flag) { + double value = ifix->compute_scalar(); EXPECT_FP_LE_WITH_EPS(test_config.global_scalar, value, epsilon); } // global vector - if (fix->vector_flag) { - int num = fix->size_vector; + if (ifix->vector_flag) { + int num = ifix->size_vector; EXPECT_EQ(num, test_config.global_vector.size()); for (int i = 0; i < num; ++i) - EXPECT_FP_LE_WITH_EPS(test_config.global_vector[i], fix->compute_vector(i), + EXPECT_FP_LE_WITH_EPS(test_config.global_vector[i], ifix->compute_vector(i), epsilon); } if (print_stats && stats.has_data()) @@ -707,8 +703,8 @@ TEST(FixTimestep, omp) // rigid fixes need work to test properly with r-RESPA, // also, torque is not supported by respa/omp - ifix = lmp->modify->find_fix("test"); - if (!utils::strmatch(lmp->modify->fix[ifix]->style, "^rigid") && !lmp->atom->torque) { + ifix = lmp->modify->get_fix_by_id("test"); + if (ifix && !utils::strmatch(ifix->style, "^rigid") && !lmp->atom->torque) { if (!verbose) ::testing::internal::CaptureStdout(); cleanup_lammps(lmp, test_config); @@ -725,31 +721,30 @@ TEST(FixTimestep, omp) EXPECT_POSITIONS("run_pos (normal run, respa)", lmp->atom, test_config.run_pos, epsilon); EXPECT_VELOCITIES("run_vel (normal run, respa)", lmp->atom, test_config.run_vel, epsilon); - ifix = lmp->modify->find_fix("test"); - if (ifix < 0) { + ifix = lmp->modify->get_fix_by_id("test"); + if (!ifix) { FAIL() << "ERROR: no fix defined with fix ID 'test'\n"; } else { - Fix *fix = lmp->modify->fix[ifix]; - if (fix->thermo_virial) { - EXPECT_STRESS("run_stress (normal run, respa)", fix->virial, test_config.run_stress, - 1000 * epsilon); + if (ifix->thermo_virial) { + EXPECT_STRESS("run_stress (normal run, respa)", ifix->virial, + test_config.run_stress, 1000 * epsilon); } stats.reset(); // global scalar - if (fix->scalar_flag) { - double value = fix->compute_scalar(); + if (ifix->scalar_flag) { + double value = ifix->compute_scalar(); EXPECT_FP_LE_WITH_EPS(test_config.global_scalar, value, 10 * epsilon); } // global vector - if (fix->vector_flag) { - int num = fix->size_vector; + if (ifix->vector_flag) { + int num = ifix->size_vector; EXPECT_EQ(num, test_config.global_vector.size()); for (int i = 0; i < num; ++i) - EXPECT_FP_LE_WITH_EPS(test_config.global_vector[i], fix->compute_vector(i), + EXPECT_FP_LE_WITH_EPS(test_config.global_vector[i], ifix->compute_vector(i), 10 * epsilon); } if (print_stats && stats.has_data()) @@ -763,31 +758,30 @@ TEST(FixTimestep, omp) EXPECT_POSITIONS("run_pos (restart, respa)", lmp->atom, test_config.run_pos, epsilon); EXPECT_VELOCITIES("run_vel (restart, respa)", lmp->atom, test_config.run_vel, epsilon); - ifix = lmp->modify->find_fix("test"); - if (ifix < 0) { + ifix = lmp->modify->get_fix_by_id("test"); + if (!ifix) { FAIL() << "ERROR: no fix defined with fix ID 'test'\n"; } else { - Fix *fix = lmp->modify->fix[ifix]; - if (fix->thermo_virial) { - EXPECT_STRESS("run_stress (restart, respa)", fix->virial, test_config.run_stress, + if (ifix->thermo_virial) { + EXPECT_STRESS("run_stress (restart, respa)", ifix->virial, test_config.run_stress, 1000 * epsilon); } stats.reset(); // global scalar - if (fix->scalar_flag) { - double value = fix->compute_scalar(); + if (ifix->scalar_flag) { + double value = ifix->compute_scalar(); EXPECT_FP_LE_WITH_EPS(test_config.global_scalar, value, 10 * epsilon); } // global vector - if (fix->vector_flag) { - int num = fix->size_vector; + if (ifix->vector_flag) { + int num = ifix->size_vector; EXPECT_EQ(num, test_config.global_vector.size()); for (int i = 0; i < num; ++i) - EXPECT_FP_LE_WITH_EPS(test_config.global_vector[i], fix->compute_vector(i), + EXPECT_FP_LE_WITH_EPS(test_config.global_vector[i], ifix->compute_vector(i), 10 * epsilon); } if (print_stats && stats.has_data()) @@ -802,31 +796,30 @@ TEST(FixTimestep, omp) EXPECT_POSITIONS("run_pos (rmass, respa)", lmp->atom, test_config.run_pos, epsilon); EXPECT_VELOCITIES("run_vel (rmass, respa)", lmp->atom, test_config.run_vel, epsilon); - ifix = lmp->modify->find_fix("test"); - if (ifix < 0) { + ifix = lmp->modify->get_fix_by_id("test"); + if (!ifix) { FAIL() << "ERROR: no fix defined with fix ID 'test'\n"; } else { - Fix *fix = lmp->modify->fix[ifix]; - if (fix->thermo_virial) { - EXPECT_STRESS("run_stress (rmass, respa)", fix->virial, test_config.run_stress, + if (ifix->thermo_virial) { + EXPECT_STRESS("run_stress (rmass, respa)", ifix->virial, test_config.run_stress, 1000 * epsilon); } stats.reset(); // global scalar - if (fix->scalar_flag) { - double value = fix->compute_scalar(); + if (ifix->scalar_flag) { + double value = ifix->compute_scalar(); EXPECT_FP_LE_WITH_EPS(test_config.global_scalar, value, 10 * epsilon); } // global vector - if (fix->vector_flag) { - int num = fix->size_vector; + if (ifix->vector_flag) { + int num = ifix->size_vector; EXPECT_EQ(num, test_config.global_vector.size()); for (int i = 0; i < num; ++i) - EXPECT_FP_LE_WITH_EPS(test_config.global_vector[i], fix->compute_vector(i), + EXPECT_FP_LE_WITH_EPS(test_config.global_vector[i], ifix->compute_vector(i), 10 * epsilon); } if (print_stats && stats.has_data()) diff --git a/unittest/force-styles/tests/manybody-pair-pod.yaml b/unittest/force-styles/tests/manybody-pair-pod.yaml index a0820d97dd..5dcd79d3f8 100644 --- a/unittest/force-styles/tests/manybody-pair-pod.yaml +++ b/unittest/force-styles/tests/manybody-pair-pod.yaml @@ -1,8 +1,8 @@ --- -lammps_version: 3 Nov 2022 -date_generated: Thu Dec 1 23:18:00 2022 +lammps_version: 17 Apr 2024 +date_generated: Wed May 22 23:39:15 2024 epsilon: 5e-11 -skip_tests: +skip_tests: kokkos_omp prerequisites: ! | pair pod pre_commands: ! | @@ -15,142 +15,142 @@ pair_coeff: ! | * * Ta_param.pod Ta_coeff.pod Ta Ta Ta Ta Ta Ta Ta Ta extract: ! "" natoms: 64 -init_vdwl: -528.2910264879091 +init_vdwl: -410.2384867313104 init_coul: 0 init_stress: ! |2- - 8.3402602596264614e+00 2.0643446850903056e+00 1.5678421067854520e+01 -2.9333918215385154e+01 1.1525924506418683e+02 -1.5484432052782759e+00 + 4.9022269500032161e+02 4.9376448227589816e+02 5.3401476248646236e+02 -4.6634637000407110e+01 2.2048539348045341e+02 7.5348803918588310e+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 + 1 -6.5309656460745176e+00 1.5136950705258570e+01 1.2830910711300305e+01 + 2 -1.2940507079967830e+01 -3.5631648591238543e+00 -1.0214881372571252e+01 + 3 1.1840607479263618e+00 7.8142238369613634e-02 1.3240303824011606e+00 + 4 -9.0461335840304820e+00 1.6421054745047698e+01 6.4222834402787807e+00 + 5 -4.4455346073705702e+00 -4.1219343948158027e+00 -5.5842666723140122e-01 + 6 3.2213927131196227e+00 1.1032802936344874e+01 3.0883816090681262e+00 + 7 -5.7205216568442898e+00 -6.8544078802481367e+00 5.2674515578636942e+00 + 8 6.0111554116682031e-01 3.4511519325170048e+00 -4.5941525646668211e+00 + 9 -1.4526139655777426e+00 -8.7953804018537447e+00 -1.4636593034048555e+01 + 10 -3.0589120606514926e+00 -5.4340999066836231e+00 -1.1172796666813920e+01 + 11 1.7088277560021435e+01 -1.5276120120148034e+01 8.9060567572450271e+00 + 12 -2.9117544549492202e+01 -2.1064559487005187e+01 -1.8636986170532495e+01 + 13 -6.6893025487697964e+00 2.7843146294204274e+01 -3.5437779307946062e+00 + 14 -7.7405502276036868e+00 1.9431305897646496e+01 2.1526579171664033e+00 + 15 -1.9545657754082125e+01 2.0442371318209393e+01 -2.0523256937154013e+01 + 16 9.5615547920076018e+00 5.4756899497367311e+00 3.5413364373315964e+01 + 17 1.2253504203849257e+01 1.3589807830658817e+01 -2.2500326738186136e+01 + 18 2.2124639486062221e+00 2.2809987521199040e+00 1.5758845653021112e+01 + 19 -6.3950994796785006e+00 -4.8699822827926926e+00 -3.1962502168207942e+00 + 20 -3.3627599797510769e+01 4.5760242653884964e+00 1.1193156541788161e+00 + 21 7.4838568397591079e+00 -5.1207595910489445e-01 -1.4992882449114250e+01 + 22 -3.4449997256078106e+01 2.1741776689366528e+01 -3.0417180343226505e+01 + 23 7.9887113570118933e+00 1.0438063420737590e+01 1.0091519629819238e+01 + 24 9.7852248103822959e+00 9.7889444207140013e+00 1.5136372070559037e+01 + 25 3.5103998923461819e+00 -1.5100586339785624e+00 5.5475098167386134e+00 + 26 -2.3008256029170466e+00 -2.0174388797869449e+00 1.9545086913927323e+00 + 27 1.0039500741707045e+01 -3.1588365173094504e+00 9.3848763376352391e+00 + 28 -1.4083492857943631e+00 4.1375942367837668e+00 2.6358883116452407e+01 + 29 -1.6685913766983656e+01 4.1539019657446268e+00 -3.7537458526927523e+00 + 30 -7.6144642645204907e+00 6.0113715813093060e+00 -3.4564713928280479e+00 + 31 -4.6736071866510853e+00 3.5740208613338460e+00 -3.9804803532942383e+00 + 32 -1.5090127957560838e+01 2.5244087972039599e+00 -4.0536958417737612e-01 + 33 2.2910206651674123e+01 -1.3798345086683828e+01 2.0482484505011463e+01 + 34 -3.2945485908987826e-01 -2.6940721407664836e-01 2.4013911392867491e+00 + 35 4.0268128446735867e+00 -4.2310161488536231e+00 1.1833154238724031e+01 + 36 1.8176664409683010e+00 -9.9717312276132404e+00 -1.0705406852645392e+00 + 37 -8.7538731502277631e+00 1.1752672812645274e+01 -1.1502704798839771e+01 + 38 7.7453544260003293e-01 -2.4965513045447469e+00 -1.2510837732921312e+00 + 39 9.0720516886890437e+00 -1.0241574684450409e+01 -2.0125449908359894e+01 + 40 2.1465855776579673e+01 -1.3945447695026113e+01 -6.8486054161315177e+00 + 41 5.8218260667899235e-01 6.7397922005993927e-03 -4.3763156201017992e+00 + 42 -1.7796616176495530e+01 -1.1876849631671941e+01 -6.5762224655816057e+00 + 43 2.2561922687325264e-01 -2.7952402275494197e+01 2.3071524509277532e+00 + 44 1.8273606348811121e+01 -1.8270176207703763e+01 1.1553297319423622e+01 + 45 -3.0025628389975361e+00 1.0002999257048362e+01 -1.7274093092002033e+01 + 46 -9.9318239294853541e+00 -1.1063063257046228e+01 2.5506588121185374e+01 + 47 1.2015259386911902e+01 7.6825848695752921e+00 7.0333133736024660e+00 + 48 5.7899647779327026e+00 3.2746635122022458e+00 -1.1752244050919269e+00 + 49 -8.9935815020004419e+00 -2.5297833390011153e+01 -1.8128341059967077e+01 + 50 6.1790085074083834e+00 1.1813127434920705e+01 -3.6514228454756243e+00 + 51 -9.2599602619592787e+00 1.9288829774487141e+01 1.8937881926332754e+01 + 52 2.9141853544236550e+01 -2.7494790952397580e+01 3.4660583704205401e+01 + 53 1.1206014879007400e+01 1.7523020000928515e+01 1.2988678958733903e+01 + 54 1.0431466502947194e+01 -1.1687276483271816e+01 -1.1336899434652105e+01 + 55 1.2415001892790189e+01 -1.7878500490336062e+01 -1.6472325204596654e+01 + 56 2.6613894171112085e-01 4.0079831610028149e+00 -9.8746421300278371e+00 + 57 1.5692367582328075e+00 -2.4289345724552045e+00 -9.1995230565583319e-01 + 58 1.1367350546392537e+01 -5.8645633268290105e+00 3.2877167594860066e+00 + 59 1.8898584008894929e+01 1.1671628659054432e+01 -8.5427078178989362e+00 + 60 -1.1387945012612548e+01 -2.9286235529609694e+01 -1.9947277172440270e+01 + 61 -1.4071422389863422e+00 6.4943348750183700e+00 -1.6633123081670118e+00 + 62 -1.2840583041198794e+01 1.2467088032510793e+01 -9.7932585156189589e+00 + 63 1.3563230239150005e+01 -1.2591906395758119e+01 -7.1985326718517948e+00 + 64 1.5316061128145364e+01 1.5709464176394246e+01 3.2563279689814330e+01 +run_vdwl: -410.95413331281003 run_coul: 0 run_stress: ! |2- - 7.7971581234640315e+00 1.8180180509574915e+00 1.5567974498446516e+01 -2.9195299100177184e+01 1.1463660454201184e+02 -5.2901271066816291e-01 + 4.8790084081098820e+02 4.9205993579439655e+02 5.3253514832117412e+02 -4.5873719143318795e+01 2.1842439537916931e+02 9.6108180261237450e+00 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 + 1 -6.5302803795000290e+00 1.5008954908518220e+01 1.2782766637899464e+01 + 2 -1.2934741296371032e+01 -3.6438072106762904e+00 -1.0246581399698554e+01 + 3 1.0643480774329184e+00 1.0989547091417427e-01 1.4801781422346918e+00 + 4 -8.9226910214328239e+00 1.6321523200898003e+01 6.2179284477980232e+00 + 5 -4.5119654536969218e+00 -4.1943337605490028e+00 -4.8629594604243609e-01 + 6 3.4244292871038868e+00 1.1012732723744625e+01 3.2299851721747284e+00 + 7 -5.5862410538320386e+00 -6.6671008844509725e+00 5.1913141572097166e+00 + 8 5.3126458099185025e-01 3.4389030581062028e+00 -4.5870201926573246e+00 + 9 -1.5622177052008701e+00 -8.9020051785312262e+00 -1.4701518090551732e+01 + 10 -3.0591678312765946e+00 -5.4158915784047590e+00 -1.0964556434767903e+01 + 11 1.6768303951099774e+01 -1.5065980362127185e+01 8.6873741539509943e+00 + 12 -2.8813455142674830e+01 -2.0677967398177774e+01 -1.8373258081926309e+01 + 13 -6.2569142109062987e+00 2.7676713246771225e+01 -3.2364279874555373e+00 + 14 -7.8393240949615413e+00 1.9273532542231486e+01 2.1077587433100926e+00 + 15 -1.9352852035481355e+01 2.0180072338350978e+01 -2.0170893936505685e+01 + 16 9.4324861638733104e+00 5.3569724992305350e+00 3.5033266543818804e+01 + 17 1.2060916139212019e+01 1.3441297772382116e+01 -2.2283643611677071e+01 + 18 2.0111753518086517e+00 2.4058400344736341e+00 1.5784276453941457e+01 + 19 -6.5346697411474599e+00 -4.9781337821759220e+00 -3.2673336920063463e+00 + 20 -3.3284105689885557e+01 4.3787585843148262e+00 9.3274022092125008e-01 + 21 7.5368441125225569e+00 -6.6312144471864132e-01 -1.5138365776222530e+01 + 22 -3.4057426354942756e+01 2.1405565842769381e+01 -2.9984321416266358e+01 + 23 8.0469707811206597e+00 1.0477541834191719e+01 1.0131508224936237e+01 + 24 9.8383826417631148e+00 9.6349625198578526e+00 1.5013294254149651e+01 + 25 3.4810928893469715e+00 -1.4841921158444644e+00 5.4642693824111372e+00 + 26 -2.3223608191381340e+00 -1.9382774168314612e+00 1.9587113445207314e+00 + 27 1.0055183772571926e+01 -3.2340066923335420e+00 9.4069162395840653e+00 + 28 -1.4807366090187568e+00 4.2563893473777270e+00 2.6233758242745271e+01 + 29 -1.6703205460657923e+01 4.1651596726989162e+00 -3.7499748242430431e+00 + 30 -7.5315305395260133e+00 5.9234388839590926e+00 -3.4452711570790400e+00 + 31 -4.6531876936546235e+00 3.5592882805052772e+00 -3.9598740266606969e+00 + 32 -1.4944303903312775e+01 2.4471615913038161e+00 -4.2650219550740687e-01 + 33 2.2658757219633507e+01 -1.3584416809504527e+01 2.0208960807112184e+01 + 34 -3.3589165465629545e-01 -2.6107343201152533e-01 2.4480790007625792e+00 + 35 4.0211644744872297e+00 -4.1429951008983439e+00 1.1760815779271793e+01 + 36 1.6800414992388888e+00 -9.9255954579260965e+00 -1.2707502624572800e+00 + 37 -8.6804527612389748e+00 1.1664083566069120e+01 -1.1501862395898650e+01 + 38 8.4680311647032236e-01 -2.4612760516651839e+00 -1.2097356180320062e+00 + 39 8.9453757306916213e+00 -1.0088842671984429e+01 -2.0010220469214108e+01 + 40 2.1504084288180351e+01 -1.3896767860015089e+01 -6.8807964610220305e+00 + 41 7.0920990633236713e-01 1.2470146465265874e-01 -4.2863469697626764e+00 + 42 -1.7782621211784086e+01 -1.1955425533865377e+01 -6.6645896379089864e+00 + 43 1.1161210933461418e-01 -2.7806283629207936e+01 2.1722600588316636e+00 + 44 1.8203724536783220e+01 -1.8177439994718490e+01 1.1405342753966950e+01 + 45 -3.0178433365984279e+00 9.8077736148291894e+00 -1.7038567454709415e+01 + 46 -9.8284407570915224e+00 -1.0940905728232703e+01 2.5546254074522583e+01 + 47 1.1994531752732673e+01 7.6401656163848370e+00 6.9803825716270822e+00 + 48 5.7959428775443431e+00 3.3532761798385975e+00 -1.2090959321884160e+00 + 49 -9.0871621934125741e+00 -2.5525880549057131e+01 -1.8352634645685395e+01 + 50 6.2385949228372839e+00 1.1775731352242135e+01 -3.6905119289093129e+00 + 51 -9.3751646607544306e+00 1.9380398875813281e+01 1.8936970290617868e+01 + 52 2.8857474615857534e+01 -2.7077834887393038e+01 3.4226465823003075e+01 + 53 1.1272120589697714e+01 1.7723730455257613e+01 1.3346433354217156e+01 + 54 1.0332668416350394e+01 -1.1587076788781554e+01 -1.1187068870176809e+01 + 55 1.2173218480738553e+01 -1.7697903958592068e+01 -1.6191659128871123e+01 + 56 2.8687984465975036e-01 3.8573613826299376e+00 -9.8055015944721848e+00 + 57 1.5729444649974420e+00 -2.4852524890772023e+00 -9.1852174894903216e-01 + 58 1.1318588067888333e+01 -5.7432426696637133e+00 3.1502768462440778e+00 + 59 1.8921515215481648e+01 1.1640044816648190e+01 -8.5417711391321323e+00 + 60 -1.1460356409734461e+01 -2.9330410460922113e+01 -2.0104676097775538e+01 + 61 -1.3788623174852395e+00 6.5163432076409729e+00 -1.5956661994290990e+00 + 62 -1.2770749422150793e+01 1.2364427527668891e+01 -9.6757027946868899e+00 + 63 1.3527485731142161e+01 -1.2652030425033526e+01 -7.2614405652239205e+00 + 64 1.5374786151597569e+01 1.5882729911096058e+01 3.2580670961989632e+01 ... diff --git a/unittest/utils/test_utils.cpp b/unittest/utils/test_utils.cpp index 58940f6600..c486d0cf3e 100644 --- a/unittest/utils/test_utils.cpp +++ b/unittest/utils/test_utils.cpp @@ -1061,6 +1061,16 @@ TEST(Utils, timespec2seconds_hhmmss) ASSERT_DOUBLE_EQ(utils::timespec2seconds("2:10:45"), 7845.0); } +TEST(Utils, timespec2seconds_ssfraction) +{ + ASSERT_DOUBLE_EQ(utils::timespec2seconds("5.2"), 5.2); +} + +TEST(Utils, timespec2seconds_mmfraction) +{ + ASSERT_DOUBLE_EQ(utils::timespec2seconds("2.5:10"), 160.0); +} + TEST(Utils, timespec2seconds_invalid) { ASSERT_DOUBLE_EQ(utils::timespec2seconds("2:aa:45"), -1.0);