OGS
MathLib::PETScVector Class Reference

Detailed Description

Wrapper class for PETSc vector.

Definition at line 32 of file PETScVector.h.

#include <PETScVector.h>

Public Types

using IndexType = PetscInt
 
using PETSc_Vec = Vec
 

Public Member Functions

 PETScVector ()
 
 PETScVector (const PetscInt vec_size, const bool is_global_size=true)
 Constructor. More...
 
 PETScVector (const PetscInt vec_size, const std::vector< PetscInt > &ghost_ids, const bool is_global_size=true)
 Constructor. More...
 
 PETScVector (const PETScVector &existing_vec, const bool deep_copy=true)
 Copy constructor. More...
 
 PETScVector (PETScVector &&other)
 
 ~PETScVector ()
 
void finalizeAssembly ()
 Perform MPI collection of assembled entries in buffer. More...
 
PetscInt size () const
 Get the global size of the vector. More...
 
PetscInt getLocalSize () const
 Get the number of entries in the same rank. More...
 
PetscInt getGhostSize () const
 Get the number of ghost entries in the same rank. More...
 
PetscInt getRangeBegin () const
 Get the start index of the local vector. More...
 
PetscInt getRangeEnd () const
 Get the end index of the local vector. More...
 
void set (const PetscInt i, const PetscScalar value)
 
void add (const PetscInt i, const PetscScalar value)
 
template<class T_SUBVEC >
void add (const std::vector< PetscInt > &e_idxs, const T_SUBVEC &sub_vec)
 
template<class T_SUBVEC >
void set (const std::vector< PetscInt > &e_idxs, const T_SUBVEC &sub_vec)
 
void setZero ()
 
PETScVectoroperator= (PETScVector &&)=delete
 
void setLocalAccessibleVector () const
 
std::vector< PetscScalar > get (std::vector< IndexType > const &indices) const
 
PetscScalar operator[] (PetscInt idx) const
 
void getGlobalVector (std::vector< PetscScalar > &u) const
 
PetscScalar get (const PetscInt idx) const
 
PETSc_VecgetRawVector ()
 Exposes the underlying PETSc vector. More...
 
PETSc_Vec const & getRawVector () const
 
void copyValues (std::vector< PetscScalar > &u) const
 
void viewer (const std::string &file_name, const PetscViewerFormat vw_format=PETSC_VIEWER_ASCII_MATLAB) const
 
void shallowCopy (const PETScVector &v)
 

Private Member Functions

void destroy ()
 
void gatherLocalVectors (PetscScalar local_array[], PetscScalar global_array[]) const
 Collect local vectors. More...
 
PetscScalar * getLocalVector () const
 
PetscInt getLocalIndex (const PetscInt global_index) const
 Get local index by a global index. More...
 
void restoreArray (PetscScalar *array) const
 
void config ()
 A function called by constructors to configure members. More...
 

Private Attributes

PETSc_Vec v_ = nullptr
 
PETSc_Vec v_loc_ = nullptr
 
PetscInt start_rank_
 Starting index in a rank. More...
 
PetscInt end_rank_
 Ending index in a rank. More...
 
PetscInt size_
 Size of the vector. More...
 
PetscInt size_loc_
 Size of local entries. More...
 
PetscInt size_ghosts_ = 0
 Size of local ghost entries. More...
 
bool has_ghost_id_ = false
 Flag to indicate whether the vector is created with ghost entry indices. More...
 
std::vector< PetscScalar > entry_array_
 Array containing the entries of the vector. If the vector is created without given ghost IDs, the array contains all entries of the global vector, v_. Otherwise it only contains the entries of the global vector owned by the current rank. More...
 
std::map< PetscInt, PetscInt > global_ids2local_ids_ghost_
 Map global indices of ghost entries to local indices. More...
 

Friends

void finalizeVectorAssembly (PETScVector &vec)
 Function to finalize the vector assembly. More...
 

Member Typedef Documentation

◆ IndexType

Definition at line 35 of file PETScVector.h.

◆ PETSc_Vec

Definition at line 38 of file PETScVector.h.

Constructor & Destructor Documentation

◆ PETScVector() [1/5]

MathLib::PETScVector::PETScVector ( )
inline

Definition at line 41 of file PETScVector.h.

41 {}

◆ PETScVector() [2/5]

