def test_implicit_cycle_precon(self): prob = om.Problem() model = prob.model model.add_subsystem('p1', om.IndepVarComp('x', 1.0)) model.add_subsystem('d1', SellarImplicitDis1()) model.add_subsystem('d2', SellarImplicitDis2()) model.connect('d1.y1', 'd2.y1') model.connect('d2.y2', 'd1.y2') model.nonlinear_solver = om.NewtonSolver() model.nonlinear_solver.options['maxiter'] = 5 model.nonlinear_solver.linesearch = om.BoundsEnforceLS() model.linear_solver = om.ScipyKrylov() model.linear_solver.precon = self.linear_solver_class() prob.setup() prob['d1.y1'] = 4.0 prob.set_solver_print() prob.run_model() res = model._residuals.get_norm() # Newton is kinda slow on this for some reason, this is how far it gets with directsolver too. self.assertLess(res, 2.0e-2)
def test_implicit_cycle(self): prob = Problem() model = prob.model = Group() model.add_subsystem('p1', IndepVarComp('x', 1.0)) model.add_subsystem('d1', SellarImplicitDis1()) model.add_subsystem('d2', SellarImplicitDis2()) model.connect('d1.y1', 'd2.y1') model.connect('d2.y2', 'd1.y2') model.nonlinear_solver = NewtonSolver() model.nonlinear_solver.options['maxiter'] = 5 model.linear_solver = self.linear_solver_class() prob.setup(check=False) prob.set_solver_print(level=0) prob.run_model() res = model._residuals.get_norm() # Newton is kinda slow on this for some reason, this is how far it gets with directsolver too. self.assertLess(res, 2.0e-2)
def test_list_residuals_with_tol(self): from openmdao.test_suite.components.sellar import SellarImplicitDis1, SellarImplicitDis2 from openmdao.api import Problem, Group, IndepVarComp, NewtonSolver, ScipyKrylov, LinearBlockGS prob = Problem() model = prob.model = Group() model.add_subsystem('p1', IndepVarComp('x', 1.0)) model.add_subsystem('d1', SellarImplicitDis1()) model.add_subsystem('d2', SellarImplicitDis2()) model.connect('d1.y1', 'd2.y1') model.connect('d2.y2', 'd1.y2') model.nonlinear_solver = NewtonSolver() model.nonlinear_solver.options['maxiter'] = 5 model.linear_solver = ScipyKrylov() model.linear_solver.precon = LinearBlockGS() prob.setup(check=False) prob.set_solver_print(level=-1) prob.run_model() resids = model.list_residuals(tol=0.01, values=False) self.assertEqual(sorted(resids), ['d2.y2',])
def test_list_residuals_with_tol(self): import openmdao.api as om from openmdao.test_suite.components.sellar import SellarImplicitDis1, SellarImplicitDis2 prob = om.Problem() model = prob.model model.add_subsystem('p1', om.IndepVarComp('x', 1.0)) model.add_subsystem('d1', SellarImplicitDis1()) model.add_subsystem('d2', SellarImplicitDis2()) model.connect('d1.y1', 'd2.y1') model.connect('d2.y2', 'd1.y2') model.nonlinear_solver = om.NewtonSolver() model.nonlinear_solver.options['maxiter'] = 5 model.linear_solver = om.ScipyKrylov() model.linear_solver.precon = om.LinearBlockGS() prob.setup() prob.set_solver_print(level=-1) prob.run_model() outputs = model.list_outputs(residuals_tol=0.01, residuals=True) print(outputs)