Panzer Version of the Day
Loading...
Searching...
No Matches
Panzer_EpetraVector_ReadOnly_GlobalEvaluationData.cpp
Go to the documentation of this file.
1// @HEADER
2// *****************************************************************************
3// Panzer: A partial differential equation assembly
4// engine for strongly coupled complex multiphysics systems
5//
6// Copyright 2011 NTESS and the Panzer contributors.
7// SPDX-License-Identifier: BSD-3-Clause
8// *****************************************************************************
9// @HEADER
10
12//
13// Include Files
14//
16
17// Epetra
18#include "Epetra_Import.h"
19
20// Panzer
22
23// Thyra
24#include "Thyra_EpetraThyraWrappers.hpp"
25#include "Thyra_SpmdVectorBase.hpp"
26#include "Thyra_SpmdVectorSpaceBase.hpp"
27#include "Thyra_VectorBase.hpp"
28#include "Thyra_VectorSpaceBase.hpp"
29
30namespace panzer
31{
33 //
34 // useConstantValues()
35 //
37 void
40 const std::vector<int>& indices,
41 double value)
42 {
43 using std::logic_error;
44 TEUCHOS_TEST_FOR_EXCEPTION(isInitialized_, logic_error,
45 "EpetraVector_ReadOnly_GlobalEvaluationData has been initialized; " \
46 "cannot call \"useConstantValues()\"!");
47
48 // Add this specification to the filtered pairs vector.
49 FilteredPair fp;
50 fp.first = indices;
51 fp.second = value;
52 filteredPairs_.push_back(fp);
53 } // end of useConstantValues()
54
56 //
57 // initialize()
58 //
60 void
63 const Teuchos::RCP<const Epetra_Import>& importer,
64 const Teuchos::RCP<const Epetra_Map>& ghostedMap,
65 const Teuchos::RCP<const Epetra_Map>& ownedMap)
66 {
68 using std::size_t;
69 using std::vector;
70 using Teuchos::rcp;
71 using Thyra::create_Vector;
72 using Thyra::create_VectorSpace;
73
74 // Save the input.
75 importer_ = importer;
76 ghostedMap_ = ghostedMap;
77 ownedMap_ = ownedMap;
78
79 // Build up the Thyra conversion data structures.
80 ghostedSpace_ = create_VectorSpace(ghostedMap_);
81 ownedSpace_ = create_VectorSpace(ownedMap_ );
82
83 // Allocate the vectors.
85 auto ownedVector = rcp(new Epetra_Vector(*ownedMap_));
86 ownedVector_ = create_Vector(ownedVector, ownedSpace_);
87
88 // Translate filtered pair GIDs to LIDs and initialize some ghosted values
89 // to the user-specified values.
90 for (size_t i(0); i < filteredPairs_.size(); ++i)
91 {
92 vector<int> lids;
93 const vector<int>& gids = filteredPairs_[i].first;
94 for (size_t j(0); j < gids.size(); ++j)
95 {
96 // Add legitimate LIDs to the list.
97 int lid = ghostedMap->LID(gids[j]);
98 if (lid >= 0)
99 lids.push_back(lid);
100 } // end loop over gids
101
102 // Overwrite the original GID vector with the new LID vector.
103 filteredPairs_[i].first = lids;
104 } // end loop over filteredPairs_
105 isInitialized_ = true;
106
107 // Get the PHX::Views corresponding to the owned and ghosted vectors.
108 ownedView_ = getView<const Epetra_Vector>(*ownedVector_);
109 ghostedView_ = getView<Epetra_Vector>(*getGhostedVector());
110 } // end of initialize()
111
113 //
114 // globalToGhost()
115 //
117 void
120 int /* mem */)
121 {
122 using std::logic_error;
123 using Teuchos::RCP;
124 using Thyra::get_Epetra_Vector;
125 TEUCHOS_TEST_FOR_EXCEPTION(ownedVector_.is_null(), logic_error,
126 "EpetraVector_ReadOnly_GlobalEvaluationData::globalToGhost(): Owned " \
127 "vector has not been set; can't perform the halo exchange!")
128
129 // Initialize the ghosted data, zeroing out things, and filling in
130 // specified constants.
132 RCP<const Epetra_Vector> ownedVector_ep =
133 get_Epetra_Vector(*ownedMap_, ownedVector_);
134
135 // Do the global distribution.
136 ghostedVector_->Import(*ownedVector_ep, *importer_, Insert);
137 } // end of globalToGhost()
138
140 //
141 // initializeData()
142 //
144 void
147 {
148 using std::logic_error;
149 using std::size_t;
150 using std::vector;
151 TEUCHOS_TEST_FOR_EXCEPTION(not isInitialized_, logic_error,
152 "EpetraVector_ReadOnly_GlobalEvaluationData has not been initialized, " \
153 "cannot call \"initializeData()\"!");
154 ghostedVector_->PutScalar(0);
155
156 // Initialize some ghosted values to the user-specified values.
157 for (size_t i(0); i < filteredPairs_.size(); ++i)
158 {
159 const vector<int>& lids = filteredPairs_[i].first;
160 for (size_t j(0); j < lids.size(); ++j)
161 (*ghostedVector_)[lids[j]] = filteredPairs_[i].second;
162 } // end loop over filteredPairs_
163 } // end of initializeData()
164
166 //
167 // ghostToGlobal()
168 //
170 void
173 int /* mem = 0 */)
174 {
175 } // end of ghostToGlobal()
176
178 //
179 // setOwnedVector_Epetra()
180 //
182 void
185 const Teuchos::RCP<const Epetra_Vector>& ownedVector)
186 {
188 using std::logic_error;
189 using Thyra::create_Vector;
190 TEUCHOS_TEST_FOR_EXCEPTION(not isInitialized_, logic_error,
191 "EpetraVector_ReadOnly_GlobalEvaluationData::" \
192 "setOwnedVector_Epetra(): This object hasn't yet been initialized.")
193 ownedVector_ = create_Vector(ownedVector, ownedSpace_);
194 ownedView_ = getView<const Epetra_Vector>(*ownedVector_);
195 } // end of setOwnedVector_Epetra()
196
198 //
199 // getGhostedVector_Epetra()
200 //
202 Teuchos::RCP<Epetra_Vector>
205 {
206 using std::logic_error;
207 TEUCHOS_TEST_FOR_EXCEPTION(not isInitialized_, logic_error,
208 "EpetraVector_ReadOnly_GlobalEvaluationData::" \
209 "getGhostedVector_Epetra(): This object hasn't yet been initialized.")
210 TEUCHOS_TEST_FOR_EXCEPTION(ghostedVector_.is_null(), logic_error,
211 "EpetraVector_ReadOnly_GlobalEvaluationData::" \
212 "getGhostedVector_Epetra(): The ghosted vector is just a null RCP.")
213 return ghostedVector_;
214 } // end of getGhostedVector_Epetra()
215
217 //
218 // setOwnedVector()
219 //
221 void
224 const Teuchos::RCP<const Thyra::VectorBase<double>>& ownedVector)
225 {
227 using std::logic_error;
228 TEUCHOS_TEST_FOR_EXCEPTION(not isInitialized_, logic_error,
229 "EpetraVector_ReadOnly_GlobalEvaluationData::setOwnedVector(): This " \
230 "object hasn't yet been initialized.")
231 ownedVector_ = ownedVector;
232 ownedView_ = getView<const Epetra_Vector>(*ownedVector_);
233 } // end of setOwnedVector()
234
236 //
237 // getOwnedVector()
238 //
240 Teuchos::RCP<const Thyra::VectorBase<double>>
242 getOwnedVector() const
243 {
244 using std::logic_error;
245 TEUCHOS_TEST_FOR_EXCEPTION(not isInitialized_, logic_error,
246 "EpetraVector_ReadOnly_GlobalEvaluationData::getOwnedVector(): This " \
247 "object hasn't yet been initialized.")
248 return ownedVector_;
249 } // end of getOwnedVector()
250
252 //
253 // getGhostedVector()
254 //
256 Teuchos::RCP<Thyra::VectorBase<double>>
258 getGhostedVector() const
259 {
260 using std::logic_error;
261 using Thyra::create_Vector;
262 TEUCHOS_TEST_FOR_EXCEPTION(not isInitialized_, logic_error,
263 "EpetraVector_ReadOnly_GlobalEvaluationData::getGhostedVector(): " \
264 "This object hasn't yet been initialized.")
265 TEUCHOS_TEST_FOR_EXCEPTION(ghostedVector_.is_null(), logic_error,
266 "EpetraVector_ReadOnly_GlobalEvaluationData::getGhostedVector(): The " \
267 "ghosted vector is just a null RCP.")
268 return create_Vector(ghostedVector_, ghostedSpace_);
269 } // end of getGhostedVector()
270
272 //
273 // print()
274 //
276 void
278 print(
279 std::ostream& os) const
280 {
281 using std::endl;
282 using std::string;
283 const string tab(" ");
284 os << endl
285 << tab << "EpetraVector_ReadOnly_GlobalEvaluationData" << endl
286 << tab << " init = " << isInitialized_ << endl
287 << tab << " owned = " << ownedVector_ << endl
288 << tab << " ghosted = " << ghostedVector_ << endl;
289 } // end of print()
290
291} // end of namespace panzer
292
293// end of Panzer_EpetraVector_ReadOnly_GlobalEvaluationData.cpp
Insert
PHX::View< const LO ** > lids
Teuchos::RCP< Thyra::VectorBase< double > > getGhostedVector() const
Get the ghosted vector (Thyra version).
Teuchos::RCP< const Epetra_Map > ownedMap_
The map corresponding to the owned vector.
Teuchos::RCP< const Epetra_Import > importer_
The importer used to communicate between the owned and ghosted vectors.
Teuchos::RCP< const Thyra::VectorSpaceBase< double > > ownedSpace_
The vector space corresponding to the owned vector.
Teuchos::RCP< const Thyra::VectorBase< double > > ownedVector_
The owned vector.
void setOwnedVector(const Teuchos::RCP< const Thyra::VectorBase< double > > &ownedVector)
Set the owned vector (Thyra version).
void setOwnedVector_Epetra(const Teuchos::RCP< const Epetra_Vector > &ownedVector)
Set the owned vector (Epetra version).
Teuchos::RCP< const Thyra::VectorBase< double > > getOwnedVector() const
Get the owned vector (Thyra version).
Teuchos::RCP< const Epetra_Map > ghostedMap_
The map corresponding to the ghosted vector.
Teuchos::RCP< const Thyra::VectorSpaceBase< double > > ghostedSpace_
The vector space corresponding to the ghosted vector.
std::pair< std::vector< int >, double > FilteredPair
A list of global IDs (which will be translated to local IDs), paired with a value to be assigned in t...
void useConstantValues(const std::vector< int > &indices, double value)
Choose a few GIDs and, instead of zeroing them out in the ghosted vector, set them to a specified val...
virtual void globalToGhost(int mem=0)
Communicate the owned data to the ghosted vector.
Teuchos::RCP< Epetra_Vector > getGhostedVector_Epetra() const
Get the ghosted vector (Epetra version).
void initialize(const Teuchos::RCP< const Epetra_Import > &importer, const Teuchos::RCP< const Epetra_Map > &ghostedMap, const Teuchos::RCP< const Epetra_Map > &ownedMap)
Initialize this object with some Epetra communication objects.
std::vector< FilteredPair > filteredPairs_
The list of filtered pairs, used to initialize values on the ghostedVector_.
virtual void ghostToGlobal(int mem=0)
Communicate the ghosted data to the owned vector.
bool isInitialized_
A flag indicating whether or not the object has been initialized.
VectorToViewTraits< VectorType >::View getView(typename VectorToViewTraits< VectorType >::ThyraVector &v)