@@ -5,9 +5,9 @@ if isdefined(Base, :Experimental) && isdefined(Base.Experimental, Symbol("@max_m
5
5
end
6
6
7
7
import Reexport: @reexport
8
- import PrecompileTools
8
+ import PrecompileTools: @recompile_invalidations , @compile_workload , @setup_workload
9
9
10
- PrecompileTools . @recompile_invalidations begin
10
+ @recompile_invalidations begin
11
11
using DiffEqBase, LinearAlgebra, LinearSolve, SparseArrays, SparseDiffTools
12
12
using FastBroadcast: @. .
13
13
import ArrayInterface: restructure
@@ -95,17 +95,49 @@ include("jacobian.jl")
95
95
include (" ad.jl" )
96
96
include (" default.jl" )
97
97
98
- PrecompileTools. @compile_workload begin
99
- for T in (Float32, Float64)
100
- probs = (NonlinearProblem {false} ((u, p) -> u .* u .- p, T (0.1 ), T (2 )),
101
- NonlinearProblem {false} ((u, p) -> u .* u .- p, T[0.1 ], T[2 ]),
102
- NonlinearProblem {true} ((du, u, p) -> du .= u .* u .- p, T[0.1 ], T[2 ]))
98
+ @setup_workload begin
99
+ nlfuncs = ((NonlinearFunction {false} ((u, p) -> u .* u .- p), 0.1 ),
100
+ (NonlinearFunction {false} ((u, p) -> u .* u .- p), [0.1 ]),
101
+ (NonlinearFunction {true} ((du, u, p) -> du .= u .* u .- p), [0.1 ]))
102
+ probs_nls = NonlinearProblem[]
103
+ for T in (Float32, Float64), (fn, u0) in nlfuncs
104
+ push! (probs_nls, NonlinearProblem (fn, T .(u0), T (2 )))
105
+ end
103
106
104
- precompile_algs = (NewtonRaphson (), TrustRegion (), LevenbergMarquardt (),
105
- PseudoTransient (), GeneralBroyden (), GeneralKlement (), DFSane (), nothing )
107
+ nls_algs = (NewtonRaphson (), TrustRegion (), LevenbergMarquardt (), PseudoTransient (),
108
+ GeneralBroyden (), GeneralKlement (), DFSane (), nothing )
109
+
110
+ probs_nlls = NonlinearLeastSquaresProblem[]
111
+ nlfuncs = ((NonlinearFunction {false} ((u, p) -> (u .^ 2 .- p)[1 : 1 ]), [0.1 , 0.0 ]),
112
+ (NonlinearFunction {false} ((u, p) -> vcat (u .* u .- p, u .* u .- p)), [0.1 , 0.1 ]),
113
+ (NonlinearFunction {true} ((du, u, p) -> du[1 ] = u[1 ] * u[1 ] - p,
114
+ resid_prototype = zeros (1 )), [0.1 , 0.0 ]),
115
+ (NonlinearFunction {true} ((du, u, p) -> du .= vcat (u .* u .- p, u .* u .- p),
116
+ resid_prototype = zeros (4 )), [0.1 , 0.1 ]))
117
+ for (fn, u0) in nlfuncs
118
+ push! (probs_nlls, NonlinearLeastSquaresProblem (fn, u0, 2.0 ))
119
+ end
120
+ nlfuncs = ((NonlinearFunction {false} ((u, p) -> (u .^ 2 .- p)[1 : 1 ]), Float32[0.1 , 0.0 ]),
121
+ (NonlinearFunction {false} ((u, p) -> vcat (u .* u .- p, u .* u .- p)),
122
+ Float32[0.1 , 0.1 ]),
123
+ (NonlinearFunction {true} ((du, u, p) -> du[1 ] = u[1 ] * u[1 ] - p,
124
+ resid_prototype = zeros (Float32, 1 )), Float32[0.1 , 0.0 ]),
125
+ (NonlinearFunction {true} ((du, u, p) -> du .= vcat (u .* u .- p, u .* u .- p),
126
+ resid_prototype = zeros (Float32, 4 )), Float32[0.1 , 0.1 ]))
127
+ for (fn, u0) in nlfuncs
128
+ push! (probs_nlls, NonlinearLeastSquaresProblem (fn, u0, 2.0f0 ))
129
+ end
106
130
107
- for prob in probs, alg in precompile_algs
108
- solve (prob, alg, abstol = T (1e-2 ))
131
+ nlls_algs = (LevenbergMarquardt (), GaussNewton (),
132
+ LevenbergMarquardt (; linsolve = LUFactorization ()),
133
+ GaussNewton (; linsolve = LUFactorization ()))
134
+
135
+ @compile_workload begin
136
+ for prob in probs_nls, alg in nls_algs
137
+ solve (prob, alg, abstol = 1e-2 )
138
+ end
139
+ for prob in probs_nlls, alg in nlls_algs
140
+ solve (prob, alg, abstol = 1e-2 )
109
141
end
110
142
end
111
143
end
0 commit comments