📄 airfoil.dem
字号:
## $Id: airfoil.dem,v 1.8 2003/12/16 04:46:20 sfeam Exp $## This demo shows how to use bezier splines to define NACA four# series airfoils and complex variables to define Joukowski# Airfoils. It will be expanded after overplotting in implemented# to plot Coefficient of Pressure as well.# Alex Woo, Dec. 1992## The definitions below follows: "Bezier presentation of airfoils",# by Wolfgang Boehm, Computer Aided Geometric Design 4 (1987) pp 17-22.## Gershon Elber, Nov. 1992## m = percent camber# p = percent chord with maximum camberprint "NACA four series airfoils by bezier splines"print "Will add pressure distribution later with Overplotting"mm = 0.6# NACA6xxxthick = 0.09 # nine percent NACAxx09pp = 0.4# NACAx4xx# Combined this implies NACA6409 airfoil## Airfoil thickness function.#set xlabel "NACA6409 -- 9% thick, 40% max camber, 6% camber"x0 = 0.0y0 = 0.0x1 = 0.0y1 = 0.18556x2 = 0.03571y2 = 0.34863x3 = 0.10714y3 = 0.48919x4 = 0.21429 y4 = 0.58214x5 = 0.35714y5 = 0.55724x6 = 0.53571y6 = 0.44992x7 = 0.75000y7 = 0.30281x8 = 1.00000y8 = 0.01050## Directly defining the order 8 Bezier basis function for a faster evaluation.#bez_d4_i0(x) = (1 - x)**4bez_d4_i1(x) = 4 * (1 - x)**3 * xbez_d4_i2(x) = 6 * (1 - x)**2 * x**2bez_d4_i3(x) = 4 * (1 - x)**1 * x**3bez_d4_i4(x) = x**4bez_d8_i0(x) = (1 - x)**8bez_d8_i1(x) = 8 * (1 - x)**7 * xbez_d8_i2(x) = 28 * (1 - x)**6 * x**2bez_d8_i3(x) = 56 * (1 - x)**5 * x**3bez_d8_i4(x) = 70 * (1 - x)**4 * x**4bez_d8_i5(x) = 56 * (1 - x)**3 * x**5bez_d8_i6(x) = 28 * (1 - x)**2 * x**6bez_d8_i7(x) = 8 * (1 - x) * x**7bez_d8_i8(x) = x**8m0 = 0.0m1 = 0.1m2 = 0.1m3 = 0.1m4 = 0.0mean_y(t) = m0 * mm * bez_d4_i0(t) + \ m1 * mm * bez_d4_i1(t) + \ m2 * mm * bez_d4_i2(t) + \ m3 * mm * bez_d4_i3(t) + \ m4 * mm * bez_d4_i4(t)p0 = 0.0p1 = pp / 2p2 = ppp3 = (pp + 1) / 2p4 = 1.0mean_x(t) = p0 * bez_d4_i0(t) + \ p1 * bez_d4_i1(t) + \ p2 * bez_d4_i2(t) + \ p3 * bez_d4_i3(t) + \ p4 * bez_d4_i4(t)z_x(x) = x0 * bez_d8_i0(x) + x1 * bez_d8_i1(x) + x2 * bez_d8_i2(x) + \ x3 * bez_d8_i3(x) + x4 * bez_d8_i4(x) + x5 * bez_d8_i5(x) + \ x6 * bez_d8_i6(x) + x7 * bez_d8_i7(x) + x8 * bez_d8_i8(x)z_y(x, tk) = \ y0 * tk * bez_d8_i0(x) + y1 * tk * bez_d8_i1(x) + y2 * tk * bez_d8_i2(x) + \ y3 * tk * bez_d8_i3(x) + y4 * tk * bez_d8_i4(x) + y5 * tk * bez_d8_i5(x) + \ y6 * tk * bez_d8_i6(x) + y7 * tk * bez_d8_i7(x) + y8 * tk * bez_d8_i8(x)## Given t value between zero and one, the airfoild curve is defined as# # c(t) = mean(t1(t)) +/- z(t2(t)) n(t1(t)),## where n is the unit normal to the mean line. See the above paper for more.## Unfortunately, the parametrization of c(t) is not the same for mean(t1)# and z(t2). The mean line (and its normal) can assume linear function t1 = t,# -1# but the thickness z_y is, in fact, a function of z_x (t). Since it is# not obvious how to compute this inverse function analytically, we instead# replace t in c(t) equation above by z_x(t) to get:# # c(z_x(t)) = mean(z_x(t)) +/- z(t) n(z_x(t)),## and compute and display this instead. Note we also ignore n(t) and assumes# n(t) is constant in the y direction,#airfoil_y1(t, thick) = mean_y(z_x(t)) + z_y(t, thick)airfoil_y2(t, thick) = mean_y(z_x(t)) - z_y(t, thick)airfoil_y(t) = mean_y(z_x(t))airfoil_x(t) = mean_x(z_x(t))unset gridunset zeroaxisset parametricset xrange [-0.1:1.1]set yrange [-0.1:.7]set trange [ 0.0:1.0]set title "NACA6409 Airfoil"plot airfoil_x(t), airfoil_y(t) title "mean line" w l 2, \ airfoil_x(t), airfoil_y1(t, thick) title "upper surface" w l 1, \ airfoil_x(t), airfoil_y2(t, thick) title "lower surface" w l 1pause -1 "Press Return"mm = 0.0pp = .5thick = .12set title "NACA0012 Airfoil"set xlabel "12% thick, no camber -- classical test case"plot airfoil_x(t), airfoil_y(t) title "mean line" w l 2, \ airfoil_x(t), airfoil_y1(t, thick) title "upper surface" w l 1, \ airfoil_x(t), airfoil_y2(t, thick) title "lower surface" w l 1pause -1 "Press Return"set title ""set xlab ""set key boxset parametricset samples 100set isosamples 10set style data linesset style function linesprint "Joukowski Airfoil using Complex Variables" set title "Joukowski Airfoil using Complex Variables" 0,0set timeset yrange [-.2 : 1.8]set trange [0: 2*pi]set xrange [-.6:.6]zeta(t) = -eps + (a+eps)*exp(t*{0,1})eta(t) = zeta(t) + a*a/zeta(t)eps = 0.06a =.250set xlabel "eps = 0.06 real"plot real(eta(t)),imag(eta(t))pause -1 "Press Return"eps = 0.06*{1,-1}set xlabel "eps = 0.06 + i0.06"plot real(eta(t)),imag(eta(t))pause -1 "Press Return"reset
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -