research: reuse quadrature and clarify snapshot and VIV coordinates

This commit is contained in:
Astra (AI agent)
2026-10-31 12:04:56 +08:00
parent 4f17c3c586
commit d0968e6e91
6 changed files with 62 additions and 8 deletions
+29
View File
@@ -82,6 +82,35 @@ def test_interval_bases_and_morison_fit_recover_known_coefficients():
assert p.morison_fit(f, b[:, 0], b[:, 1]) == pytest.approx((2.09, 1.45), abs=1e-9)
def test_quadrature_rule_reused_across_steps_and_periods(monkeypatch):
original = np.polynomial.legendre.leggauss
orders = []
def counted(points):
orders.append(points)
return original(points)
p._quadrature_rule.cache_clear()
monkeypatch.setattr(np.polynomial.legendre, "leggauss", counted)
try:
for points in (16, 8, 16):
for period in (T, 2 * T):
for n in (0, 123, period + 123):
p.interval_bases(n, period, points)
assert orders == [16, 8]
finally:
p._quadrature_rule.cache_clear()
def test_interval_sine_basis_matches_exact_integral():
for period in (T, 2 * T):
half_width = math.pi / period
for n in (0, period // 4, period // 2, period - 1, 7 * period + 123):
midpoint = 2 * math.pi * ((n % period) + .5) / period - math.pi / 2
expected = math.sin(midpoint) * math.sin(half_width) / half_width
assert p.interval_bases(n, period)[1] == pytest.approx(expected, rel=0, abs=2e-15)
def test_geometry_repeats_exactly_across_cycles():
A = p.amplitude(20)
for m in (0, 1, T // 4, T // 2 - 1, 7 * T // 12):