Domi
Multi-dimensional, distributed data structures
|
Multi-dimensional distributed vector. More...
#include <Domi_MDVector.hpp>
Public Member Functions | |
Constructors and destructor | |
MDVector (const Teuchos::RCP< const MDMap > &mdMap, bool zeroOut=true) | |
Main constructor. More... | |
MDVector (const Teuchos::RCP< const MDMap > &mdMap, const dim_type leadingDim, const dim_type trailingDim=0, bool zeroOut=true) | |
Augmented constructor. More... | |
MDVector (const Teuchos::RCP< const MDMap > &mdMap, const MDArrayView< Scalar > &source) | |
Constructor with initialization values (copy) More... | |
MDVector (const Teuchos::RCP< const MDMap > &mdMap, const MDArrayRCP< Scalar > &source) | |
Constructor with managed array object (view) More... | |
MDVector (const MDVector< Scalar > &source, Teuchos::DataAccess access=Teuchos::View) | |
Copy constructor with view or copy semantics. More... | |
MDVector (const Teuchos::RCP< const Teuchos::Comm< int > > teuchosComm, Teuchos::ParameterList &plist) | |
Constructor with Teuchos::Comm and ParameterList. More... | |
MDVector (const Teuchos::RCP< const MDComm > mdComm, Teuchos::ParameterList &plist) | |
Constructor with MDComm and ParameterList. More... | |
MDVector (const MDVector< Scalar > &parent, int axis, dim_type index) | |
Parent/single global ordinal sub-vector constructor. More... | |
MDVector (const MDVector< Scalar > &parent, int axis, const Slice &slice, int bndryPad=0) | |
Parent/single slice sub-vector constructor. More... | |
MDVector (const MDVector< Scalar > &parent, const Teuchos::ArrayView< Slice > &slices, const Teuchos::ArrayView< int > &bndryPad=Teuchos::ArrayView< int >()) | |
Parent/array of slices sub-vector constructor. More... | |
MDVector< Scalar > & | operator= (const MDVector< Scalar > &source) |
Assignment operator. More... | |
virtual | ~MDVector () |
Destructor. | |
MDMap methods | |
const Teuchos::RCP< const MDMap > | getMDMap () const |
MDMap accessor method. | |
bool | onSubcommunicator () const |
Query whether this processor is on the sub-communicator. More... | |
Teuchos::RCP< const Teuchos::Comm< int > > | getTeuchosComm () const |
Get the Teuchos communicator. More... | |
int | numDims () const |
Get the number of dimensions. More... | |
int | getCommDim (int axis) const |
Get the communicator size along the given axis. More... | |
bool | isPeriodic (int axis) const |
Return the periodic flag for the given axis. More... | |
int | getCommIndex (int axis) const |
Get the axis rank of this processor. More... | |
int | getLowerNeighbor (int axis) const |
Get the rank of the lower neighbor. More... | |
int | getUpperNeighbor (int axis) const |
Get the rank of the upper neighbor. More... | |
dim_type | getGlobalDim (int axis, bool withBndryPad=false) const |
Get the global dimension along the specified axis. More... | |
Slice | getGlobalBounds (int axis, bool withBndryPadding=false) const |
Get the bounds of the global problem. More... | |
Slice | getGlobalRankBounds (int axis, bool withBndryPad=false) const |
Get the global loop bounds on this processor along the specified axis. More... | |
dim_type | getLocalDim (int axis, bool withCommPad=false) const |
Get the local dimension along the specified axis. More... | |
Teuchos::ArrayView< const Slice > | getLocalBounds () const |
Get the local loop bounds along every axis. More... | |
Slice | getLocalBounds (int axis, bool withPad=false) const |
Get the local looping bounds along the specified axis. More... | |
Slice | getLocalInteriorBounds (int axis) const |
Get the local interior looping bounds along the specified axis. More... | |
bool | hasPadding () const |
Return true if there is any padding stored locally. More... | |
int | getLowerPadSize (int axis) const |
Get the size of the lower padding along the given axis. More... | |
int | getUpperPadSize (int axis) const |
Get the size of the upper padding along the given axis. More... | |
int | getCommPadSize (int axis) const |
Get the communication padding size along the given axis. More... | |
int | getLowerBndryPad (int axis) const |
Get the size of the lower boundary padding along the given axis. More... | |
int | getUpperBndryPad (int axis) const |
Get the size of the upper boundary padding along the given axis. More... | |
int | getBndryPadSize (int axis) const |
Get the boundary padding size along the given axis. More... | |
void | setLowerPad (int axis, const Scalar value) |
Assign all elements of the lower pad a constant value. More... | |
void | setUpperPad (int axis, const Scalar value) |
Assign all elements of the upper pad a constant value. More... | |
bool | isReplicatedBoundary (int axis) const |
Return whether the given axis supports a replicated boundary. | |
Layout | getLayout () const |
Get the storage order. | |
bool | isContiguous () const |
True if there are no stride gaps on any processor. More... | |
Data extraction methods | |
MDArrayView< Scalar > | getDataNonConst (bool includePadding=true) |
Get a non-const view of the data as an MDArrayView. More... | |
MDArrayView< const Scalar > | getData (bool includePadding=true) const |
Get a const view of the data as an MDArrayView. More... | |
MDArrayView< Scalar > | getLowerPadDataNonConst (int axis) |
Get a non-const view of the lower padding data along the given axis as an MDArrayView. More... | |
MDArrayView< const Scalar > | getLowerPadData (int axis) const |
Get a const view of the lower padding data along the given axis as an MDArrayView. More... | |
MDArrayView< Scalar > | getUpperPadDataNonConst (int axis) |
Get a non-const view of the upper padding data along the given axis as an MDArrayView. More... | |
MDArrayView< const Scalar > | getUpperPadData (int axis) const |
Get a const view of the upper padding data along the given axis as an MDArrayView. More... | |
Mathematical methods | |
Scalar | dot (const MDVector< Scalar > &a) const |
Compute the dot product of this MDVector and MDVector a. More... | |
Teuchos::ScalarTraits< Scalar > ::magnitudeType | norm1 () const |
Compute the 1-norm of this MDVector. | |
Teuchos::ScalarTraits< Scalar > ::magnitudeType | norm2 () const |
Compute the 2-norm of this MDVector. | |
Teuchos::ScalarTraits< Scalar > ::magnitudeType | normInf () const |
Compute the infinity-norm of this MDVector. | |
Teuchos::ScalarTraits< Scalar > ::magnitudeType | normWeighted (const MDVector< Scalar > &weights) const |
Compute the weighted norm of this. More... | |
Scalar | meanValue () const |
Compute the mean (average) value of this MDVector. | |
Implementation of the Teuchos::Describable interface | |
virtual std::string | description () const |
A simple one-line description of this MDVector. | |
virtual void | describe (Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel=Teuchos::Describable::verbLevel_default) const |
Print the object with some verbosity level to a FancyOStream. More... | |
Global assignment methods | |
void | putScalar (const Scalar &value, bool includePadding=true) |
Set all values in the multivector with the given value. More... | |
void | randomize () |
Set all values in the multivector to pseudorandom numbers. | |
Global communication methods | |
void | updateCommPad () |
Sum values of a locally replicated multivector across all processes. More... | |
void | updateCommPad (int axis) |
void | startUpdateCommPad (int axis) |
Start an asyncronous update of the communication padding. More... | |
void | endUpdateCommPad (int axis) |
Complete an asyncronous update of the communication padding. More... | |
Sub-MDVector operators | |
MDVector< Scalar > | operator[] (dim_type index) const |
Sub-vector access operator. More... | |
MDVector< Scalar > | operator[] (Slice slice) const |
Sub-vector access operator. More... | |
Input/Output | |
void | writeBinary (const std::string &filename, bool includeBndryPad=false) const |
Write the MDVector to a binary file. More... | |
void | readBinary (const std::string &filename, bool includeBndryPad=false) |
Read the MDVector from a binary file. More... | |
Multi-dimensional distributed vector.
The MDVector
class is intended to perform the functions of Epetra or Tpetra MultiVectors (or Vectors), with the additional capability that the data can be multi-dimensional. (Note that Epetra and Tpetra MultiVectors are 2 dimensional and distributed in an unstructured manner along only one of those dimensions. MDVector
s can be any number of dimensions, and can be distributed in a structured fashion along all of them.)
Where Epetra and Tpetra MultiVectors are built on top of Epetra_Map
s and Tpetra::Map
s, respectively, the MDVector
is built on top of an MDMap
. As such, they support boundary padding, communication padding, and periodicity.
The basic MDVector
constructor takes an MDMap and an optional boolean flag providing instruction whether to zero out the data or not. A slightly more advanced constructor takes an MDMap, a leading dimension, an optional trailing dimension, and an optional zero-out flag. This allows the user to augment the given MDMap
with an undistributed dimension. This can be helpful when the user wants to store an array of quantities at each grid point. These quantities can be clustered or strided in memory depending on whether a leading or trailing dimension is specified, and what the data Layout is.
There are additional constructors as well, based on copying data, using Teuchos::ParameterList
s to specify the MDVector
layout, and parent/slice constructors, where slicing of the parent can be performed with an ordinal or a Slice.
The ability to slice a parent MDVector
and obtain a sub-vector is an important feature of the MDVector
class. When you take a slice of a parent MDVector
, the resulting sub-vector may have a new, reduced communicator (both a new MDComm
and Teuchos::Comm
). When accessing a sub-vector, you should always use the onSubcommunicator() method to determine that the sub-vector exists on the current processor.
Like the Teuchos::MultiVector
, the user cannot index directly into an MDVector
. Rather, he or she must use the getData()
and getDataNonConst()
methods to obtain an MDArrayView
of the data for manipulation. This is a little different than the Tpetra behavior, where an ArrayRCP
is returned to the user. For MDVector
, and MDArrayView
is returned, as this supports the slicing semantics of the class. Note that each MDVector
stores an internal MDArrayRCP
of either its original data or its parent's data, and then it also stores an MDArrayView
that is a view into the MDArrayRCP
. So the MDArrayView
passed to the user will be valid as long as the reference count of its MDArrayRCP
is greater than zero. Looping bounds for this data can be obtained using the getLocalBounds()
method, which returns a concrete Slice
object, and takes a boolean that specifies whether padding should be included in the start and stop indexes.
There are a variety of methods for converting MDVector
s to Epetra or Tpetra MultiVector
s or Vector
s, using either view or copy semantics. The view semantic is only available when the MDVector
is contiguous in memory, meaning there are no stride gaps due to slicing. The copy semantic is always available. True Epetra or Tpetra MultiVector
s, in which the number of vectors is greater than 1, are only available when there is a non-distributed leading dimension and the layout is C-order, or there is a non-distributed trailing dimension and the layout is Fortran-order.
If the MDVector
was built with communication padding, then the user may use the updateCommPad()
method to communicate via message passing data from the owning processors into the communication padding buffers. If communication along a single axis is desired, then the overloaded updateCommPad(int axis)
method can be called instead. If asynchronous communication is desired, where computations can be performed between posting and receiving messages, then the startUpdateCommPad(int axis)
and endUpdateCommPad(int axis)
methods can be called. Note that the message data structures needed to coordinate these methods are stored internally.
Domi::MDVector< Scalar >::MDVector | ( | const Teuchos::RCP< const MDMap > & | mdMap, |
bool | zeroOut = true |
||
) |
Domi::MDVector< Scalar >::MDVector | ( | const Teuchos::RCP< const MDMap > & | mdMap, |
const dim_type | leadingDim, | ||
const dim_type | trailingDim = 0 , |
||
bool | zeroOut = true |
||
) |
Augmented constructor.
mdMap | [in] MDMap that describes the domain decomposition of this MDVector |
leadingDim | [in] leading augmentation dimension, typically used to provide additional degrees of freedom at each index defined by the MDMap |
trailingDim | [in] trailing augmentation dimension, typically used to provide additional degrees of freedom at each index defined by the MDMap |
zeroOut | [in] flag to initialize all data to zero |
If leadingDim or trailingDim is less than 2, then the MDMap will not be augmented with a leading dimension or trailing dimension, respectively. Note that this constructor takes the given MDMap and computes a new, augmented MDComm and a new MDMap for this MDVector.
Domi::MDVector< Scalar >::MDVector | ( | const Teuchos::RCP< const MDMap > & | mdMap, |
const MDArrayView< Scalar > & | source | ||
) |
Domi::MDVector< Scalar >::MDVector | ( | const Teuchos::RCP< const MDMap > & | mdMap, |
const MDArrayRCP< Scalar > & | source | ||
) |
Domi::MDVector< Scalar >::MDVector | ( | const MDVector< Scalar > & | source, |
Teuchos::DataAccess | access = Teuchos::View |
||
) |
Copy constructor with view or copy semantics.
source | [in] source MDVector |
access | [in] enumeration specifying view or copy construction |
Create a new MDVector with the same structure of the source MDVector and either perform a deep copy or take a view of the source MDVector data for the new MDVector. Default behavior is to use view semantics.
Domi::MDVector< Scalar >::MDVector | ( | const Teuchos::RCP< const Teuchos::Comm< int > > | teuchosComm, |
Teuchos::ParameterList & | plist | ||
) |
Domi::MDVector< Scalar >::MDVector | ( | const Teuchos::RCP< const MDComm > | mdComm, |
Teuchos::ParameterList & | plist | ||
) |
Domi::MDVector< Scalar >::MDVector | ( | const MDVector< Scalar > & | parent, |
int | axis, | ||
dim_type | index | ||
) |
Domi::MDVector< Scalar >::MDVector | ( | const MDVector< Scalar > & | parent, |
int | axis, | ||
const Slice & | slice, | ||
int | bndryPad = 0 |
||
) |
Parent/single slice sub-vector constructor.
parent | [in] an MDVector, from which this MDVector will be derived |
axis | [in] the axis to which this slice applies |
slice | [in] a slice of global ordinals describing the sub-vector |
bndryPad | [in] the boundary padding along the altered axis of the new sub-vector. This may include indexes from the boundary padding of the parent MDVector, but it does not have to. |
Domi::MDVector< Scalar >::MDVector | ( | const MDVector< Scalar > & | parent, |
const Teuchos::ArrayView< Slice > & | slices, | ||
const Teuchos::ArrayView< int > & | bndryPad = Teuchos::ArrayView< int >() |
||
) |
Parent/array of slices sub-vector constructor.
parent | [in] an MDVector, from which this sub-vector will be derived. |
slices | [in] an array of Slices of global axis indexes that defines the sub-vector. These slices must not include indexes from the boundary padding along each axis. |
bndryPad | [in] The boundary padding of the new sub-vector. These may include indexes from the boundary padding of the parent MDVector, but they do not have to. |
|
virtual |
Print the object with some verbosity level to a FancyOStream.
out | [in] output stream |
verbLevel | [in] verbosity level |
Scalar Domi::MDVector< Scalar >::dot | ( | const MDVector< Scalar > & | a | ) | const |
void Domi::MDVector< Scalar >::endUpdateCommPad | ( | int | axis | ) |
Complete an asyncronous update of the communication padding.
axis | [in] the axis along which communication will be performed |
Wait for all of the non-blocking updates for the communication padding along the given axis to complete
|
inline |
Get the boundary padding size along the given axis.
axis | [in] the index of the axis (from zero to the number of dimensions - 1) |
This returns the value of the boundary padding along the given axis at the time of construction, regardless of whether a sub-map reduced these values.
|
inline |
Get the communicator size along the given axis.
axis | [in] the index of the axis (from zero to the number of dimensions - 1) |
This method will throw a Domi::SubcommunicatorError if the communicator is a sub-communicator and this processor does not belong to the sub-communicator.
|
inline |
Get the axis rank of this processor.
axis | [in] the index of the axis (from zero to the number of dimensions - 1) |
This method will throw a Domi::SubcommunicatorError if the communicator is a sub-communicator and this processor does not belong to the sub-communicator.
|
inline |
Get the communication padding size along the given axis.
axis | [in] the index of the axis (from zero to the number of dimensions - 1) |
This returns the value of the communication padding along the given axis at the time of construction, regardless of the processor's position relative to the domain boundary.
MDArrayView< const Scalar > Domi::MDVector< Scalar >::getData | ( | bool | includePadding = true | ) | const |
Get a const view of the data as an MDArrayView.
includePadding | [in] if true, include the boundary and communication padding in the returned MDArrayView |
MDArrayView< Scalar > Domi::MDVector< Scalar >::getDataNonConst | ( | bool | includePadding = true | ) |
Get a non-const view of the data as an MDArrayView.
includePadding | [in] if true, include the boundary and communication padding in the returned MDArrayView |
|
inline |
Get the bounds of the global problem.
axis | [in] the index of the axis (from zero to the number of dimensions - 1) |
withBndryPad | [in] specify whether the bounds should include boundary padding or not |
|
inline |
Get the global dimension along the specified axis.
axis | [in] the index of the axis (from zero to the number of dimensions - 1) |
withBndryPad | [in] specify whether the dimension should include boundary padding or not |
|
inline |
Get the global loop bounds on this processor along the specified axis.
axis | [in] the index of the axis (from zero to the number of dimensions - 1) |
withBndryPadding | [in] specify whether the dimension should include boundary padding or not |
The loop bounds are returned in the form of a Slice
, in which the start()
method returns the loop begin value, and the stop()
method returns the non-inclusive end value.
|
inline |
Get the local loop bounds along every axis.
The loop bounds are returned in the form of a Slice
, in which the start()
method returns the loop begin value, and the stop()
method returns the non-inclusive end value. For this method, padding is included in the bounds.
|
inline |
Get the local looping bounds along the specified axis.
axis | [in] the index of the axis (from zero to the number of dimensions - 1) |
withPad | [in] specify whether the dimension should include padding or not |
The loop bounds are returned in the form of a Slice
, in which the start()
method returns the loop begin value, and the stop()
method returns the non-inclusive end value.
|
inline |
Get the local dimension along the specified axis.
axis | [in] the index of the axis (from zero to the number of dimensions - 1) |
withCommPad | [in] specify whether the dimension should include communication padding or not |
|
inline |
Get the local interior looping bounds along the specified axis.
axis | [in] the index of the axis (from zero to the number of dimensions - 1) |
Local interior loop bounds are the same as local loop bounds without padding, except that for non-periodic axes the global end points of the given axis are excluded. For periodic axes, the local interior loop bounds are exactly the same as local loop bounds without padding.
The loop bounds are returned in the form of a Slice
, in which the start()
method returns the loop begin value, and the stop()
method returns the non-inclusive end value.
|
inline |
Get the size of the lower boundary padding along the given axis.
axis | [in] the index of the axis (from zero to the number of dimensions - 1) |
|
inline |
Get the rank of the lower neighbor.
axis | [in] the index of the axis (from zero to the number of dimensions - 1) |
This method will throw a Domi::SubcommunicatorError if the communicator is a sub-communicator and this processor does not belong to the sub-communicator.
If the periodic flag for the given axis is off, and the axis rank of the calling processor is zero, then this method returns -1.
If the periodic flag for the given axis is on, and the axis rank of the calling processor is the highest axis rank processor along this axis, then the returned lower neighbor will be zero.
MDArrayView< const Scalar > Domi::MDVector< Scalar >::getLowerPadData | ( | int | axis | ) | const |
Get a const view of the lower padding data along the given axis as an MDArrayView.
axis | [in] the axis from which to extract the lower padding |
MDArrayView< Scalar > Domi::MDVector< Scalar >::getLowerPadDataNonConst | ( | int | axis | ) |
Get a non-const view of the lower padding data along the given axis as an MDArrayView.
axis | [in] the axis from which to extract the lower padding |
|
inline |
Get the size of the lower padding along the given axis.
axis | [in] the index of the axis (from zero to the number of dimensions - 1) |
Note that the returned padding can be either communication padding or boundary padding as appropriate.
|
inline |
Get the Teuchos communicator.
Note that if the communicator is not a full communicator, i.e. a sub-communicator, that the underlying Comm pointer may be NULL, depending on this processor's rank.
|
inline |
Get the size of the upper boundary padding along the given axis.
axis | [in] the index of the axis (from zero to the number of dimensions - 1) |
|
inline |
Get the rank of the upper neighbor.
axis | [in] the index of the axis (from zero to the number of dimensions - 1) |
This method will throw a Domi::SubcommunicatorError if the communicator is a sub-communicator and this processor does not belong to the sub-communicator.
If the periodic flag for the given axis is off, and the axis rank of the calling processor is the highest axis rank processor along this axis, then this method returns -1.
If the periodic flag for the given axis is on, and the axis rank of the calling processor is zero, then the returned lower neighbor will be the highest axis rank processor along this axis.
MDArrayView< const Scalar > Domi::MDVector< Scalar >::getUpperPadData | ( | int | axis | ) | const |
Get a const view of the upper padding data along the given axis as an MDArrayView.
axis | [in] the axis from which to extract the upper padding |
MDArrayView< Scalar > Domi::MDVector< Scalar >::getUpperPadDataNonConst | ( | int | axis | ) |
Get a non-const view of the upper padding data along the given axis as an MDArrayView.
axis | [in] the axis from which to extract the upper padding |
|
inline |
Get the size of the upper padding along the given axis.
axis | [in] the index of the axis (from zero to the number of dimensions - 1) |
Note that the returned padding can be either communication padding or boundary padding as appropriate.
|
inline |
Return true if there is any padding stored locally.
Note that it is not as simple as whether there were communication padding specified in the constructor. Suppose non-zero communication padding was specified, but the problem is on one processor and no boundary padding was specified: this method will return false. Similarly, if no communication padding was specified but boundary padding was, then boundary processors will have padding and this method will return true.
|
inline |
True if there are no stride gaps on any processor.
An MDVector constructed from a communicator and dimensions will always be contiguous. An MDVector that is a slice of a parent MDMVector will generally be non-contiguous, with some exceptions. There are cases where some local data is contiguous and some is not, but this method returns True only if all processes' local data is contiguous.
|
inline |
Return the periodic flag for the given axis.
axis | [in] the index of the axis (from zero to the number of dimensions - 1) |
This method will throw a Domi::SubcommunicatorError if the communicator is a sub-communicator and this processor does not belong to the sub-communicator.
Teuchos::ScalarTraits< Scalar >::magnitudeType Domi::MDVector< Scalar >::normWeighted | ( | const MDVector< Scalar > & | weights | ) | const |
Compute the weighted norm of this.
weights | [in] MDVector of weights for weighted norm |
|
inline |
Get the number of dimensions.
This method will return 0 if the communicator is a sub-communicator and this processor does not belong to the sub-communicator.
|
inline |
Query whether this processor is on the sub-communicator.
Sub-communicators are formed when a parent MDVector is sliced by using the (parent,ordinal) or (parent,slice) constructors. For a full communicator, this method will always return true.
MDVector< Scalar > & Domi::MDVector< Scalar >::operator= | ( | const MDVector< Scalar > & | source | ) |
Assignment operator.
source | [in] source MDVector to be copied |
MDVector< Scalar > Domi::MDVector< Scalar >::operator[] | ( | dim_type | index | ) | const |
Sub-vector access operator.
index | [in] index of the desired sub-vector. Note that to obtain expected behavior, you should always chain together n square bracket operators when referencing an n -dimensional MDVector . |
The returned MDVector
will have one fewer dimensions than the calling MDVector
.
MDVector< Scalar > Domi::MDVector< Scalar >::operator[] | ( | Slice | slice | ) | const |
Sub-vector access operator.
slice | [in] a Slice of global indexes that specifies the desired sub-vector. Note that to obtain expected behavior, you should always chain together n square bracket operators when referencing an n -dimensional MDVector . |
The returned MDVector
will have the same number of dimensions as the calling MDVector
.
Note that if you wish to obtain a sub-vector that has boundary padding along the axis being sliced, you will have to use the MDVector constructor that takes a parent MDVector, an axis, a Slice, and a boundary padding specification.
void Domi::MDVector< Scalar >::putScalar | ( | const Scalar & | value, |
bool | includePadding = true |
||
) |
Set all values in the multivector with the given value.
value | [in] assignment value |
includePadding | [in] if true, assign values to the boundary and communication padding as well |
void Domi::MDVector< Scalar >::readBinary | ( | const std::string & | filename, |
bool | includeBndryPad = false |
||
) |
Read the MDVector from a binary file.
filename | [in] name of the input file |
includeBndryPad | [in] if true, include the boundary pad with the input data |
void Domi::MDVector< Scalar >::setLowerPad | ( | int | axis, |
const Scalar | value | ||
) |
Assign all elements of the lower pad a constant value.
axis | [in] the axis along which the lower padding is chosen |
value | [in] the value to be assigned to all elements of the lower padding |
void Domi::MDVector< Scalar >::setUpperPad | ( | int | axis, |
const Scalar | value | ||
) |
Assign all elements of the upper pad a constant value.
axis | [in] the axis along which the upper padding is chosen |
value | [in] the value to be assigned to all elements of the upper padding |
void Domi::MDVector< Scalar >::startUpdateCommPad | ( | int | axis | ) |
Start an asyncronous update of the communication padding.
axis | [in] the axis along which communication will be performed |
Post the non-blocking sends and receives for the communication padding along the given axis
void Domi::MDVector< Scalar >::updateCommPad | ( | ) |
Sum values of a locally replicated multivector across all processes.
The simplest method for updating the communication padding.
This method will update the communication padding along all axes.
void Domi::MDVector< Scalar >::writeBinary | ( | const std::string & | filename, |
bool | includeBndryPad = false |
||
) | const |
Write the MDVector to a binary file.
filename | [in] name of the output file |
includeBndryPad | [in] if true, include the boundary pad with the output data |