00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042 #ifndef NOX_MULTIVECTOR_H
00043 #define NOX_MULTIVECTOR_H
00044
00045 #include "NOX_Abstract_MultiVector.H"
00046 #include "Teuchos_RCP.hpp"
00047
00048 namespace NOX {
00049
00054 class MultiVector : public virtual NOX::Abstract::MultiVector {
00055
00056 public:
00057
00062 MultiVector(const NOX::Abstract::Vector& v, int numVecs = 1,
00063 NOX::CopyType type = NOX::DeepCopy);
00064
00066 MultiVector(const NOX::Abstract::Vector* const* vs, int numVecs,
00067 NOX::CopyType type = NOX::DeepCopy);
00068
00070 MultiVector(const MultiVector& source,
00071 NOX::CopyType type = NOX::DeepCopy);
00072
00074 virtual ~MultiVector();
00075
00077
00079 virtual NOX::Abstract::MultiVector&
00080 init(double gamma);
00081
00083 virtual NOX::Abstract::MultiVector&
00084 random(bool useSeed = false, int seed = 1);
00085
00087 virtual NOX::Abstract::MultiVector&
00088 operator=(const NOX::Abstract::MultiVector& source);
00089
00091 virtual NOX::Abstract::MultiVector&
00092 operator=(const NOX::MultiVector& source);
00093
00099 virtual NOX::Abstract::MultiVector&
00100 setBlock(const NOX::Abstract::MultiVector& source,
00101 const vector<int>& index);
00102 virtual NOX::Abstract::MultiVector&
00103 setBlock(const NOX::MultiVector& source, const vector<int>& index);
00104
00106 virtual NOX::Abstract::MultiVector&
00107 augment(const NOX::Abstract::MultiVector& source);
00108 virtual NOX::Abstract::MultiVector&
00109 augment(const NOX::MultiVector& source);
00110
00112
00114
00119 virtual NOX::Abstract::Vector& operator [] (int i);
00120
00125 virtual const NOX::Abstract::Vector& operator [] (int i) const;
00126
00128
00130
00132 virtual NOX::Abstract::MultiVector&
00133 scale(double gamma);
00134
00139 virtual NOX::Abstract::MultiVector&
00140 update(double alpha, const NOX::Abstract::MultiVector& a,
00141 double gamma = 0.0);
00142 virtual NOX::Abstract::MultiVector&
00143 update(double alpha, const NOX::MultiVector& a,
00144 double gamma = 0.0);
00145
00150 virtual NOX::Abstract::MultiVector&
00151 update(double alpha, const NOX::Abstract::MultiVector& a,
00152 double beta, const NOX::Abstract::MultiVector& b,
00153 double gamma = 0.0);
00154 virtual NOX::Abstract::MultiVector&
00155 update(double alpha, const NOX::MultiVector& a,
00156 double beta, const NOX::MultiVector& b,
00157 double gamma = 0.0);
00158
00165 virtual NOX::Abstract::MultiVector&
00166 update(Teuchos::ETransp transb, double alpha,
00167 const NOX::Abstract::MultiVector& a,
00168 const NOX::Abstract::MultiVector::DenseMatrix& b,
00169 double gamma = 0.0);
00170 virtual NOX::Abstract::MultiVector&
00171 update(Teuchos::ETransp transb, double alpha,
00172 const NOX::MultiVector& a,
00173 const NOX::Abstract::MultiVector::DenseMatrix& b,
00174 double gamma = 0.0);
00175
00177
00179
00193 virtual Teuchos::RCP<NOX::Abstract::MultiVector>
00194 clone(NOX::CopyType type = NOX::DeepCopy) const;
00195
00197 virtual Teuchos::RCP<NOX::Abstract::MultiVector>
00198 clone(int numvecs) const;
00199
00204 virtual Teuchos::RCP<NOX::Abstract::MultiVector>
00205 subCopy(const vector<int>& index) const;
00206
00211 virtual Teuchos::RCP<NOX::Abstract::MultiVector>
00212 subView(const vector<int>& index) const;
00213
00215
00217
00219 virtual void
00220 norm(vector<double>& result,
00221 NOX::Abstract::Vector::NormType type =
00222 NOX::Abstract::Vector::TwoNorm) const;
00223
00225
00227
00231 virtual void multiply(double alpha, const NOX::Abstract::MultiVector& y,
00232 NOX::Abstract::MultiVector::DenseMatrix& b) const;
00233 virtual void multiply(double alpha, const NOX::MultiVector& y,
00234 NOX::Abstract::MultiVector::DenseMatrix& b) const;
00235
00237
00239 virtual int length() const;
00240
00242 virtual int numVectors() const;
00243
00245 virtual void print(std::ostream& stream) const;
00246
00247 protected:
00248
00250 vector< Teuchos::RCP<NOX::Abstract::Vector> > vecs;
00251
00253 MultiVector(int numvecs);
00254
00256 void checkIndex(int idx) const;
00257
00262 void checkSize(int sz) const;
00263
00264 };
00265 }
00266
00267 #endif // NOX_MULTIVECTOR_H