|
Zoltan2
|
00001 // @HEADER 00002 // 00003 // *********************************************************************** 00004 // 00005 // Zoltan2: A package of combinatorial algorithms for scientific computing 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 Karen Devine (kddevin@sandia.gov) 00039 // Erik Boman (egboman@sandia.gov) 00040 // Siva Rajamanickam (srajama@sandia.gov) 00041 // 00042 // *********************************************************************** 00043 // 00044 // @HEADER 00045 00050 #ifndef ZOLTAN2_INPUTTRAITS_HPP 00051 #define ZOLTAN2_INPUTTRAITS_HPP 00052 00053 #include <Zoltan2_Standards.hpp> 00054 00055 #include <Tpetra_CrsMatrix.hpp> 00056 #include <Tpetra_RowMatrix.hpp> 00057 #include <Tpetra_CrsGraph.hpp> 00058 #include <Epetra_CrsMatrix.h> 00059 #include <Epetra_CrsGraph.h> 00060 #include <Xpetra_CrsMatrix.hpp> 00061 #include <Xpetra_RowMatrix.hpp> 00062 #include <Xpetra_TpetraRowMatrix.hpp> 00063 #include <Xpetra_CrsGraph.hpp> 00064 00065 namespace Zoltan2{ 00066 00067 typedef int default_lno_t; 00068 00069 typedef int default_part_t; // Default part number type. 00070 // Restrictions in MPI interface will make it 00071 // somewhat difficult to change default_part_t to 00072 // long long, since we use part_t for ranks 00073 // and we sometimes broadcast arrays whose 00074 // size has type part_t. 00075 00076 #ifdef HAVE_ZOLTAN2_INST_FLOAT_INT_LONG 00077 typedef float default_scalar_t; 00078 typedef long default_gno_t; 00079 #else 00080 #ifdef HAVE_ZOLTAN2_INST_DOUBLE_INT_LONG 00081 typedef double default_scalar_t; 00082 typedef long default_gno_t; 00083 #else 00084 #ifdef HAVE_ZOLTAN2_INST_FLOAT_INT_INT 00085 typedef float default_scalar_t; 00086 typedef int default_gno_t; 00087 #else 00088 #ifdef HAVE_ZOLTAN2_INST_DOUBLE_INT_INT 00089 typedef double default_scalar_t; 00090 typedef int default_gno_t; 00091 #else 00092 typedef double default_scalar_t; 00093 typedef int default_gno_t; 00094 #endif 00095 #endif 00096 #endif 00097 #endif 00098 00141 template <typename scalar=double, typename gid=int, 00142 typename lno=int, typename gno=int> 00143 class BasicUserTypes{ 00144 }; 00145 00180 template <typename User> 00181 struct InputTraits { 00182 00185 typedef default_scalar_t scalar_t; 00186 00190 typedef default_lno_t lno_t; 00191 00195 typedef default_gno_t gno_t; 00196 00203 typedef default_gno_t zgid_t; 00204 00207 typedef default_part_t part_t; 00208 00212 typedef KokkosClassic::DefaultNode::DefaultNodeType node_t; 00213 00216 static inline std::string name() {return "InputAdapter";} 00217 }; 00218 00219 #ifndef DOXYGEN_SHOULD_SKIP_THIS 00220 00221 template <typename Scalar, 00222 typename GID, 00223 typename LNO, 00224 typename GNO> 00225 struct InputTraits<BasicUserTypes<Scalar, GID, LNO, GNO> > 00226 { 00227 typedef Scalar scalar_t; 00228 typedef LNO lno_t; 00229 typedef GNO gno_t; 00230 typedef GID zgid_t; 00231 typedef Zoltan2::default_part_t part_t; 00232 typedef Zoltan2::default_node_t node_t; 00233 static inline std::string name() {return "BasicUserTypes";} 00234 }; 00235 00236 template <typename Scalar, 00237 typename LocalOrdinal, 00238 typename GlobalOrdinal, 00239 typename Node> 00240 struct InputTraits<Xpetra::CrsMatrix<Scalar,LocalOrdinal,GlobalOrdinal,Node> > 00241 { 00242 typedef Scalar scalar_t; 00243 typedef LocalOrdinal lno_t; 00244 typedef GlobalOrdinal gno_t; 00245 typedef GlobalOrdinal zgid_t; 00246 typedef Zoltan2::default_part_t part_t; 00247 typedef Node node_t; 00248 static inline std::string name() {return "Xpetra::CrsMatrix";} 00249 }; 00250 00251 template <typename Scalar, 00252 typename LocalOrdinal, 00253 typename GlobalOrdinal, 00254 typename Node> 00255 struct InputTraits<Tpetra::CrsMatrix<Scalar,LocalOrdinal,GlobalOrdinal,Node> > 00256 { 00257 typedef Scalar scalar_t; 00258 typedef LocalOrdinal lno_t; 00259 typedef GlobalOrdinal gno_t; 00260 typedef GlobalOrdinal zgid_t; 00261 typedef Zoltan2::default_part_t part_t; 00262 typedef Node node_t; 00263 static inline std::string name() {return "Tpetra::CrsMatrix";} 00264 }; 00265 00266 template < > 00267 struct InputTraits<Epetra_CrsMatrix> 00268 { 00269 typedef double scalar_t; 00270 typedef int lno_t; 00271 typedef int gno_t; 00272 typedef int zgid_t; 00273 typedef Zoltan2::default_part_t part_t; 00274 typedef KokkosClassic::DefaultNode::DefaultNodeType node_t; 00275 static inline std::string name() {return "Epetra_CrsMatrix";} 00276 }; 00277 00278 template <typename Scalar, 00279 typename LocalOrdinal, 00280 typename GlobalOrdinal, 00281 typename Node> 00282 struct InputTraits<Xpetra::RowMatrix<Scalar,LocalOrdinal,GlobalOrdinal,Node> > 00283 { 00284 typedef Scalar scalar_t; 00285 typedef LocalOrdinal lno_t; 00286 typedef GlobalOrdinal gno_t; 00287 typedef GlobalOrdinal zgid_t; 00288 typedef Zoltan2::default_part_t part_t; 00289 typedef Node node_t; 00290 static inline std::string name() {return "Xpetra::RowMatrix";} 00291 }; 00292 00293 template <typename Scalar, 00294 typename LocalOrdinal, 00295 typename GlobalOrdinal, 00296 typename Node> 00297 struct InputTraits<Tpetra::RowMatrix<Scalar,LocalOrdinal,GlobalOrdinal,Node> > 00298 { 00299 typedef Scalar scalar_t; 00300 typedef LocalOrdinal lno_t; 00301 typedef GlobalOrdinal gno_t; 00302 typedef GlobalOrdinal zgid_t; 00303 typedef Zoltan2::default_part_t part_t; 00304 typedef Node node_t; 00305 static inline std::string name() {return "Tpetra::RowMatrix";} 00306 }; 00307 00308 template <typename LocalOrdinal, 00309 typename GlobalOrdinal, 00310 typename Node> 00311 struct InputTraits<Xpetra::CrsGraph<LocalOrdinal,GlobalOrdinal,Node> > 00312 { 00313 typedef default_scalar_t scalar_t; 00314 typedef LocalOrdinal lno_t; 00315 typedef GlobalOrdinal gno_t; 00316 typedef GlobalOrdinal zgid_t; 00317 typedef Zoltan2::default_part_t part_t; 00318 typedef Node node_t; 00319 static inline std::string name() {return "Xpetra::CrsGraph";} 00320 }; 00321 00322 template <typename LocalOrdinal, 00323 typename GlobalOrdinal, 00324 typename Node> 00325 struct InputTraits<Tpetra::CrsGraph<LocalOrdinal,GlobalOrdinal,Node> > 00326 { 00327 typedef default_scalar_t scalar_t; 00328 typedef LocalOrdinal lno_t; 00329 typedef GlobalOrdinal gno_t; 00330 typedef GlobalOrdinal zgid_t; 00331 typedef Zoltan2::default_part_t part_t; 00332 typedef Node node_t; 00333 static inline std::string name() {return "Tpetra::CrsGraph";} 00334 }; 00335 00336 template < > 00337 struct InputTraits<Epetra_CrsGraph> 00338 { 00339 typedef double scalar_t; 00340 typedef int lno_t; 00341 typedef int gno_t; 00342 typedef int zgid_t; 00343 typedef Zoltan2::default_part_t part_t; 00344 typedef KokkosClassic::DefaultNode::DefaultNodeType node_t; 00345 static inline std::string name() {return "Epetra_CrsGraph";} 00346 }; 00347 00348 template <typename Scalar, 00349 typename LocalOrdinal, 00350 typename GlobalOrdinal, 00351 typename Node> 00352 struct InputTraits<Xpetra::Vector<Scalar,LocalOrdinal,GlobalOrdinal,Node> > 00353 { 00354 typedef Scalar scalar_t; 00355 typedef LocalOrdinal lno_t; 00356 typedef GlobalOrdinal gno_t; 00357 typedef GlobalOrdinal zgid_t; 00358 typedef Zoltan2::default_part_t part_t; 00359 typedef Node node_t; 00360 static inline std::string name() {return "Xpetra::Vector";} 00361 }; 00362 00366 template <typename Scalar, 00367 typename LocalOrdinal, 00368 typename GlobalOrdinal, 00369 typename Node> 00370 struct InputTraits<Tpetra::Vector<Scalar,LocalOrdinal,GlobalOrdinal,Node> > 00371 { 00372 typedef Scalar scalar_t; 00373 typedef LocalOrdinal lno_t; 00374 typedef GlobalOrdinal gno_t; 00375 typedef GlobalOrdinal zgid_t; 00376 typedef Zoltan2::default_part_t part_t; 00377 typedef Node node_t; 00378 static inline std::string name() {return "Tpetra::Vector";} 00379 }; 00380 00381 template < > 00382 struct InputTraits<Epetra_Vector> 00383 { 00384 typedef double scalar_t; 00385 typedef int lno_t; 00386 typedef int gno_t; 00387 typedef int zgid_t; 00388 typedef Zoltan2::default_part_t part_t; 00389 typedef KokkosClassic::DefaultNode::DefaultNodeType node_t; 00390 static inline std::string name() {return "Epetra_Vector";} 00391 }; 00392 00393 template <typename Scalar, 00394 typename LocalOrdinal, 00395 typename GlobalOrdinal, 00396 typename Node> 00397 struct InputTraits<Xpetra::MultiVector<Scalar,LocalOrdinal,GlobalOrdinal,Node> > 00398 { 00399 typedef Scalar scalar_t; 00400 typedef LocalOrdinal lno_t; 00401 typedef GlobalOrdinal gno_t; 00402 typedef GlobalOrdinal zgid_t; 00403 typedef Zoltan2::default_part_t part_t; 00404 typedef Node node_t; 00405 static inline std::string name() {return "Xpetra::MultiVector";} 00406 }; 00407 00408 template <typename Scalar, 00409 typename LocalOrdinal, 00410 typename GlobalOrdinal, 00411 typename Node> 00412 struct InputTraits<Tpetra::MultiVector<Scalar,LocalOrdinal,GlobalOrdinal,Node> > 00413 { 00414 typedef Scalar scalar_t; 00415 typedef LocalOrdinal lno_t; 00416 typedef GlobalOrdinal gno_t; 00417 typedef GlobalOrdinal zgid_t; 00418 typedef Zoltan2::default_part_t part_t; 00419 typedef Node node_t; 00420 static inline std::string name() {return "Tpetra::MultiVector";} 00421 }; 00422 00423 template < > 00424 struct InputTraits<Epetra_MultiVector> 00425 { 00426 typedef double scalar_t; 00427 typedef int lno_t; 00428 typedef int gno_t; 00429 typedef int zgid_t; 00430 typedef Zoltan2::default_part_t part_t; 00431 typedef KokkosClassic::DefaultNode::DefaultNodeType node_t; 00432 static inline std::string name() {return "Epetra_MultiVector";} 00433 }; 00434 00435 #endif // DOXYGEN_SHOULD_SKIP_THIS 00436 00437 00438 } // namespace Zoltan2 00439 #endif // ZOLTAN2_INPUTTRAITS_HPP
1.7.6.1