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
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)
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)
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.' )
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)
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)
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)
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)
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)
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)
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'])
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])