Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Brownian Dynamics within the existing VV loop #1842

Merged
merged 207 commits into from
Jan 25, 2020
Merged
Show file tree
Hide file tree
Changes from 200 commits
Commits
Show all changes
207 commits
Select commit Hold shift + click to select a range
1ac37f9
Brownian Dynamics feature: core/python/test
bogdan-tanygin Sep 12, 2017
fe27b61
Partial fix of the BD thermo test
bogdan-tanygin Sep 12, 2017
2534899
Fix
bogdan-tanygin Sep 16, 2017
d9cf057
Merge branch 'python' of git://github.com/espressomd/espresso into es…
bogdan-tanygin Oct 19, 2017
e42ca43
Merge branch 'espressomd-python' into bd
bogdan-tanygin Oct 19, 2017
ec68653
maxset build fix
bogdan-tanygin Oct 19, 2017
d4836e3
Travis BD improvement
bogdan-tanygin Oct 19, 2017
4310a0e
Merge pull request #157 from espressomd/python
bogdan-tanygin Oct 20, 2017
797255c
Merge pull request #158 from espressomd/python
bogdan-tanygin Oct 23, 2017
d551f17
BD maxset update by head changes
bogdan-tanygin Oct 23, 2017
ea20f77
BD thermo test merge into LD test as test cases
bogdan-tanygin Oct 23, 2017
f13c04f
Travis BD test infra fix
bogdan-tanygin Oct 23, 2017
99b5089
Merge pull request #160 from espressomd/python
bogdan-tanygin Oct 25, 2017
06ef662
Merge pull request #162 from espressomd/python
bogdan-tanygin Oct 26, 2017
c51d96f
Drift test stub
bogdan-tanygin Oct 29, 2017
a7c3b3c
Merge branch 'deceleration-test' into bd
bogdan-tanygin Oct 29, 2017
30112e5
Drift accuracy calc improvement
bogdan-tanygin Oct 29, 2017
3a697db
Positional drift tests: rotational and translational ones
bogdan-tanygin Oct 29, 2017
b030f9a
The sin() validation in the drift tests
bogdan-tanygin Oct 29, 2017
8da44b5
Tolerance tuning
bogdan-tanygin Oct 29, 2017
6e971c3
Test utils: reference frame conversion
bogdan-tanygin Nov 5, 2017
badd2e1
Rotational diffusion validation
bogdan-tanygin Nov 5, 2017
522cee9
Rot diffusion tests without any fixed axes
bogdan-tanygin Nov 6, 2017
a98aea9
Merge branch 'python' of git://github.com/espressomd/espresso into es…
bogdan-tanygin Nov 13, 2017
f614304
Merge branch 'espressomd-python' into rot-diffusion-test
bogdan-tanygin Nov 13, 2017
0f0ed38
Anisotropic rotational diffusion test, its speed-up
bogdan-tanygin Nov 13, 2017
5bdb382
BD: Maxwell distribution enablement
bogdan-tanygin Nov 16, 2017
71c3653
BD docs, corrections
bogdan-tanygin Nov 26, 2017
23982e9
Drag terminal velocity tests
bogdan-tanygin Jan 10, 2018
e849a85
Merge branch 'drift-tests-2' into bd
bogdan-tanygin Feb 8, 2018
33524e7
BD feature test requirement
bogdan-tanygin Feb 9, 2018
d49e0d2
Feature configuration condition
bogdan-tanygin Feb 9, 2018
ed19f3b
Repeating code move to the function
bogdan-tanygin Feb 9, 2018
7cda92f
Merge branch 'bd' of https://github.com/psci2195/espresso-ffans into bd
bogdan-tanygin Feb 9, 2018
ad66308
Merge branch 'rot-diffusion-test' into bd
bogdan-tanygin Feb 9, 2018
78de70a
Naming convention
bogdan-tanygin Feb 10, 2018
a8f3a00
Interim durable test
bogdan-tanygin Feb 10, 2018
8572134
Merge branch 'python' of https://github.com/espressomd/espresso into …
bogdan-tanygin Feb 10, 2018
8db143c
Merge branch 'espressomd-python' into bd
bogdan-tanygin Feb 10, 2018
a728951
Long run rot diffusion test
bogdan-tanygin Feb 10, 2018
1475fae
Merge pull request #183 from espressomd/python
bogdan-tanygin Feb 10, 2018
bdd2c30
Test call correction
bogdan-tanygin Feb 10, 2018
edb628c
Test speed up
bogdan-tanygin Feb 10, 2018
c50cc11
Test speed up
bogdan-tanygin Feb 10, 2018
c39d875
BD documentation improvement
bogdan-tanygin Mar 11, 2018
e0c0dae
BD infrastructure correction, cleanup
bogdan-tanygin Mar 11, 2018
f697be0
Formatting and code style polishing
bogdan-tanygin Mar 11, 2018
3aa767f
Requested refactoring, bibliography references
bogdan-tanygin Mar 12, 2018
a669b45
CPU number in the Brownian Dynamics test
bogdan-tanygin Mar 12, 2018
5f37f3c
Infra: special maxset-bd configuration removal
bogdan-tanygin Mar 12, 2018
90e4179
Merge pull request #184 from psci2195/pr1842
bogdan-tanygin Mar 12, 2018
8695916
Making more BD functions inline
bogdan-tanygin Mar 12, 2018
9a3071e
Merge pull request #185 from psci2195/pr1842
bogdan-tanygin Mar 12, 2018
59f307c
Merge branch 'python' of https://github.com/espressomd/espresso into …
bogdan-tanygin Mar 13, 2018
cc3eb12
Merge branch 'espressomd-python' into pr1842
bogdan-tanygin Mar 13, 2018
4122b80
Merge pull request #187 from psci2195/pr1842
bogdan-tanygin Mar 13, 2018
7919b0a
Code cleanup
bogdan-tanygin Mar 13, 2018
0629002
Refactoring
bogdan-tanygin Mar 13, 2018
95f6d99
Test cleanup, speed up
bogdan-tanygin Mar 13, 2018
fd34faa
Test speed up
bogdan-tanygin Mar 13, 2018
937f778
Merge branch 'python' of https://github.com/espressomd/espresso into …
bogdan-tanygin Mar 13, 2018
30fb410
Merge branch 'espressomd-python' into pr1842
bogdan-tanygin Mar 13, 2018
5414c55
Cleanup of test fragments which are out of the BD scope
bogdan-tanygin Mar 13, 2018
c075ec8
Rotational diffusion test fix
bogdan-tanygin Mar 13, 2018
8660921
Merge pull request #189 from psci2195/pr1842
bogdan-tanygin Mar 13, 2018
5952c1c
Trigger
bogdan-tanygin Mar 13, 2018
c7086e9
Merge branch 'bd' of https://github.com/psci2195/espresso-ffans into bd
bogdan-tanygin Mar 13, 2018
78e5975
The changes cleanup
bogdan-tanygin Mar 18, 2018
2744188
BD: additional documentation
bogdan-tanygin Mar 19, 2018
571e80c
Merge pull request #191 from espressomd/python
bogdan-tanygin Mar 21, 2018
fb26fc6
Merge branch 'python' of https://github.com/espressomd/espresso into …
bogdan-tanygin Apr 23, 2018
3fd27fa
Merge branch 'espressomd-python' into bd
bogdan-tanygin Apr 23, 2018
050881b
BD doc update
bogdan-tanygin Apr 23, 2018
e1be03c
Merge branch 'python' into bd
bogdan-tanygin Apr 23, 2018
e53666c
Merge branch 'python' of https://github.com/espressomd/espresso into …
bogdan-tanygin May 27, 2018
401ab2a
Reduction of the box
bogdan-tanygin May 27, 2018
464d03d
Merge branch 'espressomd-python' into bd-merge
bogdan-tanygin May 27, 2018
a4b1bda
BD test fix according to new accumulators package
bogdan-tanygin May 28, 2018
7927b16
Merge pull request #196 from espressomd/python
bogdan-tanygin May 28, 2018
d2ad2f0
Merge pull request #197 from espressomd/python
bogdan-tanygin May 28, 2018
f11a284
Merge pull request #199 from psci2195/bd-merge
bogdan-tanygin May 28, 2018
86196d5
Merge branch 'python' of https://github.com/espressomd/espresso into …
bogdan-tanygin Jun 5, 2018
247b11b
Merge branch 'python' of https://github.com/espressomd/espresso into …
bogdan-tanygin Jun 5, 2018
3477114
Merge branch 'espressomd-python' into bd-merge
bogdan-tanygin Jun 5, 2018
d9a36e9
Merge pull request #201 from psci2195/bd-merge
bogdan-tanygin Jun 5, 2018
bae3fa3
Merge branch 'python' of https://github.com/espressomd/espresso into …
bogdan-tanygin Jun 14, 2018
3db0d09
Merge branch 'espressomd-python' into bd-merge-2
bogdan-tanygin Jun 14, 2018
16faae2
Longrun removal
bogdan-tanygin Jun 14, 2018
d0faa2c
Refactoring according to previous review
bogdan-tanygin Jun 14, 2018
274cf76
BD thermo viscous test
bogdan-tanygin Jun 14, 2018
8930afe
Refactoring
bogdan-tanygin Jun 14, 2018
2e97d59
Significant performance improvement due to BD advantages
bogdan-tanygin Jun 14, 2018
5753d65
Different random generators related fine-tuning
bogdan-tanygin Jun 14, 2018
0369aed
Merge pull request #210 from psci2195/bd-merge-2
bogdan-tanygin Jun 14, 2018
adf54a5
Merge branch 'python' of https://github.com/espressomd/espresso into …
bogdan-tanygin Sep 10, 2018
a35dc68
Merge branch 'espressomd-python' into bd-merge-3
bogdan-tanygin Sep 10, 2018
e4728c9
Merge pull request #220 from psci2195/bd-merge-3
bogdan-tanygin Sep 10, 2018
28ef0dd
Runtime error fix
bogdan-tanygin Sep 11, 2018
f663ec4
Test fix and speed-up
bogdan-tanygin Sep 11, 2018
e277747
Refactoring according to the CodeFactor critical requirement
bogdan-tanygin Sep 11, 2018
66df6f5
Refactoring
bogdan-tanygin Sep 11, 2018
c14b5bc
Clang build fix: zero division removal
bogdan-tanygin Sep 12, 2018
b8e2ceb
Trigger
bogdan-tanygin Sep 12, 2018
a2c43c4
Refactoring
bogdan-tanygin Sep 13, 2018
86db6a9
nocheck build fix (BD)
bogdan-tanygin Sep 14, 2018
ab7fbf1
Formatting
bogdan-tanygin Sep 14, 2018
5c49fc7
Merge branch 'python' of https://github.com/espressomd/espresso into bd
KaiSzuttor Sep 27, 2018
0143da4
Merge branch 'python' of https://github.com/espressomd/espresso into …
bogdan-tanygin Oct 15, 2018
16e2ee3
Merge branch 'espressomd-python' into bd
bogdan-tanygin Oct 15, 2018
b5e6978
Merge pull request #224 from psci2195/bd
bogdan-tanygin Dec 25, 2018
3b3a4c5
Merge branch 'python' of https://github.com/espressomd/espresso into …
bogdan-tanygin Dec 28, 2018
94ea5f8
Merge branch 'espressomd-python' into pr1842
bogdan-tanygin Dec 28, 2018
0fd8bec
Merge pull request #226 from psci2195/pr1842
bogdan-tanygin Dec 30, 2018
0f25fd8
Formatting rules alignments
bogdan-tanygin Dec 30, 2018
e390bd8
Merge pull request #227 from psci2195/pr1842
bogdan-tanygin Dec 30, 2018
49906b6
Merge pull request #236 from espressomd/python
bogdan-tanygin Jan 10, 2019
b091e8c
Added get_state of the BD thermostat
bogdan-tanygin Jan 10, 2019
c740070
Refactoring: BD test cases separation where one makes sense
bogdan-tanygin Jan 11, 2019
bcabe8f
Style
bogdan-tanygin Jan 11, 2019
f12edb6
Style
bogdan-tanygin Jan 11, 2019
098b14f
Disable BD for virtual sites by default
bogdan-tanygin Jan 13, 2019
807a8ea
Test refactoring
bogdan-tanygin Jan 13, 2019
daefcb9
Style
bogdan-tanygin Jan 13, 2019
fcd6ca3
More tight tolerance
bogdan-tanygin Jan 13, 2019
ee03e44
Tune the tolerance for specific Gitlab platforms
bogdan-tanygin Jan 13, 2019
711e4ce
Virtual sites propagation only for rotations
bogdan-tanygin Jan 14, 2019
6db21f8
Formatting
bogdan-tanygin Jan 14, 2019
179d801
Virtual sites translational thermostat control
bogdan-tanygin Jan 14, 2019
4b99052
Formatting
bogdan-tanygin Jan 15, 2019
b8e0135
Merge branch 'python' of https://github.com/espressomd/espresso into …
bogdan-tanygin Jan 16, 2019
8fb7d86
Merge branch 'espressomd-python' into bd-temp
bogdan-tanygin Jan 16, 2019
f687f27
Perrin's rot test for BD
bogdan-tanygin Jan 17, 2019
d1bfcbd
Merge pull request #245 from psci2195/bd-temp
bogdan-tanygin Jan 17, 2019
cc43e1a
Formatting
bogdan-tanygin Jan 17, 2019
109627d
Parameters for multi-core stable run / refactoring
bogdan-tanygin Jan 20, 2019
fbc00a8
Making the algorithm to be independ on an order of the rotations
bogdan-tanygin Jan 20, 2019
b23e23d
Merge branch 'python' of https://github.com/espressomd/espresso into …
bogdan-tanygin May 30, 2019
8bb339c
Merge branch 'python' of https://github.com/espressomd/espresso into …
bogdan-tanygin May 30, 2019
0052047
Merge branch 'espressomd-python' into bd-mergework
bogdan-tanygin May 30, 2019
a155190
Merge pull request #257 from psci2195/bd-mergework
bogdan-tanygin May 30, 2019
093a0a0
Merge pull request #258 from espressomd/python
bogdan-tanygin Jun 1, 2019
ac64fe1
Merge pull request #262 from espressomd/python
bogdan-tanygin Jun 6, 2019
d22265b
documentation rules fixing
bogdan-tanygin Jun 6, 2019
4eacd66
technical revert
bogdan-tanygin Jun 6, 2019
e7ce993
style
bogdan-tanygin Jun 6, 2019
5d1c93e
documentation rules fixing
bogdan-tanygin Jun 6, 2019
6e4f4c5
clang build fix
bogdan-tanygin Jun 6, 2019
04c7550
default build fix
bogdan-tanygin Jun 6, 2019
8357b86
clang build fix
bogdan-tanygin Jun 6, 2019
9b98323
clang build fixes
bogdan-tanygin Jun 6, 2019
ce15708
Merge branch 'python' of https://github.com/espressomd/espresso into …
bogdan-tanygin Jun 13, 2019
f24a55e
Merge branch 'espressomd-python' into bd-merge
bogdan-tanygin Jun 13, 2019
8f6dc02
Merge branch 'bd-merge' into bd
bogdan-tanygin Jun 13, 2019
4420866
Merge pull request #265 from espressomd/python
bogdan-tanygin Jun 17, 2019
ed669fa
Merge branch 'python' of git://github.com/espressomd/espresso into pr…
RudolfWeeber Aug 2, 2019
c3fdb00
Merge regression and accuracy in testsuite
RudolfWeeber Aug 2, 2019
ce3196e
Merge branch 'python' of git://github.com/espressomd/espresso into pr…
RudolfWeeber Aug 2, 2019
a98f392
Formatting
RudolfWeeber Aug 2, 2019
2b11644
Merge branch 'python' of git://github.com/espressomd/espresso into pr…
RudolfWeeber Sep 3, 2019
c4d9aad
Merge branch 'python' of https://github.com/espressomd/espresso into …
bogdan-tanygin Oct 26, 2019
a943e77
Merge branch 'python' of https://github.com/espressomd/espresso into …
bogdan-tanygin Oct 26, 2019
032ee9d
Merge branch 'espressomd-python' into bd-pr1842
bogdan-tanygin Oct 26, 2019
4dbe052
Merge pull request #275 from psci2195/bd-pr1842
bogdan-tanygin Oct 26, 2019
e31368e
Merge pull request #276 from espressomd/python
bogdan-tanygin Nov 9, 2019
c7d10cc
Style
bogdan-tanygin Nov 9, 2019
f9abec9
Merge typo fix
bogdan-tanygin Nov 9, 2019
1a8b181
Trivial parametric issue (the rnd sequence has been changed by extra …
bogdan-tanygin Nov 9, 2019
f68443d
Refactoring: new mask routine usage
bogdan-tanygin Nov 9, 2019
c64d488
Brownian dynamics docs update
bogdan-tanygin Nov 9, 2019
7c9254e
Merge branch 'bd' of ssh://github.com/psci2195/espresso-ffans into bd
bogdan-tanygin Nov 9, 2019
d8842ca
Merge branch 'python' of https://github.com/espressomd/espresso into bd
fweik Nov 12, 2019
b5af9e2
Formatting
fweik Nov 12, 2019
4508842
config: Remove BROWNIAN_DyNAMICS as compile-time feature
RudolfWeeber Nov 13, 2019
ab6a54f
BD: body gamma and lab force match
bogdan-tanygin Nov 30, 2019
adf9fb4
Code deduplication
bogdan-tanygin Nov 30, 2019
ffe1de0
Merge branch 'python' of https://github.com/espressomd/espresso into …
bogdan-tanygin Nov 30, 2019
66d880c
Merge branch 'espressomd-python' into bd
bogdan-tanygin Nov 30, 2019
70a9341
Style aligning
bogdan-tanygin Nov 30, 2019
f203cfa
Empty and nortation build and tests fixes
bogdan-tanygin Nov 30, 2019
2a62b41
Unset the unused variable
bogdan-tanygin Nov 30, 2019
d16a340
Trigger
bogdan-tanygin Dec 1, 2019
e611efb
Refactoring for unused values
bogdan-tanygin Dec 1, 2019
84afe2c
Merge commit 'b7ff4' into pr1842
RudolfWeeber Jan 20, 2020
9e73eed
Merge commit 'refs/pull/1842/head' of git://github.com/espressomd/esp…
RudolfWeeber Jan 20, 2020
6a86e44
Core: Add RNG salts for all different randoms used in Brownian dynamics
RudolfWeeber Jan 20, 2020
fd04ef1
Core: Increment Langevin counter for Brownian dynamics
RudolfWeeber Jan 20, 2020
adce6a9
Py: Cope with Brownian-dynamics/ Langevin entanglement
RudolfWeeber Jan 20, 2020
0361b0e
Formatting
RudolfWeeber Jan 20, 2020
e78dfb8
Testsuite: Brownian dynamics, minor fixes
RudolfWeeber Jan 20, 2020
cc831ec
Formatting
RudolfWeeber Jan 20, 2020
138fe00
Revert rotational-diffusion-aniso test to before merge and use low pe…
RudolfWeeber Jan 21, 2020
379bff1
Tutorial 12: support both pint 0.9 and 10.1 (#3423)
kodiakhq[bot] Jan 20, 2020
4eeaf9f
Merge branch 'python' into bd
jngrad Jan 21, 2020
4634a6a
Fix typos, code formatting, constants
jngrad Jan 21, 2020
545f4e2
Update bibliography and doxygen
jngrad Jan 21, 2020
b522d04
Test Brownian Dynamics checkpointing
jngrad Jan 21, 2020
ede6e7e
Split Brownian and Langevin code
jngrad Jan 21, 2020
9fefd1b
Merge branch 'python' of git://github.com/espressomd/espresso into pr…
RudolfWeeber Jan 22, 2020
3f29600
Make sentinels constexpr and move them
jngrad Jan 22, 2020
c6c8963
Move Brownian Dynamics globals in a struct
jngrad Jan 22, 2020
03dd0ba
Merge commit 'refs/pull/1842/head' of git://github.com/espressomd/esp…
RudolfWeeber Jan 23, 2020
35995b3
Merge branch 'python' into bd
RudolfWeeber Jan 23, 2020
a5624cc
Core: Brownian Dynamics Fix handling of thermo_virtual
RudolfWeeber Jan 23, 2020
602ce2c
Merge commit 'refs/pull/1842/head' of git://github.com/espressomd/esp…
RudolfWeeber Jan 23, 2020
ef28de2
Formatting
RudolfWeeber Jan 23, 2020
26676a2
Fix typo in the BD vel assignment
bogdan-tanygin Jan 24, 2020
1438ecf
Fix: rotational gamma assignment to the sigma_pos_rotation_inv
bogdan-tanygin Jan 24, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 24 additions & 1 deletion doc/doxygen/bibliography.bib
Original file line number Diff line number Diff line change
Expand Up @@ -351,6 +351,17 @@ @Article{neumann85b
doi = {10.1063/1.448553},
}

@Book{Pottier2010,
title={{Nonequilibrium Statistical Physics}},
subtitle={{Linear Irreversible Processes}},
author={Pottier, No\"{e}lle},
year={2010},
series={Oxford Graduate Texts},
publisher={OUP Oxford},
isbn={9780199556885},
url={https://global.oup.com/academic/product/nonequilibrium-statistical-physics-9780199556885},
}

@Article{reed92a,
title = {{Monte Carlo study of titration of linear polyelectrolytes}},
author = {Reed, C. E. and Reed, W. F.},
Expand All @@ -361,6 +372,18 @@ @Article{reed92a
doi = {10.1063/1.462145},
}

@Book{schlick2010,
title = {{Molecular Modeling and Simulation: An Interdisciplinary Guide}},
author = {Schlick, Tamar},
series = {Interdisciplinary Applied Mathematics},
volume = {21},
year = {2010},
publisher = {Springer New York},
address = {New York, NY},
isbn = {978-1-4419-6350-5},
doi = {10.1007/978-1-4419-6351-2},
}

@Article{smith94c,
title={{The reaction ensemble method for the computer simulation of chemical and phase equilibria. I. Theory and basic examples}},
author={Smith, W. R. and Triska, B.},
Expand Down Expand Up @@ -398,7 +421,7 @@ @book{allen2017
title={Computer simulation of liquids},
author={Allen, Michael P and Tildesley, Dominic J},
year={2017},
publisher={Oxford university press},
publisher={Oxford University Press},
url={https://global.oup.com/academic/product/computer-simulation-of-liquids-9780198803201},
doi={10.1093/oso/9780198803195.001.0001},
isbn={9780198803195},
Expand Down
4 changes: 2 additions & 2 deletions doc/sphinx/analysis.rst
Original file line number Diff line number Diff line change
Expand Up @@ -411,7 +411,7 @@ are calculated is beyond the scope of this manual. Three body potentials
are implemented following the procedure in
Ref. :cite:`thompson09a`. A different formula is used to
calculate contribution from electrostatic interactions. For
electrostatic interactions in P3M, the :math:`k`-space contribution is implemented according to :cite:`essmann1995smooth`.
electrostatic interactions in P3M, the :math:`k`-space contribution is implemented according to :cite:`essmann95a`.
The implementation of the Coulomb P3M pressure is tested against LAMMPS.

Four-body dihedral potentials are not included. Except of
Expand Down Expand Up @@ -439,7 +439,7 @@ The instantaneous virial stress tensor is calculated by
where the notation is the same as for the pressure. The superscripts :math:`k`
and :math:`l` correspond to the components in the tensors and vectors.

If electrostatic interactions are present then also the coulombic parts of the stress tensor need to be calculated. If P3M is present, then the instantaneous stress tensor is added to the above equation in accordance with :cite:`essmann1995smooth` :
If electrostatic interactions are present then also the coulombic parts of the stress tensor need to be calculated. If P3M is present, then the instantaneous stress tensor is added to the above equation in accordance with :cite:`essmann95a` :

.. math :: p^\text{Coulomb, P3M}_{(k,l)} =p^\text{Coulomb, P3M, dir}_{(k,l)} + p^\text{Coulomb, P3M, rec}_{(k,l)},

Expand Down
114 changes: 97 additions & 17 deletions doc/sphinx/system_setup.rst
Original file line number Diff line number Diff line change
Expand Up @@ -267,25 +267,25 @@ The Langevin thermostat is based on an extension of Newton's equation of motion

.. math:: m_i \dot{v}_i(t) = f_i(\{x_j\},v_i,t) - \gamma v_i(t) + \sqrt{2\gamma k_B T} \eta_i(t).

Here, :math:`f_i` are all deterministic forces from interactions,
:math:`\gamma` the bare friction coefficient and :math:`\eta` a random, "thermal" force.
Here, :math:`f_i` are all deterministic forces from interactions,
:math:`\gamma` the bare friction coefficient and :math:`\eta` a random, "thermal" force.
The friction term accounts for dissipation in a surrounding fluid whereas
the random force mimics collisions of the particle with solvent molecules
the random force mimics collisions of the particle with solvent molecules
at temperature :math:`T` and satisfies

.. math:: <\eta(t)> = 0 , <\eta^\alpha_i(t)\eta^\beta_j(t')> = \delta_{\alpha\beta} \delta_{ij}\delta(t-t')

(:math:`<\cdot>` denotes the ensemble average and :math:`\alpha,\beta` are spatial coordinates).
(:math:`<\cdot>` denotes the ensemble average and :math:`\alpha,\beta` are spatial coordinates).

In the |es| implementation of the Langevin thermostat,
the additional terms only enter in the force calculation.
This reduces the accuracy of the Velocity Verlet integrator
by one order in :math:`dt` because forces are now velocity-dependent.

The random process :math:`\eta(t)` is discretized by drawing an uncorrelated random number
:math:`\overline{\eta}` for each component of all the particle forces.
:math:`\overline{\eta}` for each component of all the particle forces.
The distribution of :math:`\overline{\eta}` is uniform and satisfies

.. math:: <\overline{\eta}> = 0 , <\overline{\eta}\overline{\eta}> = 1/dt

The keyword ``seed`` controls the state of the random number generator (Philox
Expand All @@ -305,9 +305,9 @@ can be useful, for instance, in high Péclet number active matter systems, where
one only wants to thermalize only the rotational degrees of freedom and
translational motion is effected by the self-propulsion.

The keywords ``gamma`` and ``gamma_rotate`` can be specified as a scalar,
or, with feature ``PARTICLE_ANISOTROPY`` compiled in, as the three eigenvalues
of the respective friction coefficient tensor. This is enables the simulation of
The keywords ``gamma`` and ``gamma_rotate`` can be specified as a scalar,
or, with feature ``PARTICLE_ANISOTROPY`` compiled in, as the three eigenvalues
of the respective friction coefficient tensor. This is enables the simulation of
the anisotropic diffusion of anisotropic colloids (rods, etc.).

Using the Langevin thermostat, it is possible to set a temperature and a
Expand All @@ -324,17 +324,17 @@ The :ref:`Lattice-Boltzmann` thermostat acts similar to the :ref:`Langevin therm

.. math:: m_i \dot{v}_i(t) = f_i(\{x_j\},v_i,t) - \gamma (v_i(t)-u(x_i(t),t)) + \sqrt{2\gamma k_B T} \eta_i(t).

where :math:`u(x,t)` is the fluid velocity at position :math:`x` and time :math:`t`.
To preserve momentum, an equal and opposite friction force and random force act on the fluid.
where :math:`u(x,t)` is the fluid velocity at position :math:`x` and time :math:`t`.
To preserve momentum, an equal and opposite friction force and random force act on the fluid.

Numerically the fluid velocity is determined from the lattice-Boltzmann node velocities
Numerically the fluid velocity is determined from the lattice-Boltzmann node velocities
by interpolating as described in :ref:`Interpolating velocities`.
The backcoupling of friction forces and noise to the fluid is also done by distributing those forces amongst the nearest LB nodes.
The backcoupling of friction forces and noise to the fluid is also done by distributing those forces amongst the nearest LB nodes.
Details for both the interpolation and the force distribution can be found in :cite:`ahlrichs99` and :cite:`duenweg08a`.

The LB fluid can be used to thermalize particles, while also including their hydrodynamic interactions.
The LB thermostat expects an instance of either :class:`espressomd.lb.LBFluid` or :class:`espressomd.lb.LBFluidGPU`.
Temperature is set via the ``kT`` argument of the LB fluid.
Temperature is set via the ``kT`` argument of the LB fluid.

Furthermore a ``seed`` has to be given for the
thermalization of the particle coupling. The magnitude of the frictional coupling can be adjusted by
Expand Down Expand Up @@ -362,8 +362,8 @@ Dissipative Particle Dynamics (DPD)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

The DPD thermostat adds friction and noise to the particle
dynamics like the :ref:`Langevin thermostat`, but these
are not applied to every particle individually but instead
dynamics like the :ref:`Langevin thermostat`, but these
are not applied to every particle individually but instead
encoded in a dissipative interaction between particles :cite:`soddeman03a`.

To realize a complete DPD fluid model in |es|, three parts are needed:
Expand All @@ -376,7 +376,7 @@ The temperature is set via
which takes ``kT`` as the only argument.

The friction coefficients and cutoff are controlled via the
:ref:`DPD interaction` on a per type-pair basis. For details
:ref:`DPD interaction` on a per type-pair basis. For details
see there.

The friction (dissipative) and noise (random) term are coupled via the
Expand Down Expand Up @@ -428,6 +428,86 @@ Be aware that this feature is neither properly examined for all systems
nor is it maintained regularly. If you use it and notice strange
behavior, please contribute to solving the problem.

.. _Brownian thermostat:

Brownian thermostat
~~~~~~~~~~~~~~~~~~~

Brownian thermostat is a formal name of a thermostat enabling the
Brownian Dynamics feature (see :cite:`schlick2010`) which implies
a propagation scheme involving systematic and thermal parts of the
classical Ermak-McCammom's (see :cite:`ermak78a`)
Brownian Dynamics. Currently it is implemented without
hydrodynamic interactions, i.e.
with a diagonal diffusion tensor.
The hydrodynamic interactions feature will be available later
as a part of the present Brownian Dynamics or
implemented separately within the Stokesian Dynamics.

In order to activate the Brownian thermostat, the member function
:py:attr:`~espressomd.thermostat.Thermostat.set_brownian` of the thermostat
class :class:`espressomd.thermostat.Thermostat` has to be invoked.
The system integrator should be also changed.
Best explained in an example::

import espressomd
system = espressomd.System()
system.thermostat.set_brownian(kT=1.0, gamma=1.0, seed=41)
system.integrator.set_brownian_dynamics()

where ``gamma`` (hereinafter :math:`\gamma`) is a viscous friction coefficient.
In terms of the Python interface and setup, the Brownian thermostat is very
similar to the :ref:`Langevin thermostat`. The feature
``BROWNIAN_PER_PARTICLE`` is used to control the per-particle
temperature and the friction coefficient setup. The major differences are
its internal integrator implementation and other temporal constraints.
The integrator is still a symplectic Velocity Verlet-like one.
It is implemented via a viscous drag part and a random walk of both the position and
velocity. Due to a nature of the Brownian Dynamics method, its time step :math:`\Delta t`
should be large enough compared to the relaxation time
:math:`m/\gamma` where :math:`m` is the particle mass.
This requirement is just a conceptual one
without specific implementation technical restrictions.
Note that with all similarities of
Langevin and Brownian Dynamics, the Langevin thermostat temporal constraint
is opposite. A velocity is restarting from zero at every step.
Formally, the previous step velocity at the beginning of the the :math:`\Delta t` interval
is dissipated further
and does not contribute to the end one as well as to the positional random walk.
Another temporal constraint
which is valid for both Langevin and Brownian Dynamics: conservative forces
should not change significantly over the :math:`\Delta t` interval.

The viscous terminal velocity :math:`\Delta v` and corresponding positional
step :math:`\Delta r` are fully driven by conservative forces :math:`F`:

.. math:: \Delta r = \frac{F \cdot \Delta t}{\gamma}

.. math:: \Delta v = \frac{F}{\gamma}

A positional random walk variance of each coordinate :math:`\sigma_p^2`
corresponds to a diffusion within the Wiener process:

.. math:: \sigma_p^2 = 2 \frac{kT}{\gamma} \cdot \Delta t

Each velocity component random walk variance :math:`\sigma_v^2` is defined by the heat
component:

.. math:: \sigma_v^2 = \frac{kT}{m}

Note that the velocity random walk is propagated from zero at each step.

A rotational motion is implemented similarly.
Note: the rotational Brownian dynamics implementation is compatible with particles which have
the isotropic moment of inertia tensor only. Otherwise, the viscous terminal angular velocity
is not defined, i.e. it has no constant direction over the time.

The keyword ``seed`` controls the state of the random number generator (Philox
Counter-based RNG) and is required on first activation of the thermostat. It
can be omitted in subsequent calls of ``set_brownian()``. It is the user's
responsibility to decide whether the thermostat should be deterministic (by
using a fixed seed) or not (by using a randomized seed).

.. _CUDA:

CUDA
Expand Down
26 changes: 25 additions & 1 deletion doc/sphinx/zrefs.bib
Original file line number Diff line number Diff line change
Expand Up @@ -993,6 +993,30 @@ @ARTICLE{wolff04a
timestamp = {2007.06.14}
}

@book{schlick2010,
address = {New York, NY},
author = {Schlick, Tamar},
doi = {10.1007/978-1-4419-6351-2},
isbn = {978-1-4419-6350-5},
publisher = {Springer New York},
series = {Interdisciplinary Applied Mathematics},
title = {{Molecular Modeling and Simulation: An Interdisciplinary Guide}},
volume = {21},
year = {2010},
}

@article{ermak78a,
title={Brownian dynamics with hydrodynamic interactions},
author={Ermak, Donald L and McCammon, J Andrew},
journal={J. Chem. Phys.},
volume={69},
number={4},
pages={1352--1360},
year={1978},
publisher={AIP},
doi={10.1063/1.436761},
}

@Article{cerda08d,
title = {{P3M} algorithm for dipolar interactions.},
author = {Juan J. Cerd\`{a} and V. Ballenegger and O. Lenz and Ch. Holm},
Expand All @@ -1006,7 +1030,7 @@ @Article{cerda08d
timestamp = {2008.01.14}
}

@article{essmann1995smooth,
@article{essmann95a,
title={A smooth particle mesh Ewald method},
author={Essmann, Ulrich and Perera, Lalith and Berkowitz, Max L and Darden, Tom and Lee, Hsing and Pedersen, Lee G},
journal={J. Chem. Phys.},
Expand Down
1 change: 1 addition & 0 deletions maintainer/configs/maxset.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
#define BOND_CONSTRAINT
#define COLLISION_DETECTION
#define LANGEVIN_PER_PARTICLE
#define BROWNIAN_PER_PARTICLE
#define SWIMMER_REACTIONS

#define NPT
Expand Down
1 change: 1 addition & 0 deletions maintainer/configs/no_rotation.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
#define MASS
#define EXTERNAL_FORCES
#define LANGEVIN_PER_PARTICLE
#define BROWNIAN_PER_PARTICLE
#define BOND_CONSTRAINT
#define NPT
#define DPD
Expand Down
1 change: 1 addition & 0 deletions src/config/features.def
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ MASS
EXCLUSIONS
BOND_CONSTRAINT
LANGEVIN_PER_PARTICLE
BROWNIAN_PER_PARTICLE
COLLISION_DETECTION
METADYNAMICS
NPT
Expand Down
1 change: 1 addition & 0 deletions src/config/myconfig-default.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
#define PARTICLE_ANISOTROPY
#define EXTERNAL_FORCES
#define LANGEVIN_PER_PARTICLE
#define BROWNIAN_PER_PARTICLE
#define BOND_CONSTRAINT
#define NPT
#define DPD
Expand Down
21 changes: 20 additions & 1 deletion src/core/global.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,26 @@ const std::unordered_map<int, Datafield> fields{
"n_thermalized_bonds"}}, /* 56 from thermalized_bond.cpp */
{FIELD_FORCE_CAP, {&force_cap, Datafield::Type::DOUBLE, 1, "force_cap"}},
{FIELD_THERMO_VIRTUAL,
{&thermo_virtual, Datafield::Type::BOOL, 1, "thermo_virtual"}}};
{&thermo_virtual, Datafield::Type::BOOL, 1, "thermo_virtual"}},
#ifndef PARTICLE_ANISOTROPY
{FIELD_BROWNIAN_GAMMA_ROTATION,
{&brownian.gamma_rotation, Datafield::Type::DOUBLE, 1,
"brownian.gamma_rotation"}}, /* 57 from thermostat.cpp */
#else
{FIELD_BROWNIAN_GAMMA_ROTATION,
{brownian.gamma_rotation.data(), Datafield::Type::DOUBLE, 3,
"brownian.gamma_rotation"}}, /* 57 from thermostat.cpp */
#endif
#ifndef PARTICLE_ANISOTROPY
{FIELD_BROWNIAN_GAMMA,
{&brownian.gamma, Datafield::Type::DOUBLE, 1,
"brownian.gamma"}}, /* 58 from thermostat.cpp */
#else
{FIELD_BROWNIAN_GAMMA,
{brownian.gamma.data(), Datafield::Type::DOUBLE, 3,
"brownian.gamma"}}, /* 58 from thermostat.cpp */
#endif // PARTICLE_ANISOTROPY
};

std::size_t hash_value(Datafield const &field) {
using boost::hash_range;
Expand Down
6 changes: 5 additions & 1 deletion src/core/global.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,11 @@ enum Fields {
FIELD_THERMALIZEDBONDS,
FIELD_FORCE_CAP,
FIELD_THERMO_VIRTUAL,
FIELD_SWIMMING_PARTICLES_EXIST
FIELD_SWIMMING_PARTICLES_EXIST,
/** index of \ref BrownianThermostat::gamma */
FIELD_BROWNIAN_GAMMA,
/** index of \ref BrownianThermostat::gamma_rotation */
FIELD_BROWNIAN_GAMMA_ROTATION,
};

#endif
Loading