Tensor tools
ElemCo.TensorTools
— Moduletensor tools, e.g., access to integrals, load/save intermediates...
I/O functions
ElemCo.TensorTools.save!
— Functionsave!(EC::ECInfo, fname::String, a::AbstractArray...; description="tmp", overwrite=true)
Save array or tuple of arrays a
to file fname
in EC.scr directory. Add file to EC.files
with description
.
ElemCo.TensorTools.load
— Functionload(EC::ECInfo, fname::String)
Load array from file fname
in EC.scr directory.
load(EC::ECInfo, fname::String, ::Val{N}, T::Type=Float64; skip_error=false) where {N}
Type-stable load array from file fname
in EC.scr directory.
The type T
and number of dimensions N
are given explicitly. If skip_error
is true, return empty Array{T,N}
if the dimension/type is wrong.
ElemCo.TensorTools.mmap
— Functionmmap(EC::ECInfo, fname::String)
Memory-map an existing file for reading. Return a pointer to the file and the mmaped array.
ElemCo.TensorTools.newmmap
— Functionnewmmap(EC::ECInfo, fname::String, dims::Tuple{Vararg{Int}}, Type=Float64; description="tmp")
Create a new memory-map file for writing (overwrites existing file). Add file to EC.files
with description
. Return a pointer to the file and the mmaped array.
ElemCo.TensorTools.closemmap
— Functionclosemmap(EC::ECInfo, file, array)
Close memory-map file and flush to disk.
Integral extraction
ElemCo.TensorTools.ints1
— Functionints1(EC::ECInfo, spaces::String, spincase = nothing)
Return subset of 1e⁻ integrals according to spaces.
The spincase
∈{:α
,:β
} can explicitly be given, or will be deduced from upper/lower case of spaces specification.
ElemCo.TensorTools.ints2
— Functionints2(EC::ECInfo, spaces::String, spincase = nothing)
Return subset of 2e⁻ integrals according to spaces.
The spincase
∈{:α
,:β
} can explicitly be given, or will be deduced from upper/lower case of spaces specification. If the last two indices are stored as triangular - make them full.
Tensor manipulation
ElemCo.TensorTools.@mtensor
— Macromtensor(ex)
Macro for tensor operations with manual allocator.
ElemCo.TensorTools.@mview
— Macro@mview(ex)
StridedView based version of @view
.
ElemCo.TensorTools.sqrtinvchol
— Functionsqrtinvchol(A::AbstractMatrix; tol = 1e-8, verbose = false)
Return NON-SYMMETRIC (pseudo)sqrt-inverse of a hermitian matrix using Cholesky decomposition.
Starting from $A^{-1} = A^{-1} L (A^{-1} L)^† = M M^†$ with $A = L L^†$. By solving the equation $L^† M = 1$ (for low-rank: using QR decomposition). Return M
.
ElemCo.TensorTools.invchol
— Functioninvchol(A::AbstractMatrix; tol = 1e-8, verbose = false)
Return (pseudo)inverse of a hermitian matrix using Cholesky decomposition .
The inverse is calculated as $A^{-1} = A^{-1} L (A^{-1} L)^† = M M^†$ with $A = L L^†$. By solving the equation $L^† M = 1$ (for low-rank: using QR decomposition)
ElemCo.TensorTools.rotate_eigenvectors_to_real
— Functionrotate_eigenvectors_to_real(evecs::AbstractMatrix, evals::AbstractVector)
Transform complex eigenvectors of a real matrix to a real space such that they block-diagonalize the matrix.
Return the eigenvectors and "eigenvalues" (the diagonal of the matrix) in the real space.
Other exported functions
ElemCo.TensorTools.detri_int2!
— Methoddetri_int2!(out, allint2, norb, sp1, sp2, sp3, sp4)
Return full 2e⁻ integrals <sp1 sp2 | sp3 sp4> from allint2 with last two indices as a triangular index. The result is stored in out
.
ElemCo.TensorTools.detri_int2
— Methoddetri_int2(allint2, norb, sp1, sp2, sp3, sp4)
Return full 2e⁻ integrals <sp1 sp2 | sp3 sp4> from allint2 with last two indices as a triangular index.
ElemCo.TensorTools.flushmmap
— Methodflushmmap(EC::ECInfo, array)
Flush memory-map array to disk.
ElemCo.TensorTools.get_spaceblocks
— Functionget_spaceblocks(space, maxblocksize=128, strict=false)
Generate ranges for block indices for space (for loop over blocks).
space
is a range or an array of indices. Even if space
is non-contiguous, the blocks will be contiguous. If strict
is true, the blocks will be of size maxblocksize
(except for the last block and non-contiguous index-ranges). Otherwise the actual block size will be as close as possible to blocksize
such that the resulting blocks are of similar size.
ElemCo.TensorTools.ints2!
— Functionints2!(out::AbstractArray{Float64,4}, EC::ECInfo, spaces::String, spincase = nothing)
Return subset of 2e⁻ integrals according to spaces.
The spincase
∈{:α
,:β
} can explicitly be given, or will be deduced from upper/lower case of spaces specification. If the last two indices are stored as triangular - make them full. The result is stored in out
.
ElemCo.TensorTools.load!
— Methodload!(EC::ECInfo, fname::String, arrs::AbstractArray{T,N}...; skip_error=false)
Load array(s) from file fname
in EC.scr directory.
The type and number of dimensions are deduced from the first array in arrs
. If skip_error
is true, return false if the dimension/type is wrong.
ElemCo.TensorTools.load_all
— Methodload_all(EC::ECInfo, fname::String, ::Val{N}, T::Type=Float64; skip_error=false) where {N}
Type-stable load arrays from file fname
in EC.scr directory.
The type T
and number of dimensions N
are given explicitly (have to be the same for all arrays). Return an array of arrays. If skip_error
is true, return empty Array{T,N}[Array{T,N}()]
if the dimension/type is wrong.
ElemCo.TensorTools.mview
— Methodmview(arr, args...)
StridedView
based version of view
.
The data array is enforced to be a vector, such that the view is always a StridedView{..., Vector{...},...}
.
ElemCo.TensorTools.mview
— Methodmview(arr::StridedView, args...)
StridedView based version of view
, for StridedView
input.
Simply calls StridedViews.sview
.
ElemCo.TensorTools.print_nonzeros
— Methodprint_nonzeros(tensor::AbstractArray; ϵ=1.e-12, fname::String="")
Print cartesian index alongside value of array for elements with absolute value greater or equal than ϵ either to stdout or to a file.
ElemCo.TensorTools.svd_thr
— Functionsvd_thr(Amat::AbstractMatrix, thr=1.e-12)
Return SVD of a matrix with singular values below thr
set to zero.
Internal functions
ElemCo.TensorTools.triinds
— Functiontriinds(norb, sp1::AbstractArray{Int}, sp2::AbstractArray{Int}, reverseCartInd = false)
Generate set of CartesianIndex for addressing the lhs and a bitmask for the rhs for transforming a triangular index from 1:norb to two original indices in spaces sp1 and sp2. If reverse
: the cartesian indices are reversed.