Пример #1
0
    def eval_geometry(self):
        fuselage_length = self.aircraft.airframe.fuselage.length
        fuselage_height = self.aircraft.airframe.fuselage.height
        tail_cone_length = self.aircraft.airframe.fuselage.tail_cone_length
        wing_sweep25 = self.aircraft.airframe.wing.sweep25

        self.height = np.sqrt(self.aspect_ratio*self.area)
        self.c_root = 2*self.area/(self.height*(1+self.taper_ratio))
        self.c_tip = self.taper_ratio*self.c_root

        self.sweep25 = max(unit.rad_deg(25.), wing_sweep25 + unit.rad_deg(10.)) # Empirical law

        self.x_anchor = 0.85       # Locate self versus end fuselage length
        x_root = fuselage_length*(1-tail_cone_length/fuselage_length*(1-self.x_anchor)) - self.c_root
        x_tip = x_root + 0.25*(self.c_root-self.c_tip) + self.height*np.tan(self.sweep25)

        y_root = 0.
        y_tip = 0.

        z_root = fuselage_height
        z_tip = z_root + self.height

        self.mac = self.height*(self.c_root**2+self.c_tip**2+self.c_root*self.c_tip)/(3*self.area)
        x_mac = x_root+(x_tip-x_root)*self.height*(2*self.c_tip+self.c_root)/(6*self.area)
        y_mac = 0.
        z_mac = z_tip**2*(2*self.c_tip+self.c_root)/(6*self.area)

        self.lever_arm = (x_mac + 0.25*self.mac) - (x_mac + 0.25*self.mac)

        self.loc_root = np.array([x_root, y_root, z_root])
        self.loc_tip = np.array([x_tip, y_tip, z_tip])
        self.loc_mac = np.array([x_mac, y_mac, z_mac])

        self.frame_origin = [x_root, 0., z_root]
        self.frame_angles = [0., 0., 0.]

        self.gross_wet_area = 2.01*self.area
        self.net_wet_area = self.gross_wet_area

        self.aero_length = self.mac
        self.form_factor = 1.40
Пример #2
0
    def eval_geometry(self):
        htp_loc_tip = self.aircraft.airframe.horizontal_stab.loc_tip
        wing_sweep25 = self.aircraft.airframe.wing.sweep25

        self.height = np.sqrt(self.aspect_ratio*(0.5*self.area))
        self.c_root = 2*(0.5*self.area)/(self.height*(1+self.taper_ratio))
        self.c_tip = self.taper_ratio*self.c_root

        self.sweep25 = max(unit.rad_deg(25.), wing_sweep25 + unit.rad_deg(10.)) # Empirical law

        x_root = htp_loc_tip[0]
        x_tip = x_root + 0.25*(self.c_root-self.c_tip) + self.height*np.tan(self.sweep25)

        y_root = htp_loc_tip[1]
        y_tip = htp_loc_tip[1]

        z_root = htp_loc_tip[2]
        z_tip = z_root + self.height

        self.mac = self.height*(self.c_root**2+self.c_tip**2+self.c_root*self.c_tip)/(3*(0.5*self.area))
        x_mac = x_root+(x_tip-x_root)*self.height*(2*self.c_tip+self.c_root)/(6*(0.5*self.area))
        y_mac = y_tip
        z_mac = z_tip**2*(2*self.c_tip+self.c_root)/(6*self.area)

        self.lever_arm = (x_mac + 0.25*self.mac) - (x_mac + 0.25*self.mac)

        self.loc_root = np.array([x_root, y_root, z_root])
        self.loc_tip = np.array([x_tip, y_tip, z_tip])
        self.loc_mac = np.array([x_mac, y_mac, z_mac])

        self.frame_origin = [x_root, y_root, z_root]
        self.frame_angles = [0., 0., 0.]

        self.gross_wet_area = 2.01*self.area
        self.net_wet_area = self.gross_wet_area

        self.aero_length = self.mac
        self.form_factor = 1.40
