43 #ifndef __Panzer_EpetraLinearObjFactory_decl_hpp__
44 #define __Panzer_EpetraLinearObjFactory_decl_hpp__
46 #define PANZER_USE_BLOCKED_EPETRA_LOF
48 #ifndef PANZER_USE_BLOCKED_EPETRA_LOF
52 #include "Epetra_Map.h"
53 #include "Epetra_CrsGraph.h"
54 #include "Epetra_Import.h"
55 #include "Epetra_Export.h"
57 #include "PanzerDiscFE_config.hpp"
61 #include "Panzer_ScatterResidual_Epetra.hpp"
62 #include "Panzer_ScatterDirichletResidual_Epetra.hpp"
63 #include "Panzer_GatherSolution_Epetra.hpp"
64 #include "Panzer_GatherTangent_Epetra.hpp"
65 #include "Panzer_GatherOrientation.hpp"
74 template <
typename Traits,
typename LocalOrdinalT>
76 ,
public ThyraObjFactory<double> {
80 const Teuchos::RCP<
const UniqueGlobalIndexer<LocalOrdinalT,int> > & gidProvider,
81 bool useDiscreteAdjoint=
false);
84 const Teuchos::RCP<
const UniqueGlobalIndexer<LocalOrdinalT,int> > & rowProvider,
85 const Teuchos::RCP<
const UniqueGlobalIndexer<LocalOrdinalT,int> > & colProvider,
86 bool useDiscreteAdjoint=
false);
97 virtual void readVector(
const std::string & identifier,LinearObjContainer & loc,
int id)
const;
99 virtual void writeVector(
const std::string & identifier,
const LinearObjContainer & loc,
int id)
const;
112 LinearObjContainer & ghostContainer,
int)
const;
114 LinearObjContainer & container,
int)
const;
123 const LinearObjContainer & globalBCRows,
124 LinearObjContainer & ghostedObjs,
125 bool zeroVectorRows=
false,
bool adjustX=
false)
const;
131 LinearObjContainer & result)
const;
147 virtual Teuchos::MpiComm<int>
getComm()
const;
159 template <
typename EvalT>
164 template <
typename EvalT>
166 {
return Teuchos::rcp(
new GatherSolution_Epetra<EvalT,Traits,LocalOrdinalT,int>(gidProvider_)); }
169 template <
typename EvalT>
171 {
return Teuchos::rcp(
new GatherTangent_Epetra<EvalT,Traits,LocalOrdinalT,int>(gidProvider_)); }
174 template <
typename EvalT>
176 {
if(colGidProvider_!=Teuchos::null)
177 return Teuchos::rcp(
new GatherSolution_Epetra<EvalT,Traits,LocalOrdinalT,int>(colGidProvider_));
178 return Teuchos::rcp(
new GatherSolution_Epetra<EvalT,Traits,LocalOrdinalT,int>(gidProvider_)); }
181 template <
typename EvalT>
183 {
return Teuchos::rcp(
new GatherOrientation<EvalT,Traits,LocalOrdinalT,int>(gidProvider_)); }
186 template <
typename EvalT>
188 {
return Teuchos::rcp(
new ScatterDirichletResidual_Epetra<EvalT,Traits,LocalOrdinalT,int>(gidProvider_,colGidProvider_)); }
274 {
return colGidProvider_!=Teuchos::null ? colGidProvider_ : gidProvider_; }
278 {
return gidProvider_; }
321 bool hasColProvider_;
340 template <
typename Traits,
typename LocalOrdinalT>
void initializeContainer(int, LinearObjContainer &loc) const
Teuchos::RCP< const panzer::UniqueGlobalIndexerBase > getDomainGlobalIndexer() const
Get the domain global indexer object associated with this factory.
Teuchos::RCP< Thyra::LinearOpBase< double > > getThyraMatrix() const
Get a Thyra operator.
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...
Teuchos::RCP< Epetra_CrsMatrix > getEpetraMatrix(int i, int j) const
virtual Teuchos::RCP< LinearObjContainer > buildPrimitiveLinearObjContainer() const
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
Teuchos::RCP< panzer::CloneableEvaluator > buildGatherDomain() const
Use preconstructed gather evaluators.
Teuchos::RCP< const Thyra::VectorSpaceBase< double > > domainSpace_
Teuchos::RCP< panzer::CloneableEvaluator > buildScatter() const
Use preconstructed scatter evaluators.
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.
Teuchos::RCP< panzer::CloneableEvaluator > buildGather() const
Use preconstructed gather evaluators.
virtual void adjustForDirichletConditions(const LinearObjContainer &localBCRows, const LinearObjContainer &globalBCRows, LinearObjContainer &ghostedObjs, bool zeroVectorRows=false, bool adjustX=false) const
Teuchos::RCP< const Thyra::VectorSpaceBase< double > > rangeSpace_
Teuchos::RCP< const panzer::UniqueGlobalIndexerBase > getRangeGlobalIndexer() const
Get the range global indexer object associated with this factory.
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
virtual void ghostToGlobalContainer(const LinearObjContainer &ghostContainer, LinearObjContainer &container, int) const
Teuchos::RCP< Epetra_CrsMatrix > getGhostedEpetraMatrix(int i, int j) const
virtual const Teuchos::RCP< Epetra_CrsGraph > buildFilteredGhostedGraph(int i, int j) const
BlockedEpetraLinearObjFactory< Traits, LocalOrdinalT > EpetraLinearObjFactory
virtual const Teuchos::RCP< Epetra_Map > getMap(int i) const
get the map from the matrix
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
Teuchos::RCP< const Teuchos::OpaqueWrapper< MPI_Comm > > rawMpiComm_
virtual const Teuchos::RCP< Epetra_CrsGraph > buildGhostedGraph(int i, int j, bool optimizeStorage) const
virtual const Teuchos::RCP< Epetra_Import > getGhostedImport(int i) const
get importer for converting an overalapped object to a "normal" object
virtual const Teuchos::RCP< const Epetra_Comm > getEpetraComm() const
get exporter for converting an overalapped object to a "normal" object
void ghostToGlobalEpetraMatrix(int blockRow, const Epetra_CrsMatrix &in, Epetra_CrsMatrix &out) const
Teuchos::RCP< panzer::CloneableEvaluator > buildGatherTangent() const
Use preconstructed gather evaluators.
virtual void globalToGhostContainer(const LinearObjContainer &container, LinearObjContainer &ghostContainer, int) const
virtual const Teuchos::RCP< Epetra_Import > getGhostedColImport(int i) const
get importer for converting an overalapped object to a "normal" object
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< panzer::CloneableEvaluator > buildScatterDirichlet() const
Use preconstructed dirichlet scatter evaluators.
virtual const Teuchos::RCP< Epetra_CrsGraph > getGraph(int i, int j) const
get the 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
Teuchos::RCP< const Teuchos::Comm< int > > comm
Teuchos::RCP< const Thyra::VectorSpaceBase< double > > getThyraDomainSpace() const
Get the domain vector space (x and dxdt)
virtual const Teuchos::RCP< Epetra_Map > getGhostedMap(int i) const
get the ghosted map from the matrix
virtual Teuchos::MpiComm< int > getComm() const
virtual void writeVector(const std::string &identifier, const LinearObjContainer &loc, int id) const
Teuchos::RCP< const Thyra::VectorSpaceBase< double > > getThyraRangeSpace() const
Get the range vector space (f)
virtual Teuchos::RCP< LinearObjContainer > buildGhostedLinearObjContainer() const
virtual Teuchos::RCP< ReadOnlyVector_GlobalEvaluationData > buildReadOnlyDomainContainer() const
virtual Teuchos::RCP< LinearObjContainer > buildLinearObjContainer() const
void globalToGhostEpetraVector(int i, const Epetra_Vector &in, Epetra_Vector &out, bool col) const
virtual Teuchos::RCP< WriteVector_GlobalEvaluationData > buildWriteDomainContainer() const
virtual void readVector(const std::string &identifier, LinearObjContainer &loc, int id) 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.
void initializeGhostedContainer(int, LinearObjContainer &loc) const
virtual void applyDirichletBCs(const LinearObjContainer &counter, LinearObjContainer &result) const
virtual Teuchos::RCP< LinearObjContainer > buildPrimitiveGhostedLinearObjContainer() const
Teuchos::RCP< panzer::CloneableEvaluator > buildGatherOrientation() const
Use preconstructed gather evaluators.