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