Source code for MMTK.Environment
# This module defines environment objects for universes.
#
# Written by Konrad Hinsen
#
"""
Environment objects
Environment objects are objects that define a simulation system without
being composed of atoms. Examples are thermostats, barostats, external
fields, etc.
"""
__docformat__ = 'restructuredtext'
from Scientific import N
#
# The environment object base class
#
class EnvironmentObject(object):
is_environment_object = 1
def checkCompatibilityWith(self, other):
pass
def description(self):
return "o('Environment." + self.__class__.__name__ + \
`tuple(self.parameters)` + "')"
# Type check
def isEnvironmentObject(object):
return hasattr(object, 'is_environment_object')
#
# Nose thermostat class
#
[docs]class NoseThermostat(EnvironmentObject):
"""
Nose thermostat for Molecular Dynamics
A thermostat object can be added to a universe and will then
modify the integration algorithm to a simulation of an NVT
ensemble.
"""
def __init__(self, temperature, relaxation_time = 0.2):
"""
:param temperature: the temperature set by the thermostat
:type temperature: float
:param relaxation_time: the relaxation time of the
thermostat coordinate
:type relaxation_time: float
"""
self.arguments = (temperature, relaxation_time)
self.parameters = N.array([temperature, relaxation_time])
self.coordinates = N.array([0., 0.])
def setTemperature(self, temperature):
self.parameters[0] = temperature
def setRelaxationTime(self, t):
self.parameters[1] = t
def checkCompatibilityWith(self, other):
if other.__class__ is NoseThermostat:
raise ValueError("the universe already has a thermostat")
#
# Andersen barostat class
#
[docs]class AndersenBarostat(EnvironmentObject):
"""
Andersen barostat for Molecular Dynamics
A barostat object can be added to a universe and will then
together with a thermostat object modify the integration algorithm
to a simulation of an NPT ensemble.
"""
def __init__(self, pressure, relaxation_time = 1.5):
"""
:param pressure: the pressure set by the barostat
:type pressure: float
:param relaxation_time: the relaxation time of the
barostat coordinate
:type relaxation_time: float
"""
self.arguments = (pressure, relaxation_time)
self.parameters = N.array([pressure, relaxation_time])
self.coordinates = N.array([0.])
def setPressure(self, pressure):
self.parameters[0] = pressure
def setRelaxationTime(self, t):
self.parameters[1] = t
def checkCompatibilityWith(self, other):
if other.__class__ is AndersenBarostat:
raise ValueError("the universe already has a barostat")