mo_one_e_integrals

All the one-electron integrals in MO basis are defined here.

The most important providers for usual quantum-chemistry calculation are:

  • mo_kinetic_integrals which are the kinetic operator integrals on the AO basis (see kin_mo_ints.irp.f)

  • mo_integrals_n_e which are the nuclear-elctron operator integrals on the AO basis (see pot_mo_ints.irp.f)

  • mo_one_e_integrals which are the the h_core operator integrals on the AO basis (see mo_mono_ints.irp.f)

Note that you can find other interesting integrals related to the position operator in spread_dipole_mo.irp.f.

EZFIO parameters

mo_integrals_e_n

Nucleus-electron integrals in MO basis set

io_mo_integrals_e_n

Read/Write MO electron-nucleus attraction integrals from/to disk [ Write | Read | None ]

Default: None

mo_integrals_kinetic

Kinetic energy integrals in MO basis set

io_mo_integrals_kinetic

Read/Write MO one-electron kinetic integrals from/to disk [ Write | Read | None ]

Default: None

mo_integrals_pseudo

Pseudopotential integrals in MO basis set

io_mo_integrals_pseudo

Read/Write MO pseudopotential integrals from/to disk [ Write | Read | None ]

Default: None

mo_one_e_integrals

One-electron integrals in MO basis set

io_mo_one_e_integrals

Read/Write MO one-electron integrals from/to disk [ Write | Read | None ]

Default: None

Providers

mo_dipole_x

File : mo_one_e_ints/spread_dipole_mo.irp.f

double precision, allocatable   :: mo_dipole_x  (mo_num,mo_num)
double precision, allocatable   :: mo_dipole_y  (mo_num,mo_num)
double precision, allocatable   :: mo_dipole_z  (mo_num,mo_num)

array of the integrals of MO_i * x MO_j array of the integrals of MO_i * y MO_j array of the integrals of MO_i * z MO_j

Needs:

  • ao_dipole_x

  • ao_num

  • mo_coef

  • mo_num

mo_dipole_y

File : mo_one_e_ints/spread_dipole_mo.irp.f

double precision, allocatable   :: mo_dipole_x  (mo_num,mo_num)
double precision, allocatable   :: mo_dipole_y  (mo_num,mo_num)
double precision, allocatable   :: mo_dipole_z  (mo_num,mo_num)

array of the integrals of MO_i * x MO_j array of the integrals of MO_i * y MO_j array of the integrals of MO_i * z MO_j

Needs:

  • ao_dipole_x

  • ao_num

  • mo_coef

  • mo_num

mo_dipole_z

File : mo_one_e_ints/spread_dipole_mo.irp.f

double precision, allocatable   :: mo_dipole_x  (mo_num,mo_num)
double precision, allocatable   :: mo_dipole_y  (mo_num,mo_num)
double precision, allocatable   :: mo_dipole_z  (mo_num,mo_num)

array of the integrals of MO_i * x MO_j array of the integrals of MO_i * y MO_j array of the integrals of MO_i * z MO_j

Needs:

  • ao_dipole_x

  • ao_num

  • mo_coef

  • mo_num

mo_integrals_n_e

File : mo_one_e_ints/pot_mo_ints.irp.f

double precision, allocatable   :: mo_integrals_n_e     (mo_num,mo_num)

Nucleus-electron interaction on the MO basis

Needs:

  • ao_integrals_n_e

  • ao_num

  • mo_coef

  • mo_num

  • read_mo_integrals_n_e

Needed by:

  • mo_one_e_integrals

  • ref_bitmask_energy

mo_integrals_n_e_per_atom

File : mo_one_e_ints/pot_mo_ints.irp.f

double precision, allocatable   :: mo_integrals_n_e_per_atom    (mo_num,mo_num,nucl_num)

mo_integrals_n_e_per_atom(i,j,k) = \(\langle \phi_i| -\frac{1}{|r-R_k|} | \phi_j \rangle\) . where R_k is the coordinate of the k-th nucleus.

Needs:

  • ao_integrals_n_e_per_atom

  • ao_num

  • mo_coef

  • mo_num

  • nucl_num

mo_kinetic_integrals

File : mo_one_e_ints/kin_mo_ints.irp.f

double precision, allocatable   :: mo_kinetic_integrals (mo_num,mo_num)

Kinetic energy integrals in the MO basis

Needs:

  • ao_kinetic_integrals

  • ao_num

  • mo_coef

  • mo_num

  • read_mo_integrals_kinetic

Needed by:

  • mo_one_e_integrals

  • ref_bitmask_energy

mo_one_e_integrals

