buffalo_wings.airfoil.EllipseAirfoil

class buffalo_wings.airfoil.EllipseAirfoil(*, max_thickness)[source]

Bases: Airfoil

Normalized ellipse-based analytic airfoil.

Notes

The airfoil is defined in the standard normalized section frame with the leading edge at (0, 0) and the nominal trailing-edge midpoint at (1, 0). The only free geometric parameter is max_thickness.

Methods

arc_length(u_s, u_e)

Calculate the arc-length distance between two points on surface.

arc_length_breakpoints()

Return the breakpoint locations in arc-length coordinates.

breakpoint_parameter_limits(*, index)

Return parameter limits for one breakpoint.

breakpoints()

Return the trailing-edge parameter locations.

camber_curve(*[, num_points, spacing])

Return a camber-curve representation for this airfoil.

chord()

Return the airfoil chord length.

curvature_from_xi(xi, *, surface)

Return one-surface curvature values at surface-local xi locations.

d2ydx2(u)

Return the second surface derivative at curve parameter locations.

dydx(u)

Return the surface slope at curve parameter locations.

k(u)

Calculate the curvature at parameter location.

leading_edge()

Return the leading-edge location.

normal(u)

Calculate the unit normal at parameter location.

slope_from_xi(xi, *, surface)

Return one-surface slope values at surface-local xi locations.

tangent(u)

Calculate the unit tangent at parameter location.

to_spec()

Return the schema definition needed to recreate this airfoil.

trailing_edge()

Return the midpoint of the trailing-edge points.

u_from_s(s)

Return curve parameters that correspond to arc length.

u_from_x(x, *, surface)

Return curve parameters that correspond to x.

u_from_xi(xi, *, surface)

Convert surface-local xi coordinates to native parameters.

xi_from_u(u)

Convert native parameters to surface-local xi coordinates.

xy_from_s(s)

Return curve coordinates at arc-length locations.

xy_from_u(u)

Calculate the coordinates of the normalized ellipse airfoil.

xy_from_xi(xi, *, surface)

Return one-surface coordinates at surface-local xi locations.

xy_s(s)

Calculate first derivatives at arc-length location.

xy_s_breakpoint(*, index)

Return exact one-sided arc-length derivatives at one breakpoint.

xy_ss(s)

Calculate second derivatives at arc-length location.

xy_ss_breakpoint(*, index)

Return exact one-sided arc-length second derivatives at one breakpoint.

xy_u(u)

Calculate first derivatives with respect to the airfoil parameter.

xy_u_breakpoint(*, index)

Return exact one-sided first derivatives at one breakpoint.

xy_uu(u)

Return second derivatives of the ellipse coordinates.

xy_uu_breakpoint(*, index)

Return exact one-sided second derivatives at one breakpoint.

Attributes

length

Return the full airfoil surface length.

max_thickness

Return the normalized maximum thickness.

spec

Return the schema definition used to create this airfoil.

property max_thickness: buffalo_core.typing.FloatScalar

Return the normalized maximum thickness.

This property stores the maximum thickness as a fraction of chord.

property spec: EllipseAirfoilSpec

Return the schema definition used to create this airfoil.

The returned schema stores the serialized normalized ellipse definition.

xy_from_u(u)[source]

Calculate the coordinates of the normalized ellipse airfoil.

Parameters:

u (buffalo_core.typing.FloatInput) – Signed airfoil parameter values in [-1, 1].

Returns:

Tuple (x, y) of float64 arrays matching the normalized shape of u.

Return type:

tuple[FloatArray, FloatArray]

xy_u(u)[source]

Calculate first derivatives with respect to the airfoil parameter.

Parameters:

u (buffalo_core.typing.FloatInput) – Signed airfoil parameter values in [-1, 1].

Returns:

Tuple (dx/du, dy/du) of float64 arrays.

Return type:

tuple[FloatArray, FloatArray]

xy_uu(u)[source]

Return second derivatives of the ellipse coordinates.

Parameters:

u (buffalo_core.typing.FloatInput) – Signed airfoil parameter values in [-1, 1].

Returns:

Tuple (d2x/du2, d2y/du2) of float64 arrays.

Return type:

tuple[FloatArray, FloatArray]

xy_u_breakpoint(*, index)[source]

Return exact one-sided first derivatives at one breakpoint.

Parameters:

index (int) – Index into breakpoints().

Returns:

((x_u_minus, y_u_minus), (x_u_plus, y_u_plus)).

Return type:

tuple[tuple[FloatScalar, FloatScalar], tuple[FloatScalar, FloatScalar]]

Notes

The ellipse airfoil only reports endpoint breakpoints, so both sides return the same exact boundary value.

xy_uu_breakpoint(*, index)[source]

Return exact one-sided second derivatives at one breakpoint.

Parameters:

index (int) – Index into breakpoints().

Returns:

((x_uu_minus, y_uu_minus), (x_uu_plus, y_uu_plus)).

Return type:

