# ao_one_e_integrals

All the one-electron integrals in the AO basis are here.

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

- `ao_kinetic_integral` which are the kinetic operator integrals on the AO basis (see `kin_ao_ints.irp.f`)
- `ao_nucl_elec_integral` which are the nuclear-elctron operator integrals on the AO basis (see `pot_ao_ints.irp.f`)
- `ao_one_e_integrals` which are the the h_core operator integrals on the AO basis (see `ao_mono_ints.irp.f`)

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

## EZFIO parameters

`ao_integrals_e_n```

  Nucleus-electron integrals in AO basis set

`io_ao_integrals_e_n```

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

  Default: None

`ao_integrals_kinetic```

  Kinetic energy integrals in AO basis set

`io_ao_integrals_kinetic```

  Read/Write AO kinetic integrals from/to disk [ Write | Read | None ]

  Default: None

`ao_integrals_pseudo```

  Pseudopotential integrals in AO basis set

`io_ao_integrals_pseudo```

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

  Default: None

`ao_integrals_overlap```

  Overlap integrals in AO basis set

`io_ao_integrals_overlap```

  Read/Write AO overlap integrals from/to disk [ Write | Read | None ]

  Default: None

`ao_one_e_integrals```

  Combined integrals in AO basis set

`io_ao_one_e_integrals```

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

  Default: None

## Providers

`ao_cart_to_sphe_coef`

  File : `ao_one_e_ints/ao_ortho_canonical.irp.f`

      double precision, allocatable   :: ao_cart_to_sphe_coef (ao_num,ao_num)
      integer :: ao_cart_to_sphe_num

  Coefficients to go from cartesian to spherical coordinates in the current basis set

  Needs:

  `ao_l` `ao_num` `ao_power` `cart_to_sphe_1` | `cart_to_sphe_2` `cart_to_sphe_3` `cart_to_sphe_4` `cart_to_sphe_5` | `cart_to_sphe_6` `cart_to_sphe_7` `cart_to_sphe_8` `cart_to_sphe_9`

  Needed by:

  `ao_cart_to_sphe_inv` | `ao_cart_to_sphe_overlap` | `ao_ortho_canonical_coef`

`ao_cart_to_sphe_inv`

  File : `ao_one_e_ints/ao_ortho_canonical.irp.f`

      double precision, allocatable   :: ao_cart_to_sphe_inv  (ao_cart_to_sphe_num,ao_num)

  Inverse of `ao_cart_to_sphe_coef`

  Needs:

  `ao_cart_to_sphe_coef` | `ao_num` |

`ao_cart_to_sphe_num`

  File : `ao_one_e_ints/ao_ortho_canonical.irp.f`

      double precision, allocatable   :: ao_cart_to_sphe_coef (ao_num,ao_num)
      integer :: ao_cart_to_sphe_num

  Coefficients to go from cartesian to spherical coordinates in the current basis set

  Needs:

  `ao_l` `ao_num` `ao_power` `cart_to_sphe_1` | `cart_to_sphe_2` `cart_to_sphe_3` `cart_to_sphe_4` `cart_to_sphe_5` | `cart_to_sphe_6` `cart_to_sphe_7` `cart_to_sphe_8` `cart_to_sphe_9`

  Needed by:

  `ao_cart_to_sphe_inv` | `ao_cart_to_sphe_overlap` | `ao_ortho_canonical_coef`

`ao_cart_to_sphe_overlap`

  File : `ao_one_e_ints/ao_ortho_canonical.irp.f`

      double precision, allocatable   :: ao_cart_to_sphe_overlap      (ao_cart_to_sphe_num,ao_cart_to_sphe_num)

  AO overlap matrix in the spherical basis set

  Needs:

  `ao_cart_to_sphe_coef` | `ao_num` | `ao_overlap`

  Needed by:

  `ao_ortho_canonical_coef` |  |

`ao_deriv2_x`

  File : `ao_one_e_ints/kin_ao_ints.irp.f`

      double precision, allocatable   :: ao_deriv2_x  (ao_num,ao_num)
      double precision, allocatable   :: ao_deriv2_y  (ao_num,ao_num)
      double precision, allocatable   :: ao_deriv2_z  (ao_num,ao_num)

  Second derivative matrix elements in the AO basis.

  :math:`{tt ao_deriv2_x} =
    langle chi_i(x,y,z) | frac{partial^2}{partial x^2} |chi_j (x,y,z) rangle`

  Needs:

  `ao_coef_normalized_ordered_transp` `ao_expo_ordered_transp` `ao_nucl` | `ao_num` `ao_power` | `ao_prim_num` `nucl_coord`

  Needed by:

  `ao_kinetic_integrals` |  |

