Corrected implementation of ellipsoidal dynamics, made ashared base class for the time-integrators, templated the time-integrators (and so reversed changes that this PR had previously made to random_mars src files), combined docs of all three integrators.

This commit is contained in:
Sam Cameron
2021-04-30 16:30:04 +01:00
parent 5a3cb38705
commit b88cdd6890
36 changed files with 1485 additions and 2575 deletions

View File

@ -40,8 +40,8 @@ OPT.
* :doc:`aveforce <fix_aveforce>`
* :doc:`balance <fix_balance>`
* :doc:`brownian <fix_brownian>`
* :doc:`brownian/asphere <fix_brownian_asphere>`
* :doc:`brownian/sphere <fix_brownian_sphere>`
* :doc:`brownian/asphere <fix_brownian>`
* :doc:`brownian/sphere <fix_brownian>`
* :doc:`bocs <fix_bocs>`
* :doc:`bond/break <fix_bond_break>`
* :doc:`bond/create <fix_bond_create>`

View File

@ -183,8 +183,8 @@ accelerated styles exist.
* :doc:`aveforce <fix_aveforce>` - add an averaged force to each atom
* :doc:`balance <fix_balance>` - perform dynamic load-balancing
* :doc:`brownian <fix_brownian>` - overdamped translational brownian motion
* :doc:`brownian/asphere <fix_brownian_asphere>` - overdamped translational and rotational brownian motion for ellipsoids
* :doc:`brownian/sphere <fix_brownian_sphere>` - overdamped translational and rotational brownian motion for spheres
* :doc:`brownian/asphere <fix_brownian>` - overdamped translational and rotational brownian motion for ellipsoids
* :doc:`brownian/sphere <fix_brownian>` - overdamped translational and rotational brownian motion for spheres
* :doc:`bocs <fix_bocs>` - NPT style time integration with pressure correction
* :doc:`bond/break <fix_bond_break>` - break bonds on the fly
* :doc:`bond/create <fix_bond_create>` - create bonds on the fly

View File

@ -1,21 +1,30 @@
.. index:: fix brownian
.. index:: fix brownian/sphere
.. index:: fix brownian/asphere
fix brownian command
====================
===========================
fix brownian/sphere command
===========================
fix brownian/sphere command
===========================
Syntax
""""""
.. parsed-literal::
fix ID group-ID brownian gamma_t diff_t seed keyword args
fix ID group-ID style_name temp seed keyword args
* ID, group-ID are documented in :doc:`fix <fix>` command
* brownian/sphere = style name of this fix command
* gamma_t = translational friction coefficient
* diff_t = translational diffusion coefficient
* zero or more keyword/value pairs may be appended
* keyword = *rng*
* style_name = *brownian* or *brownian/sphere* or *brownian/asphere*
* temp = temperature
* seed = random number generator seed
* one or more keyword/value pairs may be appended
* keyword = *rng* or *dipole* or *gamma_r_eigen* or *gamma_t_eigen* or *gamma_r* or *gamma_t*
.. parsed-literal::
@ -23,39 +32,79 @@ Syntax
*uniform* = use uniform random number generator
*gaussian* = use gaussian random number generator
*none* = turn off noise
*dipole* value = *mux* and *muy* and *muz* for *brownian/asphere*
*mux*, *muy*, and *muz* = update orientation of dipole having direction (*mux*,*muy*,*muz*) in body frame of rigid body
*gamma_r_eigen* values = *gr1* and *gr2* and *gr3* for *brownian/asphere*
*gr1*, *gr2*, and *gr3* = diagonal entries of body frame rotational friction tensor
*gamma_r* values = *gr* for *brownian/sphere*
*gr* = magnitude of the (isotropic) rotational friction tensor
*gamma_t_eigen* values = *gt1* and *gt2* and *gt3* for *brownian/asphere*
*gt1*, *gt2*, and *gt3* = diagonal entries of body frame translational friction tensor
*gamma_t* values = *gt* for *brownian* and *brownian/sphere*
*gt* = magnitude of the (isotropic) translational friction tensor
Examples
""""""""
.. code-block:: LAMMPS
fix 1 all brownian 1.0 3.0 1294019
fix 1 all brownian 1.0 3.0 19581092 rng none
fix 1 all brownian 1.0 3.0 19581092 rng uniform
fix 1 all brownian 1.0 3.0 19581092 rng gaussian
fix 1 all brownian 1.0 12908410 gamma_t 1.0
fix 1 all brownian 1.0 12908410 gamma_t 3.0 rng gaussian
fix 1 all brownian/sphere 1.0 1294019 gamma_t 3.0 gamma_r 1.0
fix 1 all brownian/sphere 1.0 19581092 gamma_t 1.0 gamma_r 0.3 rng none
fix 1 all brownian/asphere 1.0 1294019 gamma_t_eigen 1.0 2.0 3.0 gamma_r_eigen 4.0 7.0 8.0 rng gaussian
fix 1 all brownian/asphere 1.0 1294019 gamma_t_eigen 1.0 2.0 3.0 gamma_r_eigen 4.0 7.0 8.0 dipole 1.0 0.0 0.0
Description
"""""""""""
Perform Brownian Dynamics integration to update position and velocity
of atoms in the group each timestep. Brownian Dynamics uses Newton's laws of
Perform Brownian Dynamics integration to update position, velocity,
dipole orientation (for spheres) and quaternion orientation (for ellipsoids,
with optional dipole update as well) in the group each timestep.
Brownian Dynamics uses Newton's laws of
motion in the limit that inertial forces are negligible compared to
viscous forces. The stochastic equation of motion is
viscous forces. The stochastic equation of motion for the centre of mass
positions are
.. math::
dr = \frac{F}{\gamma_t}dt+\sqrt{2D_t}dW_t, \\
d\mathbf{r} = \mathbf{\gamma}_t^{-1}\mathbf{F}dt+\sqrt{2k_BT}\mathbf{\gamma}_t^{-1/2}d\mathbf{W}_t,
where :math:`dW_t` is a Wiener processes (see e.g. :ref:`(Gardiner) <GardinerC1>`).
in the lab-frame (i.e. :math:`\mathbf{\gamma}_t` is not diagonal, but only depends on
orientation and so the noise is still additive).
The rotational motion for the spherical and ellipsoidal particles is not as simple an
expression, but is chosen to replicate the Boltzmann distribution for the case of
conservative torques (see :ref:`(Ilie) <Ilie1>` or :ref:`(Delong) <Delong1>`).
For the style *brownian*, only the positions of the particles are updated. This is
therefore suitable for point particle simulations.
For the style *brownian/sphere*, the positions of the particles are updated, and a dipole
slaved to the spherical orientation is also updated. This style therefore requires the
hybrid atom style :doc:`atom_style dipole <atom_style>` and
:doc:`atom_style sphere <atom_style>`.
For the style *brownian/asphere*, the centre of mass positions and the quaternions of
ellipsoidal particles are updated. This fix style is suitable for equations of motion
where the rotational and translational friction tensors are diagonalisable in a certain
(body) reference frame.
---------
.. note::
This integrator is designed for generic non-equilibrium
simulations with additive noise. There are two important cases which
(conceptually) reduce the number of free parameters in this fix.
(a) In equilibrium simulations
(where fluctuation dissipation theorems are obeyed), one can define
the thermal energy :math:`k_bT=D_t\gamma_t`.
This integrator does not by default assume a relationship between the
rotational and translational friction tensors, though such a relationship
should exist in the case of no-slip boundary conditions between the particles and
the surrounding (implicit) solvent. E.g. in the case of spherical particles,
the condition :math:`\gamma_t=3\gamma_r/\sigma^2` must be explicitly
accounted for by setting *gamma_t* to 3x and *gamma_r* to x (where
:math:`\sigma` is the spherical diameter). A similar (though more complex)
relationship holds for ellipsoids and rod-like particles.
---------
@ -63,38 +112,52 @@ where :math:`dW_t` is a Wiener processes (see e.g. :ref:`(Gardiner) <GardinerC1>
Temperature computation using the :doc:`compute temp <compute_temp>`
will not correctly compute temperature of these overdamped dynamics
since we are explicitly neglecting inertial effects.
See e.g. chapter 6 of :ref:`(Doi) <Doi1>` for more details on this.
Temperature is instead defined in terms of the note above (for
equilibrium systems).
Furthermore, this time integrator does not add the stochastic terms or
viscous terms to the force and/or torques. Rather, they are just added
in to the equations of motion to update the degrees of freedom.
---------
.. note::
The diffusion coefficient :math:`D_t` is measured
in units of (length*length)/time, where time and length
are in the units specified on the :doc:`units <units>` page.
Similarly, :math:`\gamma_t` is measured in
units of mass/time.
---------
If the *rng* keyword is used with the *uniform* value, then the noise
is generated from a uniform distribution (see
:ref:`(Dunweg) <Dunweg6>` for why this works). This is the same method
:ref:`(Dunweg) <Dunweg7>` for why this works). This is the same method
of noise generation as used in :doc:`fix_langevin <fix_langevin>`.
If the *rng* keyword is used with the *gaussian* value, then the noise
is generated from a gaussian distribution. Typically this added
complexity is unnecessary, and one should be fine using the *uniform*
value for reasons argued in :ref:`(Dunweg) <Dunweg6>`.
value for reasons argued in :ref:`(Dunweg) <Dunweg7>`.
If the *rng* keyword is used with the *none* value, then the noise
terms are set to zero.
The *gamma_t* keyword sets the (isotropic) translational viscous damping.
Required for (and only compatible with) *brownian* and *brownian/sphere*.
The units of *gamma_t* are mass/time.
The *gamma_r* keyword sets the (isotropic) rotational viscous damping.
Required for (and only compatible with) *brownian/sphere*.
The units of *gamma_r* are mass*length**2/time.
The *gamma_r_eigen*, and *gamma_t_eigen* keywords are the eigenvalues of
the rotational and viscous damping tensors (having the same units as
their isotropic counterparts). Required for (and only compatible with)
*brownian/asphere*. For a 2D system, the first two values of *gamma_r_eigen*
must be inf (only rotation in xy plane), and the third value of *gamma_t_eigen*
must be inf (only diffusion in xy plane).
If the *dipole* keyword is used, then the dipole moments of the particles
are updated as described above. Only compatible with *brownian/asphere*
(as *brownian/sphere* updates dipoles automatically).
----------
.. include:: accel_styles.rst
.. note::
For style *brownian/asphere*, the components *gamma_t_eigen* =(x,x,x) and
*gamma_r_eigen* = (y,y,y), the dynamics will replicate those of the
*brownian/sphere* style with *gamma_t* = x and *gamma_r* = y.
----------
@ -105,10 +168,6 @@ No information about this fix is written to :doc:`binary restart files <restart>
No global or per-atom quantities are stored
by this fix for access by various :doc:`output commands <Howto_output>`.
The :doc:`fix_modify <fix_modify>` *virial* option is supported by this
fix to add the contribution due to the added forces on atoms to the
system's virial as part of :doc:`thermodynamic output <thermo_style>`.
The default is *virial no*.
No parameter of this fix can be used with the *start/stop* keywords of
the :doc:`run <run>` command. This fix is not invoked during
@ -117,6 +176,13 @@ the :doc:`run <run>` command. This fix is not invoked during
Restrictions
""""""""""""
The style *brownian/sphere* fix requires that atoms store torque and angular velocity (omega)
as defined by the :doc:`atom_style sphere <atom_style>` command.
The style *brownian/asphere* fix requires that atoms store torque and quaternions
as defined by the :doc:`atom_style ellipsoid <atom_style>` command.
If the *dipole* keyword is used, they must also store a dipole moment
as defined by the :doc:`atom_style dipole <atom_style>` command.
This fix is part of the USER-BROWNIAN package. It is only enabled if
LAMMPS was built with that package. See the :doc:`Build package <Build_package>`
doc page for more info.
@ -125,26 +191,28 @@ doc page for more info.
Related commands
""""""""""""""""
:doc:`fix propel/self <fix_propel_self>`,
:doc:`fix langevin <fix_langevin>`, :doc:`fix nve/sphere <fix_nve_sphere>`,
:doc:`fix brownian/sphere <fix_brownian_sphere>`,
:doc:`fix brownian/asphere <fix_brownian_asphere>`
Default
"""""""
The default for *rng* is *uniform*.
The default for *rng* is *uniform*. The default for the rotational and translational friction
tensors are the identity tensor.
----------
.. _GardinerC1:
**(Gardiner)** Gardiner, A Handbook for the Natural and Social Sciences 4th Ed. (2009).
.. _Ilie1:
.. _Doi1:
**(Ilie)** Ilie, Briels, den Otter, Journal of Chemical Physics, 142, 114103 (2015).
**(Doi)** Doi, Soft Matter Physics (2013).
.. _Dunweg6:
.. _Delong1:
**(Delong)** Delong, Usabiaga, Donev, Journal of Chemical Physics. 143, 144107 (2015)
.. _Dunweg7:
**(Dunweg)** Dunweg and Paul, Int J of Modern Physics C, 2, 817-27 (1991).

View File

@ -1,150 +0,0 @@
.. index:: fix brownian/asphere
fix brownian/asphere command
============================
Syntax
""""""
.. parsed-literal::
fix ID group-ID brownian/asphere gamma_t gamma_r diff_t diff_r seed keyword args
* ID, group-ID are documented in :doc:`fix <fix>` command
* brownian/asphere = style name of this fix command
* gamma_t = translational friction coefficient
* gamma_r = rotational friction coefficient
* diff_t = translational diffusion coefficient
* diff_r = rotational diffusion coefficient
* zero or more keyword/value pairs may be appended
* keyword = *rng* or *dipole*
.. parsed-literal::
*rng* value = *uniform* or *gaussian* or *none*
*uniform* = use uniform random number generator
*gaussian* = use gaussian random number generator
*none* = turn off noise
*dipole* value = none = update orientation of dipoles during integration
Examples
""""""""
.. code-block:: LAMMPS
fix 1 all brownian/asphere 1.0 1.0 1.0 1.0 1294019
fix 1 all brownian/asphere 1.0 1.0 1.0 1.0 19581092 rng none dipole
fix 1 all brownian/asphere 1.0 1.0 1.0 1.0 19581092 rng uniform
fix 1 all brownian/asphere 1.0 1.0 1.0 1.0 19581092 dipole rng gaussian
Description
"""""""""""
Perform Brownian Dynamics integration to update position, velocity,
angular velocity, particle orientation, and dipole moment for
finite-size elipsoidal particles in the group each timestep.
Brownian Dynamics uses Newton's laws of
motion in the limit that inertial forces are negligible compared to
viscous forces. The stochastic equations of motion are
.. math::
dr = \frac{F}{\gamma_t}dt+\sqrt{2D_t}dW_t, \\
d\Omega = \frac{T}{\gamma_r}dt + \sqrt{2D_r}dW_r,
where :math:`d\Omega` is an infinitesimal rotation vector (see e.g.
Chapter 4 of :ref:`(Goldstein) <GoldsteinCM2>`), :math:`dW_t` and
:math:`dW_r` are Wiener processes (see e.g. :ref:`(Gardiner) <GardinerC3>`).
The quaternions :math:`q` of the ellipsoid are updated each timestep from
the angular velocity vector.
See :doc:`fix brownian/sphere <fix_brownian_sphere>` for discussion on the
values of :math:`\gamma_t`, :math:`\gamma_r`, :math:`D_t`,
:math:`D_r`, and temperature when simulating equilibrium systems.
If the *rng* keyword is used with the *uniform* value, then the noise
is generated from a uniform distribution (see
:ref:`(Dunweg) <Dunweg8>` for why this works). This is the same method
of noise generation as used in :doc:`fix_langevin <fix_langevin>`.
If the *rng* keyword is used with the *gaussian* value, then the noise
is generated from a gaussian distribution. Typically this added
complexity is unnecessary, and one should be fine using the *uniform*
value for reasons argued in :ref:`(Dunweg) <Dunweg8>`.
If the *rng* keyword is used with the *none* value, then the noise
terms are set to zero.
If the *dipole* keyword is used, then the dipole moments of the particles
are updated by setting them along the x axis of the ellipsoidal frames of
reference.
----------
.. include:: accel_styles.rst
----------
Restart, fix_modify, output, run start/stop, minimize info
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
No information about this fix is written to :doc:`binary restart files <restart>`.
No global or per-atom quantities are stored
by this fix for access by various :doc:`output commands <Howto_output>`.
The :doc:`fix_modify <fix_modify>` *virial* option is supported by this
fix to add the contribution due to the added forces on atoms to the
system's virial as part of :doc:`thermodynamic output <thermo_style>`.
The default is *virial no*.
No parameter of this fix can be used with the *start/stop* keywords of
the :doc:`run <run>` command. This fix is not invoked during
:doc:`energy minimization <minimize>`.
Restrictions
""""""""""""
This fix requires that atoms store torque and angular velocity (omega)
as defined by the :doc:`atom_style sphere <atom_style>` command, as well
as atoms which have a definite orientation as defined by the
:doc:`atom_style ellipsoid <atom_style>` command.
Optionally, they can also store a dipole moment as defined by the
:doc:`atom_style dipole <atom_style>` command.
This fix is part of the USER-BROWNIAN package. It is only enabled if
LAMMPS was built with that package. See the :doc:`Build package <Build_package>`
doc page for more info.
All particles in the group must be finite-size ellipsoids. They cannot
be point particles.
Related commands
""""""""""""""""
:doc:`fix brownian <fix_brownian>`, :doc:`fix brownian/sphere <fix_brownian_sphere>`,
:doc:`fix propel/self <fix_propel_self>`, :doc:`fix langevin <fix_langevin>`,
:doc:`fix nve/asphere <fix_nve_asphere>`
Default
"""""""
The default for *rng* is *uniform*.
----------
.. _GoldsteinCM2:
**(Goldstein)** Goldstein, Poole, and Safko, Classical Mechanics, 3rd Ed. (2001).
.. _GardinerC3:
**(Gardiner)** Gardiner, A Handbook for the Natural and Social Sciences 4th Ed. (2009).
.. _Dunweg8:
**(Dunweg)** Dunweg and Paul, Int J of Modern Physics C, 2, 817-27 (1991).

View File

@ -1,186 +0,0 @@
.. index:: fix brownian/sphere
fix brownian/sphere command
===========================
Syntax
""""""
.. parsed-literal::
fix ID group-ID brownian/sphere gamma_t gamma_r diff_t diff_r seed keyword args
* ID, group-ID are documented in :doc:`fix <fix>` command
* brownian/sphere = style name of this fix command
* gamma_t = translational friction coefficient
* gamma_r = rotational friction coefficient
* diff_t = translational diffusion coefficient
* diff_r = rotational diffusion coefficient
* zero or more keyword/value pairs may be appended
* keyword = *rng* or *dipole*
.. parsed-literal::
*rng* value = *uniform* or *gaussian* or *none*
*uniform* = use uniform random number generator
*gaussian* = use gaussian random number generator
*none* = turn off noise
*dipole* value = none = update orientation of dipoles during integration
Examples
""""""""
.. code-block:: LAMMPS
fix 1 all brownian/sphere 1.0 1.0 1.0 1.0 1294019
fix 1 all brownian/sphere 1.0 1.0 1.0 1.0 19581092 rng none dipole
fix 1 all brownian/sphere 1.0 1.0 1.0 1.0 19581092 rng uniform
fix 1 all brownian/sphere 1.0 1.0 1.0 1.0 19581092 dipole rng gaussian
Description
"""""""""""
Perform Brownian Dynamics integration to update position, velocity,
angular velocity, and dipole moment for finite-size spherical particles
in the group each timestep. Brownian Dynamics uses Newton's laws of
motion in the limit that inertial forces are negligible compared to
viscous forces. The stochastic equations of motion are
.. math::
dr = \frac{F}{\gamma_t}dt+\sqrt{2D_t}dW_t, \\
d\Omega = \frac{T}{\gamma_r}dt + \sqrt{2D_r}dW_r,
where :math:`d\Omega` is an infinitesimal rotation vector (see e.g.
Chapter 4 of :ref:`(Goldstein) <GoldsteinCM1>`), :math:`dW_t` and
:math:`dW_r` are Wiener processes (see e.g. :ref:`(Gardiner) <GardinerC2>`).
The dipole vectors :math:`e_i` are updated using the rotation matrix
.. math::
e_i(t+dt) = e^{\theta_X} e_i(t),\\
where :math:`\omega=d\Omega/dt` is the angular velocity,
:math:`\Delta\theta=|\omega|dt` is the rotation angle about
the :math:`\omega` axis, and
:math:`(\theta_X)_{ij}=-\epsilon_{ijk}d\Omega_k` is the
infinitesimal rotation matrix (see e.g. :ref:`(Callegari) <Callegari1>`,
section 7.4).
.. note::
This integrator is designed for generic non-equilibrium
simulations with additive noise. There are two important cases which
(conceptually) reduce the number of free parameters in this fix.
(a) In equilibrium simulations
(where fluctuation dissipation theorems are obeyed), one can define
the thermal energy :math:`k_bT=D_t\gamma_t=D_r\gamma_r`.
(b) When a no-slip boundary condition is expected between the spheres and
the surrounding medium, the condition
:math:`\gamma_t=3\gamma_r/\sigma^2` must be explicitly
accounted for (e.g. by setting *gamma_t* to 3 and *gamma_r* to 1) where
:math:`sigma` is the particle diameter.
If both (a) and (b) are true, then one must ensure this explicitly via
the above relationships.
---------
See note on the unphysical result of using :doc:`compute temp <compute_temp>`
with this fix in :doc:`fix brownian <fix_brownian>`.
---------
.. note::
The diffusion coefficient :math:`D_t` and the translational
drag coefficient :math:`\gamma_t` are discussed in
:doc:`fix brownian <fix_brownian>`. The diffusion coefficient
:math:`D_r` is measured in units of 1/time, where time is in the
units specified on the :doc:`units <units>` page. Similarly,
and :math:`\gamma_r` is measured in
units of mass/time and (mass*length*length)/(time).
---------
If the *rng* keyword is used with the *uniform* value, then the noise
is generated from a uniform distribution (see
:ref:`(Dunweg) <Dunweg7>` for why this works). This is the same method
of noise generation as used in :doc:`fix_langevin <fix_langevin>`.
If the *rng* keyword is used with the *gaussian* value, then the noise
is generated from a gaussian distribution. Typically this added
complexity is unnecessary, and one should be fine using the *uniform*
value for reasons argued in :ref:`(Dunweg) <Dunweg7>`.
If the *rng* keyword is used with the *none* value, then the noise
terms are set to zero.
If the *dipole* keyword is used, then the dipole moments of the particles
are updated as described above.
----------
.. include:: accel_styles.rst
----------
Restart, fix_modify, output, run start/stop, minimize info
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
No information about this fix is written to :doc:`binary restart files <restart>`.
No global or per-atom quantities are stored
by this fix for access by various :doc:`output commands <Howto_output>`.
The :doc:`fix_modify <fix_modify>` *virial* option is supported by this
fix to add the contribution due to the added forces on atoms to the
system's virial as part of :doc:`thermodynamic output <thermo_style>`.
The default is *virial no*.
No parameter of this fix can be used with the *start/stop* keywords of
the :doc:`run <run>` command. This fix is not invoked during
:doc:`energy minimization <minimize>`.
Restrictions
""""""""""""
This fix requires that atoms store torque and angular velocity (omega)
as defined by the :doc:`atom_style sphere <atom_style>` command.
If the *dipole* keyword is used, they must also store a dipole moment
as defined by the :doc:`atom_style dipole <atom_style>` command.
This fix is part of the USER-BROWNIAN package. It is only enabled if
LAMMPS was built with that package. See the :doc:`Build package <Build_package>`
doc page for more info.
Related commands
""""""""""""""""
:doc:`fix brownian <fix_brownian>`, :doc:`fix brownian/asphere <fix_brownian_asphere>`,
:doc:`fix propel/self <fix_propel_self>`,
:doc:`fix langevin <fix_langevin>`, :doc:`fix nve/sphere <fix_nve_sphere>`,
Default
"""""""
The default for *rng* is *uniform*.
----------
.. _GoldsteinCM1:
**(Goldstein)** Goldstein, Poole, and Safko, Classical Mechanics, 3rd Ed. (2001).
.. _GardinerC2:
**(Gardiner)** Gardiner, A Handbook for the Natural and Social Sciences 4th Ed. (2009).
.. _Callegari1:
**(Callegari)** Callegari and Volpe, *Numerical Simulations of Active Brownian
Particles*, Flowing Matter, 211-238 (2019).
.. _Dunweg7:
**(Dunweg)** Dunweg and Paul, Int J of Modern Physics C, 2, 817-27 (1991).

