コード例 #1
0
ファイル: DFSBaseTest.cs プロジェクト: msruzy/hydronumerics
        public void PercentileTest()
        {
            DFSBase target = DfsFileFactory.OpenFile(@"..\..\..\TestData\novomr4_indv_dfs0_ud1.dfs0");

            double[] Percentiles = new double[] { 0.1, 0.5, 0.9 };
            DFSBase  outf        = DfsFileFactory.CreateFile(@"..\..\..\TestData\novomr4_indv_dfs0_ud1_percentiles.dfs0", Percentiles.Count());

            outf.CopyFromTemplate(target);
            int Item = 1; // TODO: Initialize to an appropriate value

            int k = 0;

            //Create the items
            foreach (double j in Percentiles)
            {
                outf.Items[k].EumItem = target.Items[Item - 1].EumItem;
                outf.Items[k].EumUnit = target.Items[Item - 1].EumUnit;
                outf.Items[k].Name    = j.ToString() + " Percentile";
                k++;
            }

            int[] TSteps = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

            target.Percentile(Item, TSteps, outf, Percentiles);
            outf.Dispose();
            target.Dispose();

            DFS0 df = new DFS0(@"..\..\..\TestData\novomr4_indv_dfs0_ud1_percentiles.dfs0");

            Assert.AreEqual(25952, df.GetData(0, 1), 0.5);
            Assert.AreEqual(27294, df.GetData(0, 2), 0.5);
            Assert.AreEqual(33422, df.GetData(0, 3), 0.5);

            df.Dispose();
        }
コード例 #2
0
        public void ReadDataTest()
        {
            DFS0 _dfs0 = new DFS0(@"..\..\..\TestData\novomr4_indv_dfs0_ud1.dfs0");

            Assert.AreEqual(33316.7, _dfs0.GetData(0, 1), 1e-1);
            _dfs0.Dispose();
        }
コード例 #3
0
        public void DeleteValueTest()
        {
            DFS0 _dfs0 = new DFS0(@"..\..\..\TestData\Q_obs_sj_all.dfs0");

            Assert.AreEqual(_dfs0.DeleteValue, _dfs0.GetData(3, 15));

            _dfs0.Dispose();
        }
コード例 #4
0
    public void DeleteValueTest()
    {
      DFS0 _dfs0 = new DFS0(TestPath + @"Q_obs_sj_all.dfs0");

      Assert.AreEqual(_dfs0.DeleteValue, _dfs0.GetData(3, 15));

      _dfs0.Dispose();


    }
コード例 #5
0
        public void WriteTest2()
        {
            File.Copy(@"..\..\..\TestData\Detailed timeseries output.dfs0", @"..\..\..\TestData\Detailed timeseries output_copy.dfs0", true);
            DFS0 _dfs0 = new DFS0(@"..\..\..\TestData\Detailed timeseries output_copy.dfs0");


            _dfs0.SetData(new DateTime(1990, 1, 1), 1, 2560);
            Assert.AreEqual(2560, _dfs0.GetData(0, 1), 1e-1);

            _dfs0.SetData(10, 1, 2560.1);
            _dfs0.SetData(10, 2, 2560.1);

            _dfs0.Dispose();
            _dfs0 = new DFS0(@"..\..\..\TestData\Detailed timeseries output_copy.dfs0");
            Assert.AreEqual(2560, _dfs0.GetData(0, 1), 1e-1);
            Assert.AreEqual(2560.1, _dfs0.GetData(10, 1), 1e-1);
            Assert.AreEqual(2560.2, _dfs0.GetData(10, 2), 1e-1);
            _dfs0.Dispose();
        }
