Exemplo n.º 1
0
def main():
    #Parameters Required
    #Using values for a Boeing 747-200  
    vehicle = SUAVE.Vehicle()
    #print vehicle
    vehicle.mass_properties.max_zero_fuel=238780*Units.kg
    vehicle.mass_properties.max_takeoff  =785000.*Units.lbs
    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.chords.mean_aerodynamic   = 27.3 * Units.feet
    wing.chords.root               = 42.9 * Units.feet  #54.5ft
    wing.sweeps.quarter_chord      = 42.0   * Units.deg  # Leading edge
    wing.sweeps.leading_edge       = 42.0   * Units.deg  # Same as the quarter chord sweep (ignore why EMB)
    wing.taper          = 14.7/42.9  #14.7/54.5
    wing.aspect_ratio   = wing.spans.projected**2/wing.areas.reference
    wing.symmetric      = True
    wing.vertical       = False
    wing.origin         = np.array([58.6,0,0]) * Units.feet  
    wing.aerodynamic_center     = np.array([112.2*Units.feet,0.,0.])-wing.origin#16.16 * Units.meters,0.,0,])
    wing.dynamic_pressure_ratio = 1.0
    wing.ep_alpha               = 0.0
    
    span_location_mac                        =compute_span_location_from_chord_length(wing, wing.chords.mean_aerodynamic)
    mac_le_offset                            =.8*np.sin(wing.sweeps.leading_edge)*span_location_mac  #assume that 80% of the chord difference is from leading edge sweep
    wing.mass_properties.center_of_gravity[0]=.3*wing.chords.mean_aerodynamic+mac_le_offset
    
    
    Mach                         = np.array([0.198])
    conditions                   = Data()
    conditions.weights           = Data()
    conditions.lift_curve_slope  = datcom(wing,Mach)
    conditions.weights.total_mass=np.array([[vehicle.mass_properties.max_takeoff]]) 
   
    wing.CL_alpha                = conditions.lift_curve_slope
    vehicle.reference_area       = wing.areas.reference
    vehicle.append_component(wing)
    
    main_wing_CLa = wing.CL_alpha
    main_wing_ar  = wing.aspect_ratio
    
    wing                     = SUAVE.Components.Wings.Wing()
    wing.tag = 'horizontal_stabilizer'
    wing.areas.reference      = 1490.55* Units.feet**2
    wing.spans.projected      = 71.6   * Units.feet
    wing.sweeps.quarter_chord = 44.0   * Units.deg # leading edge
    wing.sweeps.leading_edge  = 44.0   * Units.deg # Same as the quarter chord sweep (ignore why EMB)
    wing.taper                = 7.5/32.6
    wing.aspect_ratio         = wing.spans.projected**2/wing.areas.reference
    wing.origin               = np.array([187.0,0,0])  * Units.feet
    wing.symmetric            = True
    wing.vertical             = False
    wing.dynamic_pressure_ratio = 0.95
    wing.ep_alpha             = 2.0*main_wing_CLa/np.pi/main_wing_ar    
    wing.aerodynamic_center   = [trapezoid_ac_x(wing), 0.0, 0.0]
    wing.CL_alpha             = datcom(wing,Mach)
    vehicle.append_component(wing)
    
    fuselage = SUAVE.Components.Fuselages.Fuselage()
    fuselage.tag = 'fuselage'
    fuselage.x_root_quarter_chord = 77.0 * Units.feet
    fuselage.lengths.total     = 229.7  * Units.feet
    fuselage.width      = 20.9   * Units.feet 
    vehicle.append_component(fuselage)
    vehicle.mass_properties.center_of_gravity=np.array([112.2,0,0]) * Units.feet  
    
    
    
 
    #configuration.mass_properties.zero_fuel_center_of_gravity=np.array([76.5,0,0])*Units.feet #just put a number here that got the expected value output; may want to change
    fuel                                                     =SUAVE.Components.Physical_Component()
    fuel.origin                                              =wing.origin
    fuel.mass_properties.center_of_gravity                   =wing.mass_properties.center_of_gravity
    fuel.mass_properties.mass                                =vehicle.mass_properties.max_takeoff-vehicle.mass_properties.max_zero_fuel
   
    
    #find zero_fuel_center_of_gravity
    cg                   =vehicle.mass_properties.center_of_gravity
    MTOW                 =vehicle.mass_properties.max_takeoff
    fuel_cg              =fuel.origin+fuel.mass_properties.center_of_gravity
    fuel_mass            =fuel.mass_properties.mass
    
    
    sum_moments_less_fuel=(cg*MTOW-fuel_cg*fuel_mass)
    
    
    #now define configuration for calculation
    configuration = Data()
    configuration.mass_properties                            = Data()
    configuration.mass_properties.center_of_gravity          = vehicle.mass_properties.center_of_gravity
    configuration.mass_properties.max_zero_fuel              =vehicle.mass_properties.max_zero_fuel
    configuration.fuel                                       =fuel
    
    configuration.mass_properties.zero_fuel_center_of_gravity=sum_moments_less_fuel/vehicle.mass_properties.max_zero_fuel
  
    
    #print configuration
    cm_a = taw_cmalpha(vehicle,Mach,conditions,configuration)
    expected =-1.56222373 #Should be -1.45
    error = Data()
    error.cm_a_747 = (cm_a - expected)/expected
    
    
    #Parameters Required
    #Using values for a Beech 99 
    
    vehicle = SUAVE.Vehicle()
    vehicle.mass_properties.max_takeoff  =4727*Units.kg #from Wikipedia
    vehicle.mass_properties.empty        =2515*Units.kg
    vehicle.mass_properties.max_zero_fuel=vehicle.mass_properties.max_takeoff-vehicle.mass_properties.empty+15.*225*Units.lbs #15 passenger ac
    
    wing = SUAVE.Components.Wings.Wing()
    wing.tag = 'main_wing'
    wing.areas.reference           = 280.0 * Units.feet**2
    wing.spans.projected           = 46.0  * Units.feet
    wing.chords.mean_aerodynamic   = 6.5 * Units.feet
    wing.chords.root               = 7.9 * Units.feet
    wing.sweeps.leading_edge       = 4.0   * Units.deg # Same as the quarter chord sweep (ignore why EMB)
    wing.sweeps.quarter_chord      = 4.0   * Units.deg # Leading edge
    wing.taper                     = 0.47
    wing.aspect_ratio              = wing.spans.projected**2/wing.areas.reference
    wing.symmetric                 = True
    wing.vertical                  = False
    wing.origin                    = np.array([15.,0,0]) * Units.feet  
    wing.aerodynamic_center        = np.array([trapezoid_ac_x(wing), 0. , 0. ])
    wing.dynamic_pressure_ratio    = 1.0
    wing.ep_alpha                  = 0.0
    span_location_mac                        =compute_span_location_from_chord_length(wing, wing.chords.mean_aerodynamic)
    mac_le_offset                            =.8*np.sin(wing.sweeps.leading_edge)*span_location_mac  #assume that 80% of the chord difference is from leading edge sweep
    wing.mass_properties.center_of_gravity[0]=.3*wing.chords.mean_aerodynamic+mac_le_offset
    
    
    
    
    
    Mach = np.array([0.152])
    reference = SUAVE.Core.Container()
    conditions = Data()
    conditions.lift_curve_slope = datcom(wing,Mach)
    
    conditions.weights=Data()
    conditions.weights.total_mass=np.array([[vehicle.mass_properties.max_takeoff]]) 
   
    wing.CL_alpha               = conditions.lift_curve_slope
    vehicle.reference_area      = wing.areas.reference
    vehicle.append_component(wing)
    
    main_wing_CLa = wing.CL_alpha
    main_wing_ar  = wing.aspect_ratio
    
    wing = SUAVE.Components.Wings.Wing()
    wing.tag                      = 'horizontal_stabilizer'
    wing.areas.reference          = 100.5 * Units.feet**2
    wing.spans.projected          = 22.5  * Units.feet
    wing.sweeps.leading_edge      = 21.0   * Units.deg # Same as the quarter chord sweep (ignore why EMB)
    wing.sweeps.quarter_chord     = 21.0   * Units.deg # leading edge
    wing.taper                    = 3.1/6.17
    wing.aspect_ratio             = wing.spans.projected**2/wing.areas.reference
    wing.origin                   = np.array([36.3,0,0])  * Units.feet
    wing.symmetric                = True
    wing.vertical                 = False
    wing.dynamic_pressure_ratio   = 0.95
    wing.ep_alpha                 = 2.0*main_wing_CLa/np.pi/main_wing_ar
    wing.aerodynamic_center       = np.array([trapezoid_ac_x(wing), 0.0, 0.0])
    wing.CL_alpha                 = datcom(wing,Mach)
    vehicle.append_component(wing)
    
    fuselage = SUAVE.Components.Fuselages.Fuselage()
    fuselage.tag                  = 'fuselage'
    fuselage.x_root_quarter_chord = 5.4 * Units.feet
    fuselage.lengths.total        = 44.0  * Units.feet
    fuselage.width                = 5.4   * Units.feet 
    vehicle.append_component(fuselage)
    
    vehicle.mass_properties.center_of_gravity = np.array([17.2,0,0]) * Units.feet   
    
    
    fuel.origin                                              =wing.origin
    fuel.mass_properties.center_of_gravity                   =wing.mass_properties.center_of_gravity
    fuel.mass_properties.mass                                =vehicle.mass_properties.max_takeoff-vehicle.mass_properties.max_zero_fuel
   
    
    
    #find zero_fuel_center_of_gravity
    cg                   =vehicle.mass_properties.center_of_gravity
    MTOW                 =vehicle.mass_properties.max_takeoff
    fuel_cg              =fuel.origin+fuel.mass_properties.center_of_gravity
    fuel_mass            =fuel.mass_properties.mass

    
    sum_moments_less_fuel=(cg*MTOW-fuel_cg*fuel_mass)
    
    
    #now define configuration for calculation
    configuration = Data()
    configuration.mass_properties                            = Data()
    configuration.mass_properties.center_of_gravity          = vehicle.mass_properties.center_of_gravity
    configuration.mass_properties.max_zero_fuel              = vehicle.mass_properties.max_zero_fuel
    configuration.fuel                                       =fuel
    
    configuration.mass_properties.zero_fuel_center_of_gravity=sum_moments_less_fuel/vehicle.mass_properties.max_zero_fuel
    
    
    #Method Test   
    #print configuration
    cm_a = taw_cmalpha(vehicle,Mach,conditions,configuration)
    expected = -2.48843437 #Should be -2.08
    error.cm_a_beech_99 = (cm_a - expected)/expected   
    
    
    #Parameters Required
    #Using values for an SIAI Marchetti S-211
    
    vehicle = SUAVE.Vehicle()
    vehicle.mass_properties.max_takeoff  =2750*Units.kg #from Wikipedia
    vehicle.mass_properties.empty        =1850*Units.kg
    vehicle.mass_properties.max_zero_fuel=vehicle.mass_properties.max_takeoff-vehicle.mass_properties.empty+2.*225*Units.lbs #2 passenger ac
    
    wing = SUAVE.Components.Wings.Wing()
    wing.tag = 'main_wing'
    wing.areas.reference           = 136.0 * Units.feet**2
    wing.spans.projected           = 26.3  * Units.feet
    wing.chords.mean_aerodynamic   = 5.4   * Units.feet
    wing.chords.root               = 7.03  * Units.feet
    wing.chords.tip                = 3.1   * Units.feet
    wing.sweeps.quarter_chord      = 19.5  * Units.deg # Leading edge
    wing.sweeps.leading_edge       = 19.5  * Units.deg # Same as the quarter chord sweep (ignore why EMB)
    wing.taper          = 3.1/7.03
    wing.aspect_ratio   = wing.spans.projected**2/wing.areas.reference
    wing.symmetric      = True
    wing.vertical       = False
    wing.origin         = np.array([13.5,0,0]) * Units.feet  
    wing.aerodynamic_center  = np.array([trapezoid_ac_x(wing),0.,0.])#16.6, 0. , 0. ]) * Units.feet - wing.origin
    wing.dynamic_pressure_ratio = 1.0
    wing.ep_alpha       = 0.0
    
    span_location_mac                        =compute_span_location_from_chord_length(wing, wing.chords.mean_aerodynamic)
    mac_le_offset                            =.8*np.sin(wing.sweeps.leading_edge)*span_location_mac  #assume that 80% of the chord difference is from leading edge sweep
    wing.mass_properties.center_of_gravity[0]=.3*wing.chords.mean_aerodynamic+mac_le_offset
    
       
    
    Mach = np.array([0.111])
    conditions = Data()
    conditions.lift_curve_slope = datcom(wing,Mach)
    conditions.weights=Data()
    conditions.weights.total_mass=np.array([[vehicle.mass_properties.max_takeoff]]) 
   
    
    
    
    wing.CL_alpha               = conditions.lift_curve_slope
    vehicle.reference_area      = wing.areas.reference
    vehicle.append_component(wing)
    
    main_wing_CLa = wing.CL_alpha
    main_wing_ar  = wing.aspect_ratio

    wing = SUAVE.Components.Wings.Wing()
    wing.tag                 = 'horizontal_stabilizer'
    wing.areas.reference     = 36.46 * Units.feet**2
    wing.spans.projected     = 13.3   * Units.feet
    wing.sweeps.quarter_chord= 18.5  * Units.deg  # leading edge
    wing.sweeps.leading_edge = 18.5  * Units.deg  # Same as the quarter chord sweep (ignore why EMB)
    wing.taper               = 1.6/3.88
    wing.aspect_ratio        = wing.spans.projected**2/wing.areas.reference
    wing.origin              = np.array([26.07,0.,0.]) * Units.feet
    wing.symmetric           = True
    wing.vertical            = False
    wing.dynamic_pressure_ratio = 0.9
    wing.ep_alpha            = 2.0*main_wing_CLa/np.pi/main_wing_ar
    wing.aerodynamic_center  = np.array([trapezoid_ac_x(wing), 0.0, 0.0])
    wing.CL_alpha            = datcom(wing,Mach)
    
    span_location_mac                        =compute_span_location_from_chord_length(wing, wing.chords.mean_aerodynamic)
    mac_le_offset                            =.8*np.sin(wing.sweeps.leading_edge)*span_location_mac  #assume that 80% of the chord difference is from leading edge sweep
    wing.mass_properties.center_of_gravity[0]=.3*wing.chords.mean_aerodynamic+mac_le_offset
    
    
    
    
    
    
    
    vehicle.append_component(wing)
    
    fuselage = SUAVE.Components.Fuselages.Fuselage()
    fuselage.tag = 'fuselage'
    fuselage.x_root_quarter_chord = 12.67 * Units.feet
    fuselage.lengths.total        = 30.9  * Units.feet
    fuselage.width                = ((2.94+5.9)/2)   * Units.feet 
    vehicle.append_component(fuselage)
    vehicle.mass_properties.center_of_gravity = np.array([16.6,0,0]) * Units.feet    
    
    
    
    
    fuel.origin                                              =wing.origin
    fuel.mass_properties.center_of_gravity                   =wing.mass_properties.center_of_gravity
    fuel.mass_properties.mass                                =vehicle.mass_properties.max_takeoff-vehicle.mass_properties.max_zero_fuel
   
    
    
    #find zero_fuel_center_of_gravity
    cg                   =vehicle.mass_properties.center_of_gravity
    MTOW                 =vehicle.mass_properties.max_takeoff
    fuel_cg              =fuel.origin+fuel.mass_properties.center_of_gravity
    fuel_mass            =fuel.mass_properties.mass

    sum_moments_less_fuel=(cg*MTOW-fuel_cg*fuel_mass)
    
    
    #now define configuration for calculation
    configuration = Data()
    configuration.mass_properties                            = Data()
    configuration.mass_properties.center_of_gravity          = vehicle.mass_properties.center_of_gravity
    configuration.mass_properties.max_zero_fuel              = vehicle.mass_properties.max_zero_fuel
    configuration.fuel                                       =fuel
    
    configuration.mass_properties.zero_fuel_center_of_gravity=sum_moments_less_fuel/vehicle.mass_properties.max_zero_fuel
    
    
    
    #Method Test   
    #print configuration
    cm_a = taw_cmalpha(vehicle,Mach,conditions,configuration)
   
    expected = -0.54071741 #Should be -0.6
    error.cm_a_SIAI = (cm_a - expected)/expected
    print error
    for k,v in error.items():
        assert(np.abs(v)<0.01)
        
    return
Exemplo n.º 2
0
def vehicle_setup():
    vehicle = SUAVE.Vehicle()
    vehicle.mass_properties.max_takeoff  = 4727*Units.kg #from Wikipedia
    vehicle.mass_properties.empty        = 2515*Units.kg
    vehicle.mass_properties.max_zero_fuel=vehicle.mass_properties.max_takeoff-vehicle.mass_properties.empty+15.*225*Units.lbs #15 passenger ac
    
    wing = SUAVE.Components.Wings.Wing()
    wing.tag = 'main_wing'
    wing.areas.reference           = 280.0 * Units.feet**2
    wing.spans.projected           = 46.0  * Units.feet
    wing.chords.mean_aerodynamic   = 6.5 * Units.feet
    wing.chords.root               = 7.9 * Units.feet
    wing.sweeps.leading_edge       = 4.0   * Units.deg # Same as the quarter chord sweep (ignore why EMB)
    wing.sweeps.quarter_chord      = 4.0   * Units.deg # Leading edge
    wing.taper                     = 0.47
    wing.aspect_ratio              = wing.spans.projected**2/wing.areas.reference
    wing.symmetric                 = True
    wing.vertical                  = False
    wing.origin                    = np.array([15.,0,0]) * Units.feet  
    wing.aerodynamic_center        = np.array([trapezoid_ac_x(wing), 0. , 0. ])
    wing.dynamic_pressure_ratio    = 1.0
    wing.ep_alpha                  = 0.0
    span_location_mac                        =compute_span_location_from_chord_length(wing, wing.chords.mean_aerodynamic)
    mac_le_offset                            =.8*np.sin(wing.sweeps.leading_edge)*span_location_mac  #assume that 80% of the chord difference is from leading edge sweep
    wing.mass_properties.center_of_gravity[0]=.3*wing.chords.mean_aerodynamic+mac_le_offset
    
    
    
    
    
    Mach = np.array([0.152])
    reference = SUAVE.Core.Container()
    conditions = Data()
    conditions.lift_curve_slope = datcom(wing,Mach)
    
    conditions.weights=Data()
    conditions.weights.total_mass=np.array([[vehicle.mass_properties.max_takeoff]]) 
   
    wing.CL_alpha               = conditions.lift_curve_slope
    vehicle.reference_area      = wing.areas.reference
    vehicle.append_component(wing)
    
    main_wing_CLa = wing.CL_alpha
    main_wing_ar  = wing.aspect_ratio
    
    wing = SUAVE.Components.Wings.Wing()
    wing.tag                      = 'horizontal_stabilizer'
    wing.areas.reference          = 100.5 * Units.feet**2
    wing.spans.projected          = 22.5  * Units.feet
    wing.sweeps.leading_edge      = 21.0   * Units.deg # Same as the quarter chord sweep (ignore why EMB)
    wing.sweeps.quarter_chord     = 21.0   * Units.deg # leading edge
    wing.taper                    = 3.1/6.17
    wing.aspect_ratio             = wing.spans.projected**2/wing.areas.reference
    wing.origin                   = np.array([36.3,0,0])  * Units.feet
    wing.symmetric                = True
    wing.vertical                 = False
    wing.dynamic_pressure_ratio   = 0.95
    wing.ep_alpha                 = 2.0*main_wing_CLa/np.pi/main_wing_ar
    wing.aerodynamic_center       = np.array([trapezoid_ac_x(wing), 0.0, 0.0])
    wing.CL_alpha                 = datcom(wing,Mach)
    vehicle.append_component(wing)
    
    fuselage = SUAVE.Components.Fuselages.Fuselage()
    fuselage.tag                  = 'fuselage'
    fuselage.x_root_quarter_chord = 5.4 * Units.feet
    fuselage.lengths.total        = 44.0  * Units.feet
    fuselage.width                = 5.4   * Units.feet 
    vehicle.append_component(fuselage)
    
    vehicle.mass_properties.center_of_gravity = np.array([17.2,0,0]) * Units.feet   
    
    fuel                                                     =SUAVE.Components.Physical_Component()
    fuel.origin                                              =wing.origin
    fuel.mass_properties.center_of_gravity                   =wing.mass_properties.center_of_gravity
    fuel.mass_properties.mass                                =vehicle.mass_properties.max_takeoff-vehicle.mass_properties.max_zero_fuel
   
    
    
    #find zero_fuel_center_of_gravity
    cg                   =vehicle.mass_properties.center_of_gravity
    MTOW                 =vehicle.mass_properties.max_takeoff
    fuel_cg              =fuel.origin+fuel.mass_properties.center_of_gravity
    fuel_mass            =fuel.mass_properties.mass

    
    sum_moments_less_fuel=(cg*MTOW-fuel_cg*fuel_mass)
    vehicle.fuel = fuel
    vehicle.mass_properties.zero_fuel_center_of_gravity = sum_moments_less_fuel/vehicle.mass_properties.max_zero_fuel
    return vehicle
Exemplo n.º 3
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.chords.root = 42.9 * Units.feet  #54.5
    wing.chords.tip = 14.7 * Units.feet
    wing.chords.mean_aerodynamic = 27.3 * Units.feet
    wing.taper = wing.chords.tip / wing.chords.root
    wing.aspect_ratio = wing.spans.projected**2 / wing.areas.reference
    wing.symmetric = True
    wing.origin = np.array([58.6, 0., 3.6]) * Units.feet

    reference = SUAVE.Core.Container()
    vehicle.reference_area = wing.areas.reference
    vehicle.append_component(wing)

    wing = SUAVE.Components.Wings.Wing()
    wing.tag = 'vertical_stabilizer'
    vertical = SUAVE.Components.Wings.Wing()
    vertical.spans.exposed = 32.4 * Units.feet
    vertical.chords.root = 38.7 * Units.feet  # vertical.chords.fuselage_intersect
    vertical.chords.tip = 13.4 * Units.feet
    vertical.sweep = 50.0 * Units.deg  # Leading Edge
    vertical.x_root_LE1 = 180.0 * Units.feet
    vertical.symmetric = False
    vertical.exposed_root_chord_offset = 13.3 * Units.feet
    ref_vertical = extend_to_ref_area(vertical)
    wing.areas.reference = ref_vertical.areas.reference
    wing.spans.projected = ref_vertical.spans.projected
    wing.chords.root = ref_vertical.chords.root
    dx_LE_vert = ref_vertical.root_LE_change
    wing.chords.tip = vertical.chords.tip
    wing.aspect_ratio = ref_vertical.aspect_ratio
    wing.sweep = vertical.sweep
    wing.taper = wing.chords.tip / wing.chords.root
    wing.origin = np.array([vertical.x_root_LE1 + dx_LE_vert, 0., 0.])
    wing.effective_aspect_ratio = 2.2
    wing.symmetric = False
    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)

    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.0 * Units.feet
    fuselage.heights.at_three_quarters_length = 19.7 * Units.feet
    fuselage.heights.at_wing_root_quarter_chord = 23.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.2, 0, 6.8
                                                                ]) * Units.feet

    #segment            = SUAVE.Analyses.Mission.Segments.Base_Segment()
    segment = SUAVE.Analyses.Mission.Segments.Segment()
    segment.freestream = Data()
    segment.freestream.mach_number = Mach
    segment.atmosphere = SUAVE.Analyses.Atmospheric.US_Standard_1976()
    altitude = 0.0 * Units.feet

    conditions = segment.atmosphere.compute_values(altitude / Units.km)
    segment.a = conditions.speed_of_sound
    segment.freestream.density = conditions.density
    segment.freestream.dynamic_viscosity = conditions.dynamic_viscosity
    segment.freestream.velocity = segment.freestream.mach_number * segment.a

    #Method Test
    cn_b = taw_cnbeta(vehicle, segment, configuration)
    expected = 0.08122837  # 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
Exemplo n.º 4
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.chords.root     = 42.9   * Units.feet #54.5
    wing.chords.tip      = 14.7   * Units.feet
    wing.chords.mean_aerodynamic = 27.3 * Units.feet
    wing.taper           = wing.chords.tip / wing.chords.root
    wing.aspect_ratio    = wing.spans.projected**2/wing.areas.reference
    wing.symmetric       = True
    wing.origin          = np.array([58.6,0.,3.6]) * Units.feet  
    
    reference = SUAVE.Core.Container()
    vehicle.reference_area = wing.areas.reference
    vehicle.append_component(wing)

    wing = SUAVE.Components.Wings.Wing()
    wing.tag = 'vertical_stabilizer'
    vertical = SUAVE.Components.Wings.Wing()
    vertical.spans.exposed = 32.4   * Units.feet
    vertical.chords.root   = 38.7 * Units.feet      # vertical.chords.fuselage_intersect
    vertical.chords.tip    = 13.4   * Units.feet
    vertical.sweep         = 50.0   * Units.deg # Leading Edge
    vertical.x_root_LE1    = 180.0  * Units.feet
    vertical.symmetric     = False
    vertical.exposed_root_chord_offset = 13.3   * Units.feet
    ref_vertical           = extend_to_ref_area(vertical)
    wing.areas.reference   = ref_vertical.areas.reference
    wing.spans.projected   = ref_vertical.spans.projected
    wing.chords.root       = ref_vertical.chords.root
    dx_LE_vert             = ref_vertical.root_LE_change
    wing.chords.tip        = vertical.chords.tip
    wing.aspect_ratio      = ref_vertical.aspect_ratio
    wing.sweep             = vertical.sweep
    wing.taper             = wing.chords.tip/wing.chords.root
    wing.origin            = np.array([vertical.x_root_LE1 + dx_LE_vert,0.,0.])
    wing.effective_aspect_ratio = 2.2
    wing.symmetric              = False
    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)

    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.0    * Units.feet
    fuselage.heights.at_three_quarters_length   = 19.7    * Units.feet
    fuselage.heights.at_wing_root_quarter_chord = 23.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.2,0,6.8]) * Units.feet

    #segment            = SUAVE.Analyses.Mission.Segments.Base_Segment()
    segment            = SUAVE.Analyses.Mission.Segments.Segment()
    segment.freestream = Data()
    segment.freestream.mach_number = Mach[0]
    segment.atmosphere = SUAVE.Analyses.Atmospheric.US_Standard_1976()
    altitude           = 0.0 * Units.feet
    
    conditions = segment.atmosphere.compute_values(altitude / Units.km)
    segment.a          = conditions.speed_of_sound
    segment.freestream.density   = conditions.density
    segment.freestream.dynamic_viscosity = conditions.dynamic_viscosity
    segment.freestream.velocity  = segment.freestream.mach_number * segment.a

    #Method Test
    cn_b = taw_cnbeta(vehicle,segment,configuration)
    expected = 0.10045 # 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
