Updated documentation, updated log files

This commit is contained in:
talinke
2025-04-28 13:02:47 -07:00
parent 648cd3f0c6
commit 11f6b3483b
4 changed files with 120 additions and 76 deletions

View File

@ -26,6 +26,7 @@ Syntax
*vhalf* = use half-step velocity
*method* value = *1-8*
*1-8* = choose one of the many GJ formulations
*7* = requires input of additional scalar between 0 and 1
Examples
""""""""
@ -34,32 +35,34 @@ Examples
fix 3 boundary langevin/gjf 10.0 10.0 1.0 699483
fix 1 all langevin/gjf 10.0 100.0 100.0 48279 vel vfull method 4
fix 2 all langevin/gjf 10.0 10.0 1.0 26488 method 7 0.95
Description
"""""""""""
Apply a Langevin thermostat as described in :ref:`(Gronbech-Jensen-2024) <Gronbech-Jensen-2024>`
Apply a Langevin thermostat as described in :ref:`(Gronbech-Jensen-2020) <Gronbech-Jensen-2020>`
to a group of atoms which models an interaction with a background
implicit solvent. As described in the papers cited below, the purpose of this method is to
enable longer timesteps to be used (up to the numerical stability
limit of the integrator), while still producing the correct Boltzmann
distribution of atom positions.
implicit solvent. As described in the papers cited below, the GJ methods
provide exact diffusion, drift, and Boltzmann sampling for linear systems for
any time step within the stability limit. The purpose of this set of methods
is therefore to significantly improve statistical accuracy at longer time steps
compared to other thermostats.
The current implementation provides the user with the option to output
the velocity in one of two forms: *vfull* or *vhalf*. The option *vfull* outputs the
on-site velocity given in :ref:`Gronbech-Jensen/Farago
the velocity in one of two forms: *vfull* or *vhalf*. The option *vhalf*
outputs the 2GJ half-step velocity given in :ref:`Gronbech Jensen/Gronbech-Jensen
<Gronbech-Jensen-2019>`; for linear systems, this velocity is shown to not
have any statistical errors for any stable time step. The option *vfull*
outputs the on-site velocity given in :ref:`Gronbech-Jensen/Farago
<Gronbech-Jensen-Farago>`; this velocity is shown to be systematically lower
than the target temperature by a small amount, which grows
quadratically with the timestep. The option *vhalf* outputs the
2GJ half-step velocity given in :ref:`Gronbech Jensen/Gronbech-Jensen
<Gronbech-Jensen-2019>`; for linear systems, this velocity is shown to not
have any statistical errors for any stable time step. An overview of
statistically correct Boltzmann and Maxwell-Boltzmann sampling of true
on-site and true half-step velocities is given in
:ref:`Gronbech-Jensen-2020 <Gronbech-Jensen-2020>`.
quadratically with the timestep. An overview of statistically correct Boltzmann
and Maxwell-Boltzmann sampling of true on-site and true half-step velocities is
given in :ref:`Gronbech-Jensen-2020 <Gronbech-Jensen-2020>`.
This fix allows the use of any of the GJ methods as listed in :ref:`Gronbech-Jensen-2020 <Gronbech-Jensen-2020>`.
The GJ-VII method is described in :ref:`Finkelstein <Finkelstein>`.
This fix allows the use of several GJ methods as listed in :ref:`Gronbech-Jensen-2020 <Gronbech-Jensen-2020>`.
The GJ-VII method is described in :ref:`Finkelstein <Finkelstein>` and GJ-VIII
is described in :ref:`Gronbech-Jensen-2024 <Gronbech-Jensen-2024>`.
The implementation follows the splitting form provided in Eqs. (24) and (25)
in :ref:`Gronbech-Jensen-2024 <Gronbech-Jensen-2024>`, including the application
of Gaussian noise values, per the description in
@ -129,13 +132,11 @@ different numbers of processors.
The keyword/value option pairs are used in the following ways.
The keyword *vel* determine which velocity is used to determine
The keyword *vel* determines which velocity is used to determine
quantities of interest in the simulation.
The keyword *method* selects one of the eight GJ-methods implemented in LAMMPS.
*Insert brief explanation for each method*
----------
Restart, fix_modify, output, run start/stop, minimize info
@ -146,9 +147,10 @@ Because the state of the random number generator is not saved in restart files,
this means you cannot do "exact" restarts with this fix, where the simulation
continues on the same as if no restart had taken place. However, in a
statistical sense, a restarted simulation should produce the same behavior.
The "exact" restart is done with either vfull or vhalf velocity output for as
long as the choice of vfull/vhalf is the same for the simulation as it is in
the restart file.
additionally, the GJ methods implement noise exclusively within each time step
(unlike the BBK thermostat of the fix-langevin). The restart is done with
either vfull or vhalf velocity output for as long as the choice of vfull/vhalf
is the same for the simulation as it is in the restart file.
The :doc:`fix_modify <fix_modify>` *temp* option is supported by this
fix. You can use it to assign a temperature :doc:`compute <compute>`
@ -165,7 +167,8 @@ This fix is not invoked during :doc:`energy minimization <minimize>`.
Restrictions
""""""""""""
This fix is not compatible with run_style respa.
This fix is not compatible with run_style respa. It is not compatible with
accelerated packages such as KOKKOS.
Related commands
""""""""""""""""
@ -179,27 +182,26 @@ The option defaults are vel = vhalf, method = 1.
----------
.. _Gronbech-Jensen-2024:
.. _Gronbech-Jensen-2020:
**(Gronbech-Jensen-2024)** Gronbech-Jensen, J. Stat. Phys. 191, 137 (2024).
.. _Gronbech-Jensen-Farago:
**(Gronbech-Jensen/Farago)** Gronbech-Jensen and Farago, Mol Phys, 111, 983
(2013).
**(Gronbech-Jensen-2020)** Gronbech-Jensen, Mol Phys 118, e1662506 (2020).
.. _Gronbech-Jensen-2019:
**(Gronbech Jensen/Gronbech-Jensen)** Gronbech Jensen and Gronbech-Jensen, Mol Phys, 117, 2511 (2019)
.. _Gronbech-Jensen-2020:
.. _Gronbech-Jensen-Farago:
**(Gronbech-Jensen-2020)** Gronbech-Jensen, Mol Phys 118, e1662506 (2020).
**(Gronbech-Jensen/Farago)** Gronbech-Jensen and Farago, Mol Phys, 111, 983 (2013).
.. _Finkelstein:
**(Finkelstein)** Finkelstein, Cheng, Florin, Seibold, Gronbech-Jensen, J. Chem. Phys., 155, 18 (2021)
.. _Gronbech-Jensen-2024:
**(Gronbech-Jensen-2024)** Gronbech-Jensen, J. Stat. Phys. 191, 137 (2024).
.. _Gronbech-Jensen-2023:
**(Gronbech-Jensen-2023)** Gronbech-Jensen, J. Stat. Phys. 190, 96 (2023).

