NPTMartynaTobiasKlein¶
- class NPTMartynaTobiasKlein(initial_velocity=None, time_step=None, reservoir_temperature=None, thermostat_timescale=None, reservoir_pressure=None, barostat_timescale=None, coupling_mask=None, heating_rate=None, compression_rate=None, chain_length=None)¶
The NPTMartynaTobiasKlein integrator class which implements the barostat proposed by Martyna, Tobias, and Klein.
- Parameters:
initial_velocity (
ConfigurationVelocities
|ZeroVelocities
|MaxwellBoltzmannDistribution
) – A class that implements a distribution of initial velocities for the particles in the MD simulation. Default:MaxwellBoltzmannDistribution
time_step (PhysicalQuantity of type time) – The time-step interval used in the MD simulation. Default:
1 * fs
reservoir_temperature (PhysicalQuantity of type temperature | list) – The reservoir temperature in the simulation. Default:
300.0 * Kelvin
thermostat_timescale (PhysicalQuantity of type time) – The time constant for MTK temperature coupling. Default:
100.0 * fs
reservoir_pressure (PhysicalQuantity of type pressure) – The reservoir pressure in the simulation. The pressure can be given either as a scalar value, as a vector of length 3 denoting the hydrostatic components, as a vector of length 6 in Voigt notation, or as a 3x3 tensor. A scalar value will result in isotropic pressure coupling, whereas for all other representations, each pressure component will be coupled to the barostat independently. Default:
1.0 * bar
barostat_timescale (PhysicalQuantity of type time) – The time constant for MTK pressure coupling. Default:
1000.0 * fs
coupling_mask (array of bools) – The mask determining which elements of the stress tensor, the barostat should couple to. Can be given as a vector of length 3, denoting the hydrostatic components, as a vector of length 6 in Voigt notation, or as a 3x3 tensor. By default the barostat couples only to the diagonal elements. Default:
True
for diagonal elements,False
for shear components.heating_rate (PhysicalQuantity of type temperature/time | None) – The heating rate of the target temperature. A value of None disables the heating of the system. Default:
None
compression_rate (PhysicalQuantity of type pressure/time | None) – The compression rate of the target pressure. Default:
0.0 * bar / fs
chain_length (int) – The number of subsequent thermostats. Default:
3
- isotropicCoupling()¶
- Returns:
Whether the barostat applies isotropic or anisotropic pressure coupling.
- Return type:
bool
- kineticEnergy(configuration)¶
- Parameters:
configuration (DistributedConfiguration) – The current configuration to calculate the kinetic energy of.
- Returns:
The kinetic energy of the current configuration.
- Return type:
PhysicalQuantity of type energy
- thermostats()¶
- Returns:
The list of thermostats.
- Return type:
list
- timeStep()¶
- Returns:
The time step.
- Return type:
PhysicalQuantity of type time
- uniqueString()¶
Return a unique string representing the state of the object.
Usage Example¶
Perform a molecular dynamics run of 50 steps on FCC Si, using the MartynaTobiasKlein barostat with isotropic pressure coupling:
# Set up configuration
bulk_configuration = BulkConfiguration(
bravais_lattice=FaceCenteredCubic(5.4306*Angstrom),
elements=[Silicon, Silicon],
fractional_coordinates=[[0.0, 0.0, 0.0], [0.25, 0.25, 0.25]]
)
# Set calculator
calculator = TremoloXCalculator(parameters=Tersoff_Si_1988b())
bulk_configuration.setCalculator(calculator)
# Set up a MTK-barostat with isotropic pressure coupling.
method = NPTMartynaTobiasKlein(
time_step=1*femtoSecond,
reservoir_temperature=300*Kelvin,
thermostat_timescale=100*femtoSecond,
reservoir_pressure=1.0*bar,
barostat_timescale=500.0*femtoSecond,
heating_rate=0*Kelvin/picoSecond,
compression_rate=0.0*bar/picoSecond,
chain_length=3,
initial_velocity=None
)
# Run MD simulation
md_trajectory = MolecularDynamics(
bulk_configuration,
constraints=[],
trajectory_filename='trajectory.nc',
steps=50,
log_interval=10,
method=method
)
Apply anisotropic pressure coupling only to the zz
-direction of the pressure tensor.
method = NPTMartynaTobiasKlein(
time_step=1*femtoSecond,
reservoir_temperature=300*Kelvin,
thermostat_timescale=100*femtoSecond,
reservoir_pressure=[0.0, 0.0, 10.0]*GPa,
barostat_timescale=500.0*femtoSecond,
heating_rate=0*Kelvin/picoSecond,
coupling_mask=[False, False, True, False, False, False],
compression_rate=0.0*bar/picoSecond,
chain_length=3,
initial_velocity=None
)
Notes¶
The MartynaTobiasKlein barostat can be used to simulate a canonical NPT-ensemble. Similar to the NVTNoseHoover algorithm, chains of subsequent thermostats and barostats are used to suppress large temperature and pressure oscillations. The equations of motion are taken from Ref. [1], whereas the integration algorithm is implemented as described in Ref [2].
If a scalar
reservoir_pressure
value is given, isotropic pressure coupling is applied, i.e. all cell vectors are rescaled by the same factor, and the isotropic pressure \(P=1/3 (P_{xx} + P_{yy} + P_{zz})\) is used.If a pressure vector (of length 3 or 6, in Voigt notation), or a 3x3-tensor is given as
reservoir_pressure
, anisotropic pressure coupling is applied, meaning that each degree of freedom of the cell vectors will be rescaled independently.
You can enable/disable the coupling to selected components of the pressure tensor via the parameter
coupling_matrix
. This parameter only has an effect with anisotropic pressure coupling.By default, the barostat couples only to the hydrostatic pressure, i.e. the diagonal elements of the pressure tensor.
If a non-zero
heating_rate
is specified, the reservoir temperature will be changed linearly during the simulation, according to the specified heating rate.If a non-zero
compression_rate
is specified, the reservoir pressure will be changed linearly during the simulation, according to the specified compression rate.