public void SubstractTest()
    {
      FixedTimeStepSeries ts1 = new FixedTimeStepSeries();
      FixedTimeStepSeries ts2 = new FixedTimeStepSeries();

      ts1.SetStartTime( new DateTime(2010, 1, 1));
      ts1.AddRange(new double[] { 2, 3, 4 });
      ts1.TimeStepSize = TimeStepUnit.Month;

      ts2.SetStartTime( new DateTime(2010, 1, 1));
      ts2.AddRange(new double[] { 1, 1, 1 });
      ts2.TimeStepSize = TimeStepUnit.Month;


      FixedTimeStepSeries actual;
      actual = TSTools.Substract(ts1, ts2);
      Assert.AreEqual(1, actual.GetValue(new DateTime(2010, 1, 1), InterpolationMethods.DeleteValue));
      Assert.AreEqual(2, actual.GetValue(new DateTime(2010, 2, 1), InterpolationMethods.DeleteValue));
    }
    public void LoadTest()
    {
      FixedTimeStepSeries fxt = new FixedTimeStepSeries();
      fxt.SetStartTime(new DateTime(1990, 1, 1));
      fxt.TimeStepSize = TimeStepUnit.Month;

      using (StreamReader sr = new StreamReader(@"D:\OldWork\HydroNumerics\Core\UnitTest\ts.csv"))
      {
        sr.ReadLine();
        while (!sr.EndOfStream)
        {
          fxt.Items.Add(new ValueDouble(double.Parse(sr.ReadLine().Split(';')[1])));
        }
      }
      var yearly = TSTools.ChangeZoomLevel(fxt, TimeStepUnit.Year, true);

      Assert.AreEqual(4733123.6582, yearly.GetValue(new DateTime(2010, 5, 5), InterpolationMethods.DeleteValue),0.1);
      Assert.AreEqual(4733123.6582, yearly.GetValue(new DateTime(2010, 1, 1), InterpolationMethods.DeleteValue), 0.1);
      Assert.AreEqual(4733123.6582, yearly.GetValue(new DateTime(2010, 12, 31), InterpolationMethods.DeleteValue), 0.1);


    }
    public void ChangeZoomLevelTest3()
    {
      FixedTimeStepSeries Data = new FixedTimeStepSeries() { TimeStepSize = TimeStepUnit.Month };
      Data.SetStartTime( new DateTime(2010, 1, 1));

      for (int i = 0; i < 36; i++)
      {
        Data.Add(i);
      }

      Assert.AreEqual(new DateTime(2012, 12, 1), Data.EndTime);

      var yearly = TSTools.ChangeZoomLevel(Data, TimeStepUnit.Year, false);

      Assert.AreEqual(5.5, yearly.Items[0].Value);
      Assert.AreEqual(17.5, yearly.Items[1].Value);
      Assert.AreEqual(29.5, yearly.Items[2].Value);


    }
    public static SortedList<int, FixedTimeStepSeries> ExtractTimeSeries(this DataTable data, string parameterName)
    {
      SortedList<int, FixedTimeStepSeries> ToReturn = new SortedList<int, FixedTimeStepSeries>();
      for (int i = 0; i < data.Rows.Count; i++)
      {
        FixedTimeStepSeries par;
        int id15 = (int)data.Rows[i][0];

        if (!ToReturn.TryGetValue(id15, out par))
        {
          par = new FixedTimeStepSeries();
          par.TimeStepSize = TimeStepUnit.Month;
          par.SetStartTime( (DateTime)data.Rows[0][1]);
          ToReturn.Add(id15, par);
        }
        if (data.Rows[i].IsNull(parameterName))
          par.Add(par.DeleteValue);
        else
          par.Add((double)data.Rows[i][parameterName]);
      }
      return ToReturn;
    }
Example #5
0
    /// <summary>
    /// Takes a time step
    /// </summary>
    /// <param name="Endtime"></param>
    public void MoveInTime(DateTime Endtime)
    {

      double output = 0;
      CurrentTime = Endtime;

      CurrentState = StateVariables.Rows.Find(new object[] { ID, CurrentTime });

      if (CurrentState == null)
      {
        CurrentState = StateVariables.NewRow();
        CurrentState["ID"] = ID;
        CurrentState["Time"] = CurrentTime;
        StateVariables.Rows.Add(CurrentState);
      }


      foreach (var S in SourceModels)
      {
        double value;
        if (S.Update)
        {
          value = S.GetValue(this, Endtime) * DateTime.DaysInMonth(Endtime.Year, Endtime.Month) * 86400.0;
          CurrentState[S.Name] = value;
        }
        if (!CurrentState.IsNull(S.Name))
          output += (double)CurrentState[S.Name];
      }


      foreach (var R in InternalReduction)
      {
        double value;
        if (R.Update)
        {
          value = R.GetReduction(this, output, Endtime) * DateTime.DaysInMonth(Endtime.Year, Endtime.Month) * 86400.0;
          CurrentState[R.Name] = value;
        }
        if (!CurrentState.IsNull(R.Name))
          output -= (double)CurrentState[R.Name];
      }

      foreach (var ups in UpstreamConnections)
        output += ups.GetDownStreamOutput(Endtime);


      //Do the global reductions
      foreach (var R in MainStreamReduction)
      {
        double value;
        if (R.Update)
        {
          value = R.GetReduction(this, output, Endtime) * DateTime.DaysInMonth(Endtime.Year, Endtime.Month) * 86400.0;
          CurrentState[R.Name] = value;
        }
        if (!CurrentState.IsNull(R.Name))
          output -= (double)CurrentState[R.Name];
      }

      if (Precipitation != null)
        CurrentState["Precipitation"] = Precipitation.GetTs(TimeStepUnit.Month).GetValue(CurrentTime, InterpolationMethods.DeleteValue);
      if (Temperature != null)
        CurrentState["Air Temperature"] = Temperature.GetValue(CurrentTime, InterpolationMethods.DeleteValue);
      if (M11Flow != null)
      {
        CurrentState["M11Flow"] = M11Flow.GetTs(TimeStepUnit.Month).GetValue(CurrentTime, InterpolationMethods.DeleteValue) * DateTime.DaysInMonth(CurrentTime.Year, CurrentTime.Month) * 86400;
        CurrentState["NetM11Flow"] = NetInflow.GetTs(TimeStepUnit.Month).GetValue(CurrentTime, InterpolationMethods.DeleteValue) * DateTime.DaysInMonth(CurrentTime.Year, CurrentTime.Month) * 86400;
      }
        if (Leaching != null)
        CurrentState["Leaching"] = Leaching.GetValue(CurrentTime, InterpolationMethods.DeleteValue) * DateTime.DaysInMonth(CurrentTime.Year, CurrentTime.Month) * 86400;



      if (Measurements != null)
      {
        CurrentState["ObservedFlow"] = Measurements.Flow.GetValue(CurrentTime, InterpolationMethods.DeleteValue);
        CurrentState["ObservedNitrate"] = Measurements.Nitrate.GetValue(CurrentTime, InterpolationMethods.DeleteValue);

        if(ObsNitrate==null)
        {
          ObsNitrate = new FixedTimeStepSeries() { TimeStepSize = TimeStepUnit.Month };
          ObsNitrate.SetStartTime(CurrentTime);
          SimNitrate = new FixedTimeStepSeries(){ TimeStepSize = TimeStepUnit.Month};
          SimNitrate.SetStartTime(CurrentTime);
        }
        ObsNitrate.Add(Measurements.Nitrate.GetValue(CurrentTime, InterpolationMethods.DeleteValue));
        SimNitrate.Add(output);
      }

      CurrentState["DownStreamOutput"] = output;
    }
