コード例 #1
0
    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()
コード例 #2
0
    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()
コード例 #3
0
    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()