コード例 #1
0
            def setup(self):
                dv = self.add_subsystem('des_vars', IndepVarComp(), promotes=['*'])
                dv.add_output('x', 1.0)
                dv.add_output('z', np.array([5.0, 2.0]))

                self.add_subsystem('d1', SellarDis2(), promotes_inputs=['y1'], promotes_outputs=['foo'])
                self.add_subsystem('d2', SellarDis2())
コード例 #2
0
ファイル: test_xdsm_viewer.py プロジェクト: ovidner/OpenMDAO
            def setup(self):
                indeps = self.add_subsystem('indeps',
                                            om.IndepVarComp(),
                                            promotes=['*'])
                indeps.add_output('x', 1.0)
                indeps.add_output('z', np.array([5.0, 2.0]))
                cycle = self.add_subsystem('cycle',
                                           om.ParallelGroup(),
                                           promotes=['*'])
                cycle.add_subsystem('d1',
                                    SellarDis1(),
                                    promotes_inputs=['x', 'z', 'y2'],
                                    promotes_outputs=['y1'])
                cycle.add_subsystem('d2',
                                    SellarDis2(),
                                    promotes_inputs=['z', 'y1'],
                                    promotes_outputs=['y2'])

                # Nonlinear Block Gauss Seidel is a gradient free solver
                cycle.nonlinear_solver = om.NonlinearBlockGS()

                self.add_subsystem('obj_cmp',
                                   om.ExecComp(
                                       'obj = x**2 + z[1] + y1 + exp(-y2)',
                                       z=np.array([0.0, 0.0]),
                                       x=0.0),
                                   promotes=['x', 'z', 'y1', 'y2', 'obj'])

                self.add_subsystem('con_cmp1',
                                   om.ExecComp('con1 = 3.16 - y1'),
                                   promotes=['con1', 'y1'])
                self.add_subsystem('con_cmp2',
                                   om.ExecComp('con2 = y2 - 24.0'),
                                   promotes=['con2', 'y2'])
コード例 #3
0
    def test_res_ref(self):
        class ContrivedSellarDis1(SellarDis1):
            def setup(self):
                super(ContrivedSellarDis1, self).setup()
                self.add_output('highly_nonlinear', val=1.0, res_ref=1e-4)

            def compute(self, inputs, outputs):
                super(ContrivedSellarDis1, self).compute(inputs, outputs)
                outputs['highly_nonlinear'] = 10 * np.sin(10 * inputs['y2'])

        p = Problem()
        model = p.model

        model.add_subsystem('px', IndepVarComp('x', 1.0), promotes=['x'])
        model.add_subsystem('pz',
                            IndepVarComp('z', np.array([5.0, 2.0])),
                            promotes=['z'])

        model.add_subsystem('d1',
                            ContrivedSellarDis1(),
                            promotes=['x', 'z', 'y1', 'y2'])
        model.add_subsystem('d2', SellarDis2(), promotes=['z', 'y1', 'y2'])

        nlbgs = model.nonlinear_solver = NonlinearBlockGS()

        nlbgs.options['maxiter'] = 20
        nlbgs.options['atol'] = 1e-6
        nlbgs.options['rtol'] = 1e-100

        p.setup()
        p.run_model()

        self.assertEqual(nlbgs._iter_count, 9,
                         'res_ref should make this take more iters.')
コード例 #4
0
ファイル: sellar.py プロジェクト: minghao2016/OpenMDAO-1
    def setup(self):
        indeps = self.add_subsystem('indeps', IndepVarComp())
        indeps.add_output('x', 1.0)
        indeps.add_output('z', np.array([5.0, 2.0]))

        cycle = self.add_subsystem('cycle', Group())
        d1 = cycle.add_subsystem('d1', SellarDis1())
        d2 = cycle.add_subsystem('d2', SellarDis2())
        cycle.connect('d1.y1', 'd2.y1')
    
        ######################################
        # This is a "forgotten" connection!!
        ######################################
        #cycle.connect('d2.y2', 'd1.y2')

        # Nonlinear Block Gauss Seidel is a gradient free solver
        cycle.nonlinear_solver = NonlinearBlockGS()

        self.add_subsystem('obj_cmp', ExecComp('obj = x**2 + z[1] + y1 + exp(-y2)',
                                               z=np.array([0.0, 0.0]), x=0.0))

        self.add_subsystem('con_cmp1', ExecComp('con1 = 3.16 - y1'))
        self.add_subsystem('con_cmp2', ExecComp('con2 = y2 - 24.0'))

        self.connect('indeps.x', ['cycle.d1.x', 'obj_cmp.x'])
        self.connect('indeps.z', ['cycle.d1.z', 'cycle.d2.z', 'obj_cmp.z'])
        self.connect('cycle.d1.y1', ['obj_cmp.y1', 'con_cmp1.y1'])        
        self.connect('cycle.d2.y2', ['obj_cmp.y2', 'con_cmp2.y2'])
