Run the simulation.

        Args:
            for_time (:obj:Float, optional): If `for_time` is set, then run the simulation until a set amount of time has passed. Otherwise, run the simulation for a set number of jumps. Defaults to None.

        Returns:
            None

def run( self, for_time=None ):
        """
        Run the simulation.

        Args:
            for_time (:obj:Float, optional): If `for_time` is set, then run the simulation until a set amount of time has passed. Otherwise, run the simulation for a set number of jumps. Defaults to None.

        Returns:
            None
        """
        self.for_time = for_time
        try:
            self.is_initialised()
        except AttributeError:
            raise
        if self.number_of_equilibration_jumps > 0:
            for step in range( self.number_of_equilibration_jumps ):
                self.lattice.jump()
            self.reset()
        if self.for_time:
            self.number_of_jumps = 0
            while self.lattice.time < self.for_time:
                self.lattice.jump()
                self.number_of_jumps += 1
        else: 
            for step in range( self.number_of_jumps ):
                self.lattice.jump()
        self.has_run = True