我的续集上一个问题 https://stackoverflow.com/q/58906949/12388640:
我正在使用 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
行都可以),但它不会将“体积分数”的值设置为 1,也不会关闭窗口。另外,在循环结束时,#f
打印到命令窗口,我想这是计划告诉我出了问题,但我不知道是什么。
为什么当我将代码放入循环中时,代码的行为会发生变化,即使使用循环变量的部分(显然)正在工作?什么是#f
打印在最后?
我正在从事一个类似的项目,这些奇怪的问题也发生在我身上。
唯一的区别是,我使用普通的 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)")
)
)
这经常为我解决此类问题。
其次,再次单独执行这些命令,并特别注意您在菜单中的位置。您可能会陷入某种“子菜单”,在执行其他操作之前必须退出该菜单。
我希望您从下面的示例中明白我的观点,该示例无需“退出”即可工作
/显示对象创建网格汽车表面列表(car) quit
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)