Ejemplo n.º 1
0
def air_path(aircraft, nei, altp, disa, speed_mode, speed, mass, rating):
    """
    Retrieves air path in various conditions
    """

    g = earth.gravity()

    [pamb, tamb, tstd, dtodz] = earth.atmosphere(altp, disa)

    mach = get_mach(pamb, speed_mode, speed)

    fn, data = propu.thrust(aircraft, pamb, tamb, mach, rating, nei)

    cz = lift_from_speed(aircraft, pamb, mach, mass)

    [cx, lod] = aero.drag(aircraft, pamb, tamb, mach, cz)

    if (nei > 0):
        dcx = propu.oei_drag(aircraft, pamb, mach)
        cx = cx + dcx * nei
        lod = cz / cx

    acc_factor = earth.climb_mode(speed_mode, dtodz, tstd, disa, mach)

    slope = (fn / (mass * g) - 1 / lod) / acc_factor

    vsnd = earth.sound_speed(tamb)

    v_z = mach * vsnd * slope

    return slope, v_z
Ejemplo n.º 2
0
def acceleration(aircraft, nei, altp, disa, speed_mode, speed, mass, rating):
    """
    Aircraft acceleration on level flight
    """

    wing = aircraft.wing
    gam = earth.heat_ratio()

    [pamb, tamb, tstd, dtodz] = earth.atmosphere(altp, disa)

    mach = get_mach(pamb, speed_mode, speed)

    fn, Data = propu.thrust(aircraft, pamb, tamb, mach, rating, nei)

    cz = lift_from_speed(aircraft, pamb, mach, mass)

    cx, lod = aero.drag(aircraft, pamb, tamb, mach, cz)

    if (nei > 0):
        dcx = propu.oei_drag(aircraft, pamb, mach)
        cx = cx + dcx * nei

    acc = (fn - 0.5 * gam * pamb * mach**2 * wing.area * cx) / mass

    return acc
Ejemplo n.º 3
0
def take_off(aircraft, kvs1g, altp, disa, mass, hld_conf):
    """
    Take off field length and climb path at 35 ft depending on stall margin (kVs1g)
    """

    wing = aircraft.wing
    propulsion = aircraft.propulsion

    (MTO, MCN, MCL, MCR, FID) = propulsion.rating_code

    czmax, cz_0 = craft_aero.high_lift(wing, hld_conf)

    rating = MTO

    [pamb, tamb, tstd, dtodz] = earth.atmosphere(altp, disa)

    [rho, sig] = earth.air_density(pamb, tamb)

    cz_to = czmax / kvs1g**2

    mach = flight.speed_from_lift(aircraft, pamb, cz_to, mass)

    nei = 0  # For Magic Line factor computation

    fn, trash = propu.thrust(aircraft, pamb, tamb, mach, rating, nei)

    ml_factor = mass**2 / (cz_to * fn * wing.area * sig**0.8
                           )  # Magic Line factor

    tofl = 14.23 * ml_factor + 97.58

    nei = 1  # For 2nd segment computation
    speed_mode = 1
    speed = flight.get_speed(pamb, speed_mode, mach)

    seg2path, vz = flight.air_path(aircraft, nei, altp, disa, speed_mode,
                                   speed, mass, rating)

    return seg2path, tofl
Ejemplo n.º 4
0
#------------------------------------------------------------------------------------------------------
run.mass_mission_adaptation(aircraft)
#run.mass_estimation(aircraft)

# Calculate all airplane performances
#------------------------------------------------------------------------------------------------------
run.performance_analysis(aircraft)

# Print relevant output
#------------------------------------------------------------------------------------------------------
altp = unit.m_ft(35000)
disa = 0
pamb, tamb, tstd, dtodz = earth.atmosphere(altp, disa)
(MTO, MCN, MCL, MCR, FID) = aircraft.propulsion.rating_code
nei = 0
Fn, Data = propu.thrust(aircraft, pamb, tamb, cruise_mach, MTO, nei)
vsnd = earth.sound_speed(tamb)
tas = vsnd * cruise_mach
print("")
print("True air speed in cruise", "%.1f" % tas, " m/s")
print("Totalthrust in cruise", "%.0f" % Fn, " N")

print("")
print("Engine thrust = ",
      "%.1f" % (aircraft.propulsion.reference_thrust_effective / 10), " daN")
print("Wing area = ", "%.1f" % aircraft.wing.area, " m2")
print("MTOW = ", "%.0f" % aircraft.weights.mtow, " kg")
print("OWE = ", "%.0f" % aircraft.weights.owe, " kg")

