Airfoil Optimization with XFOIL
I had to do a group project for an engineering optimization class this semester. We were allowed to choose our own, so I chose airfoil optimization. It was a group project, but I pretty much did the whole thing.
But that's beside the point. I thought the results would be of interest to this forum.
We ended up using the NACA 4-digit series parameters (max camber, max thickness, max camber location) and modified them to also include trailing edge slope. So we had four design variables. Upper and lower bounds on the parameters were used as constraints, as well as a constraint on pitching moment for one of the cases.
I programmed a gradient-based optimization scheme in Matlab, which called XFoil for all function evaluations. The optimization scheme adjusts design variables to optimize the objective function. For this project, we chose to maximize the average of CL/CD at three different angles of attack. Using the average of three different points helps to achieve good performance over a range of angles of attack. The angles of attack considered in the objective function were 1.5, 4, and 7 degrees.
The results are posted below, as well as the paper we wrote. There were six trials run, either with no Cm constraint or with it constrained > or equal to zero, each for Re of 80,000, 200,000, and 300,000. Unsurprisingly, the unconstrained case achieved better performance. The constrained pitching moment airfoils, also unsurprisingly, all end up with a reflexed trailing edge.
The next step is to increase the number of design variables. I would like to include leading edge radius and max thickness location as design variables for greater control over the shape. It is also possible to change the objective function and constraints for different design goals. Stay tuned.
EDIT: By the way, each of the six cases took about 1-1.5 hours to reach a solution on my laptop. I don't count the XFoil function evaluations but I'd guess it's around 1000-2000 each time. I also ran into difficulties with XFoil not converging in some cases, so it's no simple task. I imagine adding 2 more design variables will increase the computational time to over 2 hours.