Sparse Jacobian with dense blocks in differentialEquations.jl or otherwise

Dear all,

I am planning to use differentialEquations.jl to solve a stiff system of ordinary differential equations in which the Jacobian is sparse with dense blocks. Such systems are well known in this community as they appear in networks with dynamics (for e.g. biology to chemistry) prescribed on the nodes of the network.

Here is what I am wondering about.

1/ Non-Linear Solver at Each Time Step

1.1/ Can the performance of the non-linear solver at each time step be monitored (equivalent of -snes_monitor in PETSc e.g.)

1.2/ Can the setting of the non-linear solver (tolerances, Jacobians approximations) be changed

2/ Linear Solver at Each Non-Linear Step

Can the linear solver (preconditioned Krylov method) be customized and monitored?

3/ Sparsity structure of the Jacobian

The ODE has the form \dot{x} = A x + f(x) leading to a sparse Jacobian with dense blocks. Can the SplitFunction be used to specify an additive preconditioned that treats the contribution A and Jac(f(x)) separately?

Thanks, Domenico.

Yes, the heuristics are all exposed:

https://github.com/SciML/DiffEqBase.jl/blob/master/src/nlsolve/type.jl#L65

though it needs more docs.

Yes, you can even write your own routine.

https://diffeq.sciml.ai/stable/features/linear_nonlinear/

You can just do that in the linear solver.

Amazing! Thx.