表怕,这个博客只有题目是英文的……
Matlab toolbox 安装
去DHI官网下载最新的MikeSDK2014与Matlab
toolbox,下载好后安装MikeSDK2014,注意电脑上不能有其他版本的Mike软件。
安装成功后进入解压缩后的Matlab
toolbox文件夹MatlabDfsUtil内,运行脚本MatlabDfsUtilBuild.bat,若脚本成功运行,则Toolbox安装成功。注意检查SDK安装路径与MatlabDfsUtilBuild.bat中内容是否一致,如默认路径为:
set
csc=C:WindowsMicrosoft.NETFrameworkv4.0.30319csc.exe
set sdkBin=C:Program Files (x86)DHI2014MIKE SDKbin
%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网格
地形
作为地形数据最主要的有两个:一是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进行转换。
计算结果变量相关
计算结果变量信息,包括变量名与单位、变量个数、变量数据读取等方面。
变量个数: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也是按照单元循环顺序进行循环(先由底至表在三棱柱内循环,后在水平方向循环)。