LCOV - code coverage report
Current view: top level - src/actions - SetupTimeStepperAction.C (source / functions) Hit Total Coverage
Test: idaholab/moose framework: 2bf808 Lines: 43 45 95.6 %
Date: 2025-07-17 01:28:37 Functions: 3 3 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 "SetupTimeStepperAction.h"
      11             : #include "TransientBase.h"
      12             : #include "MooseApp.h"
      13             : #include "Factory.h"
      14             : #include "TimeStepper.h"
      15             : #include "AddTimeStepperAction.h"
      16             : #include "FEProblemBase.h"
      17             : #include "CompositionDT.h"
      18             : 
      19             : registerMooseAction("MooseApp", SetupTimeStepperAction, "setup_time_steppers");
      20             : 
      21             : InputParameters
      22       61934 : SetupTimeStepperAction::validParams()
      23             : {
      24       61934 :   InputParameters params = Action::validParams();
      25       61934 :   params.addClassDescription("Set up the final time stepper.");
      26       61934 :   return params;
      27           0 : }
      28             : 
      29       61934 : SetupTimeStepperAction::SetupTimeStepperAction(const InputParameters & parameters)
      30       61934 :   : Action(parameters)
      31             : {
      32       61934 : }
      33             : 
      34             : void
      35       57150 : SetupTimeStepperAction::act()
      36             : {
      37       57150 :   if (TransientBase * transient = dynamic_cast<TransientBase *>(_app.getExecutioner()))
      38             :   {
      39       28291 :     std::vector<TimeStepper *> timesteppers;
      40       28291 :     _problem->theWarehouse().query().condition<AttribSystem>("TimeStepper").queryInto(timesteppers);
      41             : 
      42             :     // No timestepper(s) were added by the user, so add a default one
      43       28291 :     if (timesteppers.empty())
      44             :     {
      45       27347 :       const auto ts_name = "ConstantDT";
      46       27347 :       auto params = _factory.getValidParams(ts_name);
      47       27347 :       params.set<TransientBase *>("_executioner") = transient;
      48             : 
      49       54694 :       if (!transient->parameters().isParamSetByAddParam("end_time") &&
      50       82436 :           !transient->parameters().isParamSetByAddParam("num_steps") &&
      51       27742 :           transient->parameters().isParamSetByAddParam("dt"))
      52          90 :         params.set<Real>("dt") =
      53         180 :             (transient->getParam<Real>("end_time") - transient->getParam<Real>("start_time")) /
      54         180 :             static_cast<Real>(transient->getParam<unsigned int>("num_steps"));
      55             :       else
      56       27257 :         params.set<Real>("dt") = transient->getParam<Real>("dt");
      57             : 
      58       27347 :       params.set<bool>("reset_dt") = transient->getParam<bool>("reset_dt");
      59             : 
      60             :       auto ts =
      61       27347 :           _problem->addObject<TimeStepper>(ts_name, ts_name, params, /* threaded = */ false)[0];
      62       27347 :       transient->setTimeStepper(*ts);
      63       27347 :     }
      64             :     // TimeStepper(s) were added by the user
      65             :     else
      66             :     {
      67             :       // The user add a time stepper with [TimeStepper] or [TimeSteppers], create one for them
      68         944 :       auto no_time_stepper = _awh.getActionListByName("add_time_stepper").empty();
      69         944 :       auto no_time_steppers = _awh.getActionListByName("add_time_steppers").empty();
      70         944 :       if (!no_time_stepper || !no_time_steppers)
      71             :       {
      72         944 :         std::vector<TimeStepper *> timesteppers;
      73         944 :         _problem->theWarehouse()
      74        1888 :             .query()
      75         944 :             .condition<AttribSystem>("TimeStepper")
      76         944 :             .queryInto(timesteppers);
      77             : 
      78             :         mooseAssert(timesteppers.size(), "Timesteppers not found");
      79             : 
      80         944 :         if (timesteppers.size() == 1)
      81         848 :           transient->setTimeStepper(*timesteppers[0]);
      82             :         else
      83         494 :           for (auto ts : timesteppers)
      84         398 :             if (dynamic_cast<CompositionDT *>(ts))
      85          96 :               transient->setTimeStepper(*ts);
      86             : 
      87             :         mooseAssert(transient->getTimeStepper(), "Not set");
      88         944 :       }
      89             :       // The user used both [TimeStepper] and [TimeSteppers] for time stepper setup, use input in
      90             :       // [TimeSteppers] block and give an error message
      91         944 :       if (!no_time_stepper && !no_time_steppers)
      92           0 :         mooseError("Both [TimeStepper] and [TimeSteppers] are used to setup the time stepper. The "
      93             :                    "[TimeStepper] block will be ignored. Note [TimeStepper] will be deprecated "
      94             :                    "soon. Please consider [TimeSteppers] for future use.");
      95             :     }
      96       28291 :   }
      97       57150 : }

Generated by: LCOV version 1.14