1#ifndef PreconditionerOperator_DECL_hpp
2#define PreconditionerOperator_DECL_hpp
3#include "feddlib/core/FEDDCore.hpp"
4#include "feddlib/core/General/DefaultTypeDefs.hpp"
5#include "feddlib/problems/problems_config.h"
6#include <Thyra_PhysicallyBlockedLinearOpBase.hpp>
7#include <Thyra_DefaultProductVectorSpace_decl.hpp>
8#include <Teuchos_ConstNonconstObjectContainer.hpp>
9#include <Thyra_DefaultMultiVectorProductVectorSpace_decl.hpp>
22template <
class SC = default_sc,
class LO = default_lo,
class GO = default_go,
class NO = default_no>
23class PreconditionerOperator :
virtual public Thyra::PhysicallyBlockedLinearOpBase<SC> {
27 PreconditionerOperator();
36 const int numRowBlocks,
const int numColBlocks
40 const Teuchos::RCP<
const Thyra::ProductVectorSpaceBase<SC> > &
productRange,
41 const Teuchos::RCP<
const Thyra::ProductVectorSpaceBase<SC> > &
productDomain
46 virtual bool acceptsBlock(
const int i,
const int j)
const;
49 const int i,
const int j,
50 const Teuchos::RCP<Thyra::LinearOpBase<SC> > &block
54 const int i,
const int j
55 ,
const Teuchos::RCP<
const Thyra::LinearOpBase<SC> > &block
68 Teuchos::RCP<const Thyra::ProductVectorSpaceBase<SC> >
71 Teuchos::RCP<const Thyra::ProductVectorSpaceBase<SC> >
78 Teuchos::RCP<Thyra::LinearOpBase<SC> >
81 Teuchos::RCP<const Thyra::LinearOpBase<SC> >
82 getBlock(
const int i,
const int j)
const;
84 Teuchos::RCP< const Thyra::VectorSpaceBase<SC> > range()
const;
86 Teuchos::RCP< const Thyra::VectorSpaceBase<SC> > domain()
const;
88 Teuchos::RCP<const Thyra::LinearOpBase<SC> > clone()
const;
90 std::string description()
const;
93 Teuchos::FancyOStream &out,
94 const Teuchos::EVerbosityLevel verbLevel
109 const Thyra::EOpTransp M_trans,
110 const Thyra::MultiVectorBase<SC> &X,
111 const Teuchos::Ptr<Thyra::MultiVectorBase<SC> > &Y,
117 Teuchos::RCP<const Thyra::DefaultProductVectorSpace<SC> > defaultProductRange_;
118 Teuchos::RCP<const Thyra::DefaultProductVectorSpace<SC> > defaultProductDomain_;
128 typedef Teuchos::ConstNonconstObjectContainer<Thyra::LinearOpBase<SC> > CNCLO;
129 typedef Teuchos::Array<Teuchos::RCP<const Thyra::VectorSpaceBase<SC> > > vec_array_t;
133 BlockEntry() : i(-1), j(-1) {}
134 BlockEntry(
const int i_in,
const int j_in,
const CNCLO &block_in )
135 :i(i_in),j(j_in),block(block_in)
145 Teuchos::RCP<const Thyra::ProductVectorSpaceBase<SC> > productRange_;
146 Teuchos::RCP<const Thyra::ProductVectorSpaceBase<SC> > productDomain_;
151 std::vector<CNCLO> Ops_;
153 vec_array_t rangeBlocks_;
154 vec_array_t domainBlocks_;
155 std::vector<BlockEntry<SC> > Ops_stack_;
156 bool blockFillIsActive_;
161 void resetStorage(
const int numRowBlocks,
const int numColBlocks );
162 void assertBlockFillIsActive(
bool)
const;
163 void assertBlockRowCol(
const int i,
const int j)
const;
165 const int i,
const int j,
const Thyra::LinearOpBase<SC> &block
167 template<
class LinearOpType>
169 const int i,
const int j,
170 const Teuchos::RCP<LinearOpType> &block
172 void adjustBlockSpaces();
virtual void setBlock(const int i, const int j, const Teuchos::RCP< const Thyra::LinearOpBase< SC > > &block)
Definition PreconditionerOperator_def.hpp:88
bool blockIsConst(const int i, const int j) const
Definition PreconditionerOperator_def.hpp:221
Teuchos::RCP< const Thyra::ProductVectorSpaceBase< SC > > productDomain() const
Definition PreconditionerOperator_def.hpp:203
Teuchos::RCP< const Thyra::ProductVectorSpaceBase< SC > > productRange() const
Definition PreconditionerOperator_def.hpp:195
virtual bool blockFillIsActive() const
Definition PreconditionerOperator_def.hpp:60
virtual void uninitialize()
Definition PreconditionerOperator_def.hpp:176
virtual void beginBlockFill()
Definition PreconditionerOperator_def.hpp:31
virtual void endBlockFill()
Definition PreconditionerOperator_def.hpp:98
Teuchos::RCP< const Thyra::LinearOpBase< SC > > getBlock(const int i, const int j) const
Definition PreconditionerOperator_def.hpp:249
virtual void applyImpl(const Thyra::EOpTransp M_trans, const Thyra::MultiVectorBase< SC > &X, const Teuchos::Ptr< Thyra::MultiVectorBase< SC > > &Y, const SC alpha, const SC beta) const =0
bool opSupportedImpl(Thyra::EOpTransp M_trans) const
Returns true only if all constituent operators support M_trans.
Definition PreconditionerOperator_def.hpp:363
virtual void beginBlockFill(const Teuchos::RCP< const Thyra::ProductVectorSpaceBase< SC > > &productRange, const Teuchos::RCP< const Thyra::ProductVectorSpaceBase< SC > > &productDomain)
virtual void setNonconstBlock(const int i, const int j, const Teuchos::RCP< Thyra::LinearOpBase< SC > > &block)
Definition PreconditionerOperator_def.hpp:78
virtual bool acceptsBlock(const int i, const int j) const
Definition PreconditionerOperator_def.hpp:67
bool blockExists(const int i, const int j) const
Definition PreconditionerOperator_def.hpp:210
Teuchos::RCP< Thyra::LinearOpBase< SC > > getNonconstBlock(const int i, const int j)
Definition PreconditionerOperator_def.hpp:236
Adaptive Mesh Refinement.
Definition AdaptiveMeshRefinement.cpp:5