43 #ifndef __Panzer_BlockedTpetraLinearObjFactory_hpp__ 
   44 #define __Panzer_BlockedTpetraLinearObjFactory_hpp__ 
   49 #include "Tpetra_Map.hpp" 
   50 #include "Tpetra_CrsGraph.hpp" 
   51 #include "Tpetra_Import.hpp" 
   52 #include "Tpetra_Export.hpp" 
   54 #include "PanzerDiscFE_config.hpp" 
   64 #include "Panzer_GatherOrientation.hpp" 
   71 #include "Thyra_BlockedLinearOpBase.hpp" 
   72 #include "Thyra_ProductVectorBase.hpp" 
   76 #include "Teuchos_OpaqueWrapper.hpp" 
   80 template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT=panzer::TpetraNodeType>
 
   85    typedef Tpetra::Vector<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> 
VectorType;
 
   86    typedef Tpetra::CrsMatrix<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> 
CrsMatrixType;
 
   87    typedef Tpetra::Operator<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> 
OperatorType;
 
   88    typedef Tpetra::CrsGraph<LocalOrdinalT,GlobalOrdinalT,NodeT> 
CrsGraphType;
 
   89    typedef Tpetra::Map<LocalOrdinalT,GlobalOrdinalT,NodeT> 
MapType;
 
   90    typedef Tpetra::Import<LocalOrdinalT,GlobalOrdinalT,NodeT> 
ImportType;
 
   91    typedef Tpetra::Export<LocalOrdinalT,GlobalOrdinalT,NodeT> 
ExportType;
 
   93    typedef Thyra::TpetraVector<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> 
ThyraVector;
 
   94    typedef Thyra::TpetraLinearOp<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> 
ThyraLinearOp;
 
  141                                              bool zeroVectorRows=
false, 
bool adjustX = 
false) 
const;
 
  164    template <
typename EvalT>
 
  169    template <
typename EvalT>
 
  174    template <
typename EvalT>
 
  179    template <
typename EvalT>
 
  184    template <
typename EvalT>
 
  189    template <
typename EvalT>
 
  354                                      bool zeroVectorRows) 
const;
 
  370    mutable std::vector<Teuchos::RCP<const MapType> > 
maps_;
 
  375    mutable std::vector<Teuchos::RCP<const ImportType> > 
importers_;
 
  376    mutable std::vector<Teuchos::RCP<const ExportType> > 
exporters_;
 
BlockedTpetraLinearObjContainer< ScalarT, LocalOrdinalT, GlobalOrdinalT, NodeT > BTLOC
 
void initializeContainer(int, LinearObjContainer &loc) const 
 
std::vector< Teuchos::RCP< const ImportType > > importers_
 
Teuchos::RCP< CrsMatrixType > getTpetraMatrix(int i, int j) const 
 
Thyra::TpetraVector< ScalarT, LocalOrdinalT, GlobalOrdinalT, NodeT > ThyraVector
 
Pushes residual values into the residual vector for a Newton-based solve. 
 
Teuchos::RCP< const panzer::GlobalIndexer > getRangeGlobalIndexer() const 
Get the range unique global indexer this factory was created with. 
 
virtual Teuchos::RCP< LinearObjContainer > buildPrimitiveLinearObjContainer() const 
 
virtual ~BlockedTpetraLinearObjFactory()
 
virtual Teuchos::RCP< const ExportType > getGhostedExport(int j) const 
get exporter for converting an overalapped object to a "normal" object 
 
Thyra::TpetraLinearOp< ScalarT, LocalOrdinalT, GlobalOrdinalT, NodeT > ThyraLinearOp
 
Teuchos::RCP< const GlobalIndexer > blockProvider_
 
virtual void adjustForDirichletConditions(const LinearObjContainer &localBCRows, const LinearObjContainer &globalBCRows, LinearObjContainer &ghostedObjs, bool zeroVectorRows=false, bool adjustX=false) const 
 
Teuchos::RCP< VectorType > getTpetraDomainVector(int i) const 
 
void initializeGhostedContainer(int, LinearObjContainer &loc) const 
 
virtual void readVector(const std::string &, LinearObjContainer &, int) const 
 
virtual Teuchos::RCP< WriteVector_GlobalEvaluationData > buildWriteDomainContainer() const 
 
virtual void ghostToGlobalContainer(const LinearObjContainer &ghostContainer, LinearObjContainer &container, int) const 
 
Teuchos::RCP< Thyra::VectorBase< ScalarT > > getThyraDomainVector() const 
Get a domain vector. 
 
std::vector< Teuchos::RCP< const GlobalIndexer > > gidProviders_
 