コード例 #6
0
ファイル: Program.cs プロジェクト: msruzy/hydronumerics
        static void Main(string[] args)
        {
            //Extract the filenames from the arguments
            string dfs0FileName  = args.First(var => Path.GetExtension(var).ToLower() == ".dfs0");
            string AsciiFileName = args.First(var => Path.GetExtension(var).ToLower() != ".dfs0");

            //Create a DFS0-object
            using (DFS0 _dfs0 = new DFS0(dfs0FileName)) //"Using" will make sure the object is correctly disposed
            {
                //Creates a streamreader object
                using (StreamReader sr = new StreamReader(AsciiFileName))
                {
                    //Not used but need to advance to next line
                    string headline = sr.ReadLine();

                    //Loop until end of stream
                    while (!sr.EndOfStream)
                    {
                        //Reads next line
                        string line = sr.ReadLine();

                        //Splits on tabs into an array of strings
                        string[] lineArray = line.Split('\t');

                        //Gets the ItemName from the first column
                        string ItemName = lineArray[0];

                        //Gets the Item number as the second column
                        int ItemNumber = int.Parse(lineArray[1]);

                        //Gets the Multiplication factor as the third column
                        double MultiplyFactor = double.Parse(lineArray[2]);

                        //Try to find the item based on the item name
                        Item I = _dfs0.Items.FirstOrDefault(var => var.Name == ItemName);

                        //I will be zero if it was not found
                        if (I != null)
                        {
                            ItemNumber = I.ItemNumber; //Now sets the item number to the correct number
                        }
                        //Loop all the timesteps in the dfs0
                        for (int i = 0; i < _dfs0.NumberOfTimeSteps; i++)
                        {
                            //Get the original value
                            double val = _dfs0.GetData(i, ItemNumber);
                            //Calculate new value
                            double newval = val * MultiplyFactor;
                            //Set the new value
                            _dfs0.SetData(i, ItemNumber, newval);
                        }
                    }
                }
            }
        }
コード例 #7
0
        public void WriteTest()
        {
            File.Copy(@"..\..\..\TestData\novomr4_indv_dfs0_ud1.dfs0", @"..\..\..\TestData\novomr4_indv_dfs0_ud1_copy.dfs0", true);
            DFS0 _dfs0 = new DFS0(@"..\..\..\TestData\novomr4_indv_dfs0_ud1_copy.dfs0");

            Assert.AreEqual(33316.7, _dfs0.GetData(0, 1), 1e-1);

            List <DateTime> Times = new List <DateTime>();

            foreach (var t in _dfs0.TimeSteps)
            {
                Times.Add(t);
            }

            _dfs0.SetData(_dfs0.NumberOfTimeSteps - 1, 1, 1);

            _dfs0.SetData(0, 1, 2560);
            Assert.AreEqual(2560, _dfs0.GetData(0, 1), 1e-1);

            _dfs0.SetData(10, 1, 2560.1);
            _dfs0.SetData(10, 2, 2560.1);

            _dfs0.Dispose();
            _dfs0 = new DFS0(@"..\..\..\TestData\novomr4_indv_dfs0_ud1_copy.dfs0");
            Assert.AreEqual(2560, _dfs0.GetData(0, 1), 1e-1);
            Assert.AreEqual(2560.1, _dfs0.GetData(10, 1), 1e-1);
            Assert.AreEqual(2560.2, _dfs0.GetData(10, 2), 1e-1);

            for (int i = 0; i < _dfs0.NumberOfTimeSteps; i++)
            {
                Assert.AreEqual(Times[i], _dfs0.TimeSteps[i]);
            }


            _dfs0.Dispose();

            _dfs0 = new DFS0(@"..\..\..\TestData\novomr4_indv_dfs0_ud1_copy.dfs0");

            Assert.AreEqual(2560.1, _dfs0.GetData(10, 1), 1e-1);
            Assert.AreEqual(2560.2, _dfs0.GetData(10, 2), 1e-1);
            _dfs0.Dispose();
        }
