subroutine PrintIntegrals() integer :: i, j, k, l, io1, io2 real(dp) :: DiagOneElPot, ERPot, ijVirtOneElPot, ijVirtCoulPot, ijVirtExchPot real(dp) :: singCoulijVirt, singExchijVirt, singCoulconHF, singExchconHF, ijklPot, ijklantisymPot real(dp) :: ijOccVirtOneElPot, ijOccVirtCoulPot, ijOccVirtExchPot io1 = 0 io2 = 0 if (tInitIntValues) then io1 = get_free_unit() open(io1, file='DiagIntegrals', status='unknown') write(io1, '(A10, 6A18)') "Iteration", "<i|h|i> ivirt", "<ii|ii> ivirt", "<ij|ij> iOccjVirt", "<ij|ji> iOccjVirt", & "<ij|ij> ijVirt", "<ij|ji> ijVirt" io2 = get_free_unit() open(io2, file='SingExcIntegrals', status='unknown') write(io2, '(A10, 6A18)') "Iteration", "<i|h|j> iOccjVirt", "<i|h|j> ijVirt", "<ik|jk> HFcon", "<ik|kj> HFcon", & "<ik|jk> ijVirt", "<ik|kj> ijVirt" DiagOneElPotInit = 0.0_dp ERPotInit = 0.0_dp ijVirtOneElPotInit = 0.0_dp ijVirtCoulPotInit = 0.0_dp ijVirtExchPotInit = 0.0_dp singCoulconHFInit = 0.0_dp singExchconHFInit = 0.0_dp singCoulijVirtInit = 0.0_dp singExchijVirtInit = 0.0_dp ijklPotInit = 0.0_dp ijklantisymPotInit = 0.0_dp ijOccVirtOneElPotInit = 0.0_dp ijOccVirtCoulPotInit = 0.0_dp ijOccVirtExchPotInit = 0.0_dp NoInts01 = 0 NoInts02 = 0 NoInts03 = 0 NoInts04 = 0 NoInts05 = 0 NoInts06 = 0 do i = 1, NoOrbs if (i > NoOcc) then DiagOneElPotInit = DiagOneElPotInit + TMAT2DRot(i, i) ERPotInit = ERPotInit + FourIndInts(i, i, i, i) NoInts01 = NoInts01 + 1 do j = NoOcc + 1, NoOrbs ! The i, j terms with i and j both virtual. if (j > i) then ijVirtOneElPotInit = ijVirtOneElPotInit + TMAT2DRot(i, j) ijVirtCoulPotInit = ijVirtCoulPotInit + FourIndInts(i, j, i, j) ijVirtExchPotInit = ijVirtExchPotInit + FourIndInts(i, j, j, i) NoInts02 = NoInts02 + 1 end if do k = 1, NoOrbs if (k > (NoOcc + 1)) then do l = NoOcc + 1, NoOrbs if (l == j) cycle ijklPotInit = ijklPotInit + FourIndInts(i, j, k, l) ijklantisymPotInit = ijklantisymPotInit + FourIndInts(i, j, k, l) - FourIndInts(i, j, l, k) NoInts04 = NoInts04 + 1 end do else if (i == j) cycle singCoulijVirtInit = singCoulijVirtInit + FourIndInts(i, k, j, k) singExchijVirtInit = singExchijVirtInit + FourIndInts(i, k, k, j) NoInts03 = NoInts03 + 1 end if end do end do else do j = NoOcc + 1, NoOrbs do k = 1, NoOcc singCoulconHFInit = singCoulconHFInit + FourIndInts(i, k, j, k) singExchconHFInit = singExchconHFInit + FourIndInts(i, k, k, j) NoInts06 = NoInts06 + 1 end do ijOccVirtOneElPotInit = ijOccVirtOneElPotInit + TMAT2DRot(i, j) ijOccVirtCoulPotInit = ijOccVirtCoulPotInit + FourIndInts(i, j, i, j) ijOccVirtExchPotInit = ijOccVirtExchPotInit + FourIndInts(i, j, j, i) NoInts05 = NoInts05 + 1 end do end if end do end if DiagOneElPot = 0.0_dp ERPot = 0.0_dp ijVirtOneElPot = 0.0_dp ijVirtCoulPot = 0.0_dp ijVirtExchPot = 0.0_dp singCoulconHF = 0.0_dp singExchconHF = 0.0_dp singCoulijVirt = 0.0_dp singExchijVirt = 0.0_dp ijklPot = 0.0_dp ijklantisymPot = 0.0_dp ijOccVirtOneElPot = 0.0_dp ijOccVirtCoulPot = 0.0_dp ijOccVirtExchPot = 0.0_dp do i = 1, NoOrbs if (i > NoOcc) then DiagOneElPot = DiagOneElPot + TMAT2DRot(i, i) ERPot = ERPot + FourIndInts(i, i, i, i) do j = NoOcc + 1, NoOrbs ! The i, j terms with i and j both virtual. if (j > i) then ijVirtOneElPot = ijVirtOneElPot + TMAT2DRot(i, j) ijVirtCoulPot = ijVirtCoulPot + FourIndInts(i, j, i, j) ijVirtExchPot = ijVirtExchPot + FourIndInts(i, j, j, i) end if do k = 1, NoOrbs if (k > (NoOcc + 1)) then do l = NoOcc + 1, NoOrbs if (l == j) cycle ijklPot = ijklPot + FourIndInts(i, j, k, l) ijklantisymPot = ijklantisymPot + FourIndInts(i, j, k, l) - FourIndInts(i, j, l, k) end do else if (i == j) cycle singCoulijVirt = singCoulijVirt + FourIndInts(i, k, j, k) singExchijVirt = singExchijVirt + FourIndInts(i, k, k, j) end if end do end do else do j = NoOcc + 1, NoOrbs do k = 1, NoOcc singCoulconHF = singCoulconHF + FourIndInts(i, k, j, k) singExchconHF = singExchconHF + FourIndInts(i, k, k, j) end do ijOccVirtOneElPot = ijOccVirtOneElPot + TMAT2DRot(i, j) ijOccVirtCoulPot = ijOccVirtCoulPot + FourIndInts(i, j, i, j) ijOccVirtExchPot = ijOccVirtExchPot + FourIndInts(i, j, j, i) end do end if end do DiagOneElPot = (DiagOneElPot - DiagOneElPotInit) / NoInts01 ERPot = (ERPot - ERPotInit) / NoInts01 ijVirtOneElPot = (ijVirtOneElPot - ijVirtOneElPotInit) / NoInts02 ijVirtCoulPot = (ijVirtCoulPot - ijVirtCoulPotInit) / NoInts02 ijVirtExchPot = (ijVirtExchPot - ijVirtExchPotInit) / NoInts02 singCoulijVirt = (singCoulijVirt - singCoulijVirtInit) / NoInts03 singExchijVirt = (singExchijVirt - singExchijVirtInit) / NoInts03 singCoulconHF = (singCoulconHF - singCoulconHFInit) / NoInts06 singExchconHF = (singExchconHF - singExchconHFInit) / NoInts06 ijklPot = (ijklPot - ijklPotInit) / NoInts04 ijklantisymPot = (ijklantisymPot - ijklantisymPotInit) / NoInts04 ijOccVirtOneElPot = (ijOccVirtOneElPot - ijOccVirtOneElPotInit) / NoInts05 ijOccVirtCoulPot = (ijOccVirtCoulPot - ijOccVirtCoulPotInit) / NoInts05 ijOccVirtExchPot = (ijOccVirtExchPot - ijOccVirtExchPot) / NoInts05 write(io1, '(I10, 6F18.10)') Iteration, DiagOneElPot, ERPot, ijOccVirtCoulPot, ijOccVirtExchPot, ijVirtCoulPot, & ijVirtExchPot write(io2, '(I10, 6F18.10)') Iteration, ijOccVirtOneElPot, ijVirtOneElPot, singCoulconHF, singExchconHF, singCoulijVirt, & singExchijVirt if ((.not. tNotConverged) .and. (.not. tInitIntValues)) then close(io1) close(io2) end if end subroutine PrintIntegrals