New package DPD-BASIC with pair styles dpd, dpd/tstat, dpd/ext, dpd/ext/tstat

This commit is contained in:
Axel Kohlmeyer
2021-07-01 00:45:21 -04:00
parent 88c8d1a3c6
commit 58196d57f1
31 changed files with 247 additions and 60 deletions

View File

@ -138,15 +138,84 @@ install(TARGETS lmp EXPORT LAMMPS_Targets DESTINATION ${CMAKE_INSTALL_BINDIR})
option(CMAKE_VERBOSE_MAKEFILE "Generate verbose Makefiles" OFF)
set(STANDARD_PACKAGES ASPHERE BODY CLASS2 COLLOID COMPRESS DIPOLE
GRANULAR KSPACE LATTE MANYBODY MC MESSAGE MISC ML-IAP MOLECULE PERI POEMS
PLUGIN QEQ REPLICA RIGID SHOCK SPIN ML-SNAP SRD KIM PYTHON MSCG MPIIO VORONOI
ADIOS ATC AWPMD BOCS CG-DNA DPD-MESO CG-SDK
COLVARS DIELECTRIC DIFFRACTION DPD-REACT DRUDE EFF FEP
H5MD ML-HDNNP LATBOLTZ MANIFOLD MDI MEAM MESONT MGPT
USER-MISC MOFFF MOLFILE NETCDF PHONON PLUMED PTM QTB
ML-RANN REACTION REAXFF SCAFACOS DPD-SMOOTH MACHDYN SMTBQ SPH
TALLY UEF VTK ML-QUIP QMMM YAFF ML-PACE BROWNIAN)
set(STANDARD_PACKAGES
ADIOS
ASPHERE
ATC
AWPMD
BOCS
BODY
BROWNIAN
CG-DNA
CG-SDK
CLASS2
COLLOID
COLVARS
COMPRESS
DIELECTRIC
DIFFRACTION
DIPOLE
DPD-BASIC
DPD-MESO
DPD-REACT
DPD-SMOOTH
DRUDE
EFF
FEP
GRANULAR
H5MD
KIM
KSPACE
LATBOLTZ
LATTE
MACHDYN
MANIFOLD
MANYBODY
MC
MDI
MEAM
MESONT
MESSAGE
MGPT
MISC
ML-HDNNP
ML-IAP
ML-PACE
ML-QUIP
ML-RANN
ML-SNAP
MOFFF
MOLECULE
MOLFILE
MPIIO
MSCG
NETCDF
PERI
PHONON
PLUGIN
PLUMED
POEMS
PTM
PYTHON
QEQ
QMMM
QTB
REACTION
REAXFF
REPLICA
RIGID
SCAFACOS
SHOCK
SMTBQ
SPH
SPIN
SRD
TALLY
UEF
USER-MISC
VORONOI
VTK
YAFF)
set(SUFFIX_PACKAGES CORESHELL GPU KOKKOS OPT INTEL OPENMP)

View File

@ -19,6 +19,7 @@ set(ALL_PACKAGES
DIELECTRIC
DIFFRACTION
DIPOLE
DPD-BASIC
DPD-MESO
DPD-REACT
DPD-SMOOTH

View File

@ -21,6 +21,7 @@ set(ALL_PACKAGES
DIELECTRIC
DIFFRACTION
DIPOLE
DPD-BASIC
DPD-MESO
DPD-REACT
DPD-SMOOTH

View File

@ -15,6 +15,7 @@ set(WIN_PACKAGES
DIELECTRIC
DIFFRACTION
DIPOLE
DPD-BASIC
DPD-MESO
DPD-REACT
DPD-SMOOTH

View File

@ -17,6 +17,7 @@ set(ALL_PACKAGES
DIELECTRIC
DIFFRACTION
DIPOLE
DPD-BASIC
DPD-MESO
DPD-REACT
DPD-SMOOTH

View File

@ -43,6 +43,7 @@ page gives those details.
* :ref:`DIELECTRIC <PKG-DIELECTRIC>`
* :ref:`DIFFRACTION <PKG-DIFFRACTION>`
* :ref:`DIPOLE <PKG-DIPOLE>`
* :ref:`DPD-BASIC <PKG-DPD-BASIC>`
* :ref:`DPD-MESO <PKG-DPD-MESO>`
* :ref:`DPD-REACT <PKG-DPD-REACT>`
* :ref:`DPD-SMOOTH <PKG-DPD-SMOOTH>`
@ -560,6 +561,29 @@ short-range or long-range interactions.
----------
.. _PKG-DPD-BASIC:
DPD-BASIC package
--------------------
**Contents:**
Pair styles for the basic dissipative particle dynamics (DPD) method
and DPD thermostatting.
**Author:** Kurt Smith (U Pittsburgh), Martin Svoboda, Martin Lisal (ICPF and UJEP)
**Supporting info:**
* src/DPD-BASIC: filenames -> commands
* :doc:`pair_style dpd <pair_dpd>`
* :doc:`pair_style dpd/tstat <pair_dpd>`
* :doc:`pair_style dpd/ext <pair_dpd_ext>`
* :doc:`pair_style dpd/ext/tstat <pair_dpd_ext>`
* examples/PACKAGES/dpd-basic
----------
.. _PKG-DPD-MESO:
DPD-MESO package

View File

@ -113,6 +113,11 @@ whether an extra library is needed to build and use the package:
- :doc:`pair_style lj/.../dipole <pair_dipole>`
- dipole
- no
* - :ref:`DPD-BASIC <PKG-DPD-BASIC>`
- basic DPD models
- :doc:`pair_styles dpd dpd/tstat <pair_dpd>` :doc:`dpd/ext dpd/ext/tstat <pair_dpd_ext>`
- PACKAGES/dpd-basic
- no
* - :ref:`DPD-MESO <PKG-DPD-MESO>`
- mesoscale DPD models
- :doc:`pair_style edpd <pair_mesodpd>`

View File

@ -154,14 +154,14 @@ These pair styles do not support the :doc:`pair_modify <pair_modify>`
tail option for adding long-range tail corrections to energy and
pressure.
These pair styles writes their information to :doc:`binary restart files <restart>`, so pair_style and pair_coeff commands do not need
to be specified in an input script that reads a restart file. Note
that the user-specified random number seed is stored in the restart
file, so when a simulation is restarted, each processor will
re-initialize its random number generator the same way it did
initially. This means the random forces will be random, but will not
be the same as they would have been if the original simulation had
continued past the restart time.
These pair styles write their information to :doc:`binary restart files
<restart>`, so pair_style and pair_coeff commands do not need to be
specified in an input script that reads a restart file. Note that the
user-specified random number seed is stored in the restart file, so when
a simulation is restarted, each processor will re-initialize its random
number generator the same way it did initially. This means the random
forces will be random, but will not be the same as they would have been
if the original simulation had continued past the restart time.
These pair styles can only be used via the *pair* keyword of the
:doc:`run_style respa <run_style>` command. They do not support the
@ -177,22 +177,26 @@ this.
Restrictions
""""""""""""
These styles are part of the DPD-BASIC package. They are only enabled if
LAMMPS was built with that package. See the :doc:`Build package
<Build_package>` doc page for more info.
The default frequency for rebuilding neighbor lists is every 10 steps
(see the :doc:`neigh_modify <neigh_modify>` command). This may be too
infrequent for style *dpd* simulations since particles move rapidly
and can overlap by large amounts. If this setting yields a non-zero
number of "dangerous" reneighborings (printed at the end of a
simulation), you should experiment with forcing reneighboring more
often and see if system energies/trajectories change.
infrequent for style *dpd* simulations since particles move rapidly and
can overlap by large amounts. If this setting yields a non-zero number
of "dangerous" reneighborings (printed at the end of a simulation), you
should experiment with forcing reneighboring more often and see if
system energies/trajectories change.
These pair styles requires you to use the :doc:`comm_modify vel yes <comm_modify>` command so that velocities are stored by ghost
atoms.
These pair styles requires you to use the :doc:`comm_modify vel yes
<comm_modify>` command so that velocities are stored by ghost atoms.
These pair styles will not restart exactly when using the
:doc:`read_restart <read_restart>` command, though they should provide
statistically similar results. This is because the forces they
compute depend on atom velocities. See the
:doc:`read_restart <read_restart>` command for more details.
statistically similar results. This is because the forces they compute
depend on atom velocities. See the :doc:`read_restart <read_restart>`
command for more details.
Related commands
""""""""""""""""

View File

@ -38,12 +38,19 @@ Examples
Description
"""""""""""
The style *dpd/ext* computes an extended force field for dissipative particle dynamics (DPD) following the exposition in :ref:`(Groot) <Groot>`, :ref:`(Junghans) <Junghans>`.
The style *dpd/ext* computes an extended force field for dissipative
particle dynamics (DPD) following the exposition in :ref:`(Groot)
<Groot>`, :ref:`(Junghans) <Junghans>`.
Style *dpd/ext/tstat* invokes an extended DPD thermostat on pairwise interactions, equivalent to the non-conservative portion of the extended DPD force field. To use *dpd/ext/tstat* as a thermostat for another pair style, use the :doc:`pair_style hybrid/overlay <pair_hybrid>` command to compute both the desired pair interaction and the thermostat for each pair of particles.
Style *dpd/ext/tstat* invokes an extended DPD thermostat on pairwise
interactions, equivalent to the non-conservative portion of the extended
DPD force field. To use *dpd/ext/tstat* as a thermostat for another pair
style, use the :doc:`pair_style hybrid/overlay <pair_hybrid>` command to
compute both the desired pair interaction and the thermostat for each
pair of particles.
For the style *dpd/ext*\ , the force on atom I due to atom J is given as a sum
of 3 terms
For the style *dpd/ext*\ , the force on atom I due to atom J is given as
a sum of 3 terms
.. math::
@ -53,17 +60,51 @@ of 3 terms
f^R = & \sigma_{\parallel} w_{\parallel}(r) \frac{\alpha}{\sqrt{\Delta t}} \hat{\mathbf{r}}_{ij} + \sigma_{\perp} w_{\perp} (r) ( \mathbf{I} - \hat{\mathbf{r}}_{ij} \hat{\mathbf{r}}_{ij}^{\rm T} ) \frac{\mathbf{\xi}_{ij}}{\sqrt{\Delta t}}\\
w(r) = & 1 - r/r_c \\
where :math:`\mathbf{f}^C` is a conservative force, :math:`\mathbf{f}^D` is a dissipative force, and :math:`\mathbf{f}^R` is a random force. :math:`A_{ij}` is the maximum repulsion between the two atoms, :math:`\hat{\mathbf{r}}_{ij}` is a unit vector in the direction :math:`\mathbf{r}_i - \mathbf{r}_j`, :math:`\mathbf{v}_{ij} = \mathbf{v}_i - \mathbf{v}_j` is the vector difference in velocities of the two atoms, :math:`\alpha` and :math:`\mathbf{\xi}_{ij}` are Gaussian random numbers with zero mean and unit variance, :math:`\Delta t` is the timestep, :math:`w (r) = 1 - r / r_c` is a weight function for the conservative interactions that varies between 0 and 1, :math:`r_c` is the corresponding cutoff, :math:`w_{\alpha} ( r ) = ( 1 - r / \bar{r}_c )^{s_{\alpha}}`, :math:`\alpha \equiv ( \parallel, \perp )`, are weight functions with coefficients :math:`s_\alpha` that vary between 0 and 1, :math:`\bar{r}_c` is the corresponding cutoff, :math:`\mathbf{I}` is the unit matrix, :math:`\sigma_{\alpha} = \sqrt{2 k T \gamma_{\alpha}}`, where :math:`k` is the Boltzmann constant and :math:`T` is the temperature in the pair\_style command.
where :math:`\mathbf{f}^C` is a conservative force, :math:`\mathbf{f}^D`
is a dissipative force, and :math:`\mathbf{f}^R` is a random
force. :math:`A_{ij}` is the maximum repulsion between the two atoms,
:math:`\hat{\mathbf{r}}_{ij}` is a unit vector in the direction
:math:`\mathbf{r}_i - \mathbf{r}_j`, :math:`\mathbf{v}_{ij} =
\mathbf{v}_i - \mathbf{v}_j` is the vector difference in velocities of
the two atoms, :math:`\alpha` and :math:`\mathbf{\xi}_{ij}` are Gaussian
random numbers with zero mean and unit variance, :math:`\Delta t` is the
timestep, :math:`w (r) = 1 - r / r_c` is a weight function for the
conservative interactions that varies between 0 and 1, :math:`r_c` is
the corresponding cutoff, :math:`w_{\alpha} ( r ) = ( 1 - r / \bar{r}_c
)^{s_{\alpha}}`, :math:`\alpha \equiv ( \parallel, \perp )`, are weight
functions with coefficients :math:`s_\alpha` that vary between 0 and 1,
:math:`\bar{r}_c` is the corresponding cutoff, :math:`\mathbf{I}` is the
unit matrix, :math:`\sigma_{\alpha} = \sqrt{2 k T \gamma_{\alpha}}`,
where :math:`k` is the Boltzmann constant and :math:`T` is the
temperature in the pair\_style command.
For the style *dpd/ext/tstat*\ , the force on atom I due to atom J is the same as the above equation, except that the conservative :math:`\mathbf{f}^C` term is dropped. Also, during the run, T is set each timestep to a ramped value from Tstart to Tstop.
For the style *dpd/ext/tstat*\ , the force on atom I due to atom J is
the same as the above equation, except that the conservative
:math:`\mathbf{f}^C` term is dropped. Also, during the run, T is set
each timestep to a ramped value from Tstart to Tstop.
For the style *dpd/ext*\ , the pairwise energy associated with style *dpd/ext* is only due to the conservative force term :math:`\mathbf{f}^C`, and is shifted to be zero at the cutoff distance :math:`r_c`. The pairwise virial is calculated using all three terms. There is no pairwise energy for style *dpd/ext/tstat*, but the last two terms of the formula contribute the virial.
For the style *dpd/ext*\ , the pairwise energy associated with style
*dpd/ext* is only due to the conservative force term
:math:`\mathbf{f}^C`, and is shifted to be zero at the cutoff distance
:math:`r_c`. The pairwise virial is calculated using all three
terms. There is no pairwise energy for style *dpd/ext/tstat*, but the
last two terms of the formula contribute the virial.
For the style *dpd/ext/tstat*, the force on atom I due to atom J is the same as the above equation, except that the conservative :math:`\mathbf{f}^C` term is dropped. Also, during the run, T is set each timestep to a ramped value from Tstart to Tstop.
For the style *dpd/ext/tstat*, the force on atom I due to atom J is the
same as the above equation, except that the conservative
:math:`\mathbf{f}^C` term is dropped. Also, during the run, T is set
each timestep to a ramped value from Tstart to Tstop.
For the style *dpd/ext*\ , the pairwise energy associated with style *dpd/ext* is only due to the conservative force term :math:`\mathbf{f}^C`, and is shifted to be zero at the cutoff distance :math:`r_c`. The pairwise virial is calculated using all three terms. There is no pairwise energy for style *dpd/ext/tstat*, but the last two terms of the formula contribute the virial.
For the style *dpd/ext*\ , the pairwise energy associated with style
*dpd/ext* is only due to the conservative force term
:math:`\mathbf{f}^C`, and is shifted to be zero at the cutoff distance
:math:`r_c`. The pairwise virial is calculated using all three
terms. There is no pairwise energy for style *dpd/ext/tstat*, but the
last two terms of the formula contribute the virial.
For the style *dpd/ext*, the following coefficients must be defined for each pair of atoms types via the :doc:`pair_coeff <pair_coeff>` command as in the examples above:
For the style *dpd/ext*, the following coefficients must be defined for
each pair of atoms types via the :doc:`pair_coeff <pair_coeff>` command
as in the examples above:
* A (force units)
* :math:`\gamma_{\perp}` (force/velocity units)
@ -72,35 +113,55 @@ For the style *dpd/ext*, the following coefficients must be defined for each pai
* :math:`s_{\parallel}` (unitless)
* :math:`r_c` (distance units)
The last coefficient is optional. If not specified, the global DPD cutoff is used. Note that :math:`\sigma`'s are set equal to :math:`\sqrt{2 k T \gamma}`, where :math:`T` is the temperature set by the :doc:`pair_style <pair_style>` command so it does not need to be specified.
The last coefficient is optional. If not specified, the global DPD
cutoff is used. Note that :math:`\sigma`'s are set equal to
:math:`\sqrt{2 k T \gamma}`, where :math:`T` is the temperature set by
the :doc:`pair_style <pair_style>` command so it does not need to be
specified.
For the style *dpd/ext/tstat*, the coefficients defined for each pair of atoms types via the :doc:`pair_coeff <pair_coeff>` command is the same, except that A is not included.
For the style *dpd/ext/tstat*, the coefficients defined for each pair of
atoms types via the :doc:`pair_coeff <pair_coeff>` command is the same,
except that A is not included.
.. note::
If you are modeling DPD polymer chains, you may want to use the :doc:`pair_style srp <pair_srp>` command in conjunction with these pair styles. It is a soft segmental repulsive potential (SRP) that can prevent DPD polymer chains from crossing each other.
If you are modeling DPD polymer chains, you may want to use the
:doc:`pair_style srp <pair_srp>` command in conjunction with these pair
styles. It is a soft segmental repulsive potential (SRP) that can
prevent DPD polymer chains from crossing each other.
.. note::
The virial calculation for pressure when using this pair style includes all the components of force listed above, including the random force.
The virial calculation for pressure when using this pair style includes
all the components of force listed above, including the random force.
----------
**Mixing, shift, table, tail correction, restart, rRESPA info**\ :
The style *dpd/ext* does not support mixing. Thus, coefficients for all I,J pairs must be specified explicitly.
The style *dpd/ext* does not support mixing. Thus, coefficients for all
I,J pairs must be specified explicitly.
The pair styles do not support the :doc:`pair_modify <pair_modify>` shift option for the energy of the pair interaction. Note that as discussed above, the energy due to the conservative :math:`\mathbf{f}^C` term is already shifted to be zero at the cutoff distance :math:`r_c`.
The pair styles do not support the :doc:`pair_modify <pair_modify>`
shift option for the energy of the pair interaction. Note that as
discussed above, the energy due to the conservative :math:`\mathbf{f}^C`
term is already shifted to be zero at the cutoff distance :math:`r_c`.
The :doc:`pair_modify <pair_modify>` table option is not relevant for the style *dpd/ext*.
The :doc:`pair_modify <pair_modify>` table option is not relevant for
the style *dpd/ext*.
The style *dpd/ext* does not support the :doc:`pair_modify <pair_modify>` tail option for adding long-range tail corrections to energy and pressure.
The style *dpd/ext* does not support the :doc:`pair_modify
<pair_modify>` tail option for adding long-range tail corrections to
energy and pressure.
The pair styles can only be used via the pair keyword of the :doc:`run_style respa <run_style>` command. They do not support the *inner*\ , *middle*\ , and *outer*\ keywords.
The pair styles can only be used via the pair keyword of the
:doc:`run_style respa <run_style>` command. They do not support the
*inner*\ , *middle*\ , and *outer*\ keywords.
The style *dpd/ext/tstat* can ramp its target temperature over multiple runs, using the start and stop keywords of the :doc:`run <run>` command. See the :doc:`run <run>` command for details of how to do this.
The style *dpd/ext/tstat* can ramp its target temperature over multiple
runs, using the start and stop keywords of the :doc:`run <run>`
command. See the :doc:`run <run>` command for details of how to do this.
----------
@ -108,31 +169,42 @@ The style *dpd/ext/tstat* can ramp its target temperature over multiple runs, us
Restrictions
""""""""""""
The default frequency for rebuilding neighbor lists is every 10 steps (see the :doc:`neigh_modify <neigh_modify>` command). This may be too infrequent for style *dpd/ext* simulations since particles move rapidly and can overlap by large amounts. If this setting yields a non-zero number of \say{dangerous} reneighborings (printed at the end of a simulation), you should experiment with forcing reneighboring more often and see if system energies/trajectories change.
These styles are part of the DPD-BASIC package. They are only enabled if
LAMMPS was built with that package. See the :doc:`Build package
<Build_package>` doc page for more info.
The pair styles require to use the :doc:`comm_modify vel yes <comm_modify>` command so that velocities are stored by ghost atoms.
The default frequency for rebuilding neighbor lists is every 10 steps
(see the :doc:`neigh_modify <neigh_modify>` command). This may be too
infrequent for style *dpd/ext* simulations since particles move rapidly
and can overlap by large amounts. If this setting yields a non-zero
number of \say{dangerous} reneighborings (printed at the end of a
simulation), you should experiment with forcing reneighboring more often
and see if system energies/trajectories change.
The pair styles will not restart exactly when using the :doc:`read_restart <read_restart>` command, though they should provide statistically similar results. This is because the forces they compute depend on atom velocities. See the :doc:`read_restart <read_restart>` command for more details.
The pair styles require to use the :doc:`comm_modify vel yes
<comm_modify>` command so that velocities are stored by ghost atoms.
The pair styles will not restart exactly when using the
:doc:`read_restart <read_restart>` command, though they should provide
statistically similar results. This is because the forces they compute
depend on atom velocities. See the :doc:`read_restart <read_restart>`
command for more details.
Related commands
""""""""""""""""
:doc:`pair_style dpd <pair_dpd>`, :doc:`pair_coeff <pair_coeff>`, :doc:`fix nvt <fix_nh>`, :doc:`fix langevin <fix_langevin>`, :doc:`pair_style srp <pair_srp>`
:doc:`pair_style dpd <pair_dpd>`, :doc:`pair_coeff <pair_coeff>`,
:doc:`fix nvt <fix_nh>`, :doc:`fix langevin <fix_langevin>`,
:doc:`pair_style srp <pair_srp>`
**Default:** none
----------
.. _Groot:
**(Groot)** Groot and Warren, J Chem Phys, 107, 4423-35 (1997).
.. _Junghans:
**(Junghans)** Junghans, Praprotnik and Kremer, Soft Matter 4, 156, 1119-1128 (2008).

4
src/.gitignore vendored
View File

@ -1429,6 +1429,10 @@
/pair_thole.h
/pair_buck_mdf.cpp
/pair_buck_mdf.h
/pair_dpd.cpp
/pair_dpd.h
/pair_dpd_tstat.cpp
/pair_dpd_tstat.h
/pair_dpd_ext.cpp
/pair_dpd_ext.h
/pair_dpd_ext_tstat.cpp

View File

@ -63,6 +63,7 @@ PACKAGE = \
coreshell \
diffraction \
dipole \
dpd-basic \
dpd-meso \
dpd-react \
dpd-smooth \
@ -148,6 +149,7 @@ PACKMOST = \
coreshell \
diffraction \
dipole \
dpd-basic \
dpd-meso \
dpd-react \
dpd-smooth \

View File

@ -51,6 +51,11 @@ lmpinstalledpkgs.h
lmpgitversion.h
mliap_model_python_couple.cpp
mliap_model_python_couple.h
# moved to DPD-BASIC package on 1 July 2021
pair_dpd.cpp
pair_dpd.h
pair_dpd_tstat.cpp
pair_dpd_tstat.h
# removed on 14 May 2021
nstencil_half_bin_2d_newton_ssa.cpp
nstencil_half_bin_2d_newton_ssa.h

View File

@ -89,8 +89,6 @@ pair_style coul/slater/long, Evangelos Voyiatzis, evoyiatzis at gmail.com, 26 Fe
pair_style dipole/sf, Mario Orsi, orsimario at gmail.com, 8 Aug 11
pair_style e3b, Steven Strong (U Chicago), stevene.strong at gmail dot com, 16 Apr 19
pair_style drip, Mingjian Wen, University of Minnesota, wenxx151 at umn.edu, 17 Apr 19
pair_style dpd/ext, Martin Svoboda, Karel Sindelka, Martin Lisal, ICPF and UJEP, svobod.martin at gmail dot com, 23 Apr 21
pair_style dpd/ext/tstat, Martin Svoboda, Karel Sindelka, Martin Lisal, ICPF and UJEP , svobod.martin at gmail dot com, 23 Apr 21
pair_style edip, Luca Ferraro, luca.ferraro at caspur.it, 15 Sep 11
pair_style extep, Jaap Kroes (Radboud U), jaapkroes at gmail dot com, 28 Nov 17
pair_style gauss/cut, Axel Kohlmeyer, akohlmey at gmail.com, 1 Dec 11