Sears Function Gust Lift (aerodynamics/aeroelasticity/sears-function-gust-lift)
Use when the task is the frequency-domain unsteady lift response of a
rigid thin airfoil to a convected sinusoidal vertical gust (the Sears
problem, Sears 1941, JAS 8(3); Bisplinghoff, Ashley and Halfman,
Aeroelasticity, the unsteady incompressible gust chapter; Fung, An
Introduction to the Theory of Aeroelasticity): the complex sears
function S(k) evaluated from the Bessel series with the Theodorsen
lift-deficiency function C(k), the gust gain and the phase lag, and the
unsteady gust-load amplitude against the quasi-steady
2pirhoVbw_g_amp reference. This leaf is the section aerodynamics
transfer function of the rigid airfoil, the frequency-domain complement
of the flexible-section time-domain discrete-gust response sibling
aerodynamics/aeroelasticity/aeroelastic-gust-response (whose
quasi-steady reference L_qs = 2pirhoVbw_g is exactly the k = 0
amplitude this leaf's gain is normalized against), and it evaluates the
same published C(k) expression, built on the same Bessel machinery, that
aerodynamics/aeroelasticity/flutter-speed-prediction documents for the
V-g stability problem. It produces no stability content, no structural
degrees of freedom and no vehicle load factor: the gust response of a
flexible typical section, static divergence, added-mass coefficient
estimation and the discrete-gust certification load-factor method all
belong to their own leaves.
Domain quick reference
- Sears problem: rigid thin airfoil of semi-chord b = c/2 in
incompressible flow at speed V encounters a frozen sinusoidal vertical
gust with the gust vertical velocity field w_g(x, t) = w_g_amp *
Re{e^(i*(omegat - kx/b))}, x measured downstream from the leading
edge, so the gust front crosses the leading edge at t = 0. Time
dependence e^(+iomegat); physical quantities are the real part.
Reduced frequency k = omegab/V = 2pifb/V.
- Complex lift amplitude per unit span: L_hat = 2pirhoVbw_g_amp *
S(k) with L(t) = Re{L_hate^(iomegat)}. The quasi-steady reference
amplitude L_qs = 2pirhoVb*w_g_amp is the k = 0 value, identical to
the reference the discrete-gust sibling documents.
- Bessel series (Abramowitz and Stegun 9.1.10 to 9.1.11, the same
published series family the flutter sibling cites for C(k)): J0(x) =
sum_m (-1)^m (x/2)^(2m)/(m!)^2, J1(x) = (x/2)*sum_m (-1)^m
(x/2)^(2m)/(m!(m+1)!), and the log-harmonic Y0 and Y1 forms with the
Euler-Mascheroni constant in the ln(x/2) + gamma terms. Each series
runs until its term magnitude falls below SERIES_TOL times the running
sum, with SERIES_TERMS_MAX as the safety cap.
- Hankel functions of the second kind: H0^(2)(k) = J0(k) - iY0(k),
H1^(2)(k) = J1(k) - iY1(k). Theodorsen function C(k) =
H1^(2)(k)/(H1^(2)(k) + i*H0^(2)(k)): C = 1 at k = 0 exactly (steady
flow) and |C| falls toward the high-reduced-frequency limit 1/2.
- Sears function, leading-edge reference: S(k) = [C(k)(J0(k) -
iJ1(k)) + iJ1(k)]e^(-ik), S(0) = 1 + 0i exactly. The classical
mid-chord-referenced printed expression S_mid(k) = C(k)(J0(k) - iJ1(k)) +
iJ1(k) is the exact identity S_mid(k) = S(k)e^(+ik), with |S_mid| =
|S|; the module pins the leading-edge reference, the convention whose
phase lag grows monotonically from zero.
- Gust gain and phase lag: gain |S(k)| is the unsteady-load amplitude
ratio to the quasi-steady reference, monotone decreasing from |S(0)| =
1; the phase lag phi(k) = -arg S(k) in radians is the time by which
the lift peak lags the gust peak at the leading edge, monotone
increasing from zero. The half-amplitude reduced frequency where
|S(k)| = 0.5 sits near k = 0.567.
- Wronskian gain identity (from the Bessel Wronskian J1Y0 - J0Y1 =
2/(pik)): |S(k)| = (2/(pik))/|H1^(2)(k) + i*H0^(2)(k)| for k > 0,
exact to machine precision over the whole sweep of this leaf.
- Scope: single-frequency frozen sinusoidal gust, incompressible
thin-airfoil theory, small gust amplitudes (linear), two-dimensional
section per unit span, rigid airfoil with no motion degrees of freedom
and no added-mass coefficient catalog. Loads are N/m per unit span.
FAR 25 and CS 25 gust-load rules frame the certification context by
name only (standards-map.yaml far-25 and cs-25, reference-only),
never reproduced.
Workflow
- Gather the gust encounter inputs: air density rho, flight speed V,
semi-chord b = c/2, gust vertical velocity amplitude w_g_amp, and the
reduced frequency k of the sinusoidal gust, either chosen directly for
a target gust wavelength or converted from the gust frequency f with
reduced_frequency (k = 2pif*b/V). The module rejects non-positive
rho, V, b and f and negative or non-finite amplitudes with ValueError.
- Confirm the Bessel machinery: bessel_j0, bessel_j1, bessel_y0 and
bessel_y1 at x = 0.5, 1.0 and 2.0 reproduce the published Abramowitz
and Stegun constants to about 1e-15, so the series are accurate far
beyond the 0.1 to 2.0 reduced-frequency sweep of this leaf.
- Evaluate the complex sears function: theodorsen_c builds C(k) from
the Hankel ratio of the Bessel functions, then sears_function combines
C(k) with the J0, J1 terms into S(k) on the leading-edge gust
reference. S(0) returns exactly 1 + 0j, the quasi-steady limit |S| =
1 that the gain is normalized against.
- Sweep the gust gain and the phase lag: sears_gain and
sears_phase_lag over the reduced-frequency sweep show the monotone
gain roll-off from 1 and the monotone phase-lag growth, the signature
of the convected sinusoidal gust response.
- Compute the gust-load amplitudes: quasi_steady_gust_lift gives the
reference L_qs = 2pirhoVbw_g_amp (the k = 0 amplitude) and
unsteady_gust_load gives the rigid-section load estimate L_hat =
L_qs|S(k)| in N/m per unit span.
- Locate the half-amplitude reduced frequency:
half_gain_reduced_frequency bisects deterministically on |S(k)| = 0.5
over [BISECT_LO, BISECT_HI] = [0.1, 2.0], the reduced frequency where
the unsteady gust-load amplitude falls to half the quasi-steady value.
A reversed or non-straddling bracket raises ValueError.
- Verify with the Wronskian gain identity |S(k)| =
(2/(pik))/|H1^(2)(k) + iH0^(2)(k)| and run the contract test
scripts/test_sears_function_gust_lift.py under python3.
Worked example
Rigid thin section of chord c = 2 m (semi-chord b = 1 m) at V = 80 m/s
in standard sea-level air rho = 1.225 kg/m^3, encountering a sinusoidal
vertical gust of amplitude w_g_amp = 5 m/s at reduced frequency k = 0.5.
Gust frequency f = kV/(2pi*b) = 6.366197723675814 Hz, gust wavelength
lambda = V/f = 12.56637061435917 m = 6.283185307179586 chord lengths.
All values are the module's real outputs, matching the wave-45 spec
anchors.
- Quasi-steady reference: L_qs = 2pirhoVb*w_g_amp =
3078.760800517998 N/m, the amplitude the same gust would produce at
k = 0.
- Complex sears function: S(0.5) = 0.4392999993899336 -
0.2901613576384412i (leading-edge gust reference). Gust gain |S(0.5)|
= 0.5264770678107253, so the unsteady gust load retains 52.65 percent
of the quasi-steady amplitude at this reduced frequency.
- Phase lag: phi(0.5) = 0.5837270902719581 rad = 33.44509866003521 deg,
the lift peak following the gust peak at the leading edge by phi/omega
= 0.014593 s (omega = k*V/b = 40 rad/s at the worked point).
- Unsteady gust-load amplitude: L_hat = L_qs*|S(0.5)| =
1620.896958747317 N/m per unit span, the amplitude a rigid-section
sinusoidal-gust load estimate would carry into a structural check.
- Half-amplitude reduced frequency: |S(k)| = 0.5 at k_half =
0.5672427076304547, where L_hat = 1539.380400258999 N/m =
0.5000000000000001*L_qs exactly: a gust only about half a semi-chord
shorter than the k = 0.5 case halves the rigid-section load.
- Gain table read-off: |S(0.1)| = 0.8373543986997829, |S(0.5)| =
0.5264770678107253, |S(1.0)| = 0.3895689126581746, |S(2.0)| =
0.2801153775512997 shows the monotone roll-off; even a gust a full
6.28 chords long (k = 0.5) loads the section at about half the
quasi-steady amplitude, and the phase lag grows from 0 to 41.52 deg
(0.7247005314150557 rad at k = 2.0) across the sweep, the signature of
the convected-gust response.
Verification
- Confirm the Bessel machinery: bessel_j0/j1/y0/y1 at x = 0.5, 1.0 and
2.0 match the published constants within 1e-12 (real anchor worst
error 9.44e-16).
- Confirm the Theodorsen values C(0.5) = 0.597936064250132 -
0.1507095031626353i, C(1.0) = 0.5394348710777939 -
0.1002729028641078i and C(2.0) = 0.5129548124291317 -
0.05769128342167992i within 1e-9 on each part (the classic published
values the flutter sibling's own machinery reproduces), with C(0)
exactly 1 + 0j and |C(2.0)| above the 0.5 high-k limit.
- Confirm the sears function values at k = 0.1, 0.25, 0.5, 1.0, 2.0, the
gain read-off values, the phase-lag values in radians and degrees, and
S(0) exactly 1 + 0j with gain exactly 1.0 (the quasi-steady limit).
- Confirm the Wronskian gain identity |S(k)| = (2/(pik))/|H1^(2)(k) +
iH0^(2)(k)| at every 0.1 step of k in [0.1, 2.0] (real anchor max
residual 2.22e-16, test bound 1e-12).
- Confirm the monotonicity: gain strictly decreasing and phase lag
strictly increasing at every 0.05 step of the sweep, so the
half-amplitude crossing is unique.
- Confirm the worked-example loads and geometry (L_qs, L_hat, their
ratio, the reduced-frequency round trip, the gust wavelength in meters
and chord lengths, and the half-amplitude load).
- Confirm ValueError rejection of every non-physical input class: zero
or negative Bessel arguments, negative or non-finite k, non-positive
rho/V/b/freq, zero frequency, negative or non-finite gust amplitude,
and reversed or non-straddling half-gain brackets.
- Confirm determinism: two identical full sweeps return identical bits;
the logic module imports only math and has no RNG.
- Run the contract test offline under both interpreters: python3
scripts/test_sears_function_gust_lift.py and the pyenv 3.13.12
python3 (32 tests, deterministic, well under 1 s).
Related leaves
- aerodynamics/aeroelasticity/flutter-speed-prediction: the V-g flutter
stability owner of the same typical section; its published C(k)
convention, built on the same Bessel series family, is evaluated
inside S(k) here with no stability content.
- aerodynamics/aeroelasticity/aeroelastic-gust-response: the
flexible-section time-domain discrete-gust sibling whose quasi-steady
peak reference L_qs = 2pirhoVb*w_g is the k = 0 limit this leaf's
gain is normalized against.
- aerodynamics/aeroelasticity/divergence-speed: the static torsional
instability of the same section geometry.
- aerodynamics/aeroelasticity/added-mass-coefficients-potential-flow:
the added-mass coefficient catalog of accelerating bodies; this rigid
airfoil has no acceleration degree of freedom.
- aerodynamics/high-speed/wave-drag-area-rule: the Sears-Haack
minimum-drag body and area-rule leaf, the owner of the transonic
sears-haack token, distinct from the sears-function gust response.
- structures/loads/gust-maneuver-loads: the rigid-aircraft discrete-gust
certification load-factor method (FAR 25.341 context); this leaf is
the section aerodynamics transfer function, no vehicle inertia or load
factor.
- structures/loads/random-vibration-analysis: the PSD machinery home of
continuous-turbulence spectral gust content; this leaf is
single-frequency, not spectral.
Pitfalls
- Confusing the gust-load amplitude with the quasi-steady value: at the
worked k = 0.5 point L_hat = 1620.896958747317 N/m is only
0.5264770678107253 of L_qs = 3078.760800517998 N/m because the
unsteady gain rolls off with reduced frequency; run the gain, do not
substitute the quasi-steady anchor for a finite-frequency gust.
- Mixing the leading-edge and mid-chord gust references: S_mid(k) =
S(k)e^(+ik) differ by the propagation phase over the semi-chord, so
the phase lag only grows monotonically from zero on the leading-edge
reference this module pins; |S| is identical in either reference.
- Reading the phase lag with the wrong sign convention: with the
e^(+iomegat) convention the lag is phi(k) = -arg S(k) = atan2(-Im S,
Re S), positive for all k > 0 here; flipping the time convention
flips the sign.
- Pushing the Bessel series past their sweep: the series forms are
double-precision accurate across the 0.1 to 2.0 reduced-frequency
range documented here; the flutter sibling's C(k) machinery covers the
same family for its own k range.
- Treating the Sears response as a structural or spectral result: the
rigid-airfoil load of this leaf has no inertia weighting, no load
factor and no PSD content; the discrete-gust certification method and
the continuous-turbulence spectra live in the structures loads leaves.
- Forgetting the certification context is reference-only: FAR 25 and CS
25 gust-load rules are named as the context, never reproduced; the
Sears relations are standard engineering methodology, summary-only.
Behavior contract (gate 3)
Run the deterministic contract test (stdlib unittest, offline):
python3 scripts/test_sears_function_gust_lift.py
The test covers the Bessel reference constants and the worst series error
bound, the Theodorsen values and limits, the exact S(0) quasi-steady
limit, the complex sears function values, the gain and phase-lag read-off
values, the monotone gain roll-off and phase-lag growth over the sweep,
the Wronskian gain identity, the half-amplitude reduced frequency and
its bracket sanity, the worked-example loads, frequencies, wavelengths
and the half-amplitude load, the zero-amplitude gust case, ValueError
rejection of every non-physical input class, sweep determinism, and the
stdlib-only purity of the logic module. It passes under both /usr/bin/
python3 (3.9.6) and the pyenv 3.13.12 interpreter.
Compliance
- The Sears gust response is public-domain textbook methodology (Sears
1941; Bisplinghoff, Ashley and Halfman, Aeroelasticity; Fung, An
Introduction to the Theory of Aeroelasticity); the airworthiness
context is FAR 25 and CS 25 gust-load rules, referenced by name only,
summary-only per standards-map.yaml (both reference-only).
- compliance: STANDARDS-REF, gated: false.
1---2name: sears-function-gust-lift3description: Use when you must compute the frequency-domain gust response of a rigid thin airfoil to a convected sinusoidal vertical gust: evaluate the complex sears-function S(k) from the Bessel series with the Theodorsen lift-deficiency function, the gust gain and the phase lag of the gust load, and the unsteady gust-load amplitude against the quasi-steady 2*pi*rho*V*b*w_g reference, with the |S| = 1 quasi-steady limit at zero reduced frequency, the monotone gain roll-off, and the reduced frequency where the gust load falls to half the quasi-steady value. Produces the complex sears function, gain and phase tables versus reduced frequency, and the unsteady gust-load amplitudes that gate sinusoidal-gust load estimates and unsteady thin-airfoil coursework. Trigger: sears function, sinusoidal gust, gust transfer function, unsteady gust load, gust reduced frequency sweep.4license: Apache-2.05---67# Sears Function Gust Lift (aerodynamics/aeroelasticity/sears-function-gust-lift)89Use when the task is the frequency-domain unsteady lift response of a10rigid thin airfoil to a convected sinusoidal vertical gust (the Sears11problem, Sears 1941, JAS 8(3); Bisplinghoff, Ashley and Halfman,12Aeroelasticity, the unsteady incompressible gust chapter; Fung, An13Introduction to the Theory of Aeroelasticity): the complex sears14function S(k) evaluated from the Bessel series with the Theodorsen15lift-deficiency function C(k), the gust gain and the phase lag, and the16unsteady gust-load amplitude against the quasi-steady172*pi*rho*V*b*w_g_amp reference. This leaf is the section aerodynamics18transfer function of the rigid airfoil, the frequency-domain complement19of the flexible-section time-domain discrete-gust response sibling20aerodynamics/aeroelasticity/aeroelastic-gust-response (whose21quasi-steady reference L_qs = 2*pi*rho*V*b*w_g is exactly the k = 022amplitude this leaf's gain is normalized against), and it evaluates the23same published C(k) expression, built on the same Bessel machinery, that24aerodynamics/aeroelasticity/flutter-speed-prediction documents for the25V-g stability problem. It produces no stability content, no structural26degrees of freedom and no vehicle load factor: the gust response of a27flexible typical section, static divergence, added-mass coefficient28estimation and the discrete-gust certification load-factor method all29belong to their own leaves.3031## Domain quick reference3233- Sears problem: rigid thin airfoil of semi-chord b = c/2 in34 incompressible flow at speed V encounters a frozen sinusoidal vertical35 gust with the gust vertical velocity field w_g(x, t) = w_g_amp *36 Re{e^(i*(omega*t - k*x/b))}, x measured downstream from the leading37 edge, so the gust front crosses the leading edge at t = 0. Time38 dependence e^(+i*omega*t); physical quantities are the real part.39 Reduced frequency k = omega*b/V = 2*pi*f*b/V.40- Complex lift amplitude per unit span: L_hat = 2*pi*rho*V*b*w_g_amp *41 S(k) with L(t) = Re{L_hat*e^(i*omega*t)}. The quasi-steady reference42 amplitude L_qs = 2*pi*rho*V*b*w_g_amp is the k = 0 value, identical to43 the reference the discrete-gust sibling documents.44- Bessel series (Abramowitz and Stegun 9.1.10 to 9.1.11, the same45 published series family the flutter sibling cites for C(k)): J0(x) =46 sum_m (-1)^m (x/2)^(2m)/(m!)^2, J1(x) = (x/2)*sum_m (-1)^m47 (x/2)^(2m)/(m!(m+1)!), and the log-harmonic Y0 and Y1 forms with the48 Euler-Mascheroni constant in the ln(x/2) + gamma terms. Each series49 runs until its term magnitude falls below SERIES_TOL times the running50 sum, with SERIES_TERMS_MAX as the safety cap.51- Hankel functions of the second kind: H0^(2)(k) = J0(k) - i*Y0(k),52 H1^(2)(k) = J1(k) - i*Y1(k). Theodorsen function C(k) =53 H1^(2)(k)/(H1^(2)(k) + i*H0^(2)(k)): C = 1 at k = 0 exactly (steady54 flow) and |C| falls toward the high-reduced-frequency limit 1/2.55- Sears function, leading-edge reference: S(k) = [C(k)*(J0(k) -56 i*J1(k)) + i*J1(k)]*e^(-i*k), S(0) = 1 + 0i exactly. The classical57 mid-chord-referenced printed expression S_mid(k) = C(k)*(J0(k) - i*J1(k)) +58 i*J1(k) is the exact identity S_mid(k) = S(k)*e^(+i*k), with |S_mid| =59 |S|; the module pins the leading-edge reference, the convention whose60 phase lag grows monotonically from zero.61- Gust gain and phase lag: gain |S(k)| is the unsteady-load amplitude62 ratio to the quasi-steady reference, monotone decreasing from |S(0)| =63 1; the phase lag phi(k) = -arg S(k) in radians is the time by which64 the lift peak lags the gust peak at the leading edge, monotone65 increasing from zero. The half-amplitude reduced frequency where66 |S(k)| = 0.5 sits near k = 0.567.67- Wronskian gain identity (from the Bessel Wronskian J1*Y0 - J0*Y1 =68 2/(pi*k)): |S(k)| = (2/(pi*k))/|H1^(2)(k) + i*H0^(2)(k)| for k > 0,69 exact to machine precision over the whole sweep of this leaf.70- Scope: single-frequency frozen sinusoidal gust, incompressible71 thin-airfoil theory, small gust amplitudes (linear), two-dimensional72 section per unit span, rigid airfoil with no motion degrees of freedom73 and no added-mass coefficient catalog. Loads are N/m per unit span.74 FAR 25 and CS 25 gust-load rules frame the certification context by75 name only (standards-map.yaml far-25 and cs-25, reference-only),76 never reproduced.7778## Workflow79801. Gather the gust encounter inputs: air density rho, flight speed V,81 semi-chord b = c/2, gust vertical velocity amplitude w_g_amp, and the82 reduced frequency k of the sinusoidal gust, either chosen directly for83 a target gust wavelength or converted from the gust frequency f with84 reduced_frequency (k = 2*pi*f*b/V). The module rejects non-positive85 rho, V, b and f and negative or non-finite amplitudes with ValueError.862. Confirm the Bessel machinery: bessel_j0, bessel_j1, bessel_y0 and87 bessel_y1 at x = 0.5, 1.0 and 2.0 reproduce the published Abramowitz88 and Stegun constants to about 1e-15, so the series are accurate far89 beyond the 0.1 to 2.0 reduced-frequency sweep of this leaf.903. Evaluate the complex sears function: theodorsen_c builds C(k) from91 the Hankel ratio of the Bessel functions, then sears_function combines92 C(k) with the J0, J1 terms into S(k) on the leading-edge gust93 reference. S(0) returns exactly 1 + 0j, the quasi-steady limit |S| =94 1 that the gain is normalized against.954. Sweep the gust gain and the phase lag: sears_gain and96 sears_phase_lag over the reduced-frequency sweep show the monotone97 gain roll-off from 1 and the monotone phase-lag growth, the signature98 of the convected sinusoidal gust response.995. Compute the gust-load amplitudes: quasi_steady_gust_lift gives the100 reference L_qs = 2*pi*rho*V*b*w_g_amp (the k = 0 amplitude) and101 unsteady_gust_load gives the rigid-section load estimate L_hat =102 L_qs*|S(k)| in N/m per unit span.1036. Locate the half-amplitude reduced frequency:104 half_gain_reduced_frequency bisects deterministically on |S(k)| = 0.5105 over [BISECT_LO, BISECT_HI] = [0.1, 2.0], the reduced frequency where106 the unsteady gust-load amplitude falls to half the quasi-steady value.107 A reversed or non-straddling bracket raises ValueError.1087. Verify with the Wronskian gain identity |S(k)| =109 (2/(pi*k))/|H1^(2)(k) + i*H0^(2)(k)| and run the contract test110 scripts/test_sears_function_gust_lift.py under python3.111112## Worked example113114Rigid thin section of chord c = 2 m (semi-chord b = 1 m) at V = 80 m/s115in standard sea-level air rho = 1.225 kg/m^3, encountering a sinusoidal116vertical gust of amplitude w_g_amp = 5 m/s at reduced frequency k = 0.5.117Gust frequency f = k*V/(2*pi*b) = 6.366197723675814 Hz, gust wavelength118lambda = V/f = 12.56637061435917 m = 6.283185307179586 chord lengths.119All values are the module's real outputs, matching the wave-45 spec120anchors.121122- Quasi-steady reference: L_qs = 2*pi*rho*V*b*w_g_amp =123 3078.760800517998 N/m, the amplitude the same gust would produce at124 k = 0.125- Complex sears function: S(0.5) = 0.4392999993899336 -126 0.2901613576384412i (leading-edge gust reference). Gust gain |S(0.5)|127 = 0.5264770678107253, so the unsteady gust load retains 52.65 percent128 of the quasi-steady amplitude at this reduced frequency.129- Phase lag: phi(0.5) = 0.5837270902719581 rad = 33.44509866003521 deg,130 the lift peak following the gust peak at the leading edge by phi/omega131 = 0.014593 s (omega = k*V/b = 40 rad/s at the worked point).132- Unsteady gust-load amplitude: L_hat = L_qs*|S(0.5)| =133 1620.896958747317 N/m per unit span, the amplitude a rigid-section134 sinusoidal-gust load estimate would carry into a structural check.135- Half-amplitude reduced frequency: |S(k)| = 0.5 at k_half =136 0.5672427076304547, where L_hat = 1539.380400258999 N/m =137 0.5000000000000001*L_qs exactly: a gust only about half a semi-chord138 shorter than the k = 0.5 case halves the rigid-section load.139- Gain table read-off: |S(0.1)| = 0.8373543986997829, |S(0.5)| =140 0.5264770678107253, |S(1.0)| = 0.3895689126581746, |S(2.0)| =141 0.2801153775512997 shows the monotone roll-off; even a gust a full142 6.28 chords long (k = 0.5) loads the section at about half the143 quasi-steady amplitude, and the phase lag grows from 0 to 41.52 deg144 (0.7247005314150557 rad at k = 2.0) across the sweep, the signature of145 the convected-gust response.146147## Verification148149- Confirm the Bessel machinery: bessel_j0/j1/y0/y1 at x = 0.5, 1.0 and150 2.0 match the published constants within 1e-12 (real anchor worst151 error 9.44e-16).152- Confirm the Theodorsen values C(0.5) = 0.597936064250132 -153 0.1507095031626353i, C(1.0) = 0.5394348710777939 -154 0.1002729028641078i and C(2.0) = 0.5129548124291317 -155 0.05769128342167992i within 1e-9 on each part (the classic published156 values the flutter sibling's own machinery reproduces), with C(0)157 exactly 1 + 0j and |C(2.0)| above the 0.5 high-k limit.158- Confirm the sears function values at k = 0.1, 0.25, 0.5, 1.0, 2.0, the159 gain read-off values, the phase-lag values in radians and degrees, and160 S(0) exactly 1 + 0j with gain exactly 1.0 (the quasi-steady limit).161- Confirm the Wronskian gain identity |S(k)| = (2/(pi*k))/|H1^(2)(k) +162 i*H0^(2)(k)| at every 0.1 step of k in [0.1, 2.0] (real anchor max163 residual 2.22e-16, test bound 1e-12).164- Confirm the monotonicity: gain strictly decreasing and phase lag165 strictly increasing at every 0.05 step of the sweep, so the166 half-amplitude crossing is unique.167- Confirm the worked-example loads and geometry (L_qs, L_hat, their168 ratio, the reduced-frequency round trip, the gust wavelength in meters169 and chord lengths, and the half-amplitude load).170- Confirm ValueError rejection of every non-physical input class: zero171 or negative Bessel arguments, negative or non-finite k, non-positive172 rho/V/b/freq, zero frequency, negative or non-finite gust amplitude,173 and reversed or non-straddling half-gain brackets.174- Confirm determinism: two identical full sweeps return identical bits;175 the logic module imports only math and has no RNG.176- Run the contract test offline under both interpreters: python3177 scripts/test_sears_function_gust_lift.py and the pyenv 3.13.12178 python3 (32 tests, deterministic, well under 1 s).179180## Related leaves181182- aerodynamics/aeroelasticity/flutter-speed-prediction: the V-g flutter183 stability owner of the same typical section; its published C(k)184 convention, built on the same Bessel series family, is evaluated185 inside S(k) here with no stability content.186- aerodynamics/aeroelasticity/aeroelastic-gust-response: the187 flexible-section time-domain discrete-gust sibling whose quasi-steady188 peak reference L_qs = 2*pi*rho*V*b*w_g is the k = 0 limit this leaf's189 gain is normalized against.190- aerodynamics/aeroelasticity/divergence-speed: the static torsional191 instability of the same section geometry.192- aerodynamics/aeroelasticity/added-mass-coefficients-potential-flow:193 the added-mass coefficient catalog of accelerating bodies; this rigid194 airfoil has no acceleration degree of freedom.195- aerodynamics/high-speed/wave-drag-area-rule: the Sears-Haack196 minimum-drag body and area-rule leaf, the owner of the transonic197 sears-haack token, distinct from the sears-function gust response.198- structures/loads/gust-maneuver-loads: the rigid-aircraft discrete-gust199 certification load-factor method (FAR 25.341 context); this leaf is200 the section aerodynamics transfer function, no vehicle inertia or load201 factor.202- structures/loads/random-vibration-analysis: the PSD machinery home of203 continuous-turbulence spectral gust content; this leaf is204 single-frequency, not spectral.205206## Pitfalls207208- Confusing the gust-load amplitude with the quasi-steady value: at the209 worked k = 0.5 point L_hat = 1620.896958747317 N/m is only210 0.5264770678107253 of L_qs = 3078.760800517998 N/m because the211 unsteady gain rolls off with reduced frequency; run the gain, do not212 substitute the quasi-steady anchor for a finite-frequency gust.213- Mixing the leading-edge and mid-chord gust references: S_mid(k) =214 S(k)*e^(+i*k) differ by the propagation phase over the semi-chord, so215 the phase lag only grows monotonically from zero on the leading-edge216 reference this module pins; |S| is identical in either reference.217- Reading the phase lag with the wrong sign convention: with the218 e^(+i*omega*t) convention the lag is phi(k) = -arg S(k) = atan2(-Im S,219 Re S), positive for all k > 0 here; flipping the time convention220 flips the sign.221- Pushing the Bessel series past their sweep: the series forms are222 double-precision accurate across the 0.1 to 2.0 reduced-frequency223 range documented here; the flutter sibling's C(k) machinery covers the224 same family for its own k range.225- Treating the Sears response as a structural or spectral result: the226 rigid-airfoil load of this leaf has no inertia weighting, no load227 factor and no PSD content; the discrete-gust certification method and228 the continuous-turbulence spectra live in the structures loads leaves.229- Forgetting the certification context is reference-only: FAR 25 and CS230 25 gust-load rules are named as the context, never reproduced; the231 Sears relations are standard engineering methodology, summary-only.232233## Behavior contract (gate 3)234235Run the deterministic contract test (stdlib unittest, offline):236237 python3 scripts/test_sears_function_gust_lift.py238239The test covers the Bessel reference constants and the worst series error240bound, the Theodorsen values and limits, the exact S(0) quasi-steady241limit, the complex sears function values, the gain and phase-lag read-off242values, the monotone gain roll-off and phase-lag growth over the sweep,243the Wronskian gain identity, the half-amplitude reduced frequency and244its bracket sanity, the worked-example loads, frequencies, wavelengths245and the half-amplitude load, the zero-amplitude gust case, ValueError246rejection of every non-physical input class, sweep determinism, and the247stdlib-only purity of the logic module. It passes under both /usr/bin/248python3 (3.9.6) and the pyenv 3.13.12 interpreter.249250## Compliance251252- The Sears gust response is public-domain textbook methodology (Sears253 1941; Bisplinghoff, Ashley and Halfman, Aeroelasticity; Fung, An254 Introduction to the Theory of Aeroelasticity); the airworthiness255 context is FAR 25 and CS 25 gust-load rules, referenced by name only,256 summary-only per standards-map.yaml (both reference-only).257- compliance: STANDARDS-REF, gated: false.