All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Defines
Xpetra_CrsMatrixFactory.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_CRSMATRIXFACTORY_HPP
00047 #define XPETRA_CRSMATRIXFACTORY_HPP
00048 
00049 #include "Xpetra_ConfigDefs.hpp"
00050 
00051 #include "Xpetra_CrsMatrix.hpp"
00052 
00053 #ifdef HAVE_XPETRA_TPETRA
00054 #include "Xpetra_TpetraCrsMatrix.hpp"
00055 #endif
00056 
00057 #ifdef HAVE_XPETRA_EPETRA
00058 #include "Xpetra_EpetraCrsMatrix.hpp"
00059 #endif
00060 
00061 #include "Xpetra_Exceptions.hpp"
00062 
00063 namespace Xpetra {
00064 
00065   template <class Scalar = CrsMatrix<>::scalar_type,
00066             class LocalOrdinal =
00067               typename CrsMatrix<Scalar>::local_ordinal_type,
00068             class GlobalOrdinal =
00069               typename CrsMatrix<Scalar, LocalOrdinal>::global_ordinal_type,
00070             class Node =
00071               typename CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal>::node_type>
00072   class CrsMatrixFactory {
00073   private:
00075     CrsMatrixFactory() {}
00076 
00077   public:
00079     static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> >
00080     Build (const RCP<const Map<LocalOrdinal, GlobalOrdinal, Node> > &rowMap,
00081            size_t maxNumEntriesPerRow,
00082            Xpetra::ProfileType pftype = Xpetra::DynamicProfile,
00083            const Teuchos::RCP<Teuchos::ParameterList>& plist = Teuchos::null)
00084     {
00085       XPETRA_MONITOR("CrsMatrixFactory::Build");
00086 
00087 #ifdef HAVE_XPETRA_TPETRA
00088       if (rowMap->lib() == UseTpetra)
00089         return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, maxNumEntriesPerRow, pftype, plist) );
00090 #endif
00091 
00092       XPETRA_FACTORY_ERROR_IF_EPETRA(rowMap->lib());
00093       XPETRA_FACTORY_END;
00094     }
00095 
00097     static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> >
00098     Build (const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > >& rowMap,
00099            const ArrayRCP<const size_t>& NumEntriesPerRowToAlloc,
00100            ProfileType pftype = Xpetra::DynamicProfile,
00101            const Teuchos::RCP<Teuchos::ParameterList>& plist = Teuchos::null)
00102     {
00103 #ifdef HAVE_XPETRA_TPETRA
00104       if (rowMap->lib() == UseTpetra)
00105         return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, NumEntriesPerRowToAlloc, pftype, plist) );
00106 #endif
00107 
00108       XPETRA_FACTORY_ERROR_IF_EPETRA(rowMap->lib());
00109       XPETRA_FACTORY_END;
00110     }
00111 
00113     static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> >
00114     Build (const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node> >& rowMap,
00115            const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node> >& colMap,
00116            size_t maxNumEntriesPerRow,
00117            ProfileType pftype = DynamicProfile,
00118            const Teuchos::RCP<Teuchos::ParameterList>& plist = Teuchos::null)
00119     {
00120       XPETRA_MONITOR("CrsMatrixFactory::Build");
00121 
00122 #ifdef HAVE_XPETRA_TPETRA
00123       if (rowMap->lib() == UseTpetra)
00124         return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, colMap, maxNumEntriesPerRow, pftype, plist) );
00125 #endif
00126 
00127       XPETRA_FACTORY_ERROR_IF_EPETRA(rowMap->lib());
00128       XPETRA_FACTORY_END;
00129     }
00130 
00132     static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> > Build(const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &rowMap, const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &colMap, const ArrayRCP< const size_t > &NumEntriesPerRowToAlloc, ProfileType pftype=DynamicProfile, const Teuchos::RCP< Teuchos::ParameterList > &plist=Teuchos::null) {
00133       XPETRA_MONITOR("CrsMatrixFactory::Build");
00134 
00135 #ifdef HAVE_XPETRA_TPETRA
00136       if (rowMap->lib() == UseTpetra)
00137         return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, colMap, NumEntriesPerRowToAlloc, pftype, plist) );
00138 #endif
00139 
00140       XPETRA_FACTORY_ERROR_IF_EPETRA(rowMap->lib());
00141       XPETRA_FACTORY_END;
00142     }
00143 
00145     static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> > Build(const Teuchos::RCP< const CrsGraph< LocalOrdinal, GlobalOrdinal, Node > > &graph, const Teuchos::RCP< Teuchos::ParameterList > &plist=Teuchos::null) {
00146       XPETRA_MONITOR("CrsMatrixFactory::Build");
00147 
00148 #ifdef HAVE_XPETRA_TPETRA
00149       if (graph->getRowMap()->lib() == UseTpetra)
00150         return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(graph, plist) );
00151 #endif
00152 
00153       XPETRA_FACTORY_ERROR_IF_EPETRA(graph->getRowMap()->lib());
00154       XPETRA_FACTORY_END;
00155     }
00156 
00157 
00158     static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> > Build(const Teuchos::RCP< const CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &sourceMatrix, const Import<LocalOrdinal,GlobalOrdinal,Node> &importer, const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & domainMap = Teuchos::null, const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & rangeMap = Teuchos::null,const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null) {
00159       XPETRA_MONITOR("CrsMatrixFactory::Build");
00160 
00161 #ifdef HAVE_XPETRA_TPETRA
00162       if (sourceMatrix->getRowMap()->lib() == UseTpetra)
00163         return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(sourceMatrix,importer,domainMap,rangeMap,params));
00164 #endif
00165 
00166       XPETRA_FACTORY_ERROR_IF_EPETRA(sourceMatrix->getRowMap()->lib());
00167       XPETRA_FACTORY_END;
00168     }
00169 
00170     static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> > Build(const Teuchos::RCP< const CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &sourceMatrix, const Export<LocalOrdinal,GlobalOrdinal,Node> &exporter, const RCP<Map<LocalOrdinal,GlobalOrdinal,Scalar> > & domainMap = Teuchos::null, const RCP<Map<LocalOrdinal,GlobalOrdinal,Scalar> > & rangeMap = Teuchos::null,const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null) {
00171       XPETRA_MONITOR("CrsMatrixFactory::Build");
00172 
00173 #ifdef HAVE_XPETRA_TPETRA
00174       if (sourceMatrix->getRowMap()->lib() == UseTpetra)
00175         return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(sourceMatrix,exporter,domainMap,rangeMap,params));
00176 #endif
00177 
00178       XPETRA_FACTORY_ERROR_IF_EPETRA(sourceMatrix->getRowMap()->lib());
00179       XPETRA_FACTORY_END;
00180     }
00181 
00182   };
00183 
00184   template <>
00185   class CrsMatrixFactory<double, int, int> {
00186     typedef double Scalar;
00187     typedef int LocalOrdinal;
00188     typedef int GlobalOrdinal;
00189     typedef CrsMatrix<double, int, GlobalOrdinal>::node_type Node;
00190 
00191   private:
00193     CrsMatrixFactory() {}
00194 
00195   public:
00196 
00197     static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> > Build(const RCP<const Map<LocalOrdinal, GlobalOrdinal, Node> > &rowMap, size_t maxNumEntriesPerRow, Xpetra::ProfileType pftype = Xpetra::DynamicProfile, const Teuchos::RCP< Teuchos::ParameterList > &plist=Teuchos::null) {
00198       XPETRA_MONITOR("CrsMatrixFactory::Build");
00199 
00200 #ifdef HAVE_XPETRA_TPETRA
00201       if (rowMap->lib() == UseTpetra)
00202         return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, maxNumEntriesPerRow, pftype, plist) );
00203 #endif
00204 
00205 #ifdef HAVE_XPETRA_EPETRA
00206 #ifndef XPETRA_EPETRA_NO_32BIT_GLOBAL_INDICES
00207       if (rowMap->lib() == UseEpetra)
00208         return rcp( new EpetraCrsMatrixT<int>(rowMap, maxNumEntriesPerRow, pftype, plist) );
00209 #endif
00210 #endif
00211 
00212       XPETRA_FACTORY_END;
00213     }
00214 
00215     static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> > Build(const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &rowMap, const ArrayRCP< const size_t > &NumEntriesPerRowToAlloc, ProfileType pftype = Xpetra::DynamicProfile,  const Teuchos::RCP< Teuchos::ParameterList > &plist=Teuchos::null) {
00216       XPETRA_MONITOR("CrsMatrixFactory::Build");
00217 
00218 #ifdef HAVE_XPETRA_TPETRA
00219       if (rowMap->lib() == UseTpetra)
00220         return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, NumEntriesPerRowToAlloc, pftype, plist) );
00221 #endif
00222 
00223 #ifdef HAVE_XPETRA_EPETRA
00224 #ifndef XPETRA_EPETRA_NO_32BIT_GLOBAL_INDICES
00225       if (rowMap->lib() == UseEpetra)
00226         return rcp( new EpetraCrsMatrixT<int>(rowMap, NumEntriesPerRowToAlloc, pftype, plist) );
00227 #endif
00228 #endif
00229 
00230       XPETRA_FACTORY_END;
00231     }
00232 
00234     static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> > Build(const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &rowMap, const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &colMap, size_t maxNumEntriesPerRow, ProfileType pftype=DynamicProfile, const Teuchos::RCP< Teuchos::ParameterList > &plist=Teuchos::null) {
00235       XPETRA_MONITOR("CrsMatrixFactory::Build");
00236 
00237 #ifdef HAVE_XPETRA_TPETRA
00238       if (rowMap->lib() == UseTpetra)
00239         return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, colMap, maxNumEntriesPerRow, pftype, plist) );
00240 #endif
00241 
00242 #ifdef HAVE_XPETRA_EPETRA
00243 #ifndef XPETRA_EPETRA_NO_32BIT_GLOBAL_INDICES
00244       if (rowMap->lib() == UseEpetra)
00245         return rcp( new EpetraCrsMatrixT<int>(rowMap, colMap, maxNumEntriesPerRow, pftype, plist) );
00246 #endif
00247 #endif
00248 
00249       XPETRA_FACTORY_END;
00250     }
00251 
00253     static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> > Build(const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &rowMap, const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &colMap, const ArrayRCP< const size_t > &NumEntriesPerRowToAlloc, ProfileType pftype=DynamicProfile, const Teuchos::RCP< Teuchos::ParameterList > &plist=Teuchos::null) {
00254       XPETRA_MONITOR("CrsMatrixFactory::Build");
00255 
00256 #ifdef HAVE_XPETRA_TPETRA
00257       if (rowMap->lib() == UseTpetra)
00258         return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, colMap, NumEntriesPerRowToAlloc, pftype, plist) );
00259 #endif
00260 
00261 #ifdef HAVE_XPETRA_EPETRA
00262 #ifndef XPETRA_EPETRA_NO_32BIT_GLOBAL_INDICES
00263       if (rowMap->lib() == UseEpetra)
00264         return rcp( new EpetraCrsMatrixT<int>(rowMap, colMap, NumEntriesPerRowToAlloc, pftype, plist) );
00265 #endif
00266 #endif
00267 
00268       XPETRA_FACTORY_END;
00269     }
00270 
00272     static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> > Build(const Teuchos::RCP< const CrsGraph< LocalOrdinal, GlobalOrdinal, Node > > &graph, const Teuchos::RCP< Teuchos::ParameterList > &plist=Teuchos::null) {
00273       XPETRA_MONITOR("CrsMatrixFactory::Build");
00274 
00275 #ifdef HAVE_XPETRA_TPETRA
00276       if (graph->getRowMap()->lib() == UseTpetra)
00277         return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(graph, plist) );
00278 #endif
00279 
00280 #ifdef HAVE_XPETRA_EPETRA
00281 #ifndef XPETRA_EPETRA_NO_32BIT_GLOBAL_INDICES
00282       if (graph->getRowMap()->lib() == UseEpetra)
00283         return rcp( new EpetraCrsMatrixT<int>(graph, plist) );
00284 #endif
00285 #endif
00286 
00287       XPETRA_FACTORY_END;
00288     }
00289 
00290 
00292     static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> > Build(const Teuchos::RCP< const CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &sourceMatrix, const Import<LocalOrdinal,GlobalOrdinal,Node> &importer, const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & domainMap = Teuchos::null, const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & rangeMap = Teuchos::null,const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null) {
00293       XPETRA_MONITOR("CrsMatrixFactory::Build");
00294 
00295 #ifdef HAVE_XPETRA_TPETRA
00296       if (sourceMatrix->getRowMap()->lib() == UseTpetra)
00297         return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(sourceMatrix,importer,domainMap,rangeMap,params) );
00298 
00299 #endif
00300 
00301 #ifdef HAVE_XPETRA_EPETRA
00302 #ifndef XPETRA_EPETRA_NO_32BIT_GLOBAL_INDICES
00303       if (sourceMatrix->getRowMap()->lib() == UseEpetra)
00304         return rcp( new EpetraCrsMatrixT<int>(sourceMatrix,importer,domainMap,rangeMap,params) );
00305 #endif
00306 #endif
00307 
00308       XPETRA_FACTORY_END;
00309     }
00310 
00312     static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> > Build(const Teuchos::RCP< const CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &sourceMatrix, const Export<LocalOrdinal,GlobalOrdinal,Node> &exporter, const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & domainMap = Teuchos::null, const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & rangeMap = Teuchos::null,const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null) {
00313       XPETRA_MONITOR("CrsMatrixFactory::Build");
00314 
00315 #ifdef HAVE_XPETRA_TPETRA
00316       if (sourceMatrix->getRowMap()->lib() == UseTpetra)
00317         return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(sourceMatrix,exporter,domainMap,rangeMap,params) );
00318 
00319 #endif
00320 
00321 #ifdef HAVE_XPETRA_EPETRA
00322 #ifndef XPETRA_EPETRA_NO_32BIT_GLOBAL_INDICES
00323       if (sourceMatrix->getRowMap()->lib() == UseEpetra)
00324         return rcp( new EpetraCrsMatrixT<int>(sourceMatrix,exporter,domainMap,rangeMap,params) );
00325 #endif
00326 #endif
00327 
00328       XPETRA_FACTORY_END;
00329     }
00330 
00331   };
00332 
00333 #ifdef HAVE_TEUCHOS_LONG_LONG_INT
00334   template <>
00335   class CrsMatrixFactory<double, int, long long> {
00336     typedef double Scalar;
00337     typedef int LocalOrdinal;
00338     typedef long long GlobalOrdinal;
00339     typedef CrsMatrix<double, int, GlobalOrdinal>::node_type Node;
00340 
00341   private:
00343     CrsMatrixFactory() {}
00344 
00345   public:
00346 
00347     static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> > Build(const RCP<const Map<LocalOrdinal, GlobalOrdinal, Node> > &rowMap, size_t maxNumEntriesPerRow, Xpetra::ProfileType pftype = Xpetra::DynamicProfile, const Teuchos::RCP< Teuchos::ParameterList > &plist=Teuchos::null) {
00348       XPETRA_MONITOR("CrsMatrixFactory::Build");
00349 
00350 #ifdef HAVE_XPETRA_TPETRA
00351       if (rowMap->lib() == UseTpetra)
00352         return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, maxNumEntriesPerRow, pftype, plist) );
00353 #endif
00354 
00355 #ifdef HAVE_XPETRA_EPETRA
00356 #ifndef XPETRA_EPETRA_NO_64BIT_GLOBAL_INDICES
00357       if (rowMap->lib() == UseEpetra)
00358         return rcp( new EpetraCrsMatrixT<long long>(rowMap, maxNumEntriesPerRow, pftype, plist) );
00359 #endif
00360 #endif
00361 
00362       XPETRA_FACTORY_END;
00363     }
00364 
00365     static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> > Build(const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &rowMap, const ArrayRCP< const size_t > &NumEntriesPerRowToAlloc, ProfileType pftype = Xpetra::DynamicProfile,  const Teuchos::RCP< Teuchos::ParameterList > &plist=Teuchos::null) {
00366       XPETRA_MONITOR("CrsMatrixFactory::Build");
00367 
00368 #ifdef HAVE_XPETRA_TPETRA
00369       if (rowMap->lib() == UseTpetra)
00370         return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, NumEntriesPerRowToAlloc, pftype, plist) );
00371 #endif
00372 
00373 #ifdef HAVE_XPETRA_EPETRA
00374 #ifndef XPETRA_EPETRA_NO_64BIT_GLOBAL_INDICES
00375       if (rowMap->lib() == UseEpetra)
00376         return rcp( new EpetraCrsMatrixT<long long>(rowMap, NumEntriesPerRowToAlloc, pftype, plist) );
00377 #endif
00378 #endif
00379 
00380       XPETRA_FACTORY_END;
00381     }
00382 
00384     static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> > Build(const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &rowMap, const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &colMap, size_t maxNumEntriesPerRow, ProfileType pftype=DynamicProfile, const Teuchos::RCP< Teuchos::ParameterList > &plist=Teuchos::null) {
00385       XPETRA_MONITOR("CrsMatrixFactory::Build");
00386 
00387 #ifdef HAVE_XPETRA_TPETRA
00388       if (rowMap->lib() == UseTpetra)
00389         return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, colMap, maxNumEntriesPerRow, pftype, plist) );
00390 #endif
00391 
00392 #ifdef HAVE_XPETRA_EPETRA
00393 #ifndef XPETRA_EPETRA_NO_64BIT_GLOBAL_INDICES
00394       if (rowMap->lib() == UseEpetra)
00395         return rcp( new EpetraCrsMatrixT<long long>(rowMap, colMap, maxNumEntriesPerRow, pftype, plist) );
00396 #endif
00397 #endif
00398 
00399       XPETRA_FACTORY_END;
00400     }
00401 
00403     static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> > Build(const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &rowMap, const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &colMap, const ArrayRCP< const size_t > &NumEntriesPerRowToAlloc, ProfileType pftype=DynamicProfile, const Teuchos::RCP< Teuchos::ParameterList > &plist=Teuchos::null) {
00404       XPETRA_MONITOR("CrsMatrixFactory::Build");
00405 
00406 #ifdef HAVE_XPETRA_TPETRA
00407       if (rowMap->lib() == UseTpetra)
00408         return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(rowMap, colMap, NumEntriesPerRowToAlloc, pftype, plist) );
00409 #endif
00410 
00411 #ifdef HAVE_XPETRA_EPETRA
00412 #ifndef XPETRA_EPETRA_NO_64BIT_GLOBAL_INDICES
00413       if (rowMap->lib() == UseEpetra)
00414         return rcp( new EpetraCrsMatrixT<long long>(rowMap, colMap, NumEntriesPerRowToAlloc, pftype, plist) );
00415 #endif
00416 #endif
00417 
00418       XPETRA_FACTORY_END;
00419     }
00420 
00422     static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> > Build(const Teuchos::RCP< const CrsGraph< LocalOrdinal, GlobalOrdinal, Node > > &graph, const Teuchos::RCP< Teuchos::ParameterList > &plist=Teuchos::null) {
00423       XPETRA_MONITOR("CrsMatrixFactory::Build");
00424 
00425 #ifdef HAVE_XPETRA_TPETRA
00426       if (graph->getRowMap()->lib() == UseTpetra)
00427         return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(graph, plist) );
00428 #endif
00429 
00430 #ifdef HAVE_XPETRA_EPETRA
00431 #ifndef XPETRA_EPETRA_NO_64BIT_GLOBAL_INDICES
00432       if (graph->getRowMap()->lib() == UseEpetra)
00433         return rcp( new EpetraCrsMatrixT<long long>(graph, plist) );
00434 #endif
00435 #endif
00436 
00437       XPETRA_FACTORY_END;
00438     }
00439 
00440 
00442     static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> > Build(const Teuchos::RCP< const CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &sourceMatrix, const Import<LocalOrdinal,GlobalOrdinal,Node> &importer, const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & domainMap = Teuchos::null, const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & rangeMap = Teuchos::null,const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null) {
00443       XPETRA_MONITOR("CrsMatrixFactory::Build");
00444 
00445 #ifdef HAVE_XPETRA_TPETRA
00446       if (sourceMatrix->getRowMap()->lib() == UseTpetra)
00447         return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(sourceMatrix,importer,domainMap,rangeMap,params) );
00448 
00449 #endif
00450 
00451 #ifdef HAVE_XPETRA_EPETRA
00452 #ifndef XPETRA_EPETRA_NO_64BIT_GLOBAL_INDICES
00453       if (sourceMatrix->getRowMap()->lib() == UseEpetra)
00454         return rcp( new EpetraCrsMatrixT<long long>(sourceMatrix,importer,domainMap,rangeMap,params) );
00455 #endif
00456 #endif
00457 
00458       XPETRA_FACTORY_END;
00459     }
00460 
00462     static RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> > Build(const Teuchos::RCP< const CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &sourceMatrix, const Export<LocalOrdinal,GlobalOrdinal,Node> &exporter, const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & domainMap = Teuchos::null, const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > & rangeMap = Teuchos::null,const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null) {
00463       XPETRA_MONITOR("CrsMatrixFactory::Build");
00464 
00465 #ifdef HAVE_XPETRA_TPETRA
00466       if (sourceMatrix->getRowMap()->lib() == UseTpetra)
00467         return rcp( new TpetraCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>(sourceMatrix,exporter,domainMap,rangeMap,params) );
00468 
00469 #endif
00470 
00471 #ifdef HAVE_XPETRA_EPETRA
00472 #ifndef XPETRA_EPETRA_NO_64BIT_GLOBAL_INDICES
00473       if (sourceMatrix->getRowMap()->lib() == UseEpetra)
00474         return rcp( new EpetraCrsMatrixT<long long>(sourceMatrix,exporter,domainMap,rangeMap,params) );
00475 #endif
00476 #endif
00477 
00478       XPETRA_FACTORY_END;
00479     }
00480 
00481   };
00482 #endif // HAVE_TEUCHOS_LONG_LONG_INT
00483 
00484 }
00485 
00486 #define XPETRA_CRSMATRIXFACTORY_SHORT
00487 #endif
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Defines