11 #ifndef __Panzer_BlockedTpetraLinearObjFactory_hpp__ 
   12 #define __Panzer_BlockedTpetraLinearObjFactory_hpp__ 
   17 #include "Tpetra_Map.hpp" 
   18 #include "Tpetra_CrsGraph.hpp" 
   19 #include "Tpetra_Import.hpp" 
   20 #include "Tpetra_Export.hpp" 
   22 #include "PanzerDiscFE_config.hpp" 
   32 #include "Panzer_GatherOrientation.hpp" 
   39 #include "Thyra_BlockedLinearOpBase.hpp" 
   40 #include "Thyra_ProductVectorBase.hpp" 
   44 #include "Teuchos_OpaqueWrapper.hpp" 
   48 template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT=panzer::TpetraNodeType>
 
   53    typedef Tpetra::Vector<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> 
VectorType;
 
   54    typedef Tpetra::CrsMatrix<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> 
CrsMatrixType;
 
   55    typedef Tpetra::Operator<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> 
OperatorType;
 
   56    typedef Tpetra::CrsGraph<LocalOrdinalT,GlobalOrdinalT,NodeT> 
CrsGraphType;
 
   57    typedef Tpetra::Map<LocalOrdinalT,GlobalOrdinalT,NodeT> 
MapType;
 
   58    typedef Tpetra::Import<LocalOrdinalT,GlobalOrdinalT,NodeT> 
ImportType;
 
   59    typedef Tpetra::Export<LocalOrdinalT,GlobalOrdinalT,NodeT> 
ExportType;
 
   61    typedef Thyra::TpetraVector<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> 
ThyraVector;
 
   62    typedef Thyra::TpetraLinearOp<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> 
ThyraLinearOp;
 
  109                                              bool zeroVectorRows=
false, 
bool adjustX = 
false) 
const;
 
  123 #ifdef PANZER_HAVE_EPETRA_STACK 
  134    template <
typename EvalT>
 
  139    template <
typename EvalT>
 
  144    template <
typename EvalT>
 
  149    template <
typename EvalT>
 
  154    template <
typename EvalT>
 
  159    template <
typename EvalT>
 
  324                                      bool zeroVectorRows) 
const;
 
  340    mutable std::vector<Teuchos::RCP<const MapType> > 
maps_;
 
  345    mutable std::vector<Teuchos::RCP<const ImportType> > 
importers_;
 
  346    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 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.