vibrav.numerical.vibronic_func module

vibrav.numerical.vibronic_func.compute_d_dq(nstates, eigvectors, prop_so, dprop_dq)[source]

Perform complex transformation with the eigen vectors to convert the spin-free derivatives to spin-orbit derivatives of the property of interest. The equation is as follows,

\[\left<\psi_1^{SO}|\mu^e|\psi_2^{SO}\right> = \sum_{k,m}U_{k1}^{0*}U_{m2}^{0} \left<\psi_k|\mu_{1,2}^{e,SF}\left(Q\right)|\psi_m\right>\]
Parameters:
  • nstates (int, input) – Number of spin-orbit states.

  • eigvectors (numpy.array, input) – Array containing the eigen vectors read from the eigvectors.txt file produced by Molcas.

  • prop_so (numpy.array, input) – Extended spin-free derivatives with the proper size. Output from vibrav.numerical.vibronic_func.sf_to_so function.

  • dprop_so (numpy.array, output) – Spin-orbit derivatives of the property of interest.

vibrav.numerical.vibronic_func.compute_d_dq_sf(nstates_sf, dham_dq, eq_sf, energies_sf, dprop_dq_sf, tol=1e-05, incl_states=None)[source]

Compute the spin-free derivative of the chosen property given by the following equation,

\[A = \sum_{k\neq 1}\left<\psi_k^0|\mu^e|\psi_2^0\right> \frac{\partial\left<\psi_1^0|H|\psi_k^0\right> / \partial Q_p}{E_1^0 - E_k^0}\]
\[B = \sum_{k\neq 2}\left<\psi_1^0|\mu^e|\psi_k^0\right> \frac{\partial\left<\psi_1^0|H|\psi_k^0\right> / \partial Q_p}{E_1^0 - E_k^0}\]
\[\frac{\partial\mu_{1,2}^{e}\left(Q\right)}{\partial Q_p} = A + B\]
Parameters:
  • nstates_sf (int, input) – Number of spin free states.

  • dham_dq (numpy.array, input) – Derivative of the Hamiltonian with respect to the normal coordinate.

  • eq_sf (numpy.array, input) – Spin-free values of the property parsed from the equilibrium geometry.

  • energies_sf (numpy.array, input) – Spin-free energies parsed from the equilibrium geometry.

  • dprop_dq_sf (numpy.array, output) – Spin-free derivative of the property of interest.

  • tol (float, optional, input) – Tolerance value for the energy differences. Defaults to 1e-5.

  • incl_states (numpy.array, input) – Select the states that you want to use. Typically would be used by the user to select how many states to include in the SOS. Defaults to None (all available states are included).

vibrav.numerical.vibronic_func.sf_to_so(nstates_sf, nstates, multiplicity, dprop_dq_sf, dprop_dq_so)[source]

Extend the spin-free derivative from the number of spin-free states into the number of spin-orbit states. It does not change any of the values, rather it will only duplicate each of the spin-free values by its respective multiplicity. In principle it can be thought of as follows:

Given a spin-free derivative matrix made up of 2 doublets and 3 singlets

[[d_11, d_12, d_13, d_14, d_15],
 [d_21, d_22, d_23, d_24, d_25],
 [d_31, d_32, d_33, d_34, d_35],
 [d_41, d_42, d_43, d_44, d_45],
 [d_51, d_52, d_53, d_54, d_55]]

Here, d_mn are the individual matrix elements. Now we extend each by its respective multiplicity, assuming that states of different multiplicity do not interact.

[[d_11,    0, d_12,    0,    0,    0,    0],
 [   0, d_11,    0, d_12,    0,    0,    0],
 [d_21,    0, d_22,    0,    0,    0,    0],
 [   0, d_21,    0, d_22,    0,    0,    0],
 [   0,    0,    0,    0, d_33, d_34, d_35],
 [   0,    0,    0,    0, d_43, d_44, d_45],
 [   0,    0,    0,    0, d_53, d_54, d_55]]

Now we have a matrix made of the spin-free elements with the dimension of the spin-orbit states. Note, this is not the spin-orbit matrix. This is only to prepare the matrix for the complex transformation with the eigenvectors gotten from Molcas in the eigectors.txt file. That is taken care of by the following equation,

\[\left<\psi_1^{SO}|\mu^e|\psi_2^{SO}\right> = \sum_{k,m}U_{k1}^{0*}U_{m2}^{0} \left<\psi_k|\mu_{1,2}^{e,SF}\left(Q\right)|\psi_m\right>\]
Parameters:
  • nstates_sf (int, input) – Number of spin-free states.

  • nstates (int, input) – Number of spin-orbit states.

  • multiplicity (numpy.array, input) – 1D array detailing which spin-free states have which multiplicity.

  • dprop_dq_sf (numpy.array, input) – Array of the spin-free derivative elements.

  • dprop_dq_so (numpy.array, output) – Array of the spin-free derivatives extended to the size of spin-orbit states.