Exemplo n.º 5
0
reference.area          = wing.area
reference.mac           = 27.3 * Units.feet
reference.CL_alpha_wing = datcom(wing,Mach)
wing.CL_alpha           = reference.CL_alpha_wing

horizontal          = SUAVE.Components.Wings.Wing()
horizontal.area     = 1490.55* Units.feet**2
horizontal.span     = 71.6   * Units.feet
horizontal.sweep_le = 44.0   * Units.deg
horizontal.taper    = 7.5/32.6
horizontal.aspect_ratio = horizontal.span**2/horizontal.area
horizontal.x_LE     = 187.0  * Units.feet
horizontal.symmetric= True
horizontal.eta      = 0.95
horizontal.downwash_adj = 1.0 - 2.0*reference.CL_alpha_wing/np.pi/wing.aspect_ratio
horizontal.x_ac_LE  = trapezoid_ac_x(horizontal)
horizontal.CL_alpha = datcom(horizontal,Mach)

Lifting_Surfaces    = []
Lifting_Surfaces.append(wing)
Lifting_Surfaces.append(horizontal)

fuselage            = SUAVE.Components.Fuselages.Fuselage()
fuselage.x_root_quarter_chord = 77.0 * Units.feet
fuselage.length     = 229.7  * Units.feet
fuselage.w_max      = 20.9   * Units.feet 

aircraft                  = SUAVE.Vehicle()
aircraft.reference        = reference
aircraft.Lifting_Surfaces = Lifting_Surfaces
aircraft.fuselage         = fuselage
Exemplo n.º 6
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.chords.mean_aerodynamic = 27.3 * Units.feet
    wing.chords.root = 42.9 * Units.feet  #54.5ft
    wing.sweep = 42.0 * Units.deg  # Leading edge
    wing.taper = 14.7 / 42.9  #14.7/54.5
    wing.aspect_ratio = wing.spans.projected**2 / wing.areas.reference
    wing.symmetric = True
    wing.vertical = False
    wing.origin = np.array([58.6, 0, 0]) * Units.feet
    wing.aerodynamic_center = np.array([
        112.2 * Units.feet, 0., 0.
    ]) - wing.origin  #16.16 * Units.meters,0.,0,])
    wing.dynamic_pressure_ratio = 1.0
    wing.ep_alpha = 0.0

    Mach = np.array([0.198])
    conditions = Data()
    conditions.lift_curve_slope = datcom(wing, Mach)
    wing.CL_alpha = conditions.lift_curve_slope
    vehicle.reference_area = wing.areas.reference
    vehicle.append_component(wing)

    main_wing_CLa = wing.CL_alpha
    main_wing_ar = wing.aspect_ratio

    wing = SUAVE.Components.Wings.Wing()
    wing.tag = 'horizontal_stabilizer'
    wing.areas.reference = 1490.55 * Units.feet**2
    wing.spans.projected = 71.6 * Units.feet
    wing.sweep = 44.0 * Units.deg  # leading edge
    wing.taper = 7.5 / 32.6
    wing.aspect_ratio = wing.spans.projected**2 / wing.areas.reference
    wing.origin = np.array([187.0, 0, 0]) * Units.feet
    wing.symmetric = True
    wing.vertical = False
    wing.dynamic_pressure_ratio = 0.95
    wing.ep_alpha = 2.0 * main_wing_CLa / np.pi / main_wing_ar
    wing.aerodynamic_center = [trapezoid_ac_x(wing), 0.0, 0.0]
    wing.CL_alpha = datcom(wing, Mach)
    vehicle.append_component(wing)

    fuselage = SUAVE.Components.Fuselages.Fuselage()
    fuselage.tag = 'fuselage'
    fuselage.x_root_quarter_chord = 77.0 * Units.feet
    fuselage.lengths.total = 229.7 * Units.feet
    fuselage.width = 20.9 * 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.2, 0, 0
                                                                ]) * Units.feet

    cm_a = taw_cmalpha(vehicle, Mach, conditions, configuration)

    expected = -1.627  #Should be -1.45
    error = Data()
    error.cm_a_747 = (cm_a - expected) / expected

    #Parameters Required
    #Using values for a Beech 99

    vehicle = SUAVE.Vehicle()
    wing = SUAVE.Components.Wings.Wing()
    wing.tag = 'main_wing'
    wing.areas.reference = 280.0 * Units.feet**2
    wing.spans.projected = 46.0 * Units.feet
    wing.chords.mean_aerodynamic = 6.5 * Units.feet
    wing.chords.root = 7.9 * Units.feet
    wing.sweep = 4.0 * Units.deg  # Leading edge
    wing.taper = 0.47
    wing.aspect_ratio = wing.spans.projected**2 / wing.areas.reference
    wing.symmetric = True
    wing.vertical = False
    wing.origin = np.array([15., 0, 0]) * Units.feet
    wing.aerodynamic_center = np.array([trapezoid_ac_x(wing), 0., 0.])
    wing.dynamic_pressure_ratio = 1.0
    wing.ep_alpha = 0.0

    Mach = np.array([0.152])
    reference = SUAVE.Core.Container()
    conditions = Data()
    conditions.lift_curve_slope = datcom(wing, Mach)
    wing.CL_alpha = conditions.lift_curve_slope
    vehicle.reference_area = wing.areas.reference
    vehicle.append_component(wing)

    main_wing_CLa = wing.CL_alpha
    main_wing_ar = wing.aspect_ratio

    wing = SUAVE.Components.Wings.Wing()
    wing.tag = 'horizontal_stabilizer'
    wing.areas.reference = 100.5 * Units.feet**2
    wing.spans.projected = 22.5 * Units.feet
    wing.sweep = 21. * Units.deg  # leading edge
    wing.taper = 3.1 / 6.17
    wing.aspect_ratio = wing.spans.projected**2 / wing.areas.reference
    wing.origin = np.array([36.3, 0, 0]) * Units.feet
    wing.symmetric = True
    wing.vertical = False
    wing.dynamic_pressure_ratio = 0.95
    wing.ep_alpha = 2.0 * main_wing_CLa / np.pi / main_wing_ar
    wing.aerodynamic_center = np.array([trapezoid_ac_x(wing), 0.0, 0.0])
    wing.CL_alpha = datcom(wing, Mach)
    vehicle.append_component(wing)

    fuselage = SUAVE.Components.Fuselages.Fuselage()
    fuselage.tag = 'fuselage'
    fuselage.x_root_quarter_chord = 5.4 * Units.feet
    fuselage.lengths.total = 44.0 * Units.feet
    fuselage.width = 5.4 * 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([17.2, 0, 0
                                                                ]) * Units.feet

    #Method Test

    cm_a = taw_cmalpha(vehicle, Mach, conditions, configuration)

    expected = -2.521  #Should be -2.08
    error.cm_a_beech_99 = (cm_a - expected) / expected

    #Parameters Required
    #Using values for an SIAI Marchetti S-211

    vehicle = SUAVE.Vehicle()
    wing = SUAVE.Components.Wings.Wing()
    wing.tag = 'main_wing'
    wing.areas.reference = 136.0 * Units.feet**2
    wing.spans.projected = 26.3 * Units.feet
    wing.chords.mean_aerodynamic = 5.4 * Units.feet
    wing.chords.root = 7.03 * Units.feet
    wing.chords.tip = 3.1 * Units.feet
    wing.sweep = 19.5 * Units.deg  # Leading edge
    wing.taper = 3.1 / 7.03
    wing.aspect_ratio = wing.spans.projected**2 / wing.areas.reference
    wing.symmetric = True
    wing.vertical = False
    wing.origin = np.array([13.5, 0, 0]) * Units.feet
    wing.aerodynamic_center = np.array(
        [trapezoid_ac_x(wing), 0.,
         0.])  #16.6, 0. , 0. ]) * Units.feet - wing.origin
    wing.dynamic_pressure_ratio = 1.0
    wing.ep_alpha = 0.0

    Mach = np.array([0.111])
    conditions = Data()
    conditions.lift_curve_slope = datcom(wing, Mach)
    wing.CL_alpha = conditions.lift_curve_slope
    vehicle.reference_area = wing.areas.reference
    vehicle.append_component(wing)

    main_wing_CLa = wing.CL_alpha
    main_wing_ar = wing.aspect_ratio

    wing = SUAVE.Components.Wings.Wing()
    wing.tag = 'horizontal_stabilizer'
    wing.areas.reference = 36.46 * Units.feet**2
    wing.spans.projected = 13.3 * Units.feet
    wing.sweep = 18.5 * Units.deg  # leading edge
    wing.taper = 1.6 / 3.88
    wing.aspect_ratio = wing.spans.projected**2 / wing.areas.reference
    wing.origin = np.array([26.07, 0., 0.]) * Units.feet
    wing.symmetric = True
    wing.vertical = False
    wing.dynamic_pressure_ratio = 0.9
    wing.ep_alpha = 2.0 * main_wing_CLa / np.pi / main_wing_ar
    wing.aerodynamic_center = np.array([trapezoid_ac_x(wing), 0.0, 0.0])
    wing.CL_alpha = datcom(wing, Mach)
    vehicle.append_component(wing)

    fuselage = SUAVE.Components.Fuselages.Fuselage()
    fuselage.tag = 'fuselage'
    fuselage.x_root_quarter_chord = 12.67 * Units.feet
    fuselage.lengths.total = 30.9 * Units.feet
    fuselage.width = ((2.94 + 5.9) / 2) * 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([16.6, 0, 0
                                                                ]) * Units.feet

    #Method Test

    cm_a = taw_cmalpha(vehicle, Mach, conditions, configuration)

    expected = -0.5409  #Should be -0.6
    error.cm_a_SIAI = (cm_a - expected) / expected

    for k, v in error.items():
        assert (np.abs(v) < 0.01)

    return
Exemplo n.º 7
0
vertical              = SUAVE.Components.Wings.Wing()
vertical.span         = 32.4   * Units.feet
vertical.root_chord   = 38.7   * Units.feet
vertical.tip_chord    = 13.4   * Units.feet
vertical.sweep_le     = 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)
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.2
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] = 112. * Units.feet

segment            = SUAVE.Attributes.Missions.Segments.Base_Segment()
segment.M          = 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.rho        = segment.atmosphere.compute_values(altitude / Units.km, type="rho")
segment.mew        = segment.atmosphere.compute_values(altitude / Units.km, type="mew")
Exemplo n.º 8
0
 main_wing_CLa = wing.CL_alpha
 main_wing_ar  = wing.aspect_ratio
 
 wing                     = SUAVE.Components.Wings.Wing()
 wing.tag = 'horizontal_stabilizer'
 wing.areas.reference     = 1490.55* Units.feet**2
 wing.spans.projected     = 71.6   * Units.feet
 wing.sweeps.leading_edge = 44.0   * Units.deg # leading edge
 wing.taper               = 7.5/32.6
 wing.aspect_ratio        = wing.spans.projected**2/wing.areas.reference
 wing.origin              = np.array([187.0,0,0])  * Units.feet
 wing.symmetric           = True
 wing.vertical            = False
 wing.dynamic_pressure_ratio = 0.95
 wing.ep_alpha            = 2.0*main_wing_CLa/np.pi/main_wing_ar    
 wing.aerodynamic_center  = [trapezoid_ac_x(wing), 0.0, 0.0]
 wing.CL_alpha            = datcom(wing,Mach)
 vehicle.append_component(wing)
 
 fuselage = SUAVE.Components.Fuselages.Fuselage()
 fuselage.tag = 'fuselage'
 fuselage.x_root_quarter_chord = 77.0 * Units.feet
 fuselage.lengths.total     = 229.7  * Units.feet
 fuselage.width      = 20.9   * 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.2,0,0]) * Units.feet  
 