`ao_deriv2_y`

  File : `ao_one_e_ints/kin_ao_ints.irp.f`

      double precision, allocatable   :: ao_deriv2_x  (ao_num,ao_num)
      double precision, allocatable   :: ao_deriv2_y  (ao_num,ao_num)
      double precision, allocatable   :: ao_deriv2_z  (ao_num,ao_num)

  Second derivative matrix elements in the AO basis.

  :math:`{tt ao_deriv2_x} =
    langle chi_i(x,y,z) | frac{partial^2}{partial x^2} |chi_j (x,y,z) rangle`

  Needs:

  `ao_coef_normalized_ordered_transp` `ao_expo_ordered_transp` `ao_nucl` | `ao_num` `ao_power` | `ao_prim_num` `nucl_coord`

  Needed by:

  `ao_kinetic_integrals` |  |

`ao_deriv2_z`

  File : `ao_one_e_ints/kin_ao_ints.irp.f`

      double precision, allocatable   :: ao_deriv2_x  (ao_num,ao_num)
      double precision, allocatable   :: ao_deriv2_y  (ao_num,ao_num)
      double precision, allocatable   :: ao_deriv2_z  (ao_num,ao_num)

  Second derivative matrix elements in the AO basis.

  :math:`{tt ao_deriv2_x} =
    langle chi_i(x,y,z) | frac{partial^2}{partial x^2} |chi_j (x,y,z) rangle`

  Needs:

  `ao_coef_normalized_ordered_transp` `ao_expo_ordered_transp` `ao_nucl` | `ao_num` `ao_power` | `ao_prim_num` `nucl_coord`

  Needed by:

  `ao_kinetic_integrals` |  |

`ao_deriv_1_x`

  File : `ao_one_e_ints/spread_dipole_ao.irp.f`

      double precision, allocatable   :: ao_deriv_1_x (ao_num,ao_num)
      double precision, allocatable   :: ao_deriv_1_y (ao_num,ao_num)
      double precision, allocatable   :: ao_deriv_1_z (ao_num,ao_num)

  - array of the integrals of AO_i * d/dx AO_j
  - array of the integrals of AO_i * d/dy AO_j
  - array of the integrals of AO_i * d/dz AO_j

  Needs:

  `ao_coef_normalized_ordered_transp` `ao_expo_ordered_transp` `ao_nucl` | `ao_num` `ao_power` | `ao_prim_num` `nucl_coord`

`ao_deriv_1_y`

  File : `ao_one_e_ints/spread_dipole_ao.irp.f`

      double precision, allocatable   :: ao_deriv_1_x (ao_num,ao_num)
      double precision, allocatable   :: ao_deriv_1_y (ao_num,ao_num)
      double precision, allocatable   :: ao_deriv_1_z (ao_num,ao_num)

  - array of the integrals of AO_i * d/dx AO_j
  - array of the integrals of AO_i * d/dy AO_j
  - array of the integrals of AO_i * d/dz AO_j

  Needs:

  `ao_coef_normalized_ordered_transp` `ao_expo_ordered_transp` `ao_nucl` | `ao_num` `ao_power` | `ao_prim_num` `nucl_coord`

`ao_deriv_1_z`

  File : `ao_one_e_ints/spread_dipole_ao.irp.f`

      double precision, allocatable   :: ao_deriv_1_x (ao_num,ao_num)
      double precision, allocatable   :: ao_deriv_1_y (ao_num,ao_num)
      double precision, allocatable   :: ao_deriv_1_z (ao_num,ao_num)

  - array of the integrals of AO_i * d/dx AO_j
  - array of the integrals of AO_i * d/dy AO_j
  - array of the integrals of AO_i * d/dz AO_j

  Needs:

  `ao_coef_normalized_ordered_transp` `ao_expo_ordered_transp` `ao_nucl` | `ao_num` `ao_power` | `ao_prim_num` `nucl_coord`

`ao_dipole_x`

  File : `ao_one_e_ints/spread_dipole_ao.irp.f`

      double precision, allocatable   :: ao_dipole_x  (ao_num,ao_num)
      double precision, allocatable   :: ao_dipole_y  (ao_num,ao_num)
      double precision, allocatable   :: ao_dipole_z  (ao_num,ao_num)

  - array of the integrals of AO_i * x AO_j
  - array of the integrals of AO_i * y AO_j
  - array of the integrals of AO_i * z AO_j

  Needs:

  `ao_coef_normalized_ordered_transp` `ao_expo_ordered_transp` `ao_nucl` | `ao_num` `ao_power` | `ao_prim_num` `nucl_coord`

  Needed by:

  `mo_dipole_x` |  |

`ao_dipole_y`

  File : `ao_one_e_ints/spread_dipole_ao.irp.f`

      double precision, allocatable   :: ao_dipole_x  (ao_num,ao_num)
      double precision, allocatable   :: ao_dipole_y  (ao_num,ao_num)
      double precision, allocatable   :: ao_dipole_z  (ao_num,ao_num)

  - array of the integrals of AO_i * x AO_j
  - array of the integrals of AO_i * y AO_j
  - array of the integrals of AO_i * z AO_j

  Needs:

  `ao_coef_normalized_ordered_transp` `ao_expo_ordered_transp` `ao_nucl` | `ao_num` `ao_power` | `ao_prim_num` `nucl_coord`

  Needed by:

  `mo_dipole_x` |  |

`ao_dipole_z`

  File : `ao_one_e_ints/spread_dipole_ao.irp.f`

      double precision, allocatable   :: ao_dipole_x  (ao_num,ao_num)
      double precision, allocatable   :: ao_dipole_y  (ao_num,ao_num)
      double precision, allocatable   :: ao_dipole_z  (ao_num,ao_num)

  - array of the integrals of AO_i * x AO_j
  - array of the integrals of AO_i * y AO_j
  - array of the integrals of AO_i * z AO_j

  Needs:

  `ao_coef_normalized_ordered_transp` `ao_expo_ordered_transp` `ao_nucl` | `ao_num` `ao_power` | `ao_prim_num` `nucl_coord`

  Needed by:

  `mo_dipole_x` |  |

`ao_integrals_n_e`

  File : `ao_one_e_ints/pot_ao_ints.irp.f`

      double precision, allocatable   :: ao_integrals_n_e     (ao_num,ao_num)

  Nucleus-electron interaction, in the AO basis set.

  \(\langle \chi_i | -\sum_A \frac{1}{|r-R_A|} | \chi_j \rangle\)

  Needs:

  `ao_coef_normalized_ordered_transp` `ao_expo_ordered_transp` `ao_nucl` `ao_num` | `ao_power` `ao_prim_num` `n_pt_max_integrals` `nucl_charge` | `nucl_coord` `nucl_num` `read_ao_integrals_e_n`

  Needed by:

  `ao_one_e_integrals` `ao_ortho_canonical_nucl_elec_integrals` | `ao_ortho_lowdin_nucl_elec_integrals` | `mo_integrals_n_e`

`ao_integrals_n_e_per_atom`

  File : `ao_one_e_ints/pot_ao_ints.irp.f`

      double precision, allocatable   :: ao_integrals_n_e_per_atom    (ao_num,ao_num,nucl_num)

  Nucleus-electron interaction in the AO basis set, per atom A.

  \(\langle \chi_i | -\frac{1}{|r-R_A|} | \chi_j \rangle\)

  Needs:

  `ao_coef_normalized_ordered_transp` `ao_expo_ordered_transp` `ao_nucl` | `ao_num` `ao_power` `ao_prim_num` | `n_pt_max_integrals` `nucl_coord` `nucl_num`

  Needed by:

  `mo_integrals_n_e_per_atom` |  |

`ao_kinetic_integrals`

  File : `ao_one_e_ints/kin_ao_ints.irp.f`

      double precision, allocatable   :: ao_kinetic_integrals (ao_num,ao_num)

  Kinetic energy integrals in the AO basis.

  \(\langle \chi_i |\hat{T}| \chi_j \rangle\)

  Needs:

  `ao_deriv2_x` | `ao_num` | `read_ao_integrals_kinetic`

  Needed by:

  `ao_one_e_integrals` | `mo_kinetic_integrals` |

`ao_one_e_integrals`

  File : `ao_one_e_ints/ao_one_e_ints.irp.f`

      double precision, allocatable   :: ao_one_e_integrals   (ao_num,ao_num)
      double precision, allocatable   :: ao_one_e_integrals_diag      (ao_num)

  One-electron Hamiltonian in the AO basis.

  Needs:

  `ao_integrals_n_e` `ao_kinetic_integrals` | `ao_num` `ao_pseudo_integrals` | `do_pseudo` `read_ao_one_e_integrals`

  Needed by:

  `fock_matrix_ao_alpha` | `hf_energy` | `scf_energy`

`ao_one_e_integrals_diag`

  File : `ao_one_e_ints/ao_one_e_ints.irp.f`

      double precision, allocatable   :: ao_one_e_integrals   (ao_num,ao_num)
      double precision, allocatable   :: ao_one_e_integrals_diag      (ao_num)

  One-electron Hamiltonian in the AO basis.

  Needs:

  `ao_integrals_n_e` `ao_kinetic_integrals` | `ao_num` `ao_pseudo_integrals` | `do_pseudo` `read_ao_one_e_integrals`

  Needed by:

  `fock_matrix_ao_alpha` | `hf_energy` | `scf_energy`

`ao_ortho_canonical_coef`

  File : `ao_one_e_ints/ao_ortho_canonical.irp.f`

      double precision, allocatable   :: ao_ortho_canonical_coef      (ao_num,ao_num)
      integer :: ao_ortho_canonical_num

  matrix of the coefficients of the mos generated by the orthonormalization by the S^{-1/2} canonical transformation of the aos ao_ortho_canonical_coef(i,j) = coefficient of the ith ao on the jth ao_ortho_canonical orbital

  Needs:

  `ao_cart_to_sphe_coef` `ao_cart_to_sphe_overlap` | `ao_cartesian` `ao_num` | `ao_overlap`

  Needed by:

  `ao_ortho_canonical_coef_inv` `ao_ortho_canonical_nucl_elec_integrals` | `ao_ortho_canonical_overlap` `mo_coef` | `mo_num`

