Adjusting solver tolerances#
At the heart of every time step lies the solution of linear systems for the Stokes equations, the temperature field, and possibly for compositional fields. In essence, each of these steps requires us to solve a linear system of the form \(Ax=b\) which we do through iterative solvers, i.e., we try to find a sequence of approximations \(x^{(k)}\) where \(x^{(k)}\rightarrow x=A^{-1}b\). This iteration is terminated at iteration \(k\) if the approximation is “close enough” to the exact solution. The solvers we use determine this by testing after every iteration whether the residual, \(r^{(k)}=A(x-x^{(k)})=b-Ax^{(k)}\), satisfies \(\|r^{(k)}\|\le\varepsilon\|r^{(0)}\|\) where \(\varepsilon\) is called the (relative) tolerance.
Obviously, the smaller we choose \(\varepsilon\), the more accurate the
approximation \(x^{(k)}\) will be. On the other hand, it will also take more
iterations and, consequently, more CPU time to reach the stopping criterion
with a smaller tolerance. The default value of these tolerances are chosen so
that the approximation is typically sufficient. You can make
ASPECT run faster if you choose these tolerances
larger. The parameters you can adjust are all listed in
Solver parameters and are located in the
Solver parameters
subsection of the input file. In particular, the
parameters you want to look at are Linear solver tolerance
,
Temperature solver tolerance
and Composition solver tolerance
.
All this said, it is important to understand the consequences of choosing tolerances larger. In particular, if you choose tolerances too large, then the difference between the exact solution of a linear system \(x\) and the approximation \(x^{(k)}\) may become so large that you do not get an accurate output of your model any more. A rule of thumb in choosing tolerances is to start with a small value and then increase the tolerance until you come to a point where the output quantities start to change significantly. This is the point where you will want to stop.