Panzer  Version of the Day
Panzer_BlockedTpetraLinearObjFactory.hpp
Go to the documentation of this file.
1 // @HEADER
2 // ***********************************************************************
3 //
4 // Panzer: A partial differential equation assembly
5 // engine for strongly coupled complex multiphysics systems
6 // Copyright (2011) Sandia Corporation
7 //
8 // Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
9 // the U.S. Government retains certain rights in this software.
10 //
11 // Redistribution and use in source and binary forms, with or without
12 // modification, are permitted provided that the following conditions are
13 // met:
14 //
15 // 1. Redistributions of source code must retain the above copyright
16 // notice, this list of conditions and the following disclaimer.
17 //
18 // 2. Redistributions in binary form must reproduce the above copyright
19 // notice, this list of conditions and the following disclaimer in the
20 // documentation and/or other materials provided with the distribution.
21 //
22 // 3. Neither the name of the Corporation nor the names of the
23 // contributors may be used to endorse or promote products derived from
24 // this software without specific prior written permission.
25 //
26 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
27 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
29 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
30 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
31 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
32 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
33 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
34 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
35 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
36 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37 //
38 // Questions? Contact Roger P. Pawlowski (rppawlo@sandia.gov) and
39 // Eric C. Cyr (eccyr@sandia.gov)
40 // ***********************************************************************
41 // @HEADER
42 
43 #ifndef __Panzer_BlockedTpetraLinearObjFactory_hpp__
44 #define __Panzer_BlockedTpetraLinearObjFactory_hpp__
45 
46 #include <map>
47 
48 // Tpetra includes
49 #include "Tpetra_Map.hpp"
50 #include "Tpetra_CrsGraph.hpp"
51 #include "Tpetra_Import.hpp"
52 #include "Tpetra_Export.hpp"
53 
54 #include "PanzerDiscFE_config.hpp"
55 #include "Panzer_GlobalIndexer.hpp"
62 #include "Panzer_HashUtils.hpp" // for pair_hash
63 
64 #include "Panzer_GatherOrientation.hpp"
70 
71 #include "Thyra_BlockedLinearOpBase.hpp"
72 #include "Thyra_ProductVectorBase.hpp"
73 
74 #include "Teuchos_RCP.hpp"
75 #include "Teuchos_DefaultMpiComm.hpp"
76 #include "Teuchos_OpaqueWrapper.hpp"
77 
78 namespace panzer {
79 
80 template <typename Traits,typename ScalarT,typename LocalOrdinalT,typename GlobalOrdinalT,typename NodeT=panzer::TpetraNodeType>
82  , public ThyraObjFactory<double> {
83 public:
85  typedef Tpetra::Vector<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> VectorType;
86  typedef Tpetra::CrsMatrix<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> CrsMatrixType;
87  typedef Tpetra::Operator<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> OperatorType;
88  typedef Tpetra::CrsGraph<LocalOrdinalT,GlobalOrdinalT,NodeT> CrsGraphType;
89  typedef Tpetra::Map<LocalOrdinalT,GlobalOrdinalT,NodeT> MapType;
90  typedef Tpetra::Import<LocalOrdinalT,GlobalOrdinalT,NodeT> ImportType;
91  typedef Tpetra::Export<LocalOrdinalT,GlobalOrdinalT,NodeT> ExportType;
92 
93  typedef Thyra::TpetraVector<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> ThyraVector;
94  typedef Thyra::TpetraLinearOp<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> ThyraLinearOp;
95 
96 
97  BlockedTpetraLinearObjFactory(const Teuchos::RCP<const Teuchos::MpiComm<int> > & comm,
98  const Teuchos::RCP<const BlockedDOFManager> & gidProvider);
99 
104  BlockedTpetraLinearObjFactory(const Teuchos::RCP<const Teuchos::MpiComm<int> > & comm,
105  const std::vector<Teuchos::RCP<const panzer::GlobalIndexer>> & gidProviders);
106 
108 
109 /*************** Linear object factory methods *******************/
110 
111  virtual void readVector(const std::string & /* identifier */, LinearObjContainer & /* loc */, int /* id */) const
112  { TEUCHOS_ASSERT(false); }
113 
114  virtual void writeVector(const std::string & /* identifier */, const LinearObjContainer & /* loc */, int /* id */) const
115  { TEUCHOS_ASSERT(false); }
116 
117  virtual Teuchos::RCP<LinearObjContainer> buildLinearObjContainer() const;
118 
119  virtual Teuchos::RCP<LinearObjContainer> buildPrimitiveLinearObjContainer() const
120  { return buildLinearObjContainer(); }
121 
122  virtual Teuchos::RCP<LinearObjContainer> buildGhostedLinearObjContainer() const;
123 
124  virtual Teuchos::RCP<LinearObjContainer> buildPrimitiveGhostedLinearObjContainer() const
125  { return buildGhostedLinearObjContainer(); }
126 
127  virtual void globalToGhostContainer(const LinearObjContainer & container,
128  LinearObjContainer & ghostContainer,int) const;
129  virtual void ghostToGlobalContainer(const LinearObjContainer & ghostContainer,
130  LinearObjContainer & container,int) const;
131 
138  virtual void adjustForDirichletConditions(const LinearObjContainer & localBCRows,
139  const LinearObjContainer & globalBCRows,
140  LinearObjContainer & ghostedObjs,
141  bool zeroVectorRows=false, bool adjustX = false) const;
142 
146  virtual void applyDirichletBCs(const LinearObjContainer & counter,
147  LinearObjContainer & result) const;
148 
153  virtual Teuchos::RCP<ReadOnlyVector_GlobalEvaluationData> buildReadOnlyDomainContainer() const;
154 
159  virtual Teuchos::RCP<WriteVector_GlobalEvaluationData> buildWriteDomainContainer() const;
160 
162 
164  template <typename EvalT>
165  Teuchos::RCP<panzer::CloneableEvaluator> buildScatter() const
167 
169  template <typename EvalT>
170  Teuchos::RCP<panzer::CloneableEvaluator > buildGather() const
172 
174  template <typename EvalT>
175  Teuchos::RCP<panzer::CloneableEvaluator > buildGatherTangent() const
177 
179  template <typename EvalT>
180  Teuchos::RCP<panzer::CloneableEvaluator > buildGatherDomain() const
182 
184  template <typename EvalT>
185  Teuchos::RCP<panzer::CloneableEvaluator > buildGatherOrientation() const
186  { return Teuchos::rcp(new GatherOrientation<EvalT,Traits,LocalOrdinalT,GlobalOrdinalT>(nc2c_vector(blockedDOFManager_->getFieldDOFManagers()))); }
187 
189  template <typename EvalT>
190  Teuchos::RCP<panzer::CloneableEvaluator> buildScatterDirichlet() const
192 
193 /*************** Generic helper functions for container setup *******************/
194 
200  void initializeContainer(int,LinearObjContainer & loc) const;
201 
207  void initializeContainer(int mem,BTLOC & loc) const;
208 
214  void initializeGhostedContainer(int,LinearObjContainer & loc) const;
215 
221  void initializeGhostedContainer(int mem,BTLOC & loc) const;
222 
223 /*************** Thyra based methods *******************/
224 
226  Teuchos::RCP<const Thyra::VectorSpaceBase<ScalarT> > getThyraDomainSpace() const;
227 
229  Teuchos::RCP<const Thyra::VectorSpaceBase<ScalarT> > getThyraRangeSpace() const;
230 
232  Teuchos::RCP<const Thyra::VectorSpaceBase<ScalarT> > getThyraDomainSpace(int blk) const;
233 
235  Teuchos::RCP<const Thyra::VectorSpaceBase<ScalarT> > getThyraRangeSpace(int blk) const;
236 
238  Teuchos::RCP<Thyra::VectorBase<ScalarT> > getThyraDomainVector() const;
239 
241  Teuchos::RCP<Thyra::VectorBase<ScalarT> > getThyraRangeVector() const;
242 
244  Teuchos::RCP<Thyra::LinearOpBase<ScalarT> > getThyraMatrix() const;
245 
246  // and now the ghosted versions
247 
249  Teuchos::RCP<const Thyra::VectorSpaceBase<ScalarT> > getGhostedThyraDomainSpace() const;
250 
252  Teuchos::RCP<const Thyra::VectorSpaceBase<ScalarT> > getGhostedThyraRangeSpace() const;
253 
255  Teuchos::RCP<Thyra::VectorBase<ScalarT> > getGhostedThyraDomainVector() const;
256 
258  Teuchos::RCP<Thyra::VectorBase<ScalarT> > getGhostedThyraRangeVector() const;
259 
261  Teuchos::RCP<Thyra::BlockedLinearOpBase<ScalarT> > getGhostedThyraMatrix() const;
262 
263 /*************** Tpetra based methods *******************/
264 
266  virtual Teuchos::RCP<const MapType> getMap(int i) const;
267 
269  virtual Teuchos::RCP<const MapType> getGhostedMap(int i) const;
270 
272  virtual Teuchos::RCP<const CrsGraphType> getGraph(int i,int j) const;
273 
275  virtual Teuchos::RCP<const CrsGraphType> getGhostedGraph(int i,int j) const;
276 
278  virtual Teuchos::RCP<const ImportType> getGhostedImport(int i) const;
279 
281  virtual Teuchos::RCP<const ExportType> getGhostedExport(int j) const;
282 
283  Teuchos::RCP<CrsMatrixType> getTpetraMatrix(int i,int j) const;
284  Teuchos::RCP<CrsMatrixType> getGhostedTpetraMatrix(int i,int j) const;
285 
286  Teuchos::RCP<VectorType> getTpetraDomainVector(int i) const;
287  Teuchos::RCP<VectorType> getGhostedTpetraDomainVector(int i) const;
288 
289  Teuchos::RCP<VectorType> getTpetraRangeVector(int i) const;
290  Teuchos::RCP<VectorType> getGhostedTpetraRangeVector(int i) const;
291 
293  int getBlockRowCount() const;
294 
296  int getBlockColCount() const;
297 
299  void addExcludedPair(int rowBlock,int colBlock);
300 
302  void addExcludedPairs(const std::vector<std::pair<int,int> > & exPairs);
303 
304  virtual void beginFill(LinearObjContainer & loc) const;
305  virtual void endFill(LinearObjContainer & loc) const;
306 
307  Teuchos::RCP<const panzer::BlockedDOFManager> getGlobalIndexer() const
308  { return blockedDOFManager_; }
309 
311  Teuchos::RCP<const panzer::GlobalIndexer> getDomainGlobalIndexer() const
312  { return blockProvider_; }
313 
315  Teuchos::RCP<const panzer::GlobalIndexer> getRangeGlobalIndexer() const
316  { return blockProvider_; }
317 
318 protected:
319 /*************** Generic methods/members *******************/
320 
321  // Get the global indexer associated with a particular block
322  Teuchos::RCP<const GlobalIndexer> getGlobalIndexer(int i) const;
323 
325  void makeRoomForBlocks(std::size_t blockCnt);
326 
327  Teuchos::RCP<const GlobalIndexer> blockProvider_;
328  Teuchos::RCP<const BlockedDOFManager> blockedDOFManager_;
329  std::vector<Teuchos::RCP<const GlobalIndexer> > gidProviders_;
330 
331  // which block entries are ignored
332  std::unordered_set<std::pair<int,int>,panzer::pair_hash> excludedPairs_;
333 
334 /*************** Thyra based methods/members *******************/
335 
336  void ghostToGlobalThyraVector(const Teuchos::RCP<const Thyra::VectorBase<ScalarT> > & in,
337  const Teuchos::RCP<Thyra::VectorBase<ScalarT> > & out) const;
339  void globalToGhostThyraVector(const Teuchos::RCP<const Thyra::VectorBase<ScalarT> > & in,
340  const Teuchos::RCP<Thyra::VectorBase<ScalarT> > & out) const;
341 
342  mutable Teuchos::RCP<Thyra::ProductVectorSpaceBase<ScalarT> > rangeSpace_;
343  mutable Teuchos::RCP<Thyra::ProductVectorSpaceBase<ScalarT> > domainSpace_;
344 
345  mutable Teuchos::RCP<Thyra::ProductVectorSpaceBase<ScalarT> > ghostedRangeSpace_;
346  mutable Teuchos::RCP<Thyra::ProductVectorSpaceBase<ScalarT> > ghostedDomainSpace_;
347 
348 /*************** Tpetra based methods/members *******************/
349 
350  void adjustForDirichletConditions(const VectorType & local_bcs,
351  const VectorType & global_bcs,
352  const Teuchos::Ptr<VectorType> & f,
353  const Teuchos::Ptr<CrsMatrixType> & A,
354  bool zeroVectorRows) const;
355 
356  void ghostToGlobalTpetraVector(int i,const VectorType & in,VectorType & out) const;
357  void ghostToGlobalTpetraMatrix(int blockRow,const CrsMatrixType & in,CrsMatrixType & out) const;
358  void globalToGhostTpetraVector(int i,const VectorType & in,VectorType & out) const;
359 
360  // get the map from the matrix
361  virtual Teuchos::RCP<const MapType> buildTpetraMap(int i) const;
362  virtual Teuchos::RCP<const MapType> buildTpetraGhostedMap(int i) const;
363 
364  // get the graph of the crs matrix
365  virtual Teuchos::RCP<const CrsGraphType> buildTpetraGraph(int i,int j) const;
366  virtual Teuchos::RCP<const CrsGraphType> buildTpetraGhostedGraph(int i,int j) const;
367 
368  // storage for Tpetra graphs and maps
369  Teuchos::RCP<const Teuchos::MpiComm<int> > comm_;
370  mutable std::vector<Teuchos::RCP<const MapType> > maps_;
371  mutable std::vector<Teuchos::RCP<const MapType> > ghostedMaps_;
372  mutable std::unordered_map<std::pair<int,int>,Teuchos::RCP<const CrsGraphType>,panzer::pair_hash> graphs_ ;
373  mutable std::unordered_map<std::pair<int,int>,Teuchos::RCP<const CrsGraphType>,panzer::pair_hash> ghostedGraphs_;
374 
375  mutable std::vector<Teuchos::RCP<const ImportType> > importers_;
376  mutable std::vector<Teuchos::RCP<const ExportType> > exporters_;
377 };
378 
379 }
380 
381 #endif
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< panzer::CloneableEvaluator > buildScatter() const
Use preconstructed scatter evaluators.
Teuchos::RCP< panzer::CloneableEvaluator > buildGatherDomain() const
Use preconstructed gather evaluators.
Tpetra::Operator< ScalarT, LocalOrdinalT, GlobalOrdinalT, NodeT > OperatorType
Teuchos::RCP< Thyra::VectorBase< ScalarT > > getThyraRangeVector() const
Get a range vector.
virtual void adjustForDirichletConditions(const LinearObjContainer &localBCRows, const LinearObjContainer &globalBCRows, LinearObjContainer &ghostedObjs, bool zeroVectorRows=false, bool adjustX=false) const
virtual void applyDirichletBCs(const LinearObjContainer &counter, LinearObjContainer &result) const
void ghostToGlobalThyraVector(const Teuchos::RCP< const Thyra::VectorBase< ScalarT > > &in, const Teuchos::RCP< Thyra::VectorBase< ScalarT > > &out) const
std::vector< Teuchos::RCP< const GlobalIndexer > > gidProviders_
void initializeGhostedContainer(int, LinearObjContainer &loc) const
Teuchos::RCP< Thyra::VectorBase< ScalarT > > getThyraDomainVector() const
Get a domain vector.
Teuchos::RCP< const panzer::GlobalIndexer > getDomainGlobalIndexer() const
Get the domain unique global indexer this factory was created with.
Teuchos::RCP< const Teuchos::MpiComm< int > > comm_
std::vector< Teuchos::RCP< const MapType > > ghostedMaps_
void initializeContainer(int, LinearObjContainer &loc) const
Teuchos::RCP< const Thyra::VectorSpaceBase< ScalarT > > getGhostedThyraDomainSpace() const
Get the domain vector space (x and dxdt)
Teuchos::RCP< const BlockedDOFManager > blockedDOFManager_
virtual Teuchos::RCP< const CrsGraphType > getGhostedGraph(int i, int j) const
get the ghosted graph of the crs matrix
Teuchos::RCP< panzer::CloneableEvaluator > buildScatterDirichlet() const
Use preconstructed dirichlet scatter evaluators.
virtual Teuchos::RCP< const MapType > getMap(int i) const
get the map from the matrix
virtual Teuchos::RCP< LinearObjContainer > buildPrimitiveLinearObjContainer() const
virtual void ghostToGlobalContainer(const LinearObjContainer &ghostContainer, LinearObjContainer &container, int) const
virtual void globalToGhostContainer(const LinearObjContainer &container, LinearObjContainer &ghostContainer, int) const
std::vector< Teuchos::RCP< const ExportType > > exporters_
virtual Teuchos::RCP< const MapType > buildTpetraGhostedMap(int i) const
Teuchos::RCP< const panzer::BlockedDOFManager > getGlobalIndexer() const
Teuchos::RCP< const panzer::GlobalIndexer > getRangeGlobalIndexer() const
Get the range unique global indexer this factory was created with.
virtual Teuchos::RCP< const MapType > buildTpetraMap(int i) const
virtual Teuchos::RCP< const CrsGraphType > buildTpetraGraph(int i, int j) const
Teuchos::RCP< VectorType > getGhostedTpetraRangeVector(int i) const
Teuchos::RCP< const Thyra::VectorSpaceBase< ScalarT > > getThyraDomainSpace() const
Get the domain vector space (x and dxdt)
Teuchos::RCP< panzer::CloneableEvaluator > buildGatherOrientation() const
Use preconstructed gather evaluators.
void makeRoomForBlocks(std::size_t blockCnt)
Allocate the space in the std::vector objects so we can fill with appropriate Tpetra data.
Teuchos::RCP< Thyra::VectorBase< ScalarT > > getGhostedThyraRangeVector() const
Get a range vector.
virtual Teuchos::RCP< ReadOnlyVector_GlobalEvaluationData > buildReadOnlyDomainContainer() const
std::unordered_map< std::pair< int, int >, Teuchos::RCP< const CrsGraphType >, panzer::pair_hash > graphs_
Tpetra::CrsGraph< LocalOrdinalT, GlobalOrdinalT, NodeT > CrsGraphType
Tpetra::Export< LocalOrdinalT, GlobalOrdinalT, NodeT > ExportType
virtual Teuchos::RCP< const CrsGraphType > buildTpetraGhostedGraph(int i, int j) const
virtual Teuchos::RCP< const MapType > getGhostedMap(int i) const
get the ghosted map from the matrix
Tpetra::Vector< ScalarT, LocalOrdinalT, GlobalOrdinalT, NodeT > VectorType
Teuchos::RCP< VectorType > getGhostedTpetraDomainVector(int i) const
Teuchos::RCP< Thyra::ProductVectorSpaceBase< ScalarT > > ghostedDomainSpace_
Teuchos::RCP< const Thyra::VectorSpaceBase< ScalarT > > getGhostedThyraRangeSpace() const
Get the range vector space (f)
virtual Teuchos::RCP< WriteVector_GlobalEvaluationData > buildWriteDomainContainer() const
std::unordered_map< std::pair< int, int >, Teuchos::RCP< const CrsGraphType >, panzer::pair_hash > ghostedGraphs_
virtual void writeVector(const std::string &, const LinearObjContainer &, int) const
Teuchos::RCP< CrsMatrixType > getTpetraMatrix(int i, int j) const
virtual Teuchos::RCP< LinearObjContainer > buildGhostedLinearObjContainer() const
std::vector< Teuchos::RCP< const MapType > > maps_
void globalToGhostThyraVector(const Teuchos::RCP< const Thyra::VectorBase< ScalarT > > &in, const Teuchos::RCP< Thyra::VectorBase< ScalarT > > &out) const
virtual Teuchos::RCP< LinearObjContainer > buildLinearObjContainer() const
void globalToGhostTpetraVector(int i, const VectorType &in, VectorType &out) const
virtual void readVector(const std::string &, LinearObjContainer &, int) const
Teuchos::RCP< panzer::CloneableEvaluator > buildGatherTangent() const
Use preconstructed gather evaluators.
BlockedTpetraLinearObjFactory(const Teuchos::RCP< const Teuchos::MpiComm< int > > &comm, const Teuchos::RCP< const BlockedDOFManager > &gidProvider)
void addExcludedPair(int rowBlock, int colBlock)
exclude a block pair from the matrix
std::vector< Teuchos::RCP< const ImportType > > importers_
Teuchos::RCP< panzer::CloneableEvaluator > buildGather() const
Use preconstructed gather evaluators.
void ghostToGlobalTpetraVector(int i, const VectorType &in, VectorType &out) const
void ghostToGlobalThyraMatrix(const Thyra::LinearOpBase< ScalarT > &in, Thyra::LinearOpBase< ScalarT > &out) const
void ghostToGlobalTpetraMatrix(int blockRow, const CrsMatrixType &in, CrsMatrixType &out) const
std::unordered_set< std::pair< int, int >, panzer::pair_hash > excludedPairs_
Tpetra::CrsMatrix< ScalarT, LocalOrdinalT, GlobalOrdinalT, NodeT > CrsMatrixType
Teuchos::RCP< Thyra::ProductVectorSpaceBase< ScalarT > > domainSpace_
Tpetra::Map< LocalOrdinalT, GlobalOrdinalT, NodeT > MapType
Teuchos::RCP< const Thyra::VectorSpaceBase< ScalarT > > getThyraRangeSpace() const
Get the range vector space (f)
Thyra::TpetraLinearOp< ScalarT, LocalOrdinalT, GlobalOrdinalT, NodeT > ThyraLinearOp
Teuchos::RCP< CrsMatrixType > getGhostedTpetraMatrix(int i, int j) const
Teuchos::RCP< Thyra::ProductVectorSpaceBase< ScalarT > > ghostedRangeSpace_
virtual Teuchos::RCP< const ImportType > getGhostedImport(int i) const
get importer for converting an overalapped object to a "normal" object
Teuchos::RCP< Thyra::ProductVectorSpaceBase< ScalarT > > rangeSpace_
Tpetra::Import< LocalOrdinalT, GlobalOrdinalT, NodeT > ImportType
BlockedTpetraLinearObjContainer< ScalarT, LocalOrdinalT, GlobalOrdinalT, NodeT > BTLOC
virtual Teuchos::RCP< LinearObjContainer > buildPrimitiveGhostedLinearObjContainer() const
void addExcludedPairs(const std::vector< std::pair< int, int > > &exPairs)
exclude a vector of pairs from the matrix
virtual Teuchos::RCP< const ExportType > getGhostedExport(int j) const
get exporter for converting an overalapped object to a "normal" object
Thyra::TpetraVector< ScalarT, LocalOrdinalT, GlobalOrdinalT, NodeT > ThyraVector
Teuchos::RCP< Thyra::LinearOpBase< ScalarT > > getThyraMatrix() const
Get a Thyra operator.
Teuchos::RCP< Thyra::VectorBase< ScalarT > > getGhostedThyraDomainVector() const
Get a domain vector.
virtual Teuchos::RCP< const CrsGraphType > getGraph(int i, int j) const
get the graph of the crs matrix
Teuchos::RCP< Thyra::BlockedLinearOpBase< ScalarT > > getGhostedThyraMatrix() const
Get a Thyra operator.
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...
Pushes residual values into the residual vector for a Newton-based solve.
Pushes residual values into the residual vector for a Newton-based solve.
std::vector< Teuchos::RCP< const GlobalIndexer > > nc2c_vector(const std::vector< Teuchos::RCP< GlobalIndexer > > &ugis)