|
Panzer
Version of the Day
|
Go to the documentation of this file.
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"
85 template <
typename Traits,
typename LocalOrdinalT>
92 bool useDiscreteAdjoint=
false);
97 bool useDiscreteAdjoint=
false);
131 bool zeroVectorRows=
false,
bool adjustX=
false)
const;
154 template <
typename EvalT>
169 template <
typename EvalT>
179 template <
typename EvalT>
189 template <
typename EvalT>
198 template <
typename EvalT>
203 template <
typename EvalT>
463 using Teuchos::rcp_dynamic_cast;
468 if(blockedDOFManager!=Teuchos::null) {
474 for(
auto itr=dofManagers.begin();itr!=dofManagers.end();++itr)
477 else if(flatDOFManager!=Teuchos::null) {
518 const std::vector<Teuchos::RCP<const UniqueGlobalIndexer<LocalOrdinalT,int> > > &
getFieldDOFManagers()
const
523 std::vector<Teuchos::RCP<const UniqueGlobalIndexer<LocalOrdinalT,int> > >
gidProviders_;
564 bool zeroVectorRows)
const;
660 mutable std::vector<Teuchos::RCP<Epetra_Map>>
maps_;
690 mutable std::vector<Teuchos::RCP<Epetra_Map>>
colMaps_;
725 #endif // __Panzer_BlockedEpetraLinearObjFactory_hpp__
void initializeGhostedContainer(int, LinearObjContainer &loc) const
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.
std::vector< Teuchos::RCP< Epetra_Map > > colGhostedMaps_
The list of ghosted column maps corresponding to the owned and ghosted indices of the (column) global...
virtual const Teuchos::RCP< Epetra_Map > getGhostedColMap2(int i) const
Get or create the i-th ghosted column map.
Teuchos::RCP< const Thyra::VectorSpaceBase< double > > getGhostedThyraDomainSpace2() const
Get or create the ghosted Thyra domain space.
Teuchos::RCP< const Thyra::VectorSpaceBase< double > > ghostedRangeSpace_
Teuchos::RCP< const Thyra::VectorSpaceBase< double > > getGhostedThyraRangeSpace() const
Get the range vector space (f)
virtual Teuchos::RCP< LinearObjContainer > buildPrimitiveGhostedLinearObjContainer() const
Teuchos::RCP< const DOFManagerContainer > rowDOFManagerContainer_
void initializeContainer_internal(int mem, ThyraObjContainer< double > &loc) const
Teuchos::RCP< const DOFManagerContainer > colDOFManagerContainer_
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_Map > getGhostedMap(int i) const
get the ghosted map from the matrix
std::unordered_set< std::pair< int, int >, panzer::pair_hash > excludedPairs_
void ghostToGlobalThyraMatrix(const Thyra::LinearOpBase< double > &in, Thyra::LinearOpBase< double > &out) const
std::vector< Teuchos::RCP< Epetra_Import > > importers2_
The list of ghosted importers corresponding to ghostedMaps2_.
std::vector< Teuchos::RCP< Epetra_Import > > colImporters2_
The list of ghosted importers corresponding to colGhostedMaps2_.
virtual const Teuchos::RCP< Epetra_Export > getGhostedColExport(int j) const
get exporter for converting an overalapped object to a "normal" object
virtual ~BlockedEpetraLinearObjFactory()
std::vector< Teuchos::RCP< Epetra_Map > > maps_
The list of owned maps corresponding to the owned indices of the global indexers.
Teuchos::RCP< const Thyra::VectorSpaceBase< double > > getThyraRangeSpace() const
Get the range vector space (f)
Teuchos::RCP< panzer::CloneableEvaluator > buildScatterDirichlet() const
Use preconstructed dirichlet scatter evaluators.
const std::vector< Teuchos::RCP< const UniqueGlobalIndexer< LocalOrdinalT, int > > > & getFieldDOFManagers() const
Get DOFManagers associated with the blocks.
std::unordered_map< std::pair< int, int >, Teuchos::RCP< Epetra_CrsGraph >, panzer::pair_hash > ghostedGraphs_
Pushes residual values into the residual vector for a Newton-based solve.
void initializeContainer(int, LinearObjContainer &loc) const
int getBlockRowCount() const
how many block rows
Teuchos::RCP< Teuchos::MpiComm< int > > tComm_
Teuchos::RCP< panzer::CloneableEvaluator > buildScatter() const
Use preconstructed scatter evaluators.
std::vector< Teuchos::RCP< Epetra_Map > > colGhostedMaps2_
The list of ghosted column maps corresponding to the ghosted indices of the (column) global indexers.
int getFieldBlocks() const
Get the number of global indexers (not including the blocked one) contained.
Teuchos::RCP< const UniqueGlobalIndexerBase > getGlobalIndexer() const
Get the "parent" global indexer (if getFieldBlocks()>1 this will be blocked, otherwise it may be eith...
#define TEUCHOS_ASSERT(assertion_test)
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_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
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.
virtual const Teuchos::RCP< Epetra_CrsGraph > buildGraph(int i, int j) const
virtual const Teuchos::RCP< Epetra_CrsGraph > buildFilteredGhostedGraph(int i, int j) const
BlockedEpetraLinearObjFactory(const Teuchos::RCP< const Teuchos::MpiComm< int > > &comm, const Teuchos::RCP< const UniqueGlobalIndexerBase > &gidProvider, bool useDiscreteAdjoint=false)
std::vector< Teuchos::RCP< Epetra_Export > > exporters_
virtual void applyDirichletBCs(const LinearObjContainer &counter, LinearObjContainer &result) const
bool containsBlockedDOFManager() const
void addExcludedPair(int rowBlock, int colBlock)
exclude a block pair from the matrix
virtual void ghostToGlobalContainer(const LinearObjContainer &ghostContainer, LinearObjContainer &container, int) const
const std::vector< Teuchos::RCP< const UniqueGlobalIndexer< LocalOrdinalT, int > > > & getRangeGlobalIndexers() const
Get global indexers associated with the blocks.
virtual const Teuchos::RCP< Epetra_Map > getMap(int i) const
get the map from the matrix
DOFManagerContainer(const Teuchos::RCP< const UniqueGlobalIndexerBase > &ugi)
void globalToGhostThyraVector(const Teuchos::RCP< const Thyra::VectorBase< double > > &in, const Teuchos::RCP< Thyra::VectorBase< double > > &out, bool col) const
Teuchos::RCP< const UniqueGlobalIndexer< LocalOrdinalT, int > > getColGlobalIndexer(int i) const
Teuchos::RCP< const Teuchos::OpaqueWrapper< MPI_Comm > > rawMpiComm_
virtual void readVector(const std::string &identifier, LinearObjContainer &loc, int id) const
std::vector< Teuchos::RCP< Epetra_Export > > colExporters_
virtual const Teuchos::RCP< Epetra_CrsGraph > getGraph(int i, int j) const
get the graph of the crs matrix
std::vector< Teuchos::RCP< Epetra_Map > > colMaps_
The list of owned column maps corresponding to the owned indices of the (column) global indexers.
Teuchos::RCP< Thyra::VectorBase< double > > getThyraRangeVector() const
Get a range vector.
Teuchos::RCP< const panzer::UniqueGlobalIndexerBase > getDomainGlobalIndexer() const
Get the domain global indexer object associated with this factory.
virtual void writeVector(const std::string &identifier, const LinearObjContainer &loc, int id) const
Teuchos::RCP< const BlockedDOFManager< LocalOrdinalT, int > > getBlockedIndexer() const
Get the "parent" global indexer (if containsBlockedDOFManager()==false this will throw)
void ghostToGlobalThyraVector(const Teuchos::RCP< const Thyra::VectorBase< double > > &in, const Teuchos::RCP< Thyra::VectorBase< double > > &out, bool col) const
Teuchos::RCP< Epetra_CrsMatrix > getGhostedEpetraMatrix(int i, int j) const
virtual Teuchos::RCP< LinearObjContainer > buildPrimitiveLinearObjContainer() const
Pushes residual values into the residual vector for a Newton-based solve.
Pushes residual values into the residual vector for a Newton-based solve.
Teuchos::RCP< Thyra::VectorBase< double > > getGhostedThyraDomainVector() const
Get a domain vector.
void initializeGhostedContainer_internal(int mem, ThyraObjContainer< double > &loc) const
virtual const Teuchos::RCP< Epetra_Map > getGhostedColMap(int i) const
get the ghosted map from the matrix
Teuchos::RCP< const Epetra_Comm > eComm_
virtual void adjustForDirichletConditions(const LinearObjContainer &localBCRows, const LinearObjContainer &globalBCRows, LinearObjContainer &ghostedObjs, bool zeroVectorRows=false, bool adjustX=false) const
const std::vector< Teuchos::RCP< const UniqueGlobalIndexer< LocalOrdinalT, int > > > & getDomainGlobalIndexers() const
Get global indexers associated with the blocks.
void globalToGhostEpetraVector(int i, const Epetra_Vector &in, Epetra_Vector &out, bool col) 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< Thyra::VectorBase< double > > getGhostedThyraRangeVector() const
Get a range vector.
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.
void ghostToGlobalEpetraVector(int i, const Epetra_Vector &in, Epetra_Vector &out, bool col) const
Gathers solution values from the Newton solution vector into the nodal fields of the field manager.
Teuchos::RCP< Epetra_CrsMatrix > getEpetraMatrix(int i, int j) const
virtual const Teuchos::RCP< Epetra_Import > getGhostedImport(int i) const
get importer for converting an overalapped object to a "normal" object
std::vector< Teuchos::RCP< const UniqueGlobalIndexer< LocalOrdinalT, int > > > gidProviders_
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.
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_Export > getGhostedExport(int j) const
get exporter for converting an overalapped object to a "normal" object
virtual Teuchos::RCP< LinearObjContainer > buildGhostedLinearObjContainer() const
Teuchos::RCP< const BlockedDOFManager< LocalOrdinalT, int > > blockedDOFManager_
virtual const Teuchos::RCP< Epetra_Map > getGhostedMap2(int i) const
Get or create the i-th ghosted map.
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.
virtual Teuchos::MpiComm< int > getComm() const
virtual const Teuchos::RCP< const Epetra_Comm > getEpetraComm() const
get exporter for converting an overalapped object to a "normal" object
Teuchos::RCP< const panzer::BlockedDOFManager< int, int > > getGlobalIndexer() const
virtual Teuchos::RCP< LinearObjContainer > buildLinearObjContainer() const
void setGlobalIndexer(const Teuchos::RCP< const UniqueGlobalIndexerBase > &ugi)
Teuchos::RCP< panzer::CloneableEvaluator > buildGatherOrientation() const
Use preconstructed gather evaluators.
Teuchos::RCP< const Thyra::VectorSpaceBase< double > > rangeSpace_
Teuchos::RCP< panzer::CloneableEvaluator > buildGatherTangent() const
Use preconstructed gather evaluators.
Teuchos::RCP< panzer::CloneableEvaluator > buildGatherDomain() const
Use preconstructed gather evaluators.
GatherTangent_BlockedEpetra.
virtual Teuchos::RCP< WriteVector_GlobalEvaluationData > buildWriteDomainContainer() const
Teuchos::RCP< Thyra::LinearOpBase< double > > getThyraMatrix() const
Get a Thyra operator.
virtual Teuchos::RCP< ReadOnlyVector_GlobalEvaluationData > buildReadOnlyDomainContainer() const
void ghostToGlobalEpetraMatrix(int blockRow, const Epetra_CrsMatrix &in, Epetra_CrsMatrix &out) const
std::unordered_map< std::pair< int, int >, Teuchos::RCP< Epetra_CrsGraph >, panzer::pair_hash > graphs_
Gathers orientations per field from the global indexer and stores them in the field manager.
std::vector< Teuchos::RCP< Epetra_Import > > colImporters_
The list of ghosted importers corresponding to colGhostedMaps_.
Gathers solution values from the Newton solution vector into the nodal fields of the field manager.
void addExcludedPairs(const std::vector< std::pair< int, int > > &exPairs)
exclude a vector of pairs from the matrix
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 > > ghostedMaps_
The list of ghosted maps corresponding to the owned and ghosted indices of the global indexers.
std::vector< Teuchos::RCP< Epetra_Map > > ghostedMaps2_
The list of ghosted maps corresponding to the ghosted indices of the global indexers.
virtual const Teuchos::RCP< Epetra_Map > getColMap(int i) const
get the map from the matrix
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.
virtual void globalToGhostContainer(const LinearObjContainer &container, LinearObjContainer &ghostContainer, int) const
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 const Teuchos::RCP< Epetra_Import > getGhostedColImport(int i) const
get importer for converting an overalapped object to a "normal" object
Teuchos::RCP< const Thyra::VectorSpaceBase< double > > getGhostedThyraDomainSpace() const
Get the domain vector space (x and dxdt)
Teuchos::RCP< Thyra::VectorBase< double > > getThyraDomainVector() const
Get a domain vector.
Teuchos::RCP< const Thyra::VectorSpaceBase< double > > ghostedDomainSpace_
int getBlockColCount() const
how many block columns
Teuchos::RCP< const panzer::UniqueGlobalIndexerBase > getRangeGlobalIndexer() const
Get the range global indexer object associated with this factory.
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< const Thyra::VectorSpaceBase< double > > domainSpace_
Teuchos::RCP< const Thyra::VectorSpaceBase< double > > getThyraDomainSpace() const
Get the domain vector space (x and dxdt)
Teuchos::RCP< panzer::CloneableEvaluator > buildGather() const
Use preconstructed gather evaluators.
virtual const Teuchos::RCP< Epetra_CrsGraph > buildGhostedGraph(int i, int j, bool optimizeStorage) const
Pushes residual values into the residual vector for a Newton-based solve.
std::vector< Teuchos::RCP< Epetra_Import > > importers_
The list of ghosted importers corresponding to ghostedMaps_.