From 129210c7a0e87045ff888bdb28d91936d8536734 Mon Sep 17 00:00:00 2001 From: Sam Cameron Date: Sun, 20 Dec 2020 17:38:32 +0000 Subject: [PATCH] Updated examples and docs, and added basic brownian dynamics integrator (no rotational degrees of freedom). --- doc/src/Commands_fix.rst | 1 + doc/src/fix.rst | 5 +- doc/src/fix_brownian.rst | 151 +++++++++++ doc/src/fix_brownian_asphere.rst | 21 +- doc/src/fix_brownian_sphere.rst | 43 ++- doc/src/fix_propel_self.rst | 7 +- .../USER/brownian/2d_velocity/in.2d_velocity | 64 +++++ .../2d_velocity/log_1_1_4_2d.lammps.log | 248 ++++++++++++++++++ examples/USER/brownian/asphere/README.txt | 2 +- examples/USER/brownian/asphere/in3d.brownian | 30 +-- .../log_gaussian_1_0.33_1_3_3d.lammps.log | 141 ++++++++++ .../USER/brownian/sphere/in2ddipole.brownian | 25 +- .../brownian/sphere/in3d_virial_on.brownian | 22 +- .../USER/brownian/translational/in.brownian | 65 +++++ .../brownian/translational/log_1_1.lammps.log | 246 +++++++++++++++++ src/USER-BROWNIAN/fix_brownian.cpp | 217 +++++++++++++++ src/USER-BROWNIAN/fix_brownian.h | 79 ++++++ 17 files changed, 1268 insertions(+), 99 deletions(-) create mode 100644 doc/src/fix_brownian.rst create mode 100644 examples/USER/brownian/2d_velocity/in.2d_velocity create mode 100644 examples/USER/brownian/2d_velocity/log_1_1_4_2d.lammps.log create mode 100644 examples/USER/brownian/asphere/log_gaussian_1_0.33_1_3_3d.lammps.log create mode 100644 examples/USER/brownian/translational/in.brownian create mode 100644 examples/USER/brownian/translational/log_1_1.lammps.log create mode 100644 src/USER-BROWNIAN/fix_brownian.cpp create mode 100644 src/USER-BROWNIAN/fix_brownian.h diff --git a/doc/src/Commands_fix.rst b/doc/src/Commands_fix.rst index 361ec7e982..9ee699faea 100644 --- a/doc/src/Commands_fix.rst +++ b/doc/src/Commands_fix.rst @@ -39,6 +39,7 @@ OPT. * :doc:`ave/time ` * :doc:`aveforce ` * :doc:`balance ` + * :doc:`brownian ` * :doc:`brownian/asphere ` * :doc:`brownian/sphere ` * :doc:`bocs ` diff --git a/doc/src/fix.rst b/doc/src/fix.rst index 5efe002f31..373e5ac29f 100644 --- a/doc/src/fix.rst +++ b/doc/src/fix.rst @@ -182,8 +182,9 @@ accelerated styles exist. * :doc:`ave/time ` - compute/output global time-averaged quantities * :doc:`aveforce ` - add an averaged force to each atom * :doc:`balance ` - perform dynamic load-balancing -* :doc:`brownian/asphere ` - overdamped translational and rotational brownian for ellipsoids -* :doc:`brownian/sphere ` - overdamped translational and rotational brownian for spheres +* :doc:`brownian ` - overdamped translational brownian motion +* :doc:`brownian/asphere ` - overdamped translational and rotational brownian motion for ellipsoids +* :doc:`brownian/sphere ` - overdamped translational and rotational brownian motion for spheres * :doc:`bocs ` - NPT style time integration with pressure correction * :doc:`bond/break ` - break bonds on the fly * :doc:`bond/create ` - create bonds on the fly diff --git a/doc/src/fix_brownian.rst b/doc/src/fix_brownian.rst new file mode 100644 index 0000000000..e3f3a2679f --- /dev/null +++ b/doc/src/fix_brownian.rst @@ -0,0 +1,151 @@ +.. index:: fix brownian + +fix brownian command +==================== + +Syntax +"""""" + +.. parsed-literal:: + + fix ID group-ID brownian gamma_t diff_t seed keyword args + +* ID, group-ID are documented in :doc:`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* + + .. 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 + +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 + + +Description +""""""""""" + +Perform Brownian Dynamics integration to update position and velocity +of atoms 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 + +.. math:: + + dr = \frac{F}{\gamma_t}dt+\sqrt{2D_t}dW_t, \\ + +where :math:`dW_t` is a Wiener processes (see e.g. :ref:`(Gardiner) `). + +.. 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`. + +--------- + +.. note:: + Temperature computation using the :doc:`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) ` for more details on this. + Temperature is instead defined in terms of the note above (for + equilibrium systems). + +--------- + +.. 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 ` 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) ` for why this works). This is the same method +of noise generation as used in :doc:`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) `. + +If the *rng* keyword is used with the *none* value, then the noise +terms are set to zero. + + +---------- + +.. 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 `. +No global or per-atom quantities are stored +by this fix for access by various :doc:`output commands `. + +The :doc:`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 `. +The default is *virial no*. + +No parameter of this fix can be used with the *start/stop* keywords of +the :doc:`run ` command. This fix is not invoked during +:doc:`energy minimization `. + +Restrictions +"""""""""""" + +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 ` +doc page for more info. + + +Related commands +"""""""""""""""" + +:doc:`fix langevin `, :doc:`fix nve/sphere `, +:doc:`fix brownian/sphere `, +:doc:`fix brownian/asphere ` + +Default +""""""" + +The default for *rng* is *uniform*. + +---------- + +.. _GardinerC1: + +**(Gardiner)** Gardiner, A Handbook for the Natural and Social Sciences 4th Ed. (2009). + +.. _Doi1: + +**(Doi)** Doi, Soft Matter Physics (2013). + +.. _Dunweg6: + +**(Dunweg)** Dunweg and Paul, Int J of Modern Physics C, 2, 817-27 (1991). + + diff --git a/doc/src/fix_brownian_asphere.rst b/doc/src/fix_brownian_asphere.rst index 58dd453de9..c59774ca65 100644 --- a/doc/src/fix_brownian_asphere.rst +++ b/doc/src/fix_brownian_asphere.rst @@ -54,8 +54,8 @@ viscous forces. The stochastic equations of motion are 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) `), :math:`dW_t` and -:math:`dW_r` are Wiener processes (see e.g. :ref:`(Gardiner) `). +Chapter 4 of :ref:`(Goldstein) `), :math:`dW_t` and +:math:`dW_r` are Wiener processes (see e.g. :ref:`(Gardiner) `). The quaternions :math:`q` of the ellipsoid are updated each timestep from the angular velocity vector. @@ -66,13 +66,13 @@ values of :math:`\gamma_t`, :math:`\gamma_r`, :math:`D_t`, If the *rng* keyword is used with the *uniform* value, then the noise is generated from a uniform distribution (see -:ref:`(Dunweg) ` for why this works). This is the same method +:ref:`(Dunweg) ` for why this works). This is the same method of noise generation as used in :doc:`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) `. +value for reasons argued in :ref:`(Dunweg) `. If the *rng* keyword is used with the *none* value, then the noise terms are set to zero. @@ -114,7 +114,7 @@ as atoms which have a definite orientation as defined by the Optionally, they can also store a dipole moment as defined by the :doc:`atom_style dipole ` command. -This fix is part of the USER-MISC package. It is only enabled if +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 ` doc page for more info. @@ -124,8 +124,9 @@ be point particles. Related commands """""""""""""""" -:doc:`fix brownian/sphere `, :doc:`fix langevin `, -:doc:`fix nve/asphere `, :doc:`atom style ` +:doc:`fix brownian `, :doc:`fix brownian/sphere `, +:doc:`fix propel/self `, :doc:`fix langevin `, +:doc:`fix nve/asphere ` Default """"""" @@ -134,15 +135,15 @@ The default for *rng* is *uniform*. ---------- -.. _GoldsteinCM1: +.. _GoldsteinCM2: **(Goldstein)** Goldstein, Poole, and Safko, Classical Mechanics, 3rd Ed. (2001). -.. _GardinerC1: +.. _GardinerC3: **(Gardiner)** Gardiner, A Handbook for the Natural and Social Sciences 4th Ed. (2009). -.. _Dunweg7: +.. _Dunweg8: **(Dunweg)** Dunweg and Paul, Int J of Modern Physics C, 2, 817-27 (1991). diff --git a/doc/src/fix_brownian_sphere.rst b/doc/src/fix_brownian_sphere.rst index 231486dee1..7e73226e08 100644 --- a/doc/src/fix_brownian_sphere.rst +++ b/doc/src/fix_brownian_sphere.rst @@ -53,8 +53,8 @@ viscous forces. The stochastic equations of motion are 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) `), :math:`dW_t` and -:math:`dW_r` are Wiener processes (see e.g. :ref:`(Gardiner) `). +Chapter 4 of :ref:`(Goldstein) `), :math:`dW_t` and +:math:`dW_r` are Wiener processes (see e.g. :ref:`(Gardiner) `). The dipole vectors :math:`e_i` are updated using the rotation matrix .. math:: @@ -85,35 +85,31 @@ section 7.4). --------- -.. note:: - Temperature computation using the :doc:`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) ` for more details on this. - Temperature is instead defined in terms of the note above (for - equilibrium systems). +See note on the unphysical result of using :doc:`compute temp ` +with this fix in :doc:`fix brownian `. --------- .. note:: - The diffusion coefficient :math:`D_t` is measured - in units of (length*length)/time and the diffusion coefficient - :math:`D_r` is measured in units of 1/time, where time and length - are in the units specified on the :doc:`units ` page. Similarly, - :math:`\gamma_t` and :math:`\gamma_r` are measured in + The diffusion coefficient :math:`D_t` and the translational + drag coefficient :math:`\gamma_t` are discussed in + :doc:`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 ` 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) ` for why this works). This is the same method +:ref:`(Dunweg) ` for why this works). This is the same method of noise generation as used in :doc:`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) `. +value for reasons argued in :ref:`(Dunweg) `. If the *rng* keyword is used with the *none* value, then the noise terms are set to zero. @@ -151,7 +147,7 @@ as defined by the :doc:`atom_style sphere ` command. If the *dipole* keyword is used, they must also store a dipole moment as defined by the :doc:`atom_style dipole ` command. -This fix is part of the USER-MISC package. It is only enabled if +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 ` doc page for more info. @@ -159,8 +155,9 @@ doc page for more info. Related commands """""""""""""""" +:doc:`fix brownian `, :doc:`fix brownian/asphere `, +:doc:`fix propel/self `, :doc:`fix langevin `, :doc:`fix nve/sphere `, -:doc:`atom style ` Default """"""" @@ -169,11 +166,11 @@ The default for *rng* is *uniform*. ---------- -.. _GoldsteinCM: +.. _GoldsteinCM1: **(Goldstein)** Goldstein, Poole, and Safko, Classical Mechanics, 3rd Ed. (2001). -.. _GardinerC: +.. _GardinerC2: **(Gardiner)** Gardiner, A Handbook for the Natural and Social Sciences 4th Ed. (2009). @@ -182,11 +179,7 @@ The default for *rng* is *uniform*. **(Callegari)** Callegari and Volpe, *Numerical Simulations of Active Brownian Particles*, Flowing Matter, 211-238 (2019). -.. _Doi1: - -**(Doi)** Doi, Soft Matter Physics (2013). - -.. _Dunweg6: +.. _Dunweg7: **(Dunweg)** Dunweg and Paul, Int J of Modern Physics C, 2, 817-27 (1991). diff --git a/doc/src/fix_propel_self.rst b/doc/src/fix_propel_self.rst index 6644d97d46..582d9e4294 100644 --- a/doc/src/fix_propel_self.rst +++ b/doc/src/fix_propel_self.rst @@ -21,10 +21,9 @@ Syntax *dipole* value = none = apply force along dipole direction *velocity* value = none = apply force along velocity direction *quat* values = direction vector *sx* and *sy* and *sz* - *sx* = x component of force direction in ellipsoid frame - *sy* = y component of force direction in ellipsoid frame - *sz* = z component of force direction in ellipsoid frame - + *sx* = x component of force direction in ellipsoid frame + *sy* = y component of force direction in ellipsoid frame + *sz* = z component of force direction in ellipsoid frame Examples diff --git a/examples/USER/brownian/2d_velocity/in.2d_velocity b/examples/USER/brownian/2d_velocity/in.2d_velocity new file mode 100644 index 0000000000..b731f5f477 --- /dev/null +++ b/examples/USER/brownian/2d_velocity/in.2d_velocity @@ -0,0 +1,64 @@ +# 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 seed equal 1974019 +variable fp equal 4.0 + +variable params string ${gamma_t}_${D_t}_${fp} + + +log log_${params}_2d.lammps.log +units lj +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 +velocity all create 1.0 1 loop geom + + +neighbor 1.0 bin +neigh_modify every 1 delay 1 check yes + + + +pair_style none + +fix step all brownian ${gamma_t} ${D_t} ${seed} +fix vel all propel/self ${fp} velocity +fix 2 all enforce2d +fix_modify vel 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 + + diff --git a/examples/USER/brownian/2d_velocity/log_1_1_4_2d.lammps.log b/examples/USER/brownian/2d_velocity/log_1_1_4_2d.lammps.log new file mode 100644 index 0000000000..f6b234e9ee --- /dev/null +++ b/examples/USER/brownian/2d_velocity/log_1_1_4_2d.lammps.log @@ -0,0 +1,248 @@ +units lj +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.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 + + + +#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 2 all enforce2d +fix_modify vel 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.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 + +Performance: 0.176 tau/day, 20333.276 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.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 + +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 + + +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.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 + +Performance: 17136.102 tau/day, 19833.451 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 + +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 = 154 +Dangerous builds = 0 + + +Total wall time: 0:00:08 diff --git a/examples/USER/brownian/asphere/README.txt b/examples/USER/brownian/asphere/README.txt index 7cb5d2e8e6..47e79353c6 100644 --- a/examples/USER/brownian/asphere/README.txt +++ b/examples/USER/brownian/asphere/README.txt @@ -1,2 +1,2 @@ -The input file in2d.bd demonstrates how to run a 2d simulation +The input file in3d.brownian demonstrates how to run a 3d simulation of ellipsoidal particles undergoing overdamped brownian motion. diff --git a/examples/USER/brownian/asphere/in3d.brownian b/examples/USER/brownian/asphere/in3d.brownian index 67d95a82b9..19487978ce 100644 --- a/examples/USER/brownian/asphere/in3d.brownian +++ b/examples/USER/brownian/asphere/in3d.brownian @@ -1,10 +1,14 @@ -# 3d overdamped brownian dynamics +# 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 4.0 -variable gamma_r equal 1.0 -variable D_t equal 7.0 -variable D_r equal 13.0 +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} @@ -27,16 +31,11 @@ set type * shape 1 1 1 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 ${gamma_t} ${gamma_r} ${D_t} ${D_r} ${seed} rng ${rng} dipole +fix 1 all brownian/asphere ${gamma_t} ${gamma_r} ${D_t} ${D_r} & + ${seed} rng ${rng} dipole compute press all pressure NULL virial @@ -50,8 +49,6 @@ run 50000 reset_timestep 0 -#initialisation for the main run - # MSD compute msd all msd @@ -59,11 +56,6 @@ 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 diff --git a/examples/USER/brownian/asphere/log_gaussian_1_0.33_1_3_3d.lammps.log b/examples/USER/brownian/asphere/log_gaussian_1_0.33_1_3_3d.lammps.log new file mode 100644 index 0000000000..2ed81ec8ba --- /dev/null +++ b/examples/USER/brownian/asphere/log_gaussian_1_0.33_1_3_3d.lammps.log @@ -0,0 +1,141 @@ +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 diff --git a/examples/USER/brownian/sphere/in2ddipole.brownian b/examples/USER/brownian/sphere/in2ddipole.brownian index 73d90e4ebf..e7a8374984 100644 --- a/examples/USER/brownian/sphere/in2ddipole.brownian +++ b/examples/USER/brownian/sphere/in2ddipole.brownian @@ -1,4 +1,5 @@ -# 2d overdamped brownian dynamics +# 2d overdamped brownian dynamics of a sphere +# with dipole also being updated variable rng string gaussian variable gamma_t equal 4.0 @@ -26,19 +27,10 @@ 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 - - -#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 ${gamma_t} ${gamma_r} ${D_t} & + ${D_r} ${seed} rng ${rng} dipole fix 2 all enforce2d compute press all pressure NULL virial @@ -51,9 +43,6 @@ thermo 50001 run 50000 reset_timestep 0 - -#initialisation for the main run - # MSD compute msd all msd @@ -61,12 +50,6 @@ 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_modify 1 first yes sort id - timestep 0.00001 thermo 1000 diff --git a/examples/USER/brownian/sphere/in3d_virial_on.brownian b/examples/USER/brownian/sphere/in3d_virial_on.brownian index 481d9bc1b4..2fb08cbb17 100644 --- a/examples/USER/brownian/sphere/in3d_virial_on.brownian +++ b/examples/USER/brownian/sphere/in3d_virial_on.brownian @@ -1,4 +1,6 @@ -# 3d overdamped brownian dynamics +# 3d overdamped brownian dynamics of sphere, with +# virial contribution (i.e. ideal gas pressure) +# included variable rng string uniform @@ -16,7 +18,6 @@ log log_${params}_3d.lammps.log units lj atom_style sphere dimension 3 -newton off lattice sc 0.4 @@ -26,14 +27,11 @@ 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/sphere ${gamma_t} ${gamma_r} ${D_t} ${D_r} ${seed} rng ${rng} +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 @@ -46,22 +44,12 @@ 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 - -# 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 diff --git a/examples/USER/brownian/translational/in.brownian b/examples/USER/brownian/translational/in.brownian new file mode 100644 index 0000000000..fbf43e68c6 --- /dev/null +++ b/examples/USER/brownian/translational/in.brownian @@ -0,0 +1,65 @@ +# 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 + + diff --git a/examples/USER/brownian/translational/log_1_1.lammps.log b/examples/USER/brownian/translational/log_1_1.lammps.log new file mode 100644 index 0000000000..0fdba989bd --- /dev/null +++ b/examples/USER/brownian/translational/log_1_1.lammps.log @@ -0,0 +1,246 @@ +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 diff --git a/src/USER-BROWNIAN/fix_brownian.cpp b/src/USER-BROWNIAN/fix_brownian.cpp new file mode 100644 index 0000000000..f25f6d6b32 --- /dev/null +++ b/src/USER-BROWNIAN/fix_brownian.cpp @@ -0,0 +1,217 @@ +/* ---------------------------------------------------------------------- + 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 +#include +#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; + +/* ---------------------------------------------------------------------- */ + +FixBrownian::FixBrownian(LAMMPS *lmp, int narg, char **arg) : + Fix(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 { + error->all(FLERR,"Illegal fix brownian command."); + } + } else { + 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; +} + + + +/* ---------------------------------------------------------------------- */ + +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; + } + + dt = update->dt; + sqrtdt = sqrt(dt); +} + +void FixBrownian::setup(int vflag) +{ + post_force(vflag); +} + +/* ---------------------------------------------------------------------- */ + +void FixBrownian::initial_integrate(int /* vflag */) +{ + 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; + + + 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; + + } + } + + + 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); +} diff --git a/src/USER-BROWNIAN/fix_brownian.h b/src/USER-BROWNIAN/fix_brownian.h new file mode 100644 index 0000000000..fb56edb39e --- /dev/null +++ b/src/USER-BROWNIAN/fix_brownian.h @@ -0,0 +1,79 @@ +/* -*- 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. +------------------------------------------------------------------------- */ + +#ifdef FIX_CLASS + +FixStyle(brownian,FixBrownian) + +#else + +#ifndef LMP_FIX_BROWNIAN_H +#define LMP_FIX_BROWNIAN_H + +#include "fix.h" + +namespace LAMMPS_NS { + +class FixBrownian : public Fix { + 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 + + + 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 + +}; + +} +#endif +#endif + +/* ERROR/WARNING messages: + +E: Illegal fix brownian command. + +Wrong number/type of input arguments. + +E: Fix brownian viscous drag coefficient must be > 0. + +Self-explanatory. + +E: Fix brownian diffusion coefficient must be > 0. + +Self-explanatory. + +E: Fix brownian seed must be > 0. + +Self-explanatory. + +*/