def test_complex_step_multipoint(self):
        E = 1.
        L = 1.
        b = 0.1
        volume = 0.01

        num_cp = 5
        num_elements = 50
        num_load_cases = 2

        model = MultipointBeamGroup(E=E, L=L, b=b, volume=volume,
                                        num_elements=num_elements, num_cp=num_cp,
                                        num_load_cases=num_load_cases)

        prob = om.Problem(model=model)

        prob.driver = om.ScipyOptimizeDriver()
        prob.driver.options['optimizer'] = 'SLSQP'
        prob.driver.options['tol'] = 1e-9
        prob.driver.options['disp'] = True

        prob.setup(force_alloc_complex=True)

        prob.run_model()

        derivs = prob.check_totals(method='cs', out_stream=None)
        assert_rel_error(self, derivs[('obj_sum.obj', 'inputs_comp.h_cp')]['rel error'][0],
                         0.0, 1e-8)
        assert_rel_error(self, derivs[('volume_comp.volume', 'inputs_comp.h_cp')]['rel error'][0],
                         0.0, 1e-8)

        derivs = prob.check_partials(method='cs', out_stream=None)
        assert_check_partials(derivs, rtol=1e-15)
示例#2
0
    def test_initial_value(self):
        E = 1.
        L = 1.
        b = 0.1
        volume = 0.01

        num_cp = 5
        num_elements = 50
        num_load_cases = 2

        prob = om.Problem(
            model=MultipointBeamGroup(E=E,
                                      L=L,
                                      b=b,
                                      volume=volume,
                                      num_elements=num_elements,
                                      num_cp=num_cp,
                                      num_load_cases=num_load_cases))

        prob.driver = om.ScipyOptimizeDriver(optimizer='SLSQP', tol=1e-9)
        prob.setup()
        prob.run_driver()

        h = prob['interp.h']
        expected = np.array([
            0.14122705, 0.14130706, 0.14154096, 0.1419107, 0.14238706,
            0.14293095, 0.14349514, 0.14402636, 0.1444677, 0.14476123,
            0.14485062, 0.14468388, 0.14421589, 0.1434107, 0.14224356,
            0.14070252, 0.13878952, 0.13652104, 0.13392808, 0.13105565,
            0.1279617, 0.12471547, 0.1213954, 0.11808665, 0.11487828,
            0.11185599, 0.10900669, 0.10621949, 0.10338308, 0.10039485,
            0.09716531, 0.09362202, 0.08971275, 0.08540785, 0.08070168,
            0.07561313, 0.0701851, 0.06448311, 0.05859294, 0.05261756,
            0.0466733, 0.04088557, 0.03538417, 0.03029845, 0.02575245,
            0.02186027, 0.01872173, 0.01641869, 0.0150119, 0.01453876
        ])

        assert np.linalg.norm(h - expected) < 1e-6

        def check_initial_value(subsys, parallel=False):
            """
            check that 'initial_value' is indicated for variables under a parallel group
            """
            if subsys['type'] == 'subsystem':
                # Group or Component, recurse to children
                parallel = parallel or subsys['class'] == 'ParallelGroup'
                for child in subsys['children']:
                    check_initial_value(child, parallel)
            else:
                # input or output, check for 'initial_value' flag
                if parallel:
                    assert ('initial_value' in subsys
                            and subsys['initial_value'] is True)
                else:
                    assert ('initial_value' not in subsys)

        model_data = _get_viewer_data(prob)
        for subsys in model_data['tree']['children']:
            check_initial_value(subsys)
示例#3
0
    def setup(self, problem, ndv, nstate, nproc, flag):
        E = 1.
        L = 1.
        b = 0.1
        volume = 0.01
        num_elements = 50 * nstate
        num_cp = ndv * 4
        num_load_cases = 32

        problem.model = MultipointBeamGroup(E=E, L=L, b=b, volume=volume, num_elements=num_elements,
                                            num_cp=num_cp, num_load_cases=num_load_cases)
    def test_multipoint(self):
        import numpy as np

        import openmdao.api as om
        from openmdao.test_suite.test_examples.beam_optimization.multipoint_beam_group import MultipointBeamGroup

        E = 1.
        L = 1.
        b = 0.1
        volume = 0.01

        num_cp = 5
        num_elements = 50
        num_load_cases = 2

        model = MultipointBeamGroup(E=E,
                                    L=L,
                                    b=b,
                                    volume=volume,
                                    num_elements=num_elements,
                                    num_cp=num_cp,
                                    num_load_cases=num_load_cases)

        prob = om.Problem(model=model)

        prob.driver = om.ScipyOptimizeDriver()
        prob.driver.options['optimizer'] = 'SLSQP'
        prob.driver.options['tol'] = 1e-9
        prob.driver.options['disp'] = True

        prob.setup()

        prob.run_driver()

        assert_rel_error(self, prob['interp.h'][0], [
            0.14122705, 0.14130706, 0.14154096, 0.1419107, 0.14238706,
            0.14293095, 0.14349514, 0.14402636, 0.1444677, 0.14476123,
            0.14485062, 0.14468388, 0.14421589, 0.1434107, 0.14224356,
            0.14070252, 0.13878952, 0.13652104, 0.13392808, 0.13105565,
            0.1279617, 0.12471547, 0.1213954, 0.11808665, 0.11487828,
            0.11185599, 0.10900669, 0.10621949, 0.10338308, 0.10039485,
            0.09716531, 0.09362202, 0.08971275, 0.08540785, 0.08070168,
            0.07561313, 0.0701851, 0.06448311, 0.05859294, 0.05261756,
            0.0466733, 0.04088557, 0.03538417, 0.03029845, 0.02575245,
            0.02186027, 0.01872173, 0.01641869, 0.0150119, 0.01453876
        ], 1e-4)