tuple[tuple[FloatScalar, FloatScalar], tuple[FloatScalar, FloatScalar]]

Notes

The ellipse airfoil only reports endpoint breakpoints, so both sides return the same exact boundary value.

xy_s_breakpoint(*, index)[source]

Return exact one-sided arc-length derivatives at one breakpoint.

Parameters:

index (int) – Index into breakpoints().

Returns:

((x_s_minus, y_s_minus), (x_s_plus, y_s_plus)).

Return type:

tuple[tuple[FloatScalar, FloatScalar], tuple[FloatScalar, FloatScalar]]

Notes

The ellipse airfoil only reports endpoint breakpoints, so both sides return the same exact boundary value.

xy_ss_breakpoint(*, index)[source]

Return exact one-sided arc-length second derivatives at one breakpoint.

Parameters:

index (int) – Index into breakpoints().

Returns:

((x_ss_minus, y_ss_minus), (x_ss_plus, y_ss_plus)).

Return type:

tuple[tuple[FloatScalar, FloatScalar], tuple[FloatScalar, FloatScalar]]

Notes

The ellipse airfoil only reports endpoint breakpoints, so both sides return the same exact boundary value.

u_from_xi(xi, *, surface)[source]

Convert surface-local xi coordinates to native parameters.

Parameters:
  • xi (buffalo_core.typing.FloatInput) – Surface-local coordinates in [0, 1] measured from the leading edge to the trailing edge.

  • surface ({"lower", "upper"}) – Surface to evaluate.

Returns:

Signed native ellipse parameters matching xi on the selected surface.

Return type:

buffalo_core.typing.FloatArray

Notes

The ellipse runtime uses the linear mapping u = +/- xi, with the sign determined by surface.

xi_from_u(u)[source]

Convert native parameters to surface-local xi coordinates.

Parameters:

u (buffalo_core.typing.FloatInput) – Signed native ellipse parameters in [-1, 1].

Returns:

Surface-local xi values and upper-surface membership flags.

Return type:

SurfaceMappedValues

Notes

The ellipse runtime uses the linear mapping xi = |u|.

breakpoints()[source]

Return the trailing-edge parameter locations.

Returns:

Ordered parameter values for the lower and upper trailing-edge endpoints.

Return type:

list[FloatScalar]

arc_length(u_s, u_e)

Calculate the arc-length distance between two points on surface.

Parameters:
  • u_s (buffalo_core.typing.FloatScalar) – Start point of distance calculation.

  • u_e (buffalo_core.typing.FloatInput) – End point of distance calculation.

Returns:

Distance from start point to end point.

Return type:

buffalo_core.typing.FloatArray

arc_length_breakpoints()

Return the breakpoint locations in arc-length coordinates.

Returns:

Arc-length coordinates measured from the minimum native parameter.

Return type:

list[FloatScalar]

Notes

These values include the two curve endpoints as boundary markers. Interior breakpoints correspond to the native-parameter interior breakpoints returned by breakpoints().

breakpoint_parameter_limits(*, index)

Return parameter limits for one breakpoint.

Notes

Endpoint breakpoints return the exact boundary parameter. Interior breakpoints return nearby one-sided parameters chosen within the neighboring breakpoint interval for the current generic breakpoint-side implementation. These limits exist to support the sampled fallback in the generic *_breakpoint methods and should not be treated as the primary source of truth when a subclass can provide exact one-sided values directly.

Return type:

tuple[TypeAliasForwardRef(‘buffalo_core.typing.FloatScalar’), TypeAliasForwardRef(‘buffalo_core.typing.FloatScalar’)]

camber_curve(*, num_points=81, spacing='cosine')

Return a camber-curve representation for this airfoil.

Parameters:
  • num_points (int, default 81) – Number of shared surface samples to use when an approximate camber line must be derived from the airfoil geometry.

  • spacing ({"uniform", "cosine"}, default "cosine") – Spacing rule used for the shared surface-local sample locations in the approximate extraction path.

Returns:

Exact or approximate camber-curve result for this airfoil.

Return type:

AirfoilCamberResult

Raises:

ValueError – If num_points or spacing is invalid for the approximate extraction path.

chord()

Return the airfoil chord length.

Returns:

Distance between the leading-edge reference and trailing-edge midpoint reference.

Return type:

buffalo_core.typing.FloatScalar

curvature_from_xi(xi, *, surface)

Return one-surface curvature values at surface-local xi locations.

Parameters:
  • xi (buffalo_core.typing.FloatInput) – Surface-local coordinates in [0, 1] measured from the leading edge to the trailing edge.

  • surface ({"lower", "upper"}) – Surface to evaluate.

Returns:

Surface-oriented curvature values on the selected surface.

Return type:

buffalo_core.typing.FloatArray

d2ydx2(u)

Return the second surface derivative at curve parameter locations.

Parameters:

u (buffalo_core.typing.FloatInput) – Airfoil parameters.

Returns:

Second derivative values d^2y/dx^2 evaluated at u.

Return type:

buffalo_core.typing.FloatArray

dydx(u)

Return the surface slope at curve parameter locations.

Parameters:

u (buffalo_core.typing.FloatInput) – Airfoil parameters.

Returns:

Surface slope values dy/dx evaluated at u.

Return type:

buffalo_core.typing.FloatArray

k(u)

Calculate the curvature at parameter location.

Parameters:

u (buffalo_core.typing.FloatInput) – Parameter for desired locations.

Returns:

Curvature of surface matching the normalized shape of u.

Return type:

buffalo_core.typing.FloatArray

leading_edge()

Return the leading-edge location.

Returns:

(x, y) location of the leading-edge reference point.

Return type:

tuple[FloatScalar, FloatScalar]

property length: buffalo_core.typing.FloatScalar

Return the full airfoil surface length.

Returns:

Total airfoil surface length measured from the lower trailing edge to the upper trailing edge.

Return type:

buffalo_core.typing.FloatScalar

normal(u)

Calculate the unit normal at parameter location.

Parameters:

u (buffalo_core.typing.FloatInput) – Parameter for desired locations.

Returns:

Tuple (n_x, n_y) of float64 arrays matching the normalized shape of u.

Return type:

tuple[FloatArray, FloatArray]

slope_from_xi(xi, *, surface)

Return one-surface slope values at surface-local xi locations.

Parameters:
  • xi (buffalo_core.typing.FloatInput) – Surface-local coordinates in [0, 1] measured from the leading edge to the trailing edge.

  • surface ({"lower", "upper"}) – Surface to evaluate.

Returns:

Surface slope values dy/dx on the selected surface.

Return type:

buffalo_core.typing.FloatArray

tangent(u)

Calculate the unit tangent at parameter location.

Parameters:

u (buffalo_core.typing.FloatInput) – Parameter for desired locations.

Returns:

Tuple (t_x, t_y) of float64 arrays matching the normalized shape of u.

Return type:

tuple[FloatArray, FloatArray]

to_spec()

Return the schema definition needed to recreate this airfoil.

Returns:

Serialized airfoil definition that can recreate this runtime object.

Return type:

AirfoilDefinitionSpec

Notes

For runtime families covered by the current schema round-trip contract, this returns the same schema content as spec.

trailing_edge()

Return the midpoint of the trailing-edge points.

Returns:

(x, y) location of the trailing-edge midpoint reference.

Return type:

tuple[FloatScalar, FloatScalar]

u_from_s(s)

Return curve parameters that correspond to arc length.

Parameters:

s (buffalo_core.typing.FloatInput) – Arc lengths measured from the lower trailing edge.

Returns:

Curve parameters corresponding to s.

Return type:

buffalo_core.typing.FloatArray

Raises:

ValueError – When arc-length provided is larger than airfoil surface length.

u_from_x(x, *, surface)

Return curve parameters that correspond to x.

Parameters:
  • x (buffalo_core.typing.FloatInput) – Chordwise coordinates in the normalized airfoil frame.

  • surface ({"lower", "upper"}) – Surface to solve on.

Returns:

Curve parameters on the requested surface.

Return type:

buffalo_core.typing.FloatArray

Raises:

ValueError – If any requested chordwise coordinate lies outside the reachable x-range of the selected surface.

xy_from_s(s)

Return curve coordinates at arc-length locations.

Parameters:

s (buffalo_core.typing.FloatInput) – Arc length location of point.

Returns:

(x, y) coordinates matching the normalized shape of s.

Return type:

tuple[FloatArray, FloatArray]

xy_from_xi(xi, *, surface)

Return one-surface coordinates at surface-local xi locations.

Parameters:
  • xi (buffalo_core.typing.FloatInput) – Surface-local coordinates in [0, 1] measured from the leading edge to the trailing edge.

  • surface ({"lower", "upper"}) – Surface to evaluate.

Returns:

Tuple (x, y) of float64 arrays matching the normalized shape of xi.

Return type:

tuple[FloatArray, FloatArray]

xy_s(s)

Calculate first derivatives at arc-length location.

Parameters:

s (buffalo_core.typing.FloatInput) – Arc length location of point.

Returns:

(dx/ds, dy/ds) coordinates matching the normalized shape of s.

Return type:

tuple[FloatArray, FloatArray]

Notes

If s matches one of arc_length_breakpoints() exactly, this method returns the minus-side derivative limit. Subclasses should override xy_s_breakpoint() when exact one-sided breakpoint derivatives are available analytically.

xy_ss(s)

Calculate second derivatives at arc-length location.

Parameters:

s (buffalo_core.typing.FloatInput) – Arc length location of point.

Returns:

(d^2x/ds^2, d^2y/ds^2) coordinates matching the normalized shape of s.

Return type:

tuple[FloatArray, FloatArray]

Notes

If s matches one of arc_length_breakpoints() exactly, this method returns the minus-side derivative limit. Subclasses should override xy_ss_breakpoint() when exact one-sided breakpoint second derivatives are available analytically.