`ao_ortho_canonical_coef_inv`

  File : `ao_one_e_ints/ao_ortho_canonical.irp.f`

      double precision, allocatable   :: ao_ortho_canonical_coef_inv  (ao_num,ao_num)

  ao_ortho_canonical_coef^(-1)

  Needs:

  `ao_num` | `ao_ortho_canonical_coef` |

  Needed by:

  `mo_coef_in_ao_ortho_basis` |  |

`ao_ortho_canonical_num`

  File : `ao_one_e_ints/ao_ortho_canonical.irp.f`

      double precision, allocatable   :: ao_ortho_canonical_coef      (ao_num,ao_num)
      integer :: ao_ortho_canonical_num

  matrix of the coefficients of the mos generated by the orthonormalization by the S^{-1/2} canonical transformation of the aos ao_ortho_canonical_coef(i,j) = coefficient of the ith ao on the jth ao_ortho_canonical orbital

  Needs:

  `ao_cart_to_sphe_coef` `ao_cart_to_sphe_overlap` | `ao_cartesian` `ao_num` | `ao_overlap`

  Needed by:

  `ao_ortho_canonical_coef_inv` `ao_ortho_canonical_nucl_elec_integrals` | `ao_ortho_canonical_overlap` `mo_coef` | `mo_num`

`ao_ortho_canonical_overlap`

  File : `ao_one_e_ints/ao_ortho_canonical.irp.f`

      double precision, allocatable   :: ao_ortho_canonical_overlap   (ao_ortho_canonical_num,ao_ortho_canonical_num)

  overlap matrix of the ao_ortho_canonical. Expected to be the Identity

  Needs:

  `ao_num` | `ao_ortho_canonical_coef` | `ao_overlap`

`ao_overlap`

  File : `ao_one_e_ints/ao_overlap.irp.f`

      double precision, allocatable   :: ao_overlap   (ao_num,ao_num)
      double precision, allocatable   :: ao_overlap_x (ao_num,ao_num)
      double precision, allocatable   :: ao_overlap_y (ao_num,ao_num)
      double precision, allocatable   :: ao_overlap_z (ao_num,ao_num)

  Overlap between atomic basis functions:

  \(\int \chi_i(r) \chi_j(r) dr\)

  Needs:

  `ao_coef_normalized_ordered_transp` `ao_expo_ordered_transp` `ao_nucl` | `ao_num` `ao_power` `ao_prim_num` | `nucl_coord` `read_ao_integrals_overlap`

  Needed by:

  `ao_cart_to_sphe_overlap` `ao_ortho_canonical_coef` `ao_ortho_canonical_overlap` `ao_ortho_lowdin_coef` | `ao_ortho_lowdin_overlap` `fps_spf_matrix_ao` `mo_overlap` `s_half` | `s_half_inv` `s_inv` `s_mo_coef`

`ao_overlap_abs`

  File : `ao_one_e_ints/ao_overlap.irp.f`

      double precision, allocatable   :: ao_overlap_abs       (ao_num,ao_num)

  Overlap between absolute values of atomic basis functions:

  \(\int |\chi_i(r)| |\chi_j(r)| dr\)

  Needs:

  `ao_coef_normalized_ordered_transp` `ao_expo_ordered_transp` `ao_nucl` | `ao_num` `ao_power` | `ao_prim_num` `nucl_coord`

  Needed by:

  `ao_two_e_integral_alpha` `mo_two_e_int_erf_jj_from_ao` | `mo_two_e_integral_jj_from_ao` | `mo_two_e_integrals_vv_from_ao`

`ao_overlap_x`

  File : `ao_one_e_ints/ao_overlap.irp.f`

      double precision, allocatable   :: ao_overlap   (ao_num,ao_num)
      double precision, allocatable   :: ao_overlap_x (ao_num,ao_num)
      double precision, allocatable   :: ao_overlap_y (ao_num,ao_num)
      double precision, allocatable   :: ao_overlap_z (ao_num,ao_num)

  Overlap between atomic basis functions:

  \(\int \chi_i(r) \chi_j(r) dr\)

  Needs:

  `ao_coef_normalized_ordered_transp` `ao_expo_ordered_transp` `ao_nucl` | `ao_num` `ao_power` `ao_prim_num` | `nucl_coord` `read_ao_integrals_overlap`

  Needed by:

  `ao_cart_to_sphe_overlap` `ao_ortho_canonical_coef` `ao_ortho_canonical_overlap` `ao_ortho_lowdin_coef` | `ao_ortho_lowdin_overlap` `fps_spf_matrix_ao` `mo_overlap` `s_half` | `s_half_inv` `s_inv` `s_mo_coef`

