Skip to content
Snippets Groups Projects
  • Jö Fahlke's avatar
    538d99fa
    Merge branch 'feature/abort-on-invalid-defect' into 'master' · 538d99fa
    Jö Fahlke authored
    Abort CGSolver when the defect is invalid
    
    The first commit introduces the exception `SolverAbort`, derived from `ISTLError`.
    
    The second commit makes `CGSolver` abort by throwing `SolverAbort` when the defect becomes invalid (infinite or NaN).  The check is done in every iteration before the convergence check.
    
    These two commits fix #12.
    
    The third and fourth commit make `BiCGStab` and `GMRes` throw `SolverAbort` when they detect a breakdown.  `SolverAbort` seemed more specific when the `ISTLError` they were throwing before.
    
    The fifth commit documents when `SolverAbort` is thrown at the moment.
    
    The sixth commit adds a unit tests that tries to trigger `SolverAbort` and makes sure that it is actually thrown.  It does this for the NaN-check in `CGSolver` and for the "abs(h) < EPSILON"-check in `BiCGSTABSolver` -- there a more conditions in `BiCGSTABSolver` and `RestartedGMResSolver` that throw, but I don't know how to trigger them.
    
    
    
    See merge request !36
    538d99fa
    History
    Merge branch 'feature/abort-on-invalid-defect' into 'master'
    Jö Fahlke authored
    Abort CGSolver when the defect is invalid
    
    The first commit introduces the exception `SolverAbort`, derived from `ISTLError`.
    
    The second commit makes `CGSolver` abort by throwing `SolverAbort` when the defect becomes invalid (infinite or NaN).  The check is done in every iteration before the convergence check.
    
    These two commits fix #12.
    
    The third and fourth commit make `BiCGStab` and `GMRes` throw `SolverAbort` when they detect a breakdown.  `SolverAbort` seemed more specific when the `ISTLError` they were throwing before.
    
    The fifth commit documents when `SolverAbort` is thrown at the moment.
    
    The sixth commit adds a unit tests that tries to trigger `SolverAbort` and makes sure that it is actually thrown.  It does this for the NaN-check in `CGSolver` and for the "abs(h) < EPSILON"-check in `BiCGSTABSolver` -- there a more conditions in `BiCGSTABSolver` and `RestartedGMResSolver` that throw, but I don't know how to trigger them.
    
    
    
    See merge request !36