<?xml version="1.0"?>
<model xmlns="http://www.cellml.org/cellml/1.0#" xmlns:cmeta="http://www.cellml.org/metadata/1.0#" name="CoupledPendulum" cmeta:id="CoupledPendulum_version01" xml:base="file:///people/amil082/code/mozCellML/content/mozCellML/testsuite/coupled_pendulum_model.xml">
  
  <units name="rad_per_s">
    <unit units="radian"/>
    <unit exponent="-1" units="second"/>
  </units>
  <units name="rad2">
    <unit exponent="2" units="radian"/>
  </units>
  <component name="environment">
    <variable name="time" public_interface="out" units="second" cmeta:id="time"/>
  </component>
  <component name="PendulumUpperSegment">
    <variable initial_value="1" name="a" public_interface="out" units="radian" cmeta:id="a_angle"/>
    <variable initial_value="0" name="a_angular_velocity" public_interface="out" units="rad_per_s"/>
    <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>a_angular_velocity</ci>
      </apply>
    </math>
  </component>
  <component name="PendulumLowerSegment">
    <variable initial_value="1" name="b" public_interface="out" units="radian" cmeta:id="b_angle"/>
    <variable initial_value="0" name="b_angular_velocity" public_interface="out" units="rad_per_s"/>
    <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>b_angular_velocity</ci>
      </apply>
    </math>
  </component>
  <component name="Pendulum">
    <variable name="a" private_interface="in" public_interface="out" units="radian"/>
    <variable initial_value="" name="b" private_interface="in" public_interface="out" units="radian"/>
    <variable name="a_angular_velocity" private_interface="in" units="rad_per_s"/>
    <variable name="b_angular_velocity" private_interface="in" units="rad_per_s"/>
    <variable name="time" private_interface="out" 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_angular_velocity</ci>
        </apply>
        <apply>
          <plus/>
          <apply>
            <times/>
            <cn xmlns:cellml="http://www.cellml.org/cellml/1.0#" cellml:units="dimensionless">-2.0</cn>
            <ci>a</ci>
          </apply>
          <ci>b</ci>
        </apply>
      </apply>
      <apply>
        <eq/>
        <apply>
          <diff/>
          <bvar><ci>time</ci></bvar>
          <ci>b_angular_velocity</ci>
        </apply>
        <apply>
          <minus/>
          <apply>
            <times/>
            <cn xmlns:cellml="http://www.cellml.org/cellml/1.0#" cellml:units="dimensionless">2.0</cn>
            <ci>a</ci>
          </apply>
          <apply>
            <times/>
            <cn xmlns:cellml="http://www.cellml.org/cellml/1.0#" cellml:units="dimensionless">2</cn>
            <ci>b</ci>
          </apply>
        </apply>
      </apply>
    </math>    
  </component>
  <component name="analytic_solution">
    <variable name="a_" public_interface="out" units="radian"/>
    <variable name="b_" public_interface="out" units="radian"/>
    <variable name="time" public_interface="in" units="second"/>
    <math xmlns="http://www.w3.org/1998/Math/MathML">
      <apply><eq/>
        <ci>a_</ci>
        <apply><plus/>
          <apply><times/>
            <cn xmlns:cellml="http://www.cellml.org/cellml/1.0#" cellml:units="dimensionless">0.5</cn>
            <apply><cos/>
              <apply><times/>
                <!-- sqrt(2 - sqrt(2)) -->
                <cn xmlns:cellml="http://www.cellml.org/cellml/1.0#" cellml:units="dimensionless">0.765366864730179</cn>
                <ci>time</ci>
              </apply>
            </apply>
          </apply>
          <apply><times/>
            <cn xmlns:cellml="http://www.cellml.org/cellml/1.0#" cellml:units="dimensionless">0.25</cn>
            <!-- sqrt(2) -->
            <cn xmlns:cellml="http://www.cellml.org/cellml/1.0#" cellml:units="dimensionless">1.41421356237310</cn>
            <apply><cos/>
              <apply><times/>
                <!-- sqrt(2 - sqrt(2)) -->
                <cn xmlns:cellml="http://www.cellml.org/cellml/1.0#" cellml:units="dimensionless">0.765366864730179</cn>
                <ci>time</ci>
              </apply>
            </apply>
          </apply>
          <apply><times/>
            <cn xmlns:cellml="http://www.cellml.org/cellml/1.0#" cellml:units="dimensionless">0.5</cn>
            <apply><cos/>
              <apply><times/>
                <!-- sqrt(2 + sqrt(2)) -->
                <cn xmlns:cellml="http://www.cellml.org/cellml/1.0#" cellml:units="dimensionless">1.84775906502257</cn>
                <ci>time</ci>
              </apply>
            </apply>
          </apply>
          <apply><times/>
            <cn xmlns:cellml="http://www.cellml.org/cellml/1.0#" cellml:units="dimensionless">-0.25</cn>
            <!-- sqrt(2) -->
            <cn xmlns:cellml="http://www.cellml.org/cellml/1.0#" cellml:units="dimensionless">1.41421356237310</cn>
            <apply><cos/>
              <apply><times/>
                <!-- sqrt(2 + sqrt(2)) -->
                <cn xmlns:cellml="http://www.cellml.org/cellml/1.0#" cellml:units="dimensionless">1.84775906502257</cn>
                <ci>time</ci>
              </apply>
            </apply>
          </apply>
        </apply>
      </apply>

      <apply><eq/>
        <ci>b_</ci>
        <apply><plus/>
          <apply><times/>
            <cn xmlns:cellml="http://www.cellml.org/cellml/1.0#" cellml:units="dimensionless">0.5</cn>
            <cn xmlns:cellml="http://www.cellml.org/cellml/1.0#" cellml:units="dimensionless">1.41421356237310</cn>
            <apply><cos/>
              <apply><times/>
                <!-- sqrt(2 - sqrt(2)) -->
                <cn xmlns:cellml="http://www.cellml.org/cellml/1.0#" cellml:units="dimensionless">0.765366864730179</cn>
                <ci>time</ci>
              </apply>
            </apply>
          </apply>
          <apply><times/>
            <cn xmlns:cellml="http://www.cellml.org/cellml/1.0#" cellml:units="dimensionless">0.5</cn>
            <apply><cos/>
              <apply><times/>
                <!-- sqrt(2 - sqrt(2)) -->
                <cn xmlns:cellml="http://www.cellml.org/cellml/1.0#" cellml:units="dimensionless">0.765366864730179</cn>
                <ci>time</ci>
              </apply>
            </apply>
          </apply>
          <apply><times/>
            <cn xmlns:cellml="http://www.cellml.org/cellml/1.0#" cellml:units="dimensionless">-0.5</cn>
            <!-- sqrt(2) -->
            <cn xmlns:cellml="http://www.cellml.org/cellml/1.0#" cellml:units="dimensionless">1.41421356237310</cn>
            <apply><cos/>
              <apply><times/>
                <!-- sqrt(2 + sqrt(2)) -->
                <cn xmlns:cellml="http://www.cellml.org/cellml/1.0#" cellml:units="dimensionless">1.84775906502257</cn>
                <ci>time</ci>
              </apply>
            </apply>
          </apply>
          <apply><times/>
            <cn xmlns:cellml="http://www.cellml.org/cellml/1.0#" cellml:units="dimensionless">0.5</cn>
            <apply><cos/>
              <apply><times/>
                <!-- sqrt(2 + sqrt(2)) -->
                <cn xmlns:cellml="http://www.cellml.org/cellml/1.0#" cellml:units="dimensionless">1.84775906502257</cn>
                <ci>time</ci>
              </apply>
            </apply>
          </apply>
        </apply>
      </apply>

    </math>
  </component>
  <component name="errors">
    <variable name="a" public_interface="in" units="radian"/>
    <variable name="a_" public_interface="in" units="radian"/>
    <variable name="b" public_interface="in" units="radian"/>
    <variable name="b_" public_interface="in" units="radian"/>
    <variable name="error_A" units="rad2"/>
    <variable name="error_B" units="rad2"/>
    <variable name="RSS" units="rad2"/>
    <math xmlns="http://www.w3.org/1998/Math/MathML">
      <apply><eq/>
        <ci>error_A</ci>
        <apply><power/>
          <apply><minus/>
            <ci>a</ci>
            <ci>a_</ci>
          </apply>
          <cn xmlns:cellml="http://www.cellml.org/cellml/1.0#" cellml:units="dimensionless">2</cn>
        </apply>
      </apply>
      <apply><eq/>
        <ci>error_B</ci>
        <apply><power/>
          <apply><minus/>
            <ci>b</ci>
            <ci>b_</ci>
          </apply>
          <cn xmlns:cellml="http://www.cellml.org/cellml/1.0#" cellml:units="dimensionless">2</cn>
        </apply>
      </apply>
      <apply><eq/>
        <ci>RSS</ci>
        <apply><plus/>
          <ci>error_A</ci>
          <ci>error_B</ci>
        </apply>
      </apply>
    </math>
  </component>

  <connection>
    <map_components component_1="environment" component_2="Pendulum"/>
    <map_variables variable_1="time" variable_2="time"/>
  </connection>
  <connection>
    <map_components component_1="environment" component_2="analytic_solution"/>
    <map_variables variable_1="time" variable_2="time"/>
  </connection>
  <connection>
    <map_components component_1="Pendulum" component_2="PendulumUpperSegment"/>
    <map_variables variable_1="time" variable_2="time"/>
    <map_variables variable_1="a" variable_2="a"/>
    <map_variables variable_1="a_angular_velocity" variable_2="a_angular_velocity"/>
  </connection>
  <connection>
    <map_components component_1="Pendulum" component_2="PendulumLowerSegment"/>
    <map_variables variable_1="time" variable_2="time"/>
    <map_variables variable_1="b" variable_2="b"/>
    <map_variables variable_1="b_angular_velocity" variable_2="b_angular_velocity"/>
  </connection>
  <connection>
    <map_components component_1="errors" component_2="analytic_solution"/>
    <map_variables variable_1="a_" variable_2="a_"/>
    <map_variables variable_1="b_" variable_2="b_"/>
  </connection>
  <connection>
    <map_components component_1="errors" component_2="Pendulum"/>
    <map_variables variable_1="a" variable_2="a"/>
    <map_variables variable_1="b" variable_2="b"/>
  </connection>
  <group>
    <relationship_ref relationship="encapsulation"/>
    <component_ref component="Pendulum">
      <component_ref component="PendulumUpperSegment"/>
      <component_ref component="PendulumLowerSegment"/>
    </component_ref>
  </group>
</model>