print("**************************************************") # Iterate over all blocks for blockid in blockids: print("Computing the autocorrelation in data block '{}'".format(blockid)) if iom.has_autocorrelation(blockid=blockid): print("Datablock '{}' already contains autocorrelation data, silent skip.".format(blockid)) continue # No configuration parameters so far if PA is None: print("Warning: Using (possibly improper) default values for inner product") if iom.has_wavepacket(blockid=blockid): descr = iom.load_wavepacket_description(blockid=blockid) PA = integrator(descr) elif iom.has_inhomogwavepacket(blockid=blockid): descr = iom.load_inhomogwavepacket_description(blockid=blockid) PA = integrator(descr) # NOTE: Add new algorithms here if iom.has_wavepacket(blockid=blockid): from WaveBlocksND.Interface import AutocorrelationWavepacket AutocorrelationWavepacket.compute_autocorrelation_hawp(iom, PA, blockid=blockid, eigentrafo=args.noeigentransform) elif iom.has_wavefunction(blockid=blockid): from WaveBlocksND.Interface import AutocorrelationWavefunction AutocorrelationWavefunction.compute_autocorrelation(iom, PA, blockid=blockid, eigentrafo=args.noeigentransform) elif iom.has_inhomogwavepacket(blockid=blockid): from WaveBlocksND.Interface import AutocorrelationWavepacket
def load_from_file(filepath, blockid=0, timestep=0, sizeK=None): r"""Utility script to load wavepacket parameters and coefficients from another simulation result in a form suitable for the input configuration of a new simulation. This is (mainly) used to start simulations with previously computed eigenstates. :param filepath: The path to the `.hdf5` file from which data will be read. :param blockid: The `datablock` from which to read the data. Default is the block with `blockid=0`. :param timestep: Load the data corresponding to the given `timestep`. The default timestep is `0`. :param sizeK: Load at most 'sizeK' many coefficients. Note that the order is defined by the linearization mapping :math:`\mu` of the packet's current basis shape. We then pick the first `sizeK` ones. """ IOM = IOManager() IOM.open_file(filepath) # Check if we have data tg = IOM.load_wavepacket_timegrid(blockid=blockid) if timestep not in tg: raise ValueError("No data for timestep {}".format(timestep)) # Load data and assemble packet BF = BlockFactory() # Basis shapes BS_descr = IOM.load_wavepacket_basisshapes(blockid=blockid) BS = {} for ahash, descr in BS_descr.items(): BS[ahash] = BF.create_basis_shape(descr) # Create a packet wpd = IOM.load_wavepacket_description(blockid=blockid) HAWP = BF.create_wavepacket(wpd) # Data ha, ci = IOM.load_wavepacket_coefficients(blockid=blockid, timestep=timestep, get_hashes=True) Pi = IOM.load_wavepacket_parameters(blockid=blockid, timestep=timestep) HAWP.set_parameters(Pi) HAWP.set_basis_shapes([BS[int(h)] for h in ha]) HAWP.set_coefficients(ci) # Reformat data C = [] for n in range(HAWP.get_number_components()): B = HAWP.get_basis_shapes(component=n) cn = HAWP.get_coefficients(component=n) l = [] for i in range(B.get_basis_size()): l.append((B[i], cn[i, 0])) C.append(l) if sizeK is not None: # We load at most 'sizeK' coefficients. # Note that this does NOT specify which # ones in terms of multi-indices. C = [c[:sizeK] for c in C] return Pi, C
print("Computing the autocorrelation in data block '{}'".format(blockid)) if iom.has_autocorrelation(blockid=blockid): print( "Datablock '{}' already contains autocorrelation data, silent skip." .format(blockid)) continue # No configuration parameters so far if PA is None: print( "Warning: Using (possibly improper) default values for inner product" ) if iom.has_wavepacket(blockid=blockid): descr = iom.load_wavepacket_description(blockid=blockid) PA = integrator(descr) elif iom.has_inhomogwavepacket(blockid=blockid): descr = iom.load_inhomogwavepacket_description(blockid=blockid) PA = integrator(descr) # NOTE: Add new algorithms here if iom.has_wavepacket(blockid=blockid): from WaveBlocksND.Interface import AutocorrelationWavepacket AutocorrelationWavepacket.compute_autocorrelation_hawp( iom, PA, blockid=blockid, eigentrafo=args.noeigentransform) elif iom.has_wavefunction(blockid=blockid): from WaveBlocksND.Interface import AutocorrelationWavefunction AutocorrelationWavefunction.compute_autocorrelation( iom, PA, blockid=blockid, eigentrafo=args.noeigentransform)