ring_modulator.xmds

Script source:
ring_modulator.xmds.gz

<?xml version="1.0"?>
<simulation>
  
<!-- $Id: ring_modulator_body.part 999 2004-08-03 05:42:47Z 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> ring_modulator </name>      <!-- the name of the simulation -->
  
  <author> Paul Cochrane </author>  <!-- the author of the simulation -->
  <description>
    Simulation of a ring modulator circuit in electrical analysis.  
    The simulation describes the behaviour of the ring modulator,
    which, given a low-frequency signal, and a high frequency signal
    produces a mixed signal output.
    This script is adapted from the Intial Value Test Set
    http://www.dm.uniba.it/~testset
  </description>
  
  <!-- Global system parameters and functionality -->
  <prop_dim> t </prop_dim>    <!-- name of main propagation dim -->
  
  <use_mpi> no </use_mpi>            <!-- defaults to no -->
  <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[
    const double C = 1.6e-8;
    const double Cs = 2e-12;
    const double Cp = 1e-8;
    const double Lh = 4.45;
    const double Ls1 = 0.002;
    const double Ls2 = 5e-4;
    const double Ls3 = 5e-4;
    const double gam = 40.67286402e-9;
    const double R = 25000;
    const double Rp = 50;
    const double Rg1 = 36.3;
    const double Rg2 = 17.3;
    const double Rg3 = 17.3;
    const double Ri = 50;
    const double Rc = 600;
    const double delta = 17.7493332;      

    const double maxDeltaU = 172;
  ]]>
  </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> 
        y1 y2 y3 y4 y5 y6 y7 y8 y9 y10 y11 y12 y13 y14 y15 
      </components>       <!-- names of components -->
      <![CDATA[
        y1 = 0;
        y2 = 0;
        y3 = 0;
        y4 = 0;
        y5 = 0;
        y6 = 0;
        y7 = 0;
        y8 = 0;
        y9 = 0;
        y10 = 0;
        y11 = 0;
        y12 = 0;
        y13 = 0;
        y14 = 0;
        y15 = 0;
      ]]>
    </vector>
  </field>
  
  <!-- The sequence of integrations to perform -->
  <sequence>
    <integrate>
      <algorithm> RK4IP </algorithm> <!-- RK4EX, RK4IP, SIEX, SIIP -->
      <interval> 1e-3 </interval>   <!-- how far in main dim? -->
      <lattice> 100000000 </lattice>     <!-- no. points in main dim -->
      <samples> 1000 </samples> <!-- no. pts in output moment group -->
      <![CDATA[
        double Uin1 = 0.5*sin(2000*M_PI*t);
        double Uin2 = 2.0*sin(20000*M_PI*t);

        double UD1 = y3 - y5 - y7 - Uin2;
	double UD2 = -y4 + y6 - y7 - Uin2;
	double UD3 = y4 + y5 + y7 + Uin2;
	double UD4 = -y3 - y6 + y7 + Uin2;

	if ( (delta*UD1 > maxDeltaU) || (delta*UD2 > maxDeltaU) ||
	     (delta*UD3 > maxDeltaU) || (delta*UD4 > maxDeltaU) ) {
	  printf("delta*U is greater than maxDeltaU, exiting\n");
	  printf("delta*UD1 = %g\tdelta*UD2 = %g\tdelta*UD3 = %g\tdelta*UD4 = %g\n",
	     delta*UD1, delta*UD2, delta*UD3, delta*UD4);
	  exit(255);
	}

	double qUD1 = gam*exp(delta*UD1 - 1.0);
	double qUD2 = gam*exp(delta*UD2 - 1.0);
	double qUD3 = gam*exp(delta*UD3 - 1.0);
	double qUD4 = gam*exp(delta*UD4 - 1.0);

        dy1_dt = (y8 - 0.5*y10 + 0.5*y11 + y14 - y1/R)/C;
	dy2_dt = (y9 - 0.5*y12 + 0.5*y13 + y15 - y2/R)/C;
	dy3_dt = (y10 - qUD1 + qUD4)/Cs;
	dy4_dt = (-y11 + qUD2 - qUD3)/Cs;
	dy5_dt = (y12 + qUD1 - qUD3)/Cs;
	dy6_dt = (-y13 - qUD2 + qUD4)/Cs;
	dy7_dt = (-y7/Rp + qUD1 + qUD2 - qUD3 - qUD4)/Cp;
	dy8_dt = -y1/Lh;
	dy9_dt = -y2/Lh;
	dy10_dt = (0.5*y1 - y3 - Rg2*y10)/Ls2;
	dy11_dt = (-0.5*y1 + y4 - Rg3*y11)/Ls3;
	dy12_dt = (0.5*y2 - y5 - Rg2*y12)/Ls2;
	dy13_dt = (-0.5*y2 + y6 - Rg3*y13)/Ls3;
	dy14_dt = (-y1 + Uin1 - (Ri + Rg1)*y14)/Ls1;
	dy15_dt = (-y2 - (Rc + Rg1)*y15)/Ls1;
      ]]>
    </integrate>
  </sequence>
  
  <!-- The output to generate -->
  <output format="ascii">
    <group>
      <sampling>
        <moments> 
	  y1Out y2Out y3Out y4Out y5Out y6Out y7Out y8Out y9Out y10Out
	  y11Out y12Out y13Out y14Out y15Out
	</moments>           <!-- names of moments -->
        <![CDATA[
          y1Out = y1;
          y2Out = y2;
          y3Out = y3;
          y4Out = y4;
          y5Out = y5;
          y6Out = y6;
          y7Out = y7;
          y8Out = y8;
          y9Out = y9;
          y10Out = y10;
          y11Out = y11;
          y12Out = y12;
          y13Out = y13;
          y14Out = y14;
          y15Out = y15;
        ]]>
      </sampling>
    </group>
  </output>
  
</simulation>

Generated by GNU enscript 1.6.3.



Introduction | Examples | Downloads | Documentation | Archives | Script Repository | FAQ | News | Links | Contacts