Exemple #1
0
    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)
Exemple #2
0
    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)
Exemple #3
0
    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)
Exemple #4
0
    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)
Exemple #5
0
    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)
Exemple #8
0
    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)
Exemple #9
0
        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']))
Exemple #10
0
    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']))
Exemple #12
0
# 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
Exemple #13
0
    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
Exemple #14
0
    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)
Exemple #15
0
    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)