MathLib::PETScVector::PETScVector ( const PetscInt  vec_size,
const bool  is_global_size = true 
)

Constructor.

Parameters
vec_sizeThe size of the vector, either global or local
is_global_sizeThe flag of the type of vec_size, i.e. whether it is a global size or local size. The default is true. If is_global_size is true, the vector is created by the global size, the local size of the vector is determined by PETSc, and vice versa is the same.

Definition at line 30 of file PETScVector.cpp.

31 {
32  if (is_global_size)
33  {
34  VecCreate(PETSC_COMM_WORLD, &v_);
35  VecSetSizes(v_, PETSC_DECIDE, vec_size);
36  }
37  else
38  {
39  // Fix size partitioning
40  // the size can be associated to specific memory allocation of a matrix
41  VecCreateMPI(PETSC_COMM_WORLD, vec_size, PETSC_DECIDE, &v_);
42  }
43 
44  config();
45 }
void config()
A function called by constructors to configure members.
Definition: PETScVector.cpp:96

References config(), and v_.

◆ PETScVector() [3/5]

MathLib::PETScVector::PETScVector ( const PetscInt  vec_size,
const std::vector< PetscInt > &  ghost_ids,
const bool  is_global_size = true 
)

Constructor.

Parameters
vec_sizeThe size of the vector, either global or local
ghost_idsThe global indices of ghost entries
is_global_sizeThe flag of the type of vec_size, i.e. whether it is a global size or local size. The default is true.

Definition at line 47 of file PETScVector.cpp.

50  : size_ghosts_{static_cast<PetscInt>(ghost_ids.size())}, has_ghost_id_{true}
51 {
52  PetscInt nghosts = static_cast<PetscInt>(ghost_ids.size());
53  if (is_global_size)
54  {
55  VecCreateGhost(PETSC_COMM_WORLD, PETSC_DECIDE, vec_size, nghosts,
56  ghost_ids.data(), &v_);
57  }
58  else
59  {
60  VecCreate(PETSC_COMM_WORLD, &v_);
61  VecSetType(v_, VECMPI);
62  VecSetSizes(v_, vec_size, PETSC_DECIDE);
63  VecMPISetGhost(v_, nghosts, ghost_ids.data());
64  }
65 
66  config();
67 
68  for (PetscInt i = 0; i < nghosts; i++)
69  global_ids2local_ids_ghost_.emplace(ghost_ids[i], size_loc_ + i);
70 }
bool has_ghost_id_
Flag to indicate whether the vector is created with ghost entry indices.
Definition: PETScVector.h:246
PetscInt size_loc_
Size of local entries.
Definition: PETScVector.h:241
PetscInt size_ghosts_
Size of local ghost entries.
Definition: PETScVector.h:243
std::map< PetscInt, PetscInt > global_ids2local_ids_ghost_
Map global indices of ghost entries to local indices.
Definition: PETScVector.h:258

References config(), global_ids2local_ids_ghost_, size_loc_, and v_.

◆ PETScVector() [4/5]

MathLib::PETScVector::PETScVector ( const PETScVector existing_vec,
const bool  deep_copy = true 
)
explicit

Copy constructor.

Parameters
existing_vecThe vector to be copied
deep_copyThe flag for a deep copy, which means to copy the values as well, the default is true

Definition at line 72 of file PETScVector.cpp.

73 {
74  shallowCopy(existing_vec);
75 
76  // Copy values
77  if (deep_copy)
78  {
79  VecCopy(existing_vec.v_, v_);
80  }
81 }
void shallowCopy(const PETScVector &v)

References shallowCopy(), and v_.

◆ PETScVector() [5/5]

MathLib::PETScVector::PETScVector ( PETScVector &&  other)

Definition at line 83 of file PETScVector.cpp.

84  : v_{std::move(other.v_)},
85  v_loc_{std::move(other.v_loc_)},
86  start_rank_{other.start_rank_},
87  end_rank_{other.end_rank_},
88  size_{other.size_},
89  size_loc_{other.size_loc_},
90  size_ghosts_{other.size_ghosts_},
91  has_ghost_id_{other.has_ghost_id_},
92  global_ids2local_ids_ghost_{other.global_ids2local_ids_ghost_}
93 {
94 }
PetscInt start_rank_
Starting index in a rank.
Definition: PETScVector.h:234
PetscInt size_
Size of the vector.
Definition: PETScVector.h:239
PetscInt end_rank_
Ending index in a rank.
Definition: PETScVector.h:236