コード例 #5
0
            def setup(self):
                cycle = self.add_subsystem('cycle', om.Group(), promotes=['*'])
                cycle.add_subsystem('d1',
                                    SellarDis1(),
                                    promotes_inputs=['x', 'z'])
                cycle.add_subsystem('d2', SellarDis2(), promotes_inputs=['z'])
                cycle.connect('d1.y1', 'd2.y1')
                cycle.connect('d2.y2', 'd1.y2')

                cycle.set_input_defaults('x', 1.0)
                cycle.set_input_defaults('z', np.array([5.0, 2.0]))

                # Nonlinear Block Gauss Seidel is a gradient free solver
                cycle.nonlinear_solver = om.NonlinearBlockGS()

                self.add_subsystem('obj_cmp',
                                   om.ExecComp(
                                       'obj = x**2 + z[1] + y1 + exp(-y2)',
                                       z=np.array([0.0, 0.0]),
                                       x=0.0),
                                   promotes_inputs=['x', 'z'])

                self.add_subsystem('con_cmp1', om.ExecComp('con1 = 3.16 - y1'))
                self.add_subsystem('con_cmp2', om.ExecComp('con2 = y2 - 24.0'))

                self.connect('d1.y1', ['con_cmp1.y1', 'obj_cmp.y1'])
                self.connect('d2.y2', ['con_cmp2.y2', 'obj_cmp.y2'])
コード例 #6
0
            def setup(self):
                # set up model hierarchy
                cycle = self.add_subsystem('cycle', om.Group())
                cycle.add_subsystem('d1', SellarDis1())
                cycle.add_subsystem('d2', SellarDis2())

                cycle.nonlinear_solver = om.NonlinearBlockGS()

                self.add_subsystem(
                    'obj_cmp',
                    om.ExecComp('obj = x**2 + z[1] + y1 + exp(-y2)',
                                z=np.array([0.0, 0.0]),
                                x=0.0))

                self.add_subsystem('con_cmp1', om.ExecComp('con1 = 3.16 - y1'))
                self.add_subsystem('con_cmp2', om.ExecComp('con2 = y2 - 24.0'))
コード例 #7
0
            def setup(self):
                cycle = self.add_subsystem('cycle', om.Group(), promotes_inputs=['x', 'z'])
                cycle.add_subsystem('d1', SellarDis1(), promotes_inputs=['x', 'z'])
                cycle.add_subsystem('d2', SellarDis2(), promotes_inputs=['z'])
                cycle.connect('d1.y1', 'd2.y1')

                cycle.nonlinear_solver = om.NonlinearBlockGS()

                self.add_subsystem('obj_cmp', om.ExecComp('obj = x**2 + z[1] + y1 + exp(-y2)',
                                                          z=np.array([0.0, 0.0]), x=0.0),
                                   promotes_inputs=['x', 'z'])

                self.add_subsystem('con_cmp1', om.ExecComp('con1 = 3.16 - y1'))
                self.add_subsystem('con_cmp2', om.ExecComp('con2 = y2 - 24.0'))

                self.connect('cycle.d1.y1', ['obj_cmp.y1', 'con_cmp1.y1'])
                self.connect('cycle.d2.y2', ['obj_cmp.y2', 'con_cmp2.y2'])
コード例 #8
0
    def setUp(self):
        self.prob = Problem()
        model = self.prob.model

        model.add_subsystem("px", IndepVarComp("x", 1.0), promotes=["x"])
        model.add_subsystem("pz",
                            IndepVarComp("z", np.array([5.0, 2.0])),
                            promotes=["z"])

        model.add_subsystem("d1",
                            ContrivedSellarDis1(),
                            promotes=["x", "z", "y1", "y2"])
        model.add_subsystem("d2", SellarDis2(), promotes=["z", "y1", "y2"])

        self.nlbgs = nlbgs = model.nonlinear_solver = RecklessNonlinearBlockGS(
        )

        nlbgs.options["maxiter"] = 20
        nlbgs.options["atol"] = 1e-6
        nlbgs.options["rtol"] = 1e-6
        nlbgs.options["iprint"] = 2
コード例 #9
0
            def setup(self):
                # set up model hierarchy
                indeps = self.add_subsystem('indeps',
                                            om.IndepVarComp(),
                                            promotes=['*'])
                indeps.add_output('x', 1.0)
                indeps.add_output('z', np.array([5.0, 2.0]))

                cycle = self.add_subsystem('cycle', om.Group())
                cycle.add_subsystem('d1', SellarDis1())
                cycle.add_subsystem('d2', SellarDis2())

                cycle.nonlinear_solver = om.NonlinearBlockGS()

                self.add_subsystem(
                    'obj_cmp',
                    om.ExecComp('obj = x**2 + z[1] + y1 + exp(-y2)',
                                z=np.array([0.0, 0.0]),
                                x=0.0))

                self.add_subsystem('con_cmp1', om.ExecComp('con1 = 3.16 - y1'))
                self.add_subsystem('con_cmp2', om.ExecComp('con2 = y2 - 24.0'))