openmdao - OpenMDAO 为不会导致运行时错误的 ExternalCodeComp 添加命令行参数
问题描述
在 OpenMDAO V3.1 中,我使用 ExternalCodeComp 来执行 CFD 代码。通常,我会这样称呼它:
mpirun nodet_mpi --design_run
如果在适当的目录中进行了上述调用,那么它将找到适当的运行文件并执行 CFD 运行。我已经尝试了 ExternalCodeComp 的命令参数;
execute = ['mpirun', 'nodet_mpi', '--design_run']
execute = ['mpirun', 'nodet_mpi --design_run']
execute = ['mpirun nodet_mpi --design_run']
我要么得到一个错误,例如:
RunTimeError:255,文件“nodet_mpi --design_run”上的 execvp 错误(没有这样的文件或目录)
或者找不到该命令。
当未定义输入文件时,有什么方法可以设置执行语句以包含流求解器的命令行参数?
提前致谢!
解决方案
您的问题中的一个细节似乎不正确,您说您已经尝试过execute = "..."
。ExternalCodeComp 使用一个名为command
. 我将假设您在代码中使用了正确的选项。
最正确的使用形式是将所有参数作为列表中的单个条目的列表:
self.options['command'] = ['mpirun', 'nodet_mpi', '--design_run']
您的错误消息似乎表明运行 OpenMDAO 的目录与您要从中执行 CFD 代码的目录不同。cd
最简单的解决方案是在执行 python 脚本之前通过终端窗口确保您位于正确的目录中。
但是,您的 python 脚本位于不同的位置可能是有原因的,因此我可以建议其他选项:
您可以在已实现的方法中使用
os.getcwd()
和组合,以确保切换到和退出 CFD 代码的工作目录。os.chdir()
compute
如果您愿意,您可以
self.options['command']
在计算方法中即时修改分配给选项的列表条目。您将再次依赖os
模块中的某些方法来寻求帮助。os.path.exists
可用于测试您需要的特定输入文件是否存在,您可以相应地修改command
选项。
对于选项 2,代码如下所示:
def compute(self, inputs, outputs):
if os.path.exists('some_input.file'):
self.options['command'] = ['mpirun', 'nodet_mpi', '--design_run']
else:
self.options['command'] = ['mpirun', 'nodet_mpi', '--design_run', '--other_options']
# the parent compute function actually runs the external code
super().compute(inputs, outputs)
推荐阅读
- android - 如何获得相机权限android
- python - 创建一个列表,显示每个用户在网站上发布了多少帖子
- twitter - 使用 api.search 时 Tweepy 随机跳过推文
- video.js - 为什么videojs有时会返回0值作为playbackRate
- swift - 删除特定文档,而不是所有 Firestrore 集合
- c# - Simba ODBC 连接到增量表并使用 .Net C# 从增量格式表中读取数据
- pytorch - 如何模拟 GPU 来测试用 Pytorch 编写的代码?
- javascript - 将套接字变量分配给 React Hook State 并作为 Context 传递
- arrays - [string[]] 参数与读取主机行为
- azure - 如何在 ADF 中使用作业控制文件或 0 kb 文件(fin)跟踪复制活动?