Esempio n. 1
0
        static void Main(string[] args)
        {
            int[] nodeNumber = new int[] { 899, 2686, 2856, 2866, 2331, 3806, 2231, 3831 };

            IDfsFile     resFile     = DfsFileFactory.DfsGenericOpenEdit(@"E:\FFWS\Model\MIKEHYDRO\GBM_MIKEHYDRO.mhydro - Result Files\RiverBasin_GBM.dfs0");
            IDfsFileInfo resfileInfo = resFile.FileInfo;
            int          noTimeSteps = resfileInfo.TimeAxis.NumberOfTimeSteps;

            DateTime[] date      = resFile.FileInfo.TimeAxis.GetDateTimes();
            DateTime   startDate = date[0];

            double[] timeSpan = new double[noTimeSteps];
            for (int j = 0; j < noTimeSteps; j++)
            {
                timeSpan[j] = resFile.ReadItemTimeStep(899, j).Time;
            }
            foreach (int element in nodeNumber)
            {
                IDfsItemData <float> data;
                float[] QSimvalues = new float[noTimeSteps];

                for (int j = 0; j < noTimeSteps; j++)
                {
                    data          = (IDfsItemData <float>)resFile.ReadItemTimeStep(element, j);
                    QSimvalues[j] = Convert.ToSingle(data.Data[0]);
                }

                DfsFactory factory     = new DfsFactory();
                string     filename    = @"E:\FFWS\Model\BrahmaputraHD\Boundary\" + element + ".dfs0";
                DfsBuilder filecreator = DfsBuilder.Create(element.ToString(), element.ToString(), 2014);
                filecreator.SetDataType(1);
                filecreator.SetGeographicalProjection(factory.CreateProjectionUndefined());
                filecreator.SetTemporalAxis(factory.CreateTemporalNonEqCalendarAxis(eumUnit.eumUsec, new DateTime(startDate.Year, startDate.Month, startDate.Day, startDate.Hour, startDate.Minute, startDate.Second)));
                filecreator.SetItemStatisticsType(StatType.RegularStat);
                DfsDynamicItemBuilder item = filecreator.CreateDynamicItemBuilder();
                item.Set(element.ToString(), eumQuantity.Create(eumItem.eumIDischarge, eumUnit.eumUm3PerSec), DfsSimpleType.Float);
                item.SetValueType(DataValueType.Instantaneous);
                item.SetAxis(factory.CreateAxisEqD0());
                item.SetReferenceCoordinates(1f, 2f, 3f);
                filecreator.AddDynamicItem(item.GetDynamicItemInfo());

                filecreator.CreateFile(filename);
                IDfsFile     file     = filecreator.GetFile();
                IDfsFileInfo fileinfo = file.FileInfo;

                for (int j = 0; j < noTimeSteps; j++)
                {
                    file.WriteItemTimeStepNext(timeSpan[j], new float[] { QSimvalues[j] });
                }
                file.Close();
            }
        }
Esempio n. 2
0
        private void btnDFS0Fromlist_Click(object sender, EventArgs e)
        {
            if (fileName == "")
            {
                MessageBox.Show("No files have been selected for processing...\nPlease Load a file first.");
            }
            else
            {
                string[] requiredDFS0File = File.ReadAllLines((fileName.Substring(0, fileName.Length - 6) + ".txt"));
                string[] availableDFS0    = File.ReadAllLines((fileName.Substring(0, fileName.Length - 6) + "_xy.txt"));
                foreach (string element in requiredDFS0File)
                {
                    for (int i = 0; i < availableDFS0.Length; i++)
                    {
                        if (element == availableDFS0[i])
                        {
                            string itemType = element.Substring(0, 2);

                            if (itemType == "WL")
                            {
                                DfsFactory factory     = new DfsFactory();
                                string     filename    = dfs0Path + @"\" + element + ".dfs0";
                                DfsBuilder filecreator = DfsBuilder.Create(element, element, 2012);
                                filecreator.SetDataType(1);
                                filecreator.SetGeographicalProjection(factory.CreateProjectionUndefined());
                                filecreator.SetTemporalAxis(factory.CreateTemporalNonEqCalendarAxis(eumUnit.eumUsec, new DateTime(dfsDate[0].Year, dfsDate[0].Month, dfsDate[0].Day, dfsDate[0].Hour, dfsDate[0].Minute, dfsDate[0].Second)));
                                filecreator.SetItemStatisticsType(StatType.RegularStat);
                                DfsDynamicItemBuilder item = filecreator.CreateDynamicItemBuilder();
                                item.Set(element, eumQuantity.Create(eumItem.eumIWaterLevel, eumUnit.eumUmeter), DfsSimpleType.Float);
                                item.SetValueType(DataValueType.Instantaneous);
                                item.SetAxis(factory.CreateAxisEqD0());
                                item.SetReferenceCoordinates(1f, 2f, 3f);
                                filecreator.AddDynamicItem(item.GetDynamicItemInfo());

                                filecreator.CreateFile(filename);
                                IDfsFile     file     = filecreator.GetFile();
                                IDfsFileInfo fileinfo = file.FileInfo;

                                for (int j = 0; j < dfsDate.Count; j++)
                                {
                                    file.WriteItemTimeStepNext((dfsDate[j] - dfsDate[0]).TotalSeconds, new float[] { dfsData[j, i] });
                                }
                                file.Close();
                            }
                            else if (itemType == "Q,")
                            {
                                DfsFactory factory     = new DfsFactory();
                                string     filename    = dfs0Path + @"\" + element + ".dfs0";
                                DfsBuilder filecreator = DfsBuilder.Create(element, element, 2014);
                                filecreator.SetDataType(1);
                                filecreator.SetGeographicalProjection(factory.CreateProjectionUndefined());
                                filecreator.SetTemporalAxis(factory.CreateTemporalNonEqCalendarAxis(eumUnit.eumUsec, new DateTime(dfsDate[0].Year, dfsDate[0].Month, dfsDate[0].Day, dfsDate[0].Hour, dfsDate[0].Minute, dfsDate[0].Second)));
                                filecreator.SetItemStatisticsType(StatType.RegularStat);
                                DfsDynamicItemBuilder item = filecreator.CreateDynamicItemBuilder();
                                item.Set(element, eumQuantity.Create(eumItem.eumIDischarge, eumUnit.eumUm3PerSec), DfsSimpleType.Float);
                                item.SetValueType(DataValueType.Instantaneous);
                                item.SetAxis(factory.CreateAxisEqD0());
                                item.SetReferenceCoordinates(1f, 2f, 3f);
                                filecreator.AddDynamicItem(item.GetDynamicItemInfo());

                                filecreator.CreateFile(filename);
                                IDfsFile     file     = filecreator.GetFile();
                                IDfsFileInfo fileinfo = file.FileInfo;

                                for (int j = 0; j < dfsDate.Count; j++)
                                {
                                    file.WriteItemTimeStepNext((dfsDate[j] - dfsDate[0]).TotalSeconds, new float[] { dfsData[j, i] });
                                }
                                file.Close();
                            }
                        }
                    }
                }
                MessageBox.Show("Result file processed suceesssfully.");
            }
        }
