def __init__(self, parameters, resultsfile): r"""Create a new simulation loop instance for a simulation using the semiclassical Hagedorn wavepacket based propagation method. :param parameters: The simulation parameters. :type parameters: A :py:class:`ParameterProvider` instance. :param resultsfile: Path and filename of the hdf5 output file. """ # Keep a reference to the simulation parameters self.parameters = parameters # The time propagator instance driving the simulation. self.propagator = None # A `IOManager` instance for saving simulation results. self.IOManager = None # The time manager self._tm = TimeManager(self.parameters) # Set up serialization of simulation data self.IOManager = IOManager() self.IOManager.create_file(resultsfile) # Save the simulation parameters self.IOManager.add_parameters() self.IOManager.save_parameters(parameters)
def compute_parameters(self): """Compute some further parameters from the given ones. """ # Perform the computation only if the basic values are available. # This is necessary to add flexibility and essentially read in *any* # parameter file with heavily incomplete value sets. (F.e. spawn configs) try: # The number of time steps we will perform. tm = TimeManager(self) self._params["nsteps"] = tm.compute_number_timesteps() except: pass if "potential" in self._params: # Ugly hack. Should improve handling of potential libraries Potential = BlockFactory().create_potential(self) # Number of components of $\Psi$ self._params["ncomponents"] = Potential.get_number_components()
def get_timemanager(self): r"""Return the embedded :py:class:`TimeManager` instance. """ return TimeManager(self._params)