Пример #1
0
 def testDerivatives(self):
     prob = Problem(root=Group())
     root = prob.root
     root.add('pf', pf.PlantFinance(), promotes=['*'])
     prob.setup()
     for k in self.params.keys(): prob[k] = self.params[k]        
     prob.check_total_derivatives()
Пример #2
0
    def test_relevance_issue(self):

        p = Problem()
        p.root = Group()

        dvars = (('a', 3.), ('b', 10.))
        p.root.add('desvars', IndepVarComp(dvars), promotes=['a', 'b'])

        sg = p.root.add('sg', Group(), promotes=["*"])
        sg.add('si', SimpleImplicit(), promotes=['a', 'b', 'x'])

        p.root.add('func', ExecComp('f = 2*x0+a'), promotes=['f', 'x0', 'a'])
        p.root.connect('x', 'x0', src_indices=[1])

        p.root.ln_solver = ScipyGMRES()
        p.root.ln_solver.preconditioner = LinearGaussSeidel()

        p.driver.add_objective('f')
        p.driver.add_desvar('a')

        p.setup(check=False)
        p.run_once()

        # Make sure we don't get a KeyError
        p.check_total_derivatives(out_stream=None)
Пример #3
0
    def test_relevance_issue(self):

        p = Problem()
        p.root = Group()

        dvars = ( ('a', 3.), ('b', 10.))
        p.root.add('desvars', IndepVarComp(dvars), promotes=['a', 'b'])

        sg = p.root.add('sg', Group(), promotes=["*"])
        sg.add('si', SimpleImplicit(), promotes=['a', 'b', 'x'])

        p.root.add('func', ExecComp('f = 2*x0+a'), promotes=['f', 'x0', 'a'])
        p.root.connect('x', 'x0', src_indices=[1])

        p.root.ln_solver = ScipyGMRES()
        p.root.ln_solver.preconditioner = LinearGaussSeidel()

        p.driver.add_objective('f')
        p.driver.add_desvar('a')

        p.setup(check=False)
        p.run_once()

        # Make sure we don't get a KeyError
        p.check_total_derivatives(out_stream=None)
Пример #4
0
 def testDerivatives(self):
     prob = Problem(root=Group())
     root = prob.root
     root.add('pf', pf.PlantFinance(), promotes=['*'])
     prob.setup()
     for k in self.params.keys(): prob[k] = self.params[k]        
     prob.check_total_derivatives()
Пример #5
0
    def test_check_derivs_param(self):
        class Comp(Component):
            def __init__(self):
                super(Comp, self).__init__()
                self.add_param('x', val=0.0)
                self.add_param('y', val=3, pass_by_obj=True)
                self.add_output('z', val=0.0)

            def solve_nonlinear(self, params, unknowns, resids):
                unknowns['z'] = params['y'] * params['x']

            def linearize(self, params, unknowns, resids):
                J = {}
                J['z', 'x'] = params['y']
                return J

        prob = Problem()
        prob.root = Group()
        prob.root.add('comp', Comp(), promotes=['*'])
        prob.root.add('p1', IndepVarComp('x', 0.0), promotes=['x'])
        prob.root.add('p2',
                      IndepVarComp('y', 3, pass_by_obj=True),
                      promotes=['y'])

        prob.setup(check=False)

        prob.run()

        data = prob.check_partial_derivatives(out_stream=None)
        self.assertEqual(data['comp'][('z', 'x')]['J_fwd'][0][0], 3.0)

        data = prob.check_total_derivatives(out_stream=None)
        self.assertEqual(data[('z', 'x')]['J_fwd'][0][0], 3.0)
Пример #6
0
    def setUp(self):

        r0 = 10.0
        depth = 30.0
        G = 140e6
        nu = 0.4
        rigid = [False, False, False, False, False, False]

        prob = Problem()
        root = prob.root = Group()
        root.add('p1', IndepVarComp('r0', r0))
        root.add('p2', IndepVarComp('depth', depth))
        root.add('p', TowerSoil())

        root.connect('p1.r0', 'p.r0')
        root.connect('p2.depth', 'p.depth')

        prob.driver.add_objective('p.k', scaler=1E-6)

        prob.driver.add_desvar('p1.r0', lower=0, upper=1000, scaler=1E-6)
        prob.driver.add_desvar('p2.depth', lower=0, upper=1000, scaler=1E-6)

        prob.setup()

        prob['p.G'] = G
        prob['p.nu'] = nu
        prob['p.rigid'] = rigid

        prob.run()

        self.J = prob.check_total_derivatives(out_stream=None)

        print self.J
Пример #7
0
    def setUp(self):

        r0 = 10.0
        depth = 30.0
        G = 140e6
        nu = 0.4
        rigid = [False, False, False, False, False, False]

        prob = Problem()
        root = prob.root = Group()
        root.add('p1', IndepVarComp('r0', r0))
        root.add('p2', IndepVarComp('depth', depth))
        root.add('p', TowerSoil())

        root.connect('p1.r0', 'p.r0')
        root.connect('p2.depth', 'p.depth')

        prob.driver.add_objective('p.k', scaler=1E-6)

        prob.driver.add_desvar('p1.r0', lower=0, upper=1000, scaler=1E-6)
        prob.driver.add_desvar('p2.depth', lower=0, upper=1000, scaler=1E-6)

        prob.setup()

        prob['p.G'] = G
        prob['p.nu'] = nu
        prob['p.rigid'] = rigid

        prob.run()

        self.J = prob.check_total_derivatives(out_stream=None)

        print self.J
Пример #8
0
    def setUp(self):

        d0 = 10.0
        depth = 30.0
        G = 140e6
        nu = 0.4
        rigid = [False, False, False, False, False, False]

        prob = Problem()
        root = prob.model = Group()
        root.add_subsystem('p1', IndepVarComp('d0', d0, units='m'))
        root.add_subsystem('p2', IndepVarComp('depth', depth, units='m'))
        root.add_subsystem('p', TowerSoil())

        root.connect('p1.d0', 'p.d0')
        root.connect('p2.depth', 'p.depth')

        prob.driver = ScipyOptimizeDriver()
        prob.model.add_objective('p.k', scaler=1E-6)

        prob.model.add_design_var('p1.d0', lower=0, upper=1000, scaler=1E-6)
        prob.model.add_design_var('p2.depth', lower=0, upper=1000, scaler=1E-6)

        prob.setup()

        prob['p.G'] = G
        prob['p.nu'] = nu

        prob.run_driver()

        self.J = prob.check_total_derivatives(out_stream=None)

        print(self.J)
    def test_simple_implicit_check_options(self):

        prob = Problem()
        prob.root = Group()
        prob.root.ln_solver = ScipyGMRES()
        prob.root.add('comp', SimpleImplicitComp())
        prob.root.add('p1', IndepVarComp('x', 0.5))

        prob.root.connect('p1.x', 'comp.x')

        # Not using this
        prob.root.deriv_options['step_size'] = 1e4

        # Using these
        prob.root.deriv_options['check_form'] = 'central'
        prob.root.deriv_options['check_step_size'] = 1e-3

        prob.setup(check=False)
        prob.run()

        data = prob.check_total_derivatives(out_stream=None)

        for key, val in iteritems(data):
            assert_rel_error(self, val['abs error'][0], 0.0, 1e-5)
            assert_rel_error(self, val['abs error'][1], 0.0, 1e-5)
            assert_rel_error(self, val['abs error'][2], 0.0, 1e-5)
            assert_rel_error(self, val['rel error'][0], 0.0, 1e-5)
            assert_rel_error(self, val['rel error'][1], 0.0, 1e-5)
            assert_rel_error(self, val['rel error'][2], 0.0, 1e-5)
Пример #10
0
    def test_check_totals_calls_run_once(self):
        prob = Problem()
        root = prob.root = Group()
        root.add('p1', IndepVarComp('x', 1.0), promotes=['*'])
        root.add('p2', IndepVarComp('y', 1.0), promotes=['*'])
        root.add('comp', Paraboloid(), promotes=['*'])

        prob.driver.add_desvar('x')
        prob.driver.add_desvar('y')
        prob.driver.add_objective('f_xy')

        prob.setup(check=False)

        prob['x'] = 5.0
        prob['y'] = 2.0

        iostream = StringIO()

        data = prob.check_total_derivatives(out_stream=iostream)

        self.assertAlmostEqual(first=prob["f_xy"],
                               second= (prob['x']-3.0)**2 \
                                       + prob['x']*prob['y'] \
                                       + (prob['y']+4.0)**2 - 3.0,
                               places=5,
                               msg="check partial derivatives did not call"
                                   "run_once on the driver as expected.")

        self.assertEqual(first=iostream.getvalue()[:39],
                         second="Executing model to populate unknowns...",
                         msg="check partial derivatives failed to run driver once")
Пример #11
0
    def test_check_totals_calls_run_once(self):
        prob = Problem()
        root = prob.root = Group()
        root.add('p1', IndepVarComp('x', 1.0), promotes=['*'])
        root.add('p2', IndepVarComp('y', 1.0), promotes=['*'])
        root.add('comp', Paraboloid(), promotes=['*'])

        prob.driver.add_desvar('x')
        prob.driver.add_desvar('y')
        prob.driver.add_objective('f_xy')

        prob.setup(check=False)

        prob['x'] = 5.0
        prob['y'] = 2.0

        iostream = StringIO()

        data = prob.check_total_derivatives(out_stream=iostream)

        self.assertAlmostEqual(first=prob["f_xy"],
                               second= (prob['x']-3.0)**2 \
                                       + prob['x']*prob['y'] \
                                       + (prob['y']+4.0)**2 - 3.0,
                               places=5,
                               msg="check partial derivatives did not call"
                                   "run_once on the driver as expected.")

        self.assertEqual(
            first=iostream.getvalue()[:39],
            second="Executing model to populate unknowns...",
            msg="check partial derivatives failed to run driver once")
