mirror of https://github.com/lammps/lammps.git
derived class of sw
This commit is contained in:
parent
597054edf3
commit
8556b71949
|
@ -0,0 +1,103 @@
|
|||
.. index:: pair_style sw/mod
|
||||
|
||||
pair_style sw/mod command
|
||||
=====================
|
||||
|
||||
Syntax
|
||||
""""""
|
||||
|
||||
.. code-block:: LAMMPS
|
||||
|
||||
pair_style sw/mod
|
||||
|
||||
Examples
|
||||
""""""""
|
||||
|
||||
.. code-block:: LAMMPS
|
||||
|
||||
pair_style sw/mod
|
||||
pair_coeff * * tmd.sw.mod Mo S S
|
||||
|
||||
Description
|
||||
"""""""""""
|
||||
|
||||
The *sw/mod* style computes the energy E of a system of atoms, whose
|
||||
formula is the same as the Stillinger-Weber potential :doc:`pair_style sw <pair_sw>`.
|
||||
The only modification is in the three-body term, where
|
||||
:math:`\delta = \cos \theta_{ijk} - \cos \theta_{0ijk}`
|
||||
is modified with the following function:
|
||||
|
||||
.. math::
|
||||
|
||||
g_C(\delta) & = \left\{ \begin{array} {r@{\quad:\quad}l}
|
||||
1 & \delta < \delta_1 \\
|
||||
\frac{1}{2} + \frac{1}{2} \cos \left( \pi \frac{\delta-\delta_1}{\delta_2 - \delta_1} \right) &
|
||||
\delta_1 < \delta < \delta_2 \\
|
||||
0 & \delta > \delta_2
|
||||
\end{array} \right. \\
|
||||
|
||||
|
||||
This potential is designed for simulations of materials when
|
||||
distinguishing three-body angles are necessary, such as borophene
|
||||
and transition metal dichalcogenide, which cannot be described
|
||||
by the original code for the Stillinger-Weber potential. Validation,
|
||||
benchmark tests, and applications of the *modify* keyword can be found in
|
||||
:ref:`(Jiang_1) <Jiang1>` and :ref:`(Jiang_2) <Jiang2>`.
|
||||
|
||||
----------
|
||||
|
||||
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 as
|
||||
described above from values in the potential file.
|
||||
|
||||
This pair style does not support the :doc:`pair_modify <pair_modify>`
|
||||
shift, table, and tail options.
|
||||
|
||||
This pair style does not write its information to :doc:`binary restart files <restart>`, 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 <run_style>` command. It does not support the
|
||||
*inner*, *middle*, *outer* keywords.
|
||||
|
||||
----------
|
||||
|
||||
Restrictions
|
||||
""""""""""""
|
||||
|
||||
This pair style is part of the MANYBODY package. It is only enabled
|
||||
if LAMMPS was built with that package. See the :doc:`Build package <Build_package>` page for more info.
|
||||
|
||||
This pair style requires the :doc:`newton <newton>` setting to be "on"
|
||||
for pair interactions.
|
||||
|
||||
The Stillinger-Weber potential files provided with LAMMPS (see the
|
||||
potentials directory) are parameterized for metal :doc:`units <units>`.
|
||||
You can use the SW potential with any LAMMPS units, but you would need
|
||||
to create your own SW potential file with coefficients listed in the
|
||||
appropriate units if your simulation does not use "metal" units.
|
||||
|
||||
Related commands
|
||||
""""""""""""""""
|
||||
:doc:`pair_coeff <pair_coeff>`
|
||||
|
||||
:doc:`pair_style sw <pair_sw>`
|
||||
|
||||
Default
|
||||
"""""""
|
||||
|
||||
none
|
||||
|
||||
----------
|
||||
|
||||
.. _Jiang1:
|
||||
|
||||
**(Jiang_1)** J.-W. Jiang, Nanotechnology 26, 315706 (2015).
|
||||
|
||||
.. _Jiang2:
|
||||
|
||||
**(Jiang_2)** J.-W. Jiang, Acta Mech. Solida. Sin 32, 17 (2019).
|
|
@ -1,20 +1,17 @@
|
|||
# bilayer MoS2
|
||||
# monolayer MoS2
|
||||
units metal
|
||||
boundary p p f
|
||||
processors * * 1
|
||||
|
||||
atom_style full
|
||||
read_data ./single_layer_MoS2.data
|
||||
read_data single_layer_MoS2.data
|
||||
|
||||
variable mS equal 32.065 # mass of sulphur atom , uint: a.u.=1.66X10^(-27)kg
|
||||
variable mMo equal 95.94 # mass of molebdenum atom , uint: a.u.=1.66X10^(-27)kg
|
||||
|
||||
mass * ${mS}
|
||||
mass 1 ${mMo}
|
||||
mass * 32.065 # mass of sulphur atom , uint: a.u.=1.66X10^(-27)kg
|
||||
mass 1 95.94 # mass of molebdenum atom , uint: a.u.=1.66X10^(-27)kg
|
||||
|
||||
########################## Define potentials ################################
|
||||
pair_style sw modify 1
|
||||
pair_coeff * * tmd.sw Mo S S
|
||||
pair_style sw/mod
|
||||
pair_coeff * * tmd.sw.mod Mo S S
|
||||
#########################################################################
|
||||
|
||||
### Simulation settings ####
|
||||
|
|
|
@ -0,0 +1,143 @@
|
|||
# DATE: 2018-03-26 UNITS: metal CONTRIBUTOR: Jin-Wu Jiang jwjiang5918@hotmail.com
|
||||
# CITATION: J.-W. Jiang, Acta Mech. Solida. Sin 32, 17 (2019).
|
||||
# The Stillinger-Weber parameters, for transition-metal dichalcogenide (TMD) lateral heterostructures.
|
||||
# M = Mo, W; X = S, Se, Te
|
||||
|
||||
# these entries are in LAMMPS "metal" units:
|
||||
# epsilon = eV; sigma = Angstroms
|
||||
# other quantities are unitless
|
||||
|
||||
# format of a single entry (one or more lines):
|
||||
# element 1, element 2, element 3,
|
||||
# epsilon, sigma, a, lambda, gamma, costheta0, A, B, p, q, tol
|
||||
|
||||
# M-X-X terms
|
||||
Mo S S 1.000 1.252 2.523 67.883 1.000 0.143 6.918 7.223 4 0 0.0
|
||||
Mo Se Se 1.000 0.913 3.672 32.526 1.000 0.143 5.737 27.084 4 0 0.0
|
||||
Mo Te Te 1.000 0.880 4.097 23.705 1.000 0.143 5.086 40.810 4 0 0.0
|
||||
W S S 1.000 0.889 3.558 37.687 1.000 0.143 5.664 24.525 4 0 0.0
|
||||
W Se Se 1.000 0.706 4.689 25.607 1.000 0.143 5.476 65.662 4 0 0.0
|
||||
W Te Te 1.000 0.778 4.632 21.313 1.000 0.143 4.326 62.148 4 0 0.0
|
||||
# X-M-M terms
|
||||
S Mo Mo 1.000 1.252 2.523 62.449 1.000 0.143 6.918 7.223 4 0 0.0
|
||||
S W W 1.000 0.889 3.558 33.553 1.000 0.143 5.664 24.525 4 0 0.0
|
||||
Se Mo Mo 1.000 0.913 3.672 27.079 1.000 0.143 5.737 27.084 4 0 0.0
|
||||
Se W W 1.000 0.706 4.689 23.218 1.000 0.143 5.476 65.662 4 0 0.0
|
||||
Te Mo Mo 1.000 0.880 4.097 20.029 1.000 0.143 5.086 40.810 4 0 0.0
|
||||
Te W W 1.000 0.778 4.632 17.370 1.000 0.143 4.326 62.148 4 0 0.0
|
||||
# M-X1-X2 terms
|
||||
Mo S Se 1.000 0.000 0.000 46.989 1.000 0.143 0.000 0.000 4 0 0.0
|
||||
Mo S Te 1.000 0.000 0.000 40.114 1.000 0.143 0.000 0.000 4 0 0.0
|
||||
Mo Se S 1.000 0.000 0.000 46.989 1.000 0.143 0.000 0.000 4 0 0.0
|
||||
Mo Se Te 1.000 0.000 0.000 27.767 1.000 0.143 0.000 0.000 4 0 0.0
|
||||
Mo Te S 1.000 0.000 0.000 40.114 1.000 0.143 0.000 0.000 4 0 0.0
|
||||
Mo Te Se 1.000 0.000 0.000 27.767 1.000 0.143 0.000 0.000 4 0 0.0
|
||||
W S Se 1.000 0.000 0.000 31.065 1.000 0.143 0.000 0.000 4 0 0.0
|
||||
W S Te 1.000 0.000 0.000 28.341 1.000 0.143 0.000 0.000 4 0 0.0
|
||||
W Se S 1.000 0.000 0.000 31.065 1.000 0.143 0.000 0.000 4 0 0.0
|
||||
W Se Te 1.000 0.000 0.000 23.362 1.000 0.143 0.000 0.000 4 0 0.0
|
||||
W Te S 1.000 0.000 0.000 28.341 1.000 0.143 0.000 0.000 4 0 0.0
|
||||
W Te Se 1.000 0.000 0.000 23.362 1.000 0.143 0.000 0.000 4 0 0.0
|
||||
# X-M1-M2 terms
|
||||
S Mo W 1.000 0.000 0.000 45.775 1.000 0.143 0.000 0.000 4 0 0.0
|
||||
S W Mo 1.000 0.000 0.000 45.775 1.000 0.143 0.000 0.000 4 0 0.0
|
||||
Se Mo W 1.000 0.000 0.000 25.074 1.000 0.143 0.000 0.000 4 0 0.0
|
||||
Se W Mo 1.000 0.000 0.000 25.074 1.000 0.143 0.000 0.000 4 0 0.0
|
||||
Te Mo W 1.000 0.000 0.000 18.652 1.000 0.143 0.000 0.000 4 0 0.0
|
||||
Te W Mo 1.000 0.000 0.000 18.652 1.000 0.143 0.000 0.000 4 0 0.0
|
||||
# zero terms
|
||||
Mo Mo Mo 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
Mo Mo W 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
Mo Mo S 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
Mo Mo Se 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
Mo Mo Te 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
Mo W Mo 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
Mo W W 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
Mo W S 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
Mo W Se 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
Mo W Te 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
Mo S Mo 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
Mo S W 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
Mo Se Mo 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
Mo Se W 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
Mo Te Mo 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
Mo Te W 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
W Mo Mo 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
W Mo W 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
W Mo S 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
W Mo Se 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
W Mo Te 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
W W Mo 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
W W W 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
W W S 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
W W Se 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
W W Te 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
W S Mo 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
W S W 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
W Se Mo 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
W Se W 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
W Te Mo 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
W Te W 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
S Mo S 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
S Mo Se 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
S Mo Te 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
S W S 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
S W Se 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
S W Te 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
S S Mo 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
S S W 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
S S S 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
S S Se 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
S S Te 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
S Se Mo 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
S Se W 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
S Se S 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
S Se Se 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
S Se Te 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
S Te Mo 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
S Te W 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
S Te S 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
S Te Se 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
S Te Te 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
Se Mo S 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
Se Mo Se 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
Se Mo Te 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
Se W S 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
Se W Se 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
Se W Te 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
Se S Mo 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
Se S W 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
Se S S 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
Se S Se 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
Se S Te 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
Se Se Mo 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
Se Se W 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
Se Se S 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
Se Se Se 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
Se Se Te 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
Se Te Mo 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
Se Te W 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
Se Te S 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
Se Te Se 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
Se Te Te 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
Te Mo S 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
Te Mo Se 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
Te Mo Te 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
Te W S 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
Te W Se 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
Te W Te 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
Te S Mo 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
Te S W 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
Te S S 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
Te S Se 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
Te S Te 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
Te Se Mo 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
Te Se W 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
Te Se S 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
Te Se Se 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
Te Se Te 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
Te Te Mo 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
Te Te W 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
Te Te S 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
Te Te Se 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
||||
Te Te Te 0.000 1.000 1.000 1.000 1.000 0.143 1.000 1.000 4 0 0.0
|
|
@ -28,19 +28,17 @@
|
|||
#include "neighbor.h"
|
||||
#include "potential_file_reader.h"
|
||||
#include "tokenizer.h"
|
||||
#include "math_const.h"
|
||||
|
||||
#include <cmath>
|
||||
#include <cstring>
|
||||
|
||||
using namespace LAMMPS_NS;
|
||||
using namespace MathConst;
|
||||
|
||||
#define DELTA 4
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
||||
PairSW::PairSW(LAMMPS *lmp) : Pair(lmp)
|
||||
PairSW::PairSW(LAMMPS *lmp) : Pair(lmp), variant(SW)
|
||||
{
|
||||
single_enable = 0;
|
||||
restartinfo = 0;
|
||||
|
@ -233,24 +231,9 @@ void PairSW::allocate()
|
|||
global settings
|
||||
------------------------------------------------------------------------- */
|
||||
|
||||
void PairSW::settings(int narg, char **arg)
|
||||
void PairSW::settings(int narg, char **/*arg*/)
|
||||
{
|
||||
//if (narg != 0) error->all(FLERR,"Illegal pair_style command");
|
||||
// default values
|
||||
|
||||
modify_flag = 0;
|
||||
|
||||
// process optional keywords
|
||||
|
||||
int iarg = 0;
|
||||
|
||||
while (iarg < narg) {
|
||||
if (strcmp(arg[iarg],"modify") == 0) {
|
||||
if (iarg+2 > narg) error->all(FLERR,"Illegal pair_style command");
|
||||
modify_flag = utils::numeric(FLERR,arg[iarg+1],false,lmp);
|
||||
iarg += 2;
|
||||
} else error->all(FLERR,"Illegal pair_style command");
|
||||
}
|
||||
if (narg != 0) error->all(FLERR,"Illegal pair_style command");
|
||||
}
|
||||
|
||||
/* ----------------------------------------------------------------------
|
||||
|
@ -309,8 +292,22 @@ void PairSW::read_file(char *file)
|
|||
// open file on proc 0
|
||||
|
||||
if (comm->me == 0) {
|
||||
PotentialFileReader reader(lmp, file, "sw", unit_convert_flag);
|
||||
char *line;
|
||||
std::string potential_name;
|
||||
switch (variant) {
|
||||
case SW:
|
||||
potential_name = "sw";
|
||||
break;
|
||||
|
||||
case SW_MOD:
|
||||
potential_name = "sw/mod";
|
||||
break;
|
||||
|
||||
default:
|
||||
error->one(FLERR,"Unknown SW style variant {}",variant);
|
||||
}
|
||||
|
||||
PotentialFileReader reader(lmp, file, potential_name, unit_convert_flag);
|
||||
char * line;
|
||||
|
||||
// transparently convert units for supported conversions
|
||||
|
||||
|
@ -345,7 +342,8 @@ void PairSW::read_file(char *file)
|
|||
|
||||
if (nparams == maxparam) {
|
||||
maxparam += DELTA;
|
||||
params = (Param *) memory->srealloc(params,maxparam*sizeof(Param),"pair:params");
|
||||
params = (Param *) memory->srealloc(params,maxparam*sizeof(Param),
|
||||
"pair:params");
|
||||
|
||||
// make certain all addional allocated storage is initialized
|
||||
// to avoid false positives when checking with valgrind
|
||||
|
@ -502,7 +500,7 @@ void PairSW::threebody(Param *paramij, Param *paramik, Param *paramijk,
|
|||
double r1,rinvsq1,rainv1,gsrainv1,gsrainvsq1,expgsrainv1;
|
||||
double r2,rinvsq2,rainv2,gsrainv2,gsrainvsq2,expgsrainv2;
|
||||
double rinv12,cs,delcs,delcssq,facexp,facrad,frad1,frad2;
|
||||
double facang,facang12,csfacang,csfac1,csfac2,factor;
|
||||
double facang,facang12,csfacang,csfac1,csfac2;
|
||||
|
||||
r1 = sqrt(rsq1);
|
||||
rinvsq1 = 1.0/rsq1;
|
||||
|
@ -521,14 +519,6 @@ void PairSW::threebody(Param *paramij, Param *paramik, Param *paramijk,
|
|||
rinv12 = 1.0/(r1*r2);
|
||||
cs = (delr1[0]*delr2[0] + delr1[1]*delr2[1] + delr1[2]*delr2[2]) * rinv12;
|
||||
delcs = cs - paramijk->costheta;
|
||||
// Modification
|
||||
if(modify_flag) {
|
||||
if(fabs(delcs) >= 0.35) delcs = 0.0;
|
||||
else if(fabs(delcs) < 0.35 && fabs(delcs) > 0.25) {
|
||||
factor = 0.5 + 0.5*cos(MY_PI*(delcs-0.25)/(0.35-0.25));
|
||||
delcs *= factor;
|
||||
}
|
||||
}
|
||||
delcssq = delcs*delcs;
|
||||
|
||||
facexp = expgsrainv1*expgsrainv2;
|
||||
|
|
|
@ -36,6 +36,8 @@ class PairSW : public Pair {
|
|||
|
||||
static constexpr int NPARAMS_PER_LINE = 14;
|
||||
|
||||
enum { SW, SW_MOD }; // for telling class variants apart in shared code
|
||||
|
||||
struct Param {
|
||||
double epsilon, sigma;
|
||||
double littlea, lambda, gamma, costheta;
|
||||
|
@ -49,13 +51,12 @@ class PairSW : public Pair {
|
|||
};
|
||||
|
||||
protected:
|
||||
int variant;
|
||||
double cutmax; // max cutoff for all elements
|
||||
Param *params; // parameter set for an I-J-K interaction
|
||||
int maxshort; // size of short neighbor list array
|
||||
int *neighshort; // short neighbor list array
|
||||
|
||||
int modify_flag; // flag to turn on/off the modification
|
||||
|
||||
virtual void allocate();
|
||||
void read_file(char *);
|
||||
virtual void setup_params();
|
||||
|
|
|
@ -0,0 +1,96 @@
|
|||
// clang-format off
|
||||
/* ----------------------------------------------------------------------
|
||||
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
|
||||
https://www.lammps.org/, Sandia National Laboratories
|
||||
Steve Plimpton, sjplimp@sandia.gov
|
||||
|
||||
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: Jin-Wu Jiang (SHU) and Wengen Ouyang (WHU)
|
||||
------------------------------------------------------------------------- */
|
||||
|
||||
#include "pair_sw_mod.h"
|
||||
|
||||
#include "math_const.h"
|
||||
|
||||
#include <cmath>
|
||||
#include <cstring>
|
||||
|
||||
using namespace LAMMPS_NS;
|
||||
using namespace MathConst;
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
||||
PairSWMOD::PairSWMOD(LAMMPS *lmp) : PairSW(lmp) {
|
||||
variant = SW_MOD;
|
||||
}
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
||||
void PairSWMOD::threebody(Param *paramij, Param *paramik, Param *paramijk,
|
||||
double rsq1, double rsq2,
|
||||
double *delr1, double *delr2,
|
||||
double *fj, double *fk, int eflag, double &eng)
|
||||
{
|
||||
double r1,rinvsq1,rainv1,gsrainv1,gsrainvsq1,expgsrainv1;
|
||||
double r2,rinvsq2,rainv2,gsrainv2,gsrainvsq2,expgsrainv2;
|
||||
double rinv12,cs,delcs,delcssq,facexp,facrad,frad1,frad2;
|
||||
double facang,facang12,csfacang,csfac1,csfac2,factor;
|
||||
|
||||
r1 = sqrt(rsq1);
|
||||
rinvsq1 = 1.0/rsq1;
|
||||
rainv1 = 1.0/(r1 - paramij->cut);
|
||||
gsrainv1 = paramij->sigma_gamma * rainv1;
|
||||
gsrainvsq1 = gsrainv1*rainv1/r1;
|
||||
expgsrainv1 = exp(gsrainv1);
|
||||
|
||||
r2 = sqrt(rsq2);
|
||||
rinvsq2 = 1.0/rsq2;
|
||||
rainv2 = 1.0/(r2 - paramik->cut);
|
||||
gsrainv2 = paramik->sigma_gamma * rainv2;
|
||||
gsrainvsq2 = gsrainv2*rainv2/r2;
|
||||
expgsrainv2 = exp(gsrainv2);
|
||||
|
||||
rinv12 = 1.0/(r1*r2);
|
||||
cs = (delr1[0]*delr2[0] + delr1[1]*delr2[1] + delr1[2]*delr2[2]) * rinv12;
|
||||
delcs = cs - paramijk->costheta;
|
||||
// Modification to delcs
|
||||
if(fabs(delcs) >= 0.35) delcs = 0.0;
|
||||
else if(fabs(delcs) < 0.35 && fabs(delcs) > 0.25) {
|
||||
factor = 0.5 + 0.5*cos(MY_PI*(delcs-0.25)/(0.35-0.25));
|
||||
delcs *= factor;
|
||||
}
|
||||
delcssq = delcs*delcs;
|
||||
|
||||
facexp = expgsrainv1*expgsrainv2;
|
||||
|
||||
// facrad = sqrt(paramij->lambda_epsilon*paramik->lambda_epsilon) *
|
||||
// facexp*delcssq;
|
||||
|
||||
facrad = paramijk->lambda_epsilon * facexp*delcssq;
|
||||
frad1 = facrad*gsrainvsq1;
|
||||
frad2 = facrad*gsrainvsq2;
|
||||
facang = paramijk->lambda_epsilon2 * facexp*delcs;
|
||||
facang12 = rinv12*facang;
|
||||
csfacang = cs*facang;
|
||||
csfac1 = rinvsq1*csfacang;
|
||||
|
||||
fj[0] = delr1[0]*(frad1+csfac1)-delr2[0]*facang12;
|
||||
fj[1] = delr1[1]*(frad1+csfac1)-delr2[1]*facang12;
|
||||
fj[2] = delr1[2]*(frad1+csfac1)-delr2[2]*facang12;
|
||||
|
||||
csfac2 = rinvsq2*csfacang;
|
||||
|
||||
fk[0] = delr2[0]*(frad2+csfac2)-delr1[0]*facang12;
|
||||
fk[1] = delr2[1]*(frad2+csfac2)-delr1[1]*facang12;
|
||||
fk[2] = delr2[2]*(frad2+csfac2)-delr1[2]*facang12;
|
||||
|
||||
if (eflag) eng = facrad;
|
||||
}
|
|
@ -0,0 +1,90 @@
|
|||
/* -*- c++ -*- ----------------------------------------------------------
|
||||
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
|
||||
https://www.lammps.org/, Sandia National Laboratories
|
||||
Steve Plimpton, sjplimp@sandia.gov
|
||||
|
||||
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(sw/mod,PairSWMOD);
|
||||
// clang-format on
|
||||
#else
|
||||
|
||||
#ifndef LMP_PAIR_SW_MOD_H
|
||||
#define LMP_PAIR_SW_MOD_H
|
||||
|
||||
#include "pair_sw.h"
|
||||
|
||||
namespace LAMMPS_NS {
|
||||
|
||||
class PairSWMOD : public PairSW {
|
||||
public:
|
||||
PairSWMOD(class LAMMPS *);
|
||||
~PairSWMOD() {}
|
||||
|
||||
protected:
|
||||
void threebody(Param *, Param *, Param *, double, double, double *, double *, double *, double *,
|
||||
int, double &);
|
||||
};
|
||||
|
||||
} // namespace LAMMPS_NS
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* ERROR/WARNING messages:
|
||||
|
||||
E: Illegal ... command
|
||||
|
||||
Self-explanatory. Check the input script syntax and compare to the
|
||||
documentation for the command. You can use -echo screen as a
|
||||
command-line option when running LAMMPS to see the offending line.
|
||||
|
||||
E: Incorrect args for pair coefficients
|
||||
|
||||
Self-explanatory. Check the input script or data file.
|
||||
|
||||
E: Pair style Stillinger-Weber requires atom IDs
|
||||
|
||||
This is a requirement to use the SW potential.
|
||||
|
||||
E: Pair style Stillinger-Weber requires newton pair on
|
||||
|
||||
See the newton command. This is a restriction to use the SW
|
||||
potential.
|
||||
|
||||
E: All pair coeffs are not set
|
||||
|
||||
All pair coefficients must be set in the data file or by the
|
||||
pair_coeff command before running a simulation.
|
||||
|
||||
E: Cannot open Stillinger-Weber potential file %s
|
||||
|
||||
The specified SW potential file cannot be opened. Check that the path
|
||||
and name are correct.
|
||||
|
||||
E: Incorrect format in Stillinger-Weber potential file
|
||||
|
||||
Incorrect number of words per line in the potential file.
|
||||
|
||||
E: Illegal Stillinger-Weber parameter
|
||||
|
||||
One or more of the coefficients defined in the potential file is
|
||||
invalid.
|
||||
|
||||
E: Potential file has duplicate entry
|
||||
|
||||
The potential file has more than one entry for the same element.
|
||||
|
||||
E: Potential file is missing an entry
|
||||
|
||||
The potential file does not have a needed entry.
|
||||
|
||||
*/
|
Loading…
Reference in New Issue