# 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_e_n`

  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 mono electronic hamiltonian on the MOs basis : sum of the kinetic and nuclear electronic potential (and pseudo potential if needed)

  Needs:

  `do_pseudo` `mo_integrals_n_e` | `mo_kinetic_integrals` `mo_num` | `mo_pseudo_integrals` `read_mo_one_e_integrals`

  Needed by:

  `core_energy` `core_energy_erf` | `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`

  Needed by:

  `mo_one_e_integrals` |  |

`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`

  Needed by:

  `fock_matrix_ao` |  |

## 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` | `s_mo_coef` | `mo_num`

  Called by:

  `fock_matrix_ao` |  |

  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_num` | `mo_coef`

  Calls:

  `dgemm()` |  |

`orthonormalize_mos:`()

  File : `mo_one_e_ints/orthonormalize.irp.f`

      subroutine orthonormalize_mos

  Needs:

  `mo_label` `ao_num` | `mo_overlap` `mo_num` | `mo_coef`

  Called by:

  `save_ortho_mos()` | `scf()` |

  Calls:

  `ortho_lowdin()` |  |

  Touches:

  `mo_coef` | `mo_label` |