View File

@ -1,12 +1,11 @@
# 2d overdamped brownian dynamics with self-propulsion
# force in direction of velocity.
##### 2d overdamped brownian dynamics with self-propulsion force in direction of velocity. #####
variable gamma_t equal 1.0
variable D_t equal 1.0
variable temp equal 1.0
variable seed equal 1974019
variable fp equal 4.0
variable params string ${gamma_t}_${D_t}_${fp}
variable params string ${gamma_t}_${temp}_${fp}
log log_${params}_2d.lammps.log
@ -30,7 +29,7 @@ neigh_modify every 1 delay 1 check yes
pair_style none
fix step all brownian ${gamma_t} ${D_t} ${seed}
fix step all brownian ${temp} ${seed} gamma_t ${gamma_t}
fix vel all propel/self velocity ${fp}
fix 2 all enforce2d
fix_modify vel virial yes

View File

@ -23,16 +23,12 @@ neigh_modify every 1 delay 1 check yes
pair_style none
#compute d all property/atom mux muy muz
fix step all brownian ${gamma_t} ${D_t} ${seed}
fix step all brownian 1 ${D_t} ${seed}
fix step all brownian 1 1 ${seed}
fix step all brownian 1 1 1974019
fix vel all propel/self ${fp} velocity
fix vel all propel/self 4 velocity
fix step all brownian ${temp} ${seed} gamma_t ${gamma_t}
fix step all brownian 1 ${seed} gamma_t ${gamma_t}
fix step all brownian 1 1974019 gamma_t ${gamma_t}
fix step all brownian 1 1974019 gamma_t 1
fix vel all propel/self velocity ${fp}
fix vel all propel/self velocity 4
fix 2 all enforce2d
fix_modify vel virial yes
@ -49,10 +45,10 @@ WARNING: Communication cutoff is 0.0. No ghost atoms will be generated. Atoms ma
Per MPI rank memory allocation (min/avg/max) = 2.289 | 2.289 | 2.289 Mbytes
Step Temp E_pair c_press
0 1 0 -0.18336111
50000 1.9663098e+10 0 -0.75033044
Loop time of 2.45902 on 1 procs for 50000 steps with 1024 atoms
50000 2.0329082e+10 0 -0.30450754
Loop time of 1.76045 on 1 procs for 50000 steps with 1024 atoms
Performance: 0.176 tau/day, 20333.276 timesteps/s
Performance: 0.245 tau/day, 28401.873 timesteps/s
100.0% CPU use with 1 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
@ -60,10 +56,10 @@ Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 0 | 0 | 0 | 0.0 | 0.00
Neigh | 0 | 0 | 0 | 0.0 | 0.00
Comm | 0.0078395 | 0.0078395 | 0.0078395 | 0.0 | 0.32
Output | 2.2947e-05 | 2.2947e-05 | 2.2947e-05 | 0.0 | 0.00
Modify | 2.332 | 2.332 | 2.332 | 0.0 | 94.83
Other | | 0.1192 | | | 4.85
Comm | 0.008736 | 0.008736 | 0.008736 | 0.0 | 0.50
Output | 2.3562e-05 | 2.3562e-05 | 2.3562e-05 | 0.0 | 0.00
Modify | 1.6284 | 1.6284 | 1.6284 | 0.0 | 92.50
Other | | 0.1233 | | | 7.00
Nlocal: 1024.00 ave 1024 max 1024 min
Histogram: 1 0 0 0 0 0 0 0 0 0
@ -96,141 +92,141 @@ run 120000
WARNING: Communication cutoff is 0.0. No ghost atoms will be generated. Atoms may get lost. (src/comm_brick.cpp:167)
Per MPI rank memory allocation (min/avg/max) = 2.664 | 2.664 | 2.664 Mbytes
Step Temp E_pair c_msd[1] c_msd[2] c_msd[3] c_msd[4] c_press
0 1.9663098e+10 0 0 0 0 0 -0.75033044
1000 199346.07 0 0.01933096 0.020555579 0 0.039886539 -0.45701943
2000 198310 0 0.040165459 0.041283119 0 0.081448577 0.34264096
3000 204115.93 0 0.057654441 0.060411193 0 0.11806563 -0.41710363
4000 196903.18 0 0.075874071 0.08470884 0 0.16058291 -0.18627889
5000 201382.13 0 0.097484871 0.1049401 0 0.20242497 -0.12876225
6000 195317.96 0 0.11872475 0.12469358 0 0.24341834 -0.3084651
7000 192139.34 0 0.14148561 0.14363452 0 0.28512013 0.0032867364
8000 201737.84 0 0.16055109 0.16405717 0 0.32460826 0.36435453
9000 199390.58 0 0.17897382 0.18795928 0 0.3669331 0.025659298
10000 207807.41 0 0.19680417 0.20733821 0 0.40414239 -0.35368379
11000 201936.29 0 0.21666426 0.22702132 0 0.44368558 0.044253449
12000 196863.68 0 0.2394452 0.24672678 0 0.48617198 0.059027892
13000 199368.34 0 0.26647368 0.2700584 0 0.53653208 0.27090461
14000 201246.39 0 0.28799289 0.29823282 0 0.58622571 0.59883778
15000 195355.47 0 0.29975278 0.32348787 0 0.62324065 -0.70763643
16000 198372.41 0 0.32191014 0.34434864 0 0.66625878 -0.36543908
17000 193442.08 0 0.33927003 0.36811239 0 0.70738242 0.28541473
18000 197441 0 0.36067818 0.38982011 0 0.75049829 -0.45670227
19000 208769.5 0 0.37965583 0.41015661 0 0.78981244 -0.47803396
20000 198311.2 0 0.3968078 0.42701175 0 0.82381955 -0.18642397
21000 201365.22 0 0.4151043 0.44909345 0 0.86419775 0.86839756
22000 198253.24 0 0.4396583 0.46388261 0 0.90354091 -0.19592545
23000 204598.51 0 0.45382292 0.49253671 0 0.94635963 -0.24169987
24000 211421.88 0 0.46086338 0.51831304 0 0.97917642 0.49751915
25000 198690.71 0 0.47110913 0.53640271 0 1.0075118 -0.24475563
26000 203981.49 0 0.49265476 0.55310571 0 1.0457605 0.20237224
27000 201128.99 0 0.52865208 0.57516064 0 1.1038127 -0.40826104
28000 198529.77 0 0.54479087 0.59876678 0 1.1435576 0.41576857
29000 205024.27 0 0.56195744 0.61217109 0 1.1741285 -0.79146635
30000 201565.62 0 0.58276132 0.63743585 0 1.2201972 -0.065832917
31000 197893.43 0 0.61132665 0.66126375 0 1.2725904 0.47907079
32000 201395.11 0 0.61904956 0.67520462 0 1.2942542 -0.7408472
33000 202064.22 0 0.64760511 0.69087605 0 1.3384812 -0.14601514
34000 191227.75 0 0.65698736 0.73857849 0 1.3955659 0.2177548
35000 199474.65 0 0.66491543 0.76604575 0 1.4309612 -0.64627039
36000 195252.77 0 0.67565581 0.79911139 0 1.4747672 0.0293298
37000 198167.14 0 0.68899202 0.81268008 0 1.5016721 -0.0055245918
38000 202995.35 0 0.70224976 0.82436547 0 1.5266152 -0.2826768
39000 197129.03 0 0.71270072 0.8579444 0 1.5706451 0.063623666
40000 199153.69 0 0.73777312 0.88820969 0 1.6259828 -0.26740551
41000 205347.31 0 0.75613153 0.9006214 0 1.6567529 0.82415354
42000 199423.73 0 0.76864739 0.92457092 0 1.6932183 -0.16636304
43000 198052 0 0.79841199 0.93832523 0 1.7367372 -0.016241224
44000 205205.39 0 0.81727188 0.96823569 0 1.7855076 -0.10405924
45000 199116.46 0 0.83208052 0.99352694 0 1.8256075 0.040835286
46000 198759.48 0 0.84291542 1.0038949 0 1.8468104 0.46109436
47000 189676.9 0 0.86430719 1.0131299 0 1.8774371 -0.67947102
48000 199801.4 0 0.90662572 1.0286589 0 1.9352846 -0.5293946
49000 199730.89 0 0.93530132 1.0568273 0 1.9921286 -0.27562311
50000 203272.56 0 0.96366375 1.0790026 0 2.0426664 -0.10629234
51000 196992.09 0 0.97818106 1.1030549 0 2.0812359 0.31719382
52000 204063.62 0 1.0068773 1.1239506 0 2.130828 -7.1998264e-05
53000 204349.41 0 1.0277098 1.1546477 0 2.1823575 0.16897786
54000 203207.3 0 1.0415673 1.1881409 0 2.2297082 -0.25033492
55000 194841.07 0 1.0600954 1.2179033 0 2.2779987 0.0062433629
56000 198601.58 0 1.071562 1.2363958 0 2.3079578 -0.13124124
57000 196654.6 0 1.0997086 1.2486573 0 2.3483659 -0.46425912
58000 197781.48 0 1.112526 1.2706195 0 2.3831455 0.26007922
59000 199853.9 0 1.1295132 1.2978402 0 2.4273533 -0.030877018
60000 201698.14 0 1.1690892 1.3228782 0 2.4919675 -0.23190043
61000 199260.52 0 1.1870513 1.3431945 0 2.5302458 -0.040373885
62000 196909.15 0 1.2007194 1.3683525 0 2.5690719 0.21318495
63000 203927.79 0 1.2442809 1.3964232 0 2.6407041 0.10156282
64000 205322.27 0 1.2721207 1.4159422 0 2.6880629 0.33393307
65000 199142.6 0 1.2989685 1.4330729 0 2.7320414 -0.65644005
66000 205023.06 0 1.2948208 1.4255094 0 2.7203302 0.22290721
67000 209750.01 0 1.3127511 1.4369628 0 2.7497139 -0.40241279
68000 200205.19 0 1.3355277 1.4541568 0 2.7896846 0.6665415
69000 198653.01 0 1.3500764 1.4962697 0 2.8463461 -0.28396983
70000 207485.71 0 1.3825583 1.5095552 0 2.8921135 0.34774599
71000 203918.68 0 1.4090995 1.5246756 0 2.9337751 0.071958672
72000 199038.47 0 1.4246969 1.5612784 0 2.9859753 -0.42129173
73000 197380.7 0 1.445835 1.6025372 0 3.0483722 -0.099854135
74000 205006.49 0 1.4703253 1.606784 0 3.0771093 0.137244
75000 196040.42 0 1.4897388 1.6297195 0 3.1194583 -0.46715263
76000 200022.09 0 1.5178017 1.6560075 0 3.1738092 -0.21504553
77000 200766.4 0 1.5184584 1.6673791 0 3.1858374 0.54447858
78000 199636.76 0 1.5344452 1.6845098 0 3.2189549 0.021903761
79000 204188.86 0 1.5567356 1.7205197 0 3.2772553 0.15356898
80000 199862.31 0 1.5669731 1.7265239 0 3.2934969 -0.26342032
81000 198557.57 0 1.5735674 1.7468943 0 3.3204617 0.22068216
82000 203675.4 0 1.5898596 1.7646027 0 3.3544624 0.51221445
83000 203412.56 0 1.6066548 1.7813624 0 3.3880172 0.33512263
84000 200896.36 0 1.6112635 1.812552 0 3.4238154 1.1657793
85000 198987.17 0 1.652135 1.8336748 0 3.4858098 -0.20419704
86000 203027.04 0 1.6728041 1.864244 0 3.5370481 0.61746313
87000 203913.8 0 1.6783324 1.8762967 0 3.554629 0.28428076
88000 205061.23 0 1.6781682 1.879458 0 3.5576262 0.089285353
89000 198210.89 0 1.7017682 1.9029345 0 3.6047027 -0.23977904
90000 196170.91 0 1.7291253 1.9258436 0 3.6549689 0.15806438
91000 202846.79 0 1.7592339 1.9431644 0 3.7023983 0.17723099
92000 198976.91 0 1.762318 1.9742003 0 3.7365183 0.25668658
93000 194578.12 0 1.7880716 2.0009816 0 3.7890532 0.20231476
94000 200319.82 0 1.7854494 2.020855 0 3.8063044 0.14729427
95000 202430.33 0 1.7925005 2.0480213 0 3.8405218 -0.28291245
96000 200145.58 0 1.8113602 2.0621043 0 3.8734644 0.05547277
97000 194617.53 0 1.8286924 2.0729365 0 3.9016289 -0.59829377
98000 200829.37 0 1.8485835 2.077731 0 3.9263145 0.78242718
99000 198197.55 0 1.8537119 2.0873455 0 3.9410573 -0.52970118
100000 204149.63 0 1.8897394 2.0942927 0 3.9840321 0.58118967
101000 198654.59 0 1.9126448 2.1380708 0 4.0507156 -0.61766977
102000 201198.05 0 1.9433521 2.143049 0 4.0864011 0.15570108
103000 200383.43 0 1.9669578 2.1361518 0 4.1031095 -0.10556532
104000 204363.26 0 1.9827272 2.1564095 0 4.1391367 -0.060748593
105000 198267.87 0 1.9904164 2.1804141 0 4.1708305 0.40995747
106000 202082.12 0 1.993709 2.1925288 0 4.1862378 -0.52458386
107000 200209.49 0 2.015427 2.219161 0 4.234588 -0.67350679
108000 203112.58 0 2.0467303 2.2405372 0 4.2872675 0.25033168
109000 203844.13 0 2.056314 2.2623929 0 4.3187068 0.3384149
110000 201740.33 0 2.0706519 2.285547 0 4.3561989 0.35582365
111000 202493.05 0 2.0725826 2.308685 0 4.3812676 -0.26487212
112000 205404.09 0 2.0969613 2.3252767 0 4.422238 0.58346057
113000 201223.54 0 2.0876103 2.3316941 0 4.4193044 0.37747414
114000 208649.11 0 2.1095116 2.3488008 0 4.4583124 0.068129648
115000 202708.5 0 2.1233837 2.3701129 0 4.4934966 -0.23734073
116000 202482.42 0 2.1221907 2.4262516 0 4.5484424 -0.087142119
117000 200384.65 0 2.1487723 2.4619437 0 4.6107161 -0.13673271
118000 196885.36 0 2.158057 2.4818335 0 4.6398905 0.31912412
119000 194064.42 0 2.1821315 2.5032336 0 4.6853651 0.17615749
120000 195203.09 0 2.1939678 2.539838 0 4.7338058 0.5106086
Loop time of 6.05038 on 1 procs for 120000 steps with 1024 atoms
0 2.0329082e+10 0 0 0 0 0 -0.30450754
1000 194002.24 0 0.019541352 0.020412616 0 0.039953968 0.17960144
2000 201170.68 0 0.037773433 0.040755027 0 0.078528461 0.030184783
3000 200206.8 0 0.058949662 0.060726886 0 0.11967655 0.080592855
4000 205243 0 0.084357492 0.084713582 0 0.16907107 -0.9284229
5000 201741.41 0 0.1024163 0.10453135 0 0.20694765 0.31035655
6000 203143.61 0 0.12337925 0.12397645 0 0.2473557 -0.88772072
7000 202627.98 0 0.14537908 0.14173625 0 0.28711534 0.17510592
8000 200688.93 0 0.15993736 0.16450382 0 0.32444118 0.20926033
9000 200360.25 0 0.18277138 0.18597743 0 0.36874881 0.14728415
10000 203691.46 0 0.20588386 0.20467547 0 0.41055933 -0.041058877
11000 203028.99 0 0.2282616 0.21792715 0 0.44618875 0.14648625
12000 195738.49 0 0.24584925 0.22877733 0 0.47462658 0.11242329
13000 198977.93 0 0.26808832 0.25467835 0 0.52276667 -0.82500263
14000 193395.28 0 0.29074728 0.27404624 0 0.56479352 0.29664298
15000 200408 0 0.30241331 0.29063643 0 0.59304975 0.22506685
16000 194570.8 0 0.32914382 0.30896611 0 0.63810992 -0.011781021
17000 201699.18 0 0.34741469 0.33153019 0 0.67894488 -0.073195501
18000 198665.14 0 0.35708615 0.35032716 0 0.7074133 0.33684482
19000 201011.15 0 0.37328322 0.36518777 0 0.73847099 -0.20884796
20000 201387.99 0 0.39484415 0.3783921 0 0.77323625 -0.30200013
21000 202952.38 0 0.41838333 0.3958867 0 0.81427003 -0.98801165
22000 205150.98 0 0.44071908 0.42001514 0 0.86073422 -0.65548109
23000 200164.9 0 0.46156041 0.44411636 0 0.90567677 0.24186828
24000 196027.89 0 0.4834982 0.46586728 0 0.94936548 -0.43593925
25000 198438.08 0 0.50328321 0.4865808 0 0.98986402 -0.25516412
26000 200569.69 0 0.52535125 0.52102617 0 1.0463774 -0.41486705
27000 200598.31 0 0.52958053 0.53142647 0 1.061007 0.011109738
28000 205592.24 0 0.54694416 0.5464941 0 1.0934383 -0.18134038
29000 199085.55 0 0.57222754 0.57188852 0 1.1441161 -0.46788121
30000 201398.39 0 0.59813146 0.58520822 0 1.1833397 -0.15341079
31000 197674.44 0 0.61191002 0.60572867 0 1.2176387 0.25394145
32000 205188.42 0 0.63435682 0.63745001 0 1.2718068 0.26362999
33000 202316.72 0 0.66509392 0.65462302 0 1.3197169 -0.37062797
34000 200673.31 0 0.67923697 0.69170315 0 1.3709401 -0.36342828
35000 199626.58 0 0.71214435 0.71976006 0 1.4319044 0.14520308
36000 206317.51 0 0.73098443 0.75421862 0 1.4852031 -0.049274455
37000 200878.1 0 0.75404669 0.77976535 0 1.533812 -0.020890744
38000 204399.3 0 0.77905716 0.80048467 0 1.5795418 0.41855233
39000 194807.41 0 0.80901097 0.83413027 0 1.6431412 0.061887194
40000 197736.05 0 0.82530638 0.85259329 0 1.6778997 -0.21390647
41000 196234.62 0 0.84399769 0.87823172 0 1.7222294 -0.069449607
42000 202916.17 0 0.84692321 0.90553215 0 1.7524554 0.014080553
43000 199860.49 0 0.87526292 0.92743523 0 1.8026981 0.14037107
44000 195023.53 0 0.88991314 0.95932182 0 1.849235 -0.33208549
45000 195356.87 0 0.91402747 0.98447964 0 1.8985071 -0.54494657
46000 208076.31 0 0.92947502 1.0151107 0 1.9445857 -0.62483899
47000 196855.73 0 0.94724593 1.0592619 0 2.0065078 -0.20412571
48000 201398.95 0 0.98527482 1.0801565 0 2.0654313 -0.12234755
49000 196643.46 0 0.9999414 1.115902 0 2.1158434 -0.014252649
50000 195863.57 0 1.0150887 1.1141794 0 2.1292681 0.75335013
51000 206236.4 0 1.060301 1.1367091 0 2.1970101 -0.22091636
52000 202457.92 0 1.0661594 1.1431793 0 2.2093387 0.20119657
53000 200285.87 0 1.0911263 1.1652507 0 2.256377 0.64981185
54000 192647.27 0 1.1240369 1.1911613 0 2.3151982 -0.31991262
55000 203771.16 0 1.1340164 1.2059129 0 2.3399293 -0.69282837
56000 208567.7 0 1.1644643 1.2358751 0 2.4003394 -0.31413258
57000 197231.77 0 1.1817765 1.2580471 0 2.4398236 0.0033296714
58000 203466.84 0 1.2256115 1.297949 0 2.5235605 0.5978746
59000 204071.73 0 1.2635225 1.3217703 0 2.5852928 0.080439812
60000 204497.78 0 1.280816 1.3529427 0 2.6337587 -0.13596951
61000 201581.53 0 1.3062524 1.3840896 0 2.6903421 0.2402402
62000 201808.73 0 1.3158468 1.40441 0 2.7202568 -0.49735816
63000 195485.7 0 1.3246003 1.4115588 0 2.7361591 -0.034708225
64000 203289.43 0 1.3515942 1.4270935 0 2.7786877 -0.47288139
65000 198360.38 0 1.3655219 1.4410644 0 2.8065863 -0.60256944
66000 207037.46 0 1.4024293 1.447203 0 2.8496323 0.19886918
67000 197118.92 0 1.4400601 1.4746068 0 2.914667 0.53432407
68000 202323.37 0 1.4737023 1.4757925 0 2.9494948 -0.50123703
69000 202679.62 0 1.4996722 1.4982292 0 2.9979014 -0.36930796
70000 197067.46 0 1.5202881 1.5079024 0 3.0281905 0.20627183
71000 201481.55 0 1.5292493 1.5243374 0 3.0535868 0.1664502
72000 197565.37 0 1.5649605 1.5415579 0 3.1065184 0.1538837
73000 198996.68 0 1.5823587 1.5687541 0 3.1511128 0.33347453
74000 196056.36 0 1.5876207 1.5880262 0 3.1756469 0.51039007
75000 196383.82 0 1.6238368 1.6126393 0 3.2364761 0.58359751
76000 198050.9 0 1.6332373 1.6444992 0 3.2777365 -0.30732735
77000 198867.35 0 1.6713412 1.6649495 0 3.3362907 -0.77019295
78000 197809.01 0 1.7072475 1.6978103 0 3.4050578 0.062786188
79000 198410.74 0 1.7408508 1.7258001 0 3.4666509 0.13736398
80000 203417.5 0 1.757256 1.748869 0 3.506125 -0.020989175
81000 195062.76 0 1.7608203 1.7602204 0 3.5210407 0.013727312
82000 200632.52 0 1.7755665 1.7921425 0 3.567709 -0.052325244
83000 191576.45 0 1.7959579 1.8241176 0 3.6200755 -0.20352178
84000 200502.95 0 1.8249302 1.8426066 0 3.6675369 -0.38424345
85000 201308.33 0 1.8545228 1.8747626 0 3.7292854 0.68968471
86000 203836.21 0 1.8649352 1.9007982 0 3.7657335 -0.56168571
87000 208433.36 0 1.8740109 1.9350895 0 3.8091003 0.14026532
88000 198009.97 0 1.9059077 1.9537513 0 3.859659 0.017064255
89000 200694.98 0 1.9312351 1.9704954 0 3.9017306 -0.19090346
90000 200436.01 0 1.9567279 2.0115534 0 3.9682814 0.48791684
91000 201810.57 0 1.9784333 2.0255054 0 4.0039386 -0.21421409
92000 208365.35 0 2.0050623 2.049849 0 4.0549113 0.30465483
93000 197213.15 0 2.017481 2.0689265 0 4.0864075 0.22419309
94000 201428.76 0 2.0426301 2.0972527 0 4.1398828 -0.24230583
95000 198472.77 0 2.0677457 2.111042 0 4.1787877 0.13071029
96000 201070.22 0 2.1019013 2.1226741 0 4.2245754 0.15711614
97000 197899.22 0 2.1019041 2.1575764 0 4.2594805 -0.18586251
98000 196679.32 0 2.1162285 2.170629 0 4.2868575 -0.34056846
99000 197724.36 0 2.1326497 2.1886854 0 4.321335 0.58967646
100000 205354.32 0 2.1612412 2.2209085 0 4.3821498 0.044930992
101000 201516.54 0 2.1954542 2.2365787 0 4.4320329 0.065295032
102000 204976.1 0 2.2029662 2.2694803 0 4.4724465 0.11481479
103000 194476.8 0 2.2257884 2.2955314 0 4.5213197 -0.11610949
104000 203736.97 0 2.2268211 2.2907985 0 4.5176196 0.015187894
105000 196842.81 0 2.2620115 2.3381811 0 4.6001926 0.32154947
106000 202018.95 0 2.2836727 2.3560537 0 4.6397264 0.33256726
107000 198280.55 0 2.2802504 2.3840825 0 4.6643329 0.50865119
108000 198415.05 0 2.299079 2.402819 0 4.7018979 0.028090763
109000 214429.79 0 2.326329 2.4071902 0 4.7335192 0.33519083
110000 206059.4 0 2.3452258 2.431054 0 4.7762798 0.012116372
111000 198624.14 0 2.3484889 2.4352672 0 4.7837561 -0.35529818
112000 201890.76 0 2.3810208 2.4718016 0 4.8528225 -0.55980456
113000 199303.2 0 2.4011131 2.5070887 0 4.9082018 0.21744731
114000 207834.3 0 2.4341043 2.5221162 0 4.9562204 0.11696186
115000 202055.54 0 2.4714851 2.5576047 0 5.0290898 -0.42272945
116000 203298.5 0 2.5043401 2.5626771 0 5.0670173 0.17688701
117000 194028.49 0 2.5273873 2.5945816 0 5.1219689 -0.70088882
118000 201726.79 0 2.5475583 2.6532013 0 5.2007596 0.22458895
119000 200037.8 0 2.599892 2.6701733 0 5.2700653 0.036916228
120000 194969.52 0 2.623779 2.6921819 0 5.3159609 -0.6067451
Loop time of 4.32114 on 1 procs for 120000 steps with 1024 atoms
Performance: 17136.102 tau/day, 19833.451 timesteps/s
Performance: 23993.668 tau/day, 27770.449 timesteps/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 | 0 | 0 | 0 | 0.0 | 0.00
Neigh | 0.00031301 | 0.00031301 | 0.00031301 | 0.0 | 0.01
Comm | 0.0072472 | 0.0072472 | 0.0072472 | 0.0 | 0.12
Output | 0.0036492 | 0.0036492 | 0.0036492 | 0.0 | 0.06
Modify | 5.7173 | 5.7173 | 5.7173 | 0.0 | 94.50
Other | | 0.3218 | | | 5.32
Neigh | 0.00029646 | 0.00029646 | 0.00029646 | 0.0 | 0.01
Comm | 0.0079174 | 0.0079174 | 0.0079174 | 0.0 | 0.18
Output | 0.0044738 | 0.0044738 | 0.0044738 | 0.0 | 0.10
Modify | 3.9818 | 3.9818 | 3.9818 | 0.0 | 92.15
Other | | 0.3267 | | | 7.56
Nlocal: 1024.00 ave 1024 max 1024 min
Histogram: 1 0 0 0 0 0 0 0 0 0
@ -241,8 +237,8 @@ Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 0
Ave neighs/atom = 0.0000000
Neighbor list builds = 154
Neighbor list builds = 153
Dangerous builds = 0
Total wall time: 0:00:08
Total wall time: 0:00:06