`ao_overlap_y`

  File : `ao_one_e_ints/ao_overlap.irp.f`

      double precision, allocatable   :: ao_overlap   (ao_num,ao_num)
      double precision, allocatable   :: ao_overlap_x (ao_num,ao_num)
      double precision, allocatable   :: ao_overlap_y (ao_num,ao_num)
      double precision, allocatable   :: ao_overlap_z (ao_num,ao_num)

  Overlap between atomic basis functions:

  \(\int \chi_i(r) \chi_j(r) dr\)

  Needs:

  `ao_coef_normalized_ordered_transp` `ao_expo_ordered_transp` `ao_nucl` | `ao_num` `ao_power` `ao_prim_num` | `nucl_coord` `read_ao_integrals_overlap`

  Needed by:

  `ao_cart_to_sphe_overlap` `ao_ortho_canonical_coef` `ao_ortho_canonical_overlap` `ao_ortho_lowdin_coef` | `ao_ortho_lowdin_overlap` `fps_spf_matrix_ao` `mo_overlap` `s_half` | `s_half_inv` `s_inv` `s_mo_coef`

`ao_overlap_z`

  File : `ao_one_e_ints/ao_overlap.irp.f`

      double precision, allocatable   :: ao_overlap   (ao_num,ao_num)
      double precision, allocatable   :: ao_overlap_x (ao_num,ao_num)
      double precision, allocatable   :: ao_overlap_y (ao_num,ao_num)
      double precision, allocatable   :: ao_overlap_z (ao_num,ao_num)

  Overlap between atomic basis functions:

  \(\int \chi_i(r) \chi_j(r) dr\)

  Needs:

  `ao_coef_normalized_ordered_transp` `ao_expo_ordered_transp` `ao_nucl` | `ao_num` `ao_power` `ao_prim_num` | `nucl_coord` `read_ao_integrals_overlap`

  Needed by:

  `ao_cart_to_sphe_overlap` `ao_ortho_canonical_coef` `ao_ortho_canonical_overlap` `ao_ortho_lowdin_coef` | `ao_ortho_lowdin_overlap` `fps_spf_matrix_ao` `mo_overlap` `s_half` | `s_half_inv` `s_inv` `s_mo_coef`

`ao_pseudo_integrals`

  File : `ao_one_e_ints/pot_ao_pseudo_ints.irp.f`

      double precision, allocatable   :: ao_pseudo_integrals  (ao_num,ao_num)

  Pseudo-potential integrals in the AO basis set.

  Needs:

  `ao_num` `ao_pseudo_integrals_local` `ao_pseudo_integrals_non_local` | `do_pseudo` `pseudo_klocmax` | `pseudo_kmax` `read_ao_integrals_pseudo`

  Needed by:

  `ao_one_e_integrals` | `mo_pseudo_integrals` |

`ao_pseudo_integrals_local`

  File : `ao_one_e_ints/pot_ao_pseudo_ints.irp.f`

      double precision, allocatable   :: ao_pseudo_integrals_local    (ao_num,ao_num)

  Local pseudo-potential

  Needs:

  `ao_coef_normalized_ordered_transp` `ao_expo_ordered_transp` `ao_nucl` `ao_num` | `ao_power` `ao_prim_num` `nucl_charge` `nucl_coord` | `nucl_num` `pseudo_klocmax` `pseudo_v_k_transp`

  Needed by:

  `ao_pseudo_integrals` |  |

`ao_pseudo_integrals_non_local`

  File : `ao_one_e_ints/pot_ao_pseudo_ints.irp.f`

      double precision, allocatable   :: ao_pseudo_integrals_non_local        (ao_num,ao_num)

  Non-local pseudo-potential

  Needs:

  `ao_coef_normalized_ordered_transp` `ao_expo_ordered_transp` `ao_nucl` `ao_num` | `ao_power` `ao_prim_num` `nucl_charge` `nucl_coord` | `nucl_num` `pseudo_kmax` `pseudo_lmax` `pseudo_v_kl_transp`

  Needed by:

  `ao_pseudo_integrals` |  |

`ao_spread_x`

  File : `ao_one_e_ints/spread_dipole_ao.irp.f`

      double precision, allocatable   :: ao_spread_x  (ao_num,ao_num)
      double precision, allocatable   :: ao_spread_y  (ao_num,ao_num)
      double precision, allocatable   :: ao_spread_z  (ao_num,ao_num)

  - array of the integrals of AO_i * x^2 AO_j
  - array of the integrals of AO_i * y^2 AO_j
  - array of the integrals of AO_i * z^2 AO_j

  Needs:

  `ao_coef_normalized_ordered_transp` `ao_expo_ordered_transp` `ao_nucl` | `ao_num` `ao_power` | `ao_prim_num` `nucl_coord`

  Needed by:

  `mo_spread_x` |  |

`ao_spread_y`

  File : `ao_one_e_ints/spread_dipole_ao.irp.f`

      double precision, allocatable   :: ao_spread_x  (ao_num,ao_num)
      double precision, allocatable   :: ao_spread_y  (ao_num,ao_num)
      double precision, allocatable   :: ao_spread_z  (ao_num,ao_num)

  - array of the integrals of AO_i * x^2 AO_j
  - array of the integrals of AO_i * y^2 AO_j
  - array of the integrals of AO_i * z^2 AO_j

  Needs:

  `ao_coef_normalized_ordered_transp` `ao_expo_ordered_transp` `ao_nucl` | `ao_num` `ao_power` | `ao_prim_num` `nucl_coord`

  Needed by:

  `mo_spread_x` |  |