Пример #12
0
    def test_check_derivs_param(self):

        class Comp(Component):
            def __init__(self):
                super(Comp, self).__init__()
                self.add_param('x', val=0.0)
                self.add_param('y', val=3, pass_by_obj=True)
                self.add_output('z', val=0.0)

            def solve_nonlinear(self, params, unknowns, resids):
                unknowns['z'] = params['y']*params['x']

            def linearize(self, params, unknowns, resids):
                J = {}
                J['z', 'x'] = params['y']
                return J

        prob = Problem()
        prob.root = Group()
        prob.root.add('comp', Comp(), promotes=['*'])
        prob.root.add('p1', IndepVarComp('x', 0.0), promotes=['x'])
        prob.root.add('p2', IndepVarComp('y', 3, pass_by_obj=True), promotes=['y'])

        prob.setup(check=False)

        prob.run()

        data = prob.check_partial_derivatives(out_stream=None)
        self.assertEqual(data['comp'][('z', 'x')]['J_fwd'][0][0], 3.0)

        data = prob.check_total_derivatives(out_stream=None)
        self.assertEqual(data[('z', 'x')]['J_fwd'][0][0], 3.0)
    def test_simple_implicit(self):

        prob = Problem()
        prob.root = Group()
        prob.root.ln_solver = ScipyGMRES()
        prob.root.add('comp', SimpleImplicitComp())
        prob.root.add('p1', IndepVarComp('x', 0.5))

        prob.root.connect('p1.x', 'comp.x')

        prob.root.comp.deriv_options['check_type'] = 'cs'

        prob.setup(check=False)
        prob.run()

        # Correct total derivatives (we can do this one manually)
        J = prob.calc_gradient(['p1.x'], ['comp.y'], mode='fwd')
        assert_rel_error(self, J[0][0], -2.5555511, 1e-5)

        J = prob.calc_gradient(['p1.x'], ['comp.y'], mode='rev')
        assert_rel_error(self, J[0][0], -2.5555511, 1e-5)

        J = prob.calc_gradient(['p1.x'], ['comp.y'], mode='fd')
        assert_rel_error(self, J[0][0], -2.5555511, 1e-5)

        # Clean up old FD
        prob.run()

        # Partials
        data = prob.check_partial_derivatives(out_stream=None)
        #data = prob.check_partial_derivatives()

        for key1, val1 in iteritems(data):
            for key2, val2 in iteritems(val1):
                assert_rel_error(self, val2['abs error'][0], 0.0, 1e-5)
                assert_rel_error(self, val2['abs error'][1], 0.0, 1e-5)
                assert_rel_error(self, val2['abs error'][2], 0.0, 1e-5)
                assert_rel_error(self, val2['rel error'][0], 0.0, 1e-5)
                assert_rel_error(self, val2['rel error'][1], 0.0, 1e-5)
                assert_rel_error(self, val2['rel error'][2], 0.0, 1e-5)

        assert_rel_error(self, data['comp'][('y', 'x')]['J_fwd'][0][0], 1.0, 1e-6)
        assert_rel_error(self, data['comp'][('y', 'z')]['J_fwd'][0][0], 2.0, 1e-6)
        assert_rel_error(self, data['comp'][('z', 'x')]['J_fwd'][0][0], 2.66666667, 1e-6)
        assert_rel_error(self, data['comp'][('z', 'z')]['J_fwd'][0][0], 1.5, 1e-6)

        # Clean up old FD
        prob.run()

        # Make sure check_totals works too
        data = prob.check_total_derivatives(out_stream=None)

        for key1, val1 in iteritems(data):
            assert_rel_error(self, val1['abs error'][0], 0.0, 1e-5)
            assert_rel_error(self, val1['abs error'][1], 0.0, 1e-5)
            assert_rel_error(self, val1['abs error'][2], 0.0, 1e-5)
            assert_rel_error(self, val1['rel error'][0], 0.0, 1e-5)
            assert_rel_error(self, val1['rel error'][1], 0.0, 1e-5)
            assert_rel_error(self, val1['rel error'][2], 0.0, 1e-5)
Пример #14
0
    def test_simple_implicit(self):

        prob = Problem()
        prob.root = Group()
        prob.root.ln_solver = ScipyGMRES()
        prob.root.add("comp", SimpleImplicitComp())
        prob.root.add("p1", IndepVarComp("x", 0.5))

        prob.root.connect("p1.x", "comp.x")

        prob.root.comp.fd_options["extra_check_partials_form"] = "complex_step"

        prob.setup(check=False)
        prob.run()

        # Correct total derivatives (we can do this one manually)
        J = prob.calc_gradient(["p1.x"], ["comp.y"], mode="fwd")
        assert_rel_error(self, J[0][0], -2.5555511, 1e-5)

        J = prob.calc_gradient(["p1.x"], ["comp.y"], mode="rev")
        assert_rel_error(self, J[0][0], -2.5555511, 1e-5)

        J = prob.calc_gradient(["p1.x"], ["comp.y"], mode="fd")
        assert_rel_error(self, J[0][0], -2.5555511, 1e-5)

        # Clean up old FD
        prob.run()

        # Partials
        data = prob.check_partial_derivatives(out_stream=None)
        # data = prob.check_partial_derivatives()

        for key1, val1 in iteritems(data):
            for key2, val2 in iteritems(val1):
                assert_rel_error(self, val2["abs error"][0], 0.0, 1e-5)
                assert_rel_error(self, val2["abs error"][1], 0.0, 1e-5)
                assert_rel_error(self, val2["abs error"][2], 0.0, 1e-5)
                assert_rel_error(self, val2["rel error"][0], 0.0, 1e-5)
                assert_rel_error(self, val2["rel error"][1], 0.0, 1e-5)
                assert_rel_error(self, val2["rel error"][2], 0.0, 1e-5)

        assert_rel_error(self, data["comp"][("y", "x")]["J_fwd"][0][0], 1.0, 1e-6)
        assert_rel_error(self, data["comp"][("y", "z")]["J_fwd"][0][0], 20.0, 1e-6)
        assert_rel_error(self, data["comp"][("z", "x")]["J_fwd"][0][0], 2.66666667, 1e-6)
        assert_rel_error(self, data["comp"][("z", "z")]["J_fwd"][0][0], 15.0, 1e-6)

        # Clean up old FD
        prob.run()

        # Make sure check_totals works too
        data = prob.check_total_derivatives(out_stream=None)

        for key1, val1 in iteritems(data):
            assert_rel_error(self, val1["abs error"][0], 0.0, 1e-5)
            assert_rel_error(self, val1["abs error"][1], 0.0, 1e-5)
            assert_rel_error(self, val1["abs error"][2], 0.0, 1e-5)
            assert_rel_error(self, val1["rel error"][0], 0.0, 1e-5)
            assert_rel_error(self, val1["rel error"][1], 0.0, 1e-5)
            assert_rel_error(self, val1["rel error"][2], 0.0, 1e-5)
Пример #15
0
    def test_check_derivs_unknowns(self):

        class Comp1(Component):
            def __init__(self):
                super(Comp1, self).__init__()
                self.add_param('x', shape=1)
                self.add_output('y', shape=1)
                self.add_output('dz_dy', shape=1, pass_by_obj=True)

            def solve_nonlinear(self, params, unknowns, resids):
                x = params['x']
                unknowns['y'] = 4.0*x + 1.0
                unknowns['dz_dy'] = 2.0

            def linearize(self, params, unknowns, resids):
                J = {}
                J['y', 'x'] = 4.0
                return J

        class Comp2(Component):
            def __init__(self):
                super(Comp2, self).__init__()
                self.add_param('y', shape=1)
                self.add_param('dz_dy', shape=1, pass_by_obj=True)
                self.add_output('z', shape=1)

            def solve_nonlinear(self, params, unknowns, resids):
                y = params['y']
                unknowns['z'] = y*2.0

            def linearize(self, params, unknowns, resids):
                J = {}
                J['z', 'y'] = params['dz_dy']
                return J

        class TestGroup(Group):
            def __init__(self):
                super(TestGroup, self).__init__()
                self.add('x', IndepVarComp('x', 0.0), promotes=['*'])
                self.add('c1', Comp1(), promotes=['*'])
                self.add('c2', Comp2(), promotes=['*'])

        prob = Problem()
        prob.root = TestGroup()
        prob.setup(check=False)

        prob['x'] = 2.0
        prob.run()

        data = prob.check_partial_derivatives(out_stream=None)
        self.assertEqual(data['c1'][('y', 'x')]['J_fwd'][0][0], 4.0)
        self.assertEqual(data['c1'][('y', 'x')]['J_rev'][0][0], 4.0)
        self.assertEqual(data['c2'][('z', 'y')]['J_fwd'][0][0], 2.0)
        self.assertEqual(data['c2'][('z', 'y')]['J_rev'][0][0], 2.0)

        data = prob.check_total_derivatives(out_stream=None)
        self.assertEqual(data[('z', 'x')]['J_fwd'][0][0], 8.0)
