2016-08-23 38 views
0

我有一個獨立變量x,它被視爲一個numpy數組。我希望能夠根據向量中的其他值約束該向量中的某些值。即x_(k)< x_(k + 1)。我試過了:在OpenMDAO 1.x中傳遞numpy數組中的單個標量

root.add('p1',IndepVarComp('x',x=np.ones(10,dtype=float)) 
root.add('con',ExecComp('c0=x[1]-x[0]') 
root.connect('p1.x','con.x') 

這給了我關於變量不存在的錯誤和試圖連接到浮點數組的錯誤。將輸出數組中的特定值連接到定標器輸入的正確語法是什麼?

回答

0

在你鍵入的代碼中有幾個缺失的括號,但是那些必須來自將其轉錄到這裏。你缺少的主要東西是ExecComp的額外參數,以便它知道如何調整輸入x的大小。

import numpy as np 

from openmdao.api import Problem, Group, IndepVarComp, ExecComp 

prob = Problem() 
prob.root = root = Group() 

root.add('p1', IndepVarComp('x', np.array([3, 7, 5], dtype=float))) 
root.add('con', ExecComp('co = x[1] - x[0]', x=np.zeros(3,))) 
root.connect('p1.x','con.x') 

prob.setup() 
prob.run() 
print('con', prob['con.co']) 

當我跑,我得到預期的輸出:

############################################## 
Setup: Checking root problem for potential issues... 

No recorders have been specified, so no data will be saved. 

Setup: Check of root problem complete. 
############################################## 

('con', 4.0) 

另一種方式做,這是使用縮放表達式,然後從「p1.x單一指標發出連接':

root.add('con2', ExecComp('co = b - a')) 
root.connect('p1.x', 'con2.a', src_indices=[0]) 
root.connect('p1.x', 'con2.b', src_indices=[1])