コード例 #1
0
    def configure(self):
        """ Creates a new Assembly with this problem

        Optimal Design at (1.9776, 0, 0)

        Optimal Objective = 3.18339
        """

        self.add('driver', FixedPointIterator())

        # Inner Loop - Full Multidisciplinary Solve via fixed point iteration
        C1 = self.add('C1', sellar.Discipline1_WithDerivatives())
        C2 = self.add('C2', sellar.Discipline2_WithDerivatives())

        self.driver.workflow.add(['C1','C2'])

        #not relevant to the iteration. Just fixed constants
        C1.z1 = C2.z1 = 1.9776
        C1.z2 = C2.z2 = 0
        C1.x1 = 0

        # Solver settings
        self.driver.max_iteration = 5
        self.driver.tolerance = 1.e-15
        self.driver.print_convergence = False
コード例 #2
0
    def test_check_config(self):
        self.top.add("driver", FixedPointIterator())
        self.top.add("simple", Multi())
        self.top.driver.workflow.add('simple')

        try:
            self.top.run()
        except RuntimeError, err:
            msg = "driver: FixedPointIterator requires a constraint equation."
            self.assertEqual(str(err), msg)
コード例 #3
0
    def test_maxiteration(self):
        self.top.add("driver", FixedPointIterator())
        self.top.add("simple", Simple1())
        self.top.driver.workflow.add('simple')
        self.top.driver.add_constraint('simple.outvar - simple.invar = 0')
        self.top.driver.add_parameter('simple.invar', -9e99, 9e99)
        self.top.driver.max_iteration = 3

        self.top.run()
        self.assertEqual(self.top.driver.current_iteration, 2)
コード例 #4
0
 def test_maxiteration(self):
     self.top.add("driver", FixedPointIterator())
     self.top.add("simple", Simple1())
     self.top.driver.workflow.add('simple')
     self.top.driver.add_constraint('simple.outvar - simple.invar = 0')
     self.top.driver.add_parameter('simple.invar', -9e99, 9e99)
     self.top.driver.max_iteration = 3
     try:
         self.top.run()
     except RuntimeError, err:
         self.assertEqual(str(err), 'driver: Max iterations exceeded ' + \
                                    'without convergence.' )
コード例 #5
0
    def test_success(self):
        self.top.add("driver", FixedPointIterator())
        self.top.add("simple", Simple2())
        self.top.driver.workflow.add('simple')

        self.top.driver.add_constraint('simple.outvar = simple.invar')
        self.top.driver.add_parameter('simple.invar')
        self.top.run()

        self.assertAlmostEqual(self.top.simple.invar,
                               self.top.simple.outvar, places=6)
        self.assertEqual(self.top.driver.current_iteration, 0)
コード例 #6
0
    def test_simple_div10(self):
        self.top.add("driver", FixedPointIterator())
        self.top.add("simple", Div10())
        self.top.driver.workflow.add('simple')

        self.top.driver.add_constraint('simple.outvar = simple.invar')
        self.top.driver.add_parameter('simple.invar')
        self.top.driver.tolerance = .02
        self.top.run()

        assert_rel_error(self, self.top.simple.invar, .01, .002)
        assert_rel_error(self, self.top.simple.outvar, .001, .0002)
        self.assertEqual(self.top.driver.current_iteration, 3)
コード例 #7
0
    def test_array_multi(self):
        self.top.add("driver", FixedPointIterator())
        self.top.add("simple", ArrayMulti())
        self.top.driver.workflow.add('simple')

        self.top.driver.add_constraint('simple.out = simple.arr')
        self.top.driver.add_parameter('simple.arr')
        self.top.driver.tolerance = .02
        self.top.run()

        assert_rel_error(self, self.top.simple.arr[0], .01, .002)
        assert_rel_error(self, self.top.simple.out[0], .001, .0002)
        self.assertEqual(self.top.driver.current_iteration, 3)
