当前位置: 首页 > news >正文

Fluent自动化仿真(TUI命令脚本教程)

面对多工况、大批量的Fluent仿真,是否曾抓耳挠腮呢?重复性的手动设置边界条件是否令你头疼?

本文教你用Fluent自带的文本用户接口TUIScheme 脚本语言,实现Fluent仿真的“无人驾驶”,实现给脚本到生成数据文件夹的全过程自动化。

TUI命令

TUI(Text User Interface)是 ANSYS Fluent 提供的文本用户接口,用户可以通过Fluent控制台输入命令的形式,把鼠标点击实现的仿真设置转化为由命令实现。

假设你有一个批量仿真的任务,包括设置边界条件、初始化、设置求解器等等,那么想要实现自动脚本仿真,第一步就是:

找到你所需功能对应的TUI命令

找到TUI命令最简单准确的方法就是查询Ansys文档。由于Ansys文档的TUI部分仅有英文,如果全部翻译会将命令语句也翻译为中文,阅读效果极差,也不便于相关功能的查找。这里小姜整理了TUI文档并进行批量翻译,制作了一个简易的中英TUI文档。包含文内搜索和树状索引功能。

文档链接请关注小姜,后台回复“TUI”获取

TUI中英文档

至此,你应该可以通过文档检索找到你所需的TUI命令,假设你找到了设置壁面边界条件的命令:

define/boundary-conditions/wall

你会发现从文档中找到的仅仅是命令而已,并不包含该命令对应的参数格式。那么下一步:

找到TUI命令的参数形式

把上一步找到的命令define/boundary-conditions/wall输入到控制台中,点击回车

控制台位置

键入命令后你会发现控制台返回了所有壁面的名称,并在最后一行给出了你需要输入的第一个参数:

zone id/name

也就是区域的名称或id。而[]中的内容,代表此时的默认值,如果直接回车,就等效于输入了这个值。这时候只要输入你需要选择的区域名称,我们就获得了第一个参数值。

假设,我们要修改的区域是所有source开头的区域,那么此时需要使用到 * 通配符,与正则相似,* 能够匹配任意字符,source开头的所有区域即为source*


输入后控制台会列出你选择的区域,并询问是否继续输入,如果没有,我们输入**()** 代表结束区域的选择。注意:先点击回车,当让你输入第二个区域的时候,再输入括号来结束

结束了区域选择,控制台会继续根据当前命令,询问你其它输入值。此处需要用户键入区域厚度


以此类推,从输入区域开始,之后的每一次询问后的回答,都是按照顺序排列的参数。输入完所有参数,命令才会执行

通过这次与TUI控制台的对话,我们得到了此次命令对应的参数,那么完整的命令即为:

define/boundary-conditions/wall source* () 0 no 0 no no no 1

对于这一条带参数的完整命令,将其直接输入控制台,那么Fluent将会自动完成上述所有操作。以此类推,对于其它命令,同样也可以通过“对话”的形式找到对应的参数形式。

简单的脚本仿真(无循环)

至此,如果你没有循环或是变量替换的需求,你已经可以通过TUI脚本实现你的简单自动化仿真。只要将你的命令按照顺序写进一个txt文件,并将文件后缀修改为.log或.jou,然后通过Fluent界面点击:文件>读入>脚本,选择你刚刚创建的文件即可。

当然想要批量仿真、循环与变量的自动运算与带入才是关键。那么还需要:

Scheme 脚本

Scheme是一个完整的脚本语言,Fluent支持读入Scheme脚本文件,并与TUI结合使用,这一部分小姜仅作简单介绍,由于网上资源多,可以找到较为详细的教程。也可以通过ai进行辅助编写。

官网:https://schemers.org/

下面介绍几个基础的语法:

1. 定义变量

(define x 100)定义变量x的值为100

(define x (* 2 x))定义变量x的值为x的两倍

