Advanced Computing Platform for Theoretical Physics

Commits (2)
......@@ -37,18 +37,18 @@ icgs(u, ortho_basis::Nothing) = u
`krylov_basis`: Orthonormal basis of Krylov space
"""
@with_kw struct itFOLMResult{T<:Number, S<:AbstractVector,
U<:SymTridiagonal, V<:AbstractMatrix}
U<:SymTridiagonal, V<:AbstractArray}
init_vector::S
symtridiagonal::U
krylov_basis::V
itFOLMResult{T,S,U,V}(init_vector::AbstractVector{T},
symtridiagonal::SymTridiagonal{T},
krylov_basis::AbstractMatrix{T}) where {T,S,U,V} =
krylov_basis::AbstractArray{T}) where {T,S,U,V} =
new(init_vector, symtridiagonal, krylov_basis)
end
itFOLMResult(init_vector::AbstractVector{T},
symtridiagonal::SymTridiagonal{T},
krylov_basis::AbstractMatrix{T}) where {T} =
krylov_basis::AbstractArray{T}) where {T} =
itFOLMResult{T,typeof(init_vector), typeof(symtridiagonal), typeof(krylov_basis)}(init_vector, symtridiagonal, krylov_basis)
......@@ -62,8 +62,8 @@ itFOLMResult(init_vector::AbstractVector{T},
Base.hcat(v, ortho_basis::Nothing) = v
Base.hcat(ortho_basis::Nothing, v) = v
function itFOLM(M, ortho_basis::T;
init_vector::AbstractVector,
Nk::Int = 50) where T<:Union{Nothing, AbstractArray}
init_vector::AbstractVector{Tv},
Nk::Int = 50) where {Tv, T<:Union{Nothing, AbstractArray}}
Ns = size(M, 1)
if T <: Nothing
Ne = 0
......@@ -75,7 +75,9 @@ function itFOLM(M, ortho_basis::T;
Nk = min(Nk, Ns - Ne)
if Nk == 0
return itFOLMResult(init_vector, SymTridiagonal([0.], [0.]), zeros(Ns,1))
zero_basis = similar(init_vector)
fill!(zeros_basis, zero(Tv))
return itFOLMResult(init_vector, SymTridiagonal([0.], [0.]), zero_basis)
else
dv, ev = zeros(Nk), zeros(Nk - 1)
......@@ -103,7 +105,7 @@ itFOLM(M; init_vector::AbstractVector, Nk::Int = 50) = itFOLM(M, nothing, init_v
`values`: eigen values of symtridiagonal
`vectors`: eigen vectors of the origional matrix in Krylov space
"""
@with_kw struct LanczosEigen{T<:Number, S<:AbstractVector, U<:AbstractMatrix}
@with_kw struct LanczosEigen{T<:Number, S<:AbstractVector, U<:AbstractArray}
init_vector::S
weight::S
values::S
......