首页/文章/ 详情

基于Fluent求解器进行二次开发到底怎么做?

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

一、写在前面


Ansys Fluent软件作为通用的流体仿真软件,功能模型虽然多而全,但是缺乏相应的行业专业性。同时仿真分析具有一定的技术门槛,既需要技术人员具备行业基础,也需要积累相关仿真经验,对软件操作要有较高的熟练度,所以对企业技术人员来说,学习周期长入门难度大。
定制化的二次开发可以将技术、行业经验与仿真流程封装成仿真模板工具,用户仅需输入工况参数,后台自动执行仿真计算,便得到需要的仿真结果;既解决了行业性问题,也降低了仿真门槛,同时也是数字化资产的沉淀。
Ansys IcePak软件大家都有听过吧,它是针对电子行业的散热分析软件,本身就是基于Fluent求解器进行二次开发,融合了电子行业规范、热分析流程等形成的专业工具。
Ansys IcePak基于Fluent求解器开发
二、二次开发概述

1、二次开发方向

二次开发方向示意
(1)添加新功能
通过C语言进行UDF(用户自定义函数)开发,添加自定义物理模型、边界条件和材料属性等,后续可以通过ACT或者Scheme界面开发进行封装。
(2)仿真模板开发
对成熟的仿真流程进行自动化脚本开发,然后通过界面开发及软件封装技术,将外部知识、其他仿真工具、仿真流程和标准规范进行集成,形成定制化仿真工具。
通常来说,Fluent中物理模型能满足绝大多数场景需要,所以实际开发多以仿真模板开发为主。
2、开发技术路线
开发过程可以分为项目调研、软件设计、软件开发和软件测试四个阶段;其中最为核心的就是脚本开发、界面开发和软件封装的技术。

二次开发技术路线示意

三、脚本开发技术
Fluent提供文本用户命令(TUI命令)和界面用户命令(GUI命令),两者都是基于Scheme语言编写。对于大多数Fluent的GUI操作,都有一个相关的TUI命令对应,而有很多其他的操作只能通过TUI命令完成。下面我们来详细介绍下TUI命令。
1、TUI命令输入
在界面右下角处的控制台(Consle)窗口,按<Enter>键查看当前选项,然后通过输入完整的命令或者子菜单命令。输入”q”字符然后<Enter>可以返回TUI树上一级,如下所示。
Fluent中控制台输入TUI命令
2、TUI日志录制
Fluent支持TUI日志文件的录制,便于自动和批量重复仿真工作,具体操作如下:
  • ① 点击File > Write > Start Journal(或输入TUI命令:file start-journal ),设置日志文件存放位置和名称,扩展名为*.jou。
  • ② 通过GUI界面或者是输入TUI命令来进行仿真流程设置,Fluent后台会自动记录GUI操作和输入的TUI命令。
  • ③ 录制完成后,点击 File > Write > Stop Journal(或输入TUI命令:file stop-journal ),停止日志文件录制。
录制文件内容会取决于我们是通过GUI操作还是TUI命令来完成。下面例子显示了不同方式进行网格读取操作记录的命令文本。显然,通过输入TUI命令录制的日志文件更容易阅读,也更简洁;同时,TUI命令不是上下文敏感的,这是GUI操作生成日志的一个缺点。
录制的日志文件示意
这里的上下文敏感指的是,如果你在点击记录之前打开面板,然后修改面板,操作将被记录。如果在没有打开该面板的情况下重播日志,则日志可能无法运行,因为修改该面板的命令毫无意义。所以推荐大家采用输入TUI命令方式录制脚本。
3、TUI命令帮助
Fluent帮助文档中有一个文本命令列表,用于帮助设置正确的TUI命令。

TUI命令帮助文档


4、自动补全
2019R1版本后支持TUI命令的自动补全,可以通过File→Preference打开设置窗口,勾选上Console auto-completer选项,然后确定后即可。通过自动补全明显提高开发效率。

自动补全功能示意

5、通配符
为了在Fluent中创建通用脚本,我们可以灵活地使用通配符进行更复杂的操作。通配符允许根据前缀、中缀或后缀选择多个边界或单元区域,如Fluid*、* Fluid*或*Fluid。
  •  * :表示会选择所有可能的实体;

  •  (*) :表示选择所有实体并结束列表;

  • (*fluid*) :表示将选择所有包含“fluid”字符串的实体并结束列表。

