Exemple #1
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);
            }
        }
Exemple #2
0
        public void TracerTest()
        {
            int      count  = 3;
            double   length = 10870;
            DateTime Start  = new DateTime(2000, 1, 1);

            List <Lake> lakes = NetworkBuilder.CreateConnectedLakes(count);

            foreach (Lake L in lakes)
            {
                L.SurfaceArea = XYPolygon.GetSquare(length / count);
                L.Depth       = 1;
                L.SetState("Initial", Start, new WaterPacket(L.Volume));
            }
            Chemical c = ChemicalFactory.Instance.GetChemical(ChemicalNames.Cl);

            SinkSourceBoundary fb = new SinkSourceBoundary(10870.0 / (8.49 * 3600));

            fb.WaterSample = new WaterPacket(1);
            lakes.First().Sources.Add(fb);

            WaterPacket plug = new WaterPacket(1);

            plug.AddChemical(c, 10000);
            lakes.First().AddWaterPacket(Start, Start.AddHours(1), plug.DeepClone());

            lakes.First().Output.LogChemicalConcentration(c);

            lakes.Last().Output.LogChemicalConcentration(c);


            Stream us = new Stream("us", 1, 1, 1);

            us.Sources.Add(fb);
            Stream s = new Stream("s", 1000, 1, 1);

            Lake L2 = new Lake("L2", 870);

            Stream s1 = new Stream("s1", 9000, 1, 1);

            s.AddWaterPacket(Start, Start.AddSeconds(1), plug.DeepClone());
            s1.Output.LogChemicalConcentration(c);

            us.AddDownStreamWaterBody(s);
            s.AddDownStreamWaterBody(L2);
            L2.AddDownStreamWaterBody(s1);


            Model m = new Model();

            m._waterBodies.AddRange(lakes.Cast <IWaterBody>());

            m._waterBodies.Add((IWaterBody)us);
            m._waterBodies.Add((IWaterBody)s);
            m._waterBodies.Add((IWaterBody)L2);
            m._waterBodies.Add((IWaterBody)s1);

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



            m.MoveInTime(Start.AddHours(15), TimeSpan.FromMinutes(1));

            lakes.Last().Output.Save(@"C:\temp\LastLake.xts");
            s1.Output.Save(@"C:\temp\Stream.xts");


            int n = 15;
            List <IWaterBody> wbs = NetworkBuilder.CreateCombo(n, 10870 / n / 2.0);

            foreach (IWaterBody wb in wbs)
            {
                wb.SetState("Initial", Start, new WaterPacket(wb.Volume));
            }

            wbs.First().AddWaterPacket(Start, Start.AddHours(1), plug.DeepClone());
            us.AddDownStreamWaterBody(wbs.First());
            us.RestoreState("Initial");

            m._waterBodies.Clear();
            m._waterBodies.Add(us);
            m._waterBodies.AddRange(wbs);

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

            ((Stream)wbs.Last()).Output.LogChemicalConcentration(c);

            m.MoveInTime(Start.AddHours(15), TimeSpan.FromMinutes(1));

            ((Stream)wbs.Last()).Output.Save(@"C:\temp\Stream.xts");
        }