コード例 #8
0
    public void WriteTest2()
    {
      File.Copy(TestPath + @"Detailed timeseries output.dfs0", TestPath + @"Detailed timeseries output_copy.dfs0", true);
      DFS0 _dfs0 = new DFS0(TestPath + @"Detailed timeseries output_copy.dfs0");


      _dfs0.SetData(new DateTime(1990,1,1), 1, 2560);
      Assert.AreEqual(2560, _dfs0.GetData(0, 1), 1e-1);

      _dfs0.SetData(10, 1, 2560.1);
      _dfs0.SetData(10, 2, 2560.1);

      _dfs0.Dispose();
      _dfs0 = new DFS0(TestPath + @"Detailed timeseries output_copy.dfs0");
      Assert.AreEqual(2560, _dfs0.GetData(0, 1), 1e-1);
      Assert.AreEqual(2560.1, _dfs0.GetData(10, 1), 1e-1);
      Assert.AreEqual(2560.2, _dfs0.GetData(10, 2), 1e-1);
      _dfs0.Dispose();

    }
コード例 #9
0
    public void WriteTest()
    {
      File.Copy(TestPath + @"novomr4_indv_dfs0_ud1.dfs0", TestPath + @"novomr4_indv_dfs0_ud1_copy.dfs0", true);
      DFS0 _dfs0 = new DFS0(TestPath + @"novomr4_indv_dfs0_ud1_copy.dfs0");

      Assert.AreEqual(33316.7, _dfs0.GetData(0, 1), 1e-1);

      List<DateTime> Times = new List<DateTime>();

      foreach (var t in _dfs0.TimeSteps)
        Times.Add(t);

      _dfs0.SetData(_dfs0.NumberOfTimeSteps-1,1, 1);
        
      _dfs0.SetData(0, 1, 2560);
      Assert.AreEqual(2560, _dfs0.GetData(0, 1), 1e-1);

      _dfs0.SetData(10, 1, 2560.1);
      _dfs0.SetData(10, 2, 2560.1);

      _dfs0.Dispose();
      _dfs0 = new DFS0(TestPath + @"novomr4_indv_dfs0_ud1_copy.dfs0");
      Assert.AreEqual(2560, _dfs0.GetData(0, 1), 1e-1);
      Assert.AreEqual(2560.1, _dfs0.GetData(10, 1), 1e-1);
      Assert.AreEqual(2560.2, _dfs0.GetData(10, 2), 1e-1);

      for (int i = 0; i < _dfs0.NumberOfTimeSteps; i++)
        Assert.AreEqual(Times[i], _dfs0.TimeSteps[i]);

     
      _dfs0.Dispose();

      _dfs0 = new DFS0(TestPath + @"novomr4_indv_dfs0_ud1_copy.dfs0");

      Assert.AreEqual(2560.1, _dfs0.GetData(10, 1), 1e-1);
      Assert.AreEqual(2560.2, _dfs0.GetData(10, 2), 1e-1);
      _dfs0.Dispose();


    }
コード例 #10
0
        public void ReadBigFileTest()
        {
            DFS0 _dfs0 = new DFS0(@"..\..\..\TestData\303Waterlevel_2006-2009.dfs0");

            System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
            double d;

            sw.Start();
            for (int i = 0; i < _dfs0.NumberOfTimeSteps; i++)
            {
                d = _dfs0.GetData(i, 1);
            }

            sw.Stop();
            var t = sw.Elapsed;
        }
コード例 #11
0
 public void ReadDataTest()
 {
   DFS0 _dfs0 = new DFS0(TestPath + @"novomr4_indv_dfs0_ud1.dfs0");
   Assert.AreEqual(33316.7, _dfs0.GetData(0, 1), 1e-1);
   _dfs0.Dispose();
 }
コード例 #12
0
    public void ReadBigFileTest()
    {
      DFS0 _dfs0 = new DFS0(TestPath + @"303Waterlevel_2006-2009.dfs0");

      System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
      double d;
      sw.Start();
      for (int i = 0; i < _dfs0.NumberOfTimeSteps; i++)
      {
        d = _dfs0.GetData(i, 1);
      }

      sw.Stop();
      var t = sw.Elapsed;

    }
