收敛验证周期GS

时间:2017-11-02 13:35:50

标签: openmdao

在运行包含带有循环的Group类的问题时,我不确定是否理解对GS收敛信息的访问。 为了说明这一点,请考虑Sellar问题的这两个版本:

prob = Problem()
model = prob.model
model.add_subsystem('px', IndepVarComp('x', 1.0), promotes=['x'])
model.add_subsystem('pz', IndepVarComp('z', np.array([5.0, 2.0])), promotes=['z'])
model.add_subsystem('d1', SellarDis1.SellarDis1(), promotes=['x', 'z', 'y1', 'y2'])
model.add_subsystem('d2', SellarDis2.SellarDis2(), promotes=['z', 'y1', 'y2'])
nlgbs = model.nonlinear_solver = NonlinearBlockGS()
nlgbs.options['maxiter'] = 8

prob.setup()
A = prob.run_model()

在这个版本中,在变量A中有收敛结果,如

(False, 1.3188028447075339e-10, 3.6299074030587596e-12)

但是,在以下列形式定义Sellar问题时:

class SellarMDA(Group):
    def setup(self):
        indeps = self.add_subsystem('indeps', IndepVarComp(), promotes=['*'])
        indeps.add_output('x', 1.0)
        indeps.add_output('z', np.array([5.0, 2.0]))

        cycle = self.add_subsystem('cycle', Group(), promotes=['*'])
        d1 = cycle.add_subsystem('d1', SellarDis1.SellarDis1(), promotes_inputs=['x', 'z', 'y2'], promotes_outputs=['y1'])
        d2 = cycle.add_subsystem('d2', SellarDis2.SellarDis2(), promotes_inputs=['z', 'y1'], promotes_outputs=['y2'])
        nl = cycle.nonlinear_solver = NonlinearBlockGS()
        nl.options['maxiter'] = 8


prob = Problem()
prob.model = SellarMDA()
prob.setup()
prob['x'] = 2.
prob['z'] = [-1., -1.]
C = prob.run_model()

在变量C中没有与GS收敛相关的信息,只有

(False, 0.0, 0.0)

是否可以像第1版那样在不使用录像机的情况下获得第2版的GS收敛信息?

1 个答案:

答案 0 :(得分:0)

如果你想看看解算器在做什么,我肯定会建议打开剩余打印。您可以为每个求解器单独执行此操作,但我发现使用问题方法更容易将其全部打开:

prob.set_solver_print(level=2)