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
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
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
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
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
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
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")
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
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
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'
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
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
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
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
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
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
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
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
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