Example #1
0
 def __init__(self,aircraft,velocity,altitude,updComponents):
     self.ac = aircraft
     self.refArea = self.ac.wing.area
     self.aircraftDrag = AircraftDrag()
     self.get_friction_drag(velocity,altitude)
     if updComponents:
         self.get_components_drag()
     else:
         self.aircraftDrag.components = aircraft.drag.components
     self.aircraftDrag.update_total()
Example #2
0
class AnalysisFW:
    """
    Wrapper class for drag analysis containing friction drag and components 
    drag using table lookup. Aircraft main wing area is used as reference 
    area. 

    Parameters
    ----------
    
    aircraft : aircraft
        aircraft object
    velocity : float, m/sec
        velocity at which parasite drag will be calculated
    altitude : float, meter
        altitude at which parasite drag will be calculated
    updComponents : bool
        Should be true if components list was updated or at first call. 
        Calculation of components drag takes some time due to xls db 
        interface, so False option should be selected in most of the cases.


    Notes
    -----
    
    Only conventional configuration provided by aircraft class can be analyzed. 
    For unconventional configurations use **Friction** and **PartsDrag** 
    separately.


    Examples
    --------
    
    >>> import aircraft
    >>> ac = aircraft.load('sampleInput2')
    >>> V = 50.0 #m/sec
    >>> h = 2000. #m
    >>> drag = Analysis(ac,V,h,False)
    >>> aircraftDrag = drag.get_aircraft_drag()
    >>> aircraftDrag.display()
    ========================================
    Total drag components breakdown
    ========================================
    Name                      | Drag coef. |
    ----------------------------------------
    main wing                   1.0188e-02
    horizontal stab.            1.8388e-03
    ...
    antenna                     1.0526e-03
    ----------------------------------------
    TOTAL                       2.4408e-02
    ----------------------------------------
    """
    def __init__(self,aircraft,velocity,altitude,updComponents):
        self.ac = aircraft
        self.refArea = self.ac.wing.area
        self.aircraftDrag = AircraftDrag()
        self.get_friction_drag(velocity,altitude)
        if updComponents:
            self.get_components_drag()
        else:
            self.aircraftDrag.components = aircraft.drag.components
        self.aircraftDrag.update_total()
    def get_friction_drag(self,velocity,altitude):
        """
        Calculates friction drag of an aircraft using Friction class 
        at given velocity and altitude.
        
        Returns
        -------
        
        items : DragList
            list of the drag components with drag coefficients used for 
            friction drag calculation (Body, wing, empennage)
        """
        frictionDrag = Friction(self.refArea)
        frictionDrag.set_flight_conditions(velocity,altitude)
        items = DragList()
        items.add_item( frictionDrag.analyze_wing(self.ac.wing,'main wing') )
        self.aircraftDrag.friction = items
        return items
    def get_components_drag(self):
        """
        Calculates components drag using PartsDrag class methods using table 
        lookup methods.
        
        Returns
        -------
        
        items : DragList
            list of the drag components with drag coefficients obtained by 
            PartsDrag (langing gear, antenna etc.)
        """
        drag = PartsDrag(self.refArea)
        items = drag.get_items_drag(self.ac.drag.components)
        self.aircraftDrag.components = items
        return items
    def get_aircraft_drag(self):
        """
        Returns list of full drag components.
        """
        self.aircraftDrag.update_total()
        return self.aircraftDrag