From: Gib Bogle on
I'm looking for an ODE solver that is particularly suited to very large systems,
i.e. thousands to tens of thousands of equations. I'm currently using the
Fortran90 version (by John Burkardt) of the code from Sandia (Watts and
Shampine) implementing "Low-order Classical Runge-Kutta Formulas with Stepsize
Control" (Erwin Fehlberg). This works fine, but there may be code that is
better suited to large systems of equations, e.g. using OpenMP. Suggestions
welcomed.
From: Terence on
On Jan 19, 8:38 am, Gib Bogle <g.bo...(a)auckland.no.spam.ac.nz> wrote:
> I'm looking for an ODE solver that is particularly suited to very large systems,
> i.e. thousands to tens of thousands of equations.  I'm currently using the
> Fortran90 version (by John Burkardt) of the code from Sandia (Watts and
> Shampine) implementing "Low-order Classical Runge-Kutta Formulas with Stepsize
> Control" (Erwin Fehlberg).  This works fine, but there may be code that is
> better suited to large systems of equations, e.g. using OpenMP.  Suggestions
> welcomed.

There's a class of problems (inequality statements) that can be solved
by the "Out of Kilter Algorithm". This expresses the inequalities as
coted, capacity-limited flows through nodes (its origin was for
country-wide large-scale water control planning and time-event action
simulation of downstream effects). Remarkably, the number of
iterations needed is in the tens to hundreds range. It's a mathetical
inverse of the traditional methods.

Another attack is to take the source of the algorithm you are using
and see if you can optimise it for a particuar compiler-computer
combination.

A third is see if you can compile the (Fortran) source using CUDA for
the nVidia graphics chip - which is being used extensively for these
very large problems.
From: Gordon Sande on
On 2010-01-18 20:42:09 -0400, Terence <tbwright(a)cantv.net> said:

> On Jan 19, 8:38�am, Gib Bogle <g.bo...(a)auckland.no.spam.ac.nz> wrote:
>> I'm looking for an ODE solver that is particularly suited to very large s
> ystems,
>> i.e. thousands to tens of thousands of equations. �I'm currently using
> the
>> Fortran90 version (by John Burkardt) of the code from Sandia (Watts and
>> Shampine) implementing "Low-order Classical Runge-Kutta Formulas with Ste
> psize
>> Control" (Erwin Fehlberg). �This works fine, but there may be code that
> is
>> better suited to large systems of equations, e.g. using OpenMP. �Sugges
> tions
>> welcomed.
>
> There's a class of problems (inequality statements) that can be solved
> by the "Out of Kilter Algorithm". This expresses the inequalities as
> coted, capacity-limited flows through nodes (its origin was for
> country-wide large-scale water control planning and time-event action
> simulation of downstream effects). Remarkably, the number of
> iterations needed is in the tens to hundreds range. It's a mathetical
> inverse of the traditional methods.


Out-of-kilter is an old method for solving network problems. Suitable for
hand calculation. Network simplex or something even more modern would be
preferred. ODE usually stands for Ordinary Differential Equations which
are NOT network problems. Runge-Kutta is a well known method for ODEs which
should have been an additional hint as to what kind of equations were
being asked about.


> Another attack is to take the source of the algorithm you are using
> and see if you can optimise it for a particuar compiler-computer
> combination.


Polishing code rarely leads to serious improvements. Choosing a better
algorithm is the way to go.


> A third is see if you can compile the (Fortran) source using CUDA for
> the nVidia graphics chip - which is being used extensively for these
> very large problems.


From: none on
On Tue, 19 Jan 2010 10:38:33 +1300, Gib Bogle wrote:

> I'm looking for an ODE solver that is particularly suited to very large systems,
> i.e. thousands to tens of thousands of equations. I'm currently using the
> Fortran90 version (by John Burkardt) of the code from Sandia (Watts and
> Shampine) implementing "Low-order Classical Runge-Kutta Formulas with Stepsize
> Control" (Erwin Fehlberg). This works fine, but there may be code that is
> better suited to large systems of equations, e.g. using OpenMP. Suggestions
> welcomed.

What kinds of ODE are you solving?

Stiff or non-stiff? Smooth or non-smooth? Lots of intermediate output, or
little?

Nonsmooth, nonstiff: RK
Nonstiff, smooth, lots of output: RK or Adams
Nonstiff, smooth, little output: RK, ADams or Bulrisch-Stoer

Stiff, nonsmooth: Runge-Kuuta Chebychev methods (eg RKC, ROCK2) or
implicit rK (eg RADAU5)
Stiff, smooth: VODPK or DASSLPK

Most of these are available through Netlib. ROCK2 needs going to Hairer's
website.
From: Gib Bogle on
none wrote:
> On Tue, 19 Jan 2010 10:38:33 +1300, Gib Bogle wrote:
>
>> I'm looking for an ODE solver that is particularly suited to very large systems,
>> i.e. thousands to tens of thousands of equations. I'm currently using the
>> Fortran90 version (by John Burkardt) of the code from Sandia (Watts and
>> Shampine) implementing "Low-order Classical Runge-Kutta Formulas with Stepsize
>> Control" (Erwin Fehlberg). This works fine, but there may be code that is
>> better suited to large systems of equations, e.g. using OpenMP. Suggestions
>> welcomed.
>
> What kinds of ODE are you solving?
>
> Stiff or non-stiff? Smooth or non-smooth? Lots of intermediate output, or
> little?
>
> Nonsmooth, nonstiff: RK
> Nonstiff, smooth, lots of output: RK or Adams
> Nonstiff, smooth, little output: RK, ADams or Bulrisch-Stoer
>
> Stiff, nonsmooth: Runge-Kuuta Chebychev methods (eg RKC, ROCK2) or
> implicit rK (eg RADAU5)
> Stiff, smooth: VODPK or DASSLPK
>
> Most of these are available through Netlib. ROCK2 needs going to Hairer's
> website.

Hi, After some testing I've given up on this idea. Here is what I
posted on sci.math.num-analysis:

The situation I am interested in simulating is wet and squishy.
Keratinocytes (skin cells in the epidermis) are proliferating in a
healing wound. I have been handling this in a very ad hoc fashion,
evaluating repulsion forces on each cell from neighbouring cells, then
moving each cell in turn using F = kv, k = drag coefficient. I had the
idea of trying to make this a bit more kosher, with F - kv = ma, and
solving for all cells simultaneously. A bit of experimentation since I
posted my query has convinced me that there is no future in this. The
main problem is that determination of F is very expensive, making the
solver go at a snail's pace. In any case I now see that using a proper
ODE solver is really overkill for this situation. Cells are not really
spheres with well-defined boundaries, as the formulation assumes, and
there is no harm in allowing a degree of latitude in their interactions,
i.e. I can live with temporary overlapping of cells.

In other words, I'm now stepping back from an attempt at a kind of
rigour that probably would have been spurious anyway. As long as the
model parameters can be adjusted to make cell densities and motion
characteristics roughly consistent with the behaviour of real cells (an
empirical matter) the motion model will be adequate for the purpose.