All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Defines
Xpetra_TpetraVbrMatrix.hpp
Go to the documentation of this file.
00001 // @HEADER
00002 //
00003 // ***********************************************************************
00004 //
00005 //             Xpetra: A linear algebra interface package
00006 //                  Copyright 2012 Sandia Corporation
00007 //
00008 // Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
00009 // the U.S. Government retains certain rights in this software.
00010 //
00011 // Redistribution and use in source and binary forms, with or without
00012 // modification, are permitted provided that the following conditions are
00013 // met:
00014 //
00015 // 1. Redistributions of source code must retain the above copyright
00016 // notice, this list of conditions and the following disclaimer.
00017 //
00018 // 2. Redistributions in binary form must reproduce the above copyright
00019 // notice, this list of conditions and the following disclaimer in the
00020 // documentation and/or other materials provided with the distribution.
00021 //
00022 // 3. Neither the name of the Corporation nor the names of the
00023 // contributors may be used to endorse or promote products derived from
00024 // this software without specific prior written permission.
00025 //
00026 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
00027 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00028 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
00029 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
00030 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
00031 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
00032 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
00033 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
00034 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
00035 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
00036 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00037 //
00038 // Questions? Contact
00039 //                    Jonathan Hu       (jhu@sandia.gov)
00040 //                    Andrey Prokopenko (aprokop@sandia.gov)
00041 //                    Ray Tuminaro      (rstumin@sandia.gov)
00042 //
00043 // ***********************************************************************
00044 //
00045 // @HEADER
00046 #ifndef XPETRA_TPETRAVBRMATRIX_HPP
00047 #define XPETRA_TPETRAVBRMATRIX_HPP
00048 
00049 #include "Xpetra_ConfigDefs.hpp"
00050 
00051 #ifndef HAVE_XPETRA_TPETRA
00052 #error This file should be included only if HAVE_XPETRA_TPETRA is defined.
00053 #endif
00054 
00055 #include "Xpetra_VbrMatrix.hpp"
00056 #include <Tpetra_VbrMatrix.hpp>
00057 
00058 namespace Xpetra {
00059 
00060   template <class Scalar = VbrMatrix<>::scalar_type,
00061             class LocalOrdinal =
00062               typename VbrMatrix<Scalar>::local_ordinal_type,
00063             class GlobalOrdinal =
00064               typename VbrMatrix<Scalar, LocalOrdinal>::global_ordinal_type,
00065             class Node =
00066               typename VbrMatrix<Scalar, LocalOrdinal, GlobalOrdinal>::node_type>
00067   class TpetraVbrMatrix :
00068     public VbrMatrix<Scalar,LocalOrdinal,GlobalOrdinal,Node, LocalOrdinal> {
00069   public:
00070 
00072 
00073 
00074     TpetraVbrMatrix(const Teuchos::RCP<const Tpetra::VbrMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> > &mtx) : mtx_(mtx) {  } //TODO
00075 
00077     virtual ~TpetraVbrMatrix();
00078 
00080 
00082 
00083 
00085 
00087     const Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & getDomainMap() const {  return mtx_->getDomainMap(); }
00088 
00090 
00092     const Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & getRangeMap() const {  return mtx_->getRangeMap(); }
00093 
00095 
00100     void apply(const MultiVector<Scalar,LocalOrdinal,GlobalOrdinal,Node> &X,
00101                       MultiVector<Scalar,LocalOrdinal,GlobalOrdinal,Node> &Y,
00102                       Teuchos::ETransp trans = Teuchos::NO_TRANS,
00103                       Scalar alpha = Teuchos::ScalarTraits<Scalar>::one(),
00104                       Scalar beta = Teuchos::ScalarTraits<Scalar>::zero()) const {  mtx_->apply(X,Y,trans,alpha,beta); }
00105 
00107 
00110     void applyInverse(const MultiVector<Scalar,LocalOrdinal,GlobalOrdinal,Node> & Y,
00111                              MultiVector<Scalar,LocalOrdinal,GlobalOrdinal,Node> &X,
00112                              Teuchos::ETransp trans) const {  mtx_->applyInverse(Y,X,trans); }
00113 
00115     bool hasTransposeApply() const {  return mtx_->hasTransposeApply(); }
00116 
00118 
00120 
00121 
00123     const Teuchos::RCP<const BlockMap<LocalOrdinal,GlobalOrdinal,Node> > & getBlockRowMap() const {  return mtx_->getBlockRowMap(); }
00124 
00126     const Teuchos::RCP<const BlockMap<LocalOrdinal,GlobalOrdinal,Node> > & getBlockColMap() const {  return mtx_->getBlockColMap(); }
00127 
00129     const Teuchos::RCP<const BlockMap<LocalOrdinal,GlobalOrdinal,Node> > & getBlockDomainMap() const {  return mtx_->getBlockDomainMap(); }
00130 
00132     const Teuchos::RCP<const BlockMap<LocalOrdinal,GlobalOrdinal,Node> > & getBlockRangeMap() const {  return mtx_->getBlockRangeMap(); }
00133 
00135     const Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & getPointRowMap() const {  return mtx_->getPointRowMap(); }
00136 
00138     const Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & getPointColMap() const {  return mtx_->getPointColMap(); }
00139 
00141     bool isFillComplete() const {  return mtx_->isFillComplete(); }
00143 
00145 
00146 
00148 
00151     void putScalar(Scalar s) {  mtx_->putScalar(s); }
00152 
00154 
00163     void setGlobalBlockEntry(GlobalOrdinal globalBlockRow, GlobalOrdinal globalBlockCol, const Teuchos::SerialDenseMatrix<GlobalOrdinal,Scalar>& blockEntry) {  mtx_->setGlobalBlockEntry(globalBlockRow, globalBlockCol, blockEntry); }
00164 
00166 
00173     void setLocalBlockEntry(LocalOrdinal localBlockRow, LocalOrdinal localBlockCol, const Teuchos::SerialDenseMatrix<LocalOrdinal,Scalar>& blockEntry) {  mtx_->setLocalBlockEntry(localBlockRow, localBlockCol, blockEntry); }
00174 
00176 
00185     void sumIntoGlobalBlockEntry(GlobalOrdinal globalBlockRow, GlobalOrdinal globalBlockCol, const Teuchos::SerialDenseMatrix<GlobalOrdinal,Scalar>& blockEntry) {  mtx_->sumIntoGlobalBlockEntry(globalBlockRow, globalBlockCol, blockEntry); }
00186 
00188 
00195     void sumIntoLocalBlockEntry(LocalOrdinal localBlockRow, LocalOrdinal localBlockCol, const Teuchos::SerialDenseMatrix<LocalOrdinal,Scalar>& blockEntry) {  mtx_->sumIntoLocalBlockEntry(localBlockRow, localBlockCol, blockEntry); }
00196 
00198 
00207     void setGlobalBlockEntry(GlobalOrdinal globalBlockRow, GlobalOrdinal globalBlockCol, LocalOrdinal blkRowSize, LocalOrdinal blkColSize, LocalOrdinal LDA, const Teuchos::ArrayView<const Scalar>& blockEntry) {  mtx_->setGlobalBlockEntry(globalBlockRow, globalBlockCol, blkRowSize, blkColSize, LDA, blockEntry); }
00208 
00210 
00217     void setLocalBlockEntry(LocalOrdinal localBlockRow, LocalOrdinal localBlockCol, LocalOrdinal blkRowSize, LocalOrdinal blkColSize, LocalOrdinal LDA, const Teuchos::ArrayView<const Scalar>& blockEntry) {  mtx_->setLocalBlockEntry(localBlockRow, localBlockCol, blkRowSize, blkColSize, LDA, blockEntry); }
00218 
00220 
00229     void sumIntoGlobalBlockEntry(GlobalOrdinal globalBlockRow, GlobalOrdinal globalBlockCol, LocalOrdinal blkRowSize, LocalOrdinal blkColSize, LocalOrdinal LDA, const Teuchos::ArrayView<const Scalar>& blockEntry) {  mtx_->sumIntoGlobalBlockEntry(globalBlockRow, globalBlockCol, blkRowSize, blkColSize, LDA, blockEntry); }
00230 
00232 
00239     void sumIntoLocalBlockEntry(LocalOrdinal localBlockRow, LocalOrdinal localBlockCol, LocalOrdinal blkRowSize, LocalOrdinal blkColSize, LocalOrdinal LDA, const Teuchos::ArrayView<const Scalar>& blockEntry) {  mtx_->sumIntoLocalBlockEntry(localBlockRow, localBlockCol, blkRowSize, blkColSize, LDA, blockEntry); }
00240 
00242 
00244 
00245 
00247 
00250     void fillComplete(const Teuchos::RCP<const BlockMap<LocalOrdinal,GlobalOrdinal,Node> >& blockDomainMap, const Teuchos::RCP<const BlockMap<LocalOrdinal,GlobalOrdinal,Node> >& blockRangeMap) {  mtx_->fillComplete(blockDomainMap, blockRangeMap); }
00251 
00253 
00256     void fillComplete() {  mtx_->fillComplete(); }
00258 
00260 
00261 
00263 
00271     void getGlobalBlockEntryView(GlobalOrdinal globalBlockRow,
00272                                         GlobalOrdinal globalBlockCol,
00273                                         LocalOrdinal& numPtRows,
00274                                         LocalOrdinal& numPtCols,
00275                                         Teuchos::ArrayRCP<const Scalar>& blockEntry) const {  mtx_->getGlobalBlockEntryView(globalBlockRow, globalBlockCol, numPtRows, numPtCols, blockEntry); }
00276 
00278 
00288     void getGlobalBlockEntryViewNonConst(GlobalOrdinal globalBlockRow,
00289                                                 GlobalOrdinal globalBlockCol,
00290                                                 LocalOrdinal& numPtRows,
00291                                                 LocalOrdinal& numPtCols,
00292                                                 Teuchos::ArrayRCP<Scalar>& blockEntry) {  mtx_->getGlobalBlockEntryViewNonConst(globalBlockRow, globalBlockCol, numPtRows, numPtCols, blockEntry); }
00293 
00295 
00305     void getLocalBlockEntryView(LocalOrdinal localBlockRow,
00306                                        LocalOrdinal localBlockCol,
00307                                        LocalOrdinal& numPtRows,
00308                                        LocalOrdinal& numPtCols,
00309                                        Teuchos::ArrayRCP<const Scalar>& blockEntry) const {  mtx_->getLocalBlockEntryView(localBlockRow, localBlockCol, numPtRows, numPtCols, blockEntry); }
00310 
00312 
00328     void getLocalBlockEntryViewNonConst(LocalOrdinal localBlockRow,
00329                                                LocalOrdinal localBlockCol,
00330                                                LocalOrdinal& numPtRows,
00331                                                LocalOrdinal& numPtCols,
00332                                                Teuchos::ArrayRCP<Scalar>& blockEntry) {  mtx_->getLocalBlockEntryViewNonConst(localBlockRow, localBlockCol, numPtRows, numPtCols, blockEntry); }
00333 
00335 
00337 
00338     std::string description() const {  return mtx_->description(); }
00339 
00342     void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel=Teuchos::Describable::verbLevel_default) const {  mtx_->describable(); }
00344 
00345     RCP< const Tpetra::VbrMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> > getTpetra_VbrMatrix() const {  return mtx_; }
00346 
00347   private:
00348 
00349     const RCP< const Tpetra::VbrMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> > mtx_;
00350 
00351   };//class VbrMatrix
00352 
00353 }//namespace Xpetra
00354 
00355 #define XPETRA_TPETRAVBRMATRIX_SHORT
00356 #endif //XPETRA_VBRMATRIX_DECL_HPP
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Defines