专业编程基础技术教程

网站首页 > 基础教程 正文

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

ccvgpt 2024-12-02 15:42:46 基础教程 1 ℃

作者 | 小田老师 仿真秀年度优秀讲师

首发 | 仿真秀App

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

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方法,如下:


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


(完)

Tags:

最近发表
标签列表