Пример #3
0
    def eval_geometry(self):
        fuselage_length = self.aircraft.airframe.fuselage.length
        fuselage_height = self.aircraft.airframe.fuselage.height
        fuselage_cone_length = self.aircraft.airframe.fuselage.tail_cone_length
        wing_sweep25 = self.aircraft.airframe.wing.sweep25
        wing_loc_mac = self.aircraft.airframe.wing.loc_mac
        wing_mac = self.aircraft.airframe.wing.mac

        self.span = np.sqrt(self.aspect_ratio*self.area)
        y_axe = 0.
        y_tip = 0.5*self.span

        htp_z_wise_anchor = 0.80       # Locate HTP versus end fuselage height
        z_axe = htp_z_wise_anchor*fuselage_height
        z_tip = z_axe + y_tip*np.tan(self.dihedral)

        self.c_axe = 2.*self.area/(self.span*(1+self.taper_ratio))
        self.c_tip = self.taper_ratio*self.c_axe

        self.sweep25 = wing_sweep25 + unit.rad_deg(5)     # Design rule

        self.mac = self.span*(self.c_axe**2+self.c_tip**2+self.c_axe*self.c_tip)/(3.*self.area)
        y_mac = y_tip**2*(2*self.c_tip+self.c_axe)/(3*self.area)
        z_mac = z_tip**2*(2*self.c_tip+self.c_axe)/(3*self.area)
        x_tip_local = 0.25*(self.c_axe-self.c_tip) + y_tip*np.tan(self.sweep25)
        x_mac_local = y_tip*x_tip_local*(self.c_tip*2.+self.c_axe)/(3.*self.area)

        htp_x_wise_anchor = 0.85
        x_axe = fuselage_length*(1-fuselage_cone_length/fuselage_length*(1-htp_x_wise_anchor)) - self.c_axe

        x_tip = x_axe + x_tip_local
        x_mac = x_axe + x_mac_local

        self.lever_arm = (x_mac + 0.25*self.mac) - (wing_loc_mac[0] + 0.25*wing_mac)

        self.loc_axe = np.array([x_axe, y_axe, z_axe])
        self.loc_tip = np.array([x_tip, y_tip, z_tip])
        self.loc_mac = np.array([x_mac, y_mac, z_mac])

        self.frame_origin = self.loc_axe
        self.frame_angles = [0., 0., 0.]

        self.gross_wet_area = 1.63*self.area
        self.net_wet_area = self.gross_wet_area

        self.aero_length = self.mac
        self.form_factor = 1.40
Пример #4
0
    def __init__(self, aircraft):

        super(HTP_H, self).__init__(aircraft)

        wing_area = aircraft.airframe.wing.area

        self.area = 0.33*wing_area  # Coupling variable
        self.span = None
        self.aspect_ratio = 5.0     # Design rule
        self.taper_ratio = 0.45     # Design rule
        self.toc = 0.10             # Design rule
        self.sweep25 = None
        self.dihedral = unit.rad_deg(5)     # HTP dihedral
        self.volume = 0.94                  # Design rule
        self.lever_arm = None

        self.loc_root = np.full(3,None)     # Position of root chord leading edge
        self.c_root = None                  # root chord length

        self.loc_tip = np.full(3,None)      # Position of tip chord leading edge
        self.c_tip = None                   # tip chord length

        self.loc_mac = np.full(3,None)      # Position of MAC chord leading edge
        self.mac = None
