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

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

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

TUI命令

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

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

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

找到TUI命令最简单准确的方法就是查询Ansys文档。由于Ansys文档的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循环
scheme 复制代码
(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循环‍
scheme 复制代码
(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递归
scheme 复制代码
(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)))


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

完整脚本案例

scheme 复制代码
;; ==========================================================
;;  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)

;; 脚本执行完成后,所有工况计算与数据导出完毕

最后

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

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

相关推荐
feifeigo12311 小时前
自动化运维:从脚本到DevOps的演进
运维·自动化·devops
深圳安锐科技有限公司12 小时前
基坑渗压数据不准?选对渗压计能实现自动化精准监测吗?
安全·自动化·自动化监测·大坝监测·渗压计
晴天彩虹雨12 小时前
统一调度与编排:构建自动化数据驱动平台
大数据·运维·数据仓库·自动化·big data·etl
IT成长日记15 小时前
【自动化运维神器Ansible】Ansible常用模块之Copy模块详解
运维·自动化·ansible·copy·常用模块、
TRACER~8519 小时前
移动端自动化Appium框架
运维·appium·自动化
贺贺丿20 小时前
Docker2-容器应用工具及docker命令
linux·运维·docker·容器·自动化·云计算
菜鸟起航ing1 天前
SaaS型小程序自动化发布解决方案
运维·小程序·自动化
云飞云共享云桌面1 天前
制造工厂高效出图新技术——共享云桌面
运维·服务器·网络·3d·自动化·制造
SRC_BLUE_171 天前
[网安工具] 自动化威胁检测工具 —— D 盾 · 使用手册
运维·自动化