表怕,这个博客只有题目是英文的……
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也是按照单元循环顺序进行循环(先由底至表在三棱柱内循环,后在水平方向循环)。