`ao_spread_z`

  File : `ao_one_e_ints/spread_dipole_ao.irp.f`

      double precision, allocatable   :: ao_spread_x  (ao_num,ao_num)
      double precision, allocatable   :: ao_spread_y  (ao_num,ao_num)
      double precision, allocatable   :: ao_spread_z  (ao_num,ao_num)

  - array of the integrals of AO_i * x^2 AO_j
  - array of the integrals of AO_i * y^2 AO_j
  - array of the integrals of AO_i * z^2 AO_j

  Needs:

  `ao_coef_normalized_ordered_transp` `ao_expo_ordered_transp` `ao_nucl` | `ao_num` `ao_power` | `ao_prim_num` `nucl_coord`

  Needed by:

  `mo_spread_x` |  |

`give_polynomial_mult_center_one_e_erf:`()

  File : `ao_one_e_ints/pot_ao_erf_ints.irp.f`

        subroutine give_polynomial_mult_center_one_e_erf(A_center,B_center,alpha,beta,&
      power_A,power_B,C_center,n_pt_in,d,n_pt_out,mu_in)

  Returns the explicit polynomial in terms of the $t$ variable of the following polynomial:

  $I_{x1}(a_x, d_x,p,q) times I_{x1}(a_y, d_y,p,q) times I_{x1}(a_z, d_z,p,q)$.

  Calls:

  `i_x1_pol_mult_one_e()` | `multiply_poly()` |

`give_polynomial_mult_center_one_e_erf_opt:`()

  File : `ao_one_e_ints/pot_ao_erf_ints.irp.f`

        subroutine give_polynomial_mult_center_one_e_erf_opt(A_center,B_center,alpha,beta,&
      power_A,power_B,C_center,n_pt_in,d,n_pt_out,mu_in,p,p_inv,p_inv_2,p_new,P_center)

  Returns the explicit polynomial in terms of the $t$ variable of the following polynomial:

  $I_{x1}(a_x, d_x,p,q) times I_{x1}(a_y, d_y,p,q) times I_{x1}(a_z, d_z,p,q)$.

  Called by:

  `nai_pol_mult_erf()` |  |

  Calls:

  `i_x1_pol_mult_one_e()` | `multiply_poly()` |

`i_x1_pol_mult_one_e:`()

  File : `ao_one_e_ints/pot_ao_ints.irp.f`

      recursive subroutine I_x1_pol_mult_one_e(a,c,R1x,R1xp,R2x,d,nd,n_pt_in)

  Recursive routine involved in the electron-nucleus potential

  Called by:

  `give_polynomial_mult_center_one_e()` `give_polynomial_mult_center_one_e_erf()` | `give_polynomial_mult_center_one_e_erf_opt()` `i_x1_pol_mult_one_e()` | `i_x2_pol_mult_one_e()`

  Calls:

  `i_x1_pol_mult_one_e()` | `i_x2_pol_mult_one_e()` | `multiply_poly()`

`i_x2_pol_mult_one_e:`()

  File : `ao_one_e_ints/pot_ao_ints.irp.f`

      recursive subroutine I_x2_pol_mult_one_e(c,R1x,R1xp,R2x,d,nd,dim)

  Recursive routine involved in the electron-nucleus potential

  Called by:

  `i_x1_pol_mult_one_e()` |  |

  Calls:

  `i_x1_pol_mult_one_e()` | `multiply_poly()` |

`pseudo_dz_k_transp`

  File : `ao_one_e_ints/pot_ao_pseudo_ints.irp.f`

      double precision, allocatable   :: pseudo_v_k_transp    (pseudo_klocmax,nucl_num)
      integer, allocatable    :: pseudo_n_k_transp    (pseudo_klocmax,nucl_num)
      double precision, allocatable   :: pseudo_dz_k_transp   (pseudo_klocmax,nucl_num)

  Transposed arrays for pseudopotentials

  Needs:

  `nucl_num` `pseudo_dz_k` | `pseudo_klocmax` `pseudo_n_k` | `pseudo_v_k`

  Needed by:

  `ao_pseudo_integrals_local` |  |

`pseudo_dz_kl_transp`

  File : `ao_one_e_ints/pot_ao_pseudo_ints.irp.f`

      double precision, allocatable   :: pseudo_v_kl_transp   (pseudo_kmax,0:pseudo_lmax,nucl_num)
      integer, allocatable    :: pseudo_n_kl_transp   (pseudo_kmax,0:pseudo_lmax,nucl_num)
      double precision, allocatable   :: pseudo_dz_kl_transp  (pseudo_kmax,0:pseudo_lmax,nucl_num)

  Transposed arrays for pseudopotentials

  Needs:

  `nucl_num` `pseudo_dz_kl` | `pseudo_kmax` `pseudo_lmax` | `pseudo_n_kl` `pseudo_v_kl`

  Needed by:

  `ao_pseudo_integrals_non_local` |  |

