def main():

    # new units style
    a = 4 * Units.mm # convert into base units
    b = a / Units.mm # convert out of base units

    engine = Data()
    wing = Data()
    aircraft = Data()
    fuselage = Data()
    horizontal = Data()
    vertical = Data()

    # Parameters Required
    aircraft.Nult      = 1.5 * 2.5                       # Ultimate load
    aircraft.TOW       = 52300.  * Units.kilograms # Maximum takeoff weight in kilograms
    aircraft.zfw       = 42600. * Units.kilograms # Maximum zero fuel weight in kilograms
    aircraft.Nlim      = 2.5                       # Limit Load
    aircraft.num_eng   = 2.                        # Number of engines on the aircraft
    aircraft.num_pax   = 110.                      # Number of passengers
    aircraft.wt_cargo  = 0.  * Units.kilogram  # Mass of cargo
    aircraft.num_seats = 110.                      # Number of seats on aircraft
    aircraft.ctrl      = "partially powered"       # Specify fully powered, partially powered or anything else is fully aerodynamic
    aircraft.ac        = "medium-range"              # Specify what type of aircraft you have
    aircraft.w2h       = 16.     * Units.meters    # Length from the mean aerodynamic center of wing to mean aerodynamic center of the horizontal tail

    wing.gross_area    = 92.    * Units.meter**2  # Wing gross area in square meters
    wing.span          = 27.8     * Units.meter     # Span in meters
    wing.taper         = 0.28                       # Taper ratio
    wing.t_c           = 0.105                      # Thickness-to-chord ratio
    wing.sweep         = 23.5     * Units.deg       # sweep angle in degrees
    wing.c_r           = 5.4     * Units.meter     # Wing exposed root chord length
    wing.mac           = 12.     * Units.ft    # Length of the mean aerodynamic chord of the wing

    fuselage.area      = 320.      * Units.meter**2  # Fuselage wetted area 
    fuselage.diff_p    = 8.5     * Units.force_pound / Units.inches**2    # Maximum differential pressure
    fuselage.width     = 3.      * Units.meter     # Width of the fuselage
    fuselage.height    = 3.35    * Units.meter     # Height of the fuselage
    fuselage.length    = 36.24     * Units.meter     # Length of the fuselage

    engine.thrust_sls  = 18500.   * Units.force_pound    # Define Thrust in Newtons

    horizontal.area    = 26.     * Units.meters**2 # Area of the horizontal tail
    horizontal.span    = 12.08     * Units.meters    # Span of the horizontal tail
    horizontal.sweep   = 34.5     * Units.deg       # Sweep of the horizontal tail
    horizontal.mac     = 2.4      * Units.meters    # Length of the mean aerodynamic chord of the horizontal tail
    horizontal.t_c     = 0.11                      # Thickness-to-chord ratio of the horizontal tail
    horizontal.exposed = 0.9                         # Fraction of horizontal tail area exposed

    vertical.area      = 16.     * Units.meters**2 # Area of the vertical tail
    vertical.span      = 5.3     * Units.meters    # Span of the vertical tail
    vertical.t_c       = 0.12                      # Thickness-to-chord ratio of the vertical tail
    vertical.sweep     = 35.     * Units.deg       # Sweep of the vertical tail
    vertical.t_tail    = "no"                      # Set to "yes" for a T-tail

    aircraft.weight = Tube_Wing.empty(engine,wing,aircraft,fuselage,horizontal,vertical)

    outputWeight(aircraft,'weight_EMB190.dat')
