【Delft3D FM数据后处理系列】1. 绘制模型网格

        平时在学习Delft3D FM的时候,发现网上很多资料主要是讲如何运行模型,鲜有讲如何对结果进行可视化的。虽然Delft3D有quickplot工具,但对于科研绘图来说还远远不够,个人感觉只适合于简单的查看数据。此外,Deltares的OpenEarthTools虽然也有处理Delft3D数据的程序,但是那个我个人目前还没成功使用过,程序报错后很难处理。因此,我尝试自己写处理Delft3D数据的程序,方便后面出图与修改。主要用到的工具是Matlab和Surfer。

        注意:这个系列面向的是刚接触Delft3D FM的朋友,文章用到的都是十分基础的命令及操作,如果大家对Delft3D之类的东西已经十分熟悉的话请降低期待值观看。

        这个系列第一节介绍如何绘制模型网格。使用数值模拟软件出图的时候很多时候都要绘制模型网格图(下图摘自Ji Xiaomei et al, 2022)。这种图我们可以通过读取map.nc文件中的某些变量再利用Matlab的patch命令画出来。代码如下:

% 用来处理Delft3D输出的Map.nc文件,画网格图
clear,clc;
addpath D:\Delft3DFM\BoluoCase

%% 读取数据
% ncdisp('Boluo2map.nc')
mapfilename = 'Boluo2map.nc';
lon = ncread(mapfilename,'mesh2d_node_x');
lat = ncread(mapfilename,'mesh2d_node_y');
FaceConnect = ncread(mapfilename,'mesh2d_face_nodes');

sn1 = find(isnan(FaceConnect(4,:)));
sn2 = find(~isnan(FaceConnect(4,:)));

%% 画图
patch('Faces',FaceConnect(1:4,sn2)','Vertices',[lon lat],...
    'EdgeColor','b','FaceColor','none');
hold on
patch('Faces',FaceConnect(1:3,sn1)','Vertices',[lon lat],...
    'EdgeColor','b','FaceColor','none');

运行结果如下:

        虽然这图目前看起来不怎么样,但是后面大家可以根据自己的需要进行调整。个人感觉比起直接在Delft3D FM的GUI里面截图,用Matlab处理更便于后续调整。最后将局部图放大再利用PPT即可做出上面文章中的图。

        如果大家有Surfer底图(BLN文件),也可以将底图插进去,使网格图更好看一些。插入底图后图片如下:

局部放大后:

        BLN文件读取的代码:

function BLNread(blnfile)

fid = fopen(blnfile);
while(~feof(fid))
    s = fgetl(fid);
    str = split(s,',');
    num = str2num(str{1,1});
    a = fscanf(fid,'%f,%f',[2 num]);
    fgetl(fid);

    patch(a(1,:),a(2,:),[0.75 0.75 0.75],'linewidth',1)
    hold on
end

fclose(fid);
end

        以上为本文全部内容。谢谢您看到这里,欢迎在评论区友善讨论!

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值