Пример #16
0
    def test_check_derivs_unknowns(self):
        class Comp1(Component):
            def __init__(self):
                super(Comp1, self).__init__()
                self.add_param('x', shape=1)
                self.add_output('y', shape=1)
                self.add_output('dz_dy', shape=1, pass_by_obj=True)

            def solve_nonlinear(self, params, unknowns, resids):
                x = params['x']
                unknowns['y'] = 4.0 * x + 1.0
                unknowns['dz_dy'] = 2.0

            def linearize(self, params, unknowns, resids):
                J = {}
                J['y', 'x'] = 4.0
                return J

        class Comp2(Component):
            def __init__(self):
                super(Comp2, self).__init__()
                self.add_param('y', shape=1)
                self.add_param('dz_dy', shape=1, pass_by_obj=True)
                self.add_output('z', shape=1)

            def solve_nonlinear(self, params, unknowns, resids):
                y = params['y']
                unknowns['z'] = y * 2.0

            def linearize(self, params, unknowns, resids):
                J = {}
                J['z', 'y'] = params['dz_dy']
                return J

        class TestGroup(Group):
            def __init__(self):
                super(TestGroup, self).__init__()
                self.add('x', IndepVarComp('x', 0.0), promotes=['*'])
                self.add('c1', Comp1(), promotes=['*'])
                self.add('c2', Comp2(), promotes=['*'])

        prob = Problem()
        prob.root = TestGroup()
        prob.setup(check=False)

        prob['x'] = 2.0
        prob.run()

        data = prob.check_partial_derivatives(out_stream=None)
        self.assertEqual(data['c1'][('y', 'x')]['J_fwd'][0][0], 4.0)
        self.assertEqual(data['c1'][('y', 'x')]['J_rev'][0][0], 4.0)
        self.assertEqual(data['c2'][('z', 'y')]['J_fwd'][0][0], 2.0)
        self.assertEqual(data['c2'][('z', 'y')]['J_rev'][0][0], 2.0)

        data = prob.check_total_derivatives(out_stream=None)
        self.assertEqual(data[('z', 'x')]['J_fwd'][0][0], 8.0)
Пример #17
0
    def test_dido(self):

        prob = Problem(root=Group(), impl=impl, driver=ScipyOptimizer())

        # Total horizontal space of area to be enclosed.
        x = 100.0

        # Number of segments used to enclose area.
        n = 50

        # Horizonal size of each segment
        dx = x / n

        prob.root.add(name='ys_ivc',
                      system=IndepVarComp('ys', val=np.zeros(n), units='m'),
                      promotes=['ys'])
        prob.root.add(name='rec_group', system=RectangleGroup(n, dx))
        prob.root.add(name='total_area_comp',
                      system=Summer(n),
                      promotes=['total_area'])
        prob.root.add(name='perimeter_comp',
                      system=PerimeterComp(n, dx),
                      promotes=['ys', 'total_perimeter'])

        for i in range(n):
            prob.root.connect('ys',
                              'rec_group.section_{0}.y'.format(i),
                              src_indices=[i])
            prob.root.connect('rec_group.section_{0}.area'.format(i),
                              'total_area_comp.area_{0}'.format(i))

        idxs = range(n)[1:-1]

        prob.driver.add_desvar('ys', lower=np.zeros(n - 2), indices=idxs)
        prob.driver.add_constraint('total_perimeter', upper=150)
        prob.driver.add_objective('total_area', scaler=-1.0E-3)

        prob.setup(check=False)

        prob.run()

        data = prob.check_total_derivatives(out_stream=None)

        for key, val in data.items():
            assert_rel_error(self, val['abs error'][0], 0.0, 1e-5)
            assert_rel_error(self, val['abs error'][1], 0.0, 1e-5)
            assert_rel_error(self, val['abs error'][2], 0.0, 1e-5)
            assert_rel_error(self, val['rel error'][0], 0.0, 1e-5)
            assert_rel_error(self, val['rel error'][1], 0.0, 1e-5)
            assert_rel_error(self, val['rel error'][2], 0.0, 1e-5)

        assert_rel_error(self, 3574.94, prob['total_area'], 0.1)
    def setUp(self):

        prob = Problem()
        root = prob.root = Group()

        root.add('nrel_csm_tcc_2015', nrel_csm_tcc_2015(), promotes=['*'])
        root.add('machine_rating',
                 IndepVarComp('machine_rating', 5000.),
                 promotes=['*'])

        prob.driver = pyOptSparseDriver()
        prob.driver.options['optimizer'] = 'SNOPT'

        obj = 'turbine_cost'

        #ROTOR MASS and ROTOR COST

        prob.driver.add_objective('%s' % obj)

        prob.driver.add_desvar('machine_rating')

        prob.setup()

        prob['rotor_diameter'] = 100.0
        prob['turbine_class'] = 'II/III'
        prob['blade_has_carbon'] = True
        prob['blade_number'] = 3
        # prob['machine_rating'] = 5000.0
        prob['hub_height'] = 80.0
        prob['bearing_number'] = 2
        prob['crane'] = True
        # prob['offshore'] = False

        # Rotor force calculations for nacelle inputs
        maxTipSpd = 80.0
        maxEfficiency = 0.9

        ratedHubPower = prob['machine_rating'] * 1000. / maxEfficiency
        rotorSpeed = (maxTipSpd /
                      (0.5 * prob['rotor_diameter'])) * (60.0 / (2. * np.pi))
        prob['rotor_torque'] = ratedHubPower / (rotorSpeed * (np.pi / 30))

        prob.run_once()

        self.J = prob.check_total_derivatives(out_stream=None)
        self.obj = obj

        print 'analytic: '
        print self.J[('%s' % obj, 'machine_rating')]['J_fwd']
        print 'fd: '
        print self.J[('%s' % obj, 'machine_rating')]['J_fd']
Пример #19
0
    def test_full_model_fd_double_diamond_grouped_par_sys(self):

        prob = Problem()
        root = prob.root = Group()
        par = root.add('par', ParallelGroup())
        par.add('sub', ConvergeDivergeGroups())

        prob.setup(check=False)
        prob.run()

        prob.root.fd_options['force_fd'] = True

        # Make sure we don't get a key error.
        data = prob.check_total_derivatives(out_stream=None)
Пример #20
0
    def test_full_model_fd_double_diamond_grouped_par_sys(self):

        prob = Problem()
        root = prob.root = Group()
        par = root.add('par', ParallelGroup())
        par.add('sub', ConvergeDivergeGroups())

        prob.root.fd_options['force_fd'] = True

        prob.setup(check=False)
        prob.run()

        # Make sure we don't get a key error.
        data = prob.check_total_derivatives(out_stream=None)
Пример #21
0
    def test_limit_to_desvar_obj_con(self):
        prob = Problem()
        root = prob.root = Group()
        root.add('p1', IndepVarComp('x', 1.0), promotes=['*'])
        root.add('comp', Paraboloid(), promotes=['*'])

        prob.driver.add_desvar('x')
        prob.driver.add_objective('f_xy')

        prob.setup(check=False)
        prob.run()

        data = prob.check_total_derivatives(out_stream=None)
        self.assertTrue(('f_xy', 'x') in data)
        self.assertTrue(('f_xy', 'y') not in data)
Пример #22
0
    def test_limit_to_desvar_obj_con(self):
        prob = Problem()
        root = prob.root = Group()
        root.add('p1', IndepVarComp('x', 1.0), promotes=['*'])
        root.add('comp', Paraboloid(), promotes=['*'])

        prob.driver.add_desvar('x')
        prob.driver.add_objective('f_xy')

        prob.setup(check=False)
        prob.run()

        data = prob.check_total_derivatives(out_stream=None)
        self.assertTrue(('f_xy', 'x') in data)
        self.assertTrue(('f_xy', 'y') not in data)
Пример #23
0
    def test_double_diamond_model(self):

        prob = Problem()
        prob.root = ConvergeDivergeGroups()

        prob.setup(check=False)
        prob.run()

        data = prob.check_total_derivatives(out_stream=None)

        for key, val in iteritems(data):
            assert_rel_error(self, val['abs error'][0], 0.0, 1e-5)
            assert_rel_error(self, val['abs error'][1], 0.0, 1e-5)
            assert_rel_error(self, val['abs error'][2], 0.0, 1e-5)
            assert_rel_error(self, val['rel error'][0], 0.0, 1e-5)
            assert_rel_error(self, val['rel error'][1], 0.0, 1e-5)
            assert_rel_error(self, val['rel error'][2], 0.0, 1e-5)
Пример #24
0
    def test_double_diamond_model(self):

        prob = Problem()
        prob.root = ConvergeDivergeGroups()

        prob.setup(check=False)
        prob.run()

        data = prob.check_total_derivatives(out_stream=None)

        for key, val in iteritems(data):
            assert_rel_error(self, val['abs error'][0], 0.0, 1e-5)
            assert_rel_error(self, val['abs error'][1], 0.0, 1e-5)
            assert_rel_error(self, val['abs error'][2], 0.0, 1e-5)
            assert_rel_error(self, val['rel error'][0], 0.0, 1e-5)
            assert_rel_error(self, val['rel error'][1], 0.0, 1e-5)
            assert_rel_error(self, val['rel error'][2], 0.0, 1e-5)
Пример #25
0
    def test_dido(self):

        prob = Problem(root=Group(), impl=impl, driver=pyOptSparseDriver())

        # Total horizontal space of area to be enclosed.
        x = 100.0

        # Number of segments used to enclose area.
        n = 50

        # Horizonal size of each segment
        dx = x / n

        prob.root.add(name="ys_ivc", system=IndepVarComp("ys", val=np.zeros(n), units="m"), promotes=["ys"])
        prob.root.add(name="rec_group", system=RectangleGroup(n, dx))
        prob.root.add(name="total_area_comp", system=Summer(n), promotes=["total_area"])
        prob.root.add(name="perimeter_comp", system=PerimeterComp(n, dx), promotes=["ys", "total_perimeter"])

        for i in range(n):
            prob.root.connect("ys", "rec_group.section_{0}.y".format(i), src_indices=[i])
            prob.root.connect("rec_group.section_{0}.area".format(i), "total_area_comp.area_{0}".format(i))

        idxs = range(n)[1:-1]

        prob.driver.options["optimizer"] = OPTIMIZER
        prob.driver.options["print_results"] = False
        prob.driver.add_desvar("ys", lower=np.zeros(n - 2), indices=idxs)
        prob.driver.add_constraint("total_perimeter", upper=150)
        prob.driver.add_objective("total_area", scaler=-1.0e-3)

        prob.setup(check=False)

        prob.run()

        data = prob.check_total_derivatives(out_stream=None)

        for key, val in data.items():
            assert_rel_error(self, val["abs error"][0], 0.0, 1e-5)
            assert_rel_error(self, val["abs error"][1], 0.0, 1e-5)
            assert_rel_error(self, val["abs error"][2], 0.0, 1e-5)
            assert_rel_error(self, val["rel error"][0], 0.0, 1e-5)
            assert_rel_error(self, val["rel error"][1], 0.0, 1e-5)
            assert_rel_error(self, val["rel error"][2], 0.0, 1e-5)

        assert_rel_error(self, 3574.94, prob["total_area"], 0.1)
