I am currently running a parameter study for test case where I compare different accelerators paired with different filters, filter sensitivities and accelerator specific settings. At the moment I am especially interested in comparing IMVJ and ILS.
My general understanding of the generalized Broyden acceleration (IMVJ) from Klaudius’ thesis (e.g. page 99 in ) was basically that:
- its performance depends weakly on the filter choice (ILS depends more strongly on filter)
- Independent of the IMVJ specific settings (restart type, SVD) truncation limit it performs on the same level as the ILS method with optimal settings
- The SVD truncates data at certain points which helps keeping only relevant information in the approximated Jacobian.
- I run the simulations in parallel. Usually (4+12 threads).
- I have used preCICE 2.0.2 for (mainly due to https://github.com/precice/precice/pull/852)
- The solvers are written in FeniCS. Therefore I use the Python bindings.
I can confirm the expected behavior for my serial-implicit simulations. However, for the parallel-implicit simulations my results go a bit crazy as the IMVJ simulations tend to diverge. See this table that shows the preCICE iteration counts, for example:
The result of ILS is basically what I would expect. It gets better with more memory/reused information. IMVJ gives completely odd results up to divergence (100 iterations needed).
nan indicates that the simulation was killed due to exceeding run time. The maximum number of iterations per time window allowed was 100.
I have added two example configurations for a case where the ILS method converges, but IMVJ diverges.
The main difference I see (besides the different accelerator) is that the value of
time-windows-reused is differing a lot. The value of
max-used-iterations is huge such that I could have ILS with “infinite” memory similar to what Klaudius did. I assumed that the IMVJ method would just delete some data at some point due to the SVD. Are some of my assumptions wrong or am I doing something stupid? For a “fair” comparison with ILS(infinity), which should correspond to my ILS(100), what would be a good value to set
time-windows-reused to for the IMVJ accelerator?
Thanks in advance!