-
-
Notifications
You must be signed in to change notification settings - Fork 235
Open
Labels
Description
--trim is almost compatible with ImplicitEuler, except for this:
| controller::Symbol |
since this is ::Symbol, the compiler does not know which branch of default_controller(::ImplicitEuler) we'll take and we end up with Union{PIController{...}, IController{...}, PredictiveController{...}}, which is moderately type-unstable (and rapidly worsens once put into a type parameter)
If I override this behavior manually:
@eval OrdinaryDiffEqSDIRK OrdinaryDiffEqCore.ispredictive(alg::OrdinaryDiffEqNewtonAdaptiveAlgorithm) = false
@eval OrdinaryDiffEqSDIRK OrdinaryDiffEqCore.isstandard(alg::OrdinaryDiffEqNewtonAdaptiveAlgorithm) = falseThen the solver trims OK:
function @main(ARGS)
prob = ODEProblem(ODEFunction{true, SciMLBase.FullSpecialize}(lorenz), u0, tspan)
solver = ImplicitEuler(autodiff=AutoForwardDiff(; chunksize=1))
sol = solve(prob, solver)
println(Core.stdout, sol.t[end])
println(Core.stdout, sum(sol.u[end]))
end$ julia --project=../NonlinearSolve.jl/test/trim ./contrib/juliac/juliac.jl --trim=safe --experimental --output-exe trimmed_solve ../NonlinearSolve.jl/test/trim/main_once_per_process.jl
$ ./trimmed_solve 0.5
100.0
10.029437251508632so this is the last issue blocking ImplicitEuler from being --trim compatible