示例#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");
        }
示例#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");
        }