0.背景

最近需要在CFD-POST软件中做一些fluent后处理出图,由于出图量较大,就想到了通过写脚本的方式批量导出需要的图片,于是有了这篇。

CFD-POST功能非常强大,了解原理之后非常好上手,更重要的是CFD-POST提供了非常便捷的参数化接口。

1.CFD-POST工作流程

我理解的流程大概如下:

  1. 导入fluent中计算数据( .cas文件或 .dat文件)

  2.  生成截面用来放置图像

  3. 生成流场\流线\温度场等

  4.  生成视窗,调整视角

  5. 导出图像

其实以上的每一个步骤都可以用脚本来实现,但是对于一般使用而言,只用导入一次数据,然后在软件内手动完成好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
&gt;load filename=$my_filename, force_reload = true;
# 数据导入完成

# 我在每个数据文件下有多个视图需要导出,因此有另一层循环
!for (my $figure = 1; $figure &lt; 6; $figure++) {
  # 选择视图,即Figure 1 ,Figure 2等,这些Figure需要提前把角度设置好,方便统一导出
  &gt;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
  &gt;print
!}

!}
!}