Example #2
0
def main():
    #Parameters Required
        #Using values for a Boeing 747-200
    vehicle = SUAVE.Vehicle()
    wing = SUAVE.Components.Wings.Wing()
    wing.tag = 'main_wing'
    wing.areas.reference           = 5500.0 * Units.feet**2
    wing.spans.projected           = 196.0  * Units.feet
    wing.sweep       = 42.0   * Units.deg # Leading edge
    wing.taper          = 14.7/54.5
    wing.aspect_ratio   = wing.spans.projected**2/wing.areas.reference
    wing.symmetric      = True
    wing.origin           = np.array([0.0,0,3.6]) * Units.feet  
    
    reference               = SUAVE.Core.Container()
    vehicle.reference_area   = wing.areas.reference
    vehicle.append_component(wing)
    
    lifting_surfaces    = []
    lifting_surfaces.append(wing)
    
    wing          = SUAVE.Components.Wings.Wing()
    wing.tag = 'vertical_stabilizer'
    vertical = Data()
    vertical.span         = 32.4   * Units.feet
    vertical.root_chord   = 38.7   * Units.feet
    vertical.tip_chord    = 13.4   * Units.feet
    vertical.sweep     = 50.0   * Units.deg
    vertical.x_root_LE1   = 180.0  * Units.feet
    vertical.symmetric    = False
    dz_centerline         = 13.3   * Units.feet
    ref_vertical          = extend_to_ref_area(vertical,dz_centerline)    
    wing.areas.reference     = ref_vertical.ref_area
    wing.spans.projected     = ref_vertical.ref_span
    wing.sweep = 50.0   * Units.deg # leading edge
    wing.taper    = vertical.tip_chord/ref_vertical.ref_root_chord
    wing.aspect_ratio = ref_vertical.ref_aspect_ratio
    wing.origin     = np.array([vertical.x_root_LE1 + ref_vertical.root_LE_change,0.,0.]) * Units.feet
    wing.effective_aspect_ratio = 2.2
    wing.symmetric= True
    wing.aerodynamic_center = np.array([trapezoid_ac_x(wing),0.0,0.0])
    Mach = np.array([0.198])
    wing.CL_alpha = datcom(wing,Mach)   
    vehicle.append_component(wing)
    lifting_surfaces.append(wing)
    
    fuselage = SUAVE.Components.Fuselages.Fuselage()
    fuselage.tag = 'fuselage'
    fuselage.areas.side_projected = 4696.16 * Units.feet**2
    fuselage.lengths.total = 229.7 * Units.feet
    fuselage.heights.maximum = 26.9 * Units.feet
    fuselage.width = 20.9    * Units.feet
    fuselage.heights.at_quarter_length = 26   * Units.feet
    fuselage.heights.at_three_quarters_length = 19.7 * Units.feet
    fuselage.heights.at_wing_root_quarter_chord = 15.8 * Units.feet
    vehicle.append_component(fuselage)
    
    configuration = Data()
    configuration.mass_properties = Data()
    configuration.mass_properties.center_of_gravity = Data()
    configuration.mass_properties.center_of_gravity = np.array([112.0,0,0]) * Units.feet    
    
    segment            = SUAVE.Analyses.Mission.Segments.Base_Segment()
    segment.freestream = Data()
    segment.freestream.mach_number          = 0.198
    segment.atmosphere = SUAVE.Attributes.Atmospheres.Earth.US_Standard_1976()
    altitude           = 0.0 * Units.feet
    segment.a          = segment.atmosphere.compute_values(altitude / Units.km, type="a")
    segment.freestream.density        = segment.atmosphere.compute_values(altitude / Units.km, type="rho")
    segment.freestream.dynamic_viscosity        = segment.atmosphere.compute_values(altitude / Units.km, type="mew")
    segment.freestream.velocity      = segment.freestream.mach_number * segment.a    
    
    #Method Test   
    cn_b = taw_cnbeta(vehicle,segment,configuration)
    expected = -0.35 # Should be 0.184
    error = Data()
    error.cn_b_747 = (cn_b-expected)/expected  
    
    #Parameters Required
    #Using values for a Beechcraft Model 99
    #MODEL DOES NOT ACCOUNT FOR DESTABILIZING EFFECTS OF PROPELLERS!
    """wing               = SUAVE.Components.Wings.Wing()
    wing.area          = 280.0 * Units.feet**2
    wing.span          = 46.0  * Units.feet
    wing.sweep_le      = 3.0   * Units.deg
    wing.z_position    = 2.2   * Units.feet
    wing.taper         = 0.46
    wing.aspect_ratio  = wing.span**2/wing.area
    wing.symmetric     = True
    
    fuselage           = SUAVE.Components.Fuselages.Fuselage()
    fuselage.side_area = 185.36 * Units.feet**2
    fuselage.length    = 44.0   * Units.feet
    fuselage.h_max     = 6.0    * Units.feet
    fuselage.w_max     = 5.4    * Units.feet
    fuselage.height_at_vroot_quarter_chord   = 2.9 * Units.feet
    fuselage.height_at_quarter_length        = 4.8 * Units.feet
    fuselage.height_at_three_quarters_length = 4.3 * Units.feet
    
    nacelle           = SUAVE.Components.Fuselages.Fuselage()
    nacelle.side_area = 34.45 * Units.feet**2
    nacelle.x_front   = 7.33  * Units.feet
    nacelle.length    = 14.13 * Units.feet
    nacelle.h_max     = 3.68  * Units.feet
    nacelle.w_max     = 2.39  * Units.feet
    nacelle.height_at_quarter_length        = 3.08 * Units.feet
    nacelle.height_at_three_quarters_length = 2.12 * Units.feet
    
    other_bodies      = [nacelle,nacelle]
    
    vertical              = SUAVE.Components.Wings.Wing()
    vertical.span         = 6.6  * Units.feet
    vertical.root_chord   = 8.2  * Units.feet
    vertical.tip_chord    = 3.6  * Units.feet
    vertical.sweep_le     = 47.0 * Units.deg
    vertical.x_root_LE1   = 34.8 * Units.feet
    vertical.symmetric    = False
    dz_centerline         = 2.0  * Units.feet
    ref_vertical          = extend_to_ref_area(vertical,dz_centerline)
    vertical.span         = ref_vertical.ref_span
    vertical.area         = ref_vertical.ref_area
    vertical.aspect_ratio = ref_vertical.ref_aspect_ratio
    vertical.x_root_LE    = vertical.x_root_LE1 + ref_vertical.root_LE_change
    vertical.taper        = vertical.tip_chord/ref_vertical.ref_root_chord
    vertical.effective_aspect_ratio = 1.57
    vertical.x_ac_LE      = trapezoid_ac_x(vertical)
    
    aircraft              = SUAVE.Vehicle()
    aircraft.wing         = wing
    aircraft.fuselage     = fuselage
    aircraft.other_bodies = other_bodies
    aircraft.vertical     = vertical
    aircraft.Mass_Props.pos_cg[0] = 17.2 * Units.feet
    
    segment            = SUAVE.Analyses.Mission.Segments.Base_Segment()
    segment.M          = 0.152
    segment.atmosphere = SUAVE.Attributes.Atmospheres.Earth.US_Standard_1976()
    altitude           = 0.0 * Units.feet
    segment.a          = segment.atmosphere.compute_values(altitude / Units.km, type="a")
    segment.rho        = segment.atmosphere.compute_values(altitude / Units.km, type="rho")
    segment.mew        = segment.atmosphere.compute_values(altitude / Units.km, type="mew")
    segment.v_inf      = segment.M * segment.a
    
    #Method Test
    expected = 0.12
    print 'Beech 99 at M = {0} and h = {1} meters'.format(segment.M, altitude)
    cn_b = taw_cnbeta(aircraft,segment)
    
    print 'Cn_beta        = {0:.4f}'.format(cn_b)
    print 'Expected value = {}'.format(expected)
    print 'Percent Error  = {0:.2f}%'.format(100.0*(cn_b-expected)/expected)
    print ' '  
    
    
    #Parameters Required
    #Using values for an SIAI Marchetti S-211
    wing               = SUAVE.Components.Wings.Wing()
    wing.area          = 136.0 * Units.feet**2
    wing.span          = 26.3  * Units.feet
    wing.sweep_le      = 19.5  * Units.deg
    wing.z_position    = -1.1  * Units.feet
    wing.taper         = 3.1/7.03
    wing.aspect_ratio  = wing.span**2/wing.area
    
    fuselage           = SUAVE.Components.Fuselages.Fuselage()
    fuselage.side_area = 116.009 * Units.feet**2
    fuselage.length    = 30.9    * Units.feet
    fuselage.h_max     = 5.1     * Units.feet
    fuselage.w_max     = 5.9     * Units.feet
    fuselage.height_at_vroot_quarter_chord   = 4.1 * Units.feet
    fuselage.height_at_quarter_length        = 4.5 * Units.feet
    fuselage.height_at_three_quarters_length = 4.3 * Units.feet
    
    other_bodies       = []
    
    vertical              = SUAVE.Components.Wings.Wing()
    vertical.span         = 5.8   * Units.feet
    vertical.root_chord   = 5.7   * Units.feet
    vertical.tip_chord    = 2.0   * Units.feet
    vertical.sweep_le     = 40.2  * Units.deg
    vertical.x_root_LE1   = 22.62 * Units.feet
    vertical.symmetric    = False
    dz_centerline         = 2.9   * Units.feet
    ref_vertical          = extend_to_ref_area(vertical,dz_centerline)
    vertical.span         = ref_vertical.ref_span
    vertical.area         = ref_vertical.ref_area
    vertical.aspect_ratio = ref_vertical.ref_aspect_ratio
    vertical.x_root_LE    = vertical.x_root_LE1 + ref_vertical.root_LE_change
    vertical.taper        = vertical.tip_chord/ref_vertical.ref_root_chord
    vertical.effective_aspect_ratio = 2.65
    vertical.x_ac_LE      = trapezoid_ac_x(vertical)
    
    aircraft              = SUAVE.Vehicle()
    aircraft.wing         = wing
    aircraft.fuselage     = fuselage
    aircraft.other_bodies = other_bodies
    aircraft.vertical     = vertical
    aircraft.Mass_Props.pos_cg[0] = 16.6 * Units.feet
    
    segment            = SUAVE.Analyses.Mission.Segments.Base_Segment()
    segment.M          = 0.111
    segment.atmosphere = SUAVE.Attributes.Atmospheres.Earth.US_Standard_1976()
    altitude           = 0.0 * Units.feet
    segment.a          = segment.atmosphere.compute_values(altitude / Units.km, type="a")
    segment.rho        = segment.atmosphere.compute_values(altitude / Units.km, type="rho")
    segment.mew        = segment.atmosphere.compute_values(altitude / Units.km, type="mew")
    segment.v_inf      = segment.M * segment.a
    
    #Method Test
    print 'SIAI Marchetti S-211 at M = {0} and h = {1} meters'.format(segment.M, altitude)
    
    cn_b = taw_cnbeta(aircraft,segment)
    
    expected = 0.160
    print 'Cn_beta        = {0:.4f}'.format(cn_b)
    print 'Expected value = {}'.format(expected)
    print 'Percent Error  = {0:.2f}%'.format(100.0*(cn_b-expected)/expected)
    print ' '"""
    
    for k,v in error.items():
        assert(np.abs(v)<0.1)
        
    return