View File

@ -1,2 +0,0 @@
The input file in3d.brownian demonstrates how to run a 3d simulation
of ellipsoidal particles undergoing overdamped brownian motion.

View File

@ -0,0 +1,72 @@
##### overdamped dynamics of non-interacting ellipsoids in 2D #####
variable rng string gaussian
variable seed string 198098
variable temp string 1.0
variable gamma_r_1 string inf
variable gamma_r_2 string inf
variable gamma_r_3 string 0.1
variable gamma_t_1 string 5.0
variable gamma_t_2 string 7.0
variable gamma_t_3 string inf
variable params string ${rng}_${temp}_${gamma_r_1}_${gamma_r_2}_${gamma_r_3}_${gamma_t_1}_${gamma_t_2}_${gamma_t_3}
log log_${params}_2d.lammps.log
units lj
atom_style hybrid dipole ellipsoid
dimension 2
newton off
lattice sq 0.4
region box block -30 30 -30 30 -0.2 0.2
create_box 1 box
create_atoms 1 box
mass * 1.0
set type * dipole/random ${seed} 1.0
set type * shape 3.0 1.0 1.0
set type * quat/random ${seed}
velocity all create 1.0 1 loop geom
neighbor 1.0 bin
neigh_modify every 1 delay 1 check yes
pair_style none
fix 1 all brownian/asphere ${temp} ${seed} rng ${rng} &
gamma_r_eigen ${gamma_r_1} ${gamma_r_2} ${gamma_r_3} &
gamma_t_eigen ${gamma_t_1} ${gamma_t_2} ${gamma_t_3} &
dipole 1.0 0.0 0.0
#initialisation for the main run
# MSD
compute msd all msd
thermo_style custom step temp epair c_msd[*]
dump 1 all custom 1000 dump_${params}_2d.lammpstrj id type &
x y z xu yu zu mux muy muz fx fy fz
dump_modify 1 first yes sort id
timestep 0.00001
thermo 50
# main run
run 30000

View File

@ -1,63 +0,0 @@
# 3d overdamped brownian dynamics for ellipsoids
# with dipole moment also being updated
# choose variables to obey thermal equilibrium
# (fluctuation dissipation theorem) and no-slip
# boundary condition
variable rng string gaussian
variable gamma_t equal 1.0
variable gamma_r equal 0.33
variable D_t equal 1.0
variable D_r equal 3.0
variable seed equal 1974019
variable params string ${rng}_${gamma_t}_${gamma_r}_${D_t}_${D_r}
log log_${params}_3d.lammps.log
units lj
atom_style hybrid dipole sphere ellipsoid
dimension 3
newton off
lattice sc 0.4
region box block -4 4 -4 4 -4 4
create_box 1 box
create_atoms 1 box
mass * 1.0
set type * dipole/random ${seed} 1.0
set type * shape 1 1 1
set type * quat/random ${seed}
velocity all create 1.0 1 loop geom
pair_style none
fix 1 all brownian/asphere ${gamma_t} ${gamma_r} ${D_t} ${D_r} &
${seed} rng ${rng} dipole
compute press all pressure NULL virial
thermo_style custom step temp epair c_press
#equilibration
timestep 0.0000000001
thermo 50000
run 50000
reset_timestep 0
# MSD
compute msd all msd
thermo_style custom step temp epair c_msd[*] c_press
timestep 0.00001
thermo 10000
# main run
run 120000

View File

@ -0,0 +1,73 @@
##### overdamped dynamics of non-interacting ellipsoids in 3D #####
variable rng string uniform
variable seed string 198098
variable temp string 1.0
variable gamma_r_1 string 2.0
variable gamma_r_2 string 0.25
variable gamma_r_3 string 0.1
variable gamma_t_1 string 5.0
variable gamma_t_2 string 7.0
variable gamma_t_3 string 9.0
variable params string ${rng}_${temp}_${gamma_r_1}_${gamma_r_2}_${gamma_r_3}_${gamma_t_1}_${gamma_t_2}_${gamma_t_3}
log log_${params}_3d.lammps.log
units lj
atom_style hybrid dipole ellipsoid
dimension 3
newton off
lattice sc 0.4
region box block -8 8 -8 8 -8 8
create_box 1 box
create_atoms 1 box
mass * 1.0
set type * dipole/random ${seed} 1.0
set type * shape 3.0 1.0 1.0
set type * quat/random ${seed}
velocity all create 1.0 1 loop geom
neighbor 1.0 bin
neigh_modify every 1 delay 1 check yes
pair_style none
fix 1 all brownian/asphere ${temp} ${seed} rng ${rng} &
gamma_r_eigen ${gamma_r_1} ${gamma_r_2} ${gamma_r_3} &
gamma_t_eigen ${gamma_t_1} ${gamma_t_2} ${gamma_t_3} &
dipole 1.0 0.0 0.0
#initialisation for the main run
# MSD
compute msd all msd
thermo_style custom step temp epair c_msd[*]
dump 1 all custom 1000 dump_${params}_3d.lammpstrj id type &
x y z xu yu zu mux muy muz fx fy fz
dump_modify 1 first yes sort id
timestep 0.00001
thermo 50
# main run
run 30000

View File

@ -1,141 +0,0 @@
units lj
atom_style hybrid dipole sphere ellipsoid
WARNING: Atom_style hybrid defines both pertype and peratom masses - both must be set, only peratom masses will be used (src/atom_vec_hybrid.cpp:157)
WARNING: Peratom rmass is in multiple sub-styles - must be used consistently (src/atom_vec_hybrid.cpp:219)
dimension 3
newton off
lattice sc 0.4
Lattice spacing in x,y,z = 1.3572088 1.3572088 1.3572088
region box block -4 4 -4 4 -4 4
create_box 1 box
Created orthogonal box = (-5.4288352 -5.4288352 -5.4288352) to (5.4288352 5.4288352 5.4288352)
1 by 1 by 1 MPI processor grid
create_atoms 1 box
Created 512 atoms
create_atoms CPU = 0.002 seconds
mass * 1.0
set type * dipole/random ${seed} 1.0
set type * dipole/random 1974019 1.0
Setting atom values ...
512 settings made for dipole/random
set type * shape 1 1 1
Setting atom values ...
512 settings made for shape
set type * quat/random ${seed}
set type * quat/random 1974019
Setting atom values ...
512 settings made for quat/random
velocity all create 1.0 1 loop geom
pair_style none
fix 1 all brownian/asphere ${gamma_t} ${gamma_r} ${D_t} ${D_r} ${seed} rng ${rng} dipole
fix 1 all brownian/asphere 1 ${gamma_r} ${D_t} ${D_r} ${seed} rng ${rng} dipole
fix 1 all brownian/asphere 1 0.33 ${D_t} ${D_r} ${seed} rng ${rng} dipole
fix 1 all brownian/asphere 1 0.33 1 ${D_r} ${seed} rng ${rng} dipole
fix 1 all brownian/asphere 1 0.33 1 3 ${seed} rng ${rng} dipole
fix 1 all brownian/asphere 1 0.33 1 3 1974019 rng ${rng} dipole
fix 1 all brownian/asphere 1 0.33 1 3 1974019 rng gaussian dipole
compute press all pressure NULL virial
thermo_style custom step temp epair c_press
#equilibration
timestep 0.0000000001
thermo 50000
run 50000
WARNING: No pairwise cutoff or binsize set. Atom sorting therefore disabled. (src/atom.cpp:2118)
WARNING: Communication cutoff is 0.0. No ghost atoms will be generated. Atoms may get lost. (src/comm_brick.cpp:167)
Per MPI rank memory allocation (min/avg/max) = 5.379 | 5.379 | 5.379 Mbytes
Step Temp E_pair c_press
0 1 0 0
50000 1.9891104e+10 0 0
Loop time of 5.53749 on 1 procs for 50000 steps with 512 atoms
Performance: 0.078 tau/day, 9029.362 timesteps/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 | 0 | 0 | 0 | 0.0 | 0.00
Neigh | 0 | 0 | 0 | 0.0 | 0.00
Comm | 0.11711 | 0.11711 | 0.11711 | 0.0 | 2.11
Output | 2.034e-05 | 2.034e-05 | 2.034e-05 | 0.0 | 0.00
Modify | 5.3401 | 5.3401 | 5.3401 | 0.0 | 96.44
Other | | 0.08027 | | | 1.45
Nlocal: 512.000 ave 512 max 512 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 217.000 ave 217 max 217 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 0.00000 ave 0 max 0 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 0
Ave neighs/atom = 0.0000000
Neighbor list builds = 0
Dangerous builds = 0
reset_timestep 0
# MSD
compute msd all msd
thermo_style custom step temp epair c_msd[*] c_press
timestep 0.00001
thermo 10000
# main run
run 120000
WARNING: Communication cutoff is 0.0. No ghost atoms will be generated. Atoms may get lost. (src/comm_brick.cpp:167)
Per MPI rank memory allocation (min/avg/max) = 5.754 | 5.754 | 5.754 Mbytes
Step Temp E_pair c_msd[1] c_msd[2] c_msd[3] c_msd[4] c_press
0 1.9891104e+10 0 0 0 0 0 0
10000 201972.17 0 0.19918647 0.20079752 0.20495007 0.60493407 0
20000 197255.49 0 0.40800225 0.37910274 0.38545643 1.1725614 0
30000 195533.67 0 0.60991554 0.5898132 0.56621596 1.7659447 0
40000 192777.99 0 0.7761198 0.86101776 0.76531344 2.402451 0
50000 195241.43 0 1.0053256 1.0477568 0.96681401 3.0198964 0
60000 201887.49 0 1.2298892 1.1979933 1.1950141 3.6228965 0
70000 200187.14 0 1.4407329 1.356743 1.3992739 4.1967498 0
80000 202737.24 0 1.6305637 1.5663775 1.5724692 4.7694104 0
90000 185530.51 0 1.7937597 1.7795995 1.7222809 5.2956401 0
100000 204405.47 0 2.0149709 1.9738573 1.9423625 5.9311907 0
110000 194892.4 0 2.1974948 2.1560014 2.1453303 6.4988264 0
120000 198462.51 0 2.3761388 2.334739 2.287964 6.9988418 0
Loop time of 13.0463 on 1 procs for 120000 steps with 512 atoms
Performance: 7947.110 tau/day, 9198.044 timesteps/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 | 0 | 0 | 0 | 0.0 | 0.00
Neigh | 0.0011789 | 0.0011789 | 0.0011789 | 0.0 | 0.01
Comm | 0.030109 | 0.030109 | 0.030109 | 0.0 | 0.23
Output | 0.00030614 | 0.00030614 | 0.00030614 | 0.0 | 0.00
Modify | 12.834 | 12.834 | 12.834 | 0.0 | 98.38
Other | | 0.1803 | | | 1.38
Nlocal: 512.000 ave 512 max 512 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 0.00000 ave 0 max 0 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 0.00000 ave 0 max 0 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 0
Ave neighs/atom = 0.0000000
Neighbor list builds = 1748
Dangerous builds = 0
Total wall time: 0:00:18

View File

@ -1,153 +0,0 @@
units lj
atom_style hybrid dipole sphere ellipsoid
WARNING: Atom_style hybrid defines both pertype and peratom masses - both must be set, only peratom masses will be used (src/atom_vec_hybrid.cpp:157)
WARNING: Peratom rmass is in multiple sub-styles - must be used consistently (src/atom_vec_hybrid.cpp:219)
dimension 3
newton off
lattice sc 0.4
Lattice spacing in x,y,z = 1.3572088 1.3572088 1.3572088
region box block -4 4 -4 4 -4 4
create_box 1 box
Created orthogonal box = (-5.4288352 -5.4288352 -5.4288352) to (5.4288352 5.4288352 5.4288352)
1 by 1 by 1 MPI processor grid
create_atoms 1 box
Created 512 atoms
create_atoms CPU = 0.001 seconds
mass * 1.0
set type * dipole/random ${seed} 1.0
set type * dipole/random 1974019 1.0
Setting atom values ...
512 settings made for dipole/random
set type * shape 1 1 1
Setting atom values ...
512 settings made for shape
set type * quat/random ${seed}
set type * quat/random 1974019
Setting atom values ...
512 settings made for quat/random
velocity all create 1.0 1 loop geom
neighbor 1.0 bin
neigh_modify every 1 delay 1 check yes
pair_style none
fix 1 all brownian/asphere ${gamma_t} ${gamma_r} ${D_t} ${D_r} ${seed} rng ${rng} dipole
fix 1 all brownian/asphere 4 ${gamma_r} ${D_t} ${D_r} ${seed} rng ${rng} dipole
fix 1 all brownian/asphere 4 1 ${D_t} ${D_r} ${seed} rng ${rng} dipole
fix 1 all brownian/asphere 4 1 7 ${D_r} ${seed} rng ${rng} dipole
fix 1 all brownian/asphere 4 1 7 13 ${seed} rng ${rng} dipole
fix 1 all brownian/asphere 4 1 7 13 1974019 rng ${rng} dipole
fix 1 all brownian/asphere 4 1 7 13 1974019 rng gaussian dipole
compute press all pressure NULL virial
thermo_style custom step temp epair c_press
#equilibration
timestep 0.0000000001
thermo 50000
run 50000
WARNING: No pairwise cutoff or binsize set. Atom sorting therefore disabled. (src/atom.cpp:2118)
WARNING: Communication cutoff is 0.0. No ghost atoms will be generated. Atoms may get lost. (src/comm_brick.cpp:167)
Per MPI rank memory allocation (min/avg/max) = 5.379 | 5.379 | 5.379 Mbytes
Step Temp E_pair c_press
0 1 0 0
50000 1.3923773e+11 0 0
Loop time of 5.61345 on 1 procs for 50000 steps with 512 atoms
Performance: 0.077 tau/day, 8907.171 timesteps/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 | 0 | 0 | 0 | 0.0 | 0.00
Neigh | 0 | 0 | 0 | 0.0 | 0.00
Comm | 0.11822 | 0.11822 | 0.11822 | 0.0 | 2.11
Output | 2.0199e-05 | 2.0199e-05 | 2.0199e-05 | 0.0 | 0.00
Modify | 5.4135 | 5.4135 | 5.4135 | 0.0 | 96.44
Other | | 0.0817 | | | 1.46
Nlocal: 512.000 ave 512 max 512 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 217.000 ave 217 max 217 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 0.00000 ave 0 max 0 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 0
Ave neighs/atom = 0.0000000
Neighbor list builds = 0
Dangerous builds = 0
reset_timestep 0
#initialisation for the main run
# MSD
compute msd all msd
thermo_style custom step temp epair c_msd[*] c_press
# write trajectory and thermo in a log-scale frequency
#dump 1 all custom 1000 dump_${params}_3d.lammpstrj id type # x y xu yu mux muy muz fx fy fz
#dump_modify 1 first yes sort id
timestep 0.00001
thermo 10000
# main run
run 120000
WARNING: Communication cutoff is 0.0. No ghost atoms will be generated. Atoms may get lost. (src/comm_brick.cpp:167)
Per MPI rank memory allocation (min/avg/max) = 5.754 | 5.754 | 5.754 Mbytes
Step Temp E_pair c_msd[1] c_msd[2] c_msd[3] c_msd[4] c_press
0 1.3923773e+11 0 0 0 0 0 0
10000 1413805.2 0 1.3943053 1.4055827 1.4346505 4.2345385 0
20000 1380788.4 0 2.8560158 2.6537192 2.698195 8.2079299 0
30000 1368735.7 0 4.2694087 4.1286924 3.9635117 12.361613 0
40000 1349446 0 5.4328386 6.0271243 5.3571941 16.817157 0
50000 1366690 0 7.0372792 7.3342977 6.7676981 21.139275 0
60000 1413212.4 0 8.6092241 8.3859529 8.3650987 25.360276 0
70000 1401310 0 10.085131 9.4972009 9.7949174 29.377249 0
80000 1419160.7 0 11.413946 10.964643 11.007284 33.385873 0
90000 1298713.5 0 12.556318 12.457196 12.055966 37.06948 0
100000 1430838.3 0 14.104796 13.817001 13.596538 41.518335 0
110000 1364246.8 0 15.382464 15.09201 15.017312 45.491785 0
120000 1389237.6 0 16.632972 16.343173 16.015748 48.991892 0
Loop time of 13.2439 on 1 procs for 120000 steps with 512 atoms
Performance: 7828.487 tau/day, 9060.749 timesteps/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 | 0 | 0 | 0 | 0.0 | 0.00
Neigh | 0.00075178 | 0.00075178 | 0.00075178 | 0.0 | 0.01
Comm | 0.0282 | 0.0282 | 0.0282 | 0.0 | 0.21
Output | 0.00032692 | 0.00032692 | 0.00032692 | 0.0 | 0.00
Modify | 13.017 | 13.017 | 13.017 | 0.0 | 98.29
Other | | 0.1976 | | | 1.49
Nlocal: 512.000 ave 512 max 512 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 0.00000 ave 0 max 0 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 0.00000 ave 0 max 0 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 0
Ave neighs/atom = 0.0000000
Neighbor list builds = 1110
Dangerous builds = 0
Total wall time: 0:00:18

View File

@ -0,0 +1,62 @@
##### dynamics of non-interacting point particles in 2D #####
variable rng string gaussian
variable seed string 198098
variable temp string 5.0
variable gamma_t string 1.0
variable params string ${rng}_${temp}_${gamma_t}
log log_${params}_2d.lammps.log
units lj
atom_style atomic
dimension 2
newton off
lattice sq 0.4
region box block -30 30 -30 30 -0.2 0.2
create_box 1 box
create_atoms 1 box
mass * 1.0
velocity all create 1.0 1 loop geom
neighbor 1.0 bin
neigh_modify every 1 delay 1 check yes
pair_style none
fix 1 all brownian ${temp} ${seed} rng ${rng} &
gamma_t ${gamma_t}
#initialisation for the main run
# MSD
compute msd all msd
thermo_style custom step temp epair c_msd[*]
dump 1 all custom 1000 dump_${params}_3d.lammpstrj id type &
x y z xu yu zu fx fy fz
dump_modify 1 first yes sort id
timestep 0.00001
thermo 50
# main run
run 30000

View File

@ -0,0 +1,61 @@
##### overdamped dynamics of non-interacting point particles in 3D #####
variable rng string gaussian
variable seed string 198098
variable temp string 5.0
variable gamma_t string 1.0
variable params string ${rng}_${temp}_${gamma_t}
log log_${params}_3d.lammps.log
units lj
atom_style atomic
dimension 3
newton off
lattice sc 0.4
region box block -8 8 -8 8 -8 8
create_box 1 box
create_atoms 1 box
mass * 1.0
velocity all create 1.0 1 loop geom
neighbor 1.0 bin
neigh_modify every 1 delay 1 check yes
pair_style none
fix 1 all brownian ${temp} ${seed} rng ${rng} &
gamma_t ${gamma_t}
#initialisation for the main run
# MSD
compute msd all msd
thermo_style custom step temp epair c_msd[*]
dump 1 all custom 1000 dump_${params}_3d.lammpstrj id type &
x y z xu yu zu fx fy fz
dump_modify 1 first yes sort id
timestep 0.00001
thermo 50
# main run
run 30000

View File

@ -1,26 +0,0 @@
The input file in2ddipole.brownian demonstrates how to run a
2d simulation of particles undergoing overdamped brownian motion
in both translational and rotational degrees of freedom. Dipole
updating is turned on, so the package DIPOLE must be built
for this example to work.
The input file in3d_virial_on.brownian demonstrates how to run
a similar simulation but in 3d. In this case, the virial
contribution of the brownian dynamics (the sum
sum_i <r_i dot sqrt{2D_t}W>/(3*volume) where W is
a random variable with mean 0 and variance dt) is
calculated via the fix_modify command. For long
enough times, this will be equal to rho*D_t*gamma_t
(the ideal gas term in equilibrium systems). Note that
no dipole updating is performed.
To confirm rotational diffusion is working correctly,
run the above simulations with dump files on and
measure \sum_i<e_i(0) dot e_i(t)> where e_i is the
dipole vector of particle i, and one should
find that this decays as an exponential with
timescale 1/((d-1)*D_r).
Note that both of the simulations above are not long
enough to get good statistics on e.g. ideal gas
pressure, rotational diffusion, or translational diffusion.

View File

@ -0,0 +1,66 @@
##### overdamped dynamics of a sphere (with dipole attached to it) in 2D #####
variable rng string uniform
variable seed string 198098
variable temp string 1.0
variable gamma_t string 5.0
variable gamma_r string 0.7
variable params string ${rng}_${temp}_${gamma_r}_${gamma_t}
log log_${params}_2d.lammps.log
units lj
atom_style hybrid dipole sphere
dimension 2
newton off
lattice sq 0.4
region box block -30 30 -30 30 -0.2 0.2
create_box 1 box
create_atoms 1 box
mass * 1.0
set type * dipole/random ${seed} 1.0
velocity all create 1.0 1 loop geom
neighbor 1.0 bin
neigh_modify every 1 delay 1 check yes
pair_style none
fix 1 all brownian/sphere ${temp} ${seed} rng ${rng} &
gamma_r ${gamma_r} gamma_t ${gamma_t}
#initialisation for the main run
# MSD
compute msd all msd
thermo_style custom step temp epair c_msd[*]
dump 1 all custom 1000 dump_${params}_2d.lammpstrj id type &
x y z xu yu zu mux muy muz fx fy fz
dump_modify 1 first yes sort id
timestep 0.00001
thermo 50
# main run
run 30000

View File

@ -1,59 +0,0 @@
# 2d overdamped brownian dynamics of a sphere
# with dipole also being updated
variable rng string gaussian
variable gamma_t equal 4.0
variable gamma_r equal 1.0
variable D_t equal 7.0
variable D_r equal 13.0
variable seed equal 1974019
variable params string ${rng}_${gamma_t}_${gamma_r}_${D_t}_${D_r}
log log_${params}_2d.lammps.log
units lj
atom_style hybrid dipole sphere
dimension 2
newton off
lattice sq 0.4
region box block -16 16 -16 16 -0.2 0.2
create_box 1 box
create_atoms 1 box
mass * 1.0
set type * dipole/random ${seed} 1.0
velocity all create 1.0 1 loop geom
pair_style none
fix 1 all brownian/sphere ${gamma_t} ${gamma_r} ${D_t} &
${D_r} ${seed} rng ${rng} dipole
fix 2 all enforce2d
compute press all pressure NULL virial
thermo_style custom step temp epair c_press
#equilibration
timestep 0.0000000001
thermo 50001
run 50000
reset_timestep 0
# MSD
compute msd all msd
thermo_style custom step temp epair c_msd[*] c_press
timestep 0.00001
thermo 1000
# main run
run 120000

View File

@ -0,0 +1,65 @@
##### overdamped dynamics of a sphere (with dipole attached to it) in 3D#####
variable rng string uniform
variable seed string 198098
variable temp string 1.0
variable gamma_t string 5.0
variable gamma_r string 0.7
variable params string ${rng}_${temp}_${gamma_r}_${gamma_t}
log log_${params}_3d.lammps.log
units lj
atom_style hybrid dipole sphere
dimension 3
newton off
lattice sc 0.4
region box block -8 8 -8 8 -8 8
create_box 1 box
create_atoms 1 box
mass * 1.0
set type * dipole/random ${seed} 1.0
velocity all create 1.0 1 loop geom
neighbor 1.0 bin
neigh_modify every 1 delay 1 check yes
pair_style none
fix 1 all brownian/sphere ${temp} ${seed} rng ${rng} &
gamma_r ${gamma_r} gamma_t ${gamma_t}
#initialisation for the main run
# MSD
compute msd all msd
thermo_style custom step temp epair c_msd[*]
dump 1 all custom 1000 dump_${params}_3d.lammpstrj id type &
x y z xu yu zu mux muy muz fx fy fz
dump_modify 1 first yes sort id
timestep 0.00001
thermo 50
# main run
run 30000

View File

@ -1,59 +0,0 @@
# 3d overdamped brownian dynamics of sphere, with
# virial contribution (i.e. ideal gas pressure)
# included
variable rng string uniform
variable gamma_t equal 10.0
variable gamma_r equal 1.0
variable D_t equal 5.0
variable D_r equal 15.0
variable seed equal 553910
variable params string ${rng}_${gamma_t}_${gamma_r}_${D_t}_${D_r}
log log_${params}_3d.lammps.log
units lj
atom_style sphere
dimension 3
lattice sc 0.4
region box block -8 8 -8 8 -8 8
create_box 1 box
create_atoms 1 box
#mass * 1.0
velocity all create 1.0 1 loop geom
pair_style none
fix 1 all brownian/sphere ${gamma_t} ${gamma_r} ${D_t} &
${D_r} ${seed} rng ${rng}
fix_modify 1 virial yes
compute press all pressure NULL virial
thermo_style custom step temp epair c_press
#equilibration
timestep 0.0000000001
thermo 50001
run 50000
reset_timestep 0
# MSD
compute msd all msd
thermo_style custom step temp epair c_msd[*] c_press
timestep 0.00001
thermo 1000
# main run
run 120000

View File

@ -1,260 +0,0 @@
units lj
atom_style hybrid dipole sphere
WARNING: Atom_style hybrid defines both pertype and peratom masses - both must be set, only peratom masses will be used (src/atom_vec_hybrid.cpp:157)
dimension 2
newton off
lattice sq 0.4
Lattice spacing in x,y,z = 1.5811388 1.5811388 1.5811388
region box block -16 16 -16 16 -0.2 0.2
create_box 1 box
Created orthogonal box = (-25.298221 -25.298221 -0.31622777) to (25.298221 25.298221 0.31622777)
1 by 1 by 1 MPI processor grid
create_atoms 1 box
Created 1024 atoms
create_atoms CPU = 0.002 seconds
mass * 1.0
set type * dipole/random ${seed} 1.0
set type * dipole/random 1974019 1.0
Setting atom values ...
1024 settings made for dipole/random
velocity all create 1.0 1 loop geom
neighbor 1.0 bin
neigh_modify every 1 delay 1 check yes
pair_style none
#compute d all property/atom mux muy muz
fix 1 all brownian/sphere ${gamma_t} ${gamma_r} ${D_t} ${D_r} ${seed} rng ${rng} dipole
fix 1 all brownian/sphere 4 ${gamma_r} ${D_t} ${D_r} ${seed} rng ${rng} dipole
fix 1 all brownian/sphere 4 1 ${D_t} ${D_r} ${seed} rng ${rng} dipole
fix 1 all brownian/sphere 4 1 7 ${D_r} ${seed} rng ${rng} dipole
fix 1 all brownian/sphere 4 1 7 13 ${seed} rng ${rng} dipole
fix 1 all brownian/sphere 4 1 7 13 1974019 rng ${rng} dipole
fix 1 all brownian/sphere 4 1 7 13 1974019 rng gaussian dipole
fix 2 all enforce2d
compute press all pressure NULL virial
thermo_style custom step temp epair c_press
#equilibration
timestep 0.0000000001
thermo 50001
run 50000
WARNING: No pairwise cutoff or binsize set. Atom sorting therefore disabled. (src/atom.cpp:2118)
WARNING: Communication cutoff is 0.0. No ghost atoms will be generated. Atoms may get lost. (src/comm_brick.cpp:167)
Per MPI rank memory allocation (min/avg/max) = 4.289 | 4.289 | 4.289 Mbytes
Step Temp E_pair c_press
0 1 0 0
50000 7.3671759e+10 0 0
Loop time of 11.2532 on 1 procs for 50000 steps with 1024 atoms
Performance: 0.038 tau/day, 4443.198 timesteps/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 | 0 | 0 | 0 | 0.0 | 0.00
Neigh | 0 | 0 | 0 | 0.0 | 0.00
Comm | 0.031456 | 0.031456 | 0.031456 | 0.0 | 0.28
Output | 2.0958e-05 | 2.0958e-05 | 2.0958e-05 | 0.0 | 0.00
Modify | 11.067 | 11.067 | 11.067 | 0.0 | 98.35
Other | | 0.1546 | | | 1.37
Nlocal: 1024.00 ave 1024 max 1024 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 65.0000 ave 65 max 65 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 0.00000 ave 0 max 0 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 0
Ave neighs/atom = 0.0000000
Neighbor list builds = 0
Dangerous builds = 0
reset_timestep 0
#initialisation for the main run
# MSD
compute msd all msd
thermo_style custom step temp epair c_msd[*] c_press
# write trajectory and thermo in a log-scale frequency
# uncomment next three lines for dump output
dump 1 all custom 2000 dump_${params}_2d.lammpstrj id type x y xu yu mux muy muz fx fy fz
dump 1 all custom 2000 dump_gaussian_4_1_7_13_2d.lammpstrj id type x y xu yu mux muy muz fx fy fz
dump_modify 1 first yes sort id
timestep 0.00001
thermo 1000
# main run
run 120000
WARNING: Communication cutoff is 0.0. No ghost atoms will be generated. Atoms may get lost. (src/comm_brick.cpp:167)
Per MPI rank memory allocation (min/avg/max) = 6.113 | 6.113 | 6.113 Mbytes
Step Temp E_pair c_msd[1] c_msd[2] c_msd[3] c_msd[4] c_press
0 7.3671759e+10 0 0 0 0 0 0
1000 710744.42 0 0.1332856 0.13577642 0 0.26906203 0
2000 705025.5 0 0.27078701 0.27355073 0 0.54433774 0
3000 750845.29 0 0.41036556 0.39710766 0 0.80747321 0
4000 752542.47 0 0.53097803 0.53654063 0 1.0675187 0
5000 731812.26 0 0.66927129 0.65872533 0 1.3279966 0
6000 716119.24 0 0.79097615 0.76825364 0 1.5592298 0
7000 726294.28 0 0.93322099 0.91220222 0 1.8454232 0
8000 673771.54 0 1.0789689 1.031843 0 2.1108119 0
9000 757173.95 0 1.2328252 1.2024778 0 2.435303 0
10000 693711.95 0 1.3972184 1.3045575 0 2.7017759 0
11000 774897.65 0 1.584036 1.4168797 0 3.0009157 0
12000 764910.09 0 1.7344079 1.5751172 0 3.3095251 0
13000 752859.5 0 1.8538323 1.7336107 0 3.5874429 0
14000 746333.26 0 2.0392353 1.9027299 0 3.9419652 0
15000 735704.24 0 2.1714465 2.000952 0 4.1723985 0
16000 722768.01 0 2.258542 2.1084289 0 4.3669709 0
17000 741408.63 0 2.4194247 2.2469958 0 4.6664206 0
18000 713609.29 0 2.5366244 2.3325203 0 4.8691447 0
19000 770066.65 0 2.6662758 2.4726928 0 5.1389686 0
20000 739828.53 0 2.792873 2.6188232 0 5.4116962 0
21000 719478.96 0 2.9109491 2.7872008 0 5.6981499 0
22000 737448.77 0 3.0162218 2.9213733 0 5.9375951 0
23000 714695.3 0 3.1309486 3.0325142 0 6.1634628 0
24000 712386.78 0 3.31348 3.1323675 0 6.4458475 0
25000 747298.11 0 3.5148965 3.2978465 0 6.812743 0
26000 737240.19 0 3.7117818 3.4245004 0 7.1362822 0
27000 720878.36 0 3.8342853 3.5681829 0 7.4024682 0
28000 776824.55 0 3.9904931 3.6853691 0 7.6758622 0
29000 714696.4 0 4.0733919 3.8807741 0 7.954166 0
30000 725827.3 0 4.2213715 4.0552488 0 8.2766204 0
31000 737978.89 0 4.2918759 4.1795647 0 8.4714407 0
32000 766620.93 0 4.4620184 4.2765194 0 8.7385378 0
33000 714739.71 0 4.5942749 4.426881 0 9.0211559 0
34000 694821.06 0 4.686348 4.5057433 0 9.1920912 0
35000 721948.38 0 4.7526371 4.5689873 0 9.3216245 0
36000 713621.16 0 4.8645036 4.6355302 0 9.5000339 0
37000 704079.85 0 4.9652601 4.8235856 0 9.7888457 0
38000 706914.29 0 5.1045998 4.9585169 0 10.063117 0
39000 736940.33 0 5.2172626 5.1168713 0 10.334134 0
40000 738302.73 0 5.3720228 5.3207578 0 10.692781 0
41000 746518.85 0 5.5376524 5.5192708 0 11.056923 0
42000 719970.82 0 5.7610696 5.6335312 0 11.394601 0
43000 736875.87 0 5.8769052 5.7504356 0 11.627341 0
44000 765218.38 0 6.0308866 5.9650683 0 11.995955 0
45000 739382.69 0 6.1577029 6.0736304 0 12.231333 0
46000 730967.87 0 6.3846223 6.2090389 0 12.593661 0
47000 758881.95 0 6.5604053 6.3883315 0 12.948737 0
48000 751135.53 0 6.6160248 6.5199017 0 13.135926 0
49000 721058.97 0 6.6124519 6.6938253 0 13.306277 0
50000 686287.15 0 6.8527601 6.8518895 0 13.70465 0
51000 735175.7 0 6.9928329 6.8663476 0 13.85918 0
52000 760085.67 0 7.1009497 7.0345784 0 14.135528 0
53000 741211.89 0 7.2287282 7.2318431 0 14.460571 0
54000 723668.97 0 7.3732634 7.3847301 0 14.757994 0
55000 751846.88 0 7.5566634 7.4927365 0 15.0494 0
56000 762648.27 0 7.7651818 7.5379796 0 15.303161 0
57000 710175.2 0 7.9051989 7.6644542 0 15.569653 0
58000 740068.94 0 8.0296854 7.8307471 0 15.860433 0
59000 728119.43 0 8.1562433 8.039333 0 16.195576 0
60000 728768.48 0 8.316192 8.1643843 0 16.480576 0
61000 707538.83 0 8.3727565 8.3895027 0 16.762259 0
62000 713931.41 0 8.4657927 8.5517529 0 17.017546 0
63000 742604.95 0 8.6550684 8.7189851 0 17.374053 0
64000 738981.54 0 8.7331005 8.9208616 0 17.653962 0
65000 701685.87 0 8.898571 8.977933 0 17.876504 0
66000 716151.39 0 9.0229699 9.1292403 0 18.15221 0
67000 732641.29 0 9.151611 9.3249179 0 18.476529 0
68000 740870.85 0 9.233452 9.4667607 0 18.700213 0
69000 733159.17 0 9.1743719 9.5648134 0 18.739185 0
70000 693562.75 0 9.3414089 9.7425241 0 19.083933 0
71000 748694.53 0 9.5036102 9.8686571 0 19.372267 0
72000 721046.02 0 9.7116931 10.0195 0 19.731193 0
73000 736631.66 0 9.7095662 10.205306 0 19.914872 0
74000 751264.08 0 9.9413234 10.327844 0 20.269167 0
75000 729223.27 0 10.211903 10.412516 0 20.624419 0
76000 747811 0 10.332266 10.544251 0 20.876517 0
77000 717505.01 0 10.521195 10.737774 0 21.258969 0
78000 712288.89 0 10.712514 10.874932 0 21.587446 0
79000 728912.34 0 10.755227 10.968257 0 21.723484 0
80000 743505.67 0 11.026063 11.070234 0 22.096298 0
81000 732218.14 0 11.321417 11.31773 0 22.639147 0
82000 777186.61 0 11.480074 11.401465 0 22.881539 0
83000 734805.95 0 11.7524 11.62552 0 23.37792 0
84000 753703.38 0 11.863318 11.833925 0 23.697243 0
85000 755730.75 0 12.068564 11.937143 0 24.005707 0
86000 725021.19 0 12.258195 12.034586 0 24.292781 0
87000 731844.67 0 12.341844 12.331792 0 24.673636 0
88000 707368.15 0 12.431452 12.547314 0 24.978766 0
89000 784756.28 0 12.405699 12.686021 0 25.09172 0
90000 760278.97 0 12.542669 12.851925 0 25.394593 0
91000 753765.97 0 12.703534 13.08092 0 25.784454 0
92000 705869.22 0 12.971838 13.210092 0 26.18193 0
93000 741699.59 0 13.110745 13.383115 0 26.49386 0
94000 717372.41 0 13.252109 13.466388 0 26.718497 0
95000 721820.49 0 13.373146 13.660605 0 27.033751 0
96000 777409.97 0 13.596822 13.886961 0 27.483782 0
97000 741480.91 0 13.752545 14.204624 0 27.957169 0
98000 725755.72 0 13.918302 14.219292 0 28.137594 0
99000 729710.24 0 14.065417 14.213142 0 28.278559 0
100000 700366.74 0 14.278054 14.324135 0 28.602189 0
101000 722737.18 0 14.398464 14.46904 0 28.867505 0
102000 758930.85 0 14.408098 14.637964 0 29.046061 0
103000 725233.66 0 14.526482 14.719688 0 29.24617 0
104000 752416.52 0 14.641393 14.952087 0 29.59348 0
105000 769047.5 0 14.780788 15.182945 0 29.963733 0
106000 734849.98 0 14.840982 15.316112 0 30.157094 0
107000 720210.74 0 15.010029 15.372792 0 30.382821 0
108000 741216.55 0 15.113143 15.488575 0 30.601718 0
109000 714158.43 0 15.057499 15.592865 0 30.650364 0
110000 743262.25 0 15.381281 15.798368 0 31.179649 0
111000 728836.92 0 15.488226 16.034645 0 31.522871 0
112000 753490.67 0 15.679979 16.350819 0 32.030799 0
113000 730699.5 0 15.82813 16.680136 0 32.508266 0
114000 705526.22 0 16.099699 16.920095 0 33.019794 0
115000 752408.36 0 16.393466 17.053935 0 33.447401 0
116000 713697.16 0 16.634939 17.35349 0 33.98843 0
117000 690041.5 0 16.727379 17.457936 0 34.185315 0
118000 745594.37 0 16.838659 17.585392 0 34.424052 0
119000 714487.42 0 17.064214 17.743478 0 34.807692 0
120000 716557.14 0 17.105558 17.845925 0 34.951483 0
Loop time of 28.1507 on 1 procs for 120000 steps with 1024 atoms
Performance: 3683.037 tau/day, 4262.774 timesteps/s
99.9% CPU use with 1 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 0 | 0 | 0 | 0.0 | 0.00
Neigh | 0.0016237 | 0.0016237 | 0.0016237 | 0.0 | 0.01
Comm | 0.027064 | 0.027064 | 0.027064 | 0.0 | 0.10
Output | 0.1712 | 0.1712 | 0.1712 | 0.0 | 0.61
Modify | 27.545 | 27.545 | 27.545 | 0.0 | 97.85
Other | | 0.4062 | | | 1.44
Nlocal: 1024.00 ave 1024 max 1024 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 0.00000 ave 0 max 0 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 0.00000 ave 0 max 0 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 0
Ave neighs/atom = 0.0000000
Neighbor list builds = 1049
Dangerous builds = 0
Total wall time: 0:00:39