Esempio n. 3
0
        private void btnSingleDFS0_Click(object sender, EventArgs e)
        {
            try
            {
                if (fileName == "")
                {
                    MessageBox.Show("No files have been selected for processing...\nPlease Load a file first.");
                }
                else
                {
                    string itemType = comboBox1.SelectedItem.ToString().Substring(0, 2);

                    if (itemType == "WL")
                    {
                        string     element     = comboBox1.SelectedItem.ToString().Substring(0, comboBox1.SelectedItem.ToString().Length - 4);
                        DfsFactory factory     = new DfsFactory();
                        string     filename    = dfs0Path + @"\" + element + ".dfs0";
                        DfsBuilder filecreator = DfsBuilder.Create(element, element, 2012);
                        filecreator.SetDataType(1);
                        filecreator.SetGeographicalProjection(factory.CreateProjectionUndefined());
                        filecreator.SetTemporalAxis(factory.CreateTemporalNonEqCalendarAxis(eumUnit.eumUsec, new DateTime(dfsDate[0].Year, dfsDate[0].Month, dfsDate[0].Day, dfsDate[0].Hour, dfsDate[0].Minute, dfsDate[0].Second)));
                        filecreator.SetItemStatisticsType(StatType.RegularStat);
                        DfsDynamicItemBuilder item = filecreator.CreateDynamicItemBuilder();
                        item.Set(element, eumQuantity.Create(eumItem.eumIWaterLevel, eumUnit.eumUmeter), DfsSimpleType.Float);
                        item.SetValueType(DataValueType.Instantaneous);
                        item.SetAxis(factory.CreateAxisEqD0());
                        item.SetReferenceCoordinates(1f, 2f, 3f);
                        filecreator.AddDynamicItem(item.GetDynamicItemInfo());

                        filecreator.CreateFile(filename);
                        IDfsFile     file     = filecreator.GetFile();
                        IDfsFileInfo fileinfo = file.FileInfo;

                        for (int j = 0; j < dfsDate.Count; j++)
                        {
                            file.WriteItemTimeStepNext((dfsDate[j] - dfsDate[0]).TotalSeconds, new float[] { dfsData[j, comboBox1.SelectedIndex] });
                        }
                        file.Close();
                    }
                    else if (itemType == "Q,")
                    {
                        string     element     = comboBox1.SelectedItem.ToString();
                        DfsFactory factory     = new DfsFactory();
                        string     filename    = dfs0Path + @"\" + element + ".dfs0";
                        DfsBuilder filecreator = DfsBuilder.Create(element, element, 2014);
                        filecreator.SetDataType(1);
                        filecreator.SetGeographicalProjection(factory.CreateProjectionUndefined());
                        filecreator.SetTemporalAxis(factory.CreateTemporalNonEqCalendarAxis(eumUnit.eumUsec, new DateTime(dfsDate[0].Year, dfsDate[0].Month, dfsDate[0].Day, dfsDate[0].Hour, dfsDate[0].Minute, dfsDate[0].Second)));
                        filecreator.SetItemStatisticsType(StatType.RegularStat);
                        DfsDynamicItemBuilder item = filecreator.CreateDynamicItemBuilder();
                        item.Set(element, eumQuantity.Create(eumItem.eumIDischarge, eumUnit.eumUm3PerSec), DfsSimpleType.Float);
                        item.SetValueType(DataValueType.Instantaneous);
                        item.SetAxis(factory.CreateAxisEqD0());
                        item.SetReferenceCoordinates(1f, 2f, 3f);
                        filecreator.AddDynamicItem(item.GetDynamicItemInfo());

                        filecreator.CreateFile(filename);
                        IDfsFile     file     = filecreator.GetFile();
                        IDfsFileInfo fileinfo = file.FileInfo;

                        for (int j = 0; j < dfsDate.Count; j++)
                        {
                            file.WriteItemTimeStepNext((dfsDate[j] - dfsDate[0]).TotalSeconds, new float[] { dfsData[j, comboBox1.SelectedIndex] });
                        }
                        file.Close();
                    }

                    MessageBox.Show("Result file processed suceesssfully.");
                }
            }
            catch (Exception error)
            {
                MessageBox.Show("HD Model Result files cannot be processed due to an error. Error: " + error.Message);
            }
        }