◆ ~PETScVector()

MathLib::PETScVector::~PETScVector ( )
inline

Definition at line 77 of file PETScVector.h.

77 { destroy(); }

References destroy().

Member Function Documentation

◆ add() [1/2]

void MathLib::PETScVector::add ( const PetscInt  i,
const PetscScalar  value 
)
inline

Add a value to an entry.

Parameters
iNumber of the entry
valueValue.

Definition at line 107 of file PETScVector.h.

108  {
109  VecSetValue(v_, i, value, ADD_VALUES);
110  }

References v_.

◆ add() [2/2]

template<class T_SUBVEC >
void MathLib::PETScVector::add ( const std::vector< PetscInt > &  e_idxs,
const T_SUBVEC &  sub_vec 
)
inline

Add values to several entries.

Parameters
e_idxsIndices of entries to be added Note: std::size_t cannot be the type of e_idxs template argument.
sub_vecEntries to be added.

Definition at line 120 of file PETScVector.h.

121  {
122  VecSetValues(v_, e_idxs.size(), &e_idxs[0], &sub_vec[0], ADD_VALUES);
123  }

References v_.

◆ config()

void MathLib::PETScVector::config ( )
private

A function called by constructors to configure members.

Definition at line 96 of file PETScVector.cpp.

97 {
98  VecSetFromOptions(v_);
99  VecGetOwnershipRange(v_, &start_rank_, &end_rank_);
100 
101  VecGetLocalSize(v_, &size_loc_);
102  VecGetSize(v_, &size_);
103 
104  VecSetOption(v_, VEC_IGNORE_NEGATIVE_INDICES, PETSC_TRUE);
105 }

References end_rank_, size_, size_loc_, start_rank_, and v_.

Referenced by PETScVector().

◆ copyValues()

void MathLib::PETScVector::copyValues ( std::vector< PetscScalar > &  u) const

Copy local entries including ghost ones to an array

Parameters
uPreallocated vector for the values of local entries.

Definition at line 197 of file PETScVector.cpp.

198 {
199  assert(u.size() == (std::size_t)(getLocalSize() + getGhostSize()));
200 
201  PetscScalar* loc_x = getLocalVector();
202  std::copy_n(loc_x, getLocalSize() + getGhostSize(), u.begin());
203  restoreArray(loc_x);
204 }
void restoreArray(PetscScalar *array) const
PetscInt getLocalSize() const
Get the number of entries in the same rank.
Definition: PETScVector.h:84
PetscScalar * getLocalVector() const
PetscInt getGhostSize() const
Get the number of ghost entries in the same rank.
Definition: PETScVector.h:86

References getGhostSize(), getLocalSize(), getLocalVector(), and restoreArray().

◆ destroy()

void MathLib::PETScVector::destroy ( )
inlineprivate

Definition at line 221 of file PETScVector.h.

222  {
223  if (v_)
224  VecDestroy(&v_);
225  v_ = nullptr;
226  }

References v_.

Referenced by ~PETScVector(), and shallowCopy().

◆ finalizeAssembly()

void MathLib::PETScVector::finalizeAssembly ( )

Perform MPI collection of assembled entries in buffer.

Definition at line 107 of file PETScVector.cpp.

108 {
109  VecAssemblyBegin(v_);
110  VecAssemblyEnd(v_);
111 }

References v_.

Referenced by MathLib::applyKnownSolution(), and MathLib::LinAlg::finalizeAssembly().

◆ gatherLocalVectors()

void MathLib::PETScVector::gatherLocalVectors ( PetscScalar  local_array[],
PetscScalar  global_array[] 
) const
private

Collect local vectors.

Parameters
local_arrayLocal array
global_arrayGlobal array

Definition at line 113 of file PETScVector.cpp.

