def execute(self): """ Calculate the wingsurface from the spar geometry """ # Make sure that input data has the same length self.verify_input() for beam in self.eqbeams: a = Assembly() # Add a splined blade planform from the input data a.add('pf_splines', SplinedBladePlanform(True)) a.driver.workflow.add('pf_splines') a.pf_splines.nC = 3 a.pf_splines.pfIn = beam a.pf_splines.configure_splines() a.create_passthrough('pf_splines.blade_length') a.create_passthrough('pf_splines.span_ni') a.add('blade_surface', LoftedBladeSurface()) a.driver.workflow.add('blade_surface') a.connect('pf_splines.pfOut', 'blade_surface.pf') a.connect('span_ni', 'blade_surface.span_ni') # load the planform file a.span_ni = self.span_ni b = a.blade_surface # distribute 200 points evenly along the airfoil sections b.chord_ni = 200 for f in self.airfoils: b.base_airfoils.append(np.loadtxt(f)) b.blend_var = np.array([0.25, 0.75]) self.wingsurf.append(a)
def test_nested(self): asm3 = Assembly() asm3.add('comp1', ExecComp(exprs=['z=x+y'])) driver = asm3.add('driver', SLSQPdriver()) driver.workflow.add('comp1') driver.add_parameter('comp1.y', low=-1, high=1, start=0) driver.add_objective('comp1.z') driver.add_constraint('comp1.z >= 0') asm3.create_passthrough('comp1.x') asm3.create_passthrough('comp1.z') asm2 = Assembly() asm2.add('comp1', ExecComp(exprs=['z=x+y'])) asm2.add('asm3', asm3) asm2.connect('comp1.z', 'asm3.x') driver = asm2.add('driver', SLSQPdriver()) driver.workflow.add(('comp1', 'asm3')) driver.add_parameter('comp1.y', low=-1, high=1, start=0) driver.add_objective('asm3.z') driver.add_constraint('comp1.z >= 0') asm2.create_passthrough('comp1.x') asm2.create_passthrough('asm3.z') asm1 = set_as_top(Assembly()) asm1.add('comp1', ExecComp(exprs=['z=x+y'])) asm1.add('asm2', asm2) asm1.connect('comp1.z', 'asm2.x') driver = asm1.add('driver', SLSQPdriver()) driver.workflow.add(('comp1', 'asm2')) driver.add_parameter('comp1.y', low=-1, high=1, start=0) driver.add_objective('asm2.z') driver.add_constraint('comp1.z >= 0') sout = StringIO() asm1.recorders = [JSONCaseRecorder(sout)] asm1.run() if os.environ.get('REGEN_JSON_FILES'): with open('nested.new', 'w') as out: out.write(sout.getvalue()) verify_json(self, sout, 'nested.json')
def test_nested(self): asm3 = Assembly() asm3.add('comp1', ExecComp(exprs=['z=x+y'])) driver = asm3.add('driver', SLSQPdriver()) driver.workflow.add('comp1') driver.add_parameter('comp1.y', low=-1, high=1, start=0) driver.add_objective('comp1.z') driver.add_constraint('comp1.z >= 0') asm3.create_passthrough('comp1.x') asm3.create_passthrough('comp1.z') asm2 = Assembly() asm2.add('comp1', ExecComp(exprs=['z=x+y'])) asm2.add('asm3', asm3) asm2.connect('comp1.z', 'asm3.x') driver = asm2.add('driver', SLSQPdriver()) driver.workflow.add(('comp1', 'asm3')) driver.add_parameter('comp1.y', low=-1, high=1, start=0) driver.add_objective('asm3.z') driver.add_constraint('comp1.z >= 0') asm2.create_passthrough('comp1.x') asm2.create_passthrough('asm3.z') asm1 = set_as_top(Assembly()) asm1.add('comp1', ExecComp(exprs=['z=x+y'])) asm1.add('asm2', asm2) asm1.connect('comp1.z', 'asm2.x') driver = asm1.add('driver', SLSQPdriver()) driver.workflow.add(('comp1', 'asm2')) driver.add_parameter('comp1.y', low=-1, high=1, start=0) driver.add_objective('asm2.z') driver.add_constraint('comp1.z >= 0') sout = StringIO() asm1.recorders = [JSONCaseRecorder(sout)] asm1.run() if os.environ.get('REGEN_JSON_FILES'): with open('nested.new', 'w') as out: out.write(sout.getvalue()) verify_json(self, sout, 'nested.json')
class ArrayTest(unittest.TestCase): def setUp(self): self.top = Assembly() self.top.add('driver', MyDriver()) self.top.add('comp', ArrayComp()) self.top.driver.workflow.add('comp') def test_basic(self): top = self.top comp = top.comp driver = top.driver comp.x1d = [1, 2, 3] comp.x2d = [[1, 2, 3], [4, 5, 6]] top.run() self.assertEqual(comp.fx1d, 6.) self.assertEqual(list(comp.fx2d), [6., 15.]) code = "driver.add_parameter('comp.x1d')" assert_raises(self, code, globals(), locals(), ValueError, "driver: Trying to add parameter 'comp.x1d', but no" " lower limit was found and no 'low' argument was given." " One or the other must be specified.") code = "driver.add_parameter('comp.x1d', low=-10)" assert_raises(self, code, globals(), locals(), ValueError, "driver: Trying to add parameter 'comp.x1d', but no" " upper limit was found and no 'high' argument was given." " One or the other must be specified.") driver.add_parameter('comp.x1d', low=-10, high=10, start=1) code = "driver.add_parameter('comp.x2d')" assert_raises(self, code, globals(), locals(), ValueError, "driver: Trying to add parameter 'comp.x2d', but no" " lower limit was found and no 'low' argument was given." " One or the other must be specified.") code = "driver.add_parameter('comp.x2d', low=-10)" assert_raises(self, code, globals(), locals(), ValueError, "driver: Trying to add parameter 'comp.x2d', but no" " upper limit was found and no 'high' argument was given." " One or the other must be specified.") driver.add_parameter('comp.x2d', low=-10, high=10, start=2) top.run() comp.x1d = [1, 2, 3] comp.x2d = [[1, 2, 3], [4, 5, 6]] targets = driver.list_param_targets() self.assertEqual(targets, ['comp.x1d', 'comp.x2d']) targets = driver.list_param_group_targets() self.assertEqual(targets, [('comp.x1d',), ('comp.x2d',)]) self.assertEqual(list(comp.x1d), [1, 2, 3]) self.assertEqual([list(row) for row in comp.x2d[:]], [[1, 2, 3], [4, 5, 6]]) driver.init_parameters() var = driver.workflow._system.vec['u']['comp.x1d'] self.assertEqual(list(var), [1, 1, 1]) var = driver.workflow._system.vec['u']['comp.x2d'] self.assertEqual(list(var), [2, 2, 2, 2, 2, 2]) driver.set_parameter_by_name('comp.x1d', 3) var = driver.workflow._system.vec['u']['comp.x1d'] self.assertEqual(list(var), [3, 3, 3]) driver.set_parameter_by_name('comp.x1d', array([4, 5, 6])) var = driver.workflow._system.vec['u']['comp.x1d'] self.assertEqual(list(var), [4, 5, 6]) driver.set_parameter_by_name('comp.x2d', 4) var = driver.workflow._system.vec['u']['comp.x2d'] self.assertEqual(list(var), [4, 4, 4, 4, 4, 4]) driver.set_parameter_by_name('comp.x2d', array([[5, 6, 7], [8, 9, 0]])) var = driver.workflow._system.vec['u']['comp.x2d'] self.assertEqual(list(var), [5, 6, 7, 8, 9, 0]) driver.set_parameters([7, 8, 9, 1, 2, 3, 4, 5, 6]) var = driver.workflow._system.vec['u']['comp.x1d'] self.assertEqual(list(var), [7, 8, 9]) var = driver.workflow._system.vec['u']['comp.x2d'] self.assertEqual(list(var), [1, 2, 3, 4, 5, 6]) self.assertEqual(driver._hasparameters.get_expr_depends(), [('driver', 'comp')]) self.assertEqual(driver._hasparameters.get_referenced_compnames(), set(['comp'])) self.assertEqual(driver._hasparameters.get_referenced_varpaths(), set(['comp.x1d', 'comp.x2d'])) # Still have last set_parameters() values. var = driver.workflow._system.vec['u']['comp.x1d'] self.assertEqual(list(var), [7, 8, 9]) var = driver.workflow._system.vec['u']['comp.x2d'] self.assertEqual(list(var), [1, 2, 3, 4, 5, 6]) top.run() # Now have init_parameters() values. var = driver.workflow._system.vec['u']['comp.x1d'] self.assertEqual(list(var), [1, 1, 1]) var = driver.workflow._system.vec['u']['comp.x2d'] self.assertEqual(list(var), [2, 2, 2, 2, 2, 2]) def test_mixed_use(self): # Connect to one element of array and use another element as parameter. self.top.comp.x1d = [1., 2., 3.] self.top.add('exec_comp', ExecComp(exprs=['c=x+y', 'd=x-y'])) self.top.driver.workflow.add('exec_comp') self.top.connect('exec_comp.c', 'comp.x1d[0]') self.top.driver.add_parameter('comp.x1d[1]', low=-10, high=10, start=1.) self.top.run() def test_set_boundary_params(self): self.top = set_as_top(Assembly()) self.top.add('driver', MyDriver()) class ArrayComp2(Component): x = Array([0.0, 0.0], iotype='in') y = Array([0.0, 0.0], iotype='in') c = Array([0.0, 0.0], iotype='out') def execute(self): self.c = self.x + self.y self.top.add('comp', ArrayComp2()) self.top.driver.workflow.add('comp') self.top.create_passthrough('comp.x') self.top.create_passthrough('comp.c') self.top.connect('x', 'comp.y') self.top.driver.add_parameter(('x'), low=0., high=1e99) self.top.x = [22.0, 31.1] self.top.run() self.assertEqual(self.top.x[0], 22.) self.assertEqual(self.top.x[1], 31.1) self.assertEqual(self.top.comp.y[0], 22.) self.assertEqual(self.top.comp.y[1], 31.1)
class ArrayTest(unittest.TestCase): def setUp(self): self.top = Assembly() self.top.add('driver', MyDriver()) self.top.add('comp', ArrayComp()) self.top.driver.workflow.add('comp') def test_basic(self): top = self.top comp = top.comp driver = top.driver comp.x1d = [1, 2, 3] comp.x2d = [[1, 2, 3], [4, 5, 6]] top.run() self.assertEqual(comp.fx1d, 6.) self.assertEqual(list(comp.fx2d), [6., 15.]) code = "driver.add_parameter('comp.x1d')" assert_raises( self, code, globals(), locals(), ValueError, "driver: Trying to add parameter 'comp.x1d', but no" " lower limit was found and no 'low' argument was given." " One or the other must be specified.") code = "driver.add_parameter('comp.x1d', low=-10)" assert_raises( self, code, globals(), locals(), ValueError, "driver: Trying to add parameter 'comp.x1d', but no" " upper limit was found and no 'high' argument was given." " One or the other must be specified.") driver.add_parameter('comp.x1d', low=-10, high=10, start=1) code = "driver.add_parameter('comp.x2d')" assert_raises( self, code, globals(), locals(), ValueError, "driver: Trying to add parameter 'comp.x2d', but no" " lower limit was found and no 'low' argument was given." " One or the other must be specified.") code = "driver.add_parameter('comp.x2d', low=-10)" assert_raises( self, code, globals(), locals(), ValueError, "driver: Trying to add parameter 'comp.x2d', but no" " upper limit was found and no 'high' argument was given." " One or the other must be specified.") driver.add_parameter('comp.x2d', low=-10, high=10, start=2) top.run() comp.x1d = [1, 2, 3] comp.x2d = [[1, 2, 3], [4, 5, 6]] targets = driver.list_param_targets() self.assertEqual(targets, ['comp.x1d', 'comp.x2d']) targets = driver.list_param_group_targets() self.assertEqual(targets, [('comp.x1d', ), ('comp.x2d', )]) self.assertEqual(list(comp.x1d), [1, 2, 3]) self.assertEqual([list(row) for row in comp.x2d[:]], [[1, 2, 3], [4, 5, 6]]) driver.init_parameters() var = driver.workflow._system.vec['u']['comp.x1d'] self.assertEqual(list(var), [1, 1, 1]) var = driver.workflow._system.vec['u']['comp.x2d'] self.assertEqual(list(var), [2, 2, 2, 2, 2, 2]) driver.set_parameter_by_name('comp.x1d', 3) var = driver.workflow._system.vec['u']['comp.x1d'] self.assertEqual(list(var), [3, 3, 3]) driver.set_parameter_by_name('comp.x1d', array([4, 5, 6])) var = driver.workflow._system.vec['u']['comp.x1d'] self.assertEqual(list(var), [4, 5, 6]) driver.set_parameter_by_name('comp.x2d', 4) var = driver.workflow._system.vec['u']['comp.x2d'] self.assertEqual(list(var), [4, 4, 4, 4, 4, 4]) driver.set_parameter_by_name('comp.x2d', array([[5, 6, 7], [8, 9, 0]])) var = driver.workflow._system.vec['u']['comp.x2d'] self.assertEqual(list(var), [5, 6, 7, 8, 9, 0]) driver.set_parameters([7, 8, 9, 1, 2, 3, 4, 5, 6]) var = driver.workflow._system.vec['u']['comp.x1d'] self.assertEqual(list(var), [7, 8, 9]) var = driver.workflow._system.vec['u']['comp.x2d'] self.assertEqual(list(var), [1, 2, 3, 4, 5, 6]) self.assertEqual(driver._hasparameters.get_expr_depends(), [('driver', 'comp')]) self.assertEqual(driver._hasparameters.get_referenced_compnames(), set(['comp'])) self.assertEqual(driver._hasparameters.get_referenced_varpaths(), set(['comp.x1d', 'comp.x2d'])) # Still have last set_parameters() values. var = driver.workflow._system.vec['u']['comp.x1d'] self.assertEqual(list(var), [7, 8, 9]) var = driver.workflow._system.vec['u']['comp.x2d'] self.assertEqual(list(var), [1, 2, 3, 4, 5, 6]) top.run() # Now have init_parameters() values. var = driver.workflow._system.vec['u']['comp.x1d'] self.assertEqual(list(var), [1, 1, 1]) var = driver.workflow._system.vec['u']['comp.x2d'] self.assertEqual(list(var), [2, 2, 2, 2, 2, 2]) def test_mixed_use(self): # Connect to one element of array and use another element as parameter. self.top.comp.x1d = [1., 2., 3.] self.top.add('exec_comp', ExecComp(exprs=['c=x+y', 'd=x-y'])) self.top.driver.workflow.add('exec_comp') self.top.connect('exec_comp.c', 'comp.x1d[0]') self.top.driver.add_parameter('comp.x1d[1]', low=-10, high=10, start=1.) self.top.run() def test_set_boundary_params(self): self.top = set_as_top(Assembly()) self.top.add('driver', MyDriver()) class ArrayComp2(Component): x = Array([0.0, 0.0], iotype='in') y = Array([0.0, 0.0], iotype='in') c = Array([0.0, 0.0], iotype='out') def execute(self): self.c = self.x + self.y self.top.add('comp', ArrayComp2()) self.top.driver.workflow.add('comp') self.top.create_passthrough('comp.x') self.top.create_passthrough('comp.c') self.top.connect('x', 'comp.y') self.top.driver.add_parameter(('x'), low=0., high=1e99) self.top.x = [22.0, 31.1] self.top.run() self.assertEqual(self.top.x[0], 22.) self.assertEqual(self.top.x[1], 31.1) self.assertEqual(self.top.comp.y[0], 22.) self.assertEqual(self.top.comp.y[1], 31.1)