当前位置:首页>编程日记>正文

文件fluent_胡言4种Fluent二次开发姿势

江湖传言:Fluent有4种二次开发模式。

这里所提的二次开发,指的是在Fluent的基础上开发新的功能。Fluent是商用闭源软件,提供给用户的是经过编译了的可执行文件,故用户难以对软件的核心功能进行修改。不过Fluent还是提供了一些接口方便用户对其功能进行扩展。

1 UDF/UDS

这是最常见的功能扩展方式。Fluent允许用户利用C语言代码扩充其功能,这包括利用UDF扩充功能,以及利用UDS增添求解器。

UDF在Fluent仿真流程的每一个节点中几乎都可以应用到,如下图所示。

文件fluent_胡言4种Fluent二次开发姿势 配图01

UDF比较常见的用途在于:

  • 进行区域初始化。替代Patch实现更加复杂的局部初始化。

  • 迭代调整。控制在每一次迭代结束后调整边界或区域的值。

  • 源项添加。如为计算区域添加一些能量源、动量源与质量源等。

  • 介质属性定义。利用UDF指定介质的一些非线性属性,如指定压力相关的粘度、温度相关的密度等。

  • 各种模型参数定义。

如下面的UDF定义了一个随时间正弦分布的速度。

文件fluent_胡言4种Fluent二次开发姿势 配图02

Fluent可以通过解释和编译的方式加载UDF源文件。

2 Scheme开发

可以利用Scheme语言为Fluent仿真流程定义GUI界面。

Scheme通常情况下与TUI及UDF配合一起使用,来完成仿真流程中一些参数指定工作。

如下所示代码:

(define (apply-cb . args)
  (display "clicked OK button! ")
)

(define (update-cb . args)
  (display "dialog box opened! ")
)

(define my-dialog (cx-create-panel "my dialog box" apply-cb update-cb)) ;创建dialog
(define table (cx-create-table my-dialog "input parameter" ));创建table
(define int1 (cx-create-integer-entry table "num1" 'row 0 'col 0));创建int1输入框,其位于第1行第1列
(define int2 (cx-create-integer-entry table "num2" 'row 1 'col 0));创建int2输入框,其位于第2行第1列
(define int3 (cx-create-integer-entry table "num3" 'row 0 'col 1));创建int3输入框,其位于第1行第3列
(define int4 (cx-create-integer-entry table "num4" 'row 1' col 1));创建int4输入框,其位于第2行第2列
(cx-show-panel my-dialog)

可显示如下图所示GUI对话框。

文件fluent_胡言4种Fluent二次开发姿势 配图03

通过GUI收集用户输入的数据信息,再配合TUI及UDF即可实现仿真流程控制。

Fluent可以通过菜单File → Read → Scheme…读取并加载scheme源代码。

3 journal脚本

Fluent可以记录每一步操作的TUI并保存于文本文件中,该文件称之为脚本文件,扩展名为jou。

如下图所示,在Fluent启动界面中激活选项Use Journal File可选择启动过程中运行的jou文件。

文件fluent_胡言4种Fluent二次开发姿势 配图04

也可以在Fluent启动之后,通过菜单File → Read → Journal…读取脚本文件。

  • Fluent脚本文件可以通过菜单File → Write → Start Journal…录制脚本文件。

文件fluent_胡言4种Fluent二次开发姿势 配图05

  • 通过菜单File → Write → Stop Journal停止录制并保存jou文件

文件fluent_胡言4种Fluent二次开发姿势 配图06

如下所示为录制完成的jou文件片段。

