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 : #pragma once 11 : 12 : #include "MultiSystemSolveObject.h" 13 : 14 : class Convergence; 15 : 16 : class FEProblemSolve : public MultiSystemSolveObject 17 : { 18 : public: 19 : FEProblemSolve(Executioner & ex); 20 : 21 : static InputParameters feProblemDefaultConvergenceParams(); 22 : static InputParameters validParams(); 23 : 24 : static const std::set<std::string> & mooseLineSearches(); 25 : 26 : /** 27 : * Picard solve the FEProblem. 28 : * @return True if solver is converged. 29 : */ 30 : virtual bool solve() override; 31 : 32 0 : virtual void setInnerSolve(SolveObject &) override 33 : { 34 0 : mooseError("Cannot set inner solve for FEProblemSolve"); 35 : } 36 : 37 : /** 38 : * Return the number of grid sequencing steps 39 : */ 40 : unsigned int numGridSteps() const { return _num_grid_steps; } 41 : 42 : protected: 43 : /// Helper routine to get the nonlinear system parameter at the right index. 44 : /// If a single value is passed for the parameter, then that value is used 45 : /// @tparam T the parameter is of type std::vector<T> 46 : /// @param param_name name of the parameter 47 : /// @param index index of the nonlinear system 48 : /// @return parameter for that nonlinear system 49 : template <typename T> 50 : T getParamFromNonlinearSystemVectorParam(const std::string & param_name, 51 : unsigned int index) const; 52 : 53 : /// Moose provided line searches 54 : static std::set<std::string> const _moose_line_searches; 55 : 56 : /// The number of steps to perform in a grid sequencing algorithm. This is one 57 : /// less than the number of grids requested by the user in their input, 58 : /// e.g. if they requested num_grids = 1, then there won't be any steps 59 : /// because we only need to perform one solve per time-step. Storing this 60 : /// member in this way allows for easy boolean operations, e.g. if (_num_grid_steps) 61 : /// as opposed to if (_num_grids) 62 : const unsigned int _num_grid_steps; 63 : 64 : /// Whether we are using fixed point iterations for multi-system 65 : const bool _using_multi_sys_fp_iterations; 66 : /// Convergence object to assess the convergence of the multi-system fixed point iteration 67 : Convergence * _multi_sys_fp_convergence; 68 : };