菜鸟科技网

fluent 命令行

Fluent 的命令行主要通过两种方式实现:

fluent 命令行-图1
(图片来源网络,侵删)
  1. Scheme 脚本: 这是 Fluent 内置的脚本语言,功能最强大,可以控制 Fluent 的所有功能。
  2. Journal 文件: 这是一个记录你在图形用户界面中所有操作的文本文件,非常适合将手动操作流程自动化。

下面我将详细介绍这两种方法,并提供一个完整的实战示例。


Scheme 脚本

Scheme 是 Lisp 语言的一种方言,是 Fluent 的“心脏”,几乎所有你在 GUI 中能做的操作,都可以用 Scheme 脚本来实现。

启动 Fluent 并运行 Scheme 脚本

最基本的方式是在启动 Fluent 时指定 Scheme 脚本文件。

# 基本语法
fluent -i <scheme_script_file.scm> -g
# 参数解释
# fluent: Fluent 的可执行文件
# -i: "input" 的缩写,指定要执行的 Scheme 脚本文件。
# -g: "graphics" 的缩写,表示以图形模式启动,即使运行脚本,也会打开 Fluent 界面(脚本运行在后台)。
# 如果不需要图形界面,可以使用 -batch 模式,速度更快。

示例: 假设你有一个名为 setup_and_run.scm 的脚本,你可以在终端中运行:

fluent 命令行-图2
(图片来源网络,侵删)
fluent -i setup_and_run.scm -g

