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... | |
Public Member Functions inherited from oomph::DistributableLinearAlgebraObject | |
DistributableLinearAlgebraObject () | |
Default constructor - create a distribution. More... | |
DistributableLinearAlgebraObject (const DistributableLinearAlgebraObject &matrix)=delete | |
Broken copy constructor. More... | |
void | operator= (const DistributableLinearAlgebraObject &)=delete |
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 |
if the communicator_pt is null then the distribution is not setup then false is returned, otherwise return true More... | |
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 |
the local data, need a pointer to a pointer so that the individual vectors can be extracted More... | |
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 | |
Protected Member Functions inherited from oomph::DistributableLinearAlgebraObject | |
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 55 of file double_multi_vector.h.
|
inline |
Constructor for an uninitialized DoubleMultiVector.
Definition at line 59 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 68 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 81 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 93 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 105 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 144 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 184 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 198 of file double_multi_vector.h.
References clear().
|
inline |
Provides a (deep) copy of the old_vector.
Definition at line 281 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 313 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 323 of file double_multi_vector.h.
References oomph::DistributableLinearAlgebraObject::build_distribution(), Built, oomph::LinearAlgebraDistribution::built(), clear(), i, Internal_values, oomph::DistributableLinearAlgebraObject::nrow_local(), Nvector, values(), and Values.
|
inline |
Definition at line 413 of file double_multi_vector.h.
References Built.
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 387 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 809 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 692 of file double_multi_vector.h.
References i, and Internal_doublevector.
Referenced by oomph::ProblemBasedShiftInvertOperator::apply(), and oomph::AdjointProblemBasedShiftInvertOperator::apply().
|
inline |
access to the DoubleVector representation (const version)
Definition at line 698 of file double_multi_vector.h.
References i, and Internal_doublevector.
|
inline |
initialise the whole vector with value v
Definition at line 364 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 889 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 211 of file double_multi_vector.h.
References Nvector.
Referenced by oomph::ProblemBasedShiftInvertOperator::apply(), oomph::AdjointProblemBasedShiftInvertOperator::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 484 of file double_multi_vector.h.
References i, oomph::DistributableLinearAlgebraObject::nrow_local(), Nvector, and Values.
|
inline |
Multiply by a scalar.
Definition at line 642 of file double_multi_vector.h.
References oomph::DistributableLinearAlgebraObject::distribution_built(), i, oomph::DistributableLinearAlgebraObject::nrow_local(), nvector(), and Values.
|
inline |
+= operator
Definition at line 549 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 596 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 204 of file double_multi_vector.h.
References build(), and setup_doublevector_representation().
|
inline |
== operator
Definition at line 514 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 704 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 798 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 37 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.
|
inlineprivate |
compute the A-norm using the matrix at matrix_pt
Setup the doublevector representation
Definition at line 988 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 217 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 243 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 252 of file double_multi_vector.h.
References oomph::DistributableLinearAlgebraObject::build_distribution(), Built, oomph::LinearAlgebraDistribution::built(), clear(), Internal_values, Nvector, and Values.
|
inline |
access function to the underlying values
Definition at line 668 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 674 of file double_multi_vector.h.
References Values.
|
inline |
access function to the i-th vector's data
Definition at line 680 of file double_multi_vector.h.
|
inline |
access function to the i-th vector's data (const version)
Definition at line 686 of file double_multi_vector.h.
|
private |
indicates that the vector has been built and is usable
Definition at line 1012 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 1015 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 1009 of file double_multi_vector.h.
Referenced by build(), clear(), redistribute(), and shallow_build().
|
private |
The number of vectors.
Definition at line 1005 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 1002 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().