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);
最后输出的结果是这样的:
至于每列代表什么,都可自己定义。
暂无评论内容