diff --git a/doc/src/Commands_compute.rst b/doc/src/Commands_compute.rst index 0352ad5374..2e8f291c77 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 d357595d64..f83f2539a3 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/compute.rst b/doc/src/compute.rst index 7b620deed7..05181b9e7e 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..84cd750981 --- /dev/null +++ b/doc/src/compute_pod_atom.rst @@ -0,0 +1,126 @@ +.. 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 +""""""""""" + +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 lammps/examples/PACKAGES/pod. + +---------- + +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 + +---------- + +.. _Nguyen20222: + +**(Nguyen and Rohskopf)** Nguyen and Rohskopf, Journal of Computational Physics, 480, 112030, (2023). + +.. _Nguyen20232: + +**(Nguyen2023)** Nguyen, Physical Review B, 107(14), 144103, (2023). + +.. _Nguyen20242: + +**(Nguyen2024)** Nguyen, Journal of Computational Physics, 113102, (2024). + +.. _Nguyen20243: + +**(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..b7146eb3cb 100644 --- a/doc/src/fitpod_command.rst +++ b/doc/src/fitpod_command.rst @@ -8,11 +8,12 @@ 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,22 @@ 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 +55,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,47 +63,74 @@ 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 -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 +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): + .. list-table:: :header-rows: 1 :widths: auto @@ -125,6 +155,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 +167,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 +203,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 @@ -173,13 +219,40 @@ successful training, a number of output files are produced, if enabled: * ``_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 +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. +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,495 +260,35 @@ 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 + E_i(\boldsymbol R_i, \boldsymbol Z_i) \ = \ \sum_{m=1}^M c_m \mathcal{D}_{im}(\boldsymbol R_i, \boldsymbol Z_i) -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. +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 +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 +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 @@ -694,7 +307,7 @@ 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*), @@ -704,18 +317,18 @@ 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 +340,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 +353,20 @@ The keyword defaults are also given in the description of the input files. ---------- -.. _Grepl20072: - -**(Grepl)** Grepl, Maday, Nguyen, and Patera, ESAIM: Mathematical Modelling and Numerical Analysis 41(3), 575-605, (2007). - .. _Nguyen20222: -**(Nguyen)** Nguyen and Rohskopf, arXiv preprint arXiv:2209.02362 (2022). +**(Nguyen and Rohskopf)** Nguyen and Rohskopf, Journal of Computational Physics, 480, 112030, (2023). + +.. _Nguyen20232: + +**(Nguyen2023)** Nguyen, Physical Review B, 107(14), 144103, (2023). + +.. _Nguyen20242: + +**(Nguyen2024)** Nguyen, Journal of Computational Physics, 113102, (2024). + +.. _Nguyen20243: + +**(Nguyen and Sema)** Nguyen and Sema, https://arxiv.org/abs/2405.00306, (2024). + + diff --git a/doc/src/pair_pod.rst b/doc/src/pair_pod.rst index cb4edcb9e9..5adf0410f9 100644 --- a/doc/src/pair_pod.rst +++ b/doc/src/pair_pod.rst @@ -3,6 +3,8 @@ pair_style pod command ======================== +Accelerator Variants: *pod/kk* + Syntax """""" @@ -24,29 +26,31 @@ 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 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. The coefficient file (``Ta_coefficients.pod``) contains coefficients for the POD potential. The top of the coefficient file can contain any number of blank and comment lines (start with #), but follows a strict format after that. The first non-blank non-comment line must contain: -* POD_coefficients: *ncoeff* +* model_coefficients: *ncoeff* *nproj* *ncentroid* -This is followed by *ncoeff* coefficients, one per line. The coefficient +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 +71,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 +108,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 +124,20 @@ none ---------- -.. _Nguyen20221: +.. _Nguyen20222: + +**(Nguyen and Rohskopf)** Nguyen and Rohskopf, Journal of Computational Physics, 480, 112030, (2023). + +.. _Nguyen20232: + +**(Nguyen2023)** Nguyen, Physical Review B, 107(14), 144103, (2023). + +.. _Nguyen20242: + +**(Nguyen2024)** Nguyen, Journal of Computational Physics, 113102, (2024). + +.. _Nguyen20243: + +**(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/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index e845583551..0c8d8f0145 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 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 278d7ef6ce..e5923d0149 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 @@ -247,6 +249,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/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_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/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..85c7b69e1e --- /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..9b0da8e5dc --- /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..7fad8f1151 --- /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..0f6793e021 --- /dev/null +++ b/src/ML-POD/compute_podd_atom.cpp @@ -0,0 +1,278 @@ +// 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; + + size_peratom_cols = podptr->Mdesc * podptr->nClusters*3*atom->natoms; + 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; + int numdesc = podptr->Mdesc * podptr->nClusters * 3 * atom->natoms; + 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 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..5320ce836f --- /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..7af45c3866 --- /dev/null +++ b/src/ML-POD/eapod.cpp @@ -0,0 +1,4734 @@ +// 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; + +#define 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 (nrbf2 < nrbf3) error->all(FLERR,"number of three-body radial basis functions must be equal or less than number of two-body radial basis functions"); + 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..ee9d64bab5 100644 --- a/src/ML-POD/fitpod_command.cpp +++ b/src/ML-POD/fitpod_command.cpp @@ -15,9 +15,8 @@ Contributing authors: Ngoc Cuong Nguyen (MIT) and Andrew Rohskopf (SNL) ------------------------------------------------------------------------- */ -#include "fitpod_command.h" -#include "mlpod.h" +#include "fitpod_command.h" #include "comm.h" #include "error.h" @@ -28,7 +27,11 @@ #include #include #include -#include +#include +#include +#include + +#include "eapod.h" using namespace LAMMPS_NS; using MathSpecial::powint; @@ -36,7 +39,7 @@ using MathSpecial::powint; static constexpr int MAXLINE = 1024; static constexpr double SMALL = 1.0e-10; -FitPOD::FitPOD(LAMMPS *_lmp) : Command(_lmp), podptr(nullptr) +FitPOD::FitPOD(LAMMPS *_lmp) : Command(_lmp), fastpodptr(nullptr) { } @@ -46,48 +49,130 @@ void FitPOD::command(int narg, char **arg) 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 coeff_file, proj_file, cent_file; // coefficient input files if (narg > 2) coeff_file = std::string(arg[2]); // coefficient input file else coeff_file = ""; - podptr = new MLPOD(lmp, pod_file, coeff_file); - read_data_files(data_file, podptr->pod.species); + 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 @@ -98,44 +183,36 @@ void FitPOD::command(int narg, char **arg) 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 &file_extension, std::string &env_path, std::string &test_path, std::string &training_path, std::string &filenametag, - const std::string &data_file) + const std::string &data_file, std::string &group_weight_type, + std::unordered_map &we_map, + std::unordered_map &wf_map) { int precision = 8; @@ -150,8 +227,7 @@ int FitPOD::read_data_file(double *fitting_weights, std::string &file_format, // 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) { @@ -177,10 +253,10 @@ int FitPOD::read_data_file(double *fitting_weights, std::string &file_format, 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()); + error->one(FLERR,"Improper POD data file.", utils::getsyserror()); // settings for fitting weights @@ -197,6 +273,8 @@ int FitPOD::read_data_file(double *fitting_weights, std::string &file_format, 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 +282,60 @@ 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 +344,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,21 +357,27 @@ 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; + int ext_size = extension.size() + 1; + std::string substr = fname.substr(0, start_pos_erase); + group_names.push_back(substr); + } } } @@ -252,8 +391,7 @@ int FitPOD::get_number_atom_exyz(std::vector& num_atom, int& num_atom_sum, 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; @@ -313,8 +451,8 @@ int FitPOD::get_number_atoms(std::vector& num_atom, std::vector &num_a return num_atom_all; } -void FitPOD::read_exyz_file(double *lattice, double *stress, double *energy, double *pos, double *forces, - int *atomtype, std::string file, std::vector 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); @@ -325,8 +463,7 @@ void FitPOD::read_exyz_file(double *lattice, double *stress, double *energy, dou 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; @@ -385,54 +522,62 @@ void FitPOD::read_exyz_file(double *lattice, double *stress, double *energy, dou } } - // 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 @@ -443,18 +588,25 @@ void FitPOD::read_exyz_file(double *lattice, double *stress, double *energy, dou 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); + 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; @@ -480,24 +632,42 @@ 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.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.atomtype, n, "fitpod:atomtype"); + 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 FitPOD::shuffle(int start_in, int end_in, int num_in) for (int i = 0; i shuffle_vec(num_in); for (int i = 0; icreate(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; + // 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"); @@ -673,6 +848,8 @@ void FitPOD::select_data(datastruct &newdata, const datastruct &data) double *force = &data.force[dim*natom_cumsum]; newdata.energy[cn] = data.energy[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]; @@ -719,8 +896,8 @@ 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"); + + 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; @@ -868,34 +1090,10 @@ int FitPOD::podfullneighborlist(double *y, int *alist, int *neighlist, int *numn 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 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++) @@ -917,22 +1115,53 @@ void FitPOD::allocate_memory(const datastruct &data) np = MAX(np, natom*natom*nl); } - memory->create(nb.y, ny, "fitpod:nb_y"); - memory->create(nb.alist, na, "fitpod:nb_alist"); - memory->create(nb.pairnum, natom_max, "fitpod:nb_pairnum"); - memory->create(nb.pairnum_cumsum, natom_max+1, "fitpod:nb_pairnum_cumsum"); - memory->create(nb.pairlist, np, "fitpod:nb_pairlist"); - - nb.natom_max = natom_max; + nb.natom_max = MAX(nb.natom_max, natom_max); nb.sze = nelements*nelements; - nb.sza = na; - nb.szy = ny; - nb.szp = np; + nb.sza = MAX(nb.sza, na); + nb.szy = MAX(nb.szy, ny); + nb.szp = MAX(nb.szp, np); +} - if (comm->me == 0) - utils::logmesg(lmp,"**************** Begin of Memory Allocation ****************\n"); +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"); +} - int szd = 0, szi=0, szsnap=0; +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, "**************** 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", desc.szd); + utils::logmesg(lmp, "size of descriptor matrix: {} x {}\n", nCoeffAll, nCoeffAll); + utils::logmesg(lmp, "**************** End of Memory Allocation ****************\n"); + } +} + +void FitPOD::estimate_memory_fastpod(const datastruct &data) +{ + int dim = 3; + 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]; @@ -944,57 +1173,17 @@ void FitPOD::allocate_memory(const datastruct &data) 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); - } + Nijmax = MAX(Nijmax, Nij); } - szd = MAX(szsnap, szd); - szd = MAX(natom_max*(nd1+nd2+nd3+nd4) + szd, dim*natom_max*(nd-nd1-nd2-nd3-nd4)); - szd = dim*natom_max*(nd1+nd2+nd3+nd4) + szd; - - // gdd includes linear descriptors derivatives, quadratic descriptors derivatives and temporary memory - - memory->create(desc.gdd, szd, "fitpod:desc_gdd"); - memory->create(desc.tmpint, szi, "fitpod:desc_tmpint"); - desc.szd = szd; - desc.szi = szi; - - if (comm->me == 0) { - utils::logmesg(lmp, "maximum number of atoms in periodic domain: {}\n", natom_max); - utils::logmesg(lmp, "maximum number of atoms in extended domain: {}\n", nb.sza); - utils::logmesg(lmp, "maximum number of neighbors in extended domain: {}\n", nb.szp); - utils::logmesg(lmp, "size of double memory: {}\n", szd); - utils::logmesg(lmp, "size of int memory: {}\n", szi); - utils::logmesg(lmp, "size of descriptor matrix: {} x {}\n", nd, nd); - utils::logmesg(lmp, "**************** End of Memory Allocation ****************\n"); - } + desc.szd = MAX(desc.szd, 3*Nijmax*fastpodptr->nCoeffAll); } -void FitPOD::linear_descriptors(const datastruct &data, int ci) +void FitPOD::local_descriptors_fastpod(const datastruct &data, int ci) { int dim = 3; - int nd1 = podptr->pod.nd1; - int nd2 = podptr->pod.nd2; - int nd3 = podptr->pod.nd3; - int nd4 = podptr->pod.nd4; - int nd1234 = nd1+nd2+nd3+nd4; - int *pbc = podptr->pod.pbc; - double rcut = podptr->pod.rcut; + int *pbc = fastpodptr->pbc; + double rcut = fastpodptr->rcut; int natom = data.num_atom[ci]; int natom_cumsum = data.num_atom_cumsum[ci]; @@ -1006,162 +1195,268 @@ void FitPOD::linear_descriptors(const datastruct &data, int ci) 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; npod.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; nProj[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; ime == 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,15 +1464,15 @@ 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 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 we = data.we[ci]; + double wf = data.wf[ci]; double we2 = (we*we)*(normconst*normconst); double wf2 = (wf*wf); @@ -1188,7 +1483,7 @@ void FitPOD::least_squares_matrix(const datastruct &data, int ci) // 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 +1491,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++) + 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) @@ -1227,16 +1521,17 @@ void FitPOD::least_squares_fit(const datastruct &data) 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,72 +1539,62 @@ 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]; @@ -1320,26 +1605,11 @@ double FitPOD::energyforce_calculation(double *force, double *coeff, const datas 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; } @@ -1376,7 +1646,7 @@ void FitPOD::print_analysis(const datastruct &data, double *outarray, double *er 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; @@ -1384,6 +1654,10 @@ void FitPOD::print_analysis(const datastruct &data, double *outarray, double *er 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]); + + 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"); @@ -1421,6 +1695,7 @@ 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); @@ -1440,21 +1715,8 @@ void FitPOD::error_analysis(const datastruct &data, double *coeff) 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; jme == 0) @@ -1475,13 +1737,7 @@ void FitPOD::error_analysis(const datastruct &data, double *coeff) int natom = data.num_atom[ci]; int nforce = dim*natom; - for (int j=nd1234; j<(nd1234+nd22+nd23+nd24+nd33+nd34+nd44); j++) - newcoeff[j] = coeff[j]/(natom); - - for (int j=(nd1234+nd22+nd23+nd24+nd33+nd34+nd44); jnprocs) == 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"; @@ -1606,46 +1861,10 @@ 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*/ ) -{ - 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) @@ -1817,3 +2036,117 @@ void FitPOD::triclinic_lattice_conversion(double *a, double *b, double *c, doubl b[0] = bx; b[1] = by; b[2] = 0.0; c[0] = cx; c[1] = cy; c[2] = cz; } + +// Function to calculate Euclidean distance between two points in N-dimensional space +double FitPOD::squareDistance(const double *a, const double *b, int DIMENSIONS) { + double sum = 0.0; + for (int i = 0; i < DIMENSIONS; i++) { + sum += (a[i] - b[i]) * (a[i] - b[i]); + } + return sum; +} + +// Function to assign points to the nearest cluster +void FitPOD::assignPointsToClusters(double *points, double *centroids, int *assignments, int *clusterSizes, int NUM_POINTS, int NUM_CLUSTERS, int DIMENSIONS) { + // Initialize clusterSizes to zero + for (int i = 0; i < NUM_CLUSTERS; i++) { + clusterSizes[i] = 0; + } + + for (int i = 0; i < NUM_POINTS; i++) { + double minDist = squareDistance(&points[i * DIMENSIONS], ¢roids[0], DIMENSIONS); + int closestCluster = 0; + for (int j = 1; j < NUM_CLUSTERS; j++) { + double dist = squareDistance(&points[i * DIMENSIONS], ¢roids[j * DIMENSIONS], DIMENSIONS); + if (dist < minDist) { + minDist = dist; + closestCluster = j; + } + } + assignments[i] = closestCluster; + clusterSizes[closestCluster]++; + } +} + +// Function to update centroids based on point assignments +void FitPOD::updateCentroids(double *points, double *centroids, int *assignments, int *clusterSizes, int NUM_POINTS, int NUM_CLUSTERS, int DIMENSIONS) { + // Reset centroids for recalculation + for (int i = 0; i < NUM_CLUSTERS * DIMENSIONS; i++) { + centroids[i] = 0.0; + } + + // Accumulate sum of points in each cluster + for (int i = 0; i < NUM_POINTS; i++) { + int cluster = assignments[i]; + for (int j = 0; j < DIMENSIONS; j++) { + centroids[cluster * DIMENSIONS + j] += points[i * DIMENSIONS + j]; + } + } + + // Use MPI_Allreduce to sum up the local sums and cluster sizes across all processes + MPI_Allreduce(MPI_IN_PLACE, centroids, NUM_CLUSTERS * DIMENSIONS, MPI_DOUBLE, MPI_SUM, world); + MPI_Allreduce(MPI_IN_PLACE, clusterSizes, NUM_CLUSTERS, MPI_INT, MPI_SUM, world); + + // Divide by number of points to get the mean (centroid) + for (int i = 0; i < NUM_CLUSTERS; i++) { + if (clusterSizes[i] != 0) { + for (int j = 0; j < DIMENSIONS; j++) { + centroids[i * DIMENSIONS + j] /= clusterSizes[i]; + } + } + } +} + +// Function for K-means clustering +void FitPOD::KmeansClustering(double *points, double *centroids, int *assignments, int *clusterSizes, int NUM_POINTS, int NUM_CLUSTERS, int DIMENSIONS, int MAX_ITER) { + for (int iter = 0; iter < MAX_ITER; iter++) { + assignPointsToClusters(points, centroids, assignments, clusterSizes, NUM_POINTS, NUM_CLUSTERS, DIMENSIONS); + updateCentroids(points, centroids, assignments, clusterSizes, NUM_POINTS, NUM_CLUSTERS, DIMENSIONS); + } +} + +void FitPOD::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 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..96e726e0af 100644 --- a/src/ML-POD/fitpod_command.h +++ b/src/ML-POD/fitpod_command.h @@ -11,6 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ + #ifdef COMMAND_CLASS // clang-format off CommandStyle(fitpod,FitPOD); @@ -21,22 +22,25 @@ CommandStyle(fitpod,FitPOD); #define LMP_FITPOD_COMMAND_H #include "command.h" +#include namespace LAMMPS_NS { class FitPOD : public Command { - public: +public: FitPOD(LAMMPS *); void command(int, char **) override; - private: +private: struct datastruct { std::string file_format = "extxyz"; std::string file_extension = "xyz"; 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 group_weight_type = "global"; std::vector num_atom; std::vector num_atom_cumsum; @@ -48,12 +52,15 @@ class FitPOD : public Command { int num_atom_max; int num_config_sum; - double *lattice; - double *energy; - double *stress; - double *position; - double *force; - int *atomtype; + double *lattice=nullptr; + double *energy=nullptr; + double *stress=nullptr; + double *position=nullptr; + double *force=nullptr; + int *atomtype=nullptr; + // Group weights will have same size as energy. + double *we=nullptr; + double *wf=nullptr; int training = 1; int normalizeenergy = 1; @@ -65,6 +72,9 @@ class FitPOD : public Command { int precision = 8; double fraction = 1.0; + std::unordered_map we_map; + std::unordered_map wf_map; + double fitting_weights[12] = {100.0, 1.0, 0.0, 1, 1, 0, 0, 1, 1, 1, 1, 1e-10}; void copydatainfo(datastruct &data) const @@ -84,48 +94,52 @@ class FitPOD : public Command { data.precision = precision; data.training = training; data.normalizeenergy = normalizeenergy; - for (int i = 0; i < 12; i++) data.fitting_weights[i] = fitting_weights[i]; + for (int i = 0; i < 12; i++) + data.fitting_weights[i] = fitting_weights[i]; + data.we_map = we_map; + data.wf_map = wf_map; } }; struct neighborstruct { - int *alist; - int *pairnum; - int *pairnum_cumsum; - int *pairlist; - double *y; + int *alist=nullptr; + int *pairnum=nullptr; + int *pairnum_cumsum=nullptr; + int *pairlist=nullptr; + double *y=nullptr; - int natom; - int nalist; - int natom_max; - int sze; - int sza; - int szy; - int szp; + //int natom; + //int nalist; + int natom_max = 0; + int sze = 0; + int sza = 0; + int szy = 0; + int szp = 0; }; struct descriptorstruct { - double *gd; // global descriptors - double *gdd; // derivatives of global descriptors and peratom descriptors - double *A; // least-square matrix for all descriptors - double *b; // least-square vector for all descriptors - double *c; // coefficents of descriptors - int *tmpint; - int szd; - int szi; + double *bd=nullptr; // base descriptors + double *pd=nullptr; // multi-environment descriptors (probabilities) + double *gd=nullptr; // global descriptors + double *gdd=nullptr; // derivatives of global descriptors and peratom descriptors + double *A=nullptr; // least-square matrix for all descriptors + double *b=nullptr; // least-square vector for all descriptors + double *c=nullptr; // coefficents of descriptors + int szd = 0; + int nCoeffAll = 0; // number of global descriptors + int nClusters = 0; // number of environment clusters }; + int save_descriptors = 0; + int compute_descriptors = 0; 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,18 +158,26 @@ 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 &); - 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); + int read_data_file(double *fitting_weights, std::string &file_format, 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); + 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 *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); @@ -166,18 +188,21 @@ class FitPOD : public Command { int podneighborlist(int *neighlist, int *numneigh, double *r, double rcutsq, int nx, int N, int dim); int podfullneighborlist(double *y, int *alist, int *neighlist, int *numneigh, int *numneighsum, - double *x, double *a1, double *a2, double *a3, double rcut, int *pbc, - int nx); - void allocate_memory(const datastruct &data); - void linear_descriptors(const datastruct &data, int ci); - void quadratic_descriptors(const datastruct &data, int ci); - void cubic_descriptors(const datastruct &data, int ci); + double *x, double *a1, double *a2, double *a3, double rcut, int *pbc, int nx); + 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 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..c41de91e9e 100644 --- a/src/ML-POD/pair_pod.h +++ b/src/ML-POD/pair_pod.h @@ -25,7 +25,7 @@ PairStyle(pod,PairPOD); namespace LAMMPS_NS { class PairPOD : public Pair { - public: +public: PairPOD(class LAMMPS *); ~PairPOD() override; void compute(int, int) override; @@ -36,42 +36,134 @@ 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); - 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 + 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); - class MLPOD *podptr; + void savematrix2binfile(std::string filename, double *A, int nrows, int ncols); + void saveintmatrix2binfile(std::string filename, int *A, int nrows, int ncols); + void savedatafordebugging(); - // temporary arrays for computation blocks +protected: + class EAPOD *fastpodptr; + virtual void allocate(); + void grow_atoms(int Ni); + void grow_pairs(int Nij); + + int atomBlockSize; // size of each atom block + int nAtomBlocks; // number of atoms blocks + int atomBlocks[101]; // atom 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) + + 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 *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) + 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/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 ...