10#ifndef __Teuchos_MatrixMarket_Raw_Reader_hpp 
   11#define __Teuchos_MatrixMarket_Raw_Reader_hpp 
   13#include "Teuchos_MatrixMarket_Raw_Adder.hpp" 
   14#include "Teuchos_MatrixMarket_SymmetrizingAdder.hpp" 
   15#include "Teuchos_MatrixMarket_CoordDataReader.hpp" 
   68      template<
class Scalar, 
class Ordinal>
 
  130          const bool debug = 
false;
 
  135                       "syntax errors when parsing the Matrix Market file");
 
  136          params->set (
"Debug mode", 
debug, 
"Whether to print debugging output " 
  137                       "to stderr, on all participating MPI processes");
 
 
  177            "Failed to open file \"" << 
filename << 
"\" for reading.");
 
 
  236          std::ostringstream 
err;
 
  240          catch (std::exception& 
e) {
 
  241            err << 
"Failed to read Matrix Market input's Banner: " << 
e.what();
 
  257          if (
banner->matrixType () != 
"coordinate") {
 
  258            err << 
"Matrix Market input file must contain a \"coordinate\"-" 
  259              "format sparse matrix in order to create a sparse matrix object " 
  263          else if (! STS::isComplex && 
banner->dataType () == 
"complex") {
 
  264            err << 
"The Matrix Market sparse matrix file contains complex-" 
  265              "valued data, but you are try to read the data into a sparse " 
  266              "matrix containing real values (your matrix's Scalar type is " 
  270          else if (
banner->dataType () != 
"real" &&
 
  271                   banner->dataType () != 
"complex") {
 
  272            err << 
"Only real or complex data types (no pattern or integer " 
  273              "matrices) are currently supported.";
 
  279                cerr << 
"Matrix Market banner is invalid: " << 
err.str () << 
endl;
 
  285                "Matrix Market banner is invalid: " << 
err.str ());
 
  302          std::pair<Tuple<Ordinal, 3>, 
bool> 
dims =
 
  305            err << 
"Error reading Matrix Market sparse matrix file: failed to " 
  306              "read coordinate dimensions.";
 
  323          numRows = 
dims.first[0];
 
  324          numCols = 
dims.first[1];
 
  325          const Ordinal numEntries = 
dims.first[2];
 
  327            cerr << 
"Reported dimensions: " << numRows << 
" x " << numCols
 
  328                 << 
", with " << numEntries << 
" entries (counting possible " 
  329                 << 
"duplicates)." << 
endl;
 
  349          std::pair<bool, std::vector<size_t> > 
results =
 
  354            err << 
"The Matrix Market input stream had syntax error(s)." 
  355              "  Here is the error report." << 
endl;
 
  375          catch (std::exception& 
e) {
 
  376            err << 
"Failed to convert sparse matrix data to CSR (compressed " 
  377              "sparse row) format.  Reported error: " << 
e.what ();
 
 
  411            cerr << 
"MatrixMarket::Raw::Reader:" << 
endl 
  412                 << 
"- Tolerant mode: " << tolerant_ << 
endl 
  413                 << 
"- Debug mode: " << debug_ << 
endl;
 
  449                "Failed to get Matrix Market banner line from input, after reading " 
  457            } 
while (commentLine); 
 
  460            const bool readFailed = ! getline (in, line);
 
  462              "Failed to get Matrix Market banner line from input.  This " 
  463              "probably means that the file is empty (contains zero lines).");
 
  467            cerr << 
"Raw::Reader::readBanner: Here is the presumed banner line:" 
  468                 << endl << line << endl;
 
  474            banner = 
rcp (
new Banner (line, tolerant_));
 
  475          } 
catch (std::exception& e) {
 
  477              "Matrix Market file's banner line contains syntax error(s): " 
  480          return rcp_const_cast<const Banner> (banner);
 
  488        reportBadness (std::ostream& out,
 
  489                       const std::pair<
bool, std::vector<size_t> >& results)
 
  492          const size_t numErrors = results.second.size();
 
  493          const size_t maxNumErrorsToReport = 20;
 
  494          out << numErrors << 
" errors when reading Matrix Market sparse " 
  495            "matrix file." << endl;
 
  496          if (numErrors > maxNumErrorsToReport) {
 
  497            out << 
"-- We do not report individual errors when there " 
  498              "are more than " << maxNumErrorsToReport << 
".";
 
  500          else if (numErrors == 1) {
 
  501            out << 
"Error on line " << results.second[0] << endl;
 
  503          else if (numErrors > 1) {
 
  504            out << 
"Errors on lines {";
 
  505            for (
size_t k = 0; k < numErrors-1; ++k) {
 
  506              out << results.second[k] << 
", ";
 
  508            out << results.second[numErrors-1] << 
"}" << endl;
 
 
Read a sparse matrix from a Matrix Market file into raw CSR (compressed sparse row) storage.
 
RCP< const ParameterList > getValidParameters() const
Get a list of valid default parameters, with documentation.
 
bool read(ArrayRCP< Ordinal > &rowptr, ArrayRCP< Ordinal > &colind, ArrayRCP< Scalar > &values, Ordinal &numRows, Ordinal &numCols, std::istream &in)
Read the sparse matrix from the given input stream into CSR storage.
 
Reader(const bool tolerant, const bool debug)
Constructor that takes Boolean parameters.
 
Reader(const RCP< ParameterList > ¶ms)
Constructor that takes a ParameterList of parameters.
 
bool readFile(ArrayRCP< Ordinal > &rowptr, ArrayRCP< Ordinal > &colind, ArrayRCP< Scalar > &values, Ordinal &numRows, Ordinal &numCols, const std::string &filename)
Read the sparse matrix from the given file into CSR storage.
 
Reader()
Constructor that sets default Boolean parameters.
 
void setParameters(const RCP< ParameterList > ¶ms)
Set parameters from the given ParameterList.
 
Smart reference counting pointer class for automatic garbage collection.
 
T * get() const
Get the raw C++ pointer to the underlying object.
 
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
Macro for throwing an exception with breakpointing to ease debugging.
 
Matrix Market file utilities.
 
"Raw" input of sparse matrices from Matrix Market files.
 
The Teuchos namespace contains all of the classes, structs and enums used by Teuchos,...
 
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
Deprecated.