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
00043
00044
00045
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