Initial release of Maemo 5 port of gnuplot
[gnuplot] / demo / airfoil.dem
diff --git a/demo/airfoil.dem b/demo/airfoil.dem
new file mode 100644 (file)
index 0000000..4506f56
--- /dev/null
@@ -0,0 +1,168 @@
+#
+# $Id: airfoil.dem,v 1.10 2006/06/30 02:17:21 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 camber
+print  "NACA four series airfoils by bezier splines"
+print  "Will add pressure distribution later with Overplotting"
+mm = 0.6
+# NACA6xxx
+thick = 0.09  
+# nine percent  NACAxx09
+pp = 0.4
+# NACAx4xx
+# Combined this implies NACA6409 airfoil
+#
+# Airfoil thickness function.
+#
+set xlabel "NACA6409 -- 9% thick, 40% max camber, 6% camber"
+x0 = 0.0
+y0 = 0.0
+x1 = 0.0
+y1 = 0.18556
+x2 = 0.03571
+y2 = 0.34863
+x3 = 0.10714
+y3 = 0.48919
+x4 = 0.21429 
+y4 = 0.58214
+x5 = 0.35714
+y5 = 0.55724
+x6 = 0.53571
+y6 = 0.44992
+x7 = 0.75000
+y7 = 0.30281
+x8 = 1.00000
+y8 = 0.01050
+#
+# Directly defining the order 8 Bezier basis function for a faster evaluation.
+#
+bez_d4_i0(x) =     (1 - x)**4
+bez_d4_i1(x) = 4 * (1 - x)**3 * x
+bez_d4_i2(x) = 6 * (1 - x)**2 * x**2
+bez_d4_i3(x) = 4 * (1 - x)**1 * x**3
+bez_d4_i4(x) =                  x**4
+
+bez_d8_i0(x) =      (1 - x)**8
+bez_d8_i1(x) =  8 * (1 - x)**7 * x
+bez_d8_i2(x) = 28 * (1 - x)**6 * x**2
+bez_d8_i3(x) = 56 * (1 - x)**5 * x**3
+bez_d8_i4(x) = 70 * (1 - x)**4 * x**4
+bez_d8_i5(x) = 56 * (1 - x)**3 * x**5
+bez_d8_i6(x) = 28 * (1 - x)**2 * x**6
+bez_d8_i7(x) =  8 * (1 - x)    * x**7
+bez_d8_i8(x) =                   x**8
+
+
+m0 = 0.0
+m1 = 0.1
+m2 = 0.1
+m3 = 0.1
+m4 = 0.0
+mean_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.0
+p1 = pp / 2
+p2 = pp
+p3 = (pp + 1) / 2
+p4 = 1.0
+mean_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 grid
+unset zeroaxis
+set parametric
+set 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 lt 2, \
+     airfoil_x(t), airfoil_y1(t, thick) title "upper surface" w l lt 1, \
+     airfoil_x(t), airfoil_y2(t, thick) title "lower surface" w l lt 1
+pause -1 "Press Return"
+mm = 0.0
+pp = .5
+thick = .12
+set title "NACA0012 Airfoil"
+set xlabel "12% thick, no camber -- classical test case"
+plot airfoil_x(t), airfoil_y(t) title "mean line" w l lt 2, \
+     airfoil_x(t), airfoil_y1(t, thick) title "upper surface" w l lt 1, \
+     airfoil_x(t), airfoil_y2(t, thick) title "lower surface" w l lt 1
+pause -1 "Press Return"
+set title ""
+set xlab ""
+set key box
+set parametric
+set samples 100
+set isosamples 10
+set style data lines
+set style function lines
+print  "Joukowski Airfoil using Complex Variables" 
+set title "Joukowski Airfoil using Complex Variables" offset 0,0
+set time
+set 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.06
+a =.250
+set 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