Esempio n. 4
0
        private void btnLoadNAM_Click(object sender, EventArgs e)
        {
            OpenFileDialog dialog = new OpenFileDialog();

            dialog.Filter = "Mike NAM Result Files|*.RES11";

            if (dialog.ShowDialog() != System.Windows.Forms.DialogResult.Cancel)
            {
                fileName = dialog.FileName;
            }


            var filepath = fileName.Split('\\');

            dfs0Path = filepath[0];
            for (int i = 1; i < filepath.Length - 1; i++)
            {
                dfs0Path = dfs0Path + @"\" + filepath[i];
            }

            IDfsFile     resFile     = DfsFileFactory.DfsGenericOpenEdit(fileName);
            IDfsFileInfo resfileInfo = resFile.FileInfo;

            DateTime[] date      = resFile.FileInfo.TimeAxis.GetDateTimes();
            DateTime   startDate = date[0];

            IDfsItemData <float> data;
            int noTimeSteps = resfileInfo.TimeAxis.NumberOfTimeSteps;

            float[] values = new float[noTimeSteps];
            for (int i = 0; i < noTimeSteps; i++)
            {
                dfsDate.Add(startDate.AddHours(resFile.ReadItemTimeStep(1, i).Time));
            }

            for (int j = 0; j < resFile.ItemInfo.Count; j++)
            {
                IDfsSimpleDynamicItemInfo dynamicItemInfo = resFile.ItemInfo[j];
                string nameOftDynamicItem = dynamicItemInfo.Name;
                string checkname          = nameOftDynamicItem.Substring(0, 6);
                if (checkname == "RunOff")
                {
                    string     filename    = dfs0Path + @"\" + nameOftDynamicItem + ".dfs0";
                    DfsFactory factory     = new DfsFactory();
                    DfsBuilder filecreator = DfsBuilder.Create(nameOftDynamicItem, nameOftDynamicItem, 2014);
                    filecreator.SetDataType(1);
                    filecreator.SetGeographicalProjection(factory.CreateProjectionUndefined());
                    //filecreator.SetTemporalAxis(factory.CreateTemporalEqCalendarAxis(eumUnit.eumUsec, new DateTime(2010, 01, 01, 06, 00, 00), 0, 10800));
                    filecreator.SetTemporalAxis(factory.CreateTemporalNonEqCalendarAxis(eumUnit.eumUsec, new DateTime(dfsDate[0].Year, dfsDate[0].Month, dfsDate[0].Day, dfsDate[0].Hour, dfsDate[0].Minute, dfsDate[0].Second)));
                    filecreator.SetItemStatisticsType(StatType.RegularStat);
                    DfsDynamicItemBuilder item = filecreator.CreateDynamicItemBuilder();
                    item.Set(nameOftDynamicItem, eumQuantity.Create(eumItem.eumIDischarge, eumUnit.eumUm3PerSec), DfsSimpleType.Float);
                    item.SetValueType(DataValueType.Instantaneous);
                    item.SetAxis(factory.CreateAxisEqD0());
                    item.SetReferenceCoordinates(1f, 2f, 3f);
                    filecreator.AddDynamicItem(item.GetDynamicItemInfo());

                    filecreator.CreateFile(filename);
                    IDfsFile file = filecreator.GetFile();

                    for (int i = 0; i < noTimeSteps; i++)
                    {
                        data      = (IDfsItemData <float>)resFile.ReadItemTimeStep(j + 1, i);
                        values[i] = Convert.ToSingle(data.Data[0]);
                        file.WriteItemTimeStepNext((dfsDate[i] - dfsDate[0]).TotalSeconds, new float[] { values[i] });
                    }
                    file.Close();
                }
            }
        }
