0.背景
最近需要在CFD-POST软件中做一些fluent后处理出图,由于出图量较大,就想到了通过写脚本的方式批量导出需要的图片,于是有了这篇。
CFD-POST功能非常强大,了解原理之后非常好上手,更重要的是CFD-POST提供了非常便捷的参数化接口。
1.CFD-POST工作流程
我理解的流程大概如下:
-
导入fluent中计算数据( .cas文件或 .dat文件)
-
生成截面用来放置图像
-
生成流场\流线\温度场等
-
生成视窗,调整视角
-
导出图像
![]()
其实以上的每一个步骤都可以用脚本来实现,但是对于一般使用而言,只用导入一次数据,然后在软件内手动完成好2, 3, 4步骤, 最后利用脚本不断重复步骤1导入数据和步骤5导出图片的操作就好了. 需要注意的是, 第四步的调整视角, post自带的view1-view4四个视窗并不好用, 建议手动新建figure代替view视窗.
2.CFD-POST编程
cfd-post中有类似于宏录制的功能,可以自己尝试一些关键步骤,再读脚本文件推断代码块负责的功宏录制功能

cfd-post编程使用的是perl语法和自带的程序语法相结合的形式,perl语法负责循环语句条件语句等逻辑判断和变量设置等功能., 而cfd-post的程序语句负责控制程序行为, 如生成面,生成图,导出图等. 以" ! "开头的行才会被cfd-post识别为perl语法, 因此我们写的每一行perl语法都要在开头加上"!", 下面是最终的文件批量导出代码,里面用到的几个perl关键语法是定义参数,定义数组,for循环以及字符串的格式化输出.
3.最终代码
# 定义文件路径变量,我的有多层fluent计算结果,所以有两层路径要循环 !$filepath = "F:/lsj/"; # 定义数组,取数组方式为$file[0] !@file1 = ("W20", "W30", "w40"); !@file2 = ("_Re1","_Re2","_Re3","_Re4","_Re5"); # 导入数据循环外层文件夹,这里的i<10中的10需要你自己决定
!for (my $i = 0; $i < 10; $i++) {
循环内层文件夹
!for (my $j = 0; $j < 5; $j++) {
# 获得完整的文件数据路径字符串 !$my_filename = "$filepath/$file1[$i]/$file1[$i]$file2[$j].dat"; # 定义导出图片存放路径 !$export_path = "$filepath/export_figure/$file1[$i]$file2[$j]"; # 导入文件 DATA READER: Clear All Objects = false Append Results = false Edit Case Names = false Multi Configuration File Load Option = Last Case Open in New View = true Keep Camera Position = true Load Particle Tracks = true Multi Configuration File Load Option = Last Case Construct Variables From Fourier Coefficients = true Open to Compare = false Files to Compare = END >load filename=$my_filename, force_reload = true; # 数据导入完成 # 我在每个数据文件下有多个视图需要导出,因此有另一层循环 !for (my $figure = 1; $figure < 6; $figure++) { # 选择视图,即Figure 1 ,Figure 2等,这些Figure需要提前把角度设置好,方便统一导出 >setViewportView cmd=set, view=/VIEW:Figure $figure, viewport=1; HARDCOPY: Antialiasing = On Hardcopy Filename = $export_path$figure.png Hardcopy Format = png Hardcopy Tolerance = 0.0001 Image Height = 600 Image Scale = 100 Image Width = 600 JPEG Image Quality = 100 Screen Capture = Off Use Screen Size = On White Background = Off END >print !}
!}
!}
