This is Xoptfoil, an airfoil optimization code using the Xfoil aerodynamics
Copyright 2014--2016 Daniel Prosser.
Xoptfoil uses the GNU Public License Version 3, a copy of which can be found in the license directory.
-- Supports up to 30 operating points during optimization and multiple user-defined constraints
-- Each operating point has a specified lift coefficient or angle of attack, Reynolds number, Mach number, and flap deflection
-- Different optimization objectives (minimize drag, maximize glide slope, minimize sink rate, or maximize lift) can be set at each operating point
-- Each operating point is assigned a relative weight (importance) by the user
-- Available constraints include thickness, camber, curvature, pitching moment, and trailing edge wedge angle
-- Currently included optimization algorithms: particle swarm, genetic algorithm, and Nelder-Mead simplex algorithm
-- The optimizer is robust: many checks for reasonable geometry and Xfoil convergence in place
-- Particle swarm and genetic algorithm run in parallel (must be compiled manually; pre-compiled binaries are serial)
-- Xfoil engine accurately predicts transition, separation bubbles, and stall at low Reynolds numbers
Compiling instructions are included in the User Guide.
Options are stored in the fortran namelist file inputs.txt. This file sets basic optimization options, operating conditions, constraints, and Xfoil paneling and run settings.
In addition to the optimization code, an tool to run Xfoil alone is include, as well as a python/matplotlib script to visualize optimization progress.
-- Show angle of attack in performance summary.
-- Update example case to reflect changes in constraints settings in recent versions.
-- Ask user to automatically remove pitching moment constraints for symmetrical airfoil optimization.
-- Fix bug for symmetrical airfoil optimization.
-- Added min_camber and max_camber constraints.
-- Split max_curv_reverse constraints into max_curv_reverse_top and max_curv_reverse_bot, allowing you to control the number of reversals on the top and bottom surfaces independently. Set default to 0 for top and 1 for bottom.
-- Fixed a bug in the objective function where sometimes it would report an artificially excellent performance value when very close to a constraint boundary.
-- The check for seed airfoil constraint violations is now interactive, and the seed_violation_handling option in constraints has been removed.
-- Fixed bug in Makefiles not compiling due to change in src/ directory structure (thanks babangs on RCGroups).
-- Added information to User Guide on how to get around problem with latest MinGW (Windows compiler). The latest version does not include OpenMP support, so to compile the parallel version of Xoptfoil, it is necessary to revert to an older version of the compiler.
-- Set default for min_bump_width to correct value of 0.1 instead of 0.5. This would have only affected runs that did not already have min_bump_width set in the input file.
-- Genetic algorithm has been added as a global search option. It can be used instead of particle swarm optimization. Convergence and performance are similar to particle swarm with 'exhaustive' search profile.
-- 'exhaustive' convergence profile is now default for particle swarm, with 700 iterations. The 'standard' profile has been renamed to 'quick'.
-- Better input error checking has been implemented for namelist inputs.
-- Diagnostic outputs have been improved when checking to make sure that the seed airfoil passes the user-defined constraints. For example, the user is notified of locations where curvature reversals occur.
-- Feasible initialization inputs are now in their own namelist, since they are common to genetic algorithm and particle swarm. In existing input files, some inputs in the particle_swarm namelist have changed. See User Guide for correct variable names.
-- Xoptfoil can now restart from a previous optimization. Set restart=.true. in optimization_options of the input file to restart. Some output files from the previous run are also required; see the user guide for more information.
-- design_visualizer.py now explicitly asks for the case name instead of getting it from a command line argument.
-- Fixed a bug in design_visualizer.py that was preventing it from running. Sorry about that!
-- design_visualizer.py was mistakenly omitted from release v1.7.0. It is present in v1.7.1 and located in the bin directory.
-- design_visualizer.py can now monitor an ongoing optimization, so you can see the shape and polars for the current best airfoil and the seed airfoil while xoptfoil is running. Select option 3 in the menu of design_visualizer.py to use this function.
-- Created design_visualizer.py, a menu-based python script to plot airfoils and polars generated during the optimization. See the user guide for installation and usage information.
-- Removed design_plotter tool; its functionality has been moved into the main xoptfoil code so that you don't need to perform this separate step. Airfoil coordinates and polars are not written directly by xoptfoil during execution.
-- Updated documentation with new changes and changes from v1.6.0 that hadn't been incorporated in the documentation.
-- Flap angle can now be optimized by Xoptfoil at any desired operating point or prescribed.
-- Pitching moment constraints are now set per operating point instead of using a global min value.
-- New pso_convergence_profile setting: use the default 'standard' settings or a new 'exhaustive' option, which usually finds better designs at the expense of longer time to converge.
-- Convergence criterion has been changed for the particle swarm optimization. Now only a single tolerance based on particle speed (called pso_speed_tol) is needed; the settings pso_nstop has been removed.
-- Documentation for two example cases has been created, which gives a complete walk-through of optimizing an airfoil and also using the new flap angle optimization feature.
-- Added capability for specified flap deflection at each operating point.
-- Different objectives can now be specified at each operating point.
-- Added 'max-cl' optimization type to maximize lift at specified angle of attack.
-- New objective function scaling to facilitate different objectives at each operating point. As a result, optimization progress is now reported as % improvement over the seed airfoil.
-- Changed number of wake panels in Xfoil code to be the same as in Xfoil 6.99 (old version was the same as Xfoil 6.97).
-- Updated documentation reflecting new features. Also updated documentation to explain how to compile for parallel processing on Windows.
-- Improved robustness in thickness checks
-- Added constraint to force only symmetrical airfoils to be generated.
-- Bug fix in input_sanity.f90
-- max_thickness constraint to specify an upper bound on airfoil thickness (defaults to 1000.0).
-- The second CLO now specifies output airfoil name (which is written on the first line of the output airfoil file) instead of the file name; the file name is the airfoil name with '.dat' appended.
-- Added CLOs to specify input and output file names; reverts to defaults inputs.txt and optfoil.dat, respectively, if none are specified.
-- Removed restart and restart_write_freq options in the input file, since these options haven't been implemented.
-- Updated documentation for compiling and running, and combined them into one manual.
-- Improved initialization and stopping condition for simplex search.
-- Added a curvature reversals constraint to limit wavy designs. Sometimes the optimizer comes up with these because the waviness is not harmful aerodynamically over the operating points selected. The curvature reversals constraint penalizes reversals that exceed a given curvature threshhold. You can read more about how to use this constraint in the user guide.
-- Automatic checking of the seed airfoil is now performed to make sure it meets all constraints. If it does not pass a constraint, the program will either stop with an error or continue with a warning, depending on the seed_violation_handling input parameter. You can read more about this in the user guide.
-- The min_moment constraint can now be explicitly turned off, automatically set based on the seed airfoil, or specified manually. See the user guide entries for the inputs moment_constraint_type and min_moment.
-- Implemented better trailing edge thickness checking to prevent really thin trailing edges. The wedge angle constraint is now applied over the entire back half of the airfoil.
-- Added parallel support with OpenMP for computers with multiple cores and threads to speed up the optimization process.
-- Xfoil consistency check removed from input file. This is now handled automatically and only in cases where it might be needed, so the user doesn't have to worry about it anymore.
-- Parallel and serial binaries are included for Linux and Windows on x86-64 architecture. These have been compiled linking any needed runtime libraries (e.g. for OpenMP) statically so there should be no runtime errors about not being able to load a shared library.
-- More strict checking for too thin geometry near trailing edge. Should ensure that there can be no crossings of the top and bottom surfaces. Note: the Windows executable has not yet been updated for Version 1.1.1.
-- Added Hicks-Henne shape functions for parameterization. See the user guide for more information on using them.
-- Added consistency checks for Xfoil, which the user can enable for any operating point. This prevents the optimizer from converging to unrealistic
designs. See the user guide for more information.
-- Added references on shape functions, a user guide, and a compiling guide.
-- Releases now include executables for Linux and Windows compiled on x86-64 architecture.
-- Added initial feasibility checks for simplex search
-- Include seed airfoil as one of the initial designs, if it is feasible
-- Add option to write design variables to file each time the best overall design is improved
-- Created tool to evaluate coordinates and polars for designs generated during optimization, which can be visualized with Tecplot