@@ -2,11 +2,11 @@ export AbstractLowRankOperator, LowRankOperator
22
33abstract type AbstractLowRankOperator{T} <: Operator{T} end
44
5- struct LowRankOperator{S<: Space ,T} <: AbstractLowRankOperator{T}
5+ struct LowRankOperator{S<: Space ,T,O <: Operator{T} } <: AbstractLowRankOperator{T}
66 U:: Vector{VFun{S,T}}
7- V:: Vector{Operator{T} }
7+ V:: Vector{O }
88
9- function LowRankOperator {S,T} (U:: Vector{VFun{S,T}} ,V:: Vector{Operator{T}} ) where {S,T}
9+ function LowRankOperator {S,T} (U:: Vector{VFun{S,T}} , V:: Vector{O} ) where {S,T,O <: Operator{T} }
1010 @assert all (isafunctional,V)
1111
1212 @assert length (U) == length (V)
@@ -19,19 +19,18 @@ struct LowRankOperator{S<:Space,T} <: AbstractLowRankOperator{T}
1919 for k= 2 : length (U)
2020 @assert space (U[k])== rs
2121 end
22- new {S,T} (U,V)
22+ new {S,T,O } (U,V)
2323 end
2424end
2525
2626
2727
28- LowRankOperator (U:: Vector{VFun{S,T}} ,V:: Vector{Operator{T}} ) where {S,T} = LowRankOperator {S,T} (U,V)
29- LowRankOperator (U:: Vector{VFun{S,T1}} ,V:: Vector{Operator{T2}} ) where {S,T1,T2} =
30- LowRankOperator (strictconvert (Vector{VFun{S,promote_type (T1,T2)}},U),
31- strictconvert (Vector{Operator{promote_type (T1,T2)}},V))
32- LowRankOperator (U:: Vector{FF} ,V:: Vector{FT} ) where {FF<: Fun ,FT<: Operator } =
33- LowRankOperator (U,strictconvert (Vector{Operator{eltype (FT)}},V))
34-
28+ LowRankOperator (U:: Vector{VFun{S,T}} , V:: Vector{<:Operator{T}} ) where {S,T} = LowRankOperator {S,T} (U,V)
29+ function LowRankOperator (U:: Vector{VFun{S,T1}} , V:: Vector{<:Operator} ) where {S,T1}
30+ T2 = eltype (eltype (v))
31+ T = promote_type (T1,T2)
32+ LowRankOperator (strictconvert (Vector{VFun{S,T}},U), map (Operator{T}, V))
33+ end
3534
3635
3736LowRankOperator (B:: AbstractVector ,S... ) = LowRankOperator (strictconvert (Vector{Operator{Float64}},B),S... )
@@ -54,11 +53,11 @@ rangespace(L::LowRankOperator) = space(first(L.U))
5453promoterangespace (L:: LowRankOperator ,sp:: Space ) = LowRankOperator (map (u-> Fun (u,sp),L. U),L. V)
5554promotedomainspace (L:: LowRankOperator ,sp:: Space ) = LowRankOperator (L. U,map (v-> promotedomainspace (v,sp),L. V))
5655
57- function Base. getindex (L:: LowRankOperator ,k:: Integer ,j:: Integer )
56+ function Base. getindex (L:: LowRankOperator , k:: Integer ,j:: Integer )
5857 ret= zero (eltype (L))
59- for p= 1 : length (L. U)
60- if k≤ ncoefficients (L. U[p])
61- ret+= L. U[p]. coefficients[k] * L. V[p][j]
58+ for p in eachindex (L. U)
59+ if k ≤ ncoefficients (L. U[p])
60+ ret += coefficient ( L. U[p], k) * L. V[p][j]
6261 end
6362 end
6463 ret
0 commit comments