forked from lijiext/lammps
166 lines
6.2 KiB
Plaintext
166 lines
6.2 KiB
Plaintext
<script type="text/javascript"
|
|
src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
|
|
</script>
|
|
<script type="text/x-mathjax-config">
|
|
MathJax.Hub.Config({ TeX: { equationNumbers: {autoNumber: "AMS"} } });
|
|
</script>
|
|
|
|
"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c
|
|
|
|
:link(lws,http://lammps.sandia.gov)
|
|
:link(ld,Manual.html)
|
|
:link(lc,Section_commands.html#comm)
|
|
|
|
:line
|
|
|
|
fix drude/transform/direct command :h3
|
|
fix drude/transform/inverse command :h3
|
|
|
|
[Syntax:]
|
|
|
|
fix ID group-ID style keyword value ... :pre
|
|
|
|
ID, group-ID are documented in "fix"_fix.html command
|
|
style = {drude/transform/direct} or {drude/transform/inverse} :ul
|
|
|
|
[Examples:]
|
|
|
|
fix 3 all drude/transform/direct
|
|
fix 1 all drude/transform/inverse :pre
|
|
|
|
[Description:]
|
|
|
|
Transform the coordinates of Drude oscillators from real to reduced
|
|
and back for thermalizing the Drude oscillators as described in
|
|
"(Lamoureux)"_#Lamoureux using a Nose-Hoover thermostat. This fix is
|
|
designed to be used with the "thermalized Drude oscillator
|
|
model"_tutorial_drude.html. Polarizable models in LAMMPS are
|
|
described in "this Section"_Section_howto.html#howto_25.
|
|
|
|
Drude oscillators are a pair of atoms representing a single
|
|
polarizable atom. Ideally, the mass of Drude particles would vanish
|
|
and their positions would be determined self-consistently by iterative
|
|
minimization of the energy, the cores' positions being fixed. It is
|
|
however more efficient and it yields comparable results, if the Drude
|
|
oscillators (the motion of the Drude particle relative to the core)
|
|
are thermalized at a low temperature. In that case, the Drude
|
|
particles need a small mass.
|
|
|
|
The thermostats act on the reduced degrees of freedom, which are
|
|
defined by the following equations. Note that in these equations
|
|
upper case denotes atomic or center of mass values and lower case
|
|
denotes Drude particle or dipole values. Primes denote the transformed
|
|
(reduced) values, while bare letters denote the original values.
|
|
|
|
Masses: \begin\{equation\} M' = M + m \end\{equation\}
|
|
\begin\{equation\} m' = \frac \{M\, m \} \{M'\} \end\{equation\}
|
|
Positions: \begin\{equation\} X' = \frac \{M\, X + m\, x\} \{M'\}
|
|
\end\{equation\} \begin\{equation\} x' = x - X \end\{equation\}
|
|
Velocities: \begin\{equation\} V' = \frac \{M\, V + m\, v\} \{M'\}
|
|
\end\{equation\} \begin\{equation\} v' = v - V \end\{equation\}
|
|
Forces: \begin\{equation\} F' = F + f \end\{equation\}
|
|
\begin\{equation\} f' = \frac \{ M\, f - m\, F\} \{M'\}
|
|
\end\{equation\}
|
|
|
|
This transform conserves the total kinetic energy
|
|
\begin\{equation\} \frac 1 2 \, (M\, V^2\ + m\, v^2)
|
|
= \frac 1 2 \, (M'\, V'^2\ + m'\, v'^2) \end\{equation\}
|
|
and the virial defined with absolute positions
|
|
\begin\{equation\} X\, F + x\, f = X'\, F' + x'\, f' \end\{equation\}
|
|
|
|
:line
|
|
|
|
This fix requires each atom know whether it is a Drude particle or
|
|
not. You must therefore use the "fix drude"_fix_drude.html command to
|
|
specify the Drude status of each atom type.
|
|
|
|
IMPORTANT NOTE: only the Drude core atoms need to be in the group
|
|
specified for this fix. A Drude electron will be transformed together
|
|
with its cores even if it is not itself in the group. It is safe to
|
|
include Drude electrons or non-polarizable atoms in the group. The
|
|
non-polarizable atoms will simply not be transformed.
|
|
|
|
:line
|
|
|
|
This fix does NOT perform time integration. It only transform masses,
|
|
coordinates, velocities and forces. Thus you must use separate time
|
|
integration fixes, like "fix nve"_fix_nve.html or "fix
|
|
npt"_fix_nh.html to actually update the velocities and positions of
|
|
atoms. In order to thermalize the reduced degrees of freedom at
|
|
different temperatures, two Nose-Hoover thermostats must be defined,
|
|
acting on two distinct groups.
|
|
|
|
IMPORTANT NOTE: The {fix drude/transform/direct} command must appear
|
|
before any Nose-Hoover thermostating fixes. The {fix
|
|
drude/transform/inverse} command must appear after any Nose-Hoover
|
|
thermostating fixes.
|
|
|
|
Example:
|
|
|
|
fix fDIRECT all drude/transform/direct
|
|
fix fNVT gCORES nvt temp 300.0 300.0 100.0
|
|
fix fNVT gDRUDES nvt temp 1.0 1.0 100.0
|
|
fix fINVERSE all drude/transform/inverse
|
|
compute TDRUDE all temp/drude
|
|
thermo_style custom step cpu etotal ke pe ebond ecoul elong press vol temp c_TDRUDE\[1\] c_TDRUDE\[2\] :pre
|
|
|
|
|
|
In this example, {gCORES} is the group of the atom cores and {gDRUDES}
|
|
is the group of the Drude particles (electrons). The centers of mass
|
|
of the Drude oscillators will be thermostated at 300.0 and the
|
|
internal degrees of freedom will be thermostated at 1.0. The
|
|
temperatures of cores and Drude particles, in center-of-mass and
|
|
relatice coordinates, are calculated using "compute
|
|
temp/drude"_compute_temp_drude.html
|
|
|
|
In addition, if you want to use a barostat to simulate a system at
|
|
constant pressure, only one of the Nose-Hoover fixes must be {npt},
|
|
the other one should be {nvt}. You must add a {compute temp/com} and a
|
|
{fix_modify} command so that the temperature of the {npt} fix be just
|
|
that of its group but the pressure be the overall pressure
|
|
{thermo_press}.
|
|
|
|
Example:
|
|
|
|
compute cTEMP_CORE gCORES temp/com
|
|
fix fDIRECT all drude/transform/direct
|
|
fix fNPT gCORES npt temp 298.0 298.0 100.0 iso 1.0 1.0 500.0
|
|
fix_modify fNPT temp cTEMP_CORE press thermo_press
|
|
fix fNVT gDRUDES nvt temp 5.0 5.0 100.0
|
|
fix fINVERSE all drude/transform/inverse :pre
|
|
|
|
In this example, {gCORES} is the group of the atom cores and {gDRUDES}
|
|
is the group of the Drude particles. The centers of mass of the Drude
|
|
oscillators will be thermostated at 298.0 and the internal degrees of
|
|
freedom will be thermostated at 5.0. The whole system will be
|
|
barostated at 1.0.
|
|
|
|
In order to avoid the flying ice cube problem (irreversible transfer
|
|
of linear momentum to the center of mass of the system), you may need
|
|
to add a {fix momentum} command like such as
|
|
|
|
fix fMOMENTUM all momentum 100 linear 1 1 1 :pre
|
|
|
|
:line
|
|
|
|
[Restart, fix_modify, output, run start/stop, minimize info:]
|
|
|
|
No information about this fix is written to "binary restart
|
|
files"_restart.html.
|
|
|
|
[Restrictions:] none
|
|
|
|
[Related commands:]
|
|
|
|
"fix drude"_fix_drude.html,
|
|
"fix langevin/drude"_fix_langevin_drude.html,
|
|
"compute temp/drude"_compute_temp_drude.html,
|
|
"pair_style thole"_pair_thole.html
|
|
|
|
[Default:] none
|
|
|
|
:line
|
|
|
|
:link(Lamoureux)
|
|
[(Lamoureux)] Lamoureux and Roux, J Chem Phys, 119, 3025-3039 (2003).
|