Exemplo n.º 9
0
def vehicle_setup():
    vehicle = SUAVE.Vehicle()
    vehicle.mass_properties.max_takeoff      = 4727*Units.kg #from Wikipedia
    vehicle.mass_properties.empty            = 2515*Units.kg
    vehicle.mass_properties.max_zero_fuel    =vehicle.mass_properties.max_takeoff-vehicle.mass_properties.empty+15.*225*Units.lbs #15 passenger ac
    
    wing = SUAVE.Components.Wings.Wing()
    wing.tag                                 = 'main_wing'
    wing.areas.reference                     = 280.0 * Units.feet**2
    wing.spans.projected                     = 46.0  * Units.feet
    wing.chords.mean_aerodynamic             = 6.5 * Units.feet
    wing.chords.root                         = 7.9 * Units.feet
    wing.sweeps.leading_edge                 = 4.0   * Units.deg # Same as the quarter chord sweep (ignore why EMB)
    wing.sweeps.quarter_chord                = 4.0   * Units.deg # Leading edge
    wing.taper                               = 0.47
    wing.aspect_ratio                        = wing.spans.projected**2/wing.areas.reference
    wing.symmetric                           = True
    wing.vertical                            = False
    wing.origin                              = [[15.* Units.feet  ,0,0]]
    wing.aerodynamic_center                  = np.array([trapezoid_ac_x(wing), 0. , 0. ])
    wing.dynamic_pressure_ratio              = 1.0
    wing.ep_alpha                            = 0.0
    span_location_mac                        = compute_span_location_from_chord_length(wing, wing.chords.mean_aerodynamic)
    mac_le_offset                            =.8*np.sin(wing.sweeps.leading_edge)*span_location_mac  #assume that 80% of the chord difference is from leading edge sweep
    wing.mass_properties.center_of_gravity[0][0]=.3*wing.chords.mean_aerodynamic+mac_le_offset
    
   
    Mach                                  = np.array([0.152])
    reference                             = SUAVE.Core.Container()
    conditions                            = Data()
    conditions.lift_curve_slope           = datcom(wing,Mach)    
    conditions.weights                    =Data()
    conditions.weights.total_mass         =np.array([[vehicle.mass_properties.max_takeoff]])    
    wing.CL_alpha                         = conditions.lift_curve_slope
    vehicle.reference_area                = wing.areas.reference
                                          
    # control surfaces -------------------------------------------
    flap                       = SUAVE.Components.Wings.Control_Surfaces.Flap() 
    flap.tag                   = 'flap' 
    flap.span_fraction_start   = 0.15    # not correct, only placeholder
    flap.span_fraction_end     = 0.324   # not correct, only placeholder 
    flap.deflection            = 1.0 * Units.deg
    flap.chord_fraction        = 0.19    # not correct, only placeholder
    wing.append_control_surface(flap)    
    
    slat                       = SUAVE.Components.Wings.Control_Surfaces.Slat() 
    slat.tag                   = 'slat' 
    slat.span_fraction_start   = 0.324  # not correct, only placeholder 
    slat.span_fraction_end     = 0.963  # not correct, only placeholder   
    slat.deflection            = 1.0 * Units.deg
    slat.chord_fraction        = 0.1    # not correct, only placeholder 
    wing.append_control_surface(slat)  
    
    vehicle.append_component(wing)
    
    main_wing_CLa = wing.CL_alpha
    main_wing_ar  = wing.aspect_ratio
    
    wing = SUAVE.Components.Wings.Wing()
    wing.tag                      = 'horizontal_stabilizer'
    wing.areas.reference          = 100.5 * Units.feet**2
    wing.spans.projected          = 22.5  * Units.feet
    wing.sweeps.leading_edge      = 21.0   * Units.deg # Same as the quarter chord sweep (ignore why EMB)
    wing.sweeps.quarter_chord     = 21.0   * Units.deg # leading edge
    wing.taper                    = 3.1/6.17
    wing.aspect_ratio             = wing.spans.projected**2/wing.areas.reference
    wing.origin                   = [[36.3* Units.feet,0,0]]
    wing.symmetric                = True
    wing.vertical                 = False
    wing.dynamic_pressure_ratio   = 0.95
    wing.ep_alpha                 = 2.0*main_wing_CLa/np.pi/main_wing_ar
    wing.aerodynamic_center       = np.array([trapezoid_ac_x(wing), 0.0, 0.0])
    wing.CL_alpha                 = datcom(wing,Mach)
    vehicle.append_component(wing)
    
    fuselage = SUAVE.Components.Fuselages.Fuselage()
    fuselage.tag                  = 'fuselage'
    fuselage.x_root_quarter_chord = 5.4 * Units.feet
    fuselage.lengths.total        = 44.0  * Units.feet
    fuselage.width                = 5.4   * Units.feet 
    vehicle.append_component(fuselage)
    
    vehicle.mass_properties.center_of_gravity = np.array([[17.2,0,0]]) * Units.feet  
    fuel                                      = SUAVE.Components.Physical_Component()
    fuel.origin                               = wing.origin
    fuel.mass_properties.center_of_gravity    = wing.mass_properties.center_of_gravity
    fuel.mass_properties.mass                 = vehicle.mass_properties.max_takeoff-vehicle.mass_properties.max_zero_fuel
    
    #find zero_fuel_center_of_gravity
    cg                     = vehicle.mass_properties.center_of_gravity
    MTOW                   = vehicle.mass_properties.max_takeoff
    fuel_cg                = fuel.origin+fuel.mass_properties.center_of_gravity
    fuel_mass              = fuel.mass_properties.mass 
    sum_moments_less_fuel  = (cg*MTOW-fuel_cg*fuel_mass)
    vehicle.fuel           =  fuel
    
    vehicle.mass_properties.zero_fuel_center_of_gravity = sum_moments_less_fuel/vehicle.mass_properties.max_zero_fuel
    
    return vehicle
Exemplo n.º 10
0
    wing.spans.projected         = 196.0  * Units.feet

    wing.chords.root             = 54.5 * Units.feet
    wing.chords.tip              = 14.7 * Units.feet

    wing.areas.reference         = 5500.0 * Units.feet**2
    wing.areas.wetted            = 2.0 * wing.areas.reference
    wing.areas.exposed           = 0.8 * wing.areas.wetted
    wing.areas.affected          = 0.6 * wing.areas.wetted

    wing.twists.root             = 2.0 * Units.degrees
    wing.twists.tip              = 0.0 * Units.degrees

    wing.origin                  = [65.*Units.feet,0.,-3.6*Units.feet]
    wing.aerodynamic_center      = [trapezoid_ac_x(wing),0,0]

    wing.vertical                = False
    wing.symmetric               = True

    wing.dynamic_pressure_ratio = 1.0

    # add to vehicle
    vehicle.append_component(wing)

    # ------------------------------------------------------------------
    #  Horizontal Stabilizer
    # ------------------------------------------------------------------

    wing = SUAVE.Components.Wings.Wing()
    wing.tag = 'Horizontal Stabilizer'
Exemplo n.º 11
0
    reference.area = wing.area
    reference.mac = 27.3 * Units.feet
    reference.CL_alpha_wing = datcom(wing, Mach)
    wing.CL_alpha = reference.CL_alpha_wing

    horizontal = SUAVE.Components.Wings.Wing()
    horizontal.area = 1490.55 * Units.feet**2
    horizontal.span = 71.6 * Units.feet
    horizontal.sweep_le = 44.0 * Units.deg
    horizontal.taper = 7.5 / 32.6
    horizontal.aspect_ratio = horizontal.span**2 / horizontal.area
    horizontal.x_LE = 187.0 * Units.feet
    horizontal.symmetric = True
    horizontal.eta = 0.95
    horizontal.downwash_adj = 1.0 - 2.0 * reference.CL_alpha_wing / np.pi / wing.aspect_ratio
    horizontal.x_ac_LE = trapezoid_ac_x(horizontal)
    horizontal.CL_alpha = datcom(horizontal, Mach)

    Lifting_Surfaces = []
    Lifting_Surfaces.append(wing)
    Lifting_Surfaces.append(horizontal)

    fuselage = SUAVE.Components.Fuselages.Fuselage()
    fuselage.x_root_quarter_chord = 77.0 * Units.feet
    fuselage.length = 229.7 * Units.feet
    fuselage.w_max = 20.9 * Units.feet

    aircraft = SUAVE.Vehicle()
    aircraft.reference = reference
    aircraft.Lifting_Surfaces = Lifting_Surfaces
    aircraft.fuselage = fuselage