/file/set-tui-version "19.2"
(cx-gui-do cx-activate-item "MenuBar*ReadSubMenu*Case...")
(cx-gui-do cx-set-file-dialog-entries "Select File" '( "EX3.cas") "Case Files (*.cas* *.msh* *.MSH* )")
(cx-gui-do cx-set-list-tree-selections "NavigationPane*List_Tree1" (list "Setup|Models|Viscous (SST k-omega)"))
(cx-gui-do cx-list-tree-right-click "NavigationPane*List_Tree1" )
(cx-gui-do cx-activate-item "MenuBar*ModelSubMenu*Realizable k-epsilon")
(cx-gui-do cx-set-list-tree-selections "NavigationPane*List_Tree1" (list "Setup|Models|Viscous (Realizable k-e, Standard Wall Fn)"))
(cx-gui-do cx-activate-item "MenuBar*WriteSubMenu*Stop Journal")

Journal文件可与Scheme混合使用来实现参数化操作,通过构建Jou文件来实现仿真流程控制。

4 进程调用

此方法基本上是一种通用的二次开发方式。利用流行的计算机语言构建GUI界面收集用户输入参数生成特定jou文件,再将jou文件作为参数由Fluent进程调用。

调用模式为:

fluent 3d -g -i journal
fluent 3d -g -wait -i journal
fluent 3d -hidden -i journal

其中:

  • fluent:为Fluent进程路径

  • 3d/2d:指定Fluent运行的维度

  • -g :指定该选项后fluent将会最小化窗口运行

  • -i:指定该参数后可接Jou文件

  • -wait:指定该选项后Fluent运行脚本会等待至其完全运行完成

  • -hidden:指定该选项后Fluent会隐藏运行直至其完成

有了上面的调用形式之后,就很容易对计算流程进行封装了。

最简单的如Python调用进程:

import os

os.system(‘fluent 3d -hidden -i journal ’)

so easy!

当然如果觉得用python做界面麻烦的话,也可以用C#来做GUI,然后通过下面的函数调用。

private string RunCmd(string command){
  Process p = new Process();
  p.StartInfo.FileName = "cmd.exe"; //确定程序名
  p.StartInfo.Arguments = "/c " + command; //确定程式命令行
  p.StartInfo.UseShellExecute = false; //Shell的使用
  p.StartInfo.RedirectStandardInput = true; //重定向输入
  p.StartInfo.RedirectStandardOutput = true;//重定向输出
  p.StartInfo.RedirectStandardError = true; //重定向输出错误
  p.StartInfo.CreateNoWindow = true; //设置置不显示示窗口
  p.Start();  
  return p.StandardOutput.ReadToEnd(); //输出出流取得命令行结果
}
调用方式:
RunCmd(“fluent 3d -hidden -i journal”);
提示文件fluent_胡言4种Fluent二次开发姿势 配图07

本文来自于未出版书稿《Fluent二次开发指南》,未经允许严禁抄袭!

当我见到你,心跳漏了一拍

http://www.coolblog.cn/news/37fb6859fc41e2fb.html

相关文章:

  • asp多表查询并显示_SpringBoot系列(五):SpringBoot整合Mybatis实现多表关联查询
  • s7day2学习记录
  • 【求锤得锤的故事】Redis锁从面试连环炮聊到神仙打架。
  • 矿Spring入门Demo
  • 拼音怎么写_老师:不会写的字用圈代替,看到孩子试卷,网友:人才
  • Linux 实时流量监测(iptraf中文图解)
  • Win10 + Python + GPU版MXNet + VS2015 + RTools + R配置
  • 美颜
  • shell访问php文件夹,Shell获取某目录下所有文件夹的名称
  • 如何优雅的实现 Spring Boot 接口参数加密解密?
  • LeCun亲授的深度学习入门课:从飞行器的发明到卷积神经网络
  • Mac原生Terminal快速登录ssh
  • java受保护的数据与_Javascript类定义语法,私有成员、受保护成员、静态成员等介绍...
  • mysql commit 机制_1024MySQL事物提交机制
  • 支撑微博千亿调用的轻量级RPC框架:Motan
  • jquery 使用小技巧
  • 2019-9
  • 法拉利虚拟学院2010 服务器,法拉利虚拟学院2010
  • vscode pylint 错误_将实际未错误的py库添加到pylint白名单
  • 科学计算工具NumPy(3):ndarray的元素处理
  • 工程师在工作电脑存 64G 不雅文件,被公司开除后索赔 41 万,结果…
  • linux批量创建用户和密码
  • newinsets用法java_Java XYPlot.setInsets方法代碼示例
  • js常用阻止冒泡事件
  • 气泡图在开源监控工具中的应用效果
  • 各类型土地利用图例_划重点!国土空间总体规划——土地利用
  • php 启动服务器监听
  • dubbo简单示例
  • 【设计模式】 模式PK:策略模式VS状态模式
  • [iptables]Redhat 7.2下使用iptables实现NAT
  • Ubuntu13.10:[3]如何开启SSH SERVER服务
  • CSS小技巧——CSS滚动条美化
  • JS实现-页面数据无限加载
  • 阿里巴巴分布式服务框架 Dubbo
  • 最新DOS大全
  • Django View(视图系统)
  • 阿里大鱼.net core 发送短信
  • 程序员入错行怎么办?
  • 两张超级大表join优化
  • 第九天函数
  • Linux软件安装-----apache安装
  • HDU 5988 最小费用流
  • Sorenson Capital:值得投资的 5 种 AI 技术
  • 《看透springmvc源码分析与实践》读书笔记一
  • 正式开课!如何学习相机模型与标定?(单目+双目+鱼眼+深度相机)
  • Arm芯片的新革命在缓缓上演
  • nagios自写插件—check_file
  • python3 错误 Max retries exceeded with url 解决方法
  • 通过Spark进行ALS离线和Stream实时推荐
  • 行为模式之Template Method模式