View File

@ -1,4 +1,4 @@
LAMMPS (2 Apr 2025 - Development - e4c3b0c05e-modified)
LAMMPS (2 Apr 2025 - Development - 648cd3f0c6-modified)
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:99)
using 1 OpenMP thread(s) per MPI task
# GJ thermostat
@ -21,7 +21,7 @@ Finding 1-2 1-3 1-4 neighbors ...
0 = max # of 1-4 neighbors
1 = max # of special neighbors
special bonds CPU = 0.000 seconds
read_data CPU = 0.007 seconds
read_data CPU = 0.009 seconds
include ff-argon.lmp
#############################
#Atoms types - mass - charge#
@ -74,6 +74,20 @@ author = {Grønbech-Jensen, Niels},
year = {2020}
}
- Langevin GJ-I vfull method: doi:10.1080/00268976.2012.760055
@Article{gronbech-jensen_simple_2013,
title = {A simple and effective Verlet-type algorithm for simulating Langevin dynamics},
volume = {111},
url = {http://www.tandfonline.com/doi/abs/10.1080/00268976.2012.760055},
doi = {10.1080/00268976.2012.760055},
pages = {983-991},
number = {8},
journal = {Molecular Physics},
author = {Grønbech-Jensen, Niels and Farago, Oded},
year = {2013}
}
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule
@ -93,21 +107,21 @@ Per MPI rank memory allocation (min/avg/max) = 6.481 | 6.481 | 6.481 Mbytes
Step Temp E_pair E_mol TotEng Press
0 10 -56.207652 0 -55.092137 33.341103
5000 8.4535562 -55.150518 0 -54.207511 318.20862
Loop time of 2.32365 on 1 procs for 5000 steps with 864 atoms
Loop time of 2.27448 on 1 procs for 5000 steps with 864 atoms
Performance: 18591.401 ns/day, 0.001 hours/ns, 2151.782 timesteps/s, 1.859 Matom-step/s
99.9% CPU use with 1 MPI tasks x 1 OpenMP threads
Performance: 18993.378 ns/day, 0.001 hours/ns, 2198.308 timesteps/s, 1.899 Matom-step/s
100.0% CPU use with 1 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 1.3067 | 1.3067 | 1.3067 | 0.0 | 56.23
Bond | 0.00027472 | 0.00027472 | 0.00027472 | 0.0 | 0.01
Neigh | 0.28218 | 0.28218 | 0.28218 | 0.0 | 12.14
Comm | 0.057388 | 0.057388 | 0.057388 | 0.0 | 2.47
Output | 5.6019e-05 | 5.6019e-05 | 5.6019e-05 | 0.0 | 0.00
Modify | 0.65159 | 0.65159 | 0.65159 | 0.0 | 28.04
Other | | 0.02549 | | | 1.10
Pair | 1.2877 | 1.2877 | 1.2877 | 0.0 | 56.61
Bond | 0.00049357 | 0.00049357 | 0.00049357 | 0.0 | 0.02
Neigh | 0.28068 | 0.28068 | 0.28068 | 0.0 | 12.34
Comm | 0.055813 | 0.055813 | 0.055813 | 0.0 | 2.45
Output | 5.5144e-05 | 5.5144e-05 | 5.5144e-05 | 0.0 | 0.00
Modify | 0.62478 | 0.62478 | 0.62478 | 0.0 | 27.47
Other | | 0.02499 | | | 1.10
Nlocal: 864 ave 864 max 864 min
Histogram: 1 0 0 0 0 0 0 0 0 0
@ -148,21 +162,21 @@ Per MPI rank memory allocation (min/avg/max) = 6.481 | 6.481 | 6.481 Mbytes
36000 8.3048574 -55.079475 0 -54.153056 338.04291
38000 8.8708544 -55.108991 0 -54.119434 330.70097
40000 8.4012779 -55.080817 0 -54.143642 338.54326
Loop time of 19.3834 on 1 procs for 35000 steps with 864 atoms
Loop time of 19.0379 on 1 procs for 35000 steps with 864 atoms
Performance: 15601.000 ns/day, 0.002 hours/ns, 1805.671 timesteps/s, 1.560 Matom-step/s
99.9% CPU use with 1 MPI tasks x 1 OpenMP threads
Performance: 15884.146 ns/day, 0.002 hours/ns, 1838.443 timesteps/s, 1.588 Matom-step/s
100.0% CPU use with 1 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 11.828 | 11.828 | 11.828 | 0.0 | 61.02
Bond | 0.0024424 | 0.0024424 | 0.0024424 | 0.0 | 0.01
Neigh | 2.3519 | 2.3519 | 2.3519 | 0.0 | 12.13
Comm | 0.42251 | 0.42251 | 0.42251 | 0.0 | 2.18
Output | 0.00056686 | 0.00056686 | 0.00056686 | 0.0 | 0.00
Modify | 4.5987 | 4.5987 | 4.5987 | 0.0 | 23.73
Other | | 0.1793 | | | 0.93
Pair | 11.641 | 11.641 | 11.641 | 0.0 | 61.14
Bond | 0.003055 | 0.003055 | 0.003055 | 0.0 | 0.02
Neigh | 2.3613 | 2.3613 | 2.3613 | 0.0 | 12.40
Comm | 0.41299 | 0.41299 | 0.41299 | 0.0 | 2.17
Output | 0.00055686 | 0.00055686 | 0.00055686 | 0.0 | 0.00
Modify | 4.442 | 4.442 | 4.442 | 0.0 | 23.33
Other | | 0.1775 | | | 0.93
Nlocal: 864 ave 864 max 864 min
Histogram: 1 0 0 0 0 0 0 0 0 0

View File

@ -1,4 +1,4 @@
LAMMPS (2 Apr 2025 - Development - e4c3b0c05e-modified)
LAMMPS (2 Apr 2025 - Development - 648cd3f0c6-modified)
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:99)
using 1 OpenMP thread(s) per MPI task
# GJ thermostat
@ -74,6 +74,20 @@ author = {Grønbech-Jensen, Niels},
year = {2020}
}
- Langevin GJ-I vfull method: doi:10.1080/00268976.2012.760055
@Article{gronbech-jensen_simple_2013,
title = {A simple and effective Verlet-type algorithm for simulating Langevin dynamics},
volume = {111},
url = {http://www.tandfonline.com/doi/abs/10.1080/00268976.2012.760055},
doi = {10.1080/00268976.2012.760055},
pages = {983-991},
number = {8},
journal = {Molecular Physics},
author = {Grønbech-Jensen, Niels and Farago, Oded},
year = {2013}
}
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule
@ -93,21 +107,21 @@ Per MPI rank memory allocation (min/avg/max) = 6.427 | 6.427 | 6.427 Mbytes
Step Temp E_pair E_mol TotEng Press
0 10 -56.207652 0 -55.092137 33.341103
5000 7.946377 -55.076514 0 -54.190084 337.31999
Loop time of 2.0791 on 4 procs for 5000 steps with 864 atoms
Loop time of 2.10015 on 4 procs for 5000 steps with 864 atoms
Performance: 20778.210 ns/day, 0.001 hours/ns, 2404.885 timesteps/s, 2.078 Matom-step/s
64.9% CPU use with 4 MPI tasks x 1 OpenMP threads
Performance: 20570.001 ns/day, 0.001 hours/ns, 2380.787 timesteps/s, 2.057 Matom-step/s
64.0% CPU use with 4 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 0.52985 | 0.53809 | 0.54586 | 0.8 | 25.88
Bond | 0.00054599 | 0.00057676 | 0.00061668 | 0.0 | 0.03
Neigh | 0.10872 | 0.10965 | 0.11044 | 0.2 | 5.27
Comm | 0.95581 | 0.96284 | 0.97025 | 0.5 | 46.31
Output | 0.00027472 | 0.00028374 | 0.00029435 | 0.0 | 0.01
Modify | 0.25077 | 0.25198 | 0.2529 | 0.2 | 12.12
Other | | 0.2157 | | | 10.37
Pair | 0.54244 | 0.54516 | 0.54794 | 0.3 | 25.96
Bond | 0.00056978 | 0.00065706 | 0.00071013 | 0.0 | 0.03
Neigh | 0.10885 | 0.11 | 0.11178 | 0.4 | 5.24
Comm | 0.96848 | 0.97341 | 0.97775 | 0.3 | 46.35
Output | 0.00028754 | 0.00029437 | 0.00030094 | 0.0 | 0.01
Modify | 0.25125 | 0.25293 | 0.25477 | 0.3 | 12.04
Other | | 0.2177 | | | 10.37
Nlocal: 216 ave 216 max 216 min
Histogram: 4 0 0 0 0 0 0 0 0 0
@ -148,21 +162,21 @@ Per MPI rank memory allocation (min/avg/max) = 6.428 | 6.428 | 6.428 Mbytes
36000 8.0936615 -55.152202 0 -54.249342 316.20169
38000 7.999652 -55.048407 0 -54.156034 345.07945
40000 8.6699753 -55.087634 0 -54.120485 337.23709
Loop time of 17.5212 on 4 procs for 35000 steps with 864 atoms
Loop time of 17.6531 on 4 procs for 35000 steps with 864 atoms
Performance: 17259.111 ns/day, 0.001 hours/ns, 1997.582 timesteps/s, 1.726 Matom-step/s
63.6% CPU use with 4 MPI tasks x 1 OpenMP threads
Performance: 17130.136 ns/day, 0.001 hours/ns, 1982.655 timesteps/s, 1.713 Matom-step/s
63.9% CPU use with 4 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 4.9924 | 5.0801 | 5.1446 | 2.4 | 28.99
Bond | 0.0041975 | 0.0044234 | 0.0046863 | 0.3 | 0.03
Neigh | 0.85805 | 0.86369 | 0.87021 | 0.5 | 4.93
Comm | 6.7339 | 6.8008 | 6.8891 | 2.1 | 38.81
Output | 0.0044786 | 0.0046306 | 0.0050572 | 0.4 | 0.03
Modify | 3.2849 | 3.2919 | 3.2981 | 0.3 | 18.79
Other | | 1.476 | | | 8.42
Pair | 5.0485 | 5.078 | 5.11 | 1.0 | 28.77
Bond | 0.0038244 | 0.0043855 | 0.0047706 | 0.6 | 0.02
Neigh | 0.8487 | 0.86408 | 0.87685 | 1.1 | 4.89
Comm | 6.8368 | 6.8833 | 6.9317 | 1.4 | 38.99
Output | 0.004493 | 0.0045296 | 0.0045945 | 0.1 | 0.03
Modify | 3.3123 | 3.3253 | 3.3366 | 0.5 | 18.84
Other | | 1.494 | | | 8.46
Nlocal: 216 ave 222 max 210 min
Histogram: 2 0 0 0 0 0 0 0 0 2

View File

@ -94,7 +94,20 @@ static const char cite_langevin_gjf_vhalf[] =
"author = {Jensen, Lucas Frese Grønbech and Grønbech-Jensen, Niels},\n"
"year = {2019}\n"
"}\n\n";
static const char cite_langevin_gjf_vfull[] =
"Langevin GJ-I vfull method: doi:10.1080/00268976.2012.760055\n\n"
"@Article{gronbech-jensen_simple_2013,\n"
"title = {A simple and effective Verlet-type algorithm for simulating Langevin dynamics},\n"
"volume = {111},\n"
"url = {http://www.tandfonline.com/doi/abs/10.1080/00268976.2012.760055},\n"
"doi = {10.1080/00268976.2012.760055},\n"
"pages = {983-991},\n"
"number = {8},\n"
"journal = {Molecular Physics},\n"
"author = {Grønbech-Jensen, Niels and Farago, Oded},\n"
"year = {2013}\n"
"}\n\n";
/* ---------------------------------------------------------------------- */
@ -166,6 +179,7 @@ FixLangevinGJF::FixLangevinGJF(LAMMPS *lmp, int narg, char **arg) :
error->all(FLERR, "Illegal fix langevin/gjf command");
}
if (GJmethod == 1 && osflag == 0) if (lmp->citeme) lmp->citeme->add(cite_langevin_gjf_vhalf);
if (GJmethod == 1 && osflag == 1) if (lmp->citeme) lmp->citeme->add(cite_langevin_gjf_vfull);
// set temperature = nullptr, user can override via fix_modify if wants bias
id_temp = nullptr;