`AeroFuse.VortexLattice.Horseshoe`

— Type`Horseshoe(panel :: Panel3D, normal, drift = zeros(3))`

Generate a `Horseshoe`

corresponding to a `Panel3D`

, an associated normal vector, and a "drift velocity".

`AeroFuse.VortexLattice.VortexRing`

— MethodConstructor for making a `VortexRing`

with a `Panel3D`

. The following convention is adopted:

```
p1 —front leg→ p4
| |
left leg right leg
↓ ↓
p2 —back leg-→ p3
```

`AeroFuse.VortexLattice.control_point`

— Method`control_point(panel :: Panel3D)`

Compute the control point of a `Panel3D`

for horseshoes/vortex rings, which is the average of the 3-quarter point on each side of the trailing legs.

`AeroFuse.bound_leg`

— Method`bound_leg(panel :: Panel3D)`

Compute the bound leg for a `Panel3D`

, for horseshoes/vortex rings, which quarter point on each side of the trailing legs.

`AeroFuse.form_factor`

— Method`form_factor(fuse :: HyperEllipseFuselage)`

Compute the form factor of `HyperEllipseFuselage`

for parasitic drag estimation based on the DATCOM formula (Raymer - Aircraft Design: A Conceptual Approach, 4th Ed., Eq. 12.31): $FF = 1 + 60 / f³ + f / 400$

`AeroFuse.form_factor`

— Method```
form_factor(wing :: Wing, M, num)
form_factor(wing_mesh :: WingMesh, M, num)
```

Compute the form factor $K_f$ of a `Wing`

or `WingMesh`

at Mach number $M$ for parasitic drag estimation based on Raymer's formula for wing, tail, strut, and pylon (Raymer - Aircraft Design: A Conceptual Approach, 4th Ed., Eq. 12.30): $FF = (1 + 0.6(t/c)ₘₐₓ / (x/c) + 100(t/c)ₘₐₓ^4) ⨯ 1.34M^0.18 × cos(Λ_m)^0.28$.

An integer `num`

is required for interpolating `Wing`

's airfoils' coordinates to determine their maximum thickness-to-chord ratios.

`AeroFuse.lateral_stability_derivatives`

— Method`lateral_stability_derivatives(dvs, U, m, Iyy, Q, S, c)`

Compute the stability derivatives for the lateral forces and moments with respect to the sideslip angle, roll and yaw rates: $[Y,L,N]_{β,p,r}$

The inputs are force and moment coefficient stability derivatives matrix `dvs`

, the freestream speed `U`

, the mass `m`

and lateral moment sof inertia $I_{xx}, I_{zz}$, the dynamic pressure Q, reference area $S$ and span length $b$.

`AeroFuse.longitudinal_stability_derivatives`

— Function`longitudinal_stability_derivatives(dvs, U₀, m, Iyy, Q, S, c)`

Compute the stability derivatives for the longitudinal forces and moments with resepct to speed, angle of attack, and pitch rate: $[X,Z,M]_{u,α,q}$

The inputs are force and moment coefficient stability derivatives matrix `dvs`

, the freestream speed `U`

, the mass `m`

and longitudinal moment of inertia $I_{yy}$, the dynamic pressure Q, reference area $S$ and chord length $c$.

`AeroFuse.make_horseshoes`

— Method`make_horseshoes(wing :: WingMesh)`

Generate an array of `Horseshoe`

s defined by the chord coordinates and normal vectors defined by the camber distribution of a `WingMesh`

.

`AeroFuse.make_vortex_rings`

— Method`make_vortex_rings(wing :: WingMesh)`

Generate an array of `VortexRing`

s defined by the camber coordinates and normal vectors of a `WingMesh`

.

`AeroFuse.parasitic_drag_coefficient`

— Function```
parasitic_drag_coefficient(
fuse :: HyperEllipseFuselage,
refs :: References,
x_tr :: Real,
ts = 0:0.01:1
)
```

Estimate the profile drag coefficient of a `HyperEllipseFuselage`

using the **wetted-area method** based on Schlichting's skin-friction coefficient formula with given `References`

, a specified transition location $xₜᵣ$ as a ratio of the fuselage length, and optionally the parametric distribution `t ∈ [0,1]`

for the discretization of the nose, cabin and rear sections.

`AeroFuse.parasitic_drag_coefficient`

— Method```
parasitic_drag_coefficient(
L, x_tr,
ρ, V, M, μ, S_ref,
S_wet, Kf, fM
)
```

Compute the parasitic drag coefficient $C_{D₀}$ with the following quantities. Uses a transition-based model from laminar to turbulent flow based on Schlichting's skin-friction coefficient formulas.

**Arguments**

- L = Reference length (m)
- x_tr = Transition location as ratio of reference length
- ρ = Density (kg/m³)
- V = Speed (m/s)
- M = Mach number
- S_ref = Reference area (m²)
- μ = Dynamic viscosity (kg/(m ⋅ s))
- S_wet = Wetted area (m²)
- Kf = Form factor
- fM = Mach number influence

`AeroFuse.parasitic_drag_coefficient`

— Method```
parasitic_drag_coefficient(
wing :: Wing,
refs :: References,
x_tr
)
```

Estimate the profile drag coefficient of a `Wing`

using the **wetted-area method** based on Schlichting's skin-friction coefficient formula with given `References`

, a specified transition location $xₜᵣ ∈ [0,1]$ as a ratio of the chord lengths.

`AeroFuse.parasitic_drag_coefficient`

— Method```
parasitic_drag_coefficient(
wing :: WingMesh,
refs :: References
x_tr :: Real,
u_es,
)
```

Estimate the profile drag coefficient of a `WingMesh`

using the **local-friction and local-dissipation method** based on Schlichting's skin-friction coefficient formula with given `References`

, a specified transition ratio $xₜᵣ$, and edge velocities $\mathbf u_e$.

At present, the edge velocities would be computed using the vortex lattice method via `VortexLatticeSystem`

. For this case, the panels corresponding to the camber distribution are used in the calculation.

`AeroFuse.plot_panels`

— Method`plot_panels(panels :: Array{Panel3D})`

Get the coordinates of an array of `Panel3D`

for plotting.

`AeroFuse.plot_planform`

— Method`plot_planform(wing :: AbstractWing)`

Get the planform coordinates of an `AbstractWing`

for plotting.

`AeroFuse.plot_surface`

— Method```
plot_surface(wing :: AbstractWing)
plot_surface(wing :: AbstractWing,
span_num :: Vector{Integer},
chord_num :: Integer)
```

Get the surface coordinates of an `AbstractWing`

for plotting, optionally with specified spanwise and chordwise discretizations.

`AeroFuse.print_info`

— Function`print_info(wing :: AbstractWing)`

Print the relevant geometric characteristics of an `AbstractWing`

.

`AeroFuse.solve_case`

— Method```
solve_case(
components :: Vector{Horseshoe},
fs :: Freestream,
refs :: References;
name = :aircraft :: Symbol,
compressible = false :: Boolean,
print = false :: Boolean,
print_components = false :: Boolean
)
```

Perform a vortex lattice analysis given a vector of `Horseshoe`

s, a `Freestream`

condition, and `References`

values.

`AeroFuse.solve_case`

— Method`solve_case(foil :: Foil, uniform :: Uniform2D; sources = false, wake_length = 1e3, num_panels :: Int64 = 60)`

Evaluate a doublet-source case given a `Foil`

with a `Uniform2D`

, with optional named arguments to specify whether the source terms are non-zero, the length of the wake, and the number of panels for the analysis.

`AeroFuse.spanwise_loading`

— Method```
spanwise_loading(panels :: Matrix{Panel3D}, CFs, S)
spanwise_loading(wing :: WingMesh, CFs, S)
```

Obtain the spanwise aerodynamic loads `(CDi, CY, CL)`

for a given matrix of `Panel3D`

s, surface coefficients `CFs`

over the panels, and reference area $S$.

If a `WingMesh`

is provided instead of the matrix, then it will compute the chordwise panel distribution over the surface.

`AeroFuse.spanwise_loading`

— Method`spanwise_loading(wing_mesh :: WingMesh, ref :: References, CFs, Γs)`

Obtain the spanwise aerodynamic loads `(CDi, CY, CL, CL_norm)`

for a given `WingMesh`

, reference values `ref`

, surface coefficients `CFs`

, and circulations $Γ$.

The chordwise normalized lift coefficient loading `CL_norm`

is calculated via the formula $C_L = 2Γ / ρVc$ based on the reference speed $V$ and chord $c$ from `ref`

.

Note that the surface coefficients `CFs`

should be computed in wind axes to match `CL_norm`

.