Esempio n. 5
0
        /// <summary>
        /// Create DFS2 file with interpolated values from the 3x3 quadrangles,
        /// with various delete values applied in each time step.
        /// </summary>
        /// <param name="centerOnly">Only use center quadrangle</param>
        public void DeleteValueVisualDfs2Test(bool centerOnly)
        {
            DfsFactory  factory     = new DfsFactory();
            Dfs2Builder dfs2Builder = new Dfs2Builder();

            dfs2Builder.SetDataType(0);
            dfs2Builder.SetTemporalAxis(factory.CreateTemporalEqTimeAxis(eumUnit.eumUsec, 0, 1));
            dfs2Builder.SetSpatialAxis(factory.CreateAxisEqD2(eumUnit.eumUmeter, 200, 0, 0.1, 200, 0, 0.1));
            dfs2Builder.SetGeographicalProjection(factory.CreateProjectionUndefined());

            dfs2Builder.AddDynamicItem("DeleteValueSmooth", eumQuantity.UnDefined, DfsSimpleType.Float, DataValueType.Instantaneous);
            dfs2Builder.AddDynamicItem("DeleteValueBox", eumQuantity.UnDefined, DfsSimpleType.Float, DataValueType.Instantaneous);
            dfs2Builder.DeleteValueFloat = (float)d;

            if (centerOnly)
            {
                dfs2Builder.CreateFile(UnitTestHelper.TestDataDir + "test_InterpQuadCenter.dfs2");
            }
            else
            {
                dfs2Builder.CreateFile(UnitTestHelper.TestDataDir + "test_InterpQuad.dfs2");
            }

            Dfs2File dfs2File = dfs2Builder.GetFile();

            // Calculate interpolation weights
            QuadWeights[][] weights = new QuadWeights[200][];
            for (int j = 0; j < 200; j++)
            {
                double y = 5 + 0.1 * j + 0.05;
                weights[j] = new QuadWeights[200];
                for (int i = 0; i < 200; i++)
                {
                    double x = 5 + 0.1 * i + 0.05;

                    weights[j][i].Weights = InterpQuadrangle.UndefinedWeights();
                    for (int jr = 0; jr < 3; jr++)
                    {
                        for (int ir = 0; ir < 3; ir++)
                        {
                            if (centerOnly && (jr != 1 || ir != 1))
                            {
                                continue;
                            }

                            double x0 = xcoords[ind(ir, jr)];
                            double x1 = xcoords[ind(ir + 1, jr)];
                            double x2 = xcoords[ind(ir + 1, jr + 1)];
                            double x3 = xcoords[ind(ir, jr + 1)];
                            double y0 = ycoords[ind(ir, jr)];
                            double y1 = ycoords[ind(ir + 1, jr)];
                            double y2 = ycoords[ind(ir + 1, jr + 1)];
                            double y3 = ycoords[ind(ir, jr + 1)];
                            if (MeshExtensions.IsPointInsideQuadrangle(x, y, x0, y0, x1, y1, x2, y2, x3, y3))
                            {
                                weights[j][i].IR      = ir;
                                weights[j][i].JR      = jr;
                                weights[j][i].Weights = InterpQuadrangle.InterpolationWeights(x, y, x0, y0, x1, y1, x2, y2, x3, y3);
                            }
                        }
                    }
                }
            }

            // Original center quadrangle values
            double z0 = zcoords[ind(1, 1)];
            double z1 = zcoords[ind(1 + 1, 1)];
            double z2 = zcoords[ind(1 + 1, 1 + 1)];
            double z3 = zcoords[ind(1, 1 + 1)];

            float[] data = new float[200 * 200];
            VisualDfs2Data(weights, data, z0, z1, z2, z3, true); dfs2File.WriteItemTimeStepNext(0, data);
            VisualDfs2Data(weights, data, z0, z1, z2, z3, false); dfs2File.WriteItemTimeStepNext(0, data);

            // One delete value
            VisualDfs2Data(weights, data, d, z1, z2, z3, true); dfs2File.WriteItemTimeStepNext(0, data);
            VisualDfs2Data(weights, data, d, z1, z2, z3, false); dfs2File.WriteItemTimeStepNext(0, data);
            VisualDfs2Data(weights, data, z0, d, z2, z3, true); dfs2File.WriteItemTimeStepNext(0, data);
            VisualDfs2Data(weights, data, z0, d, z2, z3, false); dfs2File.WriteItemTimeStepNext(0, data);
            VisualDfs2Data(weights, data, z0, z1, d, z3, true); dfs2File.WriteItemTimeStepNext(0, data);
            VisualDfs2Data(weights, data, z0, z1, d, z3, false); dfs2File.WriteItemTimeStepNext(0, data);
            VisualDfs2Data(weights, data, z0, z1, z2, d, true); dfs2File.WriteItemTimeStepNext(0, data);
            VisualDfs2Data(weights, data, z0, z1, z2, d, false); dfs2File.WriteItemTimeStepNext(0, data);

            // Two adjacent delete values
            VisualDfs2Data(weights, data, d, d, z2, z3, true); dfs2File.WriteItemTimeStepNext(0, data);
            VisualDfs2Data(weights, data, d, d, z2, z3, false); dfs2File.WriteItemTimeStepNext(0, data);
            VisualDfs2Data(weights, data, z0, d, d, z3, true); dfs2File.WriteItemTimeStepNext(0, data);
            VisualDfs2Data(weights, data, z0, d, d, z3, false); dfs2File.WriteItemTimeStepNext(0, data);
            VisualDfs2Data(weights, data, z0, z1, d, d, true); dfs2File.WriteItemTimeStepNext(0, data);
            VisualDfs2Data(weights, data, z0, z1, d, d, false); dfs2File.WriteItemTimeStepNext(0, data);
            VisualDfs2Data(weights, data, d, z1, z2, d, true); dfs2File.WriteItemTimeStepNext(0, data);
            VisualDfs2Data(weights, data, d, z1, z2, d, false); dfs2File.WriteItemTimeStepNext(0, data);

            // Two diagonal delete values
            VisualDfs2Data(weights, data, d, z1, d, z3, true); dfs2File.WriteItemTimeStepNext(0, data);
            VisualDfs2Data(weights, data, d, z1, d, z3, false); dfs2File.WriteItemTimeStepNext(0, data);
            VisualDfs2Data(weights, data, z0, d, z2, d, true); dfs2File.WriteItemTimeStepNext(0, data);
            VisualDfs2Data(weights, data, z0, d, z2, d, false); dfs2File.WriteItemTimeStepNext(0, data);

            // Three delete values
            VisualDfs2Data(weights, data, d, d, d, z3, true); dfs2File.WriteItemTimeStepNext(0, data);
            VisualDfs2Data(weights, data, d, d, d, z3, false); dfs2File.WriteItemTimeStepNext(0, data);
            VisualDfs2Data(weights, data, d, d, z2, d, true); dfs2File.WriteItemTimeStepNext(0, data);
            VisualDfs2Data(weights, data, d, d, z2, d, false); dfs2File.WriteItemTimeStepNext(0, data);
            VisualDfs2Data(weights, data, d, z1, d, d, true); dfs2File.WriteItemTimeStepNext(0, data);
            VisualDfs2Data(weights, data, d, z1, d, d, false); dfs2File.WriteItemTimeStepNext(0, data);
            VisualDfs2Data(weights, data, z0, d, d, d, true); dfs2File.WriteItemTimeStepNext(0, data);
            VisualDfs2Data(weights, data, z0, d, d, d, false); dfs2File.WriteItemTimeStepNext(0, data);

            // All delete values
            VisualDfs2Data(weights, data, d, d, d, d, true); dfs2File.WriteItemTimeStepNext(0, data);
            VisualDfs2Data(weights, data, d, d, d, d, false); dfs2File.WriteItemTimeStepNext(0, data);

            dfs2File.Close();
        }
