[Graphics:Images/index_gr_1.gif]

Download Version 2.0 (July 2004).
Installation: Place the RDL folder inside Addons : Applications. Then select Rebuild Help Index from Mathematica's Help menu.

The rest of this page has not been updated.


Version 1.5, January 2003

Selwyn Hollis
s.hollis@earthlink.net
http://www.math.armstrong.edu/faculty/hollis

Description

ReactionDiffusionLab is a Mathematica package that provides two functions, RDDensityPlots and RDSurfacePlots, for animating solutions of autonomous reaction-diffusion systems with two components,

        [Graphics:Images/index_gr_2.gif]
        [Graphics:Images/index_gr_3.gif]

or three components,

        [Graphics:Images/index_gr_4.gif]
        [Graphics:Images/index_gr_5.gif]
        [Graphics:Images/index_gr_6.gif]

The domain is the unit square ([Graphics:Images/index_gr_7.gif], [Graphics:Images/index_gr_8.gif]), and boundary conditions are any combination of homogeneous Neumann type and (possibly nonhomogeneous) Dirichlet type.

Time stepping is done via an alternating direction implicit (ADI) method. (This is the primary improvement made to version 1.0.) Although the method is unconditionally stable for linear problems, a reasonably small time step is required for nonlinear problems.

At each step, solution values are stored in an [Graphics:Images/index_gr_9.gif] matrix corresponding to a simple square grid with [Graphics:Images/index_gr_10.gif]. Regardless of the boundary conditions, the first/last rows correspond to the top/bottom edges of the region, and the first/last entries in all rows correspond to the left/right edges of the region.

Limitations

The package works only on the problems described above. In particular there is no support for domains other than the unit square, spatially heterogeneous diffusion, Robin boundary conditions, or boundary conditions in which type depends on location. These are possible enhancements for future versions of the package.

Two-component Systems

The two functions are as follows in the two-component case:

[Graphics:Images/index_gr_11.gif]

[Graphics:Images/index_gr_12.gif]

In each of these, u0 and v0 are [Graphics:Images/index_gr_13.gif] matrices containing initial values.

RDDensityPlots takes the options of ListDensityPlot, with the exception of FrameTicks. RDSurfacePlots takes the options of ListPlot3D. In addition, each has the following options:

   [Graphics:Images/index_gr_14.gif] [Graphics:Images/index_gr_15.gif]
  PlotEvery 1 [Graphics:Images/index_gr_16.gif]
  ReturnLast False [Graphics:Images/index_gr_17.gif]
  BoundaryConditions Neumann [Graphics:Images/index_gr_18.gif]
  BoundaryFunctions [Graphics:Images/index_gr_19.gif] [Graphics:Images/index_gr_20.gif]

The PlotRange option works in a nonstandard way: PlotRange -> {{a,b},{c,d}} provides separate vertical plot ranges for the two components.  With PlotRange -> {a,b} the same vertical plot range is used for both components. If no plot range is specified, or if PlotRange -> Automatic, then plot ranges are calculated from the minimum and maximum of the initial data. (With a nonnegative minimum these are {0,1.25 max}. ) This will rarely give an ideal choice, but it ensures that plot sequences always “stay still.”  A related matter: The default for the ClipFill option is None.

Examples

This loads the package (assuming the file is in AddOns : Applications : RDL) and clears anything that might cause a problem.

[Graphics:Images/index_gr_21.gif]
This is the vector field for a Brusselator system. It has an unstable uniform equilibrium at [Graphics:Images/index_gr_22.gif].

[Graphics:Images/index_gr_23.gif]

These are good values for the diffusion coefficients and [Graphics:Images/index_gr_24.gif] .

[Graphics:Images/index_gr_25.gif]

Next define a matrix of initial values for each component.

[Graphics:Images/index_gr_26.gif]
[Graphics:Images/index_gr_27.gif]

Now sit back and watch. This is the Brusselator system with Neumann boundary conditions.

[Graphics:Images/index_gr_28.gif]
[Graphics:Images/index_gr_29.gif] Click on the image to see a QuickTime movie. (140k)

Here’s the same thing in 3D:

[Graphics:Images/index_gr_30.gif]

[Graphics:Images/index_gr_31.gif] Click on the image to see a QuickTime movie. (220k)

The same system but with Dirichlet boundary data [Graphics:Images/index_gr_32.gif] for [Graphics:Images/index_gr_33.gif]... and in color.

[Graphics:Images/index_gr_34.gif]
[Graphics:Images/index_gr_35.gif] Click on the image to see a QuickTime movie. (160k)

In this one, both components are held at their equilibrium values on the boundary.

[Graphics:Images/index_gr_36.gif]

[Graphics:Images/index_gr_37.gif] Click on the image to see a QuickTime movie. (210k)

Three-component Systems

For the three-component case, just include a third entry wherever appropriate:

[Graphics:Images/index_gr_38.gif]

[Graphics:Images/index_gr_39.gif]

Examples

This is the vector field for an Oregonator system:

[Graphics:Images/index_gr_40.gif]

[Graphics:Images/index_gr_41.gif]

This time we’ll use a 25×25-point grid.

[Graphics:Images/index_gr_42.gif]

This defines initial values for each component.

[Graphics:Images/index_gr_43.gif]
[Graphics:Images/index_gr_44.gif]

The following uses the Dirichlet boundary condition [Graphics:Images/index_gr_45.gif] and Neumann boundary conditions for [Graphics:Images/index_gr_46.gif] and [Graphics:Images/index_gr_47.gif].

[Graphics:Images/index_gr_48.gif]
[Graphics:Images/index_gr_49.gif] Click on the image to see a QuickTime movie. (92k)

Here’s the same thing in 3D:

[Graphics:Images/index_gr_50.gif]

[Graphics:Images/index_gr_51.gif] Click on the image to see a QuickTime movie. (80k)

If you have the patience, run the following. It gives a nice animation of the oscillatory behavior of the solution.

[Graphics:Images/index_gr_52.gif]
[Graphics:Images/index_gr_53.gif] Click on the image to see a QuickTime movie. (625k)


Converted by Mathematica      January 16, 2003