Пример #26
0
    def setUp(self):

        Uc = 7.0
        z_surface = 20.0
        hs = 10.0
        T = 2.0
        z_floor = 0.1
        betaWave = 3.0
        z = np.linspace(z_floor, z_surface, 20)
        nPoints = len(z)

        prob = Problem()
        root = prob.model = Group()
        root.add_subsystem('p1', IndepVarComp('z', z, units='m'))
        root.add_subsystem('p2', IndepVarComp('Uc', Uc, units='m/s'))
        root.add_subsystem('p', LinearWaves(nPoints=nPoints))

        root.connect('p1.z', 'p.z')
        root.connect('p2.Uc', 'p.Uc')

        prob.driver = ScipyOptimizeDriver()
        prob.model.add_objective('p.U', scaler=1E-6)

        prob.model.add_design_var('p1.z',
                                  lower=np.ones(nPoints),
                                  upper=np.ones(nPoints) * 1000,
                                  scaler=1E-6)
        prob.model.add_design_var('p2.Uc', lower=0, upper=1000, scaler=1E-6)

        prob.setup()

        prob['p.z_surface'] = z_surface
        prob['p.z_floor'] = z_floor
        prob['p.hmax'] = hs
        prob['p.T'] = T
        #prob['p.betaWave'] = betaWave

        prob.run_driver()

        print(prob['p.U'])

        self.J = prob.check_total_derivatives(out_stream=None)

        print(self.J)
Пример #27
0
    def test_with_relevance_rev(self):

        prob = Problem()
        prob.root = ConvergeDivergePar()
        prob.root.ln_solver = LinearGaussSeidel()

        prob.driver.add_desvar('p.x')
        prob.driver.add_objective('comp7.y1')
        prob.root.ln_solver.options['mode'] = 'rev'
        prob.root.ln_solver.options['single_voi_relevance_reduction'] = True

        prob.setup(check=False)
        prob.run()

        data = prob.check_total_derivatives(out_stream=None)

        for key, val in iteritems(data):
            assert_rel_error(self, val['abs error'][1], 0.0, 1e-5)
            assert_rel_error(self, val['rel error'][1], 0.0, 1e-5)
Пример #28
0
    def test_with_relevance_rev(self):

        prob = Problem()
        prob.root = ConvergeDivergePar()
        prob.root.ln_solver = LinearGaussSeidel()

        prob.driver.add_desvar('p.x')
        prob.driver.add_objective('comp7.y1')
        prob.root.ln_solver.options['mode'] = 'rev'
        prob.root.ln_solver.options['single_voi_relevance_reduction'] = True

        prob.setup(check=False)
        prob.run()

        data = prob.check_total_derivatives(out_stream=None)

        for key, val in iteritems(data):
            assert_rel_error(self, val['abs error'][1], 0.0, 1e-5)
            assert_rel_error(self, val['rel error'][1], 0.0, 1e-5)
    def setUp(self):

        self.rtol = 1E-5
        self.atol = 1E-5

        hub_cost = np.random.rand(1) * 150000. + 100000.
        pitch_system_cost = np.random.rand(1) * 150000. + 100000.
        spinner_cost = np.random.rand(1) * 150000. + 100000.

        prob = Problem()
        root = prob.root = Group()

        root.add('hub_cost',
                 IndepVarComp('hub_cost', float(hub_cost)),
                 promotes=['*'])
        root.add('pitch_system_cost',
                 IndepVarComp('pitch_system_cost', float(pitch_system_cost)),
                 promotes=['*'])
        root.add('spinner_cost',
                 IndepVarComp('spinner_cost', float(spinner_cost)),
                 promotes=['*'])
        root.add('HubSystemCostAdder2015',
                 HubSystemCostAdder2015(),
                 promotes=['*'])

        # set up optimizer
        prob.driver = pyOptSparseDriver()
        prob.driver.options['optimizer'] = 'SNOPT'
        prob.driver.add_objective('hub_system_cost')

        # select design variables
        prob.driver.add_desvar('hub_cost')
        prob.driver.add_desvar('pitch_system_cost')
        prob.driver.add_desvar('spinner_cost')

        # initialize problem
        prob.setup()

        # run problem
        prob.run_once()

        # pass results to self for use with unit test
        self.J = prob.check_total_derivatives(out_stream=None)
Пример #30
0
    def setUp(self):

        Uc = 7.0
        z_surface = 20.0
        hs = 10.0
        T = 2.0
        z_floor = 0.1
        betaWave = 3.0
        z = np.linspace(z_floor, z_surface, 20)
        nPoints = len(z)

        prob = Problem()
        root = prob.root = Group()
        root.add('p1', IndepVarComp('z', z))
        root.add('p2', IndepVarComp('Uc', Uc))
        root.add('p', LinearWaves(nPoints))

        root.connect('p1.z', 'p.z')
        root.connect('p2.Uc', 'p.Uc')

        prob.driver.add_objective('p.U', scaler=1E-6)

        prob.driver.add_desvar('p1.z',
                               lower=np.ones(nPoints),
                               upper=np.ones(nPoints) * 1000,
                               scaler=1E-6)
        prob.driver.add_desvar('p2.Uc', lower=0, upper=1000, scaler=1E-6)

        prob.setup()

        prob['p.z_surface'] = z_surface
        prob['p.z_floor'] = z_floor
        prob['p.hmax'] = hs
        prob['p.T'] = T
        prob['p.betaWave'] = betaWave

        prob.run()

        print prob['p.U']

        self.J = prob.check_total_derivatives(out_stream=None)

        print self.J
Пример #31
0
    def setUp(self):

        z = np.linspace(0.0, 100.0, 20)
        nPoints = len(z)
        Uref = 10.0
        zref = 100.0
        z0 = 0.001  #Fails when z0 = 0, What to do here?
        shearExp = 0.2
        betaWind = 0.0

        prob = Problem()
        root = prob.model = Group()
        root.add_subsystem('p1', IndepVarComp('z', z, units='m'))
        root.add_subsystem('p2', IndepVarComp('zref', zref, units='m'))
        root.add_subsystem('p3', IndepVarComp('Uref', Uref, units='m/s'))
        root.add_subsystem('p', PowerWind(nPoints=nPoints))

        root.connect('p1.z', 'p.z')
        root.connect('p2.zref', 'p.zref')
        root.connect('p3.Uref', 'p.Uref')

        prob.driver = ScipyOptimizeDriver()
        prob.model.add_objective('p.U', scaler=1E-6)

        prob.model.add_design_var('p1.z',
                                  lower=np.ones(nPoints),
                                  upper=np.ones(nPoints) * 1000,
                                  scaler=1E-6)
        prob.model.add_design_var('p2.zref', lower=0, upper=1000, scaler=1E-6)
        prob.model.add_design_var('p3.Uref', lower=0, upper=1000, scaler=1E-6)

        prob.setup()

        prob['p.z0'] = z0
        prob['p.shearExp'] = shearExp
        #prob['p.betaWind'] = betaWind

        prob.run_driver()

        print(prob['p.U'])

        self.J = prob.check_total_derivatives(out_stream=None)
Пример #32
0
    def test_full_model_fd_simple_comp_promoted(self):

        prob = Problem()
        prob.root = Group()
        sub = prob.root.add('sub', Group(), promotes=['*'])
        sub.add('comp', SimpleCompDerivMatVec(), promotes=['*'])
        prob.root.add('p1', IndepVarComp('x', 1.0), promotes=['*'])

        prob.setup(check=False)
        prob.run()

        data = prob.check_total_derivatives(out_stream=None)

        for key, val in iteritems(data):
            assert_rel_error(self, val['abs error'][0], 0.0, 1e-5)
            assert_rel_error(self, val['abs error'][1], 0.0, 1e-5)
            assert_rel_error(self, val['abs error'][2], 0.0, 1e-5)
            assert_rel_error(self, val['rel error'][0], 0.0, 1e-5)
            assert_rel_error(self, val['rel error'][1], 0.0, 1e-5)
            assert_rel_error(self, val['rel error'][2], 0.0, 1e-5)
Пример #33
0
    def test_full_model_fd_simple_comp_promoted(self):

        prob = Problem()
        prob.root = Group()
        sub = prob.root.add("sub", Group(), promotes=["*"])
        sub.add("comp", SimpleCompDerivMatVec(), promotes=["*"])
        prob.root.add("p1", IndepVarComp("x", 1.0), promotes=["*"])

        prob.setup(check=False)
        prob.run()

        data = prob.check_total_derivatives(out_stream=None)

        for key, val in iteritems(data):
            assert_rel_error(self, val["abs error"][0], 0.0, 1e-5)
            assert_rel_error(self, val["abs error"][1], 0.0, 1e-5)
            assert_rel_error(self, val["abs error"][2], 0.0, 1e-5)
            assert_rel_error(self, val["rel error"][0], 0.0, 1e-5)
            assert_rel_error(self, val["rel error"][1], 0.0, 1e-5)
            assert_rel_error(self, val["rel error"][2], 0.0, 1e-5)