View File

@ -1,249 +0,0 @@
units lj
atom_style sphere
dimension 3
newton off
lattice sc 0.4
Lattice spacing in x,y,z = 1.3572088 1.3572088 1.3572088
region box block -8 8 -8 8 -8 8
create_box 1 box
Created orthogonal box = (-10.857670 -10.857670 -10.857670) to (10.857670 10.857670 10.857670)
1 by 1 by 1 MPI processor grid
create_atoms 1 box
Created 4096 atoms
create_atoms CPU = 0.001 seconds
#mass * 1.0
velocity all create 1.0 1 loop geom
neighbor 1.0 bin
neigh_modify every 1 delay 1 check yes
pair_style none
fix 1 all bd/sphere ${gamma_t} ${gamma_r} ${D_t} ${D_r} ${seed} rng ${rng}
fix 1 all bd/sphere 10 ${gamma_r} ${D_t} ${D_r} ${seed} rng ${rng}
fix 1 all bd/sphere 10 1 ${D_t} ${D_r} ${seed} rng ${rng}
fix 1 all bd/sphere 10 1 5 ${D_r} ${seed} rng ${rng}
fix 1 all bd/sphere 10 1 5 15 ${seed} rng ${rng}
fix 1 all bd/sphere 10 1 5 15 553910 rng ${rng}
fix 1 all bd/sphere 10 1 5 15 553910 rng uniform
fix_modify 1 virial yes
compute press all pressure NULL virial
thermo_style custom step temp epair c_press
#equilibration
timestep 0.0000000001
thermo 50001
run 50000
WARNING: No pairwise cutoff or binsize set. Atom sorting therefore disabled. (src/atom.cpp:2118)
WARNING: Communication cutoff is 0.0. No ghost atoms will be generated. Atoms may get lost. (src/comm_brick.cpp:167)
Per MPI rank memory allocation (min/avg/max) = 3.581 | 3.581 | 3.581 Mbytes
Step Temp E_pair c_press
0 1 0 -32553.271
50000 5.2351457e+10 0 -15026.42
Loop time of 16.0183 on 1 procs for 50000 steps with 4096 atoms
Performance: 0.027 tau/day, 3121.426 timesteps/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 | 0 | 0 | 0 | 0.0 | 0.00
Neigh | 0 | 0 | 0 | 0.0 | 0.00
Comm | 0.074984 | 0.074984 | 0.074984 | 0.0 | 0.47
Output | 3.0041e-05 | 3.0041e-05 | 3.0041e-05 | 0.0 | 0.00
Modify | 15.366 | 15.366 | 15.366 | 0.0 | 95.93
Other | | 0.5772 | | | 3.60
Nlocal: 4096.00 ave 4096 max 4096 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 817.000 ave 817 max 817 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 0.00000 ave 0 max 0 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 0
Ave neighs/atom = 0.0000000
Neighbor list builds = 0
Dangerous builds = 0
reset_timestep 0
#initialisation for the main run
# MSD
compute msd all msd
thermo_style custom step temp epair c_msd[*] c_press
# write trajectory and thermo in a log-scale frequency
# uncomment the next three lines for dump file
#dump 1 all custom 10000 dump_${params}_3d.lammpstrj id type # x y xu yu fx fy fz
#dump_modify 1 first yes sort id
timestep 0.00001
thermo 1000
# main run
run 120000
WARNING: Communication cutoff is 0.0. No ghost atoms will be generated. Atoms may get lost. (src/comm_brick.cpp:167)
Per MPI rank memory allocation (min/avg/max) = 3.956 | 3.956 | 3.956 Mbytes
Step Temp E_pair c_msd[1] c_msd[2] c_msd[3] c_msd[4] c_press
0 5.2351457e+10 0 0 0 0 0 -233.83012
1000 522590.88 0 0.10259269 0.10487519 0.10391005 0.31137793 -13.730626
2000 521776.08 0 0.20662097 0.2118237 0.20371673 0.62216139 -141.90848
3000 529408.9 0 0.30711557 0.3105565 0.30293728 0.92060935 28.335187
4000 518069.42 0 0.39918073 0.40643835 0.40168024 1.2072993 -12.262269
5000 520487.75 0 0.50222348 0.50854461 0.50304351 1.5138116 303.56775
6000 527970.5 0 0.60443861 0.60363711 0.59884932 1.806925 218.55799
7000 519424.68 0 0.69529071 0.70025532 0.70347351 2.0990195 -363.51723
8000 521925.72 0 0.80545039 0.81520807 0.79930708 2.4199655 510.47732
9000 518397.28 0 0.91236827 0.9050426 0.89431985 2.7117307 537.74151
10000 525696.47 0 0.99494325 0.99433832 0.98574884 2.9750304 411.56896
11000 524505.88 0 1.0863677 1.1232636 1.0810609 3.2906921 32.652569
12000 525350.08 0 1.1816136 1.2412674 1.189996 3.612877 45.304061
13000 524598.12 0 1.2841566 1.3381915 1.2906249 3.912973 -376.50739
14000 525438.09 0 1.3964076 1.4420032 1.3915611 4.2299719 -31.273339
15000 523531.08 0 1.4829127 1.5436611 1.4892074 4.5157811 -357.26366
16000 532366.43 0 1.5871965 1.6432286 1.6020146 4.8324397 435.10667
17000 523629.21 0 1.6968632 1.7574539 1.6967316 5.1510487 280.59816
18000 521432.94 0 1.7973983 1.8462477 1.8087416 5.4523876 134.69384
19000 530778.78 0 1.888653 1.9328611 1.9268155 5.7483296 -64.346115
20000 525623.21 0 1.9718697 2.0048196 2.0068177 5.983507 73.884028
21000 524862.26 0 2.0414226 2.0967449 2.0878261 6.2259936 163.95173
22000 529123.04 0 2.143889 2.1850282 2.1972491 6.5261662 234.87793
23000 519629.76 0 2.2297952 2.2661611 2.2805197 6.776476 57.65702
24000 523746.18 0 2.3293654 2.3658544 2.3842082 7.079428 46.291089
25000 515851.07 0 2.4177426 2.4559274 2.5029961 7.3766661 -16.353546
26000 515592.59 0 2.5352044 2.5438918 2.5657776 7.6448738 -65.259248
27000 527764.96 0 2.6498176 2.6423592 2.6715377 7.9637146 324.48367
28000 527177.18 0 2.7405087 2.7431537 2.7702133 8.2538757 -47.906223
29000 521079.66 0 2.8294642 2.8410515 2.8546167 8.5251323 -135.36173
30000 526092.8 0 2.961898 2.9361476 2.9319586 8.8300042 206.28635
31000 529595.93 0 3.0638234 3.0128995 3.0434232 9.1201461 -35.946596
32000 521173.83 0 3.159344 3.1397814 3.1455147 9.4446401 328.73193
33000 522989.77 0 3.2567127 3.2348491 3.2444068 9.7359686 362.33435
34000 522930.45 0 3.3489514 3.3433962 3.3391822 10.03153 178.73773
35000 530664.64 0 3.4445399 3.4843743 3.4205275 10.349442 146.02898
36000 521443.26 0 3.520475 3.6171115 3.5179112 10.655498 244.07172
37000 529669.54 0 3.6076942 3.7233869 3.6169718 10.948053 79.46077
38000 527521.93 0 3.7093699 3.8275855 3.7451165 11.282072 -91.131074
39000 523237.65 0 3.8088585 3.9559041 3.8748751 11.639638 -70.265271
40000 522798.75 0 3.89319 4.0420406 3.9196106 11.854841 91.631855
41000 524228.77 0 3.9863379 4.1602581 4.0393136 12.18591 113.26515
42000 524546.08 0 4.0969366 4.2738786 4.1218115 12.492627 313.83957
43000 515948.22 0 4.2161418 4.3700009 4.2178962 12.804039 92.993253
44000 527319.42 0 4.3267431 4.4688062 4.3274029 13.122952 -118.91153
45000 526222.74 0 4.4289127 4.5531203 4.4604075 13.442441 -474.98113
46000 524617.54 0 4.5422968 4.6316235 4.5445894 13.71851 -303.23458
47000 524067.07 0 4.6284944 4.6989745 4.5884153 13.915884 -343.41107
48000 535659.25 0 4.7221068 4.7505302 4.7212887 14.193926 149.75872
49000 527425.65 0 4.8098179 4.8761354 4.8362998 14.522253 -272.18936
50000 516588.98 0 4.9077783 4.9950242 4.9826783 14.885481 -52.925733
51000 522291.86 0 5.0022325 5.0659091 5.0525647 15.120706 -52.985883
52000 530056.07 0 5.123751 5.1470734 5.1603805 15.431205 -231.29334
53000 525624.96 0 5.2412036 5.2543541 5.2717587 15.767316 294.19678
54000 524407.27 0 5.3530927 5.359043 5.342451 16.054587 -55.282671
55000 519989.37 0 5.4458173 5.4781678 5.413865 16.33785 -135.28414
56000 524987.68 0 5.5282178 5.5825979 5.5127172 16.623533 84.654044
57000 525610.66 0 5.6202713 5.6925409 5.5964466 16.909259 407.16526
58000 523097.93 0 5.7390671 5.7830376 5.6921201 17.214225 -271.05243
59000 525357.74 0 5.8037507 5.8654514 5.7920744 17.461276 -213.07815
60000 522185.96 0 5.9067925 5.9909357 5.903525 17.801253 330.09637
61000 527694.33 0 6.0576096 6.0907943 6.0202838 18.168688 310.22884
62000 522936.57 0 6.1422565 6.1888677 6.124212 18.455336 -24.591697
63000 526642.55 0 6.2261061 6.2832608 6.2023277 18.711695 -130.32823
64000 514826.49 0 6.3032614 6.3628539 6.3184362 18.984552 195.43036
65000 529338.23 0 6.4152502 6.4482512 6.4241507 19.287652 -77.817059
66000 527425.07 0 6.5122194 6.5052947 6.5518104 19.569324 8.0143425
67000 525258.85 0 6.6292334 6.6417881 6.6438938 19.914915 152.1905
68000 527067.89 0 6.7569918 6.6951219 6.7357134 20.187827 -337.54654
69000 522395.33 0 6.8401085 6.7836633 6.8243746 20.448146 34.755329
70000 522200.34 0 6.9549662 6.8773008 6.9537894 20.786056 352.30283
71000 527550.11 0 7.0441399 6.9837133 7.0860791 21.113932 171.42143
72000 529564.22 0 7.1744229 7.0581688 7.1507041 21.383296 269.04569
73000 524175.53 0 7.248828 7.1693905 7.2974868 21.715705 -84.993601
74000 528604.1 0 7.3358903 7.2983204 7.390523 22.024734 -6.8495991
75000 519136.15 0 7.445248 7.4224403 7.4690469 22.336735 250.23521
76000 518470.58 0 7.5747768 7.5354904 7.5612252 22.671492 274.53956
77000 518459.51 0 7.6660567 7.6557812 7.7020797 23.023918 430.07722
78000 516646.23 0 7.7596088 7.7130901 7.7896654 23.262364 536.21298
79000 517511.57 0 7.9021784 7.82098 7.8840028 23.607161 193.80468
80000 520654.84 0 7.991107 7.8932454 8.0049184 23.889271 -6.0066355
81000 522331.74 0 8.0616391 7.9990606 8.0954141 24.156114 47.271954
82000 521540.3 0 8.1268306 8.0763829 8.1861513 24.389365 36.265762
83000 529154.07 0 8.2537975 8.1854268 8.2745822 24.713807 113.94154
84000 525977.29 0 8.2999431 8.26591 8.2970498 24.862903 -72.444836
85000 520505.41 0 8.3872349 8.3551374 8.4251458 25.167518 -346.6703
86000 516334.67 0 8.4947842 8.4504822 8.5238751 25.469142 -3.8332672
87000 524745.34 0 8.5405071 8.5348571 8.6344387 25.709803 -149.22382
88000 521384.87 0 8.5798155 8.6260785 8.7133565 25.919251 22.009599
89000 519680.71 0 8.6657392 8.6857605 8.8319304 26.18343 -180.94487
90000 522482.4 0 8.7310324 8.7844751 8.9636862 26.479194 -102.50361
91000 527450.69 0 8.8250902 8.8445728 9.0456076 26.715271 325.68024
92000 519060.77 0 8.9054775 8.9412744 9.1259074 26.972659 130.73028
93000 518170.14 0 9.0378587 9.0315875 9.2346184 27.304065 -111.68498
94000 531639.53 0 9.1268874 9.0952299 9.3437063 27.565824 -26.423328
95000 519776.1 0 9.2332576 9.1903006 9.4516001 27.875158 -113.46356
96000 527082.72 0 9.2993234 9.2533436 9.534409 28.087076 -46.720611
97000 526965.16 0 9.3485677 9.3197496 9.6631942 28.331512 159.18386
98000 529790.04 0 9.4759113 9.5177629 9.783846 28.77752 343.32872
99000 520964.82 0 9.6488022 9.6573355 9.882432 29.18857 -257.85576
100000 520863.58 0 9.7452168 9.7659565 9.9878877 29.499061 -108.52324
101000 526760.86 0 9.8073751 9.8508213 10.127532 29.785728 120.22249
102000 519249.89 0 9.9315855 9.9767409 10.221605 30.129931 -176.50647
103000 525003.9 0 10.023982 10.062451 10.315002 30.401435 422.1401
104000 519112.73 0 10.086117 10.136879 10.415222 30.638218 -147.66505
105000 517898.24 0 10.180438 10.240942 10.525346 30.946725 158.63054
106000 528046.35 0 10.258163 10.41411 10.601663 31.273936 -128.04669
107000 527105.8 0 10.364015 10.485036 10.795177 31.644228 183.82165
108000 522024.28 0 10.450786 10.544065 10.902961 31.897812 -39.692553
109000 519497.83 0 10.556206 10.61633 11.046222 32.218758 173.75988
110000 521070.8 0 10.64856 10.745382 11.071387 32.465329 -128.45389
111000 525657.64 0 10.830485 10.852954 11.188295 32.871734 -214.60249
112000 519426.33 0 10.987769 10.97575 11.26012 33.223639 292.35901
113000 526472.45 0 11.029941 11.086376 11.418772 33.535089 189.69245
114000 520070.28 0 11.107229 11.183295 11.454757 33.745281 -40.433571
115000 525812.59 0 11.153992 11.305378 11.537521 33.99689 -106.38733
116000 524464.26 0 11.256779 11.413082 11.633295 34.303156 -159.59643
117000 519838.94 0 11.344413 11.480104 11.706366 34.530883 -2.0346135
118000 524075.83 0 11.441416 11.597533 11.783056 34.822005 -350.05313
119000 533816.71 0 11.52766 11.681986 11.917713 35.127359 -521.58975
120000 524509.31 0 11.63865 11.792667 12.080379 35.511696 273.09647
Loop time of 39.6359 on 1 procs for 120000 steps with 4096 atoms
Performance: 2615.809 tau/day, 3027.557 timesteps/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 | 0 | 0 | 0 | 0.0 | 0.00
Neigh | 0.0059817 | 0.0059817 | 0.0059817 | 0.0 | 0.02
Comm | 0.039473 | 0.039473 | 0.039473 | 0.0 | 0.10
Output | 0.0063653 | 0.0063653 | 0.0063653 | 0.0 | 0.02
Modify | 38.085 | 38.085 | 38.085 | 0.0 | 96.09
Other | | 1.499 | | | 3.78
Nlocal: 4096.00 ave 4096 max 4096 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 0.00000 ave 0 max 0 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 0.00000 ave 0 max 0 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 0
Ave neighs/atom = 0.0000000
Neighbor list builds = 992
Dangerous builds = 0
Total wall time: 0:00:55

View File

@ -1,14 +1,13 @@
# 2D overdamped active brownian particle dynamics (ABP)
# with WCA potential
variable gamma_t equal 1.0
variable gamma_r equal 1.0
variable D_t equal 1.0
variable D_r equal 3.0
variable gamma_t string 1.0
variable gamma_r string 1.0
variable temp string 1.0
variable seed equal 1974019
variable fp equal 4.0
variable fp string 4.0
variable params string ${gamma_t}_${gamma_r}_${D_t}_${D_r}_${fp}
variable params string ${temp}_${gamma_t}_${gamma_r}_${fp}
log log_WCA_${params}_2d.lammps.log
@ -39,7 +38,7 @@ pair_modify shift yes
# overdamped brownian dynamics time-step
fix step all brownian/sphere ${gamma_t} ${gamma_r} ${D_t} ${D_r} ${seed} dipole
fix step all brownian/sphere ${temp} ${seed} gamma_t ${gamma_t} gamma_r ${gamma_r}
# self-propulsion force along the dipole direction
fix activity all propel/self dipole ${fp}
fix 2 all enforce2d

View File

@ -1,13 +1,12 @@
# 3D overdamped active brownian dynamics with no interactions
variable gamma_t equal 1.0
variable gamma_r equal 1.0
variable D_t equal 1.0
variable D_r equal 3.0
variable gamma_t string 3.0
variable gamma_r string 1.0
variable temp string 1.0
variable seed equal 1974019
variable fp equal 4.0
variable fp string 4.0
variable params string ${gamma_t}_${gamma_r}_${D_t}_${D_r}_${fp}
variable params string ${temp}_${gamma_t}_${gamma_r}_${fp}
log log_ideal_${params}_3d.lammps.log
@ -28,7 +27,7 @@ velocity all create 1.0 1 loop geom
pair_style none
# overdamped brownian dynamics time-step
fix step all brownian/sphere ${gamma_t} ${gamma_r} ${D_t} ${D_r} ${seed} dipole
fix step all brownian/sphere ${temp} ${seed} gamma_t ${gamma_t} gamma_r ${gamma_r}
# self-propulsion force along the dipole direction
fix activity all propel/self dipole ${fp}
@ -47,7 +46,8 @@ reset_timestep 0
# MSD to demonstrate expected diffusive behaviour for ideal active
# brownian motion, which is
#
# MSD = (2*d*D_t + 2*fp**2/(gamma_t**2*(d-1)*D_r))*t
# MSD = (2*d*kb*T/gamma_t + 2*fp**2*gamma_r/(kb*T*gamma_t**2*(d-1)))*t
# + 2*fp**2*gamma_r**2/(gamma_t**2*(d-1)**2*(kb*T)**2)*(e^(-(d-1)*t*kb*T/gamma_r)-1)
#
# with d being simulation dimension
compute msd all msd

View File

@ -1,65 +0,0 @@
# 3d overdamped brownian dynamics
variable gamma_t equal 1.0
variable D_t equal 1.0
variable seed equal 1974019
variable params string ${gamma_t}_${D_t}
log log_${params}.lammps.log
units lj
dimension 3
newton off
lattice sc 0.4
region box block -8 8 -8 8 -8 8
create_box 1 box
create_atoms 1 box
mass * 1.0
velocity all create 1.0 1 loop geom
neighbor 1.0 bin
neigh_modify every 1 delay 1 check yes
pair_style none
# simple overdamped brownian dynamics time-stepper
fix step all brownian ${gamma_t} ${D_t} ${seed}
# turn on the virial contribution from the noise
# (this is the ideal gas pressure, but it is really noisy
# for small systems)
fix_modify step virial yes
compute press all pressure NULL virial
thermo_style custom step temp epair c_press
#equilibration
timestep 0.0000000001
thermo 50001
run 50000
reset_timestep 0
#initialisation for the main run
# MSD
compute msd all msd
thermo_style custom step temp epair c_msd[*] c_press
timestep 0.00001
thermo 1000
# main run
run 120000

View File

