Solving for the steady-state of a large nonlinear ODE in SciML

briochemc
Mon, 23 Nov 2020 05:59:21 +0000
Modelling & Simulations

I have a few questions:

1. What is the difference in scope between NonlinearSolve.jl and NLSolvers.jl/NLsolve.jl?

2. What are the pros/cons of NonlinearSolve.jl vs NLSolvers.jl/NLsolve.jl?

3. Are there any plans to include the algorithms of SIAMFANLEquations.jl into either/both of NonlinearSolve.jl and NLSolvers.jl/NLsolve.jl?

4. In particular, any plans to include the pseudo-transient continuation solver? Or maybe there are some other versions out there?

5. Are there other packages/solvers I should know about for solving large nonlinear systems?

For context, I deal with large-ish (up to ~1M) systems of nonlinear ODEs of marine tracers, for which I develop AIBECS.jl to, well, simulate these tracers. AIBECS essentially provides the tooling for users to create the functions that define the system of ODEs. In SciML’s lingo, it creates two functions of the state variable u and the parameters p:

F(u,p) = f(u, p, t) -> the rate of change of the system
∇ₓF(u,p) = jac(u, p, t) -> the jacobian of f with respect to u

As you may notice, there is no t dependency for my case of f and jac, and so most of the time, I am looking for the steady-state of these ODEs. To solve for that steady-state, I currently use my own rewrite of @ctkelley’s MATLAB nsold.m (which is probably not optimal, in the sense that my rewrite is not optimal, not his algorithms, to be precise! ). In other words, for a given set of parameters p, I feed x -> f(x,p,0) and x -> jac(x,p,0) to the newton solver to find the root x such that f(x,p,0) ≈ 0. Now this all works already quite well in my opinion, but I’m always looking to improve the package, and at the time of writing, it seems I have many choices to replace my non-expert code, among which

NLsolve.jl by @pkofod, the most used package for solving large nonlinear systems in Julia AFAIK

NLSolvers.jl, @pkofod’s own rewrite of NLsolve.jl, destined to replace it, but already available for those that want to live on the edge

JuliaComputing/SciML’s NonlinearSolve.jl, which seems to have a large overlap with NLsolve.jl/NLSolvers.jl although it seems to be targeting specifically SciML problems

SIAMFANLEquations.jl, which is @ctkelley’s own Julia version of nsold.m and co, being developed in parallel to writing the corresponding book. Particularly of interest to me is the pseudo-transient continuation solver, which I don’t think has any equivalent in other Julia packages, and is very relevant to my research, where the initial guess may be quite far and impede the Newton algorithm convergence.

Please forgive me if I butchered your work with my ignorant definitions and assumptions, I have the utmost respect for the developers/scientists involved with these and I think these are all amazing pieces of work/software. But back to my questions: I’m not really sure what I should be using in the future and keep asking myself these or similar questions, in my head or on slack, and I thought I should lay these down here for the experts (@pkofod, @ctkelley, @ChrisRackauckas and all the relevant SciML people, and whoever I should know about) to chime in if they want!

33 posts - 6 participants