コード例 #1
0
def l_over_d(aircraft, mach, altitude):
    """calculate specific excess power"""
    c_d_0 = Aircraft(aircraft, mach).c_d_zero(altitude)
    c_l_a = Aircraft(aircraft, mach).c_l_alpha()
    ar = aircraft['wing']['aspect_ratio']
    l_d = 1 / 2 * (((c_l_a / 2) * ar) / c_d_0)**0.5
    return l_d
コード例 #2
0
def trim_aileron(aircraft, v, altitude, p):
    """trim aircraft with aileron and rudder"""
    a = Atmosphere(altitude).speed_of_sound()  # [ft/s]
    mach = v / a
    b = span(aircraft['wing']['aspect_ratio'], aircraft['wing']['planform'])
    k = b / (2 * v)
    c_l_p = Aircraft(aircraft, mach).c_r_roll_rate()  # []
    c_l_da = Aircraft(aircraft, mach).c_r_delta_aileron()  # []
    da = -c_l_p * p * k / c_l_da
    da = rad2deg(da)
    return da
コード例 #3
0
ファイル: constraint.py プロジェクト: AndresAE/aero_mdo
def master_constraint(aircraft, wing_loading, mach, altitude, n, gamma, a_x):
    """master constraint equation for flight."""
    "return sea level static thrust to weight ratio"
    rho = Atmosphere(altitude).air_density()
    rho_sl = Atmosphere(0).air_density()
    a = Atmosphere(altitude).speed_of_sound()
    v = a * mach
    q_bar = 0.5 * rho * v**2

    c_d_0 = Aircraft(aircraft, mach).c_d_zero(altitude)
    c_l_a = Aircraft(aircraft, mach).c_l_alpha()

    t_w = (q_bar * c_d_0 / wing_loading + wing_loading * (n**2) *
           (cos(deg2rad(gamma))**2) /
           (q_bar * c_l_a) + n * sin(deg2rad(gamma)) + a_x / g) * rho_sl / rho
    return t_w
コード例 #4
0
def trim_alpha_de_throttle(aircraft, speed, altitude, gamma, n=1):
    """trim aircraft with angle of attack, elevator, and throttle"""
    a = Atmosphere(altitude).speed_of_sound()  # [ft/s]
    rho = Atmosphere(altitude).air_density()  # [slug / ft^3]
    mach = speed / a  # []
    c_l_a = Aircraft(aircraft, mach).c_l_alpha()  # [1/rad]
    c_l_de = Aircraft(aircraft, mach).c_l_delta_elevator()  # [1/rad]
    c_m_a = Aircraft(aircraft, mach).c_m_alpha()  # [1/rad]
    c_m_de = Aircraft(aircraft, mach).c_m_delta_elevator()  # [1/rad]
    c_l_0 = Aircraft(aircraft, mach).c_l_zero()  # []
    c_d_0 = Aircraft(aircraft, mach).c_d_zero(altitude)  # []
    w = aircraft['weight']['weight'] * n  # [lb]
    q_bar = 0.5 * rho * speed**2  # [psf]
    s_w = aircraft['wing']['planform']  # [ft^2]
    c_bar = mac(aircraft['wing']['aspect_ratio'], s_w,
                aircraft['wing']['taper'])
    c_l_1 = w * cos(deg2rad(gamma)) / (s_w * q_bar)  # []
    t = Propulsion(aircraft['propulsion'], [speed, altitude],
                   ones((aircraft['propulsion']['n_engines'])),
                   aircraft['weight']['cg']).thrust_f_m()
    a = array([[-c_l_a, -c_l_de, 0],
               [c_m_a, c_m_de, (t[4]) / (s_w * q_bar * c_bar)],
               [-2 * c_l_1, 0, t[0] / (s_w * q_bar)]])
    c_m_0 = Aircraft(aircraft, mach).c_m_zero(altitude)
    b = array([[-c_l_1 + c_l_0], [-c_m_0],
               [w * sin(deg2rad(gamma)) / (s_w * q_bar) + c_d_0]])
    c = linalg.solve(a, b)  # [rad]
    c[0:2] = rad2deg(c[0:2])
    return c
コード例 #5
0
def n_per_alpha(aircraft, x_0):
    """return acceleration sensitivity."""
    rho = Atmosphere(x_0[-1]).air_density()  # [slug/ft3]
    a = Atmosphere(x_0[-1]).speed_of_sound()  # [ft/s]
    v = sqrt(sum(x_0[0:3]**2))  # [ft/s]
    q_bar = 0.5 * rho * v**2  # [psf]
    s = aircraft['wing']['planform']  # [ft2]
    cla = Aircraft(aircraft, v / a).c_l_alpha()  # [1/rad]
    n_a = cla * s * q_bar / aircraft['weight']['weight']  # [g/rad]
    return n_a
コード例 #6
0
ファイル: constraint.py プロジェクト: AndresAE/aero_mdo
def takeoff(aircraft, wing_loading, s_to, altitude, mu, c_l_max=1.4):
    """takeoff constraint equation."""
    "return sea level static thrust to weight ratio"
    rho = Atmosphere(altitude).air_density()
    rho_sl = Atmosphere(0).air_density()

    a = Atmosphere(altitude).speed_of_sound()
    q_stall = wing_loading / c_l_max
    q_v_avg = 0.5 * q_stall
    mach_avg = sqrt(q_v_avg / (0.5 * rho)) / a

    c_d_0 = Aircraft(aircraft, mean(mach_avg)).c_d_zero(altitude)
    c_l_a = Aircraft(aircraft, mean(mach_avg)).c_l_alpha()
    c_l_0 = Aircraft(aircraft, mean(mach_avg)).c_l_zero()

    d_w = q_v_avg * (c_d_0 + (c_l_0**2) / c_l_a) / wing_loading
    l_w = q_v_avg * c_l_0 / wing_loading

    t_w = (1.44 * wing_loading / (rho * c_l_max * s_to * g) + d_w + mu *
           (1 - l_w)) * rho_sl / rho
    return t_w