print("")
print("Turbofan nacelle width = ", "%.1f" % aircraft.turbofan_nacelle.width,
Ejemplo n.º 5
0
def eval_propulsion_design(aircraft):
    """
    Propulsion architecture design
    """

    propulsion = aircraft.propulsion

    propulsion.rating_code = (0, 1, 2, 3, 4)

    if (propulsion.architecture == 1):

        engine = aircraft.turbofan_engine

        eval_turbofan_engine_design(aircraft)
        eval_turbofan_nacelle_design(aircraft)

    elif (propulsion.architecture == 2):

        engine = aircraft.turbofan_engine

        eval_turbofan_engine_design(aircraft)
        eval_hybrid_engine_design(aircraft)
        eval_hybrid_nacelle_design(aircraft)

    elif (propulsion.architecture == 3):

        engine = aircraft.turbofan_engine

        eval_hybrid_turbofan_engine_design(aircraft)
        eval_hybrid_engine_design(aircraft)
        eval_hybrid_body_nacelle_design(aircraft)

    elif (propulsion.architecture == 4):

        engine = aircraft.turboprop_engine

        eval_turboprop_engine_design(aircraft)
        eval_turboprop_nacelle_design(aircraft)

    else:
        raise Exception("propulsion.architecture index is out of range")

    (MTO, MCN, MCL, MCR, FID) = propulsion.rating_code

    disa = 15.
    altp = 0.
    mach = 0.25
    nei = 0.

    (pamb, tamb, tstd, dtodz) = earth.atmosphere(altp, disa)

    (Fn, Data) = propu.thrust(aircraft, pamb, tamb, mach, MTO, nei)

    propulsion.reference_thrust_effective = (Fn / engine.n_engine) / 0.80
    propulsion.mto_thrust_ref = Fn / engine.n_engine

    disa = aircraft.low_speed.disa_oei
    altp = aircraft.low_speed.req_oei_altp
    mach = 0.5 * aircraft.design_driver.cruise_mach
    nei = 1.

    (pamb, tamb, tstd, dtodz) = earth.atmosphere(altp, disa)

    (Fn, Data) = propu.thrust(aircraft, pamb, tamb, mach, MCN, nei)

    propulsion.mcn_thrust_ref = Fn / (engine.n_engine - nei)

    disa = 0.
    altp = aircraft.design_driver.ref_cruise_altp
    mach = aircraft.design_driver.cruise_mach
    nei = 0.

    (pamb, tamb, tstd, dtodz) = earth.atmosphere(altp, disa)

    propulsion.sfc_cruise_ref = propu.sfc(aircraft, pamb, tamb, mach, MCR, nei)

    if (propulsion.architecture == 1):

        sec = 0.

    elif (propulsion.architecture == 2):

        fn, sec, data = propu.hybrid_thrust(aircraft, pamb, tamb, mach, MCR,
                                            nei)

    elif (propulsion.architecture == 3):

        fn, sec, data = propu.hybrid_thrust(aircraft, pamb, tamb, mach, MCR,
                                            nei)

    elif (propulsion.architecture == 4):

        sec = 0.

    else:
        raise Exception("propulsion.architecture index is out of range")

    propulsion.sec_cruise_ref = sec

    (Fn, Data) = propu.thrust(aircraft, pamb, tamb, mach, FID, nei)

    propulsion.fid_thrust_ref = Fn / engine.n_engine

    disa = 0.
    altp = aircraft.design_driver.top_of_climb_altp
    mach = aircraft.design_driver.cruise_mach
    nei = 0.

    (pamb, tamb, tstd, dtodz) = earth.atmosphere(altp, disa)

    (Fn, Data) = propu.thrust(aircraft, pamb, tamb, mach, MCL, nei)

    propulsion.mcl_thrust_ref = Fn / engine.n_engine

    (Fn, Data) = propu.thrust(aircraft, pamb, tamb, mach, MCR, nei)

    propulsion.mcr_thrust_ref = Fn / engine.n_engine

    return
Ejemplo n.º 6
0
def vertical_tail_sizing(aircraft):
    """
    Computes necessary VTP area variation to meet engine failure case constraint
    Influence of CG position is ignored
    """

    design_driver = aircraft.design_driver
    propulsion = aircraft.propulsion
    wing = aircraft.wing
    vtp = aircraft.vertical_tail
    aerodynamics = aircraft.aerodynamics
    payload = aircraft.payload
    c_of_g = aircraft.center_of_gravity

    (MTO, MCN, MCL, MCR, FID) = propulsion.rating_code

    cyb_vtp, xlc_vtp, aoa_max_vtp, ki_vtp = frame_aero.vtp_aero_data(aircraft)

    payload = 0.5 * payload.nominal  # Light payload
    range = design_driver.design_range / 15  # Short mission
    altp = design_driver.ref_cruise_altp
    mach = design_driver.cruise_mach
    disa = 30  # Hot condition

    tow, block_fuel, block_time, total_fuel = sub_proc.mission_tow(
        aircraft, payload, range, altp, mach, disa)

    altp = 0
    disa = 15

    pamb, tamb, tstd, dtodz = earth.atmosphere(altp, disa)

    stall_margin = regul.kvs1g_min_take_off()

    czmax_to = aerodynamics.cz_max_to

    mach_s1g = flight.speed_from_lift(aircraft, pamb, czmax_to, tow)

    mach_35ft = stall_margin * mach_s1g  # V2 speed

    mach_mca = mach_35ft / 1.1  #Approximation of required VMCA

    altp = 0
    disa = 15

    nei = 1

    pamb, tamb, tstd, dtodz = earth.atmosphere(altp, disa)

    fn, data = propu.thrust(aircraft, pamb, tamb, mach_mca, MTO, nei)

    dcx_oei = propu.oei_drag(aircraft, pamb, tamb)

    cn_prop = propu.thrust_yaw_moment(aircraft, fn, pamb, mach_mca, dcx_oei)

    x_cg = c_of_g.max_bwd_req_cg

    cyb_vtp_req = (cn_prop * wing.mac) / ((xlc_vtp - x_cg) * aoa_max_vtp)

    k_vtp_area = cyb_vtp_req / cyb_vtp

    d_vtp_area = (k_vtp_area - 1) * vtp.area

    return d_vtp_area