Scroll to navigation

asr(2rheolef) rheolef-6.1 asr(2rheolef)

NAME

asr - associative sparse matrix (rheolef-6.1)

SYNOPSYS


Associative sparse matrix container stored row by row
using the STL map class.

IMPLEMENTATION NOTE

Implementation use MPI-1.1 and is inspired from Mat_MPI in PETSc-2.0.22.

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.
 

IMPLEMENTATION

template<class R>
class basic_asr : public smart_pointer<R> {
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<element_type,memory_type>&);
// 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 T, class M = rheo_default_memory_model> class asr { typedef M memory_type; }; template <class T> class asr<T,sequential> : public basic_asr<asr_seq_rep<T> > { public: typedef typename basic_asr<asr_seq_rep<T> >::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<T,memory_type>&); }; #ifdef _RHEOLEF_HAVE_MPI template <class T> class asr<T,distributed> : public basic_asr<asr_mpi_rep<T> > { public: typedef distributed memory_type; typedef typename basic_asr<asr_mpi_rep<T> >::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<T,memory_type>&); }; #endif // _RHEOLEF_HAVE_MPI
// inputs/outputs: template <class T, class M> idiststream& operator >> (idiststream& s, asr<T,M>& x);
template <class T, class M> odiststream& operator << (odiststream& s, const asr<T,M>& x);
 
rheolef-6.1 rheolef-6.1