[SciPy-User] VODE seems too slow for big systems.
Peter John Garrone
Fri Dec 31 04:00:42 CST 2010
I am modelling water flow and erosion using a triangular mesh. (I am attempting to develop realistic terrain
for a game scenario.)
I have developed a model that integrates an ODE using VODE from scipy.integrate, which seems to work the best.
Using 4 states per point, the system works for models at a certain scale. I am able to differentiate the model
and calculate the banded jacobian accurately, which helps a lot.
To make it work faster and better, and looking to putting it on Amazon to calculate models of finer resolution,
I made my functional evaluations threaded. However for large models, using no threads, one thread, or two threads
made little difference to the calculation rate. Indeed, if running threaded, the two threads that did the function
evaluations and were supposed to be occupying my dual-cpu system were instead using only a small fraction of the CPU,
and I infer that most of the time was lost in the VODE algorithm. The measurement was made with the ps utility on linux.
Looking at the BDF algorithm that VODE employs, I would guess that it intrinsically scales linearly. However as
it uses a predictor-corrector step that employs Newtons method that solves a Jacobian expression, I speculate that
solving the Jacobian expression for models with tens of thousands of states using direct factorization would be the
element taking most of the time.
There are iterative solvers in scipy that might solve the Jacobian expression much more quickly. However getting
VODE to employ it might be a problem. I wonder if anybody could point me to a better approach here.
More information about the SciPy-User