Scheme 脚本核心概念

  1. 注释: 使用 开头。

    ; 这是一个注释
  2. 基本命令: 大部分命令与 GUI 中的菜单路径对应。

    • (solve) -> 解算
    • (solve/iterate 100) -> 迭代 100 步
    • (file/read-case "case.cas") -> 读取案例文件
    • (file/write-case-data "new_data.cas") -> 写入案例数据
    • (file/export-results "results.out") -> 导出结果
  3. 定义变量: 使用 define

    (define my-velocity 10.0)
    (define my-inlet-velocity 'inlet-velocity) ; 也可以是字符串
  4. 条件判断: if

    fluent 命令行-图3
    (图片来源网络,侵删)
    (if (> my-velocity 5.0)
        (printf "Velocity is high: ~a~n" my-velocity)
        (printf "Velocity is low: ~a~n" my-velocity))
  5. 循环: dotimes (固定次数) 或 dolist (遍历列表)

    ; 迭代 10 次
    (dotimes (i 10)
      (printf "Iteration ~a~n" i)
      (solve/iterate 10)) ; 每次迭代 10 步
    ; 遍历一个边界列表
    (define boundaries '("inlet" "outlet" "wall"))
    (dolist (bound boundaries)
      (printf "Setting boundary condition for ~a~n" bound)
      ; (bc-set-type bound 'pressure-inlet) ; 假设的命令
      )
  6. 函数定义: 使用 define

    (define (my-setup-function)
      (file/read-case "initial.cas")
      (define-mesh-zones)
      (set-up-boundary-conditions)
      )
    (my-setup-function) ; 调用函数

Journal 文件

Journal 文件是录制 GUI 操作的产物,非常适合快速将手动流程转为脚本。

如何创建 Journal 文件

  1. 在 Fluent GUI 中,点击菜单栏的 File -> Write -> Journal...
  2. 选择一个文件名(my_workflow.jou)并保存。
  3. 你在 Fluent 中所做的几乎所有操作(除了视图操作)都会被记录到这个 my_workflow.jou 文件中。

如何使用 Journal 文件

Journal 文件本质上是 Scheme 脚本的一种特殊形式,所以运行方式完全相同。

fluent -i my_workflow.jou -g

Journal 文件的优缺点

  • 优点:
    • 简单快捷: 无需手动编写代码,录制即可。
    • 学习工具: 通过查看生成的 Journal 文件,你可以学习如何用 Scheme 命令实现特定的 GUI 操作。
  • 缺点:
    • 脆弱: Journal 文件对 GUI 的状态非常敏感,如果你改变了操作的顺序(比如先设置边界条件再划分网格,而录制时是反的),脚本很可能会失败。
    • 冗余: 包含大量非必要的命令和状态检查。
    • 难以维护: 对于复杂的逻辑(如循环、条件判断),Journal 文件难以实现。

最佳实践: 使用 Journal 文件生成初始脚本,然后手动编辑和优化它,使其成为一个健壮的 Scheme 脚本。


完整实战示例:自动化一个简单的 CFD 仿真

假设我们的目标是:

  1. 读取一个初始网格文件 (mesh.msh)。
  2. 设置一个常速度入口边界条件。
  3. 初始化流场。
  4. 运行 500 步迭代。
  5. 保存最终的案例文件 (final_results.cas) 和结果数据 (results.dat)。

步骤 1: 编写 Scheme 脚本 (run_simulation.scm)

; =================================================================
; Fluent Automation Script for a Simple CFD Simulation
; Author: AI Assistant
; Date: 2025-10-27
; =================================================================
; --- 1. 清理工作区并读取网格 ---
; (reset) 命令会清除当前所有数据,从干净状态开始。
; 注意: 在某些 Fluent 版本中,(reset) 可能不起作用或不被推荐。
; 如果脚本是从 Fluent 空白界面启动的,可以省略。
; (reset)
; 读取网格文件
; 注意: 确保路径正确,这里使用相对路径。
(file/read-grid "mesh.msh")
; --- 2. 设置求解器类型和物理模型 ---
; 假设我们做的是基于压力的稳态流动
(define solver-type 'pressure-based)
(set! *solver-type* solver-type) ; 设置求解器类型
(solve/enable-iterations!) ; 启用稳态计算
; 设置重力
(define gravity '(0 -9.81 0))
(set! *gravity* gravity)
; --- 3. 定义材料 ---
; 使用默认的空气材料
(define material 'air)
(material-select material)
; --- 4. 设置边界条件 ---
; 定义入口速度
(define-inlet-velocity 'inlet-velocity 10.0 0.0 0.0) ; x, y, z 方向速度
; 定义出口压力
(set! *boundary-conditions* '((outlet-pressure 'outlet 101325))) ; 静压为 101325 Pa
; 定义壁面为无滑移条件
(set! *boundary-conditions* '((wall 'wall no-slip)))
; --- 5. 求解控制 ---
; 设置松弛因子 (示例)
(set! *under-relaxation-factors* '((pressure 0.3) (momentum 0.7)))
; --- 6. 初始化流场 ---
; 使用 Hybrid Initialization 进行初始化
(initialize/hybrid)
; --- 7. 运行求解 ---
; 迭代 500 步
(solve/iterate 500)
; --- 8. 保存结果 ---
; 保存案例文件 (包含网格、设置、收敛历史等)
(file/write-case-data "final_results.cas")
; 导出结果数据 (截面上的速度、压力等)
; 首先需要创建一个表面 (surface)
(define surface-x-y (create-surface 'plane-x-y (list 0 0 0) (list 0 0 1) (list 1 0 0)))
; 然后导出该表面的数据
(file/export-results "results.dat" surface-x-y '("velocity" "pressure"))
; 在控制台打印完成信息
(printf "Simulation completed successfully!~n")
(printf "Results saved to final_results.cas and results.dat~n")
; 退出 Fluent
(exit)

注意: 上述脚本中的某些命令(如 define-inlet-velocity)是简化或示意性的,实际命令可能更复杂,(define b (get-boundary-zone-names "inlet")) (set-velocity-inlet-conditions b ...),请查阅 Fluent 的 UDF/Scheme 手册获取精确命令。

步骤 2: 在命令行运行脚本

  1. 将上述代码保存为 run_simulation.scm

  2. 将你的网格文件 mesh.msh 放在同一个目录下。

  3. 打开终端(或命令提示符),进入该目录。

  4. 执行命令:

    # 在 Windows (CMD) 中
    fluent -i run_simulation.scm -g
    # 在 Linux/macOS 中
    ./fluent -i run_simulation.scm -g

步骤 3: 检查结果

脚本运行后,Fluent 界面会打开并自动执行所有步骤,完成后,你会在同一目录下找到 final_results.casresults.dat 文件。


高级用法:与 Python 集成

对于更复杂的自动化和数据处理,通常将 Fluent 作为计算引擎,由 Python 主导流程。

  1. 使用 PyFluent: Ansys 官方提供的 Python API,可以直接在 Python 脚本中启动和控制 Fluent。

    from ansys.fluent import Fluent
    # 启动 Fluent 会话
    session = Fluent()
    # 执行操作
    session.file.read_case("case.cas")
    session.solution.initialize.hybrid()
    session.solution.iterate(100)
    session.results.save("results")
    # 关闭会话
    session.exit()

    这是目前最推荐、最强大的方式。

  2. 使用 subprocess 调用: 如果不想用 PyFluent,可以在 Python 中用 subprocess 模块调用命令行 Fluent。

    import subprocess
    scheme_script = "run_simulation.scm"
    fluent_executable = "fluent" # 或 "C:\\Program Files\\Ansys Inc\\v232\\fluent\\bin\\win64\\fluent.exe"
    command = [fluent_executable, "-i", scheme_script, "-g"]
    print(f"Executing command: {' '.join(command)}")
    process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    stdout, stderr = process.communicate()
    if process.returncode == 0:
        print("Fluent simulation completed successfully.")
        print("Output:", stdout.decode())
    else:
        print("Fluent simulation failed.")
        print("Error:", stderr.decode())
方法 优点 缺点 适用场景
Scheme 脚本 功能最强大、最灵活,可实现复杂逻辑、循环、条件判断。 学习曲线较陡峭,需要手动编写代码。 核心自动化流程、参数化研究、复杂工作流。
Journal 文件 录制即用,简单快捷,是学习 Scheme 命令的好工具。 脆弱、冗余、难以维护,不适合复杂逻辑。 快速将手动操作转为脚本、简单流程的初步自动化。
PyFluent (Python) 现代、易于集成,能与 Python 生态(NumPy, Pandas, Matplotlib)无缝结合,适合数据处理和可视化。 需要一定的 Python 编程基础。 强烈推荐用于现代仿真自动化、机器学习辅助优化、复杂数据分析。

对于大多数希望进行高效自动化的用户,建议的路径是: 使用 Journal 文件生成初始脚本 -> 手动修改为健壮的 Scheme 脚本 -> 最终迁移到 PyFluent 进行更高级的控制和集成。

分享:
扫描分享到社交APP
上一篇
下一篇