From 2cb4de8a0e4ac2e08515616ec5245d6a6392b71a Mon Sep 17 00:00:00 2001 From: Markus Blatt <mblatt@dune-project.org> Date: Tue, 12 Jul 2011 14:06:28 +0000 Subject: [PATCH] Made it work even without the matrix market banner. [[Imported from SVN: r1489]] --- dune/istl/matrixmarket.hh | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/dune/istl/matrixmarket.hh b/dune/istl/matrixmarket.hh index 6c49ce31a..f46310380 100644 --- a/dune/istl/matrixmarket.hh +++ b/dune/istl/matrixmarket.hh @@ -723,11 +723,18 @@ namespace Dune {}; - void mm_read_header(std::size_t& rows, std::size_t& cols, MMHeader& header, std::istream& istr) + void mm_read_header(std::size_t& rows, std::size_t& cols, MMHeader& header, std::istream& istr, + bool isVector) { - if(!readMatrixMarketBanner(istr, header)) + if(!readMatrixMarketBanner(istr, header)) { std::cerr << "First line was not a correct Matrix Market banner. Using default:\n" << "%%MatrixMarket matrix coordinate real general"<<std::endl; + // Go to the beginning of the file + istr.clear() ; + istr.seekg(0, std::ios::beg); + if(isVector) + header.type=array_type; + } skipComments(istr); @@ -766,7 +773,7 @@ namespace Dune { MMHeader header; std::size_t rows, cols; - mm_read_header(rows,cols,header,istr); + mm_read_header(rows,cols,header,istr, true); if(cols!=1) DUNE_THROW(MatrixMarketFormatError, "cols!=1, therefore this is no vector!"); @@ -799,10 +806,13 @@ namespace Dune typedef Dune::BCRSMatrix<Dune::FieldMatrix<double,brows,bcols> > Matrix; MMHeader header; - if(!readMatrixMarketBanner(istr, header)) + if(!readMatrixMarketBanner(istr, header)) { std::cerr << "First line was not a correct Matrix Market banner. Using default:\n" << "%%MatrixMarket matrix coordinate real general"<<std::endl; - + // Go to the beginning of the file + istr.clear() ; + istr.seekg(0, std::ios::beg); + } skipComments(istr); std::size_t rows, cols, entries; -- GitLab