11#ifndef __Panzer_TpetraLinearObjFactory_decl_hpp__
12#define __Panzer_TpetraLinearObjFactory_decl_hpp__
17#include "Tpetra_Map.hpp"
18#include "Tpetra_CrsGraph.hpp"
19#include "Tpetra_CrsMatrix.hpp"
20#include "Tpetra_MultiVector.hpp"
21#include "Tpetra_Import.hpp"
22#include "Tpetra_Export.hpp"
23#include "Tpetra_FECrsGraph.hpp"
24#include "Tpetra_FECrsMatrix.hpp"
25#include "Tpetra_FEMultiVector.hpp"
27#include "PanzerDiscFE_config.hpp"
31#include "Panzer_ScatterResidual_Tpetra.hpp"
32#include "Panzer_ScatterDirichletResidual_Tpetra.hpp"
33#include "Panzer_GatherSolution_Tpetra.hpp"
34#include "Panzer_GatherTangent_Tpetra.hpp"
35#include "Panzer_GatherOrientation.hpp"
41#include "Teuchos_RCP.hpp"
42#include "Teuchos_DefaultMpiComm.hpp"
46template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT=panzer::TpetraNodeType>
51 typedef Tpetra::Vector<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT>
VectorType;
52 typedef Tpetra::MultiVector<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT>
MultiVectorType;
53 typedef Tpetra::CrsMatrix<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT>
CrsMatrixType;
54 typedef Tpetra::CrsGraph<LocalOrdinalT,GlobalOrdinalT,NodeT>
CrsGraphType;
55 typedef Tpetra::Map<LocalOrdinalT,GlobalOrdinalT,NodeT>
MapType;
56 typedef Tpetra::Import<LocalOrdinalT,GlobalOrdinalT,NodeT>
ImportType;
57 typedef Tpetra::Export<LocalOrdinalT,GlobalOrdinalT,NodeT>
ExportType;
58 typedef Tpetra::FECrsGraph<LocalOrdinalT,GlobalOrdinalT,NodeT>
FECrsGraphType;
59 typedef Tpetra::FECrsMatrix<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT>
FECrsMatrixType;
60 typedef Tpetra::FEMultiVector<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT>
FEMultiVectorType;
67 const Teuchos::RCP<const GlobalIndexer> & gidProvider,
71 const Teuchos::RCP<const GlobalIndexer> & rowProvider,
72 const Teuchos::RCP<const GlobalIndexer> & colProvider,
80 { TEUCHOS_ASSERT(
false); }
83 { TEUCHOS_ASSERT(
false); }
109 bool zeroVectorRows=
false,
bool adjustX=
false)
const;
123#ifdef PANZER_HAVE_EPETRA_STACK
128 virtual Teuchos::RCP<WriteVector_GlobalEvaluationData> buildWriteDomainContainer()
const;
136 template <
typename EvalT>
141 template <
typename EvalT>
146 template <
typename EvalT>
151 template <
typename EvalT>
156 template <
typename EvalT>
161 template <
typename EvalT>
172 virtual Teuchos::RCP<const Thyra::VectorSpaceBase<ScalarT> >
getThyraRangeSpace()
const;
175 virtual Teuchos::RCP<Thyra::LinearOpBase<ScalarT> >
getThyraMatrix()
const;
181 Teuchos::RCP<Tpetra::Vector<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> >
getTpetraVector()
const;
182 Teuchos::RCP<Tpetra::Vector<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> >
getTpetraColVector()
const;
183 Teuchos::RCP<Tpetra::CrsMatrix<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> >
getTpetraMatrix()
const;
184 Teuchos::RCP<Tpetra::CrsMatrix<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> >
getGhostedTpetraMatrix()
const;
192 Teuchos::RCP<FECrsGraphType>
getFEGraph()
const;
204 Teuchos::RCP<FEMultiVectorType>
getFEMultiVector(std::size_t numVectors=1)
const;
246 virtual const Teuchos::RCP<Tpetra::Map<LocalOrdinalT,GlobalOrdinalT,NodeT> >
getMap()
const;
247 virtual const Teuchos::RCP<Tpetra::Map<LocalOrdinalT,GlobalOrdinalT,NodeT> >
getColMap()
const;
250 virtual const Teuchos::RCP<Tpetra::Map<LocalOrdinalT,GlobalOrdinalT,NodeT> >
getGhostedMap()
const;
251 virtual const Teuchos::RCP<Tpetra::Map<LocalOrdinalT,GlobalOrdinalT,NodeT> >
getGhostedColMap()
const;
254 virtual const Teuchos::RCP<Tpetra::CrsGraph<LocalOrdinalT,GlobalOrdinalT,NodeT> >
getGraph()
const;
257 virtual const Teuchos::RCP<Tpetra::CrsGraph<LocalOrdinalT,GlobalOrdinalT,NodeT> >
getGhostedGraph()
const;
260 virtual const Teuchos::RCP<Tpetra::Import<LocalOrdinalT,GlobalOrdinalT,NodeT> >
getGhostedImport()
const;
261 virtual const Teuchos::RCP<Tpetra::Import<LocalOrdinalT,GlobalOrdinalT,NodeT> >
getGhostedColImport()
const;
264 virtual const Teuchos::RCP<Tpetra::Export<LocalOrdinalT,GlobalOrdinalT,NodeT> >
getGhostedExport()
const;
265 virtual const Teuchos::RCP<Tpetra::Export<LocalOrdinalT,GlobalOrdinalT,NodeT> >
getGhostedColExport()
const;
268 virtual const Teuchos::RCP<const Teuchos::Comm<int> >
getTeuchosComm()
const;
303 Tpetra::MultiVector<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> & out,
bool col)
const;
305 Tpetra::CrsMatrix<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> & out)
const;
307 Tpetra::MultiVector<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> & out,
bool col)
const;
310 virtual const Teuchos::RCP<Tpetra::Map<LocalOrdinalT,GlobalOrdinalT,NodeT> >
buildMap()
const;
311 virtual const Teuchos::RCP<Tpetra::Map<LocalOrdinalT,GlobalOrdinalT,NodeT> >
buildColMap()
const;
312 virtual const Teuchos::RCP<Tpetra::Map<LocalOrdinalT,GlobalOrdinalT,NodeT> >
buildGhostedMap()
const;
313 virtual const Teuchos::RCP<Tpetra::Map<LocalOrdinalT,GlobalOrdinalT,NodeT> >
buildGhostedColMap()
const;
316 virtual const Teuchos::RCP<Tpetra::CrsGraph<LocalOrdinalT,GlobalOrdinalT,NodeT> >
buildGraph()
const;
317 virtual const Teuchos::RCP<Tpetra::CrsGraph<LocalOrdinalT,GlobalOrdinalT,NodeT> >
buildGhostedGraph()
const;
320 virtual const Teuchos::RCP<FECrsGraphType>
buildFEGraph()
const;
323 Teuchos::RCP<const Teuchos::Comm<int> >
comm_;
324 mutable Teuchos::RCP<Tpetra::Map<LocalOrdinalT,GlobalOrdinalT,NodeT> >
map_;
325 mutable Teuchos::RCP<Tpetra::Map<LocalOrdinalT,GlobalOrdinalT,NodeT> >
cMap_;
326 mutable Teuchos::RCP<Tpetra::Map<LocalOrdinalT,GlobalOrdinalT,NodeT> >
ghostedMap_;
327 mutable Teuchos::RCP<Tpetra::Map<LocalOrdinalT,GlobalOrdinalT,NodeT> >
cGhostedMap_;
328 mutable Teuchos::RCP<Tpetra::CrsGraph<LocalOrdinalT,GlobalOrdinalT,NodeT> >
graph_;
329 mutable Teuchos::RCP<Tpetra::CrsGraph<LocalOrdinalT,GlobalOrdinalT,NodeT> >
ghostedGraph_;
357 mutable Teuchos::RCP<const Thyra::VectorSpaceBase<double> >
rangeSpace_;
358 mutable Teuchos::RCP<const Thyra::VectorSpaceBase<double> >
domainSpace_;
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 orientations per field from the global indexer and stores them in the field manager.
Gathers solution values from the Newton solution vector into the nodal fields of the field manager.
Gathers tangent vectors dx/dp for computing df/dx*dx/dp + df/dp into the nodal fields of the field ma...
Abstract, linear-algebra-library-agnostic container for the vectors and matrix used in a nonlinear/tr...
Pushes residual values into the residual vector for a Newton-based solve.
Pushes residual values into the residual vector for a Newton-based solve.
Tpetra-backed implementation of LinearObjContainer.
void ghostToGlobalTpetraMatrix(const Tpetra::CrsMatrix< ScalarT, LocalOrdinalT, GlobalOrdinalT, NodeT > &in, Tpetra::CrsMatrix< ScalarT, LocalOrdinalT, GlobalOrdinalT, NodeT > &out) const
virtual const Teuchos::RCP< Tpetra::Export< LocalOrdinalT, GlobalOrdinalT, NodeT > > getGhostedExport() const
get exporter for converting an overalapped object to a "normal" object
Teuchos::RCP< const Thyra::VectorSpaceBase< double > > domainSpace_
void initializeContainer(int, LinearObjContainer &loc) const
bool useFEAssembly() const
True if this factory was constructed with FE assembly enabled.
Teuchos::RCP< panzer::CloneableEvaluator > buildScatter() const
Use preconstructed scatter evaluators.
virtual void applyDirichletBCs(const LinearObjContainer &counter, LinearObjContainer &result) const
virtual Teuchos::RCP< LinearObjContainer > buildGhostedLinearObjContainer() const
Tpetra::FEMultiVector< ScalarT, LocalOrdinalT, GlobalOrdinalT, NodeT > FEMultiVectorType
virtual const Teuchos::RCP< const Teuchos::Comm< int > > getTeuchosComm() const
get exporter for converting an overalapped object to a "normal" object
Teuchos::RCP< panzer::CloneableEvaluator > buildScatterDirichlet() const
Use preconstructed dirichlet scatter evaluators.
Teuchos::RCP< panzer::CloneableEvaluator > buildGatherTangent() const
Use preconstructed gather evaluators.
Teuchos::RCP< Tpetra::Vector< ScalarT, LocalOrdinalT, GlobalOrdinalT, NodeT > > getGhostedTpetraColVector() const
Teuchos::RCP< ExportType > ghostedColExporter_
virtual const Teuchos::RCP< Tpetra::Map< LocalOrdinalT, GlobalOrdinalT, NodeT > > getColMap() const
Teuchos::RCP< ImportType > ghostedImporter_
Teuchos::RCP< FEMultiVectorType > getFEColMultiVector(std::size_t numVectors=1) const
Build a domain-space (solution-side) FE multivector.
virtual const Teuchos::RCP< Tpetra::Map< LocalOrdinalT, GlobalOrdinalT, NodeT > > buildGhostedColMap() const
const FECrsMatrixType * feAssemblyOpenOn_
virtual Teuchos::RCP< LinearObjContainer > buildPrimitiveGhostedLinearObjContainer() const
virtual const Teuchos::RCP< Tpetra::Map< LocalOrdinalT, GlobalOrdinalT, NodeT > > getGhostedColMap() const
Teuchos::RCP< FEMultiVectorType > getFEMultiVector(std::size_t numVectors=1) const
Build a new Tpetra::FEMultiVector compatible with the FE graph.
virtual Teuchos::RCP< LinearObjContainer > buildPrimitiveLinearObjContainer() const
virtual const Teuchos::RCP< Tpetra::CrsGraph< LocalOrdinalT, GlobalOrdinalT, NodeT > > buildGraph() const
virtual const Teuchos::RCP< Tpetra::CrsGraph< LocalOrdinalT, GlobalOrdinalT, NodeT > > buildGhostedGraph() const
virtual void readVector(const std::string &, LinearObjContainer &, int) const
Teuchos::RCP< panzer::CloneableEvaluator > buildGatherOrientation() const
Use preconstructed gather evaluators.
Tpetra::Map< LocalOrdinalT, GlobalOrdinalT, NodeT > MapType
Teuchos::RCP< Tpetra::Vector< ScalarT, LocalOrdinalT, GlobalOrdinalT, NodeT > > getTpetraVector() const
Teuchos::RCP< FECrsGraphType > feGraph_
void globalToGhostTpetraVector(const Tpetra::MultiVector< ScalarT, LocalOrdinalT, GlobalOrdinalT, NodeT > &in, Tpetra::MultiVector< ScalarT, LocalOrdinalT, GlobalOrdinalT, NodeT > &out, bool col) const
virtual Teuchos::RCP< const Thyra::VectorSpaceBase< ScalarT > > getGhostedThyraDomainSpace() const
Get the domain space.
Teuchos::RCP< Tpetra::Map< LocalOrdinalT, GlobalOrdinalT, NodeT > > cGhostedMap_
Teuchos::RCP< Tpetra::Map< LocalOrdinalT, GlobalOrdinalT, NodeT > > cMap_
virtual const Teuchos::RCP< Tpetra::Export< LocalOrdinalT, GlobalOrdinalT, NodeT > > getGhostedColExport() const
virtual void beginFill(LinearObjContainer &loc) const
Open a container for filling. Takes either a ghosted or an owned container.
Teuchos::RCP< Tpetra::CrsGraph< LocalOrdinalT, GlobalOrdinalT, NodeT > > graph_
virtual ~TpetraLinearObjFactory()
virtual const Teuchos::RCP< Tpetra::Map< LocalOrdinalT, GlobalOrdinalT, NodeT > > getGhostedMap() 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
Tpetra::FECrsGraph< LocalOrdinalT, GlobalOrdinalT, NodeT > FECrsGraphType
TpetraLinearObjContainer< ScalarT, LocalOrdinalT, GlobalOrdinalT, NodeT > ContainerType
Tpetra::Export< LocalOrdinalT, GlobalOrdinalT, NodeT > ExportType
Teuchos::RCP< FECrsGraphType > getFEGraph() const
Get the (cached) FE graph, built via the Tpetra::FECrsGraph "V2" constructor.
Teuchos::RCP< const panzer::GlobalIndexer > getRangeGlobalIndexer() const
Get the domain global indexer this factory was created with.
virtual Teuchos::RCP< ReadOnlyVector_GlobalEvaluationData > buildReadOnlyDomainContainer() const
virtual Teuchos::RCP< Thyra::LinearOpBase< ScalarT > > getThyraMatrix() const
Get a matrix operator.
Tpetra::CrsGraph< LocalOrdinalT, GlobalOrdinalT, NodeT > CrsGraphType
Teuchos::RCP< const Thyra::VectorSpaceBase< double > > rangeSpace_
Teuchos::RCP< Tpetra::CrsMatrix< ScalarT, LocalOrdinalT, GlobalOrdinalT, NodeT > > getGhostedTpetraMatrix() const
void initializeGhostedContainer(int, LinearObjContainer &loc) const
Teuchos::RCP< const panzer::GlobalIndexer > getDomainGlobalIndexer() const
virtual const Teuchos::RCP< Tpetra::Map< LocalOrdinalT, GlobalOrdinalT, NodeT > > buildGhostedMap() const
Teuchos::RCP< panzer::CloneableEvaluator > buildGatherDomain() const
Use preconstructed gather evaluators.
Teuchos::RCP< Tpetra::Map< LocalOrdinalT, GlobalOrdinalT, NodeT > > map_
Teuchos::RCP< Tpetra::Vector< ScalarT, LocalOrdinalT, GlobalOrdinalT, NodeT > > getGhostedTpetraVector() const
virtual const Teuchos::RCP< Tpetra::CrsGraph< LocalOrdinalT, GlobalOrdinalT, NodeT > > getGraph() const
get the graph of the crs matrix
Tpetra::FECrsMatrix< ScalarT, LocalOrdinalT, GlobalOrdinalT, NodeT > FECrsMatrixType
Teuchos::RCP< Tpetra::Map< LocalOrdinalT, GlobalOrdinalT, NodeT > > ghostedMap_
virtual const Teuchos::RCP< Tpetra::Map< LocalOrdinalT, GlobalOrdinalT, NodeT > > buildMap() const
virtual void ghostToGlobalContainer(const LinearObjContainer &ghostContainer, LinearObjContainer &container, int) const
virtual void endFill(LinearObjContainer &loc) const
Close a container after filling. Takes either a ghosted or an owned container.
Tpetra::MultiVector< ScalarT, LocalOrdinalT, GlobalOrdinalT, NodeT > MultiVectorType
virtual Teuchos::RCP< const Thyra::VectorSpaceBase< ScalarT > > getThyraDomainSpace() const
Get the domain space.
virtual Teuchos::RCP< LinearObjContainer > buildLinearObjContainer() const
Teuchos::RCP< const GlobalIndexer > colGidProvider_
Teuchos::RCP< Tpetra::Vector< ScalarT, LocalOrdinalT, GlobalOrdinalT, NodeT > > getTpetraColVector() const
virtual const Teuchos::RCP< Tpetra::CrsGraph< LocalOrdinalT, GlobalOrdinalT, NodeT > > getGhostedGraph() const
get the ghosted graph of the crs matrix
Tpetra::CrsMatrix< ScalarT, LocalOrdinalT, GlobalOrdinalT, NodeT > CrsMatrixType
Teuchos::RCP< FECrsMatrixType > getFEMatrix() const
Build a new Tpetra::FECrsMatrix over the (cached) FE graph. Fresh object per call.
void ghostToGlobalTpetraVector(const Tpetra::MultiVector< ScalarT, LocalOrdinalT, GlobalOrdinalT, NodeT > &in, Tpetra::MultiVector< ScalarT, LocalOrdinalT, GlobalOrdinalT, NodeT > &out, bool col) const
virtual const Teuchos::RCP< Tpetra::Import< LocalOrdinalT, GlobalOrdinalT, NodeT > > getGhostedColImport() const
virtual Teuchos::RCP< const Thyra::VectorSpaceBase< ScalarT > > getThyraRangeSpace() const
Get the range space.
virtual Teuchos::MpiComm< int > getComm() const
Teuchos::RCP< ImportType > ghostedColImporter_
virtual const Teuchos::RCP< Tpetra::Map< LocalOrdinalT, GlobalOrdinalT, NodeT > > getMap() const
get the map from the matrix
Teuchos::RCP< const Teuchos::Comm< int > > comm_
virtual const Teuchos::RCP< Tpetra::Map< LocalOrdinalT, GlobalOrdinalT, NodeT > > buildColMap() const
Teuchos::RCP< ExportType > ghostedExporter_
virtual void globalToGhostContainer(const LinearObjContainer &container, LinearObjContainer &ghostContainer, int) const
Teuchos::RCP< panzer::CloneableEvaluator > buildGather() const
Use preconstructed gather evaluators.
virtual const Teuchos::RCP< Tpetra::Import< LocalOrdinalT, GlobalOrdinalT, NodeT > > getGhostedImport() const
get importer for converting an overalapped object to a "normal" object
Teuchos::RCP< Tpetra::CrsGraph< LocalOrdinalT, GlobalOrdinalT, NodeT > > ghostedGraph_
Tpetra::Vector< ScalarT, LocalOrdinalT, GlobalOrdinalT, NodeT > VectorType
virtual const Teuchos::RCP< FECrsGraphType > buildFEGraph() const
Tpetra::Import< LocalOrdinalT, GlobalOrdinalT, NodeT > ImportType
Teuchos::RCP< const Thyra::VectorSpaceBase< double > > ghostedDomainSpace_
Teuchos::RCP< Tpetra::CrsMatrix< ScalarT, LocalOrdinalT, GlobalOrdinalT, NodeT > > getTpetraMatrix() const
virtual void writeVector(const std::string &, const LinearObjContainer &, int) const
Teuchos::RCP< const GlobalIndexer > gidProvider_