CDTK.Dynamics.SurfaceHoppingFS module

class CDTK.Dynamics.SurfaceHoppingFS.SurfaceHoppingFS(**opts)[source]

Bases: object

Control a trajectory surface-hopping evolution

get_funcDPL(a_x, **opts)[source]

Return the dipole function to be used from a SurfaceHoppingFS object

get_funcE(**opts)[source]

Return the energy function to be used from a SimulationBox object

get_funcG()[source]

Return the gradient function of current electronic state to be used from a SimulationBox object

optional arguments:

nstates_g – number of electronic states requiring analytical gradient state_g – the certain designated electronic state(s) requiring analytical gradient

currently for ab initio analytical gradient method

state_type – specify the type of electronic state that requires analytical gradient

options: current_electronic_state - for SimulationBox object

get_funcVD(a_x, **opts)[source]

Return the coupling matrix to be used from a SurfaceHoppingFS object

optional arguments:

state_block - electronic state block for the Hartree-Fock-Koopmans method

get_prob_FS(time)[source]

Return the FS hopp probability matrix g

gradient_FS(a_x, **opts)[source]

Return the energy and gradient on the current electronic state

A function for the fewest switching FS surface hopp method

Provided auxillary data for the switch_condition function

Input arguments:

a_x – positions of the system

Returns:

e_adiabatic – potential energy g_adiabatic – energy gradient

self.delta_e – energy difference self.delta_g – gradient difference

optional arguments:

nstates_g – number of electronic states requiring analytical gradient state_g – the certain designated electronic states requiring analytical gradient

currently for ab initio analytical gradient method

state_type – specify the type of electronic state that requires analytical gradient
options: current_electronic_state - for SimulationBox object

hopping_electronic_state - for switch_condition function

gradient_simple(a_x, **opts)[source]

Return the energy and gradient on the current electronic state

A function for the SE integration

Merely compute the energies and gradients without preparing data for switch_condition

Input arguments:

a_x – positions of the system

Returns:

e_adiabatic – potential energy g_adiabatic – energy gradient

linear_interpolate(time, **opts)[source]

Returns interpolated E and V.D

optional arguments: - retEVd: variables to be interpolated

default: returnAll - interpolated E and V.D

retuenVd - interpolated V.D

linear_interpolate_Vd(time, **opts)[source]

Continuously interpolate the non-adiabatic coupling Vd after the initializing classical step. adapted to the wavefunction overlap method.

Inputs:

time: current time of quantum integration

uses:

self.Vd_intp_TIME: non-adiabatic coupling at t self.Vd_intp_TIMEpDT: non-adiabatic coupling at t+dt self.Vd_TIMEpDT: non-adiabatic coupling at t+dt/2

Returns:

the interpolated non-adiabatic coupling

Return type:

Vd_intm

optional arguments:
is_init: whether to be the initialization classical step

default - False

switch_condition(**opts)[source]

Compute initial conditions on the new PES after a hop.

uses:

self.de_s: energy difference (Vf - Vi) between the two adiabatic states self.dg_s: non-adiabatic coupling gradient.

this gradient may be different in different flavors of switching algorithms. Common conventions are:

dg_s = Grad(Vf - Vi) dg_s = <f| Grad |i> (|i>:electronic wfn)

Returns: (xnew,vnew,ishop)

xnew: new positions vnew: new velocities ishop: True if switch took place

Implements Eq.(3.44) in Miller and George; JCP 56, 5637 (1972) Implements Eqs.(25,29) in Stine et al. ; JCP 65, 3975 (1976)