Advertisement
agmike

Freight483M.spec.gs

Dec 5th, 2012
325
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 27.93 KB | None | 0 0
  1. // This file is autogenerated by TAIRSC : Trainz Air Scheme Compiler
  2. // DO NOT RELY ON ANY CONTENTS OF THIS FILE
  3. // Created 12/05/2012 17:41:02
  4. // Scheme statistics:
  5. // node count: 12
  6. // link count: 23
  7. //     unique: 20
  8. //     to atm: 5
  9. //  with name: 19
  10. // matrix non-zeros: 32
  11. // matrix density: 0.2222222222222222222222222222
  12. // object count: 1
  13.  
  14.  
  15. include "spairschemespec.gs"
  16. include "Freight483M.instance.gs"
  17.  
  18. include "SPAirDistributor483M.gs"
  19.  
  20.  
  21. static class SPAirSchemeSpec_CurrentObjectNameHelper
  22. {
  23.     public string currentObjectName;
  24. };
  25.  
  26. final class Freight483MSpec isclass SPAirSchemeSpec
  27. {
  28.     public SPIntMap nodeIds;
  29.     public SPIntMap linkIds;
  30.     public SPIntMap objectIds;
  31.     public float[] linkNominalFlowRate;
  32.     public int[] linkSrc;
  33.     public int[] linkDst;
  34.     public float[] alinkNominalFlowRate;
  35.     public int[] alinkSrc;
  36.    
  37.     float _a00_00, _a00_03;
  38.     float _a01_01, _a01_04;
  39.     float _a02_02, _a02_05;
  40.     float _a03_03, _a03_05, _a03_08;
  41.     float _a04_04, _a04_05, _a04_10;
  42.     float _a05_05, _a05_08, _a05_10;
  43.     float _a06_06, _a06_07, _a06_11;
  44.     float _a07_07, _a07_08, _a07_09, _a07_11;
  45.     float _a08_08, _a08_09, _a08_10, _a08_11;
  46.     float _a09_09, _a09_10, _a09_11;
  47.     float _a10_10, _a10_11;
  48.     float _a11_11;
  49.    
  50.    
  51.     final string GetCurrentObjectName()
  52.     {
  53.         return SPAirSchemeSpec_CurrentObjectNameHelper.currentObjectName;
  54.     }
  55.    
  56.     final void SetCurrentObjectName(string name)
  57.     {
  58.         SPAirSchemeSpec_CurrentObjectNameHelper.currentObjectName = name;
  59.     }
  60.    
  61.     public int GetSubNode(string name)
  62.     {
  63.         string objName = GetCurrentObjectName();
  64.         if (objName) {
  65.             if (name != ".")
  66.                 return nodeIds.Get(objName + name, SPAirScheme.InvalidNodeId);
  67.             return nodeIds.Get(objName, SPAirScheme.InvalidNodeId);
  68.         }
  69.         return SPAirScheme.InvalidNodeId;
  70.     }
  71.  
  72.     public int GetSubLink(string name)
  73.     {
  74.         string objName = GetCurrentObjectName();
  75.         if (objName) {
  76.             if (name != ".")
  77.                 return linkIds.Get(objName + name, SPAirScheme.InvalidLinkId);
  78.             return linkIds.Get(objName, SPAirScheme.InvalidLinkId);
  79.         }
  80.         return SPAirScheme.InvalidLinkId;
  81.     }
  82.    
  83.     public SPAirObject GetSubObject(string name)
  84.     {
  85.         string objName = GetCurrentObjectName();
  86.         if (objName and objectIds.TryGet(objName + name))
  87.             return objects[objectIds.LastValue];
  88.         return null;
  89.     }
  90.    
  91.     Freight483M CreateInstanceInternal(SPVehicle owner)
  92.     {
  93.         Freight483MSpec scheme = new Freight483MSpec();
  94.         scheme.spec = me;
  95.         scheme.owner = owner;
  96.        
  97.         float[] nodePressure = new float[12];
  98.         float[] nodeVolume = new float[12];
  99.         scheme.nodePressure = nodePressure;
  100.         scheme.nodeVolume = nodeVolume;
  101.         nodePressure[0] = 0;
  102.         nodeVolume[0] = 20;
  103.         nodePressure[1] = 0;
  104.         nodeVolume[1] = 20;
  105.         nodePressure[2] = 0;
  106.         nodeVolume[2] = 78;
  107.         nodePressure[3] = 0;
  108.         nodeVolume[3] = 0.1;
  109.         nodePressure[4] = 0;
  110.         nodeVolume[4] = 0.1;
  111.         nodePressure[5] = 0;
  112.         nodeVolume[5] = 0.1;
  113.         nodePressure[6] = 0;
  114.         nodeVolume[6] = 6;
  115.         nodePressure[7] = 0;
  116.         nodeVolume[7] = 6;
  117.         nodePressure[8] = 0;
  118.         nodeVolume[8] = 0.5;
  119.         nodePressure[9] = 0;
  120.         nodeVolume[9] = 0.1;
  121.         nodePressure[10] = 0;
  122.         nodeVolume[10] = 0.1;
  123.         nodePressure[11] = 0;
  124.         nodeVolume[11] = 0.01;
  125.        
  126.         float[] linkFlowRate = new float[3];
  127.         scheme.linkFlowRate = linkFlowRate;
  128.         linkFlowRate[0] = 21.2243061;
  129.         linkFlowRate[1] = 0;
  130.         linkFlowRate[2] = 0;
  131.        
  132.         float[] alinkFlowRate = new float[3];
  133.         scheme.alinkFlowRate = alinkFlowRate
  134.         alinkFlowRate[0] = 21.2243061;
  135.         alinkFlowRate[1] = 0;
  136.         alinkFlowRate[2] = 0;
  137.        
  138.         SPAirObject[] objects = new SPAirObject[1];
  139.         scheme.objects = objects;
  140.         objects[0] = new SPAirDistributor483M();
  141.        
  142.     }
  143.    
  144.     public SPAirScheme CreateInstance(SPVehicle owner)
  145.     {
  146.         return CreateInstanceInternal(owner);
  147.     }
  148.    
  149.     void InitInstanceObjectsInternal(Freight483M scheme)
  150.     {
  151.         SetCurrentObjectName(vr);
  152.         objects[0].Init(me);
  153.         SetCurrentObjectName(null);
  154.     }
  155.    
  156.     public void InitInstanceObjects(SPAirScheme scheme)
  157.     {
  158.         Freight483M myScheme = cast<Freight483M> scheme;
  159.         if (!myScheme) {
  160.             Exception("InitInstanceObjects: invalid scheme");
  161.             return;
  162.         }
  163.         InitInstanceObjectsInternal(myScheme);
  164.     }
  165.    
  166.     public void UpdateInstance(Freight483M scheme, float dt)
  167.     {
  168.         SPAirObject[] objects = scheme.objects;
  169.         objects[0].Update(me, dt);
  170.        
  171.         float[] nodePressure = scheme.nodePressure;
  172.         float[] nodeVolume = scheme.nodeVolume;
  173.         float[] linkFlowRate = scheme.linkFlowRate;
  174.         float[] alinkFlowRate = scheme.alinkFlowRate;
  175.        
  176.         _a05_08 = 0.0f; _a05_10 = 0.0f;
  177.         _a08_10 = 0.0f; _a08_11 = 0.0f;
  178.         _a10_11 = 0.0f;
  179.        
  180.         float delta, deltaAbs, flow;
  181.         delta = nodePressure[3] - nodePressure[0];
  182.         deltaAbs = delta; if (delta < 0.0) deltaAbs = -delta;
  183.         if (deltaAbs > 0.000001) {
  184.             flow = Math.Sqrt(deltaAbs) / deltaAbs * dt * (linkFlowRate[0]);
  185.             _a00_00 = _a00_00 + flow; _a00_03 = -flow; _a03_03 = _a03_03 + flow;
  186.         }
  187.         else
  188.             _a00_03 = 0.0;
  189.         delta = nodePressure[1] - nodePressure[4];
  190.         deltaAbs = delta; if (delta < 0.0) deltaAbs = -delta;
  191.         if (deltaAbs > 0.000001) {
  192.             flow = Math.Sqrt(deltaAbs) / deltaAbs * dt * (1448.38831);
  193.             _a04_04 = _a04_04 + flow; _a04_01 = -flow; _a01_01 = _a01_01 + flow;
  194.         }
  195.         else
  196.             _a04_01 = 0.0;
  197.         delta = nodePressure[2] - nodePressure[5];
  198.         deltaAbs = delta; if (delta < 0.0) deltaAbs = -delta;
  199.         if (deltaAbs > 0.000001) {
  200.             flow = Math.Sqrt(deltaAbs) / deltaAbs * dt * (1448.38831);
  201.             _a05_05 = _a05_05 + flow; _a05_02 = -flow; _a02_02 = _a02_02 + flow;
  202.         }
  203.         else
  204.             _a05_02 = 0.0;
  205.         delta = nodePressure[5] - nodePressure[3];
  206.         deltaAbs = delta; if (delta < 0.0) deltaAbs = -delta;
  207.         if (deltaAbs > 0.000001) {
  208.             flow = Math.Sqrt(deltaAbs) / deltaAbs * dt * (linkFlowRate[1]);
  209.             _a03_03 = _a03_03 + flow; _a03_05 = -flow; _a05_05 = _a05_05 + flow;
  210.         }
  211.         else
  212.             _a03_05 = 0.0;
  213.         delta = nodePressure[8] - nodePressure[3];
  214.         deltaAbs = delta; if (delta < 0.0) deltaAbs = -delta;
  215.         if (deltaAbs > 0.000001) {
  216.             flow = Math.Sqrt(deltaAbs) / deltaAbs * dt * (577.7505);
  217.             _a03_03 = _a03_03 + flow; _a03_08 = -flow; _a08_08 = _a08_08 + flow;
  218.         }
  219.         else
  220.             _a03_08 = 0.0;
  221.         delta = nodePressure[4] - nodePressure[5];
  222.         deltaAbs = delta; if (delta < 0.0) deltaAbs = -delta;
  223.         if (deltaAbs > 0.000001) {
  224.             flow = Math.Sqrt(deltaAbs) / deltaAbs * dt * (linkFlowRate[2]);
  225.             _a05_05 = _a05_05 + flow; _a05_04 = -flow; _a04_04 = _a04_04 + flow;
  226.         }
  227.         else
  228.             _a05_04 = 0.0;
  229.         delta = nodePressure[4] - nodePressure[10];
  230.         deltaAbs = delta; if (delta < 0.0) deltaAbs = -delta;
  231.         if (deltaAbs > 0.000001) {
  232.             flow = Math.Sqrt(deltaAbs) / deltaAbs * dt * (linkFlowRate[12]);
  233.             _a10_10 = _a10_10 + flow; _a10_04 = -flow; _a04_04 = _a04_04 + flow;
  234.         }
  235.         else
  236.             _a10_04 = 0.0;
  237.         delta = nodePressure[7] - nodePressure[6];
  238.         deltaAbs = delta; if (delta < 0.0) deltaAbs = -delta;
  239.         if (deltaAbs > 0.000001) {
  240.             flow = Math.Sqrt(deltaAbs) / deltaAbs * dt * (linkFlowRate[4]);
  241.             _a06_06 = _a06_06 + flow; _a06_07 = -flow; _a07_07 = _a07_07 + flow;
  242.         }
  243.         else
  244.             _a06_07 = 0.0;
  245.         delta = nodePressure[11] - nodePressure[6];
  246.         deltaAbs = delta; if (delta < 0.0) deltaAbs = -delta;
  247.         if (deltaAbs > 0.000001) {
  248.             flow = Math.Sqrt(deltaAbs) / deltaAbs * dt * (linkFlowRate[3]);
  249.             _a06_06 = _a06_06 + flow; _a06_11 = -flow; _a11_11 = _a11_11 + flow;
  250.         }
  251.         else
  252.             _a06_11 = 0.0;
  253.         delta = nodePressure[7] - nodePressure[8];
  254.         deltaAbs = delta; if (delta < 0.0) deltaAbs = -delta;
  255.         if (deltaAbs > 0.000001) {
  256.             flow = Math.Sqrt(deltaAbs) / deltaAbs * dt * (linkFlowRate[6]);
  257.             _a08_08 = _a08_08 + flow; _a08_07 = -flow; _a07_07 = _a07_07 + flow;
  258.         }
  259.         else
  260.             _a08_07 = 0.0;
  261.         delta = nodePressure[7] - nodePressure[9];
  262.         deltaAbs = delta; if (delta < 0.0) deltaAbs = -delta;
  263.         if (deltaAbs > 0.000001) {
  264.             flow = Math.Sqrt(deltaAbs) / deltaAbs * dt * (linkFlowRate[8] + linkFlowRate[9]);
  265.             _a09_09 = _a09_09 + flow; _a09_07 = -flow; _a07_07 = _a07_07 + flow;
  266.         }
  267.         else
  268.             _a09_07 = 0.0;
  269.         delta = nodePressure[7] - nodePressure[11];
  270.         deltaAbs = delta; if (delta < 0.0) deltaAbs = -delta;
  271.         if (deltaAbs > 0.000001) {
  272.             flow = Math.Sqrt(deltaAbs) / deltaAbs * dt * (linkFlowRate[13]);
  273.             _a11_11 = _a11_11 + flow; _a11_07 = -flow; _a07_07 = _a07_07 + flow;
  274.         }
  275.         else
  276.             _a11_07 = 0.0;
  277.         delta = nodePressure[9] - nodePressure[8];
  278.         deltaAbs = delta; if (delta < 0.0) deltaAbs = -delta;
  279.         if (deltaAbs > 0.000001) {
  280.             flow = Math.Sqrt(deltaAbs) / deltaAbs * dt * (linkFlowRate[5] + linkFlowRate[7] + 0.361094028);
  281.             _a08_08 = _a08_08 + flow; _a08_09 = -flow; _a09_09 = _a09_09 + flow;
  282.         }
  283.         else
  284.             _a08_09 = 0.0;
  285.         delta = nodePressure[10] - nodePressure[9];
  286.         deltaAbs = delta; if (delta < 0.0) deltaAbs = -delta;
  287.         if (deltaAbs > 0.000001) {
  288.             flow = Math.Sqrt(deltaAbs) / deltaAbs * dt * (linkFlowRate[10]);
  289.             _a09_09 = _a09_09 + flow; _a09_10 = -flow; _a10_10 = _a10_10 + flow;
  290.         }
  291.         else
  292.             _a09_10 = 0.0;
  293.         delta = nodePressure[11] - nodePressure[9];
  294.         deltaAbs = delta; if (delta < 0.0) deltaAbs = -delta;
  295.         if (deltaAbs > 0.000001) {
  296.             flow = Math.Sqrt(deltaAbs) / deltaAbs * dt * (linkFlowRate[11]);
  297.             _a09_09 = _a09_09 + flow; _a09_11 = -flow; _a11_11 = _a11_11 + flow;
  298.         }
  299.         else
  300.             _a09_11 = 0.0;
  301.        
  302.         float volume, pressure;
  303.         pressure = nodePressure[0]; volume = nodeVolume[0]; _a00_00 = volume; nodePressure[_a00_00] = volume * pressure;
  304.         if(pressure > 0.000001)
  305.             _a00_00 = _a00_00 + (Math.Sqrt(pressure) / pressure * dt) * (1);
  306.         pressure = nodePressure[1]; volume = nodeVolume[1]; _a01_01 = volume; nodePressure[_a01_01] = volume * pressure;
  307.         pressure = nodePressure[2]; volume = nodeVolume[2]; _a02_02 = volume; nodePressure[_a02_02] = volume * pressure;
  308.         if(pressure > 0.000001)
  309.             _a02_02 = _a02_02 + (Math.Sqrt(pressure) / pressure * dt) * (1);
  310.         pressure = nodePressure[3]; volume = nodeVolume[3]; _a03_03 = volume; nodePressure[_a03_03] = volume * pressure;
  311.         pressure = nodePressure[4]; volume = nodeVolume[4]; _a04_04 = volume; nodePressure[_a04_04] = volume * pressure;
  312.         if(pressure > 0.000001)
  313.             _a04_04 = _a04_04 + (Math.Sqrt(pressure) / pressure * dt) * (alinkFlowRate[0]);
  314.         pressure = nodePressure[5]; volume = nodeVolume[5]; _a05_05 = volume; nodePressure[_a05_05] = volume * pressure;
  315.         pressure = nodePressure[6]; volume = nodeVolume[6]; _a06_06 = volume; nodePressure[_a06_06] = volume * pressure;
  316.         if(pressure > 0.000001)
  317.             _a06_06 = _a06_06 + (Math.Sqrt(pressure) / pressure * dt) * (alinkFlowRate[1]);
  318.         pressure = nodePressure[7]; volume = nodeVolume[7]; _a07_07 = volume; nodePressure[_a07_07] = volume * pressure;
  319.         pressure = nodePressure[8]; volume = nodeVolume[8]; _a08_08 = volume; nodePressure[_a08_08] = volume * pressure;
  320.         pressure = nodePressure[9]; volume = nodeVolume[9]; _a09_09 = volume; nodePressure[_a09_09] = volume * pressure;
  321.         pressure = nodePressure[10]; volume = nodeVolume[10]; _a10_10 = volume; nodePressure[_a10_10] = volume * pressure;
  322.         if(pressure > 0.000001)
  323.             _a10_10 = _a10_10 + (Math.Sqrt(pressure) / pressure * dt) * (alinkFlowRate[2]);
  324.         pressure = nodePressure[11]; volume = nodeVolume[11]; _a11_11 = volume; nodePressure[_a11_11] = volume * pressure;
  325.        
  326.         float basePivot, m;
  327.         basePivot = _a00_00;                  // base row 0
  328.         m = _a03_03 / basePivot; // current row 3
  329.         _a03_03 = _a03_03 - _a00_03 * m;
  330.         nodePressure[3] = nodePressure[3] - nodePressure[0] * m;
  331.         basePivot = _a01_01;                  // base row 1
  332.         m = _a04_04 / basePivot; // current row 4
  333.         _a04_04 = _a04_04 - _a01_04 * m;
  334.         nodePressure[4] = nodePressure[4] - nodePressure[1] * m;
  335.         basePivot = _a02_02;                  // base row 2
  336.         m = _a05_05 / basePivot; // current row 5
  337.         _a05_05 = _a05_05 - _a02_05 * m;
  338.         nodePressure[5] = nodePressure[5] - nodePressure[2] * m;
  339.         basePivot = _a03_03;                  // base row 3
  340.         m = _a05_05 / basePivot; // current row 5
  341.         _a05_05 = _a05_05 - _a03_05 * m;
  342.         _a05_08 = _a05_08 - _a03_08 * m;
  343.         nodePressure[5] = nodePressure[5] - nodePressure[3] * m;
  344.         m = _a08_08 / basePivot; // current row 8
  345.         _a08_08 = _a08_08 - _a03_08 * m;
  346.         nodePressure[8] = nodePressure[8] - nodePressure[3] * m;
  347.         basePivot = _a04_04;                  // base row 4
  348.         m = _a05_05 / basePivot; // current row 5
  349.         _a05_05 = _a05_05 - _a04_05 * m;
  350.         _a05_10 = _a05_10 - _a04_10 * m;
  351.         nodePressure[5] = nodePressure[5] - nodePressure[4] * m;
  352.         m = _a10_10 / basePivot; // current row 10
  353.         _a10_10 = _a10_10 - _a04_10 * m;
  354.         nodePressure[10] = nodePressure[10] - nodePressure[4] * m;
  355.         basePivot = _a05_05;                  // base row 5
  356.         m = _a08_08 / basePivot; // current row 8
  357.         _a08_08 = _a08_08 - _a05_08 * m;
  358.         _a08_10 = _a08_10 - _a05_10 * m;
  359.         nodePressure[8] = nodePressure[8] - nodePressure[5] * m;
  360.         m = _a10_10 / basePivot; // current row 10
  361.         _a10_10 = _a10_10 - _a05_10 * m;
  362.         nodePressure[10] = nodePressure[10] - nodePressure[5] * m;
  363.         basePivot = _a06_06;                  // base row 6
  364.         m = _a07_07 / basePivot; // current row 7
  365.         _a07_07 = _a07_07 - _a06_07 * m;
  366.         _a07_11 = _a07_11 - _a06_11 * m;
  367.         nodePressure[7] = nodePressure[7] - nodePressure[6] * m;
  368.         m = _a11_11 / basePivot; // current row 11
  369.         _a11_11 = _a11_11 - _a06_11 * m;
  370.         nodePressure[11] = nodePressure[11] - nodePressure[6] * m;
  371.         basePivot = _a07_07;                  // base row 7
  372.         m = _a08_08 / basePivot; // current row 8
  373.         _a08_08 = _a08_08 - _a07_08 * m;
  374.         _a08_09 = _a08_09 - _a07_09 * m;
  375.         _a08_11 = _a08_11 - _a07_11 * m;
  376.         nodePressure[8] = nodePressure[8] - nodePressure[7] * m;
  377.         m = _a09_09 / basePivot; // current row 9
  378.         _a09_09 = _a09_09 - _a07_09 * m;
  379.         _a09_11 = _a09_11 - _a07_11 * m;
  380.         nodePressure[9] = nodePressure[9] - nodePressure[7] * m;
  381.         m = _a11_11 / basePivot; // current row 11
  382.         _a11_11 = _a11_11 - _a07_11 * m;
  383.         nodePressure[11] = nodePressure[11] - nodePressure[7] * m;
  384.         basePivot = _a08_08;                  // base row 8
  385.         m = _a09_09 / basePivot; // current row 9
  386.         _a09_09 = _a09_09 - _a08_09 * m;
  387.         _a09_10 = _a09_10 - _a08_10 * m;
  388.         _a09_11 = _a09_11 - _a08_11 * m;
  389.         nodePressure[9] = nodePressure[9] - nodePressure[8] * m;
  390.         m = _a10_10 / basePivot; // current row 10
  391.         _a10_10 = _a10_10 - _a08_10 * m;
  392.         _a10_11 = _a10_11 - _a08_11 * m;
  393.         nodePressure[10] = nodePressure[10] - nodePressure[8] * m;
  394.         m = _a11_11 / basePivot; // current row 11
  395.         _a11_11 = _a11_11 - _a08_11 * m;
  396.         nodePressure[11] = nodePressure[11] - nodePressure[8] * m;
  397.         basePivot = _a09_09;                  // base row 9
  398.         m = _a10_10 / basePivot; // current row 10
  399.         _a10_10 = _a10_10 - _a09_10 * m;
  400.         _a10_11 = _a10_11 - _a09_11 * m;
  401.         nodePressure[10] = nodePressure[10] - nodePressure[9] * m;
  402.         m = _a11_11 / basePivot; // current row 11
  403.         _a11_11 = _a11_11 - _a09_11 * m;
  404.         nodePressure[11] = nodePressure[11] - nodePressure[9] * m;
  405.         basePivot = _a10_10;                  // base row 10
  406.         m = _a11_11 / basePivot; // current row 11
  407.         _a11_11 = _a11_11 - _a10_11 * m;
  408.         nodePressure[11] = nodePressure[11] - nodePressure[10] * m;
  409.        
  410.         nodePressure[11] = nodePressure[11] / _a11_11;
  411.         nodePressure[10] = (nodePressure[10] - nodePressure[11] * _a10_11) / _a10_10;
  412.         nodePressure[9] = (nodePressure[9] - nodePressure[10] * _a09_10 - nodePressure[11] * _a09_11) / _a09_09;
  413.         nodePressure[8] = (nodePressure[8] - nodePressure[9] * _a08_09 - nodePressure[10] * _a08_10 - nodePressure[11] * _a08_11) / _a08_08;
  414.         nodePressure[7] = (nodePressure[7] - nodePressure[8] * _a07_08 - nodePressure[9] * _a07_09 - nodePressure[11] * _a07_11) / _a07_07;
  415.         nodePressure[6] = (nodePressure[6] - nodePressure[7] * _a06_07 - nodePressure[11] * _a06_11) / _a06_06;
  416.         nodePressure[5] = (nodePressure[5] - nodePressure[8] * _a05_08 - nodePressure[10] * _a05_10) / _a05_05;
  417.         nodePressure[4] = (nodePressure[4] - nodePressure[5] * _a04_05 - nodePressure[10] * _a04_10) / _a04_04;
  418.         nodePressure[3] = (nodePressure[3] - nodePressure[5] * _a03_05 - nodePressure[8] * _a03_08) / _a03_03;
  419.         nodePressure[2] = (nodePressure[2] - nodePressure[5] * _a02_05) / _a02_02;
  420.         nodePressure[1] = (nodePressure[1] - nodePressure[4] * _a01_04) / _a01_01;
  421.         nodePressure[0] = (nodePressure[0] - nodePressure[3] * _a00_03) / _a00_00;
  422.        
  423.     }
  424.    
  425.     void InitSpec()
  426.     {
  427.         nodeIds = new SPIntMap(); nodeIds.Reserve(12);
  428.         nodeIds.Set("tm", 0);
  429.         nodeIds.Set("tc", 1);
  430.         nodeIds.Set("zr", 2);
  431.         nodeIds.Set("vr.tm", 3);
  432.         nodeIds.Set("vr.tc", 4);
  433.         nodeIds.Set("vr.zr", 5);
  434.         nodeIds.Set("vr.rk", 6);
  435.         nodeIds.Set("vr.zk", 7);
  436.         nodeIds.Set("vr.mk", 8);
  437.         nodeIds.Set("vr.s1", 9);
  438.         nodeIds.Set("vr.kdr", 10);
  439.         nodeIds.Set("vr.k", 11);
  440.        
  441.         linkIds = new SPIntMap(); linkIds.Reserve(19);
  442.         linkIds.Set("l_tm", -4);
  443.         linkIds.Set("rzk", 0);
  444.         linkIds.Set("l_zr", -5);
  445.         linkIds.Set("vr.tm_zr", 1);
  446.         linkIds.Set("vr.tc_at", -1);
  447.         linkIds.Set("vr.zr_tc", 2);
  448.         linkIds.Set("vr.rd", 3);
  449.         linkIds.Set("vr.rk_zk", 4);
  450.         linkIds.Set("vr.vk", -2);
  451.         linkIds.Set("vr.mk_s1_p", 5);
  452.         linkIds.Set("vr.km", 6);
  453.         linkIds.Set("vr.chm", 7);
  454.         linkIds.Set("vr.kp", 8);
  455.         linkIds.Set("vr.s1_zk_p", 9);
  456.         linkIds.Set("vr.dr", 10);
  457.         linkIds.Set("vr.s1_k_p", 11);
  458.         linkIds.Set("vr.kdr_tc", 12);
  459.         linkIds.Set("vr.ak", -3);
  460.         linkIds.Set("vr.k_zk_p", 13);
  461.        
  462.         objectIds = new SPIntMap(); objectIds.Reserve(1);
  463.         objectIds.Set("vr", 0);
  464.        
  465.         linkNominalFlowRate = new float[14];
  466.         linkSrc = new int[14];
  467.         linkDst = new int[14];
  468.         linkNominalFlowRate[0] = 1448.38831; linkSrc[0] = 0; linkDst[0] = 3;
  469.         linkNominalFlowRate[1] = 0; linkSrc[1] = 3; linkDst[1] = 5;
  470.         linkNominalFlowRate[2] = 0; linkSrc[2] = 5; linkDst[2] = 4;
  471.         linkNominalFlowRate[3] = 0; linkSrc[3] = 6; linkDst[3] = 11;
  472.         linkNominalFlowRate[4] = 1.003039; linkSrc[4] = 6; linkDst[4] = 7;
  473.         linkNominalFlowRate[5] = 0; linkSrc[5] = 8; linkDst[5] = 9;
  474.         linkNominalFlowRate[6] = 0; linkSrc[6] = 8; linkDst[6] = 7;
  475.         linkNominalFlowRate[7] = 0; linkSrc[7] = 8; linkDst[7] = 9;
  476.         linkNominalFlowRate[8] = 0; linkSrc[8] = 9; linkDst[8] = 7;
  477.         linkNominalFlowRate[9] = 0; linkSrc[9] = 9; linkDst[9] = 7;
  478.         linkNominalFlowRate[10] = 0; linkSrc[10] = 9; linkDst[10] = 10;
  479.         linkNominalFlowRate[11] = 0; linkSrc[11] = 9; linkDst[11] = 11;
  480.         linkNominalFlowRate[12] = 577.7505; linkSrc[12] = 10; linkDst[12] = 4;
  481.         linkNominalFlowRate[13] = 0; linkSrc[13] = 11; linkDst[13] = 7;
  482.        
  483.         alinkNominalFlowRate = new float[5];
  484.         alinkSrc = new int[5];
  485.         alinkNominalFlowRate[3] = 1; alinkSrc[3] = 0;
  486.         alinkNominalFlowRate[4] = 1; alinkSrc[4] = 2;
  487.         alinkNominalFlowRate[0] = 21.2243061; alinkSrc[0] = 4;
  488.         alinkNominalFlowRate[1] = 0; alinkSrc[1] = 6;
  489.         alinkNominalFlowRate[2] = 0; alinkSrc[2] = 10;
  490.        
  491.     }
  492.    
  493.     public Soup GetSchemePropertiesInternal(Freight483M scheme)
  494.     {
  495.         Soup pressureSoup = Constructors.NewSoup();
  496.         pressureSoup.SetNamedTag("tm", scheme.nodePressure[0]);
  497.         pressureSoup.SetNamedTag("tc", scheme.nodePressure[1]);
  498.         pressureSoup.SetNamedTag("zr", scheme.nodePressure[2]);
  499.         pressureSoup.SetNamedTag("vr.tm", scheme.nodePressure[3]);
  500.         pressureSoup.SetNamedTag("vr.tc", scheme.nodePressure[4]);
  501.         pressureSoup.SetNamedTag("vr.zr", scheme.nodePressure[5]);
  502.         pressureSoup.SetNamedTag("vr.rk", scheme.nodePressure[6]);
  503.         pressureSoup.SetNamedTag("vr.zk", scheme.nodePressure[7]);
  504.         pressureSoup.SetNamedTag("vr.mk", scheme.nodePressure[8]);
  505.         pressureSoup.SetNamedTag("vr.s1", scheme.nodePressure[9]);
  506.         pressureSoup.SetNamedTag("vr.kdr", scheme.nodePressure[10]);
  507.         pressureSoup.SetNamedTag("vr.k", scheme.nodePressure[11]);
  508.        
  509.         Soup volumeSoup = Constructors.NewSoup();
  510.         volumeSoup.SetNamedTag("tm", scheme.nodeVolume[0]);
  511.         volumeSoup.SetNamedTag("tc", scheme.nodeVolume[1]);
  512.         volumeSoup.SetNamedTag("zr", scheme.nodeVolume[2]);
  513.         volumeSoup.SetNamedTag("vr.tm", scheme.nodeVolume[3]);
  514.         volumeSoup.SetNamedTag("vr.tc", scheme.nodeVolume[4]);
  515.         volumeSoup.SetNamedTag("vr.zr", scheme.nodeVolume[5]);
  516.         volumeSoup.SetNamedTag("vr.rk", scheme.nodeVolume[6]);
  517.         volumeSoup.SetNamedTag("vr.zk", scheme.nodeVolume[7]);
  518.         volumeSoup.SetNamedTag("vr.mk", scheme.nodeVolume[8]);
  519.         volumeSoup.SetNamedTag("vr.s1", scheme.nodeVolume[9]);
  520.         volumeSoup.SetNamedTag("vr.kdr", scheme.nodeVolume[10]);
  521.         volumeSoup.SetNamedTag("vr.k", scheme.nodeVolume[11]);
  522.        
  523.         Soup flowrateSoup = Constructors.NewSoup();
  524.         flowrateSoup.SetNamedTag("rzk", scheme.linkFlowRate[0]);
  525.         flowrateSoup.SetNamedTag("vr.tm_zr", scheme.linkFlowRate[1]);
  526.         flowrateSoup.SetNamedTag("vr.tc_at", scheme.alinkFlowRate[0]);
  527.         flowrateSoup.SetNamedTag("vr.zr_tc", scheme.linkFlowRate[2]);
  528.         flowrateSoup.SetNamedTag("vr.rd", scheme.linkFlowRate[3]);
  529.         flowrateSoup.SetNamedTag("vr.rk_zk", scheme.linkFlowRate[4]);
  530.         flowrateSoup.SetNamedTag("vr.vk", scheme.alinkFlowRate[1]);
  531.         flowrateSoup.SetNamedTag("vr.mk_s1_p", scheme.linkFlowRate[5]);
  532.         flowrateSoup.SetNamedTag("vr.km", scheme.linkFlowRate[6]);
  533.         flowrateSoup.SetNamedTag("vr.chm", scheme.linkFlowRate[7]);
  534.         flowrateSoup.SetNamedTag("vr.kp", scheme.linkFlowRate[8]);
  535.         flowrateSoup.SetNamedTag("vr.s1_zk_p", scheme.linkFlowRate[9]);
  536.         flowrateSoup.SetNamedTag("vr.dr", scheme.linkFlowRate[10]);
  537.         flowrateSoup.SetNamedTag("vr.s1_k_p", scheme.linkFlowRate[11]);
  538.         flowrateSoup.SetNamedTag("vr.kdr_tc", scheme.linkFlowRate[12]);
  539.         flowrateSoup.SetNamedTag("vr.ak", scheme.alinkFlowRate[2]);
  540.         flowrateSoup.SetNamedTag("vr.k_zk_p", scheme.linkFlowRate[13]);
  541.        
  542.         Soup objectsSoup = Constructors.NewSoup();
  543.         objectsSoup.SetNamedSoup("vr", scheme.objects[0].GetProperties());
  544.         Soup ret = Constructors.NewSoup();
  545.         ret.SetNamedSoup("pressure", pressureSoup);
  546.         ret.SetNamedSoup("volume", volumeSoup);
  547.         ret.SetNamedSoup("flowrate", flowrateSoup);
  548.         ret.SetNamedSoup("objects", objectsSoup);
  549.         return ret;
  550.     }
  551.    
  552.     public void SetSchemePropertiesInternal(Soup sp, Freight483M scheme)
  553.     {
  554.         Soup pressureSoup = sp.GetNamedSoup("pressure");
  555.         float[] p =  scheme.nodePressure;
  556.         p[0] = SPHelper.GetFloatEx(pressureSoup, "tm", p[0]);
  557.         p[1] = SPHelper.GetFloatEx(pressureSoup, "tc", p[1]);
  558.         p[2] = SPHelper.GetFloatEx(pressureSoup, "zr", p[2]);
  559.         p[3] = SPHelper.GetFloatEx(pressureSoup, "vr.tm", p[3]);
  560.         p[4] = SPHelper.GetFloatEx(pressureSoup, "vr.tc", p[4]);
  561.         p[5] = SPHelper.GetFloatEx(pressureSoup, "vr.zr", p[5]);
  562.         p[6] = SPHelper.GetFloatEx(pressureSoup, "vr.rk", p[6]);
  563.         p[7] = SPHelper.GetFloatEx(pressureSoup, "vr.zk", p[7]);
  564.         p[8] = SPHelper.GetFloatEx(pressureSoup, "vr.mk", p[8]);
  565.         p[9] = SPHelper.GetFloatEx(pressureSoup, "vr.s1", p[9]);
  566.         p[10] = SPHelper.GetFloatEx(pressureSoup, "vr.kdr", p[10]);
  567.         p[11] = SPHelper.GetFloatEx(pressureSoup, "vr.k", p[11]);
  568.        
  569.         Soup volumeSoup = sp.GetNamedSoup("volume");
  570.         float[] v =  scheme.nodeVolume;
  571.         v[0] = SPHelper.GetFloatEx(volumeSoup, "tm", v[0]);
  572.         v[1] = SPHelper.GetFloatEx(volumeSoup, "tc", v[1]);
  573.         v[2] = SPHelper.GetFloatEx(volumeSoup, "zr", v[2]);
  574.         v[3] = SPHelper.GetFloatEx(volumeSoup, "vr.tm", v[3]);
  575.         v[4] = SPHelper.GetFloatEx(volumeSoup, "vr.tc", v[4]);
  576.         v[5] = SPHelper.GetFloatEx(volumeSoup, "vr.zr", v[5]);
  577.         v[6] = SPHelper.GetFloatEx(volumeSoup, "vr.rk", v[6]);
  578.         v[7] = SPHelper.GetFloatEx(volumeSoup, "vr.zk", v[7]);
  579.         v[8] = SPHelper.GetFloatEx(volumeSoup, "vr.mk", v[8]);
  580.         v[9] = SPHelper.GetFloatEx(volumeSoup, "vr.s1", v[9]);
  581.         v[10] = SPHelper.GetFloatEx(volumeSoup, "vr.kdr", v[10]);
  582.         v[11] = SPHelper.GetFloatEx(volumeSoup, "vr.k", v[11]);
  583.        
  584.         Soup flowrateSoup = sp.GetNamedSoup("flowrate");
  585.         float[] afr =  scheme.alinkFlowRate;
  586.         float[] fr =  scheme.linkFlowRate;
  587.         fr[0] = SPHelper.GetFloatEx(flowrateSoup, "rzk", fr[0]);
  588.         fr[1] = SPHelper.GetFloatEx(flowrateSoup, "vr.tm_zr", fr[1]);
  589.         afr[0] = SPHelper.GetFloatEx(flowrateSoup, "vr.tc_at", afr[0]);
  590.         fr[2] = SPHelper.GetFloatEx(flowrateSoup, "vr.zr_tc", fr[2]);
  591.         fr[3] = SPHelper.GetFloatEx(flowrateSoup, "vr.rd", fr[3]);
  592.         fr[4] = SPHelper.GetFloatEx(flowrateSoup, "vr.rk_zk", fr[4]);
  593.         afr[1] = SPHelper.GetFloatEx(flowrateSoup, "vr.vk", afr[1]);
  594.         fr[5] = SPHelper.GetFloatEx(flowrateSoup, "vr.mk_s1_p", fr[5]);
  595.         fr[6] = SPHelper.GetFloatEx(flowrateSoup, "vr.km", fr[6]);
  596.         fr[7] = SPHelper.GetFloatEx(flowrateSoup, "vr.chm", fr[7]);
  597.         fr[8] = SPHelper.GetFloatEx(flowrateSoup, "vr.kp", fr[8]);
  598.         fr[9] = SPHelper.GetFloatEx(flowrateSoup, "vr.s1_zk_p", fr[9]);
  599.         fr[10] = SPHelper.GetFloatEx(flowrateSoup, "vr.dr", fr[10]);
  600.         fr[11] = SPHelper.GetFloatEx(flowrateSoup, "vr.s1_k_p", fr[11]);
  601.         fr[12] = SPHelper.GetFloatEx(flowrateSoup, "vr.kdr_tc", fr[12]);
  602.         afr[2] = SPHelper.GetFloatEx(flowrateSoup, "vr.ak", afr[2]);
  603.         fr[13] = SPHelper.GetFloatEx(flowrateSoup, "vr.k_zk_p", fr[13]);
  604.        
  605.         Soup objectsSoup = sp.GetNamedSoup("objects");
  606.         scheme.objects[0].SetProperties(objectsSoup.GetNamedSoup("vr"));
  607.        
  608.     }
  609.    
  610.     public Soup GetProperties()
  611.     {
  612.         return inherited(sp);
  613.        
  614.     }
  615.    
  616.     public void SetProperties(Soup sp)
  617.     {
  618.         inherited(sp)
  619.     }
  620.    
  621.     public void Init(Asset asset)
  622.     {
  623.         inherited(asset);
  624.        
  625.         InitSpec();
  626.     }
  627. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement