Exemplo n.º 1
0
    public void KrabbenhoftExample()
    {
      Lake L = new Lake("Sparkling Lake", XYPolygon.GetSquare(0.81e6));
      L.Depth = 8.84e6 / L.Area;
      L.Output.LogAllChemicals = true;

      IsotopeWater LakeWater = new IsotopeWater(1);
      LakeWater.SetIsotopeRatio(5.75);
      TimestampSeries EvapoConcentrations = new TimestampSeries();
      EvapoConcentrations.AddSiValue(new DateTime(1985, 4, 1), 3.95);
      EvapoConcentrations.AddSiValue(new DateTime(1985, 5, 1), 13.9);
      EvapoConcentrations.AddSiValue(new DateTime(1985, 6, 1), 25.24);
      EvapoConcentrations.AddSiValue(new DateTime(1985, 7, 1), 23.97);
      EvapoConcentrations.AddSiValue(new DateTime(1985, 8, 1), 17.13);
      EvapoConcentrations.AddSiValue(new DateTime(1985, 9, 1), 10.40);
      EvapoConcentrations.AddSiValue(new DateTime(1985, 10, 1), 6.12);
      EvapoConcentrations.AddSiValue(new DateTime(1985, 10, 1), 33.24);
      EvapoConcentrations.AllowExtrapolation = true;
      EvapoConcentrations.ExtrapolationMethod = ExtrapolationMethods.RecycleYear;
      LakeWater.EvaporationConcentration = EvapoConcentrations;

      TimestampSeries PrecipConcentrations = new TimestampSeries();
      PrecipConcentrations.AddSiValue(new DateTime(1985, 1, 1), 22.8);
      PrecipConcentrations.AddSiValue(new DateTime(1985, 2, 1), 22.8);
      PrecipConcentrations.AddSiValue(new DateTime(1985, 3, 1), 22.8);
      PrecipConcentrations.AddSiValue(new DateTime(1985, 4, 1), 14.8);
      PrecipConcentrations.AddSiValue(new DateTime(1985, 5, 1), 10.7);
      PrecipConcentrations.AddSiValue(new DateTime(1985, 6, 1), 6.3);
      PrecipConcentrations.AddSiValue(new DateTime(1985, 7, 1), 5.1);
      PrecipConcentrations.AddSiValue(new DateTime(1985, 8, 1), 8.4);
      PrecipConcentrations.AddSiValue(new DateTime(1985, 9, 1), 11.1);
      PrecipConcentrations.AddSiValue(new DateTime(1985, 10, 1), 13.8);
      PrecipConcentrations.AddSiValue(new DateTime(1985, 10, 1), 21.9);
      PrecipConcentrations.AllowExtrapolation = true;
      PrecipConcentrations.ExtrapolationMethod = ExtrapolationMethods.RecycleYear;

      TimespanSeries Precipitation = new TimespanSeries();
      Precipitation.Unit = new HydroNumerics.Core.Unit("cm/month", 1.0 / 100.0 / (86400.0 * 30.0), 0);
      Precipitation.AddValue(new DateTime(1985, 1, 1), new DateTime(1985, 3, 1), 0);
      Precipitation.AddValue(new DateTime(1985, 3, 1), new DateTime(1985, 3, 31), 12.5);
      Precipitation.AddValue(new DateTime(1985, 4, 1), new DateTime(1985, 4, 30), 7.1);
      Precipitation.AddValue(new DateTime(1985, 5, 1), new DateTime(1985, 5, 31), 7.6);
      Precipitation.AddValue(new DateTime(1985, 6, 1), new DateTime(1985, 6, 30), 8.8);
      Precipitation.AddValue(new DateTime(1985, 7, 1), new DateTime(1985, 7, 31), 8.6);
      Precipitation.AddValue(new DateTime(1985, 8, 1), new DateTime(1985, 8, 31), 12.7);
      Precipitation.AddValue(new DateTime(1985, 9, 1), new DateTime(1985, 9, 30), 11);
      Precipitation.AddValue(new DateTime(1985, 10, 1), new DateTime(1985, 10, 31), 6.2);
      Precipitation.AddValue(new DateTime(1985, 11, 1), new DateTime(1985, 11, 30), 4.8);
      Precipitation.AddValue(new DateTime(1985, 11, 30), new DateTime(1985, 12, 31), 0);
      Precipitation.AllowExtrapolation = true;
      Precipitation.ExtrapolationMethod = ExtrapolationMethods.RecycleYear;

      Assert.AreEqual(79, 12*Precipitation.GetValue(new DateTime(1985,1,1), new DateTime(1985,12,31)),3);

      SourceBoundary Precip = new SourceBoundary(Precipitation);
      Precip.WaterSample = new IsotopeWater(1);
      Precip.AddChemicalConcentrationSeries(ChemicalFactory.Instance.GetChemical(ChemicalNames.IsotopeFraction), PrecipConcentrations);

      TimespanSeries Evaporation = new TimespanSeries();
      Evaporation.Unit = new HydroNumerics.Core.Unit("cm/month", 1.0 / 100.0 / (86400.0 * 30.0), 0);
      Evaporation.AddValue(new DateTime(1985, 1, 1), new DateTime(1985, 4, 1), 0);
      Evaporation.AddValue(new DateTime(1985, 4, 1), new DateTime(1985, 4, 30), 2.8);
      Evaporation.AddValue(new DateTime(1985, 5, 1), new DateTime(1985, 5, 31), 7.0);
      Evaporation.AddValue(new DateTime(1985, 6, 1), new DateTime(1985, 6, 30), 10.5);
      Evaporation.AddValue(new DateTime(1985, 7, 1), new DateTime(1985, 7, 31), 11.1);
      Evaporation.AddValue(new DateTime(1985, 8, 1), new DateTime(1985, 8, 31), 10.0);
      Evaporation.AddValue(new DateTime(1985, 9, 1), new DateTime(1985, 9, 30), 7.0);
      Evaporation.AddValue(new DateTime(1985, 10, 1), new DateTime(1985, 10, 31), 4.7);
      Evaporation.AddValue(new DateTime(1985, 11, 1), new DateTime(1985, 11, 30), 0.6);
      Evaporation.AddValue(new DateTime(1985, 11, 30), new DateTime(1985, 12, 31), 0);
      Evaporation.AllowExtrapolation = true;
      Evaporation.ExtrapolationMethod = ExtrapolationMethods.RecycleYear;
      EvaporationRateBoundary erb = new EvaporationRateBoundary(Evaporation);

      Assert.AreEqual(54, 12*Evaporation.GetValue(new DateTime(1985,1,1), new DateTime(1985,12,31)),3);

      
      GroundWaterBoundary grb = new GroundWaterBoundary(L, 1e-7, 1, 1, (XYPolygon) L.Geometry);
      grb.FlowType = GWType.Flow;
      grb.WaterFlow = new TimespanSeries();
      grb.WaterFlow.AddSiValue(DateTime.MinValue,DateTime.MaxValue, Evaporation.Unit.ToSiUnit(29/12) * L.Area);
      IsotopeWater gwsp25 = new IsotopeWater(1);
      gwsp25.SetIsotopeRatio(11.5);
      grb.WaterSample = gwsp25;

      GroundWaterBoundary gout = new GroundWaterBoundary(L, 1e-7, 1, -1, (XYPolygon)L.Geometry);
      gout.FlowType = GWType.Flow;
      gout.WaterFlow = new TimespanSeries();
      gout.WaterFlow.AddSiValue(DateTime.MinValue, DateTime.MaxValue, - Evaporation.Unit.ToSiUnit(54/12) * L.Area);
      
      DateTime Start = new DateTime(1985,1,1);
      L.Precipitation.Add(Precip);
      Precip.ContactGeometry = L.Geometry;
      L.EvaporationBoundaries.Add(erb);
      erb.ContactGeometry = L.Geometry;
      L.GroundwaterBoundaries.Add(grb);
      L.GroundwaterBoundaries.Add(gout);

      Model M = new Model();
      M.WaterBodies.Add(L);
      M.SetState("Initial", Start, LakeWater);

      L.Depth *= 1.5;
      ((IsotopeWater)L.CurrentStoredWater).CurrentTime = Start;
      M.MoveInTime(new DateTime(1985, 12, 31), TimeSpan.FromDays(10));

      M.Save(@"..\..\..\TestData\Krabbenhoft.xml");
    }
Exemplo n.º 2
0
    public void TestMethod1()
    {
      Lake Hampen = LakeFactory.GetLake("Hampen Sø");
      Hampen.Depth = 3.2e6 / 760000/1000;

      DateTime start = new DateTime(2008, 1, 1);
      DateTime end = new DateTime(2008, 12, 31);

      Assert.AreEqual(Hampen.Area, 722200,1);

      EvaporationRateBoundary er = new EvaporationRateBoundary(407.0 / 1000 / 365 / 86400);
      er.ContactGeometry = Hampen.Geometry;
      er.Name = "Fordampning";
      Hampen.EvaporationBoundaries.Add(er);

      SourceBoundary pr = new SourceBoundary(901.0 / 1000 / 365 / 86400);
      pr.ContactGeometry = Hampen.Geometry;
      pr.Name = "Nedbør";
      Hampen.Precipitation.Add(pr);

      SinkSourceBoundary outlet = new SinkSourceBoundary(-200.0 / 1000 / 365 / 86400);
      outlet.ContactGeometry = Hampen.Geometry;
      outlet.Name = "Udløb";
      Hampen.Sinks.Add(outlet);

      GroundWaterBoundary gwb = new GroundWaterBoundary();
      gwb.FlowType = GWType.Flow;
      gwb.Name = "Ud";
      gwb.WaterFlow = new HydroNumerics.Time.Core.TimespanSeries("inflow", new DateTime(2008, 1, 1), 2, 1, HydroNumerics.Time.Core.TimestepUnit.Years, -294.0 / 1000 / 365 / 86400*Hampen.Area);
      Hampen.GroundwaterBoundaries.Add(gwb);


      Model m = new Model();
      m._waterBodies.Add(Hampen);

      m.SetState("start", start , new WaterPacket(1));
      m.SimulationStartTime = start;
      m.SimulationEndTime = end;
      m.MoveInTime(end,TimeSpan.FromDays(30));
      m.Save(@"..\..\..\TestData\Hampen1.xml");

      WaterPacket ChlorideWater = new WaterPacket(1);
      ChlorideWater.SetConcentration(ChemicalNames.Cl, 20);
      ChlorideWater.SetConcentration(ChemicalNames.IsotopeFraction, 4);
      ChlorideWater.SetConcentration(ChemicalNames.Nitrate, 0.2);
      ChlorideWater.SetConcentration(ChemicalNames.Phosphate, 0.02);

      m.SetState("start", start, ChlorideWater);
      Hampen.Output.LogAllChemicals = true;

      double gwinflow = 1000.0;


      gwb.WaterFlow = new HydroNumerics.Time.Core.TimespanSeries("inflow", new DateTime(2008, 1, 1), 2, 1, HydroNumerics.Time.Core.TimestepUnit.Years, -(294.0 + gwinflow) / 1000 / 365 / 86400 * Hampen.Area);

      GroundWaterBoundary gwbin = new GroundWaterBoundary();
      gwbin.FlowType = GWType.Flow;
      gwbin.WaterFlow = new HydroNumerics.Time.Core.TimespanSeries("inflow", new DateTime(2008, 1, 1), 2, 1, HydroNumerics.Time.Core.TimestepUnit.Years, 0.955*gwinflow / 1000 / 365 / 86400 * Hampen.Area);
      ChlorideWater.SetConcentration(ChemicalNames.Cl, 30);
      ChlorideWater.SetConcentration(ChemicalNames.IsotopeFraction, 8);
      ChlorideWater.SetConcentration(ChemicalNames.Nitrate, 1.6);
      ChlorideWater.SetConcentration(ChemicalNames.Phosphate, 0.017);
      gwbin.Name = "Ind Skov";
      gwbin.WaterSample = ChlorideWater.DeepClone();
      Hampen.GroundwaterBoundaries.Add(gwbin);

      GroundWaterBoundary gwbin2 = new GroundWaterBoundary();
      gwbin2.FlowType = GWType.Flow;
      gwbin2.WaterFlow = new HydroNumerics.Time.Core.TimespanSeries("inflow", new DateTime(2008, 1, 1), 2, 1, HydroNumerics.Time.Core.TimestepUnit.Years, 0.045 * gwinflow / 1000 / 365 / 86400 * Hampen.Area);
      ChlorideWater.SetConcentration(ChemicalNames.Nitrate, 65.3);
      gwbin2.Name = "Ind Landbrug";
      gwbin2.WaterSample = ChlorideWater.DeepClone();

      Hampen.GroundwaterBoundaries.Add(gwbin2);
      ChlorideWater.SetConcentration(ChemicalNames.Cl, 10);
      ChlorideWater.SetConcentration(ChemicalNames.Phosphate, 0);
      ChlorideWater.SetConcentration(ChemicalNames.Nitrate, 1.7);
      pr.WaterSample = ChlorideWater.DeepClone();

      m.MoveInTime(end, TimeSpan.FromDays(30));
      m.Save(@"..\..\..\TestData\Hampen2.xml");
    
    }
