namd

libra_py.namd.compute_Hvib(ham_old, ham_cur, orb, dt)[source]

Computes the vibronic Hamiltonian - in the MO basis - this is equivalent to the general version below with the 1-electron “Slater determinant” basis functions. This function is going to be deprecated, but let keep it here, for backward compatibility

Parameters
  • ham_old (Hamiltonian) – Hamiltonian at time t-dt [units: a.u. of energy]

  • ham_cur (Hamiltonian) – Hamiltonian at time t [units: a.u. of energy]

  • orb (list of ints) – indices of the orbitals included in the active space. The Hvib dimensions will be determined by the N_act = len(orb) and the elements of Hvib will reflect only the orbitals included in this active state. Indexing starts with 0.

  • dt (float) – Time step [units: a.u. of time]

Returns

vibronic Hamiltonian matrix in the MO basis: Hvib = Hel - i*hbar*d_ij

Return type

CMATRIX(N_act,N_act)

libra_py.namd.compute_Hvib_sd(ham_old, ham_cur, orb, SD_basis, dt)[source]

Computes the vibronic Hamiltonian - in the MO basis

Parameters
  • ham_old (Hamiltonian) – Hamiltonian at time t-dt [units: a.u. of energy]

  • ham_cur (Hamiltonian) – Hamiltonian at time t [units: a.u. of energy]

  • orb (list of ints) – indices of the orbitals included in the active space. The Hvib dimensions will be determined by the norb = len(orb) and the elements of Hvib will reflect only the orbitals included in this active state. Indexing starts with 0.

  • SD_basis (list of lists of ints) – Slater determinant (SD) basis - are defined in terms of the indices withing the active space, with the numbering starting from 0. In no-SOC case, the numbers smaller than N_act = len(orb) will correspond to alpha orbitals other - to beta orbitals

  • dt (float) – Time step [units: a.u. of time]

Returns

vibronic Hamiltonian matrix in the SD basis: Hvib = Hel - i*hbar*d_ij. Here, N = len(SD_basis)

Return type

CMATRIX(N,N)

Example

If we have a system with HOMO being the orbital with index 20, LUMO - with 21, then if we want to consider a minimal 2-state system, we can choose orb = [20, 21] Mapping:

0       1      2      3
H(alp) L(alp) H(bet)  L(bet)

         GS = |H(alp),H(beta)|    S1 = |H(alp),L(beta)|

and SD_basis = [ [0,    2],             [0,      3]   ]
                 /\    /\                /\      /                             |     |                 |       |
              H alp   H bet             H alp   L beta

Example

If we have a system with HOMO being the orbital with index 20, LUMO - with 21, then if we want to consider a minimal 2-state system with spin-flip, we can choose orb = [20, 21] Mapping:

0       1      2      3
H(alp) L(alp) H(bet)  L(bet)

        GS = |H(alp),H(beta)|     S1 =|H(alp),L(beta)|    T0 = |H(alp),L(alp)|    T1 = |H(bet),L(bet)|

and SD_basis = [ [0,    2],             [0,      3]  ,            [0,   1] ,               [ 2,    3 ] ]
                 /\    /\                /\      /\               /\    /\                  /\     /                             |     |                 |       |                |     |                   |      |
              H alp   H bet             H alp   L beta           H alp  L alp              H bet   L bet

Example

If we have a radiacl in a system with 3 electrons, occuplying HOMO-1 (doubly) and HOMO (singly). Say, the HOMO is the orbital with index 20, HOMO-1 - with 19, then if we may want to consider the active space of 3 orbitals: [19, 20, 21] Mapping:

0       1      2      3        4      5
H-1(alp) H(alp) L(alp) H-1(bet) H(bet) L(bet)

        GS = |H-1(alp),H-1(beta), H(alp)|

and SD_basis = [  [0,       3,        1],    [0,       3,        4],       ...     ]
                  /\        /\       /\      /\        /\       /\
                  |         |        |       |         |        |
                 H-1 alp  H-1 bet   H alp   H-1 alp  H-1 bet   H bet

Example

We may consider a transition between certain orbitals, say we are interested in transition between LUMO+10 (index 30) and LUMO+15 (index 35), then we can choose orb = [30, 35] Note, the definition of the SD basis used in Example #1 can be re-used. Mapping:

0       1            2            3
L+10(alp) L+15(alp)  L+10(bet)   L+15(bet)

        GS = |L+10(alp),L+10(beta)|    S1 = |L+10(alp),L+15(beta)|

and SD_basis = [ [0,      2],             [0,      3]   ]
                 /\      /\                /\      /                             |       |                 |       |
              L+10 alp  L+15 bet         L+10 alp L+15 beta