Source code for lattice_mc.atom

import numpy as np

[docs]class Atom: """ Atoms are distinguishable particles, each occupying a specific lattice site. """ atom_number = 0 # counter, so that every Atom instance is distinguishable def __init__( self, initial_site ): """ Initialise an Atom instance. Args: initial_site (Site): Lattice site initially occupied by this Atom. Returns: None """ Atom.atom_number += 1 self.number = Atom.atom_number self._site = initial_site # check this site is not already occupied if self._site.occupation == 0: self._site.occupation = self.number self._site.is_occupied = True self._site.atom = self else: raise ValueError( "This site is already occupied by atom {}".format( initial_site.occupation ) ) self.reset()
[docs] def reset( self ): """ Reinitialise the stored displacements, number of hops, and list of sites visited for this `Atom`. Args: None Returns: None """ self.number_of_hops = 0 self.dr = np.array( [ 0.0, 0.0, 0.0 ] ) self.summed_dr2 = 0.0 self.sites_visited = [ self._site.number ]
[docs] def dr_squared( self ): """ :math:`|dr|^2`, where :math:`dr` is the total displacement vector for this `Atom`. Args: None Returns: dr_squared (float): :math:`|dr|^2`. """ return np.dot( self.dr, self.dr )
@property def site( self ): """ Get or set `self.site` for this `Atom`. """ return self._site @site.setter def site( self, value ): self._site = value