• Mike post process with Matlab toolbox


    表怕,这个博客只有题目是英文的……

    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 SDKin

    %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 ];

    注意,这里varidiTime分别代表变量序号与时间步,而提取得到的数据varData也是按照单元循环顺序进行循环(先由底至表在三棱柱内循环,后在水平方向循环)。

  • 相关阅读:
    c/c++基础 输入函数/流
    数据库的码/键
    sql plus笔记
    cmd delete oracle related
    CAN总线
    SAR ADC : 逐次逼近寄存器型(SAR)模数转换器(ADC)
    Cortex-M3寄存器等基础知识
    Cortex-M3知识点
    ARM指令和Thumb指令区别
    8051、ARM、AVR
  • 原文地址:https://www.cnblogs.com/li12242/p/4038853.html
Copyright © 2020-2023  润新知