md.methods.thermostats#
Overview
The Berendsen thermostat. |
|
The Bussi-Donadio-Parrinello thermostat. |
|
The Nosé-Hoover thermostat. |
|
Base thermostat object class. |
Details
Provide classes for thermostatting simulations.
The thermostat classes are for use with hoomd.md.methods.ConstantVolume
and
hoomd.md.methods.ConstantPressure
.
Important
Ensure that your initial condition includes non-zero particle velocities and angular momenta (when appropriate). The coupling between the thermostat and the velocities / angular momenta occurs via multiplication, so the thermostat cannot convert a zero velocity into a non-zero one except through particle collisions.
Example
simulation.state.thermalize_particle_momenta(
filter=hoomd.filter.All(),
kT=1.5)
- class hoomd.md.methods.thermostats.Berendsen(kT, tau)#
The Berendsen thermostat.
- Parameters:
kT (hoomd.variant.variant_like) – Temperature of the simulation. \([\mathrm{energy}]\)
tau (float) – Thermostat time constant. \([\mathrm{time}]\)
Berendsen
rescales the velocities of all particles on each time step. The rescaling is performed so that the difference in the current temperature from the set point decays exponentially:\[\frac{dT_\mathrm{cur}}{dt} = \frac{T - T_\mathrm{cur}}{\tau}\]Attention
Berendsen
does NOT sample the correct distribution of kinetic energies.See also
Example:
berendsen = hoomd.md.methods.thermostats.Berendsen(kT=1.5, tau=simulation.operations.integrator.dt * 10_000) simulation.operations.integrator.methods[0].thermostat = berendsen
- kT#
Temperature of the simulation. \([energy]\)
Examples:
berendsen.kT = 1.0
berendsen.kT = hoomd.variant.Ramp(A=1.0, B=2.0, t_start=0, t_ramp=1_000_000)
- class hoomd.md.methods.thermostats.Bussi(kT)#
The Bussi-Donadio-Parrinello thermostat.
- Parameters:
kT (hoomd.variant.variant_like) – Temperature set point for the thermostat \([\mathrm{energy}]\).
Provides temperature control by rescaling the velocity by a factor taken from the canonical velocity distribution. On each timestep, velocities are rescaled by a factor \(\alpha=\sqrt{K_t / K}\), where \(K\) is the current kinetic energy, and \(K_t\) is chosen randomly from the distribution
\[P(K_t) \propto K_t^{N_f/2 - 1} \exp(-K_t / kT)\]where \(N_f\) is the number of degrees of freedom thermalized.
See also
Example:
bussi = hoomd.md.methods.thermostats.Bussi(kT=1.5) simulation.operations.integrator.methods[0].thermostat = bussi
- kT#
Temperature set point for the thermostat \([\mathrm{energy}]\).
Examples:
bussi.kT = 1.0
bussi.kT = hoomd.variant.Ramp(A=1.0, B=2.0, t_start=0, t_ramp=1_000_000)
- class hoomd.md.methods.thermostats.MTTK(kT, tau)#
The Nosé-Hoover thermostat.
Controls the system temperature using velocity rescaling with the Nosé-Hoover thermostat.
- Parameters:
kT (hoomd.variant.variant_like) – Temperature set point for the thermostat \([\mathrm{energy}]\).
tau (float) – Coupling constant for the thermostat \([\mathrm{time}]\)
The translational thermostat has a momentum \(\xi\) and position \(\eta\). The rotational thermostat has momentum \(\xi_{\mathrm{rot}}\) and position \(\eta_\mathrm{rot}\). Access these quantities using
translational_dof
androtational_dof
.Note
The coupling constant
tau
should be set within a reasonable range to avoid abrupt fluctuations in the kinetic temperature and to avoid long time to equilibration. The recommended value for most systems is \(\tau = 100 \delta t\).Examples:
mttk = hoomd.md.methods.thermostats.MTTK(kT=1.5, tau=simulation.operations.integrator.dt*100) simulation.operations.integrator.methods[0].thermostat = mttk
- kT#
Temperature set point for the thermostat \([\mathrm{energy}]\).
Examples:
mttk.kT = 1.0
mttk.kT = hoomd.variant.Ramp(A=1.0, B=2.0, t_start=0, t_ramp=1_000_000)
- translational_dof#
Additional degrees of freedom for the translational thermostat (\(\xi\), \(\eta\))
Save and restore the thermostat degrees of freedom when continuing simulations:
Examples:
Save before exiting:
numpy.save(file=path / 'translational_dof.npy', arr=mttk.translational_dof)
Load when continuing:
mttk = hoomd.md.methods.thermostats.MTTK(kT=1.5, tau=simulation.operations.integrator.dt*100) simulation.operations.integrator.methods[0].thermostat = mttk mttk.translational_dof = numpy.load( file=path / 'translational_dof.npy')
- rotational_dof#
Additional degrees of freedom for the rotational thermostat (\(\xi_\mathrm{rot}\), \(\eta_\mathrm{rot}\))
Save and restore the thermostat degrees of freedom when continuing simulations:
Examples:
Save before exiting:
numpy.save(file=path / 'rotational_dof.npy', arr=mttk.rotational_dof)
Load when continuing:
mttk = hoomd.md.methods.thermostats.MTTK(kT=1.5, tau=simulation.operations.integrator.dt*100) simulation.operations.integrator.methods[0].thermostat = mttk mttk.rotational_dof = numpy.load( file=path / 'rotational_dof.npy')
- property energy#
Energy the thermostat contributes to the Hamiltonian \([\mathrm{energy}]\).
Example:
logger.add(obj=mttk, quantities=['energy'])
(
Loggable
: category=”scalar”)
- thermalize_dof()#
Set the thermostat momenta to random values.
thermalize_dof
sets a random value for the momentum \(\xi\). WhenIntegrator.integrate_rotational_dof
isTrue
, it also sets a random value for the rotational thermostat momentum \(\xi_{\mathrm{rot}}\). Callthermalize_dof
to set a new random state for the thermostat.Example
mttk.thermalize_dof()
Important
You must call
Simulation.run
beforethermalize_dof
.See also
- class hoomd.md.methods.thermostats.Thermostat(kT)#
Base thermostat object class.
Note
Users should use the subclasses and not instantiate
Thermostat
directly.