![]() |
MFEM v4.8.0
Finite element discretization library
|
A class to handle Vectors in a block fashion. More...
#include <blockvector.hpp>
Public Member Functions | |
| BlockVector () | |
| empty constructor | |
| BlockVector (const Array< int > &bOffsets) | |
| Constructor. | |
| BlockVector (const Array< int > &bOffsets, MemoryType mt) | |
| Construct a BlockVector with the given MemoryType mt. | |
| BlockVector (const BlockVector &block) | |
| Copy constructor. | |
| BlockVector (real_t *data, const Array< int > &bOffsets) | |
| View constructor. | |
| BlockVector (Vector &v, const Array< int > &bOffsets) | |
| Wrap a Vector as a BlockVector. | |
| BlockVector (Vector &v, int offset, const Array< int > &bOffsets) | |
| Wrap a Vector as a BlockVector with offset. | |
| int | NumBlocks () const |
| Return the number of blocks. | |
| BlockVector & | operator= (const BlockVector &original) |
| Assignment operator. this and original must have the same block structure. | |
| BlockVector & | operator= (real_t val) |
| Set each entry of this equal to val. | |
| ~BlockVector () | |
| Destructor. | |
| Vector & | GetBlock (int i) |
| Get the i-th vector in the block. | |
| const Vector & | GetBlock (int i) const |
| Get the i-th vector in the block (const version). | |
| void | GetBlockView (int i, Vector &blockView) |
| Get the i-th vector in the block. | |
| int | BlockSize (int i) |
| void | Update (real_t *data, const Array< int > &bOffsets) |
| Update method. | |
| void | Update (Vector &data, const Array< int > &bOffsets) |
| void | Update (const Array< int > &bOffsets) |
| Update a BlockVector with new bOffsets and make sure it owns its data. | |
| void | Update (const Array< int > &bOffsets, MemoryType mt) |
| Update a BlockVector with new bOffsets and make sure it owns its data and uses the MemoryType mt. | |
| void | SyncToBlocks () const |
| Synchronize the memory location flags (i.e. the memory validity flags) of the big/monolithic block-vector with its sub-vector blocks. The big/monolithic vector has the correct memory location flags. | |
| void | SyncFromBlocks () const |
| Synchronize the memory location flags (i.e. the memory validity flags) of the big/monolithic block-vector with its sub-vector blocks. The sub-vector blocks have the correct memory location flags. | |
Public Member Functions inherited from mfem::Vector | |
| Vector () | |
| Vector (const Vector &) | |
| Copy constructor. Allocates a new data array and copies the data. | |
| Vector (Vector &&v) | |
| Move constructor. "Steals" data from its argument. | |
| Vector (int s) | |
| Creates vector of size s. | |
| Vector (real_t *data_, int size_) | |
| Creates a vector referencing an array of doubles, owned by someone else. | |
| Vector (Vector &base, int base_offset, int size_) | |
| Create a Vector referencing a sub-vector of the Vector base starting at the given offset, base_offset, and size size_. | |
| Vector (int size_, MemoryType mt) | |
| Create a Vector of size size_ using MemoryType mt. | |
| Vector (int size_, MemoryType h_mt, MemoryType d_mt) | |
| Create a Vector of size size_ using host MemoryType h_mt and device MemoryType d_mt. | |
| template<typename CT , int N> | |
| Vector (const CT(&values)[N]) | |
| Create a vector from a statically sized C-style array of convertible type. | |
| template<typename CT , typename std::enable_if< std::is_convertible< CT, real_t >::value, bool >::type = true> | |
| Vector (std::initializer_list< CT > values) | |
| Create a vector using a braced initializer list. | |
| virtual void | UseDevice (bool use_dev) const |
| Enable execution of Vector operations using the mfem::Device. | |
| virtual bool | UseDevice () const |
| Return the device flag of the Memory object used by the Vector. | |
| void | Load (std::istream **in, int np, int *dim) |
| Reads a vector from multiple files. | |
| void | Load (std::istream &in, int Size) |
| Load a vector from an input stream. | |
| void | Load (std::istream &in) |
| Load a vector from an input stream, reading the size from the stream. | |
| void | SetSize (int s) |
| Resize the vector to size s. | |
| void | SetSize (int s, MemoryType mt) |
| Resize the vector to size s using MemoryType mt. | |
| void | SetSize (int s, const Vector &v) |
| Resize the vector to size s using the MemoryType of v. | |
| void | SetData (real_t *d) |
| void | SetDataAndSize (real_t *d, int s) |
| Set the Vector data and size. | |
| void | NewDataAndSize (real_t *d, int s) |
| Set the Vector data and size, deleting the old data, if owned. | |
| void | NewMemoryAndSize (const Memory< real_t > &mem, int s, bool own_mem) |
| Reset the Vector to use the given external Memory mem and size s. | |
| void | MakeRef (Vector &base, int offset, int size) |
| Reset the Vector to be a reference to a sub-vector of base. | |
| void | MakeRef (Vector &base, int offset) |
| Reset the Vector to be a reference to a sub-vector of base without changing its current size. | |
| void | MakeDataOwner () const |
| Set the Vector data (host pointer) ownership flag. | |
| void | Destroy () |
| Destroy a vector. | |
| void | DeleteDevice (bool copy_to_host=true) |
| Delete the device pointer, if owned. If copy_to_host is true and the data is valid only on device, move it to host before deleting. Invalidates the device memory. | |
| int | Size () const |
| Returns the size of the vector. | |
| int | Capacity () const |
| Return the size of the currently allocated data array. | |
| real_t * | GetData () const |
| Return a pointer to the beginning of the Vector data. | |
| MFEM_DEPRECATED | operator real_t * () |
Conversion to double *. Deprecated. | |
| MFEM_DEPRECATED | operator const real_t * () const |
Conversion to const double *. Deprecated. | |
| real_t * | begin () |
| STL-like begin. | |
| real_t * | end () |
| STL-like end. | |
| const real_t * | begin () const |
| STL-like begin (const version). | |
| const real_t * | end () const |
| STL-like end (const version). | |
| Memory< real_t > & | GetMemory () |
| Return a reference to the Memory object used by the Vector. | |
| const Memory< real_t > & | GetMemory () const |
| Return a reference to the Memory object used by the Vector, const version. | |
| void | SyncMemory (const Vector &v) const |
| Update the memory location of the vector to match v. | |
| void | SyncAliasMemory (const Vector &v) const |
| Update the alias memory location of the vector to match v. | |
| bool | OwnsData () const |
| Read the Vector data (host pointer) ownership flag. | |
| void | StealData (real_t **p) |
| Changes the ownership of the data; after the call the Vector is empty. | |
| real_t * | StealData () |
| Changes the ownership of the data; after the call the Vector is empty. | |
| real_t & | Elem (int i) |
| Access Vector entries. Index i = 0 .. size-1. | |
| const real_t & | Elem (int i) const |
| Read only access to Vector entries. Index i = 0 .. size-1. | |
| real_t & | operator() (int i) |
| Access Vector entries using () for 0-based indexing. | |
| const real_t & | operator() (int i) const |
| Read only access to Vector entries using () for 0-based indexing. | |
| real_t & | operator[] (int i) |
| Access Vector entries using [] for 0-based indexing. | |
| const real_t & | operator[] (int i) const |
| Read only access to Vector entries using [] for 0-based indexing. | |
| real_t | operator* (const real_t *v) const |
| real_t | operator* (const Vector &v) const |
| Return the inner-product. | |
| Vector & | operator= (const real_t *v) |
| Copy Size() entries from v. | |
| Vector & | operator= (const Vector &v) |
| Copy assignment. | |
| Vector & | operator= (Vector &&v) |
| Move assignment. | |
| Vector & | operator= (real_t value) |
| Redefine '=' for vector = constant. | |
| Vector & | operator*= (real_t c) |
| Vector & | operator*= (const Vector &v) |
| Component-wise scaling: (*this)(i) *= v(i) | |
| Vector & | operator/= (real_t c) |
| Vector & | operator/= (const Vector &v) |
| Component-wise division: (*this)(i) /= v(i) | |
| Vector & | operator-= (real_t c) |
| Vector & | operator-= (const Vector &v) |
| Vector & | operator+= (real_t c) |
| Vector & | operator+= (const Vector &v) |
| Vector & | Add (const real_t a, const Vector &Va) |
| (*this) += a * Va | |
| Vector & | Set (const real_t a, const Vector &x) |
| (*this) = a * x | |
| void | SetVector (const Vector &v, int offset) |
| void | AddSubVector (const Vector &v, int offset) |
| void | Neg () |
| (*this) = -(*this) | |
| void | Reciprocal () |
| (*this)(i) = 1.0 / (*this)(i) | |
| void | Swap (Vector &other) |
| Swap the contents of two Vectors. | |
| void | cross3D (const Vector &vin, Vector &vout) const |
| void | median (const Vector &lo, const Vector &hi) |
| v = median(v,lo,hi) entrywise. Implementation assumes lo <= hi. | |
| void | GetSubVector (const Array< int > &dofs, Vector &elemvect) const |
| Extract entries listed in dofs to the output Vector elemvect. | |
| void | GetSubVector (const Array< int > &dofs, real_t *elem_data) const |
| Extract entries listed in dofs to the output array elem_data. | |
| void | SetSubVector (const Array< int > &dofs, const real_t value) |
| Set the entries listed in dofs to the given value. | |
| void | SetSubVector (const Array< int > &dofs, const Vector &elemvect) |
| Set the entries listed in dofs to the values given in the elemvect Vector. Negative dof values cause the -dof-1 position in this Vector to receive the -val from elemvect. | |
| void | SetSubVector (const Array< int > &dofs, real_t *elem_data) |
| Set the entries listed in dofs to the values given the , elem_data array. Negative dof values cause the -dof-1 position in this Vector to receive the -val from elem_data. | |
| void | AddElementVector (const Array< int > &dofs, const Vector &elemvect) |
| Add elements of the elemvect Vector to the entries listed in dofs. Negative dof values cause the -dof-1 position in this Vector to add the -val from elemvect. | |
| void | AddElementVector (const Array< int > &dofs, real_t *elem_data) |
| Add elements of the elem_data array to the entries listed in dofs. Negative dof values cause the -dof-1 position in this Vector to add the -val from elem_data. | |
| void | AddElementVector (const Array< int > &dofs, const real_t a, const Vector &elemvect) |
| Add times the elements of the elemvect Vector to the entries listed in dofs. Negative dof values cause the -dof-1 position in this Vector to add the -a*val from elemvect. | |
| void | SetSubVectorComplement (const Array< int > &dofs, const real_t val) |
| Set all vector entries NOT in the dofs Array to the given val. | |
| void | Print (std::ostream &out=mfem::out, int width=8) const |
| Prints vector to stream out. | |
| void | Print (adios2stream &out, const std::string &variable_name) const |
| void | Print_HYPRE (std::ostream &out) const |
| Prints vector to stream out in HYPRE_Vector format. | |
| void | PrintMathematica (std::ostream &out=mfem::out) const |
| Prints vector as a List for importing into Mathematica. | |
| void | PrintHash (std::ostream &out) const |
| Print the Vector size and hash of its data. | |
| void | Randomize (int seed=0) |
| Set random values in the vector. | |
| real_t | Norml2 () const |
| Returns the l2 norm of the vector. | |
| real_t | Normlinf () const |
| Returns the l_infinity norm of the vector. | |
| real_t | Norml1 () const |
| Returns the l_1 norm of the vector. | |
| real_t | Normlp (real_t p) const |
| Returns the l_p norm of the vector. | |
| real_t | Max () const |
| Returns the maximal element of the vector. | |
| real_t | Min () const |
| Returns the minimal element of the vector. | |
| real_t | Sum () const |
| Return the sum of the vector entries. | |
| real_t | DistanceSquaredTo (const real_t *p) const |
| Compute the square of the Euclidean distance to another vector. | |
| real_t | DistanceSquaredTo (const Vector &p) const |
| Compute the square of the Euclidean distance to another vector. | |
| real_t | DistanceTo (const real_t *p) const |
| Compute the Euclidean distance to another vector. | |
| real_t | DistanceTo (const Vector &p) const |
| Compute the Euclidean distance to another vector. | |
| int | CheckFinite () const |
| Count the number of entries in the Vector for which isfinite is false, i.e. the entry is a NaN or +/-Inf. | |
| virtual | ~Vector () |
| Destroys vector. | |
| virtual const real_t * | Read (bool on_dev=true) const |
| Shortcut for mfem::Read(vec.GetMemory(), vec.Size(), on_dev). | |
| virtual const real_t * | HostRead () const |
| Shortcut for mfem::Read(vec.GetMemory(), vec.Size(), false). | |
| virtual real_t * | Write (bool on_dev=true) |
| Shortcut for mfem::Write(vec.GetMemory(), vec.Size(), on_dev). | |
| virtual real_t * | HostWrite () |
| Shortcut for mfem::Write(vec.GetMemory(), vec.Size(), false). | |
| virtual real_t * | ReadWrite (bool on_dev=true) |
| Shortcut for mfem::ReadWrite(vec.GetMemory(), vec.Size(), on_dev). | |
| virtual real_t * | HostReadWrite () |
| Shortcut for mfem::ReadWrite(vec.GetMemory(), vec.Size(), false). | |
Protected Member Functions | |
| void | SetBlocks () |
Protected Attributes | |
| int | numBlocks |
| Number of blocks in the blockVector. | |
| const int * | blockOffsets |
| Offset for each block start. (length numBlocks+1) | |
| Vector * | blocks |
| array of Vector objects used to extract blocks without allocating memory. | |
Protected Attributes inherited from mfem::Vector | |
| Memory< real_t > | data |
| int | size |
A class to handle Vectors in a block fashion.
All data is contained in Vector::data, while blockVector is just a viewer for this data.
Definition at line 30 of file blockvector.hpp.
| mfem::BlockVector::BlockVector | ( | ) |
empty constructor
Definition at line 27 of file blockvector.cpp.
| mfem::BlockVector::BlockVector | ( | const Array< int > & | bOffsets | ) |
Constructor.
Standard constructor.
bOffsets is an array of integers (length nBlocks+1) that tells the offsets of each block start.
Definition at line 37 of file blockvector.cpp.
| mfem::BlockVector::BlockVector | ( | const Array< int > & | bOffsets, |
| MemoryType | mt ) |
Construct a BlockVector with the given MemoryType mt.
Definition at line 46 of file blockvector.cpp.
| mfem::BlockVector::BlockVector | ( | const BlockVector & | block | ) |
Copy constructor.
Definition at line 56 of file blockvector.cpp.
View constructor.
data is an array of double of length at least blockOffsets[numBlocks] that contain all the values of the monolithic vector. bOffsets is an array of integers (length nBlocks+1) that tells the offsets of each block start. nBlocks is the number of blocks.
Definition at line 66 of file blockvector.cpp.
Wrap a Vector as a BlockVector.
Definition at line 75 of file blockvector.cpp.
Wrap a Vector as a BlockVector with offset.
Definition at line 85 of file blockvector.cpp.
| mfem::BlockVector::~BlockVector | ( | ) |
Destructor.
Definition at line 192 of file blockvector.cpp.
|
inline |
Definition at line 100 of file blockvector.hpp.
|
inline |
Get the i-th vector in the block.
Definition at line 93 of file blockvector.hpp.
|
inline |
Get the i-th vector in the block (const version).
Definition at line 95 of file blockvector.hpp.
| void mfem::BlockVector::GetBlockView | ( | int | i, |
| Vector & | blockView ) |
Get the i-th vector in the block.
Definition at line 197 of file blockvector.cpp.
|
inline |
Return the number of blocks.
Definition at line 82 of file blockvector.hpp.
| BlockVector & mfem::BlockVector::operator= | ( | const BlockVector & | original | ) |
Assignment operator. this and original must have the same block structure.
Definition at line 165 of file blockvector.cpp.
| BlockVector & mfem::BlockVector::operator= | ( | real_t | val | ) |
Set each entry of this equal to val.
Definition at line 185 of file blockvector.cpp.
|
protected |
Definition at line 19 of file blockvector.cpp.
| void mfem::BlockVector::SyncFromBlocks | ( | ) | const |
Synchronize the memory location flags (i.e. the memory validity flags) of the big/monolithic block-vector with its sub-vector blocks. The sub-vector blocks have the correct memory location flags.
This method will copy/move the data of the sub-vector blocks (if necessary) so that each block matches the memory location flags of the big/monolithic block-vector.
Definition at line 210 of file blockvector.cpp.
| void mfem::BlockVector::SyncToBlocks | ( | ) | const |
Synchronize the memory location flags (i.e. the memory validity flags) of the big/monolithic block-vector with its sub-vector blocks. The big/monolithic vector has the correct memory location flags.
This method will copy the data validity flags from the big/monolithic block-vector to its sub-vector block.
Definition at line 202 of file blockvector.cpp.
| void mfem::BlockVector::Update | ( | const Array< int > & | bOffsets | ) |
Update a BlockVector with new bOffsets and make sure it owns its data.
The block-vector will be re-allocated if either:
Definition at line 125 of file blockvector.cpp.
| void mfem::BlockVector::Update | ( | const Array< int > & | bOffsets, |
| MemoryType | mt ) |
Update a BlockVector with new bOffsets and make sure it owns its data and uses the MemoryType mt.
The block-vector will be re-allocated if either:
Definition at line 130 of file blockvector.cpp.
Update method.
data is an array of double of length at least blockOffsets[numBlocks] that contain all the values of the monolithic vector. bOffsets is an array of integers (length nBlocks+1) that tells the offsets of each block start. nBlocks is the number of blocks.
Definition at line 95 of file blockvector.cpp.
Definition at line 108 of file blockvector.cpp.
|
protected |
Offset for each block start. (length numBlocks+1)
blockOffsets[i+1] - blockOffsets[i] is the size of block i.
This array is not owned.
Definition at line 42 of file blockvector.hpp.
|
protected |
array of Vector objects used to extract blocks without allocating memory.
This array is owned.
Definition at line 45 of file blockvector.hpp.
|
protected |
Number of blocks in the blockVector.
Definition at line 35 of file blockvector.hpp.