コード例 #7
0
def trim_aileron_rudder(aircraft, v, altitude, alpha, beta, p, r):
    """trim aircraft with aileron and rudder"""
    a = Atmosphere(altitude).speed_of_sound()  # [ft/s]
    mach = v / a
    b = span(aircraft['wing']['aspect_ratio'], aircraft['wing']['planform'])
    k = b / (2 * v)
    c_l_b = Aircraft(aircraft, mach).c_r_beta(alpha)
    c_l_p = Aircraft(aircraft, mach).c_r_roll_rate()  # []
    c_l_r = Aircraft(aircraft, mach).c_r_yaw_rate(alpha)  # []
    c_l_da = Aircraft(aircraft, mach).c_r_delta_aileron()  # []
    c_l_dr = Aircraft(aircraft, mach).c_r_delta_rudder()  # []
    c_n_b = Aircraft(aircraft, mach).c_n_beta(alpha)  # []
    c_n_p = Aircraft(aircraft, mach).c_n_roll_rate(alpha)  # []
    c_n_r = Aircraft(aircraft, mach).c_n_yaw_rate(alpha)  # []
    c_n_da = Aircraft(aircraft, mach).c_n_delta_aileron()  # []
    c_n_dr = Aircraft(aircraft, mach).c_n_delta_rudder()  # []
    a = array([[c_l_da, c_l_dr], [c_n_da, c_n_dr]])
    b = array([[-c_l_b * beta - c_l_p * p * k - c_l_r * r * k],
               [-c_n_b * beta - c_n_p * p * k - c_n_r * r * k]])
    c = linalg.solve(a, b)  # [rad]
    return rad2deg(c)
コード例 #8
0
def trim_alpha_de(aircraft, speed, altitude, gamma, n=1):
    """trim aircraft with angle of attack and elevator"""
    a = Atmosphere(altitude).speed_of_sound()  # [ft/s]
    rho = Atmosphere(altitude).air_density()  # [slug / ft^3]
    mach = speed / a  # []
    c_l_a = Aircraft(aircraft, mach).c_l_alpha()  # [1/rad]
    c_l_de = Aircraft(aircraft, mach).c_l_delta_elevator()  # [1/rad]
    c_m_a = Aircraft(aircraft, mach).c_m_alpha()  # [1/rad]
    c_m_de = Aircraft(aircraft, mach).c_m_delta_elevator()  # [1/rad]
    c_l_0 = Aircraft(aircraft, mach).c_l_zero()  # []
    a = array([[c_l_a, c_l_de], [c_m_a, c_m_de]])
    w = aircraft['weight']['weight'] * n  # [lb]
    q_bar = 0.5 * rho * speed**2  # [psf]
    s_w = aircraft['wing']['planform']  # [ft^2]
    c_l_1 = w * cos(deg2rad(gamma)) / (s_w * q_bar)  # []
    c_m_0 = Aircraft(aircraft, mach).c_m_zero(altitude)
    b = array([[c_l_1 - c_l_0], [-c_m_0]])
    c = linalg.solve(a, b)  # [rad]
    return rad2deg(c)
コード例 #9
0
def trim_vs(aircraft, altitude, gamma, n=1):
    """trim aircraft with angle of attack and elevator"""
    rho = Atmosphere(altitude).air_density()  # [slug / ft^3]
    mach = 0.3  # [] assume moderate mach number
    c_l_a = Aircraft(aircraft, mach).c_l_alpha()  # [1/rad]
    c_l_de = Aircraft(aircraft, mach).c_l_delta_elevator()  # [1/rad]
    c_m_a = Aircraft(aircraft, mach).c_m_alpha()  # [1/rad]
    c_m_de = Aircraft(aircraft, mach).c_m_delta_elevator()  # [1/rad]
    c_l_0 = Aircraft(aircraft, mach).c_l_zero()  # []
    w = aircraft['weight']['weight'] * n  # [lb]
    s_w = aircraft['wing']['planform']  # [ft^2]
    a_s = deg2rad(aircraft['wing']['alpha_stall'])
    c_m_0 = Aircraft(aircraft, mach).c_m_zero(altitude)
    a = array([[-w * cos(deg2rad(gamma)) / (0.5 * rho * s_w), c_l_de],
               [0, c_m_de]])
    b = array([[-c_l_0 - c_l_a * a_s], [-c_m_0 - c_m_a * a_s]])
    c = linalg.solve(a, b)  # [rad]
    v_s = float((1 / c[0])**0.5)
    return v_s
コード例 #10
0
def lateral_stability(plane, mach, alpha):
    """return airplane static lateral stability."""
    c_r_b = Aircraft(plane, mach).c_r_beta(alpha)
    return c_r_b
コード例 #11
0
def directional_stability(plane, mach, alpha):
    """return airplane static directional stability."""
    c_n_b = Aircraft(plane, mach).c_n_beta(alpha)
    return c_n_b
コード例 #12
0
def static_margin(plane, mach):
    """return longitudinal static margin."""
    c_m_a = Aircraft(plane, mach).c_m_alpha()
    c_l_a = Aircraft(plane, mach).c_l_alpha()
    sm = -c_m_a / c_l_a * 100
    return sm