2

我上一个问题的续集:

我正在使用 ANSYS Fluent 程序进行 CFD 模拟。这个程序允许使用所谓的日志文件对模拟设置进行部分自动化,我刚刚知道这个日志文件是用 Scheme 编写的。不幸的是,我什至从未听说过 Scheme,我只知道它是一种 Lisp 方言(我也一无所知)。

我试图通过使用循环自动为我的模拟设置一堆参数来自动化一些无聊的任务。如果我从 Fluent 的命令界面(模注释)运行此命令:

; Select item in list
(cx-gui-do cx-set-list-selections "Boundary Conditions*Table1*List2(Zone)" '( 4))
; (Also?) select item in list
(cx-gui-do cx-activate-item "Boundary Conditions*Table1*List2(Zone)")
; Open dialog window for the selected item
(cx-gui-do cx-activate-item "Boundary Conditions*Table1*Table3*Table4*ButtonBox1*PushButton1(Edit)")
; Set the "volume fraction" parameter to 1
(cx-gui-do cx-set-expression-entry "Velocity Inlet*Frame3*Frame6(Multiphase)*Table1*Table16*ExpressionEntry1(Volume Fraction)" '("1" . 0))
; CLick OK button to close window
(cx-gui-do cx-activate-item "Velocity Inlet*PanelButtons*PushButton1(OK)")

它按预期进行:它从下拉列表中选择一个项目,为该项目打开一个对话窗口,将参数的值从 0 更改为 1,然后关闭该窗口。如果我将上述内容包装在一个循环中以循环浏览列表中的项目,并替换'( 4)by (list z)

(do ((z 4 (+ 1 z)))
    ((> z 27))
  (cx-gui-do cx-set-list-selections "Boundary Conditions*Table1*List2(Zone)" (list z))
  (cx-gui-do cx-activate-item "Boundary Conditions*Table1*List2(Zone)")
  (cx-gui-do cx-activate-item "Boundary Conditions*Table1*Table3*Table4*ButtonBox1*PushButton1(Edit)")
  (cx-gui-do cx-set-expression-entry "Velocity Inlet*Frame3*Frame6(Multiphase)*Table1*Table16*ExpressionEntry1(Volume Fraction)" '("1" . 0))
  (cx-gui-do cx-activate-item "Velocity Inlet*PanelButtons*PushButton1(OK)"))

程序从列表中选择项目并打开对话窗口(所以我想前三cx-gui-do行没问题),但它没有将“Volume Fraction”的值设置为 1,也没有关闭窗口。此外,在循环结束时,#f命令窗口会打印出 an,我想这是 Scheme 告诉我出了什么问题,但我不知道是什么。

为什么当我将代码放在循环中时,它的行为会发生变化,即使使用循环变量的部分(显然)正在工作?最后#f打印的是什么?

4

1 回答 1

1

我正在做一个类似的项目,这些奇怪的问题也发生在我身上。唯一的区别是,我使用的是普通的 TUI 命令而不是这些 CFX 命令。

Ansys Fluent 没有关于 Scheme 的明确标准,因此通常很难找到可靠的文档或解释问题。Ansys 工程师告诉我,他们使用“MIT 方案 3 和 4 的混合物”。

我必须不时为你提供建议,这对我有帮助。

首先尝试将您的命令包装在一个(begin .....)语句中。

(do ((z 4 (+ 1 z)))
    ((> z 27))
     (begin
      (cx-gui-do cx-set-list-selections "Boundary Conditions*Table1*List2(Zone)" (list z))
      (cx-gui-do cx-activate-item "Boundary Conditions*Table1*List2(Zone)")
      (cx-gui-do cx-activate-item "Boundary Conditions*Table1*Table3*Table4*ButtonBox1*PushButton1(Edit)")
      (cx-gui-do cx-set-expression-entry "Velocity Inlet*Frame3*Frame6(Multiphase)*Table1*Table16*ExpressionEntry1(Volume Fraction)" '("1" . 0))
      (cx-gui-do cx-activate-item "Velocity Inlet*PanelButtons*PushButton1(OK)")
     )
)

这通常为我解决了这些问题。

其次,再次自行执行这些命令,并特别注意最终在菜单中的位置。您可能会陷入某种“子菜单”中,您必须在执行其他操作之前退出该菜单。我希望你能从下面的例子中明白我的意思,它可以在没有“退出”的情况下工作

/显示对象创建网格汽车表面列表(汽车)退出

于 2020-06-09T17:08:28.457 回答