41 template<
typename DataType>
48 std::vector<int> _ids;
49 std::vector<int> _row_ids;
50 std::vector<int> _col_ids;
51 std::vector<DataType> _vals;
65 CRS_Mat(
const std::string &mat_f);
86 void read(
const std::string &mat_f);
94 DataType
value(
int i,
int j)
const;
99 template<
typename DataType>
103 template<
typename DataType>
109 template<
typename DataType>
114 template<
typename DataType>
119 mat_F.open(mat_f.c_str(), std::ios::in|std::ios::binary);
120 mat_F.exceptions( std::ifstream::failbit | std::ifstream::badbit);
122 mat_F.read(&_name[0], 10*
sizeof(
char));
130 mat_F.read((
char*)&_n_domains,
sizeof(
int));
131 mat_F.read((
char*)&_n_vals,
sizeof(
int));
132 _ids.resize(_n_domains);
133 _row_ids.resize(_n_domains);
134 _col_ids.resize(_n_vals);
135 _vals.resize(_n_vals);
136 mat_F.read((
char*)&_ids[0],
sizeof(
int)*_n_domains);
137 mat_F.read((
char*)&_row_ids[0],
sizeof(
int)*_n_domains);
138 mat_F.read((
char*)&_col_ids[0],
sizeof(
int)*_n_vals);
139 mat_F.read((
char*)&_vals[0],
sizeof(DataType)*_n_vals);
146 template<
typename DataType>
150 std::vector<int>::const_iterator it1, it2, it_begin=_ids.begin(), it_end=_ids.end();
152 it1=std::lower_bound (it_begin, it_end, i);
153 it2=std::lower_bound (it_begin, it_end, j);
154 if ((it1 == it_end) || (it2 == it_end))
160 int id1=it1-it_begin;
161 int id2=it2-it_begin;
163 int id_col=_row_ids[id1];
164 int end=(id1!=(_n_domains-1)) ? _row_ids[id1+1] : _n_vals;
165 for (
int i =id_col; i<end; ++i)
167 if (_col_ids[i]==id2)