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 "SingleMatrixPreconditioner.h" 13 : 14 : namespace libMesh 15 : { 16 : class StaticCondensation; 17 : class StaticCondensationDofMap; 18 : } 19 : 20 : /** 21 : * Static condensation preconditioner 22 : */ 23 : class MooseStaticCondensationPreconditioner : public SingleMatrixPreconditioner 24 : { 25 : public: 26 : static InputParameters validParams(); 27 : 28 : MooseStaticCondensationPreconditioner(const InputParameters & params); 29 : 30 : virtual void initialSetup() override; 31 : 32 : protected: 33 : libMesh::StaticCondensationDofMap & scDofMap(); 34 : const libMesh::StaticCondensationDofMap & scDofMap() const; 35 : 36 : libMesh::StaticCondensation & scSysMat(); 37 : const libMesh::StaticCondensation & scSysMat() const; 38 : 39 : std::string prefix() const; 40 : 41 : private: 42 : /// Pointer to the libMesh static condensation dof map object 43 : libMesh::StaticCondensationDofMap * _sc_dof_map; 44 : 45 : /// Pointer to the libMesh static condensation system matrix object 46 : libMesh::StaticCondensation * _sc_system_matrix; 47 : }; 48 : 49 : inline libMesh::StaticCondensationDofMap & 50 24 : MooseStaticCondensationPreconditioner::scDofMap() 51 : { 52 : libmesh_assert(_sc_dof_map); 53 24 : return *_sc_dof_map; 54 : } 55 : 56 : inline const libMesh::StaticCondensationDofMap & 57 24 : MooseStaticCondensationPreconditioner::scDofMap() const 58 : { 59 24 : return const_cast<MooseStaticCondensationPreconditioner *>(this)->scDofMap(); 60 : } 61 : 62 : inline libMesh::StaticCondensation & 63 12 : MooseStaticCondensationPreconditioner::scSysMat() 64 : { 65 : libmesh_assert(_sc_system_matrix); 66 12 : return *_sc_system_matrix; 67 : } 68 : 69 : inline const libMesh::StaticCondensation & 70 : MooseStaticCondensationPreconditioner::scSysMat() const 71 : { 72 : return const_cast<MooseStaticCondensationPreconditioner *>(this)->scSysMat(); 73 : }