`pseudo_n_k_transp`

  File : `ao_one_e_ints/pot_ao_pseudo_ints.irp.f`

      double precision, allocatable   :: pseudo_v_k_transp    (pseudo_klocmax,nucl_num)
      integer, allocatable    :: pseudo_n_k_transp    (pseudo_klocmax,nucl_num)
      double precision, allocatable   :: pseudo_dz_k_transp   (pseudo_klocmax,nucl_num)

  Transposed arrays for pseudopotentials

  Needs:

  `nucl_num` `pseudo_dz_k` | `pseudo_klocmax` `pseudo_n_k` | `pseudo_v_k`

  Needed by:

  `ao_pseudo_integrals_local` |  |

`pseudo_n_kl_transp`

  File : `ao_one_e_ints/pot_ao_pseudo_ints.irp.f`

      double precision, allocatable   :: pseudo_v_kl_transp   (pseudo_kmax,0:pseudo_lmax,nucl_num)
      integer, allocatable    :: pseudo_n_kl_transp   (pseudo_kmax,0:pseudo_lmax,nucl_num)
      double precision, allocatable   :: pseudo_dz_kl_transp  (pseudo_kmax,0:pseudo_lmax,nucl_num)

  Transposed arrays for pseudopotentials

  Needs:

  `nucl_num` `pseudo_dz_kl` | `pseudo_kmax` `pseudo_lmax` | `pseudo_n_kl` `pseudo_v_kl`

  Needed by:

  `ao_pseudo_integrals_non_local` |  |

`pseudo_v_k_transp`

  File : `ao_one_e_ints/pot_ao_pseudo_ints.irp.f`

      double precision, allocatable   :: pseudo_v_k_transp    (pseudo_klocmax,nucl_num)
      integer, allocatable    :: pseudo_n_k_transp    (pseudo_klocmax,nucl_num)
      double precision, allocatable   :: pseudo_dz_k_transp   (pseudo_klocmax,nucl_num)

  Transposed arrays for pseudopotentials

  Needs:

  `nucl_num` `pseudo_dz_k` | `pseudo_klocmax` `pseudo_n_k` | `pseudo_v_k`

  Needed by:

  `ao_pseudo_integrals_local` |  |

`pseudo_v_kl_transp`

  File : `ao_one_e_ints/pot_ao_pseudo_ints.irp.f`

      double precision, allocatable   :: pseudo_v_kl_transp   (pseudo_kmax,0:pseudo_lmax,nucl_num)
      integer, allocatable    :: pseudo_n_kl_transp   (pseudo_kmax,0:pseudo_lmax,nucl_num)
      double precision, allocatable   :: pseudo_dz_kl_transp  (pseudo_kmax,0:pseudo_lmax,nucl_num)

  Transposed arrays for pseudopotentials

  Needs:

  `nucl_num` `pseudo_dz_kl` | `pseudo_kmax` `pseudo_lmax` | `pseudo_n_kl` `pseudo_v_kl`

  Needed by:

  `ao_pseudo_integrals_non_local` |  |

`s_half`

  File : `ao_one_e_ints/ao_overlap.irp.f`

      double precision, allocatable   :: s_half       (ao_num,ao_num)

  \(S^{1/2}\)

  Needs:

  `ao_num` | `ao_overlap` |

`s_half_inv`

  File : `ao_one_e_ints/ao_overlap.irp.f`

      double precision, allocatable   :: s_half_inv   (AO_num,AO_num)

  \(X = S^{-1/2}\) obtained by SVD

  Needs:

  `ao_num` | `ao_overlap` |

  Needed by:

  `eigenvalues_fock_matrix_ao` |  |

`s_inv`

  File : `ao_one_e_ints/ao_overlap.irp.f`

      double precision, allocatable   :: s_inv        (ao_num,ao_num)

  Inverse of the overlap matrix

  Needs:

  `ao_num` | `ao_overlap` |

## Subroutines / functions

`give_all_erf_kl_ao:`()

  File : `ao_one_e_ints/pot_ao_erf_ints.irp.f`

      subroutine give_all_erf_kl_ao(integrals_ao,mu_in,C_center)

  Subroutine that returns all integrals over $r$ of type $frac{ erf(mu * |r-R_C|) }{ |r-R_C| }$

  Needs:

  `ao_num` |  |

`give_polynomial_mult_center_one_e:`()

  File : `ao_one_e_ints/pot_ao_ints.irp.f`

      subroutine give_polynomial_mult_center_one_e(A_center,B_center,alpha,beta,power_A,power_B,C_center,n_pt_in,d,n_pt_out)

  Returns the explicit polynomial in terms of the “t” variable of the following

  $I_{x1}(a_x, d_x,p,q) times I_{x1}(a_y, d_y,p,q) times I_{x1}(a_z, d_z,p,q)$.

  Called by:

  `nai_pol_mult()` |  |

  Calls:

  `i_x1_pol_mult_one_e()` | `multiply_poly()` |