示例#5
0
    def benchmark_beam_np1(self):

        E = 1.
        L = 1.
        b = 0.1
        volume = 0.01

        num_elements = 50 * 32
        num_cp = 4
        num_load_cases = 32

        prob = Problem(model=MultipointBeamGroup(E=E, L=L, b=b, volume=volume,
                                                 num_elements=num_elements, num_cp=num_cp,
                                                 num_load_cases=num_load_cases))

        prob.setup(vector_class=PETScVector)

        prob.run_model()
示例#6
0
    def setup(self, problem, ndv, nstate, nproc, flag):
        E = 1.
        L = 1.
        b = 0.1
        volume = 0.01
        num_elements = 50 * nstate
        num_cp = ndv * 40
        num_load_cases = 32

        problem.model = MultipointBeamGroup(E=E,
                                            L=L,
                                            b=b,
                                            volume=volume,
                                            num_elements=num_elements,
                                            num_cp=num_cp,
                                            num_load_cases=num_load_cases)

        problem.driver = pyOptSparseDriver()
        problem.driver.options['optimizer'] = 'SNOPT'
    def test_multipoint_stress(self):
        import numpy as np

        import openmdao.api as om
        from openmdao.test_suite.test_examples.beam_optimization.multipoint_beam_stress import MultipointBeamGroup

        E = 1.
        L = 1.
        b = 0.1
        volume = 0.01
        max_bending = 100.0

        num_cp = 5
        num_elements = 25
        num_load_cases = 2

        model = MultipointBeamGroup(E=E,
                                    L=L,
                                    b=b,
                                    volume=volume,
                                    max_bending=max_bending,
                                    num_elements=num_elements,
                                    num_cp=num_cp,
                                    num_load_cases=num_load_cases)

        prob = om.Problem(model=model)

        prob.driver = om.ScipyOptimizeDriver()
        prob.driver.options['optimizer'] = 'SLSQP'
        prob.driver.options['tol'] = 1e-9
        prob.driver.options['disp'] = True

        prob.setup(mode='rev')

        prob.run_driver()

        assert_rel_error(self, prob['interp.h'][0], [
            0.45632323, 0.45612552, 0.45543324, 0.45397058, 0.45134629,
            0.44714397, 0.4410258, 0.43283139, 0.42265378, 0.41087801,
            0.3981731, 0.3854358, 0.37369202, 0.36342186, 0.35289066,
            0.34008777, 0.32362887, 0.30300358, 0.27867837, 0.25204063,
            0.22519409, 0.20063906, 0.18088818, 0.16807856, 0.16364104
        ], 1e-4)
示例#8
0
def main():
    E = 1.
    L = 1.
    b = 0.1
    volume = 0.01

    num_elements = 50 * 32
    num_cp = 4
    num_load_cases = 32

    prob = Problem(model=MultipointBeamGroup(E=E,
                                             L=L,
                                             b=b,
                                             volume=volume,
                                             num_elements=num_elements,
                                             num_cp=num_cp,
                                             num_load_cases=num_load_cases))
    prob.setup()
    prob.run_model()
示例#9
0
    PETScVector = None

if __name__ == '__main__' and PETScVector is not None:
    E = 1.
    L = 1.
    b = 0.1
    volume = 0.01

    num_cp = 5
    num_elements = 50
    num_load_cases = 2

    prob = om.Problem(model=MultipointBeamGroup(E=E,
                                                L=L,
                                                b=b,
                                                volume=volume,
                                                num_elements=num_elements,
                                                num_cp=num_cp,
                                                num_load_cases=num_load_cases))

    prob.driver = om.ScipyOptimizeDriver()
    prob.driver.options['optimizer'] = 'SLSQP'
    prob.driver.options['tol'] = 1e-9
    prob.driver.options['disp'] = True

    prob.setup()

    prob.run_driver()

    h = prob['interp.h']
    expected = np.array([