McL84scPropagator

About the McL84scPropagator class

The WaveBlocks Project

@author: R. Bourquin @copyright: Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2016 R. Bourquin @license: Modified BSD License

Inheritance diagram

Inheritance diagram of McL84scPropagator

Class documentation

class WaveBlocksND.McL84scPropagator(parameters, potential, packets=[])[source]

This class can numerically propagate given initial values \Psi in a potential V(x). The propagation is done for a given set of homogeneous Hagedorn wavepackets neglecting interaction. It uses the McL84 and the idea of the semiclassical splitting

__init__(parameters, potential, packets=[])[source]

Initialize a new SemiclassicalPropagator instance.

Parameters:
  • parameters (A ParameterProvider instance) – A ParameterProvider instance containing at least the key dt for providing the timestep \tau.
  • potential – The potential V(x) the wavepacket \Psi feels during the time propagation.
  • packet – The initial homogeneous Hagedorn wavepacket \Psi we propagate in time.
Raises:

ValueError – If the number of components of \Psi does not match the number of energy levels \lambda_i of the potential.

add_wavepacket(packet)[source]

Add a new wavepacket \Psi to the list of propagated wavepackets.

Parameters:packet (A tuple (\Psi, \chi) with \Psi a HagedornWavepacket instance and \chi an integer.) – The new wavepacket \Psi and its leading component \chi \in [0,N-1].
build(method)
Parameters:method – A string specifying the method for time integration.
Returns:Two arrays a and b.
Method Order Authors Reference
L42 (4,2) McLachlan [1] page 6
L62 (6,2) McLachlan [1] page 6
L82 (8,2) McLachlan [1] page 6
L102 (10,2) McLachlan [1] page 6
L84 (8,4) McLachlan [1] page 8
[1](1, 2, 3, 4, 5) R.I. McLachlan, “Composition methods in the presence of small parameters”, BIT Numerical Mathematics, Volume 35, Issue 2, (1995) 258-268. There is also a 2003 version which was used for the implementation.
get_number_components()[source]
Returns:The number N of components \Phi_i of \Psi.
get_potential()

Returns the potential V(x) used for time propagation.

Returns:A MatrixPotential subclass instance.
get_wavepackets(packet=None)[source]

Return the wavepackets \{\Psi_i\}_i that take part in the time propagation by the current SemiclassicalPropagator instance.

Parameters:packet (Integer or None) – The index i (in this list) of a single packet \Psi_i that is to be returned. If set to None (default) return the full list with all packets.
Returns:A list of HagedornWavepacket instances or a single instance.
intsplit(psia, psib, a, b, tspan, N, argsa=[], argsb=[])

Compute a single, full propagation step by operator splitting.

Parameters:
  • psia – First evolution operator \Psi_a
  • psib – Second evolution operator \Psi_b
  • a – Parameters for evolution with \Psi_a
  • b – Parameters for evolution with \Psi_b
  • tspan – Timespan t of a single, full splitting step
  • N – Number of substeps to perform
  • argsa – Additional optional arguments of \Psi_a
  • argsb – Additional optional arguments of \Psi_b

Note

The values for argsa and argsb have to be of type list even in case of single items.

post_propagate()

Given the wavefunction \psi at final time T, perform some computations exactly once after running the ordinary time propagation and before each time simulation data will be saved.

This method does not raise an exception but instead just does nothing and returns.

pre_propagate()

Given the wavefunction \psi at initial time t_0, perform some computations exactly once before running the ordinary time propagation and after each time simulation data was saved.

This method does not raise an exception but instead just does nothing and returns.

propagate()[source]

Given a wavepacket \Psi at time t compute the propagated wavepacket at time t + \tau. We perform exactly one timestep of size \tau here. This propagation is done for all packets in the list \{\Psi_i\}_i and neglects any interaction between two packets.

More details can be found in [2].

[2]
  1. Blanes, R. Bourquin and V. Gradinaru, “Raising the Order of Convergence in the Semiclassical Splitting”.
set_wavepackets(packetlist)[source]

Set the list \{\Psi_i\}_i of wavepackets that the propagator will propagate.

Parameters:packetlist (A list of (\Psi_i, \chi_i) tuples.) – A list of new wavepackets \Psi_i and their leading components \chi_i to propagate.