|
oregonator.xmds
Script source: oregonator.xmds.gz
<?xml version="1.0"?>
<simulation>
<!-- $Id: oregonator_body.part 996 2004-08-03 05:32:16Z cochrane $ -->
<!-- Copyright (C) 2000-2004 -->
<!-- -->
<!-- Code contributed by Greg Collecutt, Joseph Hope and Paul Cochrane -->
<!-- -->
<!-- This file is part of xmds. -->
<!-- -->
<!-- This program is free software; you can redistribute it and/or -->
<!-- modify it under the terms of the GNU General Public License -->
<!-- as published by the Free Software Foundation; either version 2 -->
<!-- of the License, or (at your option) any later version. -->
<!-- -->
<!-- This program is distributed in the hope that it will be useful, -->
<!-- but WITHOUT ANY WARRANTY; without even the implied warranty of -->
<!-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -->
<!-- GNU General Public License for more details. -->
<!-- -->
<!-- You should have received a copy of the GNU General Public License -->
<!-- along with this program; if not, write to the Free Software -->
<!-- Foundation, Inc., 59 Temple Place - Suite 330, Boston, -->
<!-- MA 02111-1307, USA. -->
<name> oregonator </name> <!-- the name of the simulation -->
<author> Paul Cochrane </author> <!-- the author of the simulation -->
<description>
<!-- a description of what the simulation is supposed to do -->
Example simulation of the Oregonator model of oscillating chemical
kinetics equations.
Calculates concentrations of components participating
in the Oregonator model. The reaction scheme is
A + Y ----> X + R (1)
X + Y ----> 2 R (2)
A + X ----> 2 X + 2 Z (3)
2 X ----> A + R (4)
B + Z ----> 1/2 Y (5)
Rate laws are
d[X]/dt = k1 [A] [Y] - k2 [X] [Y] + k3 [A] [X] - 2 k4 [X]^2
d[Y]/dt = -k1 [A] [Y] - k2 [X] [Y] + (1/2) k5 [B] [Z]
d[Z]/dt = 2 k3 [A] [X] - k5 [B] [Z]
which are transformed to
d[X]_d(tau) = (k1 [A] [Y] - k2 [X] [Y] + k3 [A] [X] - 2 k4 [X]^2)/(k5 [B])
d[Y]_d(tau) = (-k1 [A] [Y] - k2 [X] [Y] + (1/2) k5 [B] [Z])/(k5 [B])
d[Z]_d(tau) = (2 k3 [A] [X] - k5 [B] [Z])/(k5 [B])
where tau = k5*[B]*t is a unitless time variable. The
program integrates these equations, assuming that concentrations
of A and B are constant.
Adapted for xmds from "Mathematica computer programs for physical
chemistry", William H. Cropper, Springer Verlag (1998)
</description>
<!-- Global system parameters and functionality -->
<prop_dim> tau </prop_dim> <!-- name of main propagation dim -->
<error_check> yes </error_check> <!-- defaults to yes -->
<use_wisdom> yes </use_wisdom> <!-- defaults to no -->
<benchmark> yes </benchmark> <!-- defaults to no -->
<use_prefs> yes </use_prefs> <!-- defaults to yes -->
<!-- Global variables for the simulation -->
<globals>
<![CDATA[
// rate constants
// Units are L mol^-1 s^-1
const double k1 = 0.005;
const double k2 = 1.0;
const double k3 = 1.0;
const double k4 = 1.0;
const double k5 = 0.0004;
// the constant concentrations of the components A and B
// in mol L^-1
const double a = 0.01;
const double b = 1.0;
// the initial concentrations of the components X, Y and Z
const double CX0 = 0.0;
const double CY0 = 0.0;
const double CZ0 = 0.00025;
]]>
</globals>
<!-- Field to be integrated over -->
<field>
<name> main </name>
<samples> 1 </samples> <!-- sample 1st point of dim? -->
<vector>
<name> main </name>
<type> double </type> <!-- data type of vector -->
<components> CX CY CZ </components> <!-- names of components -->
<![CDATA[
CX = CX0;
CY = CY0;
CZ = CZ0;
]]>
</vector>
</field>
<!-- The sequence of integrations to perform -->
<sequence>
<integrate>
<algorithm> RK4IP </algorithm> <!-- RK4EX, RK4IP, SIEX, SIIP -->
<interval> 50 </interval> <!-- how far in main dim? -->
<lattice> 5000 </lattice> <!-- no. points in main dim -->
<samples> 500 </samples> <!-- no. pts in output moment group -->
<![CDATA[
dCX_dtau = (k1*a*CY - k2*CX*CY + k3*a*CX - 2.0*k4*CX*CX)/(k5*b);
dCY_dtau = (-k1*a*CY - k2*CX*CY + 0.5*k5*b*CZ)/(k5*b);
dCZ_dtau = (2.0*k3*a*CX - k5*b*CZ)/(k5*b);
]]>
</integrate>
</sequence>
<!-- The output to generate -->
<output format="ascii">
<group>
<sampling>
<lattice> 500 </lattice> <!-- no. points to sample -->
<moments> X X10 Y Z </moments> <!-- names of moments -->
<![CDATA[
X = CX;
X10 = CX*10; // scaled X concentration for plotting
Y = CY;
Z = CZ;
]]>
</sampling>
</group>
</output>
</simulation>
Generated by GNU enscript 1.6.3.
|