表怕,這個博客只有題目是英文的……
Matlab toolbox 安裝
去DHI官網下載最新的MikeSDK2014與Matlab toolbox,下載好后安裝MikeSDK2014,注意電腦上不能有其他版本的Mike軟件。
安裝成功后進入解壓縮后的Matlab toolbox文件夾MatlabDfsUtil內,運行腳本MatlabDfsUtilBuild.bat,若腳本成功運行,則Toolbox安裝成功。注意檢查SDK安裝路徑與MatlabDfsUtilBuild.bat中內容是否一致,如默認路徑為:
set csc=C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe
set sdkBin=C:\Program Files (x86)\DHI\2014\MIKE SDK\bin
%csc% /t:library /out:MatlabDfsUtil.2014.dll /r:"%sdkBin%\DHI.Generic.MikeZero.DFS.dll" /r:"%sdkBin%\DHI.Generic.MikeZero.EUM.dll" MatlabDfsUtil.cs
Mike結果讀取
說明:這里以Mike3 FM計算為例,使用的是非結構化三角形網格,垂向采用6層sigma網格
1. 地形
作為地形數據最主要的有兩個:一是x、y節點坐標(Node coordinates);二為節點組成單元信息(element table)。
首先Mike使用三角形網格計算時,其計算的單元體為6頂點的三棱柱體,單元體編號循環遍歷順序為:從底層到表層,然后再水平方向循環。
所以,在Mike結果中單元體總數應該為[水平單元個數X垂向分層數],而表示節點組成單元信息的矩陣EToV行X列大小則為[單元體總數X 6]。
另外,三棱柱單元內6個節點循環順序是從底部三角形三個頂點開始,頂部三角形三個頂點結束,如下圖所示:
下面介紹如何獲得有關數據:
_________________________________________________________
NET.addAssembly('DHI.Generic.MikeZero.DFS'); import DHI.Generic.MikeZero.DFS.*; dfsu3 = DfsFileFactory.DfsuFileOpen('winter_3D.dfsu'); % Node coordinates xn = double(dfsu3.X); yn = double(dfsu3.Y); zn = double(dfsu3.Z); % Create element table in Matlab format EToV = mzNetFromElmtArray(dfsu3.ElementTable);
_________________________________________________________
上面的dfsu就是使用Matlab toolbox函數讀取的計算文件結構體,這個結構體中單元節點信息儲存並非Matlab直接可讀格式,需要調用函數mzNetFromElmtArray進行轉換。
2. 計算結果變量相關
計算結果變量信息,包括變量名與單位、變量個數、變量數據讀取等方面。
變量個數:dfsu3.ItemInfo.Count format: integer
變量名與單位:dfsu3.ItemInfo.Item format: cell{ 0 ~ dfsu3.ItemInfo.Count-1 }
dfsu3.ItemInfo.Item(varid).Quantity.Unit
dfsu3.ItemInfo.Item(varid).Quantity.UnitAbbreviation
變量數據讀取:varData = double(dfsu3.ReadItemTimeStep(varid,iTime).Data);
Format: double[ 1 x elementNum ];
注意,這里varid與iTime分別代表變量序號與時間步,而提取得到的數據varData也是按照單元循環順序進行循環(先由底至表在三棱柱內循環,后在水平方向循環)。