www.mooseframework.org
PhysicsBasedPreconditioner.h
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://www.mooseframework.org
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 "MoosePreconditioner.h"
14 
15 // libMesh includes
16 #include "libmesh/preconditioner.h"
17 #include "libmesh/linear_implicit_system.h"
18 #include "libmesh/enum_preconditioner_type.h"
19 
20 // C++ includes
21 #include <vector>
22 
23 // Forward declarations
26 
27 template <>
29 
33 class PhysicsBasedPreconditioner : public MoosePreconditioner, public Preconditioner<Number>
34 {
35 public:
40 
43 
48  // FIXME: use better name
49  void addSystem(unsigned int var,
50  std::vector<unsigned int> off_diag,
51  PreconditionerType type = AMG_PRECOND);
52 
57  virtual void apply(const NumericVector<Number> & x, NumericVector<Number> & y);
58 
62  virtual void clear();
63 
67  virtual void init();
68 
74  virtual void setup();
75 
76 protected:
80  std::vector<LinearImplicitSystem *> _systems;
82  std::vector<std::unique_ptr<Preconditioner<Number>>> _preconditioners;
84  std::vector<unsigned int> _solve_order;
86  std::vector<PreconditionerType> _pre_type;
88  std::vector<std::vector<unsigned int>> _off_diag;
89 
97  std::vector<std::vector<SparseMatrix<Number> *>> _off_diag_mats;
98 
102 };
103 
PhysicsBasedPreconditioner::setup
virtual void setup()
This is called every time the "operator might have changed".
Definition: PhysicsBasedPreconditioner.C:214
PhysicsBasedPreconditioner::_systems
std::vector< LinearImplicitSystem * > _systems
List of linear system that build up the preconditioner.
Definition: PhysicsBasedPreconditioner.h:80
PhysicsBasedPreconditioner::_off_diag
std::vector< std::vector< unsigned int > > _off_diag
Holds which off diagonal blocks to compute.
Definition: PhysicsBasedPreconditioner.h:88
PhysicsBasedPreconditioner::_solve_order
std::vector< unsigned int > _solve_order
Holds the order the blocks are solved for.
Definition: PhysicsBasedPreconditioner.h:84
MooseObject::type
const std::string & type() const
Get the type of this object.
Definition: MooseObject.h:63
PhysicsBasedPreconditioner::_pre_type
std::vector< PreconditionerType > _pre_type
Which preconditioner to use for each solve.
Definition: PhysicsBasedPreconditioner.h:86
PhysicsBasedPreconditioner::_nl
NonlinearSystemBase & _nl
The nonlinear system this PBP is associated with (convenience reference)
Definition: PhysicsBasedPreconditioner.h:78
MoosePreconditioner
Base class for MOOSE preconditioners.
Definition: MoosePreconditioner.h:34
PhysicsBasedPreconditioner::_init_timer
PerfID _init_timer
Timers.
Definition: PhysicsBasedPreconditioner.h:100
PhysicsBasedPreconditioner::~PhysicsBasedPreconditioner
virtual ~PhysicsBasedPreconditioner()
Definition: PhysicsBasedPreconditioner.C:146
PhysicsBasedPreconditioner::apply
virtual void apply(const NumericVector< Number > &x, NumericVector< Number > &y)
Computes the preconditioned vector "y" based on input "x".
Definition: PhysicsBasedPreconditioner.C:249
InputParameters
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system.
Definition: InputParameters.h:53
x
static PetscErrorCode Vec x
Definition: PetscDMMoose.C:1263
PerfID
unsigned int PerfID
Definition: MooseTypes.h:198
PhysicsBasedPreconditioner::addSystem
void addSystem(unsigned int var, std::vector< unsigned int > off_diag, PreconditionerType type=AMG_PRECOND)
Add a diagonal system + possibly off-diagonals ones as well, also specifying type of preconditioning.
Definition: PhysicsBasedPreconditioner.C:149
PhysicsBasedPreconditioner::PhysicsBasedPreconditioner
PhysicsBasedPreconditioner(const InputParameters &params)
Definition: PhysicsBasedPreconditioner.C:59
PhysicsBasedPreconditioner::_off_diag_mats
std::vector< std::vector< SparseMatrix< Number > * > > _off_diag_mats
Holds pointers to the off-diagonal matrices.
Definition: PhysicsBasedPreconditioner.h:97
PhysicsBasedPreconditioner::_apply_timer
PerfID _apply_timer
Definition: PhysicsBasedPreconditioner.h:101
PhysicsBasedPreconditioner::clear
virtual void clear()
Release all memory and clear data structures.
Definition: PhysicsBasedPreconditioner.C:312
PhysicsBasedPreconditioner::validParams
static InputParameters validParams()
Constructor.
Definition: PhysicsBasedPreconditioner.C:36
PhysicsBasedPreconditioner::_preconditioners
std::vector< std::unique_ptr< Preconditioner< Number > > > _preconditioners
Holds one Preconditioner object per small system to solve.
Definition: PhysicsBasedPreconditioner.h:82
PhysicsBasedPreconditioner::init
virtual void init()
Initialize data structures if not done so already.
Definition: PhysicsBasedPreconditioner.C:177
PhysicsBasedPreconditioner
Implements a segregated solve preconditioner.
Definition: PhysicsBasedPreconditioner.h:33
validParams< PhysicsBasedPreconditioner >
InputParameters validParams< PhysicsBasedPreconditioner >()
MoosePreconditioner.h
NonlinearSystemBase
Nonlinear system to be solved.
Definition: NonlinearSystemBase.h:61