我上一个问题的续集:
我正在使用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)
替换为(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
是可以的(,但它没有将"体积分数"的值设置为1,也没有关闭窗口。此外,在循环结束时,一个#f
被打印到命令窗口,我想这是Scheme告诉我出了问题,但我不知道是什么。
为什么当我把代码放在循环中时,代码的行为会发生变化,即使使用循环变量的部分(显然(正在工作?最后打印的#f
是什么?
我正在做一个类似的项目,这些奇怪的问题也发生在我身上。唯一的区别是,我使用的是普通的TUI命令,而不是这些CFX命令。
Ansys Fluent对Scheme没有明确的标准,因此通常很难找到可靠的文档或解释问题。Ansys的一位工程师告诉我,他们使用的是"麻省理工学院方案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)")
)
)
这经常为我解决这些问题
其次,再次单独执行这些命令,并特别注意您在菜单中的位置。你可能会陷入某种"子菜单",在做其他事情之前你必须退出。我希望你能从下面的例子中得到我的观点,这将在没有"退出"的情况下起作用
/显示对象创建网格汽车曲面列表(car(退出