def test_aero_optimization_fd(self): # Need to use SLSQP here because SNOPT finds a different optimum OAS_prob = OASProblem({ 'type': 'aero', 'optimize': True, 'record_db': False, 'optimizer': 'SLSQP', 'force_fd': True }) OAS_prob.add_surface() OAS_prob.add_desvar('wing.twist_cp', lower=-10., upper=15.) OAS_prob.add_desvar('wing.sweep', lower=10., upper=30.) OAS_prob.add_desvar('wing.dihedral', lower=-10., upper=20.) OAS_prob.add_desvar('wing.taper', lower=.5, upper=2.) OAS_prob.add_constraint('wing_perf.CL', equals=0.5) OAS_prob.add_objective('wing_perf.CD', scaler=1e4) OAS_prob.setup() OAS_prob.run() prob = OAS_prob.prob self.assertAlmostEqual(prob['wing_perf.CD'], 0.0038513637269919619, places=5)
def test_struct_optimization_symmetry_exact(self): OAS_prob = OASProblem({ 'type': 'struct', 'optimize': True, 'record_db': False }) OAS_prob.add_surface({ 'exact_failure_constraint': True, 't_over_c': 0.15 }) OAS_prob.add_desvar('wing.thickness_cp', lower=0.001, upper=0.25, scaler=1e2) OAS_prob.add_constraint('wing.failure', upper=0.) OAS_prob.add_constraint('wing.thickness_intersects', upper=0.) OAS_prob.add_objective('wing.structural_weight', scaler=1e-3) OAS_prob.setup() OAS_prob.run() prob = OAS_prob.prob self.assertAlmostEqual(prob['wing.structural_weight'], 1132.0650209475402, places=2)
def test_aero_multiple_opt(self): OAS_prob = OASProblem({'type' : 'aero', 'optimize' : True, 'record_db' : False}) surf_dict = { 'name' : 'wing', 'span' : 5., 'num_y' : 3, 'span_cos_spacing' : 0.} OAS_prob.add_surface(surf_dict) surf_dict.update({'name' : 'tail', 'offset' : np.array([0., 0., 10.])}) OAS_prob.add_surface(surf_dict) OAS_prob.add_desvar('tail.twist_cp', lower=-10., upper=15.) OAS_prob.add_desvar('tail.sweep', lower=10., upper=30.) OAS_prob.add_desvar('tail.dihedral', lower=-10., upper=20.) OAS_prob.add_desvar('tail.taper', lower=.5, upper=2.) OAS_prob.add_constraint('tail_perf.CL', equals=0.5) OAS_prob.add_objective('tail_perf.CD', scaler=1e4) OAS_prob.setup() OAS_prob.run() prob = OAS_prob.prob self.assertAlmostEqual(prob['wing_perf.CL'], 0.41532382375677429, places=4) self.assertAlmostEqual(prob['tail_perf.CL'], .5, places=5) self.assertAlmostEqual(prob['wing_perf.CD'], .0075400306289957033, places=5) self.assertAlmostEqual(prob['tail_perf.CD'], 0.008087914662238814, places=5)
def test_aero_multiple_opt(self): OAS_prob = OASProblem({'type' : 'aero', 'optimize' : True, 'record_db' : False}) surf_dict = { 'name' : 'wing', 'span' : 5., 'num_y' : 3, 'span_cos_spacing' : 0.} OAS_prob.add_surface(surf_dict) surf_dict.update({'name' : 'tail', 'offset' : np.array([0., 0., 10.])}) OAS_prob.add_surface(surf_dict) OAS_prob.add_desvar('tail.twist_cp', lower=-10., upper=15.) OAS_prob.add_desvar('tail.sweep', lower=10., upper=30.) OAS_prob.add_desvar('tail.dihedral', lower=-10., upper=20.) OAS_prob.add_desvar('tail.taper', lower=.5, upper=2.) OAS_prob.add_constraint('tail_perf.CL', equals=0.5) OAS_prob.add_objective('tail_perf.CD', scaler=1e4) OAS_prob.setup() OAS_prob.run() prob = OAS_prob.prob self.assertAlmostEqual(prob['wing_perf.CL'], 0.41532382375677429, places=4) self.assertAlmostEqual(prob['tail_perf.CL'], .5, places=5) self.assertAlmostEqual(prob['wing_perf.CD'], .0075400306289957033, places=5) self.assertAlmostEqual(prob['tail_perf.CD'], 0.008087914662238814, places=5)
def OAS_setup(user_prob_dict={}, user_surf_list=[]): # default prob_dict and surf_dict's from run_aerostruct.py default_prob_dict = _get_default_prob_dict() default_prob_dict.update(user_prob_dict) prob_dict = default_prob_dict # remove 'des_vars', 'contraints', and 'objectives' entries from prob_dict # so it doesn't potentially conflict with OASProblem object des_vars = prob_dict.pop('des_vars', []) constraints = prob_dict.pop('constraints', []) objectives = prob_dict.pop('objectives', []) if user_surf_list: # replace default_surf_list if user supplied one surf_list = user_surf_list else: surf_list = _get_default_surf_list() # when wrapping from Matlab, an array of a single value will always be # converted to a float in Python and not an iterable, which causes problems. iterable_vars = [ 'chord_cp', 'thickness_cp', 'radius_cp', 'twist_cp', 'xshear_cp', 'yshear_cp', 'zshear_cp' ] for surf in surf_list: for key, val in iteritems(surf): if (key in iterable_vars) and (not hasattr(val, '__iter__')): surf[key] = np.array([val]) # make an ndarray from list # Create OASProblem object OASprob = OASProblem(prob_dict) # Add surfaces to OASProblem for surf in surf_list: OASprob.add_surface(surf) # Add design variables to OASProblem for var_tuple in des_vars: OASprob.add_desvar(var_tuple[0], **var_tuple[1]) # Add constraints to OASProblem for var_tuple in constraints: OASprob.add_constraint(var_tuple[0], **var_tuple[1]) # Add objectives to OASProblem for var_tuple in objectives: OASprob.add_objective(var_tuple[0], **var_tuple[1]) # setup OpenMDAO components in OASProblem OASprob.setup() return OASprob
def test_aerostruct_optimization_symmetry_multiple(self): OAS_prob = OASProblem({ 'type': 'aerostruct', 'optimize': True, 'with_viscous': True, 'record_db': False }) surf_dict = { 'name': 'wing', 'symmetry': True, 'num_y': 5, 'num_x': 2, 'wing_type': 'CRM', 'CD0': 0.015, 'num_twist_cp': 2, 'num_thickness_cp': 2 } OAS_prob.add_surface(surf_dict) surf_dict.update({ 'name': 'tail', 'offset': np.array([10., 0., 10.]) }) OAS_prob.add_surface(surf_dict) # Add design variables and constraints for both the wing and tail OAS_prob.add_desvar('wing.twist_cp', lower=-15., upper=15.) OAS_prob.add_desvar('wing.thickness_cp', lower=0.01, upper=0.5, scaler=1e2) OAS_prob.add_constraint('wing_perf.failure', upper=0.) OAS_prob.add_constraint('wing_perf.thickness_intersects', upper=0.) OAS_prob.add_desvar('tail.twist_cp', lower=-15., upper=15.) OAS_prob.add_desvar('tail.thickness_cp', lower=0.01, upper=0.5, scaler=1e2) OAS_prob.add_constraint('tail_perf.failure', upper=0.) OAS_prob.add_constraint('tail_perf.thickness_intersects', upper=0.) OAS_prob.add_desvar('alpha', lower=-10., upper=10.) OAS_prob.add_constraint('L_equals_W', equals=0.) OAS_prob.add_objective('fuelburn', scaler=1e-5) OAS_prob.setup() OAS_prob.run() prob = OAS_prob.prob self.assertAlmostEqual(prob['fuelburn'], 171166.87568490615, places=1) self.assertAlmostEqual(prob['wing_perf.failure'], 0, places=5)
def OAS_setup(user_prob_dict={}, user_surf_list=[]): # default prob_dict and surf_dict's from run_aerostruct.py default_prob_dict = _get_default_prob_dict() default_prob_dict.update(user_prob_dict) prob_dict = default_prob_dict # remove 'des_vars', 'contraints', and 'objectives' entries from prob_dict # so it doesn't potentially conflict with OASProblem object des_vars = prob_dict.pop('des_vars', []) constraints = prob_dict.pop('constraints', []) objectives = prob_dict.pop('objectives', []) if user_surf_list: # replace default_surf_list if user supplied one surf_list = user_surf_list else: surf_list = _get_default_surf_list() # when wrapping from Matlab, an array of a single value will always be # converted to a float in Python and not an iterable, which causes problems. iterable_vars = ['chord_cp','thickness_cp','radius_cp','twist_cp', 'xshear_cp','yshear_cp','zshear_cp'] for surf in surf_list: for key, val in iteritems(surf): if (key in iterable_vars) and (not hasattr(val,'__iter__')): surf[key] = np.array([val]) # make an ndarray from list # Create OASProblem object OASprob = OASProblem(prob_dict) # Add surfaces to OASProblem for surf in surf_list: OASprob.add_surface(surf) # Add design variables to OASProblem for var_tuple in des_vars: OASprob.add_desvar(var_tuple[0], **var_tuple[1]) # Add constraints to OASProblem for var_tuple in constraints: OASprob.add_constraint(var_tuple[0], **var_tuple[1]) # Add objectives to OASProblem for var_tuple in objectives: OASprob.add_objective(var_tuple[0], **var_tuple[1]) # setup OpenMDAO components in OASProblem OASprob.setup() return OASprob
def test_struct_optimization_symmetry(self): OAS_prob = OASProblem({'type' : 'struct', 'optimize' : True, 'record_db' : False}) OAS_prob.add_surface({'t_over_c': 0.15}) OAS_prob.add_desvar('wing.thickness_cp', lower=0.001, upper=0.25, scaler=1e2) OAS_prob.add_constraint('wing.failure', upper=0.) OAS_prob.add_constraint('wing.thickness_intersects', upper=0.) OAS_prob.add_objective('wing.structural_weight', scaler=1e-3) OAS_prob.setup() OAS_prob.run() prob = OAS_prob.prob self.assertAlmostEqual(prob['wing.structural_weight'], 1144.8503583047038, places=2)
def test_aero_viscous_optimization(self): OAS_prob = OASProblem({'type' : 'aero', 'optimize' : True, 'record_db' : False, 'with_viscous' : True}) OAS_prob.add_surface() OAS_prob.add_desvar('wing.twist_cp', lower=-10., upper=15.) OAS_prob.add_desvar('wing.sweep', lower=10., upper=30.) OAS_prob.add_desvar('wing.dihedral', lower=-10., upper=20.) OAS_prob.add_constraint('wing_perf.CL', equals=0.5) OAS_prob.add_objective('wing_perf.CD', scaler=1e4) OAS_prob.setup() OAS_prob.run() prob = OAS_prob.prob self.assertAlmostEqual(prob['wing_perf.CD'], 0.019234984422361764, places=5)
def test_aero_viscous_optimization(self): OAS_prob = OASProblem({'type' : 'aero', 'optimize' : True, 'record_db' : False, 'with_viscous' : True}) OAS_prob.add_surface() OAS_prob.add_desvar('wing.twist_cp', lower=-10., upper=15.) OAS_prob.add_desvar('wing.sweep', lower=10., upper=30.) OAS_prob.add_desvar('wing.dihedral', lower=-10., upper=20.) OAS_prob.add_constraint('wing_perf.CL', equals=0.5) OAS_prob.add_objective('wing_perf.CD', scaler=1e4) OAS_prob.setup() OAS_prob.run() prob = OAS_prob.prob self.assertAlmostEqual(prob['wing_perf.CD'], 0.019234984422361764, places=5)
def test_aero_optimization(self): # Need to use SLSQP here because SNOPT finds a different optimum OAS_prob = OASProblem({'type' : 'aero', 'optimize' : True, 'record_db' : False, 'optimizer' : 'SLSQP'}) OAS_prob.add_surface() OAS_prob.add_desvar('wing.twist_cp', lower=-10., upper=15.) OAS_prob.add_desvar('wing.sweep', lower=10., upper=30.) OAS_prob.add_desvar('wing.dihedral', lower=-10., upper=20.) OAS_prob.add_constraint('wing_perf.CL', equals=0.5) OAS_prob.add_objective('wing_perf.CD', scaler=1e4) OAS_prob.setup() OAS_prob.run() prob = OAS_prob.prob self.assertAlmostEqual(prob['wing_perf.CD'], 0.0049392534859265614, places=5)
def test_aero_viscous_chord_optimization(self): # Need to use SLSQP here because SNOPT finds a different optimum OAS_prob = OASProblem({'type' : 'aero', 'optimize' : True, 'record_db' : False, 'optimizer' : 'SLSQP', 'with_viscous' : True}) OAS_prob.add_surface() OAS_prob.add_desvar('wing.chord_cp', lower=0.1, upper=3.) OAS_prob.add_desvar('alpha', lower=-10., upper=10.) OAS_prob.add_constraint('wing_perf.CL', equals=0.5) OAS_prob.add_constraint('wing.S_ref', equals=20) OAS_prob.add_objective('wing_perf.CD', scaler=1e4) OAS_prob.setup() OAS_prob.run() prob = OAS_prob.prob self.assertAlmostEqual(prob['wing_perf.CD'], 0.023570021288019886, places=5)
def test_aero_viscous_chord_optimization(self): # Need to use SLSQP here because SNOPT finds a different optimum OAS_prob = OASProblem({'type' : 'aero', 'optimize' : True, 'record_db' : False, 'optimizer' : 'SLSQP', 'with_viscous' : True}) OAS_prob.add_surface() OAS_prob.add_desvar('wing.chord_cp', lower=0.1, upper=3.) OAS_prob.add_desvar('alpha', lower=-10., upper=10.) OAS_prob.add_constraint('wing_perf.CL', equals=0.5) OAS_prob.add_constraint('wing.S_ref', equals=20) OAS_prob.add_objective('wing_perf.CD', scaler=1e4) OAS_prob.setup() OAS_prob.run() prob = OAS_prob.prob self.assertAlmostEqual(prob['wing_perf.CD'], 0.023570021288019886, places=5)
def test_aero_optimization_chord_monotonic_no_sym(self): OAS_prob = OASProblem({ 'type': 'aero', 'optimize': True, 'record_db': False, 'symmetry': False, 'with_viscous': False }) OAS_prob.add_surface({ 'chord_cp': np.random.random(5), 'num_y': 11, 'monotonic_con': ['chord'], 'span_cos_spacing': 0., }) OAS_prob.add_desvar('wing.chord_cp', lower=0.1, upper=5.) OAS_prob.add_desvar('alpha', lower=-10., upper=10.) OAS_prob.add_constraint('wing_perf.CL', equals=0.1) OAS_prob.add_constraint('wing.S_ref', equals=20) OAS_prob.add_constraint('wing.monotonic_chord', upper=0.) OAS_prob.add_objective('wing_perf.CD', scaler=1e4) OAS_prob.setup() OAS_prob.run() prob = OAS_prob.prob self.assertAlmostEqual(prob['wing_perf.CD'], 0.00057432581266351113, places=5) self.assertAlmostEqual(prob['wing.monotonic_chord'][0], -1.710374671671999, places=2)
def test_aerostruct_optimization_symmetry(self): OAS_prob = OASProblem({'type' : 'aerostruct', 'optimize' : True, 'with_viscous' : True, 'record_db' : False}) surf_dict = {'symmetry' : True, 'num_y' : 7, 'num_x' : 3, 'wing_type' : 'CRM', 'CD0' : 0.015, 'num_twist_cp' : 2, 'num_thickness_cp' : 2} OAS_prob.add_surface(surf_dict) OAS_prob.add_desvar('wing.twist_cp', lower=-15., upper=15.) OAS_prob.add_desvar('wing.thickness_cp', lower=0.01, upper=0.5, scaler=1e2) OAS_prob.add_constraint('wing_perf.failure', upper=0.) OAS_prob.add_constraint('wing_perf.thickness_intersects', upper=0.) OAS_prob.add_desvar('alpha', lower=-10., upper=10.) OAS_prob.add_constraint('L_equals_W', equals=0.) OAS_prob.add_objective('fuelburn', scaler=1e-4) OAS_prob.setup() OAS_prob.run() prob = OAS_prob.prob self.assertAlmostEqual(prob['fuelburn'], 96077.224922178371, places=0) self.assertAlmostEqual(prob['wing_perf.failure'], 0, places=5)
def test_aero_optimization_chord_monotonic_no_sym(self): OAS_prob = OASProblem({'type' : 'aero', 'optimize' : True, 'record_db' : False, 'symmetry' : False, 'with_viscous' : False}) OAS_prob.add_surface({ 'chord_cp' : np.random.random(5), 'num_y' : 11, 'monotonic_con' : ['chord'], 'span_cos_spacing' : 0., }) OAS_prob.add_desvar('wing.chord_cp', lower=0.1, upper=5.) OAS_prob.add_desvar('alpha', lower=-10., upper=10.) OAS_prob.add_constraint('wing_perf.CL', equals=0.1) OAS_prob.add_constraint('wing.S_ref', equals=20) OAS_prob.add_constraint('wing.monotonic_chord', upper=0.) OAS_prob.add_objective('wing_perf.CD', scaler=1e4) OAS_prob.setup() OAS_prob.run() prob = OAS_prob.prob self.assertAlmostEqual(prob['wing_perf.CD'], 0.00057432581266351113, places=5) self.assertAlmostEqual(prob['wing.monotonic_chord'][0], -1.710374671671999, places=2)
def test_aerostruct_optimization_symmetry(self): OAS_prob = OASProblem({'type' : 'aerostruct', 'optimize' : True, 'with_viscous' : True, 'record_db' : False}) surf_dict = {'symmetry' : True, 'num_y' : 7, 'num_x' : 3, 'wing_type' : 'CRM', 'CD0' : 0.015, 'num_twist_cp' : 2, 'num_thickness_cp' : 2} OAS_prob.add_surface(surf_dict) OAS_prob.add_desvar('wing.twist_cp', lower=-15., upper=15.) OAS_prob.add_desvar('wing.thickness_cp', lower=0.01, upper=0.5, scaler=1e2) OAS_prob.add_constraint('wing_perf.failure', upper=0.) OAS_prob.add_constraint('wing_perf.thickness_intersects', upper=0.) OAS_prob.add_desvar('alpha', lower=-10., upper=10.) OAS_prob.add_constraint('L_equals_W', equals=0.) OAS_prob.add_objective('fuelburn', scaler=1e-4) OAS_prob.setup() OAS_prob.run() prob = OAS_prob.prob self.assertAlmostEqual(prob['fuelburn'], 96074.934265520889, places=0) self.assertAlmostEqual(prob['wing_perf.failure'], 0, places=5)
def test_aerostruct_optimization_symmetry_multiple(self): OAS_prob = OASProblem({'type' : 'aerostruct', 'optimize' : True, 'with_viscous' : True, 'record_db' : False}) surf_dict = {'name' : 'wing', 'symmetry' : True, 'num_y' : 5, 'num_x' : 2, 'wing_type' : 'CRM', 'CD0' : 0.015, 'num_twist_cp' : 2, 'num_thickness_cp' : 2} OAS_prob.add_surface(surf_dict) surf_dict.update({'name' : 'tail', 'offset':np.array([10., 0., 10.])}) OAS_prob.add_surface(surf_dict) # Add design variables and constraints for both the wing and tail OAS_prob.add_desvar('wing.twist_cp', lower=-15., upper=15.) OAS_prob.add_desvar('wing.thickness_cp', lower=0.01, upper=0.5, scaler=1e2) OAS_prob.add_constraint('wing_perf.failure', upper=0.) OAS_prob.add_constraint('wing_perf.thickness_intersects', upper=0.) OAS_prob.add_desvar('tail.twist_cp', lower=-15., upper=15.) OAS_prob.add_desvar('tail.thickness_cp', lower=0.01, upper=0.5, scaler=1e2) OAS_prob.add_constraint('tail_perf.failure', upper=0.) OAS_prob.add_constraint('tail_perf.thickness_intersects', upper=0.) OAS_prob.add_desvar('alpha', lower=-10., upper=10.) OAS_prob.add_constraint('L_equals_W', equals=0.) OAS_prob.add_objective('fuelburn', scaler=1e-5) OAS_prob.setup() OAS_prob.run() prob = OAS_prob.prob self.assertAlmostEqual(prob['fuelburn'], 171166.87568490615, places=1) self.assertAlmostEqual(prob['wing_perf.failure'], 0, places=5)
'num_twist_cp': 2, 'num_thickness_cp': 2 } # Add the specified wing surface to the problem OAS_prob.add_surface(surf_dict) # Single lifting surface if not sys.argv[1].endswith('m'): # Setup problem and add design variables, constraint, and objective OAS_prob.add_desvar('wing.twist_cp', lower=-10., upper=15.) OAS_prob.add_desvar('wing.sweep', lower=10., upper=30.) OAS_prob.add_desvar('wing.dihedral', lower=-10., upper=20.) OAS_prob.add_desvar('wing.taper', lower=.5, upper=2.) OAS_prob.add_constraint('wing_perf.CL', equals=0.5) OAS_prob.add_objective('wing_perf.CD', scaler=1e4) OAS_prob.setup() # Multiple lifting surfaces else: # Add additional lifting surface OAS_prob.add_surface({ 'name': 'tail', 'span': 3., 'num_y': 7, 'span_cos_spacing': .5, 'offset': np.array([5., 0., .1]), 'symmetry': True })
# Create a dictionary to store options about the surface surf_dict = {'num_y' : 7, 'num_x' : 2, 'wing_type' : 'CRM', 'CD0' : 0.015, 'symmetry' : True, 'num_twist_cp' : 2, 'num_thickness_cp' : 2} # Add the specified wing surface to the problem OAS_prob.add_surface(surf_dict) # Add design variables, constraint, and objective on the problem OAS_prob.add_desvar('alpha', lower=-10., upper=10.) OAS_prob.add_constraint('eq_con', equals=0.) OAS_prob.add_objective('fuelburn', scaler=1e-5) # Single lifting surface if not sys.argv[1].endswith('m'): # Setup problem and add design variables, constraint, and objective OAS_prob.add_desvar('wing.twist_cp', lower=-15., upper=15.) OAS_prob.add_desvar('wing.thickness_cp', lower=0.01, upper=0.5, scaler=1e2) OAS_prob.add_constraint('wing_perf.failure', upper=0.) OAS_prob.add_constraint('wing_perf.thickness_intersects', upper=0.) OAS_prob.setup() # Multiple lifting surfaces else:
loads = np.zeros(((num_y+1)//2, 6)) loads[:, 1] = 1e5 # Instantiate problem and add default surface OAS_prob = OASProblem(prob_dict) OAS_prob.add_surface({'name' : 'wing', 'num_y' : 11, 'symmetry' : True, 'loads' : loads}) # Single lifting surface if not sys.argv[1].endswith('m'): # Setup problem and add design variables, constraint, and objective OAS_prob.add_desvar('wing.thickness_cp', lower=0.001, upper=0.25, scaler=1e2) OAS_prob.add_constraint('wing.thickness_intersects', upper=0.) OAS_prob.add_constraint('wing.failure', upper=0.) OAS_prob.add_objective('wing.structural_weight', scaler=1e-3) OAS_prob.setup() # Multiple lifting surfaces else: # Add additional lifting surface OAS_prob.add_surface({'name' : 'tail', 'span' : 3., 'offset' : np.array([10., 0., 0.])}) OAS_prob.add_desvar('wing.thickness_cp', lower=0.001, upper=0.25, scaler=1e2) OAS_prob.add_constraint('wing.thickness_intersects', upper=0.) OAS_prob.add_constraint('wing.failure', upper=0.)
else: # perform optimization prob_dict.update({'optimize': True}) # Instantiate problem and add default surface OAS_prob = OASProblem(prob_dict) OAS_prob.add_surface({'name': 'wing', 'num_y': 11, 'symmetry': True}) # Single lifting surface if not sys.argv[1].endswith('m'): # Setup problem and add design variables, constraint, and objective OAS_prob.add_desvar('wing.thickness_cp', lower=0.001, upper=0.25, scaler=1e2) OAS_prob.add_constraint('wing.thickness_intersects', upper=0.) OAS_prob.add_constraint('wing.failure', upper=0.) OAS_prob.add_objective('wing.structural_weight', scaler=1e-3) OAS_prob.setup() # Multiple lifting surfaces else: # Add additional lifting surface OAS_prob.add_surface({ 'name': 'tail', 'span': 3., 'offset': np.array([10., 0., 0.]) }) OAS_prob.add_desvar('wing.thickness_cp',
# Create a dictionary to store options about the surface surf_dict = {'num_y' : 7, 'num_x' : 2, 'wing_type' : 'CRM', 'CD0' : 0.015, 'symmetry' : True, 'num_twist_cp' : 2, 'num_thickness_cp' : 2} # Add the specified wing surface to the problem OAS_prob.add_surface(surf_dict) # Add design variables, constraint, and objective on the problem OAS_prob.add_desvar('alpha', lower=-10., upper=10.) OAS_prob.add_constraint('L_equals_W', equals=0.) OAS_prob.add_objective('fuelburn', scaler=1e-5) # Single lifting surface if not sys.argv[1].endswith('m'): # Setup problem and add design variables, constraint, and objective OAS_prob.add_desvar('wing.twist_cp', lower=-15., upper=15.) OAS_prob.add_desvar('wing.thickness_cp', lower=0.01, upper=0.5, scaler=1e2) OAS_prob.add_constraint('wing_perf.failure', upper=0.) OAS_prob.add_constraint('wing_perf.thickness_intersects', upper=0.) OAS_prob.setup() # Multiple lifting surfaces else:
'symmetry' : True, 'num_twist_cp' : 2, 'num_thickness_cp' : 2} # Add the specified wing surface to the problem OAS_prob.add_surface(surf_dict) # Single lifting surface if not sys.argv[1].endswith('m'): # Setup problem and add design variables, constraint, and objective OAS_prob.add_desvar('wing.twist_cp', lower=-10., upper=15.) OAS_prob.add_desvar('wing.sweep', lower=10., upper=30.) OAS_prob.add_desvar('wing.dihedral', lower=-10., upper=20.) OAS_prob.add_desvar('wing.taper', lower=.5, upper=2.) OAS_prob.add_constraint('wing_perf.CL', equals=0.5) OAS_prob.add_objective('wing_perf.CD', scaler=1e4) OAS_prob.setup() # Multiple lifting surfaces else: # Add additional lifting surface OAS_prob.add_surface({'name' : 'tail', 'span' : 3., 'num_y' : 7, 'span_cos_spacing' : .5, 'offset' : np.array([5., 0., .1]), 'symmetry' : True}) # Set up wing variables
} # Add the specified wing surface to the problem OAS_prob.add_surface(surf_dict) if prob_type == 'aero': # Setup problem and add design variables, constraint, and objective # OAS_prob.add_desvar('alpha', lower=-10., upper=15.) OAS_prob.add_desvar('wing.twist_cp', lower=-10., upper=15.) # OAS_prob.add_desvar('wing.chord_cp', lower=0.5, upper=3.) # OAS_prob.add_desvar('wing.xshear_cp', lower=-10., upper=15.) # OAS_prob.add_desvar('wing.sweep', lower=-60., upper=60.) # OAS_prob.add_desvar('wing.taper', lower=.5, upper=2.) OAS_prob.add_constraint('wing_perf.CL', equals=0.6032) # OAS_prob.add_constraint('CM', equals=0.) OAS_prob.add_objective('wing_perf.CD', scaler=1e3) else: # Add design variables, constraint, and objective on the problem # OAS_prob.add_desvar('alpha', lower=-10., upper=10.) OAS_prob.add_constraint('L_equals_W', equals=0.) OAS_prob.add_objective('fuelburn', scaler=0.1) # Setup problem and add design variables, constraint, and objective OAS_prob.add_desvar('wing.twist_cp', lower=-15., upper=15.) OAS_prob.add_desvar('wing.thickness_cp', lower=0.0001, upper=0.5,