Skip to content

Commit 141356b

Browse files
committed
Implement type TridiagonalHamiltonian in src/types.jl
1 parent ea6e27c commit 141356b

File tree

1 file changed

+12
-2
lines changed

1 file changed

+12
-2
lines changed

src/types.jl

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1-
using LinearAlgebra: Diagonal, Eigen, Hermitian, diag
1+
using LinearAlgebra: Diagonal, Eigen, Hermitian, Tridiagonal, diag
22
using IsApprox: Approx, ishermitian
33

4-
export Hamiltonian, DiagonalHamiltonian, isapprox_rtol, set_isapprox_rtol
4+
export Hamiltonian,
5+
DiagonalHamiltonian, TridiagonalHamiltonian, isapprox_rtol, set_isapprox_rtol
56

67
abstract type AbstractHamiltonian{N,T} <: AbstractMatrix{T} end
78

@@ -31,6 +32,15 @@ function DiagonalHamiltonian(A::AbstractMatrix)
3132
return DiagonalHamiltonian(V)
3233
end
3334

35+
struct TridiagonalHamiltonian{N,T} <: AbstractHamiltonian{N,T}
36+
data::Tridiagonal{T,Vector{T}}
37+
function TridiagonalHamiltonian(dv::AbstractVector, ev::AbstractVector)
38+
@assert all(isreal.(dv)) "Hamiltonian matrices reuqire diagoanl elements to be real!"
39+
N, T = length(dv), promote_type(eltype(dv), eltype(ev))
40+
return new{N,T}(Tridiagonal(ev, dv, conj(ev)))
41+
end
42+
end
43+
3444
const ISAPPROX_RTOL = Ref(1e-15)
3545

3646
isapprox_rtol() = ISAPPROX_RTOL[]

0 commit comments

Comments
 (0)