11 #ifndef   __Panzer_BlockedEpetraLinearObjFactory_hpp__ 
   12 #define   __Panzer_BlockedEpetraLinearObjFactory_hpp__ 
   17 #include "Epetra_Map.h" 
   18 #include "Epetra_CrsGraph.h" 
   19 #include "Epetra_Import.h" 
   20 #include "Epetra_Export.h" 
   22 #include "PanzerDiscFE_config.hpp" 
   30 #include "Panzer_GatherOrientation.hpp" 
   31 #include "Panzer_GatherSolution_BlockedEpetra.hpp" 
   32 #include "Panzer_GatherTangent_BlockedEpetra.hpp" 
   33 #include "Panzer_ScatterResidual_BlockedEpetra.hpp" 
   34 #include "Panzer_ScatterDirichletResidual_BlockedEpetra.hpp" 
   35 #include "Panzer_ScatterResidual_Epetra.hpp" 
   36 #include "Panzer_ScatterDirichletResidual_Epetra.hpp" 
   37 #include "Panzer_GatherSolution_Epetra.hpp" 
   38 #include "Panzer_GatherTangent_Epetra.hpp" 
   39 #include "Panzer_GatherOrientation.hpp" 
   43 #include "Thyra_BlockedLinearOpBase.hpp" 
   44 #include "Thyra_ProductVectorBase.hpp" 
   48 #include "Teuchos_OpaqueWrapper.hpp" 
   53 template <
typename Traits,
typename LocalOrdinalT>
 
   60                                  bool useDiscreteAdjoint=
false);
 
   65                                  bool useDiscreteAdjoint=
false);
 
   99                                              bool zeroVectorRows=
false, 
bool adjustX=
false) 
const;
 
  122    template <
typename EvalT>
 
  137    template <
typename EvalT>
 
  147    template <
typename EvalT>
 
  157    template <
typename EvalT>
 
  166    template <
typename EvalT>
 
  171    template <
typename EvalT>
 
  431       using Teuchos::rcp_dynamic_cast;
 
  434       auto flatDOFManager    = rcp_dynamic_cast<
