不同的 IndepVarComp 初始化中断 OpenMDAO

Different IndepVarComp initialization breaks 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)

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=['*'])