Skip to content

Commit cde1dfd

Browse files
committed
make sure verbosity works for HYPRE
1 parent 6b4c214 commit cde1dfd

File tree

3 files changed

+24
-7
lines changed

3 files changed

+24
-7
lines changed

ext/LinearSolveHYPREExt.jl

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ using LinearSolve: HYPREAlgorithm, LinearCache, LinearProblem, LinearSolve,
77
OperatorAssumptions, default_tol, init_cacheval, __issquare,
88
__conditioning, LinearSolveAdjoint, LinearVerbosity
99
using SciMLBase: LinearProblem, LinearAliasSpecifier, SciMLBase
10+
using SciMLVerbosity: @match, Verbosity
1011
using UnPack: @unpack
1112
using Setfield: @set!
1213

@@ -64,7 +65,7 @@ function SciMLBase.init(prob::LinearProblem, alg::HYPREAlgorithm,
6465
eltype(prob.A)),
6566
# TODO: Implement length() for HYPREVector in HYPRE.jl?
6667
maxiters::Int = prob.b isa HYPREVector ? 1000 : length(prob.b),
67-
verbose::LinearVerbosity = false,
68+
verbose = LinearVerbosity(),
6869
Pl = LinearAlgebra.I,
6970
Pr = LinearAlgebra.I,
7071
assumptions = OperatorAssumptions(),
@@ -159,10 +160,22 @@ function create_solver(alg::HYPREAlgorithm, cache::LinearCache)
159160
solver = create_solver(alg.solver, comm)
160161

161162
# Construct solver options
163+
164+
165+
# This should be a function in SciMLVerbosity
166+
verbose = @match cache.verbose.numerical.HYPRE_verbosity begin
167+
Verbosity.None() => 0
168+
Verbosity.Info() => 1
169+
Verbosity.Warn() => 2
170+
Verbosity.Error() => 3
171+
Verbosity.Level(i) => i
172+
end
173+
174+
162175
solver_options = (;
163176
AbsoluteTol = cache.abstol,
164177
MaxIter = cache.maxiters,
165-
PrintLevel = Int(cache.verbose),
178+
PrintLevel = verbose,
166179
Tol = cache.reltol)
167180

168181
# Preconditioner (uses Pl even though it might not be a *left* preconditioner just *a*

src/verbosity.jl

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
# Linear Verbosity
22

3-
linear_defaults = Dict(
3+
const linear_defaults = Dict{Symbol, Verbosity.Type}(
44
:default_lu_fallback => Verbosity.Warn(),
55
:no_right_preconditioning => Verbosity.Warn(),
66
:using_iterative_solvers => Verbosity.Warn(),
77
:using_IterativeSolvers => Verbosity.Warn(),
88
:IterativeSolvers_iterations => Verbosity.Warn(),
99
:KrylovKit_verbosity => Verbosity.Warn(),
10-
:KrylovJL_verbosity => Verbosity.None()
10+
:KrylovJL_verbosity => Verbosity.None(),
11+
:HYPRE_verbosity => Verbosity.Level(1)
1112
)
1213
mutable struct LinearErrorControlVerbosity
1314
default_lu_fallback::Verbosity.Type
@@ -76,14 +77,16 @@ mutable struct LinearNumericalVerbosity
7677
IterativeSolvers_iterations::Verbosity.Type
7778
KrylovKit_verbosity::Verbosity.Type
7879
KrylovJL_verbosity::Verbosity.Type
80+
HYPRE_verbosity::Verbosity.Type
7981

8082
function LinearNumericalVerbosity(;
8183
using_IterativeSolvers = linear_defaults[:using_IterativeSolvers],
8284
IterativeSolvers_iterations = linear_defaults[:IterativeSolvers_iterations],
8385
KrylovKit_verbosity = linear_defaults[:KrylovKit_verbosity],
84-
KrylovJL_verbosity = linear_defaults[:KrylovJL_verbosity])
86+
KrylovJL_verbosity = linear_defaults[:KrylovJL_verbosity],
87+
HYPRE_verbosity = linear_defaults[:HYPRE_verbosity])
8588
new(using_IterativeSolvers, IterativeSolvers_iterations,
86-
KrylovKit_verbosity, KrylovJL_verbosity)
89+
KrylovKit_verbosity, KrylovJL_verbosity, HYPRE_verbosity)
8790
end
8891

8992
function LinearNumericalVerbosity(verbose::Verbosity.Type)

test/hypretests.jl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ using HYPRE.LibHYPRE: HYPRE_BigInt,
44
HYPRE_IJVectorGetValues, HYPRE_Int
55
using LinearAlgebra
66
using LinearSolve
7+
using LinearSolve: LinearVerbosity
78
using MPI
89
using Random: MersenneTwister
910
using SparseArrays
@@ -78,7 +79,7 @@ function test_interface(alg; kw...)
7879

7980
atol = 1e-6
8081
rtol = 1e-6
81-
cache_kwargs = (; verbose = true, abstol = atol, reltol = rtol, maxiters = 50)
82+
cache_kwargs = (; verbose = LinearVerbosity(), abstol = atol, reltol = rtol, maxiters = 50)
8283
cache_kwargs = merge(cache_kwargs, kw)
8384

8485
# prob1, prob3 with initial guess, prob2, prob4 without

0 commit comments

Comments
 (0)