def prepare_simulation(self): r"""Set up a Hagedorn propagator for the simulation loop. Set the potential and initial values according to the configuration. :raise: :py:class:`ValueError` For invalid or missing input data. """ # The potential instance potential = BlockFactory().create_potential(self.parameters) # Project the initial values to the canonical basis BT = BasisTransformationHAWP(potential) # Finally create and initialize the propagator instance # TODO: Attach the "leading_component to the hawp as codata self.propagator = HagedornPropagatorInhomogeneous( self.parameters, potential) # Create suitable wavepackets for packet_descr in self.parameters["initvals"]: packet = BlockFactory().create_wavepacket(packet_descr) # Transform to canonical basis BT.set_matrix_builder(packet.get_innerproduct()) BT.transform_to_canonical(packet) # And hand over self.propagator.add_wavepacket((packet, )) # Add storage for each packet npackets = len(self.parameters["initvals"]) slots = self._tm.compute_number_events() key = ("q", "p", "Q", "P", "S", "adQ") for i in range(npackets): bid = self.IOManager.create_block() self.IOManager.add_inhomogwavepacket(self.parameters, timeslots=slots, blockid=bid, key=key) # Write some initial values to disk for packet in self.propagator.get_wavepackets(): self.IOManager.save_inhomogwavepacket_description( packet.get_description()) if self._tm.is_event(0): for packet in self.propagator.get_wavepackets(): # Pi self.IOManager.save_inhomogwavepacket_parameters( packet.get_parameters(key=key), timestep=0, key=key) # Basis shapes for shape in packet.get_basis_shapes(): self.IOManager.save_inhomogwavepacket_basisshapes(shape) # Coefficients self.IOManager.save_inhomogwavepacket_coefficients( packet.get_coefficients(), packet.get_basis_shapes(), timestep=0)
def prepare_simulation(self): r"""Set up a Hagedorn propagator for the simulation loop. Set the potential and initial values according to the configuration. :raise: :py:class:`ValueError` For invalid or missing input data. """ # The potential instance potential = BlockFactory().create_potential(self.parameters) # Project the initial values to the canonical basis BT = BasisTransformationHAWP(potential) # Finally create and initialize the propagator instance # TODO: Attach the "leading_component to the hawp as codata self.propagator = HagedornPropagatorInhomogeneous(self.parameters, potential) # Create suitable wavepackets for packet_descr in self.parameters["initvals"]: packet = BlockFactory().create_wavepacket(packet_descr) # Transform to canonical basis BT.set_matrix_builder(packet.get_innerproduct()) BT.transform_to_canonical(packet) # And hand over self.propagator.add_wavepacket((packet,)) # Add storage for each packet npackets = len(self.parameters["initvals"]) slots = self._tm.compute_number_events() key = ("q", "p", "Q", "P", "S", "adQ") for i in range(npackets): bid = self.IOManager.create_block() self.IOManager.add_inhomogwavepacket(self.parameters, timeslots=slots, blockid=bid, key=key) # Write some initial values to disk for packet in self.propagator.get_wavepackets(): self.IOManager.save_inhomogwavepacket_description(packet.get_description()) if self._tm.is_event(0): for packet in self.propagator.get_wavepackets(): # Pi self.IOManager.save_inhomogwavepacket_parameters(packet.get_parameters(key=key), timestep=0, key=key) # Basis shapes for shape in packet.get_basis_shapes(): self.IOManager.save_inhomogwavepacket_basisshapes(shape) # Coefficients self.IOManager.save_inhomogwavepacket_coefficients(packet.get_coefficients(), packet.get_basis_shapes(), timestep=0)
def prepare_simulation(self): r"""Set up a Hagedorn propagator for the simulation loop. Set the potential and initial values according to the configuration. :raise: :py:class:`ValueError` For invalid or missing input data. """ # The potential instance potential = BlockFactory().create_potential(self.parameters) # Project the initial values to the canonical basis BT = BasisTransformationHAWP(potential) # Finally create and initialize the propagator instance # TODO: Attach the "leading_component to the hawp as codata # TODO: Clean up this ugly if tree if self.parameters["propagator"] == "magnus_split": from WaveBlocksND.MagnusPropagator import MagnusPropagator self.propagator = MagnusPropagator(self.parameters, potential) elif self.parameters["propagator"] == "semiclassical": from WaveBlocksND.SemiclassicalPropagator import SemiclassicalPropagator self.propagator = SemiclassicalPropagator(self.parameters, potential) elif self.parameters["propagator"] == "McL42sc": from WaveBlocksND.McL42scPropagator import McL42scPropagator self.propagator = McL42scPropagator(self.parameters, potential) elif self.parameters["propagator"] == "Pre764sc": from WaveBlocksND.Pre764scPropagator import Pre764scPropagator self.propagator = Pre764scPropagator(self.parameters, potential) elif self.parameters["propagator"] == "McL84sc": from WaveBlocksND.McL84scPropagator import McL84scPropagator self.propagator = McL84scPropagator(self.parameters, potential) elif self.parameters["propagator"] == "hagedorn": from WaveBlocksND.HagedornPropagator import HagedornPropagator self.propagator = HagedornPropagator(self.parameters, potential) else: raise NotImplementedError("Unknown propagator type: " + self.parameters["propagator"]) # Create suitable wavepackets chi = self.parameters["leading_component"] for packet_descr in self.parameters["initvals"]: packet = BlockFactory().create_wavepacket(packet_descr) # Transform to canonical basis BT.set_matrix_builder(packet.get_innerproduct()) BT.transform_to_canonical(packet) # And hand over self.propagator.add_wavepacket((packet, chi)) # Add storage for each packet npackets = len(self.parameters["initvals"]) slots = self._tm.compute_number_events() key = ("q", "p", "Q", "P", "S", "adQ") for i in range(npackets): bid = self.IOManager.create_block() self.IOManager.add_wavepacket(self.parameters, timeslots=slots, blockid=bid, key=key) # Write some initial values to disk for packet in self.propagator.get_wavepackets(): self.IOManager.save_wavepacket_description(packet.get_description()) if self._tm.is_event(0): for packet in self.propagator.get_wavepackets(): # Pi self.IOManager.save_wavepacket_parameters(packet.get_parameters(key=key), timestep=0, key=key) # Basis shapes for shape in packet.get_basis_shapes(): self.IOManager.save_wavepacket_basisshapes(shape) # Coefficients self.IOManager.save_wavepacket_coefficients(packet.get_coefficients(), packet.get_basis_shapes(), timestep=0)
def prepare_simulation(self): r"""Set up a Hagedorn propagator for the simulation loop. Set the potential and initial values according to the configuration. :raise: :py:class:`ValueError` For invalid or missing input data. """ # The potential instance potential = BlockFactory().create_potential(self.parameters) # Project the initial values to the canonical basis BT = BasisTransformationHAWP(potential) # Finally create and initialize the propagator instance # TODO: Attach the "leading_component to the hawp as codata # TODO: Clean up this ugly if tree if self.parameters["propagator"] == "magnus_split": from WaveBlocksND.MagnusPropagator import MagnusPropagator self.propagator = MagnusPropagator(self.parameters, potential) elif self.parameters["propagator"] == "semiclassical": from WaveBlocksND.SemiclassicalPropagator import SemiclassicalPropagator self.propagator = SemiclassicalPropagator(self.parameters, potential) elif self.parameters["propagator"] == "McL42sc": from WaveBlocksND.McL42scPropagator import McL42scPropagator self.propagator = McL42scPropagator(self.parameters, potential) elif self.parameters["propagator"] == "Pre764sc": from WaveBlocksND.Pre764scPropagator import Pre764scPropagator self.propagator = Pre764scPropagator(self.parameters, potential) elif self.parameters["propagator"] == "McL84sc": from WaveBlocksND.McL84scPropagator import McL84scPropagator self.propagator = McL84scPropagator(self.parameters, potential) elif self.parameters["propagator"] == "hagedorn": from WaveBlocksND.HagedornPropagator import HagedornPropagator self.propagator = HagedornPropagator(self.parameters, potential) else: raise NotImplementedError("Unknown propagator type: " + self.parameters["propagator"]) # Create suitable wavepackets chi = self.parameters["leading_component"] for packet_descr in self.parameters["initvals"]: packet = BlockFactory().create_wavepacket(packet_descr) # Transform to canonical basis BT.set_matrix_builder(packet.get_innerproduct()) BT.transform_to_canonical(packet) # And hand over self.propagator.add_wavepacket((packet, chi)) # Add storage for each packet npackets = len(self.parameters["initvals"]) slots = self._tm.compute_number_events() key = ("q", "p", "Q", "P", "S", "adQ") for i in range(npackets): bid = self.IOManager.create_block() self.IOManager.add_wavepacket(self.parameters, timeslots=slots, blockid=bid, key=key) # Write some initial values to disk for packet in self.propagator.get_wavepackets(): self.IOManager.save_wavepacket_description( packet.get_description()) if self._tm.is_event(0): for packet in self.propagator.get_wavepackets(): # Pi self.IOManager.save_wavepacket_parameters( packet.get_parameters(key=key), timestep=0, key=key) # Basis shapes for shape in packet.get_basis_shapes(): self.IOManager.save_wavepacket_basisshapes(shape) # Coefficients self.IOManager.save_wavepacket_coefficients( packet.get_coefficients(), packet.get_basis_shapes(), timestep=0)