Пример #34
0
    def test_full_model_fd_simple_comp_promoted(self):

        prob = Problem()
        prob.root = Group()
        sub = prob.root.add('sub', Group(), promotes=['*'])
        sub.add('comp', SimpleCompDerivMatVec(), promotes=['*'])
        prob.root.add('p1', IndepVarComp('x', 1.0), promotes=['*'])

        prob.setup(check=False)
        prob.run()

        data = prob.check_total_derivatives(out_stream=None)

        for key, val in iteritems(data):
            assert_rel_error(self, val['abs error'][0], 0.0, 1e-5)
            assert_rel_error(self, val['abs error'][1], 0.0, 1e-5)
            assert_rel_error(self, val['abs error'][2], 0.0, 1e-5)
            assert_rel_error(self, val['rel error'][0], 0.0, 1e-5)
            assert_rel_error(self, val['rel error'][1], 0.0, 1e-5)
            assert_rel_error(self, val['rel error'][2], 0.0, 1e-5)
Пример #35
0
    def setUp(self):

        z = np.linspace(0.0, 100.0, 20)
        nPoints = len(z)
        Uref = 10.0
        zref = 100.0
        z0 = 0.001  #Fails when z0 = 0, What to do here?
        shearExp = 0.2
        betaWind = 0.0

        prob = Problem()
        root = prob.root = Group()
        root.add('p1', IndepVarComp('z', z))
        root.add('p2', IndepVarComp('zref', zref))
        root.add('p3', IndepVarComp('Uref', Uref))
        root.add('p', PowerWind(nPoints))

        root.connect('p1.z', 'p.z')
        root.connect('p2.zref', 'p.zref')
        root.connect('p3.Uref', 'p.Uref')

        prob.driver.add_objective('p.U', scaler=1E-6)

        prob.driver.add_desvar('p1.z',
                               lower=np.ones(nPoints),
                               upper=np.ones(nPoints) * 1000,
                               scaler=1E-6)
        prob.driver.add_desvar('p2.zref', lower=0, upper=1000, scaler=1E-6)
        prob.driver.add_desvar('p3.Uref', lower=0, upper=1000, scaler=1E-6)

        prob.setup()

        prob['p.z0'] = z0
        prob['p.shearExp'] = shearExp
        prob['p.betaWind'] = betaWind

        prob.run()

        print prob['p.U']

        self.J = prob.check_total_derivatives(out_stream=None)
Пример #36
0
    def test_simple_implicit(self):

        prob = Problem()
        prob.root = Group()
        prob.root.add('comp', SimpleImplicitComp())
        prob.root.add('p1', IndepVarComp('x', 0.5))

        prob.root.connect('p1.x', 'comp.x')

        prob.setup(check=False)
        prob.run()

        data = prob.check_total_derivatives(out_stream=None)

        for key, val in iteritems(data):
            assert_rel_error(self, val['abs error'][0], 0.0, 1e-5)
            assert_rel_error(self, val['abs error'][1], 0.0, 1e-5)
            assert_rel_error(self, val['abs error'][2], 0.0, 1e-5)
            assert_rel_error(self, val['rel error'][0], 0.0, 1e-5)
            assert_rel_error(self, val['rel error'][1], 0.0, 1e-5)
            assert_rel_error(self, val['rel error'][2], 0.0, 1e-5)
Пример #37
0
    def setUp(self):

        Uc = 7.0
        z_surface = 20.0
        hs = 10.0
        T = 2.0
        z_floor = 0.1
        betaWave = 3.0
        z = np.linspace(z_floor, z_surface, 20)
        nPoints = len(z)

        prob = Problem()
        root = prob.root = Group()
        root.add('p1', IndepVarComp('z', z))
        root.add('p2', IndepVarComp('Uc', Uc))
        root.add('p', LinearWaves(nPoints))

        root.connect('p1.z', 'p.z')
        root.connect('p2.Uc', 'p.Uc')

        prob.driver.add_objective('p.U', scaler=1E-6)

        prob.driver.add_desvar('p1.z', lower=np.ones(nPoints), upper=np.ones(nPoints)*1000, scaler=1E-6)
        prob.driver.add_desvar('p2.Uc', lower=0, upper=1000, scaler=1E-6)

        prob.setup()

        prob['p.z_surface'] = z_surface
        prob['p.z_floor'] = z_floor
        prob['p.hmax'] = hs
        prob['p.T'] = T
        prob['p.betaWave'] = betaWave

        prob.run()

        print prob['p.U']

        self.J = prob.check_total_derivatives(out_stream=None)

        print self.J
Пример #38
0
    def test_simple_implicit(self):

        prob = Problem()
        prob.root = Group()
        prob.root.ln_solver = ScipyGMRES()
        prob.root.add("comp", SimpleImplicitComp())
        prob.root.add("p1", IndepVarComp("x", 0.5))

        prob.root.connect("p1.x", "comp.x")

        prob.setup(check=False)
        prob.run()

        data = prob.check_total_derivatives(out_stream=None)

        for key, val in iteritems(data):
            assert_rel_error(self, val["abs error"][0], 0.0, 1e-5)
            assert_rel_error(self, val["abs error"][1], 0.0, 1e-5)
            assert_rel_error(self, val["abs error"][2], 0.0, 1e-5)
            assert_rel_error(self, val["rel error"][0], 0.0, 1e-5)
            assert_rel_error(self, val["rel error"][1], 0.0, 1e-5)
            assert_rel_error(self, val["rel error"][2], 0.0, 1e-5)
Пример #39
0
    def test_simple_implicit(self):

        prob = Problem()
        prob.root = Group()
        prob.root.ln_solver = ScipyGMRES()
        prob.root.add('comp', SimpleImplicitComp())
        prob.root.add('p1', IndepVarComp('x', 0.5))

        prob.root.connect('p1.x', 'comp.x')

        prob.setup(check=False)
        prob.run()

        data = prob.check_total_derivatives(out_stream=None)

        for key, val in iteritems(data):
            assert_rel_error(self, val['abs error'][0], 0.0, 1e-5)
            assert_rel_error(self, val['abs error'][1], 0.0, 1e-5)
            assert_rel_error(self, val['abs error'][2], 0.0, 1e-5)
            assert_rel_error(self, val['rel error'][0], 0.0, 1e-5)
            assert_rel_error(self, val['rel error'][1], 0.0, 1e-5)
            assert_rel_error(self, val['rel error'][2], 0.0, 1e-5)
Пример #40
0
    def setUp(self):

        z = np.linspace(0.0, 100.0, 20)
        nPoints = len(z)
        Uref = 10.0
        zref = 100.0
        z0 = 0.001 #Fails when z0 = 0, What to do here?
        shearExp = 0.2
        betaWind = 0.0

        prob = Problem()
        root = prob.root = Group()
        root.add('p1', IndepVarComp('z', z))
        root.add('p2', IndepVarComp('zref', zref))
        root.add('p3', IndepVarComp('Uref', Uref))
        root.add('p', PowerWind(nPoints))


        root.connect('p1.z', 'p.z')
        root.connect('p2.zref', 'p.zref')
        root.connect('p3.Uref', 'p.Uref')

        prob.driver.add_objective('p.U', scaler=1E-6)

        prob.driver.add_desvar('p1.z', lower=np.ones(nPoints), upper=np.ones(nPoints)*1000, scaler=1E-6)
        prob.driver.add_desvar('p2.zref', lower=0, upper=1000, scaler=1E-6)
        prob.driver.add_desvar('p3.Uref', lower=0, upper=1000, scaler=1E-6)

        prob.setup()

        prob['p.z0'] = z0
        prob['p.shearExp'] = shearExp
        prob['p.betaWind'] = betaWind

        prob.run()

        print prob['p.U']

        self.J = prob.check_total_derivatives(out_stream=None)
Пример #41
0
    def test_basic(self):
        top = Problem()
        root = top.root = Group()
        root.add("p", IndepVarComp("x", 2000.0))
        root.add("comp1", BasicComp())
        root.add("comp2", ExecComp(["y = 2.0*x"]))
        root.connect("p.x", "comp1.x")
        root.connect("comp1.y", "comp2.x")

        top.driver.add_desvar("p.x", 2000.0)
        top.driver.add_objective("comp2.y")

        root.comp1.fd_options["extra_check_partials_form"] = "complex_step"

        top.setup(check=False)
        top.run()

        # correct execution, scale does not affect downstream output
        assert_rel_error(self, top["comp2.y"], 12000.0, 1e-6)

        # in-component query is unscaled
        assert_rel_error(self, root.comp1.store_y, 6000.0, 1e-6)

        # afterwards direct query is unscaled
        assert_rel_error(self, root.unknowns["comp1.y"], 6000.0, 1e-6)

        # OpenMDAO behind-the-scenes query is scaled
        # (So, internal storage is scaled)
        assert_rel_error(self, root.unknowns._dat["comp1.y"].val, 6.0, 1e-6)

        # Correct derivatives
        J = top.calc_gradient(["p.x"], ["comp2.y"], mode="fwd")
        assert_rel_error(self, J[0][0], 6.0, 1e-6)

        J = top.calc_gradient(["p.x"], ["comp2.y"], mode="rev")
        assert_rel_error(self, J[0][0], 6.0, 1e-6)

        J = top.calc_gradient(["p.x"], ["comp2.y"], mode="fd")
        assert_rel_error(self, J[0][0], 6.0, 1e-6)

        # Clean up old FD
        top.run()

        # Make sure check_partials works too
        data = top.check_partial_derivatives(out_stream=None)
        # data = top.check_partial_derivatives()

        for key1, val1 in iteritems(data):
            for key2, val2 in iteritems(val1):
                assert_rel_error(self, val2["abs error"][0], 0.0, 1e-5)
                assert_rel_error(self, val2["abs error"][1], 0.0, 1e-5)
                assert_rel_error(self, val2["abs error"][2], 0.0, 1e-5)
                assert_rel_error(self, val2["rel error"][0], 0.0, 1e-5)
                assert_rel_error(self, val2["rel error"][1], 0.0, 1e-5)
                assert_rel_error(self, val2["rel error"][2], 0.0, 1e-5)

        # Clean up old FD
        top.run()

        # Make sure check_totals works too
        data = top.check_total_derivatives(out_stream=None)

        for key1, val1 in iteritems(data):
            assert_rel_error(self, val1["abs error"][0], 0.0, 1e-5)
            assert_rel_error(self, val1["abs error"][1], 0.0, 1e-5)
            assert_rel_error(self, val1["abs error"][2], 0.0, 1e-5)
            assert_rel_error(self, val1["rel error"][0], 0.0, 1e-5)
            assert_rel_error(self, val1["rel error"][1], 0.0, 1e-5)
            assert_rel_error(self, val1["rel error"][2], 0.0, 1e-5)
