0

我有一个以数组开头的工作流程。我让这个工作流程正常工作,但是有一件有趣的事情导致它中断,我不明白为什么。

为了进行测试,我有一个提供向量的 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)
4

1 回答 1

1

似乎 OpenMDAO 需要 numpy 浮点数组。所以 IndepVarComp 需要用这些类型进行初始化。一些创建 numpy 数组的方法将创建整数数组。当 np.arange 只传递一个数字时就是这种情况。当这些数组被传递给 IndepVarComp 时,openMDAO 假定不能采用导数。因此检查导数不会超过这些变量。可以通过使用参数“dtype=np.float_”创建数组来解决此问题

root.add('input', \
  IndepVarComp('top'+':'+'twcxVector', \ 
  np.arange(TWCXDictArraySize(twcxDict),dtype=np.float_)) \
  ,promotes=['*'])
于 2016-05-19T08:48:15.633 回答