|
37 | 37 |
|
38 | 38 | @testset "LinearSolve" begin
|
39 | 39 |
|
40 |
| -@testset "Apply Function" begin |
41 |
| - |
42 |
| - @testset "Diagonal Type" begin |
43 |
| - A1 = rand(n) |> Diagonal; b1 = rand(n); x1 = zero(b1) |
44 |
| - A2 = rand(n) |> Diagonal; b2 = rand(n); x2 = zero(b1) |
45 |
| - |
46 |
| - prob1 = LinearProblem(A1, b1; u0=x1) |
47 |
| - prob2 = LinearProblem(A1, b1; u0=x1) |
48 |
| - |
49 |
| - for alg in ( |
50 |
| - FunctionCall(LinearAlgebra.ldiv!, (:u, :A, :b)), |
51 |
| - ApplyLDivBang(), |
52 |
| - ApplyLDivBang2Args(), |
53 |
| - ApplyLDivBang3Args(), |
54 |
| - ) |
55 |
| - test_interface(alg, prob1, prob2) |
56 |
| - end |
57 |
| - end |
58 |
| - |
59 |
| - @testset "Custom Type" begin |
60 |
| - |
61 |
| - struct MyDiag |
62 |
| - d |
63 |
| - end |
64 |
| - |
65 |
| - # overloads |
66 |
| - (D::MyDiag)(du, u, p, t) = mul!(du, D, u) |
67 |
| - Base.:*(D::MyDiag, u) = Diagonal(D.d) * u |
68 |
| - |
69 |
| - Base.copy(D::MyDiag) = copy(D.d) |> MyDiag |
70 |
| - |
71 |
| - LinearAlgebra.mul!(y, D::MyDiag, x) = mul!(y, Diagonal(D.d), x) |
72 |
| - LinearAlgebra.ldiv!(y, D::MyDiag, x) = ldiv!(y, Diagonal(D.d), x) |
73 |
| - LinearAlgebra.ldiv!(D::MyDiag, x) = ldiv!(Diagonal(D.d), x) |
74 |
| - |
75 |
| - # custom inverse function |
76 |
| - function my_inv!(D::MyDiag, u, b) |
77 |
| - @. u = b / D.d |
78 |
| - end |
79 |
| - |
80 |
| - A1 = rand(n) |> MyDiag; b1 = rand(n); x1 = zero(b1) |
81 |
| - A2 = rand(n) |> MyDiag; b2 = rand(n); x2 = zero(b1) |
82 |
| - |
83 |
| - prob1 = LinearProblem(A1, b1; u0=x1) |
84 |
| - prob2 = LinearProblem(A1, b1; u0=x1) |
85 |
| - |
86 |
| - for alg in ( |
87 |
| - FunctionCall(LinearAlgebra.ldiv!, (:u, :A, :b)), |
88 |
| - FunctionCall(my_inv!, (:A, :u, :b)), |
89 |
| - ApplyLDivBang(), |
90 |
| - ApplyLDivBang2Args(), |
91 |
| - ApplyLDivBang3Args(), |
92 |
| - ) |
93 |
| - test_interface(alg, prob1, prob2) |
94 |
| - end |
95 |
| - end |
96 |
| -end |
97 |
| -#= |
98 |
| -
|
99 | 40 | @testset "Default Linear Solver" begin
|
100 | 41 | test_interface(nothing, prob1, prob2)
|
101 | 42 |
|
|
345 | 286 | @test sol13.u ≈ sol23.u
|
346 | 287 | @test sol13.u ≈ sol33.u
|
347 | 288 | end
|
348 |
| -=# |
| 289 | + |
| 290 | +@testset "Solve Function" begin |
| 291 | + |
| 292 | + A1 = rand(n) |> Diagonal; b1 = rand(n); x1 = zero(b1) |
| 293 | + A2 = rand(n) |> Diagonal; b2 = rand(n); x2 = zero(b1) |
| 294 | + |
| 295 | + function sol_func(A,b,u,p,newA,Pl,Pr,solverdata;verbose=true, kwargs...) |
| 296 | + if verbose == true |
| 297 | + println("out-of-place solve") |
| 298 | + end |
| 299 | + u = A \ b |
| 300 | + end |
| 301 | + |
| 302 | + function sol_func!(A,b,u,p,newA,Pl,Pr,solverdata;verbose=true, kwargs...) |
| 303 | + if verbose == true |
| 304 | + println("in-place solve") |
| 305 | + end |
| 306 | + ldiv!(u,A,b) |
| 307 | + end |
| 308 | + |
| 309 | + prob1 = LinearProblem(A1, b1; u0=x1) |
| 310 | + prob2 = LinearProblem(A1, b1; u0=x1) |
| 311 | + |
| 312 | + for alg in ( |
| 313 | + LinearSolveFunction(), |
| 314 | + LinearSolveFunction(sol_func), |
| 315 | + LinearSolveFunction(sol_func!), |
| 316 | + ) |
| 317 | + test_interface(alg, prob1, prob2) |
| 318 | + end |
| 319 | +end |
349 | 320 |
|
350 | 321 | @testset "Solve Function" begin
|
351 | 322 |
|
|
0 commit comments