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 [3]:
# 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.406924 CD0: 0.011937 CD1: 0.003083
AL: -6.800000 CL: -0.382948 CD0: 0.011581 CD1: 0.003098
AL: -6.600000 CL: -0.358553 CD0: 0.011260 CD1: 0.003111
AL: -6.400000 CL: -0.333777 CD0: 0.010874 CD1: 0.003126
AL: -6.200000 CL: -0.307500 CD0: 0.010486 CD1: 0.003140
AL: -6.000000 CL: -0.281192 CD0: 0.010155 CD1: 0.003154
AL: -5.800000 CL: -0.255025 CD0: 0.009878 CD1: 0.003166
AL: -5.600000 CL: -0.228779 CD0: 0.009654 CD1: 0.003177
AL: -5.400000 CL: -0.201787 CD0: 0.009414 CD1: 0.003188
AL: -5.200000 CL: -0.174983 CD0: 0.009168 CD1: 0.003199
AL: -5.000000 CL: -0.148122 CD0: 0.008938 CD1: 0.003209
AL: -4.800000 CL: -0.121487 CD0: 0.008786 CD1: 0.003219
AL: -4.600000 CL: -0.094668 CD0: 0.008601 CD1: 0.003228
AL: -4.400000 CL: -0.067733 CD0: 0.008432 CD1: 0.003236
AL: -4.200000 CL: -0.040786 CD0: 0.008217 CD1: 0.003246
AL: -4.000000 CL: -0.013173 CD0: 0.007742 CD1: 0.003251
AL: -3.800000 CL: 0.015743 CD0: 0.005971 CD1: 0.003252
AL: -3.600000 CL: 0.033101 CD0: 0.004009 CD1: 0.003120
AL: -3.400000 CL: 0.068211 CD0: 0.004011 CD1: 0.003160
AL: -3.200000 CL: 0.102540 CD0: 0.003959 CD1: 0.003194
AL: -3.000000 CL: 0.126190 CD0: 0.003938 CD1: 0.003211
AL: -2.800000 CL: 0.147129 CD0: 0.003935 CD1: 0.003220
AL: -2.600000 CL: 0.168363 CD0: 0.003935 CD1: 0.003228
AL: -2.400000 CL: 0.189775 CD0: 0.003936 CD1: 0.003237
AL: -2.200000 CL: 0.211307 CD0: 0.003939 CD1: 0.003247
AL: -2.000000 CL: 0.233013 CD0: 0.003944 CD1: 0.003258
AL: -1.800000 CL: 0.254822 CD0: 0.003951 CD1: 0.003261
AL: -1.600000 CL: 0.276694 CD0: 0.003959 CD1: 0.003265
AL: -1.400000 CL: 0.298688 CD0: 0.003968 CD1: 0.003269
AL: -1.200000 CL: 0.320696 CD0: 0.003979 CD1: 0.003275
AL: -1.000000 CL: 0.342954 CD0: 0.003991 CD1: 0.003280
AL: -0.800000 CL: 0.365357 CD0: 0.004005 CD1: 0.003285
AL: -0.600000 CL: 0.387724 CD0: 0.004020 CD1: 0.003292
AL: -0.400000 CL: 0.410083 CD0: 0.004036 CD1: 0.003303
AL: -0.200000 CL: 0.432567 CD0: 0.004053 CD1: 0.003304
AL: 0.000000 CL: 0.455067 CD0: 0.004071 CD1: 0.003305
AL: 0.200000 CL: 0.477563 CD0: 0.004091 CD1: 0.003308
AL: 0.400000 CL: 0.500217 CD0: 0.004113 CD1: 0.003310
AL: 0.600000 CL: 0.522858 CD0: 0.004135 CD1: 0.003314
AL: 0.800000 CL: 0.545474 CD0: 0.004159 CD1: 0.003321
AL: 1.000000 CL: 0.567960 CD0: 0.004185 CD1: 0.003332
AL: 1.200000 CL: 0.590503 CD0: 0.004211 CD1: 0.003331
AL: 1.400000 CL: 0.617065 CD0: 0.004229 CD1: 0.003346
AL: 1.600000 CL: 0.646972 CD0: 0.004202 CD1: 0.003424
AL: 1.800000 CL: 0.674721 CD0: 0.004128 CD1: 0.003534
AL: 2.000000 CL: 0.700064 CD0: 0.004007 CD1: 0.003667
AL: 2.200000 CL: 0.719855 CD0: 0.004292 CD1: 0.003752
AL: 2.400000 CL: 0.739268 CD0: 0.004932 CD1: 0.003749
AL: 2.600000 CL: 0.759899 CD0: 0.005556 CD1: 0.003739
AL: 2.800000 CL: 0.781421 CD0: 0.005983 CD1: 0.003740
AL: 3.000000 CL: 0.802992 CD0: 0.006402 CD1: 0.003742
AL: 3.200000 CL: 0.824322 CD0: 0.006951 CD1: 0.003729
AL: 3.400000 CL: 0.846029 CD0: 0.007360 CD1: 0.003722
AL: 3.600000 CL: 0.867969 CD0: 0.007688 CD1: 0.003718
AL: 3.800000 CL: 0.889929 CD0: 0.008008 CD1: 0.003714
AL: 4.000000 CL: 0.911902 CD0: 0.008330 CD1: 0.003710
AL: 4.200000 CL: 0.933899 CD0: 0.008648 CD1: 0.003706
AL: 4.400000 CL: 0.955893 CD0: 0.008957 CD1: 0.003702
AL: 4.600000 CL: 0.977988 CD0: 0.009220 CD1: 0.003701
AL: 4.800000 CL: 1.000082 CD0: 0.009473 CD1: 0.003700
AL: 5.000000 CL: 1.022185 CD0: 0.009712 CD1: 0.003701
AL: 5.500000 CL: 1.077535 CD0: 0.010266 CD1: 0.003701
AL: 6.000000 CL: 1.132893 CD0: 0.010801 CD1: 0.003692
AL: 6.500000 CL: 1.188188 CD0: 0.011353 CD1: 0.003680
AL: 7.000000 CL: 1.243131 CD0: 0.011935 CD1: 0.003672
AL: 7.500000 CL: 1.297334 CD0: 0.012603 CD1: 0.003666
AL: 8.000000 CL: 1.350631 CD0: 0.013459 CD1: 0.003640
AL: 8.500000 CL: 1.403247 CD0: 0.014462 CD1: 0.003604
AL: 9.000000 CL: 1.455404 CD0: 0.015440 CD1: 0.003581
AL: 9.500000 CL: 1.507477 CD0: 0.016402 CD1: 0.003555
AL: 10.000000 CL: 1.558555 CD0: 0.017487 CD1: 0.003518
AL: 10.500000 CL: 1.608930 CD0: 0.018578 CD1: 0.003497
AL: 11.000000 CL: 1.658878 CD0: 0.019712 CD1: 0.003461
AL: 11.500000 CL: 1.707427 CD0: 0.020982 CD1: 0.003427
AL: 12.000000 CL: 1.754988 CD0: 0.022293 CD1: 0.003400
AL: 12.500000 CL: 1.801329 CD0: 0.023716 CD1: 0.003356
AL: 13.000000 CL: 1.845190 CD0: 0.025351 CD1: 0.003330
AL: 13.500000 CL: 1.887780 CD0: 0.027048 CD1: 0.003273
AL: 14.000000 CL: 1.926178 CD0: 0.029080 CD1: 0.003228
AL: 14.500000 CL: 1.961924 CD0: 0.031232 CD1: 0.003161
AL: 15.000000 CL: 1.990929 CD0: 0.033766 CD1: 0.003080
AL: 15.500000 CL: 2.007277 CD0: 0.036908 CD1: 0.002976
AL: 16.000000 CL: 2.000667 CD0: 0.040610 CD1: 0.002836
AL: 16.500000 CL: 1.974366 CD0: 0.045580 CD1: 0.002711
AL: 17.000000 CL: 1.918392 CD0: 0.052987 CD1: 0.002590
AL: 17.500000 CL: 1.785186 CD0: 0.071780 CD1: 0.002673
AL: 18.000000 CL: 1.413929 CD0: 0.167036 CD1: 0.003028
AL: 18.500000 CL: 1.295762 CD0: 0.198307 CD1: 0.002971
AL: 19.000000 CL: 1.230909 CD0: 0.216214 CD1: 0.002920
AL: 19.500000 CL: 1.181503 CD0: 0.229705 CD1: 0.002872
AL: 20.000000 CL: 1.138507 CD0: 0.239481 CD1: 0.002818
2022-06-26T19:38:38.382348 image/svg+xml Matplotlib v3.3.3, https://matplotlib.org/
In [4]:
# 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)
2022-06-26T19:38:38.537861 image/svg+xml Matplotlib v3.3.3, https://matplotlib.org/
2022-06-26T19:38:38.638863 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.