43#ifndef __Panzer_TpetraLinearObjFactory_impl_hpp__
44#define __Panzer_TpetraLinearObjFactory_impl_hpp__
48#ifdef PANZER_HAVE_EPETRA_STACK
55#include "Thyra_TpetraVectorSpace.hpp"
56#include "Thyra_TpetraLinearOp.hpp"
59#include "Tpetra_MultiVector.hpp"
60#include "Tpetra_Vector.hpp"
61#include "Tpetra_CrsMatrix.hpp"
71template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
74 const Teuchos::RCP<const GlobalIndexer> & gidProvider)
75 : comm_(comm), gidProvider_(gidProvider)
84template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
87 const Teuchos::RCP<const GlobalIndexer> & gidProvider,
88 const Teuchos::RCP<const GlobalIndexer> & colGidProvider)
89 : comm_(comm), gidProvider_(gidProvider), colGidProvider_(colGidProvider)
98template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
106template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
107Teuchos::RCP<LinearObjContainer>
111 Teuchos::RCP<ContainerType> container = Teuchos::rcp(
new ContainerType(getColMap(),getMap()));
116template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
117Teuchos::RCP<LinearObjContainer>
121 Teuchos::RCP<ContainerType> container = Teuchos::rcp(
new ContainerType(getGhostedMap(),getGhostedMap()));
126template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
132 using Teuchos::is_null;
135 const ContainerType & t_in = Teuchos::dyn_cast<const ContainerType>(in);
136 ContainerType & t_out = Teuchos::dyn_cast<ContainerType>(out);
140 if ( !is_null(t_in.
get_x()) && !is_null(t_out.
get_x()) && ((mem & LOC::X)==LOC::X))
141 globalToGhostTpetraVector(*t_in.
get_x(),*t_out.
get_x(),
true);
143 if ( !is_null(t_in.
get_dxdt()) && !is_null(t_out.
get_dxdt()) && ((mem & LOC::DxDt)==LOC::DxDt))
146 if ( !is_null(t_in.
get_f()) && !is_null(t_out.
get_f()) && ((mem & LOC::F)==LOC::F))
147 globalToGhostTpetraVector(*t_in.
get_f(),*t_out.
get_f(),
false);
150template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
156 using Teuchos::is_null;
160 const ContainerType & t_in = Teuchos::dyn_cast<const ContainerType>(in);
161 ContainerType & t_out = Teuchos::dyn_cast<ContainerType>(out);
165 if ( !is_null(t_in.
get_x()) && !is_null(t_out.
get_x()) && ((mem & LOC::X)==LOC::X))
166 ghostToGlobalTpetraVector(*t_in.
get_x(),*t_out.
get_x(),
true);
168 if ( !is_null(t_in.
get_f()) && !is_null(t_out.
get_f()) && ((mem & LOC::F)==LOC::F))
169 ghostToGlobalTpetraVector(*t_in.
get_f(),*t_out.
get_f(),
false);
171 if ( !is_null(t_in.
get_A()) && !is_null(t_out.
get_A()) && ((mem & LOC::Mat)==LOC::Mat))
172 ghostToGlobalTpetraMatrix(*t_in.
get_A(),*t_out.
get_A());
175template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
179 Tpetra::Vector<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> & out,
bool col)
const
184 RCP<ExportType> exporter = col ? getGhostedColExport() : getGhostedExport();
186 out.doExport(in,*exporter,Tpetra::ADD);
189template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
193 Tpetra::CrsMatrix<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> & out)
const
198 RCP<ExportType> exporter = getGhostedExport();
201 out.setAllToScalar(0.0);
202 out.doExport(in,*exporter,Tpetra::ADD);
203 out.fillComplete(out.getDomainMap(),out.getRangeMap());
206template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
210 Tpetra::Vector<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> & out,
bool col)
const
215 RCP<ImportType> importer = col ? getGhostedColImport() : getGhostedImport();
217 out.doImport(in,*importer,Tpetra::INSERT);
220template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
226 bool zeroVectorRows,
bool adjustX)
const
228 typedef Teuchos::ArrayRCP<const double>::Ordinal Ordinal;
230 const ContainerType & t_localBCRows = Teuchos::dyn_cast<const ContainerType>(localBCRows);
231 const ContainerType & t_globalBCRows = Teuchos::dyn_cast<const ContainerType>(globalBCRows);
232 ContainerType & t_ghosted = Teuchos::dyn_cast<ContainerType>(ghostedObjs);
234 TEUCHOS_ASSERT(!Teuchos::is_null(t_localBCRows.
get_f()));
235 TEUCHOS_ASSERT(!Teuchos::is_null(t_globalBCRows.
get_f()));
238 Teuchos::RCP<CrsMatrixType> A = t_ghosted.
get_A();
239 Teuchos::RCP<VectorType> f = t_ghosted.
get_f();
240 if(adjustX) f = t_ghosted.
get_x();
241 Teuchos::ArrayRCP<double> f_array = f!=Teuchos::null ? f->get1dViewNonConst() : Teuchos::null;
245 Teuchos::ArrayRCP<const double> local_bcs_array = local_bcs.get1dView();
246 Teuchos::ArrayRCP<const double> global_bcs_array = global_bcs.get1dView();
248 TEUCHOS_ASSERT(local_bcs_array.size()==global_bcs_array.size());
249 for(Ordinal i=0;i<local_bcs_array.size();i++) {
250 if(global_bcs_array[i]==0.0)
253 if(local_bcs_array[i]==0.0 || zeroVectorRows) {
257 if(!Teuchos::is_null(f))
259 if(!Teuchos::is_null(A)) {
260 std::size_t numEntries = 0;
261 std::size_t sz = A->getNumEntriesInLocalRow(i);
262 typename CrsMatrixType::nonconst_local_inds_host_view_type indices(
"indices", sz);
263 typename CrsMatrixType::nonconst_values_host_view_type values(
"values", sz);
265 A->getLocalRowCopy(i,indices,values,numEntries);
267 for(std::size_t c=0;c<numEntries;c++)
270 A->replaceLocalValues(i,indices,values);
276 double scaleFactor = global_bcs_array[i];
279 if(!Teuchos::is_null(f))
280 f_array[i] /= scaleFactor;
281 if(!Teuchos::is_null(A)) {
282 std::size_t numEntries = 0;
283 std::size_t sz = A->getNumEntriesInLocalRow(i);
284 typename CrsMatrixType::nonconst_local_inds_host_view_type indices(
"indices", sz);
285 typename CrsMatrixType::nonconst_values_host_view_type values(
"values", sz);
287 A->getLocalRowCopy(i,indices,values,numEntries);
289 for(std::size_t c=0;c<numEntries;c++)
290 values(c) /= scaleFactor;
292 A->replaceLocalValues(i,indices,values);
298template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
304 TEUCHOS_ASSERT(
false);
312template<
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
313 typename GlobalOrdinalT,
typename NodeT>
314Teuchos::RCP<ReadOnlyVector_GlobalEvaluationData>
320 LocalOrdinalT, GlobalOrdinalT, NodeT>;
321 auto ged = rcp(
new TVROGED);
322 ged->initialize(getGhostedImport(), getGhostedColMap(), getColMap());
326#ifdef PANZER_HAVE_EPETRA_STACK
332template<
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
333 typename GlobalOrdinalT,
typename NodeT>
334Teuchos::RCP<WriteVector_GlobalEvaluationData>
338 using std::logic_error;
341 auto ged = rcp(
new EVWGED);
342 TEUCHOS_TEST_FOR_EXCEPTION(
true, logic_error,
"NOT IMPLEMENTED YET")
347template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
351 return *Teuchos::rcp_dynamic_cast<const Teuchos::MpiComm<int> >(getTeuchosComm());
355template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
356Teuchos::RCP<const Thyra::VectorSpaceBase<ScalarT> >
360 if(domainSpace_==Teuchos::null) {
362 domainSpace_ = Thyra::tpetraVectorSpace<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT>(getMap());
364 domainSpace_ = Thyra::tpetraVectorSpace<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT>(getColMap());
371template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
372Teuchos::RCP<const Thyra::VectorSpaceBase<ScalarT> >
376 if(rangeSpace_==Teuchos::null)
377 rangeSpace_ = Thyra::tpetraVectorSpace<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT>(getMap());
383template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
384Teuchos::RCP<Thyra::LinearOpBase<ScalarT> >
388 return Thyra::tpetraLinearOp<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT>(getThyraRangeSpace(),getThyraDomainSpace(),getTpetraMatrix());
394template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
399 ContainerType & tloc = Teuchos::dyn_cast<ContainerType>(loc);
400 initializeContainer(mem,tloc);
403template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
412 if((mem & LOC::X) == LOC::X)
413 loc.
set_x(getTpetraColVector());
415 if((mem & LOC::DxDt) == LOC::DxDt)
418 if((mem & LOC::F) == LOC::F)
419 loc.
set_f(getTpetraVector());
421 if((mem & LOC::Mat) == LOC::Mat)
422 loc.
set_A(getTpetraMatrix());
425template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
430 ContainerType & tloc = Teuchos::dyn_cast<ContainerType>(loc);
431 initializeGhostedContainer(mem,tloc);
434template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
443 if((mem & LOC::X) == LOC::X)
444 loc.
set_x(getGhostedTpetraColVector());
446 if((mem & LOC::DxDt) == LOC::DxDt)
447 loc.
set_dxdt(getGhostedTpetraColVector());
449 if((mem & LOC::F) == LOC::F) {
450 loc.
set_f(getGhostedTpetraVector());
454 if((mem & LOC::Mat) == LOC::Mat) {
455 loc.
set_A(getGhostedTpetraMatrix());
464template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
465const Teuchos::RCP<Tpetra::Map<LocalOrdinalT,GlobalOrdinalT,NodeT> >
469 if(map_==Teuchos::null) map_ = buildMap();
475template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
476const Teuchos::RCP<Tpetra::Map<LocalOrdinalT,GlobalOrdinalT,NodeT> >
480 if(cMap_==Teuchos::null) cMap_ = buildColMap();
485template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
486const Teuchos::RCP<Tpetra::Map<LocalOrdinalT,GlobalOrdinalT,NodeT> >
490 if(ghostedMap_==Teuchos::null) ghostedMap_ = buildGhostedMap();
495template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
496const Teuchos::RCP<Tpetra::Map<LocalOrdinalT,GlobalOrdinalT,NodeT> >
500 if(cGhostedMap_==Teuchos::null) cGhostedMap_ = buildGhostedColMap();
506template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
507const Teuchos::RCP<Tpetra::CrsGraph<LocalOrdinalT,GlobalOrdinalT,NodeT> >
511 if(graph_==Teuchos::null) graph_ = buildGraph();
516template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
517const Teuchos::RCP<Tpetra::CrsGraph<LocalOrdinalT,GlobalOrdinalT,NodeT> >
521 if(ghostedGraph_==Teuchos::null) ghostedGraph_ = buildGhostedGraph();
523 return ghostedGraph_;
526template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
527const Teuchos::RCP<Tpetra::Import<LocalOrdinalT,GlobalOrdinalT,NodeT> >
531 if(ghostedImporter_==Teuchos::null)
532 ghostedImporter_ = Teuchos::rcp(
new ImportType(getMap(),getGhostedMap()));
534 return ghostedImporter_;
537template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
538const Teuchos::RCP<Tpetra::Import<LocalOrdinalT,GlobalOrdinalT,NodeT> >
543 ghostedColImporter_ = getGhostedImport();
545 if(ghostedColImporter_==Teuchos::null)
546 ghostedColImporter_ = Teuchos::rcp(
new ImportType(getColMap(),getGhostedColMap()));
548 return ghostedColImporter_;
551template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
552const Teuchos::RCP<Tpetra::Export<LocalOrdinalT,GlobalOrdinalT,NodeT> >
556 if(ghostedExporter_==Teuchos::null)
557 ghostedExporter_ = Teuchos::rcp(
new ExportType(getGhostedMap(),getMap()));
559 return ghostedExporter_;
562template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
563const Teuchos::RCP<Tpetra::Export<LocalOrdinalT,GlobalOrdinalT,NodeT> >
568 ghostedColExporter_ = getGhostedExport();
570 if(ghostedColExporter_==Teuchos::null)
571 ghostedColExporter_ = Teuchos::rcp(
new ExportType(getGhostedColMap(),getColMap()));
573 return ghostedColExporter_;
579template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
580const Teuchos::RCP<Tpetra::Map<LocalOrdinalT,GlobalOrdinalT,NodeT> >
584 std::vector<GlobalOrdinalT> indices;
587 gidProvider_->getOwnedIndices(indices);
589 return Teuchos::rcp(
new MapType(Teuchos::OrdinalTraits<GlobalOrdinalT>::invalid(),indices,0,comm_));
592template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
593const Teuchos::RCP<Tpetra::Map<LocalOrdinalT,GlobalOrdinalT,NodeT> >
600 std::vector<GlobalOrdinalT> indices;
603 colGidProvider_->getOwnedIndices(indices);
605 return Teuchos::rcp(
new MapType(Teuchos::OrdinalTraits<GlobalOrdinalT>::invalid(),indices,0,comm_));
609template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
610const Teuchos::RCP<Tpetra::Map<LocalOrdinalT,GlobalOrdinalT,NodeT> >
614 std::vector<GlobalOrdinalT> indices;
617 gidProvider_->getOwnedAndGhostedIndices(indices);
619 return Teuchos::rcp(
new MapType(Teuchos::OrdinalTraits<GlobalOrdinalT>::invalid(),indices,0,comm_));
623template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
624const Teuchos::RCP<Tpetra::Map<LocalOrdinalT,GlobalOrdinalT,NodeT> >
629 return buildGhostedMap();
631 std::vector<GlobalOrdinalT> indices;
634 colGidProvider_->getOwnedAndGhostedIndices(indices);
636 return Teuchos::rcp(
new MapType(Teuchos::OrdinalTraits<GlobalOrdinalT>::invalid(),indices,0,comm_));
640template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
641const Teuchos::RCP<Tpetra::CrsGraph<LocalOrdinalT,GlobalOrdinalT,NodeT> >
650 RCP<MapType> rMap = getMap();
651 RCP<MapType> cMap = getColMap();
652 RCP<CrsGraphType> graph = rcp(
new CrsGraphType(rMap,0));
653 RCP<CrsGraphType> oGraph = getGhostedGraph();
656 RCP<ExportType> exporter = getGhostedExport();
657 graph->doExport( *oGraph, *exporter, Tpetra::INSERT );
658 graph->fillComplete(cMap,rMap);
663template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
664const Teuchos::RCP<Tpetra::CrsGraph<LocalOrdinalT,GlobalOrdinalT,NodeT> >
669 Teuchos::RCP<MapType> rMap = getGhostedMap();
670 Teuchos::RCP<MapType> cMap = getGhostedColMap();
672 std::vector<std::string> elementBlockIds;
673 gidProvider_->getElementBlockIds(elementBlockIds);
675 const Teuchos::RCP<const GlobalIndexer>
676 colGidProvider = hasColProvider_ ? colGidProvider_ : gidProvider_;
677 const Teuchos::RCP<const ConnManager> conn_mgr = colGidProvider->getConnManager();
678 const bool han = conn_mgr.is_null() ? false : conn_mgr->hasAssociatedNeighbors();
682 std::vector<size_t> nEntriesPerRow(rMap->getLocalNumElements(), 0);
684 std::vector<std::string>::const_iterator blockItr;
685 for(blockItr=elementBlockIds.begin();blockItr!=elementBlockIds.end();++blockItr) {
686 std::string blockId = *blockItr;
689 const std::vector<LocalOrdinalT> & elements = gidProvider_->getElementBlock(blockId);
692 std::vector<GlobalOrdinalT> gids;
693 std::vector<GlobalOrdinalT> col_gids;
696 for(std::size_t i=0;i<elements.size();i++) {
697 gidProvider_->getElementGIDs(elements[i],gids);
699 colGidProvider->getElementGIDs(elements[i],col_gids);
701 const std::vector<LocalOrdinalT>& aes = conn_mgr->getAssociatedNeighbors(elements[i]);
702 for (
typename std::vector<LocalOrdinalT>::const_iterator eit = aes.begin();
703 eit != aes.end(); ++eit) {
704 std::vector<GlobalOrdinalT> other_col_gids;
705 colGidProvider->getElementGIDs(*eit, other_col_gids);
706 col_gids.insert(col_gids.end(), other_col_gids.begin(), other_col_gids.end());
710 for(std::size_t j=0;j<gids.size();j++){
711 LocalOrdinalT lid = rMap->getLocalElement(gids[j]);
712 nEntriesPerRow[lid] += col_gids.size();
717 Teuchos::ArrayView<const size_t> nEntriesPerRowView(nEntriesPerRow);
718 Teuchos::RCP<CrsGraphType> graph = Teuchos::rcp(
new CrsGraphType(rMap,cMap,
719 nEntriesPerRowView));
722 for(blockItr=elementBlockIds.begin();blockItr!=elementBlockIds.end();++blockItr) {
723 std::string blockId = *blockItr;
726 const std::vector<LocalOrdinalT> & elements = gidProvider_->getElementBlock(blockId);
729 std::vector<GlobalOrdinalT> gids;
730 std::vector<GlobalOrdinalT> col_gids;
733 for(std::size_t i=0;i<elements.size();i++) {
734 gidProvider_->getElementGIDs(elements[i],gids);
736 colGidProvider->getElementGIDs(elements[i],col_gids);
738 const std::vector<LocalOrdinalT>& aes = conn_mgr->getAssociatedNeighbors(elements[i]);
739 for (
typename std::vector<LocalOrdinalT>::const_iterator eit = aes.begin();
740 eit != aes.end(); ++eit) {
741 std::vector<GlobalOrdinalT> other_col_gids;
742 colGidProvider->getElementGIDs(*eit, other_col_gids);
743 col_gids.insert(col_gids.end(), other_col_gids.begin(), other_col_gids.end());
747 for(std::size_t j=0;j<gids.size();j++)
748 graph->insertGlobalIndices(gids[j],col_gids);
753 graph->fillComplete(cMap,rMap);
758template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
759Teuchos::RCP<Tpetra::Vector<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> >
763 Teuchos::RCP<const MapType> tMap = getGhostedMap();
767template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
768Teuchos::RCP<Tpetra::Vector<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> >
772 Teuchos::RCP<const MapType> tMap = getGhostedColMap();
776template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
777Teuchos::RCP<Tpetra::Vector<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> >
781 Teuchos::RCP<const MapType> tMap = getMap();
785template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
786Teuchos::RCP<Tpetra::Vector<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> >
790 Teuchos::RCP<const MapType> tMap = getColMap();
794template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
795Teuchos::RCP<Tpetra::CrsMatrix<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> >
799 Teuchos::RCP<CrsGraphType> tGraph = getGraph();
800 Teuchos::RCP<CrsMatrixType> tMat = Teuchos::rcp(
new CrsMatrixType(tGraph));
801 tMat->fillComplete(tMat->getDomainMap(),tMat->getRangeMap());
806template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
807Teuchos::RCP<Tpetra::CrsMatrix<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> >
811 Teuchos::RCP<CrsGraphType> tGraph = getGhostedGraph();
812 Teuchos::RCP<CrsMatrixType> tMat = Teuchos::rcp(
new CrsMatrixType(tGraph));
813 tMat->fillComplete(tMat->getDomainMap(),tMat->getRangeMap());
818template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
819const Teuchos::RCP<const Teuchos::Comm<int> >
826template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
830 ContainerType & tloc = Teuchos::dyn_cast<ContainerType>(loc);
831 Teuchos::RCP<CrsMatrixType> A = tloc.
get_A();
836template <
typename Traits,
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
840 ContainerType & tloc = Teuchos::dyn_cast<ContainerType>(loc);
841 Teuchos::RCP<CrsMatrixType> A = tloc.
get_A();
843 A->fillComplete(A->getDomainMap(),A->getRangeMap());
This class provides a boundary exchange communication mechanism for vectors.
void setRequiresDirichletAdjustment(bool b)
void buildGatherScatterEvaluators(const BuilderT &builder)
void set_dxdt(const Teuchos::RCP< VectorType > &in)
void clear()
Wipe out stored data.
void set_A(const Teuchos::RCP< CrsMatrixType > &in)
void set_x(const Teuchos::RCP< VectorType > &in)
const Teuchos::RCP< VectorType > get_x() const
const Teuchos::RCP< VectorType > get_dxdt() const
const Teuchos::RCP< VectorType > get_f() const
void set_f(const Teuchos::RCP< VectorType > &in)
const Teuchos::RCP< CrsMatrixType > get_A() const
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
void initializeContainer(int, LinearObjContainer &loc) const
virtual void applyDirichletBCs(const LinearObjContainer &counter, LinearObjContainer &result) const
virtual Teuchos::RCP< LinearObjContainer > buildGhostedLinearObjContainer() const
virtual const Teuchos::RCP< const Teuchos::Comm< int > > getTeuchosComm() const
get exporter for converting an overalapped object to a "normal" object
Teuchos::RCP< Tpetra::Vector< ScalarT, LocalOrdinalT, GlobalOrdinalT, NodeT > > getGhostedTpetraColVector() const
virtual const Teuchos::RCP< Tpetra::Map< LocalOrdinalT, GlobalOrdinalT, NodeT > > getColMap() const
TpetraLinearObjFactory(const Teuchos::RCP< const Teuchos::Comm< int > > &comm, const Teuchos::RCP< const GlobalIndexer > &gidProvider)
virtual const Teuchos::RCP< Tpetra::Map< LocalOrdinalT, GlobalOrdinalT, NodeT > > buildGhostedColMap() const
virtual const Teuchos::RCP< Tpetra::Map< LocalOrdinalT, GlobalOrdinalT, NodeT > > getGhostedColMap() const
virtual const Teuchos::RCP< Tpetra::CrsGraph< LocalOrdinalT, GlobalOrdinalT, NodeT > > buildGraph() const
virtual const Teuchos::RCP< Tpetra::CrsGraph< LocalOrdinalT, GlobalOrdinalT, NodeT > > buildGhostedGraph() const
Tpetra::Map< LocalOrdinalT, GlobalOrdinalT, NodeT > MapType
Teuchos::RCP< Tpetra::Vector< ScalarT, LocalOrdinalT, GlobalOrdinalT, NodeT > > getTpetraVector() const
virtual const Teuchos::RCP< Tpetra::Export< LocalOrdinalT, GlobalOrdinalT, NodeT > > getGhostedColExport() const
virtual void beginFill(LinearObjContainer &loc) const
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::Export< LocalOrdinalT, GlobalOrdinalT, NodeT > ExportType
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< Tpetra::CrsMatrix< ScalarT, LocalOrdinalT, GlobalOrdinalT, NodeT > > getGhostedTpetraMatrix() const
void initializeGhostedContainer(int, LinearObjContainer &loc) const
virtual const Teuchos::RCP< Tpetra::Map< LocalOrdinalT, GlobalOrdinalT, NodeT > > buildGhostedMap() const
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 > > getGhostedTpetraVector() const
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 > > buildMap() const
virtual void ghostToGlobalContainer(const LinearObjContainer &ghostContainer, LinearObjContainer &container, int) const
virtual void endFill(LinearObjContainer &loc) const
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
void globalToGhostTpetraVector(const Tpetra::Vector< ScalarT, LocalOrdinalT, GlobalOrdinalT, NodeT > &in, Tpetra::Vector< ScalarT, LocalOrdinalT, GlobalOrdinalT, NodeT > &out, bool col) const
Tpetra::CrsMatrix< ScalarT, LocalOrdinalT, GlobalOrdinalT, NodeT > CrsMatrixType
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
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 > > buildColMap() const
virtual void globalToGhostContainer(const LinearObjContainer &container, LinearObjContainer &ghostContainer, int) const
virtual const Teuchos::RCP< Tpetra::Import< LocalOrdinalT, GlobalOrdinalT, NodeT > > getGhostedImport() const
get importer for converting an overalapped object to a "normal" object
Tpetra::Vector< ScalarT, LocalOrdinalT, GlobalOrdinalT, NodeT > VectorType
Tpetra::Import< LocalOrdinalT, GlobalOrdinalT, NodeT > ImportType
Teuchos::RCP< Tpetra::CrsMatrix< ScalarT, LocalOrdinalT, GlobalOrdinalT, NodeT > > getTpetraMatrix() const