Exemplo n.º 12
0
def main():
    #Parameters Required
    #Using values for a Boeing 747-200  
    vehicle = SUAVE.Vehicle()
    #print vehicle
    vehicle.mass_properties.max_zero_fuel=238780*Units.kg
    vehicle.mass_properties.max_takeoff  =785000.*Units.lbs
    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.chords.mean_aerodynamic   = 27.3 * Units.feet
    wing.chords.root               = 42.9 * Units.feet  #54.5ft
    wing.sweep          = 42.0   * Units.deg # Leading edge
    wing.taper          = 14.7/42.9  #14.7/54.5
    wing.aspect_ratio   = wing.spans.projected**2/wing.areas.reference
    wing.symmetric      = True
    wing.vertical       = False
    wing.origin         = np.array([58.6,0,0]) * Units.feet  
    wing.aerodynamic_center     = np.array([112.2*Units.feet,0.,0.])-wing.origin#16.16 * Units.meters,0.,0,])
    wing.dynamic_pressure_ratio = 1.0
    wing.ep_alpha               = 0.0
    
    span_location_mac                        =compute_span_location_from_chord_length(wing, wing.chords.mean_aerodynamic)
    mac_le_offset                            =.8*np.sin(wing.sweep)*span_location_mac  #assume that 80% of the chord difference is from leading edge sweep
    wing.mass_properties.center_of_gravity[0]=.3*wing.chords.mean_aerodynamic+mac_le_offset
    
    
    Mach                         = np.array([0.198])
    conditions                   = Data()
    conditions.weights           = Data()
    conditions.lift_curve_slope  = datcom(wing,Mach)
    conditions.weights.total_mass=np.array([[vehicle.mass_properties.max_takeoff]]) 
   
    wing.CL_alpha                = conditions.lift_curve_slope
    vehicle.reference_area       = wing.areas.reference
    vehicle.append_component(wing)
    
    main_wing_CLa = wing.CL_alpha
    main_wing_ar  = wing.aspect_ratio
    
    wing                     = SUAVE.Components.Wings.Wing()
    wing.tag = 'horizontal_stabilizer'
    wing.areas.reference     = 1490.55* Units.feet**2
    wing.spans.projected     = 71.6   * Units.feet
    wing.sweep               = 44.0   * Units.deg # leading edge
    wing.taper               = 7.5/32.6
    wing.aspect_ratio        = wing.spans.projected**2/wing.areas.reference
    wing.origin              = np.array([187.0,0,0])  * Units.feet
    wing.symmetric           = True
    wing.vertical            = False
    wing.dynamic_pressure_ratio = 0.95
    wing.ep_alpha            = 2.0*main_wing_CLa/np.pi/main_wing_ar    
    wing.aerodynamic_center  = [trapezoid_ac_x(wing), 0.0, 0.0]
    wing.CL_alpha            = datcom(wing,Mach)
    vehicle.append_component(wing)
    
    fuselage = SUAVE.Components.Fuselages.Fuselage()
    fuselage.tag = 'fuselage'
    fuselage.x_root_quarter_chord = 77.0 * Units.feet
    fuselage.lengths.total     = 229.7  * Units.feet
    fuselage.width      = 20.9   * Units.feet 
    vehicle.append_component(fuselage)
    vehicle.mass_properties.center_of_gravity=np.array([112.2,0,0]) * Units.feet  
    
    
    
 
    #configuration.mass_properties.zero_fuel_center_of_gravity=np.array([76.5,0,0])*Units.feet #just put a number here that got the expected value output; may want to change
    fuel                                                     =SUAVE.Components.Physical_Component()
    fuel.origin                                              =wing.origin
    fuel.mass_properties.center_of_gravity                   =wing.mass_properties.center_of_gravity
    fuel.mass_properties.mass                                =vehicle.mass_properties.max_takeoff-vehicle.mass_properties.max_zero_fuel
   
    
    #find zero_fuel_center_of_gravity
    cg                   =vehicle.mass_properties.center_of_gravity
    MTOW                 =vehicle.mass_properties.max_takeoff
    fuel_cg              =fuel.origin+fuel.mass_properties.center_of_gravity
    fuel_mass            =fuel.mass_properties.mass
    
    
    sum_moments_less_fuel=(cg*MTOW-fuel_cg*fuel_mass)
    
    
    #now define configuration for calculation
    configuration = Data()
    configuration.mass_properties                            = Data()
    configuration.mass_properties.center_of_gravity          = vehicle.mass_properties.center_of_gravity
    configuration.mass_properties.max_zero_fuel              =vehicle.mass_properties.max_zero_fuel
    configuration.fuel                                       =fuel
    
    configuration.mass_properties.zero_fuel_center_of_gravity=sum_moments_less_fuel/vehicle.mass_properties.max_zero_fuel
  
    
    #print configuration
    cm_a = taw_cmalpha(vehicle,Mach,conditions,configuration)
    expected =-1.56222373 #Should be -1.45
    error = Data()
    error.cm_a_747 = (cm_a - expected)/expected
    
    
    #Parameters Required
    #Using values for a Beech 99 
    
    vehicle = SUAVE.Vehicle()
    vehicle.mass_properties.max_takeoff  =4727*Units.kg #from Wikipedia
    vehicle.mass_properties.empty        =2515*Units.kg
    vehicle.mass_properties.max_zero_fuel=vehicle.mass_properties.max_takeoff-vehicle.mass_properties.empty+15.*225*Units.lbs #15 passenger ac
    
    wing = SUAVE.Components.Wings.Wing()
    wing.tag = 'main_wing'
    wing.areas.reference           = 280.0 * Units.feet**2
    wing.spans.projected           = 46.0  * Units.feet
    wing.chords.mean_aerodynamic   = 6.5 * Units.feet
    wing.chords.root               = 7.9 * Units.feet
    wing.sweep          = 4.0   * Units.deg # Leading edge
    wing.taper          = 0.47
    wing.aspect_ratio   = wing.spans.projected**2/wing.areas.reference
    wing.symmetric      = True
    wing.vertical       = False
    wing.origin         = np.array([15.,0,0]) * Units.feet  
    wing.aerodynamic_center     = np.array([trapezoid_ac_x(wing), 0. , 0. ])
    wing.dynamic_pressure_ratio = 1.0
    wing.ep_alpha               = 0.0
    span_location_mac                        =compute_span_location_from_chord_length(wing, wing.chords.mean_aerodynamic)
    mac_le_offset                            =.8*np.sin(wing.sweep)*span_location_mac  #assume that 80% of the chord difference is from leading edge sweep
    wing.mass_properties.center_of_gravity[0]=.3*wing.chords.mean_aerodynamic+mac_le_offset
    
    
    
    
    
    Mach = np.array([0.152])
    reference = SUAVE.Core.Container()
    conditions = Data()
    conditions.lift_curve_slope = datcom(wing,Mach)
    
    conditions.weights=Data()
    conditions.weights.total_mass=np.array([[vehicle.mass_properties.max_takeoff]]) 
   
    wing.CL_alpha               = conditions.lift_curve_slope
    vehicle.reference_area      = wing.areas.reference
    vehicle.append_component(wing)
    
    main_wing_CLa = wing.CL_alpha
    main_wing_ar  = wing.aspect_ratio
    
    wing = SUAVE.Components.Wings.Wing()
    wing.tag                 = 'horizontal_stabilizer'
    wing.areas.reference     = 100.5 * Units.feet**2
    wing.spans.projected     = 22.5  * Units.feet
    wing.sweep               = 21.   * Units.deg # leading edge
    wing.taper               = 3.1/6.17
    wing.aspect_ratio        = wing.spans.projected**2/wing.areas.reference
    wing.origin              = np.array([36.3,0,0])  * Units.feet
    wing.symmetric           = True
    wing.vertical            = False
    wing.dynamic_pressure_ratio = 0.95
    wing.ep_alpha            = 2.0*main_wing_CLa/np.pi/main_wing_ar
    wing.aerodynamic_center  = np.array([trapezoid_ac_x(wing), 0.0, 0.0])
    wing.CL_alpha            = datcom(wing,Mach)
    vehicle.append_component(wing)
    
    fuselage = SUAVE.Components.Fuselages.Fuselage()
    fuselage.tag                  = 'fuselage'
    fuselage.x_root_quarter_chord = 5.4 * Units.feet
    fuselage.lengths.total        = 44.0  * Units.feet
    fuselage.width                = 5.4   * Units.feet 
    vehicle.append_component(fuselage)
    
    vehicle.mass_properties.center_of_gravity = np.array([17.2,0,0]) * Units.feet   
    
    
    fuel.origin                                              =wing.origin
    fuel.mass_properties.center_of_gravity                   =wing.mass_properties.center_of_gravity
    fuel.mass_properties.mass                                =vehicle.mass_properties.max_takeoff-vehicle.mass_properties.max_zero_fuel
   
    
    
    #find zero_fuel_center_of_gravity
    cg                   =vehicle.mass_properties.center_of_gravity
    MTOW                 =vehicle.mass_properties.max_takeoff
    fuel_cg              =fuel.origin+fuel.mass_properties.center_of_gravity
    fuel_mass            =fuel.mass_properties.mass

    
    sum_moments_less_fuel=(cg*MTOW-fuel_cg*fuel_mass)
    
    
    #now define configuration for calculation
    configuration = Data()
    configuration.mass_properties                            = Data()
    configuration.mass_properties.center_of_gravity          = vehicle.mass_properties.center_of_gravity
    configuration.mass_properties.max_zero_fuel              = vehicle.mass_properties.max_zero_fuel
    configuration.fuel                                       =fuel
    
    configuration.mass_properties.zero_fuel_center_of_gravity=sum_moments_less_fuel/vehicle.mass_properties.max_zero_fuel
    
    
    #Method Test   
    #print configuration
    cm_a = taw_cmalpha(vehicle,Mach,conditions,configuration)
    expected = -2.48843437 #Should be -2.08
    error.cm_a_beech_99 = (cm_a - expected)/expected   
    
    
    #Parameters Required
    #Using values for an SIAI Marchetti S-211
    
    vehicle = SUAVE.Vehicle()
    vehicle.mass_properties.max_takeoff  =2750*Units.kg #from Wikipedia
    vehicle.mass_properties.empty        =1850*Units.kg
    vehicle.mass_properties.max_zero_fuel=vehicle.mass_properties.max_takeoff-vehicle.mass_properties.empty+2.*225*Units.lbs #2 passenger ac
    
    wing = SUAVE.Components.Wings.Wing()
    wing.tag = 'main_wing'
    wing.areas.reference           = 136.0 * Units.feet**2
    wing.spans.projected           = 26.3  * Units.feet
    wing.chords.mean_aerodynamic   = 5.4   * Units.feet
    wing.chords.root               = 7.03  * Units.feet
    wing.chords.tip                = 3.1   * Units.feet
    wing.sweep          = 19.5  * Units.deg # Leading edge
    wing.taper          = 3.1/7.03
    wing.aspect_ratio   = wing.spans.projected**2/wing.areas.reference
    wing.symmetric      = True
    wing.vertical       = False
    wing.origin         = np.array([13.5,0,0]) * Units.feet  
    wing.aerodynamic_center  = np.array([trapezoid_ac_x(wing),0.,0.])#16.6, 0. , 0. ]) * Units.feet - wing.origin
    wing.dynamic_pressure_ratio = 1.0
    wing.ep_alpha       = 0.0
    
    span_location_mac                        =compute_span_location_from_chord_length(wing, wing.chords.mean_aerodynamic)
    mac_le_offset                            =.8*np.sin(wing.sweep)*span_location_mac  #assume that 80% of the chord difference is from leading edge sweep
    wing.mass_properties.center_of_gravity[0]=.3*wing.chords.mean_aerodynamic+mac_le_offset
    
       
    
    Mach = np.array([0.111])
    conditions = Data()
    conditions.lift_curve_slope = datcom(wing,Mach)
    conditions.weights=Data()
    conditions.weights.total_mass=np.array([[vehicle.mass_properties.max_takeoff]]) 
   
    
    
    
    wing.CL_alpha               = conditions.lift_curve_slope
    vehicle.reference_area      = wing.areas.reference
    vehicle.append_component(wing)
    
    main_wing_CLa = wing.CL_alpha
    main_wing_ar  = wing.aspect_ratio

    wing = SUAVE.Components.Wings.Wing()
    wing.tag                 = 'horizontal_stabilizer'
    wing.areas.reference     = 36.46 * Units.feet**2
    wing.spans.projected     = 13.3   * Units.feet
    wing.sweep               = 18.5   * Units.deg # leading edge
    wing.taper               = 1.6/3.88
    wing.aspect_ratio        = wing.spans.projected**2/wing.areas.reference
    wing.origin              = np.array([26.07,0.,0.]) * Units.feet
    wing.symmetric           = True
    wing.vertical            = False
    wing.dynamic_pressure_ratio = 0.9
    wing.ep_alpha            = 2.0*main_wing_CLa/np.pi/main_wing_ar
    wing.aerodynamic_center  = np.array([trapezoid_ac_x(wing), 0.0, 0.0])
    wing.CL_alpha            = datcom(wing,Mach)
    
    span_location_mac                        =compute_span_location_from_chord_length(wing, wing.chords.mean_aerodynamic)
    mac_le_offset                            =.8*np.sin(wing.sweep)*span_location_mac  #assume that 80% of the chord difference is from leading edge sweep
    wing.mass_properties.center_of_gravity[0]=.3*wing.chords.mean_aerodynamic+mac_le_offset
    
    
    
    
    
    
    
    vehicle.append_component(wing)
    
    fuselage = SUAVE.Components.Fuselages.Fuselage()
    fuselage.tag = 'fuselage'
    fuselage.x_root_quarter_chord = 12.67 * Units.feet
    fuselage.lengths.total        = 30.9  * Units.feet
    fuselage.width                = ((2.94+5.9)/2)   * Units.feet 
    vehicle.append_component(fuselage)
    vehicle.mass_properties.center_of_gravity = np.array([16.6,0,0]) * Units.feet    
    
    
    
    
    fuel.origin                                              =wing.origin
    fuel.mass_properties.center_of_gravity                   =wing.mass_properties.center_of_gravity
    fuel.mass_properties.mass                                =vehicle.mass_properties.max_takeoff-vehicle.mass_properties.max_zero_fuel
   
    
    
    #find zero_fuel_center_of_gravity
    cg                   =vehicle.mass_properties.center_of_gravity
    MTOW                 =vehicle.mass_properties.max_takeoff
    fuel_cg              =fuel.origin+fuel.mass_properties.center_of_gravity
    fuel_mass            =fuel.mass_properties.mass

    sum_moments_less_fuel=(cg*MTOW-fuel_cg*fuel_mass)
    
    
    #now define configuration for calculation
    configuration = Data()
    configuration.mass_properties                            = Data()
    configuration.mass_properties.center_of_gravity          = vehicle.mass_properties.center_of_gravity
    configuration.mass_properties.max_zero_fuel              = vehicle.mass_properties.max_zero_fuel
    configuration.fuel                                       =fuel
    
    configuration.mass_properties.zero_fuel_center_of_gravity=sum_moments_less_fuel/vehicle.mass_properties.max_zero_fuel
    
    
    
    #Method Test   
    #print configuration
    cm_a = taw_cmalpha(vehicle,Mach,conditions,configuration)
   
    expected = -0.54071741 #Should be -0.6
    error.cm_a_SIAI = (cm_a - expected)/expected
    print error
    for k,v in error.items():
        assert(np.abs(v)<0.01)
        
    return
Exemplo n.º 13
0
 reference.area          = wing.area
 reference.mac           = 27.3 * Units.feet
 reference.CL_alpha_wing = datcom(wing,Mach) 
 wing.CL_alpha           = reference.CL_alpha_wing
 
 horizontal          = SUAVE.Components.Wings.Wing()
 horizontal.area     = 1490.55* Units.feet**2
 horizontal.span     = 71.6   * Units.feet
 horizontal.sweep_le = 44.0   * Units.deg
 horizontal.taper    = 7.5/32.6
 horizontal.aspect_ratio = horizontal.span**2/horizontal.area
 horizontal.x_LE     = 187.0  * Units.feet
 horizontal.symmetric= True
 horizontal.eta      = 0.95
 horizontal.downwash_adj = 1.0 - 2.0*reference.CL_alpha_wing/np.pi/wing.aspect_ratio
 horizontal.x_ac_LE  = trapezoid_ac_x(horizontal)
 horizontal.CL_alpha = datcom(horizontal,Mach) 
 
 Lifting_Surfaces    = []
 Lifting_Surfaces.append(wing)
 Lifting_Surfaces.append(horizontal)
 
 fuselage            = SUAVE.Components.Fuselages.Fuselage()
 fuselage.x_root_quarter_chord = 77.0 * Units.feet
 fuselage.length     = 229.7  * Units.feet
 fuselage.w_max      = 20.9   * Units.feet 
 
 aircraft                  = SUAVE.Vehicle()
 aircraft.reference        = reference
 aircraft.Lifting_Surfaces = Lifting_Surfaces
 aircraft.fuselage         = fuselage