(define y '(1,2,3))定义变量y的值为[1,2,3]组成的一个列表

2. 设置循环

  • for-each循环
(for-each
(lambda (var)
...body...)         
list-expr)
; 示例:批量修改边界名称
(for-each
(lambda (b-name)
(ti-menu-load-string (format #f "/define/boundary-conditions zone-name ~a" b-name)))
'("inlet" "outlet" "wall"))
  • do循环‍
(do ((var start next) ...)        ; 可同时定义多个变量
((test) result)              ; 终止条件与返回值
body...)
; 示例:i 从 0 到 9,j 从 100 到 90,每次减 1
(do ((i 0 (+ i 1))
(j 100 (- j 1)))
((>= i 10) 'done)
(display (format #f "i=~a, j=~a\n" i j)))
  • let-loop递归
(let loop ((i start-val))          ; i 为循环变量
(if (> i end-val)               ; 终止条件
'done                       ; 循环结束返回值
(begin
...body...                ; 可使用 i
(loop (+ i step)))))      ; 步进
; 示例:迭代 100 步,步长 10
(let loop ((i 0))
(if (> i 100)
(display "loop finished\n")
(begin
(ti-menu-load-string (format #f "/solve/iterate 10"))
(loop (+ i 10)))))

3. 变量带入

通过format #f "/define/boundary-conditions zone-name ~a" b-name的形式,可以将b-name变量值带入到~a所在的位置

4. 调用TUI命令

可以将TUI命令嵌入到Scheme脚本中,示例如下:

(ti-menu-load-string "define/boundary-conditions/wall ")

如果带入变量:
(ti-menu-load-string (format #f "/define/boundary-conditions/wall ~a" zone-name)))


至此,你应该已经能够完成你的完整脚本,如果还有困难,可以参照下面小姜制作的案例:

完整脚本案例

;; ==========================================================
;;  Fluent TUI 批处理脚本(Scheme)
;;  功能:循环修改固体区域体积热源、温度,并完成计算与导出
;;  版本:23.1
;; ==========================================================;; 1. 设定 TUI 版本,确保命令解析一致性
(ti-menu-load-string "/file/set-tui-version \"23.1\"");; 2. 定义需要遍历的参数列表
;;    2.1 热源倍率列表
(define load-list '(0.6 1));;    2.2 固体区域名称列表(共 37 个区域)
(define zone-list'("solid1-15"  "solid3-15"  "solid5-15"  "solid7-15"  "solid9-15""solid10-15" "solid12-15" "solid14-15" "solid16-15" "solid18-15""solid19-15" "solid21-15" "solid23-15" "solid25-15" "solid27-15""solid28-15" "solid30-15" "solid32-15" "solid34-15" "solid36-15""solid37-15" "solid39-15" "solid41-15" "solid43-15" "solid45-15""solid46-15" "solid48-15" "solid50-15" "solid52-15" "solid53-15""solid55-15" "solid57-15" "solid59-15" "solid60-15" "solid62-15""solid64-15" "solid66-15"));;    2.3 初始温度列表(单位:K)
(define t-list '(423.15 573.15));; 3. 三层嵌套循环
;;    外层:遍历热源倍率
(for-each(lambda (loadrate);; 3.1 更新 named-expression "load" 为当前倍率(ti-menu-load-string(format #f "/define/named-expressions/edit load definition ~a" loadrate));; 中层:遍历温度(for-each(lambda (t);; 内层:遍历所有固体区域(for-each(lambda (zone);; 3.2 设置固体区域温度(ti-menu-load-string(format #f "/define/boundary-conditions/solid ~a no no yes yes ~a no no 0 no 0 no no yes"zone t));; 3.3 混合初始化(ti-menu-load-string "/solve/initialize/hyb-initialization ok");; 3.4 迭代 100 步(ti-menu-load-string "/solve/iterate 100");; 3.5 导出该区域温度场 ASCII 数据(ti-menu-load-string(format #f "/file/export/ascii load~a_vel0.05_~a_~a.txt * () y temperature no"loadrate zone t));; 3.6 恢复该区域体积热源并重新赋值;;     热源表达式:153283 * load^2  [kg m^-1 s^-3](ti-menu-load-string(format #f "/define/boundary-conditions/solid ~a no yes 1 yes \"153283[kg m^-1 s^-3]*load*load\" no no no 0 no 0 no no yes"zone)))zone-list))t-list))load-list);; 脚本执行完成后,所有工况计算与数据导出完毕

最后

期待你也能用脚本解放双手,静待数据自己躺进你的文件夹哦!

如果遇到困难,欢迎留言交流~

http://www.lryc.cn/news/599086.html

相关文章:

  • RCE真实漏洞初体验
  • 制造业低代码平台实战评测:简道云、钉钉宜搭、华为云Astro、金蝶云·苍穹、斑斑低代码,谁更值得选?
  • NBIOT模块 BC28通过MQTT协议连接到EMQX
  • 栈与队列:数据结构核心解密
  • 《Uniapp-Vue 3-TS 实战开发》自定义环形进度条组件
  • 数据结构 二叉树(1)
  • 《Uniapp-Vue 3-TS 实战开发》自定义年月日时分秒picker组件
  • uniapp创建vue3+ts+pinia+sass项目
  • Linux 桌面市场份额突破 5%:开源生态的里程碑与未来启示
  • 【数据结构与算法】数据结构初阶:详解二叉树(六)——二叉树应用:二叉树选择题
  • 数据结构3-单双链表的泛型实现及ArrayList与LinkedList的区别
  • SpringBoot(黑马)
  • 【Unity笔记】OpenXR 之VR串流开发笔记:通过RenderTexture实现仅在PC端展示UI,在VR眼镜端隐藏UI
  • Java数组详解
  • S7-1500 与 ET200MP 的组态控制通信(Configuration Control)功能实现详解(下)
  • 【C++进阶】第7课—红黑树
  • SQLFluff
  • Microsoft-DNN NTLM暴露漏洞复现(CVE-2025-52488)
  • RWA的法律合规性如何保证?KYC/AML在RWA项目中的作用是什么?
  • 融合与智能:AI 浪潮驱动下数据库的多维度进化与产业格局重塑新范式
  • 【Java学习】匿名内部类的向外访问机制
  • Android Camera setRepeatingRequest
  • 星慈光编程虫2号小车讲解第三篇--附件概述
  • 星慈光编程虫2号小车讲解第四篇--触摸按键
  • 星慈光编程虫2号小车讲解第一篇--向前向后
  • 【Web APIs】JavaScript 节点操作 ⑧ ( 删除节点 - removeChild 函数 | 删除节点 - 代码示例 | 删除网页评论案例 )
  • 【软件与环境】--SSH连接远程服务器工具:FinalShell
  • LLM中的位置嵌入矩阵(Position Embedding Matrix)是什么
  • Python编程进阶知识之第五课处理数据(matplotlib)
  • 星慈光编程虫2号小车讲解第二篇--向左向右平移