Teuchos::RCP< Thyra::VectorBase< ScalarT > > getGhostedThyraDomainVector() const 
Get a domain vector. 
 
std::vector< Teuchos::RCP< const ExportType > > exporters_
 
Tpetra::Import< LocalOrdinalT, GlobalOrdinalT, NodeT > ImportType
 
Teuchos::RCP< VectorType > getGhostedTpetraRangeVector(int i) const 
 
virtual Teuchos::RCP< LinearObjContainer > buildLinearObjContainer() const 
 
Teuchos::RCP< const panzer::BlockedDOFManager > getGlobalIndexer() const 
 
Teuchos::RCP< Thyra::VectorBase< ScalarT > > getGhostedThyraRangeVector() const 
Get a range vector. 
 
void globalToGhostThyraVector(const Teuchos::RCP< const Thyra::VectorBase< ScalarT > > &in, const Teuchos::RCP< Thyra::VectorBase< ScalarT > > &out) const 
 
virtual void applyDirichletBCs(const LinearObjContainer &counter, LinearObjContainer &result) const 
 
virtual Teuchos::RCP< const ImportType > getGhostedImport(int i) const 
get importer for converting an overalapped object to a "normal" object 
 
std::vector< Teuchos::RCP< const MapType > > maps_
 
Teuchos::RCP< const Thyra::VectorSpaceBase< ScalarT > > getThyraRangeSpace() const 
Get the range vector space (f) 
 
Teuchos::RCP< panzer::CloneableEvaluator > buildScatter() const 
Use preconstructed scatter evaluators. 
 
Teuchos::RCP< const Teuchos::MpiComm< int > > comm_
 
Teuchos::RCP< const BlockedDOFManager > blockedDOFManager_
 
Teuchos::RCP< const panzer::GlobalIndexer > getDomainGlobalIndexer() const 
Get the domain unique global indexer this factory was created with. 
 
Tpetra::CrsGraph< LocalOrdinalT, GlobalOrdinalT, NodeT > CrsGraphType
 
PHX::MDField< ScalarT, panzer::Cell, panzer::IP > result
A field that will be used to build up the result of the integral we're performing. 
 
Gathers solution values from the Newton solution vector into the nodal fields of the field manager...
 
Teuchos::RCP< Thyra::ProductVectorSpaceBase< ScalarT > > rangeSpace_
 
Teuchos::RCP< panzer::CloneableEvaluator > buildGatherDomain() const 
Use preconstructed gather evaluators. 
 
Teuchos::RCP< panzer::CloneableEvaluator > buildGather() const 
Use preconstructed gather evaluators. 
 
Teuchos::RCP< const Thyra::VectorSpaceBase< ScalarT > > getGhostedThyraDomainSpace() const 
Get the domain vector space (x and dxdt) 
 
std::unordered_map< std::pair< int, int >, Teuchos::RCP< const CrsGraphType >, panzer::pair_hash > ghostedGraphs_
 
void ghostToGlobalTpetraMatrix(int blockRow, const CrsMatrixType &in, CrsMatrixType &out) const 
 
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
 
Teuchos::RCP< Thyra::ProductVectorSpaceBase< ScalarT > > ghostedDomainSpace_
 
Tpetra::Export< LocalOrdinalT, GlobalOrdinalT, NodeT > ExportType
 
virtual Teuchos::RCP< const MapType > buildTpetraMap(int i) const 
 
void globalToGhostTpetraVector(int i, const VectorType &in, VectorType &out) const 
 
virtual Teuchos::RCP< const MapType > buildTpetraGhostedMap(int i) const 
 
BlockedTpetraLinearObjFactory(const Teuchos::RCP< const Teuchos::MpiComm< int > > &comm, const Teuchos::RCP< const BlockedDOFManager > &gidProvider)
 
std::unordered_map< std::pair< int, int >, Teuchos::RCP< const CrsGraphType >, panzer::pair_hash > graphs_
 
void ghostToGlobalThyraMatrix(const Thyra::LinearOpBase< ScalarT > &in, Thyra::LinearOpBase< ScalarT > &out) const 
 
virtual Teuchos::RCP< LinearObjContainer > buildGhostedLinearObjContainer() const 
 
std::vector< Teuchos::RCP< const GlobalIndexer > > nc2c_vector(const std::vector< Teuchos::RCP< GlobalIndexer > > &ugis)
 
Teuchos::RCP< panzer::CloneableEvaluator > buildGatherOrientation() const 
Use preconstructed gather evaluators. 
 
Teuchos::RCP< Thyra::BlockedLinearOpBase< ScalarT > > getGhostedThyraMatrix() const 
Get a Thyra operator. 
 
