https://mooseframework.inl.gov
Loading...
Searching...
No Matches
Split.h
Go to the documentation of this file.
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
19class FEProblemBase;
21
25class Split : public MooseObject, public Restartable
26{
27public:
29
31 virtual ~Split() = default;
32
33 virtual void setup(NonlinearSystemBase & nl, const std::string & prefix = "");
34
36 const std::vector<NonlinearVariableName> & getVars() const { return _vars; }
37
39 const std::vector<SubdomainName> & getBlocks() const { return _blocks; }
40
44 virtual bool restrictsRegion() const
45 {
46 return !_blocks.empty() || !_sides.empty() || !_unsides.empty();
47 }
48
49protected:
58
60
62 std::vector<NonlinearVariableName> _vars;
63
66 std::vector<SubdomainName> _blocks;
67 std::vector<BoundaryName> _sides;
68 std::vector<BoundaryName> _unsides;
70
72 std::vector<std::string> _splitting;
73
80};
Specialization of SubProblem for solving nonlinear equations plus auxiliary equations.
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system.
const InputParameters & parameters() const
Get the parameters of the object.
Definition MooseBase.h:131
This is a "smart" enum class intended to replace many of the shortcomings in the C++ enum type It sho...
Definition MooseEnum.h:55
Every object that can be built by the factory should be derived from this class.
Definition MooseObject.h:31
Nonlinear system to be solved.
A class for creating restricted objects.
Definition Restartable.h:29
Base class for split-based preconditioners.
Definition Split.h:26
std::vector< BoundaryName > _sides
Definition Split.h:67
virtual bool restrictsRegion() const
Whether this split restricts itself to a subset of the mesh.
Definition Split.h:44
static InputParameters validParams()
Definition Split.C:23
const std::vector< NonlinearVariableName > & getVars() const
Variables this split explicitly operates on (empty implies "all variables")
Definition Split.h:36
const std::vector< SubdomainName > & getBlocks() const
Mesh blocks this split restricts itself to (empty implies "all blocks")
Definition Split.h:39
MooseEnum _schur_pre
Definition Split.h:78
virtual void setup(NonlinearSystemBase &nl, const std::string &prefix="")
Definition Split.C:94
MooseEnum _splitting_type
Definition Split.h:76
std::vector< NonlinearVariableName > _vars
"Variables Split operates on
Definition Split.h:62
MooseEnum _schur_type
Definition Split.h:77
std::vector< SubdomainName > _blocks
Definition Split.h:66
SplittingType
Which splitting to use.
Definition Split.h:52
@ SplittingTypeMultiplicative
Definition Split.h:54
@ SplittingTypeAdditive
Definition Split.h:53
@ SplittingTypeSchur
Definition Split.h:56
@ SplittingTypeSymmetricMultiplicative
Definition Split.h:55
std::vector< BoundaryName > _unsides
Definition Split.h:68
virtual ~Split()=default
FEProblemBase & _fe_problem
Definition Split.h:59
std::vector< std::string > _splitting
Split subsystem list.
Definition Split.h:72