Scheme(Fluent)中在(do..)内部运行代码的执行方式与在循环外部不同



我上一个问题的续集:

我正在使用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(退出

相关内容

  • 没有找到相关文章

最新更新