Example #6
0
    /// <summary>
    /// Gets a fixedtimestepseries at another zoom level.
    /// </summary>
    /// <param name="Data"></param>
    /// <param name="NewZoomLevel"></param>
    /// <param name="Accumulate"></param>
    /// <returns></returns>
    public static FixedTimeStepSeries ChangeZoomLevel(FixedTimeStepSeries Data, TimeStepUnit NewZoomLevel, bool Accumulate)
    {

      if (Data.TimeStepSize <= NewZoomLevel)
        return null;

      FixedTimeStepSeries ToReturn = new FixedTimeStepSeries();
      ToReturn.DeleteValue = Data.DeleteValue;
      ToReturn.TimeStepSize = NewZoomLevel;
      ToReturn.SetStartTime(GetTimeOfFirstTimeStep(Data.StartTime, NewZoomLevel));
      ToReturn.OffSetStartTime = Data.OffSetStartTime;
      ToReturn.OffSetEndTime = Data.OffSetEndTime;


      List<double> newvalues = new List<double>();

      int localcount = 0;
      int counter = 0;
      switch (NewZoomLevel)
      {
        case TimeStepUnit.Year:
          {
            int currentyear = -1;
            foreach (var v in Data.Items)
            {
              if (Data.GetTime(counter).Year == currentyear)
              {
                if (v.Value != Data.DeleteValue)
                  newvalues[newvalues.Count - 1] += v.Value;
              }
              else
              {
                currentyear = Data.GetTime(counter).Year;
                if (!Accumulate & newvalues.Count>0)
                  newvalues[newvalues.Count - 1] /= localcount;
                localcount = 0;
                newvalues.Add(v.Value);
              }
              localcount++;
              counter++;
            }
            if (localcount != 12) //only use complete years
              newvalues.RemoveAt(newvalues.Count - 1);
            else
            {
              if (!Accumulate)
                newvalues[newvalues.Count - 1] /= localcount;
            }
          }
          break;
        case TimeStepUnit.Month:
          int currentmonth = Data.StartTime.Month;
            newvalues.Add(0);
            foreach (var v in Data.Items)
            {
              if (Data.GetTime(counter).Month == currentmonth)
              {
                if (v.Value != Data.DeleteValue)
                  newvalues[newvalues.Count - 1] += v.Value;
              }
              else
              {
                currentmonth = Data.GetTime(counter).Month;
                if (!Accumulate)
                  newvalues[newvalues.Count - 1] /= localcount;
                localcount = 0;
                newvalues.Add(v.Value);
              }
              localcount++;
              counter++;
            }
          if (!Accumulate)
            newvalues[newvalues.Count - 1] /= localcount;

          break;
        case TimeStepUnit.Day:
          int currentday = Data.StartTime.Day;
            newvalues.Add(0);
            foreach (var v in Data.Items)
            {
              if (Data.GetTime(counter).Day == currentday)
              {
                if (v.Value != Data.DeleteValue)
                  newvalues[newvalues.Count - 1] += v.Value;
              }
              else
              {
                currentday = Data.GetTime(counter).Day;
                if (!Accumulate)
                  newvalues[newvalues.Count - 1] /= localcount;
                localcount = 0;
                newvalues.Add(v.Value);
              }
              localcount++;
              counter++;
            }
          if (!Accumulate)
            newvalues[newvalues.Count - 1] /= localcount;
          break;
        case TimeStepUnit.Hour:
          int currenthour = Data.StartTime.Hour;
            newvalues.Add(0);
            foreach (var v in Data.Items)
            {
              if (Data.GetTime(counter).Hour == currenthour)
              {
                if (v.Value != Data.DeleteValue)
                  newvalues[newvalues.Count - 1] += v.Value;
              }
              else
              {
                currenthour = Data.GetTime(counter).Hour;
                if (!Accumulate)
                  newvalues[newvalues.Count - 1] /= localcount;
                localcount = 0;
                newvalues.Add(v.Value);
              }
              localcount++;
              counter++;
            }
          if (!Accumulate)
            newvalues[newvalues.Count - 1] /= localcount;
          break;
        case TimeStepUnit.Minute:
          int currentminute = Data.StartTime.Minute;
            newvalues.Add(0);
            foreach (var v in Data.Items.Where(vv => vv.Value != Data.DeleteValue))
            {
              if (Data.GetTime(counter).Minute == currentminute)
              {
                newvalues[newvalues.Count - 1] += v.Value;
              }
              else
              {
                currentminute = Data.GetTime(counter).Minute;
                if (!Accumulate)
                  newvalues[newvalues.Count - 1] /= localcount;
                localcount = 0;
                newvalues.Add(v.Value);
              }
              localcount++;
              counter++;
            }
          if (!Accumulate)
            newvalues[newvalues.Count - 1] /= localcount;
          break;
        case TimeStepUnit.Second:
          break;
        case TimeStepUnit.None:
          break;
        default:
          break;
      }
      ToReturn.AddRange(newvalues.Select(n=>new ValueDouble(n)));

      return ToReturn;
    }
Example #7
0
    public static FixedTimeStepSeries Substract(FixedTimeStepSeries ts1, FixedTimeStepSeries ts2)
    {
      FixedTimeStepSeries ToReturn = new FixedTimeStepSeries();
      ToReturn.TimeStepSize = ts1.TimeStepSize;
      ToReturn.DeleteValue = ts1.DeleteValue;
      ToReturn.SetStartTime( ts1.StartTime);
      DateTime End = ts1.EndTime;

      if (ts1.StartTime > ts2.StartTime)
        ToReturn.SetStartTime( ts2.StartTime);
      if(ts1.EndTime > ts2.EndTime)
        End = ts2.EndTime;

      var val1 = ts1.GetValues(ToReturn.StartTime, End);
      var val2 = ts2.GetValues(ToReturn.StartTime, End);

      for (int i = 0;i<val1.Count();i++)
      {
        if(val1[i]==ts1.DeleteValue || val2[i]== ts2.DeleteValue)
          ToReturn.Add(ToReturn.DeleteValue);
        else
          ToReturn.Add(val1[i]-val2[i]);
      }
      return ToReturn;
    }