aspect
aspect copied to clipboard
Future of Eisenstat Walker method
As discussed during the user meeting today, there are issues with the current form or implementation of the Eisenstat-Walker method for determining the linear tolerances. This meant that for my models I was not using it, because the tolerance it set was way to loose. After some experimentation I mapped out the tolerances I needed for each nonlinear residual level and made a function which matches it close enough. This is what I a now using, replacing line 445 in solvere_schemes.cc and similar statements elsewere, with:
parameters.linear_stokes_solver_tolerance = std::min(1./(std::pow(0.55,log(dcr.residual/dcr.initial_residual))),newton_handler->parameters.maximum_linear_stokes_solver_tolerance);
This issue is to keep discuss and keep track of how to improve the automatic linear tolerance determination.
@lhy11009 has also been testing it with this models, and the initial results seem that it decreases the number of nonlinear iterations for him, but increases the wall-time, but I think this has to do with there being a fixed number of iterations and the nonlinear tolerance not always being achieved. We are looking further into this.
You probably know best because you have been experimenting with all solver settings more than anyone. As discussed, it makes sense to a) take a look at our tests and benchmarks and b) test Arushi's very large models.
Of course with any change in linear residual you can get unlucky and require an extra nonlinear iteration.
I am glad to be part of the conversation and I'll post what I find out from my 2-D & 3-D subduction models here.
What do we want to do here? I don't see a clear strategy for addressing the issue :-(
If the new sundails package works well, it would replace the this. So I would suggest to wait to see how sundails works out.