网站首页 > 基础教程 正文
作者 | 小田老师 仿真秀年度优秀讲师
首发 | 仿真秀App
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树上一级,如下所示。
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命令。
4、自动补全
2019R1版本后支持TUI命令的自动补全,可以通过File→Preference打开设置窗口,勾选上Console auto-completer选项,然后确定后即可。通过自动补全明显提高开发效率。
5、通配符
为了在Fluent中创建通用脚本,我们可以灵活地使用通配符进行更复杂的操作。通配符允许根据前缀、中缀或后缀选择多个边界或单元区域,如Fluid*、* Fluid*或*Fluid。
- * :表示会选择所有可能的实体;
- (*) :表示选择所有实体并结束列表;
- (*fluid*) :表示将选择所有包含“fluid”字符串的实体并结束列表。
使用通配符对于编写通用脚本非常有用,我们可以根据命名约定设置预处理或后处理边界;逗号“,”符号将接受TUI参数的默认值,并且“()”可用于结束列表输入。
我们来看一个案例:如报告所有前缀为car*的墙壁区域x方向的力,输入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》,关注仿真秀公众号,后台回复“Fluent Scheme”获取;
(2)参数定义
Scheme为动态数据类型,通过define函数声明和定义变量,通过set!函数可更改变量值。
7、Scheme与TUI
Fluent中提供ti-menu-load-string函数来调用TUI命令,这样就能将TUI命令嵌入到Scheme脚本中,去进行流程控制,方式如下:
8、format函数
在结合Scheme和TUI日志开发脚本代码时,format是使用最多的函数命令,通过格式化字符串转换,很方便去替换TUI文本中的参数值,已达到对TUI日志进行封装的效果。
我们可以使用format格式化替换以下字符:
- ~a :直接替换显示,适用所有数据类型
- ~s :字符串显示,带双引号“”
- ~d :数字类型表示
- ~f : 浮点数表示法,指定有效数字,如~5.2f
9、脚本函数封装
使用Scheme脚本为我们提供函数封装的能力,可以将执行的一系列命令放入函数中,对外使用只需暴露函数的签名,更好得去梳理代码的结构。例如,我们使用如下命令,设置入口边界inlet的速度1.0m/s,温度为290K;
可以使用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函数名,但是并未给出函数调用的参数和类型,官方也是没有开发文档对其进行解释;这里说明下Scheme脚本Ansys官方是不提供任何技术支持的。
因为Scheme是底层脚本接口,是面向开发者而不是面向用户的,TUI日志可以满足用户的大多数需要,但是预定义Scheme API却能为开发者提供极大便利性和更强大功能。这里有一个比较笨的方法分享给大家,可以在Console中去尝试获取参数:可以先无参数调用方法,如果参数错误的都会有相应提示,然后根据提示补充相应参数再尝试。
在实施开发项目中,整理了部分Fluent中预定义Scheme API的说明和使用方法,计划在后续的文章或者课程中给大家分享和讲解。
四、界面开发技术
脚本开发完成后,通常都需要开发图形用户界面去交互;在Fluent二次开发中有三种开发形式,对应不同交互方式:
- Scheme脚本工具
- ACT插件开发
- 外置界面集成
1、Scheme脚本工具Fluent Scheme API中提供函数去创建菜单、对话框和窗体界面等,界面嵌入在Fluent中,优点是可直接与Fluent界面交互,实时双向的数据传递。
但是Scheme脚本开发工具的代码开发难度大,因为无法可视化设计界面,而且官方提供的文档相对简单,需要深入了解Scheme语言,对于工程师朋友来说不太推荐。
2、ACT插件开发在Fluent 16.0之后版本,Ansys为其添加了ACT插件扩展的支持,界面嵌入在Fluent软件的右侧,可直接与Fluent界面交互,可实现实时双向数据传递。通过定义XML+Python方式,使用XML定义界面,使用Python和Scheme去开发脚本功能,实现快速仿真流程封装,可实现Fluent仿真从网格 → 设置 → 求解 → 后处理的自动化。详情可参考:《ANSYS ACT宝典》带你快速上手仿真向导开发全流程.
ACT的开发方式更为灵活,同时采用XML和Python语言,可以可视化设计界面,对于工程师朋友来说更加友好,上手学习起来更快,是推荐的开发方式,在这期直播中小田老师会以实际案例,带着大家上手开发一个ACT插件,熟悉开发流程(详情见后文)。
3、外置界面集成采用外置界面开发,界面是独立于Fluent软件中,是全封装形式,通常采用批处理调用方式,即界面提供参数输入,仿真过程读取脚本后在后台顺序执行命令,中间与Fluent图形窗口无交互,数据间传递不是实时双向传递的。
外置界面开发可以采用界面框架非常多,比如说.NET的WinForms、跨平台的QT框架、Tkinter界面框架等,大家可以根据自己喜好选择。小田老师在日常项目开发中,喜欢使用Qt框架,主要看重其跨平台和信号-槽机制,使用QtDesigner可以可视化设计界面,同时采用Qt For Python项目的PySide2模块,能使用Python语言去快速开发界面,对于工程师朋友是非常友好的,上手更快。
五、集成封装技术
针对上述三种开发方法,涉及到的集成封装技术各有不同,下面简单和大家讲解下集成封装技术。
1、Scheme脚本封装在如下示例代码中,通过为Panel窗口的按钮绑定回调函数update-cb,实现界面OK按钮点击后获取输入然后执行脚本命令完成操作。
2、ACT插件封装在ACT中API访问入口为ExtAPI,首先需要获得scheme脚本控制器实例,命令如下:
接着通过XML定义的<onupdate>回调函数为update_callback,然后在Python文件中实现回调函数,实现获取界面输入,最后执行Scheme脚本代码。
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方法,如下:
在界面集成封装时候,有一个非常关键技术点,就是需要使用多线程技术:为仿真调用开一个工作线程,避免调用时堵塞主线程出现界面未响应情况。
(完)
猜你喜欢
- 2024-12-02 C++中的struct完全可以被class替代,为什么不删去它呢?
- 2024-12-02 C#笔记~泛型
- 2024-12-02 C# 中 IsNullOrEmpty 和 IsNullOrWhiteSpace 你用对了吗?
- 2024-12-02 C#面试宝典 2022年 60个常见的C#面试问题和答案
- 2024-12-02 C#学习随笔—操作BIN文件(读,写,替代)
- 2024-12-02 C# 入门深度学习:万字长文讲解微积分和梯度下降
- 2024-12-02 344.C# 中的正则表达式:字符匹配、字面字符、特殊字符和转义序列
- 2024-12-02 C#通过二进制读写实现文件的伪加密
- 2024-12-02 C#移除字符串中的不可见Unicode字符
- 2024-12-02 使用 C# 解析月份简写的时间日期格式
- 最近发表
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)