BEGIN_PROVIDER [double precision, mo_pseudo_integrals, (mo_num,mo_num)]
  implicit none
  BEGIN_DOC
  ! Pseudopotential integrals in |MO| basis
  END_DOC

  if (read_mo_integrals_pseudo) then
    call ezfio_get_mo_one_e_ints_mo_integrals_pseudo(mo_pseudo_integrals)
    print *,  'MO pseudopotential integrals read from disk'
  else if (do_pseudo) then
      call ao_to_mo(                                                   &
        ao_pseudo_integrals,                                         &
        size(ao_pseudo_integrals,1),                                 &
        mo_pseudo_integrals,                                         &
        size(mo_pseudo_integrals,1)                                  &
        )
  else
      mo_pseudo_integrals = 0.d0
  endif

  if (write_mo_integrals_pseudo) then
    call ezfio_set_mo_one_e_ints_mo_integrals_pseudo(mo_pseudo_integrals)
    print *,  'MO pseudopotential integrals written to disk'
  endif

END_PROVIDER

BEGIN_PROVIDER [ double precision, mo_pseudo_integrals_diag,(mo_num)]
  implicit none
  integer                        :: i
  BEGIN_DOC
  ! diagonal elements of mo_pseudo_integrals or mo_pseudo_integrals_complex
  END_DOC
  
  if (is_complex) then
    integer :: k,i_shft
    PROVIDE mo_pseudo_integrals_kpts
    do k=1,kpt_num
      i_shft = (k-1)*mo_num_per_kpt
      do i=1,mo_num_per_kpt
        mo_pseudo_integrals_diag(i+i_shft) = dble(mo_pseudo_integrals_kpts(i,i,k))
      enddo
    enddo
  else
    PROVIDE mo_pseudo_integrals
    do i=1,mo_num
      mo_pseudo_integrals_diag(i) = mo_pseudo_integrals(i,i)
    enddo
  endif
END_PROVIDER