Esempio n. 6
0
        /// <summary>
        /// Creates a dfs0 file, with an equidistant time axis and one dynamic item.
        /// <para>
        /// It uses the generic <see cref="DfsBuilder"/>, since currently no specialized
        /// builder exists for the dfs0 files.
        /// </para>
        /// </summary>
        /// <param name="filename">Name of new file</param>
        /// <param name="calendarAxis">boolean specifying whether the temporal axis should be a calendar axis or a time axis</param>
        public static void CreateDfs0FileFromArray(string filename, bool calendarAxis)
        {
            DfsFactory factory = new DfsFactory();
            DfsBuilder builder = DfsBuilder.Create("TemporalAxisTest", "dfs Timeseries Bridge", 10000);

            // Set up file header
            builder.SetDataType(1);
            builder.SetGeographicalProjection(factory.CreateProjectionUndefined());
            if (calendarAxis)
            {
                builder.SetTemporalAxis(factory.CreateTemporalEqCalendarAxis(eumUnit.eumUsec, new DateTime(2010, 01, 04, 12, 34, 00), 4, 10));
            }
            else
            {
                builder.SetTemporalAxis(factory.CreateTemporalEqTimeAxis(eumUnit.eumUsec, 3, 10));
            }
            builder.SetItemStatisticsType(StatType.RegularStat);

            // Set up first item
            DfsDynamicItemBuilder item1 = builder.CreateDynamicItemBuilder();

            item1.Set("WaterLevel item", eumQuantity.Create(eumItem.eumIWaterLevel, eumUnit.eumUmeter),
                      DfsSimpleType.Float);
            item1.SetValueType(DataValueType.Instantaneous);
            item1.SetAxis(factory.CreateAxisEqD0());
            item1.SetReferenceCoordinates(1f, 2f, 3f);
            builder.AddDynamicItem(item1.GetDynamicItemInfo());

            DfsDynamicItemBuilder item2 = builder.CreateDynamicItemBuilder();

            item2.Set("WaterDepth item", eumQuantity.Create(eumItem.eumIWaterDepth, eumUnit.eumUmeter),
                      DfsSimpleType.Float);
            item2.SetValueType(DataValueType.Instantaneous);
            item2.SetAxis(factory.CreateAxisEqD0());
            item2.SetReferenceCoordinates(1f, 2f, 3f);
            builder.AddDynamicItem(item2.GetDynamicItemInfo());

            // Create file
            builder.CreateFile(filename);
            IDfsFile file = builder.GetFile();

            // Time is not important, since it is equidistant
            double[] times = new double[10];
            double[,] values = new double[10, 2];

            // Write data to file
            values[0, 0] = 0f;   // water level
            values[0, 1] = 100f; // water depth
            values[1, 0] = 1f;   // water level
            values[1, 1] = 101f; // water depth
            values[2, 0] = 2f;   // water level
            values[2, 1] = 102f; // water depth
            values[3, 0] = 3f;   // etc...
            values[3, 1] = 103f;
            values[4, 0] = 4f;
            values[4, 1] = 104f;
            values[5, 0] = 5f;
            values[5, 1] = 105f;
            values[6, 0] = 10f;
            values[6, 1] = 110f;
            values[7, 0] = 11f;
            values[7, 1] = 111f;
            values[8, 0] = 12f;
            values[8, 1] = 112f;
            values[9, 0] = 13f;
            values[9, 1] = 113f;

            DHI.Generic.MikeZero.DFS.dfs0.Dfs0Util.WriteDfs0DataDouble(file, times, values);

            file.Close();
        }