`int_gaus_pol:`()

  File : `ao_one_e_ints/pot_ao_ints.irp.f`

      double precision function int_gaus_pol(alpha,n)

  Computes the integral:

  $int_{-infty}^{infty} x^n exp(-alpha x^2) dx$.

`nai_pol_mult:`()

  File : `ao_one_e_ints/pot_ao_ints.irp.f`

      double precision function NAI_pol_mult(A_center,B_center,power_A,power_B,alpha,beta,C_center,n_pt_in)

  Computes the electron-nucleus attraction with two primitves.

  \(\langle g_i | \frac{1}{|r-R_c|} | g_j \rangle\)

  Calls:

  `give_polynomial_mult_center_one_e()` |  |

`nai_pol_mult_erf:`()

  File : `ao_one_e_ints/pot_ao_erf_ints.irp.f`

      double precision function NAI_pol_mult_erf(A_center,B_center,power_A,power_B,alpha,beta,C_center,n_pt_in,mu_in)

  Computes the following integral : $int dr (x-A_x)^a (x-B_x)^b exp(-alpha (x-A_x)^2 - beta (x-B_x)^2 )

  > frac{erf(mu |r-R_C|)}{|r-R_c|}$.

  Calls:

  `give_polynomial_mult_center_one_e_erf_opt()` |  |

`nai_pol_mult_erf_ao:`()

  File : `ao_one_e_ints/pot_ao_erf_ints.irp.f`

      double precision function NAI_pol_mult_erf_ao(i_ao,j_ao,mu_in,C_center)

  Computes the following integral : $int_{-infty}^{infty} dr chi_i(r) chi_j(r) frac{erf(mu |r-R_C|)}{|r-R_C|}$.

  Needs:

  `n_pt_max_integrals` `ao_coef_normalized_ordered_transp` `ao_power` | `ao_expo_ordered_transp` `ao_prim_num` | `ao_nucl` `nucl_coord`

`overlap_bourrin_deriv_x:`()

  File : `ao_one_e_ints/spread_dipole_ao.irp.f`

      subroutine overlap_bourrin_deriv_x(i_component,A_center,B_center,alpha,beta,power_A,power_B,dx,lower_exp_val,overlap_x,nx)

  Called by:

  `ao_deriv_1_x` |  |

  Calls:

  `overlap_bourrin_x()` |  |

`overlap_bourrin_dipole:`()

  File : `ao_one_e_ints/spread_dipole_ao.irp.f`

      subroutine overlap_bourrin_dipole(A_center,B_center,alpha,beta,power_A,power_B,overlap_x,lower_exp_val,dx,nx)

  Called by:

  `ao_dipole_x` |  |

`overlap_bourrin_spread:`()

  File : `ao_one_e_ints/spread_dipole_ao.irp.f`

      subroutine overlap_bourrin_spread(A_center,B_center,alpha,beta,power_A,power_B,overlap_x,lower_exp_val,dx,nx)

  Computes the following integral :
    int [-infty ; +infty] of [(x-A_center)^(power_A) * (x-B_center)^power_B * exp(-alpha(x-A_center)^2) * exp(-beta(x-B_center)^2) * x ] needed for the dipole and those things

  Called by:

  `ao_spread_x` |  |

`overlap_bourrin_x:`()

  File : `ao_one_e_ints/spread_dipole_ao.irp.f`

      subroutine overlap_bourrin_x(A_center,B_center,alpha,beta,power_A,power_B,overlap_x,lower_exp_val,dx,nx)

  Called by:

  `overlap_bourrin_deriv_x()` |  |

`v_e_n:`()

  File : `ao_one_e_ints/pot_ao_ints.irp.f`

      double precision function V_e_n(a_x,a_y,a_z,b_x,b_y,b_z,alpha,beta)

  Primitve nuclear attraction between the two primitves centered on the same atom.

  $p_1 = x^{a_x} y^{a_y} z^{a_z} exp(-alpha r^2)$

  $p_2 = x^{b_x} y^{b_y} z^{b_z} exp(-beta r^2)$

`v_phi:`()

  File : `ao_one_e_ints/pot_ao_ints.irp.f`

      double precision function V_phi(n,m)

  Computes the angular $phi$ part of the nuclear attraction integral:

  $int_{0}^{2 pi} cos(phi)^n sin(phi)^m dphi$.

`v_r:`()

  File : `ao_one_e_ints/pot_ao_ints.irp.f`

      double precision function V_r(n,alpha)

  Computes the radial part of the nuclear attraction integral:

  $int_{0}^{infty} r^n exp(-alpha r^2) dr$

`v_theta:`()

  File : `ao_one_e_ints/pot_ao_ints.irp.f`

      double precision function V_theta(n,m)

  Computes the angular $theta$ part of the nuclear attraction integral:

  $int_{0}^{pi} cos(theta)^n sin(theta)^m dtheta$

`wallis:`()

  File : `ao_one_e_ints/pot_ao_ints.irp.f`

      double precision function Wallis(n)

  Wallis integral:

  $int_{0}^{pi} cos(theta)^n dtheta$.