Exemplo n.º 14
0
def vehicle_setup():

    vehicle = SUAVE.Vehicle()

    #print vehicle
    vehicle.mass_properties.max_zero_fuel = 238780 * Units.kg
    vehicle.mass_properties.max_takeoff = 785000. * Units.lbs

    # ------------------------------------------------------------------
    #   Main Wing
    # ------------------------------------------------------------------

    wing = SUAVE.Components.Wings.Main_Wing()
    wing.tag = 'main_wing'
    wing.areas.reference = 5500.0 * Units.feet**2
    wing.spans.projected = 196.0 * Units.feet
    wing.chords.mean_aerodynamic = 27.3 * Units.feet
    wing.chords.root = 42.9 * Units.feet  #54.5ft
    wing.chords.tip = 14.7 * Units.feet
    wing.sweeps.quarter_chord = 42.0 * Units.deg  # Leading edge
    wing.sweeps.leading_edge = 42.0 * Units.deg  # Same as the quarter chord sweep (ignore why EMB)
    wing.taper = wing.chords.tip / wing.chords.root

    wing.aspect_ratio = wing.spans.projected**2 / wing.areas.reference
    wing.symmetric = True
    wing.vertical = False
    wing.origin = np.array([58.6, 0, 3.6]) * Units.feet
    wing.aerodynamic_center = np.array([
        112.2 * Units.feet, 0., 0.
    ]) - wing.origin  #16.16 * Units.meters,0.,0,])
    wing.dynamic_pressure_ratio = 1.0
    wing.ep_alpha = 0.0

    span_location_mac = compute_span_location_from_chord_length(
        wing, wing.chords.mean_aerodynamic)
    mac_le_offset = .8 * np.sin(
        wing.sweeps.leading_edge
    ) * span_location_mac  #assume that 80% of the chord difference is from leading edge sweep
    wing.mass_properties.center_of_gravity[
        0] = .3 * wing.chords.mean_aerodynamic + mac_le_offset

    Mach = np.array([0.198])
    conditions = Data()
    conditions.weights = Data()
    conditions.lift_curve_slope = datcom(wing, Mach)
    conditions.weights.total_mass = np.array(
        [[vehicle.mass_properties.max_takeoff]])

    wing.CL_alpha = conditions.lift_curve_slope
    vehicle.reference_area = wing.areas.reference
    vehicle.append_component(wing)

    main_wing_CLa = wing.CL_alpha
    main_wing_ar = wing.aspect_ratio

    # ------------------------------------------------------------------
    #  Horizontal Stabilizer
    # ------------------------------------------------------------------

    wing = SUAVE.Components.Wings.Wing()
    wing.tag = 'horizontal_stabilizer'
    wing.areas.reference = 1490.55 * Units.feet**2
    wing.spans.projected = 71.6 * Units.feet
    wing.sweeps.quarter_chord = 44.0 * Units.deg  # leading edge
    wing.sweeps.leading_edge = 44.0 * Units.deg  # Same as the quarter chord sweep (ignore why EMB)
    wing.taper = 7.5 / 32.6
    wing.aspect_ratio = wing.spans.projected**2 / wing.areas.reference
    wing.origin = np.array([187.0, 0, 0]) * Units.feet
    wing.symmetric = True
    wing.vertical = False
    wing.dynamic_pressure_ratio = 0.95
    wing.ep_alpha = 2.0 * main_wing_CLa / np.pi / main_wing_ar
    wing.aerodynamic_center = [trapezoid_ac_x(wing), 0.0, 0.0]
    wing.CL_alpha = datcom(wing, Mach)
    vehicle.append_component(wing)

    # ------------------------------------------------------------------
    #   Vertical Stabilizer
    # ------------------------------------------------------------------

    wing = SUAVE.Components.Wings.Wing()
    wing.tag = 'vertical_stabilizer'
    wing.spans.exposed = 32.4 * Units.feet
    wing.chords.root = 38.7 * Units.feet  # vertical.chords.fuselage_intersect
    wing.chords.tip = 13.4 * Units.feet
    wing.sweeps.quarter_chord = 50.0 * Units.deg  # Leading Edge
    wing.x_root_LE1 = 180.0 * Units.feet
    wing.symmetric = False
    wing.exposed_root_chord_offset = 13.3 * Units.feet
    wing = extend_to_ref_area(wing)

    wing.areas.reference = wing.extended.areas.reference
    wing.spans.projected = wing.extended.spans.projected
    wing.chords.root = 14.9612585185
    dx_LE_vert = wing.extended.root_LE_change
    wing.taper = 0.272993077083
    wing.origin = np.array([wing.x_root_LE1 + dx_LE_vert, 0., 0.])
    wing.aspect_ratio = (wing.spans.projected**2) / wing.areas.reference
    wing.effective_aspect_ratio = 2.2
    wing.symmetric = False
    wing.aerodynamic_center = np.array([trapezoid_ac_x(wing), 0.0, 0.0])
    wing.dynamic_pressure_ratio = .95
    Mach = np.array([0.198])
    wing.CL_alpha = 0.
    wing.ep_alpha = 0.
    vehicle.append_component(wing)

    # ------------------------------------------------------------------
    #  Fuselage
    # ------------------------------------------------------------------

    fuselage = SUAVE.Components.Fuselages.Fuselage()
    fuselage.tag = 'fuselage'

    fuselage.lengths.total = 229.7 * Units.feet
    fuselage.areas.side_projected = 4696.16 * Units.feet**2  #used for cnbeta
    fuselage.heights.maximum = 26.9 * Units.feet  #used for cnbeta
    fuselage.heights.at_quarter_length = 26.0 * Units.feet  #used for cnbeta
    fuselage.heights.at_three_quarters_length = 19.7 * Units.feet  #used for cnbeta
    fuselage.heights.at_wing_root_quarter_chord = 23.8 * Units.feet  #used for cnbeta

    fuselage.x_root_quarter_chord = 77.0 * Units.feet  #used for cmalpha
    fuselage.lengths.total = 229.7 * Units.feet
    fuselage.width = 20.9 * Units.feet

    vehicle.append_component(fuselage)
    vehicle.mass_properties.center_of_gravity = np.array([112.2, 0, 0
                                                          ]) * Units.feet

    #configuration.mass_properties.zero_fuel_center_of_gravity=np.array([76.5,0,0])*Units.feet #just put a number here that got the expected value output; may want to change
    fuel = SUAVE.Components.Physical_Component()
    fuel.origin = wing.origin
    fuel.mass_properties.center_of_gravity = wing.mass_properties.center_of_gravity
    fuel.mass_properties.mass = vehicle.mass_properties.max_takeoff - vehicle.mass_properties.max_zero_fuel

    #find zero_fuel_center_of_gravity
    cg = vehicle.mass_properties.center_of_gravity
    MTOW = vehicle.mass_properties.max_takeoff
    fuel_cg = fuel.origin + fuel.mass_properties.center_of_gravity
    fuel_mass = fuel.mass_properties.mass

    sum_moments_less_fuel = (cg * MTOW - fuel_cg * fuel_mass)
    vehicle.fuel = fuel
    vehicle.mass_properties.zero_fuel_center_of_gravity = sum_moments_less_fuel / vehicle.mass_properties.max_zero_fuel
    return vehicle
Exemplo n.º 15
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.chords.mean_aerodynamic = 27.3 * 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([58.6,0,0]) * Units.feet  
    wing.aerodynamic_center  = np.array([112., 0. , 0. ]) * Units.feet- wing.origin
    wing.eta            = 1.0
    wing.downwash_adj   = 1.0
    wing.ep_alpha       = 1. - wing.downwash_adj
    
    Mach                    = np.array([0.198])
    reference               = SUAVE.Structure.Container()
    conditions = Data()
    conditions.lift_curve_slope = datcom(wing,Mach)
    wing.CL_alpha = conditions.lift_curve_slope
    vehicle.reference_area   = wing.areas.reference
    vehicle.append_component(wing)
    
    lifting_surfaces    = []
    lifting_surfaces.append(wing)
    
    wing          = SUAVE.Components.Wings.Wing()
    wing.tag = 'Horizontal Stabilizer'
    wing.areas.reference     = 1490.55* Units.feet**2
    wing.spans.projected     = 71.6   * Units.feet
    wing.sweep = 44.0   * Units.deg # leading edge
    wing.taper    = 7.5/32.6
    wing.aspect_ratio = wing.spans.projected**2/wing.areas.reference
    wing.origin     = np.array([187.0,0,0])  * Units.feet
    wing.symmetric= True
    wing.eta      = 0.95
    wing.downwash_adj = 1.0 - 2.0*vehicle.wings['Main Wing'].CL_alpha/np.pi/wing.aspect_ratio
    wing.ep_alpha       = 1. - wing.downwash_adj    
    wing.aerodynamic_center  = [trapezoid_ac_x(wing), 0.0, 0.0] - wing.origin
    wing.CL_alpha = datcom(wing,Mach)
    vehicle.append_component(wing)
    lifting_surfaces.append(wing)
    
    fuselage = SUAVE.Components.Fuselages.Fuselage()
    fuselage.tag = 'Fuselage'
    fuselage.x_root_quarter_chord = 77.0 * Units.feet
    fuselage.lengths.total     = 229.7  * Units.feet
    fuselage.width      = 20.9   * 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]) * Units.feet    
    
    #Method Test    
    cm_a = taw_cmalpha(vehicle,Mach,conditions,configuration)
    
    expected = 0.93 # Should be -1.45
    error = Data()
    error.cm_a_747 = (cm_a - expected)/expected
    
    #Parameters Required
    #Using values for a Beech 99 
    
    vehicle = SUAVE.Vehicle()
    wing = SUAVE.Components.Wings.Wing()
    wing.tag = 'Main Wing'
    wing.areas.reference           = 280.0 * Units.feet**2
    wing.spans.projected           = 46.0  * Units.feet
    wing.chords.mean_aerodynamic = 6.5 * Units.feet
    wing.sweep       = 3.0   * Units.deg # Leading edge
    wing.taper          = 0.47
    wing.aspect_ratio   = wing.spans.projected**2/wing.areas.reference
    wing.symmetric      = True
    wing.origin           = np.array([14.0,0,0]) * Units.feet  
    wing.aerodynamic_center  = np.array([trapezoid_ac_x(wing), 0. , 0. ]) - wing.origin
    wing.eta            = 1.0
    wing.downwash_adj   = 1.0
    wing.ep_alpha       = 1. - wing.downwash_adj
    
    Mach                    = np.array([0.152])
    reference               = SUAVE.Structure.Container()
    conditions = Data()
    conditions.lift_curve_slope = datcom(wing,Mach)
    wing.CL_alpha = conditions.lift_curve_slope
    vehicle.reference_area   = wing.areas.reference
    vehicle.append_component(wing)
    
    lifting_surfaces    = []
    lifting_surfaces.append(wing)
    
    wing          = SUAVE.Components.Wings.Wing()
    wing.tag = 'Horizontal Stabilizer'
    wing.areas.reference     = 100.5 * Units.feet**2
    wing.spans.projected     = 22.5   * Units.feet
    wing.sweep = 21   * Units.deg # leading edge
    wing.taper    = 3.1/6.17
    wing.aspect_ratio = wing.spans.projected**2/wing.areas.reference
    wing.origin     = np.array([36.3,0,0])  * Units.feet
    wing.symmetric= True
    wing.eta      = 0.95
    wing.downwash_adj = 1.0 - 2.0*vehicle.wings['Main Wing'].CL_alpha/np.pi/wing.aspect_ratio
    wing.ep_alpha       = 1. - wing.downwash_adj    
    wing.aerodynamic_center  = [trapezoid_ac_x(wing), 0.0, 0.0] - wing.origin
    wing.CL_alpha = datcom(wing,Mach)
    vehicle.append_component(wing)
    lifting_surfaces.append(wing)
    
    fuselage = SUAVE.Components.Fuselages.Fuselage()
    fuselage.tag = 'Fuselage'
    fuselage.x_root_quarter_chord = 5.4 * Units.feet
    fuselage.lengths.total     = 44.0  * Units.feet
    fuselage.width      = 5.4   * 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([17.2,0,0]) * Units.feet    
    
    #Method Test   
    
    cm_a = taw_cmalpha(vehicle,Mach,conditions,configuration)
    
    expected = 12.57 # Should be -2.08
    error.cm_a_beech_99 = (cm_a - expected)/expected   
    
    #Parameters Required
    #Using values for an SIAI Marchetti S-211
    vehicle = SUAVE.Vehicle()
    wing = SUAVE.Components.Wings.Wing()
    wing.tag = 'Main Wing'
    wing.areas.reference           = 136.0 * Units.feet**2
    wing.spans.projected           = 26.3  * Units.feet
    wing.chords.mean_aerodynamic = 5.4 * Units.feet
    wing.sweep       = 195   * Units.deg # Leading edge
    wing.taper          = 3.1/7.03
    wing.aspect_ratio   = wing.spans.projected**2/wing.areas.reference
    wing.symmetric      = True
    wing.origin           = np.array([12.11,0,0]) * Units.feet  
    wing.aerodynamic_center  = np.array([16.6, 0. , 0. ]) - wing.origin
    wing.eta            = 1.0
    wing.downwash_adj   = 1.0
    wing.ep_alpha       = 1. - wing.downwash_adj
    
    Mach                    = np.array([0.111])
    reference               = SUAVE.Structure.Container()
    conditions = Data()
    conditions.lift_curve_slope = datcom(wing,Mach)
    wing.CL_alpha = conditions.lift_curve_slope
    vehicle.reference_area   = wing.areas.reference
    vehicle.append_component(wing)
    
    lifting_surfaces    = []
    lifting_surfaces.append(wing)
    
    wing          = SUAVE.Components.Wings.Wing()
    wing.tag = 'Horizontal Stabilizer'
    wing.areas.reference     = 36.46 * Units.feet**2
    wing.spans.projected     = 13.3   * Units.feet
    wing.sweep = 18.5   * Units.deg # leading edge
    wing.taper    = 1.6/3.88
    wing.aspect_ratio = wing.spans.projected**2/wing.areas.reference
    wing.origin     = np.array([26.07,0.,0.]) * Units.feet
    wing.symmetric= True
    wing.eta      = 0.9
    wing.downwash_adj = 1.0 - 2.0*vehicle.wings['Main Wing'].CL_alpha/np.pi/wing.aspect_ratio
    wing.ep_alpha       = 1. - wing.downwash_adj    
    wing.aerodynamic_center  = [trapezoid_ac_x(wing), 0.0, 0.0] - wing.origin
    wing.CL_alpha = datcom(wing,Mach)
    vehicle.append_component(wing)
    lifting_surfaces.append(wing)
    
    fuselage = SUAVE.Components.Fuselages.Fuselage()
    fuselage.tag = 'Fuselage'
    fuselage.x_root_quarter_chord = 12.67 * Units.feet
    fuselage.lengths.total     = 30.9  * Units.feet
    fuselage.width      = ((2.94+5.9)/2)   * 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([16.6,0,0]) * Units.feet    
    
    #Method Test   
    
    cm_a = taw_cmalpha(vehicle,Mach,conditions,configuration)
    
    expected = -27.9 # should be -0.6

    error.cm_a_SIAI = (cm_a - expected)/expected

    for k,v in error.items():
        assert(np.abs(v)<0.005)
        
    return
