2016-05-22 8 views
0

Dies ist ein Add-on zu einer vorherigen Frage zum Iterieren der Werte in und OpenMDAO-Problem. Ich möchte Werte mit top.run() berechnen können. Überprüfen Sie dann die Änderungen. Der vorherige Rat scheint jedoch nicht zu funktionieren.Die Werte von prob.root.unknowns ändern sich nicht mit solve

Ich habe festgestellt, dass prob.root.unknowns nicht wirklich ändert, wenn das Problem geändert oder ausgeführt wird.

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'] 

Antwort

1

Der Iterator über eine vec_wrapper gibt einen Iterator über die Tasten und die Meta-Data-Dictionary. Das val-Attribut, auf das Sie in den Metadaten zugreifen, ist eigentlich der Anfangswert.

Versuchen Sie stattdessen, und Sie werden sehen, dass es sich verändert:

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] 
Verwandte Themen