File : mo_one_e_ints/mo_one_e_ints.irp.f

double precision, allocatable   :: mo_one_e_integrals   (mo_num,mo_num)

array of the one-electron Hamiltonian on the MO basis : sum of the kinetic and nuclear electronic potentials (and pseudo potential if needed)

Needs:

  • mo_integrals_n_e

  • mo_kinetic_integrals

  • mo_num

  • read_mo_one_e_integrals

Needed by:

  • core_energy

  • fock_operator_closed_shell_ref_bitmask

  • psi_energy_h_core

  • ref_bitmask_energy

mo_overlap

File : mo_one_e_ints/mo_overlap.irp.f

double precision, allocatable   :: mo_overlap   (mo_num,mo_num)

Provider to check that the MOs are indeed orthonormal.

Needs:

  • ao_num

  • ao_overlap

  • mo_coef

  • mo_num

mo_pseudo_integrals

File : mo_one_e_ints/pot_mo_pseudo_ints.irp.f

double precision, allocatable   :: mo_pseudo_integrals  (mo_num,mo_num)

Pseudopotential integrals in MO basis

Needs:

  • ao_num

  • ao_pseudo_integrals

  • do_pseudo

  • mo_coef

  • mo_num

  • read_mo_integrals_pseudo

mo_spread_x

File : mo_one_e_ints/spread_dipole_mo.irp.f

double precision, allocatable   :: mo_spread_x  (mo_num,mo_num)
double precision, allocatable   :: mo_spread_y  (mo_num,mo_num)
double precision, allocatable   :: mo_spread_z  (mo_num,mo_num)

array of the integrals of MO_i * x^2 MO_j array of the integrals of MO_i * y^2 MO_j array of the integrals of MO_i * z^2 MO_j

Needs:

  • ao_num

  • ao_spread_x

  • mo_coef

  • mo_num

mo_spread_y

File : mo_one_e_ints/spread_dipole_mo.irp.f

double precision, allocatable   :: mo_spread_x  (mo_num,mo_num)
double precision, allocatable   :: mo_spread_y  (mo_num,mo_num)
double precision, allocatable   :: mo_spread_z  (mo_num,mo_num)

array of the integrals of MO_i * x^2 MO_j array of the integrals of MO_i * y^2 MO_j array of the integrals of MO_i * z^2 MO_j

Needs:

  • ao_num

  • ao_spread_x

  • mo_coef

  • mo_num

mo_spread_z

File : mo_one_e_ints/spread_dipole_mo.irp.f

double precision, allocatable   :: mo_spread_x  (mo_num,mo_num)
double precision, allocatable   :: mo_spread_y  (mo_num,mo_num)
double precision, allocatable   :: mo_spread_z  (mo_num,mo_num)

array of the integrals of MO_i * x^2 MO_j array of the integrals of MO_i * y^2 MO_j array of the integrals of MO_i * z^2 MO_j

Needs:

  • ao_num

  • ao_spread_x

  • mo_coef

  • mo_num

s_mo_coef

File : mo_one_e_ints/ao_to_mo.irp.f

double precision, allocatable   :: s_mo_coef    (ao_num,mo_num)

Product S.C where S is the overlap matrix in the AO basis and C the mo_coef matrix.

Needs:

  • ao_num

  • ao_overlap

  • mo_coef

  • mo_num

Subroutines / functions

mo_to_ao:

File : mo_one_e_ints/ao_to_mo.irp.f

subroutine mo_to_ao(A_mo,LDA_mo,A_ao,LDA_ao)

Transform A from the MO basis to the AO basis

$(S.C).A_{mo}.(S.C)^dagger$

Needs:

  • ao_num

  • mo_num

  • s_mo_coef

Calls:

  • dgemm()

mo_to_ao_no_overlap:

File : mo_one_e_ints/ao_to_mo.irp.f

subroutine mo_to_ao_no_overlap(A_mo,LDA_mo,A_ao,LDA_ao)

$C.A_{mo}.C^dagger$

Needs:

  • ao_num

  • mo_coef

  • mo_num

Called by:

  • one_e_dm_alpha_ao_for_dft

  • one_e_dm_alpha_ao_for_dft_no_core

Calls:

  • dgemm()

orthonormalize_mos:

File : mo_one_e_ints/orthonormalize.irp.f

subroutine orthonormalize_mos

Needs:

  • ao_num

  • lin_dep_cutoff

  • mo_coef

  • mo_num

  • mo_overlap

Called by:

  • save_natural_mos()

Calls:

  • nullify_small_elements()

  • ortho_lowdin()

  • restore_symmetry()

Touches:

  • mo_coef