韋 瑋
(安徽省水利水電勘測設(shè)計(jì)研究總院有限公司 合肥 230088)
SMS 全稱Surface Water Modeling System,是美國陸軍工程兵水利工程實(shí)驗(yàn)室和揚(yáng)·伯明翰大學(xué)等合作開發(fā)的水體流場、濃度場模擬軟件,它由FESWMS-2DH、RMA2、RMA4、SED2D 等計(jì)算模塊組成,包括二維有限元、二維有限差分、三維有限元和一維建模工具。MIKE 軟件是丹麥水資源及水環(huán)境研究所(DHI)開發(fā)的水動(dòng)力、水文、水環(huán)境、水生態(tài)、水資源等多模塊數(shù)值模擬軟件,能夠進(jìn)行降雨、產(chǎn)匯流、河網(wǎng)、城市、河口、近海、深海等不同類別、區(qū)域的一維到三維數(shù)值模擬。二維水動(dòng)力模塊是很多類型數(shù)值模擬的基礎(chǔ)模塊,網(wǎng)格的質(zhì)量直接影響計(jì)算的效率、精度甚至成敗。一般來說,SMS 自動(dòng)生成的網(wǎng)格對于不規(guī)則邊界的適應(yīng)性相對更強(qiáng),對灘槽等地形界限反應(yīng)更加清晰精確,且三維展示功能更加強(qiáng)大,因此不管最終數(shù)值模擬是基于哪個(gè)模擬軟件,不少用戶偏向于用SMS 自動(dòng)剖分和優(yōu)化網(wǎng)格。SMS 和MIKE 這兩種數(shù)模軟件在國內(nèi)均得到廣泛使用,經(jīng)常要將基于其中一個(gè)模擬軟件開發(fā)的二維模型移植到另一個(gè)模擬軟件環(huán)境中,或者利用其中一個(gè)模擬軟件制作的二維網(wǎng)格,移植到另一個(gè)模擬軟件中直接使用,或作進(jìn)一步編輯修改,這些都要對SMS 與MIKE 模擬軟件二維網(wǎng)格進(jìn)行相互轉(zhuǎn)換。
SMS 的網(wǎng)格文件可以存儲(chǔ)的拓展名可以為2DM、GRD、GEO 等幾種類型,這里以常用的2DM文件說明。2DM 文件包含文件標(biāo)識(shí)符、單元信息、節(jié)點(diǎn)信息、邊界信息等四個(gè)部分。文件標(biāo)識(shí)符位于文件首行,都為MESH2D。單元信息的行數(shù)與單元數(shù)相同,每行對應(yīng)一個(gè)單元,從左到右依次為單元類型、單元編號(hào)、單元各節(jié)點(diǎn)編號(hào)、單元特征符等;單元類型一般分為E3T(三角網(wǎng)格)或E4Q(四點(diǎn)四邊形網(wǎng)格),對應(yīng)的節(jié)點(diǎn)編號(hào)分別有三列和四列數(shù)據(jù);單元特征符都是1。節(jié)點(diǎn)信息的行數(shù)與節(jié)點(diǎn)數(shù)量相同,每行對應(yīng)一個(gè)節(jié)點(diǎn),從左到右分別為節(jié)點(diǎn)標(biāo)識(shí)符ND、節(jié)點(diǎn)編號(hào)、節(jié)點(diǎn)X、Y、Z 坐標(biāo)。邊界信息包含全部網(wǎng)格開邊界,每一行對應(yīng)一條開邊界,從左到右分別為邊界標(biāo)識(shí)符NS 及各節(jié)點(diǎn)編號(hào),邊界最后一個(gè)節(jié)點(diǎn)編號(hào)前一般添加負(fù)號(hào)。
MIKE 結(jié)構(gòu)網(wǎng)格文件拓展名為MESH,包含文件頭信息、節(jié)點(diǎn)信息、單元信息三個(gè)部分。文件頭信息位于文件的首行,一般由“1000791000”開頭代表高程及單位,后面接著節(jié)點(diǎn)數(shù)量數(shù)據(jù)和標(biāo)準(zhǔn)坐標(biāo)字符串,如未指定坐標(biāo)系則坐標(biāo)字符串為“NONUTM”。節(jié)點(diǎn)信息行數(shù)與節(jié)點(diǎn)數(shù)量對應(yīng),每行從左到右分別為節(jié)點(diǎn)編號(hào)、X、Y、Z 坐標(biāo)及邊界碼,節(jié)點(diǎn)邊界為0、1 或大于1 自然數(shù),分別代表節(jié)點(diǎn)位于區(qū)域內(nèi)部、陸地邊界或開邊界上。單元信息由單元標(biāo)題行和具體單元數(shù)據(jù)組成;單元標(biāo)題行包含單元數(shù)量、最大節(jié)點(diǎn)數(shù)及類型碼,類型碼為21 或25 分別對應(yīng)全部三角單元或四邊形單元(混合單元);具體單元數(shù)據(jù)行數(shù)與單元數(shù)量對應(yīng),每行從左到右分別為單元編號(hào)及此單元各節(jié)點(diǎn)編號(hào),混合網(wǎng)格文件中三角單元最后節(jié)點(diǎn)編號(hào)為0。
采用C#語言編寫了SMS 與MIKE 二維非結(jié)構(gòu)網(wǎng)格相互轉(zhuǎn)換程序。程序包含網(wǎng)格數(shù)據(jù)讀取、數(shù)據(jù)文件輸出及界面設(shè)計(jì)三個(gè)部分。網(wǎng)格數(shù)據(jù)讀取部分,首先需設(shè)置網(wǎng)格類型、坐標(biāo)信息等變量、包含節(jié)點(diǎn)編號(hào)、坐標(biāo)、邊界屬性的節(jié)點(diǎn)信息可變數(shù)組以及包含單元編號(hào)、單元各節(jié)點(diǎn)編號(hào)的單元信息可變數(shù)組,再采用文本讀取函數(shù)將文件數(shù)據(jù)讀取到內(nèi)存中字符串中,根據(jù)數(shù)據(jù)格式對字符串進(jìn)行逐步分解,最后給各變量及數(shù)組賦值。數(shù)據(jù)文件輸出部分與數(shù)據(jù)讀取部分相反,將各變量及數(shù)組中的數(shù)據(jù)按照文件數(shù)據(jù)格式分部拼接成文本字符串,采用文本輸出函數(shù)寫入到指定文件中。界面設(shè)計(jì)包含輸入輸出文件按鈕及對話框、轉(zhuǎn)換類型、進(jìn)度顯示等,如圖1 所示。
圖1 界面設(shè)計(jì)組成示意圖
需要注意,MIKE 網(wǎng)格文件的邊界信息包含在節(jié)點(diǎn)數(shù)據(jù)中,而SMS 邊界信息需通過獨(dú)立部分呈現(xiàn)。當(dāng)將MIKE 二維網(wǎng)格轉(zhuǎn)換為SMS 網(wǎng)格文件時(shí),需根據(jù)將有相同邊界碼的節(jié)點(diǎn)分別歸為一條邊界,并需根據(jù)整個(gè)網(wǎng)格邊界的節(jié)點(diǎn)排列順序,對統(tǒng)一邊界各節(jié)點(diǎn)編號(hào)的順序重新排序,否則SMS 軟件無法正確識(shí)別邊界條件。
通過解析SMS 和MIKE 兩種水流數(shù)值模擬軟件二維非結(jié)構(gòu)網(wǎng)格文件的數(shù)據(jù)格式,提出了兩種網(wǎng)格文件相互轉(zhuǎn)換的方法以及轉(zhuǎn)換注意事項(xiàng)。利用上述方法開發(fā)的轉(zhuǎn)換軟件可實(shí)現(xiàn)兩種數(shù)值模擬軟件二維網(wǎng)格的快速轉(zhuǎn)換,在數(shù)值模型研發(fā)工作中,為二維模型網(wǎng)格編輯、優(yōu)化及模型移植提供了很大的便利■