Esempio n. 7
0
        /// <summary>
        /// Creates a dfs0 file, with an equidistant time axis and one dynamic item.
        /// <para>
        /// It uses the generic <see cref="DfsBuilder"/>, since currently no specialized
        /// builder exists for the dfs0 files.
        /// </para>
        /// </summary>
        /// <param name="filename">Name of new file</param>
        /// <param name="calendarAxis">boolean specifying whether the temporal axis should be a calendar axis or a time axis</param>
        public static void CreateDfs0File(string filename, bool calendarAxis)
        {
            DfsFactory factory = new DfsFactory();
            DfsBuilder builder = DfsBuilder.Create("TemporalAxisTest", "dfs Timeseries Bridge", 10000);

            // Set up file header
            builder.SetDataType(1);
            builder.SetGeographicalProjection(factory.CreateProjectionUndefined());
            if (calendarAxis)
            {
                builder.SetTemporalAxis(factory.CreateTemporalEqCalendarAxis(eumUnit.eumUsec, new DateTime(2010, 01, 04, 12, 34, 00), 4, 10));
            }
            else
            {
                builder.SetTemporalAxis(factory.CreateTemporalEqTimeAxis(eumUnit.eumUsec, 3, 10));
            }
            builder.SetItemStatisticsType(StatType.RegularStat);

            // Set up first item
            DfsDynamicItemBuilder item1 = builder.CreateDynamicItemBuilder();

            item1.Set("WaterLevel item", eumQuantity.Create(eumItem.eumIWaterLevel, eumUnit.eumUmeter),
                      DfsSimpleType.Float);
            item1.SetValueType(DataValueType.Instantaneous);
            item1.SetAxis(factory.CreateAxisEqD0());
            item1.SetReferenceCoordinates(1f, 2f, 3f);
            builder.AddDynamicItem(item1.GetDynamicItemInfo());

            DfsDynamicItemBuilder item2 = builder.CreateDynamicItemBuilder();

            item2.Set("WaterDepth item", eumQuantity.Create(eumItem.eumIWaterDepth, eumUnit.eumUmeter),
                      DfsSimpleType.Float);
            item2.SetValueType(DataValueType.Instantaneous);
            item2.SetAxis(factory.CreateAxisEqD0());
            item2.SetReferenceCoordinates(1f, 2f, 3f);
            builder.AddDynamicItem(item2.GetDynamicItemInfo());

            // Create file
            builder.CreateFile(filename);
            IDfsFile file = builder.GetFile();

            // Write data to file
            file.WriteItemTimeStepNext(0, new float[] { 0f });   // water level
            file.WriteItemTimeStepNext(0, new float[] { 100f }); // water depth
            file.WriteItemTimeStepNext(0, new float[] { 1f });   // water level
            file.WriteItemTimeStepNext(0, new float[] { 101f }); // water depth
            file.WriteItemTimeStepNext(0, new float[] { 2f });   // water level
            file.WriteItemTimeStepNext(0, new float[] { 102f }); // water depth
            file.WriteItemTimeStepNext(0, new float[] { 3f });   // etc...
            file.WriteItemTimeStepNext(0, new float[] { 103f });
            file.WriteItemTimeStepNext(0, new float[] { 4f });
            file.WriteItemTimeStepNext(0, new float[] { 104f });
            file.WriteItemTimeStepNext(0, new float[] { 5f });
            file.WriteItemTimeStepNext(0, new float[] { 105f });
            file.WriteItemTimeStepNext(0, new float[] { 10f });
            file.WriteItemTimeStepNext(0, new float[] { 110f });
            file.WriteItemTimeStepNext(0, new float[] { 11f });
            file.WriteItemTimeStepNext(0, new float[] { 111f });
            file.WriteItemTimeStepNext(0, new float[] { 12f });
            file.WriteItemTimeStepNext(0, new float[] { 112f });
            file.WriteItemTimeStepNext(0, new float[] { 13f });
            file.WriteItemTimeStepNext(0, new float[] { 113f });

            file.Close();
        }
