def setup(self): surface = self.options['surface'] self.add_subsystem( 'aero_funcs', VLMFunctionals(surface=surface), promotes_inputs=[ 'v', 'alpha', 'Mach_number', 're', 'rho', 'widths', 'cos_sweep', 'lengths', 'S_ref', 'sec_forces', 't_over_c' ], promotes_outputs=['CDv', 'L', 'D', 'CL1', 'CDi', 'CD', 'CL']) if surface['fem_model_type'] == 'tube': self.add_subsystem( 'struct_funcs', SpatialBeamFunctionals(surface=surface), promotes_inputs=['thickness', 'radius', 'nodes', 'disp'], promotes_outputs=[ 'thickness_intersects', 'vonmises', 'failure' ]) elif surface['fem_model_type'] == 'wingbox': self.add_subsystem('struct_funcs', SpatialBeamFunctionals(surface=surface), promotes_inputs=[ 'Qz', 'Iz', 'J', 'A_enc', 'spar_thickness', 'skin_thickness', 'htop', 'hbottom', 'hfront', 'hrear', 'nodes', 'disp' ], promotes_outputs=['vonmises', 'failure']) else: raise NameError( 'Please select a valid `fem_model_type` from either `tube` or `wingbox`.' )
def setup(self): surface = self.options['surface'] tube_promotes = [] if 'thickness_cp' in surface.keys(): tube_promotes.append('thickness_cp') self.add_subsystem('geometry', Geometry(surface=surface), promotes_inputs=[], promotes_outputs=['mesh']) if surface['fem_model_type'] == 'tube': self.add_subsystem('tube_group', TubeGroup(surface=surface), promotes_inputs=['mesh'], promotes_outputs=['A', 'Iy', 'Iz', 'J', 'radius', 'thickness'] + tube_promotes) elif surface['fem_model_type'] == 'wingbox': self.add_subsystem('wingbox_group', WingboxGroup(surface=surface), promotes_inputs=['mesh'], promotes_outputs=['A', 'Iy', 'Iz', 'J', 'radius', 'thickness'] + tube_promotes) else: raise NameError('Please select a valid `fem_model_type` from either `tube` or `wingbox`.') self.add_subsystem('struct_setup', SpatialBeamSetup(surface=surface), promotes_inputs=['mesh', 'A', 'Iy', 'Iz', 'J', 'load_factor'], promotes_outputs=['nodes', 'K', 'structural_weight', 'cg_location', 'element_weights']) self.add_subsystem('struct_states', SpatialBeamStates(surface=surface), promotes_inputs=['K', 'forces', 'loads', 'element_weights'], promotes_outputs=['disp']) self.add_subsystem('struct_funcs', SpatialBeamFunctionals(surface=surface), promotes_inputs=['thickness', 'radius', 'nodes', 'disp'], promotes_outputs=['thickness_intersects', 'vonmises', 'failure'])
def setup(self): surface = self.options['surface'] tube_promotes = [] tube_inputs = [] if 'thickness_cp' in surface.keys(): tube_promotes.append('thickness_cp') if 'radius_cp' not in surface.keys(): tube_inputs = ['mesh', 't_over_c'] self.add_subsystem('geometry', Geometry(surface=surface), promotes_inputs=[], promotes_outputs=['mesh', 't_over_c']) if surface['fem_model_type'] == 'tube': self.add_subsystem('tube_group', TubeGroup(surface=surface), promotes_inputs=tube_inputs, promotes_outputs=['A', 'Iy', 'Iz', 'J', 'radius', 'thickness'] + tube_promotes) elif surface['fem_model_type'] == 'wingbox': wingbox_promotes = [] if 'skin_thickness_cp' in surface.keys() and 'spar_thickness_cp' in surface.keys(): wingbox_promotes.append('skin_thickness_cp') wingbox_promotes.append('spar_thickness_cp') wingbox_promotes.append('skin_thickness') wingbox_promotes.append('spar_thickness') elif 'skin_thickness_cp' in surface.keys() or 'spar_thickness_cp' in surface.keys(): raise NameError('Please have both skin and spar thickness as design variables, not one or the other.') self.add_subsystem('wingbox_group', WingboxGroup(surface=surface), promotes_inputs=['mesh', 't_over_c'], promotes_outputs=['A', 'Iy', 'Iz', 'J', 'Qz', 'A_enc', 'A_int', 'htop', 'hbottom', 'hfront', 'hrear'] + wingbox_promotes) else: raise NameError('Please select a valid `fem_model_type` from either `tube` or `wingbox`.') if surface['fem_model_type'] == 'tube': self.add_subsystem('struct_setup', SpatialBeamSetup(surface=surface), promotes_inputs=['mesh', 'A', 'Iy', 'Iz', 'J'], promotes_outputs=['nodes', 'local_stiff_transformed', 'structural_mass', 'cg_location', 'element_mass']) else: self.add_subsystem('struct_setup', SpatialBeamSetup(surface=surface), promotes_inputs=['mesh', 'A', 'Iy', 'Iz', 'J', 'A_int'], promotes_outputs=['nodes', 'local_stiff_transformed', 'structural_mass', 'cg_location', 'element_mass', ]) promotes = [] if surface['struct_weight_relief']: promotes = promotes + list(set(['nodes', 'element_mass', 'load_factor'])) if surface['distributed_fuel_weight']: promotes = promotes + list(set(['nodes', 'load_factor'])) self.add_subsystem('struct_states', SpatialBeamStates(surface=surface), promotes_inputs=['local_stiff_transformed', 'forces', 'loads'] + promotes, promotes_outputs=['disp']) if surface['fem_model_type'] == 'tube': self.add_subsystem('struct_funcs', SpatialBeamFunctionals(surface=surface), promotes_inputs=['thickness', 'radius', 'nodes', 'disp'], promotes_outputs=['thickness_intersects', 'vonmises', 'failure']) else: self.add_subsystem('struct_funcs', SpatialBeamFunctionals(surface=surface), promotes_inputs=['spar_thickness', 'disp','Qz', 'J', 'A_enc', 'htop', 'hbottom', 'hfront', 'hrear', 'nodes'], promotes_outputs=['vonmises', 'failure'])