Skip to content
Snippets Groups Projects
Verified Commit 3ddf567a authored by Thomas Lambert's avatar Thomas Lambert :helicopter:
Browse files

add(airfoil): add airfoil class

parent 42da5edd
No related branches found
No related tags found
No related merge requests found
Pipeline #7340 passed
classdef Airfoil
% AIRFOIL Class for airfoils with all their important data.
% This AIRFOIL class is used to represent completely an airfoil and the important metrics
% attached to it. These data include:
% - the airofil name
% - the airofil full coordinates (in Selig format)
% - the airofil upper surface coordinates
% - the airofil lower surface coordinates
% - a structure containing the original airfoil polars (obtained using xf2mat)
% - a structure containing the extended airfoil polars (obtained using extendpolar)
%
% <a href="https://gitlab.uliege.be/am-dept/matlab_airfoil_toolbox">Documentation (README)</a>
% <a href="https://gitlab.uliege.be/am-dept/matlab_airfoil_toolbox/-/issues">Report an issue</a>
% -----
%
% Usage:
% Af = AIRFOIL initiates an empty airfoil object.
%
% Af = AIRFOIL(coordFile) initiates an airfoil object whose coordinates will be found in
% coordFile. The airfoil name will be retreived automatically from the coordinates file.
%
% Af = AIRFOIL(coordFile, name) initiates an airfoil object whose coordinates will be found in
% coordFile, but using the name given as input.
%
% Inputs:
% coordFile : Airfoil coordinates, in Selig or Lednicer format (dat-file)
% name : The name of the airfoil
%
% Example:
% Af = AIRFOIL
% Af = AIRFOIL('data/naca0012.dat')
% Af = AIRFOIL('data/naca0012.dat','NACA 0012')
%
% See also: XF2MAT, EXTENDPOLAR.
%
% -----
% (c) Copyright 2022 University of Liege
% Author: Thomas Lambert <t.lambert@uliege.be>
% ULiege - Aeroelasticity and Experimental Aerodynamics
% Apache 2.0 License
% https://gitlab.uliege.be/am-dept/matlab_airfoil_toolbox
% ----------------------------------------------------------------------------------------------
properties
% Name
name
% Coordinates (full airfoil, upper and lower surfaces separately)
coord
upper
lower
end
properties (GetAccess = public, SetAccess = protected)
% Polar must be protected to ensure proprer behavior of the codes using Airfoil
Polar (1, 1) af_tools.Polar
end
methods
function self = Airfoil(coordFile, name)
% AIRFOIL Constructor.
% Initiates the Airfoil object based on its coordFile. If a name is explicitely
% passed, this will be used for the airfoil name. If no name is given, it will be
% retreived from the coordFile.
self.Polar = af_tools.Polar;
if nargin > 0 && ~isempty(coordFile)
import af_tools.*
% Parse the coordinates files and save the useful properties
Dat = formatairfoilcoord(coordFile);
self.coord = Dat.coord;
self.upper = Dat.upper;
self.lower = Dat.lower;
% Define name
if nargin == 2
self.name = name;
else
self.name = Dat.airfoil;
end
end
end
% ---------------------------------------
% Other methods
function self = loadpolar(self, polarFile)
self.Polar = self.Polar.loadpolar(polarFile);
end
function self = polypolar(self, clPoly, cdPoly)
self.Polar = self.Polar.polypolar(clPoly, cdPoly);
end
function self = extendpolar(self)
self.Polar = self.Polar.extendpolar();
end
self = addextremereynolds(self)
end
end
function obj = addextremereynolds(obj)
% ADDEXTREMEREYNOLDS Adds dupplicate polars for extreme Reynolds number.
% In order to make a proper interpolation later on, this method duplicates the polars for the
% lowest and highest Reynolds and assign these respectively to Re = 1 and Re = 1e15.
% This will allow extrapolation outside of the original Range by symply considering the Polars
% to be Reynolds-independant if the Reynolds is very low or very high.
%
% Note:
% If we have only one polar (i.e. one Reynolds), then this method does not do anything.
% -----
% (c) Copyright 2022 University of Liege
% Author: Thomas Lambert <t.lambert@uliege.be>
% ULiege - Aeroelasticity and Experimental Aerodynamics
% Apache 2.0 License
% https://gitlab.uliege.be/am-dept/matlab_airfoil_toolbox
% ----------------------------------------------------------------------------------------------
% Defaults extreme Reynolds
DEF.LOW_REYNOLDS = 1;
DEF.HIGH_REYNOLDS = 1e15;
% Add duplicate polars for extreme Reynolds
if ~isempty(obj.Polar)
if length(obj.Polar.reynolds) > 1
obj.Polar.reynolds = [DEF.LOW_REYNOLDS, obj.Polar.reynolds, DEF.HIGH_REYNOLDS];
obj.Polar.aoa = duplicateextremes(obj.Polar.aoa);
obj.Polar.cl = duplicateextremes(obj.Polar.cl);
obj.Polar.cd = duplicateextremes(obj.Polar.cd);
obj.Polar.cm = duplicateextremes(obj.Polar.cm);
end
end
end
function array = duplicateextremes(array)
% DUPLICATEEXTREMES Duplicates the first and last columns of an array
array = [array(:, 1), array, array(:, end)];
end
......@@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Added
- **Polar**: add polypolar method
- **Airfoil** class
### Changed
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment