43 #ifndef __Panzer_BlockedEpetraLinearObjFactory_hpp__ 44 #define __Panzer_BlockedEpetraLinearObjFactory_hpp__ 49 #include "Epetra_Map.h" 50 #include "Epetra_CrsGraph.h" 51 #include "Epetra_Import.h" 52 #include "Epetra_Export.h" 54 #include "PanzerDiscFE_config.hpp" 62 #include "Panzer_GatherOrientation.hpp" 63 #include "Panzer_GatherSolution_BlockedEpetra.hpp" 64 #include "Panzer_GatherTangent_BlockedEpetra.hpp" 65 #include "Panzer_ScatterResidual_BlockedEpetra.hpp" 66 #include "Panzer_ScatterDirichletResidual_BlockedEpetra.hpp" 67 #include "Panzer_ScatterResidual_Epetra.hpp" 68 #include "Panzer_ScatterDirichletResidual_Epetra.hpp" 69 #include "Panzer_GatherSolution_Epetra.hpp" 70 #include "Panzer_GatherTangent_Epetra.hpp" 71 #include "Panzer_GatherOrientation.hpp" 75 #include "Thyra_BlockedLinearOpBase.hpp" 76 #include "Thyra_ProductVectorBase.hpp" 80 #include "Teuchos_OpaqueWrapper.hpp" 84 template <
typename Traits,
typename LocalOrdinalT>
91 bool useDiscreteAdjoint=
false);
96 bool useDiscreteAdjoint=
false);
130 bool zeroVectorRows=
false,
bool adjustX=
false)
const;
144 virtual Teuchos::MpiComm<int>
getComm()
const;
147 template <
typename EvalT>
162 template <
typename EvalT>
172 template <
typename EvalT>
182 template <
typename EvalT>
191 template <
typename EvalT>
196 template <
typename EvalT>
354 using Teuchos::rcp_dynamic_cast;
359 if(blockedDOFManager!=Teuchos::null) {
365 for(
auto itr=dofManagers.begin();itr!=dofManagers.end();++itr)
368 else if(flatDOFManager!=Teuchos::null) {
409 const std::vector<Teuchos::RCP<const UniqueGlobalIndexer<LocalOrdinalT,int> > > &
getFieldDOFManagers()
const 414 std::vector<Teuchos::RCP<const UniqueGlobalIndexer<LocalOrdinalT,int> > >
gidProviders_;
455 bool zeroVectorRows)
const;
479 mutable std::vector<Teuchos::RCP<Epetra_Map> >
maps_;
481 mutable std::vector<Teuchos::RCP<Epetra_Import> >
importers_;
482 mutable std::vector<Teuchos::RCP<Epetra_Export> >
exporters_;
484 mutable std::vector<Teuchos::RCP<Epetra_Map> >
colMaps_;
Teuchos::RCP< Thyra::VectorBase< double > > getGhostedThyraRangeVector() const
Get a range vector.
void ghostToGlobalEpetraVector(int i, const Epetra_Vector &in, Epetra_Vector &out, bool col) const
std::vector< Teuchos::RCP< Epetra_Map > > colGhostedMaps_
virtual Teuchos::RCP< LinearObjContainer > buildGhostedLinearObjContainer() const
Gathers solution values from the Newton solution vector into the nodal fields of the field manager...
std::vector< Teuchos::RCP< Epetra_Map > > colMaps_
virtual const Teuchos::RCP< Epetra_Map > buildMap(int i) const
Teuchos::RCP< Epetra_CrsMatrix > getGhostedEpetraMatrix(int i, int j) const
virtual const Teuchos::RCP< Epetra_Export > getGhostedExport(int j) 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 BlockedDOFManager< LocalOrdinalT, int > > getBlockedIndexer() const
Get the "parent" global indexer (if containsBlockedDOFManager()==false this will throw) ...
virtual void readVector(const std::string &identifier, LinearObjContainer &loc, int id) const
Teuchos::RCP< const Thyra::VectorSpaceBase< double > > domainSpace_
std::unordered_set< std::pair< int, int >, panzer::pair_hash > excludedPairs_
Teuchos::RCP< const Thyra::VectorSpaceBase< double > > ghostedRangeSpace_
virtual void ghostToGlobalContainer(const LinearObjContainer &ghostContainer, LinearObjContainer &container, int) const
Teuchos::RCP< const Epetra_Comm > eComm_
Teuchos::RCP< Thyra::VectorBase< double > > getThyraDomainVector() const
Get a domain vector.
virtual const Teuchos::RCP< Epetra_Map > buildColMap(int i) const
void globalToGhostEpetraVector(int i, const Epetra_Vector &in, Epetra_Vector &out, bool col) const
void globalToGhostThyraVector(const Teuchos::RCP< const Thyra::VectorBase< double > > &in, const Teuchos::RCP< Thyra::VectorBase< double > > &out, bool col) const
Gathers tangent vectors dx/dp for computing df/dx*dx/dp + df/dp into the nodal fields of the field ma...
Teuchos::RCP< const UniqueGlobalIndexer< LocalOrdinalT, int > > getColGlobalIndexer(int i) const
int getBlockColCount() const
how many block columns
virtual Teuchos::RCP< LinearObjContainer > buildPrimitiveLinearObjContainer() const
virtual const Teuchos::RCP< Epetra_CrsGraph > buildGhostedGraph(int i, int j, bool optimizeStorage) const
virtual Teuchos::RCP< ReadOnlyVector_GlobalEvaluationData > buildDomainContainer() const
Teuchos::RCP< const Thyra::VectorSpaceBase< double > > getThyraRangeSpace() const
Get the range vector space (f)
Teuchos::RCP< const Thyra::VectorSpaceBase< double > > getGhostedThyraRangeSpace() const
Get the range vector space (f)
void setGlobalIndexer(const Teuchos::RCP< const UniqueGlobalIndexerBase > &ugi)
virtual const Teuchos::RCP< Epetra_Map > getMap(int i) const
get the map from the matrix
Teuchos::RCP< Thyra::VectorBase< double > > getThyraRangeVector() const
Get a range vector.
void ghostToGlobalEpetraMatrix(int blockRow, const Epetra_CrsMatrix &in, Epetra_CrsMatrix &out) const
std::vector< Teuchos::RCP< Epetra_Map > > maps_
virtual const Teuchos::RCP< Epetra_Import > getGhostedImport(int i) const
get importer for converting an overalapped object to a "normal" object
std::unordered_map< std::pair< int, int >, Teuchos::RCP< Epetra_CrsGraph >, panzer::pair_hash > graphs_
Teuchos::RCP< const Thyra::VectorSpaceBase< double > > rangeSpace_
PHX::MDField< ScalarT > vector
void ghostToGlobalThyraVector(const Teuchos::RCP< const Thyra::VectorBase< double > > &in, const Teuchos::RCP< Thyra::VectorBase< double > > &out, bool col) const
void ghostToGlobalThyraMatrix(const Thyra::LinearOpBase< double > &in, Thyra::LinearOpBase< double > &out) const
const std::vector< Teuchos::RCP< const UniqueGlobalIndexer< LocalOrdinalT, int > > > & getDomainGlobalIndexers() const
Get global indexers associated with the blocks.
std::vector< Teuchos::RCP< Epetra_Export > > exporters_
virtual const Teuchos::RCP< Epetra_CrsGraph > getGhostedGraph(int i, int j) const
get the ghosted graph of the crs matrix
Pushes residual values into the residual vector for a Newton-based solve.
Teuchos::RCP< const panzer::UniqueGlobalIndexerBase > getDomainGlobalIndexer() const
Get the domain global indexer object associated with this factory.
virtual const Teuchos::RCP< Epetra_CrsGraph > buildFilteredGhostedGraph(int i, int j) const
virtual const Teuchos::RCP< Epetra_Map > getColMap(int i) const
get the map from the matrix
const std::vector< Teuchos::RCP< const UniqueGlobalIndexer< LocalOrdinalT, int > > > & getRangeGlobalIndexers() const
Get global indexers associated with the blocks.
Teuchos::RCP< const Thyra::VectorSpaceBase< double > > ghostedDomainSpace_
virtual ~BlockedEpetraLinearObjFactory()
virtual void applyDirichletBCs(const LinearObjContainer &counter, LinearObjContainer &result) const
Teuchos::RCP< const panzer::UniqueGlobalIndexerBase > getRangeGlobalIndexer() const
Get the range global indexer object associated with this factory.
virtual Teuchos::RCP< LinearObjContainer > buildLinearObjContainer() const
Teuchos::RCP< panzer::CloneableEvaluator > buildGatherTangent() const
Use preconstructed gather evaluators.
Teuchos::RCP< const DOFManagerContainer > colDOFManagerContainer_
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
Teuchos::RCP< const Teuchos::OpaqueWrapper< MPI_Comm > > rawMpiComm_
DOFManagerContainer(const Teuchos::RCP< const UniqueGlobalIndexerBase > &ugi)
void addExcludedPairs(const std::vector< std::pair< int, int > > &exPairs)
exclude a vector of pairs from the matrix
virtual void adjustForDirichletConditions(const LinearObjContainer &localBCRows, const LinearObjContainer &globalBCRows, LinearObjContainer &ghostedObjs, bool zeroVectorRows=false, bool adjustX=false) const
Teuchos::RCP< Thyra::VectorBase< double > > getGhostedThyraDomainVector() const
Get a domain vector.
Pushes residual values into the residual vector for a Newton-based solve.
Teuchos::RCP< const BlockedDOFManager< LocalOrdinalT, int > > blockedDOFManager_
virtual const Teuchos::RCP< const Epetra_Comm > getEpetraComm() const
get exporter for converting an overalapped object to a "normal" object
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 > buildScatterDirichlet() const
Use preconstructed dirichlet scatter evaluators.
void addExcludedPair(int rowBlock, int colBlock)
exclude a block pair from the matrix
void initializeGhostedContainer(int, LinearObjContainer &loc) const
virtual Teuchos::MpiComm< int > getComm() const
virtual const Teuchos::RCP< Epetra_Map > getGhostedMap(int i) const
get the ghosted map from the matrix
Teuchos::RCP< Epetra_CrsMatrix > getEpetraMatrix(int i, int j) const
std::vector< Teuchos::RCP< Epetra_Import > > colImporters_
Teuchos::RCP< panzer::CloneableEvaluator > buildScatter() const
Use preconstructed scatter evaluators.
virtual const Teuchos::RCP< Epetra_CrsGraph > buildGraph(int i, int j) const
Teuchos::RCP< const UniqueGlobalIndexerBase > getGlobalIndexer() const
Get the "parent" global indexer (if getFieldBlocks()>1 this will be blocked, otherwise it may be eith...
void initializeContainer(int, LinearObjContainer &loc) const
virtual const Teuchos::RCP< Epetra_Map > buildColGhostedMap(int i) const
virtual const Teuchos::RCP< Epetra_Map > buildGhostedMap(int i) const
Teuchos::RCP< panzer::CloneableEvaluator > buildGatherOrientation() const
Use preconstructed gather evaluators.
Pushes residual values into the residual vector for a Newton-based solve.
Teuchos::RCP< const Thyra::VectorSpaceBase< double > > getThyraDomainSpace() const
Get the domain vector space (x and dxdt)
void initializeGhostedContainer_internal(int mem, ThyraObjContainer< double > &loc) const
Gathers solution values from the Newton solution vector into the nodal fields of the field manager...
Teuchos::RCP< const Teuchos::Comm< int > > comm
std::vector< Teuchos::RCP< const UniqueGlobalIndexer< LocalOrdinalT, int > > > gidProviders_
virtual const Teuchos::RCP< Epetra_Import > getGhostedColImport(int i) const
get importer for converting an overalapped object to a "normal" object
virtual const Teuchos::RCP< Epetra_CrsGraph > getGraph(int i, int j) const
get the graph of the crs matrix
virtual void writeVector(const std::string &identifier, const LinearObjContainer &loc, int id) const
std::vector< Teuchos::RCP< Epetra_Map > > ghostedMaps_
virtual void globalToGhostContainer(const LinearObjContainer &container, LinearObjContainer &ghostContainer, int) const
Teuchos::RCP< panzer::CloneableEvaluator > buildGatherDomain() const
Use preconstructed gather evaluators.
std::vector< Teuchos::RCP< Epetra_Export > > colExporters_
Gathers tangent vectors dx/dp for computing df/dx*dx/dp + df/dp into the nodal fields of the field ma...
Teuchos::RCP< Thyra::LinearOpBase< double > > getGhostedThyraMatrix() const
Get a Thyra operator.
virtual const Teuchos::RCP< Epetra_Map > getGhostedColMap(int i) const
get the ghosted map from the matrix
Teuchos::RCP< const panzer::BlockedDOFManager< int, int > > getGlobalIndexer() const
Gathers orientations per field from the global indexer and stores them in the field manager...
std::unordered_map< std::pair< int, int >, Teuchos::RCP< Epetra_CrsGraph >, panzer::pair_hash > ghostedGraphs_
#define TEUCHOS_ASSERT(assertion_test)
virtual Teuchos::RCP< LinearObjContainer > buildPrimitiveGhostedLinearObjContainer() const
bool containsBlockedDOFManager() const
void initializeContainer_internal(int mem, ThyraObjContainer< double > &loc) const
std::vector< Teuchos::RCP< Epetra_Import > > importers_
int getBlockRowCount() const
how many block rows
Teuchos::RCP< Teuchos::MpiComm< int > > tComm_
const std::vector< Teuchos::RCP< const UniqueGlobalIndexer< LocalOrdinalT, int > > > & getFieldDOFManagers() const
Get DOFManagers associated with the blocks.
int getFieldBlocks() const
Get the number of global indexers (not including the blocked one) contained.
Teuchos::RCP< panzer::CloneableEvaluator > buildGather() const
Use preconstructed gather evaluators.
Teuchos::RCP< const DOFManagerContainer > rowDOFManagerContainer_
virtual const Teuchos::RCP< Epetra_Export > getGhostedColExport(int j) const
get exporter for converting an overalapped object to a "normal" object
BlockedEpetraLinearObjFactory(const Teuchos::RCP< const Teuchos::MpiComm< int > > &comm, const Teuchos::RCP< const UniqueGlobalIndexerBase > &gidProvider, bool useDiscreteAdjoint=false)
Teuchos::RCP< const Thyra::VectorSpaceBase< double > > getGhostedThyraDomainSpace() const
Get the domain vector space (x and dxdt)
Pushes residual values into the residual vector for a Newton-based solve.