git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@13683 f3b2605a-c512-4ea7-a41b-209d697bcdaa
This commit is contained in:
232
doc/fix_qbmsst.html
Normal file
232
doc/fix_qbmsst.html
Normal file
@ -0,0 +1,232 @@
|
||||
<HTML>
|
||||
<CENTER><A HREF = "http://lammps.sandia.gov">LAMMPS WWW Site</A> - <A HREF = "Manual.html">LAMMPS Documentation</A> - <A HREF = "Section_commands.html#comm">LAMMPS Commands</A>
|
||||
</CENTER>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<HR>
|
||||
|
||||
<H3>fix qbmsst command
|
||||
</H3>
|
||||
<P><B>Syntax:</B>
|
||||
</P>
|
||||
<PRE>fix ID group-ID qbmsst dir shockvel keyword value ...
|
||||
</PRE>
|
||||
<UL><LI>ID, group-ID are documented in <A HREF = "fix.html">fix</A> command
|
||||
|
||||
<LI>qbmsst = style name of this fix
|
||||
|
||||
<LI>dir = <I>x</I> or <I>y</I> or <I>z</I>
|
||||
|
||||
<LI>shockvel = shock velocity (strictly positive, velocity units)
|
||||
|
||||
<LI>zero or more keyword/value pairs may be appended
|
||||
|
||||
<LI>keyword = <I>q</I> or <I>mu</I> or <I>p0</I> or <I>v0</I> or <I>e0</I> or <I>tscale</I> or <I>damp</I> or <I>seed</I>or <I>f_max</I> or <I>N_f</I> or <I>eta</I> or <I>beta</I> or <I>T_init</I>
|
||||
|
||||
<PRE> <I>q</I> value = cell mass-like parameter (mass^2/distance^4 units)
|
||||
<I>mu</I> value = artificial viscosity (mass/distance/time units)
|
||||
<I>p0</I> value = initial pressure in the shock equations (pressure units)
|
||||
<I>v0</I> value = initial simulation cell volume in the shock equations (distance^3 units)
|
||||
<I>e0</I> value = initial total energy (energy units)
|
||||
<I>tscale</I> value = reduction in initial temperature (unitless fraction between 0.0 and 1.0)
|
||||
<I>damp</I> value = damping parameter (time units) inverse of friction <i>γ</i>
|
||||
<I>seed</I> value = random number seed (positive integer)
|
||||
<I>f_max</I> value = upper cutoff frequency of the vibration spectrum (1/time units)
|
||||
<I>N_f</I> value = number of frequency bins (positive integer)
|
||||
<I>eta</I> value = coupling constant between the shock system and the quantum thermal bath (positive unitless)
|
||||
<I>beta</I> value = the quantum temperature is updated every beta time steps (positive integer)
|
||||
<I>T_init</I> value = quantum temperature for the initial state (temperature units)
|
||||
</PRE>
|
||||
|
||||
</UL>
|
||||
<P><B>Examples:</B>
|
||||
</P>
|
||||
<PRE>fix 1 all qbmsst z 0.122 q 25 mu 0.9 tscale 0.01 damp 200 seed 35082 f_max 0.3 N_f 100 eta 1 beta 400 T_init 110 (liquid methane modeled with the REAX force field, real units)
|
||||
fix 2 all qbmsst z 72 q 40 tscale 0.05 damp 1 seed 47508 f_max 120.0 N_f 100 eta 1.0 beta 500 T_init 300 (quartz modeled with the BKS force field, metal units)
|
||||
</PRE>
|
||||
<P>Two example input scripts are given, including shocked alpha quartz
|
||||
and shocked liquid methane. The input script first equilibrate an
|
||||
initial state with the quantum thermal bath at the target temperature
|
||||
and then apply the qbmsst to simulate shock compression with quantum
|
||||
nuclear correction. The following two figures plot related quantities
|
||||
for shocked alpha quartz.
|
||||
</P>
|
||||
<CENTER><IMG SRC = "JPG/qbmsst_init.jpg">
|
||||
</CENTER>
|
||||
<P>Figure 1. Classical temperature <i>T</i><sup>cl</sup> = ∑
|
||||
<i>m<sub>i</sub>v<sub>i</sub><sup>2</sup>/3Nk</i><sub>B</sub> vs. time
|
||||
for coupling the alpha quartz initial state with the quantum thermal
|
||||
bath at target quantum temperature <i>T</i><sup>qm</sup> = 300 K. The
|
||||
NpH ensemble is used for time integration while QTB provides the
|
||||
colored random force. <i>T</i><sup>cl</sup> converges at the timescale
|
||||
of <I>damp</I> which is set to be 1 ps.
|
||||
</P>
|
||||
<CENTER><IMG SRC = "JPG/qbmsst_shock.jpg">
|
||||
</CENTER>
|
||||
<P>Figure 2. Quantum temperature and pressure vs. time for simulating
|
||||
shocked alpha quartz with the QBMSST. The shock propagates along the z
|
||||
direction. Restart of the QBMSST command is demonstrated in the
|
||||
example input script. Thermodynamic quantities stay continuous before
|
||||
and after the restart.
|
||||
</P>
|
||||
<P><B>Description:</B>
|
||||
</P>
|
||||
<P>This command performs the Quantum-Bath coupled Multi-Scale Shock
|
||||
Technique (QBMSST) integration. See <A HREF = "#Qi">(Qi)</A> for a detailed
|
||||
description of this method. The QBMSST provides description of the
|
||||
thermodynamics and kinetics of shock processes while incorporating
|
||||
quantum nuclear effects. The <I>shockvel</I> setting determines the steady
|
||||
shock velocity that will be simulated along direction <I>dir</I>.
|
||||
</P>
|
||||
<P>Quantum nuclear effects <A HREF = "fix_qtb.html">(fix qtb)</A> can be crucial
|
||||
especially when the temperature of the initial state is below the
|
||||
classical limit or there is a great change in the zero point energies
|
||||
between the initial and final states. Theoretical post processing
|
||||
quantum corrections of shock compressed water and methane have been
|
||||
reported as much as 30% of the temperatures <A HREF = "#Goldman">(Goldman)</A>. A
|
||||
self-consistent method that couples the shock to a quantum thermal
|
||||
bath described by a colored noise Langevin thermostat has been
|
||||
developed by Qi et al <A HREF = "#Qi">(Qi)</A> and applied to shocked methane. The
|
||||
onset of chemistry is reported to be at a pressure on the shock
|
||||
Hugoniot that is 40% lower than observed with classical molecular
|
||||
dynamics.
|
||||
</P>
|
||||
<P>It is highly recommended that the system be already in an equilibrium
|
||||
state with a quantum thermal bath at temperature of <I>T_init</I>. The fix
|
||||
command <A HREF = "fix_qtb.html">fix qtb</A> at constant temperature <I>T_init</I> could
|
||||
be used before applying this command to introduce self-consistent
|
||||
quantum nuclear effects into the initial state.
|
||||
</P>
|
||||
<P>The parameters <I>q</I>, <I>mu</I>, <I>e0</I>, <I>p0</I>, <I>v0</I> and <I>tscale</I> are described
|
||||
in the command <A HREF = "fix_msst.html">fix msst</A>. The values of <I>e0</I>, <I>p0</I>, or
|
||||
<I>v0</I> will be calculated on the first step if not specified. The
|
||||
parameter of <I>damp</I>, <I>f_max</I>, and <I>N_f</I> are described in the command
|
||||
<A HREF = "fix_qtb.html">fix qtb</A>.
|
||||
</P>
|
||||
<P>The fix qbmsst command couples the shock system to a quantum thermal
|
||||
bath with a rate that is proportional to the change of the total
|
||||
energy of the shock system, <i>etot</i> - <i>etot</i><sub>0</sub>.
|
||||
Here <i>etot</i> consists of both the system energy and a thermal
|
||||
term, see <A HREF = "#Qi">(Qi)</A>, and <i>etot</i><sub>0</sub> = <I>e0</I> is the
|
||||
initial total energy.
|
||||
</P>
|
||||
<P>The <I>eta</I> (<i>η</i>) parameter is a unitless coupling constant
|
||||
between the shock system and the quantum thermal bath. A small <I>eta</I>
|
||||
value cannot adjust the quantum temperature fast enough during the
|
||||
temperature ramping period of shock compression while large <I>eta</I>
|
||||
leads to big temperature oscillation. A value of <I>eta</I> between 0.3 and
|
||||
1 is usually appropriate for simulating most systems under shock
|
||||
compression. We observe that different values of <I>eta</I> lead to almost
|
||||
the same final thermodynamic state behind the shock, as expected.
|
||||
</P>
|
||||
<P>The quantum temperature is updated every <I>beta</I> (<i>β</i>) steps
|
||||
with an integration time interval <I>beta</I> times longer than the
|
||||
simulation time step. In that case, <i>etot</i> is taken as its
|
||||
average over the past <I>beta</I> steps. The temperature of the quantum
|
||||
thermal bath <i>T</i><sup>qm</sup> changes dynamically according to
|
||||
the following equation where Δ<i>t</i> is the MD time step and
|
||||
<i>γ</i> is the friction constant which is equal to the inverse
|
||||
of the <I>damp</I> parameter.
|
||||
</P>
|
||||
<center><font size="4"> <i>dT</i><sup>qm</sup>/<i>dt =
|
||||
γη</i>∑<i><sup>β</sup><sub>l =
|
||||
1</sub></i>[<i>etot</i>(<i>t-l</i>Δ<i>t</i>)-<i>etot</i><sub>0</sub>]/<i>3βNk</i><sub>B</sub>
|
||||
</font></center>
|
||||
|
||||
<P>The parameter <I>T_init</I> is the initial temperature of the quantum
|
||||
thermal bath and the system before shock loading.
|
||||
</P>
|
||||
<P>For all pressure styles, the simulation box stays orthorhombic in
|
||||
shape. Parrinello-Rahman boundary conditions (tilted box) are
|
||||
supported by LAMMPS, but are not implemented for QBMSST.
|
||||
</P>
|
||||
<HR>
|
||||
|
||||
<P><B>Restart, fix_modify, output, run start/stop, minimize info:</B>
|
||||
</P>
|
||||
<P>Because the state of the random number generator is not written to
|
||||
<A HREF = "restart.html">binary restart files</A>, this fix cannot be restarted
|
||||
"exactly" in an uninterrupted fashion. However, in a statistical
|
||||
sense, a restarted simulation should produce similar behaviors of the
|
||||
system as if it is not interrupted. To achieve such a restart, one
|
||||
should write explicitly the same value for <I>q</I>, <I>mu</I>, <I>damp</I>, <I>f_max</I>,
|
||||
<I>N_f</I>, <I>eta</I>, and <I>beta</I> and set <I>tscale</I> = 0 if the system is
|
||||
compressed during the first run.
|
||||
</P>
|
||||
<P>The progress of the QBMSST can be monitored by printing the global
|
||||
scalar and global vector quantities computed by the fix. The global
|
||||
vector contains five values in this order:
|
||||
</P>
|
||||
<P>[<I>dhugoniot</I>, <I>drayleigh</I>, <I>lagrangian_speed</I>, <I>lagrangian_position</I>,
|
||||
<I>quantum_temperature</I>]
|
||||
</P>
|
||||
<OL><LI><I>dhugoniot</I> is the departure from the Hugoniot (temperature units).
|
||||
<LI><I>drayleigh</I> is the departure from the Rayleigh line (pressure units).
|
||||
<LI><I>lagrangian_speed</I> is the laboratory-frame Lagrangian speed (particle velocity) of the computational cell (velocity units).
|
||||
<LI><I>lagrangian_position</I> is the computational cell position in the reference frame moving at the shock speed. This is the distance of the computational cell behind the shock front.
|
||||
<LI><I>quantum_temperature</I> is the temperature of the quantum thermal bath <i>T</i><sup>qm</sup>.
|
||||
</OL>
|
||||
<P>To print these quantities to the log file with descriptive column
|
||||
headers, the following LAMMPS commands are suggested. Here the
|
||||
<A HREF = "fix_modify.html">fix_modify</A> energy command is also enabled to allow
|
||||
the thermo keyword <I>etotal</I> to print the quantity <i>etot</i>. See
|
||||
also the <A HREF = "thermo_style.html">thermo_style</A> command.
|
||||
</P>
|
||||
<PRE>fix fix_id all msst z
|
||||
fix_modify fix_id energy yes
|
||||
variable dhug equal f_fix_id[1]
|
||||
variable dray equal f_fix_id[2]
|
||||
variable lgr_vel equal f_fix_id[3]
|
||||
variable lgr_pos equal f_fix_id[4]
|
||||
variable T_qm equal f_fix_id[5]
|
||||
thermo_style custom step temp ke pe lz pzz etotal v_dhug v_dray v_lgr_vel v_lgr_pos v_T_qm f_fix_id
|
||||
</PRE>
|
||||
<P>The global scalar under the entry f_fix_id is the quantity of thermo
|
||||
energy as an extra part of <i>etot</i>. This global scalar and the
|
||||
vector of 5 quantities can be accessed by various <A HREF = "Section_howto.html#howto_15">output
|
||||
commands</A>. It is worth noting that the
|
||||
temp keyword under the <A HREF = "thermo_style.html">thermo_style</A> command print
|
||||
the instantaneous classical temperature <i>T</i><sup>cl</sup> as
|
||||
described in the command <A HREF = "fix_qtb.html">fix qtb</A>.
|
||||
</P>
|
||||
<HR>
|
||||
|
||||
<P><B>Restrictions:</B>
|
||||
</P>
|
||||
<P>This fix style is part of the USER-QTB package. It is only enabled if
|
||||
LAMMPS was built with that package. See the <A HREF = "Section_start.html#start_3">Making
|
||||
LAMMPS</A> section for more info.
|
||||
</P>
|
||||
<P>All cell dimensions must be periodic. This fix can not be used with a
|
||||
triclinic cell. The QBMSST fix has been tested only for the group-ID
|
||||
all.
|
||||
</P>
|
||||
<HR>
|
||||
|
||||
<P><B>Related commands:</B>
|
||||
</P>
|
||||
<P><A HREF = "fix_qtb.html">fix qtb</A>, <A HREF = "fix_msst.html">fix msst</A>
|
||||
</P>
|
||||
<HR>
|
||||
|
||||
<P><B>Default:</B>
|
||||
</P>
|
||||
<P>The keyword defaults are q = 10, mu = 0, tscale = 0.01, damp = 1, seed
|
||||
= 880302, f_max = 200.0, N_f = 100, eta = 1.0, beta = 100, and
|
||||
T_init=300.0. e0, p0, and v0 are calculated on the first step.
|
||||
</P>
|
||||
<HR>
|
||||
|
||||
<A NAME = "Goldman"></A>
|
||||
|
||||
<P><B>(Goldman)</B> Goldman, Reed and Fried, J. Chem. Phys. 131, 204103 (2009)
|
||||
</P>
|
||||
<A NAME = "Qi"></A>
|
||||
|
||||
<P><B>(Qi)</B> Qi and Reed, J. Phys. Chem. A 116, 10451 (2012).
|
||||
</P>
|
||||
</HTML>
|
||||
219
doc/fix_qbmsst.txt
Normal file
219
doc/fix_qbmsst.txt
Normal file
@ -0,0 +1,219 @@
|
||||
"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 qbmsst command :h3
|
||||
|
||||
[Syntax:]
|
||||
|
||||
fix ID group-ID qbmsst dir shockvel keyword value ... :pre
|
||||
|
||||
ID, group-ID are documented in "fix"_fix.html command :ulb,l
|
||||
qbmsst = style name of this fix :l
|
||||
dir = {x} or {y} or {z} :l
|
||||
shockvel = shock velocity (strictly positive, velocity units) :l
|
||||
zero or more keyword/value pairs may be appended :l
|
||||
keyword = {q} or {mu} or {p0} or {v0} or {e0} or {tscale} or {damp} or {seed}or {f_max} or {N_f} or {eta} or {beta} or {T_init} :l
|
||||
|
||||
{q} value = cell mass-like parameter (mass^2/distance^4 units)
|
||||
{mu} value = artificial viscosity (mass/distance/time units)
|
||||
{p0} value = initial pressure in the shock equations (pressure units)
|
||||
{v0} value = initial simulation cell volume in the shock equations (distance^3 units)
|
||||
{e0} value = initial total energy (energy units)
|
||||
{tscale} value = reduction in initial temperature (unitless fraction between 0.0 and 1.0)
|
||||
{damp} value = damping parameter (time units) inverse of friction <i>γ</i>
|
||||
{seed} value = random number seed (positive integer)
|
||||
{f_max} value = upper cutoff frequency of the vibration spectrum (1/time units)
|
||||
{N_f} value = number of frequency bins (positive integer)
|
||||
{eta} value = coupling constant between the shock system and the quantum thermal bath (positive unitless)
|
||||
{beta} value = the quantum temperature is updated every beta time steps (positive integer)
|
||||
{T_init} value = quantum temperature for the initial state (temperature units) :pre
|
||||
:ule
|
||||
|
||||
[Examples:]
|
||||
|
||||
fix 1 all qbmsst z 0.122 q 25 mu 0.9 tscale 0.01 damp 200 seed 35082 f_max 0.3 N_f 100 eta 1 beta 400 T_init 110 (liquid methane modeled with the REAX force field, real units)
|
||||
fix 2 all qbmsst z 72 q 40 tscale 0.05 damp 1 seed 47508 f_max 120.0 N_f 100 eta 1.0 beta 500 T_init 300 (quartz modeled with the BKS force field, metal units) :pre
|
||||
|
||||
Two example input scripts are given, including shocked alpha quartz
|
||||
and shocked liquid methane. The input script first equilibrate an
|
||||
initial state with the quantum thermal bath at the target temperature
|
||||
and then apply the qbmsst to simulate shock compression with quantum
|
||||
nuclear correction. The following two figures plot related quantities
|
||||
for shocked alpha quartz.
|
||||
|
||||
:c,image(JPG/qbmsst_init.jpg)
|
||||
|
||||
Figure 1. Classical temperature <i>T</i><sup>cl</sup> = ∑
|
||||
<i>m<sub>i</sub>v<sub>i</sub><sup>2</sup>/3Nk</i><sub>B</sub> vs. time
|
||||
for coupling the alpha quartz initial state with the quantum thermal
|
||||
bath at target quantum temperature <i>T</i><sup>qm</sup> = 300 K. The
|
||||
NpH ensemble is used for time integration while QTB provides the
|
||||
colored random force. <i>T</i><sup>cl</sup> converges at the timescale
|
||||
of {damp} which is set to be 1 ps.
|
||||
|
||||
:c,image(JPG/qbmsst_shock.jpg)
|
||||
|
||||
Figure 2. Quantum temperature and pressure vs. time for simulating
|
||||
shocked alpha quartz with the QBMSST. The shock propagates along the z
|
||||
direction. Restart of the QBMSST command is demonstrated in the
|
||||
example input script. Thermodynamic quantities stay continuous before
|
||||
and after the restart.
|
||||
|
||||
[Description:]
|
||||
|
||||
This command performs the Quantum-Bath coupled Multi-Scale Shock
|
||||
Technique (QBMSST) integration. See "(Qi)"_#Qi for a detailed
|
||||
description of this method. The QBMSST provides description of the
|
||||
thermodynamics and kinetics of shock processes while incorporating
|
||||
quantum nuclear effects. The {shockvel} setting determines the steady
|
||||
shock velocity that will be simulated along direction {dir}.
|
||||
|
||||
Quantum nuclear effects "(fix qtb)"_fix_qtb.html can be crucial
|
||||
especially when the temperature of the initial state is below the
|
||||
classical limit or there is a great change in the zero point energies
|
||||
between the initial and final states. Theoretical post processing
|
||||
quantum corrections of shock compressed water and methane have been
|
||||
reported as much as 30% of the temperatures "(Goldman)"_#Goldman. A
|
||||
self-consistent method that couples the shock to a quantum thermal
|
||||
bath described by a colored noise Langevin thermostat has been
|
||||
developed by Qi et al "(Qi)"_#Qi and applied to shocked methane. The
|
||||
onset of chemistry is reported to be at a pressure on the shock
|
||||
Hugoniot that is 40% lower than observed with classical molecular
|
||||
dynamics.
|
||||
|
||||
It is highly recommended that the system be already in an equilibrium
|
||||
state with a quantum thermal bath at temperature of {T_init}. The fix
|
||||
command "fix qtb"_fix_qtb.html at constant temperature {T_init} could
|
||||
be used before applying this command to introduce self-consistent
|
||||
quantum nuclear effects into the initial state.
|
||||
|
||||
The parameters {q}, {mu}, {e0}, {p0}, {v0} and {tscale} are described
|
||||
in the command "fix msst"_fix_msst.html. The values of {e0}, {p0}, or
|
||||
{v0} will be calculated on the first step if not specified. The
|
||||
parameter of {damp}, {f_max}, and {N_f} are described in the command
|
||||
"fix qtb"_fix_qtb.html.
|
||||
|
||||
The fix qbmsst command couples the shock system to a quantum thermal
|
||||
bath with a rate that is proportional to the change of the total
|
||||
energy of the shock system, <i>etot</i> - <i>etot</i><sub>0</sub>.
|
||||
Here <i>etot</i> consists of both the system energy and a thermal
|
||||
term, see "(Qi)"_#Qi, and <i>etot</i><sub>0</sub> = {e0} is the
|
||||
initial total energy.
|
||||
|
||||
The {eta} (<i>η</i>) parameter is a unitless coupling constant
|
||||
between the shock system and the quantum thermal bath. A small {eta}
|
||||
value cannot adjust the quantum temperature fast enough during the
|
||||
temperature ramping period of shock compression while large {eta}
|
||||
leads to big temperature oscillation. A value of {eta} between 0.3 and
|
||||
1 is usually appropriate for simulating most systems under shock
|
||||
compression. We observe that different values of {eta} lead to almost
|
||||
the same final thermodynamic state behind the shock, as expected.
|
||||
|
||||
The quantum temperature is updated every {beta} (<i>β</i>) steps
|
||||
with an integration time interval {beta} times longer than the
|
||||
simulation time step. In that case, <i>etot</i> is taken as its
|
||||
average over the past {beta} steps. The temperature of the quantum
|
||||
thermal bath <i>T</i><sup>qm</sup> changes dynamically according to
|
||||
the following equation where Δ<i>t</i> is the MD time step and
|
||||
<i>γ</i> is the friction constant which is equal to the inverse
|
||||
of the {damp} parameter.
|
||||
|
||||
<center><font size="4"> <i>dT</i><sup>qm</sup>/<i>dt =
|
||||
γη</i>∑<i><sup>β</sup><sub>l =
|
||||
1</sub></i>[<i>etot</i>(<i>t-l</i>Δ<i>t</i>)-<i>etot</i><sub>0</sub>]/<i>3βNk</i><sub>B</sub>
|
||||
</font></center>
|
||||
|
||||
The parameter {T_init} is the initial temperature of the quantum
|
||||
thermal bath and the system before shock loading.
|
||||
|
||||
For all pressure styles, the simulation box stays orthorhombic in
|
||||
shape. Parrinello-Rahman boundary conditions (tilted box) are
|
||||
supported by LAMMPS, but are not implemented for QBMSST.
|
||||
|
||||
:line
|
||||
|
||||
[Restart, fix_modify, output, run start/stop, minimize info:]
|
||||
|
||||
Because the state of the random number generator is not written to
|
||||
"binary restart files"_restart.html, this fix cannot be restarted
|
||||
"exactly" in an uninterrupted fashion. However, in a statistical
|
||||
sense, a restarted simulation should produce similar behaviors of the
|
||||
system as if it is not interrupted. To achieve such a restart, one
|
||||
should write explicitly the same value for {q}, {mu}, {damp}, {f_max},
|
||||
{N_f}, {eta}, and {beta} and set {tscale} = 0 if the system is
|
||||
compressed during the first run.
|
||||
|
||||
The progress of the QBMSST can be monitored by printing the global
|
||||
scalar and global vector quantities computed by the fix. The global
|
||||
vector contains five values in this order:
|
||||
|
||||
\[{dhugoniot}, {drayleigh}, {lagrangian_speed}, {lagrangian_position},
|
||||
{quantum_temperature}\]
|
||||
|
||||
{dhugoniot} is the departure from the Hugoniot (temperature units).
|
||||
{drayleigh} is the departure from the Rayleigh line (pressure units).
|
||||
{lagrangian_speed} is the laboratory-frame Lagrangian speed (particle velocity) of the computational cell (velocity units).
|
||||
{lagrangian_position} is the computational cell position in the reference frame moving at the shock speed. This is the distance of the computational cell behind the shock front.
|
||||
{quantum_temperature} is the temperature of the quantum thermal bath <i>T</i><sup>qm</sup>. :ol
|
||||
|
||||
To print these quantities to the log file with descriptive column
|
||||
headers, the following LAMMPS commands are suggested. Here the
|
||||
"fix_modify"_fix_modify.html energy command is also enabled to allow
|
||||
the thermo keyword {etotal} to print the quantity <i>etot</i>. See
|
||||
also the "thermo_style"_thermo_style.html command.
|
||||
|
||||
fix fix_id all msst z
|
||||
fix_modify fix_id energy yes
|
||||
variable dhug equal f_fix_id\[1\]
|
||||
variable dray equal f_fix_id\[2\]
|
||||
variable lgr_vel equal f_fix_id\[3\]
|
||||
variable lgr_pos equal f_fix_id\[4\]
|
||||
variable T_qm equal f_fix_id\[5\]
|
||||
thermo_style custom step temp ke pe lz pzz etotal v_dhug v_dray v_lgr_vel v_lgr_pos v_T_qm f_fix_id :pre
|
||||
|
||||
The global scalar under the entry f_fix_id is the quantity of thermo
|
||||
energy as an extra part of <i>etot</i>. This global scalar and the
|
||||
vector of 5 quantities can be accessed by various "output
|
||||
commands"_Section_howto.html#howto_15. It is worth noting that the
|
||||
temp keyword under the "thermo_style"_thermo_style.html command print
|
||||
the instantaneous classical temperature <i>T</i><sup>cl</sup> as
|
||||
described in the command "fix qtb"_fix_qtb.html.
|
||||
|
||||
:line
|
||||
|
||||
[Restrictions:]
|
||||
|
||||
This fix style is part of the USER-QTB package. It is only enabled if
|
||||
LAMMPS was built with that package. See the "Making
|
||||
LAMMPS"_Section_start.html#start_3 section for more info.
|
||||
|
||||
All cell dimensions must be periodic. This fix can not be used with a
|
||||
triclinic cell. The QBMSST fix has been tested only for the group-ID
|
||||
all.
|
||||
|
||||
:line
|
||||
|
||||
[Related commands:]
|
||||
|
||||
"fix qtb"_fix_qtb.html, "fix msst"_fix_msst.html
|
||||
|
||||
:line
|
||||
|
||||
[Default:]
|
||||
|
||||
The keyword defaults are q = 10, mu = 0, tscale = 0.01, damp = 1, seed
|
||||
= 880302, f_max = 200.0, N_f = 100, eta = 1.0, beta = 100, and
|
||||
T_init=300.0. e0, p0, and v0 are calculated on the first step.
|
||||
|
||||
:line
|
||||
|
||||
:link(Goldman)
|
||||
[(Goldman)] Goldman, Reed and Fried, J. Chem. Phys. 131, 204103 (2009)
|
||||
|
||||
:link(Qi)
|
||||
[(Qi)] Qi and Reed, J. Phys. Chem. A 116, 10451 (2012).
|
||||
194
doc/fix_qtb.html
Normal file
194
doc/fix_qtb.html
Normal file
@ -0,0 +1,194 @@
|
||||
<HTML>
|
||||
<CENTER><A HREF = "http://lammps.sandia.gov">LAMMPS WWW Site</A> - <A HREF = "Manual.html">LAMMPS Documentation</A> - <A HREF = "Section_commands.html#comm">LAMMPS Commands</A>
|
||||
</CENTER>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<HR>
|
||||
|
||||
<H3>fix qtb command
|
||||
</H3>
|
||||
<P><B>Syntax:</B>
|
||||
</P>
|
||||
<PRE>fix ID group-ID qtb keyword value ...
|
||||
</PRE>
|
||||
<UL><LI>ID, group-ID are documented in <A HREF = "fix.html">fix</A> command
|
||||
|
||||
<LI>qtb = style name of this fix
|
||||
|
||||
<LI>zero or more keyword/value pairs may be appended
|
||||
|
||||
<LI>keyword = <I>temp</I> or <I>damp</I> or <I>seed</I> or <I>f_max</I> or <I>N_f</I>
|
||||
|
||||
<PRE> <I>temp</I> value = target quantum temperature (temperature units)
|
||||
<I>damp</I> value = damping parameter (time units) inverse of friction <i>&gamma</i>;
|
||||
<I>seed</I> value = random number seed (positive integer)
|
||||
<I>f_max</I> value = upper cutoff frequency of the vibration spectrum (1/time units)
|
||||
<I>N_f</I> value = number of frequency bins (positive integer)
|
||||
</PRE>
|
||||
|
||||
</UL>
|
||||
<P><B>Examples:</B>
|
||||
</P>
|
||||
<PRE>fix 1 all nve
|
||||
fix 1 all qtb temp 110 damp 200 seed 35082 f_max 0.3 N_f 100 (liquid methane modeled with the REAX force field, real units)
|
||||
fix 2 all nph iso 1.01325 1.01325 1
|
||||
fix 2 all qtb temp 300 damp 1 seed 47508 f_max 120.0 N_f 100 (quartz modeled with the BKS force field, metal units)
|
||||
</PRE>
|
||||
<P><B>Description:</B>
|
||||
</P>
|
||||
<P>This command performs the quantum thermal bath scheme proposed by
|
||||
<A HREF = "#Dammak">(Dammak)</A> to include self-consistent quantum nuclear effects,
|
||||
when used in conjunction with the <A HREF = "fix_nve.html">fix nve</A> or <A HREF = "fix_nh.html">fix
|
||||
nph</A> commands.
|
||||
</P>
|
||||
<P>Classical molecular dynamics simulation does not include any quantum
|
||||
nuclear effect. Quantum treatment of the vibrational modes will
|
||||
introduce zero point energy into the system, alter the energy power
|
||||
spectrum and bias the heat capacity from the classical limit. Missing
|
||||
all the quantum nuclear effects, classical MD cannot model systems at
|
||||
temperatures lower than their classical limits. This effect is
|
||||
especially important for materials with a large population of hydrogen
|
||||
atoms and thus higher classical limits.
|
||||
</P>
|
||||
<P>The equation of motion implemented by this command follows a Langevin
|
||||
form:
|
||||
</P>
|
||||
<center><font size="4"><i> m<sub>i</sub>a<sub>i</sub> = f<sub>i</sub>
|
||||
+ R<sub>i</sub> -
|
||||
m<sub>i</sub>γv<sub>i</sub>. </i></font></center>
|
||||
|
||||
<P>Here <i>m<sub>i</sub></i>, <i>a<sub>i</sub></i>, <i>f<sub>i</sub>
|
||||
</i>, <i>R<sub>i</sub></i>, <i>γ</i> and <i>v<sub>i</sub> </i>
|
||||
represent mass, acceleration, force exerted by all other atoms, random
|
||||
force, frictional coefficient (the inverse of damping parameter damp),
|
||||
and velocity. The random force <i>R<sub>i</sub></i> is "colored" so
|
||||
that any vibrational mode with frequency <i>ω</i> will have a
|
||||
temperature-sensitive energy <i>θ</i>(<i>ω,T</i>) which
|
||||
resembles the energy expectation for a quantum harmonic oscillator
|
||||
with the same natural frequency:
|
||||
</P>
|
||||
<center><font size="4"> <i>θ</i>(<i>ω,T</i>) =
|
||||
ℏω/2 +
|
||||
ℏω[</i>exp(<i>ℏω/k</i><sub>B</sub><i>T</i>)<i>-1</i>]<i><sup>-1</sup></i>
|
||||
</font></center>
|
||||
|
||||
<P>To efficiently generate the random forces, we employ the method
|
||||
of <A HREF = "#Barrat">(Barrat)</A>, that circumvents the need to generate all
|
||||
random forces for all times before the simulation. The memory
|
||||
requirement of this approach is less demanding and independent
|
||||
of the simulation duration. Since the total random force <i>R</i><sub>tot</sub>
|
||||
does not necessarily vanish for a finite number of atoms,
|
||||
<i>R<sub>i</sub></i> is replaced by <i>R<sub>i</sub></i> - <i>R</i><sub>tot</sub>/<i>N</i><sub>tot</sub>
|
||||
to avoid collective motion of the system.
|
||||
</P>
|
||||
<P>The <I>temp</I> parameter sets the target quantum temperature. LAMMPS will
|
||||
still have an output temperature in its thermo style. That is the
|
||||
instantaneous classical temperature <i>T</i><sup>cl</sup> derived from
|
||||
the atom velocities at thermal equilibrium. A non-zero
|
||||
<i>T</i><sup>cl</sup> will be present even when the quantum
|
||||
temperature approaches zero. This is associated with zero-point energy
|
||||
at low temperatures.
|
||||
</P>
|
||||
<center><font size="4"> <i>T</i><sup>cl</sup> = ∑
|
||||
<i>m<sub>i</sub>v<sub>i</sub><sup>2</sup>/3Nk</i><sub>B</sub>
|
||||
</font></center>
|
||||
|
||||
<P>The <I>damp</I> parameter is specified in time units, and it equals the
|
||||
inverse of the frictional coefficient <i>γ</i>. <i>γ</i>
|
||||
should be as small as possible but slightly larger than the timescale
|
||||
of anharmonic coupling in the system which is about 10 ps to 100
|
||||
ps. When <i>γ</i> is too large, it gives an energy spectrum that
|
||||
differs from the desired Bose-Einstein spectrum. When <i>γ</i>
|
||||
is too small, the quantum thermal bath coupling to the system will be
|
||||
less significant than anharmonic effects, reducing to a classical
|
||||
limit. We find that setting <i>γ</i> between 5 THz and 1 THz
|
||||
could be appropriate depending on the system.
|
||||
</P>
|
||||
<P>The random number <I>seed</I> is a positive integer used to initiate a
|
||||
Marsaglia random number generator. Each processor uses the input seed
|
||||
to generate its own unique seed and its own stream of random
|
||||
numbers. Thus the dynamics of the system will not be identical on two
|
||||
runs on different numbers of processors.
|
||||
</P>
|
||||
<P>The <I>f_max</I> parameter truncate the noise frequency domain so that
|
||||
vibrational modes with frequencies higher than <I>f_max</I> will not be
|
||||
modulated. If we denote Δ<i>t</i> as the time interval for the
|
||||
MD integration, <I>f_max</I> is always reset by the code to make
|
||||
<i>α</i> = (int)(2<I>f_max</I>Δ<i>t</i>)<sup><i>-1</i></sup> a
|
||||
positive integer and print out relative information. An appropriate
|
||||
value for the cutoff frequency <I>f_max</I> would be around 2~3
|
||||
<i>f</i><sub>D</sub>, where <i>f</i><sub>D</sub> is the Debye
|
||||
frequency.
|
||||
</P>
|
||||
<P>The <I>N_f</I> parameter is the frequency grid size, the number of points
|
||||
from 0 to <I>f_max</I> in the frequency domain that will be
|
||||
sampled. <i>3×2</i> <I>N_f</I> per-atom random numbers are required
|
||||
in the random force generation and there could be as many atoms as in
|
||||
the whole simulation that can migrate into every individual
|
||||
processor. A larger <I>N_f</I> provides a more accurate sampling of the
|
||||
spectrum while consumes more memory. With fixed <I>f_max</I> and
|
||||
<i>γ</i>, <I>N_f</I> should be big enough to converge the classical
|
||||
temperature <i>T</i><sup>cl</sup> as a function of target quantum bath
|
||||
temperature. Memory usage per processor could be from 10 to 100
|
||||
Mbytes.
|
||||
</P>
|
||||
<P>IMPORTANT NOTE: Unlike the <A HREF = "fix_nh.html">fix nvt</A> command which
|
||||
performs Nose/Hoover thermostatting AND time integration, this fix
|
||||
does NOT perform time integration. It only modifies forces to a
|
||||
colored thermostat. Thus you must use a separate time integration fix,
|
||||
like <A HREF = "fix_nve.html">fix nve</A> or <A HREF = "fix_nh.html">fix nph</A> to actually
|
||||
update the velocities and positions of atoms (as shown in the
|
||||
examples). Likewise, this fix should not normally be used with other
|
||||
fixes or commands that also specify system temperatures , e.g. <A HREF = "fix_nh.html">fix
|
||||
nvt</A> and <A HREF = "fix_temp_rescale.html">fix temp/rescale</A>.
|
||||
</P>
|
||||
<HR>
|
||||
|
||||
<P><B>Restart, fix_modify, output, run start/stop, minimizie info:</B>
|
||||
</P>
|
||||
<P>No information about this fix is written to <A HREF = "restart.html">binary restart
|
||||
files</A>. Because the state of the random number generator
|
||||
is not saved in restart files, this means you cannot do "exact"
|
||||
restarts with this fix. However, in a statistical sense, a restarted
|
||||
simulation should produce similar behaviors of the system.
|
||||
</P>
|
||||
<P>This fix is not invoked during <A HREF = "minimize.html">energy minimization</A>.
|
||||
</P>
|
||||
<HR>
|
||||
|
||||
<P><B>Restrictions:</B>
|
||||
</P>
|
||||
<P>This fix style is part of the USER-QTB package. It is only enabled if
|
||||
LAMMPS was built with that package. See the <A HREF = "Section_start.html#start_3">Making
|
||||
LAMMPS</A> section for more info.
|
||||
</P>
|
||||
<HR>
|
||||
|
||||
<P><B>Related commands:</B>
|
||||
</P>
|
||||
<P><A HREF = "fix_nve.html">fix nve</A>, <A HREF = "fix_nh.html">fix nph</A>, <A HREF = "fix_langevin.html">fix
|
||||
langevin</A>, <A HREF = "fix_qbmsst.html">fix qbmsst</A>
|
||||
</P>
|
||||
<HR>
|
||||
|
||||
<P><B>Default:</B>
|
||||
</P>
|
||||
<P>The keyword defaults are temp = 300, damp = 1, seed = 880302,
|
||||
f_max=200.0 and N_f = 100.
|
||||
</P>
|
||||
<HR>
|
||||
|
||||
<A NAME = "Dammak"></A>
|
||||
|
||||
<P><B>(Dammak)</B> Dammak, Chalopin, Laroche, Hayoun, and Greffet, Phys Rev
|
||||
Lett, 103, 190601 (2009).
|
||||
</P>
|
||||
<A NAME = "Barrat"></A>
|
||||
|
||||
<P><B>(Barrat)</B> Barrat and Rodney, J. Stat. Phys, 144, 679 (2011).
|
||||
</P>
|
||||
</HTML>
|
||||
182
doc/fix_qtb.txt
Normal file
182
doc/fix_qtb.txt
Normal file
@ -0,0 +1,182 @@
|
||||
"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 qtb command :h3
|
||||
|
||||
[Syntax:]
|
||||
|
||||
fix ID group-ID qtb keyword value ... :pre
|
||||
|
||||
ID, group-ID are documented in "fix"_fix.html command :ulb,l
|
||||
qtb = style name of this fix :l
|
||||
zero or more keyword/value pairs may be appended :l
|
||||
keyword = {temp} or {damp} or {seed} or {f_max} or {N_f} :l
|
||||
{temp} value = target quantum temperature (temperature units)
|
||||
{damp} value = damping parameter (time units) inverse of friction <i>&gamma</i>;
|
||||
{seed} value = random number seed (positive integer)
|
||||
{f_max} value = upper cutoff frequency of the vibration spectrum (1/time units)
|
||||
{N_f} value = number of frequency bins (positive integer) :pre
|
||||
:ule
|
||||
|
||||
[Examples:]
|
||||
|
||||
fix 1 all nve
|
||||
fix 1 all qtb temp 110 damp 200 seed 35082 f_max 0.3 N_f 100 (liquid methane modeled with the REAX force field, real units)
|
||||
fix 2 all nph iso 1.01325 1.01325 1
|
||||
fix 2 all qtb temp 300 damp 1 seed 47508 f_max 120.0 N_f 100 (quartz modeled with the BKS force field, metal units) :pre
|
||||
|
||||
[Description:]
|
||||
|
||||
This command performs the quantum thermal bath scheme proposed by
|
||||
"(Dammak)"_#Dammak to include self-consistent quantum nuclear effects,
|
||||
when used in conjunction with the "fix nve"_fix_nve.html or "fix
|
||||
nph"_fix_nh.html commands.
|
||||
|
||||
Classical molecular dynamics simulation does not include any quantum
|
||||
nuclear effect. Quantum treatment of the vibrational modes will
|
||||
introduce zero point energy into the system, alter the energy power
|
||||
spectrum and bias the heat capacity from the classical limit. Missing
|
||||
all the quantum nuclear effects, classical MD cannot model systems at
|
||||
temperatures lower than their classical limits. This effect is
|
||||
especially important for materials with a large population of hydrogen
|
||||
atoms and thus higher classical limits.
|
||||
|
||||
The equation of motion implemented by this command follows a Langevin
|
||||
form:
|
||||
|
||||
<center><font size="4"><i> m<sub>i</sub>a<sub>i</sub> = f<sub>i</sub>
|
||||
+ R<sub>i</sub> -
|
||||
m<sub>i</sub>γv<sub>i</sub>. </i></font></center>
|
||||
|
||||
Here <i>m<sub>i</sub></i>, <i>a<sub>i</sub></i>, <i>f<sub>i</sub>
|
||||
</i>, <i>R<sub>i</sub></i>, <i>γ</i> and <i>v<sub>i</sub> </i>
|
||||
represent mass, acceleration, force exerted by all other atoms, random
|
||||
force, frictional coefficient (the inverse of damping parameter damp),
|
||||
and velocity. The random force <i>R<sub>i</sub></i> is "colored" so
|
||||
that any vibrational mode with frequency <i>ω</i> will have a
|
||||
temperature-sensitive energy <i>θ</i>(<i>ω,T</i>) which
|
||||
resembles the energy expectation for a quantum harmonic oscillator
|
||||
with the same natural frequency:
|
||||
|
||||
<center><font size="4"> <i>θ</i>(<i>ω,T</i>) =
|
||||
ℏω/2 +
|
||||
ℏω[</i>exp(<i>ℏω/k</i><sub>B</sub><i>T</i>)<i>-1</i>]<i><sup>-1</sup></i>
|
||||
</font></center>
|
||||
|
||||
To efficiently generate the random forces, we employ the method
|
||||
of "(Barrat)"_#Barrat, that circumvents the need to generate all
|
||||
random forces for all times before the simulation. The memory
|
||||
requirement of this approach is less demanding and independent
|
||||
of the simulation duration. Since the total random force <i>R</i><sub>tot</sub>
|
||||
does not necessarily vanish for a finite number of atoms,
|
||||
<i>R<sub>i</sub></i> is replaced by <i>R<sub>i</sub></i> - <i>R</i><sub>tot</sub>/<i>N</i><sub>tot</sub>
|
||||
to avoid collective motion of the system.
|
||||
|
||||
The {temp} parameter sets the target quantum temperature. LAMMPS will
|
||||
still have an output temperature in its thermo style. That is the
|
||||
instantaneous classical temperature <i>T</i><sup>cl</sup> derived from
|
||||
the atom velocities at thermal equilibrium. A non-zero
|
||||
<i>T</i><sup>cl</sup> will be present even when the quantum
|
||||
temperature approaches zero. This is associated with zero-point energy
|
||||
at low temperatures.
|
||||
|
||||
<center><font size="4"> <i>T</i><sup>cl</sup> = ∑
|
||||
<i>m<sub>i</sub>v<sub>i</sub><sup>2</sup>/3Nk</i><sub>B</sub>
|
||||
</font></center>
|
||||
|
||||
The {damp} parameter is specified in time units, and it equals the
|
||||
inverse of the frictional coefficient <i>γ</i>. <i>γ</i>
|
||||
should be as small as possible but slightly larger than the timescale
|
||||
of anharmonic coupling in the system which is about 10 ps to 100
|
||||
ps. When <i>γ</i> is too large, it gives an energy spectrum that
|
||||
differs from the desired Bose-Einstein spectrum. When <i>γ</i>
|
||||
is too small, the quantum thermal bath coupling to the system will be
|
||||
less significant than anharmonic effects, reducing to a classical
|
||||
limit. We find that setting <i>γ</i> between 5 THz and 1 THz
|
||||
could be appropriate depending on the system.
|
||||
|
||||
The random number {seed} is a positive integer used to initiate a
|
||||
Marsaglia random number generator. Each processor uses the input seed
|
||||
to generate its own unique seed and its own stream of random
|
||||
numbers. Thus the dynamics of the system will not be identical on two
|
||||
runs on different numbers of processors.
|
||||
|
||||
The {f_max} parameter truncate the noise frequency domain so that
|
||||
vibrational modes with frequencies higher than {f_max} will not be
|
||||
modulated. If we denote Δ<i>t</i> as the time interval for the
|
||||
MD integration, {f_max} is always reset by the code to make
|
||||
<i>α</i> = (int)(2{f_max}Δ<i>t</i>)<sup><i>-1</i></sup> a
|
||||
positive integer and print out relative information. An appropriate
|
||||
value for the cutoff frequency {f_max} would be around 2~3
|
||||
<i>f</i><sub>D</sub>, where <i>f</i><sub>D</sub> is the Debye
|
||||
frequency.
|
||||
|
||||
The {N_f} parameter is the frequency grid size, the number of points
|
||||
from 0 to {f_max} in the frequency domain that will be
|
||||
sampled. <i>3×2</i> {N_f} per-atom random numbers are required
|
||||
in the random force generation and there could be as many atoms as in
|
||||
the whole simulation that can migrate into every individual
|
||||
processor. A larger {N_f} provides a more accurate sampling of the
|
||||
spectrum while consumes more memory. With fixed {f_max} and
|
||||
<i>γ</i>, {N_f} should be big enough to converge the classical
|
||||
temperature <i>T</i><sup>cl</sup> as a function of target quantum bath
|
||||
temperature. Memory usage per processor could be from 10 to 100
|
||||
Mbytes.
|
||||
|
||||
IMPORTANT NOTE: Unlike the "fix nvt"_fix_nh.html command which
|
||||
performs Nose/Hoover thermostatting AND time integration, this fix
|
||||
does NOT perform time integration. It only modifies forces to a
|
||||
colored thermostat. Thus you must use a separate time integration fix,
|
||||
like "fix nve"_fix_nve.html or "fix nph"_fix_nh.html to actually
|
||||
update the velocities and positions of atoms (as shown in the
|
||||
examples). Likewise, this fix should not normally be used with other
|
||||
fixes or commands that also specify system temperatures , e.g. "fix
|
||||
nvt"_fix_nh.html and "fix temp/rescale"_fix_temp_rescale.html.
|
||||
|
||||
:line
|
||||
|
||||
[Restart, fix_modify, output, run start/stop, minimizie info:]
|
||||
|
||||
No information about this fix is written to "binary restart
|
||||
files"_restart.html. Because the state of the random number generator
|
||||
is not saved in restart files, this means you cannot do "exact"
|
||||
restarts with this fix. However, in a statistical sense, a restarted
|
||||
simulation should produce similar behaviors of the system.
|
||||
|
||||
This fix is not invoked during "energy minimization"_minimize.html.
|
||||
|
||||
:line
|
||||
|
||||
[Restrictions:]
|
||||
|
||||
This fix style is part of the USER-QTB package. It is only enabled if
|
||||
LAMMPS was built with that package. See the "Making
|
||||
LAMMPS"_Section_start.html#start_3 section for more info.
|
||||
|
||||
:line
|
||||
|
||||
[Related commands:]
|
||||
|
||||
"fix nve"_fix_nve.html, "fix nph"_fix_nh.html, "fix
|
||||
langevin"_fix_langevin.html, "fix qbmsst"_fix_qbmsst.html
|
||||
|
||||
:line
|
||||
|
||||
[Default:]
|
||||
|
||||
The keyword defaults are temp = 300, damp = 1, seed = 880302,
|
||||
f_max=200.0 and N_f = 100.
|
||||
|
||||
:line
|
||||
|
||||
:link(Dammak)
|
||||
[(Dammak)] Dammak, Chalopin, Laroche, Hayoun, and Greffet, Phys Rev
|
||||
Lett, 103, 190601 (2009).
|
||||
|
||||
:link(Barrat)
|
||||
[(Barrat)] Barrat and Rodney, J. Stat. Phys, 144, 679 (2011).
|
||||
Reference in New Issue
Block a user