Refactor parameters for linear solvers

  • It is not sufficient to create an empty ParameterContainer, set a few parameters and pass it to some class -- the user also needs to create a ConfigDescription and call configSetup on all classes where they want to pass the container.
  • The user should not be forced to deal with default values. Default values should be taken implicitly when the parameter is missing in the ParameterContainer. There are functions like checkParameter, checkParameters and checkParameterType, but they are sparsely used. Most often getParameter is called and the program crashes if the parameter is missing.
  • The configSetup functions are not intuitive, they cannot be used to build a hierarchy. For example, GMRES::configSetup does not call configSetup from its base class, and even the base class does not call configSetup from its base-base-class, so the user needs to call configSetup from 3 levels manually, even if they just want to configure one linear solver.
  • The parameter convergence-residue is set to 0 by default, so the linear solvers will practically never converge by default.