>

주기가있는 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)

레코더를 사용하지 않고 첫 번째 버전과 같이 두 번째 버전의 GS 수렴 정보를 얻을 수 있습니까?


  • 답변 # 1

    솔버가 무엇을하고 있는지 보려면, 남은 인쇄를 켜는 것이 좋습니다. 각 솔버에 대해 개별적으로 수행 할 수 있지만 문제 해결 방법을 사용하여 모두 쉽게 켤 수 있습니다.

    prob.set_solver_print(level=2)
    
    

  • 이전 Haskell,"다중 유형"목록 작성
  • 다음 관련 모델의 ForeignKey에서 Django REST API 리턴 필드