Exemplo n.º 3
0
    public void TestMethod1()
    {
      Lake Gjeller = LakeFactory.GetLake("Gjeller Sø");
      Gjeller.Depth = 1.2;
      Gjeller.WaterLevel = 0.4;

      WaterPacket GjellerWater = new WaterPacket(1, 1);
      GjellerWater.AddChemical(ChemicalFactory.Instance.GetChemical(ChemicalNames.Cl), 1);

      TimeSeriesGroup climate = TimeSeriesGroupFactory.Create("climate.xts");

      foreach (var I in climate.Items)
      {
        I.ExtrapolationMethod = ExtrapolationMethods.RecycleYear;
        I.AllowExtrapolation = true;
      }

      EvaporationRateBoundary evap = new EvaporationRateBoundary((TimespanSeries)climate.Items[1]);
      evap.ContactGeometry = Gjeller.Geometry;
      Gjeller.EvaporationBoundaries.Add(evap);

      SinkSourceBoundary precip = new SinkSourceBoundary(climate.Items[0]);
      precip.ContactGeometry = Gjeller.Geometry;
      Gjeller.Precipitation.Add(precip);
      precip.ID = 2;
      precip.WaterSample = GjellerWater.DeepClone();
      precip.WaterSample.IDForComposition = precip.ID; ;

      GroundWaterBoundary GWIN = new GroundWaterBoundary(Gjeller, 1e-5, 2, 0.45, XYPolygon.GetSquare(Gjeller.Area / 2));
      GWIN.WaterSample = GjellerWater.DeepClone();
      GWIN.ID = 3;
      GWIN.WaterSample.IDForComposition = GWIN.ID;
      GWIN.Name = "Inflow";
      Gjeller.GroundwaterBoundaries.Add(GWIN);

      GroundWaterBoundary GWout = new GroundWaterBoundary(Gjeller, 1e-5, 2, 0.35, XYPolygon.GetSquare(Gjeller.Area / 2));
      GWout.Name = "Outflow";
      Gjeller.GroundwaterBoundaries.Add(GWout);


      TimespanSeries pumping = new TimespanSeries();
      pumping.AddSiValue(new DateTime(1990, 01, 01), new DateTime(2010, 01, 01), 0);
      pumping.AddSiValue(new DateTime(2010, 01, 01), new DateTime(2010, 05, 01), 0.05);
      pumping.AddSiValue(new DateTime(2010, 05, 01), DateTime.Now, 0);


      SinkSourceBoundary DrainageWater = new SinkSourceBoundary(pumping);
      DrainageWater.ID = 4;
      DrainageWater.WaterSample = GjellerWater.DeepClone();
      DrainageWater.WaterSample.IDForComposition = DrainageWater.ID;
      DrainageWater.Name = "Indpumpet Drænvand";
      Gjeller.Sources.Add(DrainageWater);


      var tsg = TimeSeriesGroupFactory.Create(@"..\..\..\TestData\GjellerObservations.xts");

      foreach (var ts in tsg.Items)
      {
        Chemical c = new Chemical(ts.Name, 1);
        Gjeller.RealData.AddChemicalTimeSeries(c);
        Gjeller.RealData.ChemicalConcentrations[c] = (TimestampSeries) ts;


      }

      Model M = new Model();
      M._waterBodies.Add(Gjeller);
      Gjeller.Output.LogAllChemicals = true;
      Gjeller.Output.LogComposition = true;

      M.SetState("Initial", new DateTime(1995, 1, 1), GjellerWater);


      M.MoveInTime(DateTime.Now, TimeSpan.FromDays(10));
      M.Save(@"..\..\..\TestData\Gjeller.xml");

    }
    public void RunOnstoredData()
    {
      Lake L = new Lake("Test", 1000);
      GroundWaterBoundary gwb = new GroundWaterBoundary(L, 14 - 5, 1, 10, (XYPolygon) L.Geometry);
      L.WaterLevel = 9;
      DateTime Start = new DateTime(2000, 1, 1);
      DateTime End = new DateTime(2000, 2, 1);
      L.GroundwaterBoundaries.Add(gwb);
      Model m = new Model();
      m._waterBodies.Add(L);
      m.SetState("Initial", Start, new WaterPacket(1));
      m.MoveInTime(End, TimeSpan.FromDays(1));

      DateTime Mid = new DateTime(2000,1,15);

      double flow = L.Output.GroundwaterInflow.GetValue(Mid);

      gwb.FlowType = GWType.Flow;
      gwb.HydraulicConductivity = 1;
      gwb.GroundwaterHead = 1;

      m.RestoreState("Initial");
      m.MoveInTime(End, TimeSpan.FromDays(1));
      Assert.AreEqual(flow, L.Output.GroundwaterInflow.GetValue(Mid));

    }
Exemplo n.º 5
0
    public void MoveInTimeTest1()
    {
      var Network = NetworkBuilder.CreateBranch(10);


      Network.First().Sources.Add(new SinkSourceBoundary(1));

      Model target = new Model();
      target._waterBodies.AddRange(Network.Cast<IWaterBody>());

      DateTime Start = new DateTime(2010, 1, 1);
      DateTime End = new DateTime(2010, 1, 10);
      TimeSpan TimeStep = new TimeSpan(1, 0, 0, 0);

      target.SetState("Initial", Start, new WaterPacket(1));
      target.MoveInTime(End, TimeStep);

      Assert.AreEqual(Network.First().CurrentStoredWater.Volume, Network.Last().CurrentStoredWater.Volume,0.0001);
      Assert.AreEqual(End, Network.First().CurrentTime);

    }
Exemplo n.º 6
0
    public void CompareStreamAndLakes()
    {
      var StreamNetwork =NetworkBuilder.CreateBranch(10);
      var LakeNetwork =NetworkBuilder.CreateConnectedLakes(10);

      Model Streams = new Model();
      Streams._waterBodies.AddRange(StreamNetwork.Cast<IWaterBody>());
      Model Lakes = new Model();
      Lakes._waterBodies.AddRange(LakeNetwork.Cast<IWaterBody>());

      SinkSourceBoundary b1 = new SinkSourceBoundary(100);
      StreamNetwork.First().Sources.Add(b1);
      LakeNetwork.First().Sources.Add(b1);

      Stopwatch SW = new Stopwatch();
      Stopwatch SW2 = new Stopwatch();


      DateTime Start = new DateTime(2000, 1, 1);
      DateTime End = new DateTime(2000, 1, 10);

      Streams.SetState("Initial", Start, new WaterPacket(1));
      Lakes.SetState("Initial", Start, new WaterPacket(1));

      SW.Start();
      Streams.MoveInTime(End, TimeSpan.FromHours(5) );
      SW.Stop();
      SW2.Start();
      Lakes.MoveInTime(End, TimeSpan.FromHours(5));
      SW2.Stop();

      TimespanSeries TS1 = StreamNetwork.Last().Output.Items.First() as TimespanSeries;
      TimespanSeries TS2 = LakeNetwork.Last().Output.Items.First() as TimespanSeries;

      for (int i = 0; i < TS1.Items.Count; i++)
     {
       Assert.AreEqual(TS1.Items[i].Value, TS2.Items[i].Value, 0.000001);
       Assert.AreEqual(TS1.Items[i].StartTime, TS2.Items[i].StartTime);

     }


    }