コード例 #13
0
        /// <summary>
        /// Writes a dfs0 with extraction data for each active intake in every plant.
        /// Also writes the textfile that can be imported by the well editor.
        /// </summary>
        /// <param name="OutputPath"></param>
        /// <param name="Plants"></param>
        /// <param name="Start"></param>
        /// <param name="End"></param>
        public static void WriteExtractionDFS0(string OutputPath, IEnumerable <PlantViewModel> Plants, DateTime Start, DateTime End)
        {
            //Create the text file to the well editor.
            StreamWriter Sw  = new StreamWriter(Path.Combine(OutputPath, "WellEditorImport.txt"), false, Encoding.Default);
            StreamWriter Sw2 = new StreamWriter(Path.Combine(OutputPath, "WellsWithMissingInfo.txt"), false, Encoding.Default);
            StreamWriter Sw3 = new StreamWriter(Path.Combine(OutputPath, "PlantWithoutWells.txt"), false, Encoding.Default);


            var TheIntakes = Plants.Sum(var => var.ActivePumpingIntakes.Count());

            //Create the DFS0 Object
            string dfs0FileName = Path.Combine(OutputPath, "Extraction.dfs0");
            DFS0   _tso         = new DFS0(dfs0FileName, TheIntakes);

            DFS0 _tsoStat = new DFS0(Path.Combine(OutputPath, "ExtractionStat.dfs0"), 4);
            Dictionary <int, double> Sum             = new Dictionary <int, double>();
            Dictionary <int, double> SumSurfaceWater = new Dictionary <int, double>();
            Dictionary <int, double> SumNotUsed      = new Dictionary <int, double>();

            int Pcount = 0;

            int NumberOfYears = End.Year - Start.Year + 1;

            //Dummy year because of mean step accumulated
            _tso.InsertTimeStep(new DateTime(Start.Year, 1, 1, 0, 0, 0));

            for (int i = 0; i < NumberOfYears; i++)
            {
                _tso.InsertTimeStep(new DateTime(Start.Year + i, 12, 31, 12, 0, 0));
                _tsoStat.InsertTimeStep(new DateTime(Start.Year + i, 12, 31, 12, 0, 0));
                Sum.Add(i, 0);
                SumSurfaceWater.Add(i, 0);
                SumNotUsed.Add(i, 0);
            }

            double[] fractions = new double[NumberOfYears];
            int      itemCount = 0;

            //loop the plants
            foreach (PlantViewModel P in Plants)
            {
                double val;
                //Add to summed extraction, surface water and not assigned
                for (int i = 0; i < NumberOfYears; i++)
                {
                    if (P.plant.SurfaceWaterExtrations.TryGetValue(Start.AddYears(i), out val))
                    {
                        SumSurfaceWater[i] += val;
                    }
                    //Create statistics for plants without active intakes
                    if (P.ActivePumpingIntakes.Count() == 0)
                    {
                        if (P.plant.Extractions.TryGetValue(Start.AddYears(i), out val))
                        {
                            SumNotUsed[i] += val;
                        }
                    }

                    if (P.plant.Extractions.TryGetValue(Start.AddYears(i), out val))
                    {
                        Sum[i] += val;
                    }
                }
                Pcount++;

                //Used for extraction but has missing data
                foreach (var NotUsedWell in P.PumpingIntakes.Where(var => var.Intake.well.UsedForExtraction & (var.Intake.well.HasMissingData() | var.Intake.HasMissingdData())))
                {
                    StringBuilder Line = new StringBuilder();
                    Line.Append(NotUsedWell.Intake.well.X + "\t");
                    Line.Append(NotUsedWell.Intake.well.Y + "\t");
                    Line.Append(NotUsedWell.Intake.well.Terrain + "\t");
                    Line.Append("0\t");
                    Line.Append(P.ID + "\t");
                    Sw2.WriteLine(Line);
                }

                //Only go in here if the plant has active intakes
                if (P.ActivePumpingIntakes.Count() > 0)
                {
                    //Calculate the fractions based on how many intakes are active for a particular year.
                    for (int i = 0; i < NumberOfYears; i++)
                    {
                        fractions[i] = 1.0 / P.ActivePumpingIntakes.Count(var => (var.StartNullable ?? DateTime.MinValue).Year <= Start.Year + i & (var.EndNullable ?? DateTime.MaxValue).Year >= Start.Year + i);
                    }

                    //Now loop the intakes
                    foreach (var PI in P.ActivePumpingIntakes)
                    {
                        IIntake I = PI.Intake;
                        //Build novanaid
                        string NovanaID = P.ID.ToString() + "_" + I.well.ID.Replace(" ", "") + "_" + I.IDNumber;

                        _tso.Items[itemCount].ValueType = DataValueType.MeanStepBackward;
                        _tso.Items[itemCount].EumItem   = eumItem.eumIPumpingRate;
                        _tso.Items[itemCount].EumUnit   = eumUnit.eumUm3PerYear;
                        _tso.Items[itemCount].Name      = NovanaID;

                        //Loop the years
                        for (int i = 0; i < NumberOfYears; i++)
                        {
                            //Extractions are not necessarily sorted and the time series may have missing data
                            var k = P.plant.Extractions.Items.FirstOrDefault(var => var.StartTime.Year == Start.Year + i);

                            //If data and the intake is active
                            if (k != null & (PI.StartNullable ?? DateTime.MinValue).Year <= Start.Year + i & (PI.EndNullable ?? DateTime.MaxValue).Year >= Start.Year + i)
                            {
                                _tso.SetData(i + 1, itemCount + 1, (k.Value * fractions[i]));
                            }
                            else
                            {
                                _tso.SetData(i + 1, itemCount + 1, 0); //Prints 0 if no data available
                            }
                            //First year should be printed twice
                            if (i == 0)
                            {
                                _tso.SetData(i, itemCount + 1, _tso.GetData(i + 1, itemCount + 1));
                            }
                        }

                        //Now add line to text file.
                        StringBuilder Line = new StringBuilder();
                        Line.Append(NovanaID + "\t");
                        Line.Append(I.well.X + "\t");
                        Line.Append(I.well.Y + "\t");
                        Line.Append(I.well.Terrain + "\t");
                        Line.Append("0\t");
                        Line.Append(P.ID + "\t");
                        Line.Append(I.Screens.Max(var => var.TopAsKote) + "\t");
                        Line.Append(I.Screens.Min(var => var.BottomAsKote) + "\t");
                        Line.Append(1 + "\t");
                        Line.Append(Path.GetFileNameWithoutExtension(dfs0FileName) + "\t");
                        Line.Append(itemCount + 1);
                        Sw.WriteLine(Line.ToString());

                        itemCount++;
                    }
                }
                else //Plants with no wells
                {
                    Sw3.WriteLine(P.DisplayName + "\t" + P.ID);
                }
            }


            foreach (var Item in _tsoStat.Items)
            {
                Item.EumItem   = eumItem.eumIPumpingRate;
                Item.EumUnit   = eumUnit.eumUm3PerSec;
                Item.ValueType = DataValueType.MeanStepBackward;
            }

            _tsoStat.Items[0].Name = "Sum";
            _tsoStat.Items[1].Name = "Mean";
            _tsoStat.Items[2].Name = "SumNotUsed";
            _tsoStat.Items[3].Name = "SumSurfaceWater";

            for (int i = 0; i < NumberOfYears; i++)
            {
                _tsoStat.SetData(i, 1, Sum[i]);
                _tsoStat.SetData(i, 2, Sum[i] / ((double)Pcount));
                _tsoStat.SetData(i, 3, SumNotUsed[i]);
                _tsoStat.SetData(i, 4, SumSurfaceWater[i]);
            }

            _tsoStat.Dispose();
            _tso.Dispose();
            Sw.Dispose();
            Sw2.Dispose();
            Sw3.Dispose();
        }