Mixed (or hybrid) quantum classical dynamics represents a generalization of the classical trajectory-based transport to the case of coupled channel simulations. Hence, the generic surface hopping class, as well as the three subclasses detailed below, inherit from superclass "traj".
Here we introduce numerical techniques to solve the quantum classical Liouville equation by means of several surface hopping trajectory (SHT) techniques. There trajectories are propagated classically along (diabatic or adiabatic) potential energy surfaces. In addition, at|near (avoided or genuine) intersections of those surfaces, the trajectories may statistically "hop" between them.
For the source codes of the "generic" (super)class definition, see here. Note that this class contains two settable properties which are of importance in practical simulations
properties | description | default |
---|---|---|
rescale | Toggle momentum rescaling upon surface hopping | diabatic representation: 'false' adiabatic representation: 'true' |
sca_nac | Scaling along non-adiabatic coupling vector | 'false', i.e. along "old" momenta |
In addition to the methods that are required for each and every of the WavePacket main classes, the generic classdef for surface hopping contains also the following public methods:
method | explanation |
---|---|
after_hop | Update class properties according to the new level n |
disp_hop | Display details of surface hopping (not working ?!?) |
eval_ham | Evaluate Hamiltonian matrices attached to each of the trajectories |
get_quantities | Get quantities needed to check momentum rescaling and to perform ho |
mom_rescaling | Rescaling momenta of classical particles to enforce energy conservation |
mom_rescaling_vec | Rescaling momenta of classical particles along given directions |
traj_hop | Scaffold of the surface hopping algorithms |
The main difference between the various SHT approaches has to do with the (quantum or semi-classical) recipe for calculating the probabilities for the hopping events, as well as the times when or how often to do these probabilities are evaluated. In the following, we give a short overview of the variants currently implemented in WavePacket:
Probabilities for hopping between states are simply taken from the density in the target state itself. In principle, this algorithm will produce the correct populations for a large enough ensemble of trajectories. In practice, however, there will be many hopping events at all times, even when the trajectories are outside the transition regions which tends to make this algorithm unstable. It is included in WavePacket mainly for reasons of historical completeness.
For the source codes of the "mssh" class definition, see here. Note that there are two functions "tdse_dia" and "tdse_adi" for solutions of the Schroedinger equations (in diabatic or adiabatic representation) attached to each of the trajectories.
Probabilities for hopping between states is based on the rate of change of the density of the target state. Indeed, it can be shown to minimize the number of state switches, subject to maintaining the correct statistical distribution of the populations at all times. Typically, hopping occurs only in the vicinity of transition regions given by (near) intersections of potential energy surfaces.
For the source codes of the "fssh" class definition, see here. Note that the "fssh" class inherits - among others - from its superclass "mssh" the two functions "tdse_dia" and "tdse_adi", see above.
Probabilities for hopping between states are only evaluated once for every passage of a transition region, typically a (genuine or avoided) intersection of adiabatic potential energy (hyper-)surfaces. Assuming a locally linear double cone topology of the surfaces in these regions, the transition probabilities in SSSH algorithms can be obtained semi-classically by the Landau-Zener (LZ) formula.
For the source codes of the "sssh" class definition, see here. Note that there are four different choices of obtaining the hopping probabilities. They can be selected through the (integer) value of the sssh-class property
state.lz_variant
For details of the four algorithms see here for a general explanation or there for our Matlab/Octave implementation.
Wiki: Reference.Classes.Main
Wiki: Reference.Classes.traj
Wiki: Reference.Programs.qm_setup
Wiki: Reference.Variables.plots
Wiki: Reference.Variables.state
Wiki: Reference.Variables.time.propa.traj
Wiki: Users.Basics.Main