2 template <
class T,
class M>
8 csr_concat (
const std::initializer_list<line_type>& il) :
_l() {
9 #ifdef _RHEOLEF_HAVE_STD_INITIALIZER_ITERATOR
10 typedef typename std::initializer_list<line_type>::const_iterator const_iterator;
11 #else // _RHEOLEF_HAVE_STD_INITIALIZER_ITERATOR
13 #endif // _RHEOLEF_HAVE_STD_INITIALIZER_ITERATOR
14 for(const_iterator iter = il.begin(); iter != il.end(); ++iter) {
18 friend std::ostream& operator<< (std::ostream& o, const csr_concat<T,M>& x) {
20 for(
typename std::list<line_type>::const_iterator iter = x._l.begin(); iter != x._l.end(); ++iter) {
21 std::cout << *iter <<
" ";
23 return std::cout <<
"}";
25 void build_csr_pass1 (distributor& row_ownership, distributor& col_ownership)
const;
30 std::list<line_type>
_l;
32 template <
class T,
class M>
36 distributor col_ownership;
40 std::list<std::pair<size_type,size_type> > nrow_list;
41 for(
typename std::list<line_type>::const_iterator iter = _l.begin(); iter != _l.end(); ++iter) {
43 distributor row_line_ownership;
44 distributor col_line_ownership;
45 line.build_csr_pass1 (row_line_ownership, col_line_ownership);
48 col_ownership = col_line_ownership;
51 "matrix initializer list: matrix col argument [0:" <<col_line_ownership.dis_size() <<
"["
52 <<
" has incomptible size: expect [0:" <<col_ownership.dis_size() <<
"[");
54 nrow_list.push_back (std::make_pair(row_line_ownership.size(), row_line_ownership.dis_size()));
55 nrow += row_line_ownership.size();
56 dis_nrow += row_line_ownership.dis_size();
58 communicator comm = col_ownership.comm();
59 distributor row_ownership (dis_nrow, comm, nrow);
60 asr<T,M> a (row_ownership, col_ownership);
63 typename std::list<std::pair<size_type,size_type> >::const_iterator iter_nrow = nrow_list.begin();
64 for(
typename std::list<line_type>::const_iterator iter = _l.begin(); iter != _l.end(); ++iter, ++iter_nrow) {
66 line.build_csr_pass2 (a, block_i, block_dis_i);
67 block_i += (*iter_nrow).first;
68 block_dis_i += (*iter_nrow).second;
70 a.dis_entry_assembly();
73 #define RHEOLEF_csr_cstor(M) \
76 csr<T,M>::csr (const std::initializer_list<csr_concat_line<T,M> >& init_list) \
78 csr_concat<T,M> cc (init_list); \
79 csr<T,M>::operator= (cc.build_csr()); \
82 #ifdef _RHEOLEF_HAVE_MPI
84 #endif // _RHEOLEF_HAVE_MPI
85 #undef RHEOLEF_csr_cstor
88 #endif // _RHEOLEF_CSR_CONCAT_H