Esempio n. 8
0
        ///
        /// <param name="fileName">Output DFS0 file path</param>
        /// <param name="pi">Memory data structure containing TS</param>
        /// <param name="list">List of TS identification selecting  TS to write in file.
        /// </param>
        /// <param name="startTime">Date/time of first time step to be written to
        /// file</param>
        /// <param name="endTime">Date/time of last time step to be written to
        /// file</param>
        /// <param name="parameterType"></param>
        private void  _WriteOneFile(string fileName, PI pi, IList <TsIdentification> list, DateTime startTime, DateTime endTime, string parameterType)
        {
            var allTimeSteps = new List <DateTime>();

            foreach (var ident in list)
            {
                var tsList = pi.GetTS(ident);
                foreach (var ts in tsList)
                {
                    for (int i = 0; i < ts.Values.Count; i++)
                    {
                        foreach (var value in ts.Values.Keys)
                        {
                            if ((value >= startTime) && (value <= endTime))
                            {
                                if (!allTimeSteps.Contains(value))
                                {
                                    allTimeSteps.Add(value);
                                }
                            }
                        }
                    }
                }
            }
            allTimeSteps.Sort();

            var        fullTsList = new List <TimeSeries>();
            DfsFactory factory    = new DfsFactory();
            DfsBuilder builder    = DfsBuilder.Create("FEWS Adaptor", "FEWS Adaptor - Dfs0 writer", 10000);

            builder.SetItemStatisticsType(StatType.RegularStat);
            builder.SetDataType(0);
            builder.SetGeographicalProjection(factory.CreateProjectionUndefined());
            builder.SetItemStatisticsType(StatType.RegularStat);
            IDfsTemporalAxis temporalAxis = factory.CreateTemporalNonEqCalendarAxis(DHI.Generic.MikeZero.eumUnit.eumUsec, allTimeSteps[0]);

            builder.SetTemporalAxis(temporalAxis);
            foreach (var ident in list)
            {
                var tsList = pi.GetTS(ident);
                foreach (var ts in tsList)
                {
                    DfsDynamicItemBuilder item = builder.CreateDynamicItemBuilder();
                    var itemEnum = eumItem.eumIItemUndefined;
                    var unitEum  = eumUnit.eumUUnitUndefined;
                    var array    = ts.ParameterId.Split(';');
                    var itemStr  = array[0];
                    var unitStr  = string.Empty;
                    if (array.Count() > 1)
                    {
                        unitStr = array[1];
                    }
                    if (!Enum.TryParse(itemStr, true, out itemEnum))
                    {
                        itemEnum = eumItem.eumIItemUndefined;
                    }
                    if (!Enum.TryParse(unitStr, true, out unitEum))
                    {
                        unitEum = eumUnit.eumUUnitUndefined;
                    }
                    item.Set(ts.LocationId, eumQuantity.Create(itemEnum, unitEum), DfsSimpleType.Float);
                    if (string.IsNullOrEmpty(parameterType))
                    {
                        item.SetValueType(DataValueType.Instantaneous);
                    }
                    else
                    {
                        switch (parameterType.ToLower())
                        {
                        case "instantaneous":
                            item.SetValueType(DataValueType.Instantaneous);
                            break;

                        case "accumulated":
                            item.SetValueType(DataValueType.Accumulated);
                            break;

                        case "meanstepbackward":
                            item.SetValueType(DataValueType.MeanStepBackward);
                            break;

                        case "meanstepforward":
                            item.SetValueType(DataValueType.MeanStepForward);
                            break;

                        case "stepaccumulated":
                            item.SetValueType(DataValueType.StepAccumulated);
                            break;

                        default:
                            item.SetValueType(DataValueType.Instantaneous);
                            break;
                        }
                    }
                    item.SetAxis(factory.CreateAxisEqD0());
                    builder.AddDynamicItem(item.GetDynamicItemInfo());
                    fullTsList.Add(ts);
                }
            }
            builder.CreateFile(fileName);
            using (IDfsFile file = builder.GetFile())
            {
                if (fullTsList[0].MissVal.HasValue)
                {
                    file.FileInfo.DeleteValueFloat  = (float)fullTsList[0].MissVal.Value;
                    file.FileInfo.DeleteValueDouble = fullTsList[0].MissVal.Value;
                }
                else
                {
                    file.FileInfo.DeleteValueFloat  = -9999.9f;
                    file.FileInfo.DeleteValueDouble = -9999.9;
                }
                float[] oneStepValues = new float[1];
                double  noValue       = file.FileInfo.DeleteValueFloat;
                for (int i = 0; i < allTimeSteps.Count; i++)
                {
                    double doubleTime    = (allTimeSteps[i] - allTimeSteps[0]).TotalSeconds;
                    bool   writeTimeStep = false;
                    int    k             = 0;
                    while (k < fullTsList.Count && !writeTimeStep)
                    {
                        double value = fullTsList[k].GetValue(allTimeSteps[i]);
                        writeTimeStep = (Math.Abs(value - noValue) > double.Epsilon);
                        k++;
                    }
                    if (writeTimeStep)
                    {
                        for (int j = 0; j < fullTsList.Count; j++)
                        {
                            double value = file.FileInfo.DeleteValueFloat;
                            value            = fullTsList[j].GetValue(allTimeSteps[i]);
                            oneStepValues[0] = (float)value;
                            file.WriteItemTimeStepNext(doubleTime, oneStepValues);
                        }
                    }
                }
            }
            Logger.AddLog(Logger.TypeEnum.Info, $"File {fileName} written successfully");
        }