115 {
116  // Collect vectors from processors.
117  int size_rank;
118  MPI_Comm_size(PETSC_COMM_WORLD, &size_rank);
119 
120  // number of elements to be sent for each rank
121  std::vector<PetscInt> i_cnt(size_rank);
122 
123  MPI_Allgather(&size_loc_, 1, MPI_INT, &i_cnt[0], 1, MPI_INT,
124  PETSC_COMM_WORLD);
125 
126  // collect local array
127  PetscInt offset = 0;
128  // offset in the receive vector of the data from each rank
129  std::vector<PetscInt> i_disp(size_rank);
130  for (PetscInt i = 0; i < size_rank; i++)
131  {
132  i_disp[i] = offset;
133  offset += i_cnt[i];
134  }
135 
136  MPI_Allgatherv(local_array, size_loc_, MPI_DOUBLE, global_array, &i_cnt[0],
137  &i_disp[0], MPI_DOUBLE, PETSC_COMM_WORLD);
138 }

References size_loc_.

Referenced by getGlobalVector().

◆ get() [1/2]

PetscScalar MathLib::PETScVector::get ( const PetscInt  idx) const

Definition at line 206 of file PETScVector.cpp.

207 {
208  if (!global_ids2local_ids_ghost_.empty())
209  {
210  return entry_array_[getLocalIndex(idx)];
211  }
212 
213  // Ghost entries, and its original index is 0.
214  const PetscInt id_p = (idx == -size_) ? 0 : std::abs(idx);
215  return entry_array_[id_p];
216 }
std::vector< PetscScalar > entry_array_
Array containing the entries of the vector. If the vector is created without given ghost IDs,...
Definition: PETScVector.h:255
PetscInt getLocalIndex(const PetscInt global_index) const
Get local index by a global index.

References entry_array_, getLocalIndex(), global_ids2local_ids_ghost_, and size_.

◆ get() [2/2]

std::vector< PetscScalar > MathLib::PETScVector::get ( std::vector< IndexType > const &  indices) const

Get several entries. setLocalAccessibleVector() must be called beforehand.

Definition at line 218 of file PETScVector.cpp.

220 {
221  std::vector<PetscScalar> local_x(indices.size());
222  // If VecGetValues can get values from different processors,
223  // use VecGetValues(v_, indices.size(), indices.data(),
224  // local_x.data());
225 
226  if (!global_ids2local_ids_ghost_.empty())
227  {
228  for (std::size_t i = 0; i < indices.size(); i++)
229  {
230  local_x[i] = entry_array_[getLocalIndex(indices[i])];
231  }
232  }
233  else
234  {
235  for (std::size_t i = 0; i < indices.size(); i++)
236  {
237  // Ghost entries, and its original index is 0.
238  const IndexType id_p =
239  (indices[i] == -size_) ? 0 : std::abs(indices[i]);
240  local_x[i] = entry_array_[id_p];
241  }
242  }
243 
244  return local_x;
245 }

References entry_array_, getLocalIndex(), global_ids2local_ids_ghost_, and size_.

Referenced by operator[]().

◆ getGhostSize()

PetscInt MathLib::PETScVector::getGhostSize ( ) const
inline

Get the number of ghost entries in the same rank.

Definition at line 86 of file PETScVector.h.

86 { return size_ghosts_; }

References size_ghosts_.

Referenced by copyValues().

◆ getGlobalVector()

void MathLib::PETScVector::getGlobalVector ( std::vector< PetscScalar > &  u) const

Get global vector

Parameters
uArray to store the global vector. Memory allocation is needed in advance

Definition at line 140 of file PETScVector.cpp.

141 {
142 #ifdef TEST_MEM_PETSC
143  PetscLogDouble mem1, mem2;
144  PetscMemoryGetCurrentUsage(&mem1);
145 #endif
146 
147  assert(static_cast<PetscInt>(u.size()) == size_);
148 
149  PetscInt state;
150  VecLockGet(v_, &state);
151  if (state != 0)
152  {
153  OGS_FATAL("PETSc vector is already locked for {:s} access.",
154  state > 0 ? "read" : "write");
155  }
156  PetscScalar* xp = nullptr;
157  VecGetArray(v_, &xp);
158 
159  gatherLocalVectors(xp, u.data());
160 
161  // This following line may be needed late on
162  // for a communication load balance:
163  // MPI_Barrier(PETSC_COMM_WORLD);
164 
165  VecRestoreArray(v_, &xp);
166 
167 // TEST
168 #ifdef TEST_MEM_PETSC
169  PetscMemoryGetCurrentUsage(&mem2);
170  PetscPrintf(
171  PETSC_COMM_WORLD,
172  "### Memory usage by Updating. Before :%f After:%f Increase:%d\n", mem1,
173  mem2, (int)(mem2 - mem1));
174 #endif
175 }
#define OGS_FATAL(...)
Definition: Error.h:26
void gatherLocalVectors(PetscScalar local_array[], PetscScalar global_array[]) const
Collect local vectors.

