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);
}
工程師必備
- 項目客服
- 培訓客服
- 平臺客服
TOP




















