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; }
/// <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; }
/// <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; }
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; }