|
Thyra Package Browser (Single Doxygen Collection) Version of the Day
|
00001 // @HEADER 00002 // *********************************************************************** 00003 // 00004 // Thyra: Interfaces and Support for Abstract Numerical Algorithms 00005 // Copyright (2004) Sandia Corporation 00006 // 00007 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive 00008 // license for use of this work by or on behalf of the U.S. Government. 00009 // 00010 // This library is free software; you can redistribute it and/or modify 00011 // it under the terms of the GNU Lesser General Public License as 00012 // published by the Free Software Foundation; either version 2.1 of the 00013 // License, or (at your option) any later version. 00014 // 00015 // This library is distributed in the hope that it will be useful, but 00016 // WITHOUT ANY WARRANTY; without even the implied warranty of 00017 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00018 // Lesser General Public License for more details. 00019 // 00020 // You should have received a copy of the GNU Lesser General Public 00021 // License along with this library; if not, write to the Free Software 00022 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 00023 // USA 00024 // Questions? Contact Michael A. Heroux (maherou@sandia.gov) 00025 // 00026 // *********************************************************************** 00027 // @HEADER 00028 00029 #ifndef THYRA_TPETRA_VECTOR_DECL_HPP 00030 #define THYRA_TPETRA_VECTOR_DECL_HPP 00031 00032 00033 #include "Thyra_SpmdVectorBase_decl.hpp" 00034 #include "Thyra_TpetraVectorSpace_decl.hpp" 00035 #include "Tpetra_Vector.hpp" 00036 #include "Teuchos_ConstNonconstObjectContainer.hpp" 00037 00038 00039 namespace Thyra { 00040 00041 00046 template <class Scalar, class LocalOrdinal, class GlobalOrdinal, class Node> 00047 class TpetraVector : virtual public SpmdVectorBase<Scalar> { 00048 public: 00049 00052 00054 TpetraVector(); 00055 00057 void initialize( 00058 const RCP<const TpetraVectorSpace<Scalar,LocalOrdinal,GlobalOrdinal,Node> > &tpetraVectorSpace, 00059 const RCP<Tpetra::Vector<Scalar,LocalOrdinal,GlobalOrdinal,Node> > &tpetraVector 00060 ); 00061 00063 void constInitialize( 00064 const RCP<const TpetraVectorSpace<Scalar,LocalOrdinal,GlobalOrdinal,Node> > &tpetraVectorSpace, 00065 const RCP<const Tpetra::Vector<Scalar,LocalOrdinal,GlobalOrdinal,Node> > &tpetraVector 00066 ); 00067 00069 RCP<Tpetra::Vector<Scalar,LocalOrdinal,GlobalOrdinal,Node> > 00070 getTpetraVector(); 00071 00073 RCP<const Tpetra::Vector<Scalar,LocalOrdinal,GlobalOrdinal,Node> > 00074 getConstTpetraVector() const; 00075 00077 00080 00082 RCP<const SpmdVectorSpaceBase<Scalar> > spmdSpace() const; 00084 void getNonconstLocalDataImpl(const Ptr<ArrayRCP<Scalar> > &localValues); 00086 void getLocalDataImpl(const Ptr<ArrayRCP<const Scalar> > &localValues) const; 00087 00089 00090 private: 00091 00092 // /////////////////////////////////////// 00093 // Private data members 00094 00095 RCP<const TpetraVectorSpace<Scalar,LocalOrdinal,GlobalOrdinal,Node> > 00096 tpetraVectorSpace_; 00097 00098 Teuchos::ConstNonconstObjectContainer<Tpetra::Vector<Scalar, LocalOrdinal,GlobalOrdinal,Node> > 00099 tpetraVector_; 00100 00101 typedef Tpetra::MultiVector<Scalar, LocalOrdinal,GlobalOrdinal,Node> TpetraMultiVector_t; 00102 00103 // //////////////////////////////////// 00104 // Private member functions 00105 00106 template<class TpetraVector_t> 00107 void initializeImpl( 00108 const RCP<const TpetraVectorSpace<Scalar,LocalOrdinal,GlobalOrdinal,Node> > &tpetraVectorSpace, 00109 const RCP<TpetraVector_t> &tpetraVector 00110 ); 00111 00112 }; 00113 00114 00119 template <class Scalar, class LocalOrdinal, class GlobalOrdinal, class Node> 00120 inline 00121 RCP<TpetraVector<Scalar,LocalOrdinal,GlobalOrdinal,Node> > 00122 tpetraVector( 00123 const RCP<const TpetraVectorSpace<Scalar,LocalOrdinal,GlobalOrdinal,Node> > &tpetraVectorSpace, 00124 const RCP<Tpetra::Vector<Scalar,LocalOrdinal,GlobalOrdinal,Node> > &tpetraVector 00125 ) 00126 { 00127 RCP<TpetraVector<Scalar,LocalOrdinal,GlobalOrdinal,Node> > v = 00128 Teuchos::rcp(new TpetraVector<Scalar,LocalOrdinal,GlobalOrdinal,Node>); 00129 v->initialize(tpetraVectorSpace, tpetraVector); 00130 return v; 00131 } 00132 00133 00138 template <class Scalar, class LocalOrdinal, class GlobalOrdinal, class Node> 00139 inline 00140 RCP<const TpetraVector<Scalar,LocalOrdinal,GlobalOrdinal,Node> > 00141 constTpetraVector( 00142 const RCP<const TpetraVectorSpace<Scalar,LocalOrdinal,GlobalOrdinal,Node> > &tpetraVectorSpace, 00143 const RCP<const Tpetra::Vector<Scalar,LocalOrdinal,GlobalOrdinal,Node> > &tpetraVector 00144 ) 00145 { 00146 RCP<TpetraVector<Scalar,LocalOrdinal,GlobalOrdinal,Node> > v = 00147 Teuchos::rcp(new TpetraVector<Scalar,LocalOrdinal,GlobalOrdinal,Node>); 00148 v->constInitialize(tpetraVectorSpace, tpetraVector); 00149 return v; 00150 } 00151 00152 00153 } // end namespace Thyra 00154 00155 00156 #endif // THYRA_TPETRA_VECTOR_DECL_HPP
1.7.4