The S414 is a slotted, natural-laminar-flow airfoil. It is designed to have a laminar bucket between CL=.1 and CL=.65, but also have the ability to achieve high angles of attack and lift coefficients[1]. Below, the windtunnel results and the CFD results from the literature are compared to the results predicted by viiflow. For OVERFLOW, the transition model in [2] was used.

Important: The use of this airfoil is restricted [3]. The geometry of the geometry used here is not the geometry used in the other CFD analysis methods nor in the wind tunnel experiments. It has been digitzed and smoothed, with permission, from the reference. As such, this is not a thorough comparison of CFD results and wind tunnel data, but merely an example of Multi-Element airfoil analysis. The good match should therefore be taken with a tbsp. of salt.

All CFD methods use a transition model, and all are able to predict the laminar bucket and show good agreement with the measurements. Viiflow does predict a stronger increase in drag below the laminar bucket compared to the other methods and the windtunnel results. All methods overpredict maximum lift, with viiflow and MSES closely agreeing on the lift slope, which is not surprising given their similar boundary layer formulation.

In [1]:
import matplotlib
import matplotlib.pyplot as plt
interactive_plot = False
import numpy as np
import viiflow as vf
import viiflowtools.vf_tools as vft
import viiflowtools.vf_plots as vfp
import logging
logging.getLogger().setLevel(logging.ERROR)
In [2]:
if interactive_plot:
    %matplotlib notebook
    matplotlib.rcParams['figure.figsize'] = [10, 7] 
    lines = None
    fig, ax = plt.subplots(1,1)
else:
    %matplotlib inline
    matplotlib.rcParams['figure.figsize'] = [12, 6]
%config InlineBackend.figure_format = 'svg'
In [5]:
# Read and repanel airfoil data
BASE = vft.repanel(vft.read_selig("S414Main.dat")[:,::-1],190)
SLOT = vft.repanel(vft.read_selig("S414Aft.dat")[:,::-1],190)
# More refined in laminar bucket
AOARANGE = np.r_[np.arange(-7,5,0.2),np.arange(5,20.5,0.5)]
#AOARANGE = np.r_[np.arange(5,22,0.5)]

# Scale to c=1
SCALE = np.max(SLOT[0,:])
BASE = BASE/SCALE;
SLOT = SLOT/SCALE;

# Setup
RE = 1.0e6
ncrit = 9.0
Mach = 0.1
AOA0 = AOARANGE[0]
s = vf.setup(Re=RE,Ma=Mach,Ncrit=ncrit,Alpha=AOA0)
s.IterateWakes = False
s.Silent = True



# Set-up and initialize based on inviscid panel solution
(p,bl,x) = vf.init([BASE,SLOT],s)

# result array
alv = []
clv = []
cdv = []

lines = None # For plot function
if not interactive_plot:
    fig, ax = plt.subplots(1,1)
else:
    # For interactive plot. We iterate for 10 iterations and, if not converged, can observe the solution.
    s.Itermax = 10
for alpha in AOARANGE:
    s.Alpha = alpha
    res = None
    grad = None
    for k in range(int(100/s.Itermax)): # Make effectively 100 iterations, but show some in between
        [x,flag,res,grad,_] = vf.iter(x,bl,p,s,res,grad)
        
        # Plot geometry and update interactively
        if interactive_plot:
            nres=np.sqrt(np.dot(res.T,res))
            lines = vfp.plot_geometry(ax,p,bl,lines)
            title = "AOA %f RES %f"%(alpha,nres)
            ax.set_title(title)
            fig.canvas.draw()
        # Just plot a single geometry at AOA = 5°
        elif alpha==5:
            lines = vfp.plot_geometry(ax,p,bl,lines)

        # Decide whether to stop iterating
        if flag>0:
            alv.append(alpha)
            clv.append(p.CL)
            cdv.append(bl[0].CD+bl[1].CD)
            print('AL: %f CL: %f CD0: %f CD1: %f' % (alpha,clv[-1],bl[0].CD,bl[1].CD) ) 
            break
    if flag<=0:
        (p,bl,x) = vf.init([BASE,SLOT],s)
