<?xml version="1.0"?>

<!--
FILE : two_reaction_model.xml

CREATED : 18 January 2001

LAST MODIFIED : 22nd July 2002

AUTHOR : Melanie Nelson
         Physiome Sciences, Inc.
         
MODEL STATUS :  This model conforms to the CellML 1.0 Specification released on
                10th August 2001, and the 16/01/2002 CellML Metadata 1.0
                Specification.

DESCRIPTION : In this CellML file, the simple reaction/pathway model presented
  in the examples section of the CellML website is extended to include two
  reactions. This demonstrates how the differential equations governing the
  conservation of concentration of a chemical species work in the presence
  of multiple reactions.

    Only features that weren't commented in the original basic reaction model
  are commented in this file.
-->


<model name="two_reaction_model" xmlns="http://www.cellml.org/cellml/1.0#" xmlns:cellml="http://www.cellml.org/cellml/1.0#" xmlns:cmeta="http://www.cellml.org/metadata/1.0#">

<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:bqs="http://www.cellml.org/bqs/1.0#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:vCard="http://www.w3.org/2001/vcard-rdf/3.0#">
    
<!--
      The following RDF block contains metadata that applies to this document
      as a whole, as indicated by the empty about attribute on the 
      <rdf:Description> element.
    -->

    
<rdf:Description rdf:about="">
      
<!--
        The Model Builder Metadata.  The Dublin Core "creator" element is used  
        to indicate the person who translated the model into CellML.
      -->

      
<dc:creator rdf:parseType="Resource">
        
<vCard:N rdf:parseType="Resource">
          
<vCard:Family>Nelson</vCard:Family>
          
<vCard:Given>Melanie</vCard:Given>
        
</vCard:N>
        
<vCard:ORG rdf:parseType="Resource">
          
<vCard:Orgname>Physiome Sciences</vCard:Orgname>
        
</vCard:ORG>
      
</dc:creator>
      
      
<!--
        The Creation Date metadata. This is the date on which the model
        was translated into CellML.
      -->

      
<dcterms:created rdf:parseType="Resource">
        
<dcterms:W3CDTF>2000-11-20</dcterms:W3CDTF>
      
</dcterms:created>
      
      
<!--
        The Last Modified Date metadata. This is the date on which
        the model was last changed.
      -->

      
<cmeta:modification rdf:parseType="Resource">
        
<rdf:value>
          Added metadata.
        
</rdf:value>
        
<cmeta:modifier rdf:parseType="Resource">
          
<vCard:N rdf:parseType="Resource">
            
<vCard:Family>Lloyd</vCard:Family>
            
<vCard:Given>Catherine</vCard:Given>
            
<vCard:Other>May</vCard:Other>
          
</vCard:N>
        
</cmeta:modifier>
        
<dcterms:modified rdf:parseType="Resource"> 
          
<dcterms:W3CDTF>2001-01-22</dcterms:W3CDTF>
        
</dcterms:modified>
      
</cmeta:modification>
    
      
      
<!-- The Publisher metadata. -->
      
<dc:publisher>Physiome Sciences</dc:publisher>
    
</rdf:Description>
    
    
<!--
      The following metadata refers to the model itself, as indicated by the
      reference to the ID "two_reaction_model", which is 
      declared on the <model> element.
    -->

    
<rdf:Description rdf:about="#two_reaction_model">
      
<!-- A human readable name for the model. -->
      
<dc:title>A Simple Two Reaction Model</dc:title>
      
      
<!-- A comment regarding the model. -->
      
<cmeta:comment rdf:parseType="Resource">
        
<rdf:value>
          Below is a CellML description of a simple two reaction model.  
          
          The purpose of this description is to illustrate how CellML can be 
          used to model metabolic and signal transduction pathways                         within a cell.
        
</rdf:value>
        
<!-- The creator of the comment. -->
        
<dc:creator>
          
<vCard:FN>Catherine Lloyd</vCard:FN>
        
</dc:creator>
      
</cmeta:comment>
    
</rdf:Description>
  
</rdf:RDF>
  
  
  
<!--
    The following <units> elements are used to declare a set of unit names
    for use within the units attributes on <variable> and <cn> elements
    elsewhere in the model. See the example documentation of the simple
    electro-physiological model for more details.
  -->

  
<units name="concentration_units">
    
<unit prefix="milli" units="mole" />
    