使用通配符对于编写通用脚本非常有用,我们可以根据命名约定设置预处理或后处理边界;逗号“,”符号将接受TUI参数的默认值,并且“()”可用于结束列表输入。
我们来看一个案例:如报告所有前缀为car*的墙壁区域x方向的力,输入TUI命令的过程及参数如下:

TUI命令编写过程示意
  • 对应完整的TUI命令为/report/forces/wall-forces no car* () 1 0 0 
  • 通过使用GUI操作:Results → Reports → Forces,可以与完整TUI命令输入控制台得到一样结果。

6、Scheme脚本
只要了解TUI命令的结构,编写TUI日志是很简单的;但是,TUI日志具备明显的缺陷,就是TUI本质是基于Scheme封装的文本命令,是无法进行流程控制,而且代码复用性差。
Scheme是一个完整的语言,具备数据结构、流程控制、函数编程的功能,通过将Scheme脚本与TUI命名相结合,可以让脚本更加智能化、复用性更好。
(1)Scheme数据类型
  • Boolean – 布尔类型

  • Number – 数字类型

  • Character – 字符类型

  • Symbol – 符号类型

  • Strings – 字符串类型

  • Vectors – 向量类型

  • Pairs and lists – 点对和列表
其中最常用的是Boolean、Number、Strings和lists类型,不同类型有对应的函数方法,可以参见《MIT/GNU Scheme Reference Manual》。

(2)参数定义
Scheme为动态数据类型,通过define函数声明和定义变量,通过set!函数可更改变量值。
Scheme中数据类型示意
7、Scheme与TUI
Fluent中提供ti-menu-load-string函数来调用TUI命令,这样就能将TUI命令嵌入到Scheme脚本中,去进行流程控制,方式如下:
Scheme调用TUI日志命令
8、format函数
在结合Scheme和TUI日志开发脚本代码时,format是使用最多的函数命令,通过格式化字符串转换,很方便去替换TUI文本中的参数值,已达到对TUI日志进行封装的效果。


我们可以使用format格式化替换以下字符:
  • ~a :直接替换显示,适用所有数据类型

  • ~s :字符串显示,带双引号“”

  • ~d :数字类型表示

  • ~f  : 浮点数表示法,指定有效数字,如~5.2f
Scheme中format函数使用示例
9、脚本函数封装
使用Scheme脚本为我们提供函数封装的能力,可以将执行的一系列命令放入函数中,对外使用只需暴露函数的签名,更好得去梳理代码的结构。
例如,我们使用如下命令,设置入口边界inlet的速度1.0m/s,温度为290K;

更改入口速度及温度TUI命令示例
可以使用Scheme脚本对上面TUI命令进行函数封装,并对边界名称、速度大小和温度值进行参数提取,如下:
Scheme中封装TUI命令为函数
函数封装到了好处就是提升复用性,比如模型有多个入口边界,但是入口速度和温度不一样,都可以通过函数去调用设置,如入口边界inlet-hot速度为0.8m/s,温度为320k,直接调用函数命令(set-inlet-bc “inlet-hot” 0.8 320)去设置,是不是非常方便呢。
10、Fluent中Scheme API
Fluent脚本环境中封装了非常多Scheme方法,通过以下方法可以将the-environment环境中的函数名写入到fluent-env.txt文件中。

写入Fluent中加载的Scheme函数至本地
将写入文本进行换行处理,可以得到以下内容:记录着Fluent环境中预定义的Scheme函数名,但是并未给出函数调用的参数和类型,官方也是没有开发文档对其进行解释;这里说明下Scheme脚本Ansys官方是不提供任何技术支持的。

Fluent中Scheme API函数示例
因为Scheme是底层脚本接口,是面向开发者而不是面向用户的,TUI日志可以满足用户的大多数需要,但是预定义Scheme API却能为开发者提供极大便利性和更强大功能。
这里有一个比较笨的方法分享给大家,可以在Console中去尝试获取参数:可以先无参数调用方法,如果参数错误的都会有相应提示,然后根据提示补充相应参数再尝试。
Fluent中Scheme API方法调用测试

四、界面开发技术
脚本开发完成后,通常都需要开发图形用户界面去交互;在Fluent二次开发中有三种开发形式,对应不同交互方式:
  • Scheme脚本工具

  • ACT插件开发

  • 外置界面集成
