248
248
(\){T<:UMFVTypes}(fact::UmfpackLU{T}, b::Vector{T}) = solve(fact, b)
249
249
(\){Ts<:UMFVTypes,Tb<:Number}(fact::UmfpackLU{Ts}, b::Vector{Tb}) = fact\convert(Vector{Ts},b)
250
function (\){Tb<:Complex}(fact::UmfpackLU{Float64}, b::Vector{Tb})
251
r = fact\[convert(Float64,real(be)) for be in b]
252
i = fact\[convert(Float64,imag(be)) for be in b]
253
Complex128[r[k]+im*i[k] for k = 1:length(r)]
250
255
At_ldiv_B{T<:UMFVTypes}(fact::UmfpackLU{T}, b::Vector{T}) = solve(fact, b, UMFPACK_Aat)
251
256
At_ldiv_B{Ts<:UMFVTypes,Tb<:Number}(fact::UmfpackLU{Ts}, b::Vector{Tb}) = fact.'\convert(Vector{Ts},b)
257
At_ldiv_B{Tb<:Complex}(fact::UmfpackLU{Float64}, b::Vector{Tb}) = fact.'\b
252
258
Ac_ldiv_B{T<:UMFVTypes}(fact::UmfpackLU{T}, b::Vector{T}) = solve(fact, b, UMFPACK_At)
253
259
Ac_ldiv_B{Ts<:UMFVTypes,Tb<:Number}(fact::UmfpackLU{Ts}, b::Vector{Tb}) = fact'\convert(Vector{Ts},b)
260
Ac_ldiv_B{Tb<:Complex}(fact::UmfpackLU{Float64}, b::Vector{Tb}) = fact'\b
255
262
### Solve directly with matrix
257
264
(\)(S::SparseMatrixCSC, b::Vector) = lufact(S) \ b
258
265
At_ldiv_B{T<:UMFVTypes}(S::SparseMatrixCSC{T}, b::Vector{T}) = solve(lufact(S), b, UMFPACK_Aat)
259
function At_ldiv_B{Ts<:UMFVTypes,Tb<:Number}(S::SparseMatrixCSC{Ts}, b::Vector{Tb})
260
## should be more careful here in case Ts<:Real and Tb<:Complex
261
At_ldiv_B(S, convert(Vector{Ts}, b))
266
At_ldiv_B{Ts<:UMFVTypes,Tb<:Number}(S::SparseMatrixCSC{Ts}, b::Vector{Tb}) = At_ldiv_B(S, convert(Vector{Ts}, b))
267
function At_ldiv_B{Tb<:Complex}(S::SparseMatrixCSC{Float64}, b::Vector{Tb})
269
r = solve(F, [convert(Float64,real(be)) for be in b], UMFPACK_Aat)
270
i = solve(F, [convert(Float64,imag(be)) for be in b], UMFPACK_Aat)
271
Complex128[r[k]+im*i[k] for k = 1:length(r)]
263
273
Ac_ldiv_B{T<:UMFVTypes}(S::SparseMatrixCSC{T}, b::Vector{T}) = solve(lufact(S), b, UMFPACK_At)
264
function Ac_ldiv_B{Ts<:UMFVTypes,Tb<:Number}(S::SparseMatrixCSC{Ts}, b::Vector{Tb})
265
## should be more careful here in case Ts<:Real and Tb<:Complex
266
Ac_ldiv_B(S, convert(Vector{Ts}, b))
274
Ac_ldiv_B{Ts<:UMFVTypes,Tb<:Number}(S::SparseMatrixCSC{Ts}, b::Vector{Tb}) = Ac_ldiv_B(S, convert(Vector{Ts}, b))
275
function Ac_ldiv_B{Tb<:Complex}(S::SparseMatrixCSC{Float64}, b::Vector{Tb})
277
r = solve(F, [convert(Float64,real(be)) for be in b], UMFPACK_At)
278
i = solve(F, [convert(Float64,imag(be)) for be in b], UMFPACK_At)
279
Complex128[r[k]+im*i[k] for k = 1:length(r)]
269
282
solve(lu::UmfpackLU, b::Vector) = solve(lu, b, UMFPACK_A)