LCOV - code coverage report
Current view: top level - src/convergence - IterationCountConvergence.C (source / functions) Hit Total Coverage
Test: idaholab/moose framework: 419b9d Lines: 41 46 89.1 %
Date: 2025-08-08 20:01:16 Functions: 4 4 100.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : //* This file is part of the MOOSE framework
       2             : //* https://mooseframework.inl.gov
       3             : //*
       4             : //* All rights reserved, see COPYRIGHT for full restrictions
       5             : //* https://github.com/idaholab/moose/blob/master/COPYRIGHT
       6             : //*
       7             : //* Licensed under LGPL 2.1, please see LICENSE for details
       8             : //* https://www.gnu.org/licenses/lgpl-2.1.html
       9             : 
      10             : #include "IterationCountConvergence.h"
      11             : #include "FixedPointSolve.h"
      12             : 
      13             : registerMooseObject("MooseApp", IterationCountConvergence);
      14             : 
      15             : InputParameters
      16       45497 : IterationCountConvergence::validParams()
      17             : {
      18       45497 :   InputParameters params = Convergence::validParams();
      19             : 
      20       45497 :   params.addParam<unsigned int>("min_iterations", 0, "Minimum number of iterations");
      21       45497 :   params.addParam<unsigned int>("max_iterations", 50, "Maximum number of iterations");
      22      136491 :   params.addParam<bool>(
      23       90994 :       "converge_at_max_iterations", false, "Converge at 'max_iterations' instead of diverging");
      24             : 
      25       45497 :   params.addClassDescription("Checks the iteration count.");
      26             : 
      27       45497 :   return params;
      28           0 : }
      29             : 
      30        1355 : IterationCountConvergence::IterationCountConvergence(const InputParameters & parameters)
      31             :   : Convergence(parameters),
      32        1355 :     _min_iterations(getParam<unsigned int>("min_iterations")),
      33        1355 :     _max_iterations(getParam<unsigned int>("max_iterations")),
      34        2710 :     _converge_at_max_iterations(getParam<bool>("converge_at_max_iterations"))
      35             : {
      36        1355 :   if (_max_iterations < _min_iterations)
      37           4 :     mooseError("'max_iterations' must be >= 'min_iterations'.");
      38        1351 : }
      39             : 
      40             : Convergence::MooseConvergenceStatus
      41       15539 : IterationCountConvergence::checkConvergence(unsigned int iter)
      42             : {
      43       15539 :   const auto status_inner = checkConvergenceInner(iter);
      44             : 
      45       15539 :   std::ostringstream oss;
      46       15539 :   switch (status_inner)
      47             :   {
      48       15454 :     case MooseConvergenceStatus::ITERATING:
      49       15454 :       if (iter >= _max_iterations)
      50             :       {
      51        3881 :         if (_converge_at_max_iterations)
      52             :         {
      53        3857 :           oss << "Converged due to iterations (" << iter << ") >= max iterations ("
      54        3857 :               << _max_iterations << ") and 'converge_at_max_iterations' = 'true'.";
      55        3857 :           verboseOutput(oss);
      56        3857 :           return MooseConvergenceStatus::CONVERGED;
      57             :         }
      58             :         else
      59             :         {
      60          24 :           oss << "Diverged due to iterations (" << iter << ") >= max iterations ("
      61          24 :               << _max_iterations << ").";
      62          24 :           verboseOutput(oss);
      63          24 :           return MooseConvergenceStatus::DIVERGED;
      64             :         }
      65             :       }
      66             :       else
      67       11573 :         return MooseConvergenceStatus::ITERATING;
      68             :       break;
      69             : 
      70          85 :     case MooseConvergenceStatus::CONVERGED:
      71          85 :       if (iter < _min_iterations)
      72             :       {
      73          24 :         oss << "Still iterating because iterations (" << iter << ") < min iterations ("
      74          24 :             << _min_iterations << ").";
      75          24 :         verboseOutput(oss);
      76          24 :         return MooseConvergenceStatus::ITERATING;
      77             :       }
      78             :       else
      79          61 :         return MooseConvergenceStatus::CONVERGED;
      80             :       break;
      81             : 
      82           0 :     case MooseConvergenceStatus::DIVERGED:
      83           0 :       return MooseConvergenceStatus::DIVERGED;
      84             :       break;
      85             : 
      86           0 :     default:
      87           0 :       mooseError("Invalid convergence status");
      88             :   }
      89       15539 : }
      90             : 
      91             : Convergence::MooseConvergenceStatus
      92       14898 : IterationCountConvergence::checkConvergenceInner(unsigned int /*iter*/)
      93             : {
      94       14898 :   return MooseConvergenceStatus::ITERATING;
      95             : }

Generated by: LCOV version 1.14