<unit units="litre" exponent="-1" />
  
</units>

  
<units name="flux_units">
    
<unit units="concentration_units" exponent="1" />
    
<unit units="second" exponent="-1" />
  
</units>

  
<units name="first_order_rate_constant">
    
<unit units="second" exponent="-1" />
  
</units>

  
<units name="second_order_rate_constant">
    
<unit units="concentration_units" exponent="-1" />
    
<unit units="second" exponent="-1" />
  
</units>

  
<units name="third_order_rate_constant">
    
<unit units="concentration_units" exponent="-2" />
    
<unit units="second" exponent="-1" />
  
</units>


  
<component name="environment">
    
<variable name="time" public_interface="out" units="second" />
  
</component>


  
<!--
    The first six components correspond to the reactants and products in
    the two reactions in this simple model. They are primarily used to store
    the concentrations of each of the metabolites. These variables are given 
    the same name as their parent component, and exposed to the rest of the 
    model by having a public_interface value of "out". Each reaction calculates
    the rate of change of concentration of each of the metabolites as a result
    of that reaction, and the results are returned as fluxes (the "delta"
    variables in the metabolite components), which are then passed back to the 
    components representing the chemical species. These variables therefore 
    have a public_interface value of in. Because the concentration variables 
    are continuous functions of time, the time variable must also be declared.

    Although it would be possible to define all of the chemical species and
    the reaction in the same component, it is recommended best practice to
    put each chemical species and each reaction in its own component. This
    makes it easier to combine this model with other pathway models, or merge
    it with electro-physiological or other classes of model.
  -->

  
<component name="A">
    
<variable name="A" public_interface="out" units="concentration_units" />
    
<variable name="delta_A" public_interface="in" units="flux_units" />
    
<variable name="time" public_interface="in" units="second" />

    
<math xmlns="http://www.w3.org/1998/Math/MathML">
      
<apply><eq />
         
<apply><diff />
          
<bvar><ci> time </ci></bvar>
          
<ci> A </ci>
        
</apply>
        
<ci> delta_A </ci>
      
</apply>
    
</math>
  
</component>


  
<component name="B">
    
<variable name="B" public_interface="out" units="concentration_units" />
    
<variable name="delta_B" public_interface="in" units="flux_units" />
    
<variable name="time" public_interface="in" units="second" />

    
<math xmlns="http://www.w3.org/1998/Math/MathML">
      
<apply><eq />
         
<apply><diff />
          
<bvar><ci> time </ci></bvar>
          
<ci> B </ci>
        
</apply>
        
<ci> delta_B </ci>
      
</apply>
    
</math>
  
</component>


  
<!--
    The chemical species "C" is used in both reactions in this model. 
    Therefore, it has two "delta" variables: one to represent the change
    in its concentration due to the first_reaction, and the other to represent
    the change in its concentration due to the second_reaction. The mathematical
    expression defining how the changes in concentration due to the two
    reactions are to be merged into a global rate of change of C with respect
    to time is stored in this component. In this simple model, the two delta
    variables are simply summed. This is how most models will probably behave.
    However, more complex situations could also be represented in CellML. The
    modeller is free to use any mathematical expression that can be represented
    in MathML.
  -->

  
<component name="C">
    
<variable name="C" public_interface="out" units="concentration_units" />
    
<variable name="delta_C_rxn1" public_interface="in" units="flux_units" />
    
<variable name="delta_C_rxn2" public_interface="in" units="flux_units" />
    
<variable name="time" public_interface="in" units="second" />

    
<math xmlns="http://www.w3.org/1998/Math/MathML">
      
<apply><eq />
         
<apply><diff />
          
<bvar><ci> time </ci></bvar>
          
<ci> C </ci>
        
</apply>
        
<apply><plus />
          
<ci> delta_C_rxn1 </ci>
          
<ci> delta_C_rxn2 </ci>
        
</apply>
      
</apply>
    
</math>
  
</component>


  
<component name="D">
    
<variable name="D" public_interface="out" units="concentration_units" />
    
<variable name="delta_D" public_interface="in" units="flux_units" />
    
<variable name="time" public_interface="in" units="second" />

    
<math xmlns="http://www.w3.org/1998/Math/MathML">
      
<apply><eq />
         
<apply><diff />
          
<bvar><ci> time </ci></bvar>
          
<ci> D </ci>
        
</apply>
        
<ci> delta_D </ci>
      
</apply>
    
</math>
  
</component>

  
<component name="E">
    
<variable name="E" public_interface="out" units="concentration_units" />
    
<variable name="delta_E" public_interface="in" units="flux_units" />
    
<variable name="time" public_interface="in" units="second" />

    
<math xmlns="http://www.w3.org/1998/Math/MathML">
      
<apply><eq />
         
<apply><diff />
          
<bvar><ci> time </ci></bvar>
          
<ci> E </ci>
        
</apply>
        
<ci> delta_E </ci>
      
</apply>
    
</math>
  
</component>

  
<component name="F">
    
<variable name="F" public_interface="out" units="concentration_units" />
    
<variable name="delta_F" public_interface="in" units="flux_units" />
    
<variable name="time" public_interface="in" units="second" />

    
<math xmlns="http://www.w3.org/1998/Math/MathML">
      
<apply><eq />
         
<apply><diff />
          
<bvar><ci> time </ci></bvar>
          
<ci> F </ci>
        
</apply>
        
<ci> delta_F </ci>
      
</apply>
    
</math>
  
</component>

  
<!--
    The first reaction component contains the definition of the first
    reaction in our simple model, importing the concentrations of the reactants
    (A and B) and products (C and D) and calculating the change in these
    concentrations (the delta variables) for export back to the components
    where these concentrations are declared (defined above).
  -->

  
<component name="first_reaction">
    
<!-- These variables are modifiable elsewhere and imported. -->
    
<variable name="A" public_interface="in" units="concentration_units" />
    
<variable name="B" public_interface="in" units="concentration_units" />
    
<variable name="C" public_interface="in" units="concentration_units" />
    
<variable name="D" public_interface="in" units="concentration_units" />

    
<!-- These variables are modifiable in this component and exported. -->
    
<variable name="delta_A" public_interface="out" units="flux_units" />
    
<variable name="delta_B" public_interface="out" units="flux_units" />
    
<variable name="delta_C" public_interface="out" units="flux_units" />
    
<variable name="delta_D" public_interface="out" units="flux_units" />

    
<!--
      k_forward and k_reverse are the forward and reverse rate constants,
      respectively. "r" is the reaction rate, or extent of the reaction.
      They are not used by any other component in the model, and therefore
      have no public or private interface.
    -->

    
<variable name="k_forward" units="second_order_rate_constant" />
    
<variable name="k_reverse" units="third_order_rate_constant" />
    
<variable name="r" units="flux_units" />

    
<!--
      The <reaction> element is used to indicate which chemical species are
      participating in this reaction, and what role they play in the reaction.
    -->

    
<reaction>
      
<variable_ref variable="A">
        
<role role="reactant" direction="forward" delta_variable="delta_A" stoichiometry="1" />
      
</variable_ref>
      
<variable_ref variable="B">
        
<role role="reactant" direction="forward" delta_variable="delta_B" stoichiometry="1" />
      
</variable_ref>
      
<variable_ref variable="C">
        
<role role="product" direction="forward" delta_variable="delta_C" stoichiometry="2" />
      
</variable_ref>
      
<variable_ref variable="D"> 
        
<role role="product" direction="forward" delta_variable="delta_D" stoichiometry="1" />
      
</variable_ref>
      
<variable_ref variable="r">
        
<role role="rate">
          
<math xmlns="http://www.w3.org/1998/Math/MathML">
            
<apply><eq />
              
<ci> r </ci>
              
<apply><plus />
                
<apply><minus />
                  
<apply><times />
                    
<ci> k_forward </ci>
                    
<ci> A </ci>
                    
<ci> B </ci>
                  
</apply>
                
</apply>
                
<apply><times />
                  
<ci> k_reverse </ci>
                  
<apply><power />
                    
<ci> C </ci>
                    
<cn cellml:units="dimensionless"> 2.0 </cn>
                  
</apply>
                  
<ci> D </ci>
                
</apply>
              
</apply>
            
</apply>
          
</math>
        
</role>
      
</variable_ref>
    
</reaction>

  
</component>

  
<component name="second_reaction">
    
<!-- These variables are modifiable elsewhere and imported. -->
    
<variable name="C" public_interface="in" units="concentration_units" />
    
<variable name="E" public_interface="in" units="concentration_units" />
    
