public void CreateFile() { DFS2 df = new DFS2(@"..\..\..\TestData\test.dfs2", 1); df.NumberOfColumns = 5; df.NumberOfRows = 7; df.XOrigin = 9000; df.YOrigin = 6000; df.Orientation = 1; df.GridSize = 15; df.TimeOfFirstTimestep = new DateTime(2011, 10, 1, 23, 0, 0); var s = df.TimeOfFirstTimestep.ToString("yyyy-MM-dd"); df.TimeStep = TimeSpan.FromHours(2); df.FirstItem.Name = "SGS Kriged dyn. corr.precip"; df.FirstItem.EumItem = eumItem.eumIPrecipitationRate; df.FirstItem.EumUnit = eumUnit.eumUmillimeterPerDay; DenseMatrix m = new DenseMatrix(df.NumberOfRows, df.NumberOfColumns); m[3, 4] = 25; df.SetData(0, 1, m); df.SetData(1, 1, m); m[3, 4] = 15; df.SetData(2, 1, m); df.Dispose(); df = new DFS2(@"..\..\..\TestData\test.dfs2"); Assert.AreEqual(eumItem.eumIPrecipitationRate, df.FirstItem.EumItem); Assert.AreEqual(eumUnit.eumUmillimeterPerDay, df.FirstItem.EumUnit); DenseMatrix m2 = df.GetData(1, 1); Assert.AreEqual(25, m2[3, 4]); DFS2 df2 = new DFS2(@"..\..\..\TestData\test2.dfs2", df); df2.SetData(0, 1, m); Assert.AreEqual(eumItem.eumIPrecipitationRate, df2.FirstItem.EumItem); Assert.AreEqual(eumUnit.eumUmillimeterPerDay, df2.FirstItem.EumUnit); Assert.AreEqual(df.GridSize, df2.GridSize); Assert.AreEqual(df.NumberOfColumns, df2.NumberOfColumns); Assert.AreEqual(df.NumberOfRows, df2.NumberOfRows); Assert.AreEqual(df.Orientation, df2.Orientation); Assert.AreEqual(df.TimeOfFirstTimestep, df2.TimeOfFirstTimestep); Assert.AreEqual(df.TimeStep, df2.TimeStep); Assert.AreEqual(df.XOrigin, df2.XOrigin); Assert.AreEqual(df.YOrigin, df2.YOrigin); Assert.AreEqual(df.FirstItem.Name, df2.FirstItem.Name); Assert.AreEqual(df.Items.Count(), df2.Items.Count()); Assert.AreEqual(df.DeleteValue, df2.DeleteValue); }
public void WriteTest() { DFS2 outdata = new DFS2(@"..\..\..\TestData\simpelmatrixKopi.dfs2"); DenseMatrix M = outdata.GetData(0, 1); DenseMatrix M2; M[2, 2] = 2000; for (int i = 0; i < 10; i++) { outdata.SetData(i + 8, 1, M); M2 = outdata.GetData(i + 8, 1); Assert.IsTrue(M.Equals(M2)); } DateTime d = new DateTime(1950, 1, 1); string dd = d.ToShortDateString(); outdata.TimeOfFirstTimestep = new DateTime(1950, 1, 1); outdata.TimeStep = new TimeSpan(20, 0, 0, 0); outdata.Dispose(); }
/// <summary> /// Makes a simple a mathematical operation on two items from .dfs2-files /// </summary> /// <param name="OperationData"></param> public static void GridMath(XElement OperationData) { DFS3.MaxEntriesInBuffer = 1; DFS2.MaxEntriesInBuffer = 1; string File1 = OperationData.Element("DFS2FileName1").Value; int Item1 = int.Parse(OperationData.Element("Item1").Value); string Operator = OperationData.Element("MathOperation").Value; string File2 = OperationData.Element("DFS2FileName2").Value; int Item2 = int.Parse(OperationData.Element("Item2").Value); string DFS2OutPut = OperationData.Element("DFS2OutputFileName").Value; DFS2 dfsFile1 = new DFS2(File1); DFS2 dfsFile2 = new DFS2(File2); DFS2 outputFile = new DFS2(DFS2OutPut, 1); outputFile.CopyFromTemplate(dfsFile1); outputFile.FirstItem.Name = dfsFile1.Items[Item1 - 1].Name + " " + Operator + " " + dfsFile2.Items[Item2 - 1].Name; outputFile.FirstItem.EumItem = dfsFile1.Items[Item1 - 1].EumItem; outputFile.FirstItem.EumUnit = dfsFile1.Items[Item1 - 1].EumUnit; for (int i = 0; i < dfsFile1.NumberOfTimeSteps; i++) { DenseMatrix M1 = dfsFile1.GetData(i, Item1); DenseMatrix M2 = dfsFile2.GetData(i, Item2); DenseMatrix M3 = new DenseMatrix(M1.RowCount, M1.ColumnCount); switch (Operator) { case "+": M3 = M1 + M2; break; case "-": M3 = M1 - M2; break; case "*": M1.PointwiseMultiply(M2, M3); break; case "/": M1.PointwiseDivide(M2, M3); break; } RecreateDeleteValues(M1, M3, dfsFile1.DeleteValue); outputFile.SetData(i, 1, M3); } dfsFile1.Dispose(); dfsFile2.Dispose(); outputFile.Dispose(); }
public void GridEdit() { DFS2 dfs = new DFS2(@"C:\Jacob\OpenDA.DotNet_vs2008\mshe\Mshe_5x5\Initial Potential Head.dfs2"); var m = dfs.GetData(0, 1); for (int i = 0; i < m.Data.Count(); i++) { m.Data[i] = -0.01 * i; } dfs.SetData(0, 1, m); dfs.Dispose(); }
/// <summary> /// Sums layers from a DFS3 into a DFS2 /// </summary> /// <param name="OperationData"></param> public static void LayerSummation(XElement OperationData) { string Dfs3File = OperationData.Element("DFS3FileName").Value; string DFS2OutPut = OperationData.Element("DFS2OutputFileName").Value; DFS3.MaxEntriesInBuffer = 1; DFS2.MaxEntriesInBuffer = 1; DFS3 input = new DFS3(Dfs3File); var Items = ParseString(OperationData.Element("Items").Value, 1, input.Items.Count()); var Layers = ParseString(OperationData.Element("Layers").Value, 0, input.NumberOfLayers - 1); DenseMatrix Sumdata = new DenseMatrix(input.NumberOfRows, input.NumberOfColumns); //Create the output file and copy info from input file DFS2 output = new DFS2(DFS2OutPut, Items.Count()); output.CopyFromTemplate(input); int l = 0; //Create the items foreach (int j in Items) { int i = j - 1; output.Items[l].EumItem = input.Items[i].EumItem; output.Items[l].EumUnit = input.Items[i].EumUnit; output.Items[l].Name = input.Items[i].Name; l++; } for (int i = 0; i < input.NumberOfTimeSteps; i++) { foreach (int j in Items) { IMatrix3d data = input.GetData(i, j); Sumdata = data[Layers[0]]; for (int k = 1; k < Layers.Count(); k++) { Sumdata = Sumdata + data[Layers[k]]; } RecreateDeleteValues(data[Layers[0]], Sumdata, input.DeleteValue); output.SetData(i, j, Sumdata); } } input.Dispose(); output.Dispose(); }
public void CreateCompressedFromTemplate() { DFS2 dfsorg = new DFS2(@"..\..\..\TestData\Novomr1_inv_PreProcessed.DFS2"); DFS2 dfs = new DFS2(@"..\..\..\TestData\Novomr1_inv_PreProcessed_rewritten.DFS2", dfsorg); for (int i = 1; i <= dfsorg.NumberOfItems; i++) { dfs.SetData(0, i, dfsorg.GetData(0, i)); } dfsorg.Dispose(); dfs.Dispose(); var f1 = new System.IO.FileInfo(@"..\..\..\TestData\Novomr1_inv_PreProcessed.DFS2"); var f2 = new System.IO.FileInfo(@"..\..\..\TestData\Novomr1_inv_PreProcessed_rewritten.DFS2"); Assert.AreEqual(f1.Length, f2.Length, 50); }
static void Main(string[] args) { DFS2 df = new DFS2(args[0]); DFS2 dfnew = new DFS2(Path.ChangeExtension(args[0], "") + "_deletes.dfs2", df); double threshold = 1; if (args.Count() > 1) { double.TryParse(args[1], out threshold); } for (int i = 0; i < df.TimeSteps.Count; i++) { for (int j = 1; j <= df.Items.Count(); j++) { var M = df.GetData(i, j); for (int m = 0; m < df.NumberOfColumns; m++) { for (int n = 0; n < df.NumberOfRows; n++) { if (M[n, m] > threshold) { M[n, m] = threshold; } } } dfnew.SetData(i, j, M); } } dfnew.Dispose(); df.Dispose(); }
static void Main(string[] args) { string dataFile = args[0]; string gridFile = args[1]; string outfilename = Path.Combine(Path.GetDirectoryName(dataFile), "WaterOnTerrain.txt"); string dfsoutname = Path.Combine(Path.GetDirectoryName(dataFile), "WaterOnTerrain.dfs2"); double LowerLevel = 0; if (args.Count() > 2) { double.TryParse(args[2], out LowerLevel); } DFS2 Data = new DFS2(dataFile); DFS2 Grid = new DFS2(gridFile); DFS2 dfsout = new DFS2(dfsoutname, Grid); DenseMatrix dmout = new DenseMatrix(Grid.NumberOfRows, Grid.NumberOfColumns); //Read the grid and fill into a matrix DenseMatrix dmg = Grid.GetData(0, 1); Dictionary <double, int> GridAreas = new Dictionary <double, int>(); for (int i = 0; i < dmg.RowCount; i++) { for (int j = 0; j < dmg.ColumnCount; j++) { if (!GridAreas.ContainsKey(dmg[i, j])) { GridAreas.Add(dmg[i, j], 0); } } } List <double> keys = new List <double>(GridAreas.Keys); using (StreamWriter sw = new StreamWriter(outfilename)) { string Line = "Time"; //Build header foreach (var key in GridAreas.Keys) { Line += "\tGridCode\tNumberOfCells\tArea"; } sw.WriteLine(Line); //Time loop for (int t = 0; t < Data.NumberOfTimeSteps; t++) { Line = Data.TimeSteps[t].ToString("dd-MM-yyyy HH:mm:ss"); DenseMatrix dmd = Data.GetData(t, 1); for (int k = 0; k < dmd.Data.Count(); k++) { if (dmd.Data[k] > LowerLevel) { dmout.Data[k] = dmout.Data[k] + 1; GridAreas[dmg.Data[k]]++; } } //Build line foreach (var kvp in GridAreas) { Line += "\t" + (int)kvp.Key + "\t" + kvp.Value + "\t" + kvp.Value * Math.Pow((float)Data.GridSize, 2); } sw.WriteLine(Line); //Reset foreach (var k in keys) { GridAreas[k] = 0; } } dfsout.SetData(0, 1, dmout); } Data.Dispose(); Grid.Dispose(); dfsout.Dispose(); }
public static void InsertPointValues(XElement OperationData) { string filename = OperationData.Element("DFSFileName").Value; int Item = OperationData.Element("Item") == null ? 1 : int.Parse(OperationData.Element("Item").Value); bool ClearValues = OperationData.Element("ClearValues") == null ? true: bool.Parse(OperationData.Element("ClearValues").Value); List <Tuple <double, double, int, int, double> > points = new List <Tuple <double, double, int, int, double> >(); foreach (var p in OperationData.Element("Points").Elements()) { Tuple <double, double, int, int, double> point = new Tuple <double, double, int, int, double>( p.Element("X") == null ? -1 : double.Parse(p.Element("X").Value), p.Element("Y") == null ? -1 : double.Parse(p.Element("Y").Value), p.Element("Z") == null ? 0 : int.Parse(p.Element("Z").Value), p.Element("TimeStep") == null ? 0 : int.Parse(p.Element("TimeStep").Value), double.Parse(p.Element("Value").Value)); points.Add(point); } if (Path.GetExtension(filename).EndsWith("0")) { using (DFS0 dfs = new DFS0(filename)) { if (ClearValues) { for (int i = 0; i < dfs.NumberOfTimeSteps; i++) { dfs.SetData(i, Item, 0); } } foreach (var p in points) { dfs.SetData(p.Item4, Item, p.Item5); } } } else if (Path.GetExtension(filename).EndsWith("2")) { using (DFS2 dfs = new DFS2(filename)) { if (ClearValues) { for (int i = 0; i < dfs.NumberOfTimeSteps; i++) { dfs.SetData(i, Item, new DenseMatrix(dfs.NumberOfRows, dfs.NumberOfColumns)); } } foreach (var p in points) { var data = dfs.GetData(p.Item4, Item); int column = dfs.GetColumnIndex(p.Item1); int row = dfs.GetRowIndex(p.Item2); if (column >= 0 & row >= 0) { data[row, column] = p.Item5; } dfs.SetData(p.Item4, Item, data); } } } else if (Path.GetExtension(filename).EndsWith("3")) { using (DFS3 dfs = new DFS3(filename)) { if (ClearValues) { for (int i = 0; i < dfs.NumberOfTimeSteps; i++) { dfs.SetData(i, Item, new Matrix3d(dfs.NumberOfRows, dfs.NumberOfColumns, dfs.NumberOfLayers)); } } foreach (var p in points) { var data = dfs.GetData(p.Item4, Item); int column = dfs.GetColumnIndex(p.Item1); int row = dfs.GetRowIndex(p.Item2); if (column >= 0 & row >= 0) { data[row, column, p.Item3] = p.Item5; } dfs.SetData(p.Item4, Item, data); } } } }
static void Main(string[] args) { Model M = new Model(args[0]); List <double> MingroundWaterLevels = new List <double>(); for (int i = 1; i < args.Count(); i++) { MingroundWaterLevels.Add(double.Parse(args[i])); } DFS2 CustomPhreaticHead = new DFS2(Path.Combine(M.Files.ResultsDirectory, "CustomPhreaticHeads.dfs2"), MingroundWaterLevels.Count); CustomPhreaticHead.NumberOfRows = M.GridInfo.NumberOfRows; CustomPhreaticHead.NumberOfColumns = M.GridInfo.NumberOfColumns; CustomPhreaticHead.XOrigin = M.GridInfo.XOrigin; CustomPhreaticHead.YOrigin = M.GridInfo.YOrigin; CustomPhreaticHead.GridSize = M.GridInfo.GridSize; CustomPhreaticHead.TimeOfFirstTimestep = M.Results.Heads.TimeSteps.First(); CustomPhreaticHead.TimeStep = M.Results.Heads.TimeSteps[1].Subtract(M.Results.Heads.TimeSteps[0]); CustomPhreaticHead.DeleteValue = M.Results.DeleteValue; for (int l = 0; l < MingroundWaterLevels.Count; l++) { CustomPhreaticHead.Items[l].Name = MingroundWaterLevels[l].ToString(); CustomPhreaticHead.Items[l].EumItem = DHI.Generic.MikeZero.eumItem.eumIHeadElevation; CustomPhreaticHead.Items[l].EumUnit = DHI.Generic.MikeZero.eumUnit.eumUmeter; } var LowerLevel = M.GridInfo.LowerLevelOfComputationalLayers.Data; //Time loop for (int t = 0; t < M.Results.Heads.TimeSteps.Count; t++) { var heads = M.Results.Heads.TimeData(t); for (int l = 0; l < MingroundWaterLevels.Count; l++) { DenseMatrix phreatichead = (DenseMatrix)heads[0].Clone(); for (int i = 0; i < CustomPhreaticHead.NumberOfRows; i++) { for (int j = 0; j < CustomPhreaticHead.NumberOfColumns; j++) { if (heads[0][i, j] != CustomPhreaticHead.DeleteValue) { for (int k = M.GridInfo.NumberOfLayers - 1; k >= 0; k--) { if (heads[k][i, j] >= LowerLevel[k][i, j] + MingroundWaterLevels[l]) { phreatichead[i, j] = heads[k][i, j]; break; } } } } } CustomPhreaticHead.SetData(t, l + 1, phreatichead); } } CustomPhreaticHead.Dispose(); M.Dispose(); }