首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenMDAO版本2.x文件变量解决方法

OpenMDAO版本2.x文件变量解决方法
EN

Stack Overflow用户
提问于 2018-07-02 10:07:38
回答 1查看 96关注 0票数 0

我是OpenMDAO的新手,开始使用最新的版本(本文发布时的版本是2.3.1 )。

我正在使用几个外部代码,特别是NASTRAN和几个后处理NASTRAN结果的可执行文件(编译的C++),对相当复杂的空气结构优化进行设置。

理想情况下,我希望将这些分解成多个组件来生成模型,运行NASTRAN,对结果进行后处理,然后从文本文件中提取我的目标和约束。我所有现有的界面都是通过文本文件输入和输出的。根据GitHub页面,旧版本(v1.7.4)中存在的文件变量功能在版本2中尚未实现。

https://github.com/OpenMDAO/OpenMDAO

在添加该功能之前,有没有好的解决方法?

到目前为止,我想出的最好的解决方案是将所有内容分组到一个大型组件中,该组件通过运行所有内容来将输入变量映射到最终输出,而不是运行多个较小的组件来拆分进程。

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2018-07-02 10:39:42

文件变量本身不再在OpenMDAO中实现。它们造成了很多麻烦,并且没有从根本上提供有用的功能,因为它们需要将整个文件序列化到内存中,并将其作为字符串缓冲区传递。整个过程是重复和低效的,因为文件最终被写入和从磁盘读取的次数远远超过了必要的次数。

在您的情况下,因为您设置了一个空气结构问题,所以无论如何您都不会想要使用它们。您将希望能够访问解析或至少半解析的全导数,以提高执行效率。这意味着每个组件的边界必须只由浮点变量或浮点变量数组组成。

您想要做的是使用ExternalCodeImplicitComp包装您的分析工具,这告诉openmdao底层分析实际上是隐式的。然后,即使你使用有限差分来计算偏导数,你也只需要在残差评估中进行FD。对于NASTRAN,这可能有点棘手,因为我不知道它是否直接暴露了残差评估,但如果你可以得到刚度矩阵,那么你应该能够计算它。你会因你的努力而获得极大的效率和准确性。

在每个包装器中,可以使用内置的file wrapping tools读取编写的文件并提取数值,然后将其放入输出向量中。对于NASTRAN,您可以考虑使用pyNASTRAN,而不是文件包装工具,以节省一些工作。

如果您不能公开残差评估,那么您可以使用ExternalCodeComp,并将分析视为显式的。这将使您的FD更昂贵,更不准确,但对于线性分析,您应该是好的(仍然不理想,但总比没有好)。

这里的关键思想是您不会要求OpenMDAO传递文件对象。您将在每个组件的边界处仅包含数字数据。这样做的好处是允许OpenMDAO的自动导数特性工作(即使您使用FD来计算偏导数)。它还有一个次要的优势,如果你(希望)为你的代码升级到内存中的包装器,那么你就不必更新你的模型。只有组件的内部代码才会更改。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51128351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档