首页/文章/ 详情

江湖传言:Fluent有4种二次开发模式?

精品
作者优秀平台推荐
详细信息
文章亮点
作者优秀
优秀教师/意见领袖/博士学历/特邀专家/独家讲师
平台推荐
内容稀缺
1年前浏览5888

作者 | 胡坤   仿真秀科普作者

首发 | CFD之道

这里所提的二次开发,指的是在Fluent的基础上开发新的功能。Fluent是商用闭源软件,提供给用户的是经过编译了的可执行文件,故用户难以对软件的核心功能进行修改。不过Fluent还是提供了一些接口方便用户对其功能进行扩展。

一、UDF/UDS  

这是最常见的功能扩展方式。Fluent允许用户利用C语言代码扩充其功能,这包括利用UDF扩充功能,以及利用UDS增添求解器。

UDF在Fluent仿真流程的每一个节点中几乎都可以应用到,如下图所示。

UDF比较常见的用途在于:

1、行区域初始化。替代Patch实现更加复杂的局部初始化。

2、迭代调整。控制在每一次迭代结束后调整边界或区域的值。

3、源项添加。如为计算区域添加一些能量源、动量源与质量源等。

4、介质属性定义。利用UDF指定介质的一些非线性属性,如指定压力相关的粘度、温度相关的密度等。

各种模型参数定义。

如下面的UDF定义了一个随时间正弦分布的速度。

Fluent可以通过解释和编译的方式加载UDF源文件。

二、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")
)

(definemy-dialog (cx-create-panel"my dialog box"apply-cbupdate-cb)) ;创建dialog
(define table (cx-create-tablemy-dialog"input parameter"));创建table
(define int1 (cx-create-integer-entrytable"num1"'row 0 'col0));创建int1输入框,其位于第1行第1列
(define int2 (cx-create-integer-entrytable"num2"'row 1 'col0));创建int2输入框,其位于第2行第1列
(define int3 (cx-create-integer-entrytable"num3"'row 0 'col1));创建int3输入框,其位于第1行第3列
(define int4 (cx-create-integer-entrytable"num4"'row 1'col1));创建int4输入框,其位于第2行第2列
(cx-show-panel my-dialog)

可显示如下图所示GUI对话框 

通过GUI收集用户输入的数据信息,再配合TUI及UDF即可实现仿真流程控制。

Fluent可以通过菜单File → Read → Scheme…读取并加载scheme源代码。

三、journal脚本  

Fluent可以记录每一步操作的TUI并保存于文本文件中,该文件称之为脚本文件,扩展名为jou。

如下图所示,在Fluent启动界面中激活选项Use Journal File可选择启动过程中运行的jou文件。

也可以在Fluent启动之后,通过菜单File → Read → Journal… 读取脚本文件。

Fluent脚本文件可以通过菜单File → Write → Start Journal…录制脚本文件。

通过菜单 File → Write → Stop Journal  停止录制并保存jou文件

如下所示为录制完成的jou文件片段

/file/set-tui-version"19.2"
(cx-gui-docx-activate-item"MenuBar*ReadSubMenu*Case...")
(cx-gui-docx-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文件来实现仿真流程控制。

四、进程调用  

此方法基本上是一种通用的二次开发方式。利用流行的计算机语言构建GUI界面收集用户输入参数生成特定jou文件,再将jou文件作为参数由Fluent进程调用。

调用模式为:

fluent3d-g -i journal
fluent3d-g -wait -i journal
fluent3d-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,然后通过下面的函数调用。

privatestringRunCmd(stringcommand)
{
  Process p =newProcess();
  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();  
returnp.StandardOutput.ReadToEnd();//输出出流取得命令行结果
}
调用方式:
RunCmd(“fluent3d -hidden -i journal”);
    
来源:仿真秀App
Design ModelerFluentCFXCFD-PostIcepak非线性UDF二次开发通用科普控制
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2022-08-11
最近编辑:1年前
仿真圈
技术圈粉 知识付费 学习强国
获赞 9044粉丝 20402文章 3164课程 205
点赞
收藏
未登录
还没有评论

课程
培训
服务
行家

VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