def test_solve_subsystems_assembled_jac_top_implicit_scaling_units(self): prob = Problem(model=DoubleSellarImplicit(units=True, scaling=True)) model = prob.model model.jacobian = DenseJacobian() g1 = model.g1 g1.nonlinear_solver = NewtonSolver() g1.nonlinear_solver.options['rtol'] = 1.0e-5 g1.linear_solver = DirectSolver() g2 = model.g2 g2.nonlinear_solver = NewtonSolver() g2.nonlinear_solver.options['rtol'] = 1.0e-5 g2.linear_solver = DirectSolver() model.nonlinear_solver = NewtonSolver() model.linear_solver = ScipyKrylov() model.nonlinear_solver.options['solve_subsystems'] = True prob.setup() prob.run_model() assert_rel_error(self, prob['g1.y1'], 0.053333333, .00001) assert_rel_error(self, prob['g1.y2'], 0.80, .00001) assert_rel_error(self, prob['g2.y1'], 0.053333333, .00001) assert_rel_error(self, prob['g2.y2'], 0.80, .00001)
def test_solve_subsystems_assembled_jac_top_implicit_scaling(self): prob = Problem() model = prob.model = DoubleSellarImplicit(scaling=True) model.jacobian = DenseJacobian() g1 = model.get_subsystem('g1') g1.nonlinear_solver = NewtonSolver() g1.nonlinear_solver.options['rtol'] = 1.0e-5 g1.linear_solver = DirectSolver() g2 = model.get_subsystem('g2') g2.nonlinear_solver = NewtonSolver() g2.nonlinear_solver.options['rtol'] = 1.0e-5 g2.linear_solver = DirectSolver() model.nonlinear_solver = NewtonSolver() model.linear_solver = ScipyIterativeSolver() model.nonlinear_solver.options['solve_subsystems'] = True prob.setup() prob.run_model() assert_rel_error(self, prob['g1.y1'], 0.64, .00001) assert_rel_error(self, prob['g1.y2'], 0.80, .00001) assert_rel_error(self, prob['g2.y1'], 0.64, .00001) assert_rel_error(self, prob['g2.y2'], 0.80, .00001)
def test_solve_subsystems_assembled_jac_top_implicit_scaling_units(self): prob = om.Problem(model=DoubleSellarImplicit(units=True, scaling=True)) model = prob.model g1 = model.g1 g1.nonlinear_solver = om.NewtonSolver(solve_subsystems=False, rtol=1.0e-5) g1.nonlinear_solver.linesearch = None g1.linear_solver = om.DirectSolver() g2 = model.g2 g2.nonlinear_solver = om.NewtonSolver(solve_subsystems=False, rtol=1.0e-5) g2.nonlinear_solver.linesearch = None g2.linear_solver = om.DirectSolver() model.nonlinear_solver = om.NewtonSolver(solve_subsystems=True) model.nonlinear_solver.linesearch = None model.linear_solver = om.ScipyKrylov(assemble_jac=True) model.options['assembled_jac_type'] = 'dense' prob.setup() prob.run_model() assert_rel_error(self, prob['g1.y1'], 0.053333333, .00001) assert_rel_error(self, prob['g1.y2'], 0.80, .00001) assert_rel_error(self, prob['g2.y1'], 0.053333333, .00001) assert_rel_error(self, prob['g2.y2'], 0.80, .00001)
def test_solve_subsystems_assembled_jac_top_implicit(self): prob = om.Problem(model=DoubleSellarImplicit()) model = prob.model g1 = model.g1 g1.nonlinear_solver = om.NewtonSolver(solve_subsystems=False, rtol=1.0e-5) g1.linear_solver = om.DirectSolver() g2 = model.g2 g2.nonlinear_solver = om.NewtonSolver(solve_subsystems=False, rtol=1.0e-5) g2.linear_solver = om.DirectSolver() model.nonlinear_solver = om.NewtonSolver(solve_subsystems=True) model.linear_solver = om.ScipyKrylov(assemble_jac=True) model.options['assembled_jac_type'] = 'dense' prob.setup() prob.run_model() assert_near_equal(prob['g1.y1'], 0.64, .00001) assert_near_equal(prob['g1.y2'], 0.80, .00001) assert_near_equal(prob['g2.y1'], 0.64, .00001) assert_near_equal(prob['g2.y2'], 0.80, .00001)
def _build_model(mode, implicit=False): p = Problem() dv = p.model.add_subsystem('dv', IndepVarComp(), promotes=['*']) dv.add_output('z', [1.,1.]) if implicit: p.model.add_subsystem('double_sellar', DoubleSellarImplicit()) else: p.model.add_subsystem('double_sellar', DoubleSellar()) p.model.connect('z', ['double_sellar.g1.z', 'double_sellar.g2.z']) p.model.add_design_var('z', lower=-10, upper=10) p.model.add_objective('double_sellar.g1.y1') p.setup(mode=mode) p.model.nonlinear_solver = NewtonSolver() return p
def test_solve_subsystems_assembled_jac_top_implicit_scaling(self): prob = Problem(model=DoubleSellarImplicit(scaling=True)) model = prob.model g1 = model.g1 g1.nonlinear_solver = NewtonSolver(rtol=1.0e-5) g1.linear_solver = DirectSolver() g2 = model.g2 g2.nonlinear_solver = NewtonSolver(rtol=1.0e-5) g2.linear_solver = DirectSolver() model.nonlinear_solver = NewtonSolver(solve_subsystems=True) model.linear_solver = ScipyKrylov(assemble_jac=True) model.options['assembled_jac_type'] = 'dense' prob.setup() prob.run_model() assert_rel_error(self, prob['g1.y1'], 0.64, .00001) assert_rel_error(self, prob['g1.y2'], 0.80, .00001) assert_rel_error(self, prob['g2.y1'], 0.64, .00001) assert_rel_error(self, prob['g2.y2'], 0.80, .00001)