ReadInUMatCache Subroutine

private subroutine ReadInUMatCache()

Arguments

None

Contents

Source Code


Source Code

    subroutine ReadInUMatCache()
        ! Read in cache file from CacheDump.
        integer i, j, k, l, iCache1, iCache2, A, B, readerr, iType, iunit
        HElement_t(dp) UMatEl(0:nTypes - 1), DummyUMatEl(0:nTypes - 1)
        logical tDummy, testfile
        inquire(file="CacheDump", exist=testfile)
        if (.not. testfile) then
            write(stdout, *) 'CacheDump does not exist.'
            return
        end if
        iunit = get_free_unit()
        open(iunit, file="CacheDump", status="old", iostat=readerr)
        if (readerr /= 0) then
            write(stdout, *) 'Error reading CacheDump.'
            return
        end if
        read(iunit, *) nStatesDump
        readerr = 0
        do while (readerr == 0)
            read(iunit, *, iostat=readerr) i, j, k, l, UMatEl
            DummyUMatEl = UMatEl
            if (TTRANSFINDX) then
                i = TransTable(i)
                j = TransTable(j)
                k = TransTable(k)
                l = TransTable(l)
            end if
            if (min(i, j, k, l) > 0 .and. max(i, j, k, l) <= nStates) then
                ! Need to get cache indices before we cache the integral:
                ! a dummy call to GetCachedUMatEl returns the needed indices and
                ! integral type information.
                tDummy = GetCachedUMatEl(i, j, k, l, DummyUmatEl(0), iCache1, iCache2, A, B, iType)
                call CacheUMatEl(B, UMatEl, iCache1, iCache2, iType)
            end if
        end do
        close(iunit)
        return
    end subroutine ReadInUMatCache