/// <summary>
        /// Add to the graph
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            TimesOutput ts = (TimesOutput)TimeStep1.SelectedItem;

            foreach (var i in e.RemovedItems)
            {
                if (output1d.ContainsKey(i.ToString()))
                {
                    Graf1.Children.Remove(output1d[i.ToString()]);
                    output1d.Remove(i.ToString());
                }
            }

            foreach (var i in e.AddedItems)
            {
                EnumerableDataSource <Element> x = new EnumerableDataSource <Element>(((Model)DataContext).Elements.Where(CoordinateFilter));

                string key = i.ToString();
                x.SetXMapping(var => var.X.Value);
                x.SetYMapping(var => var.PrintData[ts.TotalTime][key]);
                var lg = Graf1.AddLineGraph(x, 3, key);
                output1d.Add(key, lg);
            }
        }
    public void ReadOutputLine(string Line)
    {
      switch (_status)
      {
        case BlockPointer.Prelude:
          if (Line.StartsWith(" ********** VOLUME- AND MASS-BALANCES"))
            _status = BlockPointer.MassBalance;
          break;
        case BlockPointer.MassBalance:
          _status = BlockPointer.Iterating;
          break;
        case BlockPointer.Iterating:

          if (Line.Length > 25 && Line.Substring(17, 4).Equals("ST ="))
          {
            TimeStepInfo tsi = new TimeStepInfo();
            tsi.TimeStep =TimeSpan.FromSeconds(double.Parse(Line.Substring(40, 12)));
            tsi.TotalTime = TimeSpan.FromSeconds(Double.Parse(Line.Substring(22, 12)));
            tsi.TimeStepNumber = TimeSteps.Count()+1;
            tsi.MaxResidualElement = Line.Substring(1, 5);
            tsi.NumberOfIterations = int.Parse(Line.Substring(13, 2));
            TimeSteps.Add(tsi);


            if (NewTimeStep!=null)
              NewTimeStep(this, tsi);
          }
          //Switch to output reading
          else if (Line.StartsWith("          OUTPUT DATA AFTER"))
          {
            _status = BlockPointer.FirstMatrixOutput;
            _outputLines = 0;
          }
          else if (Line.StartsWith(" ELEM.  INDEX"))
          {
            _status = BlockPointer.SecondMatrixOutput;
            CurrentResults.Pointer = BlockPointer.SecondMatrixOutput;
            CurrentResults.ReadLine(Line);
          }
          else if (Line.StartsWith(" ********** VOLUME- AND MASS-BALANCES"))
            _status = BlockPointer.MassBalance;
          break;
        case BlockPointer.FirstMatrixOutput:
          {
            if (Line.Trim() != "") //Skip empty lines
            {
              if (_outputLines == 2) //appears to be code specific
              {
                CurrentResults = new TimesOutput(TimeSpan.FromSeconds(double.Parse(Line.Substring(1, 12))), _model.Elements);
                CurrentResults.Pointer = BlockPointer.FirstMatrixOutput;
                Vectors.Add(CurrentResults);
              }
              if (_outputLines > 3)
              {
                if (!CurrentResults.ReadLine(Line)) //Send the line to the results reader until it does not ask for more
                  _status = BlockPointer.Iterating;
              }
              _outputLines++;
            }
          }
          break;
        case BlockPointer.SecondMatrixOutput:
          {
            if (!CurrentResults.ReadLine(Line))
              _status = BlockPointer.Iterating;
            break;

          }
        default:
          break;
      }
    }