2016-05-22 6 views
0

これは、以前の質問のアドオンであり、openMDAOの値を反復することについてのアドオンです。私はtop.run()で値を計算できるようにしたい。次に、変更を調べます。しかし、これまでのアドバイスはうまくいかないようです。prob.root.unknownsの値が解決で変更されない

問題が修正または実行されたときにprob.root.unknownsが実際に変更されないことがわかりました。

class TestObj(Component): 

    def __init__(self): 

     Component.__init__(self) 

     self.add_param('x',5.0) 
     self.add_output('y',5.0) 

    def solve_nonlinear(self,params,unknowns,resids): 

     unknowns['y']=params['x'] 

top = Problem() 
root = Group() 
top.root=root 

root.add('split',IndepVarComp('x',2.0),promotes=['*']) 
root.add('test',TestObj(),promotes=['*']) 

top.setup() 
top.root.list_connections() 

print 'starting' 
print top['x'] 
print top['y'] 
for k,v in top.root.unknowns.iteritems(): 
    print k 
    print v['val'] 
top.run() 

print 'after first solve' 
print top['x'] 
print top['y'] 
for k,v in top.root.unknowns.iteritems(): 
    print k 
    print v['val'] 

top['x']=33.0 

print 'after second solve' 
print top['x'] 
print top['y'] 
for k,v in top.root.unknowns.iteritems(): 
    print k 
    print v['val'] 

top.run() 

print 'after third solve' 
print top['x'] 
print top['y'] 
for k,v in top.root.unknowns.iteritems(): 
    print k 
    print v['val'] 

答えて

1

vec_wrapper戻るキー反復子、およびメタデータ・ディクショナリの反復子。メタデータでアクセスしている 'val'属性は、実際には初期値です。

代わりにこれを試してみてください、あなたはそれが変化していることがわかります:

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

class TestObj(Component): 

    def __init__(self): 

     Component.__init__(self) 

     self.add_param('x',5.0) 
     self.add_output('y',5.0) 

    def solve_nonlinear(self,params,unknowns,resids): 

     unknowns['y']=params['x'] 

top = Problem() 
root = Group() 
top.root=root 

root.add('split',IndepVarComp('x',2.0),promotes=['*']) 
root.add('test',TestObj(),promotes=['*']) 

top.setup() 
top.root.list_connections() 

print 'starting' 
print top['x'] 
print top['y'] 
for k,v in root.unknowns.iteritems(): 
    print k 
    print top.root.unknowns[k] 
top.run() 

print 'after first solve' 
print top['x'] 
print top['y'] 
for k,v in root.unknowns.iteritems(): 
    print k 
    print top.root.unknowns[k] 

top['x']=33.0 

print 'after second solve' 
print top['x'] 
print top['y'] 
for k,v in top.root.unknowns.iteritems(): 
    print k 
    print top.root.unknowns[k] 

top.run() 

print 'after third solve' 
print top['x'] 
print top['y'] 
for k,v in top.root.unknowns.iteritems(): 
    print k 
    print top.root.unknowns[k] 
関連する問題