References gatherLocalVectors(), OGS_FATAL, size_, and v_.

Referenced by setLocalAccessibleVector().

◆ getLocalIndex()

PetscInt MathLib::PETScVector::getLocalIndex ( const PetscInt  global_index) const
private

Get local index by a global index.

Definition at line 262 of file PETScVector.cpp.

263 {
264  if (global_index >= 0) // non-ghost entry.
265  return global_index - start_rank_;
266 
267  // A special case for a ghost location with global index equal to
268  // the size of the local vector:
269  PetscInt real_global_index = (-global_index == size_) ? 0 : -global_index;
270 
271  return global_ids2local_ids_ghost_.at(real_global_index);
272 }

References global_ids2local_ids_ghost_, size_, and start_rank_.

Referenced by get().

◆ getLocalSize()

PetscInt MathLib::PETScVector::getLocalSize ( ) const
inline

Get the number of entries in the same rank.

Definition at line 84 of file PETScVector.h.

84 { return size_loc_; }

References size_loc_.

Referenced by copyValues().

◆ getLocalVector()

PetscScalar * MathLib::PETScVector::getLocalVector ( ) const
private

Get local vector, i.e. entries in the same rank

Definition at line 247 of file PETScVector.cpp.

248 {
249  PetscScalar* loc_array;
250  if (has_ghost_id_)
251  {
252  VecGhostUpdateBegin(v_, INSERT_VALUES, SCATTER_FORWARD);
253  VecGhostUpdateEnd(v_, INSERT_VALUES, SCATTER_FORWARD);
254  VecGhostGetLocalForm(v_, &v_loc_);
255  VecGetArray(v_loc_, &loc_array);
256  }
257  else
258  VecGetArray(v_, &loc_array);
259  return loc_array;
260 }

References has_ghost_id_, v_, and v_loc_.

Referenced by copyValues(), and setLocalAccessibleVector().

◆ getRangeBegin()

PetscInt MathLib::PETScVector::getRangeBegin ( ) const
inline

Get the start index of the local vector.

Definition at line 88 of file PETScVector.h.

88 { return start_rank_; }

References start_rank_.

◆ getRangeEnd()

PetscInt MathLib::PETScVector::getRangeEnd ( ) const
inline

Get the end index of the local vector.

Definition at line 90 of file PETScVector.h.

90 { return end_rank_; }

References end_rank_.

◆ getRawVector() [1/2]

◆ getRawVector() [2/2]

PETSc_Vec const& MathLib::PETScVector::getRawVector ( ) const
inline

Exposes the underlying PETSc vector.

Warning
This method is dangerous insofar as you can do arbitrary things also with a const PETSc vector!

Definition at line 178 of file PETScVector.h.

178 { return v_; }

References v_.

◆ operator=()

PETScVector& MathLib::PETScVector::operator= ( PETScVector &&  )
delete

Disallow moving.

Todo:
This operator should be implemented properly when doing a general cleanup of all matrix and vector classes.

◆ operator[]()

PetscScalar MathLib::PETScVector::operator[] ( PetscInt  idx) const
inline

Get the value of an entry by [] operator. setLocalAccessibleVector() must be called beforehand.

Definition at line 155 of file PETScVector.h.

155 { return get(idx); }
std::vector< PetscScalar > get(std::vector< IndexType > const &indices) const

References get().

◆ restoreArray()

void MathLib::PETScVector::restoreArray ( PetscScalar *  array) const
inlineprivate

Restore array after finish access local array

Parameters
arrayPointer to the local array fetched by VecGetArray

Definition at line 274 of file PETScVector.cpp.

275 {
276  if (has_ghost_id_)
277  {
278  VecRestoreArray(v_loc_, &array);
279  VecGhostRestoreLocalForm(v_, &v_loc_);
280  }
281  else
282  VecRestoreArray(v_, &array);
283 }

References has_ghost_id_, v_, and v_loc_.

Referenced by copyValues(), and setLocalAccessibleVector().

◆ set() [1/2]

void MathLib::PETScVector::set ( const PetscInt  i,
const PetscScalar  value 
)
inline

Insert a single entry with value.

Parameters
iEntry index
valueEntry value

