From 2e98ae9de95e3ae6f45921021ea770472b2e40a0 Mon Sep 17 00:00:00 2001 From: Navraj Lalli Date: Thu, 20 Mar 2025 13:19:50 +0000 Subject: [PATCH] Improve qtpie/reaxff docs and add qeqr/reaxff docs --- doc/src/Commands_fix.rst | 1 + doc/src/fix.rst | 1 + doc/src/fix_acks2_reaxff.rst | 2 +- doc/src/fix_qeq_reaxff.rst | 5 +- doc/src/fix_qeqr_reaxff.rst | 198 ++++++++++++++++++++ doc/src/fix_qtpie_reaxff.rst | 42 +++-- doc/utils/sphinx-config/false_positives.txt | 5 + 7 files changed, 238 insertions(+), 16 deletions(-) create mode 100644 doc/src/fix_qeqr_reaxff.rst diff --git a/doc/src/Commands_fix.rst b/doc/src/Commands_fix.rst index ed9bf6429b..2e91d2ad11 100644 --- a/doc/src/Commands_fix.rst +++ b/doc/src/Commands_fix.rst @@ -186,6 +186,7 @@ OPT. * :doc:`qeq/fire ` * :doc:`qeq/point ` * :doc:`qeq/reaxff (ko) ` + * :doc:`qeqr/reaxff ` * :doc:`qeq/shielded ` * :doc:`qeq/slater ` * :doc:`qmmm ` diff --git a/doc/src/fix.rst b/doc/src/fix.rst index f024fc6974..87d58a0dfb 100644 --- a/doc/src/fix.rst +++ b/doc/src/fix.rst @@ -365,6 +365,7 @@ accelerated styles exist. * :doc:`qeq/fire ` - charge equilibration via FIRE minimizer * :doc:`qeq/point ` - charge equilibration via point method * :doc:`qeq/reaxff ` - charge equilibration for ReaxFF potential +* :doc:`qeqr/reaxff ` - charge equilibration for ReaxFF potential with alternate efield implementation * :doc:`qeq/shielded ` - charge equilibration via shielded method * :doc:`qeq/slater ` - charge equilibration via Slater method * :doc:`qmmm ` - functionality to enable a quantum mechanics/molecular mechanics coupling diff --git a/doc/src/fix_acks2_reaxff.rst b/doc/src/fix_acks2_reaxff.rst index 79a9cf8ea6..32a99eca2f 100644 --- a/doc/src/fix_acks2_reaxff.rst +++ b/doc/src/fix_acks2_reaxff.rst @@ -124,7 +124,7 @@ Related commands """""""""""""""" :doc:`pair_style reaxff `, :doc:`fix qeq/reaxff `, -:doc:`fix qtpi/reaxff ` +:doc:`fix qtpie/reaxff `, :doc:`fix qeqr/reaxff ` Default """"""" diff --git a/doc/src/fix_qeq_reaxff.rst b/doc/src/fix_qeq_reaxff.rst index e1a09c4fc3..c85e079e2b 100644 --- a/doc/src/fix_qeq_reaxff.rst +++ b/doc/src/fix_qeq_reaxff.rst @@ -59,7 +59,7 @@ extracted from the :doc:`pair_style reaxff ` command and the ReaxFF force field file it reads in. If a file name is specified for *params*, then the parameters are taken from the specified file and the file must contain one line for each atom type. The latter -form must be used when performing QeQ with a non-ReaxFF potential. +form must be used when performing QEq with a non-ReaxFF potential. Each line should be formatted as follows: .. parsed-literal:: @@ -140,7 +140,8 @@ Related commands """""""""""""""" :doc:`pair_style reaxff `, :doc:`fix qeq/shielded `, -:doc:`fix acks2/reaxff `, :doc:`fix qtpie/reaxff ` +:doc:`fix acks2/reaxff `, :doc:`fix qtpie/reaxff `, +:doc:`fix qeqr/reaxff ` Default """"""" diff --git a/doc/src/fix_qeqr_reaxff.rst b/doc/src/fix_qeqr_reaxff.rst new file mode 100644 index 0000000000..a89da15e3c --- /dev/null +++ b/doc/src/fix_qeqr_reaxff.rst @@ -0,0 +1,198 @@ +.. index:: fix qeqr/reaxff + +fix qeqr/reaxff command +======================== + +Syntax +"""""" + +.. code-block:: LAMMPS + + fix ID group-ID qeqr/reaxff Nevery cutlo cuthi tolerance params gfile args + +* ID, group-ID are documented in :doc:`fix ` command +* qeqr/reaxff = style name of this fix command +* Nevery = perform QEqR every this many steps +* cutlo,cuthi = lo and hi cutoff for Taper radius +* tolerance = precision to which charges will be equilibrated +* params = reaxff or a filename +* gfile = the name of a file containing Gaussian orbital exponents +* one or more keywords or keyword/value pairs may be appended + + .. parsed-literal:: + + keyword = *scale* or *maxiter* or *nowarn* + *scale* beta = set value of scaling factor *beta* (determines strength of electric polarization) + *maxiter* N = limit the number of iterations to *N* + *nowarn* = do not print a warning message if the maximum number of iterations is reached + +Examples +"""""""" + +.. code-block:: LAMMPS + + fix 1 all qeqr/reaxff 1 0.0 10.0 1.0e-6 reaxff exp.qeqr + fix 1 all qeqr/reaxff 1 0.0 10.0 1.0e-6 params.qeqr exp.qeqr scale 1.5 maxiter 500 nowarn + +Description +""""""""""" + +.. versionadded:: 19Nov2024 + +This fix implements QEqR, which only differs from the QEq charge equilibration +method :ref:`(Rappe and Goddard) ` in how external electric fields +are accounted for. This fix therefore raises a warning when used without +:doc:`fix efield ` informing the user to use +:doc:`fix qeq/reaxff ` instead since +:doc:`fix qeq/reaxff ` +leads to the same charges at slightly reduced computational cost. Charges are +computed with QEqR by minimizing the electrostatic energy of the system in the +same way as the QEq method but where the absolute electronegativity, +:math:`\chi_i`, of each atom in the QEq method is replaced with an effective +electronegativity given by + +.. math:: + \chi_{\mathrm{r}i} = \chi_i + \frac{\sum_{j=1}^{N} \beta(\phi_i - \phi_j) S_{ij}} + {\sum_{m=1}^{N}S_{im}}, + +where :math:`N` is the number of atoms in the system, :math:`\beta` is a scaling +factor, :math:`\phi_i` and :math:`\phi_j` are the electric potentials at the +positions of atoms :math:`i` and :math:`j` due to the external electric field +and :math:`S_{ij}` is the overlap integral between atoms :math:`i` and :math:`j`. +This formulation is advantageous over the method used by +:doc:`fix qeq/reaxff ` to account for an external electric +field in that it permits periodic boundaries in the direction of an external +electric field and in that it does not worsen long-range charge transfer seen +with QEq. + +This fix is typically used in conjunction with the ReaxFF force +field model as implemented in the :doc:`pair_style reaxff ` +command, but it can be used with any potential in LAMMPS, so long as it +defines and uses charges on each atom. For more technical details about the +charge equilibration performed by `fix qeqr/reaxff`, which is the same as in +:doc:`fix qeq/reaxff ` except for the use of +:math:`\chi_{\mathrm{r}i}`, please refer to :ref:`(Aktulga) `. +To be explicit, `fix qeqr/reaxff` replaces :math:`\chi_k` of eq. 3 in +:ref:`(Aktulga) ` with :math:`\chi_{\mathrm{r}k}` when an +external electric field is applied. + +This fix requires the absolute electronegativity, :math:`\chi`, in eV, the +self-Coulomb potential, :math:`\eta`, in eV, and the shielded Coulomb +constant, :math:`\gamma`, in :math:`\AA^{-1}`. If the *params* setting above +is the word "reaxff", then these are extracted from the +:doc:`pair_style reaxff ` command and the ReaxFF force field +file it reads in. If a file name is specified for *params*, then the +parameters are taken from the specified file and the file must contain +one line for each atom type. The latter form must be used when using this +fix with a non-ReaxFF potential. Each line should be formatted as follows, +ensuring that the parameters are given in units of eV, eV, and :math:`\AA^{-1}`, +respectively: + +.. parsed-literal:: + + itype chi eta gamma + +where *itype* is the atom type from 1 to Ntypes. Note that eta is +defined here as twice the eta value in the ReaxFF file. + +The overlap integrals :math:`S_{ij}` +are computed by using normalized 1s Gaussian type orbitals. The Gaussian +orbital exponents, :math:`\alpha`, that are needed to compute the overlap +integrals are taken from the file given by *gfile*. +This file must contain one line for each atom type and provide the Gaussian +orbital exponent for each atom type in units of inverse square Bohr radius. +Each line should be formatted as follows: + +.. parsed-literal:: + + itype alpha + +Empty lines or any text following the pound sign (#) are ignored. An example +*gfile* for a system with two atom types is + +.. parsed-literal:: + + # An example gfile. Exponents are taken from Table 2.2 of Chen, J. (2009). + # Theory and applications of fluctuating-charge models. + # The units of the exponents are 1 / (Bohr radius)^2 . + 1 0.2240 # O + 2 0.5434 # H + +The optional *scale* keyword sets the value of :math:`\beta` in the equation for +:math:`\chi_{\mathrm{r}i}`. The default value is 1.0. + +The optional *maxiter* keyword allows changing the max number +of iterations in the linear solver. The default value is 200. + +The optional *nowarn* keyword silences the warning message printed +when the maximum number of iterations is reached. This can be +useful for comparing serial and parallel results where having the +same fixed number of iterations is desired, which can be achieved +by using a very small tolerance and setting *maxiter* to the desired +number of iterations. + +.. note:: + + In order to solve the self-consistent equations for electronegativity + equalization, LAMMPS imposes the additional constraint that all the + charges in the fix group must add up to zero. The initial charge + assignments should also satisfy this constraint. LAMMPS will print a + warning if that is not the case. + +Restart, fix_modify, output, run start/stop, minimize info +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + +No information about this fix is written to :doc:`binary restart files +`. This fix computes a global scalar (the number of +iterations) and a per-atom vector (the effective electronegativity), which +can be accessed by various :doc:`output commands `. +No parameter of this fix can be used with the *start/stop* keywords of +the :doc:`run ` command. + +This fix is invoked during :doc:`energy minimization `. + +Restrictions +"""""""""""" + +This fix is part of the REAXFF package. It is only enabled if +LAMMPS was built with that package. See the :doc:`Build package +` page for more info. + +This fix does not correctly handle interactions involving multiple +periodic images of the same atom. Hence, it should not be used for +periodic cell dimensions smaller than the non-bonded cutoff radius, +which is typically :math:`10~\AA` for ReaxFF simulations. + +This fix may be used in combination with :doc:`fix efield ` +and will apply the external electric field during charge equilibration, +but there may be only one fix efield instance used and the electric field +must be applied to all atoms in the system. Consequently, `fix efield` must +be used with *group-ID* all and must not be used with the keyword *region*. +Equal-style variables can be used for electric field vector +components without any further settings. Atom-style variables can be used +for spatially-varying electric field vector components, but the resulting +electric potential must be specified as an atom-style variable using +the *potential* keyword for `fix efield`. + +Related commands +"""""""""""""""" + +:doc:`pair_style reaxff `, :doc:`fix qeq/reaxff `, +:doc:`fix acks2/reaxff `, :doc:`fix qtpie/reaxff ` + +Default +""""""" + +scale = 1.0 and maxiter = 200 + +---------- + +.. _Rappe4: + +**(Rappe)** Rappe and Goddard III, Journal of Physical Chemistry, 95, +3358-3363 (1991). + +.. _qeq-Aktulga3: + +**(Aktulga)** Aktulga, Fogarty, Pandit, Grama, Parallel Computing, 38, +245-259 (2012). diff --git a/doc/src/fix_qtpie_reaxff.rst b/doc/src/fix_qtpie_reaxff.rst index e96cbec459..c3277af32c 100644 --- a/doc/src/fix_qtpie_reaxff.rst +++ b/doc/src/fix_qtpie_reaxff.rst @@ -21,8 +21,10 @@ Syntax .. parsed-literal:: - keyword = *maxiter* + keyword = *scale* or *maxiter* or *nowarn* + *scale* beta = set value of scaling factor *beta* (determines strength of electric polarization) *maxiter* N = limit the number of iterations to *N* + *nowarn* = do not print a warning message if the maximum number of iterations is reached Examples """""""" @@ -30,7 +32,7 @@ Examples .. code-block:: LAMMPS fix 1 all qtpie/reaxff 1 0.0 10.0 1.0e-6 reaxff exp.qtpie - fix 1 all qtpie/reaxff 1 0.0 10.0 1.0e-6 params.qtpie exp.qtpie maxiter 500 + fix 1 all qtpie/reaxff 1 0.0 10.0 1.0e-6 params.qtpie exp.qtpie scale 1.5 maxiter 500 nowarn Description """"""""""" @@ -46,7 +48,7 @@ same way as the QEq method but where the absolute electronegativity, electronegativity given by :ref:`(Chen) ` .. math:: - \chi_{\mathrm{eff},i} = \frac{\sum_{j=1}^{N} (\chi_i - \chi_j) S_{ij}} + \tilde{\chi}_{i} = \frac{\sum_{j=1}^{N} (\chi_i - \chi_j) S_{ij}} {\sum_{m=1}^{N}S_{im}}, which acts to penalize long-range charge transfer seen with the QEq charge @@ -61,11 +63,11 @@ electric field by using the effective electronegativity given in :ref:`(Gergs) `: .. math:: - \chi_{\mathrm{eff},i} = \frac{\sum_{j=1}^{N} (\chi_i - \chi_j + \phi_i - \phi_j) S_{ij}} + \tilde{\chi}_{\mathrm{r}i} = \frac{\sum_{j=1}^{N} (\chi_i - \chi_j + \beta(\phi_i - \phi_j)) S_{ij}} {\sum_{m=1}^{N}S_{im}}, -where :math:`\phi_i` and :math:`\phi_j` are the electric -potentials at the positions of atom :math:`i` and :math:`j` +where :math:`\beta` is a scaling factor and :math:`\phi_i` and :math:`\phi_j` +are the electric potentials at the positions of atoms :math:`i` and :math:`j` due to the external electric field. This fix is typically used in conjunction with the ReaxFF force @@ -74,9 +76,12 @@ command, but it can be used with any potential in LAMMPS, so long as it defines and uses charges on each atom. For more technical details about the charge equilibration performed by `fix qtpie/reaxff`, which is the same as in :doc:`fix qeq/reaxff ` except for the use of -:math:`\chi_{\mathrm{eff},i}`, please refer to :ref:`(Aktulga) `. +:math:`\tilde{\chi}_{i}` or :math:`\tilde{\chi}_{\mathrm{r}i}`, +please refer to :ref:`(Aktulga) `. To be explicit, this fix replaces :math:`\chi_k` of eq. 3 in -:ref:`(Aktulga) ` with :math:`\chi_{\mathrm{eff},k}`. +:ref:`(Aktulga) ` with :math:`\tilde{\chi}_{k}` when no external +electric field is applied and with :math:`\tilde{\chi}_{\mathrm{r}k}` when an +external electric field is applied. This fix requires the absolute electronegativity, :math:`\chi`, in eV, the self-Coulomb potential, :math:`\eta`, in eV, and the shielded Coulomb @@ -97,7 +102,7 @@ respectively: where *itype* is the atom type from 1 to Ntypes. Note that eta is defined here as twice the eta value in the ReaxFF file. -The overlap integrals in the equation for :math:`\chi_{\mathrm{eff},i}` +The overlap integrals :math:`S_{ij}` are computed by using normalized 1s Gaussian type orbitals. The Gaussian orbital exponents, :math:`\alpha`, that are needed to compute the overlap integrals are taken from the file given by *gfile*. @@ -120,15 +125,26 @@ Empty lines or any text following the pound sign (#) are ignored. An example 1 0.2240 # O 2 0.5434 # H +The optional *scale* keyword sets the value of :math:`\beta` in the equation for +:math:`\tilde{\chi}_{\mathrm{r}i}`. This keyword only affects the computed charges +when :doc:`fix efield ` is used. The default value is 1.0. + The optional *maxiter* keyword allows changing the max number of iterations in the linear solver. The default value is 200. +The optional *nowarn* keyword silences the warning message printed +when the maximum number of iterations is reached. This can be +useful for comparing serial and parallel results where having the +same fixed number of iterations is desired, which can be achieved +by using a very small tolerance and setting *maxiter* to the desired +number of iterations. + .. note:: In order to solve the self-consistent equations for electronegativity equalization, LAMMPS imposes the additional constraint that all the - charges in the fix group must add up to zero. The initial charge - assignments should also satisfy this constraint. LAMMPS will print a + charges in the fix group must add up to zero. The initial charge + assignments should also satisfy this constraint. LAMMPS will print a warning if that is not the case. Restart, fix_modify, output, run start/stop, minimize info @@ -170,12 +186,12 @@ Related commands """""""""""""""" :doc:`pair_style reaxff `, :doc:`fix qeq/reaxff `, -:doc:`fix acks2/reaxff ` +:doc:`fix acks2/reaxff `, :doc:`fix qeqr/reaxff ` Default """"""" -maxiter 200 +scale = 1.0 and maxiter = 200 ---------- diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index 084f7c0ec1..13f4c3b33d 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -725,6 +725,7 @@ dashpot dat datafile datatype +dataset datums Davidchack Daw @@ -856,6 +857,7 @@ DNi Dobnikar Dobson docenv +docstring Dodds dodgerblue dof @@ -3116,9 +3118,11 @@ qE qeff qelectron qeq +qeqr Qamar QeQ QEq +QEqR qfactor qfile qi @@ -3261,6 +3265,7 @@ resquared REsquared restartfile restartinfo +reStructuredText Restrepo rethrowing Revenga