コード例 #8
0
    def test_badcon(self):
        self.top.add("driver", FixedPointIterator())
        self.top.add("simple", Simple2())
        self.top.driver.workflow.add('simple')

        self.top.driver.add_constraint('simple.invar - simple.outvar = 0')
        self.top.driver.add_parameter('simple.invar')

        try:
            self.top.run()
        except RuntimeError, err:
            msg = "driver: Please specify constraints in the form 'A=B'"
            msg += ': simple.invar - simple.outvar = 0'
            self.assertEqual(str(err), msg)
コード例 #9
0
    def test_multi_success(self):
        self.top.add("driver", FixedPointIterator())
        self.top.add("simple", Multi())
        self.top.driver.workflow.add('simple')

        self.top.driver.add_constraint('simple.out1 = simple.in1')
        self.top.driver.add_constraint('simple.out2 = simple.in2')
        self.top.driver.add_parameter('simple.in1', -9e99, 9e99)
        self.top.driver.add_parameter('simple.in2', -9e99, 9e99)
        self.top.driver.tolerance = .02
        self.top.run()

        assert_rel_error(self, self.top.simple.in1, .01, .002)
        assert_rel_error(self, self.top.simple.out1, .001, .0002)
        self.assertEqual(self.top.driver.current_iteration, 2)
コード例 #10
0
    def test_mixed_scalar_array_multi_swapped(self):
        self.top.add("driver", FixedPointIterator())
        self.top.add("simple", MixedScalarArrayMulti())

        self.top.driver.workflow.add('simple')

        self.top.driver.add_constraint('simple.out1 = simple.arr1')
        self.top.driver.add_constraint('simple.in2 = simple.out2')
        self.top.driver.add_parameter('simple.arr1')
        self.top.driver.add_parameter('simple.in2')
        self.top.driver.tolerance = .02
        self.top.run()

        assert_rel_error(self, self.top.simple.arr1[0], .01, .002)
        assert_rel_error(self, self.top.simple.arr1[1], .01, .002)
        assert_rel_error(self, self.top.simple.out1[0], .001, .0002)
        assert_rel_error(self, self.top.simple.out1[1], .001, .0002)
        assert_rel_error(self, self.top.simple.in2, .01, .002)
        self.assertEqual(self.top.driver.current_iteration, 3)
コード例 #11
0
    def configure(self):

        self.add('d1', Discipline1_WithDerivatives())
        self.d1.x1 = 1.0
        self.d1.y1 = 1.0
        self.d1.y2 = 1.0
        self.d1.z1 = 5.0
        self.d1.z2 = 2.0

        self.add('d2', Discipline2_WithDerivatives())
        self.d2.y1 = 1.0
        self.d2.y2 = 1.0
        self.d2.z1 = 5.0
        self.d2.z2 = 2.0

        self.connect('d1.y1', 'd2.y1')
        self.connect('d2.y2', 'd1.y2')

        self.add('driver', FixedPointIterator())
        self.driver.workflow.add(['d1', 'd2'])
コード例 #12
0
    def test_execute_doe_and_cid(self):

        # Run twice, so next point comes from case iterator
        self.model.replace('driver', FixedPointIterator())
        self.model.driver.max_iteration = 3
        self.model.driver.add_parameter('adaptive.adaptive_inputs.driven.x[0]',
                                        low=-10.,
                                        high=10.)
        self.model.driver.add_constraint(
            'adaptive.adaptive_inputs.driven.x[0] = driven.y')
        self.model.run()

        self.assertEqual(self.model.driven.y, 850.0)
        self.assertTrue(self.model.adaptive.all_case_inputs.driven.x ==
                        [-10.0, 10.0, 31.0, 94.0, 283.0])
        self.assertTrue(self.model.adaptive.all_case_outputs.driven.y ==
                        [-29.0, 31.0, 94.0, 283.0, 850.0])
        self.assertTrue(
            self.model.adaptive.DOE_inputs.driven.x == [-10.0, 10.0])
        self.assertTrue(
            self.model.adaptive.DOE_outputs.driven.y == [-29.0, 31.0])