コード例 #1
0
ファイル: GridFunctions.cs プロジェクト: msruzy/hydronumerics
        /// <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();
        }
コード例 #2
0
ファイル: GridFunctions.cs プロジェクト: msruzy/hydronumerics
        /// <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();
        }