def det_instruments_weight(N_c, N_en, L_f, B_w, reciprocating = False, turboprop = True): """ inputs: N_c = number of pilots N_en = number of engines L_f = total fuselage length in m B_w = wing span in m conditional inputs: K_r = 1.133 for reciprocating engine, 1.0 otherwise K_tbp = 0.793 for turboprop, 1.0 otherwise outputs: the instruments weight in kg """ L_f = cf.meter_to_feet(L_f) B_w = cf.meter_to_feet(B_w) K_r = 1 if reciprocating: K_r = 1.133 K_tbp = 1 if turboprop: K_tbp = 0.793 instruments_weight = 4.509 * K_r * K_tbp * N_c**0.541 * N_en * (L_f + B_w)**0.5 instruments_weight = cf.pounds_to_kg(instruments_weight) return instruments_weight
def det_nacelle_group_weight(N_lt, N_w, W_dg, N_en, S_n, W_engine, pylon_mounted = True, W_ec = 0, propeller = True, thrust_reverser = False): """ Inputs: N_lt = nacelle length in m N_w = nacelle width in m W_dg = design gross weight in kg N_en = number of engines S_n = nacelle wetted area in m^2 W_engine = weight of each engine in kg conditional inputs: K_ng = factor for nacelles (1.017 for pylon mounted nacelle, 1.0 otherwise) W_ec = weight of the engine and contents in lb (approximated by 2.331 W_engine^0.901 * K_p * K_tr) K_p = 1.4 for propeller, 1.0 otherwise K_tr = 1.18 for jet with thrust reverser, 1.0 otherwise outputs: nacelle group weight in kg """ N_lt = cf.meter_to_feet(N_lt) N_w = cf.meter_to_feet(N_w) N_z = 1.5* lim_load_factor(W_dg) S_n = cf.metersquared_to_feetsquared(S_n) W_engine = cf.kg_to_pounds(W_engine) K_ng = 1 if pylon_mounted: K_ng = 1.017 if W_ec == 0 and W_engine == 0: raise NameError("no propulsion??") K_p = 1 K_tr = 1 if propeller: K_p = 1.4 if thrust_reverser: K_tr = 1.18 if W_ec == 0: W_ec = 2.331 * W_engine**0.901 * K_p * K_tr nacelle_group_weight = 0.6724 * K_ng * N_lt**0.10 * N_w**0.294 * N_z**0.119 * W_ec**0.611 * N_en**0.984 * S_n**0.224 nacelle_group_weight = cf.pounds_to_kg(nacelle_group_weight) return nacelle_group_weight
def det_hydraulics_weight(L_f, B_w, N_f = 6): """ inputs: L_f = total fuselage length in m B_w = wing span in m conditional inputs: N_f = number of functions performed by controls, typically 4 - 7 outputs: the hydraulics weight in kg """ L_f = cf.meter_to_feet(L_f) B_w = cf.meter_to_feet(B_w) hydraulics_weight = 0.2673 * N_f * (L_f + B_w)**0.937 hydraulics_weight = cf.pounds_to_kg(hydraulics_weight) return hydraulics_weight
def det_hor_tail_weight(F_w, B_h, W_dg, S_ht, L_t, quarter_chord_sweep_ht, AR_ht, S_e, all_moving_unit = False, K_y = 0.3): """ Inputs: F_w = fuselage width at horizontal tail intersection in m B_h = horizontal tail span in m W_dg = design gross weigth in kg S_ht = horizontal tail area in m^2 L_t = tail length (wing quarter MAC to tail quarter MAC) in m quarter_chord_sweep_ht = sweep angle of the horizontal tail at the quarter chord line in degrees AR_ht = aspect ratio of the horizontal tail S_e = elevator area in m^2 conditional inputs: all_moving_unit = is the horizontal tail moving as a unit (True) or only part of it (False) all_moving_unit = True -> 1.143 all_moving_unit = False -> 1 K_y = Aircraft pitching radius of gyration in ft (usually 0.3 * L_t) output: Horizontal tail weight in kg """ F_w = cf.meter_to_feet(F_w) B_h = cf.meter_to_feet(B_h) N_z = 1.5* lim_load_factor(W_dg) W_dg = cf.kg_to_pounds(W_dg) S_ht = cf.metersquared_to_feetsquared(S_ht) L_t = cf.meter_to_feet(L_t) quarter_chord_sweep_ht = quarter_chord_sweep_ht * (np.pi/180) S_e = cf.metersquared_to_feetsquared(S_e) K_uht = 1 if all_moving_unit: K_uht = 1.143 if K_y == 0.3: K_y = 0.3 * L_t hor_tail_weight = 0.0379 * K_uht * (1 + F_w/B_h)**-0.25 * W_dg**0.639 * N_z**0.10 * S_ht**0.75 * L_t**-1 * K_y**0.704 * np.cos(quarter_chord_sweep_ht)**-1 * AR_ht**0.166 * (1 + S_e/S_ht)**0.1 hor_tail_weight = cf.pounds_to_kg(hor_tail_weight) return hor_tail_weight
def det_fuselage_weight(W_dg, L, S_f, taper, B_w, quarter_chord_sweep, L_D_ratio, cargo_doors = 1, fuselage_mounted_lg = True): """ Inputs: W_dg = design gross weigth in kg L = fuselage structural length in m (no radome/nosecone and tail cap) S_f = fuselage wetted area in m^2 taper = taper ratio B_w = wing span in m quarter_chord_sweep = sweep angle at the quarter chord line in degrees L_D_ratio = the lift over drag ratio of the aircraft conditional inputs: K_door = factor for the cargo doors (1 for no cargo door, 1.06 for one side cargo door, 1.12 for 2 side cargo doors) K_lg = factor for landing gear (1.12 for fuselage mounted landing gear, 1 otherwise) outputs: fuselage weight in kg """ N_z = 1.5* lim_load_factor(W_dg) W_dg = cf.kg_to_pounds(W_dg) L = cf.meter_to_feet(L) S_f = cf.metersquared_to_feetsquared(S_f) B_w = cf.meter_to_feet(B_w) quarter_chord_sweep = quarter_chord_sweep * (np.pi/180) K_door = 1 + cargo_doors * 0.06 K_lg = 1 if fuselage_mounted_lg: K_lg = 1.12 K_ws = 0.75 * (1 + 2 * taper)/(1 + taper) * (B_w * np.tan(quarter_chord_sweep)/L) fuselage_weight = 0.3280 * K_door * K_lg * (W_dg * N_z)**0.5 * L**0.25 * S_f**0.302 * (1 + K_ws)**0.04 * L_D_ratio**0.10 fuselage_weight = cf.pounds_to_kg(fuselage_weight) return fuselage_weight
def det_ver_tail_weight(W_dg, L_t, S_vt, quarter_chord_sweep_vt, AR_vt, t_c_root_vt, K_z = 1, TTail = True): """ Inputs: W_dg = design gross weigth in kg L_t = tail length (wing quarter MAC to tail quarter MAC) in m S_vt = vertical tail area in m^2 quarter_chord_sweep_vt = sweep angle of the vertical tail at the quarter chord line in degrees AR_vt = aspect ratio of the vertical tail t_c_root_vt = thickness to chord ratio at the root of the vertical tail conditional inputs: K_z = Aircraft yawing radius of gyration in ft (usually L_t) outputs: vertical tail weight in kg """ if TTail: H_ht = 1 H_vt = 1 else: H_ht = 0 H_vt = 1 N_z = 1.5* lim_load_factor(W_dg) W_dg = cf.kg_to_pounds(W_dg) L_t = cf.meter_to_feet(L_t) S_vt = cf.metersquared_to_feetsquared(S_vt) quarter_chord_sweep_vt = quarter_chord_sweep_vt * (np.pi/180) if K_z == 1: K_z = L_t ver_tail_weight = 0.0026 * (1 + H_ht/H_vt)**0.225 * W_dg**0.556 * N_z**0.536 * L_t**-0.5 * S_vt**0.5 * K_z**0.875 * np.cos(quarter_chord_sweep_vt)**-1 * AR_vt**0.35 * t_c_root_vt**-0.5 ver_tail_weight = cf.pounds_to_kg(ver_tail_weight) return ver_tail_weight
def det_electrical_weight(L_a, N_en, R_kva = 50, N_gen = 0): """ inputs: L_a = electrical routing distance, generators to avionics to cockpit, in m conditional inputs: R_kva = system electrical rating typically 40-60 in kV * A N_gen = number of generators, typically number of engines N_en = number of engines outputs: the total weight of the electrical system in kg """ L_a = cf.meter_to_feet(L_a) if N_gen == 0: N_gen = N_en if N_gen == 0: raise NameError("No generators?") electrical_weight = 7.291 * R_kva**0.782 * L_a**0.346 * N_gen**0.10 electrical_weight = cf.pounds_to_kg(electrical_weight) return electrical_weight