Пример #42
0
    def test_converge_diverge(self):

        from openmdao.test.converge_diverge import Comp1, Comp2, Comp3, Comp5, Comp6, Comp7

        class Comp4(Component):
            def __init__(self):
                super(Comp4, self).__init__()
                self.add_param("x1", 1.0)
                self.add_param("x2", 1.0)
                self.add_output("y1", 1.0, scaler=3.0)
                self.add_output("y2", 1.0, scaler=2.0)

            def solve_nonlinear(self, params, unknowns, resids):
                """ Runs the component."""
                unknowns["y1"] = params["x1"] + 2.0 * params["x2"]
                unknowns["y2"] = 3.0 * params["x1"] - 5.0 * params["x2"]

            def linearize(self, params, unknowns, resids):
                """Returns the Jacobian."""
                J = {}
                J[("y1", "x1")] = 1.0
                J[("y1", "x2")] = 2.0
                J[("y2", "x1")] = 3.0
                J[("y2", "x2")] = -5.0
                return J

        class ConvergeDiverge(Group):
            """ Topology one - two - one - two - one. This model was critical in
            testing parallel reverse scatters."""

            def __init__(self):
                super(ConvergeDiverge, self).__init__()

                self.add("p", IndepVarComp("x", 2.0))

                self.add("comp1", Comp1())
                self.add("comp2", Comp2())
                self.add("comp3", Comp3())
                self.add("comp4", Comp4())
                self.add("comp5", Comp5())
                self.add("comp6", Comp6())
                self.add("comp7", Comp7())

                self.connect("p.x", "comp1.x1")
                self.connect("comp1.y1", "comp2.x1")
                self.connect("comp1.y2", "comp3.x1")
                self.connect("comp2.y1", "comp4.x1")
                self.connect("comp3.y1", "comp4.x2")
                self.connect("comp4.y1", "comp5.x1")
                self.connect("comp4.y2", "comp6.x1")
                self.connect("comp5.y1", "comp7.x1")
                self.connect("comp6.y1", "comp7.x2")

        prob = Problem()
        prob.root = ConvergeDiverge()
        prob.setup(check=False)

        prob.run()

        # Partials
        data = prob.check_partial_derivatives(out_stream=None)
        # data = prob.check_partial_derivatives()

        for key1, val1 in iteritems(data):
            for key2, val2 in iteritems(val1):
                assert_rel_error(self, val2["abs error"][0], 0.0, 1e-5)
                assert_rel_error(self, val2["abs error"][1], 0.0, 1e-5)
                assert_rel_error(self, val2["abs error"][2], 0.0, 1e-5)
                assert_rel_error(self, val2["rel error"][0], 0.0, 1e-5)
                assert_rel_error(self, val2["rel error"][1], 0.0, 1e-5)
                assert_rel_error(self, val2["rel error"][2], 0.0, 1e-5)

        # Clean up old FD
        prob.run()

        # Make sure check_totals works too
        data = prob.check_total_derivatives(out_stream=None)

        for key1, val1 in iteritems(data):
            assert_rel_error(self, val1["abs error"][0], 0.0, 1e-5)
            assert_rel_error(self, val1["abs error"][1], 0.0, 1e-5)
            assert_rel_error(self, val1["abs error"][2], 0.0, 1e-5)
            assert_rel_error(self, val1["rel error"][0], 0.0, 1e-5)
            assert_rel_error(self, val1["rel error"][1], 0.0, 1e-5)
            assert_rel_error(self, val1["rel error"][2], 0.0, 1e-5)
