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

问题描述 投票:2回答:1

我的previous question的续集:

我正在使用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行是可以的),但是它没有将“ Volume Fraction”的值设置为1,也没有关闭窗口。另外,在循环结束时,在命令窗口上打印了一个#f,我想是Scheme告诉我出了点问题,但是我不知道是什么。

即使将使用循环变量的部分(显然)可以正常工作,为什么当我将代码放入循环中时,代码的行为也会改变?末尾打印的#f是什么?

scheme simulation fluid-dynamics
1个回答
0
投票

我正在从事类似的项目,这些奇怪的问题也发生在我身上。唯一的区别是,我使用的是普通的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)")
     )
)

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

然后再次单独执行这些命令,并特别注意菜单的最终位置。您可能会陷入某种“子菜单”,在执行其他操作之前必须先退出该子菜单。我希望您能从以下示例中得到我的理解,该示例无需使用“ quit”就可以工作

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

© www.soinside.com 2019 - 2024. All rights reserved.