Exemplo n.º 7
0
    public void MoveInTimeTest2()
    {
      SinkSourceBoundary b1 = new SinkSourceBoundary(100);
      b1.WaterSample = new WaterPacket(1, 1);

      SinkSourceBoundary b2 = new SinkSourceBoundary(300);
      b2.WaterSample = new WaterPacket(2, 1);

      var Network = NetworkBuilder.CreateSortedYBranch(5, b1, b2);

      Model target = new Model();
      target._waterBodies.AddRange(Network.Cast<IWaterBody>());


      DateTime Start = new DateTime(2010, 1, 1);
      DateTime End = new DateTime(2010, 1, 3);
      TimeSpan TimeStep = new TimeSpan(1, 0, 0, 0);
      target.SetState("Initial", Start, new WaterPacket(1));
      target.MoveInTime(End, TimeStep);
      Assert.AreEqual(Network.First().Output.Outflow.Items.Last().Value * 4, Network.Last().Output.Outflow.Items.Last().Value,0.0001);
      Assert.AreEqual(End, Network.First().CurrentTime);

      Assert.AreEqual(0.25, Network.Last().CurrentStoredWater.Composition[b1.WaterSample.Composition.Keys.First()], 0.0001);
      Assert.AreEqual(0.75, Network.Last().CurrentStoredWater.Composition[b2.WaterSample.Composition.Keys.First()], 0.0001);

    }