借助matlab批量处理OpenFOAM-CFD数据

CFD一个计算的周期,前处理、计算、后处理都要花不少的时间。其中,计算主要由电脑负责,人在一边喝喝茶就可以了(bushi)。人需要花时间的地方,莫过于前处理和后处理了。在后处理的过程中,我们要提取数据,并进行一定的处理(取平均、均方根),然后作图,和其他结果比较等。这些操作相对机械简单,但如果数据一多,处理起来就很繁琐了。这时候,运用程序或脚本来帮我们处理就显得非常重要,就能省下很多时间喝茶了!

matlab文件已开源在gitee上,欢迎下载使用:

https://gitee.com/chen-jingle219/matlab-data-processing-script/settings

处理过程讲解

给定一组OpenFOAM算例文件(结构基本相同的),每一个文件夹内都有必备的文件。

 那么,我们需要做的事情就是读取每一个算例里面的升阻力系数,然后截取需要的部分作处理。

首先使用dir指令读取所有文件夹:

subdir=dir(fullfile(pwd,'viv*'));

然后,对于每一个子文件夹,都要设置coefficient.dat的地址:

timePath=fullfile(pwd,subdir(i).name,'postProcessing','forceCoeffs');

需要注意的是,OpenFOAM里可能会输出多个时间点的forceCoeff,也就是说forceCoeff里面会有好几个文件夹存放coefficient.dat。那么,默认找时间最靠后的那一个:

timewanted=num2str(max(str2double(timewanted),str2double(timedir(j).name)));

最后用importdata函数来读取数据:

forceCoeff_cell{1,i}=importdata(str);

这样做有一个好处就是,正常导入升阻力系数时需要勾选需要的数据列,且取消带有字符的部分:

 就需要鼠标一点一点消掉,十分麻烦。importdata会把数据分成字符和数字两部分,读取起来也十分方便:

Cd=forceCoeff_cell{1,i}.data(:,2);

其他情况也类似。最后,把平均阻力系数存放在预先定义好的results矩阵里:

results(i,2)=mean(Cd);

最后输出的结果是这样的:

至于每列代表什么,都可自己定义。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片