public abstract class NACA6Series extends java.lang.Object implements Airfoil
This class represents an arbitrary NACA 6 or 6*A series airfoil section such as a NACA 63-020 airfoil.
Ported from FORTRAN "NACA6.FOR" to Java by: Joseph A. Huwaldt, June 3, 2010
Original FORTRAN "NACA4" code had the following note:
AUTHORS - Charles L.Ladson and Cuyler W. Brooks, NASA Langley Liam Hardy, NASA Ames Ralph Carmichael, Public Domain Aeronautical Software Last FORTRAN version: 23Nov96 2.0 RLC NOTES - This program has also been known as LADSON and SIXSERIES and as SIXSERIE on systems with a 8-letter name limit. REFERENCES- NASA Technical Memorandum TM X-3069 (September, 1974), by Charles L. Ladson and Cuyler W. Brooks, Jr., NASA Langley Research Center. "Theory of Wing Sections", by Ira Abbott and Albert Von Doenhoff.
Modified by: Joseph A. Huwaldt
Constructor and Description |
---|
NACA6Series(double CLi,
double thickness,
double length)
Create a NACA 6 series airfoil with the specified parameters.
|
Modifier and Type | Method and Description |
---|---|
java.util.List<java.awt.geom.Point2D> |
getCamber()
Returns a list of points containing the camber line of the airfoil.
|
java.util.List<java.awt.geom.Point2D> |
getLower()
Returns a list of points containing the abscissas (X coordinate) and
ordinates (Y coordinate) of the points defining the lower surface of the airfoil.
|
java.util.List<java.lang.Double> |
getLowerYp()
Returns a list containing the slope (dy/dx) of the lower
surface of the airfoil at each ordinate.
|
abstract java.lang.String |
getProfile()
Returns a String that represents the profile type of this airfoil.
|
java.util.List<java.awt.geom.Point2D> |
getUpper()
Returns a list of points containing the abscissas (X coordinate) and
ordinates (Y coordinate) of the points defining the upper surface of the airfoil.
|
java.util.List<java.lang.Double> |
getUpperYp()
Returns a list containing the slope (dy/dx) of the upper
surface of the airfoil at each ordinate.
|
protected boolean |
modCamberLine(double x,
boolean if6xa,
double ycmb,
double tanth,
double ycp2,
double cli,
double[] outputs)
Method used by 6*A series airfoils to modify the camber line.
|
protected void |
modTrailingEdge(double x,
double xu,
double yu,
double xl,
double yl,
double[] outputs)
Method used by 6*A series airfoils to modify the airfoil trailing edge.
|
protected abstract void |
phep(double[] phi,
double[] eps)
Fill in phi, eps vectors for 63 series airfoil.
|
protected abstract void |
phps(double[] phi,
double[] psi)
Fill in the psi vector for a 63 series airfoil.
|
protected double |
seval(int n,
double u,
double[] x,
double[] y,
double[] b,
double[] c,
double[] d)
Evaluate the cubic spline function.
|
protected void |
spline(int n,
double[] x,
double[] y,
double[] b,
double[] c,
double[] d)
Compute the coefficients of a cubic spline
NOTES - From "Computer Methods for Mathematical Computations", by
Forsythe, Malcolm, and Moser.
|
java.lang.String |
toString()
Returns a string representation of this airfoil
(the NACA designation of this airfoil).
|
public NACA6Series(double CLi, double thickness, double length)
CLi
- Design lift coefficient (e.g.: 63-206 has CLi = 0.2).thickness
- The thickness to chord ratio (e.g.: 0.20 ==> 20% t/c).length
- The chord length.public java.util.List<java.awt.geom.Point2D> getUpper()
public java.util.List<java.awt.geom.Point2D> getLower()
public java.util.List<java.awt.geom.Point2D> getCamber()
public java.util.List<java.lang.Double> getUpperYp()
getUpperYp
in interface Airfoil
public java.util.List<java.lang.Double> getLowerYp()
getLowerYp
in interface Airfoil
public java.lang.String toString()
toString
in class java.lang.Object
public abstract java.lang.String getProfile()
protected boolean modCamberLine(double x, boolean if6xa, double ycmb, double tanth, double ycp2, double cli, double[] outputs)
x
- The current x/c being calculated.if6xa
- Flag indicating if 6*A specific calculations have been enabled.ycmb
- The y position of the camber line.tanth
- The slope of the camber line.ycp2
- ?cli
- The design lift coefficient.outputs
- An existing 3-element array filled in with
outputs: outputs[ycmb, tanth, ycp2].protected void modTrailingEdge(double x, double xu, double yu, double xl, double yl, double[] outputs)
x
- The x/c location being calculated.xu
- The x/c location of the upper surface ordinate.yu
- The upper surface ordinate.xl
- The x/c location of hte lower surface ordinate.yl
- The lower surface ordinate.outputs
- An existing 2-element array filled in with
outputs: outputs[yu, yl].protected abstract void phep(double[] phi, double[] eps)
phi
- An existing array with 201 elements to be filled in
by this method.eps
- An existing array with 201 elements to be filled in
by this method.protected abstract void phps(double[] phi, double[] psi)
phi
- An array filled in by phep().psi
- An existing array with 201 elements to be filled in
by this method.protected final void spline(int n, double[] x, double[] y, double[] b, double[] c, double[] d)
n
- # of data points (n>1)x
- abscissas of knots: x[0..n-1]y
- ordinates of knots: x[0..n-1]b
- Existing array filled with linear coeff.: b[0..n-1]c
- Existing array filled with quadratic coeff.: c[0..n-1]d
- Existing array filled with cubic coeff.: d[0..n-1]protected final double seval(int n, double u, double[] x, double[] y, double[] b, double[] c, double[] d)
n
- # of data points (n>1)u
- abscissa at which the spline is to be evaluated.x
- abscissas of knots: x[0..n-1]y
- ordinates of knots: x[0..n-1]b
- linear coeff.: b[0..n-1]c
- quadratic coeff.: c[0..n-1]d
- cubic coeff.: d[0..n-1]