@@ -12,8 +12,14 @@ include("solver.jl")
1212# Configuration
1313N = 15_000
1414sparsity_levels = [0.1 , 0.5 , 0.9 ]
15+
16+ umfpack_control = SparseArrays. UMFPACK. get_umfpack_control (Float64, Int64) # read Julia default configuration for a Float64 sparse matrix
17+ # SparseArrays.UMFPACK.show_umf_ctrl(umfpack_control) # optional - display values
18+ umfpack_control[SparseArrays. UMFPACK. JL_UMFPACK_IRSTEP] = 2.0 # reenable iterative refinement (2 is UMFPACK default max iterative refinement steps)
19+
1520solvers = OrderedDict (
1621 " Default" => (A, b) -> (A \ b),
22+ " UMFPACK" => (A, b) -> lu (A; control = umfpack_control) \ b,
1723 " Generated" => (A, b) -> proposed_fn (A, b)
1824)
1925
@@ -56,7 +62,7 @@ for sparsity in sparsity_levels
5662 error = norm (A* x_sol - b_err) / norm (b_err)
5763
5864 results[sparsity][solver_name] = (time= time_ms, error= error)
59- println (" Time: $(round (time_ms, digits= 3 )) ms , Error: $(round (error, sigdigits= 3 )) " )
65+ println (" Time: $(round (time_ms, digits= 3 )) s , Error: $(round (error, sigdigits= 3 )) " )
6066 catch e
6167 println (" Error during benchmark: $e " )
6268 end
6773p = plot (
6874 size= (800 , 800 ),
6975 # legend=:topright,
70- legend= :bottomright ,
76+ legend= :bottomleft ,
7177 xlabel= " Time (s)" ,
7278 ylabel= " Relative residual: ||Ax - b||₂ / ||b||₂" ,
7379 # xscale=:log10,
@@ -86,7 +92,7 @@ p = plot(
8692# # Sparsity shapes
8793marker_map_sparsity = OrderedDict (0.1 => :circle , 0.5 => :square , 0.9 => :utriangle )
8894# # Solver color shades
89- color_map_solver = OrderedDict (" Default" => :red , " Generated" => :green )
95+ color_map_solver = OrderedDict (" Default" => :red , " UMFPACK " => :blue , " Generated" => :green )
9096
9197# Plot each point individually so marker shape shows sparsity and color shows solver.
9298for solver_name in keys (solvers)
0 commit comments