Definition at line 97 of file PETScVector.h.

98  {
99  VecSetValue(v_, i, value, INSERT_VALUES);
100  }

References v_.

Referenced by MathLib::applyKnownSolution(), and MathLib::setVector().

◆ set() [2/2]

template<class T_SUBVEC >
void MathLib::PETScVector::set ( const std::vector< PetscInt > &  e_idxs,
const T_SUBVEC &  sub_vec 
)
inline

Add values to several entries

Parameters
e_idxsIndices of entries to be added. Note: std::size_t cannot be the type of e_idxs template argument
sub_vecEntries to be added

Definition at line 133 of file PETScVector.h.

134  {
135  VecSetValues(v_, e_idxs.size(), &e_idxs[0], &sub_vec[0], INSERT_VALUES);
136  }

References v_.

◆ setLocalAccessibleVector()

void MathLib::PETScVector::setLocalAccessibleVector ( ) const

Set local accessible vector in order to get entries. Call this before call operator[] or get(...).

Definition at line 177 of file PETScVector.cpp.

178 {
179  if (entry_array_.empty())
180  {
181  const PetscInt array_size = global_ids2local_ids_ghost_.empty()
182  ? size_
184  entry_array_.resize(array_size);
185  }
186 
187  if (!global_ids2local_ids_ghost_.empty())
188  {
189  PetscScalar* loc_x = getLocalVector();
190  std::copy_n(loc_x, size_loc_ + size_ghosts_, entry_array_.begin());
191  restoreArray(loc_x);
192  }
193  else
195 }
void getGlobalVector(std::vector< PetscScalar > &u) const

References entry_array_, getGlobalVector(), getLocalVector(), global_ids2local_ids_ghost_, restoreArray(), size_, size_ghosts_, and size_loc_.

Referenced by MathLib::LinAlg::setLocalAccessibleVector().

◆ setZero()

void MathLib::PETScVector::setZero ( )
inline

Definition at line 139 of file PETScVector.h.

139 { VecSet(v_, 0.0); }

References v_.

◆ shallowCopy()

void MathLib::PETScVector::shallowCopy ( const PETScVector v)

Definition at line 303 of file PETScVector.cpp.

304 {
305  destroy();
306 
307  VecDuplicate(v.getRawVector(), &v_);
308 
309  start_rank_ = v.start_rank_;
310  end_rank_ = v.end_rank_;
311  size_ = v.size_;
312  size_loc_ = v.size_loc_;
313  size_ghosts_ = v.size_ghosts_;
314  has_ghost_id_ = v.has_ghost_id_;
315  global_ids2local_ids_ghost_ = v.global_ids2local_ids_ghost_;
316 
317  VecSetOption(v_, VEC_IGNORE_NEGATIVE_INDICES, PETSC_TRUE);
318 }

References destroy(), end_rank_, getRawVector(), global_ids2local_ids_ghost_, has_ghost_id_, size_, size_ghosts_, size_loc_, start_rank_, and v_.

Referenced by PETScVector(), MathLib::LinAlg::copy(), MathLib::LinAlg::matMult(), and MathLib::LinAlg::matMultAdd().

◆ size()

PetscInt MathLib::PETScVector::size ( ) const
inline

Get the global size of the vector.

Definition at line 82 of file PETScVector.h.

82 { return size_; }

References size_.

◆ viewer()

void MathLib::PETScVector::viewer ( const std::string &  file_name,
const PetscViewerFormat  vw_format = PETSC_VIEWER_ASCII_MATLAB 
) const

View the global vector for test purpose. Do not use it for output a big vector.

Parameters
file_nameFile name for output
vw_formatFile format listed as: PETSC_VIEWER_DEFAULT Default format PETSC_VIEWER_ASCII_MATLAB MATLAB format PETSC_VIEWER_ASCII_DENSE Print matrix as dense PETSC_VIEWER_ASCII_IMPL Implementation-specific format (which is in many cases the same as the default) PETSC_VIEWER_ASCII_INFO Basic information about object PETSC_VIEWER_ASCII_INFO_DETAIL More detailed info about object PETSC_VIEWER_ASCII_COMMON Identical output format for all objects of a particular type PETSC_VIEWER_ASCII_INDEX (for vectors) Prints the vector element number next to each vector entry PETSC_VIEWER_ASCII_SYMMODU Print parallel vectors without indicating the processor ranges PETSC_VIEWER_ASCII_VTK Outputs the object to a VTK file PETSC_VIEWER_NATIVE Store the object to the binary file in its native format (for example, dense matrices are stored as dense), DMDA vectors are dumped directly to the file instead of being first put in the natural ordering PETSC_VIEWER_DRAW_BASIC Views the vector with a simple 1d plot PETSC_VIEWER_DRAW_LG Views the vector with a line graph PETSC_VIEWER_DRAW_CONTOUR Views the vector with a contour plot

Definition at line 285 of file PETScVector.cpp.

287 {
288  PetscViewer viewer;
289  PetscViewerASCIIOpen(PETSC_COMM_WORLD, file_name.c_str(), &viewer);
290  PetscViewerPushFormat(viewer, vw_format);
291 
292  PetscObjectSetName((PetscObject)v_, file_name.c_str());
293  VecView(v_, viewer);
294 
295 #define nEXIT_TEST
296 #ifdef EXIT_TEST
297  VecDestroy(v_);
298  PetscFinalize();
299  exit(0);
300 #endif
301 }
void viewer(const std::string &file_name, const PetscViewerFormat vw_format=PETSC_VIEWER_ASCII_MATLAB) const

References v_.

Friends And Related Function Documentation

◆ finalizeVectorAssembly

void finalizeVectorAssembly ( PETScVector vec)
friend

Function to finalize the vector assembly.

Definition at line 320 of file PETScVector.cpp.

321 {
322  vec.finalizeAssembly();
323 }

Member Data Documentation

◆ end_rank_

PetscInt MathLib::PETScVector::end_rank_
private

Ending index in a rank.

Definition at line 236 of file PETScVector.h.

Referenced by config(), getRangeEnd(), and shallowCopy().

◆ entry_array_

std::vector<PetscScalar> MathLib::PETScVector::entry_array_
mutableprivate

Array containing the entries of the vector. If the vector is created without given ghost IDs, the array contains all entries of the global vector, v_. Otherwise it only contains the entries of the global vector owned by the current rank.

Definition at line 255 of file PETScVector.h.

Referenced by get(), and setLocalAccessibleVector().

◆ global_ids2local_ids_ghost_

std::map<PetscInt, PetscInt> MathLib::PETScVector::global_ids2local_ids_ghost_
mutableprivate

Map global indices of ghost entries to local indices.

Definition at line 258 of file PETScVector.h.

Referenced by PETScVector(), get(), getLocalIndex(), setLocalAccessibleVector(), and shallowCopy().

◆ has_ghost_id_

bool MathLib::PETScVector::has_ghost_id_ = false
private

Flag to indicate whether the vector is created with ghost entry indices.

Definition at line 246 of file PETScVector.h.

Referenced by getLocalVector(), restoreArray(), and shallowCopy().

◆ size_

PetscInt MathLib::PETScVector::size_
private

Size of the vector.

Definition at line 239 of file PETScVector.h.

Referenced by config(), get(), getGlobalVector(), getLocalIndex(), setLocalAccessibleVector(), shallowCopy(), and size().

◆ size_ghosts_

PetscInt MathLib::PETScVector::size_ghosts_ = 0
private

Size of local ghost entries.

Definition at line 243 of file PETScVector.h.

Referenced by getGhostSize(), setLocalAccessibleVector(), and shallowCopy().

◆ size_loc_

PetscInt MathLib::PETScVector::size_loc_
private

Size of local entries.

Definition at line 241 of file PETScVector.h.

Referenced by PETScVector(), config(), gatherLocalVectors(), getLocalSize(), setLocalAccessibleVector(), and shallowCopy().

◆ start_rank_

PetscInt MathLib::PETScVector::start_rank_
private

Starting index in a rank.

Definition at line 234 of file PETScVector.h.

Referenced by config(), getLocalIndex(), getRangeBegin(), and shallowCopy().

◆ v_

PETSc_Vec MathLib::PETScVector::v_ = nullptr
private

◆ v_loc_

PETSc_Vec MathLib::PETScVector::v_loc_ = nullptr
mutableprivate

Local vector, which is only for the case that v_ is created with ghost entries.

Definition at line 231 of file PETScVector.h.

Referenced by getLocalVector(), and restoreArray().


The documentation for this class was generated from the following files: