<?xml version="1.0"?>

<!--
FILE : basic_ep_model_with_encapsulation.xml

CREATED : 29 December 2000

LAST MODIFIED : 22nd July 2002 

AUTHOR : Warren Hedley (w.hedley@auckland.ac.nz)
         Department of Engineering Science
         The University of Auckland

DESCRIPTION : In this CellML file, the simple electro-physiological/membrane
   model presented in the examples section of the CellML website is extended
   to introduce the grouping concept, with particular emphasis on the
   encapsulation relationship. The model and associated markup have been
   created solely for demonstration purposes and is not expected to behave
   physiologically realistically.

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


<model name="basic_ep_model_with_encapsulation" 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>Hedley</vCard:Family>
          
<vCard:Given>Warren</vCard:Given>
        
</vCard:N>
        
<vCard:ORG rdf:parseType="Resource">
          
<vCard:Orgname>The University of Auckland</vCard:Orgname>
          
<vCard:Orgunit>The Engineering Science Department</vCard:Orgunit>
        
</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>2002-07-22</dcterms:W3CDTF>
        
</dcterms:modified>
      
</cmeta:modification>
    
      
      
<!-- The Publisher metadata. -->
      
<dc:publisher>
        The University of Auckland, Bioengineering Institute
      
</dc:publisher>
    
</rdf:Description>
    
    
<!--
      The following metadata refers to the model itself, as indicated by the
      reference to the ID "basic_ep_model_with_encapsulation", which is 
      declared on the <model> element.
    -->

    
<rdf:Description rdf:about="#basic_ep_model_with_encapsulation">
      
<!-- A human readable name for the model. -->
      
<dc:title>A Simple Electrophysiological Model With                                         Encapsulation</dc:title>
      
      
<!-- A comment regarding the model. -->
      
<cmeta:comment rdf:parseType="Resource">
        
<rdf:value>
          Below is a CellML description of a simple electrophysiological model             with encapsulation.
            
          The purpose of this description is to illustrate how CellML can be 
          used to model ionic currents and changes in ionic concentrations                 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>
  
  
  
<units name="concentration_units">
    
<unit prefix="milli" units="mole" />
    
<unit units="litre" exponent="-1" />
  
</units>

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

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


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


  
<component name="intra_cellular_space">
    
<!-- the following variables are used in other components -->
    
<variable name="Na" public_interface="out" units="concentration_units" />
    
<variable name="Ca" public_interface="out" units="concentration_units" />

    
<!-- the following variables are imported from other components -->
    
<variable name="time" public_interface="in" units="second" />
    
<variable name="I_Na" public_interface="in" units="flux_units" />
    
<variable name="I_Ca" public_interface="in" units="flux_units" />

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

      
<apply><eq />
        
<apply><diff />
          
<bvar><ci> time </ci></bvar>
          
<ci> Ca </ci>
        
</apply>
        
<ci> I_Ca </ci>
      
</apply>
    
</math>
  
</component>


  
<component name="extra_cellular_space">
    
<!-- the following variables are used in other components -->
    
<variable name="Na" public_interface="out" units="concentration_units" />
    
<variable name="Ca" public_interface="out" units="concentration_units" />

    
<!-- the following variables are imported from other components -->
    
<variable name="time" public_interface="in" units="second" />
    
<variable name="I_Na" public_interface="in" units="flux_units" />
    
<variable name="I_Ca" public_interface="in" units="flux_units" />

    
<math xmlns="http://www.w3.org/1998/Math/MathML">
      
<apply><eq />
        
<apply><diff />
          
<bvar><ci> time </ci></bvar>
          
<ci> Na </ci>
        
</apply>
        
<apply><times />
          
<cn cellml:units="dimensionless"> -1.0 </cn>
          
<ci> I_Na </ci>
        
</apply>
      
</apply>

      
<apply><eq />
        
<apply><diff />
          
<bvar><ci> time </ci></bvar>
          
<ci> Ca </ci>
        
</apply>
        
<apply><times />
          
<cn cellml:units="dimensionless"> -1.0 </cn>
          
<ci> I_Ca </ci>
        
</apply>
      
</apply>
    
</math>
  
</component>


  
<!--
    In the extended e-p model, the membrane encapsulates two components
    representing the sodium and calcium channels.  The rate constants and
    math for the fluxes is now in the channel components.
  -->

  
<component name="cell_membrane">
    
<!--
      The sodium and calcium fluxes are calculated in the encapsulated
      components and passed up to the membrane component and then out to the
      intra- and extra-cellular subspaces, so the fluxes have a private
      interface value of "in" and a public interface value of "out".
    -->

    
<variable name="I_Na" public_interface="out" private_interface="in" units="flux_units" />
    
