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_THYRA_MULTIVECTOR_H
00043 #define NOX_THYRA_MULTIVECTOR_H
00044
00045 #include "NOX_Abstract_MultiVector.H"
00046 #include "Teuchos_RCP.hpp"
00047 #include "Thyra_MultiVectorBase.hpp"
00048
00049 namespace NOX {
00050 namespace Thyra {
00051 class Vector;
00052 }
00053 }
00054
00055
00056
00057
00058
00059 namespace NOX {
00060
00061 namespace Thyra {
00062
00064 class MultiVector : public virtual NOX::Abstract::MultiVector {
00065
00066 public:
00067
00069 MultiVector(
00070 const Teuchos::RCP< ::Thyra::MultiVectorBase<double> >& source);
00071
00073 MultiVector(const ::Thyra::MultiVectorBase<double>& source);
00074
00076 MultiVector(const NOX::Thyra::MultiVector& source,
00077 NOX::CopyType type = NOX::DeepCopy);
00078
00080 ~MultiVector();
00081
00083
00085 virtual Teuchos::RCP< ::Thyra::MultiVectorBase<double> >
00086 getThyraMultiVector();
00087
00089 virtual Teuchos::RCP<const ::Thyra::MultiVectorBase<double> >
00090 getThyraMultiVector() const;
00091
00093
00095
00097 virtual NOX::Abstract::MultiVector&
00098 init(double value);
00099
00101 virtual NOX::Abstract::MultiVector&
00102 random(bool useSeed = false, int seed = 1);
00103
00105 virtual NOX::Abstract::MultiVector&
00106 operator=(const NOX::Abstract::MultiVector& source);
00107
00113 virtual NOX::Abstract::MultiVector&
00114 setBlock(const NOX::Abstract::MultiVector& source,
00115 const vector<int>& index);
00116
00118 virtual NOX::Abstract::MultiVector&
00119 augment(const NOX::Abstract::MultiVector& source);
00120
00122
00124
00129 virtual NOX::Abstract::Vector& operator [] (int i);
00130
00135 virtual const NOX::Abstract::Vector& operator [] (int i) const;
00136
00138
00140
00142 virtual NOX::Abstract::MultiVector&
00143 scale(double gamma);
00144
00149 virtual NOX::Abstract::MultiVector&
00150 update(double alpha, const NOX::Abstract::MultiVector& a,
00151 double gamma = 0.0);
00152
00157 virtual NOX::Abstract::MultiVector&
00158 update(double alpha, const NOX::Abstract::MultiVector& a,
00159 double beta, const NOX::Abstract::MultiVector& b,
00160 double gamma = 0.0);
00161
00168 virtual NOX::Abstract::MultiVector&
00169 update(Teuchos::ETransp transb, double alpha,
00170 const NOX::Abstract::MultiVector& a,
00171 const NOX::Abstract::MultiVector::DenseMatrix& b,
00172 double gamma = 0.0);
00173
00175
00177
00191 virtual Teuchos::RCP<NOX::Abstract::MultiVector>
00192 clone(CopyType type = DeepCopy) const;
00193
00195 virtual Teuchos::RCP<NOX::Abstract::MultiVector>
00196 clone(int numvecs) const;
00197
00202 virtual Teuchos::RCP<NOX::Abstract::MultiVector>
00203 subCopy(const vector<int>& index) const;
00204
00209 virtual Teuchos::RCP<NOX::Abstract::MultiVector>
00210 subView(const vector<int>& index) const;
00211
00213
00215
00217 virtual void
00218 norm(vector<double>& result, NOX::Abstract::Vector::NormType type =
00219 NOX::Abstract::Vector::TwoNorm) const;
00220
00222
00224
00228 virtual void multiply(double alpha, const NOX::Abstract::MultiVector& y,
00229 NOX::Abstract::MultiVector::DenseMatrix& b) const;
00230
00232
00234 virtual int length() const;
00235
00237 virtual int numVectors() const;
00238
00240 virtual void print(std::ostream& stream) const;
00241
00242 protected:
00243
00245 bool isContiguous(const vector<int>& index) const;
00246
00247 protected:
00248
00250 Teuchos::RCP< ::Thyra::MultiVectorBase<double> > thyraMultiVec;
00251
00253
00257 mutable std::vector< Teuchos::RCP<NOX::Thyra::Vector> > noxThyraVectors;
00258
00259 };
00260 }
00261 }
00262
00263 #endif // NOX_THYRA_MULTIVECTOR_H