<variable name="F" public_interface="in" units="concentration_units" />
   
    
<!-- These variables are modifiable in this component and exported. -->
    
<variable name="delta_C" public_interface="out" units="flux_units" />
    
<variable name="delta_E" public_interface="out" units="flux_units" />
    
<variable name="delta_F" public_interface="out" units="flux_units" />

    
<!-- These variables are internal to this component. -->
    
<variable name="k_forward" units="second_order_rate_constant" />
    
<variable name="k_reverse" units="first_order_rate_constant" />
    
<variable name="r" units="flux_units" />
    
    
<reaction>
      
<variable_ref variable="C">
        
<role role="reactant" direction="forward" delta_variable="delta_C" stoichiometry="1" />
      
</variable_ref>
      
<variable_ref variable="E">
        
<role role="reactant" direction="forward" delta_variable="delta_E" stoichiometry="1" />
      
</variable_ref>
      
<variable_ref variable="F">
        
<role role="product" direction="forward" delta_variable="delta_F" stoichiometry="1" />
      
</variable_ref>
      
<variable_ref variable="r">
        
<role role="rate">
          
<math xmlns="http://www.w3.org/1998/Math/MathML">
            
<apply><eq />
              
<ci> r </ci>
              
<apply><plus />
                
<apply><minus />
                  
<apply><times />
                    
<ci> k_forward </ci>
                    
<ci> C </ci>
                    
<ci> E </ci>
                  
</apply>
                
</apply>
                
<apply><times />
                  
<ci> k_reverse </ci>
                  
<ci> F </ci>
                
</apply>
              
</apply>
            
</apply>
          
</math>
        
</role>
      
</variable_ref>
    
</reaction>

  
</component>



  
<!--
    The connections define the mappings between variables declared in
    different components. When more than one variable is mapped between
    two components, all variable mappings must be listed in the same
    connection element (there can only be one connection between two
    components).
  -->

  
<connection>
    
<map_components component_1="A" component_2="first_reaction" />
    
<map_variables variable_1="A" variable_2="A" />
    
<map_variables variable_1="delta_A" variable_2="delta_A" />
  
</connection>


  
<connection>
    
<map_components component_1="B" component_2="first_reaction" />
    
<map_variables variable_1="B" variable_2="B" />
    
<map_variables variable_1="delta_B" variable_2="delta_B" />
  
</connection>


  
<connection>
    
<map_components component_1="C" component_2="first_reaction" />
    
<map_variables variable_1="C" variable_2="C" />
    
<map_variables variable_1="delta_C_rxn1" variable_2="delta_C" />
  
</connection>


  
<connection>
    
<map_components component_1="C" component_2="second_reaction" />
    
<map_variables variable_1="C" variable_2="C" />
    
<map_variables variable_1="delta_C_rxn2" variable_2="delta_C" />
  
</connection>


  
<connection>
    
<map_components component_1="D" component_2="first_reaction" />
    
<map_variables variable_1="D" variable_2="D" />
    
<map_variables variable_1="delta_D" variable_2="delta_D" />
  
</connection>


  
<connection>
    
<map_components component_1="E" component_2="second_reaction" />
    
<map_variables variable_1="E" variable_2="E" />
    
<map_variables variable_1="delta_E" variable_2="delta_E" />
  
</connection>


  
<connection>
    
<map_components component_1="F" component_2="second_reaction" />
    
<map_variables variable_1="F" variable_2="F" />
    
<map_variables variable_1="delta_F" variable_2="delta_F" />
  
</connection>


  
<connection>
    
<map_components component_1="A" component_2="environment" />
    
<map_variables variable_1="time" variable_2="time" />
  
</connection>


  
<connection>
    
<map_components component_1="B" component_2="environment" />
    
<map_variables variable_1="time" variable_2="time" />
  
</connection>


  
<connection>
    
<map_components component_1="C" component_2="environment" />
    
<map_variables variable_1="time" variable_2="time" />
  
</connection>


  
<connection>
    
<map_components component_1="D" component_2="environment" />
    
<map_variables variable_1="time" variable_2="time" />
  
</connection>


  
<connection>
    
<map_components component_1="E" component_2="environment" />
    
<map_variables variable_1="time" variable_2="time" />
  
</connection>


  
<connection>
    
<map_components component_1="F" component_2="environment" />
    
<map_variables variable_1="time" variable_2="time" />
  
</connection>


</model>