A multi vector in the mathematical sense, initially developed for linear algebra type applications. If MPI then this multi vector can be distributed - its distribution is described by the LinearAlgebraDistribution object at Distribution_pt. Data is stored in a C-style pointer vector (double*) More...
#include <double_multi_vector.h>
Public Member Functions | |
DoubleMultiVector () | |
Constructor for an uninitialized DoubleMultiVector. More... | |
DoubleMultiVector (const unsigned &n_vector, const LinearAlgebraDistribution *const &dist_pt, const double &v=0.0) | |
Constructor. Assembles a DoubleMultiVector consisting of n_vector vectors, each with a prescribed distribution. Additionally every entry can be set (with argument v - defaults to 0). More... | |
DoubleMultiVector (const unsigned &n_vector, const LinearAlgebraDistribution &dist, const double &v=0.0) | |
Constructor. Assembles a DoubleMultiVector consisting of n_vector vectors, each with a prescribed distribution. Additionally every entry can be set (with argument v - defaults to 0). More... | |
DoubleMultiVector (const unsigned &n_vector, const DoubleMultiVector &old_vector, const double &initial_value=0.0) | |
Constructor. Build a multivector using the same distribution of the input vector with n_vector columns and initialised to the value v. More... | |
DoubleMultiVector (const DoubleMultiVector &old_vector, const std::vector< int > &index, const bool &deep_copy=true) | |
Constructor that builds a multivector from selected columns of the input multivector. The boolean controls whether it is a shallow or deep copy (default deep) More... | |
DoubleMultiVector (const DoubleMultiVector &old_vector, const Teuchos::Range1D &index, const bool &deep_copy=true) | |
Constructor that builds a multivector from selected columns of the input multivector and the provided range. The optional boolean specifies whether it is a shallow or deep copy. The default is that it is a deep copy. More... | |
DoubleMultiVector (const DoubleMultiVector &new_vector) | |
Copy constructor. More... | |
~DoubleMultiVector () | |
Destructor - just calls this->clear() to delete the distribution and data. More... | |
void | operator= (const DoubleMultiVector &old_vector) |
assignment operator (deep copy) More... | |
unsigned | nvector () const |
Return the number of vectors. More... | |
void | shallow_build (const DoubleMultiVector &old_vector) |
Provide a (shallow) copy of the old vector. More... | |
void | shallow_build (const unsigned &n_vector, const LinearAlgebraDistribution &dist) |
Build the storage for pointers to vectors with a given distribution, but do not populate the pointers. More... | |
void | shallow_build (const unsigned &n_vector, const LinearAlgebraDistribution *const &dist_pt) |
Build the storage for pointers to vectors with a given distribution, but do not populate the pointers. More... | |
void | build (const DoubleMultiVector &old_vector) |
Provides a (deep) copy of the old_vector. More... | |
void | build (const unsigned &n_vector, const LinearAlgebraDistribution &dist, const double &initial_value=0.0) |
Assembles a DoubleMultiVector with n_vector vectors, a distribution dist, if v is specified each element is set to v, otherwise each element is set to 0.0. More... | |
void | build (const unsigned &n_vector, const LinearAlgebraDistribution *const &dist_pt, const double &initial_value=0.0) |
Assembles a DoubleMultiVector with n_vector vectors, each with a distribution dist, if v is specified each element is set to v, otherwise each element is set to 0.0. More... | |
void | initialise (const double &initial_value) |
initialise the whole vector with value v More... | |
void | clear () |
initialise the vector with coefficient from the vector v. Note: The vector v must be of length More... | |
bool | built () const |
void | redistribute (const LinearAlgebraDistribution *const &dist_pt) |
Allows are external data to be used by this vector. WARNING: The size of the external data must correspond to the LinearAlgebraDistribution dist_pt argument. More... | |
double & | operator() (int v, int i) const |
[] access function to the (local) values of the v-th vector More... | |
bool | operator== (const DoubleMultiVector &vec) |
== operator More... | |
void | operator+= (DoubleMultiVector vec) |
+= operator More... | |
void | operator-= (DoubleMultiVector vec) |
-= operator More... | |
void | operator*= (const double &scalar_value) |
Multiply by a scalar. More... | |
double ** | values () |
access function to the underlying values More... | |
double ** | values () const |
access function to the underlying values (const version) More... | |
double * | values (const unsigned &i) |
access function to the i-th vector's data More... | |
double * | values (const unsigned &i) const |
access function to the i-th vector's data (const version) More... | |
DoubleVector & | doublevector (const unsigned &i) |
access to the DoubleVector representatoin More... | |
const DoubleVector & | doublevector (const unsigned &i) const |
access to the DoubleVector representation (const version) More... | |
void | output (std::ostream &outfile) const |
output the contents of the vector More... | |
void | output (std::string filename) |
output the contents of the vector More... | |
void | dot (const DoubleMultiVector &vec, std::vector< double > &result) const |
compute the 2 norm of this vector More... | |
void | norm (std::vector< double > &result) const |
compute the 2 norm of this vector More... | |
![]() | |
DistributableLinearAlgebraObject () | |
Default constructor - create a distribution. More... | |
DistributableLinearAlgebraObject (const DistributableLinearAlgebraObject &matrix) | |
Broken copy constructor. More... | |
void | operator= (const DistributableLinearAlgebraObject &) |
Broken assignment operator. More... | |
virtual | ~DistributableLinearAlgebraObject () |
Destructor. More... | |
LinearAlgebraDistribution * | distribution_pt () const |
access to the LinearAlgebraDistribution More... | |
unsigned | nrow () const |
access function to the number of global rows. More... | |
unsigned | nrow_local () const |
access function for the num of local rows on this processor. More... | |
unsigned | nrow_local (const unsigned &p) const |
access function for the num of local rows on this processor. More... | |
unsigned | first_row () const |
access function for the first row on this processor More... | |
unsigned | first_row (const unsigned &p) const |
access function for the first row on this processor More... | |
bool | distributed () const |
distribution is serial or distributed More... | |
bool | distribution_built () const |
void | build_distribution (const LinearAlgebraDistribution *const dist_pt) |
setup the distribution of this distributable linear algebra object More... | |
void | build_distribution (const LinearAlgebraDistribution &dist) |
setup the distribution of this distributable linear algebra object More... | |
Private Member Functions | |
void | setup_doublevector_representation () |
compute the A-norm using the matrix at matrix_pt More... | |
Private Attributes | |
double ** | Values |
unsigned | Nvector |
The number of vectors. More... | |
bool | Internal_values |
Boolean flag to indicate whether the vector's data (values_pt) is owned by this vector. More... | |
bool | Built |
indicates that the vector has been built and is usable More... | |
Vector< DoubleVector > | Internal_doublevector |
Need a vector of DoubleVectors to interface with our linear solvers. More... | |
Additional Inherited Members | |
![]() | |
void | clear_distribution () |
clear the distribution of this distributable linear algebra object More... | |
A multi vector in the mathematical sense, initially developed for linear algebra type applications. If MPI then this multi vector can be distributed - its distribution is described by the LinearAlgebraDistribution object at Distribution_pt. Data is stored in a C-style pointer vector (double*)
Definition at line 60 of file double_multi_vector.h.
|
inline |
Constructor for an uninitialized DoubleMultiVector.
Definition at line 66 of file double_multi_vector.h.
|
inline |
Constructor. Assembles a DoubleMultiVector consisting of n_vector vectors, each with a prescribed distribution. Additionally every entry can be set (with argument v - defaults to 0).
Definition at line 73 of file double_multi_vector.h.
References build(), and setup_doublevector_representation().
|
inline |
Constructor. Assembles a DoubleMultiVector consisting of n_vector vectors, each with a prescribed distribution. Additionally every entry can be set (with argument v - defaults to 0).
Definition at line 86 of file double_multi_vector.h.
References build(), and setup_doublevector_representation().
|
inline |
Constructor. Build a multivector using the same distribution of the input vector with n_vector columns and initialised to the value v.
Definition at line 98 of file double_multi_vector.h.
References build(), oomph::DistributableLinearAlgebraObject::distribution_pt(), and setup_doublevector_representation().
|
inline |
Constructor that builds a multivector from selected columns of the input multivector. The boolean controls whether it is a shallow or deep copy (default deep)
Definition at line 110 of file double_multi_vector.h.
References build(), oomph::CRDoubleMatrixHelpers::deep_copy(), oomph::DistributableLinearAlgebraObject::distribution_pt(), i, oomph::DistributableLinearAlgebraObject::nrow_local(), setup_doublevector_representation(), shallow_build(), values(), and Values.
|
inline |
Constructor that builds a multivector from selected columns of the input multivector and the provided range. The optional boolean specifies whether it is a shallow or deep copy. The default is that it is a deep copy.
Definition at line 149 of file double_multi_vector.h.
References build(), oomph::CRDoubleMatrixHelpers::deep_copy(), oomph::DistributableLinearAlgebraObject::distribution_pt(), i, oomph::DistributableLinearAlgebraObject::nrow_local(), setup_doublevector_representation(), shallow_build(), values(), and Values.
|
inline |
Copy constructor.
Definition at line 189 of file double_multi_vector.h.
References build(), and setup_doublevector_representation().
|
inline |
Destructor - just calls this->clear() to delete the distribution and data.
Definition at line 199 of file double_multi_vector.h.
References clear().
|
inline |
Provides a (deep) copy of the old_vector.
Definition at line 279 of file double_multi_vector.h.
References oomph::DistributableLinearAlgebraObject::distribution_built(), oomph::DistributableLinearAlgebraObject::distribution_pt(), i, Internal_values, oomph::DistributableLinearAlgebraObject::nrow_local(), nvector(), Nvector, values(), and Values.
Referenced by build(), DoubleMultiVector(), and operator=().
|
inline |
Assembles a DoubleMultiVector with n_vector vectors, a distribution dist, if v is specified each element is set to v, otherwise each element is set to 0.0.
Definition at line 311 of file double_multi_vector.h.
References build().
|
inline |
Assembles a DoubleMultiVector with n_vector vectors, each with a distribution dist, if v is specified each element is set to v, otherwise each element is set to 0.0.
Definition at line 321 of file double_multi_vector.h.
References oomph::DistributableLinearAlgebraObject::build_distribution(), oomph::LinearAlgebraDistribution::built(), Built, clear(), i, Internal_values, oomph::DistributableLinearAlgebraObject::nrow_local(), Nvector, values(), and Values.
|
inline |
Definition at line 408 of file double_multi_vector.h.
References Built, and redistribute().
Referenced by dot(), norm(), operator+=(), operator-=(), and operator==().
|
inline |
initialise the vector with coefficient from the vector v. Note: The vector v must be of length
wipes the DoubleVector
Definition at line 385 of file double_multi_vector.h.
References Built, oomph::DistributableLinearAlgebraObject::clear_distribution(), Internal_values, and Values.
Referenced by build(), shallow_build(), and ~DoubleMultiVector().
|
inline |
compute the 2 norm of this vector
Definition at line 782 of file double_multi_vector.h.
References built(), oomph::DistributableLinearAlgebraObject::distributed(), oomph::DistributableLinearAlgebraObject::distribution_pt(), i, oomph::DistributableLinearAlgebraObject::nrow_local(), nvector(), values(), and Values.
Referenced by Anasazi::MultiVecTraits< double, oomph::DoubleMultiVector >::MvDot().
|
inline |
access to the DoubleVector representatoin
Definition at line 674 of file double_multi_vector.h.
References i, and Internal_doublevector.
Referenced by oomph::ProblemBasedShiftInvertOperator::apply().
|
inline |
access to the DoubleVector representation (const version)
Definition at line 678 of file double_multi_vector.h.
References i, and Internal_doublevector.
|
inline |
initialise the whole vector with value v
Definition at line 362 of file double_multi_vector.h.
References Built, i, oomph::DistributableLinearAlgebraObject::nrow_local(), Nvector, and Values.
Referenced by Anasazi::MultiVecTraits< double, oomph::DoubleMultiVector >::MvInit().
|
inline |
compute the 2 norm of this vector
Definition at line 848 of file double_multi_vector.h.
References built(), oomph::DistributableLinearAlgebraObject::distributed(), oomph::DistributableLinearAlgebraObject::distribution_pt(), i, oomph::DistributableLinearAlgebraObject::nrow_local(), nvector(), and Values.
Referenced by Anasazi::MultiVecTraits< double, oomph::DoubleMultiVector >::MvNorm().
|
inline |
Return the number of vectors.
Definition at line 212 of file double_multi_vector.h.
References Nvector.
Referenced by oomph::ProblemBasedShiftInvertOperator::apply(), build(), dot(), Anasazi::MultiVecTraits< double, oomph::DoubleMultiVector >::GetNumberVecs(), Anasazi::MultiVecTraits< double, oomph::DoubleMultiVector >::MvAddMv(), Anasazi::MultiVecTraits< double, oomph::DoubleMultiVector >::MvRandom(), Anasazi::MultiVecTraits< double, oomph::DoubleMultiVector >::MvScale(), Anasazi::MultiVecTraits< double, oomph::DoubleMultiVector >::MvTimesMatAddMv(), Anasazi::MultiVecTraits< double, oomph::DoubleMultiVector >::MvTransMv(), norm(), operator*=(), operator+=(), operator-=(), operator==(), output(), setup_doublevector_representation(), and shallow_build().
|
inline |
[] access function to the (local) values of the v-th vector
Definition at line 476 of file double_multi_vector.h.
References i, oomph::DistributableLinearAlgebraObject::nrow_local(), Nvector, and Values.
|
inline |
Multiply by a scalar.
Definition at line 636 of file double_multi_vector.h.
References oomph::DistributableLinearAlgebraObject::distribution_built(), i, oomph::DistributableLinearAlgebraObject::nrow_local(), nvector(), and Values.
|
inline |
+= operator
Definition at line 543 of file double_multi_vector.h.
References built(), oomph::DistributableLinearAlgebraObject::distribution_pt(), i, oomph::DistributableLinearAlgebraObject::nrow_local(), nvector(), values(), and Values.
|
inline |
-= operator
Definition at line 590 of file double_multi_vector.h.
References built(), oomph::DistributableLinearAlgebraObject::distribution_built(), oomph::DistributableLinearAlgebraObject::distribution_pt(), i, oomph::DistributableLinearAlgebraObject::nrow_local(), nvector(), values(), and Values.
|
inline |
assignment operator (deep copy)
Definition at line 205 of file double_multi_vector.h.
References build(), and setup_doublevector_representation().
|
inline |
== operator
Definition at line 508 of file double_multi_vector.h.
References built(), i, oomph::DistributableLinearAlgebraObject::nrow_local(), nvector(), values(), and Values.
|
inline |
output the contents of the vector
Definition at line 682 of file double_multi_vector.h.
References oomph::LinearAlgebraDistribution::communicator_pt(), oomph::DistributableLinearAlgebraObject::distributed(), oomph::DistributableLinearAlgebraObject::distribution_pt(), oomph::DistributableLinearAlgebraObject::first_row(), i, oomph::DistributableLinearAlgebraObject::nrow(), oomph::DistributableLinearAlgebraObject::nrow_local(), nvector(), and Values.
Referenced by Anasazi::MultiVecTraits< double, oomph::DoubleMultiVector >::MvPrint(), and output().
|
inline |
output the contents of the vector
Definition at line 771 of file double_multi_vector.h.
References output().
void oomph::DoubleMultiVector::redistribute | ( | const LinearAlgebraDistribution *const & | dist_pt | ) |
Allows are external data to be used by this vector. WARNING: The size of the external data must correspond to the LinearAlgebraDistribution dist_pt argument.
The contents of the vector are redistributed to match the new distribution. In a non-MPI rebuild this method works, but does nothing. NOTE 1: The current distribution and the new distribution must have the same number of global rows. NOTE 2: The current distribution and the new distribution must have the same Communicator.
Definition at line 41 of file double_multi_vector.cc.
References oomph::DistributableLinearAlgebraObject::build_distribution(), oomph::LinearAlgebraDistribution::communicator_pt(), oomph::LinearAlgebraDistribution::distributed(), oomph::DistributableLinearAlgebraObject::distributed(), oomph::DistributableLinearAlgebraObject::distribution_pt(), oomph::LinearAlgebraDistribution::first_row(), oomph::DistributableLinearAlgebraObject::first_row(), i, Internal_values, oomph::LinearAlgebraDistribution::nrow(), oomph::DistributableLinearAlgebraObject::nrow(), oomph::LinearAlgebraDistribution::nrow_local(), oomph::DistributableLinearAlgebraObject::nrow_local(), Nvector, setup_doublevector_representation(), values(), and Values.
Referenced by built().
|
inlineprivate |
compute the A-norm using the matrix at matrix_pt
Setup the doublevector representation
Definition at line 934 of file double_multi_vector.h.
References oomph::DistributableLinearAlgebraObject::distribution_pt(), Internal_doublevector, nvector(), and values().
Referenced by DoubleMultiVector(), operator=(), and redistribute().
|
inline |
Provide a (shallow) copy of the old vector.
Definition at line 215 of file double_multi_vector.h.
References oomph::DistributableLinearAlgebraObject::distribution_built(), oomph::DistributableLinearAlgebraObject::distribution_pt(), Internal_values, nvector(), Nvector, values(), and Values.
Referenced by DoubleMultiVector(), and shallow_build().
|
inline |
Build the storage for pointers to vectors with a given distribution, but do not populate the pointers.
Definition at line 241 of file double_multi_vector.h.
References shallow_build().
|
inline |
Build the storage for pointers to vectors with a given distribution, but do not populate the pointers.
Definition at line 250 of file double_multi_vector.h.
References oomph::DistributableLinearAlgebraObject::build_distribution(), oomph::LinearAlgebraDistribution::built(), Built, clear(), Internal_values, Nvector, and Values.
|
inline |
access function to the underlying values
Definition at line 662 of file double_multi_vector.h.
References Values.
Referenced by build(), dot(), DoubleMultiVector(), operator+=(), operator-=(), operator==(), redistribute(), setup_doublevector_representation(), and shallow_build().
|
inline |
access function to the underlying values (const version)
Definition at line 665 of file double_multi_vector.h.
References Values.
|
inline |
access function to the i-th vector's data
Definition at line 668 of file double_multi_vector.h.
|
inline |
access function to the i-th vector's data (const version)
Definition at line 671 of file double_multi_vector.h.
|
private |
indicates that the vector has been built and is usable
Definition at line 958 of file double_multi_vector.h.
Referenced by build(), built(), clear(), initialise(), and shallow_build().
|
private |
Need a vector of DoubleVectors to interface with our linear solvers.
Definition at line 961 of file double_multi_vector.h.
Referenced by doublevector(), and setup_doublevector_representation().
|
private |
Boolean flag to indicate whether the vector's data (values_pt) is owned by this vector.
Definition at line 955 of file double_multi_vector.h.
Referenced by build(), clear(), redistribute(), and shallow_build().
|
private |
The number of vectors.
Definition at line 951 of file double_multi_vector.h.
Referenced by build(), initialise(), nvector(), operator()(), redistribute(), and shallow_build().
|
private |
the local data, need a pointer to a pointer so that the individual vectors can be extracted
Definition at line 948 of file double_multi_vector.h.
Referenced by build(), clear(), dot(), DoubleMultiVector(), initialise(), norm(), operator()(), operator*=(), operator+=(), operator-=(), operator==(), output(), redistribute(), shallow_build(), and values().