def test_direct_solver_comp(self): """ Test the direct solver on a component. """ for jac in [None, 'csc', 'dense']: prob = Problem(model=ImplComp4Test()) prob.model.nonlinear_solver = NewtonSolver() if jac in ('csc', 'dense'): prob.model.options['assembled_jac_type'] = jac prob.model.linear_solver = DirectSolver(assemble_jac=jac in ('csc','dense')) prob.set_solver_print(level=0) prob.setup(check=False) prob.run_model() assert_rel_error(self, prob['y'], [-1., 1.]) d_inputs, d_outputs, d_residuals = prob.model.get_linear_vectors() d_residuals.set_const(2.0) d_outputs.set_const(0.0) prob.model.run_solve_linear(['linear'], 'fwd') result = d_outputs.get_data() assert_rel_error(self, result, [-2., 2.]) d_outputs.set_const(2.0) d_residuals.set_const(0.0) prob.model.run_solve_linear(['linear'], 'rev') result = d_residuals.get_data() assert_rel_error(self, result, [2., -2.])
def test_direct_solver_comp(self): """ Test the direct solver on a component. """ for jac in [None, 'csc', 'dense']: prob = Problem(model=ImplComp4Test()) prob.model.nonlinear_solver = NewtonSolver(solve_subsystems=False) if jac in ('csc', 'dense'): prob.model.options['assembled_jac_type'] = jac prob.model.linear_solver = DirectSolver(assemble_jac=jac in ('csc','dense')) prob.set_solver_print(level=0) prob.setup() prob.run_model() assert_near_equal(prob['y'], [-1., 1.]) d_inputs, d_outputs, d_residuals = prob.model.get_linear_vectors() d_residuals.set_val(2.0) d_outputs.set_val(0.0) prob.model.run_solve_linear('fwd') result = d_outputs.asarray() assert_near_equal(result, [-2., 2.]) d_outputs.set_val(2.0) d_residuals.set_val(0.0) prob.model.run_solve_linear('rev') result = d_residuals.asarray() assert_near_equal(result, [2., -2.])
def test_direct_solver_comp(self): """ Test the direct solver on a component. """ for jac in [None, 'csc', 'dense']: prob = Problem(model=ImplComp4Test()) prob.model.nonlinear_solver = NewtonSolver() if jac in ('csc', 'dense'): prob.model.options['assembled_jac_type'] = jac prob.model.linear_solver = DirectSolver(assemble_jac=jac in ('csc','dense')) prob.set_solver_print(level=0) prob.setup(check=False) prob.run_model() assert_rel_error(self, prob['y'], [-1., 1.]) d_inputs, d_outputs, d_residuals = prob.model.get_linear_vectors() d_residuals.set_const(2.0) d_outputs.set_const(0.0) prob.model.run_solve_linear(['linear'], 'fwd') result = d_outputs._data assert_rel_error(self, result, [-2., 2.]) d_outputs.set_const(2.0) d_residuals.set_const(0.0) prob.model.run_solve_linear(['linear'], 'rev') result = d_residuals._data assert_rel_error(self, result, [2., -2.])
def test_direct_solver_comp(self): """ Test the direct solver on a component. """ for jac in ['dict', 'coo', 'csr', 'csc', 'dense']: prob = Problem(model=ImplComp4Test()) prob.model.nonlinear_solver = NewtonSolver() prob.model.linear_solver = DirectSolver() prob.set_solver_print(level=0) if jac == 'dict': pass elif jac == 'csr': prob.model.jacobian = CSRJacobian() elif jac == 'csc': prob.model.jacobian = CSCJacobian() elif jac == 'coo': prob.model.jacobian = COOJacobian() elif jac == 'dense': prob.model.jacobian = DenseJacobian() prob.setup(check=False) if jac == 'coo': with self.assertRaises(Exception) as context: prob.run_model() self.assertEqual( str(context.exception), "Direct solver is not compatible with matrix type COOMatrix in system ''." ) continue prob.run_model() assert_rel_error(self, prob['y'], [-1., 1.]) d_inputs, d_outputs, d_residuals = prob.model.get_linear_vectors() d_residuals.set_const(2.0) d_outputs.set_const(0.0) prob.model.run_solve_linear(['linear'], 'fwd') result = d_outputs.get_data() assert_rel_error(self, result, [-2., 2.]) d_outputs.set_const(2.0) d_residuals.set_const(0.0) prob.model.run_solve_linear(['linear'], 'rev') result = d_residuals.get_data() assert_rel_error(self, result, [2., -2.])
def test_direct_solver_comp(self): """ Test the direct solver on a component. """ for jac in ['dict', 'coo', 'csr', 'csc', 'dense']: prob = Problem(model=ImplComp4Test()) prob.model.nonlinear_solver = NewtonSolver() prob.model.linear_solver = DirectSolver() prob.set_solver_print(level=0) if jac == 'dict': pass elif jac == 'csr': prob.model.jacobian = CSRJacobian() elif jac == 'csc': prob.model.jacobian = CSCJacobian() elif jac == 'coo': prob.model.jacobian = COOJacobian() elif jac == 'dense': prob.model.jacobian = DenseJacobian() prob.setup(check=False) if jac == 'coo': with self.assertRaises(Exception) as context: prob.run_model() self.assertEqual(str(context.exception), "Direct solver is not compatible with matrix type COOMatrix in system ''.") continue prob.run_model() assert_rel_error(self, prob['y'], [-1., 1.]) d_inputs, d_outputs, d_residuals = prob.model.get_linear_vectors() d_residuals.set_const(2.0) d_outputs.set_const(0.0) prob.model.run_solve_linear(['linear'], 'fwd') result = d_outputs.get_data() assert_rel_error(self, result, [-2., 2.]) d_outputs.set_const(2.0) d_residuals.set_const(0.0) prob.model.run_solve_linear(['linear'], 'rev') result = d_residuals.get_data() assert_rel_error(self, result, [2., -2.])
def setUp(self): group = TestImplicitGroup(lnSolverClass=ScipyKrylov, nlSolverClass=NonlinearBlockGS, use_varsets=True) p = Problem(group) p.set_solver_print(level=0) p.setup(check=False) p.final_setup() self.p = p # now create the same problem with no varsets group = TestImplicitGroup(lnSolverClass=ScipyKrylov, nlSolverClass=NonlinearBlockGS, use_varsets=False) p = Problem(group) p.set_solver_print(level=0) p.setup(check=False) p.final_setup() self.p_no_varsets = p
def setUp(self): group = TestImplicitGroup(lnSolverClass=ScipyKrylov, nlSolverClass=NonlinearBlockGS, use_varsets=True) p = Problem(group) p.set_solver_print(level=0) p.setup(check=False) p.final_setup() self.p = p # now create the same problem with no varsets group = TestImplicitGroup(lnSolverClass=ScipyKrylov, nlSolverClass=NonlinearBlockGS, use_varsets=False) p = Problem(group) p.set_solver_print(level=0) p.setup(check=False) p.final_setup() self.p_no_varsets = p