Пример #5
0
    def eval_geometry(self):
        wing_attachment = self.aircraft.arrangement.wing_attachment
        cruise_mach = self.aircraft.requirement.cruise_mach
        fuselage_width = self.aircraft.airframe.fuselage.width
        fuselage_length = self.aircraft.airframe.fuselage.length
        fuselage_height = self.aircraft.airframe.fuselage.height

        self.toc_tip = 0.10
        self.toc_kink = self.toc_tip + 0.01
        self.toc_root = self.toc_kink + 0.03

        self.sweep25 = 1.6*max(0.,(cruise_mach - 0.5))     # Empirical law

        self.dihedral = unit.rad_deg(5.)

        if(self.morphing=="aspect_ratio_driven"):   # Aspect ratio is driving parameter
            self.span = np.sqrt(self.aspect_ratio*self.area)
        elif(self.morphing=="span_driven"): # Span is driving parameter
            self.aspect_ratio = self.span**2/self.area
        else:
            print("geometry_predesign_, wing_morphing index is unkown")

        y_root = 0.5*fuselage_width
        y_kink = self.loc_kink[0]
        y_tip = 0.5*self.span

        if(15<unit.deg_rad(self.sweep25)):  # With kink
          Phi100intTE = max( 0. , 2.*(self.sweep25-unit.rad_deg(32.)) )
          tan_phi100 = np.tan(Phi100intTE)
          A = ((1-0.25*self.taper_ratio)*y_kink+0.25*self.taper_ratio*y_root-y_tip) / (0.75*y_kink+0.25*y_root-y_tip)
          B = (np.tan(self.sweep25)-tan_phi100) * ((y_tip-y_kink)*(y_kink-y_root)) / (0.25*y_root+0.75*y_kink-y_tip)
          self.c_root = (self.area-B*(y_tip-y_root)) / (y_root+y_kink+A*(y_tip-y_root)+self.taper_ratio*(y_tip-y_kink))
          self.c_kink = A*self.c_root + B
          self.c_tip = self.taper_ratio*self.c_root

        else:		# Without kink
          self.c_root = 2.*self.area / (2.*y_root*(1.-self.taper_ratio) + (1.+self.taper_ratio)*np.sqrt(self.aspect_ratio*self.area))
          self.c_tip = self.taper_ratio*self.c_root
          self.c_kink = ((y_tip-y_kink)*self.c_root + (y_kink-y_root)*self.c_tip) / (y_tip-y_root)


        tan_phi0 = 0.25*(self.c_kink-self.c_tip)/(y_tip-y_kink) + np.tan(self.sweep25)

        self.mac = 2.*( 3.*y_root*self.c_root**2 \
                       +(y_kink-y_root)*(self.c_root**2+self.c_kink**2+self.c_root*self.c_kink) \
                       +(y_tip-y_kink)*(self.c_kink**2+self.c_tip**2+self.c_kink*self.c_tip) \
                      )/(3*self.area)

        y_mac = (  3.*self.c_root*y_root**2 \
                 +(y_kink-y_root)*(self.c_kink*(y_root+y_kink*2.)+self.c_root*(y_kink+y_root*2.)) \
                 +(y_tip-y_kink)*(self.c_tip*(y_kink+y_tip*2.)+self.c_kink*(y_tip+y_kink*2.)) \
                )/(3.*self.area)

        x_mac_local = ( (y_kink-y_root)*tan_phi0*((y_kink-y_root)*(self.c_kink*2.+self.c_root) \
                       +(y_tip-y_kink)*(self.c_kink*2.+self.c_tip))+(y_tip-y_root)*tan_phi0*(y_tip-y_kink)*(self.c_tip*2.+self.c_kink) \
                      )/(3*self.area)

        x_root = 0.33*fuselage_length**1.1 - (x_mac_local + 0.25*self.mac)
        x_kink = x_root + (y_kink-y_root)*tan_phi0
        x_tip = x_root + (y_tip-y_root)*tan_phi0

        x_mac = x_root+( (x_kink-x_root)*((y_kink-y_root)*(self.c_kink*2.+self.c_root) \
                            +(y_tip-y_kink)*(self.c_kink*2.+self.c_tip))+(x_tip-x_root)*(y_tip-y_kink)*(self.c_tip*2.+self.c_kink) \
                           )/(self.area*3.)
        if (wing_attachment=="low"):
            z_root = 0.
        else:
            z_root = fuselage_height - 0.5*self.toc_root*self.c_root

        z_kink = z_root+(y_kink-y_root)*np.tan(self.dihedral)
        z_tip = z_root+(y_tip-y_root)*np.tan(self.dihedral)

        self.loc_root = np.array([x_root, y_root, z_root])
        self.loc_kink = np.array([x_kink, y_kink, z_kink])
        self.loc_tip = np.array([x_tip, y_tip, z_tip])
        self.loc_mac = np.array([x_mac, y_mac, None])

        self.frame_origin = [x_root, 0., z_root]
        self.frame_angles = [0., 0., 0.]

        self.gross_wet_area = 2.00*(self.area - self.c_root*fuselage_width)
        self.net_wet_area = self.gross_wet_area

        self.aero_length = self.mac
        self.form_factor = 1.40

        # Wing setting
        #-----------------------------------------------------------------------------------------------------------
        g = earth.gravity()
        r,gam,Cp,Cv = earth.gas_data()

        disa = 0.
        rca = self.aircraft.requirement.cruise_altp
        mach = self.aircraft.requirement.cruise_mach
        mass = 0.95*self.aircraft.weight_cg.mtow

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

        cza_wing = self.cza(mach, fuselage_width, self.aspect_ratio, self.span, self.sweep25)

        # AoA = 2.5° at cruise start
        self.setting = (0.97*mass*g)/(0.5*gam*pamb*mach**2*self.area*cza_wing) - unit.rad_deg(2.5)