Beispiel #1
0
def von_mises(x, y, moment_z, moment_y, normal_force, I_zz, I_yy, area,
              tau_max):
    """Returns maximum Von Mises stress"""

    z = sp.width_wingbox(x) / 2

    #-my/I according to the formula, makes sense because for a positive Mz the top skin will be in compression
    moment_z_upperskin = -moment_z * (sp.height_wingbox(x) - abs(y)) / I_zz
    moment_z_lowerskin = -moment_z * y / I_zz

    moment_y_rightflange = -moment_y * z / I_yy
    moment_y_leftflange = -moment_y * -z / I_yy

    area = sp.cross_sectional_area(x)

    normal_force_stress = normal_force / area

    stress_x_lower = moment_z_lowerskin + normal_force_stress
    stress_x_upper = moment_z_upperskin + normal_force_stress

    stress_y_right = moment_y_rightflange
    stress_y_left = moment_y_leftflange

    vm_ll_1 = (stress_x_lower + stress_y_left) / 2 + np.sqrt((
        (stress_x_lower - stress_y_left) / 2)**2 + tau_max**2)
    vm_ll_2 = (stress_x_lower + stress_y_left) / 2 - np.sqrt((
        (stress_x_lower - stress_y_left) / 2)**2 + tau_max**2)
    vm_ll = np.sqrt(vm_ll_1**2 + vm_ll_2**2 - vm_ll_1 * vm_ll_2 +
                    3 * tau_max**2)

    vm_lr_1 = (stress_x_lower + stress_y_right) / 2 + np.sqrt((
        (stress_x_lower - stress_y_right) / 2)**2 + tau_max**2)
    vm_lr_2 = (stress_x_lower + stress_y_right) / 2 - np.sqrt((
        (stress_x_lower - stress_y_right) / 2)**2 + tau_max**2)
    vm_lr = np.sqrt(vm_lr_1**2 + vm_lr_2**2 - vm_lr_1 * vm_lr_2 +
                    3 * tau_max**2)

    vm_ur_1 = (stress_x_upper + stress_y_right) / 2 + np.sqrt((
        (stress_x_upper - stress_y_right) / 2)**2 + tau_max**2)
    vm_ur_2 = (stress_x_upper + stress_y_right) / 2 - np.sqrt((
        (stress_x_upper - stress_y_right) / 2)**2 + tau_max**2)
    vm_ur = np.sqrt(vm_ur_1**2 + vm_ur_2**2 - vm_ur_1 * vm_ur_2 +
                    3 * tau_max**2)

    vm_ul_1 = (stress_x_upper + stress_y_left) / 2 + np.sqrt((
        (stress_x_upper - stress_y_left) / 2)**2 + tau_max**2)
    vm_ul_2 = (stress_x_upper + stress_y_left) / 2 - np.sqrt((
        (stress_x_upper - stress_y_left) / 2)**2 + tau_max**2)
    vm_ul = np.sqrt(vm_ul_1**2 + vm_ul_2**2 - vm_ul_1 * vm_ul_2 +
                    3 * tau_max**2)

    return vm_ll, vm_lr, vm_ur, vm_ul
Beispiel #2
0
def normal_stress(x,y,moment_z,moment_y,normal_force,I_zz,I_yy,area):
    """Returns bending moment and normal force stress""" 
    
    z = sp.width_wingbox(x)/2
    
    #-my/I according to the formula, makes sense because for a positive Mz the top skin will be in compression
    moment_z_upperskin = -moment_z*(sp.height_wingbox(x)-abs(y))/I_zz
    moment_z_lowerskin = -moment_z*y/I_zz
    
    moment_y_rightflange = -moment_y*z/I_yy
    moment_y_leftflange = -moment_y*-z/I_yy
    
    area = sp.cross_sectional_area(x)
    
    normal_force_stress = normal_force/area
    
    normal_ru = moment_z_upperskin + moment_y_rightflange +     normal_force_stress 
    normal_lu = moment_z_upperskin + moment_y_leftflange +     normal_force_stress 
    normal_rl = moment_z_lowerskin + moment_y_rightflange +     normal_force_stress 
    normal_ll = moment_z_lowerskin + moment_y_leftflange +  normal_force_stress 
    
