Ich habe trotzdem ein kleies, aber großer Problem und zwar immer noch die Fehlermeldung:
File "C:\Users\xxxxxxxxxxxx\Desktop\profilumstroemung_GH_02.py", line 315, in <module>
File "C:\Users\xxxxxxxxxxx\Desktop\profilumstroemung_GH_02.py", line 25, in get_zahl1
Ich weiß leider auch nicht weiter! Seit Tagen probiere ich nun, wobei ich sagen muss, dass ich nicht unbedingt der Python-Spezialist bin. Ich möchte jedoch lernen... Das Programm habe ich mit etwas Hilfe großteils selber geschrieben, eben mit dem Durchlesen von Tutorials. Nun stehe ich aber wirklich an und auf Google finde ich auch nichts. Ich habe die .py-Datei auf Google-Drive gestellt:
Code: Alles auswählen
import scipy as sp
import numpy as np
import math
import csv
from scipy import linalg
from scipy import mat
import matplotlib.pyplot as plt
from pylab import *
from Tkinter import *
from tkMessageBox import *
import Tkinter as tk
#--------------------------------------------------------Definitionen für Zeichenumwandlung---------------------------------------
CHOICE = "Auswählen"
def get_profile():
profile_sel = sar.get()
profile_part_1 = int(profile_sel[0])
profile_part_2 = int(profile_sel[1])
profile_part_3 = int(profile_sel[2:])
print (profile_part_1,profile_part_2,profile_part_3)
def get_zahl1():
#zahl1_sel = sar.get()
#zahl1 = int(zahl1_sel[0])
#print (zahl1)
return int(sar.get()[0])
#stell1 = get_zahl1()
def get_zahl2():
#zahl2 = int(sar.get()[1])
#print (zahl2)
return int(sar.get()[1])
#stell2 = get_zahl2()
def get_zahl3():
#zahl3 = int(sar.get()[2:])
#print (zahl3)
return int(sar.get()[2:])
#stell3 = get_zahl3()
def get_alpha():
#alpha_sel = xar.get()
#alpha = int(xar.get())
#print (alpha)
return int(xar.get())
#alp = get_alpha()
def get_panel():
#panel_sel = var.get()
#panel = int(var.get())
#print (panel)
return int(var.get())
#pan = get_panel()
#------------------------------------------------------------------------------------------------------------
#----------------------------- Grafische Eingabe---------------------------------------------
#-------------------------------------------------------------------------------------------------------
#---------------------------------------Def_ok!----------------------------
def ok():
if sar.get() == CHOICE:
print("Bitte zuerst Profil auswählen!")
return
stell1 = get_zahl1()
stell2 = get_zahl2()
stell3 = get_zahl3()
alpha = get_alpha()
panel = get_panel()
print (stell1, stell2, stell3, alp, pan)
plot (xp,cp)
xlabel('x-Achse')
ylabel('y-Achse')
title(r'Profil')
show()
#
# print "Profil:", (get_zahl1(), get_zahl2(), get_zahl3())
# print "Anstellwinkel:", (get_alpha())
# print "Panels:", (get_panel())
#--------------------------------------------Kopfzeile--------------------------------------------
app_win = tk.Tk()
app_win.geometry('700x600+300+100')
app_win.resizable(width=FALSE, height=FALSE)
app_win.title(u'PROFILBERECHNUNG ©Becherer/Fiorista/Huber/Sen')
#---------------------------------------------------------Profilauswahl-------------------------------------------------
sar = tk.StringVar()
sar.set(CHOICE)
profil = tk.OptionMenu(app_win, sar, "2412", "2415", "2418", "4408", "4412", "4415", "4418")
profil.config(justify= RIGHT, anchor= N, padx=20, pady=10, font=("Arial",15))
profil.place(x=30,y=40)
#-------------------------------------------------------------------Panelauswahl---------------------------------------------------
var = tk.StringVar()
var.set(CHOICE)
panel = tk.OptionMenu(app_win, var, "1", "10", "20", "30", "40", "50", "60", "70", "80", "90", "100", "110", "120", "130", "140", "150", "160", "170", "180", "190", "200")
panel.config(justify= RIGHT, anchor=W, padx=20, pady=10, font=("Arial",15))
panel.place(x=30, y=160)
#----------------------------------------------------------------Anstellwinkelauswahl-----------------------------------------------
xar = tk.StringVar()
xar.set(CHOICE)
alpha = tk.OptionMenu(app_win, xar, "-30", "-25", "-20", "-15", "-10", "-5", "-1", "0", "+1", "+5", "+10", "+15", "+20", "+25", "+30", "+35", "+40", "+45", "+50", "+55", "+60")
alpha.config(justify= RIGHT, anchor=E, padx=20, pady=10,font=("Arial",15))
alpha.place(x=320,y=40)
#---------------------------------------------------------------Texte vor den Radiobuttons---------------------------------------
w = Label(app_win, text="NACA-Profil:")
w.config(font=("Arial",15, 'bold underline'))
w.place(x=30, y=10)
w = Label(app_win, text=u"Anstellwinkel in °:")
w.config(font=("Arial",15, 'bold underline'))
w.place(x=320, y=10)
w = Label(app_win, text="Anzahl der Panels:")
w.config(font=("Arial",15, 'bold underline'))
w.place(x=30, y=130)
#--------------------------------------------------------------Trennstriche------------------------------------------------
w = Label(app_win, text="_____________________________________________________________")
w.config(font=("Arial",15, 'bold'))
w.place(x=10, y=215)
#------------------------------------------------------------------Checkbutton-----------------------------------------------------
va = IntVar()
va.set(0)
vb = IntVar()
vb.set(0)
vc = IntVar()
vc.set(0)
vd = IntVar()
vd.set(0)
ve = IntVar()
ve.set(0)
Label(app_win, text="""Auswahl:""", padx = 20, font=("Arial",20, 'bold')).place(x=30, y=250)
tk.Checkbutton(app_win, text="Zeige Profil", padx = 20, font=("Arial",15), variable=va).place(x=30, y=300)
Checkbutton(app_win, text="Zeige Druckverteilung (cp)", padx = 20, font=("Arial",15), variable=vb).place(x=30, y=340)
Checkbutton(app_win, text="Zeige Auftriebsverteilung (cl)", padx = 20, font=("Arial",15), variable=vc).place(x=30, y=380)
Checkbutton(app_win, text="Zeige Profil mit Druckverteilung", padx = 20, font=("Arial",15), variable=vd).place(x=30, y=420)
Checkbutton(app_win, text="Ausdruck der Druck- und Auftriebsbeiwerte", padx = 20, font=("Arial",15), variable=ve).place(x=30, y=460)
#--------------------------------------------------------------------Knöpfe-------------------------------------------------
button = Button(app_win, text="OK", command=ok)
button.config(font=("Arial",15, 'bold'), padx=20, pady=10)
button.place(x=430, y=530)
def callback():
if askyesno('Beenden', 'Wirklich beenden?'):
raise SystemExit
else:
command=ok
Button(text='Beenden', command=callback, font=("Arial",15, 'bold'), padx=20, pady=10).place(x=530, y=530)
#-------------------------------------------------------------------MouseOVER--------------------------------------------------------
b = Button(app_win, text='I', background='green', font=("Arial",25, 'bold'), padx=8, pady=1)
b.place(x=220, y=22)
def enterB(event):
b.configure(text='Auswählen eines 4-stelligen NACA-Profils,\nbezogen auf die Profilsehne:\n1.Ziffer: Profilnwölbung in %\n2.Ziffer: Wölbungsrücklage in Zehntel\n3. und 4.Ziffer: Max. Profildicke in %', background='white', font=("Arial",10))
def leaveB(event):
b.configure(text='I', background='green', font=("Arial",25,'bold'), padx=8, pady=1)
b.bind('<Enter>', enterB)
b.bind('<Leave>', leaveB)
c = Button(app_win, text='I', background='green', font=("Arial",25, 'bold'), padx=8, pady=1)
c.place(x=500, y=22)
def enterC(event):
c.configure(text='Auswahl des Winkels zwischen\nder Profilsehne und des\nfrei anströmenden Mediums.', background='white', font=("Arial",10))
def leaveC(event):
c.configure(text='I', background='green', font=("Arial",25,'bold'), padx=8, pady=1)
c.bind('<Enter>', enterC)
c.bind('<Leave>', leaveC)
d = Button(app_win, text='I', background='green', font=("Arial",25, 'bold'), padx=8, pady=1)
d.place(x=220, y=142)
def enterD(event):
d.configure(text='Auswahl der Genauigkeit, mit dem\ndas gewünschte Profil gezeichnet und\nberechnet werden soll. Panel=1 bedeutet,\n dass das Profil mit nur einer Geraden\n gezeichnet wird. Die Berechnung erfolgt\nhier mit einer dünnen Platte. Panel=100 bedeutet,\n dass das Profil aus 100 kleinen Geraden\n zusammengesetzt ist.', background='white', font=("Arial",10))
def leaveD(event):
d.configure(text='I', background='green', font=("Arial",25,'bold'), padx=8, pady=1)
d.bind('<Enter>', enterD)
d.bind('<Leave>', leaveD)
#------------------------------------------------------------------------------------------------------------------------------------------------------
#------------------------------------------------RECHENPROGRAMM--------------------------------------------------------------------------------------
#---------------------------------------------------------------------------------------------------------------------------------------------------------
#---------------------------Definition der Funktion-----------------------------
def F_PSI(L,x,y):
if abs(y) > 1.e-15:
z = 1./(4.*math.pi)*(2*y*math.atan((L-x)/y)+2*y*math.atan(x/y)+(L-x)*math.log(math.pow((L-x),2)+math.pow(y,2)) + x*math.log(math.pow(x,2)+math.pow(y,2))-2*L)
return z
else:
z = 1./(2.*math.pi)*((L-x)*math.log(abs(L-x)) + x*math.log(abs(x))-L)
return z
#---------------------------Definition u(x,y) ----------------------------------
def F_uq(L,x,y):
if abs(y) > 1.e-15:
z=1./(2.*math.pi)*(math.atan((L-x)/y)+math.atan(x/y))
else:
z=1./2.
# if (i == 0 ) and (j == 0):
# print("i = ",i," j = ",j," z = ",z," x = ",x," y = ",y," L = ",L)
return z
#---------------------------Definition v(x,y) ----------------------------------
def F_vq(L,x,y):
if (abs(y) < 1.e-15):
y = 0.
if abs(y) > 1.e-15:
z=1./(4.*math.pi)*(math.log(math.pow((L-x),2)+math.pow(y,2)) - math.log(math.pow(x,2)+math.pow(y,2)))
else:
z=1./(2.*math.pi)*(math.log(L-x) - math.log(x))
return z
#--------------------------DRUCKEN----------------------------------------------
def drucken():
writer = csv.writer(open("baudaten.csv", "wb"), delimiter = ";")
writer.writerow(["i", "xp", "yp", "xs", "ys"])
# 2.AUSGABE IN DATEI - Kommapunkt durch Beistrich ersetzt
for i in range(0,N+1,1):
xstringp = "%s" % xp[i]
ystringp = "%s" % yp[i]
xstrings = "%s" % xs[i]
ystrings = "%s" % ys[i]
xstringp=xstringp.replace(".", ",")
ystringp=ystringp.replace(".", ",")
xstrings=xstrings.replace(".", ",")
ystrings=ystrings.replace(".", ",")
baudaten = ([i, xstringp, ystringp, xstrings, ystrings])
writer.writerow(baudaten)
del baudaten
writer = csv.writer(open("dicke.csv", "wb"), delimiter = ";")
writer.writerow(["i", "xs", "yd"])
for i in range(0,N+1,1):
dicke = ([i, xs[i], yd[i]])
writer.writerow(dicke)
del dicke
writer = csv.writer(open("skelett.csv", "wb"), delimiter = ";")
writer.writerow(["i", "xs", "ys"])
for i in range(0,N+1,1):
xxxx = ([i, xs[i],ys[i]])
writer.writerow(xxxx)
del xxxx
return
#--------------------------DRUCKEN DRUCKVERTEILUNG -----------------------------------------
def druckenP():
writer = csv.writer(open("druckverteilung.csv", "wb"), delimiter = ";")
writer.writerow(["i", "xm", "ym", "w", "cp"])
# 2.AUSGABE IN DATEI - Kommapunkt durch Beistrich ersetzt
for i in range(0,N,1):
xstringp = "%s" % xp[i]
ystringp = "%s" % yp[i]
xmstring = "%s" % xm[i]
ymstring = "%s" % ym[i]
wstring = "%s" % w[i]
cpstring = "%s" % cp[i]
xmstring=xmstring.replace(".", ",")
ymstring=ymstring.replace(".", ",")
wstring=wstring.replace(".", ",")
cpstring=cpstring.replace(".", ",")
druckverteilung = ([i, xmstring, ymstring, wstring, cpstring])
writer.writerow(druckverteilung)
del druckverteilung
writer = csv.writer(open("dicke.csv", "wb"), delimiter = ";")
writer.writerow(["i", "xs", "yd"])
for i in range(0,N+1,1):
dicke = ([i, xs[i], yd[i]])
writer.writerow(dicke)
del dicke
writer = csv.writer(open("skelett.csv", "wb"), delimiter = ";")
writer.writerow(["i", "xs", "ys"])
for i in range(0,N+1,1):
xxxx = ([i, xs[i],ys[i]])
writer.writerow(xxxx)
del xxxx5
return
#---------------------------Eingabe des Benutzers-------------------------------
stelle1 = stell1 #float(input("Profilwölbung in %: "))
stelle2 = stell2 #float(input("Wölbungsrücklage in 10-%: "))
stelle3 = stell3 #float(input("Profildicke in % (zweistellig): "))
alpha = alpha #float(input("Anstellwinkel alpha[°] = "))
# --------------Umrechnen der Eingaben------------------------------------------
alpha = alpha*math.pi/180
f=stelle1/100.
xf=stelle2/10.
d=stelle3/100.
#---------------NACA-Dickenverteilung-------------------------------------------
a0=1.4845
a1=-0.63
a2=-1.758
a3=1.4215
a4=-0.5075
#---------------Testausgabe-----------------------------------------------------
print "Ihr Profil lautet: NACA", stelle1, stelle2 , stelle3
N= panel #input("Anzahl der Panels = ")
N=int (N)
#-----------------------------Definition von Feldern-----------------------------
xs=np.zeros((N+1),dtype=np.float) # N Panels bedeutet (N+1) Eckpunkte
ys=np.zeros((N+1),dtype=np.float)
xp=np.zeros((N+1),dtype=np.float)
yp=np.zeros((N+1),dtype=np.float)
yd=np.zeros((N+1),dtype=np.float)
xm=np.zeros((N+1),dtype=np.float)
ym=np.zeros((N+1),dtype=np.float)
tx=np.zeros((N+1),dtype=np.float)
ty=np.zeros((N+1),dtype=np.float)
nx=np.zeros((N+1),dtype=np.float)
ny=np.zeros((N+1),dtype=np.float)
Lj=np.zeros((N+1),dtype=np.float)
b =np.zeros((N+1),dtype=np.float)
gamma =np.zeros((N+1),dtype=np.float)
u = np.zeros((N+1),dtype=np.float) # u-Komponente der Geschwindigkeit
v = np.zeros((N+1),dtype=np.float) # v-Komponente der Geschwindigkeit
w = np.zeros((N+1),dtype=np.float) # Betrag der Geschwindigkeit
cp = np.zeros((N+1),dtype=np.float) # Druck
M_PSI=np.zeros((N+1, N+1))
M_PSI=np.matrix(M_PSI)
#---------------------------Berechnung der Profilpunkte------------------------
for i in range(0,N+1,1): # Aenderung auf N
xs[i]=(1+math.cos(2*math.pi*i/N))/2 # plus Schließung xp[N]=xp[0] yp[N]=yp[0]
if xs[i]<xf:
ys[i]=f*(2.*xs[i]/xf-math.pow((xs[i]/xf),2))
tg=2.*f/xf*(1-xs[i]/xf)
else:
ys[i]=f*(1-math.pow((xs[i]-xf)/(1-xf),2))
tg=-2.*f*(xs[i]-xf)/math.pow((1-xf),2)
cos=1/math.sqrt(1+tg*tg)
sin=tg*cos
yd[i]=d*(a0*math.sqrt(xs[i])+a1*xs[i]+a2*math.pow(xs[i],2)+a3*math.pow(xs[i],3)+
a4*math.pow(xs[i],4))
if (i>(N/2)):
xp[i]=xs[i]+yd[i]*sin
yp[i]=ys[i]-yd[i]*cos
else:
xp[i]=xs[i]-yd[i]*sin
yp[i]=ys[i]+yd[i]*cos
# Schließung des Profils
xp[0]=1.
yp[0]=0.
xp[N] = xp[0]
yp[N] = yp[0]
drucken()
#------------------------------Berechnung der Panelgroeszen---------------------
for i in range(0,N,1):
xm[i]=(xp[i+1]+xp[i])/2.
ym[i]=(yp[i+1]+yp[i])/2.
Lj[i]=math.sqrt(math.pow((xp[i]-xp[i+1]),2)+math.pow((yp[i]-yp[i+1]),2))
tx[i]=(xp[i]-xp[i+1])/Lj[i]
ty[i]=(yp[i]-yp[i+1])/Lj[i]
nx[i]=-ty[i]
ny[i]=tx[i]
#------------------------------Belegung der Gleichungsmatrix--------------------
for i in range(0,N,1):
for j in range (0,N,1):
xq = (xm[i]-xp[j+1])*tx[j]+(ym[i]-yp[j+1])*ty[j]
yq = (xm[i]-xp[j+1])*nx[j]+(ym[i]-yp[j+1])*ny[j]
M_PSI[i,j] = F_PSI(Lj[j],xq,yq)
M_PSI[N,0] = 1.
M_PSI[N,N-1]=1.
for i in range(0,N,1):
M_PSI[i,N] = -1.
for i in range(0,N,1):
b[i]= math.sin(alpha)*xm[i]-math.cos(alpha)*ym[i]
b=np.transpose(np.matrix(b))
gamma = M_PSI.I*b
#------------------------------TEST TEST----------------------------------------
for i in range(0,N,1):
print("i=",i," gamma=",gamma[[i]])
gamma = np.matrix(gamma)
#------------------------------Berechnung Geschwindigkeit ---------------------
for i in range(0,N,1):
u[i] = math.cos(alpha)
v[i] = math.sin(alpha)
for j in range(0,N,1):
xq = (xm[i]-xp[j+1])*tx[j]+(ym[i]-yp[j+1])*ty[j]
yq = (xm[i]-xp[j+1])*nx[j]+(ym[i]-yp[j+1])*ny[j]
uq = F_uq(Lj[j],xq,yq)
vq = F_vq(Lj[j],xq,yq)
u[i] = u[i] + gamma[[j]]*(uq*tx[j] + vq*nx[j])
v[i] = v[i] + gamma[[j]]*(uq*ty[j] + vq*ny[j])
for i in range(0,N,1):
print("i=",i," u=",u[i]," v=",v[i])
for i in range(0,N,1):
w[i] = math.sqrt(math.pow(u[i],2) + math.pow(v[i],2))
cp[i] = 1. - math.pow(w[i],2)
for i in range(0,N,1):
print("i=",i," w=",w[i]," cp=",cp[i])
druckenP()
app_win.mainloop()
Bzw. generell mir Fehler und Verbesserungsvorschläge mitteilen, damit das Programm das ich für die Schule brauche rechtzeitig fertig wird.
Ich würde mich über Antworten freuen.