Follow-up to #41. Harmonic motion landed already (scalar per segment); propagating is the next one and needs an API change.
Model: eps(z, t) = A * sin(2pift - kz + phi) inside the segment. A wavenumber k (or wavelength lambda_m = 2*pi/k) distinguishes it from the bulk harmonic.
The current motion API collapses each segment to a single scalar epsilon via realize_segments(). Propagating waves need eps(z) over the segment, so realize_segments or the transfer.apply() interface has to evolve -- probably: motion evaluators return either a scalar (as today) or an array over the segment's z grid.
Propagating waves are the workhorse for testing DAS event-localisation algorithms, so worth doing properly.
Follow-up to #41. Harmonic motion landed already (scalar per segment); propagating is the next one and needs an API change.
Model: eps(z, t) = A * sin(2pift - kz + phi) inside the segment. A wavenumber k (or wavelength lambda_m = 2*pi/k) distinguishes it from the bulk harmonic.
The current motion API collapses each segment to a single scalar epsilon via realize_segments(). Propagating waves need eps(z) over the segment, so realize_segments or the transfer.apply() interface has to evolve -- probably: motion evaluators return either a scalar (as today) or an array over the segment's z grid.
Propagating waves are the workhorse for testing DAS event-localisation algorithms, so worth doing properly.