Esempio n. 9
0
        /// <summary>
        /// Create DFS2 file with iterpolated values from the 3x3 quadrangles,
        /// with various delete values applied in each time step.
        /// </summary>
        public void DeleteValueVisualDfs2DoTest()
        {
            string   meshFileName = UnitTestHelper.TestDataDir + "small.mesh";
            MeshFile file         = MeshFile.ReadMesh(meshFileName);

            _meshVisual = file.ToSMeshData();

            DfsFactory  factory     = new DfsFactory();
            Dfs2Builder dfs2Builder = new Dfs2Builder();

            dfs2Builder.SetDataType(0);
            dfs2Builder.SetTemporalAxis(factory.CreateTemporalEqTimeAxis(eumUnit.eumUsec, 0, 1));
            dfs2Builder.SetSpatialAxis(factory.CreateAxisEqD2(eumUnit.eumUmeter, 80, 0, 0.01, 80, 0, 0.01));
            dfs2Builder.SetGeographicalProjection(factory.CreateProjectionUndefined());

            dfs2Builder.AddDynamicItem("DeleteValueSmooth", eumQuantity.UnDefined, DfsSimpleType.Float, DataValueType.Instantaneous);
            dfs2Builder.AddDynamicItem("DeleteValueBox", eumQuantity.UnDefined, DfsSimpleType.Float, DataValueType.Instantaneous);
            dfs2Builder.DeleteValueFloat = (float)d;

            dfs2Builder.CreateFile(UnitTestHelper.TestDataDir + "test_InterpTri.dfs2");

            Dfs2File dfs2File = dfs2Builder.GetFile();

            // Calculate interpolation weights
            MeshWeights[][] weights = new MeshWeights[80][];
            for (int j = 0; j < 80; j++)
            {
                double y = 0.2 + 0.01 * j + 0.005;
                weights[j] = new MeshWeights[80];
                for (int i = 0; i < 80; i++)
                {
                    double x = 0.4 + 0.01 * i + 0.005;

                    weights[j][i].QuadWeights = InterpQuadrangle.UndefinedWeights();
                    weights[j][i].TriWeights  = InterpTriangle.UndefinedWeights();
                    for (int ielmt = 0; ielmt < _meshVisual.NumberOfElements; ielmt++)
                    {
                        var elmtNodes = _meshVisual.ElementTable[ielmt];
                        if (elmtNodes.Length == 4)
                        {
                            double x0 = _meshVisual.X[elmtNodes[0]];
                            double x1 = _meshVisual.X[elmtNodes[1]];
                            double x2 = _meshVisual.X[elmtNodes[2]];
                            double x3 = _meshVisual.X[elmtNodes[3]];
                            double y0 = _meshVisual.Y[elmtNodes[0]];
                            double y1 = _meshVisual.Y[elmtNodes[1]];
                            double y2 = _meshVisual.Y[elmtNodes[2]];
                            double y3 = _meshVisual.Y[elmtNodes[3]];
                            if (MeshExtensions.IsPointInsideQuadrangle(x, y, x0, y0, x1, y1, x2, y2, x3, y3))
                            {
                                weights[j][i].ElmtIndex   = ielmt;
                                weights[j][i].QuadWeights = InterpQuadrangle.InterpolationWeights(x, y, x0, y0, x1, y1, x2, y2, x3, y3);
                            }
                        }
                        else
                        {
                            double x0 = _meshVisual.X[elmtNodes[0]];
                            double x1 = _meshVisual.X[elmtNodes[1]];
                            double x2 = _meshVisual.X[elmtNodes[2]];
                            double y0 = _meshVisual.Y[elmtNodes[0]];
                            double y1 = _meshVisual.Y[elmtNodes[1]];
                            double y2 = _meshVisual.Y[elmtNodes[2]];
                            if (MeshExtensions.IsPointInsideTriangle(x, y, x0, y0, x1, y1, x2, y2))
                            {
                                weights[j][i].ElmtIndex  = ielmt;
                                weights[j][i].TriWeights = InterpTriangle.InterpolationWeights(x, y, x0, y0, x1, y1, x2, y2);
                            }
                        }
                    }
                }
            }

            // Original center quadrangle values
            double z4 = _meshVisual.Z[3];
            double z6 = _meshVisual.Z[5];
            double z8 = _meshVisual.Z[7];

            float[] data = new float[80 * 80];
            VisualDfs2Data(weights, data, z4, z6, z8, true); dfs2File.WriteItemTimeStepNext(0, data);
            VisualDfs2Data(weights, data, z4, z6, z8, false); dfs2File.WriteItemTimeStepNext(0, data);

            // One delete value
            VisualDfs2Data(weights, data, d, z6, z8, true); dfs2File.WriteItemTimeStepNext(0, data);
            VisualDfs2Data(weights, data, d, z6, z8, false); dfs2File.WriteItemTimeStepNext(0, data);
            VisualDfs2Data(weights, data, z4, d, z8, true); dfs2File.WriteItemTimeStepNext(0, data);
            VisualDfs2Data(weights, data, z4, d, z8, false); dfs2File.WriteItemTimeStepNext(0, data);
            VisualDfs2Data(weights, data, z4, z6, d, true);  dfs2File.WriteItemTimeStepNext(0, data);
            VisualDfs2Data(weights, data, z4, z6, d, false); dfs2File.WriteItemTimeStepNext(0, data);

            // Two adjacent delete values
            VisualDfs2Data(weights, data, d, d, z8, true);  dfs2File.WriteItemTimeStepNext(0, data);
            VisualDfs2Data(weights, data, d, d, z8, false); dfs2File.WriteItemTimeStepNext(0, data);
            VisualDfs2Data(weights, data, z4, d, d, true);  dfs2File.WriteItemTimeStepNext(0, data);
            VisualDfs2Data(weights, data, z4, d, d, false); dfs2File.WriteItemTimeStepNext(0, data);
            VisualDfs2Data(weights, data, d, z6, d, true);  dfs2File.WriteItemTimeStepNext(0, data);
            VisualDfs2Data(weights, data, d, z6, d, false); dfs2File.WriteItemTimeStepNext(0, data);

            // All delete values
            VisualDfs2Data(weights, data, d, d, d, true);     dfs2File.WriteItemTimeStepNext(0, data);
            VisualDfs2Data(weights, data, d, d, d, false);    dfs2File.WriteItemTimeStepNext(0, data);

            dfs2File.Close();
        }