def spawn(self, info): r""" Really spawn the new wavepackets :math:`\tilde{\Psi}`. This method appends the new :py:class:`HagedornWavepacket` instances to the list :py:attr:`packets` of packets. """ WP = info # Initialize an empty wavepacket for spawning SWP = HagedornWavepacket(self.parameters) SWP.set_quadrature(None) # Initialize a Spawner AS = AdiabaticSpawner(self.parameters) # Estimate the parameter set Pi Pi = AS.estimate_parameters(WP, component=0) # Spawn a new packet if Pi is not None: SWP.set_parameters(Pi) # Project the coefficients from mother to child AS.project_coefficients(WP, SWP) print(" Spawned a new wavepacket with ID "+str(SWP.get_id())+".") # Append the spawned packet to the world self.packets.append((SWP,0))
def spawn(self, info): r""" Really spawn the new wavepackets :math:`\tilde{\Psi}`. This method appends the new :py:class:`HagedornWavepacket` instances to the list :py:attr:`packets` of packets. """ # Transform the packet to the eigenbasis where spawning has to happen WP, component = info WP.project_to_eigen(self.potential) # Prepare the potential (this functions are idempotent) self.potential.calculate_local_quadratic(diagonal_component=component) self.potential.calculate_local_remainder(diagonal_component=component) # Initialize an empty wavepacket for spawning SWP = HagedornWavepacket(self.parameters) SWP.set_quadrature(None) # Initialize a Spawner NAS = NonAdiabaticSpawner(self.parameters) # Estimate the parameter set Pi Pi = NAS.estimate_parameters(WP, component=component) # Spawn a new packet if Pi is not None: SWP.set_parameters(Pi) # Project the coefficients from mother to child NAS.project_coefficients(WP, SWP, component=component) # Transform both packets back to the canonical basis where propagation happens WP.project_to_canonical(self.potential) SWP.project_to_canonical(self.potential) print(" Spawned a new wavepacket with ID "+str(SWP.get_id())+".") # Append the spawned packet to the world self.packets.append((SWP,component))