11#ifndef __Panzer_TpetraVector_ReadOnly_GlobalEvaluationData_impl_hpp__
12#define __Panzer_TpetraVector_ReadOnly_GlobalEvaluationData_impl_hpp__
14#include "Thyra_TpetraThyraWrappers.hpp"
20template <
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
25 TEUCHOS_TEST_FOR_EXCEPTION(isInitialized_,std::logic_error,
26 "TpetraVector_ReadOnly_GED has been initialized, cannot call \"useConstantValues\"!");
32 globalFilteredPairs_.push_back(pair);
35template <
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
38initialize(
const RCP<const ImportType>& importer,
39 const RCP<const MapType>& ghostedMap,
40 const RCP<const MapType>& ownedMap)
43 ghostedMap_ = ghostedMap;
47 ghostedVector_ = Teuchos::rcp(
new VectorType(ghostedMap_));
50 ghostedSpace_ = Thyra::tpetraVectorSpace<ScalarT, LocalOrdinalT,
51 GlobalOrdinalT, NodeT>(ghostedMap_);
52 ownedSpace_ = Thyra::tpetraVectorSpace<ScalarT, LocalOrdinalT,
53 GlobalOrdinalT, NodeT>(ownedMap_);
58 filteredPairs_.resize(globalFilteredPairs_.size());
59 for(std::size_t i=0;i<globalFilteredPairs_.size();i++) {
60 std::vector<LocalOrdinalT>
lids;
61 const std::vector<GlobalOrdinalT> & gids = globalFilteredPairs_[i].first;
62 for(std::size_t j=0;j<gids.size();j++) {
63 LocalOrdinalT lid = ghostedMap->getLocalElement(gids[j]);
71 filteredPairs_[i].first =
lids;
72 filteredPairs_[i].second = globalFilteredPairs_[i].second;
75 isInitialized_ =
true;
78template <
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
83 TEUCHOS_TEST_FOR_EXCEPTION(ownedVector_ == Teuchos::null, std::logic_error,
84 "Owned vector has not been set, can't perform the halo exchange!");
91 ghostedVector_->doImport(*ownedVector_, *importer_, Tpetra::INSERT);
92 PHX::ExecSpace().fence();
95template <
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
100 TEUCHOS_TEST_FOR_EXCEPTION(!isInitialized_,std::logic_error,
101 "TpetraVector_ReadOnly_GED has not been initialized, cannot call \"initializeData\"!");
103 ghostedVector_->putScalar(0.0);
104 PHX::ExecSpace().fence();
106 auto values = ghostedVector_->getLocalViewHost(Tpetra::Access::OverwriteAll);
109 for(std::size_t i=0;i<filteredPairs_.size();i++) {
110 const std::vector<int> &
lids = filteredPairs_[i].first;
111 double value = filteredPairs_[i].second;
112 for(std::size_t j=0;j<
lids.size();j++)
113 values(
lids[j], 0) = value;
117template <
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
122 TEUCHOS_ASSERT(isInitialized_);
123 ownedVector_ = ownedVector;
126template <
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
127Teuchos::RCP<const typename TpetraVector_ReadOnly_GlobalEvaluationData<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT>::VectorType>
131 TEUCHOS_ASSERT(isInitialized_);
135template <
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
136Teuchos::RCP<typename TpetraVector_ReadOnly_GlobalEvaluationData<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT>::VectorType>
140 TEUCHOS_ASSERT(isInitialized_);
141 TEUCHOS_ASSERT(ghostedVector_!=Teuchos::null);
143 return ghostedVector_;
146template <
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
152 typedef Thyra::TpetraOperatorVectorExtraction<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> TOE;
153 TEUCHOS_ASSERT(isInitialized_);
154 ownedVector_ = TOE::getConstTpetraVector(ownedVector);
157template <
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
158Teuchos::RCP<const Thyra::VectorBase<double> >
162 TEUCHOS_ASSERT(isInitialized_);
163 return (ownedVector_ == Teuchos::null) ? Teuchos::null :
164 Thyra::createConstVector(ownedVector_, ownedSpace_);
167template <
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
168Teuchos::RCP<Thyra::VectorBase<double> >
172 TEUCHOS_ASSERT(isInitialized_);
173 TEUCHOS_ASSERT(ghostedVector_!=Teuchos::null);
175 return Thyra::createVector(ghostedVector_,ghostedSpace_);
178template <
typename ScalarT,
typename LocalOrdinalT,
typename GlobalOrdinalT,
typename NodeT>
181print(std::ostream & os)
const
183 const std::string tab =
" ";
185 os << tab <<
"TpetraVector_ReadOnly_GlobalEvaluationData\n"
186 << tab <<
" init = " << isInitialized_ <<
"\n"
187 << tab <<
" owned = " << ownedVector_ <<
"\n"
188 << tab <<
" ghosted = " << ghostedVector_ <<
"\n";
PHX::View< const LO ** > lids
Teuchos::RCP< const VectorType > getOwnedVector_Tpetra() const
Get the owned vector (Tpetra version)
void useConstantValues(const std::vector< GlobalOrdinalT > &indices, double value)
Teuchos::RCP< Thyra::VectorBase< double > > getGhostedVector() const
Get the ghosted vector (Thyra version)
virtual void globalToGhost(int mem)
Teuchos::RCP< VectorType > getGhostedVector_Tpetra() const
Get the ghosted vector (Tpetra version)
void print(std::ostream &os) const
Diagnostic function.
virtual void initializeData()
Clear out the ghosted vector.
void setOwnedVector(const Teuchos::RCP< const Thyra::VectorBase< double > > &ownedVector)
Set the owned vector (Thyra version)
void setOwnedVector_Tpetra(const Teuchos::RCP< const VectorType > &ownedVector)
Set the owned vector (Tpetra version)
std::pair< std::vector< GlobalOrdinalT >, double > FilteredGlobalPair
Tpetra::Vector< ScalarT, LocalOrdinalT, GlobalOrdinalT, NodeT > VectorType
void initialize(const Teuchos::RCP< const ImportType > &importer, const Teuchos::RCP< const MapType > &ghostedMap, const Teuchos::RCP< const MapType > &ownedMap)
Teuchos::RCP< const Thyra::VectorBase< double > > getOwnedVector() const
Get the owned vector (Thyra version)