const GlobalIndexer>(ugi);
 
  436       if(blockedDOFManager!=Teuchos::null) {
 
  442         for(
auto itr=dofManagers.begin();itr!=dofManagers.end();++itr)
 
  445       else if(flatDOFManager!=Teuchos::null) {
 
  532                                      bool zeroVectorRows) 
const;
 
  628    mutable std::vector<Teuchos::RCP<Epetra_Map>> 
maps_;
 
  658    mutable std::vector<Teuchos::RCP<Epetra_Map>> 
colMaps_;
 
  693 #endif // __Panzer_BlockedEpetraLinearObjFactory_hpp__ 
Teuchos::RCP< const panzer::GlobalIndexer > getDomainGlobalIndexer() const 
Get the domain global indexer object associated with this factory. 
virtual const Teuchos::RCP< Epetra_Map > buildColMap(int i) const 
Build the i-th owned column map from the owned indices of the i-th (column) global indexer...
std::vector< Teuchos::RCP< Epetra_Map > > colGhostedMaps_
The list of ghosted column maps corresponding to the owned and ghosted indices of the (column) global...
Teuchos::RCP< Epetra_CrsMatrix > getEpetraMatrix(int i, int j) const 
Teuchos::RCP< Thyra::VectorBase< double > > getGhostedThyraDomainVector() const 
Get a domain vector. 
Gathers solution values from the Newton solution vector into the nodal fields of the field manager...
virtual Teuchos::RCP< LinearObjContainer > buildPrimitiveLinearObjContainer() const 
std::vector< Teuchos::RCP< const GlobalIndexer > > gidProviders_
std::vector< Teuchos::RCP< Epetra_Map > > colMaps_
The list of owned column maps corresponding to the owned indices of the (column) global indexers...
virtual const Teuchos::RCP< Epetra_Export > getGhostedColExport(int j) const 
get exporter for converting an overalapped object to a "normal" object 
virtual const Teuchos::RCP< Epetra_Map > getGhostedColMap(int i) const 
get the ghosted map from the matrix 
virtual void adjustForDirichletConditions(const LinearObjContainer &localBCRows, const LinearObjContainer &globalBCRows, LinearObjContainer &ghostedObjs, bool zeroVectorRows=false, bool adjustX=false) const 
Teuchos::RCP< panzer::CloneableEvaluator > buildGatherDomain() const 
Use preconstructed gather evaluators. 
Teuchos::RCP< const Thyra::VectorSpaceBase< double > > domainSpace_
std::unordered_set< std::pair< int, int >, panzer::pair_hash > excludedPairs_
virtual Teuchos::MpiComm< int > getComm() const 
Teuchos::RCP< panzer::CloneableEvaluator > buildScatter() const 
Use preconstructed scatter evaluators. 
virtual void writeVector(const std::string &identifier, const LinearObjContainer &loc, int id) const 
Teuchos::RCP< const Thyra::VectorSpaceBase< double > > ghostedRangeSpace_
void initializeContainer_internal(int mem, ThyraObjContainer< double > &loc) const 
Teuchos::RCP< const Epetra_Comm > eComm_
GatherTangent_BlockedEpetra. 
virtual const Teuchos::RCP< Epetra_Map > buildColGhostedMap2(int i) const 
Build the i-th ghosted column map from the ghosted indices of the i-th (column) global indexer...
int getBlockColCount() const 
how many block columns 
std::vector< Teuchos::RCP< Epetra_Import > > colImporters2_
The list of ghosted importers corresponding to colGhostedMaps2_. 
Teuchos::RCP< Thyra::VectorBase< double > > getThyraDomainVector() const 
Get a domain vector. 
void ghostToGlobalThyraVector(const Teuchos::RCP< const Thyra::VectorBase< double > > &in, const Teuchos::RCP< Thyra::VectorBase< double > > &out, bool col) const 
void initializeContainer(int, LinearObjContainer &loc) const 
Teuchos::RCP< const GlobalIndexer > getColGlobalIndexer(int i) const 
virtual const Teuchos::RCP< Epetra_Map > buildGhostedMap(int i) const 
Build the i-th ghosted map from the owned and ghosted indices of the i-th global indexer. 
std::vector< Teuchos::RCP< Epetra_Map > > maps_
The list of owned maps corresponding to the owned indices of the global indexers. ...
Teuchos::RCP< panzer::CloneableEvaluator > buildGather() const 
Use preconstructed gather evaluators. 
std::unordered_map< std::pair< int, int >, Teuchos::RCP< Epetra_CrsGraph >, panzer::pair_hash > graphs_
Teuchos::RCP< const Thyra::VectorSpaceBase< double > > rangeSpace_
virtual const Teuchos::RCP< const Epetra_Comm > getEpetraComm() const 
get exporter for converting an overalapped object to a "normal" object 
Teuchos::RCP< Thyra::LinearOpBase< double > > getThyraMatrix() const 
Get a Thyra operator. 
Teuchos::RCP< const Thyra::VectorSpaceBase< double > > getThyraRangeSpace() const 
Get the range vector space (f) 
Teuchos::RCP< Thyra::LinearOpBase< double > > getGhostedThyraMatrix() const 
Get a Thyra operator. 
virtual const Teuchos::RCP< Epetra_CrsGraph > getGhostedGraph(int i, int j) const 
get the ghosted graph of the crs matrix 
virtual const Teuchos::RCP< Epetra_CrsGraph > buildGraph(int i, int j) const 
Teuchos::RCP< Thyra::VectorBase< double > > getGhostedThyraRangeVector() const 
Get a range vector. 
std::vector< Teuchos::RCP< Epetra_Export > > exporters_
void setGlobalIndexer(const Teuchos::RCP< const GlobalIndexer > &ugi)
Pushes residual values into the residual vector for a Newton-based solve. 
std::vector< Teuchos::RCP< Epetra_Import > > importers2_
The list of ghosted importers corresponding to ghostedMaps2_. 
Teuchos::RCP< Epetra_CrsMatrix > getGhostedEpetraMatrix(int i, int j) const 
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. 
Teuchos::RCP< const Thyra::VectorSpaceBase< double > > ghostedDomainSpace_
virtual ~BlockedEpetraLinearObjFactory()
virtual const Teuchos::RCP< Epetra_CrsGraph > buildFilteredGhostedGraph(int i, int j) const 
virtual void globalToGhostContainer(const LinearObjContainer &container, LinearObjContainer &ghostContainer, int) const 
virtual const Teuchos::RCP< Epetra_Map > getMap(int i) const 
get the map from the matrix 
virtual const Teuchos::RCP< Epetra_Import > getGhostedImport2(int i) const 
Get or create the i-th ghosted importer corresponding to the i-th ghosted map. 
Teuchos::RCP< const panzer::BlockedDOFManager > getGlobalIndexer() const 
Teuchos::RCP< const DOFManagerContainer > colDOFManagerContainer_
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
virtual const Teuchos::RCP< Epetra_Map > getGhostedMap2(int i) const 
Get or create the i-th ghosted map. 
void initializeGhostedContainer_internal(int mem, ThyraObjContainer< double > &loc) const 
Teuchos::RCP< const Teuchos::OpaqueWrapper< MPI_Comm > > rawMpiComm_
Teuchos::RCP< const panzer::GlobalIndexer > getRangeGlobalIndexer() const 
Get the range global indexer object associated with this factory. 
virtual const Teuchos::RCP< Epetra_Map > buildColGhostedMap(int i) const 
Build the i-th ghosted column map from the owned and ghosted indices of the i-th (column) global inde...
virtual const Teuchos::RCP< Epetra_CrsGraph > buildGhostedGraph(int i, int j, bool optimizeStorage) const 
BlockedEpetraLinearObjFactory(const Teuchos::RCP< const Teuchos::MpiComm< int > > &comm, const Teuchos::RCP< const GlobalIndexer > &gidProvider, bool useDiscreteAdjoint=false)
void addExcludedPairs(const std::vector< std::pair< int, int > > &exPairs)
exclude a vector of pairs from the matrix 
Teuchos::RCP< const BlockedDOFManager > getBlockedIndexer() const 
Get the "parent" global indexer (if containsBlockedDOFManager()==false this will throw) ...
virtual const Teuchos::RCP< Epetra_Import > getGhostedImport(int i) const 
get importer for converting an overalapped object to a "normal" object 
Pushes residual values into the residual vector for a Newton-based solve. 
void ghostToGlobalEpetraMatrix(int blockRow, const Epetra_CrsMatrix &in, Epetra_CrsMatrix &out) const 
void makeRoomForBlocks(std::size_t blockCnt, std::size_t colBlockCnt=0)
Allocate the space in the std::vector objects so we can fill with appropriate Epetra data...
Teuchos::RCP< panzer::CloneableEvaluator > buildGatherTangent() const 
Use preconstructed gather evaluators. 
virtual const Teuchos::RCP< Epetra_Import > getGhostedColImport(int i) const 
get importer for converting an overalapped object to a "normal" object 
void addExcludedPair(int rowBlock, int colBlock)
exclude a block pair from the matrix 
void ghostToGlobalEpetraVector(int i, const Epetra_Vector &in, Epetra_Vector &out, bool col) const 
virtual const Teuchos::RCP< Epetra_Map > getColMap(int i) const 
get the map from the matrix 
Teuchos::RCP< const GlobalIndexer > getGlobalIndexer() const 
Get the "parent" global indexer (if getFieldBlocks()>1 this will be blocked, otherwise it may be eith...
virtual const Teuchos::RCP< Epetra_Export > getGhostedColExport2(int i) const 
Get or create the i-th ghosted column exporter corresponding to the i-th ghosted column map...
Teuchos::RCP< panzer::CloneableEvaluator > buildScatterDirichlet() const 
Use preconstructed dirichlet scatter evaluators. 
std::vector< Teuchos::RCP< Epetra_Import > > colImporters_
The list of ghosted importers corresponding to colGhostedMaps_. 
std::vector< Teuchos::RCP< Epetra_Map > > colGhostedMaps2_
The list of ghosted column maps corresponding to the ghosted indices of the (column) global indexers...
virtual const Teuchos::RCP< Epetra_Map > buildGhostedMap2(int i) const 
Build the i-th ghosted map from the ghosted indices of the i-th global indexer. 
Teuchos::RCP< const Thyra::VectorSpaceBase< double > > getThyraDomainSpace() const 
Get the domain vector space (x and dxdt) 
int getFieldBlocks() const 
Get the number of global indexers (not including the blocked one) contained. 
virtual const Teuchos::RCP< Epetra_CrsGraph > getGraph(int i, int j) const 
get the graph of the crs matrix 
void initializeGhostedContainer(int, LinearObjContainer &loc) const 
void ghostToGlobalThyraMatrix(const Thyra::LinearOpBase< double > &in, Thyra::LinearOpBase< double > &out) const 
virtual const Teuchos::RCP< Epetra_Export > getGhostedExport(int j) const 
get exporter for converting an overalapped object to a "normal" object 
DOFManagerContainer(const Teuchos::RCP< const GlobalIndexer > &ugi)
virtual const Teuchos::RCP< Epetra_Map > getGhostedColMap2(int i) const 
Get or create the i-th ghosted column map. 
int getBlockRowCount() const 
how many block rows 
bool containsBlockedDOFManager() const 
Pushes residual values into the residual vector for a Newton-based solve. 
virtual const Teuchos::RCP< Epetra_Import > getGhostedColImport2(int i) const 
Get or create the i-th ghosted column importer corresponding to the i-th ghosted column map...
Teuchos::RCP< Thyra::VectorBase< double > > getThyraRangeVector() const 
Get a range vector. 
Gathers solution values from the Newton solution vector into the nodal fields of the field manager...
virtual const Teuchos::RCP< Epetra_Map > getGhostedMap(int i) const 
get the ghosted map from the matrix 
Teuchos::RCP< const BlockedDOFManager > blockedDOFManager_
std::vector< Teuchos::RCP< Epetra_Map > > ghostedMaps_
The list of ghosted maps corresponding to the owned and ghosted indices of the global indexers...
std::vector< Teuchos::RCP< Epetra_Export > > colExporters_
virtual void readVector(const std::string &identifier, LinearObjContainer &loc, int id) const 
virtual Teuchos::RCP< ReadOnlyVector_GlobalEvaluationData > buildReadOnlyDomainContainer() const 
virtual Teuchos::RCP< LinearObjContainer > buildGhostedLinearObjContainer() const 
Gathers orientations per field from the global indexer and stores them in the field manager...
virtual void applyDirichletBCs(const LinearObjContainer &counter, LinearObjContainer &result) const 
std::unordered_map< std::pair< int, int >, Teuchos::RCP< Epetra_CrsGraph >, panzer::pair_hash > ghostedGraphs_
#define TEUCHOS_ASSERT(assertion_test)
const std::vector< Teuchos::RCP< const GlobalIndexer > > & getDomainGlobalIndexers() const 
Get global indexers associated with the blocks. 
std::vector< Teuchos::RCP< Epetra_Map > > ghostedMaps2_
The list of ghosted maps corresponding to the ghosted indices of the global indexers. 
void globalToGhostEpetraVector(int i, const Epetra_Vector &in, Epetra_Vector &out, bool col) const 
std::vector< Teuchos::RCP< Epetra_Import > > importers_
The list of ghosted importers corresponding to ghostedMaps_. 
virtual Teuchos::RCP< WriteVector_GlobalEvaluationData > buildWriteDomainContainer() const 
const std::vector< Teuchos::RCP< const GlobalIndexer > > & getFieldDOFManagers() const 
Get DOFManagers associated with the blocks. 
Teuchos::RCP< Teuchos::MpiComm< int > > tComm_
virtual const Teuchos::RCP< Epetra_Map > buildMap(int i) const 
Build the i-th owned map from the owned indices of the i-th global indexer. 
virtual Teuchos::RCP< LinearObjContainer > buildLinearObjContainer() const 
void globalToGhostThyraVector(const Teuchos::RCP< const Thyra::VectorBase< double > > &in, const Teuchos::RCP< Thyra::VectorBase< double > > &out, bool col) const 
virtual Teuchos::RCP< LinearObjContainer > buildPrimitiveGhostedLinearObjContainer() const 
virtual void ghostToGlobalContainer(const LinearObjContainer &ghostContainer, LinearObjContainer &container, int) const 
Teuchos::RCP< const Thyra::VectorSpaceBase< double > > getGhostedThyraRangeSpace() const 
Get the range vector space (f) 
Teuchos::RCP< const DOFManagerContainer > rowDOFManagerContainer_
const std::vector< Teuchos::RCP< const GlobalIndexer > > & getRangeGlobalIndexers() const 
Get global indexers associated with the blocks. 
Teuchos::RCP< const Thyra::VectorSpaceBase< double > > getGhostedThyraDomainSpace() const 
Get the domain vector space (x and dxdt) 
Teuchos::RCP< const Thyra::VectorSpaceBase< double > > getGhostedThyraDomainSpace2() const 
Get or create the ghosted Thyra domain space. 
virtual const Teuchos::RCP< Epetra_Export > getGhostedExport2(int i) const 
Get or create the i-th ghosted exporter corresponding to the i-th ghosted map. 
Pushes residual values into the residual vector for a Newton-based solve. 
Teuchos::RCP< panzer::CloneableEvaluator > buildGatherOrientation() const 
Use preconstructed gather evaluators.