AL: -7.000000 CL: -0.406744 CD0: 0.011936 CD1: 0.003076
AL: -6.800000 CL: -0.382863 CD0: 0.011504 CD1: 0.003091
AL: -6.600000 CL: -0.358177 CD0: 0.011119 CD1: 0.003105
AL: -6.400000 CL: -0.333123 CD0: 0.010788 CD1: 0.003121
AL: -6.200000 CL: -0.307475 CD0: 0.010517 CD1: 0.003135
AL: -6.000000 CL: -0.281394 CD0: 0.010277 CD1: 0.003149
AL: -5.800000 CL: -0.254997 CD0: 0.009969 CD1: 0.003165
AL: -5.600000 CL: -0.228461 CD0: 0.009683 CD1: 0.003181
AL: -5.400000 CL: -0.201616 CD0: 0.009450 CD1: 0.003195
AL: -5.200000 CL: -0.174863 CD0: 0.009257 CD1: 0.003203
AL: -5.000000 CL: -0.147941 CD0: 0.009036 CD1: 0.003211
AL: -4.800000 CL: -0.121178 CD0: 0.008840 CD1: 0.003218
AL: -4.600000 CL: -0.094378 CD0: 0.008665 CD1: 0.003224
AL: -4.400000 CL: -0.067421 CD0: 0.008483 CD1: 0.003229
AL: -4.200000 CL: -0.040365 CD0: 0.008284 CD1: 0.003235
AL: -4.000000 CL: -0.012911 CD0: 0.007864 CD1: 0.003242
AL: -3.800000 CL: 0.015875 CD0: 0.006439 CD1: 0.003249
AL: -3.600000 CL: 0.034201 CD0: 0.004027 CD1: 0.003120
AL: -3.400000 CL: 0.065123 CD0: 0.004012 CD1: 0.003157
AL: -3.200000 CL: 0.101160 CD0: 0.003963 CD1: 0.003190
AL: -3.000000 CL: 0.126061 CD0: 0.003937 CD1: 0.003213
AL: -2.800000 CL: 0.147093 CD0: 0.003934 CD1: 0.003225
AL: -2.600000 CL: 0.168298 CD0: 0.003934 CD1: 0.003230
AL: -2.400000 CL: 0.189674 CD0: 0.003935 CD1: 0.003236
AL: -2.200000 CL: 0.211136 CD0: 0.003938 CD1: 0.003242
AL: -2.000000 CL: 0.232840 CD0: 0.003943 CD1: 0.003248
AL: -1.800000 CL: 0.254612 CD0: 0.003949 CD1: 0.003255
AL: -1.600000 CL: 0.276568 CD0: 0.003957 CD1: 0.003263
AL: -1.400000 CL: 0.298572 CD0: 0.003967 CD1: 0.003272
AL: -1.200000 CL: 0.320711 CD0: 0.003978 CD1: 0.003280
AL: -1.000000 CL: 0.342880 CD0: 0.003990 CD1: 0.003283
AL: -0.800000 CL: 0.365191 CD0: 0.004003 CD1: 0.003285
AL: -0.600000 CL: 0.387442 CD0: 0.004019 CD1: 0.003290
AL: -0.400000 CL: 0.409872 CD0: 0.004035 CD1: 0.003294
AL: -0.200000 CL: 0.432393 CD0: 0.004052 CD1: 0.003299
AL: 0.000000 CL: 0.454934 CD0: 0.004071 CD1: 0.003305
AL: 0.200000 CL: 0.477448 CD0: 0.004091 CD1: 0.003314
AL: 0.400000 CL: 0.499998 CD0: 0.004112 CD1: 0.003316
AL: 0.600000 CL: 0.522568 CD0: 0.004134 CD1: 0.003316
AL: 0.800000 CL: 0.545173 CD0: 0.004158 CD1: 0.003318
AL: 1.000000 CL: 0.567860 CD0: 0.004183 CD1: 0.003321
AL: 1.200000 CL: 0.590509 CD0: 0.004210 CD1: 0.003325
AL: 1.400000 CL: 0.617081 CD0: 0.004227 CD1: 0.003353
AL: 1.600000 CL: 0.646927 CD0: 0.004201 CD1: 0.003417
AL: 1.800000 CL: 0.674709 CD0: 0.004123 CD1: 0.003524
AL: 2.000000 CL: 0.699967 CD0: 0.004005 CD1: 0.003659
AL: 2.200000 CL: 0.719707 CD0: 0.004300 CD1: 0.003746
AL: 2.400000 CL: 0.739080 CD0: 0.004926 CD1: 0.003755
AL: 2.600000 CL: 0.759691 CD0: 0.005577 CD1: 0.003735
AL: 2.800000 CL: 0.781311 CD0: 0.006003 CD1: 0.003730
AL: 3.000000 CL: 0.802975 CD0: 0.006413 CD1: 0.003725
AL: 3.200000 CL: 0.824215 CD0: 0.006946 CD1: 0.003718
AL: 3.400000 CL: 0.845826 CD0: 0.007390 CD1: 0.003713
AL: 3.600000 CL: 0.867825 CD0: 0.007703 CD1: 0.003713
AL: 3.800000 CL: 0.889756 CD0: 0.008024 CD1: 0.003714
AL: 4.000000 CL: 0.911619 CD0: 0.008355 CD1: 0.003715
AL: 4.200000 CL: 0.933627 CD0: 0.008659 CD1: 0.003711
AL: 4.400000 CL: 0.955619 CD0: 0.008962 CD1: 0.003705
AL: 4.600000 CL: 0.977692 CD0: 0.009225 CD1: 0.003701
AL: 4.800000 CL: 0.999712 CD0: 0.009500 CD1: 0.003696
AL: 5.000000 CL: 1.021841 CD0: 0.009734 CD1: 0.003694
AL: 5.500000 CL: 1.077334 CD0: 0.010286 CD1: 0.003689
AL: 6.000000 CL: 1.132720 CD0: 0.010812 CD1: 0.003688
AL: 6.500000 CL: 1.187798 CD0: 0.011364 CD1: 0.003688
AL: 7.000000 CL: 1.242644 CD0: 0.011941 CD1: 0.003674
AL: 7.500000 CL: 1.297119 CD0: 0.012608 CD1: 0.003655
AL: 8.000000 CL: 1.350399 CD0: 0.013475 CD1: 0.003634
AL: 8.500000 CL: 1.402623 CD0: 0.014486 CD1: 0.003610
AL: 9.000000 CL: 1.454986 CD0: 0.015483 CD1: 0.003574
AL: 9.500000 CL: 1.506764 CD0: 0.016472 CD1: 0.003548
AL: 10.000000 CL: 1.557946 CD0: 0.017521 CD1: 0.003522
AL: 10.500000 CL: 1.608384 CD0: 0.018637 CD1: 0.003486
AL: 11.000000 CL: 1.658041 CD0: 0.019784 CD1: 0.003466
AL: 11.500000 CL: 1.707002 CD0: 0.020971 CD1: 0.003428
AL: 12.000000 CL: 1.754626 CD0: 0.022293 CD1: 0.003401
AL: 12.500000 CL: 1.800713 CD0: 0.023721 CD1: 0.003360
AL: 13.000000 CL: 1.845648 CD0: 0.025231 CD1: 0.003329
AL: 13.500000 CL: 1.887489 CD0: 0.027002 CD1: 0.003278
AL: 14.000000 CL: 1.927828 CD0: 0.028807 CD1: 0.003229
AL: 14.500000 CL: 1.962968 CD0: 0.031011 CD1: 0.003166
AL: 15.000000 CL: 1.992760 CD0: 0.033530 CD1: 0.003088
AL: 15.500000 CL: 2.015959 CD0: 0.036192 CD1: 0.002999
AL: 16.000000 CL: 2.009479 CD0: 0.039975 CD1: 0.002853
AL: 16.500000 CL: 1.983630 CD0: 0.044908 CD1: 0.002728
AL: 17.000000 CL: 1.931320 CD0: 0.051964 CD1: 0.002607
AL: 17.500000 CL: 1.810119 CD0: 0.068049 CD1: 0.002638
AL: 18.000000 CL: 1.617391 CD0: 0.117800 CD1: 0.002992
AL: 19.500000 CL: 1.175951 CD0: 0.230514 CD1: 0.002876
AL: 20.000000 CL: 1.133777 CD0: 0.239871 CD1: 0.002822
2021-10-12T16:02:19.449040 image/svg+xml Matplotlib v3.3.3, https://matplotlib.org/
In [6]:
# Load airfoil measurement data
PolarMaughmerWT = np.genfromtxt("MaughmerPolar.csv",skip_header=2,delimiter=",",usecols=[0,1])
PolarMaughmerMSES = np.genfromtxt("MaughmerPolar.csv",skip_header=2,delimiter=",",usecols=[2,3])
PolarMaughmerOVERFLOW = np.genfromtxt("MaughmerPolar.csv",skip_header=2,delimiter=",",usecols=[4,5])
CLMaughmerWT = np.genfromtxt("MaughmerCL.csv",skip_header=2,delimiter=",",usecols=[0,1])
CLMaughmerMSES = np.genfromtxt("MaughmerCL.csv",skip_header=2,delimiter=",",usecols=[2,3])
CLMaughmerOVERFLOW = np.genfromtxt("MaughmerCL.csv",skip_header=2,delimiter=",",usecols=[4,5])