Exemplo n.º 16
0
def vehicle_setup():

    vehicle = SUAVE.Vehicle()

    #print vehicle
    vehicle.mass_properties.max_zero_fuel   = 238780*Units.kg
    vehicle.mass_properties.max_takeoff     = 833000.*Units.lbs

    vehicle.design_mach_number              = 0.92
    vehicle.design_range                    = 6560 * Units.miles
    vehicle.design_cruise_alt               = 35000.0 * Units.ft
    vehicle.envelope.limit_load             = 2.5
    vehicle.envelope.ultimate_load          = 3.75

    vehicle.systems.control                 = "fully powered"
    vehicle.systems.accessories             = "longe range"

    # ------------------------------------------------------------------
    #   Main Wing
    # ------------------------------------------------------------------
    wing = SUAVE.Components.Wings.Main_Wing()
    wing.tag                                  = 'main_wing'
    wing.areas.reference                      = 5500.0 * Units.feet**2
    wing.spans.projected                      = 196.0  * Units.feet
    wing.chords.mean_aerodynamic              = 27.3   * Units.feet
    wing.chords.root                          = 42.9   * Units.feet  #54.5ft
    wing.chords.tip                           = 14.7   * Units.feet
    wing.sweeps.quarter_chord                 = 42.0   * Units.deg  # Leading edge
    wing.sweeps.leading_edge                  = 42.0   * Units.deg  # Same as the quarter chord sweep (ignore why EMB)
    wing.taper                                = wing.chords.tip / wing.chords.root
    wing.aspect_ratio                         = wing.spans.projected**2/wing.areas.reference
    wing.symmetric                            = True
    wing.vertical                             = False
    wing.origin                               = [[58.6* Units.feet ,0,3.6* Units.feet ]]
    wing.aerodynamic_center                   = np.array([112.2*Units.feet,0.,0.])-wing.origin[0]#16.16 * Units.meters,0.,0,])
    wing.dynamic_pressure_ratio               = 1.0
    wing.ep_alpha                             = 0.0
    span_location_mac                         = compute_span_location_from_chord_length(wing, wing.chords.mean_aerodynamic)
    mac_le_offset                             = .8*np.sin(wing.sweeps.leading_edge)*span_location_mac  #assume that 80% of the chord difference is from leading edge sweep
    wing.mass_properties.center_of_gravity[0] = .3*wing.chords.mean_aerodynamic+mac_le_offset
    wing.thickness_to_chord                   = 0.14


    Mach                                  = np.array([0.198])
    conditions                            = Data()
    conditions.weights                    = Data()
    conditions.lift_curve_slope           = datcom(wing,Mach)
    conditions.weights.total_mass         = np.array([[vehicle.mass_properties.max_takeoff]])
    wing.CL_alpha                         = conditions.lift_curve_slope
    vehicle.reference_area                = wing.areas.reference

    # control surfaces -------------------------------------------
    flap                       = SUAVE.Components.Wings.Control_Surfaces.Flap()
    flap.tag                   = 'flap'
    flap.span_fraction_start   = 0.15
    flap.span_fraction_end     = 0.324
    flap.deflection            = 1.0 * Units.deg
    flap.chord_fraction        = 0.19
    wing.append_control_surface(flap)

    slat                       = SUAVE.Components.Wings.Control_Surfaces.Slat()
    slat.tag                   = 'slat'
    slat.span_fraction_start   = 0.324
    slat.span_fraction_end     = 0.963
    slat.deflection            = 1.0 * Units.deg
    slat.chord_fraction        = 0.1
    wing.append_control_surface(slat)

    vehicle.append_component(wing)

    main_wing_CLa = wing.CL_alpha
    main_wing_ar  = wing.aspect_ratio

    # ------------------------------------------------------------------
    #  Horizontal Stabilizer
    # ------------------------------------------------------------------
    wing                        = SUAVE.Components.Wings.Horizontal_Tail()
    wing.tag                    = 'horizontal_stabilizer'
    wing.areas.reference        = 1490.55* Units.feet**2
    wing.areas.wetted           = 1490.55 * Units.feet ** 2
    wing.areas.exposed          = 1490.55 * Units.feet ** 2
    wing.spans.projected        = 71.6   * Units.feet
    wing.sweeps.quarter_chord   = 44.0   * Units.deg # leading edge
    wing.sweeps.leading_edge    = 44.0   * Units.deg # Same as the quarter chord sweep (ignore why EMB)
    wing.taper                  = 7.5/32.6
    wing.aspect_ratio           = wing.spans.projected**2/wing.areas.reference
    wing.origin                 = [[187.0* Units.feet,0,0]]
    wing.symmetric              = True
    wing.vertical               = False
    wing.dynamic_pressure_ratio = 0.95
    wing.ep_alpha               = 2.0*main_wing_CLa/np.pi/main_wing_ar
    wing.aerodynamic_center     = [trapezoid_ac_x(wing), 0.0, 0.0]
    wing.CL_alpha               = datcom(wing,Mach)
    wing.thickness_to_chord     = 0.1
    vehicle.append_component(wing)

    # ------------------------------------------------------------------
    #   Vertical Stabilizer
    # ------------------------------------------------------------------
    wing = SUAVE.Components.Wings.Vertical_Tail()
    wing.tag                       = 'vertical_stabilizer'
    wing.spans.exposed             = 32.4  * Units.feet
    wing.chords.root               = 38.7  * Units.feet      # vertical.chords.fuselage_intersect
    wing.chords.tip                = 13.4  * Units.feet
    wing.sweeps.quarter_chord      = 50.0  * Units.deg # Leading Edge
    wing.x_root_LE1                = 180.0 * Units.feet
    wing.symmetric                 = False
    wing.exposed_root_chord_offset = 13.3   * Units.feet
    wing                           = extend_to_ref_area(wing)
    wing.areas.reference           = wing.extended.areas.reference
    wing.areas.wetted              = wing.areas.reference
    wing.areas.exposed             = wing.areas.reference
    wing.spans.projected           = wing.extended.spans.projected
    wing.chords.root               = 14.9612585185
    dx_LE_vert                     = wing.extended.root_LE_change
    wing.taper                     = 0.272993077083
    wing.origin                    = [[wing.x_root_LE1 + dx_LE_vert,0.,0.]]
    wing.aspect_ratio              = (wing.spans.projected**2)/wing.areas.reference
    wing.effective_aspect_ratio    = 2.2
    wing.symmetric                 = False
    wing.aerodynamic_center        = np.array([trapezoid_ac_x(wing),0.0,0.0])
    wing.dynamic_pressure_ratio    = .95
    Mach                           = np.array([0.198])
    wing.CL_alpha                  = 0.
    wing.ep_alpha                  = 0.
    wing.thickness_to_chord        = 0.1
    vehicle.append_component(wing)


    # ------------------------------------------------------------------
    #  Fuselage
    # ------------------------------------------------------------------

    fuselage = SUAVE.Components.Fuselages.Fuselage()
    fuselage.tag                                = 'fuselage'
    fuselage.lengths.total                      = 229.7   * Units.feet
    fuselage.areas.side_projected               = 4696.16 * Units.feet**2 #used for cnbeta
    fuselage.heights.maximum                    = 26.9    * Units.feet    #used for cnbeta
    fuselage.heights.at_quarter_length          = 26.0    * Units.feet    #used for cnbeta
    fuselage.heights.at_three_quarters_length   = 19.7    * Units.feet    #used for cnbeta
    fuselage.heights.at_wing_root_quarter_chord = 23.8    * Units.feet    #used for cnbeta
    fuselage.x_root_quarter_chord               = 77.0    * Units.feet    #used for cmalpha
    fuselage.lengths.total                      = 229.7   * Units.feet
    fuselage.width                              = 20.9    * Units.feet
    fuselage.areas.wetted = 688.64 * Units.feet**2
    fuselage.differential_pressure = 5.0e4 * Units.pascal
    vehicle.append_component(fuselage)
    vehicle.mass_properties.center_of_gravity=np.array([[112.2,0,0]]) * Units.feet

    # ------------------------------------------------------------------
    #   Turbofan Network
    # ------------------------------------------------------------------

    # instantiate the gas turbine network
    turbofan = SUAVE.Components.Energy.Networks.Turbofan()
    turbofan.tag = 'turbofan'

    # setup
    turbofan.number_of_engines  = 4.0
    turbofan.bypass_ratio       = 4.8
    turbofan.engine_length      = 3.934
    turbofan.nacelle_diameter   = 2.428
    turbofan.origin = [[36.56, 22, -1.9], [27, 12, -1.9],[36.56, -22, -1.9], [27, -12, -1.9]]

    # compute engine areas
    Awet = 1.1 * np.pi * turbofan.nacelle_diameter * turbofan.engine_length

    # Assign engine areas
    turbofan.areas.wetted = Awet

    # working fluid
    turbofan.working_fluid = SUAVE.Attributes.Gases.Air()

    # ------------------------------------------------------------------
    #   Component 1 - Ram

    # to convert freestream static to stagnation quantities

    # instantiate
    ram = SUAVE.Components.Energy.Converters.Ram()
    ram.tag = 'ram'

    # add to the network
    turbofan.append(ram)

    # ------------------------------------------------------------------
    #  Component 2 - Inlet Nozzle

    # instantiate
    inlet_nozzle = SUAVE.Components.Energy.Converters.Compression_Nozzle()
    inlet_nozzle.tag = 'inlet_nozzle'

    # setup
    inlet_nozzle.polytropic_efficiency = 0.98
    inlet_nozzle.pressure_ratio = 0.98

    # add to network
    turbofan.append(inlet_nozzle)

    # ------------------------------------------------------------------
    #  Component 3 - Low Pressure Compressor

    # instantiate
    compressor = SUAVE.Components.Energy.Converters.Compressor()
    compressor.tag = 'low_pressure_compressor'

    # setup
    compressor.polytropic_efficiency = 0.91
    compressor.pressure_ratio = 1.14

    # add to network
    turbofan.append(compressor)

    # ------------------------------------------------------------------
    #  Component 4 - High Pressure Compressor

    # instantiate
    compressor = SUAVE.Components.Energy.Converters.Compressor()
    compressor.tag = 'high_pressure_compressor'

    # setup
    compressor.polytropic_efficiency = 0.91
    compressor.pressure_ratio = 13.415

    # add to network
    turbofan.append(compressor)

    # ------------------------------------------------------------------
    #  Component 5 - Low Pressure Turbine

    # instantiate
    turbine = SUAVE.Components.Energy.Converters.Turbine()
    turbine.tag = 'low_pressure_turbine'

    # setup
    turbine.mechanical_efficiency = 0.99
    turbine.polytropic_efficiency = 0.93

    # add to network
    turbofan.append(turbine)

    # ------------------------------------------------------------------
    #  Component 6 - High Pressure Turbine

    # instantiate
    turbine = SUAVE.Components.Energy.Converters.Turbine()
    turbine.tag = 'high_pressure_turbine'

    # setup
    turbine.mechanical_efficiency = 0.99
    turbine.polytropic_efficiency = 0.93

    # add to network
    turbofan.append(turbine)

    # ------------------------------------------------------------------
    #  Component 7 - Combustor

    # instantiate
    combustor = SUAVE.Components.Energy.Converters.Combustor()
    combustor.tag = 'combustor'

    # setup
    combustor.efficiency                = 0.99
    combustor.alphac                    = 1.0
    combustor.turbine_inlet_temperature = 1450
    combustor.pressure_ratio            = 0.95
    combustor.fuel_data                 = SUAVE.Attributes.Propellants.Jet_A()

    # add to network
    turbofan.append(combustor)

    # ------------------------------------------------------------------
    #  Component 8 - Core Nozzle

    # instantiate
    nozzle = SUAVE.Components.Energy.Converters.Expansion_Nozzle()
    nozzle.tag = 'core_nozzle'

    # setup
    nozzle.polytropic_efficiency = 0.95
    nozzle.pressure_ratio = 0.99

    # add to network
    turbofan.append(nozzle)

    # ------------------------------------------------------------------
    #  Component 9 - Fan Nozzle

    # instantiate
    nozzle = SUAVE.Components.Energy.Converters.Expansion_Nozzle()
    nozzle.tag = 'fan_nozzle'

    # setup
    nozzle.polytropic_efficiency = 0.95
    nozzle.pressure_ratio = 0.99

    # add to network
    turbofan.append(nozzle)

    # ------------------------------------------------------------------
    #  Component 10 - Fan

    # instantiate
    fan = SUAVE.Components.Energy.Converters.Fan()
    fan.tag = 'fan'

    # setup
    fan.polytropic_efficiency = 0.93
    fan.pressure_ratio = 1.7

    # add to network
    turbofan.append(fan)

    # ------------------------------------------------------------------
    # Component 10 : thrust (to compute the thrust)
    thrust = SUAVE.Components.Energy.Processes.Thrust()
    thrust.tag = 'compute_thrust'

    # total design thrust (includes all the engines)
    # picked lower range of 747-400 at https://en.wikipedia.org/wiki/Boeing_747
    thrust.total_design = 4 * 276000. * Units.N  # Newtons

    # design sizing conditions
    altitude = 35000.0 * Units.ft
    mach_number = 0.92
    isa_deviation = 0.

    # Engine setup for noise module

    # add to network
    turbofan.thrust = thrust

    # size the turbofan
    turbofan_sizing(turbofan, mach_number, altitude)

    # add  gas turbine network turbofan to the vehicle
    vehicle.append_component(turbofan)

    #configuration.mass_properties.zero_fuel_center_of_gravity=np.array([76.5,0,0])*Units.feet #just put a number here that got the expected value output; may want to change
    fuel                                                     =SUAVE.Components.Physical_Component()
    fuel.origin                                              =wing.origin
    fuel.mass_properties.center_of_gravity                   =wing.mass_properties.center_of_gravity
    fuel.mass_properties.mass                                =vehicle.mass_properties.max_takeoff-vehicle.mass_properties.max_zero_fuel

    #find zero_fuel_center_of_gravity
    cg                   =vehicle.mass_properties.center_of_gravity
    MTOW                 =vehicle.mass_properties.max_takeoff
    fuel_cg              =fuel.origin+fuel.mass_properties.center_of_gravity
    fuel_mass            =fuel.mass_properties.mass

    sum_moments_less_fuel=(cg*MTOW-fuel_cg*fuel_mass)
    vehicle.fuel = fuel
    vehicle.mass_properties.zero_fuel_center_of_gravity = sum_moments_less_fuel/vehicle.mass_properties.max_zero_fuel
    
    return vehicle
Exemplo n.º 17
0
 vertical.root_chord   = 38.7   * Units.feet
 vertical.tip_chord    = 13.4   * Units.feet
 vertical.sweep_le     = 50.0   * Units.deg
 vertical.x_root_LE1   = 181.0  * Units.feet
 dz_centerline         = 13.5   * 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.25
 vertical_symm         = copy.deepcopy(vertical)
 vertical_symm.span    = 2.0*vertical.span
 vertical_symm.area    = 2.0*vertical.area
 vertical.x_ac_LE      = trapezoid_ac_x(vertical_symm)
 
 aircraft            = SUAVE.Vehicle()
 aircraft.wing       = wing
 aircraft.fuselage   = fuselage
 aircraft.vertical   = vertical
 aircraft.Mass_Props.pos_cg[0] = 112.2 * Units.feet
 
 segment            = SUAVE.Attributes.Missions.Segments.Segment()
 segment.M          = 0.198
 segment.atmosphere = SUAVE.Attributes.Atmospheres.Earth.US_Standard_1976()
 altitude           = 0.0 * Units.feet
 segment.compute_atmosphere(altitude / Units.km)
 segment.v_inf      = segment.M * segment.a
 
 #Method Test
Exemplo n.º 18
0
def vehicle_setup():
    vehicle = SUAVE.Vehicle()
    vehicle.mass_properties.max_takeoff = 2750 * Units.kg  #from Wikipedia
    vehicle.mass_properties.empty = 1850 * Units.kg
    vehicle.mass_properties.max_zero_fuel = vehicle.mass_properties.max_takeoff - vehicle.mass_properties.empty + 2. * 225 * Units.lbs  #2 passenger ac

    wing = SUAVE.Components.Wings.Wing()
    wing.tag = 'main_wing'
    wing.areas.reference = 136.0 * Units.feet**2
    wing.spans.projected = 26.3 * Units.feet
    wing.chords.mean_aerodynamic = 5.4 * Units.feet
    wing.chords.root = 7.03 * Units.feet
    wing.chords.tip = 3.1 * Units.feet
    wing.sweeps.quarter_chord = 19.5 * Units.deg  # Leading edge
    wing.sweeps.leading_edge = 19.5 * Units.deg  # Same as the quarter chord sweep (ignore why EMB)
    wing.taper = 3.1 / 7.03
    wing.aspect_ratio = wing.spans.projected**2 / wing.areas.reference
    wing.symmetric = True
    wing.vertical = False
    wing.origin = np.array([13.5, 0, 0]) * Units.feet
    wing.aerodynamic_center = np.array(
        [trapezoid_ac_x(wing), 0.,
         0.])  #16.6, 0. , 0. ]) * Units.feet - wing.origin
    wing.dynamic_pressure_ratio = 1.0
    wing.ep_alpha = 0.0

    span_location_mac = compute_span_location_from_chord_length(
        wing, wing.chords.mean_aerodynamic)
    mac_le_offset = .8 * np.sin(
        wing.sweeps.leading_edge
    ) * span_location_mac  #assume that 80% of the chord difference is from leading edge sweep
    wing.mass_properties.center_of_gravity[
        0] = .3 * wing.chords.mean_aerodynamic + mac_le_offset

    Mach = np.array([0.111])
    conditions = Data()
    conditions.lift_curve_slope = datcom(wing, Mach)
    conditions.weights = Data()
    conditions.weights.total_mass = np.array(
        [[vehicle.mass_properties.max_takeoff]])

    wing.CL_alpha = conditions.lift_curve_slope
    vehicle.reference_area = wing.areas.reference
    vehicle.append_component(wing)

    main_wing_CLa = wing.CL_alpha
    main_wing_ar = wing.aspect_ratio

    wing = SUAVE.Components.Wings.Wing()
    wing.tag = 'horizontal_stabilizer'
    wing.areas.reference = 36.46 * Units.feet**2
    wing.spans.projected = 13.3 * Units.feet
    wing.sweeps.quarter_chord = 18.5 * Units.deg  # leading edge
    wing.sweeps.leading_edge = 18.5 * Units.deg  # Same as the quarter chord sweep (ignore why EMB)
    wing.taper = 1.6 / 3.88
    wing.aspect_ratio = wing.spans.projected**2 / wing.areas.reference
    wing.origin = np.array([26.07, 0., 0.]) * Units.feet
    wing.symmetric = True
    wing.vertical = False
    wing.dynamic_pressure_ratio = 0.9
    wing.ep_alpha = 2.0 * main_wing_CLa / np.pi / main_wing_ar
    wing.aerodynamic_center = np.array([trapezoid_ac_x(wing), 0.0, 0.0])
    wing.CL_alpha = datcom(wing, Mach)

    span_location_mac = compute_span_location_from_chord_length(
        wing, wing.chords.mean_aerodynamic)
    mac_le_offset = .8 * np.sin(
        wing.sweeps.leading_edge
    ) * span_location_mac  #assume that 80% of the chord difference is from leading edge sweep
    wing.mass_properties.center_of_gravity[
        0] = .3 * wing.chords.mean_aerodynamic + mac_le_offset

    vehicle.append_component(wing)

    fuselage = SUAVE.Components.Fuselages.Fuselage()
    fuselage.tag = 'fuselage'
    fuselage.x_root_quarter_chord = 12.67 * Units.feet
    fuselage.lengths.total = 30.9 * Units.feet
    fuselage.width = ((2.94 + 5.9) / 2) * Units.feet
    vehicle.append_component(fuselage)
    vehicle.mass_properties.center_of_gravity = np.array([16.6, 0, 0
                                                          ]) * Units.feet

    fuel = SUAVE.Components.Physical_Component()
    fuel.origin = wing.origin
    fuel.mass_properties.center_of_gravity = wing.mass_properties.center_of_gravity
    fuel.mass_properties.mass = vehicle.mass_properties.max_takeoff - vehicle.mass_properties.max_zero_fuel

    #find zero_fuel_center_of_gravity
    cg = vehicle.mass_properties.center_of_gravity
    MTOW = vehicle.mass_properties.max_takeoff
    fuel_cg = fuel.origin + fuel.mass_properties.center_of_gravity
    fuel_mass = fuel.mass_properties.mass
    sum_moments_less_fuel = (cg * MTOW - fuel_cg * fuel_mass)

    vehicle.fuel = fuel
    vehicle.mass_properties.zero_fuel_center_of_gravity = sum_moments_less_fuel / vehicle.mass_properties.max_zero_fuel
    return vehicle
Exemplo n.º 19
0
def vehicle_setup():

    vehicle = SUAVE.Vehicle()
    
    #print vehicle
    vehicle.mass_properties.max_zero_fuel=238780*Units.kg
    vehicle.mass_properties.max_takeoff  =785000.*Units.lbs
    
    # ------------------------------------------------------------------        
    #   Main Wing
    # ------------------------------------------------------------------        

    wing = SUAVE.Components.Wings.Main_Wing()
    wing.tag = 'main_wing'
    wing.areas.reference           = 5500.0 * Units.feet**2
    wing.spans.projected           = 196.0  * Units.feet
    wing.chords.mean_aerodynamic   = 27.3   * Units.feet
    wing.chords.root               = 42.9   * Units.feet  #54.5ft
    wing.chords.tip                = 14.7   * Units.feet
    wing.sweeps.quarter_chord      = 42.0   * Units.deg  # Leading edge
    wing.sweeps.leading_edge       = 42.0   * Units.deg  # Same as the quarter chord sweep (ignore why EMB)
    wing.taper                     = wing.chords.tip / wing.chords.root
    
    wing.aspect_ratio              = wing.spans.projected**2/wing.areas.reference
    wing.symmetric      = True
    wing.vertical       = False
    wing.origin         = np.array([58.6,0,3.6]) * Units.feet  
    wing.aerodynamic_center     = np.array([112.2*Units.feet,0.,0.])-wing.origin#16.16 * Units.meters,0.,0,])
    wing.dynamic_pressure_ratio = 1.0
    wing.ep_alpha               = 0.0
    
    span_location_mac                         = compute_span_location_from_chord_length(wing, wing.chords.mean_aerodynamic)
    mac_le_offset                             = .8*np.sin(wing.sweeps.leading_edge)*span_location_mac  #assume that 80% of the chord difference is from leading edge sweep
    wing.mass_properties.center_of_gravity[0] = .3*wing.chords.mean_aerodynamic+mac_le_offset
    
    
    Mach                         = np.array([0.198])
    conditions                   = Data()
    conditions.weights           = Data()
    conditions.lift_curve_slope  = datcom(wing,Mach)
    conditions.weights.total_mass=np.array([[vehicle.mass_properties.max_takeoff]]) 
   
    wing.CL_alpha                = conditions.lift_curve_slope
    vehicle.reference_area       = wing.areas.reference
    vehicle.append_component(wing)
    
    main_wing_CLa = wing.CL_alpha
    main_wing_ar  = wing.aspect_ratio
    
    # ------------------------------------------------------------------        
    #  Horizontal Stabilizer
    # ------------------------------------------------------------------        
    
    
    wing                        = SUAVE.Components.Wings.Wing()
    wing.tag                    = 'horizontal_stabilizer'
    wing.areas.reference        = 1490.55* Units.feet**2
    wing.spans.projected        = 71.6   * Units.feet
    wing.sweeps.quarter_chord   = 44.0   * Units.deg # leading edge
    wing.sweeps.leading_edge    = 44.0   * Units.deg # Same as the quarter chord sweep (ignore why EMB)
    wing.taper                  = 7.5/32.6
    wing.aspect_ratio           = wing.spans.projected**2/wing.areas.reference
    wing.origin                 = np.array([187.0,0,0])  * Units.feet
    wing.symmetric              = True
    wing.vertical               = False
    wing.dynamic_pressure_ratio = 0.95
    wing.ep_alpha               = 2.0*main_wing_CLa/np.pi/main_wing_ar    
    wing.aerodynamic_center     = [trapezoid_ac_x(wing), 0.0, 0.0]
    wing.CL_alpha               = datcom(wing,Mach)
    vehicle.append_component(wing)
    
    # ------------------------------------------------------------------
    #   Vertical Stabilizer
    # ------------------------------------------------------------------
    
    wing = SUAVE.Components.Wings.Wing()
    wing.tag                  = 'vertical_stabilizer'
    wing.spans.exposed        = 32.4  * Units.feet
    wing.chords.root          = 38.7  * Units.feet      # vertical.chords.fuselage_intersect
    wing.chords.tip           = 13.4  * Units.feet
    wing.sweeps.quarter_chord = 50.0  * Units.deg # Leading Edge
    wing.x_root_LE1           = 180.0 * Units.feet
    wing.symmetric            = False
    wing.exposed_root_chord_offset = 13.3   * Units.feet
    wing                      = extend_to_ref_area(wing)
 
    wing.areas.reference        = wing.extended.areas.reference
    wing.spans.projected        = wing.extended.spans.projected
    wing.chords.root            = 14.9612585185
    dx_LE_vert                  = wing.extended.root_LE_change
    wing.taper                  = 0.272993077083
    wing.origin                 = np.array([wing.x_root_LE1 + dx_LE_vert,0.,0.])
    wing.aspect_ratio           = (wing.spans.projected**2)/wing.areas.reference
    wing.effective_aspect_ratio = 2.2
    wing.symmetric              = False
    wing.aerodynamic_center     = np.array([trapezoid_ac_x(wing),0.0,0.0])
    wing.dynamic_pressure_ratio = .95
    Mach                        = np.array([0.198])
    wing.CL_alpha               = 0.
    wing.ep_alpha               = 0.
    vehicle.append_component(wing)
    
    
    # ------------------------------------------------------------------
    #  Fuselage
    # ------------------------------------------------------------------
    
    fuselage = SUAVE.Components.Fuselages.Fuselage()
    fuselage.tag = 'fuselage'
    
    fuselage.lengths.total                      = 229.7   * Units.feet
    fuselage.areas.side_projected               = 4696.16 * Units.feet**2 #used for cnbeta
    fuselage.heights.maximum                    = 26.9    * Units.feet    #used for cnbeta
    fuselage.heights.at_quarter_length          = 26.0    * Units.feet    #used for cnbeta
    fuselage.heights.at_three_quarters_length   = 19.7    * Units.feet    #used for cnbeta
    fuselage.heights.at_wing_root_quarter_chord = 23.8    * Units.feet    #used for cnbeta
    
    fuselage.x_root_quarter_chord               = 77.0    * Units.feet    #used for cmalpha
    fuselage.lengths.total                      = 229.7   * Units.feet
    fuselage.width                              = 20.9    * Units.feet 
    
     
    
    vehicle.append_component(fuselage)
    vehicle.mass_properties.center_of_gravity=np.array([112.2,0,0]) * Units.feet  
    
    
    
 
    #configuration.mass_properties.zero_fuel_center_of_gravity=np.array([76.5,0,0])*Units.feet #just put a number here that got the expected value output; may want to change
    fuel                                                     =SUAVE.Components.Physical_Component()
    fuel.origin                                              =wing.origin
    fuel.mass_properties.center_of_gravity                   =wing.mass_properties.center_of_gravity
    fuel.mass_properties.mass                                =vehicle.mass_properties.max_takeoff-vehicle.mass_properties.max_zero_fuel
   
    
    #find zero_fuel_center_of_gravity
    cg                   =vehicle.mass_properties.center_of_gravity
    MTOW                 =vehicle.mass_properties.max_takeoff
    fuel_cg              =fuel.origin+fuel.mass_properties.center_of_gravity
    fuel_mass            =fuel.mass_properties.mass
    
    
    sum_moments_less_fuel=(cg*MTOW-fuel_cg*fuel_mass)
    vehicle.fuel = fuel
    vehicle.mass_properties.zero_fuel_center_of_gravity = sum_moments_less_fuel/vehicle.mass_properties.max_zero_fuel
    return vehicle