@@ -42,15 +42,15 @@ mutable struct BlockMinresSolver{T,FC,SV,SM} <: BlockKrylovSolver{T,FC,SV,SM}
4242end
4343
4444function BlockMinresSolver (m:: Integer , n:: Integer , p:: Integer , SV:: Type , SM:: Type )
45- FC = eltype (SV)
46- T = real (FC)
47- ΔX = SM (undef, 0 , 0 )
48- X = SM (undef, n, p)
49- P = SM (undef, 0 , 0 )
50- Q = SM (undef, n, p)
51- C = SM (undef, p, p)
52- D = SM (undef, 2 p, p)
53- Φ = SM (undef, p, p)
45+ FC = eltype (SV)
46+ T = real (FC)
47+ ΔX = SM (undef, 0 , 0 )
48+ X = SM (undef, n, p)
49+ P = SM (undef, 0 , 0 )
50+ Q = SM (undef, n, p)
51+ C = SM (undef, p, p)
52+ D = SM (undef, 2 p, p)
53+ Φ = SM (undef, p, p)
5454 Vₖ₋₁ = SM (undef, n, p)
5555 Vₖ = SM (undef, n, p)
5656 wₖ₋₂ = SM (undef, n, p)
@@ -59,6 +59,8 @@ function BlockMinresSolver(m::Integer, n::Integer, p::Integer, SV::Type, SM::Typ
5959 Hₖ₋₁ = SM (undef, 2 p, p)
6060 τₖ₋₂ = SV (undef, p)
6161 τₖ₋₁ = SV (undef, p)
62+ SV = isconcretetype (SV) ? SV : typeof (τₖ₋₁)
63+ SM = isconcretetype (SM) ? SM : typeof (X)
6264 stats = SimpleStats (0 , false , false , false , T[], T[], T[], 0.0 , " unknown" )
6365 solver = BlockMinresSolver {T,FC,SV,SM} (m, n, p, ΔX, X, P, Q, C, D, Φ, Vₖ₋₁, Vₖ, wₖ₋₂, wₖ₋₁, Hₖ₋₂, Hₖ₋₁, τₖ₋₂, τₖ₋₁, false , stats)
6466 return solver
@@ -119,6 +121,8 @@ function BlockGmresSolver(m::Integer, n::Integer, p::Integer, SV::Type, SM::Type
119121 R = SM[SM (undef, p, p) for i = 1 : div (memory * (memory+ 1 ), 2 )]
120122 H = SM[SM (undef, 2 p, p) for i = 1 : memory]
121123 τ = SV[SV (undef, p) for i = 1 : memory]
124+ SV = isconcretetype (SV) ? SV : typeof (τ)
125+ SM = isconcretetype (SM) ? SM : typeof (X)
122126 stats = SimpleStats (0 , false , false , false , T[], T[], T[], 0.0 , " unknown" )
123127 solver = BlockGmresSolver {T,FC,SV,SM} (m, n, p, ΔX, X, W, P, Q, C, D, V, Z, R, H, τ, false , stats)
124128 return solver
0 commit comments