我上一个问题的续集:
我正在使用 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
打印的是什么?