Source code for RCAIDE.Library.Methods.Aerodynamics.AERODAS.pre_stall_coefficients

# RCAIDE/Library/Methods/Aerdoynamics/AERODAS/pre_stall_coefficients.py
# 
# 
# Created:  Jul 2024, M. Clarke 

# ----------------------------------------------------------------------------------------------------------------------
# Imports 
# ----------------------------------------------------------------------------------------------------------------------  
from RCAIDE.Framework.Core import Data

# python imports 
import numpy as np

# ----------------------------------------------------------------------------------------------------------------------
# Pre Stall Coefficients
# ----------------------------------------------------------------------------------------------------------------------    
[docs] def pre_stall_coefficients(state,settings,geometry): """Uses the AERODAS method to determine prestall parameters for lift and drag for a single wing Assumptions: None Source: NASA TR: "Models of Lift and Drag Coefficients of Stalled and Unstalled Airfoils in Wind Turbines and Wind Tunnels" by D. A. Spera Inputs: state.conditions.aerodynamics.angle_of_attack settings.section_zero_lift_angle_of_attack geometry. section. angle_attack_max_prestall_lift zero_lift_drag_coefficient pre_stall_maximum_drag_coefficient_angle pre_stall_maximum_lift_coefficient pre_stall_lift_curve_slope pre_stall_maximum_lift_drag_coefficient Outputs: CL1 (coefficient of lift) [Unitless] CD1 (coefficient of drag) [Unitless] (packed in state.conditions.aerodynamics.pre_stall_coefficients[geometry.tag]) Properties Used: N/A """ # unpack inputs wing = geometry alpha = state.conditions.aerodynamics.angle_of_attack * 1.0 A0 = settings.section_zero_lift_angle_of_attack ACL1 = wing.section.angle_attack_max_prestall_lift ACD1 = wing.pre_stall_maximum_drag_coefficient_angle CL1max = wing.pre_stall_maximum_lift_coefficient S1 = wing.pre_stall_lift_curve_slope CD1max = wing.pre_stall_maximum_lift_drag_coefficient CDmin = wing.section.minimum_drag_coefficient ACDmin = wing.section.minimum_drag_coefficient_angle_of_attack if wing.vertical == True: alpha = 0. * np.ones_like(alpha) # Equation 6c RCL1 = S1*(ACL1-A0)-CL1max RCL1[RCL1<=0] = 1.e-16 # Equation 6d N1 = 1 + CL1max/RCL1 # Equation 6a or 6b depending on the alpha CL1 = 0.0 * np.ones_like(alpha) CL1[alpha>A0] = S1*(alpha[alpha>A0]-A0)-RCL1[alpha>A0]*((alpha[alpha>A0]-A0)/(ACL1[alpha>A0]-A0))**N1[alpha>A0] CL1[alpha==A0] = 0.0 CL1[alpha<A0] = S1*(alpha[alpha<A0]-A0)+RCL1[alpha<A0]*((A0-alpha[alpha<A0])/(ACL1[alpha<A0]-A0))**N1[alpha<A0] # M what is m? M = 2. # Does this need changing # Equation 7a con = np.logical_and((2*A0-ACD1)<=alpha,alpha<=ACD1) CD1 = np.ones_like(alpha) CD1[con] = CDmin[con] + (CD1max[con]-CDmin[con])*((alpha[con] - ACDmin)/(ACD1[con]-ACDmin))**M # Equation 7b CD1[np.logical_not(con)] = 0. # Pack outputs wing_result = Data( lift_coefficient = CL1, drag_coefficient = CD1 ) state.conditions.aerodynamics.pre_stall_coefficients[wing.tag] = wing_result return CL1, CD1