def setup(self): surface = self.options['surface'] promotes = [] if surface['struct_weight_relief']: promotes = promotes + list( set(['nodes', 'element_weights', 'load_factor'])) if surface['distributed_fuel_weight']: promotes = promotes + list(set(['nodes', 'load_factor'])) self.add_subsystem('struct_states', SpatialBeamStates(surface=surface), promotes_inputs=['K', 'forces', 'loads'] + promotes, promotes_outputs=['disp']) self.add_subsystem('def_mesh', DisplacementTransferGroup(surface=surface), promotes_inputs=['nodes', 'mesh', 'disp'], promotes_outputs=['def_mesh']) self.add_subsystem('aero_geom', VLMGeometry(surface=surface), promotes_inputs=['def_mesh'], promotes_outputs=[ 'b_pts', 'widths', 'cos_sweep', 'lengths', 'chords', 'normals', 'S_ref' ]) self.linear_solver = LinearRunOnce()
def setup(self): surface = self.options['surface'] 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'])) if 'n_point_masses' in surface.keys(): promotes = promotes + list( set([ 'point_mass_locations', 'point_masses', 'nodes', 'load_factor', 'engine_thrusts' ])) self.add_subsystem( 'struct_states', SpatialBeamStates(surface=surface), promotes_inputs=['local_stiff_transformed', 'forces', 'loads'] + promotes, promotes_outputs=['disp']) self.add_subsystem('def_mesh', DisplacementTransferGroup(surface=surface), promotes_inputs=['nodes', 'mesh', 'disp'], promotes_outputs=['def_mesh']) normals_name = 'undeflected_normals' self.add_subsystem('aero_geom', VLMGeometry(surface=surface), promotes_inputs=['def_mesh'], promotes_outputs=[ 'b_pts', 'widths', 'cos_sweep', 'lengths', 'chords', ('normals', normals_name), 'S_ref' ]) # Add control surfaces if 'control_surfaces' in surface: for ctrl_surf in surface['control_surfaces']: #TODO: fixed name only works with one control surface deflected_normals_name = "normals" #"{}_normals".format(ctrl_surf['name']) self.add_subsystem( ctrl_surf['name'], ControlSurface(surface=surface, panels=ctrl_surf['panels']), promotes_inputs=[('normals', normals_name), 'delta_aileron' ], #,f"delta_{control_surf['name']}"], promotes_outputs=[('deflected_normals', deflected_normals_name)]) #iterate through names normals_name = deflected_normals_name else: pass #No control surface to add #self.connect(normals_name,'normals') self.linear_solver = LinearRunOnce()
def setup(self): surface = self.options['surface'] 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'])) if 'n_point_masses' in surface.keys(): promotes = promotes + list( set([ 'point_mass_locations', 'point_masses', 'nodes', 'load_factor', 'engine_thrusts' ])) self.add_subsystem( 'struct_states', SpatialBeamStates(surface=surface), promotes_inputs=['local_stiff_transformed', 'forces', 'loads'] + promotes, promotes_outputs=['disp']) self.add_subsystem('def_mesh', DisplacementTransferGroup(surface=surface), promotes_inputs=['nodes', 'mesh', 'disp'], promotes_outputs=['def_mesh']) self.add_subsystem('aero_geom', VLMGeometry(surface=surface), promotes_inputs=['def_mesh'], promotes_outputs=[ 'b_pts', 'widths', 'cos_sweep', 'lengths', 'chords', 'S_ref' ]) # Add control surfaces if 'control_surfaces' in surface: self.add_subsystem( 'control_surfaces', ControlSurfacesGroup( control_surfaces=surface['control_surfaces'], mesh=surface['mesh']), promotes_inputs=['def_mesh']) self.linear_solver = om.LinearRunOnce()