#    if max(normal_ru,normal_lu,normal_rl,normal_ll) == normal_ru:
#        print("Max tension at right upper corner")
#    elif max(normal_ru,normal_lu,normal_rl,normal_ll) == normal_lu:
#        print("Max tension at left upper corner")
#    elif max(normal_ru,normal_lu,normal_rl,normal_ll) == normal_rl:
#        print("Max tension at right lower corner")
#    elif max(normal_ru,normal_lu,normal_rl,normal_ll) == normal_ll:
#        print("Max tension at left lower corner")
#        
#    
#    if min(normal_ru,normal_lu,normal_rl,normal_ll) == normal_ru:
#        print("Max compression at right upper corner")
#    elif min(normal_ru,normal_lu,normal_rl,normal_ll) == normal_lu:
#        print("Max compression at left upper corner")
#    elif min(normal_ru,normal_lu,normal_rl,normal_ll) == normal_rl:
#        print("Max compression at right lower corner")
#    elif min(normal_ru,normal_lu,normal_rl,normal_ll) == normal_ll:
#        print("Max compression at left lower corner")
#        
#        
#    print("x: ",x)
#    print("Neutral axis: y =",sp.centroid_y(x),"(",sp.centroid_y(x)/sp.height_wingbox(x)*100,"%)",)
#    print("Maximum tension: ",max(normal_ru,normal_lu,normal_rl,normal_ll)/10**6,"MPa")
#    print("Maximum compression: ", min(normal_ru,normal_lu,normal_rl,normal_ll)/10**6,"MPa")
#    print("Normal force stress: ",normal_force_stress,"MPa")
#    print("")
    
    return normal_ru,normal_lu,normal_rl,normal_ll
Beispiel #3
0
perc_engine = p.engine_pos_perc
perc_strut = p.strut_pos_perc
perc_pod = p.pod_pos_perc

di = p.b / 2 / lengthdata
xi = np.zeros(lengthdata + 1)
for i in range(len(xi)):
    xi[i] = i * di

hi = []
bi = []
t = p.t_sheet
Izz = []
Iyy = []
for i in range(len(xi)):
    hi.append(height_wingbox(xi[i]))
    bi.append(width_wingbox(xi[i]))
    Izz.append(I_zz_wingbox(xi[i]))
    Iyy.append(I_yy_wingbox(xi[i]))

Lift, Chord, Yle, Drag, AeroMoment = read_aero_data("wing/datastrut4.txt",
                                                    lengthdata, V_cruise,
                                                    rho_cruise)
Frx, Fry, Fs, Mrz, Frz, Fsz, Mry, momentyi, momentzi, shearyi, shearzi, vyi, vny, vzi, vnz, xi, theta = CallForces(
    Lift, Yle, Drag, tot_thrust, Iyy, Izz, p.E_al2014, perc_engine, perc_strut,
    perc_pod)
lengthdata = len(Lift)
b = p.b

taumax = max_shear_stress(Lift, Drag, AeroMoment, Chord, shearyi, shearzi, hi,
                          bi, Izz, Iyy)
Beispiel #4
0
Izz_list = []
Iyy_list = []
first_moment_of_area_list = []
area_list = []
y_max_list = []
hi = []
bi = []


for x in x_pos:
    Izz_list.append(sp.I_zz_wingbox(x))
    Iyy_list.append(sp.I_yy_wingbox(x))
    first_moment_of_area_list.append(sp.first_moment_of_area_y(x))
    area_list.append(sp.cross_sectional_area(x))
    y_max_list.append(sp.y_max(x))
    hi.append(sp.height_wingbox(x))
    bi.append(sp.width_wingbox(x))



lengthdata = 100
Lift, Chord, Yle, Drag, AeroMoment = read_aero_data("wing/datastrut5.txt", lengthdata, V_cruise, rho_cruise)
Frx, Fry, Fs, Mrz, Frz, Fsz, Mry, momentyi, momentzi, shearyi, shearzi, vyi, vny, vzi, vnz, xi, theta = CallForces(Lift, Yle, Drag, tot_thrust, Iyy_list, Izz_list , 70*10**9, perc_engine, perc_strut, perc_pod)
Forces1 = [['Frx = ', Frx], ['Fry = ', Fry], ['Fs = ', Fs], ['Mr = ', Mrz]]
Forces2 = [['Frz = ', Frz], ['Fsz = ', Fsz], ['Mry = ', Mry]]
#TESTING


### NORMAL STRESS CALCULATOR ###
def normal_stress(x,y,moment_z,moment_y,normal_force,I_zz,I_yy,area):
    """Returns bending moment and normal force stress"""