@ -1,246 +0,0 @@
units lj
dimension 3
newton off
lattice sc 0.4
Lattice spacing in x,y,z = 1.3572088 1.3572088 1.3572088
region box block -8 8 -8 8 -8 8
create_box 1 box
Created orthogonal box = (-10.857670 -10.857670 -10.857670) to (10.857670 10.857670 10.857670)
1 by 1 by 1 MPI processor grid
create_atoms 1 box
Created 4096 atoms
create_atoms CPU = 0.002 seconds
mass * 1.0
velocity all create 1.0 1 loop geom
neighbor 1.0 bin
neigh_modify every 1 delay 1 check yes
pair_style none
# simple overdamped brownian dynamics time-stepper
fix step all brownian ${gamma_t} ${D_t} ${seed}
fix step all brownian 1 ${D_t} ${seed}
fix step all brownian 1 1 ${seed}
fix step all brownian 1 1 1974019
# turn on the virial contribution from the noise
# (this is the ideal gas pressure, but it is really noisy
# for small systems)
fix_modify step virial yes
compute press all pressure NULL virial
thermo_style custom step temp epair c_press
#equilibration
timestep 0.0000000001
thermo 50001
run 50000
WARNING: No pairwise cutoff or binsize set. Atom sorting therefore disabled. (src/atom.cpp:2118)
WARNING: Communication cutoff is 0.0. No ghost atoms will be generated. Atoms may get lost. (src/comm_brick.cpp:167)
Per MPI rank memory allocation (min/avg/max) = 2.319 | 2.319 | 2.319 Mbytes
Step Temp E_pair c_press
0 1 0 1500.0667
50000 2.0204192e+10 0 809.28898
Loop time of 8.36695 on 1 procs for 50000 steps with 4096 atoms
Performance: 0.052 tau/day, 5975.895 timesteps/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 | 0 | 0 | 0 | 0.0 | 0.00
Neigh | 0 | 0 | 0 | 0.0 | 0.00
Comm | 0.081773 | 0.081773 | 0.081773 | 0.0 | 0.98
Output | 3.0396e-05 | 3.0396e-05 | 3.0396e-05 | 0.0 | 0.00
Modify | 7.8039 | 7.8039 | 7.8039 | 0.0 | 93.27
Other | | 0.4812 | | | 5.75
Nlocal: 4096.00 ave 4096 max 4096 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 817.000 ave 817 max 817 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 0.00000 ave 0 max 0 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 0
Ave neighs/atom = 0.0000000
Neighbor list builds = 0
Dangerous builds = 0
reset_timestep 0
#initialisation for the main run
# MSD
compute msd all msd
thermo_style custom step temp epair c_msd[*] c_press
timestep 0.00001
thermo 1000
# main run
run 120000
WARNING: Communication cutoff is 0.0. No ghost atoms will be generated. Atoms may get lost. (src/comm_brick.cpp:167)
Per MPI rank memory allocation (min/avg/max) = 2.694 | 2.694 | 2.694 Mbytes
Step Temp E_pair c_msd[1] c_msd[2] c_msd[3] c_msd[4] c_press
0 2.0204192e+10 0 0 0 0 0 3.053092
1000 199589.87 0 0.020515986 0.019445659 0.020084014 0.060045658 -10.855191
2000 202255.37 0 0.039423387 0.039839097 0.041243768 0.12050625 -7.8484884
3000 197932.37 0 0.058057959 0.060232381 0.061205106 0.17949545 14.441358
4000 201354.42 0 0.08020915 0.080140903 0.081351793 0.24170185 -2.7088264
5000 201599.34 0 0.10065125 0.099423954 0.10004367 0.30011888 10.000367
6000 198355.3 0 0.12039302 0.12228165 0.12136204 0.36403671 -7.7331104
7000 201842.08 0 0.13901495 0.14401324 0.14070032 0.42372851 1.049759
8000 200224.96 0 0.16063188 0.16389028 0.16409878 0.48862093 14.748306
9000 198468.62 0 0.18050666 0.18555949 0.18441359 0.55047975 -7.2751841
10000 197958.21 0 0.20229316 0.20438608 0.20471694 0.61139618 -8.8169492
11000 200852.8 0 0.22244961 0.22388152 0.22417791 0.67050904 -0.56323783
12000 200135.84 0 0.24070342 0.23964066 0.24829459 0.72863867 -20.246433
13000 199160.33 0 0.26021951 0.2581362 0.27210493 0.79046065 6.2400743
14000 200016.58 0 0.28005738 0.27429833 0.29107673 0.84543244 9.8390268
15000 200805.25 0 0.30110658 0.29756813 0.31002936 0.90870407 -9.7474978
16000 201221.83 0 0.31982855 0.31758368 0.33140494 0.96881716 -11.937757
17000 199690.18 0 0.33896659 0.33908504 0.35143307 1.0294847 -11.627541
18000 197165.97 0 0.35589324 0.3605585 0.37062404 1.0870758 17.045279
19000 202921.66 0 0.36968243 0.3825335 0.38579438 1.1380103 -3.2942099
20000 200415.26 0 0.39189833 0.39811842 0.40650662 1.1965234 -0.55679809
21000 198882.79 0 0.41394816 0.42495341 0.42660986 1.2655114 0.26572202
22000 199352.13 0 0.43200564 0.44555233 0.44842807 1.325986 5.9839474
23000 200565.11 0 0.45248704 0.46736174 0.4633773 1.3832261 0.51141727
24000 197632.73 0 0.47648878 0.49070755 0.48561349 1.4528098 11.301781
25000 203284.74 0 0.50103025 0.5117464 0.50162451 1.5144012 4.0966379
26000 200458.42 0 0.52111051 0.53245594 0.52193205 1.5754985 -9.2090189
27000 197553.02 0 0.54097922 0.553215 0.5440757 1.6382699 -6.0708365
28000 200874.32 0 0.55707209 0.57015852 0.56334199 1.6905726 -17.349073
29000 199494.43 0 0.57734934 0.59276209 0.58014344 1.7502549 -7.0407471
30000 199898.09 0 0.60161157 0.6156313 0.60516078 1.8224036 -1.3770813
31000 200867.7 0 0.62383361 0.64008503 0.6272796 1.8911982 -8.3200079
32000 198811.59 0 0.64361889 0.66089102 0.64987533 1.9543852 -0.21133799
33000 198224.12 0 0.66695348 0.67669734 0.67749939 2.0211502 0.87075722
34000 202553.2 0 0.69470773 0.69930784 0.69600623 2.0900218 1.7428524
35000 199227.86 0 0.71973625 0.72255845 0.71991572 2.1622104 2.4381317
36000 200719.05 0 0.73772312 0.74086704 0.74438632 2.2229765 -8.8184183
37000 198054.45 0 0.75901548 0.76107029 0.76677002 2.2868558 9.0699905
38000 198496.92 0 0.77679013 0.78067416 0.78055585 2.3380201 -8.8374756
39000 199224.19 0 0.79689891 0.8074183 0.79624042 2.4005576 -2.3099574
40000 199514.11 0 0.81493522 0.8271518 0.81729253 2.4593796 8.5411105
41000 199926.55 0 0.82918834 0.84950171 0.83531381 2.5140039 -6.8276624
42000 201659.21 0 0.84991161 0.87416096 0.86612093 2.5901935 -11.006396
43000 201502.51 0 0.87967597 0.89570393 0.88920119 2.6645811 9.4305203
44000 194956.27 0 0.9022655 0.91604833 0.90539218 2.723706 1.7636771
45000 201853.02 0 0.92302957 0.93661741 0.93225051 2.7918975 9.6483674
46000 200572.92 0 0.94062662 0.94933155 0.94953376 2.8394919 1.0882497
47000 202008.49 0 0.95397524 0.97655157 0.96534559 2.8958724 -7.9450141
48000 199748.89 0 0.97441115 0.99687233 0.98429144 2.9555749 5.0525854
49000 203008.7 0 0.99757948 1.0095536 0.99836015 3.0054932 28.410878
50000 198810.18 0 1.0182591 1.0287254 1.0110652 3.0580497 22.596989
51000 201716 0 1.0414747 1.0448379 1.0361279 3.1224404 -0.3397634
52000 200682.63 0 1.0640391 1.0597767 1.0596255 3.1834413 8.9163814
53000 201068.23 0 1.0804112 1.0740541 1.077586 3.2320513 8.9631815
54000 203379.33 0 1.0965663 1.0832317 1.0981473 3.2779453 -7.8020084
55000 197117.81 0 1.1145489 1.1008769 1.1259188 3.3413446 13.723633
56000 201100.37 0 1.1420502 1.1311309 1.1425839 3.415765 10.39045
57000 199911.61 0 1.1641357 1.1461183 1.1598876 3.4701416 -1.5384143
58000 202180.4 0 1.1787793 1.1703422 1.1794284 3.5285498 4.9552552
59000 202359.35 0 1.2017068 1.1846051 1.1912556 3.5775675 14.774737
60000 196182.35 0 1.2297664 1.2087508 1.2116928 3.65021 12.484104
61000 201858.45 0 1.2505094 1.2255583 1.2330327 3.7091004 3.6962199
62000 198313.02 0 1.2756755 1.2437434 1.2514738 3.7708927 -6.5600779
63000 198423.1 0 1.2998594 1.262369 1.2656961 3.8279245 3.1919497
64000 202601.56 0 1.3177969 1.2812961 1.2841642 3.8832572 7.1735962
65000 201270.73 0 1.3353533 1.3006911 1.306668 3.9427124 3.7612957
66000 199480.32 0 1.3502663 1.3165416 1.3300249 3.9968327 -8.0484056
67000 202829.47 0 1.3628924 1.3369328 1.339246 4.0390712 -2.962791
68000 200269.53 0 1.3901352 1.3600404 1.3528283 4.1030039 29.395886
69000 201514.31 0 1.4135333 1.3834796 1.3719116 4.1689245 9.5358653
70000 198898.14 0 1.4323413 1.4056025 1.4015088 4.2394526 13.713608
71000 198446.83 0 1.4424061 1.4229225 1.4231698 4.2884984 9.5266069
72000 199550.94 0 1.4730822 1.4438093 1.4436864 4.360578 5.4060926
73000 201536.57 0 1.4860349 1.4557531 1.4673417 4.4091297 2.7527606
74000 201688.68 0 1.5078921 1.4770318 1.4889958 4.4739197 -2.5507167
75000 203168.01 0 1.5264946 1.4942757 1.5095341 4.5303045 13.955087
76000 198782.86 0 1.5363851 1.5145529 1.5306446 4.5815826 1.6748995
77000 199306.04 0 1.55336 1.5308045 1.5501462 4.6343107 1.4463705
78000 199420.52 0 1.5679804 1.5445387 1.5765555 4.6890745 -15.926362
79000 198711.33 0 1.5818761 1.5651424 1.5966885 4.743707 -23.662716
80000 202734.35 0 1.6045976 1.5878467 1.6155179 4.8079623 1.4177771
81000 199953.12 0 1.6266918 1.6125491 1.6370893 4.8763302 14.40188
82000 201254.27 0 1.6418366 1.6362867 1.6497081 4.9278313 -4.3503
83000 200442.35 0 1.6671772 1.6544269 1.6638838 4.9854878 -5.5569751
84000 201442.09 0 1.6772029 1.6819435 1.6824211 5.0415676 -17.634517
85000 202012.75 0 1.7026782 1.7059915 1.7079961 5.1166659 8.8311485
86000 198613.4 0 1.725679 1.7251262 1.7235885 5.1743936 10.070509
87000 198650.79 0 1.748013 1.7447674 1.7397963 5.2325767 7.3326989
88000 199753.54 0 1.7793864 1.7677848 1.7548586 5.3020298 -3.8460869
89000 200851.56 0 1.7992856 1.7843281 1.7671516 5.3507653 10.274664
90000 202029.24 0 1.8178051 1.8010651 1.7886511 5.4075213 1.1705818
91000 200963.98 0 1.8425785 1.8123748 1.8079693 5.4629226 -8.0390883
92000 200443.4 0 1.8743616 1.8355736 1.8340515 5.5439867 -12.186363
93000 197974.1 0 1.8911764 1.8440063 1.8442582 5.579441 10.189145
94000 201285.41 0 1.9040394 1.8567044 1.8663386 5.6270824 7.8537148
95000 198472.81 0 1.9268236 1.8638624 1.8855767 5.6762627 11.556616
96000 198171.93 0 1.9378011 1.8811168 1.9024245 5.7213424 -7.3493903
97000 200055.5 0 1.9539002 1.9031647 1.9221125 5.7791774 -7.2823252
98000 200350.77 0 1.973424 1.9255707 1.9393139 5.8383087 2.3526328
99000 198923.17 0 1.9946733 1.9416292 1.9616759 5.8979785 -8.6362233
100000 196205.31 0 2.015688 1.967164 1.9801696 5.9630216 1.5261152
101000 198842.45 0 2.0402634 1.9858628 1.9939889 6.0201151 6.8070808
102000 199060.56 0 2.0583018 2.0040652 2.0225396 6.0849067 5.4626963
103000 204892.64 0 2.0788003 2.0245826 2.0405395 6.1439224 -19.988675
104000 198709.07 0 2.0990457 2.0519007 2.0571079 6.2080544 -21.365135
105000 198916.99 0 2.1089408 2.0758832 2.0899796 6.2748037 4.3696238
106000 202191.68 0 2.1172909 2.0923523 2.1208274 6.3304706 8.2072292
107000 202428.89 0 2.1387532 2.114944 2.1418816 6.3955788 4.1099611
108000 197690.67 0 2.1620575 2.136726 2.1703555 6.469139 5.7183695
109000 200098.73 0 2.1814376 2.1464455 2.1828177 6.5107008 7.4366333
110000 197901.18 0 2.1955124 2.1764141 2.1994286 6.5713551 -6.4288954
111000 199478.54 0 2.2167884 2.1900638 2.2140739 6.6209261 22.379137
112000 198391.65 0 2.249996 2.2100316 2.2309406 6.6909682 -20.040892
113000 200542.42 0 2.2634106 2.2313768 2.2610988 6.7558862 0.2953844
114000 202117.15 0 2.28441 2.2517036 2.2787302 6.8148438 16.75177
115000 200004.06 0 2.2957226 2.2730837 2.2901883 6.8589947 -4.3125612
116000 200648.11 0 2.3184059 2.2934521 2.3257075 6.9375656 5.7210624
117000 198600.57 0 2.3413891 2.3102468 2.3511234 7.0027593 -2.9987639
118000 199817.34 0 2.3732051 2.3347741 2.3601752 7.0681544 -3.3658539
119000 200556.96 0 2.3873448 2.3595646 2.3774937 7.1244031 20.860601
120000 200997.81 0 2.4097258 2.3736031 2.3871081 7.170437 -5.3623487
Loop time of 20.5037 on 1 procs for 120000 steps with 4096 atoms
Performance: 5056.640 tau/day, 5852.593 timesteps/s
99.9% CPU use with 1 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 0 | 0 | 0 | 0.0 | 0.00
Neigh | 0.0012425 | 0.0012425 | 0.0012425 | 0.0 | 0.01
Comm | 0.015074 | 0.015074 | 0.015074 | 0.0 | 0.07
Output | 0.006156 | 0.006156 | 0.006156 | 0.0 | 0.03
Modify | 19.243 | 19.243 | 19.243 | 0.0 | 93.85
Other | | 1.238 | | | 6.04
Nlocal: 4096.00 ave 4096 max 4096 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 0.00000 ave 0 max 0 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 0.00000 ave 0 max 0 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 0
Ave neighs/atom = 0.0000000
Neighbor list builds = 205
Dangerous builds = 0
Total wall time: 0:00:28

View File

@ -38,69 +38,24 @@ using namespace FixConst;
/* ---------------------------------------------------------------------- */
FixBrownian::FixBrownian(LAMMPS *lmp, int narg, char **arg) :
Fix(lmp, narg, arg)
FixBrownianBase(lmp, narg, arg)
{
virial_flag = 1;
time_integrate = 1;
if (narg != 6 && narg != 8)
error->all(FLERR,"Illegal fix brownian command.");
gamma_t = utils::numeric(FLERR,arg[3],false,lmp);
if (gamma_t <= 0.0)
error->all(FLERR,"Fix brownian viscous drag "
"coefficient must be > 0.");
diff_t = utils::numeric(FLERR,arg[4],false,lmp);
if (diff_t <= 0.0)
error->all(FLERR,"Fix brownian diffusion "
"coefficient must be > 0.");
seed = utils::inumeric(FLERR,arg[5],false,lmp);
if (seed <= 0) error->all(FLERR,"Fix brownian seed must be > 0.");
noise_flag = 1;
gaussian_noise_flag = 0;
if (narg == 8) {
if (strcmp(arg[6],"rng") == 0) {
if (strcmp(arg[7],"uniform") == 0) {
noise_flag = 1;
} else if (strcmp(arg[7],"gaussian") == 0) {
noise_flag = 1;
gaussian_noise_flag = 1;
} else if (strcmp(arg[7],"none") == 0) {
noise_flag = 0;
} else {
if (dipole_flag || gamma_t_eigen_flag || gamma_r_eigen_flag || gamma_r_flag) {
error->all(FLERR,"Illegal fix brownian command.");
}
} else {
if (!gamma_t_flag) {
error->all(FLERR,"Illegal fix brownian command.");
}
}
// initialize Marsaglia RNG with processor-unique seed
random = new RanMars(lmp,seed + comm->me);
}
/* ---------------------------------------------------------------------- */
int FixBrownian::setmask()
{
int mask = 0;
mask |= INITIAL_INTEGRATE;
mask |= POST_FORCE;
return mask;
}
/* ---------------------------------------------------------------------- */
FixBrownian::~FixBrownian()
{
delete random;
}
@ -110,108 +65,98 @@ FixBrownian::~FixBrownian()
void FixBrownian::init()
{
g1 = force->ftm2v/gamma_t;
if (noise_flag == 0) {
g2 = 0;
rng_func = &RanMars::zero_rng;
} else if (gaussian_noise_flag == 1) {
g2 = gamma_t*sqrt(2 * diff_t)/force->ftm2v;
rng_func = &RanMars::gaussian;
} else {
g2 = gamma_t*sqrt( 24 * diff_t)/force->ftm2v;
rng_func = &RanMars::uniform_middle;
}
FixBrownianBase::init();
dt = update->dt;
sqrtdt = sqrt(dt);
}
g1 /= gamma_t;
g2 *= sqrt(gamma_t);
void FixBrownian::setup(int vflag)
{
post_force(vflag);
}
/* ---------------------------------------------------------------------- */
void FixBrownian::initial_integrate(int /* vflag */)
void FixBrownian::initial_integrate(int /*vflag */)
{
if (domain->dimension == 2) {
if (!noise_flag) {
initial_integrate_templated<0,0,1>();
} else if (gaussian_noise_flag) {
initial_integrate_templated<0,1,1>();
} else {
initial_integrate_templated<1,0,1>();
}
} else {
if (!noise_flag) {
initial_integrate_templated<0,0,0>();
} else if (gaussian_noise_flag) {
initial_integrate_templated<0,1,0>();
} else {
initial_integrate_templated<1,0,0>();
}
}
return;
}
/* ---------------------------------------------------------------------- */
template < int Tp_UNIFORM, int Tp_GAUSS, int Tp_2D >
void FixBrownian::initial_integrate_templated()
{
double **x = atom->x;
double **v = atom->v;
double **f = atom->f;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double dx,dy,dz;
if (igroup == atom->firstgroup) nlocal = atom->nfirst;
double dx,dy,dz;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
if (Tp_2D) {
dz = 0;
if (Tp_UNIFORM) {
dx = dt * (g1 * f[i][0] + g2 * (random->uniform()-0.5));
dy = dt * (g1 * f[i][1] + g2 * (random->uniform()-0.5));
} else if (Tp_GAUSS) {
dx = dt * (g1 * f[i][0] + g2 * random->gaussian());
dy = dt * (g1 * f[i][1] + g2 * random->gaussian());
} else {
dx = dt * g1 * f[i][0];
dy = dt * g1 * f[i][1];
}
} else {
if (Tp_UNIFORM) {
dx = dt * (g1 * f[i][0] + g2 * (random->uniform()-0.5));
dy = dt * (g1 * f[i][1] + g2 * (random->uniform()-0.5));
dz = dt * (g1 * f[i][2] + g2 * (random->uniform()-0.5));
} else if (Tp_GAUSS) {
dx = dt * (g1 * f[i][0] + g2 * random->gaussian());
dy = dt * (g1 * f[i][1] + g2 * random->gaussian());
dz = dt * (g1 * f[i][2] + g2 * random->gaussian());
} else {
dx = dt * g1 * f[i][0];
dy = dt * g1 * f[i][1];
dz = dt * g1 * f[i][2];
}
}
x[i][0] += dx;
v[i][0] = dx/dt;
dy = dt * g1 * f[i][1];
x[i][1] += dy;
v[i][1] = dy/dt;
dz = dt * g1 * f[i][2];
x[i][2] += dz;
v[i][2] = dz/dt;
}
}
return;
}
/* ----------------------------------------------------------------------
apply random force, stolen from MISC/fix_efield.cpp
------------------------------------------------------------------------- */
void FixBrownian::post_force(int vflag)
{
double **f = atom->f;
double **x = atom->x;
int *mask = atom->mask;
imageint *image = atom->image;
int nlocal = atom->nlocal;
// virial setup
if (vflag) v_setup(vflag);
else evflag = 0;
double fx,fy,fz;
double v[6];
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
fx = g2 * (random->*rng_func)()/sqrtdt;
fy = g2 * (random->*rng_func)()/sqrtdt;
fz = g2 * (random->*rng_func)()/sqrtdt;
f[i][0] += fx;
f[i][1] += fy;
f[i][2] += fz;
if (evflag) {
v[0] = fx*x[i][0];
v[1] = fy*x[i][1];
v[2] = fz*x[i][2];
v[3] = fx*x[i][1];
v[4] = fx*x[i][2];
v[5] = fy*x[i][2];
v_tally(i, v);
}
}
}
void FixBrownian::reset_dt()
{
dt = update->dt;
sqrtdt = sqrt(dt);
}

View File

