(input-shape-line-airfoil)=
# Airfoil
`type="airfoil"` consumes a standard airfoil coordinate file and produces a
closed polyline that starts and ends at the trailing edge and passes through
the leading edge. Both Selig (single block) and Lednicer (upper / blank line /
lower) formats are supported.
```xml
mh104.dat
1
1
```
**Specification**
- ``: Path to the airfoil data file (relative to the main XML file).
- Attributes
- `data`: Source of the data. Currently only `file` is supported.
- `format`: Airfoil file format. `1` / `selig` / `s*` for Selig, `2` / `lednicer` / `l*` for Lednicer. Default is `2`.
- `header`: Number of header rows in the data file to skip. Default is `0`.
- `direction`: `1`/`ccw`/`forward` or `-1`/`cw`/`reverse`. Default is `1`.
- ``: Optional. Override the airfoil leading-edge point used for
surface splitting.
- Attribute
- `name`: Optional name for the leading-edge vertex. When omitted, the
default name is `_le`.
- Value
- Optional `x y` coordinates in the raw airfoil-data coordinate system.
When omitted, PreVABS keeps the auto-detected geometry and only renames
the vertex.
- ``: Optional. Override the airfoil trailing-edge point used
for surface splitting.
- Attribute
- `name`: Optional name for the trailing-edge vertex. When omitted, the
default name is `_te`.
- Value
- Optional `x y` coordinates in the raw airfoil-data coordinate system.
- ``: Optional boolean. If true, normalize the raw airfoil data
along the x-direction before edge detection and splitting.
- The transform is
- `x' = (x - x_min) / (x_max - x_min)`
- `y' = y / (x_max - x_min)`
- User-specified `` / `` coordinates are
transformed by the same rule automatically.
- ``: Optional. Mirror the airfoil after construction. The element value
is a boolean (`1`/`0`/`true`/`false`); attributes `axis` (`2`/`x2`/`y` or
`3`/`x3`/`z`, default `2`) and `loc` (mirror location, default `0.5`)
control the reflection.
- ``: Optional. If true, reverse the order of vertices on the line
after all other transforms.
If `name` is not provided, the leading-edge and trailing-edge vertices are
named `_le` and `_te`.
Interior vertices are named `_p1`, `_p2`, ….
## Non-standard Airfoil Data
Some airfoil datasets do not place the leading edge at `(0, 0)` or the
trailing edge at `(1, 0)`. For example, the manual example
`test/manual/airfoil/ua79sff.dat` has its main-element leading edge near
`(0.65, -0.0184)` in the original file coordinates.
For these cases you can either:
- explicitly provide `` / `` coordinates, or
- enable `` so the raw x-range is mapped to `[0, 1]` before
splitting
Example:
```xml
ua79sff.dat
0.650000 -0.018400
1.000000 0.000000
```