research: Dütsch driver — exact-point body mask, periodic geometry from step mod T

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
ClaudeandClaude Opus 5.5 committed 2026-10-30 10:59:55 +00:00
1 parent 73c2f507f4
commit 04a33246a1
3 files changed
+43 -5

No files matched your search

+18 -3
View File
@@ -25,12 +25,15 @@ def amplitude(D):
def position(s, T, A):
"""Centre position relative to the mean: x = A cos(2 pi s / T)."""
return A * math.cos(2.0 * math.pi * s / T)
"""Centre position relative to the mean: x = A cos(2 pi s / T), evaluated from the
native step modulo T so every cycle repeats the same geometry bit for bit."""
return A * math.cos(2.0 * math.pi * (int(s) % T) / T)
def phase(s, T):
return (360.0 * s / T - 90.0) % 360.0
"""Paper phase in degrees from the native step modulo T (the unwrapped cycle
index is kept separately by ``cycle``)."""
return (360.0 * (int(s) % T) / T - 90.0) % 360.0
def cycle(s, T):
@@ -63,6 +66,18 @@ def morison_fit(f_norm, b1, b2):
return float(c_d), float(c_i)
def inside_circle(x, y, centre, radius):
return (x - centre[0]) ** 2 + (y - centre[1]) ** 2 < radius * radius
def sample(field, fluid, x, y, centre, radius):
"""Profile sample: MISSING if the exact point is inside the body (checked before
any corner interpolation), else ``bilinear_fluid``."""
if inside_circle(x, y, centre, radius):
return None, (), 0.0
return bilinear_fluid(field, fluid, x, y)
def bilinear_fluid(field, fluid, x, y):
"""Bilinear value at (x, y) in cell coordinates from fluid cells only.