It would be nice to have a more scalable version of Padé extrapolation (ala #2440) that (a) parallelizes and (b) requires bounded storage independent of the number of time steps.
(a) seems to require implementation at the C++ level so that the computations and storage can be done per-chunk (like DFT accumulation).
For (b), one idea is (for each DFT point/component), we continue to accumulate the DFT as now, and additionally store the last $n$ timesteps for some $n$ (e.g. $n=20$). Then we compute the DFT as (accumulated DFT) + (Padé extrapolation from $n$ points). This could hopefully be very effective because the "tail" of the time series is typically dominated by a small set of resonances, so only a low-order Padé extrapolation (requiring only a few points) should suffice.
Furthermore, this would give us error measures that we could use to estimate the DFT convergence: the Padé extrapolation itself is an error measure on the accumulated DFT, and we could also use the difference between Padé extrapolation from $n$ points and from $n/2$ points as an error estimate on the extrapolant.
This could be integrated with the existing dft_fields objects, with the default being $n=0$ (no extrapolation, i.e. current behavior), so that all existing DFT functions (flux, stress, eigenmode coefficients, adjoints, …) get the option of an extrapolated correction.
It would be nice to have a more scalable version of Padé extrapolation (ala #2440) that (a) parallelizes and (b) requires bounded storage independent of the number of time steps.
(a) seems to require implementation at the C++ level so that the computations and storage can be done per-chunk (like DFT accumulation).
For (b), one idea is (for each DFT point/component), we continue to accumulate the DFT as now, and additionally store the last$n$ timesteps for some $n$ (e.g. $n=20$ ). Then we compute the DFT as (accumulated DFT) + (Padé extrapolation from $n$ points). This could hopefully be very effective because the "tail" of the time series is typically dominated by a small set of resonances, so only a low-order Padé extrapolation (requiring only a few points) should suffice.
Furthermore, this would give us error measures that we could use to estimate the DFT convergence: the Padé extrapolation itself is an error measure on the accumulated DFT, and we could also use the difference between Padé extrapolation from$n$ points and from $n/2$ points as an error estimate on the extrapolant.
This could be integrated with the existing$n=0$ (no extrapolation, i.e. current behavior), so that all existing DFT functions (flux, stress, eigenmode coefficients, adjoints, …) get the option of an extrapolated correction.
dft_fieldsobjects, with the default being