|
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 00046 #ifndef PRINTDATA_HPP 00047 #define PRINTDATA_HPP 00048 00049 #include <Zoltan2_config.h> 00050 #include <Tpetra_CrsGraph.hpp> 00051 00052 #include <string> 00053 #include <iostream> 00054 00055 using std::string; 00056 using std::endl; 00057 00058 template <typename lno_t, typename gno_t> 00059 void printTpetraGraph(const Tpetra::CrsGraph<lno_t, gno_t> &graph, 00060 ostream &os, size_t maxSize, string info) 00061 { 00062 size_t nrows = graph.getNodeNumRows(); 00063 if (nrows > maxSize) 00064 return; 00065 00066 const RCP<const typename Tpetra::Map<lno_t, gno_t> > &rowMap= 00067 graph.getRowMap(); 00068 const RCP<const typename Tpetra::Map<lno_t, gno_t> > &colMap= 00069 graph.getColMap(); 00070 00071 if (info.size() > 0) 00072 os << info << endl; 00073 00074 if (graph.isGloballyIndexed()){ 00075 ArrayView<const gno_t> indices; 00076 for (size_t i=0; i < nrows; i++){ 00077 gno_t gid = rowMap->getGlobalElement(i); 00078 graph.getGlobalRowView(gid, indices); 00079 os << "Row " << gid << ": "; 00080 for (typename ArrayView<const gno_t>::size_type j=0; j < indices.size(); j++){ 00081 os << indices[j] << " "; 00082 } 00083 os << endl; 00084 } 00085 } 00086 else{ 00087 ArrayView<const lno_t> indices; 00088 for (size_t i=0; i < nrows; i++){ 00089 gno_t gid = rowMap->getGlobalElement(i); 00090 graph.getLocalRowView(i, indices); 00091 os << "Row " << gid << ": "; 00092 for (typename ArrayView<const lno_t>::size_type j=0; j < indices.size(); j++){ 00093 os << colMap->getGlobalElement(indices[j]) << " "; 00094 } 00095 os << endl; 00096 } 00097 } 00098 } 00099 00100 template <typename lno_t, typename gno_t> 00101 void printTpetraGraph(const RCP<const Comm<int> > &comm, 00102 const Tpetra::CrsGraph<lno_t, gno_t> &graph, ostream &os, 00103 size_t maxSize, string info) 00104 { 00105 int rank = comm->getRank(); 00106 std::ostringstream oss; 00107 oss << "rank " << rank; 00108 00109 comm->barrier(); 00110 if (rank==0) 00111 os << info << endl; 00112 comm->barrier(); 00113 00114 for (int p=0; p < comm->getSize(); p++){ 00115 if (p == rank) 00116 printTpetraGraph<lno_t, gno_t>(graph, os, maxSize, oss.str()); 00117 comm->barrier(); 00118 } 00119 } 00120 00121 #endif
1.7.6.1