LCOV - code coverage report
Current view: top level - src/convergence - IterationCountConvergence.C (source / functions) Hit Total Coverage
Test: idaholab/moose framework: 909fe5 Lines: 41 46 89.1 %
Date: 2025-08-29 20:01:24 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       45603 : IterationCountConvergence::validParams()
      17             : {
      18       45603 :   InputParameters params = Convergence::validParams();
      19             : 
      20      182412 :   params.addParam<unsigned int>("min_iterations", 0, "Minimum number of iterations");
      21      182412 :   params.addParam<unsigned int>("max_iterations", 50, "Maximum number of iterations");
      22      136809 :   params.addParam<bool>(
      23       91206 :       "converge_at_max_iterations", false, "Converge at 'max_iterations' instead of diverging");
      24             : 
      25       45603 :   params.addClassDescription("Checks the iteration count.");
      26             : 
      27       45603 :   return params;
      28           0 : }
      29             : 
      30        1409 : IterationCountConvergence::IterationCountConvergence(const InputParameters & parameters)
      31             :   : Convergence(parameters),
      32        1409 :     _min_iterations(getParam<unsigned int>("min_iterations")),
      33        2818 :     _max_iterations(getParam<unsigned int>("max_iterations")),
      34        4227 :     _converge_at_max_iterations(getParam<bool>("converge_at_max_iterations"))
      35             : {
      36        1409 :   if (_max_iterations < _min_iterations)
      37           4 :     mooseError("'max_iterations' must be >= 'min_iterations'.");
      38        1405 : }
      39             : 
      40             : Convergence::MooseConvergenceStatus
      41       16367 : IterationCountConvergence::checkConvergence(unsigned int iter)
      42             : {
      43       16367 :   const auto status_inner = checkConvergenceInner(iter);
      44             : 
      45       16367 :   std::ostringstream oss;
      46       16367 :   switch (status_inner)
      47             :   {
      48       16282 :     case MooseConvergenceStatus::ITERATING:
      49       16282 :       if (iter >= _max_iterations)
      50             :       {
      51        4049 :         if (_converge_at_max_iterations)
      52             :         {
      53        4025 :           oss << "Converged due to iterations (" << iter << ") >= max iterations ("
      54        4025 :               << _max_iterations << ") and 'converge_at_max_iterations' = 'true'.";
      55        4025 :           verboseOutput(oss);
      56        4025 :           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       12233 :         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       16367 : }
      90             : 
      91             : Convergence::MooseConvergenceStatus
      92       15726 : IterationCountConvergence::checkConvergenceInner(unsigned int /*iter*/)
      93             : {
      94       15726 :   return MooseConvergenceStatus::ITERATING;
      95             : }

Generated by: LCOV version 1.14