Пример #43
0
    def setUp(self):

        # --- geometry ----
        # --- geometry ----
        z_param = np.array([0.0, 43.8, 87.6])
        d_param = np.array([6.0, 4.935, 3.87])
        t_param = np.array([0.027 * 1.3, 0.023 * 1.3, 0.019 * 1.3])
        n = 15
        z_full = np.linspace(0.0, 87.6, n)
        L_reinforced = 30.0 * np.ones(n)  # [m] buckling length
        theta_stress = 0.0 * np.ones(n)
        yaw = 0.0

        # --- material props ---
        E = 210e9 * np.ones(n)
        G = 80.8e9 * np.ones(n)
        rho = 8500.0 * np.ones(n)
        sigma_y = 450.0e6 * np.ones(n)

        # --- spring reaction data.  Use float('inf') for rigid constraints. ---
        kidx = np.array([0], dtype=int)  # applied at base
        kx = np.array([float('inf')])
        ky = np.array([float('inf')])
        kz = np.array([float('inf')])
        ktx = np.array([float('inf')])
        kty = np.array([float('inf')])
        ktz = np.array([float('inf')])
        nK = len(kidx)

        # --- extra mass ----
        midx = np.array([n - 1], dtype=int)  # RNA mass at top
        m = np.array([285598.8])
        mIxx = np.array([1.14930678e+08])
        mIyy = np.array([2.20354030e+07])
        mIzz = np.array([1.87597425e+07])
        mIxy = np.array([0.00000000e+00])
        mIxz = np.array([5.03710467e+05])
        mIyz = np.array([0.00000000e+00])
        mrhox = np.array([-1.13197635])
        mrhoy = np.array([0.])
        mrhoz = np.array([0.50875268])
        nMass = len(midx)
        addGravityLoadForExtraMass = True
        # -----------

        # --- wind ---
        wind_zref = 90.0
        wind_z0 = 0.0
        shearExp = 0.2
        # ---------------

        # if addGravityLoadForExtraMass=True be sure not to double count by adding those force here also
        # # --- loading case 1: max Thrust ---
        wind_Uref1 = 11.73732
        plidx1 = np.array([n - 1], dtype=int)  # at  top
        Fx1 = np.array([1284744.19620519])
        Fy1 = np.array([0.])
        Fz1 = np.array([-2914124.84400512])
        Mxx1 = np.array([3963732.76208099])
        Myy1 = np.array([-2275104.79420872])
        Mzz1 = np.array([-346781.68192839])
        nPL = len(plidx1)
        # # ---------------

        # # --- loading case 2: max wind speed ---
        wind_Uref2 = 70.0
        plidx2 = np.array([n - 1], dtype=int)  # at  top
        Fx2 = np.array([930198.60063279])
        Fy2 = np.array([0.])
        Fz2 = np.array([-2883106.12368949])
        Mxx2 = np.array([-1683669.22411597])
        Myy2 = np.array([-2522475.34625363])
        Mzz2 = np.array([147301.97023764])
        # # ---------------

        # --- safety factors ---
        gamma_f = 1.35
        gamma_m = 1.3
        gamma_n = 1.0
        gamma_b = 1.1
        # ---------------

        # --- fatigue ---
        z_DEL = np.array([
            0.000, 1.327, 3.982, 6.636, 9.291, 11.945, 14.600, 17.255, 19.909,
            22.564, 25.218, 27.873, 30.527, 33.182, 35.836, 38.491, 41.145,
            43.800, 46.455, 49.109, 51.764, 54.418, 57.073, 59.727, 62.382,
            65.036, 67.691, 70.345, 73.000, 75.655, 78.309, 80.964, 83.618,
            86.273, 87.600
        ])
        M_DEL = 1e3 * np.array([
            8.2940E+003, 8.1518E+003, 7.8831E+003, 7.6099E+003, 7.3359E+003,
            7.0577E+003, 6.7821E+003, 6.5119E+003, 6.2391E+003, 5.9707E+003,
            5.7070E+003, 5.4500E+003, 5.2015E+003, 4.9588E+003, 4.7202E+003,
            4.4884E+003, 4.2577E+003, 4.0246E+003, 3.7942E+003, 3.5664E+003,
            3.3406E+003, 3.1184E+003, 2.8977E+003, 2.6811E+003, 2.4719E+003,
            2.2663E+003, 2.0673E+003, 1.8769E+003, 1.7017E+003, 1.5479E+003,
            1.4207E+003, 1.3304E+003, 1.2780E+003, 1.2673E+003, 1.2761E+003
        ])
        nDEL = len(z_DEL)
        gamma_fatigue = 1.35 * 1.3 * 1.0
        life = 20.0
        m_SN = 4
        # ---------------

        # --- constraints ---
        min_d_to_t = 120.0
        min_taper = 0.4
        # ---------------

        # # V_max = 80.0  # tip speed
        # # D = 126.0
        # # .freq1p = V_max / (D/2) / (2*pi)  # convert to Hz

        nPoints = len(z_param)
        nFull = len(z_full)
        wind = 'PowerWind'

        prob = Problem()
        root = prob.root = Group()

        prob.driver = pyOptSparseDriver()
        prob.driver.options['optimizer'] = 'SNOPT'
        prob.driver.opt_settings['Major iterations limit'] = 1000

        root.add('z_param', IndepVarComp('z_param', z_param))
        root.add('d_param', IndepVarComp('d_param', d_param))
        root.add('t_param', IndepVarComp('t_param', t_param))
        root.add('TowerSE',
                 TowerSE(nPoints, nFull, nK, nMass, nPL, nDEL, wind=wind))

        prob.driver.add_objective('TowerSE.tower1.mass', scaler=1E-6)
        prob.driver.add_desvar('z_param.z_param',
                               lower=np.zeros(nPoints),
                               upper=np.ones(nPoints) * 1000.,
                               scaler=1E-2)
        prob.driver.add_desvar('t_param.t_param',
                               lower=np.ones(nPoints) * 0.001,
                               upper=np.ones(nPoints) * 1000.,
                               scaler=1E-6)
        prob.driver.add_desvar('d_param.d_param',
                               np.array([2, 2.1, 2.2]),
                               upper=np.ones(nPoints) * 1000.,
                               scaler=1E-6)

        prob.root.connect('z_param.z_param', 'TowerSE.z_param')
        prob.root.connect('d_param.d_param', 'TowerSE.d_param')
        prob.root.connect('t_param.t_param', 'TowerSE.t_param')

        prob.driver.add_constraint('TowerSE.tower1.stress', upper=np.ones(n))
        prob.driver.add_constraint('TowerSE.tower2.stress', upper=np.ones(n))
        prob.driver.add_constraint('TowerSE.tower1.global_buckling',
                                   upper=np.ones(n))
        prob.driver.add_constraint('TowerSE.tower2.global_buckling',
                                   upper=np.ones(n))
        prob.driver.add_constraint('TowerSE.tower1.shell_buckling',
                                   upper=np.ones(n))
        prob.driver.add_constraint('TowerSE.tower2.shell_buckling',
                                   upper=np.ones(n))
        prob.driver.add_constraint('TowerSE.tower1.damage',
                                   upper=np.ones(n) * 0.8)
        prob.driver.add_constraint('TowerSE.gc.weldability', upper=np.zeros(n))
        prob.driver.add_constraint('TowerSE.gc.manufacturability',
                                   upper=np.zeros(n))
        freq1p = 0.2  # 1P freq in Hz
        prob.driver.add_constraint('TowerSE.tower1.f1', lower=1.1 * freq1p)
        prob.driver.add_constraint('TowerSE.tower2.f1', lower=1.1 * freq1p)

        prob.setup()

        if wind == 'PowerWind':
            prob['TowerSE.wind1.shearExp'] = shearExp
            prob['TowerSE.wind2.shearExp'] = shearExp

        # assign values to params

        # --- geometry ----
        #prob['TowerSE.z_param'] = z_param
        #prob['TowerSE.d_param'] = d_param
        #prob['TowerSE.t_param'] = t_param
        prob['TowerSE.z_full'] = z_full
        prob['TowerSE.tower1.L_reinforced'] = L_reinforced
        prob['TowerSE.distLoads1.yaw'] = yaw

        # --- material props ---
        prob['TowerSE.tower1.E'] = E
        prob['TowerSE.tower1.G'] = G
        prob['TowerSE.tower1.rho'] = rho
        prob['TowerSE.tower1.sigma_y'] = sigma_y

        # --- spring reaction data.  Use float('inf') for rigid constraints. ---
        prob['TowerSE.tower1.kidx'] = kidx
        prob['TowerSE.tower1.kx'] = kx
        prob['TowerSE.tower1.ky'] = ky
        prob['TowerSE.tower1.kz'] = kz
        prob['TowerSE.tower1.ktx'] = ktx
        prob['TowerSE.tower1.kty'] = kty
        prob['TowerSE.tower1.ktz'] = ktz

        # --- extra mass ----
        prob['TowerSE.tower1.midx'] = midx
        prob['TowerSE.tower1.m'] = m
        prob['TowerSE.tower1.mIxx'] = mIxx
        prob['TowerSE.tower1.mIyy'] = mIyy
        prob['TowerSE.tower1.mIzz'] = mIzz
        prob['TowerSE.tower1.mIxy'] = mIxy
        prob['TowerSE.tower1.mIxz'] = mIxz
        prob['TowerSE.tower1.mIyz'] = mIyz
        prob['TowerSE.tower1.mrhox'] = mrhox
        prob['TowerSE.tower1.mrhoy'] = mrhoy
        prob['TowerSE.tower1.mrhoz'] = mrhoz
        prob[
            'TowerSE.tower1.addGravityLoadForExtraMass'] = addGravityLoadForExtraMass
        # -----------

        # --- wind ---
        prob['TowerSE.wind1.zref'] = wind_zref
        prob['TowerSE.wind1.z0'] = wind_z0
        # ---------------

        # # --- loading case 1: max Thrust ---
        prob['TowerSE.wind1.Uref'] = wind_Uref1
        prob['TowerSE.tower1.plidx'] = plidx1
        prob['TowerSE.tower1.Fx'] = Fx1
        prob['TowerSE.tower1.Fy'] = Fy1
        prob['TowerSE.tower1.Fz'] = Fz1
        prob['TowerSE.tower1.Mxx'] = Mxx1
        prob['TowerSE.tower1.Myy'] = Myy1
        prob['TowerSE.tower1.Mzz'] = Mzz1
        # # ---------------

        # # --- loading case 2: max Wind Speed ---
        prob['TowerSE.wind2.Uref'] = wind_Uref2
        prob['TowerSE.tower2.plidx'] = plidx2
        prob['TowerSE.tower2.Fx'] = Fx2
        prob['TowerSE.tower2.Fy'] = Fy2
        prob['TowerSE.tower2.Fz'] = Fz2
        prob['TowerSE.tower2.Mxx'] = Mxx2
        prob['TowerSE.tower2.Myy'] = Myy2
        prob['TowerSE.tower2.Mzz'] = Mzz2
        # # ---------------

        # --- safety factors ---
        prob['TowerSE.tower1.gamma_f'] = gamma_f
        prob['TowerSE.tower1.gamma_m'] = gamma_m
        prob['TowerSE.tower1.gamma_n'] = gamma_n
        prob['TowerSE.tower1.gamma_b'] = gamma_b
        # ---------------

        # --- fatigue ---
        prob['TowerSE.tower1.z_DEL'] = z_DEL
        prob['TowerSE.tower1.M_DEL'] = M_DEL
        prob['TowerSE.tower1.gamma_fatigue'] = gamma_fatigue
        prob['TowerSE.tower1.life'] = life
        prob['TowerSE.tower1.m_SN'] = m_SN
        # ---------------

        # --- constraints ---
        prob['TowerSE.gc.min_d_to_t'] = min_d_to_t
        prob['TowerSE.gc.min_taper'] = min_taper
        # ---------------

        # # --- run ---
        prob.run()

        print prob['TowerSE.gc.weldability']
        print prob['TowerSE.gc.manufacturability']

        self.J = prob.check_total_derivatives(out_stream=None)
        """
Пример #44
0
    root = prob.root = Group()
    root.add('p1', PowerWind(nPoints))

    prob.setup()

    prob['p1.z'] = z
    prob['p1.Uref'] = 10.0
    prob['p1.zref'] = 100.0
    prob['p1.z0'] = 1.0

    prob['p1.shearExp'] = 0.2

    prob.run()

    J = prob.check_total_derivatives(out_stream=None)
    print(J)

    #print(prob['p1.z'])

    import matplotlib.pyplot as plt
    plt.figure(1)
    plt.plot(prob['p1.z'], prob['p1.U'], label='Power')




    z = np.linspace(1.0, 5, 100)
    nPoints = len(z)

    prob = Problem()
Пример #45
0
    root = prob.model = Group()
    root.add('p1', PowerWind(nPoints=nPoints))

    prob.setup()

    prob['p1.z'] = z
    prob['p1.Uref'] = 10.0
    prob['p1.zref'] = 100.0
    prob['p1.z0'] = 1.0

    prob['p1.shearExp'] = 0.2

    prob.run_driver()

    J = prob.check_total_derivatives(out_stream=None)
    print(J)

    #print(prob['p1.z'])

    import matplotlib.pyplot as plt
    plt.figure(1)
    plt.plot(prob['p1.z'], prob['p1.U'], label='Power')

    z = np.linspace(1.0, 5, 100)
    nPoints = len(z)

    prob = Problem()

    root = prob.model = Group()
    root.add('p1', LogWind(nPoints))
Пример #46
0
    def setUp(self):

        # --- geometry ----
        # --- geometry ----
        z_param = np.array([0.0, 43.8, 87.6])
        d_param = np.array([6.0, 4.935, 3.87])
        t_param = np.array([0.027*1.3, 0.023*1.3, 0.019*1.3])
        n = 15
        z_full = np.linspace(0.0, 87.6, n)
        L_reinforced = 30.0*np.ones(n)  # [m] buckling length
        theta_stress = 0.0*np.ones(n)
        yaw = 0.0

        # --- material props ---
        E = 210e9*np.ones(n)
        G = 80.8e9*np.ones(n)
        rho = 8500.0*np.ones(n)
        sigma_y = 450.0e6*np.ones(n)

        # --- spring reaction data.  Use float('inf') for rigid constraints. ---
        kidx = np.array([0], dtype=int)  # applied at base
        kx = np.array([float('inf')])
        ky = np.array([float('inf')])
        kz = np.array([float('inf')])
        ktx = np.array([float('inf')])
        kty = np.array([float('inf')])
        ktz = np.array([float('inf')])
        nK = len(kidx)

        # --- extra mass ----
        midx = np.array([n-1], dtype=int)  # RNA mass at top
        m = np.array([285598.8])
        mIxx = np.array([1.14930678e+08])
        mIyy = np.array([2.20354030e+07])
        mIzz = np.array([1.87597425e+07])
        mIxy = np.array([0.00000000e+00])
        mIxz = np.array([5.03710467e+05])
        mIyz = np.array([0.00000000e+00])
        mrhox = np.array([-1.13197635])
        mrhoy = np.array([0.])
        mrhoz = np.array([0.50875268])
        nMass = len(midx)
        addGravityLoadForExtraMass = True
        # -----------

        # --- wind ---
        wind_zref = 90.0
        wind_z0 = 0.0
        shearExp = 0.2
        # ---------------

        # if addGravityLoadForExtraMass=True be sure not to double count by adding those force here also
        # # --- loading case 1: max Thrust ---
        wind_Uref1 = 11.73732
        plidx1 = np.array([n-1], dtype=int)  # at  top
        Fx1 = np.array([1284744.19620519])
        Fy1 = np.array([0.])
        Fz1 = np.array([-2914124.84400512])
        Mxx1 = np.array([3963732.76208099])
        Myy1 = np.array([-2275104.79420872])
        Mzz1 = np.array([-346781.68192839])
        nPL = len(plidx1)
        # # ---------------

        # # --- loading case 2: max wind speed ---
        wind_Uref2 = 70.0
        plidx2 = np.array([n-1], dtype=int)  # at  top
        Fx2 = np.array([930198.60063279])
        Fy2 = np.array([0.])
        Fz2 = np.array([-2883106.12368949])
        Mxx2 = np.array([-1683669.22411597])
        Myy2 = np.array([-2522475.34625363])
        Mzz2 = np.array([147301.97023764])
        # # ---------------

        # --- safety factors ---
        gamma_f = 1.35
        gamma_m = 1.3
        gamma_n = 1.0
        gamma_b = 1.1
        # ---------------

        # --- fatigue ---
        z_DEL = np.array([0.000, 1.327, 3.982, 6.636, 9.291, 11.945, 14.600, 17.255, 19.909, 22.564, 25.218, 27.873, 30.527, 33.182, 35.836, 38.491, 41.145, 43.800, 46.455, 49.109, 51.764, 54.418, 57.073, 59.727, 62.382, 65.036, 67.691, 70.345, 73.000, 75.655, 78.309, 80.964, 83.618, 86.273, 87.600])
        M_DEL = 1e3*np.array([8.2940E+003, 8.1518E+003, 7.8831E+003, 7.6099E+003, 7.3359E+003, 7.0577E+003, 6.7821E+003, 6.5119E+003, 6.2391E+003, 5.9707E+003, 5.7070E+003, 5.4500E+003, 5.2015E+003, 4.9588E+003, 4.7202E+003, 4.4884E+003, 4.2577E+003, 4.0246E+003, 3.7942E+003, 3.5664E+003, 3.3406E+003, 3.1184E+003, 2.8977E+003, 2.6811E+003, 2.4719E+003, 2.2663E+003, 2.0673E+003, 1.8769E+003, 1.7017E+003, 1.5479E+003, 1.4207E+003, 1.3304E+003, 1.2780E+003, 1.2673E+003, 1.2761E+003])
        nDEL = len(z_DEL)
        gamma_fatigue = 1.35*1.3*1.0
        life = 20.0
        m_SN = 4
        # ---------------


        # --- constraints ---
        min_d_to_t = 120.0
        min_taper = 0.4
        # ---------------

        # # V_max = 80.0  # tip speed
        # # D = 126.0
        # # .freq1p = V_max / (D/2) / (2*pi)  # convert to Hz

        nPoints = len(z_param)
        nFull = len(z_full)
        wind = 'PowerWind'

        prob = Problem()
        root = prob.root = Group()

        prob.driver = pyOptSparseDriver()
        prob.driver.options['optimizer'] = 'SNOPT'
        prob.driver.opt_settings['Major iterations limit'] = 1000

        root.add('z_param', IndepVarComp('z_param', z_param))
        root.add('d_param', IndepVarComp('d_param', d_param))
        root.add('t_param', IndepVarComp('t_param', t_param))
        root.add('TowerSE', TowerSE(nPoints, nFull, nK, nMass, nPL, nDEL, wind=wind))


        prob.driver.add_objective('TowerSE.tower1.mass', scaler=1E-6)
        prob.driver.add_desvar('z_param.z_param', lower=np.zeros(nPoints), upper=np.ones(nPoints)*1000., scaler=1E-2)
        prob.driver.add_desvar('t_param.t_param', lower=np.ones(nPoints)*0.001, upper=np.ones(nPoints)*1000., scaler=1E-6)
        prob.driver.add_desvar('d_param.d_param', np.array([2,2.1,2.2]), upper=np.ones(nPoints)*1000., scaler=1E-6)

        prob.root.connect('z_param.z_param', 'TowerSE.z_param')
        prob.root.connect('d_param.d_param', 'TowerSE.d_param')
        prob.root.connect('t_param.t_param', 'TowerSE.t_param')

        prob.driver.add_constraint('TowerSE.tower1.stress', upper=np.ones(n))
        prob.driver.add_constraint('TowerSE.tower2.stress', upper=np.ones(n))
        prob.driver.add_constraint('TowerSE.tower1.global_buckling', upper=np.ones(n))
        prob.driver.add_constraint('TowerSE.tower2.global_buckling', upper=np.ones(n))
        prob.driver.add_constraint('TowerSE.tower1.shell_buckling', upper=np.ones(n))
        prob.driver.add_constraint('TowerSE.tower2.shell_buckling', upper=np.ones(n))
        prob.driver.add_constraint('TowerSE.tower1.damage', upper=np.ones(n)*0.8)
        prob.driver.add_constraint('TowerSE.gc.weldability', upper=np.zeros(n))
        prob.driver.add_constraint('TowerSE.gc.manufacturability', upper=np.zeros(n))
        freq1p = 0.2  # 1P freq in Hz
        prob.driver.add_constraint('TowerSE.tower1.f1', lower=1.1*freq1p)
        prob.driver.add_constraint('TowerSE.tower2.f1', lower=1.1*freq1p)

        prob.setup()

        if wind=='PowerWind':
            prob['TowerSE.wind1.shearExp'] = shearExp
            prob['TowerSE.wind2.shearExp'] = shearExp

        # assign values to params

        # --- geometry ----
        #prob['TowerSE.z_param'] = z_param
        #prob['TowerSE.d_param'] = d_param
        #prob['TowerSE.t_param'] = t_param
        prob['TowerSE.z_full'] = z_full
        prob['TowerSE.tower1.L_reinforced'] = L_reinforced
        prob['TowerSE.distLoads1.yaw'] = yaw

        # --- material props ---
        prob['TowerSE.tower1.E'] = E
        prob['TowerSE.tower1.G'] = G
        prob['TowerSE.tower1.rho'] = rho
        prob['TowerSE.tower1.sigma_y'] = sigma_y

        # --- spring reaction data.  Use float('inf') for rigid constraints. ---
        prob['TowerSE.tower1.kidx'] = kidx
        prob['TowerSE.tower1.kx'] = kx
        prob['TowerSE.tower1.ky'] = ky
        prob['TowerSE.tower1.kz'] = kz
        prob['TowerSE.tower1.ktx'] = ktx
        prob['TowerSE.tower1.kty'] = kty
        prob['TowerSE.tower1.ktz'] = ktz

        # --- extra mass ----
        prob['TowerSE.tower1.midx'] = midx
        prob['TowerSE.tower1.m'] = m
        prob['TowerSE.tower1.mIxx'] = mIxx
        prob['TowerSE.tower1.mIyy'] = mIyy
        prob['TowerSE.tower1.mIzz'] = mIzz
        prob['TowerSE.tower1.mIxy'] = mIxy
        prob['TowerSE.tower1.mIxz'] = mIxz
        prob['TowerSE.tower1.mIyz'] = mIyz
        prob['TowerSE.tower1.mrhox'] = mrhox
        prob['TowerSE.tower1.mrhoy'] = mrhoy
        prob['TowerSE.tower1.mrhoz'] = mrhoz
        prob['TowerSE.tower1.addGravityLoadForExtraMass'] = addGravityLoadForExtraMass
        # -----------

        # --- wind ---
        prob['TowerSE.wind1.zref'] = wind_zref
        prob['TowerSE.wind1.z0'] = wind_z0
        # ---------------

        # # --- loading case 1: max Thrust ---
        prob['TowerSE.wind1.Uref'] = wind_Uref1
        prob['TowerSE.tower1.plidx'] = plidx1
        prob['TowerSE.tower1.Fx'] = Fx1
        prob['TowerSE.tower1.Fy'] = Fy1
        prob['TowerSE.tower1.Fz'] = Fz1
        prob['TowerSE.tower1.Mxx'] = Mxx1
        prob['TowerSE.tower1.Myy'] = Myy1
        prob['TowerSE.tower1.Mzz'] = Mzz1
        # # ---------------

        # # --- loading case 2: max Wind Speed ---
        prob['TowerSE.wind2.Uref'] = wind_Uref2
        prob['TowerSE.tower2.plidx'] = plidx2
        prob['TowerSE.tower2.Fx'] = Fx2
        prob['TowerSE.tower2.Fy'] = Fy2
        prob['TowerSE.tower2.Fz'] = Fz2
        prob['TowerSE.tower2.Mxx'] = Mxx2
        prob['TowerSE.tower2.Myy'] = Myy2
        prob['TowerSE.tower2.Mzz'] = Mzz2
        # # ---------------

        # --- safety factors ---
        prob['TowerSE.tower1.gamma_f'] = gamma_f
        prob['TowerSE.tower1.gamma_m'] = gamma_m
        prob['TowerSE.tower1.gamma_n'] = gamma_n
        prob['TowerSE.tower1.gamma_b'] = gamma_b
        # ---------------

        # --- fatigue ---
        prob['TowerSE.tower1.z_DEL'] = z_DEL
        prob['TowerSE.tower1.M_DEL'] = M_DEL
        prob['TowerSE.tower1.gamma_fatigue'] = gamma_fatigue
        prob['TowerSE.tower1.life'] = life
        prob['TowerSE.tower1.m_SN'] = m_SN
        # ---------------

        # --- constraints ---
        prob['TowerSE.gc.min_d_to_t'] = min_d_to_t
        prob['TowerSE.gc.min_taper'] = min_taper
        # ---------------

        # # --- run ---
        prob.run()

        print prob['TowerSE.gc.weldability']
        print prob['TowerSE.gc.manufacturability']

        self.J = prob.check_total_derivatives(out_stream=None)
        """