naca | Generate 4 and 5 digit NACA airfoil sections | SMS library
kandi X-RAY | naca Summary
kandi X-RAY | naca Summary
Generate 4 and 5 digit NACA airfoil sections
Support
Quality
Security
License
Reuse
Top functions reviewed by kandi - BETA
- Calculates the Naca number
- Calculates the center of a given number
- Linear interpolation
- Convert a number to a nacian
- Generate linspace from start to stop
- Plot a series of points
- Synthesize a number
- Plot data
- Show the plot
naca Key Features
naca Examples and Code Snippets
Community Discussions
Trending Discussions on naca
QUESTION
I have a NACA csv file containing the X and Y coordinates for an airfoil.
What I'm trying to do is, giving a circle from an angle theta to get the coordinate X. From that X, obtain the Y coordinate from the NACA profil.
For the needs of my problem, I want to divide the profil in two: extrados and intrados with: _ extrados: profil for y values positive _ intrados: profil for y values negative
For now, I have this:
...ANSWER
Answered 2021-Jan-25 at 20:52Well I can't say I've fully understood the "circle" part exactly. But as you've asked for splitting the profile into upper and lower parts and then making interpolation work, this code can help you.
QUESTION
I have a dataset for credit card transaction.
I split this dataset by group using below code
...ANSWER
Answered 2020-Dec-20 at 03:28- See inline notation for code explanation
pandas.core.groupby.GroupBy.size
pandas.Series.reset_index
pandas.Series.quantile
pandas.cut
pandas.DataFrame.merge
pathlib
pandas.DataFrame.iloc
pandas.DataFrame.to_csv
QUESTION
import numpy as np
import math
import matplotlib.pyplot as plt
%matplotlib inline
#Class to calculate Camber and Thickness Distribution
class naca: # defining class naca
def __init__(self,airfoil):
self.airfoil = airfoil
print ('NACA Airfoil is',airfoil ,'\n')
self.__maxcamber=int(airfoil[0:1])/100
print ('Maximum Camber of airfoil as a %age of chord is' ,self.__maxcamber *100)
self.__pos=int(airfoil[1:2])/10
print ('Position of maximum camber from leading edge as a %age of chord is' ,self.__pos*100)
self.__thick=int(airfoil[2:4])/100
print ('Maximum Thickness of airfoil as a %age of chord is' ,self.__thick * 100 ,'\n')
#Function to calculate Camber
def camber(self,x): # defining camber function
if x < self.__pos and x>=0:
z=(self.__maxcamber/(self.__pos**2))*((2*self.__pos*x)-x**2)
return z
elif x>=self.__pos and x<=1:
z=(self.__maxcamber/((1-self.__pos)**2))*(1-(2*self.__pos)+(2*self.__pos*x)-x**2)
return z
else:
raise Exception ('Entered value of x/c should be between 0 to 1')
#Function to calculate Thickness
def thickness (self,x): # defining thickness function
if 0<=x<=1:
t= 5*self.__thick*(0.2969*math.sqrt(x) - 0.1260*x - 0.3516*x**2 + 0.2843*x**3 - 0.1036*x**4)
return t
else:
raise Exception ('Entered value of x/c should be between 0 to 1')
#Class to calculate x-derivative of Camber and Thickness distribution function
class derivative(naca): # parent class naca mentioned in the bracket
def __init__(self,airfoil):
super().__init__(airfoil) # calling the previous class attributes
# Finding x-derivative of camber
def d_camber(self,xa):
h=0.01
if xa==0:
dx=(super().camber(xa+h)-super().camber(xa))/h # forward differencing
return dx
elif xa==1:
dx=(super().camber(xa)-super().camber(xa-h))/h # backward differencing
return dx
else:
dx=(super().camber(xa+h)-super().camber(xa-h))/(2*h) # central differencing
return dx
# Finding x-derivative of thickness
def d_thick(self,xa):
h=0.01
if xa==0:
dt=(super().thickness(xa+h)-super().thickness(xa))/h # forward differencing
return dt
elif xa==1:
dt=(super().thickness(xa)-super().thickness(xa-h))/h # backward differencing
return dt
else:
dt=(super().thickness(xa+h)-super().thickness(xa-h))/(2*h) # central differencing
return dt
#Class to calculate flow around an arbitary airfoil using thin-airfoil theory
class thinairfoiltheory(derivative): #parent class mentioned in the bracket
def __init__(self, airfoil):
super().__init__(airfoil) #calling the previous class attributes
def sectional(self,alphad,f):
n=15 ### it is not taking value more than 15. n is actually related to the number of division used in intergration
##check how to give n=100.For n>15 it is giving error???
#we have to increase thye value of n for accuracy
alphar=alphad*(np.pi/180)
thetal=0
thetah=np.pi
h=(np.pi-0)/n
th=0
sum1=0
sum2=0
sum3=0
for i in range(1, n): #composite trapezoidal rule used for integration
th=th+h
x=0.5*(1-np.cos(th))
sum1=sum1+super().d_camber(x)
sum2=sum2+(super().d_camber(x)*np.cos(th))
sum3=sum3+(super().d_camber(x)*np.cos(2*th))
xl=0.5*(1-np.cos(thetal))
xh=0.5*(1-np.cos(thetah))
finalsum1=(h/2)*(super().d_camber(xl)+super().d_camber(xh))+(h*sum1)
a0=(1/np.pi)*finalsum1
finalsum2=(h/2)*(((super().d_camber(xl))*np.cos(thetal))+((super().d_camber(xh))*np.cos(thetah)))+(h*sum2)
a1=(2/np.pi)*finalsum2
finalsum3=(h/2)*(((super().d_camber(xl))*np.cos(2*thetal))+((super().d_camber(xh))*np.cos(2*thetah)))+(h*sum3)
a2=(2/np.pi)*finalsum3
cl=2*(np.pi*(alphar-a0)+(np.pi/2)*a1)
cmc=-(np.pi/4)*(a1-a2)
#print("sectional lift coefficient", cl)
#print("quatercord point moment",cmc)
if f==1:
return cl
elif f==2:
return cmc
def plot(self,ff):
deg=np.linspace(0,30,50)
liftcoff=self.sectional(deg,1)
momcoff=self.sectional(deg,2)
if ff==1: #graph for lift coefficient
plt.plot(deg,liftcoff)
plt.rcParams['figure.figsize'] = (10, 6) #This fixes the size of plot displayed below
plt.rcParams.update({'font.size': 15}) #This fixes the font size of parameters in the plot below
plt.xlabel('Angle of attack in degress') #This labels the x-axis
plt.ylabel('Liff coeff') #This labels the y-axis
plt.grid(b=True, color='black', alpha=0.3,linewidth=1)
elif ff==2: #graph for moment coefficient
##the moment coeff graph is not plotting.I cannot figure out the problem???
plt.plot(deg,momcoff)
plt.rcParams['figure.figsize'] = (10, 6) #This fixes the size of plot displayed
plt.rcParams.update({'font.size': 15}) #This fixes the font size of parameters
plt.xlabel('Angle of attack in degress') #This labels the x-axis
plt.ylabel('mom coeff') #This labels the y-axis
plt.grid(b=True, color='black', alpha=0.3,linewidth=1)
...ANSWER
Answered 2020-Sep-27 at 08:46Your error is at this line of code cmc=-(np.pi/4)*(a1-a2)
, for ff=2 your sectional() function will return cmc, which is a constant. I think your formula must be missing alphar to calculate the moment coefficient for different angles.
QUESTION
I'm trying to create a GUI to collect three inputs from a user, where the first input has two options (based on a Listbox), like the image below (where the option "NACA" is selected):
The problem is with the Listbox. I guess the options are overlapping each other. For example, If I select the NACA option (image above), and then I select the .txt option, some part of the NACA label remains:
And of course, just the labels are appearing, not the entry_boxes to type inside (if I delete the part of the listBox, the entry_boxes of the last two input appers, so I really guess the problem is with the ListBox)
...ANSWER
Answered 2020-Aug-29 at 16:14The problem is that while you clicking button each time, you are creating label each time, if you want to change the text in the label you created,use 'config()'
change your code like this,
QUESTION
import numpy as np
import matplotlib.pyplot as plt
Cp_0=-0.464
M=np.arange(0.3,1,0.1) #Mach number for range<0.3-1>
Cp=(2/(1.4*M**2))*(((1+0.2*M**2)/(1.2))**3.5-1) #Aerodynamic relation for isentropic flow
Cp_p_g=Cp_0/((1-M**2)**0.5) #prandtl-Glauert rule
plt.plot(M,Cp)
plt.plot(M,Cp_p_g)
plt.grid("major")
plt.title('NACA**-***') #Title varies on the NACA profiles that we work
plt.xlabel("M")
plt.ylabel("Cp")
...ANSWER
Answered 2020-May-29 at 11:43You can refine your x-meshgrid using linspace
and then look for the difference of the two curves
Community Discussions, Code Snippets contain sources that include Stack Exchange Network
Vulnerabilities
No vulnerabilities reported
Install naca
You can use naca like any standard Python library. You will need to make sure that you have a development environment consisting of a Python distribution including header files, a compiler, pip, and git installed. Make sure that your pip, setuptools, and wheel are up to date. When using pip it is generally recommended to install packages in a virtual environment to avoid changes to the system.
Support
Reuse Trending Solutions
Find, review, and download reusable Libraries, Code Snippets, Cloud APIs from over 650 million Knowledge Items
Find more librariesStay Updated
Subscribe to our newsletter for trending solutions and developer bootcamps
Share this Page