# Make a new plot with the results
fig,ax = plt.subplots(1,1)
ax.plot(alv,clv,color="orange")
ax.plot(CLMaughmerWT.T[0],CLMaughmerWT.T[1])
ax.plot(CLMaughmerMSES.T[0],CLMaughmerMSES.T[1])
ax.plot(CLMaughmerOVERFLOW.T[0],CLMaughmerOVERFLOW.T[1])

ax.set_xlabel('AOA')
ax.set_ylabel('CL')
ax.legend(['VIIFLOW','Wind Tunnel','MSES','OVERFLOW w/ Transition'])
ax.grid(1)
ax.set_xlim([-5,20])
ax.set_ylim([-0.5,2.3])

fig,ax = plt.subplots(1,1)
ax.plot(cdv,clv,color="orange")
ax.plot(PolarMaughmerWT.T[0]/1000,PolarMaughmerWT.T[1])
ax.plot(PolarMaughmerMSES.T[0]/1000,PolarMaughmerMSES.T[1])
ax.plot(PolarMaughmerOVERFLOW.T[0]/1000,PolarMaughmerOVERFLOW.T[1])

ax.set_xlabel('CD')
ax.set_ylabel('CL');
ax.legend(['VIIFLOW','Wind Tunnel','MSES','OVERFLOW w/ Transition'])
ax.set_xlim([0,0.025])
ax.set_ylim([-0.5,1.8])
ax.grid(1)
2021-10-12T16:02:22.637463 image/svg+xml Matplotlib v3.3.3, https://matplotlib.org/
2021-10-12T16:02:22.724463 image/svg+xml Matplotlib v3.3.3, https://matplotlib.org/

[1] Mark D. Maughmer, James G. Coder, and Dan M. Somers, Exploration of a Slotted, Natural-Laminar-Flow Airfoil Concept, 2018 Applied Aerodynamics Conference. Atlanta, Georgia.

[2] James G. Coder and Mark D. Maughmer, Fluid Dynamics Compatible Transition Modeling Using an Amplification Factor Transport Equation, AIAA Journal 2014 52:11, 2506-2512

[3] The original coordinates, and the concept of this airfoil, are patented under US Patent 6905092 B2. To use this proprietary airfoil, a license agreement with Airfoil, Incorporated is necessary and its use is subject to distribution restrictions imposed by the U.S. Army.