.\" .de Id .. .de Sp .if n .sp .if t .sp 0.4 .. .TH asr 2rheolef "rheolef-6.1" "rheolef-6.1" "rheolef-6.1" .\" label: /*Class:asr .SH NAME \fBasr\fP - associative sparse matrix (rheolef-6.1) .SH SYNOPSYS Associative sparse matrix container stored row by row using the STL map class. .SH IMPLEMENTATION NOTE Implementation use MPI-1.1 and is inspired from Mat_MPI in PETSc-2.0.22. .SH TO DO For efficiency purpose, the assembly phase may access directly to the asr representation, without crossing the reference counting and pointer handler. Something like the iterator for dense vectors. .\" skip start:AUTHORS: .\" skip start:DATE: .\" skip start:METHODS: .\" END .SH IMPLEMENTATION .\" begin_example .Sp .nf template class basic_asr : public smart_pointer { public: // typedefs: typedef typename R::size_type size_type; typedef typename R::element_type element_type; typedef typename R::memory_type memory_type; typedef distributor::communicator_type communicator_type; // allocators/deallocators: basic_asr (size_type dis_nrow = 0, size_type dis_ncol = 0); basic_asr (const distributor& row_ownership, const distributor& col_ownership); explicit basic_asr (const csr&); // accessors: const communicator_type& comm() const; // local sizes size_type nrow () const; size_type ncol () const; size_type nnz () const; // global sizes size_type dis_nrow () const; size_type dis_ncol () const; size_type dis_nnz () const; const distributor& row_ownership() const; const distributor& col_ownership() const; // range on local memory size_type row_first_index () const; size_type row_last_index () const; size_type col_first_index () const; size_type col_last_index () const; // global modifiers: element_type& dis_entry (size_type dis_i, size_type dis_j); void dis_entry_assembly(); void dis_entry_assembly_begin (); void dis_entry_assembly_end (); void resize (size_type dis_nrow = 0, size_type dis_ncol = 0); // output: void dump (const std::string& name) const; }; template class asr { typedef M memory_type; }; template class asr : public basic_asr > { public: typedef typename basic_asr >::size_type size_type; typedef sequential memory_type; asr (size_type dis_nrow = 0, size_type dis_ncol = 0); asr (const distributor& row_ownership, const distributor& col_ownertship); explicit asr(const csr&); }; #ifdef _RHEOLEF_HAVE_MPI template class asr : public basic_asr > { public: typedef distributed memory_type; typedef typename basic_asr >::size_type size_type; asr (size_type dis_nrow = 0, size_type dis_ncol = 0); asr (const distributor& row_ownership, const distributor& col_ownertship); explicit asr(const csr&); }; #endif // _RHEOLEF_HAVE_MPI // inputs/outputs: template idiststream& operator >> (idiststream& s, asr& x); template odiststream& operator << (odiststream& s, const asr& x); .Sp .fi .\" end_example