00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include <cassert>
00019 #include "Epetra_Map.h"
00020
00021 #include "mtxdataiterator.h"
00022 #include "mtxreader0.h"
00023
00024 MtxReader0::~MtxReader0() {}
00025
00026 Epetra_CrsMatrix* MtxReader0::read() {
00027 MtxDataIterator it(*_istr, true);
00028
00029 assert(it.get_element_type() != MtxDataIterator::complex);
00030 assert(it.get_storage_scheme() == MtxDataIterator::general ||
00031 it.get_storage_scheme() == MtxDataIterator::symmetric);
00032
00033
00034 Epetra_Map range_row_map(it.get_rows(), 0, _comm);
00035
00036
00037 Epetra_CrsMatrix* mat = new Epetra_CrsMatrix (Copy, range_row_map, 0);
00038
00039
00040 while (!it.eof()) {
00041 MtxDataIterator::Triplet tr = *it;
00042 int row = tr.row;
00043 int col = tr.col;
00044 double val = tr.val;
00045
00046 if (range_row_map.MyGID(row))
00047 mat->InsertGlobalValues(row, 1, &val, &col);
00048
00049 ++it;
00050 }
00051
00052
00053 if (it.get_rows() == it.get_cols()) {
00054
00055 mat->FillComplete(range_row_map, range_row_map);
00056 } else {
00057
00058 Epetra_Map domain_map(it.get_cols(), 0, _comm);
00059 mat->FillComplete(domain_map, range_row_map);
00060 }
00061
00062 return mat;
00063 }