104104=#
105105
106106struct FFTKKTSystem{T, VI, VT, MT, LS} <: MadNLP.AbstractReducedKKTSystem{T, VT, MT, MadNLP.ExactHessian{T, VT}}
107- nlp:: FFTNLPModel
107+ nlp:: FFTNLPModel{T, VT}
108108 # Operators
109109 K:: MT
110110 P:: FFTPreconditioner{T, VT}
@@ -153,7 +153,7 @@ function MadNLP.create_kkt_system(
153153 l_lower = VT (undef, nlb)
154154 u_lower = VT (undef, nub)
155155
156- workspace = Krylov. CgWorkspace ( 2 * nβ, 2 * nβ, VT)
156+ workspace = Krylov. krylov_workspace ( Val (nlp . krylov_solver), 2 * nβ, 2 * nβ, VT)
157157
158158 z1 = VT (undef, nβ)
159159 z2 = VT (undef, 2 * nβ)
@@ -176,11 +176,11 @@ MadNLP.get_hessian(kkt::FFTKKTSystem) = nothing
176176MadNLP. get_jacobian (kkt:: FFTKKTSystem ) = nothing
177177
178178# Dirty wrapper to MadNLP's linear solver
179- MadNLP. is_inertia (:: Krylov.CgWorkspace ) = true
180- MadNLP. inertia (:: Krylov.CgWorkspace ) = (0 , 0 , 0 )
181- MadNLP. introduce (:: Krylov.CgWorkspace ) = " CG "
182- MadNLP. improve! (:: Krylov.CgWorkspace ) = true
183- MadNLP. factorize! (:: Krylov.CgWorkspace ) = nothing
179+ MadNLP. is_inertia (:: Krylov.KrylovWorkspace ) = true
180+ MadNLP. inertia (:: Krylov.KrylovWorkspace ) = (0 , 0 , 0 )
181+ MadNLP. introduce (:: Krylov.KrylovWorkspace ) = " Krylov "
182+ MadNLP. improve! (:: Krylov.KrylovWorkspace ) = true
183+ MadNLP. factorize! (:: Krylov.KrylovWorkspace ) = nothing
184184
185185MadNLP. is_inertia_correct (kkt:: FFTKKTSystem , p, n, z) = true
186186
@@ -355,7 +355,7 @@ function MadNLP.solve!(kkt::FFTKKTSystem, w::MadNLP.AbstractKKTVector)
355355 bβ .= w1 .- w3 .+ w4 .- Σ1 .* w5 .+ Σ2 .* w6
356356 bz .= w2 .- w3 .- w4 .- Σ1 .* w5 .- Σ2 .* w6
357357
358- # Solve with CG
358+ # Solve with the Krylov solver (CG by default)
359359 Krylov. krylov_solve! (kkt. linear_solver, kkt. K, b, M= kkt. P, atol= 1e-12 , rtol= 0.0 , verbose= 0 )
360360 x = Krylov. solution (kkt. linear_solver)
361361 push! (kkt. krylov_iterations, kkt. linear_solver |> Krylov. iteration_count)
0 commit comments