<variable name="I_Ca" public_interface="out" private_interface="in" units="flux_units" />

    
<!--
      The concentrations of the ions in the intra- and extra-cellular
      subspaces is needed for the flux calculations, so these have a public
      interface value of "in" and a private interface value of "out".
    -->

    
<variable name="Na_i" public_interface="in" private_interface="out" units="concentration_units" />
    
<variable name="Na_e" public_interface="in" private_interface="out" units="concentration_units" />
    
<variable name="Ca_i" public_interface="in" private_interface="out" units="concentration_units" />
    
<variable name="Ca_e" public_interface="in" private_interface="out" units="concentration_units" />
  
</component>


  
<!--
    The sodium channel component doesn't know that it is encapsulated, and
    the variables that declare a public interface are visible to both sibling
    components (components encapsulated in the same group) as well as the
    parent encapsulating component.
  -->

  
<component name="sodium_channel">
    
<variable name="I_Na" public_interface="out" units="flux_units" />
    
<variable name="Na_i" public_interface="in" units="concentration_units" />
    
<variable name="Na_e" public_interface="in" units="concentration_units" />

    
<!-- The rate constant is only used internally so has no interface -->
    
<variable name="v_Na" initial_value="1.0e-8" units="rate_constant" />

    
<math xmlns="http://www.w3.org/1998/Math/MathML">
      
<apply><eq />
        
<ci> I_Na </ci>
        
<apply><times />
          
<ci> v_Na </ci>
          
<apply><minus />
            
<ci> Na_i </ci>
            
<ci> Na_e </ci>
          
</apply>
        
</apply>
      
</apply>
    
</math>
  
</component>


  
<!--
    The calcium channel is identical to the sodium channel. Note that when
    the component re-use scheme for CellML is properly defined, we would
    declare one generic channel component class, and then create two instances
    of that class, setting the rate constant appropriately for each channel.
  -->

  
<component name="calcium_channel">
    
<variable name="I_Ca" public_interface="out" units="flux_units" />
    
<variable name="Ca_i" public_interface="in" units="concentration_units" />
    
<variable name="Ca_e" public_interface="in" units="concentration_units" />

    
<variable name="v_Ca" initial_value="1.5e-8" units="rate_constant" />

    
<math xmlns="http://www.w3.org/1998/Math/MathML">
      
<apply><eq />
        
<ci> I_Ca </ci>
        
<apply><times />
          
<ci> v_Ca </ci>
          
<apply><minus />
            
<ci> Ca_i </ci>
            
<ci> Ca_e </ci>
          
</apply>
        
</apply>
      
</apply>
    
</math>
  
</component>


  
<!--
    The encapsulation relationship between the cell membrane and the sodium
    and calcium channels is defined inside the following <group> element. The
    group references the membrane as a major component and the two channels as
    minor components and references two relationships between the minor
    components and the major component: "is_encapsulated_by" and
    "is_contained_in".
  -->

  
<group>
    
<relationship_ref relationship="encapsulation" />
    
<relationship_ref relationship="containment" />
    
<component_ref component="cell_membrane">
      
<component_ref component="sodium_channel" />
      
<component_ref component="calcium_channel" />
    
</component_ref>
  
</group>


  
<connection>
    
<map_components component_1="intra_cellular_space" component_2="cell_membrane" />
    
<map_variables variable_1="Na" variable_2="Na_i" />
    
<map_variables variable_1="Ca" variable_2="Ca_i" />
    
<map_variables variable_1="I_Na" variable_2="I_Na" />
    
<map_variables variable_1="I_Ca" variable_2="I_Ca" />
  
</connection>


  
<connection>
    
<map_components component_1="extra_cellular_space" component_2="cell_membrane" />
    
<map_variables variable_1="Na" variable_2="Na_e" />
    
<map_variables variable_1="Ca" variable_2="Ca_e" />
    
<map_variables variable_1="I_Na" variable_2="I_Na" />
    
<map_variables variable_1="I_Ca" variable_2="I_Ca" />
  
</connection>


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


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


  
<!--
    The two new connections in the extended e-p model are between the cell
    membrane and the sodium and calcium channels. The mappings of fluxes and
    ionic concentrations are straightforward.
  -->

  
<connection>
    
<map_components component_1="cell_membrane" component_2="sodium_channel" />
    
<map_variables variable_1="Na_i" variable_2="Na_i" />
    
<map_variables variable_1="Na_e" variable_2="Na_e" />
    
<map_variables variable_1="I_Na" variable_2="I_Na" />
  
</connection>


  
<connection>
    
<map_components component_1="cell_membrane" component_2="calcium_channel" />
    
<map_variables variable_1="Ca_i" variable_2="Ca_i" />
    
<map_variables variable_1="Ca_e" variable_2="Ca_e" />
    
<map_variables variable_1="I_Ca" variable_2="I_Ca" />
  
</connection>
    

</model>