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],160)
SLOT = vft.repanel(vft.read_selig("S414Aft.dat")[:,::-1],160)
# More refined in laminar bucket
AOARANGE = np.r_[np.arange(-7,5,0.2),np.arange(5,20.5,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
AL: -7.000000 CL: -0.408685 CD0: 0.012248 CD1: 0.003082
AL: -6.800000 CL: -0.385783 CD0: 0.011840 CD1: 0.003093
AL: -6.600000 CL: -0.362565 CD0: 0.011470 CD1: 0.003100
AL: -6.400000 CL: -0.339345 CD0: 0.011185 CD1: 0.003106
AL: -6.200000 CL: -0.316197 CD0: 0.010981 CD1: 0.003116
AL: -6.000000 CL: -0.292328 CD0: 0.010791 CD1: 0.003125
AL: -5.800000 CL: -0.267201 CD0: 0.010121 CD1: 0.003144
AL: -5.600000 CL: -0.241302 CD0: 0.009727 CD1: 0.003157
AL: -5.400000 CL: -0.215690 CD0: 0.009455 CD1: 0.003169
AL: -5.200000 CL: -0.189482 CD0: 0.009254 CD1: 0.003180
AL: -5.000000 CL: -0.163301 CD0: 0.009105 CD1: 0.003190
AL: -4.800000 CL: -0.137108 CD0: 0.008980 CD1: 0.003200
AL: -4.600000 CL: -0.110004 CD0: 0.008684 CD1: 0.003212
AL: -4.400000 CL: -0.083282 CD0: 0.008555 CD1: 0.003234
AL: -4.200000 CL: -0.056552 CD0: 0.008404 CD1: 0.003238
AL: -4.000000 CL: -0.029690 CD0: 0.008201 CD1: 0.003243
AL: -3.800000 CL: -0.002413 CD0: 0.007756 CD1: 0.003248
AL: -3.400000 CL: 0.051729 CD0: 0.004926 CD1: 0.003234
AL: -3.200000 CL: 0.063442 CD0: 0.004070 CD1: 0.003141
AL: -3.000000 CL: 0.082201 CD0: 0.004091 CD1: 0.003198
AL: -2.800000 CL: 0.122924 CD0: 0.004119 CD1: 0.003185
AL: -2.600000 CL: 0.157940 CD0: 0.004082 CD1: 0.003200
AL: -2.400000 CL: 0.185292 CD0: 0.004042 CD1: 0.003220
AL: -2.200000 CL: 0.206498 CD0: 0.004042 CD1: 0.003229
AL: -2.000000 CL: 0.228499 CD0: 0.004045 CD1: 0.003248
AL: -1.800000 CL: 0.249992 CD0: 0.004049 CD1: 0.003250
AL: -1.600000 CL: 0.271502 CD0: 0.004055 CD1: 0.003255
AL: -1.400000 CL: 0.292992 CD0: 0.004062 CD1: 0.003263
AL: -1.200000 CL: 0.314784 CD0: 0.004072 CD1: 0.003267
AL: -1.000000 CL: 0.336642 CD0: 0.004084 CD1: 0.003272
AL: -0.800000 CL: 0.358557 CD0: 0.004097 CD1: 0.003277
AL: -0.600000 CL: 0.380483 CD0: 0.004111 CD1: 0.003283
AL: -0.400000 CL: 0.403115 CD0: 0.004129 CD1: 0.003302
AL: -0.200000 CL: 0.425050 CD0: 0.004147 CD1: 0.003304
AL: 0.000000 CL: 0.447224 CD0: 0.004166 CD1: 0.003305
AL: 0.200000 CL: 0.469365 CD0: 0.004187 CD1: 0.003308
AL: 0.400000 CL: 0.491477 CD0: 0.004209 CD1: 0.003310
AL: 0.600000 CL: 0.513467 CD0: 0.004233 CD1: 0.003315
AL: 0.800000 CL: 0.536181 CD0: 0.004260 CD1: 0.003336
AL: 1.000000 CL: 0.561936 CD0: 0.004274 CD1: 0.003334
AL: 1.200000 CL: 0.591693 CD0: 0.004252 CD1: 0.003372
AL: 1.400000 CL: 0.619476 CD0: 0.004189 CD1: 0.003424
AL: 1.600000 CL: 0.645916 CD0: 0.004106 CD1: 0.003514
AL: 1.800000 CL: 0.671124 CD0: 0.004005 CD1: 0.003593
AL: 2.000000 CL: 0.691347 CD0: 0.004182 CD1: 0.003661
AL: 2.200000 CL: 0.711413 CD0: 0.004585 CD1: 0.003679
AL: 2.400000 CL: 0.731243 CD0: 0.005160 CD1: 0.003690
AL: 2.600000 CL: 0.752674 CD0: 0.005646 CD1: 0.003690
AL: 2.800000 CL: 0.774309 CD0: 0.006024 CD1: 0.003688
AL: 3.000000 CL: 0.796038 CD0: 0.006407 CD1: 0.003686
AL: 3.200000 CL: 0.817440 CD0: 0.006910 CD1: 0.003680
AL: 3.400000 CL: 0.839075 CD0: 0.007325 CD1: 0.003677
AL: 3.600000 CL: 0.860868 CD0: 0.007676 CD1: 0.003677
AL: 3.800000 CL: 0.882785 CD0: 0.007979 CD1: 0.003677
AL: 4.000000 CL: 0.904510 CD0: 0.008321 CD1: 0.003677
AL: 4.200000 CL: 0.926345 CD0: 0.008621 CD1: 0.003678
AL: 4.400000 CL: 0.948113 CD0: 0.008923 CD1: 0.003680
AL: 4.600000 CL: 0.970084 CD0: 0.009159 CD1: 0.003683
AL: 4.800000 CL: 0.991974 CD0: 0.009398 CD1: 0.003687
AL: 5.000000 CL: 1.014406 CD0: 0.009642 CD1: 0.003691
AL: 5.500000 CL: 1.069725 CD0: 0.010206 CD1: 0.003684
AL: 6.000000 CL: 1.125037 CD0: 0.010710 CD1: 0.003679
AL: 6.500000 CL: 1.180084 CD0: 0.011239 CD1: 0.003674
AL: 7.000000 CL: 1.234497 CD0: 0.011801 CD1: 0.003673
AL: 7.500000 CL: 1.288603 CD0: 0.012422 CD1: 0.003671
AL: 8.000000 CL: 1.342494 CD0: 0.013267 CD1: 0.003653
AL: 8.500000 CL: 1.394850 CD0: 0.014260 CD1: 0.003620
AL: 9.000000 CL: 1.446868 CD0: 0.015189 CD1: 0.003598
AL: 9.500000 CL: 1.498747 CD0: 0.016251 CD1: 0.003584
AL: 10.000000 CL: 1.550829 CD0: 0.017070 CD1: 0.003557
AL: 10.500000 CL: 1.600361 CD0: 0.018313 CD1: 0.003521
AL: 11.000000 CL: 1.651689 CD0: 0.019213 CD1: 0.003515
AL: 11.500000 CL: 1.699186 CD0: 0.020633 CD1: 0.003469
AL: 12.000000 CL: 1.748365 CD0: 0.021637 CD1: 0.003448
AL: 12.500000 CL: 1.791930 CD0: 0.023629 CD1: 0.003402
AL: 13.000000 CL: 1.839153 CD0: 0.024721 CD1: 0.003378
AL: 13.500000 CL: 1.884438 CD0: 0.026147 CD1: 0.003347
AL: 14.000000 CL: 1.919616 CD0: 0.028904 CD1: 0.003282
AL: 14.500000 CL: 1.960927 CD0: 0.030491 CD1: 0.003234
AL: 15.000000 CL: 1.997826 CD0: 0.032529 CD1: 0.003189
AL: 15.500000 CL: 2.027903 CD0: 0.035110 CD1: 0.003137
AL: 16.500000 CL: 1.974098 CD0: 0.047250 CD1: 0.002888
AL: 17.000000 CL: 1.900683 CD0: 0.056620 CD1: 0.002816
AL: 18.500000 CL: 1.266156 CD0: 0.205289 CD1: 0.003238
AL: 19.000000 CL: 1.190919 CD0: 0.223307 CD1: 0.003183
AL: 19.500000 CL: 1.127448 CD0: 0.235990 CD1: 0.003139
AL: 20.000000 CL: 1.093447 CD0: 0.246058 CD1: 0.003141
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)

[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.