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 : // MOOSE includes 13 : #include "MooseEnum.h" 14 : #include "MooseObject.h" 15 : #include "PetscSupport.h" 16 : #include "Restartable.h" 17 : 18 : // Forward declarations 19 : class FEProblemBase; 20 : class NonlinearSystemBase; 21 : 22 : /** 23 : * Base class for split-based preconditioners. 24 : */ 25 : class Split : public MooseObject, public Restartable 26 : { 27 : public: 28 : static InputParameters validParams(); 29 : 30 : Split(const InputParameters & parameters); 31 672 : virtual ~Split() = default; 32 : 33 : virtual void setup(NonlinearSystemBase & nl, const std::string & prefix = "-"); 34 : 35 : protected: 36 : /// Which splitting to use 37 : enum SplittingType 38 : { 39 : SplittingTypeAdditive, 40 : SplittingTypeMultiplicative, 41 : SplittingTypeSymmetricMultiplicative, 42 : SplittingTypeSchur 43 : }; 44 : 45 : FEProblemBase & _fe_problem; 46 : 47 : /// "Variables Split operates on 48 : std::vector<NonlinearVariableName> _vars; 49 : 50 : ///@{ 51 : /// Block and bounrdary restrictions for the split 52 : std::vector<SubdomainName> _blocks; 53 : std::vector<BoundaryName> _sides; 54 : std::vector<BoundaryName> _unsides; 55 : ///@} 56 : 57 : /// Split subsystem list 58 : std::vector<std::string> _splitting; 59 : 60 : ///@{ 61 : /// Splitting type and (in case of Schur split) options 62 : MooseEnum _splitting_type; 63 : MooseEnum _schur_type; 64 : MooseEnum _schur_pre; 65 : ///@} 66 : };