Example: Heatflow in one dimension

This is an example of efficient prototyping of recurrences applied to a simple partial differential equation.

The 1-dimensional heat flow equation describes the heat distribution u(x,t) in a one-dimensional object along the x-axis at time t. Alpha is a physical constant describing the heat transfusion properties of the object. To turn this into a recurrence relation we may use the finite difference method, achieving  The c is a numerical constant, relating the size of the time steps to the size of the object grid. If the quotient is larger than c we loose numerical stability of the method. Abstracting the stencil, we may express the recurrence as a recursive program with the explicit stencil  The kernel of the program actually compiled follows, where we take into account the boundary conditions (a constant temperature given at the start of the computation)
h(n) =
if(right_boundary(n) or left_boundary(n)
then h(d(n,2))
else
s*h(d(n,1))
+ (1-2*s)*h(d(n,2))
+ s*h((d(n,3)
The actual computation is defined on an integer grid x int * t int rather than in real coordinates. The opposite of the stencil becomes   where nx is the number of nodes in the discretisation of the object (with length X) in the x-direction, nt is the number of nodes in the discretisation of the simulated time (with length T). The number of time nodes nt is related to the number of space node nx by the given formula.

Heatflow computation

The following is a sequence of snapshots of the actual computation generated by the compiler. The temperature has been encoded using colours. Initially the rod is hot (yellow), with a constant cold temperature (blue) being applied at the ends. During time the rod cools off from the edges (hues of green).

After sending initial values:   While computing:   Complete computation:   You can watch an animated demo of this if your browser supports Java.

In the parallel case all nodes at the same timestep would be computed simultaneously. An animated demo of this has also been prepared as a Java applet.

Heatflow result

Below the temperature of the object has been plotted against time in a wireframe image. You may view this as a rotatable image written in Java.  This was an example of efficient prototyping of recurrences.
© 1997 Magne Haveraaen, University of Bergen, Norway.