lz¶
Implementation of the Landau-Zener transition probability.
-
libra_py.workflows.nbra.lz.
Belyaev_Lebedev
(Hvib, params)[source]¶ Computes the Landau-Zener hopping probabilities based on the energy levels according to: (1) Belyaev, A. K.; Lebedev, O. V. Phys. Rev. A, 2011, 84, 014701
See also: (2) Xie, W.; Domcke, W. J. Chem. Phys. 2017, 147, 184114 (3) Crespo-Otero, R.; Barbatti, M. Chem. Rev. 2018, 188, 7026 - section: 3.2.3
Specifics: 1) The estimation of d^2E_ij / dt^2 is based on the 3-point Lagrange interpolation 2) This is done within the NBRA
- Parameters
Hvib (list of CMATRIX(nstates,nstates)) – vibronic Hamiltonians along the trajectory
params (dictionary) –
control parameters
params[“dt”] ( double ): time distance between the adjacent data points [ units: a.u., defaut: 41.0 ]
params[“T”] ( double ): temperature of the nuclear sub-system [ units: K, default: 300.0 ]
- params[“Boltz_opt_BL”] ( int ): option to select a probability of hopping acceptance [default: 1]
Options:
0 - all proposed hops are accepted - no rejection based on energies
1 - proposed hops are accepted with exp(-E/kT) probability - the old (hence the default approach)
2 - proposed hops are accepted with the probability derived from Maxwell-Boltzmann distribution - more rigorous
3 - generalization of “1”, but actually it should be changed in case there are many degenerate levels
- params[“gap_min_exception”] ( int ): option to handle the situation when extrapolated gap minimum is negative
Options:
0 - set to zero [ default ]
1 - use the mid-point gap
- params[“target_space”] ( int ): how to select the space of target states for each source state
Options:
0 - only adjacent states
1 - all states available [ default ]
-
libra_py.workflows.nbra.lz.
adjust_SD_probabilities
(P, params)[source]¶ Adjusts the surface hopping probabilties computed according to Belyaev-Lebedev’s work by setting the probability to hop between Slater determinants that differ by more than 1 electron to zero.
- Parameters
P (list of lists of MATRIX) – each element of P contains the probability matrix according to the NBRA BLSH method
params (dictionary) – control parameters
params["excitations"] (*) –
- SDs themselves (QE or dftb+ non-tddftb) or the SD transitions (tddftb). If the excitations are non-changing, then the
length of excitations is 1. If excitations do change, then there must be an excitation list for each step. In this case, the length of excitation = nsteps = len(P) params[“excitation”][i][j][k] = kth SD step for the jth step of the ith nuclear trajectory
i: index of nuclear trajectory j: index of timestep of nuclear trajectory i k: index of SD for the jth timestep on nuclear trajectory i
Examples
Assume we have constructed SDs from a basis of 4 alpha and 4 beta Kohn-Sham spin-orbitals The ground state is defined as: [1, 2, -5, -6]. Consider only alpha-excitations
We currently do non-tddftb computations by forming our own SDs in libra_py.workflows.nbra.step3
QE or dftb+ non-tddftb - [ [ [1, 3, -5, -6], [1, 4, -5, -6], [3, 2, -5, -6], [4, 2, -5, -6] ] ]
As tddftb is used exclusively with the BLSH-NBRA method, we usually just read the energies, and know information only regarding the index of the orbtial transitions, such as: [2 -> 3]. So, we package this in the following form
tddftb - [ [ [2,3], [2,4], [1,3], [1,4] ] ]
-
libra_py.workflows.nbra.lz.
run
(H_vib, params)[source]¶ Main function to run the SH calculations based on the Landau-Zener hopping probabilities, all within the NBRA. The probabilities are implemented according to the Belyaev-Lebedev work.
- Parameters
params (dictionary) – control parameters
params["dt"] (*) – time distance between the adjacent data points [ units: a.u.; default: 41.0 a.u.]
params["ntraj"] (*) – how many stochastic trajectories to use in the ensemble [ defult: 1]
params["nsteps"] (*) – how nuclear steps in the trajectory to be computed [ defult: 1]
params["istate"] (*) – index of the starting state (within those used in the active_space) [ default: 0]
params["Boltz_opt"] (*) –
option to control the acceptance of the proposed hops Options:
0 - all proposed hops are accepted - no rejection based on energies
1 - proposed hops are accepted with exp(-E/kT) probability - the old (hence the default approach) [ default ]
2 - proposed hops are accepted with the probability derived from Maxwell-Boltzmann distribution - more rigorous
3 - generalization of “1”, but actually it should be changed in case there are many degenerate levels
params["Boltz_opt_BL"] (*) –
what type of hop acceptance scheme to incorporate into the BL probabilities Options:
0 - all proposed hops are accepted - no rejection based on energies [ default ]
1 - proposed hops are accepted with exp(-E/kT) probability - the old (hence the default approach)
2 - proposed hops are accepted with the probability derived from Maxwell-Boltzmann distribution - more rigorous
3 - generalization of “1”, but actually it should be changed in case there are many degenerate levels
params["T"] (*) – temperature of the nuclei - affects the acceptance probabilities [ units: K, default: 300.0 K]
params["do_output"] (*) – whether to print out the results into a file [ default: True ]
params["outfile"] (*) – the name of the file, where all the results will be printed out [ default: “_out.txt” ]
params["do_return"] (*) – whether to construct the big matrix with all the result [ default: True ]
params["evolve_Markov"] (*) – whether to propagate the “SE” populations via Markov chain [ default: True ]
params["evolve_TSH"] (*) – whether to propagate the “SH” populations via TSH with many trajectories [ default: True ]
params["extend_md"] (*) – whether or not to extend md time by resampling the NBRA hopping probabilities
params["extend_md_time"] (*) – length of the new dynamics trajectory, in units dt
params["detect_SD_difference"] (*) – see if SD states differ by more than 1 electron, if so probability to zero [ default: False ]