不同的IndepVarComp初始化会破坏OpenMDAO

时间:2016-05-19 06:01:02

标签: openmdao

我有一个以数组开头的工作流程。我得到了这个工作流程,但有一个有趣的事情导致它破裂,我不明白为什么。

为了测试,我有一个提供向量的IndepVarComp。它只能在使用np.zeros(...)的矢量初始化时才起作用。

root.add('input', \
  IndepVarComp('top'+':'+'twcxVector', \ 
  np.zeros(TWCXDictArraySize(twcxDict))) \ # <- arange breaks here
  ,promotes=['*'])

我尝试使用像np.arange(...)之类的东西来验证是否正确填充了内容。但那时没有任何事情发生。

所以我更了解事情,有人可以解释为什么这样的事情导致OpenMDAO破裂。

作为参考,这是工作流程的其余部分:

root.add('obj',Array2TWCXDictOpenMDAO(twcxDict,'top'+':') \
  ,promotes=['*'])

top.setup()
top.root.list_connections()

top.run()
data = top.check_total_derivatives(out_stream=sys.stdout)
top.run()
data = top.check_partial_derivatives(out_stream=sys.stdout)

1 个答案:

答案 0 :(得分:1)

OpenMDAO似乎需要numpy浮点数组。所以IndepVarComp需要用这些类型进行初始化。一些用于创建numpy数组的方法将创建整数数组。当np.arange只传递一个数字时就是这种情况。当这些数组传递给IndepVarComp时,openMDAO假定无法获取衍生物。因此,检验导数不会超过这些变量。可以通过使用参数&#39; dtype = np.float _&#39;

创建数组来解决此问题。
root.add('input', \
  IndepVarComp('top'+':'+'twcxVector', \ 
  np.arange(TWCXDictArraySize(twcxDict),dtype=np.float_)) \
  ,promotes=['*'])