def test_nested(self): top = Problem() root = top.root = Group() sub = root.add('sub', Group(), promotes=['x', 'z', 'y1', 'y2']) sub.add('comp', SellarInABox(), promotes=['x', 'z', 'y1', 'y2']) sub.add('px', IndepVarComp('x', 1.0), promotes=['x']) sub.add('pz', IndepVarComp('z', np.array([5.0, 2.0])), promotes=['z']) root.nl_solver = Newton() root.ln_solver = ScipyGMRES() root.ln_solver.preconditioner = LinearGaussSeidel() top.setup(check=False) # Turn on all iprints top.print_all_convergence() base_stdout = sys.stdout try: ostream = cStringIO() sys.stdout = ostream top.run() finally: sys.stdout = base_stdout assert_rel_error(self, top['y1'], 25.58830273, .00001) assert_rel_error(self, top['y2'], 12.05848819, .00001) self.assertGreater(top.root.sub.comp.count_solve_linear, 0) printed = ostream.getvalue() self.assertTrue('PRECON:' in printed)
def test_iprint(self): top = Problem() top.root = SellarStateConnection() top.setup(check=False) base_stdout = sys.stdout try: ostream = cStringIO() sys.stdout = ostream top.run() finally: sys.stdout = base_stdout printed = ostream.getvalue() self.assertEqual(printed, '') # Turn on all iprints top.print_all_convergence() try: ostream = cStringIO() sys.stdout = ostream top.run() finally: sys.stdout = base_stdout printed = ostream.getvalue() self.assertEqual(printed.count('NEWTON'), 3) self.assertEqual(printed.count('GMRES'), 4) self.assertTrue('[root] NL: NEWTON 0 | ' in printed) self.assertTrue(' [root.sub] LN: GMRES 0 | ' in printed)
def test_nested_relevancy_gmres(self): # This test is just to make sure that values in the dp vector from # higher scopes aren't sitting there converting themselves during sub # iterations. prob = Problem(impl=impl) root = prob.root = Group() root.add('p1', IndepVarComp('xx', 3.0)) root.add( 'c1', ExecComp(['y1=0.5*x + 1.0*xx', 'y2=0.3*x - 1.0*xx'], units={'y2': 'km'})) root.add('c2', ExecComp(['y=0.5*x'])) sub = root.add('sub', Group()) sub.add('cc1', ExecComp(['y=1.01*x1 + 1.01*x2'], units={'x1': 'fm'})) sub.add('cc2', ExecComp(['y=1.01*x'])) root.connect('p1.xx', 'c1.xx') root.connect('c1.y1', 'c2.x') root.connect('c2.y', 'c1.x') root.connect('c1.y2', 'sub.cc1.x1') root.connect('sub.cc1.y', 'sub.cc2.x') root.connect('sub.cc2.y', 'sub.cc1.x2') root.nl_solver = Newton() root.nl_solver.options['maxiter'] = 1 root.ln_solver = PetscKSP() root.ln_solver.options['maxiter'] = 1 sub.nl_solver = Newton() #sub.nl_solver.options['maxiter'] = 7 sub.ln_solver = PetscKSP() prob.driver.add_desvar('p1.xx') prob.driver.add_objective('sub.cc2.y') prob.setup(check=False) prob.print_all_convergence() prob.run() # GMRES doesn't cause a successive build-up in the value of an out-of # scope param, but the linear solver doesn't converge. We can test to # make sure it does. iter_count = sub.ln_solver.iter_count self.assertTrue(iter_count < 20) self.assertTrue(not np.isnan(prob['sub.cc2.y']))
def test_nested_relevancy_gmres(self): # This test is just to make sure that values in the dp vector from # higher scopes aren't sitting there converting themselves during sub # iterations. prob = Problem(impl=impl) root = prob.root = Group() root.add('p1', IndepVarComp('xx', 3.0)) root.add('c1', ExecComp(['y1=0.5*x + 1.0*xx', 'y2=0.3*x - 1.0*xx'], units={'y2' : 'km'})) root.add('c2', ExecComp(['y=0.5*x'])) sub = root.add('sub', Group()) sub.add('cc1', ExecComp(['y=1.01*x1 + 1.01*x2'], units={'x1' : 'fm'})) sub.add('cc2', ExecComp(['y=1.01*x'])) root.connect('p1.xx', 'c1.xx') root.connect('c1.y1', 'c2.x') root.connect('c2.y', 'c1.x') root.connect('c1.y2', 'sub.cc1.x1') root.connect('sub.cc1.y', 'sub.cc2.x') root.connect('sub.cc2.y', 'sub.cc1.x2') root.nl_solver = Newton() root.nl_solver.options['maxiter'] = 1 root.ln_solver = PetscKSP() root.ln_solver.options['maxiter'] = 1 sub.nl_solver = Newton() #sub.nl_solver.options['maxiter'] = 7 sub.ln_solver = PetscKSP() prob.driver.add_desvar('p1.xx') prob.driver.add_objective('sub.cc2.y') prob.setup(check=False) prob.print_all_convergence() prob.run() # GMRES doesn't cause a successive build-up in the value of an out-of # scope param, but the linear solver doesn't converge. We can test to # make sure it does. iter_count = sub.ln_solver.iter_count self.assertTrue(iter_count < 20) self.assertTrue(not np.isnan(prob['sub.cc2.y']))
def test_newton_with_backtracking(self): top = Problem() root = top.root = Group() root.add('comp', TrickyComp()) root.add('p', IndepVarComp('y', 1.2278849186466743)) root.connect('p.y', 'comp.y') root.nl_solver = Newton() root.ln_solver = ScipyGMRES() root.nl_solver.line_search = BackTracking() root.nl_solver.line_search.options['maxiter'] = 100 root.nl_solver.line_search.options['c'] = 0.5 root.nl_solver.options['alpha'] = 10.0 top.setup(check=False) top['comp.x'] = 1.0 top.print_all_convergence(level=1) top.run() assert_rel_error(self, top['comp.x'], .3968459, .0001)
J[('y', 'x')] = np.array([1.0]) J[('y', 'z')] = np.array([2.0]) # State equation J[('z', 'z')] = np.array([params['x'] + 1.0]) J[('z', 'x')] = np.array([unknowns['z']]) return J if __name__ == '__main__': top = Problem() root = top.root = Group() root.add('p1', IndepVarComp('x', 0.5)) root.add('comp', SimpleImplicitComp()) root.add('comp2', ExecComp('zz = 2.0*z')) root.connect('p1.x', 'comp.x') root.connect('comp.z', 'comp2.z') root.ln_solver = ScipyGMRES() root.nl_solver = Newton() top.setup() top.print_all_convergence() top.run() print('Solution: x = %f, z = %f, y = %f' % (top['comp.x'], top['comp.z'], top['comp.y']))
prob['cycle.comp.MN_target'] = 0.65 # Duct prob['cycle.duct.MN_target'] = 0.65 prob['cycle.duct.dPqP'] = 0. # Nozzle Conditions prob['cycle.nozzle.Cfg'] = 1.0 prob['cycle.nozzle.dPqP'] = 0. prob['des_vars.PsE'] = 2.7 # Shaft prob['cycle.shaft.Nmech'] = 10000. prob.print_all_convergence() import time t = time.time() prob.run() print (time.time() - t) #inputs = ['balance.Pt', 'balance.Tt', 'balance.W', 'balance.BPR'] #prob.check_total_derivatives() #Atube = prob['inlet.Fl_O:stat:area']/(3.28084**2.)/(144.) #AtubeC = prob['splitter.Fl_O1:stat:area']/(3.28084**2.)/(144.) #AtubeB = prob['splitter.Fl_O2:stat:area']/(3.28084**2.)/(144.) batteries = (-prob['cycle.comp.power']*HPtoKW*(tubeLen/(prob['cycle.fl_start.Fl_O:stat:V']*0.3048)/3600.0))/teslaPack; astar = np.sqrt(prob['cycle.fl_start.Fl_O:stat:gamma']*R_UNIVERSAL_SI*(cu(prob['cycle.fl_start.Fl_O:stat:T'], 'degR', 'degK')))
# Output equation J[('y', 'x')] = np.array([1.0]) J[('y', 'z')] = np.array([2.0]) # State equation J[('z', 'z')] = np.array([params['x'] + 1.0]) J[('z', 'x')] = np.array([unknowns['z']]) return J if __name__ == '__main__': top = Problem() root = top.root = Group() root.add('p1', IndepVarComp('x', 0.5)) root.add('comp', SimpleImplicitComp()) root.add('comp2', ExecComp('zz = 2.0*z')) root.connect('p1.x', 'comp.x') root.connect('comp.z', 'comp2.z') root.ln_solver = ScipyGMRES() root.nl_solver = Newton() top.setup() top.print_all_convergence() top.run() print('Solution: x = %f, z = %f, y = %f' % (top['comp.x'], top['comp.z'], top['comp.y']))
# coupled.ln_solver = ScipyGMRES() # coupled.ln_solver.options['iprint'] = 1 # coupled.ln_solver.preconditioner = LinearGaussSeidel() # coupled.vlmstates.ln_solver = LinearGaussSeidel() # coupled.spatialbeamstates.ln_solver = LinearGaussSeidel() # adds the MDA to root (do not remove!) root.add('coupled', coupled, promotes=['*']) # Add functional components here root.add('vlmfuncs', vlmfuncs_comp, promotes=['*']) root.add('spatialbeamfuncs', spatialbeamfuncs_comp, promotes=['*']) root.add('fuelburn', fuelburn_comp, promotes=['*']) root.add('eq_con', eq_con_comp, promotes=['*']) prob = Problem() prob.root = root prob.print_all_convergence( ) # makes OpenMDAO print out solver convergence data # change file name to save data from each experiment separately prob.driver.add_recorder(SqliteRecorder('prob1a.db')) prob.setup() # uncomment this to see an n2 diagram of your implementation # view_tree(prob, outfile="prob2a_aerostruct.html", show_browser=True) st = time.time() prob.run_once() print "runtime: ", time.time() - st
prob['cycle.comp.MN_target'] = 0.65 # Duct prob['cycle.duct.MN_target'] = 0.65 prob['cycle.duct.dPqP'] = 0. # Nozzle Conditions prob['cycle.nozzle.Cfg'] = 1.0 prob['cycle.nozzle.dPqP'] = 0. prob['des_vars.PsE'] = 2.7 # Shaft prob['cycle.shaft.Nmech'] = 10000. prob.print_all_convergence() import time t = time.time() prob.run() print(time.time() - t) #inputs = ['balance.Pt', 'balance.Tt', 'balance.W', 'balance.BPR'] #prob.check_total_derivatives() #Atube = prob['inlet.Fl_O:stat:area']/(3.28084**2.)/(144.) #AtubeC = prob['splitter.Fl_O1:stat:area']/(3.28084**2.)/(144.) #AtubeB = prob['splitter.Fl_O2:stat:area']/(3.28084**2.)/(144.) batteries = ( -prob['cycle.comp.power'] * HPtoKW * (tubeLen / (prob['cycle.fl_start.Fl_O:stat:V'] * 0.3048) / 3600.0)) / teslaPack
def test_iprint(self): top = Problem() top.root = SellarStateConnection() # Can't do it before setup anymore. with self.assertRaises(RuntimeError) as err: top.print_all_convergence() expected_msg="Please run setup before calling print_all_convergence." self.assertEqual(str(err.exception), expected_msg) top.setup(check=False) base_stdout = sys.stdout try: ostream = cStringIO() sys.stdout = ostream top.run() finally: sys.stdout = base_stdout printed = ostream.getvalue() self.assertEqual(printed, '') # Turn on all iprints top.print_all_convergence() try: ostream = cStringIO() sys.stdout = ostream top.run() finally: sys.stdout = base_stdout printed = ostream.getvalue() self.assertEqual(printed.count('NEWTON'), 3) self.assertEqual(printed.count('GMRES'), 4) self.assertTrue('[root] NL: NEWTON 0 | ' in printed) self.assertTrue(' [root.sub] LN: GMRES 1 | ' in printed) # Now, test out level = 1 top = Problem() top.root = SellarStateConnection() top.setup(check=False) base_stdout = sys.stdout top.print_all_convergence(level=1) try: ostream = cStringIO() sys.stdout = ostream top.run() finally: sys.stdout = base_stdout printed = ostream.getvalue() self.assertEqual(printed.count('NEWTON'), 2) self.assertEqual(printed.count('GMRES'), 4) self.assertTrue('[root] NL: NEWTON 0 | ' not in printed) self.assertTrue(' [root.sub] LN: GMRES 1 | ' not in printed) # Level -1 suppresses it all top = Problem() top.root = SellarStateConnection() top.setup(check=False) base_stdout = sys.stdout top.print_all_convergence(level=-1) try: ostream = cStringIO() sys.stdout = ostream top.run() finally: sys.stdout = base_stdout printed = ostream.getvalue() self.assertEqual(printed, '') # Lets just look at the top top = Problem() top.root = SellarStateConnection() top.setup(check=False) base_stdout = sys.stdout top.print_all_convergence(depth=0) try: ostream = cStringIO() sys.stdout = ostream top.run() finally: sys.stdout = base_stdout printed = ostream.getvalue() self.assertTrue('root' in printed) self.assertTrue('root.sub' not in printed)
def test_iprint(self): top = Problem() top.root = SellarStateConnection() # Can't do it before setup anymore. with self.assertRaises(RuntimeError) as err: top.print_all_convergence() expected_msg = "Please run setup before calling print_all_convergence." self.assertEqual(str(err.exception), expected_msg) top.setup(check=False) base_stdout = sys.stdout try: ostream = cStringIO() sys.stdout = ostream top.run() finally: sys.stdout = base_stdout printed = ostream.getvalue() self.assertEqual(printed, '') # Turn on all iprints top.print_all_convergence() try: ostream = cStringIO() sys.stdout = ostream top.run() finally: sys.stdout = base_stdout printed = ostream.getvalue() self.assertEqual(printed.count('NEWTON'), 3) self.assertEqual(printed.count('GMRES'), 4) self.assertTrue('[root] NL: NEWTON 0 | ' in printed) self.assertTrue(' [root.sub] LN: GMRES 1 | ' in printed) # Now, test out level = 1 top = Problem() top.root = SellarStateConnection() top.setup(check=False) base_stdout = sys.stdout top.print_all_convergence(level=1) try: ostream = cStringIO() sys.stdout = ostream top.run() finally: sys.stdout = base_stdout printed = ostream.getvalue() self.assertEqual(printed.count('NEWTON'), 2) self.assertEqual(printed.count('GMRES'), 4) self.assertTrue('[root] NL: NEWTON 0 | ' not in printed) self.assertTrue(' [root.sub] LN: GMRES 1 | ' not in printed) # Level -1 suppresses it all top = Problem() top.root = SellarStateConnection() top.setup(check=False) base_stdout = sys.stdout top.print_all_convergence(level=-1) try: ostream = cStringIO() sys.stdout = ostream top.run() finally: sys.stdout = base_stdout printed = ostream.getvalue() self.assertEqual(printed, '') # Lets just look at the top top = Problem() top.root = SellarStateConnection() top.setup(check=False) base_stdout = sys.stdout top.print_all_convergence(depth=0) try: ostream = cStringIO() sys.stdout = ostream top.run() finally: sys.stdout = base_stdout printed = ostream.getvalue() self.assertTrue('root' in printed) self.assertTrue('root.sub' not in printed)