示例#1
0
 public MainModel()
 {
     //Console.Write("New Surrogate model");
     Compartment.resetNumberOfCompartments();
     FlowDivider.resetNumberOfFlowDividers();
     raindata        = new RainfallData();
     this.output     = new SmOutputCollection();
     this.bIncludeWQ = false;
 }
示例#2
0
      private List <Connection> getConnections(string[,] paramTable)
      {
          {
              var  connections         = new List <Connection>();
              bool bInHydraulicSection = false;

              for (int i = 0; i < paramTable.GetLength(0); i++)
              {
                  if (paramTable[i, 0] == "[HydraulicModel]")
                  {
                      bInHydraulicSection = true;
                  }

                  if (bInHydraulicSection)
                  {
                      if (paramTable[i, 0] == "[EndSect]")
                      {
                          bInHydraulicSection = false;
                      }
                      else
                      {
                          //instantiate all connections
                          if (paramTable[i, 0] == "<name>")
                          {
                              if (paramTable[i + 1, 1] == "drainage")
                              {
                                  {
                                      Node fromComp = getNode(paramTable[i, 1]);

                                      i = i + 2;
                                      while (paramTable[i, 0] == "<connection>")
                                      {
                                          Node       toComp = getNodeOrDivider(paramTable[i, 1]);
                                          Connection conx;
                                          switch (paramTable[i, 2])
                                          {
                                          case "LinRes":
                                              conx = new LinRes(fromComp.index, toComp.index, paramTable[i, 3]);
                                              break;

                                          case "LinResWithMax":
                                              conx = new LinResWithMax(fromComp.index, toComp.index, paramTable[i, 3]);
                                              break;

                                          case "PieceWiseLinRes":
                                              conx = (new PieceWiseLinRes(fromComp.index, toComp.index, paramTable[i, 3]));
                                              break;

                                          case "LinResWithMaxAndBackWater":
                                              conx = (new LinResWithMaxAndBackWater(fromComp.index, toComp.index, paramTable[i, 3]));
                                              break;

                                          case "SpillingVolume":
                                              conx = (new SpillingVolume(fromComp.index, toComp.index, paramTable[i, 3]));
                                              break;

                                          case "UnitHydro":
                                              conx = (new UnitHydrograph(fromComp.index, toComp.index, paramTable[i, 3], this));
                                              break;

                                          case "TriggeredPWLinRes":
                                              conx = (new TriggeredPWLinRes(fromComp.index, toComp.index, paramTable[i, 3]));
                                              break;

                                          case "PwlGradientBasedFlow":
                                              conx = (new PwlGradientBasedFlow(fromComp.index, toComp.index, paramTable[i, 3]));
                                              break;

                                          default:
                                              throw new NotImplementedException("Unknown connection type: " + paramTable[i, 2]);
                                          }

                                          if (toComp is FlowDivider)
                                          {
                                              conx.bToFlowDivider = true;
                                          }


                                          connections.Add(conx);

                                          i++;
                                      }
                                  }
                              }
                              else if (paramTable[i + 1, 1] == "splitter")
                              {
                                  FlowDivider div = getFlowDivider(paramTable[i, 1]);
                                  i = i + 2;
                                  while (paramTable[i, 0] == "<connection>")
                                  {
                                      Node toComp = getNode(paramTable[i, 1]);
                                      FlowDividerConnection divCon = new FlowDividerConnection(div.index, toComp.index, paramTable[i, 3]);
                                      divCon.flowDiv = div;
                                      div.connections.Add(divCon);

                                      connections.Add(divCon);
                                      i++;
                                  }
                              }
                          }
                      }
                  }
              }

              return(connections);
          }
      }