江湖传言:Fluent有4种二次开发模式。
这里所提的二次开发,指的是在Fluent的基础上开发新的功能。Fluent是商用闭源软件,提供给用户的是经过编译了的可执行文件,故用户难以对软件的核心功能进行修改。不过Fluent还是提供了一些接口方便用户对其功能进行扩展。 1 UDF/UDS这是最常见的功能扩展方式。Fluent允许用户利用C语言代码扩充其功能,这包括利用UDF扩充功能,以及利用UDS增添求解器。 UDF在Fluent仿真流程的每一个节点中几乎都可以应用到,如下图所示。
UDF比较常见的用途在于: 进行区域初始化。替代Patch实现更加复杂的局部初始化。 迭代调整。控制在每一次迭代结束后调整边界或区域的值。 源项添加。如为计算区域添加一些能量源、动量源与质量源等。 介质属性定义。利用UDF指定介质的一些非线性属性,如指定压力相关的粘度、温度相关的密度等。 各种模型参数定义。
如下面的UDF定义了一个随时间正弦分布的速度。
Fluent可以通过解释和编译的方式加载UDF源文件。 2 Scheme开发可以利用Scheme语言为Fluent仿真流程定义GUI界面。 Scheme通常情况下与TUI及UDF配合一起使用,来完成仿真流程中一些参数指定工作。 如下所示代码: (define (apply-cb . args) (display "clicked OK button!\n") )
(define (update-cb . args) (display "dialog box opened!\n") )
(define my-dialog (cx-create-panel "my dialog box" apply-cb update-cb)) ;创建dialog (define table (cx-create-table my-dialog "input parameter" ));创建table (define int1 (cx-create-integer-entry table "num1" 'row 0 'col 0));创建int1输入框,其位于第1行第1列 (define int2 (cx-create-integer-entry table "num2" 'row 1 'col 0));创建int2输入框,其位于第2行第1列 (define int3 (cx-create-integer-entry table "num3" 'row 0 'col 1));创建int3输入框,其位于第1行第3列 (define int4 (cx-create-integer-entry table "num4" 'row 1' col 1));创建int4输入框,其位于第2行第2列 (cx-show-panel my-dialog)
可显示如下图所示GUI对话框。
通过GUI收集用户输入的数据信息,再配合TUI及UDF即可实现仿真流程控制。 Fluent可以通过菜单File → Read → Scheme…读取并加载scheme源代码。 3 journal脚本Fluent可以记录每一步操作的TUI并保存于文本文件中,该文件称之为脚本文件,扩展名为jou。 如下图所示,在Fluent启动界面中激活选项Use Journal File可选择启动过程中运行的jou文件。
也可以在Fluent启动之后,通过菜单File → Read → Journal…读取脚本文件。
如下所示为录制完成的jou文件片段。 /file/set-tui-version "19.2" (cx-gui-do cx-activate-item "MenuBar*ReadSubMenu*Case...") (cx-gui-do cx-set-file-dialog-entries "Select File" '( "EX3.cas") "Case Files (*.cas* *.msh* *.MSH* )") (cx-gui-do cx-set-list-tree-selections "NavigationPane*List_Tree1" (list "Setup|Models|Viscous (SST k-omega)")) (cx-gui-do cx-list-tree-right-click "NavigationPane*List_Tree1" ) (cx-gui-do cx-activate-item "MenuBar*ModelSubMenu*Realizable k-epsilon") (cx-gui-do cx-set-list-tree-selections "NavigationPane*List_Tree1" (list "Setup|Models|Viscous (Realizable k-e, Standard Wall Fn)")) (cx-gui-do cx-activate-item "MenuBar*WriteSubMenu*Stop Journal")
Journal文件可与Scheme混合使用来实现参数化操作,通过构建Jou文件来实现仿真流程控制。
4 进程调用此方法基本上是一种通用的二次开发方式。利用流行的计算机语言构建GUI界面收集用户输入参数生成特定jou文件,再将jou文件作为参数由Fluent进程调用。 调用模式为: fluent 3d -g -i journal fluent 3d -g -wait -i journal fluent 3d -hidden -i journal
其中: fluent:为Fluent进程路径 3d/2d:指定Fluent运行的维度 -g :指定该选项后fluent将会最小化窗口运行 -i:指定该参数后可接Jou文件 -wait:指定该选项后Fluent运行脚本会等待至其完全运行完成 -hidden:指定该选项后Fluent会隐藏运行直至其完成
有了上面的调用形式之后,就很容易对计算流程进行封装了。 最简单的如Python调用进程: import os os.system('fluent 3d -hidden -i journal ’)
so easy! 当然如果觉得用python做界面麻烦的话,也可以用C#来做GUI,然后通过下面的函数调用。 private string RunCmd(string command) { Process p = new Process(); p.StartInfo.FileName = "cmd.exe"; //确定程序名 p.StartInfo.Arguments = "/c " + command; //确定程式命令行 p.StartInfo.UseShellExecute = false; //Shell的使用 p.StartInfo.RedirectStandardInput = true; //重定向输入 p.StartInfo.RedirectStandardOutput = true;//重定向输出 p.StartInfo.RedirectStandardError = true; //重定向输出错误 p.StartInfo.CreateNoWindow = true; //设置置不显示示窗口 p.Start(); return p.StandardOutput.ReadToEnd(); //输出出流取得命令行结果 } 调用方式: RunCmd(“fluent 3d -hidden -i journal”);
本文来自于未出版书稿《Fluent二次开发指南》,未经允许严禁抄袭!
|