add pair_style nb3b/screened by Federica Lodesani
This commit is contained in:
@ -221,6 +221,7 @@ OPT.
|
|||||||
* :doc:`multi/lucy <pair_multi_lucy>`
|
* :doc:`multi/lucy <pair_multi_lucy>`
|
||||||
* :doc:`multi/lucy/rx (k) <pair_multi_lucy_rx>`
|
* :doc:`multi/lucy/rx (k) <pair_multi_lucy_rx>`
|
||||||
* :doc:`nb3b/harmonic <pair_nb3b_harmonic>`
|
* :doc:`nb3b/harmonic <pair_nb3b_harmonic>`
|
||||||
|
* :doc:`nb3b/screened <pair_nb3b_screened>`
|
||||||
* :doc:`nm/cut (o) <pair_nm>`
|
* :doc:`nm/cut (o) <pair_nm>`
|
||||||
* :doc:`nm/cut/coul/cut (o) <pair_nm>`
|
* :doc:`nm/cut/coul/cut (o) <pair_nm>`
|
||||||
* :doc:`nm/cut/coul/long (o) <pair_nm>`
|
* :doc:`nm/cut/coul/long (o) <pair_nm>`
|
||||||
|
|||||||
@ -1,14 +1,20 @@
|
|||||||
.. index:: pair_style nb3b/harmonic
|
.. index:: pair_style nb3b/harmonic
|
||||||
|
.. index:: pair_style nb3b/screened
|
||||||
|
|
||||||
pair_style nb3b/harmonic command
|
pair_style nb3b/harmonic command
|
||||||
================================
|
================================
|
||||||
|
|
||||||
|
pair_style nb3b/screened command
|
||||||
|
================================
|
||||||
|
|
||||||
Syntax
|
Syntax
|
||||||
""""""
|
""""""
|
||||||
|
|
||||||
.. code-block:: LAMMPS
|
.. code-block:: LAMMPS
|
||||||
|
|
||||||
pair_style nb3b/harmonic
|
pair_style style
|
||||||
|
|
||||||
|
* style = *nb3b/harmonic* or *nb3b/screened*
|
||||||
|
|
||||||
Examples
|
Examples
|
||||||
""""""""
|
""""""""
|
||||||
@ -18,10 +24,14 @@ Examples
|
|||||||
pair_style nb3b/harmonic
|
pair_style nb3b/harmonic
|
||||||
pair_coeff * * MgOH.nb3bharmonic Mg O H
|
pair_coeff * * MgOH.nb3bharmonic Mg O H
|
||||||
|
|
||||||
|
pair_style nb3b/screened
|
||||||
|
pair_coeff * * PO.nb3b.screened P NULL O
|
||||||
|
pair_coeff * * SiOH.nb3b.screened Si O H
|
||||||
|
|
||||||
Description
|
Description
|
||||||
"""""""""""
|
"""""""""""
|
||||||
|
|
||||||
This pair style computes a non-bonded 3-body harmonic potential for the
|
The pair style *nb3b/harmonic* computes a non-bonded 3-body harmonic potential for the
|
||||||
energy E of a system of atoms as
|
energy E of a system of atoms as
|
||||||
|
|
||||||
.. math::
|
.. math::
|
||||||
@ -33,7 +43,17 @@ prefactor. Note that the usual 1/2 factor is included in *K*\ . The form
|
|||||||
of the potential is identical to that used in angle_style *harmonic*,
|
of the potential is identical to that used in angle_style *harmonic*,
|
||||||
but in this case, the atoms do not need to be explicitly bonded.
|
but in this case, the atoms do not need to be explicitly bonded.
|
||||||
|
|
||||||
Only a single pair_coeff command is used with this style which
|
Style *nb3b/screened* adds an additional exponentially decaying factor to
|
||||||
|
the harmonic term, given by
|
||||||
|
|
||||||
|
.. math::
|
||||||
|
|
||||||
|
E = K (\theta - \theta_0)^2 \exp \left(- \frac{r_{ij}}{\rho_{ij}} - \frac{r_{ik}}{\rho_{ik}} \right)
|
||||||
|
|
||||||
|
where :math:`\rho_ij` and :math:`\rho_ik` are the screening factors along
|
||||||
|
the two bonds. Note that the usual 1/2 factor is included in *K*.
|
||||||
|
|
||||||
|
Only a single pair_coeff command is used with these styles which
|
||||||
specifies a potential file with parameters for specified elements.
|
specifies a potential file with parameters for specified elements.
|
||||||
These are mapped to LAMMPS atom types by specifying N additional
|
These are mapped to LAMMPS atom types by specifying N additional
|
||||||
arguments after the filename in the pair_coeff command, where N is the
|
arguments after the filename in the pair_coeff command, where N is the
|
||||||
@ -61,8 +81,8 @@ type 4 to the C element in the potential file. If a mapping value is
|
|||||||
specified as NULL, the mapping is not performed. This can be used
|
specified as NULL, the mapping is not performed. This can be used
|
||||||
when the potential is used as part of the *hybrid* pair style. The
|
when the potential is used as part of the *hybrid* pair style. The
|
||||||
NULL values are placeholders for atom types that will be used with
|
NULL values are placeholders for atom types that will be used with
|
||||||
other potentials. An example of a pair_coeff command for use with the
|
other potentials. Two examples of pair_coeff command for use with the
|
||||||
*hybrid* pair style is:
|
*hybrid* pair style are:
|
||||||
|
|
||||||
.. code-block:: LAMMPS
|
.. code-block:: LAMMPS
|
||||||
|
|
||||||
|
|||||||
@ -298,6 +298,7 @@ accelerated styles exist.
|
|||||||
* :doc:`multi/lucy <pair_multi_lucy>` - DPD potential with density-dependent force
|
* :doc:`multi/lucy <pair_multi_lucy>` - DPD potential with density-dependent force
|
||||||
* :doc:`multi/lucy/rx <pair_multi_lucy_rx>` - reactive DPD potential with density-dependent force
|
* :doc:`multi/lucy/rx <pair_multi_lucy_rx>` - reactive DPD potential with density-dependent force
|
||||||
* :doc:`nb3b/harmonic <pair_nb3b_harmonic>` - non-bonded 3-body harmonic potential
|
* :doc:`nb3b/harmonic <pair_nb3b_harmonic>` - non-bonded 3-body harmonic potential
|
||||||
|
* :doc:`nb3b/screened <pair_nb3b_screened>` - non-bonded 3-body screened harmonic potential
|
||||||
* :doc:`nm/cut <pair_nm>` - N-M potential
|
* :doc:`nm/cut <pair_nm>` - N-M potential
|
||||||
* :doc:`nm/cut/coul/cut <pair_nm>` - N-M potential with cutoff Coulomb
|
* :doc:`nm/cut/coul/cut <pair_nm>` - N-M potential with cutoff Coulomb
|
||||||
* :doc:`nm/cut/coul/long <pair_nm>` - N-M potential with long-range Coulomb
|
* :doc:`nm/cut/coul/long <pair_nm>` - N-M potential with long-range Coulomb
|
||||||
|
|||||||
1
examples/nb3b/PSiO.nb3b.screened
Symbolic link
1
examples/nb3b/PSiO.nb3b.screened
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../potentials/PSiO.nb3b.screened
|
||||||
41
examples/nb3b/README.nb3b.screened
Normal file
41
examples/nb3b/README.nb3b.screened
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
Additional information for pair style nb3b/screened example.
|
||||||
|
|
||||||
|
This input uses the BMP potential (Bertani, M., Menziani, M. C.,
|
||||||
|
& Pedone, A. (2021). Improved empirical force field for multicomponent
|
||||||
|
oxide glasses and crystals. Physical Review Materials, 5(4), 045602).
|
||||||
|
|
||||||
|
The interatomic potential is obtained by mixing coulombic interactions
|
||||||
|
with other two-body functions (modified Morse and Buckingham), with a
|
||||||
|
three-body interaction (screened harmonic function).
|
||||||
|
|
||||||
|
The modified Morse is introduce with Tables and it is combined with
|
||||||
|
Buckingham and coul/dsf to complete the two-body force field.
|
||||||
|
The three-body interaction is computed with pair style nb3b/screened
|
||||||
|
only for P-O-P angle. With the pair_coeff command the atom types
|
||||||
|
involved in the three-body potential are specified:
|
||||||
|
|
||||||
|
pair_coeff * * nb3b/screened PSiO.nb3b.screened P NULL O
|
||||||
|
|
||||||
|
And they appear in the same order as in the data file:
|
||||||
|
type 1: P;
|
||||||
|
type 2: Na, not involved in the three body so indicated as NULL;
|
||||||
|
type 3: O.
|
||||||
|
|
||||||
|
In the potential file PSiO.nb3b.screened there are the parameters of
|
||||||
|
all permutations of the required atom types. In the example, also
|
||||||
|
parameters for Si permutations appear but they are not employed in
|
||||||
|
the current case.
|
||||||
|
|
||||||
|
# i j k K theta0 rho cutoff
|
||||||
|
O P P 65.0 109.47 1.0 3.3
|
||||||
|
O P Si 120.0 109.47 1.0 0.000
|
||||||
|
O P O 0.000 0.000 1.0 0.000
|
||||||
|
O Si P 120.0 109.47 1.0 0.000
|
||||||
|
O Si Si 25.0 109.47 1.0 3.3
|
||||||
|
(...)
|
||||||
|
|
||||||
|
The rho value must be always higher than 0.0. Cutoff and rho are extracted
|
||||||
|
only from symmetric interactions (e.g. O P P, O Si Si), because of that
|
||||||
|
you do not need to specify those values for the asymmetric interactions
|
||||||
|
(e.g. O P Si and O Si P).
|
||||||
|
|
||||||
14997
examples/nb3b/Table_NP.dat
Normal file
14997
examples/nb3b/Table_NP.dat
Normal file
File diff suppressed because it is too large
Load Diff
6020
examples/nb3b/data.NaPO3
Normal file
6020
examples/nb3b/data.NaPO3
Normal file
File diff suppressed because it is too large
Load Diff
35
examples/nb3b/in.nb3b.screened
Normal file
35
examples/nb3b/in.nb3b.screened
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
### LAMMPS input file
|
||||||
|
|
||||||
|
units metal
|
||||||
|
dimension 3
|
||||||
|
boundary p p p
|
||||||
|
atom_style charge
|
||||||
|
|
||||||
|
read_data data.NaPO3
|
||||||
|
|
||||||
|
pair_style hybrid/overlay coul/dsf 0.2 12.0 table spline 20000 buck 7.0 nb3b/screened
|
||||||
|
|
||||||
|
pair_coeff * * coul/dsf
|
||||||
|
pair_coeff 1 3 table Table_NP.dat Pair_P-O 7.0
|
||||||
|
pair_coeff 2 3 table Table_NP.dat Pair_Na-O 7.0
|
||||||
|
pair_coeff 3 3 table Table_NP.dat Pair_O-O 7.0
|
||||||
|
|
||||||
|
# pair Buckingham
|
||||||
|
pair_coeff 1 1 buck 5.093669 0.905598 0.0
|
||||||
|
|
||||||
|
# shrm
|
||||||
|
pair_coeff * * nb3b/screened PSiO.nb3b.screened P NULL O
|
||||||
|
|
||||||
|
neighbor 1.0 bin
|
||||||
|
neigh_modify every 10 delay 10 check no
|
||||||
|
timestep 0.002
|
||||||
|
|
||||||
|
thermo 100
|
||||||
|
thermo_style custom step density lx press pe evdwl ecoul temp
|
||||||
|
|
||||||
|
#dump 2 all custom 10000 NaPO3-melt.lammpstrj id type element x y z
|
||||||
|
#dump_modify 2 element P Na O
|
||||||
|
variable temp equal 2500
|
||||||
|
|
||||||
|
fix 1 all npt temp ${temp} ${temp} $(100*dt) iso 1 1 $(1000*dt)
|
||||||
|
run 1000
|
||||||
132
examples/nb3b/log.30Oct23.nb3b.screened.g++.1
Normal file
132
examples/nb3b/log.30Oct23.nb3b.screened.g++.1
Normal file
@ -0,0 +1,132 @@
|
|||||||
|
LAMMPS (3 Aug 2023 - Development - patch_2Aug2023-700-g901ed98d31)
|
||||||
|
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98)
|
||||||
|
using 1 OpenMP thread(s) per MPI task
|
||||||
|
### LAMMPS input file
|
||||||
|
|
||||||
|
units metal
|
||||||
|
dimension 3
|
||||||
|
boundary p p p
|
||||||
|
atom_style charge
|
||||||
|
|
||||||
|
read_data data.NaPO3
|
||||||
|
Reading data file ...
|
||||||
|
orthogonal box = (0 0 0) to (34.33782 34.33782 34.33782)
|
||||||
|
1 by 1 by 1 MPI processor grid
|
||||||
|
reading atoms ...
|
||||||
|
3000 atoms
|
||||||
|
reading velocities ...
|
||||||
|
3000 velocities
|
||||||
|
read_data CPU = 0.019 seconds
|
||||||
|
|
||||||
|
pair_style hybrid/overlay coul/dsf 0.2 12.0 table spline 20000 buck 7.0 nb3b/screened
|
||||||
|
|
||||||
|
pair_coeff * * coul/dsf
|
||||||
|
pair_coeff 1 3 table Table_NP.dat Pair_P-O 7.0
|
||||||
|
WARNING: 1 of 4995 force values in table Pair_P-O are inconsistent with -dE/dr.
|
||||||
|
WARNING: Should only be flagged at inflection points (src/pair_table.cpp:466)
|
||||||
|
pair_coeff 2 3 table Table_NP.dat Pair_Na-O 7.0
|
||||||
|
WARNING: 2 of 4995 force values in table Pair_Na-O are inconsistent with -dE/dr.
|
||||||
|
WARNING: Should only be flagged at inflection points (src/pair_table.cpp:466)
|
||||||
|
pair_coeff 3 3 table Table_NP.dat Pair_O-O 7.0
|
||||||
|
|
||||||
|
# pair Buckingham
|
||||||
|
pair_coeff 1 1 buck 5.093669 0.905598 0.0
|
||||||
|
|
||||||
|
# shrm
|
||||||
|
pair_coeff * * nb3b/screened PSiO.nb3b.screened P NULL O
|
||||||
|
Reading nb3b/screened potential file PSiO.nb3b.screened with DATE: 2023-10-30
|
||||||
|
|
||||||
|
neighbor 1.0 bin
|
||||||
|
neigh_modify every 10 delay 10 check no
|
||||||
|
timestep 0.002
|
||||||
|
|
||||||
|
thermo 100
|
||||||
|
thermo_style custom step density lx press pe evdwl ecoul temp
|
||||||
|
|
||||||
|
#dump 2 all custom 10000 NaPO3-melt.lammpstrj id type element x y z
|
||||||
|
#dump_modify 2 element P Na O
|
||||||
|
variable temp equal 2500
|
||||||
|
|
||||||
|
fix 1 all npt temp ${temp} ${temp} $(100*dt) iso 1 1 $(1000*dt)
|
||||||
|
fix 1 all npt temp 2500 ${temp} $(100*dt) iso 1 1 $(1000*dt)
|
||||||
|
fix 1 all npt temp 2500 2500 $(100*dt) iso 1 1 $(1000*dt)
|
||||||
|
fix 1 all npt temp 2500 2500 0.2000000000000000111 iso 1 1 $(1000*dt)
|
||||||
|
fix 1 all npt temp 2500 2500 0.2000000000000000111 iso 1 1 2
|
||||||
|
run 1000
|
||||||
|
Neighbor list info ...
|
||||||
|
update: every = 10 steps, delay = 10 steps, check = no
|
||||||
|
max neighbors/atom: 2000, page size: 100000
|
||||||
|
master list distance cutoff = 13
|
||||||
|
ghost atom cutoff = 13
|
||||||
|
binsize = 6.5, bins = 6 6 6
|
||||||
|
6 neighbor lists, perpetual/occasional/extra = 6 0 0
|
||||||
|
(1) pair coul/dsf, perpetual
|
||||||
|
attributes: half, newton on
|
||||||
|
pair build: half/bin/atomonly/newton
|
||||||
|
stencil: half/bin/3d
|
||||||
|
bin: standard
|
||||||
|
(2) pair table, perpetual, skip from (5)
|
||||||
|
attributes: half, newton on, cut 8
|
||||||
|
pair build: skip
|
||||||
|
stencil: none
|
||||||
|
bin: none
|
||||||
|
(3) pair buck, perpetual, skip from (5)
|
||||||
|
attributes: half, newton on, cut 8
|
||||||
|
pair build: skip
|
||||||
|
stencil: none
|
||||||
|
bin: none
|
||||||
|
(4) pair nb3b/screened, perpetual, skip from (6)
|
||||||
|
attributes: full, newton on, cut 4.3
|
||||||
|
pair build: skip
|
||||||
|
stencil: none
|
||||||
|
bin: none
|
||||||
|
(5) neighbor class addition, perpetual, trim from (1)
|
||||||
|
attributes: half, newton on, cut 8
|
||||||
|
pair build: trim
|
||||||
|
stencil: none
|
||||||
|
bin: none
|
||||||
|
(6) neighbor class addition, perpetual
|
||||||
|
attributes: full, newton on, cut 4.3
|
||||||
|
pair build: full/bin/atomonly
|
||||||
|
stencil: full/bin/3d
|
||||||
|
bin: standard
|
||||||
|
Per MPI rank memory allocation (min/avg/max) = 12.11 | 12.11 | 12.11 Mbytes
|
||||||
|
Step Density Lx Press PotEng E_vdwl E_coul Temp
|
||||||
|
0 2.509108 34.33782 46464.417 -50581.248 2292.3853 -52873.634 2500
|
||||||
|
100 2.4533672 34.595928 33156.229 -50182.221 2373.5614 -52555.782 1666.1883
|
||||||
|
200 2.3649528 35.021791 29182.391 -50158.578 2367.6353 -52526.213 1885.4424
|
||||||
|
300 2.2932707 35.382952 14450.387 -50100.892 2239.9823 -52340.875 2045.1557
|
||||||
|
400 2.2282371 35.723887 16680.683 -50048.753 2281.6385 -52330.392 2257.1768
|
||||||
|
500 2.1753698 36.010969 15871.062 -49981.163 2285.6757 -52266.839 2396.7925
|
||||||
|
600 2.1285968 36.272824 15066.532 -49934.767 2282.4577 -52217.225 2540.7515
|
||||||
|
700 2.0841139 36.529076 7572.3436 -49895.93 2222.7473 -52118.677 2577.5774
|
||||||
|
800 2.0485057 36.739517 6642.7187 -49870.601 2230.3801 -52100.981 2556.7855
|
||||||
|
900 2.0180051 36.923689 8318.7918 -49890.3 2255.1538 -52145.454 2538.111
|
||||||
|
1000 1.990678 37.091879 7724.2804 -49928.89 2250.855 -52179.745 2492.3778
|
||||||
|
Loop time of 30.3284 on 1 procs for 1000 steps with 3000 atoms
|
||||||
|
|
||||||
|
Performance: 5.698 ns/day, 4.212 hours/ns, 32.972 timesteps/s, 98.917 katom-step/s
|
||||||
|
99.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 | 27.347 | 27.347 | 27.347 | 0.0 | 90.17
|
||||||
|
Neigh | 2.8101 | 2.8101 | 2.8101 | 0.0 | 9.27
|
||||||
|
Comm | 0.067332 | 0.067332 | 0.067332 | 0.0 | 0.22
|
||||||
|
Output | 0.00047847 | 0.00047847 | 0.00047847 | 0.0 | 0.00
|
||||||
|
Modify | 0.087652 | 0.087652 | 0.087652 | 0.0 | 0.29
|
||||||
|
Other | | 0.01585 | | | 0.05
|
||||||
|
|
||||||
|
Nlocal: 3000 ave 3000 max 3000 min
|
||||||
|
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||||
|
Nghost: 11846 ave 11846 max 11846 min
|
||||||
|
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||||
|
Neighs: 811471 ave 811471 max 811471 min
|
||||||
|
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||||
|
|
||||||
|
Total # of neighbors = 811471
|
||||||
|
Ave neighs/atom = 270.49033
|
||||||
|
Neighbor list builds = 100
|
||||||
|
Dangerous builds not checked
|
||||||
|
Total wall time: 0:00:30
|
||||||
132
examples/nb3b/log.30Oct23.nb3b.screened.g++.4
Normal file
132
examples/nb3b/log.30Oct23.nb3b.screened.g++.4
Normal file
@ -0,0 +1,132 @@
|
|||||||
|
LAMMPS (3 Aug 2023 - Development - patch_2Aug2023-700-g901ed98d31)
|
||||||
|
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98)
|
||||||
|
using 1 OpenMP thread(s) per MPI task
|
||||||
|
### LAMMPS input file
|
||||||
|
|
||||||
|
units metal
|
||||||
|
dimension 3
|
||||||
|
boundary p p p
|
||||||
|
atom_style charge
|
||||||
|
|
||||||
|
read_data data.NaPO3
|
||||||
|
Reading data file ...
|
||||||
|
orthogonal box = (0 0 0) to (34.33782 34.33782 34.33782)
|
||||||
|
1 by 2 by 2 MPI processor grid
|
||||||
|
reading atoms ...
|
||||||
|
3000 atoms
|
||||||
|
reading velocities ...
|
||||||
|
3000 velocities
|
||||||
|
read_data CPU = 0.011 seconds
|
||||||
|
|
||||||
|
pair_style hybrid/overlay coul/dsf 0.2 12.0 table spline 20000 buck 7.0 nb3b/screened
|
||||||
|
|
||||||
|
pair_coeff * * coul/dsf
|
||||||
|
pair_coeff 1 3 table Table_NP.dat Pair_P-O 7.0
|
||||||
|
WARNING: 1 of 4995 force values in table Pair_P-O are inconsistent with -dE/dr.
|
||||||
|
WARNING: Should only be flagged at inflection points (src/pair_table.cpp:466)
|
||||||
|
pair_coeff 2 3 table Table_NP.dat Pair_Na-O 7.0
|
||||||
|
WARNING: 2 of 4995 force values in table Pair_Na-O are inconsistent with -dE/dr.
|
||||||
|
WARNING: Should only be flagged at inflection points (src/pair_table.cpp:466)
|
||||||
|
pair_coeff 3 3 table Table_NP.dat Pair_O-O 7.0
|
||||||
|
|
||||||
|
# pair Buckingham
|
||||||
|
pair_coeff 1 1 buck 5.093669 0.905598 0.0
|
||||||
|
|
||||||
|
# shrm
|
||||||
|
pair_coeff * * nb3b/screened PSiO.nb3b.screened P NULL O
|
||||||
|
Reading nb3b/screened potential file PSiO.nb3b.screened with DATE: 2023-10-30
|
||||||
|
|
||||||
|
neighbor 1.0 bin
|
||||||
|
neigh_modify every 10 delay 10 check no
|
||||||
|
timestep 0.002
|
||||||
|
|
||||||
|
thermo 100
|
||||||
|
thermo_style custom step density lx press pe evdwl ecoul temp
|
||||||
|
|
||||||
|
#dump 2 all custom 10000 NaPO3-melt.lammpstrj id type element x y z
|
||||||
|
#dump_modify 2 element P Na O
|
||||||
|
variable temp equal 2500
|
||||||
|
|
||||||
|
fix 1 all npt temp ${temp} ${temp} $(100*dt) iso 1 1 $(1000*dt)
|
||||||
|
fix 1 all npt temp 2500 ${temp} $(100*dt) iso 1 1 $(1000*dt)
|
||||||
|
fix 1 all npt temp 2500 2500 $(100*dt) iso 1 1 $(1000*dt)
|
||||||
|
fix 1 all npt temp 2500 2500 0.2000000000000000111 iso 1 1 $(1000*dt)
|
||||||
|
fix 1 all npt temp 2500 2500 0.2000000000000000111 iso 1 1 2
|
||||||
|
run 1000
|
||||||
|
Neighbor list info ...
|
||||||
|
update: every = 10 steps, delay = 10 steps, check = no
|
||||||
|
max neighbors/atom: 2000, page size: 100000
|
||||||
|
master list distance cutoff = 13
|
||||||
|
ghost atom cutoff = 13
|
||||||
|
binsize = 6.5, bins = 6 6 6
|
||||||
|
6 neighbor lists, perpetual/occasional/extra = 6 0 0
|
||||||
|
(1) pair coul/dsf, perpetual
|
||||||
|
attributes: half, newton on
|
||||||
|
pair build: half/bin/atomonly/newton
|
||||||
|
stencil: half/bin/3d
|
||||||
|
bin: standard
|
||||||
|
(2) pair table, perpetual, skip from (5)
|
||||||
|
attributes: half, newton on, cut 8
|
||||||
|
pair build: skip
|
||||||
|
stencil: none
|
||||||
|
bin: none
|
||||||
|
(3) pair buck, perpetual, skip from (5)
|
||||||
|
attributes: half, newton on, cut 8
|
||||||
|
pair build: skip
|
||||||
|
stencil: none
|
||||||
|
bin: none
|
||||||
|
(4) pair nb3b/screened, perpetual, skip from (6)
|
||||||
|
attributes: full, newton on, cut 4.3
|
||||||
|
pair build: skip
|
||||||
|
stencil: none
|
||||||
|
bin: none
|
||||||
|
(5) neighbor class addition, perpetual, trim from (1)
|
||||||
|
attributes: half, newton on, cut 8
|
||||||
|
pair build: trim
|
||||||
|
stencil: none
|
||||||
|
bin: none
|
||||||
|
(6) neighbor class addition, perpetual
|
||||||
|
attributes: full, newton on, cut 4.3
|
||||||
|
pair build: full/bin/atomonly
|
||||||
|
stencil: full/bin/3d
|
||||||
|
bin: standard
|
||||||
|
Per MPI rank memory allocation (min/avg/max) = 7.188 | 7.188 | 7.189 Mbytes
|
||||||
|
Step Density Lx Press PotEng E_vdwl E_coul Temp
|
||||||
|
0 2.509108 34.33782 46464.417 -50581.248 2292.3853 -52873.634 2500
|
||||||
|
100 2.4533672 34.595928 33156.229 -50182.221 2373.5614 -52555.782 1666.1883
|
||||||
|
200 2.3649528 35.021791 29182.391 -50158.578 2367.6353 -52526.213 1885.4424
|
||||||
|
300 2.2932707 35.382952 14450.387 -50100.892 2239.9823 -52340.875 2045.1557
|
||||||
|
400 2.2282371 35.723887 16680.683 -50048.753 2281.6385 -52330.392 2257.1768
|
||||||
|
500 2.1753698 36.010969 15871.062 -49981.163 2285.6757 -52266.839 2396.7925
|
||||||
|
600 2.1285968 36.272824 15066.532 -49934.767 2282.4577 -52217.225 2540.7515
|
||||||
|
700 2.0841139 36.529076 7572.3446 -49895.929 2222.7474 -52118.677 2577.5774
|
||||||
|
800 2.0485057 36.739517 6642.7277 -49870.601 2230.3802 -52100.981 2556.7856
|
||||||
|
900 2.0180051 36.923689 8318.7257 -49890.301 2255.153 -52145.454 2538.1115
|
||||||
|
1000 1.990678 37.091879 7730.4071 -49928.905 2250.9166 -52179.822 2492.4197
|
||||||
|
Loop time of 9.72954 on 4 procs for 1000 steps with 3000 atoms
|
||||||
|
|
||||||
|
Performance: 17.760 ns/day, 1.351 hours/ns, 102.780 timesteps/s, 308.339 katom-step/s
|
||||||
|
99.3% CPU use with 4 MPI tasks x 1 OpenMP threads
|
||||||
|
|
||||||
|
MPI task timing breakdown:
|
||||||
|
Section | min time | avg time | max time |%varavg| %total
|
||||||
|
---------------------------------------------------------------
|
||||||
|
Pair | 7.1441 | 8.0123 | 8.622 | 19.6 | 82.35
|
||||||
|
Neigh | 0.7458 | 0.78431 | 0.80001 | 2.5 | 8.06
|
||||||
|
Comm | 0.26061 | 0.88607 | 1.7928 | 61.3 | 9.11
|
||||||
|
Output | 0.00024827 | 0.00027521 | 0.00035196 | 0.0 | 0.00
|
||||||
|
Modify | 0.03802 | 0.038395 | 0.038805 | 0.1 | 0.39
|
||||||
|
Other | | 0.008186 | | | 0.08
|
||||||
|
|
||||||
|
Nlocal: 750 ave 765 max 731 min
|
||||||
|
Histogram: 1 0 0 0 1 0 0 1 0 1
|
||||||
|
Nghost: 6607.5 ave 6671 max 6552 min
|
||||||
|
Histogram: 2 0 0 0 0 0 0 0 1 1
|
||||||
|
Neighs: 202867 ave 217674 max 182729 min
|
||||||
|
Histogram: 1 0 0 0 1 0 0 0 1 1
|
||||||
|
|
||||||
|
Total # of neighbors = 811469
|
||||||
|
Ave neighs/atom = 270.48967
|
||||||
|
Neighbor list builds = 100
|
||||||
|
Dangerous builds not checked
|
||||||
|
Total wall time: 0:00:09
|
||||||
2
src/.gitignore
vendored
2
src/.gitignore
vendored
@ -1297,6 +1297,8 @@
|
|||||||
/pair_morse_soft.h
|
/pair_morse_soft.h
|
||||||
/pair_nb3b_harmonic.cpp
|
/pair_nb3b_harmonic.cpp
|
||||||
/pair_nb3b_harmonic.h
|
/pair_nb3b_harmonic.h
|
||||||
|
/pair_nb3b_screened.cpp
|
||||||
|
/pair_nb3b_screened.h
|
||||||
/pair_nm_cut.cpp
|
/pair_nm_cut.cpp
|
||||||
/pair_nm_cut.h
|
/pair_nm_cut.h
|
||||||
/pair_nm_cut_coul_cut.cpp
|
/pair_nm_cut_coul_cut.cpp
|
||||||
|
|||||||
@ -37,18 +37,19 @@ using MathConst::MY_PI;
|
|||||||
#define DELTA 4
|
#define DELTA 4
|
||||||
#define SMALL 0.001
|
#define SMALL 0.001
|
||||||
|
|
||||||
|
static const char *substyle[] = { "nb3n/harmonic", "nb3b/screened" };
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
PairNb3bHarmonic::PairNb3bHarmonic(LAMMPS *lmp) : Pair(lmp)
|
PairNb3bHarmonic::PairNb3bHarmonic(LAMMPS *lmp) : Pair(lmp), params(nullptr)
|
||||||
{
|
{
|
||||||
|
variant = HARMONIC;
|
||||||
single_enable = 0;
|
single_enable = 0;
|
||||||
restartinfo = 0;
|
restartinfo = 0;
|
||||||
one_coeff = 1;
|
one_coeff = 1;
|
||||||
manybody_flag = 1;
|
manybody_flag = 1;
|
||||||
centroidstressflag = CENTROID_NOTAVAIL;
|
centroidstressflag = CENTROID_NOTAVAIL;
|
||||||
unit_convert_flag = utils::get_supported_conversions(utils::ENERGY);
|
unit_convert_flag = utils::get_supported_conversions(utils::ENERGY);
|
||||||
|
|
||||||
params = nullptr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
@ -191,9 +192,10 @@ void PairNb3bHarmonic::coeff(int narg, char **arg)
|
|||||||
|
|
||||||
void PairNb3bHarmonic::init_style()
|
void PairNb3bHarmonic::init_style()
|
||||||
{
|
{
|
||||||
if (atom->tag_enable == 0) error->all(FLERR, "Pair style nb3b/harmonic requires atom IDs");
|
if (atom->tag_enable == 0)
|
||||||
|
error->all(FLERR, "Pair style {} requires atom IDs", substyle[variant]);
|
||||||
if (force->newton_pair == 0)
|
if (force->newton_pair == 0)
|
||||||
error->all(FLERR, "Pair style nb3b/harmonic requires newton pair on");
|
error->all(FLERR, "Pair style {} requires newton pair on", substyle[variant]);
|
||||||
|
|
||||||
// need a full neighbor list
|
// need a full neighbor list
|
||||||
|
|
||||||
@ -222,14 +224,14 @@ void PairNb3bHarmonic::read_file(char *file)
|
|||||||
// open file on proc 0
|
// open file on proc 0
|
||||||
|
|
||||||
if (comm->me == 0) {
|
if (comm->me == 0) {
|
||||||
PotentialFileReader reader(lmp, file, "nb3b/harmonic", unit_convert_flag);
|
PotentialFileReader reader(lmp, file, substyle[variant], unit_convert_flag);
|
||||||
char *line;
|
char *line;
|
||||||
|
|
||||||
// transparently convert units for supported conversions
|
// transparently convert units for supported conversions
|
||||||
|
|
||||||
int unit_convert = reader.get_unit_convert();
|
int unit_convert = reader.get_unit_convert();
|
||||||
double conversion_factor = utils::get_conversion_factor(utils::ENERGY, unit_convert);
|
double conversion_factor = utils::get_conversion_factor(utils::ENERGY, unit_convert);
|
||||||
while ((line = reader.next_line(NPARAMS_PER_LINE))) {
|
while ((line = reader.next_line(NPARAMS_PER_LINE + ((variant == SCREENED) ? 1 : 0)))) {
|
||||||
try {
|
try {
|
||||||
ValueTokenizer values(line);
|
ValueTokenizer values(line);
|
||||||
|
|
||||||
@ -269,6 +271,10 @@ void PairNb3bHarmonic::read_file(char *file)
|
|||||||
params[nparams].kelement = kelement;
|
params[nparams].kelement = kelement;
|
||||||
params[nparams].k_theta = values.next_double();
|
params[nparams].k_theta = values.next_double();
|
||||||
params[nparams].theta0 = values.next_double();
|
params[nparams].theta0 = values.next_double();
|
||||||
|
if (variant == SCREENED)
|
||||||
|
params[nparams].rho = values.next_double();
|
||||||
|
else
|
||||||
|
params[nparams].rho = 1.0; // dummy value
|
||||||
params[nparams].cutoff = values.next_double();
|
params[nparams].cutoff = values.next_double();
|
||||||
|
|
||||||
if (unit_convert) params[nparams].k_theta *= conversion_factor;
|
if (unit_convert) params[nparams].k_theta *= conversion_factor;
|
||||||
@ -276,9 +282,9 @@ void PairNb3bHarmonic::read_file(char *file)
|
|||||||
error->one(FLERR, e.what());
|
error->one(FLERR, e.what());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (params[nparams].k_theta < 0.0 || params[nparams].theta0 < 0.0 ||
|
if ((params[nparams].k_theta < 0.0) || (params[nparams].theta0 < 0.0) ||
|
||||||
params[nparams].cutoff < 0.0)
|
(params[nparams].cutoff < 0.0) || (params[nparams].rho <= 0.0))
|
||||||
error->one(FLERR, "Illegal nb3b/harmonic parameter");
|
error->one(FLERR, "Illegal {} parameter", substyle[variant]);
|
||||||
|
|
||||||
nparams++;
|
nparams++;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -35,23 +35,26 @@ class PairNb3bHarmonic : public Pair {
|
|||||||
void init_style() override;
|
void init_style() override;
|
||||||
|
|
||||||
static constexpr int NPARAMS_PER_LINE = 6;
|
static constexpr int NPARAMS_PER_LINE = 6;
|
||||||
|
enum { HARMONIC = 0, SCREENED };
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
struct Param {
|
struct Param {
|
||||||
double k_theta, theta0, cutoff;
|
double k_theta, theta0, cutoff;
|
||||||
|
double rho; // added for screened harmonic style
|
||||||
double cut, cutsq;
|
double cut, cutsq;
|
||||||
int ielement, jelement, kelement;
|
int ielement, jelement, kelement;
|
||||||
};
|
};
|
||||||
|
|
||||||
double cutmax; // max cutoff for all elements
|
double cutmax; // max cutoff for all elements
|
||||||
Param *params; // parameter set for an I-J-K interaction
|
Param *params; // parameter set for an I-J-K interaction
|
||||||
|
int variant;
|
||||||
|
|
||||||
void allocate();
|
void allocate();
|
||||||
void read_file(char *);
|
void read_file(char *);
|
||||||
void setup_params();
|
void setup_params();
|
||||||
void twobody(Param *, double, double &, int, double &);
|
void twobody(Param *, double, double &, int, double &);
|
||||||
void threebody(Param *, Param *, Param *, double, double, double *, double *, double *, double *,
|
virtual void threebody(Param *, Param *, Param *, double, double, double *, double *, double *,
|
||||||
int, double &);
|
double *, int, double &);
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace LAMMPS_NS
|
} // namespace LAMMPS_NS
|
||||||
|
|||||||
89
src/MANYBODY/pair_nb3b_screened.cpp
Normal file
89
src/MANYBODY/pair_nb3b_screened.cpp
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
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 author: Federica Lodesani
|
||||||
|
(based on nb3b harmonic by Todd R. Zeitler and Stillinger-Weber pair style)
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
#include "pair_nb3b_screened.h"
|
||||||
|
|
||||||
|
#include <cmath>
|
||||||
|
|
||||||
|
#define SMALL 0.001
|
||||||
|
|
||||||
|
using namespace LAMMPS_NS;
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
PairNb3bScreened::PairNb3bScreened(LAMMPS *lmp) : PairNb3bHarmonic(lmp)
|
||||||
|
{
|
||||||
|
variant = SCREENED;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void PairNb3bScreened::threebody(Param *paramij, Param *paramik, Param *paramijk, double rsq1,
|
||||||
|
double rsq2, double *delr1, double *delr2, double *fj, double *fk,
|
||||||
|
int eflag, double &eng)
|
||||||
|
{
|
||||||
|
double dtheta, tk;
|
||||||
|
double r1, r2, c, s, a, a11, a12, a22;
|
||||||
|
double scr, t00, rho1inv, rho2inv;
|
||||||
|
double ratio1, ratio2;
|
||||||
|
|
||||||
|
// angle (cos and sin)
|
||||||
|
|
||||||
|
r1 = sqrt(rsq1);
|
||||||
|
r2 = sqrt(rsq2);
|
||||||
|
|
||||||
|
c = delr1[0] * delr2[0] + delr1[1] * delr2[1] + delr1[2] * delr2[2];
|
||||||
|
c /= r1 * r2;
|
||||||
|
|
||||||
|
if (c > 1.0) c = 1.0;
|
||||||
|
if (c < -1.0) c = -1.0;
|
||||||
|
|
||||||
|
s = sqrt(1.0 - c * c);
|
||||||
|
if (s < SMALL) s = SMALL;
|
||||||
|
s = 1.0 / s;
|
||||||
|
|
||||||
|
// force & energy
|
||||||
|
|
||||||
|
// Harmonic function multiplied by a screening function
|
||||||
|
//
|
||||||
|
// Uijk=k/2(theta-theta0)**2 * exp[-(rij/rhoij+rik/rhoik)]
|
||||||
|
//
|
||||||
|
rho1inv = paramij->rho;
|
||||||
|
rho2inv = paramik->rho;
|
||||||
|
scr = exp(-r1 * rho1inv - r2 * rho2inv);
|
||||||
|
|
||||||
|
dtheta = acos(c) - paramijk->theta0;
|
||||||
|
tk = paramijk->k_theta * dtheta * scr;
|
||||||
|
t00 = tk * dtheta;
|
||||||
|
|
||||||
|
if (eflag) eng = t00;
|
||||||
|
|
||||||
|
a = -2.0 * tk * s;
|
||||||
|
a11 = a * c / rsq1;
|
||||||
|
a12 = -a / (r1 * r2);
|
||||||
|
a22 = a * c / rsq2;
|
||||||
|
ratio1 = rho1inv / r1;
|
||||||
|
ratio2 = rho2inv / r2;
|
||||||
|
|
||||||
|
fj[0] = a11 * delr1[0] + a12 * delr2[0] + t00 * ratio1 * delr1[0];
|
||||||
|
fj[1] = a11 * delr1[1] + a12 * delr2[1] + t00 * ratio1 * delr1[1];
|
||||||
|
fj[2] = a11 * delr1[2] + a12 * delr2[2] + t00 * ratio1 * delr1[2];
|
||||||
|
fk[0] = a22 * delr2[0] + a12 * delr1[0] + t00 * ratio2 * delr2[0];
|
||||||
|
fk[1] = a22 * delr2[1] + a12 * delr1[1] + t00 * ratio2 * delr2[1];
|
||||||
|
fk[2] = a22 * delr2[2] + a12 * delr1[2] + t00 * ratio2 * delr2[2];
|
||||||
|
}
|
||||||
39
src/MANYBODY/pair_nb3b_screened.h
Normal file
39
src/MANYBODY/pair_nb3b_screened.h
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
/* -*- 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(nb3b/screened,PairNb3bScreened);
|
||||||
|
// clang-format on
|
||||||
|
#else
|
||||||
|
|
||||||
|
#ifndef LMP_PAIR_NB3B_SCREENED_H
|
||||||
|
#define LMP_PAIR_NB3B_SCREENED_H
|
||||||
|
|
||||||
|
#include "pair_nb3b_harmonic.h"
|
||||||
|
|
||||||
|
namespace LAMMPS_NS {
|
||||||
|
|
||||||
|
class PairNb3bScreened : public PairNb3bHarmonic {
|
||||||
|
public:
|
||||||
|
PairNb3bScreened(class LAMMPS *);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void threebody(Param *, Param *, Param *, double, double, double *, double *, double *, double *,
|
||||||
|
int, double &) override;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace LAMMPS_NS
|
||||||
|
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
Reference in New Issue
Block a user