rename fix qeqr/reaxff to fix qeq/rel/reaxff
This commit is contained in:
@ -186,7 +186,7 @@ OPT.
|
|||||||
* :doc:`qeq/fire <fix_qeq>`
|
* :doc:`qeq/fire <fix_qeq>`
|
||||||
* :doc:`qeq/point <fix_qeq>`
|
* :doc:`qeq/point <fix_qeq>`
|
||||||
* :doc:`qeq/reaxff (ko) <fix_qeq_reaxff>`
|
* :doc:`qeq/reaxff (ko) <fix_qeq_reaxff>`
|
||||||
* :doc:`qeqr/reaxff <fix_qeqr_reaxff>`
|
* :doc:`qeq/rel/reaxff <fix_qeq_rel_reaxff>`
|
||||||
* :doc:`qeq/shielded <fix_qeq>`
|
* :doc:`qeq/shielded <fix_qeq>`
|
||||||
* :doc:`qeq/slater <fix_qeq>`
|
* :doc:`qeq/slater <fix_qeq>`
|
||||||
* :doc:`qmmm <fix_qmmm>`
|
* :doc:`qmmm <fix_qmmm>`
|
||||||
|
|||||||
@ -365,7 +365,7 @@ accelerated styles exist.
|
|||||||
* :doc:`qeq/fire <fix_qeq>` - charge equilibration via FIRE minimizer
|
* :doc:`qeq/fire <fix_qeq>` - charge equilibration via FIRE minimizer
|
||||||
* :doc:`qeq/point <fix_qeq>` - charge equilibration via point method
|
* :doc:`qeq/point <fix_qeq>` - charge equilibration via point method
|
||||||
* :doc:`qeq/reaxff <fix_qeq_reaxff>` - charge equilibration for ReaxFF potential
|
* :doc:`qeq/reaxff <fix_qeq_reaxff>` - charge equilibration for ReaxFF potential
|
||||||
* :doc:`qeqr/reaxff <fix_qeqr_reaxff>` - charge equilibration for ReaxFF potential with alternate efield implementation
|
* :doc:`qeq/rel/reaxff <fix_qeq_rel_reaxff>` - charge equilibration for ReaxFF potential with alternate efield implementation
|
||||||
* :doc:`qeq/shielded <fix_qeq>` - charge equilibration via shielded method
|
* :doc:`qeq/shielded <fix_qeq>` - charge equilibration via shielded method
|
||||||
* :doc:`qeq/slater <fix_qeq>` - charge equilibration via Slater method
|
* :doc:`qeq/slater <fix_qeq>` - charge equilibration via Slater method
|
||||||
* :doc:`qmmm <fix_qmmm>` - functionality to enable a quantum mechanics/molecular mechanics coupling
|
* :doc:`qmmm <fix_qmmm>` - functionality to enable a quantum mechanics/molecular mechanics coupling
|
||||||
|
|||||||
@ -123,8 +123,10 @@ components in non-periodic directions.
|
|||||||
Related commands
|
Related commands
|
||||||
""""""""""""""""
|
""""""""""""""""
|
||||||
|
|
||||||
:doc:`pair_style reaxff <pair_reaxff>`, :doc:`fix qeq/reaxff <fix_qeq_reaxff>`,
|
:doc:`pair_style reaxff <pair_reaxff>`,
|
||||||
:doc:`fix qtpie/reaxff <fix_qtpie_reaxff>`, :doc:`fix qeqr/reaxff <fix_qeqr_reaxff>`
|
:doc:`fix qeq/reaxff <fix_qeq_reaxff>`,
|
||||||
|
:doc:`fix qtpie/reaxff <fix_qtpie_reaxff>`,
|
||||||
|
:doc:`fix qeq/rel/reaxff <fix_qeq_rel_reaxff>`
|
||||||
|
|
||||||
Default
|
Default
|
||||||
"""""""
|
"""""""
|
||||||
|
|||||||
@ -141,7 +141,7 @@ Related commands
|
|||||||
|
|
||||||
:doc:`pair_style reaxff <pair_reaxff>`, :doc:`fix qeq/shielded <fix_qeq>`,
|
:doc:`pair_style reaxff <pair_reaxff>`, :doc:`fix qeq/shielded <fix_qeq>`,
|
||||||
:doc:`fix acks2/reaxff <fix_acks2_reaxff>`, :doc:`fix qtpie/reaxff <fix_qtpie_reaxff>`,
|
:doc:`fix acks2/reaxff <fix_acks2_reaxff>`, :doc:`fix qtpie/reaxff <fix_qtpie_reaxff>`,
|
||||||
:doc:`fix qeqr/reaxff <fix_qeqr_reaxff>`
|
:doc:`fix qeq/rel/reaxff <fix_qeq_rel_reaxff>`
|
||||||
|
|
||||||
Default
|
Default
|
||||||
"""""""
|
"""""""
|
||||||
|
|||||||
195
doc/src/fix_qeq_rel_reaxff.rst
Normal file
195
doc/src/fix_qeq_rel_reaxff.rst
Normal file
@ -0,0 +1,195 @@
|
|||||||
|
.. index:: fix qaq/rel/reaxff
|
||||||
|
|
||||||
|
fix qeq/rel/reaxff command
|
||||||
|
==========================
|
||||||
|
|
||||||
|
Syntax
|
||||||
|
""""""
|
||||||
|
|
||||||
|
.. code-block:: LAMMPS
|
||||||
|
|
||||||
|
fix ID group-ID qeq/rel/reaxff Nevery cutlo cuthi tolerance params gfile args
|
||||||
|
|
||||||
|
* ID, group-ID are documented in :doc:`fix <fix>` command
|
||||||
|
* qeq/rel/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 qeq/rel/reaxff 1 0.0 10.0 1.0e-6 reaxff exp.qeqr
|
||||||
|
fix 1 all qeq/rel/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 the QEqR method for charge equilibration, which
|
||||||
|
differs from the QEq charge equilibration method :ref:`(Rappe and
|
||||||
|
Goddard) <Rappe4>` only in how external electric fields are accounted
|
||||||
|
for. This fix therefore raises a warning when used without :doc:`fix
|
||||||
|
efield <fix_efield>` since :doc:`fix qeq/reaxff <fix_qeq_reaxff>` should
|
||||||
|
be used without an external electric field. Charges are computed with
|
||||||
|
the QEqR method 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 <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 <pair_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 qeq/rel/reaxff*, which is the
|
||||||
|
same as in :doc:`fix qeq/reaxff <fix_qeq_reaxff>` except for the use of
|
||||||
|
:math:`\chi_{\mathrm{r}i}`, please refer to :ref:`(Aktulga)
|
||||||
|
<qeq-Aktulga3>`. To be explicit, *fix qeq/rel/reaxff* replaces
|
||||||
|
:math:`\chi_k` of eq. 3 in :ref:`(Aktulga) <qeq-Aktulga3>` 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 <pair_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
|
||||||
|
<restart>`. 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 <Howto_output>`.
|
||||||
|
No parameter of this fix can be used with the *start/stop* keywords of
|
||||||
|
the :doc:`run <run>` command.
|
||||||
|
|
||||||
|
This fix is invoked during :doc:`energy minimization <minimize>`.
|
||||||
|
|
||||||
|
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
|
||||||
|
<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 <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 <pair_reaxff>`, :doc:`fix qeq/reaxff <fix_qeq_reaxff>`,
|
||||||
|
:doc:`fix acks2/reaxff <fix_acks2_reaxff>`, :doc:`fix qtpie/reaxff <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).
|
||||||
@ -1,198 +0,0 @@
|
|||||||
.. 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 <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) <Rappe4>` in how external electric fields
|
|
||||||
are accounted for. This fix therefore raises a warning when used without
|
|
||||||
:doc:`fix efield <fix_efield>` informing the user to use
|
|
||||||
:doc:`fix qeq/reaxff <fix_qeq_reaxff>` instead since
|
|
||||||
:doc:`fix qeq/reaxff <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 <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 <pair_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 <fix_qeq_reaxff>` except for the use of
|
|
||||||
:math:`\chi_{\mathrm{r}i}`, please refer to :ref:`(Aktulga) <qeq-Aktulga3>`.
|
|
||||||
To be explicit, `fix qeqr/reaxff` replaces :math:`\chi_k` of eq. 3 in
|
|
||||||
:ref:`(Aktulga) <qeq-Aktulga3>` 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 <pair_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
|
|
||||||
<restart>`. 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 <Howto_output>`.
|
|
||||||
No parameter of this fix can be used with the *start/stop* keywords of
|
|
||||||
the :doc:`run <run>` command.
|
|
||||||
|
|
||||||
This fix is invoked during :doc:`energy minimization <minimize>`.
|
|
||||||
|
|
||||||
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
|
|
||||||
<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 <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 <pair_reaxff>`, :doc:`fix qeq/reaxff <fix_qeq_reaxff>`,
|
|
||||||
:doc:`fix acks2/reaxff <fix_acks2_reaxff>`, :doc:`fix qtpie/reaxff <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).
|
|
||||||
@ -186,7 +186,8 @@ Related commands
|
|||||||
""""""""""""""""
|
""""""""""""""""
|
||||||
|
|
||||||
:doc:`pair_style reaxff <pair_reaxff>`, :doc:`fix qeq/reaxff <fix_qeq_reaxff>`,
|
:doc:`pair_style reaxff <pair_reaxff>`, :doc:`fix qeq/reaxff <fix_qeq_reaxff>`,
|
||||||
:doc:`fix acks2/reaxff <fix_acks2_reaxff>`, :doc:`fix qeqr/reaxff <fix_qeqr_reaxff>`
|
:doc:`fix acks2/reaxff <fix_acks2_reaxff>`,
|
||||||
|
:doc:`fix qeq/rel/reaxff <fix_qeq_rel_reaxff>`
|
||||||
|
|
||||||
Default
|
Default
|
||||||
"""""""
|
"""""""
|
||||||
|
|||||||
4
src/.gitignore
vendored
4
src/.gitignore
vendored
@ -996,8 +996,8 @@
|
|||||||
/fix_qeq_fire.h
|
/fix_qeq_fire.h
|
||||||
/fix_qeq_reaxff.cpp
|
/fix_qeq_reaxff.cpp
|
||||||
/fix_qeq_reaxff.h
|
/fix_qeq_reaxff.h
|
||||||
/fix_qeqr_reaxff.cpp
|
/fix_qeq_rel_reaxff.cpp
|
||||||
/fix_qeqr_reaxff.h
|
/fix_qeq_rel_reaxff.h
|
||||||
/fix_qmmm.cpp
|
/fix_qmmm.cpp
|
||||||
/fix_qmmm.h
|
/fix_qmmm.h
|
||||||
/fix_qtpie_reaxff.cpp
|
/fix_qtpie_reaxff.cpp
|
||||||
|
|||||||
@ -1,4 +1,3 @@
|
|||||||
// clang-format off
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
|
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
|
||||||
https://www.lammps.org/, Sandia National Laboratories
|
https://www.lammps.org/, Sandia National Laboratories
|
||||||
@ -18,7 +17,7 @@
|
|||||||
|
|
||||||
------------------------------------------------------------------------- */
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
#include "fix_qeqr_reaxff.h"
|
#include "fix_qeq_rel_reaxff.h"
|
||||||
|
|
||||||
#include "atom.h"
|
#include "atom.h"
|
||||||
#include "comm.h"
|
#include "comm.h"
|
||||||
@ -40,14 +39,13 @@ static constexpr double ANGSTROM_TO_BOHRRADIUS = 1.8897261259;
|
|||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
FixQEqrReaxFF::FixQEqrReaxFF(LAMMPS *lmp, int narg, char **arg) :
|
FixQEqRelReaxFF::FixQEqRelReaxFF(LAMMPS *lmp, int narg, char **arg) : FixQtpieReaxFF(lmp, narg, arg)
|
||||||
FixQtpieReaxFF(lmp, narg, arg)
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
void FixQEqrReaxFF::calc_chi_eff()
|
void FixQEqRelReaxFF::calc_chi_eff()
|
||||||
{
|
{
|
||||||
memset(&chi_eff[0], 0, atom->nmax * sizeof(double));
|
memset(&chi_eff[0], 0, atom->nmax * sizeof(double));
|
||||||
|
|
||||||
@ -60,8 +58,9 @@ void FixQEqrReaxFF::calc_chi_eff()
|
|||||||
// check ghost atoms are stored up to the distance cutoff for overlap integrals
|
// check ghost atoms are stored up to the distance cutoff for overlap integrals
|
||||||
const double comm_cutoff = MAX(neighbor->cutneighmax, comm->cutghostuser);
|
const double comm_cutoff = MAX(neighbor->cutneighmax, comm->cutghostuser);
|
||||||
if (comm_cutoff < dist_cutoff / ANGSTROM_TO_BOHRRADIUS) {
|
if (comm_cutoff < dist_cutoff / ANGSTROM_TO_BOHRRADIUS) {
|
||||||
error->all(FLERR,"comm cutoff = {} Angstrom is smaller than distance cutoff = {} Angstrom "
|
error->all(FLERR, Error::NOLASTLINE,
|
||||||
"for overlap integrals in {}. Increase comm cutoff with comm_modify",
|
"Comm cutoff {} is smaller than distance cutoff {} for overlap integrals in fix {}. "
|
||||||
|
"Increase accordingly using comm_modify cutoff",
|
||||||
comm_cutoff, dist_cutoff / ANGSTROM_TO_BOHRRADIUS, style);
|
comm_cutoff, dist_cutoff / ANGSTROM_TO_BOHRRADIUS, style);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -70,8 +69,7 @@ void FixQEqrReaxFF::calc_chi_eff()
|
|||||||
const double factor = 1.0 / qe2f;
|
const double factor = 1.0 / qe2f;
|
||||||
|
|
||||||
if (efield) {
|
if (efield) {
|
||||||
if (efield->varflag != FixEfield::CONSTANT)
|
if (efield->varflag != FixEfield::CONSTANT) efield->update_efield_variables();
|
||||||
efield->update_efield_variables();
|
|
||||||
|
|
||||||
// compute chi_eff for each local atom
|
// compute chi_eff for each local atom
|
||||||
for (i = 0; i < nn; i++) {
|
for (i = 0; i < nn; i++) {
|
||||||
@ -109,8 +107,6 @@ void FixQEqrReaxFF::calc_chi_eff()
|
|||||||
chi_eff[i] = sum_n / sum_d;
|
chi_eff[i] = sum_n / sum_d;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for (i = 0; i < nn; i++) {
|
for (i = 0; i < nn; i++) { chi_eff[i] = chi[type[i]]; }
|
||||||
chi_eff[i] = chi[type[i]];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -13,20 +13,20 @@
|
|||||||
|
|
||||||
#ifdef FIX_CLASS
|
#ifdef FIX_CLASS
|
||||||
// clang-format off
|
// clang-format off
|
||||||
FixStyle(qeqr/reaxff,FixQEqrReaxFF);
|
FixStyle(qeq/rel/reaxff,FixQEqRelReaxFF);
|
||||||
// clang-format on
|
// clang-format on
|
||||||
#else
|
#else
|
||||||
|
|
||||||
#ifndef LMP_FIX_QEQR_REAXFF_H
|
#ifndef LMP_FIX_QEQ_REL_REAXFF_H
|
||||||
#define LMP_FIX_QEQR_REAXFF_H
|
#define LMP_FIX_QEQ_REL_REAXFF_H
|
||||||
|
|
||||||
#include "fix_qtpie_reaxff.h"
|
#include "fix_qtpie_reaxff.h"
|
||||||
|
|
||||||
namespace LAMMPS_NS {
|
namespace LAMMPS_NS {
|
||||||
|
|
||||||
class FixQEqrReaxFF : public FixQtpieReaxFF {
|
class FixQEqRelReaxFF : public FixQtpieReaxFF {
|
||||||
public:
|
public:
|
||||||
FixQEqrReaxFF(class LAMMPS *, int, char **);
|
FixQEqRelReaxFF(class LAMMPS *, int, char **);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void calc_chi_eff() override;
|
void calc_chi_eff() override;
|
||||||
Reference in New Issue
Block a user