@ -20,38 +20,22 @@ FixStyle(brownian,FixBrownian)
#ifndef LMP_FIX_BROWNIAN_H
#define LMP_FIX_BROWNIAN_H
#include "fix.h"
#include "fix_brownian_base.h"
namespace LAMMPS_NS {
class FixBrownian : public Fix {
class FixBrownian : public FixBrownianBase {
public:
FixBrownian(class LAMMPS *, int, char **);
virtual ~FixBrownian();
void init();
void initial_integrate(int);
void setup(int);
void post_force(int);
int setmask();
void reset_dt();
private:
int seed; // RNG seed
double dt, sqrtdt; // time step interval and its sqrt
template < int Tp_UNIFORM, int Tp_GAUSS, int Tp_2D >
void initial_integrate_templated();
double gamma_t; // translational damping param
double diff_t; // translational diffusion coeff
double g1,g2; // prefactors in time stepping
int noise_flag; // 0/1 for noise off/on
int gaussian_noise_flag; // 0/1 for uniform/gaussian noise
protected:
class RanMars *random;
typedef double (RanMars::*rng_member)();
rng_member rng_func; // placeholder for RNG function
};
}

View File

@ -36,104 +36,34 @@
using namespace LAMMPS_NS;
using namespace FixConst;
#define SMALL 1e-14
enum{NODIPOLE,DIPOLE};
/* ---------------------------------------------------------------------- */
FixBrownianAsphere::FixBrownianAsphere(LAMMPS *lmp, int narg, char **arg) :
Fix(lmp, narg, arg)
FixBrownianBase(lmp, narg, arg)
{
virial_flag = 1;
time_integrate = 1;
dipole_flag = NODIPOLE;
if (narg > 11 || narg < 8 )
error->all(FLERR,"Illegal fix brownian/asphere command.");
if (!atom->sphere_flag)
error->all(FLERR,"Fix brownian/asphere requires atom style sphere");
gamma_t = utils::numeric(FLERR,arg[3],false,lmp);
if (gamma_t <= 0.0)
error->all(FLERR,"Fix brownian/asphere translational viscous drag "
"coefficient must be > 0.");
gamma_r = utils::numeric(FLERR,arg[4],false,lmp);
if (gamma_t <= 0.0)
error->all(FLERR,"Fix brownian/asphere rotational viscous drag "
"coefficient must be > 0.");
diff_t = utils::numeric(FLERR,arg[5],false,lmp);
if (diff_t <= 0.0)
error->all(FLERR,"Fix brownian/asphere translational diffusion "
"coefficient must be > 0.");
diff_r = utils::numeric(FLERR,arg[6],false,lmp);
if (diff_r <= 0.0)
error->all(FLERR,"Fix brownian/asphere rotational diffusion "
"coefficient must be > 0.");
seed = utils::inumeric(FLERR,arg[7],false,lmp);
if (seed <= 0) error->all(FLERR,"Fix brownian/asphere seed must be > 0.");
noise_flag = 1;
gaussian_noise_flag = 0;
int iarg = 8;
while (iarg < narg) {
if (strcmp(arg[iarg],"rng") == 0) {
if (narg == iarg + 1) {
error->all(FLERR,"Illegal fix/brownian/asphere command.");
}
if (strcmp(arg[iarg + 1],"uniform") == 0) {
noise_flag = 1;
} else if (strcmp(arg[iarg + 1],"gaussian") == 0) {
noise_flag = 1;
gaussian_noise_flag = 1;
} else if (strcmp(arg[iarg + 1],"none") == 0) {
noise_flag = 0;
} else {
error->all(FLERR,"Illegal fix/brownian/asphere command.");
}
iarg = iarg + 2;
} else if (strcmp(arg[iarg],"dipole") == 0) {
dipole_flag = DIPOLE;
iarg = iarg + 1;
} else {
error->all(FLERR,"Illegal fix/brownian/asphere command.");
}
if (!gamma_t_eigen_flag || !gamma_r_eigen_flag) {
error->all(FLERR,"Illegal fix brownian command.");
}
if (dipole_flag == DIPOLE && !atom->mu_flag)
if (gamma_t_flag || gamma_r_flag) {
error->all(FLERR,"Illegal fix brownian command.");
}
if (dipole_flag && !atom->mu_flag)
error->all(FLERR,"Fix brownian/asphere dipole requires atom attribute mu");
// initialize Marsaglia RNG with processor-unique seed
random = new RanMars(lmp,seed + comm->me);
}
/* ---------------------------------------------------------------------- */
int FixBrownianAsphere::setmask()
{
int mask = 0;
mask |= INITIAL_INTEGRATE;
mask |= POST_FORCE;
return mask;
}
/* ---------------------------------------------------------------------- */
FixBrownianAsphere::~FixBrownianAsphere()
{
delete random;
}
@ -162,9 +92,8 @@ void FixBrownianAsphere::init()
error->one(FLERR,"Fix brownian/asphere requires extended particles");
if (dipole_flag == DIPOLE) {
if (dipole_flag) {
double f_act[3] = { 1.0, 0.0, 0.0 };
double f_rot[3];
double *quat;
int *ellipsoid = atom->ellipsoid;
@ -178,7 +107,7 @@ void FixBrownianAsphere::init()
if (mask[i] & groupbit) {
quat = bonus[ellipsoid[i]].quat;
MathExtra::quat_to_mat( quat, Q );
MathExtra::matvec( Q, f_act, f_rot );
MathExtra::matvec( Q, dipole_body, f_rot );
mu[i][0] = f_rot[0];
mu[i][1] = f_rot[1];
@ -188,205 +117,243 @@ void FixBrownianAsphere::init()
}
}
g1 = force->ftm2v/gamma_t;
g3 = force->ftm2v/gamma_r;
if (noise_flag == 0) {
g2 = 0;
g4 = 0;
rng_func = &RanMars::zero_rng;
} else if (gaussian_noise_flag == 1) {
g2 = gamma_t*sqrt(2 * diff_t)/force->ftm2v;
g4 = gamma_r*sqrt(2 * diff_r)/force->ftm2v;
rng_func = &RanMars::gaussian;
} else {
g2 = gamma_t*sqrt( 24 * diff_t)/force->ftm2v;
g4 = gamma_r*sqrt( 24 * diff_r )/force->ftm2v;
rng_func = &RanMars::uniform_middle;
}
FixBrownianBase::init();
dt = update->dt;
sqrtdt = sqrt(dt);
}
void FixBrownianAsphere::setup(int vflag)
{
post_force(vflag);
}
/* ---------------------------------------------------------------------- */
void FixBrownianAsphere::initial_integrate(int /*vflag */)
{
void FixBrownianAsphere::initial_integrate(int /* vflag */)
if (domain->dimension == 2) {
if (dipole_flag) {
if (!noise_flag) {
initial_integrate_templated<0,0,1,1>();
} else if (gaussian_noise_flag) {
initial_integrate_templated<0,1,1,1>();
} else {
initial_integrate_templated<1,0,1,1>();
}
} else {
if (!noise_flag) {
initial_integrate_templated<0,0,0,1>();
} else if (gaussian_noise_flag) {
initial_integrate_templated<0,1,0,1>();
} else {
initial_integrate_templated<1,0,0,1>();
}
}
} else {
if (dipole_flag) {
if (!noise_flag) {
initial_integrate_templated<0,0,1,0>();
} else if (gaussian_noise_flag) {
initial_integrate_templated<0,1,1,0>();
} else {
initial_integrate_templated<1,0,1,0>();
}
} else {
if (!noise_flag) {
initial_integrate_templated<0,0,0,0>();
} else if (gaussian_noise_flag) {
initial_integrate_templated<0,1,0,0>();
} else {
initial_integrate_templated<1,0,0,0>();
}
}
}
return;
}
/* ---------------------------------------------------------------------- */
template < int Tp_UNIFORM, int Tp_GAUSS, int Tp_DIPOLE, int Tp_2D >
void FixBrownianAsphere::initial_integrate_templated()
{
double **x = atom->x;
double **v = atom->v;
double **f = atom->f;
double **omega = atom->omega;
double **torque = atom->torque;
int *mask = atom->mask;
int nlocal = atom->nlocal;
if (igroup == atom->firstgroup) nlocal = atom->nfirst;
AtomVecEllipsoid::Bonus *bonus = avec->bonus;
int d3rot; // whether to compute angular momentum in xy plane
if (domain->dimension==2) {
d3rot = 0;
} else {
d3rot = 1;
}
double **mu = atom->mu;
double **torque = atom->torque;
if (dipole_flag == DIPOLE) {
// if dipole is being tracked, then update it along with
// quaternions accordingly along with angular velocity
double wq[4];
double qw[4];
double *quat;
int *ellipsoid = atom->ellipsoid;
AtomVecEllipsoid::Bonus *bonus = avec->bonus;
if (igroup == atom->firstgroup) nlocal = atom->nfirst;
// project dipole along x axis of quat
double f_act[3] = { 1.0, 0.0, 0.0 };
double f_rot[3];
double Q[3][3];
double **mu = atom->mu;
double rotationmatrix_transpose[3][3];
double tmp[3];
double dv[3];
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
update_x_and_omega(x[i],v[i],omega[i],f[i],torque[i],d3rot);
// update orientation first
quat = bonus[ellipsoid[i]].quat;
MathExtra::vecquat(omega[i],quat,wq);
MathExtra::quat_to_mat_trans( quat, rotationmatrix_transpose );
quat[0] = quat[0] + 0.5*dt*wq[0];
quat[1] = quat[1] + 0.5*dt*wq[1];
quat[2] = quat[2] + 0.5*dt*wq[2];
quat[3] = quat[3] + 0.5*dt*wq[3];
// tmp holds angular velocity in body frame
MathExtra::matvec(rotationmatrix_transpose,torque[i],tmp);
if (Tp_2D) {
tmp[0] = tmp[1] = 0.0;
if (Tp_UNIFORM) {
tmp[2] = g1*tmp[2]*gamma_r_inv[2] + gamma_r_invsqrt[2]*(random->uniform()-0.5)*g2;
} else if (Tp_GAUSS) {
tmp[2] = g1*tmp[2]*gamma_r_inv[2] + gamma_r_invsqrt[2]*random->gaussian()*g2;
} else {
tmp[2] = g1*tmp[2]*gamma_r_inv[2];
}
} else {
if (Tp_UNIFORM) {
tmp[0] = g1*tmp[0]*gamma_r_inv[0] + gamma_r_invsqrt[0]*(random->uniform()-0.5)*g2;
tmp[1] = g1*tmp[1]*gamma_r_inv[1] + gamma_r_invsqrt[1]*(random->uniform()-0.5)*g2;
tmp[2] = g1*tmp[2]*gamma_r_inv[2] + gamma_r_invsqrt[2]*(random->uniform()-0.5)*g2;
} else if (Tp_GAUSS) {
tmp[0] = g1*tmp[0]*gamma_r_inv[0] + gamma_r_invsqrt[0]*random->gaussian()*g2;
tmp[1] = g1*tmp[1]*gamma_r_inv[1] + gamma_r_invsqrt[1]*random->gaussian()*g2;
tmp[2] = g1*tmp[2]*gamma_r_inv[2] + gamma_r_invsqrt[2]*random->gaussian()*g2;
} else {
tmp[0] = g1*tmp[0]*gamma_r_inv[0];
tmp[1] = g1*tmp[1]*gamma_r_inv[1];
tmp[2] = g1*tmp[2]*gamma_r_inv[2];
}
}
// convert body frame angular velocity to quaternion
MathExtra::quatvec(quat,tmp,qw);
quat[0] = quat[0] + 0.5*dt*qw[0];
quat[1] = quat[1] + 0.5*dt*qw[1];
quat[2] = quat[2] + 0.5*dt*qw[2];
quat[3] = quat[3] + 0.5*dt*qw[3];
// normalisation introduces the stochastic drift term
// to recover the Boltzmann distribution for the case of conservative torques
MathExtra::qnormalize(quat);
MathExtra::quat_to_mat( quat, Q );
MathExtra::matvec( Q, f_act, f_rot );
// next, update centre of mass positions and velocities
// tmp now holds force in body frame
MathExtra::matvec(rotationmatrix_transpose,f[i],tmp);
// and then converts to gamma_t^{-1} * F (velocity) in body frame
if (Tp_2D) {
tmp[2] = 0.0;
if (Tp_UNIFORM) {
tmp[0] = g1*tmp[0]*gamma_t_inv[0]
+ gamma_t_invsqrt[0]*(random->uniform()-0.5)*g2;
tmp[1] = g1*tmp[1]*gamma_t_inv[1]
+ gamma_t_invsqrt[1]*(random->uniform()-0.5)*g2;
} else if (Tp_GAUSS) {
tmp[0] = g1*tmp[0]*gamma_t_inv[0]
+ gamma_t_invsqrt[0]*random->gaussian()*g2;
tmp[1] = g1*tmp[1]*gamma_t_inv[1]
+ gamma_t_invsqrt[1]*random->gaussian()*g2;
} else {
tmp[0] = g1*tmp[0]*gamma_t_inv[0];
tmp[1] = g1*tmp[1]*gamma_t_inv[1];
}
} else {
if (Tp_UNIFORM) {
tmp[0] = g1*tmp[0]*gamma_t_inv[0]
+ gamma_t_invsqrt[0]*(random->uniform()-0.5)*g2;
tmp[1] = g1*tmp[1]*gamma_t_inv[1]
+ gamma_t_invsqrt[1]*(random->uniform()-0.5)*g2;
tmp[2] = g1*tmp[2]*gamma_t_inv[2]
+ gamma_t_invsqrt[2]*(random->uniform()-0.5)*g2;
} else if (Tp_GAUSS) {
tmp[0] = g1*tmp[0]*gamma_t_inv[0]
+ gamma_t_invsqrt[0]*random->gaussian()*g2;
tmp[1] = g1*tmp[1]*gamma_t_inv[1]
+ gamma_t_invsqrt[1]*random->gaussian()*g2;
tmp[2] = g1*tmp[2]*gamma_t_inv[2]
+ gamma_t_invsqrt[2]*random->gaussian()*g2;
} else {
tmp[0] = g1*tmp[0]*gamma_t_inv[0];
tmp[1] = g1*tmp[1]*gamma_t_inv[1];
tmp[2] = g1*tmp[2]*gamma_t_inv[2];
}
}
// finally, convert this back to lab-frame velocity and store in dv
MathExtra::transpose_matvec(rotationmatrix_transpose, tmp, dv );
/*
if (Tp_UNIFORM) {
dv[0] = dt * (g1 * f[i][0] + g2 * (random->uniform()-0.5));
dv[1] = dt * (g1 * f[i][1] + g2 * (random->uniform()-0.5));
dv[2] = dt * (g1 * f[i][2] + g2 * (random->uniform()-0.5));
} else if (Tp_GAUSS) {
dv[0] = dt * (g1 * f[i][0] + g2 * random->gaussian());
dv[1] = dt * (g1 * f[i][1] + g2 * random->gaussian());
dv[2] = dt * (g1 * f[i][2] + g2 * random->gaussian());
} else {
dv[0] = dt * g1 * f[i][0];
dv[1] = dt * g1 * f[i][1];
dv[2] = dt * g1 * f[i][2];
}
*/
v[i][0] = dv[0];
v[i][1] = dv[1];
v[i][2] = dv[2];
x[i][0] += dv[0]*dt;
x[i][1] += dv[1]*dt;
x[i][2] += dv[2]*dt;
if (Tp_DIPOLE) {
MathExtra::quat_to_mat_trans( quat, rotationmatrix_transpose );
MathExtra::transpose_matvec(rotationmatrix_transpose, dipole_body, f_rot );
mu[i][0] = f_rot[0];
mu[i][1] = f_rot[1];
mu[i][2] = f_rot[2];
}
}
} else {
// if no dipole, just update quaternions and
// angular velocity
double wq[4];
double *quat;
int *ellipsoid = atom->ellipsoid;
AtomVecEllipsoid::Bonus *bonus = avec->bonus;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
update_x_and_omega(x[i],v[i],omega[i],f[i],torque[i],d3rot);
quat = bonus[ellipsoid[i]].quat;
MathExtra::vecquat(omega[i],quat,wq);
quat[0] = quat[0] + 0.5*dt*wq[0];
quat[1] = quat[1] + 0.5*dt*wq[1];
quat[2] = quat[2] + 0.5*dt*wq[2];
quat[3] = quat[3] + 0.5*dt*wq[3];
MathExtra::qnormalize(quat);
}
}
}
return;
}
void FixBrownianAsphere::update_x_and_omega(double *x, double *v, double *omega,
double *f, double *torque, int d3rot)
{
double dx, dy, dz;
dx = dt * g1 * f[0];
x[0] += dx;
v[0] = dx/dt;
dy = dt * g1 * f[1];
x[1] += dy;
v[1] = dy/dt;
dz = dt * g1 * f[2];
x[2] += dz;
v[2] = dz/dt;
omega[0] = d3rot * g3* torque[0];
omega[1] = d3rot * g3* torque[1];
omega[2] = g3* torque[2];
return;
}
/* ----------------------------------------------------------------------
apply random force, stolen from MISC/fix_efield.cpp
------------------------------------------------------------------------- */
void FixBrownianAsphere::post_force(int vflag)
{
double **f = atom->f;
double **x = atom->x;
double **torque = atom->torque;
int *mask = atom->mask;
imageint *image = atom->image;
int nlocal = atom->nlocal;
// virial setup
if (vflag) v_setup(vflag);
else evflag = 0;
double fx,fy,fz;
double v[6];
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
fx = g2 * (random->*rng_func)()/sqrtdt;
fy = g2 * (random->*rng_func)()/sqrtdt;
fz = g2 * (random->*rng_func)()/sqrtdt;
f[i][0] += fx;
f[i][1] += fy;
f[i][2] += fz;
torque[i][0] = g4*(random->*rng_func)()/sqrtdt;
torque[i][1] = g4*(random->*rng_func)()/sqrtdt;
torque[i][2] = g4*(random->*rng_func)()/sqrtdt;
if (evflag) {
v[0] = fx*x[i][0];
v[1] = fy*x[i][1];
v[2] = fz*x[i][2];
v[3] = fx*x[i][1];
v[4] = fx*x[i][2];
v[5] = fy*x[i][2];
v_tally(i, v);
}
}
}
void FixBrownianAsphere::reset_dt()
{
dt = update->dt;
sqrtdt = sqrt(dt);
}

View File

