不同的 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=['*'])
我有一个以数组开头的工作流程。我让这个工作流程正常工作,但是有一件有趣的事情导致它中断,我不明白为什么。
为了测试,我有一个提供矢量的 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=['*'])