Aeroelastic Gust Response (aerodynamics/aeroelasticity/aeroelastic-gust-response)
Use when the task is the DYNAMIC response of a flexible two-degree-of-freedom typical wing section to a discrete gust: the plunge and pitch time histories driven by the unsteady (indicial) aerodynamic lift, the dynamic magnification factor of the peak lift over the quasi-steady value, and the peak-load verdict against a limit. This leaf is the flexible-section RESPONSE problem, distinct from the rigid discrete-gust certification load case (structures/loads/gust-maneuver-loads owns that load method), from the flutter speed search (flutter-speed-prediction owns the V-g method), and from static divergence (divergence-speed). The model pairs with flutter-speed-prediction: the same typical-section machinery, a different question (stability there, forced response here).
Domain quick reference
- Typical section: plunge h (positive DOWN, m), pitch theta (positive nose-up, rad) about an elastic axis at fraction e of the chord from the leading edge; per-unit-span mass m_s (kg/m), pitch inertia I_theta (kg m^2/m), plunge stiffness k_h (N/m), pitch stiffness k_theta (N m/rad), structural damping ignored. Reduced time s = 2Vt/c with semi-chord b = c/2.
- Sign conventions: lift L is positive UPWARD (conventional lift) and the plunge equation is m_sh_ddot + k_hh = -L; an upward gust therefore accelerates the section upward, the physically correct direction. A section moving down (h_dot > 0) sees an upwash, so the effective angle at the three-quarter chord is alpha_m = theta + h_dot/V + (0.75 - e)ctheta_dot/V; the +h_dot/V term is what gives the standard plunge damping. The nose-up moment about the elastic axis from the lift at the quarter-chord aerodynamic center is M_ea = -L*(0.25 - e)*c: for e < 0.25 (elastic axis forward of the aerodynamic center, statically stable) an upward lift produces a restoring nose-down moment.
- Indicial (Duhamel) aerodynamics in lag-state form, incompressible thin airfoil: the motion angle alpha_m enters through the Wagner function phi_w(s) = 1 - A1exp(-b1s) - A2exp(-b2s) with the R.T. Jones two-term coefficients A1 = 0.165, b1 = 0.0455, A2 = 0.335, b2 = 0.3, and the gust angle alpha_g through the Kussner function phi_k(s) = 1 - A1kexp(-b1ks) - A2kexp(-b2ks) with A1k = 0.5, b1k = 0.13, A2k = 0.5, b2k = 1.0. The Kussner channel models streamwise gust penetration; apparent-mass and full Theodorsen noncirculatory terms are neglected at this level (documented assumption). phi_w(0) = 0.5 and phi_k(0) = 0: a step in alpha_m starts at half the quasi-steady lift, a sharp-edge gust starts at zero.
- Lag-state form: filtered states x1, x2 (Wagner, driven by alpha_m) and xk1, xk2 (Kussner, driven by alpha_g) follow x_dot = (2V/c)b_i (alpha - x) per term, and the lift per unit span is L = 2pirhoV^2b [(1 - A1 - A2)alpha_m + A1x1 + A2x2 + (1 - A1k - A2k)alpha_g + A1kxk1 + A2kxk2].
- Gust: one-minus-cosine vertical gust w_g (m/s, upward positive) with gradient length H (m), alpha_g(s) = (w_g/V)(1 - cos(2pis/s_g))/2 over 0 <= s <= s_g, s_g = 2H/c in reduced time, zero after. A sharp-edge gust is the short-gradient limit.
- Equations of motion (per unit span, RK4 in real time): m_sh_ddot + k_hh = -L and I_thetatheta_ddot + k_thetatheta = M_ea.
- Quasi-steady reference: L_qs = 2pirhoVb*w_g, the lift the peak gust angle w_g/V would produce on the rigid section. Dynamic magnification factor DMF = peak(|L(t)|)/L_qs over the encounter history.
- Quasi-static flexible reference: with q = (0.25 - e)c2pirhoV^2b/ k_theta, the static aeroelastic peak lift is L_qs/(1 + q). For e = 0.2 and the worked-example stiffness, q = 0.195 so L_qs_flex = 0.837*L_qs: a forward elastic axis gives static aeroelastic load relief, and a very long gust gradient approaches that ratio, not unity. Putting the elastic axis at the aerodynamic center (e = 0.25, q = 0) removes the relief and the long-gradient DMF approaches 1.0.
- Metric direction: for this flexible-section lift response the DMF rises monotonically with gradient length toward the quasi-static value; the shortest gradients give the smallest DMF because the section recoils and the gust is over before the structural response peaks. This is the opposite trend of the rigid discrete-gust load-factor method in the structures loads family, whose alleviation treatment belongs to that leaf, not here.
- FAR 25 and CS 25 gust-load rules frame the certification gust context; the relations above are standard engineering methodology, summary-only, no standard text reproduced.
Workflow
- Set the section: V, c, rho, m_s, I_theta, k_h, k_theta, e (elastic axis fraction from the leading edge, 0 to 1) in a params dict; the module checks every non-positive mass, inertia, stiffness, speed, chord and non-finite input with a ValueError. Choose k_h = m_s*(2pif_h)^2 and k_theta = I_theta*(2pif_theta)^2 for the target uncoupled plunge and pitch frequencies.
- Confirm the indicial coefficients with wagner_coefficients() and kussner_coefficients() (module constants, R.T. Jones and classical two-term values).
- Set the gust: w_g (m/s, upward positive), gradient length H (m). The gradient reduced time follows as s_g = 2*H/c. The gust angle at any reduced time s is gust_angle_time(w_g, V, s_g, s).
- Integrate: gust_response_history(params, w_g, H, dt_real, t_max) returns the t, s, h, h_dot, theta, theta_dot, lift, alpha_gust and alpha_motion histories plus the peak absolute lift and its time. Use a dt small enough to resolve the pitch mode (about 5e-4 s for the worked example) and a t_max long enough for the structural settling, 2.5 s or more.
- Reference: quasi_steady_peak_lift(rho, V, c, w_g) gives the rigid quasi-steady peak L_qs; dynamic_magnification_factor(peak_lift, L_qs) gives the DMF.
- Check the peak load: peak_load_verdict(peak_lift, limit) returns the verdict PASS or FAIL and the fractional margin limit/peak - 1, negative when the limit is exceeded.
- Sanity checks: a step in effective angle with no gust must start at about 0.5 of the quasi-steady lift (Wagner phi(0) = 0.5) and converge to the full value; the long-gradient DMF must approach the quasi-static flexible ratio; confirm with the contract test.
Worked example
Transport-wing typical section: c = 2 m, m_s = 300 kg/m, I_theta = 40 kg m^2/m, elastic axis e = 0.2 (20 percent chord), k_h = 47374 N/m (uncoupled plunge 2.0 Hz), k_theta = 39478 N m/rad (uncoupled pitch 5.0 Hz), V = 100 m/s, rho = 1.225 kg/m^3, gust w_g = 15 m/s, H = 25 m (s_g = 25, gust duration 0.25 s).
- Rigid quasi-steady peak: L_qs = 2pirhoVb*w_g = 11545 N/m.
- Response: peak |L| = 6901 N/m at t = 0.135 s, inside the gust. The dynamic magnification factor is DMF = 6901/11545 = 0.598. The section recoils against the gust (upward plunge velocity subtracts from the incidence) so the flexible peak sits below the rigid quasi-steady value.
- Quasi-static flexible peak: L_qs/(1 + q) with q = (0.25 - 0.2)2 2pi1.2251e41/39478 = 0.195 gives 0.837*11545 = 9662 N/m. A much longer gradient H = 200 m gives DMF = 0.830, approaching that ratio; the residual difference is the penetration and structural lag. With the elastic axis at the aerodynamic center (e = 0.25) the same long gradient gives DMF = 0.987, approaching 1.0, confirming the aerodynamics alone tend to the quasi-steady peak.
- Short gradient H = 2 m (near sharp edge) gives DMF = 0.320: the DMF rises monotonically with gradient length for this flexible section, documented above.
- Peak-load verdict at H = 25 m: against a limit of 8 kN/m the peak 6901 N/m PASSes with margin +15.9 percent; against 6.5 kN/m it FAILs with margin -5.8 percent.
Verification
- Confirm a step in effective angle with no gust starts at 0.5 of the quasi-steady lift and converges to the full value within a few percent (test_lag_state_step_* methods assert ratios 0.5 -> 1.0 against the closed-form Wagner function).
- Confirm the worked-example run returns peak |L| = 6901 N/m and DMF = 0.598 at H = 25 m, and that the long-gradient DMF (H = 200 m) sits in [0.78, 0.88], the e = 0.25 variant in [0.93, 1.05], and DMF(2 m) < DMF(25 m) < DMF(200 m).
- Confirm peak_load_verdict returns FAIL with a negative margin when the limit is below the computed peak.
- Confirm ValueError rejection of non-positive V, c, rho, m_s, I_theta, k_h, k_theta, H, dt and t_max, negative w_g, elastic axis outside [0, 1], missing parameter keys and non-finite inputs.
- Run the contract test offline: python3 scripts/test_aeroelastic_gust_response.py (35 tests, deterministic, under 1 s).
Related leaves
- aerodynamics/aeroelasticity/flutter-speed-prediction: the stability counterpart of this leaf, V-g flutter speed of the same typical section.
- aerodynamics/aeroelasticity/divergence-speed: static divergence of a section whose elastic axis lies aft of the aerodynamic center.
- structures/loads/gust-maneuver-loads: the rigid discrete-gust certification load factor method, the other half of the gust-loads story.
Pitfalls
- Confusing the DMF trend with the rigid discrete-gust method: on this flexible section the DMF rises monotonically with gradient length (0.320 at H = 2 m, 0.598 at H = 25 m, 0.830 at H = 200 m) toward the quasi-static flexible ratio - the opposite of the rigid-gust load-factor alleviation trend owned by the structures loads family.
- Reporting the rigid quasi-steady lift as the load: the flexible peak |L| = 6901 N/m in the worked example is only 0.598 of L_qs = 11545 N/m because the section recoils against the gust; run the response history, do not substitute the quasi-steady anchor.
- Misreading the plunge sign: h is positive DOWN and the plunge equation is m_sh_ddot + k_hh = -L, so an upward gust drives the section upward and a downward-moving section adds +h_dot/V upwash incidence - flipping these signs removes the plunge damping.
- Integrating too coarsely for the pitch mode: the worked example needs dt near 5e-4 s to resolve the 5 Hz pitch mode, and t_max long enough (2.5 s+) for structural settling; a coarse dt aliases the response peak and the DMF.
- Placing the elastic axis at or aft of the aerodynamic center without re-checking relief: with e = 0.25 the static aeroelastic relief vanishes (q = 0) and the long-gradient DMF approaches 1.0 rather than 0.837; e aft of 0.25 is the divergence regime owned by divergence-speed.
- Expecting the verdict margin sign convention to be positive on pass: peak_load_verdict returns margin = limit/peak - 1, so a negative margin means FAIL and a positive margin means PASS - do not flip the comparison when reading the verdict.
Behavior contract (gate 3)
Run the deterministic contract test (stdlib unittest, offline):
python3 scripts/test_aeroelastic_gust_response.py
The test covers the indicial coefficient values, the Wagner step-response limits (0.5 at s = 0, unity at large s) and Kussner sharp-edge limits (zero at s = 0, unity at large s), the one-minus-cosine gust angle shape and peak, the lag-state step anchor (initial lift about 0.5 of the quasi-steady value, convergence to the full value, match to the closed form), the fully developed lift kernel and the zero-start gust channel, the quasi-steady peak lift formula, the dynamic magnification factor, the peak-load verdict PASS/FAIL/margin logic, the worked-example peak and DMF, the long-gradient bands, the monotonic DMF trend with gradient length, quiescence with no gust, linear scaling with gust velocity, and ValueError rejection of every non-physical input class.
Compliance
- Standards referenced, not reproduced: the FAR 25 and CS 25 gust-load rules frame the certification context; the indicial aerodynamics and typical-section relations above are standard engineering methodology, summary-only per standards-map.yaml.
- compliance: STANDARDS-REF, gated: false.