Teuchos::RCP< panzer::CloneableEvaluator > buildScatterDirichlet() const 
Use preconstructed dirichlet scatter evaluators. 
 
std::unordered_set< std::pair< int, int >, panzer::pair_hash > excludedPairs_
 
int getBlockColCount() const 
how many block columns 
 
void makeRoomForBlocks(std::size_t blockCnt)
Allocate the space in the std::vector objects so we can fill with appropriate Tpetra data...
 
virtual Teuchos::RCP< const MapType > getGhostedMap(int i) const 
get the ghosted map from the matrix 
 
Teuchos::RCP< VectorType > getGhostedTpetraDomainVector(int i) const 
 
virtual Teuchos::RCP< LinearObjContainer > buildPrimitiveGhostedLinearObjContainer() const 
 
Tpetra::Vector< ScalarT, LocalOrdinalT, GlobalOrdinalT, NodeT > VectorType
 
Teuchos::RCP< VectorType > getTpetraRangeVector(int i) const 
 
void ghostToGlobalThyraVector(const Teuchos::RCP< const Thyra::VectorBase< ScalarT > > &in, const Teuchos::RCP< Thyra::VectorBase< ScalarT > > &out) const 
 
virtual Teuchos::RCP< const MapType > getMap(int i) const 
get the map from the matrix 
 
Tpetra::CrsMatrix< ScalarT, LocalOrdinalT, GlobalOrdinalT, NodeT > CrsMatrixType
 
Tpetra::Operator< ScalarT, LocalOrdinalT, GlobalOrdinalT, NodeT > OperatorType
 
Teuchos::RCP< Thyra::ProductVectorSpaceBase< ScalarT > > domainSpace_
 
virtual void endFill(LinearObjContainer &loc) const 
 
void addExcludedPairs(const std::vector< std::pair< int, int > > &exPairs)
exclude a vector of pairs from the matrix 
 
Teuchos::RCP< const Thyra::VectorSpaceBase< ScalarT > > getGhostedThyraRangeSpace() const 
Get the range vector space (f) 
 
virtual Teuchos::RCP< const CrsGraphType > getGraph(int i, int j) const 
get the graph of the crs matrix 
 
virtual Teuchos::RCP< const CrsGraphType > getGhostedGraph(int i, int j) const 
get the ghosted graph of the crs matrix 
 
void addExcludedPair(int rowBlock, int colBlock)
exclude a block pair from the matrix 
 
Teuchos::MpiComm< int > getComm() const 
 
virtual Teuchos::RCP< const CrsGraphType > buildTpetraGraph(int i, int j) const 
 
virtual void writeVector(const std::string &, const LinearObjContainer &, int) const 
 
virtual void beginFill(LinearObjContainer &loc) const 
 
virtual Teuchos::RCP< const CrsGraphType > buildTpetraGhostedGraph(int i, int j) const 
 
virtual void globalToGhostContainer(const LinearObjContainer &container, LinearObjContainer &ghostContainer, int) const 
 
int getBlockRowCount() const 
how many block rows 
 
Teuchos::RCP< Thyra::ProductVectorSpaceBase< ScalarT > > ghostedRangeSpace_
 
Teuchos::RCP< panzer::CloneableEvaluator > buildGatherTangent() const 
Use preconstructed gather evaluators. 
 
Teuchos::RCP< CrsMatrixType > getGhostedTpetraMatrix(int i, int j) const 
 
Pushes residual values into the residual vector for a Newton-based solve. 
 
void ghostToGlobalTpetraVector(int i, const VectorType &in, VectorType &out) const 
 
Teuchos::RCP< Thyra::VectorBase< ScalarT > > getThyraRangeVector() const 
Get a range vector. 
 
virtual Teuchos::RCP< ReadOnlyVector_GlobalEvaluationData > buildReadOnlyDomainContainer() const 
 
Gathers orientations per field from the global indexer and stores them in the field manager...
 
#define TEUCHOS_ASSERT(assertion_test)
 
Gathers tangent vectors dx/dp for computing df/dx*dx/dp + df/dp into the nodal fields of the field ma...
 
std::vector< Teuchos::RCP< const MapType > > ghostedMaps_
 
Tpetra::Map< LocalOrdinalT, GlobalOrdinalT, NodeT > MapType
 
Teuchos::RCP< const Thyra::VectorSpaceBase< ScalarT > > getThyraDomainSpace() const 
Get the domain vector space (x and dxdt) 
 
Teuchos::RCP< Thyra::LinearOpBase< ScalarT > > getThyraMatrix() const 
Get a Thyra operator.