@ -20,43 +20,28 @@ FixStyle(brownian/asphere,FixBrownianAsphere)
#ifndef LMP_FIX_BROWNIAN_ASPHERE_H
#define LMP_FIX_BROWNIAN_ASPHERE_H
#include "fix.h"
#include "fix_brownian_base.h"
namespace LAMMPS_NS {
class FixBrownianAsphere : public Fix {
class FixBrownianAsphere : public FixBrownianBase {
public:
FixBrownianAsphere(class LAMMPS *, int, char **);
virtual ~FixBrownianAsphere();
void init();
void initial_integrate(int);
void setup(int);
void post_force(int);
int setmask();
void reset_dt();
void update_x_and_omega(double *, double *, double *,
double *, double *, int );
void init();
private:
int seed; // RNG seed
int dipole_flag; // set if dipole is used
double dt, sqrtdt; // time step interval and its sqrt
double gamma_t,gamma_r; // translational and rotational damping params
double diff_t,diff_r; // translational and rotational diffusion coeffs
double g1,g2, g3, g4; // prefactors in time stepping
int noise_flag; // 0/1 for noise off/on
int gaussian_noise_flag; // 0/1 for uniform/gaussian noise
protected:
class AtomVecEllipsoid *avec;
protected:
class RanMars *random;
typedef double (RanMars::*rng_member)();
rng_member rng_func; // placeholder for RNG function
private:
template < int Tp_UNIFORM, int Tp_GAUSS, int Tp_DIPOLE, int Tp_2D >
void initial_integrate_templated();
};

View File

@ -0,0 +1,250 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Originally modified from USER-CGDNA/fix_nve_dotc_langevin.cpp.
Contributing author: Sam Cameron (University of Bristol)
------------------------------------------------------------------------- */
#include "fix_brownian.h"
#include <cmath>
#include <cstring>
#include "math_extra.h"
#include "atom.h"
#include "force.h"
#include "update.h"
#include "comm.h"
#include "domain.h"
#include "random_mars.h"
#include "memory.h"
#include "error.h"
using namespace LAMMPS_NS;
using namespace FixConst;
/* ---------------------------------------------------------------------- */
FixBrownianBase::FixBrownianBase(LAMMPS *lmp, int narg, char **arg) :
Fix(lmp, narg, arg)
{
time_integrate = 1;
noise_flag = 1;
gaussian_noise_flag = 0;
gamma_t_flag = gamma_r_flag = 0;
gamma_t_eigen_flag = gamma_r_eigen_flag = 0;
dipole_flag = 0;
if (narg < 5)
error->all(FLERR,"Illegal fix brownian command.");
temp = utils::numeric(FLERR,arg[3],false,lmp);
if (temp <= 0) error->all(FLERR,"Fix brownian temp must be > 0.");
seed = utils::inumeric(FLERR,arg[4],false,lmp);
if (seed <= 0) error->all(FLERR,"Fix brownian seed must be > 0.");
int iarg = 5;
while (iarg < narg) {
if (strcmp(arg[iarg],"rng") == 0) {
if (narg == iarg + 1) {
error->all(FLERR,"Illegal fix brownian command.");
}
if (strcmp(arg[iarg + 1],"uniform") == 0) {
noise_flag = 1;
} else if (strcmp(arg[iarg + 1],"gaussian") == 0) {
noise_flag = 1;
gaussian_noise_flag = 1;
} else if (strcmp(arg[iarg + 1],"none") == 0) {
noise_flag = 0;
} else {
error->all(FLERR,"Illegal fix brownian command.");
}
iarg = iarg + 2;
} else if (strcmp(arg[iarg],"dipole") == 0) {
if (narg == iarg + 3) {
error->all(FLERR,"Illegal fix brownian command.");
}
dipole_flag = 1;
dipole_body = new double[3];
dipole_body[0] = utils::numeric(FLERR,arg[iarg+1],false,lmp);
dipole_body[1] = utils::numeric(FLERR,arg[iarg+2],false,lmp);
dipole_body[2] = utils::numeric(FLERR,arg[iarg+3],false,lmp);
iarg = iarg + 4;
} else if (strcmp(arg[iarg],"gamma_t_eigen") == 0) {
if (narg == iarg + 3) {
error->all(FLERR,"Illegal fix brownian command.");
}
gamma_t_eigen_flag = 1;
gamma_t_inv = new double[3];
gamma_t_invsqrt = new double[3];
gamma_t_inv[0] = 1./utils::numeric(FLERR,arg[iarg+1],false,lmp);
gamma_t_inv[1] = 1./utils::numeric(FLERR,arg[iarg+2],false,lmp);
if (domain->dimension == 2) {
if (strcmp(arg[iarg+3],"inf") != 0) {
error->all(FLERR,"Fix brownian gamma_t_eigen third value must be inf for 2D system.");
}
gamma_t_inv[2] = 0;
} else {
gamma_t_inv[2] = 1./utils::numeric(FLERR,arg[iarg+3],false,lmp);
}
if (gamma_t_inv[0] < 0 || gamma_t_inv[1] < 0 || gamma_t_inv[2] < 0)
error->all(FLERR,"Fix brownian gamma_t_eigen values must be > 0.");
gamma_t_invsqrt[0] = sqrt(gamma_t_inv[0]);
gamma_t_invsqrt[1] = sqrt(gamma_t_inv[1]);
gamma_t_invsqrt[2] = sqrt(gamma_t_inv[2]);
iarg = iarg + 4;
} else if (strcmp(arg[iarg],"gamma_r_eigen") == 0) {
if (narg == iarg + 3) {
error->all(FLERR,"Illegal fix brownian command.");
}
gamma_r_eigen_flag = 1;
gamma_r_inv = new double[3];
gamma_r_invsqrt = new double[3];
if (domain->dimension == 2) {
if (strcmp(arg[iarg+1],"inf") != 0) {
error->all(FLERR,"Fix brownian gamma_r_eigen first value must be inf for 2D system.");
}
gamma_r_inv[0] = 0;
if (strcmp(arg[iarg+2],"inf") != 0) {
error->all(FLERR,"Fix brownian gamma_r_eigen second value must be inf for 2D system.");
}
gamma_r_inv[1] = 0;
} else {
gamma_r_inv[0] = 1./utils::numeric(FLERR,arg[iarg+1],false,lmp);
gamma_r_inv[1] = 1./utils::numeric(FLERR,arg[iarg+2],false,lmp);
}
gamma_r_inv[2] = 1./utils::numeric(FLERR,arg[iarg+3],false,lmp);
if (gamma_r_inv[0] < 0 || gamma_r_inv[1] < 0 || gamma_r_inv[2] < 0)
error->all(FLERR,"Fix brownian gamma_r_eigen values must be > 0.");
gamma_r_invsqrt[0] = sqrt(gamma_r_inv[0]);
gamma_r_invsqrt[1] = sqrt(gamma_r_inv[1]);
gamma_r_invsqrt[2] = sqrt(gamma_r_inv[2]);
iarg = iarg + 4;
} else if (strcmp(arg[iarg],"gamma_t") == 0) {
if (narg == iarg + 1) {
error->all(FLERR,"Illegal fix brownian command.");
}
gamma_t_flag = 1;
gamma_t = utils::numeric(FLERR,arg[iarg+1],false,lmp);
if (gamma_t <= 0)
error->all(FLERR,"Fix brownian gamma_t must be > 0.");
iarg = iarg + 2;
} else if (strcmp(arg[iarg],"gamma_r") == 0) {
if (narg == iarg + 1) {
error->all(FLERR,"Illegal fix brownian command.");
}
gamma_r_flag = 1;
gamma_r = utils::numeric(FLERR,arg[iarg+1],false,lmp);
if (gamma_r <= 0)
error->all(FLERR,"Fix brownian gamma_r must be > 0.");
iarg = iarg + 2;
} else {
error->all(FLERR,"Illegal fix brownian command.");
}
}
// initialize Marsaglia RNG with processor-unique seed
random = new RanMars(lmp,seed + comm->me);
}
/* ---------------------------------------------------------------------- */
int FixBrownianBase::setmask()
{
int mask = 0;
mask |= INITIAL_INTEGRATE;
return mask;
}
/* ---------------------------------------------------------------------- */
FixBrownianBase::~FixBrownianBase()
{
if (gamma_t_eigen_flag) {
delete [] gamma_t_inv;
delete [] gamma_t_invsqrt;
}
if (gamma_r_eigen_flag) {
delete [] gamma_r_inv;
delete [] gamma_r_invsqrt;
}
if (dipole_flag) {
delete [] dipole_body;
}
delete random;
}
/* ---------------------------------------------------------------------- */
void FixBrownianBase::init()
{
dt = update->dt;
sqrtdt = sqrt(dt);
g1 = force->ftm2v;
if (noise_flag == 0) {
g2 = 0;
} else if (gaussian_noise_flag == 1) {
g2 = sqrt(2 * force->boltz*temp/dt/force->mvv2e);
} else {
g2 = sqrt( 24 * force->boltz*temp/dt/force->mvv2e);
}
}
void FixBrownianBase::reset_dt()
{
double sqrtdt_old = sqrtdt;
dt = update->dt;
sqrtdt = sqrt(dt);
g2 *= sqrtdt_old/sqrtdt;
}

View File

@ -0,0 +1,100 @@
/* -*- c++ -*- ----------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#ifndef LMP_FIX_BROWNIAN_BASE_H
#define LMP_FIX_BROWNIAN_BASE_H
#include "fix.h"
namespace LAMMPS_NS {
class FixBrownianBase : public Fix {
public:
FixBrownianBase(class LAMMPS *, int, char **);
virtual ~FixBrownianBase();
void init();
int setmask();
void reset_dt();
protected:
int seed; // RNG seed
double dt, sqrtdt; // time step interval and its sqrt
int gamma_t_flag; // 0/1 if isotropic translational damping is unset/set
int gamma_r_flag; // 0/1 if isotropic rotational damping is unset/set
double gamma_t,gamma_r; // translational and rotational (isotropic) damping params
int gamma_t_eigen_flag; // 0/1 if anisotropic translational damping is unset/set
int gamma_r_eigen_flag; // 0/1 if anisotropic rotational damping is unset/set
double *gamma_t_inv; // anisotropic damping parameter eigenvalues
double *gamma_r_inv;
double *gamma_t_invsqrt;
double *gamma_r_invsqrt;
int dipole_flag; // set if dipole is used for asphere
double *dipole_body; // direction dipole is slaved to in body frame
int noise_flag; // 0/1 for noise off/on
int gaussian_noise_flag; // 0/1 for uniform/gaussian noise
double temp; // temperature
double g1,g2; // prefactors in time stepping
class RanMars *random;
};
}
#endif
/* ERROR/WARNING messages:
E: Illegal fix brownian command.
Wrong number/type of input arguments.
E: Fix brownian gamma_t_eigen values must be > 0.
Self-explanatory.
E: Fix brownian gamma_r_eigen values must be > 0.
Self-explanatory.
E: Fix brownian seed must be > 0.
Self-explanatory.
E: Fix brownian temp must be > 0.
Self-explanatory.
E: Fix brownian gamma_t must be > 0.
Self-explanatory.
E: Fix brownian gamma_r must be > 0.
Self-explanatory.
*/

View File

@ -35,103 +35,34 @@
using namespace LAMMPS_NS;
using namespace FixConst;
#define SMALL 1e-14
enum{NONE,DIPOLE};
/* ---------------------------------------------------------------------- */
FixBrownianSphere::FixBrownianSphere(LAMMPS *lmp, int narg, char **arg) :
Fix(lmp, narg, arg)
FixBrownianBase(lmp, narg, arg)
{
virial_flag = 1;
time_integrate = 1;
extra = NONE;
if (narg > 11 || narg < 8 )
error->all(FLERR,"Illegal fix brownian/sphere command.");
if (!atom->sphere_flag)
error->all(FLERR,"Fix brownian/sphere requires atom style sphere");
gamma_t = utils::numeric(FLERR,arg[3],false,lmp);
if (gamma_t <= 0.0)
error->all(FLERR,"Fix brownian/sphere translational viscous drag "
"coefficient must be > 0.");
gamma_r = utils::numeric(FLERR,arg[4],false,lmp);
if (gamma_t <= 0.0)
error->all(FLERR,"Fix brownian/sphere rotational viscous drag "
"coefficient must be > 0.");
diff_t = utils::numeric(FLERR,arg[5],false,lmp);
if (diff_t <= 0.0)
error->all(FLERR,"Fix brownian/sphere translational diffusion "
"coefficient must be > 0.");
diff_r = utils::numeric(FLERR,arg[6],false,lmp);
if (diff_r <= 0.0)
error->all(FLERR,"Fix brownian/sphere rotational diffusion "
"coefficient must be > 0.");
seed = utils::inumeric(FLERR,arg[7],false,lmp);
if (seed <= 0) error->all(FLERR,"Fix brownian/sphere seed must be > 0.");
noise_flag = 1;
gaussian_noise_flag = 0;
int iarg = 8;
while (iarg < narg) {
if (strcmp(arg[iarg],"rng") == 0) {
if (narg == iarg + 1) {
error->all(FLERR,"Illegal fix/brownian/sphere command.");
}
if (strcmp(arg[iarg + 1],"uniform") == 0) {
noise_flag = 1;
} else if (strcmp(arg[iarg + 1],"gaussian") == 0) {
noise_flag = 1;
gaussian_noise_flag = 1;
} else if (strcmp(arg[iarg + 1],"none") == 0) {
noise_flag = 0;
} else {
error->all(FLERR,"Illegal fix/brownian/sphere command.");
}
iarg = iarg + 2;
} else if (strcmp(arg[iarg],"dipole") == 0) {
extra = DIPOLE;
iarg = iarg + 1;
} else {
error->all(FLERR,"Illegal fix/brownian/sphere command.");
}
if (gamma_t_eigen_flag || gamma_r_eigen_flag) {
error->all(FLERR,"Illegal fix brownian command.");
}
if (extra == DIPOLE && !atom->mu_flag)
error->all(FLERR,"Fix brownian/sphere update dipole requires atom attribute mu");
if (!gamma_t_flag || !gamma_r_flag) {
error->all(FLERR,"Illegal fix brownian command.");
}
if (!atom->mu_flag)
error->all(FLERR,"Fix brownian/sphere requires atom attribute mu");
// initialize Marsaglia RNG with processor-unique seed
random = new RanMars(lmp,seed + comm->me);
}
/* ---------------------------------------------------------------------- */
int FixBrownianSphere::setmask()
{
int mask = 0;
mask |= INITIAL_INTEGRATE;
mask |= POST_FORCE;
return mask;
}
/* ---------------------------------------------------------------------- */
FixBrownianSphere::~FixBrownianSphere()
{
delete random;
}
@ -141,181 +72,161 @@ FixBrownianSphere::~FixBrownianSphere()
void FixBrownianSphere::init()
{
g1 = force->ftm2v/gamma_t;
g3 = force->ftm2v/gamma_r;
if (noise_flag == 0) {
g2 = 0;
g4 = 0;
rng_func = &RanMars::zero_rng;
} else if (gaussian_noise_flag == 1) {
g2 = gamma_t*sqrt(2 * diff_t)/force->ftm2v;
g4 = gamma_r*sqrt(2 * diff_r)/force->ftm2v;
rng_func = &RanMars::gaussian;
} else {
g2 = gamma_t*sqrt( 24 * diff_t)/force->ftm2v;
g4 = gamma_r*sqrt( 24 * diff_r )/force->ftm2v;
rng_func = &RanMars::uniform_middle;
}
FixBrownianBase::init();
g3 = g1/gamma_r;
g4 = g2/sqrt(gamma_r);
g1 /= gamma_t;
g2 /= sqrt(gamma_t);
dt = update->dt;
sqrtdt = sqrt(dt);
}
void FixBrownianSphere::setup(int vflag)
{
post_force(vflag);
}
/* ---------------------------------------------------------------------- */
void FixBrownianSphere::initial_integrate(int /* vflag */)
void FixBrownianSphere::initial_integrate(int /*vflag */)
{
double **x = atom->x;
double **v = atom->v;
double **f = atom->f;
double **omega = atom->omega;
double **torque = atom->torque;
int *mask = atom->mask;
int nlocal = atom->nlocal;
double dx,dy,dz;
if (igroup == atom->firstgroup) nlocal = atom->nfirst;
if (domain->dimension == 2) {
int d3rot; // whether to compute angular momentum in xy plane
if (domain->dimension==2) {
d3rot = 0;
if (!noise_flag) {
initial_integrate_templated<0,0,1>();
} else if (gaussian_noise_flag) {
initial_integrate_templated<0,1,1>();
} else {
d3rot = 1;
initial_integrate_templated<1,0,1>();
}
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
dx = dt * g1 * f[i][0];
x[i][0] += dx;
v[i][0] = dx/dt;
dy = dt * g1 * f[i][1];
x[i][1] += dy;
v[i][1] = dy/dt;
dz = dt * g1 * f[i][2];
x[i][2] += dz;
v[i][2] = dz/dt;
omega[i][0] = d3rot * g3* torque[i][0];
omega[i][1] = d3rot * g3* torque[i][1];
omega[i][2] = g3* torque[i][2];
}
}
if (extra == DIPOLE) {
double **mu = atom->mu;
double dtheta;
double mux,muy,muz,mu_tmp,wx,wy,wz;
double prefac_1, prefac_2;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
dtheta = sqrt((omega[i][0]*dt)*(omega[i][0]*dt)
+(omega[i][1]*dt)*(omega[i][1]*dt)
+(omega[i][2]*dt)*(omega[i][2]*dt));
if (fabs(dtheta) < SMALL) {
prefac_1 = dt;
prefac_2 = 0.5*dt*dt;
} else {
prefac_1 = dt*sin(dtheta)/dtheta;
prefac_2 = dt*dt*(1-cos(dtheta))/(dtheta*dtheta);
}
mux = mu[i][0];
muy = mu[i][1];
muz = mu[i][2];
wx = omega[i][0];
wy = omega[i][1];
wz = omega[i][2];
mu[i][0] = (mux + prefac_1 * ( -wz*muy + wy*muz )
+ prefac_2 * ( -1*( wz*wz + wy*wy ) * mux
+ ( wz*muz + wy*muy ) * wx));
mu[i][1] = (muy + prefac_1 * ( wz*mux - wx*muz )
+ prefac_2 * ( -1*(wz*wz + wx*wx) * muy
+ ( wz*muz + wx*mux ) * wy));
mu[i][2] = (muz + prefac_1 * ( -wy*mux + wx*muy )
+ prefac_2 * ( -1*( wx*wx + wy*wy ) * muz
+ ( wy*muy + wx*mux ) * wz));
mu_tmp = sqrt(mu[i][0]*mu[i][0]+mu[i][1]*mu[i][1]+mu[i][2]*mu[i][2]);
mu[i][0] = mu[i][0]/mu_tmp;
mu[i][1] = mu[i][1]/mu_tmp;
mu[i][2] = mu[i][2]/mu_tmp;
}
if (!noise_flag) {
initial_integrate_templated<0,0,0>();
} else if (gaussian_noise_flag) {
initial_integrate_templated<0,1,0>();
} else {
initial_integrate_templated<1,0,0>();
}
}
return;
}
/* ----------------------------------------------------------------------
apply random force, stolen from MISC/fix_efield.cpp
------------------------------------------------------------------------- */
void FixBrownianSphere::post_force(int vflag)
/* ---------------------------------------------------------------------- */
template < int Tp_UNIFORM, int Tp_GAUSS, int Tp_2D >
void FixBrownianSphere::initial_integrate_templated()
{
double **f = atom->f;
double **x = atom->x;
double **torque = atom->torque;
double **v = atom->v;
double **f = atom->f;
int *mask = atom->mask;
imageint *image = atom->image;
int nlocal = atom->nlocal;
double wx,wy,wz;
double **torque = atom->torque;
double **mu = atom->mu;
double mux,muy,muz,mulen;
// virial setup
if (igroup == atom->firstgroup) nlocal = atom->nfirst;
if (vflag) v_setup(vflag);
else evflag = 0;
double fx,fy,fz;
double v[6];
double dx,dy,dz;
for (int i = 0; i < nlocal; i++)
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
fx = g2 * (random->*rng_func)()/sqrtdt;
fy = g2 * (random->*rng_func)()/sqrtdt;
fz = g2 * (random->*rng_func)()/sqrtdt;
f[i][0] += fx;
f[i][1] += fy;
f[i][2] += fz;
if (Tp_2D) {
dz = 0;
wx = wy = 0;
if (Tp_UNIFORM) {
dx = dt * (g1 * f[i][0] + g2 * (random->uniform()-0.5));
dy = dt * (g1 * f[i][1] + g2 * (random->uniform()-0.5));
wz = (random->uniform()-0.5)*g4;
torque[i][0] = g4*(random->*rng_func)()/sqrtdt;
torque[i][1] = g4*(random->*rng_func)()/sqrtdt;
torque[i][2] = g4*(random->*rng_func)()/sqrtdt;
} else if (Tp_GAUSS) {
dx = dt * (g1 * f[i][0] + g2 * random->gaussian());
dy = dt * (g1 * f[i][1] + g2 * random->gaussian());
wz = random->gaussian()*g4;
} else {
dx = dt * g1 * f[i][0];
dy = dt * g1 * f[i][1];
wz = 0;
}
} else {
if (Tp_UNIFORM) {
dx = dt * (g1 * f[i][0] + g2 * (random->uniform()-0.5));
dy = dt * (g1 * f[i][1] + g2 * (random->uniform()-0.5));
dz = dt * (g1 * f[i][2] + g2 * (random->uniform()-0.5));
wx = (random->uniform()-0.5)*g4;
wy = (random->uniform()-0.5)*g4;
wz = (random->uniform()-0.5)*g4;
} else if (Tp_GAUSS) {
dx = dt * (g1 * f[i][0] + g2 * random->gaussian());
dy = dt * (g1 * f[i][1] + g2 * random->gaussian());
dz = dt * (g1 * f[i][2] + g2 * random->gaussian());
wx = random->gaussian()*g4;
wy = random->gaussian()*g4;
wz = random->gaussian()*g4;
} else {
dx = dt * g1 * f[i][0];
dy = dt * g1 * f[i][1];
dz = dt * g1 * f[i][2];
wx = wy = wz = 0;
if (evflag) {
v[0] = fx*x[i][0];
v[1] = fy*x[i][1];
v[2] = fz*x[i][2];
v[3] = fx*x[i][1];
v[4] = fx*x[i][2];
v[5] = fy*x[i][2];
v_tally(i, v);
}
}
}
void FixBrownianSphere::reset_dt()
{
x[i][0] += dx;
v[i][0] = dx/dt;
dt = update->dt;
sqrtdt = sqrt(dt);
x[i][1] += dy;
v[i][1] = dy/dt;
x[i][2] += dz;
v[i][2] = dz/dt;
wx += g3*torque[i][0];
wy += g3*torque[i][1];
wz += g3*torque[i][2];
// store length of dipole as we need to convert it to a unit vector and
// then back again
mulen = sqrt(mu[i][0]*mu[i][0] + mu[i][1]*mu[i][1] + mu[i][2]*mu[i][2]);
// unit vector at time t
mux = mu[i][0]/mulen;
muy = mu[i][1]/mulen;
muz = mu[i][2]/mulen;
// un-normalised unit vector at time t + dt
mu[i][0] = mux + (wy*muz - wz*muy)*dt;
mu[i][1] = muy + (wz*mux - wx*muz)*dt;
mu[i][2] = muz + (wx*muy - wy*mux)*dt;
// normalisation introduces the stochastic drift term due to changing from
// Stratonovich to Ito interpretation
MathExtra::norm3(mu[i]);
// multiply by original magnitude to obtain dipole of same length
mu[i][0] = mu[i][0]*mulen;
mu[i][1] = mu[i][1]*mulen;
mu[i][2] = mu[i][2]*mulen;
}
}
return;
}

View File

@ -20,39 +20,22 @@ FixStyle(brownian/sphere,FixBrownianSphere)
#ifndef LMP_FIX_BROWNIAN_SPHERE_H
#define LMP_FIX_BROWNIAN_SPHERE_H
#include "fix.h"
#include "fix_brownian_base.h"
namespace LAMMPS_NS {
class FixBrownianSphere : public Fix {
class FixBrownianSphere : public FixBrownianBase {
public:
FixBrownianSphere(class LAMMPS *, int, char **);
virtual ~FixBrownianSphere();
void init();
void initial_integrate(int);
void setup(int);
void post_force(int);
int setmask();
void reset_dt();
void initial_integrate(int /*vflag */);
private:
int seed; // RNG seed
int extra; // set if dipole is used
double dt, sqrtdt; // time step interval and its sqrt
double gamma_t,gamma_r; // translational and rotational damping params
double diff_t,diff_r; // translational and rotational diffusion coeffs
double g1,g2, g3, g4; // prefactors in time stepping
int noise_flag; // 0/1 for noise off/on
int gaussian_noise_flag; // 0/1 for uniform/gaussian noise
protected:
class RanMars *random;
typedef double (RanMars::*rng_member)();
rng_member rng_func; // placeholder for RNG function
template < int Tp_UNIFORM, int Tp_GAUSS, int Tp_2D >
void initial_integrate_templated();
double g3,g4;
};
}

View File

@ -94,21 +94,6 @@ double RanMars::uniform()
return uni;
}
/* ----------------------------------------------------------------------
uniform RN shifted to be symmetric about zero (for fix bd/sphere).
------------------------------------------------------------------------- */
double RanMars::uniform_middle()
{
return uniform()-0.5;
}
/* ----------------------------------------------------------------------
Return 0 (for fix/bd/sphere).
------------------------------------------------------------------------- */
double RanMars::zero_rng()
{
return 0.0;
}
/* ----------------------------------------------------------------------
gaussian RN

View File

@ -23,8 +23,6 @@ class RanMars : protected Pointers {
RanMars(class LAMMPS *, int);
~RanMars();
double uniform();
double uniform_middle();
double zero_rng();
double gaussian();
double gaussian(double mu, double sigma);
double rayleigh(double sigma);