/// <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(); }
/// <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(); }