def __init__(self, init, beads, nm, cell, fcomponents, ensemble=None, motion=None, prefix=""): """Initialises System class. Args: init: A class to deal with initializing the system. beads: A beads object giving the atom positions. cell: A cell object giving the system box. fcomponents: A list of force components that are active for each replica of the system. bcomponents: A list of force components that are considered as bias, and act on each replica of the system. ensemble: An ensemble object giving the objects necessary for producing the correct ensemble. nm: A class dealing with path NM operations. prefix: A string used to differentiate the output files of different systems. """ info(" # Initializing system object ", verbosity.low) self.prefix = prefix self.init = init self.ensemble = ensemble self.motion = motion self.beads = beads self.cell = cell self.nm = nm self.fcomp = fcomponents self.forces = Forces() self.properties = Properties() self.trajs = Trajectories()
def __init__(self, eens=0.0, econs=0.0, temp=None, pext=None, stressext=None, bcomponents=None, bweights=None, hweights=None, time=0.0): """Initialises Ensemble. Args: temp: The temperature. fixcom: An optional boolean which decides whether the centre of mass motion will be constrained or not. Defaults to False. """ dself = dd(self) dself.temp = depend_value(name='temp') if temp is not None: self.temp = temp else: self.temp = -1.0 dself.stressext = depend_array(name='stressext', value=np.zeros((3, 3), float)) if stressext is not None: self.stressext = np.reshape(np.asarray(stressext), (3, 3)) else: self.stressext = -1.0 dself.pext = depend_value(name='pext') if pext is not None: self.pext = pext else: self.pext = -1.0 dself.eens = depend_value(name='eens') if eens is not None: self.eens = eens else: self.eens = 0.0 # the bias force contains two bits: explicit biases (that are meant to represent non-physical external biasing potentials) # and hamiltonian weights (that will act by scaling different physical components of the force). Both are bound as components # of the "bias force" evaluator, but their meaning (and the wiring further down in bind()) differ. # these are the additional bias components if bcomponents is None: bcomponents = [] self.bcomp = bcomponents self.bias = Forces() # and their weights if bweights is None or len(bweights) == 0: bweights = np.ones(len(self.bcomp)) dself.bweights = depend_array(name="bweights", value=np.asarray(bweights)) # weights of the Hamiltonian scaling if hweights is None: hweights = np.ones(0) self.hweights = np.asarray(hweights) # Internal time counter dd(self).time = depend_value(name='time') self.time = time
def __init__(self, beads, cell, forces, ensemble, prng, outputs, nm, init, step=0, tsteps=1000, ttime=0): """Initialises Simulation class. Args: beads: A beads object giving the atom positions. cell: A cell object giving the system box. forces: A forcefield object giving the force calculator for each replica of the system. ensemble: An ensemble object giving the objects necessary for producing the correct ensemble. prng: A random number object. outputs: A list of output objects. nm: A class dealing with path NM operations. init: A class to deal with initializing the simulation object. step: An optional integer giving the current simulation time step. Defaults to 0. tsteps: An optional integer giving the total number of steps. Defaults to 1000. ttime: The simulation running time. Used on restart, to keep a cumulative total. """ info(" # Initializing simulation object ", verbosity.low) self.prng = prng self.ensemble = ensemble self.beads = beads self.cell = cell self.nm = nm # initialize the configuration of the system self.init = init init.init_stage1(self) self.flist = forces self.forces = Forces() self.outputs = outputs dset(self, "step", depend_value(name="step", value=step)) self.tsteps = tsteps self.ttime = ttime self.properties = Properties() self.trajs = Trajectories() self.chk = None self.rollback = True