CopyAcrossUMAT Subroutine

public subroutine CopyAcrossUMAT()

Arguments

None

Contents

Source Code


Source Code

    subroutine CopyAcrossUMAT()

        integer :: a, b, g, d, i, j, k, l
        real(dp) :: s, t

        if (((.not. tERLocalization) .and. (.not. tReadInCoeff) .and. (.not. tUseMP2VarDenMat) .and. (.not. tFindCINatOrbs))&
        &.or. (tERLocalization .and. tStoreSpinOrbs)) TMAT2DTemp(:, :) = 0.0_dp

        ! These loops can be sped up with spatial symmetry and pairwise
        ! permutation symmetry if needed.
        do a = 1, NoOrbs
            i = SymLabelList2_rot(a) ! The spin orbital we are looking for.
            do g = 1, a
                j = SymLabelList2_rot(g)
                if (((.not. tERLocalization) .and. (.not. tReadInCoeff) .and. (.not. tUseMP2VarDenMat) .and. (.not. tFindCINatOrbs))&
                &.or. (tERLocalization .and. tStoreSpinOrbs)) then
                    if (tStoreSpinOrbs) then
                        s = real(TMAT2D(i, j), dp)
                        TMAT2DTemp(a, g) = s
                        TMAT2DTemp(g, a) = s
                    else
                        s = real(TMAT2D(2 * i, 2 * j), dp)
                        TMAT2DTemp(a, g) = s
                        TMAT2DTemp(g, a) = s
                    end if
                end if

                do b = 1, NoOrbs
                    k = SymLabelList2_rot(b)
                    do d = 1, b
                        l = SymLabelList2_rot(d)
                        t = real(UMAT(UMatInd(i, k, j, l)), dp)
                        UMATTemp01(a, g, b, d) = t    ! a, g, d, b chosen to make 'transform2elint' steps more efficient.
                        UMATTemp01(g, a, b, d) = t
                        UMATTemp01(a, g, d, b) = t
                        UMATTemp01(g, a, d, b) = t
                        if (((.not. tERLocalization) .and. (.not. tReadInCoeff) .and. &
                            (.not. tUseMP2VarDenMat) .and. (.not. tFindCINatOrbs))&
                        &.or. (tERLocalization .and. tStoreSpinOrbs)) then
                            UMATTemp02(d, b, a, g) = t    ! d, b, a, g order also chosen to speed up the transformation.
                            UMATTemp02(d, b, g, a) = t
                            UMATTemp02(b, d, a, g) = t
                            UMATTemp02(b, d, g, a) = t
                        end if
                    end do
                end do
            end do
        end do

    end subroutine CopyAcrossUMAT