Description
Hi! I've been doing some tests with the wave equation solvers in time_varying.py and noticed that the simulate_wave_propagation function using the PSTD method is not used. In particular, copying lines 473 to 489 in time_varying.py:
@operator(init_params=fourier_wave_prop_params)
def simulate_wave_propagation(
medium: Union[MediumAllScalars, MediumOnGrid],
time_axis: TimeAxis,
*,
sources=None,
sensors=None,
u0=None,
p0=None,
checkpoint: bool = True,
max_unroll_checkpoint: int = 10,
smooth_initial=True,
params=None,
):
r"""Simulates the wave propagation operator using the PSTD method. This
implementation is equivalent to the `kspaceFirstOrderND` function in the
k-Wave Toolbox.
the medium types used for dispatching are Union[MediumAllScalars, MediumOnGrid]
instead of Union[MediumAllScalars, MediumFourierSeries]
which I was not sure if it was intended or a typo. In addition, even if it's changed to Union[MediumAllScalars, MediumFourierSeries]
, the PSTD function is still not used due to an incorrect dispatching bug in plum (might be related to the issue raised here) when a signature (Union[MediumAllScalars, MediumFourierSeries]
) is more specialized than the one used earlier (MediumOnGrid
).
Steps to reproduce the behavior
Running the differentdiscretizations.ipynb in the documentation
Desktop (please complete the following information):
- OS: Ubuntu
- Version 22.04
Additional context
This bug would most likely not affect the results since the subfunctions momentum_conservation_rhs and mass_conservation_rhs are dispatched correctly for FiniteDifference ssp vs FourierSeries ssp.