我有一个以数组开头的工作流程。我得到了这个工作流程,但有一个有趣的事情导致它破裂,我不明白为什么。
为了测试,我有一个提供向量的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)
答案 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=['*'])