Delft3d結構化網格轉MIKE非結構化網格存儲

        /// 將delft網格及水深文件轉成DHI的mesh文件

        ///

        /// delft網格文件

        /// delft水深文件

        /// DHI的mesh文件

        public static void CM2FM(string grdfile,string elefile,string meshfile)

        {

            StreamReader sr = new StreamReader(grdfile);

            System.Text.RegularExpressions.Regex regx = new System.Text.RegularExpressions.Regex(@" +|[\r\n]+|ETA=");

            string line = sr.ReadLine();

            while ((line.StartsWith("*")))

                line = sr.ReadLine();

            line =sr.ReadLine();

            string[] tmp = regx.Split(line.Trim());

            sr.ReadLine();

 

            int ig = int.Parse(tmp[0]);

            int jg = int.Parse(tmp[1]);

            double[,] xpt = new double[ig, jg];

            double[,] ypt = new double[ig, jg];

            int[,] itag = new int[ig, jg];

            List<</SPAN>List<</SPAN>int>> cells = new List<</SPAN>List<</SPAN>int>>();

            List<</SPAN>double> nodesx = new List<</SPAN>double>();

            List<</SPAN>double> nodesy = new List<</SPAN>double>();

            List<</SPAN>double> nodesEle = new List<</SPAN>double>();

 

            List<</SPAN>string> allsx = regx.Split(sr.ReadToEnd().Trim()).ToList<</SPAN>string>();

            var q = (from r in allsx

                     where r.ToString() != ""

                     select r).ToList<</SPAN>string>();

            allsx = q;

            sr.Close();

 

            //讀取水深數據

            sr = new StreamReader(elefile);            

            List<</SPAN>string> elevations = regx.Split(sr.ReadToEnd().Trim()).ToList<</SPAN>string>();

            q = (from r in elevations

                 where r.ToString() != ""

                 select r).ToList<</SPAN>string>();            

            elevations = q;

            sr.Close();

 

            int idx = 1;

            int idx2=0;

            for (int j = 0; j < jg; j++)

            {

                for (int i = 0; i < ig; i++)

                {

                    xpt[i, j] = double.Parse(allsx[ig * j + i +j+ 1].Trim());

                    if (xpt[i, j] == double.Parse("0.000"))

                    {

                        itag[i, j] = -1;

                    }

                    else

                    {

                        itag[i, j] = idx;

                        nodesx.Add(xpt[i, j]);

                        

                        if(j==0)

                            nodesEle.Add(double.Parse(elevations[i].Trim()));

                        else

                            nodesEle.Add(double.Parse(elevations[ig * j + i + j].Trim()));

                        idx++;

                    }

                    idx2 = ig * j + i + j + 1;

                }

            }

 

            for (int j = 0; j < jg; j++)

            {

                for (int i = 0; i < ig; i++)

                {

                    ypt[i, j] = double.Parse(allsx[ig * j + i + j + 1 + idx2+1].Trim());

                    if (ypt[i, j] != double.Parse("0.0000"))

                    {

                        nodesy.Add(ypt[i, j]);

                    }

                }

            }

 

            for (int j = 0; j < jg - 1; j++)

            {

                for (int i = 0; i < ig - 1; i++)

                {

                    if (itag[i, j] > -1 && itag[i, j + 1] > -1 && itag[i + 1, j + 1] > -1 && itag[i + 1, j] > -1)

                    {

                        List<</SPAN>int> tmpp = new List<</SPAN>int>();

                        tmpp.Add(itag[i, j]);

                        tmpp.Add(itag[i, j + 1]);

                        tmpp.Add(itag[i + 1, j + 1]);

                        tmpp.Add(itag[i + 1, j]);

                        cells.Add(tmpp);

                    }

                    if (itag[i, j] > -1 && itag[i, j + 1] > -1 && itag[i + 1, j + 1] > -1 && itag[i + 1, j] == -1)

                    {

                        //List tmpp = new List();

                        //tmpp.Add(itag[i, j]);

                        //tmpp.Add(itag[i, j + 1]);

                        //tmpp.Add(itag[i + 1, j + 1]);

                        //tmpp.Add(0);

                        //cells.Add(tmpp);

                    }

                   

登錄后免費查看全文
立即登錄
App下載
技術鄰APP
工程師必備
  • 項目客服
  • 培訓客服
  • 平臺客服

TOP

3
2