1、Scheme脚本工具
Fluent Scheme API中提供函数去创建菜单、对话框和窗体界面等,界面嵌入在Fluent中,优点是可直接与Fluent界面交互,实时双向的数据传递。
Scheme脚本工具界面示意
但是Scheme脚本开发工具的代码开发难度大,因为无法可视化设计界面,而且官方提供的文档相对简单,需要深入了解Scheme语言,对于工程师朋友来说不太推荐。
2、ACT插件开发
在Fluent 16.0之后版本,Ansys为其添加了ACT插件扩展的支持,界面嵌入在Fluent软件的右侧,可直接与Fluent界面交互,可实现实时双向数据传递。
通过定义XML Python方式,使用XML定义界面,使用Python和Scheme去开发脚本功能,实现快速仿真流程封装,可实现Fluent仿真从网格 → 设置 → 求解 → 后处理的自动化。详情可参考:《ANSYS ACT宝典》带你快速上手仿真向导开发全流程.

ACT插件界面示意
ACT的开发方式更为灵活,同时采用XML和Python语言,可以可视化设计界面,对于工程师朋友来说更加友好,上手学习起来更快,是推荐的开发方式。


3、外置界面集成
采用外置界面开发,界面是独立于Fluent软件中,是全封装形式,通常采用批处理调用方式,既界面提供参数输入,仿真过程读取脚本后在后台顺序执行命令,中间与Fluent图形窗口无交互,数据间传递不是实时双向传递的。

外置仿真模板示意
外置界面开发可以采用界面框架非常多,比如说.NET的WinForms、跨平台的QT框架、Tkinter界面框架等,大家可以根据自己喜好选择。
小田老师在日常项目开发中,喜欢使用Qt框架,主要看重其跨平台和信号-槽机制,使用QtDesigner可以可视化设计界面,同时采用Qt For Python项目的PySide2模块,能使用Python语言去快速开发界面,对于工程师朋友是非常友好的,上手更快。
Qt Designer可视化设计界面
五、集成封装技术
针对上述三种开发方法,涉及到的集成封装技术各有不同,下面简单和大家讲解下集成封装技术。
1、Scheme脚本封装
在如下示例代码中,通过为Panel窗口的按钮绑定回调函数update-cb,实现界面OK按钮点击后获取输入然后执行脚本命令完成操作。
Scheme集成封装示例代码
2、ACT插件封装
在ACT中API访问入口为ExtAPI,首先需要获得scheme脚本控制器实例,命令如下:

接着通过XML定义的<onupdate>回调函数为update_callback,然后在Python文件中实现回调函数,实现获取界面输入,最后执行Scheme脚本代码。
ACT插件封装示例代码
3、外置界面封装
外置程序独立于Fluent,通常是采用批处理方式调用Fluent进程,然后执行脚本文件进行仿真操作,流程如下所示。

这里就不得不说一下Fluent中批处理调用参数:在Windows系统的后台运行ANSYS Fluent,可以使用以下命令:

上述命令中:
  • fluent是输入以交互方式运行的命令,需将<ansys_dir>\fluent\ntbin\win64添加到系统环境中。

  • 3ddp 表示3D双精度,其他选项为3d、2d和2ddp。

  • -tx 表示求解器以x核并行。

  • -meshing 表示启动到Fluent Meshing模式。

  • -ty 表示网格划分以y核并行。

  • -g表示要在任务栏中最小化地运行程序。

  • -i journal表示读取指定的日志文件。

  • wait是在DOS批处理文件或其他脚本中键入的命令,必须等待ANSYS Fluent完成后才能运行。

  • -hidden表示运行ANSYS Fluent,完全隐藏,无交互。
如果使用Python调用的话,推荐使用subprocess模块下的Popen方法,如下:

在界面集成封装时候,有一个非常关键技术点,就是需要使用多线程技术:为仿真调用开一个工作线程,避免调用时堵塞主线程出现界面未响应情况。

作者简介:小田老师,仿真秀年度优秀作者,硕士毕业于天津大学,擅长Ansys产品的仿真及二次开发,曾独立完成多个结构和流体仿真咨询及开发项目,具备丰富的仿真咨询及二次开发经验。

声明:原创作品,部分图片和内容源自网络,如有不当请联系我们,欢迎分享,禁止私自转载,转载请联系我们。1000G资料


来源:仿真秀App
MeshingFluent MeshingACTFluentUDF二次开发通用电子材料控制
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2022-08-24
最近编辑:2年前
仿真圈
技术圈粉 知识付费 学习强国
获赞 10065粉丝 21534文章 3532课程 218
点赞
收藏
未登录
1条评论
张鑫
签名征集中
5月前
好文章,学习了
回复
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