def aposteriori_spawning(fin, fout, pin, pout, bid1, bid2): """ :param f: An ``IOManager`` instance providing the simulation data. :param datablock: The data block where the results are. """ # Number of time steps we saved timesteps = fin.load_wavepacket_timegrid() nrtimesteps = timesteps.shape[0] params = fin.load_wavepacket_parameters() coeffs = fin.load_wavepacket_coefficients() # A data transformation needed by API specification coeffs = [ [ coeffs[i,j,:] for j in xrange(pin["ncomponents"]) ] for i in xrange(nrtimesteps) ] # Initialize a mother Hagedorn wavepacket with the data from another simulation HAWP = HagedornWavepacket(pin) HAWP.set_quadrature(None) # Initialize an empty wavepacket for spawning SWP = HagedornWavepacket(pout) SWP.set_quadrature(None) # Initialize a Spawner AS = AdiabaticSpawner(pout) # Iterate over all timesteps and spawn for i, step in enumerate(timesteps): print(" Try spawning at timestep "+str(step)) # Configure the wave packet and project to the eigenbasis. HAWP.set_parameters(params[i]) HAWP.set_coefficients(coeffs[i]) #HAWP.project_to_eigen(Potential) # Try spawning a new packet ps = AS.estimate_parameters(HAWP, 0) if ps is not None: SWP.set_parameters(ps) AS.project_coefficients(HAWP, SWP) # Save the spawned packet fout.save_wavepacket_parameters(HAWP.get_parameters(), timestep=step, blockid=bid1) fout.save_wavepacket_coefficients(HAWP.get_coefficients(), timestep=step, blockid=bid1) fout.save_wavepacket_parameters(SWP.get_parameters(), timestep=step, blockid=bid2) fout.save_wavepacket_coefficients(SWP.get_coefficients(), timestep=step, blockid=bid2)
def plot_frames_homogeneous(iom, blockid=0, view=None): """ :param iom: An ``IOManager`` instance providing the simulation data. """ parameters = iom.load_parameters() # Number of time steps we saved timesteps = iom.load_wavepacket_timegrid(blockid=blockid) nrtimesteps = timesteps.shape[0] # Initialize a Hagedorn wavepacket with the data Potential = PotentialFactory().create_potential(parameters) # Retrieve simulation data grid = iom.load_grid(blockid="global") params = iom.load_wavepacket_parameters(blockid=blockid) coeffs = iom.load_wavepacket_coefficients(blockid=blockid) # A data transformation needed by API specification coeffs = [ [ coeffs[i,j,:] for j in xrange(parameters["ncomponents"]) ] for i in xrange(nrtimesteps)] # Hack for allowing data blocks with different basis size than the global one # todo: remove when we got local parameter sets parameters.update_parameters({"basis_size": coeffs[0][0].shape[0]}) HAWP = HagedornWavepacket(parameters) HAWP.set_quadrature(None) # Iterate over all timesteps for i, step in enumerate(timesteps): print(" Plotting frame of timestep "+str(step)) # Configure the wavepacket and project to the eigenbasis. HAWP.set_parameters(params[i]) HAWP.set_coefficients(coeffs[i]) HAWP.project_to_eigen(Potential) values = HAWP.evaluate_at(grid, prefactor=True) coeffi = HAWP.get_coefficients() plot_frame(step, parameters, grid, values, coeffi, index=blockid, view=view) print(" Plotting frames finished")