如何将MIke的结果转成Tecplot格式--基于python

1. 简介

Mike是工程和科研领域常用的水动力计算模型,其本身自带了后处理作图功能,但其作图风格往往不是我们想要的,Tecplot是由美国Tecplot公司推出的功能强大的数据分析和可视化处理软件,常被用于海洋模型结果绘图,因此,如何将Mike结果转为tecplot可读的格式,是一个值得思考的问题。

2. 源程序

首先,导入需要的模块:

from mikeio import Dfsu
import numpy as np

读取mike文件中的变量,在此我们以有效波高和悬沙浓度为例,并读取文件的网格信息:

dfs=Dfsu('.\\test.dfsu',)
ds = dfs.read(items=['Total SSC','Wave height'])
e_num = dfs.n_elements   #单元信息
n_num = dfs.n_nodes   #节点信息
x = dfs.node_coordinates[:,0]
y = dfs.node_coordinates[:,1]
z = dfs.node_coordinates[:,2]
e = dfs.element_table   #单元网格构成
data0 = np.array(ds.data)   #Tecplot不识别nan,将mike结果中的nan代替为0
data0[np.isnan(data0)]=0

建立Tecplot文件并向其中写入数据,其中文件格式为6列,但Tecplot并不要求一定是6列,此处输出程序有待优化:

f = open('test.tec','w')
title2='VARIABLES ="Xp","Yp","Zp","Total SSC","Wave height"'
f.write(title2+'\n')
for i in range(dfs.n_timesteps):   
    print(i)
    title3 = 'ZONE T ="P_'+str(i)+ '" N='+str(n_num)+ ' E='+str(e_num)
    f.write(title3+'\n')
    title4 = 'ZONETYPE=FETriangle,DATAPACKING=BLOCK '
    f.write(title4+'\n')
    f.write('VARLOCATION=([1-3]=NODAL,[4-5]=CELLCENTERED) \n')   #1~3变量为节点,4~5变量为单元
    for j in range(0,n_num,6):
        for k in range(6):
            if j+k<n_num:
                f.write('%e   ' % x[j+k])
                f.write(' ')
        f.write('\n')
    for j in range(0,n_num,6):
        for k in range(6):
            if j+k<n_num:
                f.write('%e   ' % y[j+k])
                f.write(' ')
        f.write('\n')
    for j in range(0,n_num,6):
        for k in range(6):
            if j+k<n_num:
                f.write('%e   ' % z[j+k])
                f.write(' ')
        f.write('\n')
    for j in range(0,e_num,6):
        for k in range(6):
            if j+k<e_num:
                f.write('%e   ' % data0[0,i,j+k])
                f.write(' ')
        f.write('\n')
    for j in range(0,e_num,6):
        for k in range(6):
            if j+k<e_num:
                f.write('%e   ' % data0[1,i,j+k])
                f.write(' ')
        f.write('\n')
    for j in range(e_num):
        f.write(str(e[j][0]+1)+' '+str(e[j][1]+1)+' '+str(e[j][2]+1)+'\n')
f.close()

值得注意的是,上述程序中,x,y,z为节点变量,有效波高和悬沙浓度为单元变量。

3. 处理结果

Mike的绘图效果如下图所示:
在这里插入图片描述

将文件处理后用Tecplot打开并调节相关参数后:
在这里插入图片描述

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Anywayyyyy.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值