Source code for RCAIDE.Library.Methods.Aerodynamics.Airfoil_Panel_Method.hess_smith

# RCAIDE/Methods/Aerodynamics/Airfoil_Panel_Method/hess_smith.py
# 
# 
# Created:  Dec 2023, M. Clarke
# Modified: Apr 2023, N. Nanjappa

# ----------------------------------------------------------------------------------------------------------------------
#  IMPORT
# ----------------------------------------------------------------------------------------------------------------------
# RCAIDE imports   
from .panel_geometry import panel_geometry
from .infl_coeff  import infl_coeff
from .velocity_distribution import velocity_distribution

# pacakge imports  
import numpy as np  
from scipy.linalg import solve
 
# ----------------------------------------------------------------------------------------------------------------------
# hess_smith
# ---------------------------------------------------------------------------------------------------------------------- 
[docs] def hess_smith(x_coord,y_coord,alpha,Re,npanel): """Computes the incompressible, inviscid flow over an airfoil of arbitrary shape using the Hess-Smith panel method. Assumptions: None Source: "An introduction to theoretical and computational aerodynamics", J. Moran, Wiley, 1984 Inputs x - Vector of x coordinates of the surface [unitess] y - Vector of y coordinates of the surface [unitess] alpha - Airfoil angle of attack [radians] npanel - Number of panels on the airfoil. The number of nodes [unitess] is equal to npanel+1, and the ith panel goes from node i to node i+1 Outputs cl - Airfoil lift coefficient [unitless] cd - Airfoil drag coefficient [unitless] cm - Airfoil moment coefficient about the c/4 [unitless] x_bar - Vector of x coordinates of the surface nodes [unitless] y_bar - Vector of y coordinates of the surface nodes [unitless] cp - Vector of coefficients of pressure at the nodes [unitless] Properties Used: N/A """ ncases = len(alpha[0,:]) ncpts = len(Re) alpha_2d = np.repeat(alpha.T[np.newaxis,:, :], npanel, axis=0) # generate panel geometry data for later use l,st,ct,xbar,ybar,norm = panel_geometry(x_coord,y_coord,npanel,ncases,ncpts) # compute matrix of aerodynamic influence coefficients ainfl = infl_coeff(x_coord,y_coord,xbar,ybar,st,ct,npanel,ncases,ncpts) # ncases x ncpts x npanel+1 x npanel+1 # compute right hand side vector for the specified angle of attack b_2d = np.zeros((npanel+1,ncases, ncpts)) b_2d[:-1,:,:] = st*np.cos(alpha_2d) - np.sin(alpha_2d)*ct b_2d[-1,:,:] = -(ct[0,:,:]*np.cos(alpha_2d[-1,:,:]) + st[0,:,:]*np.sin(alpha_2d[-1,:,:]))-(ct[-1,:,:]*np.cos(alpha_2d[-1,:,:]) +st[-1,:,:]*np.sin(alpha_2d[-1,:,:])) qg = np.zeros((npanel+1, ncases, ncpts)) for i in range(ncases): for j in range(ncpts): A = ainfl[i, j, :, :] B = b_2d[:, i, j] qg[:, i, j] = solve(A, B) # compute the tangential velocity distribution at the midpoint of panels vt = velocity_distribution(qg,x_coord,y_coord,xbar,ybar,st,ct,alpha_2d,npanel,ncases,ncpts) return xbar,ybar,vt,norm