43 #ifndef __Panzer_TpetraLinearObjFactory_impl_hpp__ 44 #define __Panzer_TpetraLinearObjFactory_impl_hpp__ 53 #include "Thyra_TpetraVectorSpace.hpp" 54 #include "Thyra_TpetraLinearOp.hpp" 57 #include "Tpetra_MultiVector.hpp" 58 #include "Tpetra_Vector.hpp" 59 #include "Tpetra_CrsMatrix.hpp" 69 template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
73 : comm_(comm), gidProvider_(gidProvider)
82 template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
87 : comm_(comm), gidProvider_(gidProvider), colGidProvider_(colGidProvider)
96 template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
104 template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
105 Teuchos::RCP<LinearObjContainer>
109 Teuchos::RCP<ContainerType> container = Teuchos::rcp(
new ContainerType(getColMap(),getMap()));
114 template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
115 Teuchos::RCP<LinearObjContainer>
119 Teuchos::RCP<ContainerType> container = Teuchos::rcp(
new ContainerType(getGhostedMap(),getGhostedMap()));
124 template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
130 using Teuchos::is_null;
138 if ( !is_null(t_in.
get_x()) && !is_null(t_out.get_x()) && ((mem & LOC::X)==LOC::X))
139 globalToGhostTpetraVector(*t_in.
get_x(),*t_out.get_x(),
true);
141 if ( !is_null(t_in.
get_dxdt()) && !is_null(t_out.get_dxdt()) && ((mem & LOC::DxDt)==LOC::DxDt))
142 globalToGhostTpetraVector(*t_in.
get_dxdt(),*t_out.get_dxdt(),
true);
144 if ( !is_null(t_in.
get_f()) && !is_null(t_out.get_f()) && ((mem & LOC::F)==LOC::F))
145 globalToGhostTpetraVector(*t_in.
get_f(),*t_out.get_f(),
false);
148 template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
154 using Teuchos::is_null;
163 if ( !is_null(t_in.
get_x()) && !is_null(t_out.get_x()) && ((mem & LOC::X)==LOC::X))
164 ghostToGlobalTpetraVector(*t_in.
get_x(),*t_out.get_x(),
true);
166 if ( !is_null(t_in.
get_f()) && !is_null(t_out.get_f()) && ((mem & LOC::F)==LOC::F))
167 ghostToGlobalTpetraVector(*t_in.
get_f(),*t_out.get_f(),
false);
169 if ( !is_null(t_in.
get_A()) && !is_null(t_out.get_A()) && ((mem & LOC::Mat)==LOC::Mat))
170 ghostToGlobalTpetraMatrix(*t_in.
get_A(),*t_out.get_A());
173 template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
177 Tpetra::Vector<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> & out,
bool col)
const 182 RCP<ExportType> exporter = col ? getGhostedColExport() : getGhostedExport();
184 out.doExport(in,*exporter,Tpetra::ADD);
187 template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
191 Tpetra::CrsMatrix<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> & out)
const 196 RCP<ExportType> exporter = getGhostedExport();
199 out.setAllToScalar(0.0);
200 out.doExport(in,*exporter,Tpetra::ADD);
201 out.fillComplete(out.getDomainMap(),out.getRangeMap());
204 template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
208 Tpetra::Vector<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> & out,
bool col)
const 213 RCP<ImportType> importer = col ? getGhostedColImport() : getGhostedImport();
215 out.doImport(in,*importer,Tpetra::INSERT);
218 template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
224 bool zeroVectorRows,
bool adjustX)
const 226 typedef Teuchos::ArrayRCP<const double>::Ordinal Ordinal;
232 TEUCHOS_ASSERT(!Teuchos::is_null(t_localBCRows.
get_f()));
233 TEUCHOS_ASSERT(!Teuchos::is_null(t_globalBCRows.get_f()));
236 Teuchos::RCP<CrsMatrixType> A = t_ghosted.get_A();
237 Teuchos::RCP<VectorType> f = t_ghosted.get_f();
238 if(adjustX) f = t_ghosted.get_x();
239 Teuchos::ArrayRCP<double> f_array = f!=Teuchos::null ? f->get1dViewNonConst() : Teuchos::null;
242 const VectorType & global_bcs = *(t_globalBCRows.get_f());
243 Teuchos::ArrayRCP<const double> local_bcs_array = local_bcs.get1dView();
244 Teuchos::ArrayRCP<const double> global_bcs_array = global_bcs.get1dView();
246 TEUCHOS_ASSERT(local_bcs_array.size()==global_bcs_array.size());
247 for(Ordinal i=0;i<local_bcs_array.size();i++) {
248 if(global_bcs_array[i]==0.0)
251 if(local_bcs_array[i]==0.0 || zeroVectorRows) {
255 if(!Teuchos::is_null(f))
257 if(!Teuchos::is_null(A)) {
258 std::size_t numEntries = 0;
259 std::size_t sz = A->getNumEntriesInLocalRow(i);
260 Teuchos::Array<LocalOrdinalT> indices(sz);
261 Teuchos::Array<double> values(sz);
263 A->getLocalRowCopy(i,indices,values,numEntries);
265 for(std::size_t c=0;c<numEntries;c++)
268 A->replaceLocalValues(i,indices,values);
274 double scaleFactor = global_bcs_array[i];
277 if(!Teuchos::is_null(f))
278 f_array[i] /= scaleFactor;
279 if(!Teuchos::is_null(A)) {
280 std::size_t numEntries = 0;
281 std::size_t sz = A->getNumEntriesInLocalRow(i);
282 Teuchos::Array<LocalOrdinalT> indices(sz);
283 Teuchos::Array<double> values(sz);
285 A->getLocalRowCopy(i,indices,values,numEntries);
287 for(std::size_t c=0;c<numEntries;c++)
288 values[c] /= scaleFactor;
290 A->replaceLocalValues(i,indices,values);
296 template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
302 TEUCHOS_ASSERT(
false);
310 template<
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
311 typename GlobalOrdinalT,
typename NodeT>
312 Teuchos::RCP<ReadOnlyVector_GlobalEvaluationData>
318 LocalOrdinalT, GlobalOrdinalT, NodeT>;
319 auto ged = rcp(
new TVROGED);
320 ged->initialize(getGhostedImport(), getGhostedColMap(), getColMap());
329 template<
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
330 typename GlobalOrdinalT,
typename NodeT>
331 Teuchos::RCP<WriteVector_GlobalEvaluationData>
335 using std::logic_error;
338 auto ged = rcp(
new EVWGED);
339 TEUCHOS_TEST_FOR_EXCEPTION(
true, logic_error,
"NOT IMPLEMENTED YET")
343 template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
351 template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
352 Teuchos::RCP<const Thyra::VectorSpaceBase<ScalarT> >
356 if(domainSpace_==Teuchos::null) {
358 domainSpace_ = Thyra::tpetraVectorSpace<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT>(getMap());
360 domainSpace_ = Thyra::tpetraVectorSpace<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT>(getColMap());
367 template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
368 Teuchos::RCP<const Thyra::VectorSpaceBase<ScalarT> >
372 if(rangeSpace_==Teuchos::null)
373 rangeSpace_ = Thyra::tpetraVectorSpace<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT>(getMap());
379 template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
380 Teuchos::RCP<Thyra::LinearOpBase<ScalarT> >
384 return Thyra::tpetraLinearOp<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT>(getThyraRangeSpace(),getThyraDomainSpace(),getTpetraMatrix());
390 template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
396 initializeContainer(mem,tloc);
399 template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
408 if((mem & LOC::X) == LOC::X)
409 loc.
set_x(getTpetraColVector());
411 if((mem & LOC::DxDt) == LOC::DxDt)
414 if((mem & LOC::F) == LOC::F)
415 loc.
set_f(getTpetraVector());
417 if((mem & LOC::Mat) == LOC::Mat)
418 loc.
set_A(getTpetraMatrix());
421 template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
427 initializeGhostedContainer(mem,tloc);
430 template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
439 if((mem & LOC::X) == LOC::X)
440 loc.
set_x(getGhostedTpetraColVector());
442 if((mem & LOC::DxDt) == LOC::DxDt)
443 loc.
set_dxdt(getGhostedTpetraColVector());
445 if((mem & LOC::F) == LOC::F) {
446 loc.
set_f(getGhostedTpetraVector());
450 if((mem & LOC::Mat) == LOC::Mat) {
451 loc.
set_A(getGhostedTpetraMatrix());
460 template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
461 const Teuchos::RCP<Tpetra::Map<LocalOrdinalT,GlobalOrdinalT,NodeT> >
465 if(map_==Teuchos::null) map_ = buildMap();
471 template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
472 const Teuchos::RCP<Tpetra::Map<LocalOrdinalT,GlobalOrdinalT,NodeT> >
476 if(cMap_==Teuchos::null) cMap_ = buildColMap();
481 template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
482 const Teuchos::RCP<Tpetra::Map<LocalOrdinalT,GlobalOrdinalT,NodeT> >
486 if(ghostedMap_==Teuchos::null) ghostedMap_ = buildGhostedMap();
491 template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
492 const Teuchos::RCP<Tpetra::Map<LocalOrdinalT,GlobalOrdinalT,NodeT> >
496 if(cGhostedMap_==Teuchos::null) cGhostedMap_ = buildGhostedColMap();
502 template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
503 const Teuchos::RCP<Tpetra::CrsGraph<LocalOrdinalT,GlobalOrdinalT,NodeT> >
507 if(graph_==Teuchos::null) graph_ = buildGraph();
512 template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
513 const Teuchos::RCP<Tpetra::CrsGraph<LocalOrdinalT,GlobalOrdinalT,NodeT> >
517 if(ghostedGraph_==Teuchos::null) ghostedGraph_ = buildGhostedGraph();
519 return ghostedGraph_;
522 template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
523 const Teuchos::RCP<Tpetra::Import<LocalOrdinalT,GlobalOrdinalT,NodeT> >
527 if(ghostedImporter_==Teuchos::null)
528 ghostedImporter_ = Teuchos::rcp(
new ImportType(getMap(),getGhostedMap()));
530 return ghostedImporter_;
533 template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
534 const Teuchos::RCP<Tpetra::Import<LocalOrdinalT,GlobalOrdinalT,NodeT> >
539 ghostedColImporter_ = getGhostedImport();
541 if(ghostedColImporter_==Teuchos::null)
542 ghostedColImporter_ = Teuchos::rcp(
new ImportType(getColMap(),getGhostedColMap()));
544 return ghostedColImporter_;
547 template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
548 const Teuchos::RCP<Tpetra::Export<LocalOrdinalT,GlobalOrdinalT,NodeT> >
552 if(ghostedExporter_==Teuchos::null)
553 ghostedExporter_ = Teuchos::rcp(
new ExportType(getGhostedMap(),getMap()));
555 return ghostedExporter_;
558 template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
559 const Teuchos::RCP<Tpetra::Export<LocalOrdinalT,GlobalOrdinalT,NodeT> >
564 ghostedColExporter_ = getGhostedExport();
566 if(ghostedColExporter_==Teuchos::null)
567 ghostedColExporter_ = Teuchos::rcp(
new ExportType(getGhostedColMap(),getColMap()));
569 return ghostedColExporter_;
575 template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
576 const Teuchos::RCP<Tpetra::Map<LocalOrdinalT,GlobalOrdinalT,NodeT> >
580 std::vector<GlobalOrdinalT> indices;
583 gidProvider_->getOwnedIndices(indices);
585 return Teuchos::rcp(
new MapType(Teuchos::OrdinalTraits<GlobalOrdinalT>::invalid(),indices,0,comm_));
588 template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
589 const Teuchos::RCP<Tpetra::Map<LocalOrdinalT,GlobalOrdinalT,NodeT> >
596 std::vector<GlobalOrdinalT> indices;
599 colGidProvider_->getOwnedIndices(indices);
601 return Teuchos::rcp(
new MapType(Teuchos::OrdinalTraits<GlobalOrdinalT>::invalid(),indices,0,comm_));
605 template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
606 const Teuchos::RCP<Tpetra::Map<LocalOrdinalT,GlobalOrdinalT,NodeT> >
610 std::vector<GlobalOrdinalT> indices;
613 gidProvider_->getOwnedAndGhostedIndices(indices);
615 return Teuchos::rcp(
new MapType(Teuchos::OrdinalTraits<GlobalOrdinalT>::invalid(),indices,0,comm_));
619 template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
620 const Teuchos::RCP<Tpetra::Map<LocalOrdinalT,GlobalOrdinalT,NodeT> >
625 return buildGhostedMap();
627 std::vector<GlobalOrdinalT> indices;
630 colGidProvider_->getOwnedAndGhostedIndices(indices);
632 return Teuchos::rcp(
new MapType(Teuchos::OrdinalTraits<GlobalOrdinalT>::invalid(),indices,0,comm_));
636 template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
637 const Teuchos::RCP<Tpetra::CrsGraph<LocalOrdinalT,GlobalOrdinalT,NodeT> >
646 RCP<MapType> rMap = getMap();
647 RCP<MapType> cMap = getColMap();
648 RCP<CrsGraphType> graph = rcp(
new CrsGraphType(rMap,0));
649 RCP<CrsGraphType> oGraph = getGhostedGraph();
652 RCP<ExportType> exporter = getGhostedExport();
653 graph->doExport( *oGraph, *exporter, Tpetra::INSERT );
654 graph->fillComplete(cMap,rMap);
659 template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
660 const Teuchos::RCP<Tpetra::CrsGraph<LocalOrdinalT,GlobalOrdinalT,NodeT> >
665 Teuchos::RCP<MapType> rMap = getGhostedMap();
666 Teuchos::RCP<MapType> cMap = getGhostedColMap();
667 Teuchos::RCP<CrsGraphType> graph = Teuchos::rcp(
new CrsGraphType(rMap,cMap,0));
669 std::vector<std::string> elementBlockIds;
670 gidProvider_->getElementBlockIds(elementBlockIds);
672 const Teuchos::RCP<const UniqueGlobalIndexer<LocalOrdinalT,GlobalOrdinalT> >
673 colGidProvider = hasColProvider_ ? colGidProvider_ : gidProvider_;
674 const Teuchos::RCP<const ConnManagerBase<LocalOrdinalT> > conn_mgr = colGidProvider->getConnManagerBase();
675 const bool han = conn_mgr.is_null() ? false : conn_mgr->hasAssociatedNeighbors();
678 std::vector<std::string>::const_iterator blockItr;
679 for(blockItr=elementBlockIds.begin();blockItr!=elementBlockIds.end();++blockItr) {
680 std::string blockId = *blockItr;
683 const std::vector<LocalOrdinalT> & elements = gidProvider_->getElementBlock(blockId);
686 std::vector<GlobalOrdinalT> gids;
687 std::vector<GlobalOrdinalT> col_gids;
690 for(std::size_t i=0;i<elements.size();i++) {
691 gidProvider_->getElementGIDs(elements[i],gids);
693 colGidProvider->getElementGIDs(elements[i],col_gids);
695 const std::vector<LocalOrdinalT>& aes = conn_mgr->getAssociatedNeighbors(elements[i]);
696 for (
typename std::vector<LocalOrdinalT>::const_iterator eit = aes.begin();
697 eit != aes.end(); ++eit) {
698 std::vector<GlobalOrdinalT> other_col_gids;
699 colGidProvider->getElementGIDs(*eit, other_col_gids);
700 col_gids.insert(col_gids.end(), other_col_gids.begin(), other_col_gids.end());
704 for(std::size_t j=0;j<gids.size();j++)
705 graph->insertGlobalIndices(gids[j],col_gids);
710 graph->fillComplete(cMap,rMap);
715 template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
716 Teuchos::RCP<Tpetra::Vector<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> >
720 Teuchos::RCP<const MapType> tMap = getGhostedMap();
724 template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
725 Teuchos::RCP<Tpetra::Vector<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> >
729 Teuchos::RCP<const MapType> tMap = getGhostedColMap();
733 template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
734 Teuchos::RCP<Tpetra::Vector<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> >
738 Teuchos::RCP<const MapType> tMap = getMap();
742 template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
743 Teuchos::RCP<Tpetra::Vector<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> >
747 Teuchos::RCP<const MapType> tMap = getColMap();
751 template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
752 Teuchos::RCP<Tpetra::CrsMatrix<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> >
756 Teuchos::RCP<CrsGraphType> tGraph = getGraph();
757 Teuchos::RCP<CrsMatrixType> tMat = Teuchos::rcp(
new CrsMatrixType(tGraph));
758 tMat->fillComplete(tMat->getDomainMap(),tMat->getRangeMap());
763 template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
764 Teuchos::RCP<Tpetra::CrsMatrix<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> >
768 Teuchos::RCP<CrsGraphType> tGraph = getGhostedGraph();
769 Teuchos::RCP<CrsMatrixType> tMat = Teuchos::rcp(
new CrsMatrixType(tGraph));
770 tMat->fillComplete(tMat->getDomainMap(),tMat->getRangeMap());
775 template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
776 const Teuchos::RCP<const Teuchos::Comm<int> >
783 template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
788 Teuchos::RCP<CrsMatrixType> A = tloc.
get_A();
793 template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
798 Teuchos::RCP<CrsMatrixType> A = tloc.
get_A();
800 A->fillComplete(A->getDomainMap(),A->getRangeMap());
805 #endif // __Panzer_TpetraLinearObjFactory_impl_hpp__ virtual const Teuchos::RCP< const Teuchos::Comm< int > > getTeuchosComm() const
get exporter for converting an overalapped object to a "normal" object
virtual void applyDirichletBCs(const LinearObjContainer &counter, LinearObjContainer &result) const
void globalToGhostTpetraVector(const Tpetra::Vector< ScalarT, LocalOrdinalT, GlobalOrdinalT, NodeT > &in, Tpetra::Vector< ScalarT, LocalOrdinalT, GlobalOrdinalT, NodeT > &out, bool col) const
virtual Teuchos::RCP< WriteVector_GlobalEvaluationData > buildWriteDomainContainer() const
void initializeContainer(int, LinearObjContainer &loc) const
virtual Teuchos::RCP< const Thyra::VectorSpaceBase< ScalarT > > getThyraRangeSpace() const
Get the range space.
virtual Teuchos::RCP< ReadOnlyVector_GlobalEvaluationData > buildReadOnlyDomainContainer() const
void ghostToGlobalTpetraMatrix(const Tpetra::CrsMatrix< ScalarT, LocalOrdinalT, GlobalOrdinalT, NodeT > &in, Tpetra::CrsMatrix< ScalarT, LocalOrdinalT, GlobalOrdinalT, NodeT > &out) const
virtual const Teuchos::RCP< Tpetra::Map< LocalOrdinalT, GlobalOrdinalT, NodeT > > getGhostedMap() const
get the ghosted map from the matrix
void clear()
Wipe out stored data.
Tpetra::Map< LocalOrdinalT, GlobalOrdinalT, NodeT > MapType
virtual void beginFill(LinearObjContainer &loc) const
virtual const Teuchos::RCP< Tpetra::Map< LocalOrdinalT, GlobalOrdinalT, NodeT > > getMap() const
get the map from the matrix
virtual const Teuchos::RCP< Tpetra::Map< LocalOrdinalT, GlobalOrdinalT, NodeT > > buildGhostedMap() const
virtual const Teuchos::RCP< Tpetra::CrsGraph< LocalOrdinalT, GlobalOrdinalT, NodeT > > getGhostedGraph() const
get the ghosted graph of the crs matrix
Tpetra::Import< LocalOrdinalT, GlobalOrdinalT, NodeT > ImportType
virtual const Teuchos::RCP< Tpetra::CrsGraph< LocalOrdinalT, GlobalOrdinalT, NodeT > > buildGhostedGraph() const
void set_x(const Teuchos::RCP< VectorType > &in)
virtual const Teuchos::RCP< Tpetra::Export< LocalOrdinalT, GlobalOrdinalT, NodeT > > getGhostedColExport() const
Tpetra::Export< LocalOrdinalT, GlobalOrdinalT, NodeT > ExportType
Tpetra::CrsMatrix< ScalarT, LocalOrdinalT, GlobalOrdinalT, NodeT > CrsMatrixType
virtual const Teuchos::RCP< Tpetra::Import< LocalOrdinalT, GlobalOrdinalT, NodeT > > getGhostedColImport() const
void setRequiresDirichletAdjustment(bool b)
virtual void globalToGhostContainer(const LinearObjContainer &container, LinearObjContainer &ghostContainer, int) const
virtual const Teuchos::RCP< Tpetra::Map< LocalOrdinalT, GlobalOrdinalT, NodeT > > buildMap() const
TpetraLinearObjFactory(const Teuchos::RCP< const Teuchos::Comm< int > > &comm, const Teuchos::RCP< const UniqueGlobalIndexer< LocalOrdinalT, GlobalOrdinalT > > &gidProvider)
void ghostToGlobalTpetraVector(const Tpetra::Vector< ScalarT, LocalOrdinalT, GlobalOrdinalT, NodeT > &in, Tpetra::Vector< ScalarT, LocalOrdinalT, GlobalOrdinalT, NodeT > &out, bool col) const
Teuchos::RCP< Tpetra::Vector< ScalarT, LocalOrdinalT, GlobalOrdinalT, NodeT > > getGhostedTpetraColVector() const
virtual const Teuchos::RCP< Tpetra::Import< LocalOrdinalT, GlobalOrdinalT, NodeT > > getGhostedImport() const
get importer for converting an overalapped object to a "normal" object
Teuchos::RCP< const UniqueGlobalIndexer< LocalOrdinalT, GlobalOrdinalT > > colGidProvider_
void set_dxdt(const Teuchos::RCP< VectorType > &in)
virtual ~TpetraLinearObjFactory()
const Teuchos::RCP< CrsMatrixType > get_A() const
This class provides a boundary exchange communication mechanism for vectors.
Teuchos::RCP< Tpetra::CrsMatrix< ScalarT, LocalOrdinalT, GlobalOrdinalT, NodeT > > getTpetraMatrix() const
const Teuchos::RCP< VectorType > get_x() const
Teuchos::RCP< Tpetra::CrsMatrix< ScalarT, LocalOrdinalT, GlobalOrdinalT, NodeT > > getGhostedTpetraMatrix() const
virtual const Teuchos::RCP< Tpetra::Map< LocalOrdinalT, GlobalOrdinalT, NodeT > > buildGhostedColMap() const
virtual const Teuchos::RCP< Tpetra::CrsGraph< LocalOrdinalT, GlobalOrdinalT, NodeT > > buildGraph() const
virtual Teuchos::RCP< LinearObjContainer > buildLinearObjContainer() const
virtual Teuchos::RCP< Thyra::LinearOpBase< ScalarT > > getThyraMatrix() const
Get a matrix operator.
Teuchos::RCP< Tpetra::Vector< ScalarT, LocalOrdinalT, GlobalOrdinalT, NodeT > > getGhostedTpetraVector() const
Teuchos::RCP< Tpetra::Vector< ScalarT, LocalOrdinalT, GlobalOrdinalT, NodeT > > getTpetraVector() const
void set_A(const Teuchos::RCP< CrsMatrixType > &in)
const Teuchos::RCP< VectorType > get_dxdt() const
void set_f(const Teuchos::RCP< VectorType > &in)
virtual const Teuchos::RCP< Tpetra::Map< LocalOrdinalT, GlobalOrdinalT, NodeT > > getGhostedColMap() const
virtual void endFill(LinearObjContainer &loc) const
virtual Teuchos::MpiComm< int > getComm() const
const Teuchos::RCP< VectorType > get_f() const
virtual void ghostToGlobalContainer(const LinearObjContainer &ghostContainer, LinearObjContainer &container, int) const
virtual const Teuchos::RCP< Tpetra::Export< LocalOrdinalT, GlobalOrdinalT, NodeT > > getGhostedExport() const
get exporter for converting an overalapped object to a "normal" object
virtual Teuchos::RCP< const Thyra::VectorSpaceBase< ScalarT > > getThyraDomainSpace() const
Get the domain space.
void buildGatherScatterEvaluators(const BuilderT &builder)
virtual const Teuchos::RCP< Tpetra::CrsGraph< LocalOrdinalT, GlobalOrdinalT, NodeT > > getGraph() const
get the graph of the crs matrix
virtual const Teuchos::RCP< Tpetra::Map< LocalOrdinalT, GlobalOrdinalT, NodeT > > getColMap() const
Tpetra::CrsGraph< LocalOrdinalT, GlobalOrdinalT, NodeT > CrsGraphType
virtual const Teuchos::RCP< Tpetra::Map< LocalOrdinalT, GlobalOrdinalT, NodeT > > buildColMap() const
virtual void adjustForDirichletConditions(const LinearObjContainer &localBCRows, const LinearObjContainer &globalBCRows, LinearObjContainer &ghostedObjs, bool zeroVectorRows=false, bool adjustX=false) const
Tpetra::Vector< ScalarT, LocalOrdinalT, GlobalOrdinalT, NodeT > VectorType
void initializeGhostedContainer(int, LinearObjContainer &loc) const
Teuchos::RCP< Tpetra::Vector< ScalarT, LocalOrdinalT, GlobalOrdinalT, NodeT > > getTpetraColVector() const
virtual Teuchos::RCP< LinearObjContainer > buildGhostedLinearObjContainer() const