![]() |
00001 // Copyright (C) 2003 Johan Hoffman and Anders Logg. 00002 // Licensed under the GNU GPL Version 2. 00003 00004 #ifndef __GENERIC_MATRIX_H 00005 #define __GENERIC_MATRIX_H 00006 00007 #include <dolfin/Matrix.h> 00008 00009 namespace dolfin { 00010 00011 class DenseMatrix; 00012 class SparseMatrix; 00013 00014 class GenericMatrix { 00015 public: 00016 00017 GenericMatrix(); 00018 GenericMatrix(unsigned int m, unsigned int n); 00019 virtual ~GenericMatrix(); 00020 00021 virtual void init(unsigned int m, unsigned int n); 00022 virtual void clear(); 00023 00024 virtual unsigned int size(unsigned int dim) const; 00025 virtual unsigned int size() const; 00026 virtual unsigned int rowsize(unsigned int i) const; 00027 virtual unsigned int bytes() const; 00028 00029 virtual real operator()(unsigned int i, unsigned int j) const; 00030 virtual real* operator[](unsigned int i); 00031 virtual real operator()(unsigned int i, unsigned int& j, unsigned int pos) const; 00032 00033 virtual void operator= (real a); 00034 virtual void operator= (const DenseMatrix& A); 00035 virtual void operator= (const SparseMatrix& A); 00036 virtual void operator= (const GenericMatrix& A); 00037 virtual void operator+= (const DenseMatrix& A); 00038 virtual void operator+= (const SparseMatrix& A); 00039 virtual void operator+= (const GenericMatrix& A); 00040 virtual void operator-= (const DenseMatrix& A); 00041 virtual void operator-= (const SparseMatrix& A); 00042 virtual void operator-= (const GenericMatrix& A); 00043 virtual void operator*= (real a); 00044 00045 virtual real norm() const; 00046 00047 virtual real mult (const Vector& x, unsigned int i) const; 00048 virtual void mult (const Vector& x, Vector& Ax) const; 00049 virtual void multt (const Vector& x, Vector& Ax) const; 00050 virtual void mult (const DenseMatrix& B, DenseMatrix& AB) const; 00051 virtual void mult (const SparseMatrix& B, SparseMatrix& AB) const; 00052 virtual void mult (const GenericMatrix& B, GenericMatrix& AB) const; 00053 virtual real multrow (const Vector& x, unsigned int i) const; 00054 virtual real multcol (const Vector& x, unsigned int j) const; 00055 00056 virtual void resize(); 00057 virtual void ident(unsigned int i); 00058 virtual void lump(Vector& a) const; 00059 virtual void addrow(); 00060 virtual void addrow(const Vector& x); 00061 virtual void initrow(unsigned int i, unsigned int rowsize); 00062 virtual bool endrow(unsigned int i, unsigned int pos) const; 00063 virtual void settransp(const DenseMatrix& A); 00064 virtual void settransp(const SparseMatrix& A); 00065 virtual void settransp(const GenericMatrix& A); 00066 virtual real rowmax(unsigned int i) const; 00067 virtual real colmax(unsigned int i) const; 00068 virtual real rowmin(unsigned int i) const; 00069 virtual real colmin(unsigned int i) const; 00070 virtual real rowsum(unsigned int i) const; 00071 virtual real colsum(unsigned int i) const; 00072 virtual real rownorm(unsigned int i, unsigned int type) const; 00073 virtual real colnorm(unsigned int i, unsigned int type) const; 00074 00075 virtual void show() const; 00076 friend LogStream& operator<< (LogStream& stream, const GenericMatrix& A); 00077 00078 friend class Matrix; 00079 friend class Matrix::Element; 00080 00081 protected: 00082 00083 virtual void alloc(unsigned int m, unsigned int n); 00084 00085 virtual real read (unsigned int i, unsigned int j) const; 00086 virtual void write (unsigned int i, unsigned int j, real value); 00087 virtual void add (unsigned int i, unsigned int j, real value); 00088 virtual void sub (unsigned int i, unsigned int j, real value); 00089 virtual void mult (unsigned int i, unsigned int j, real value); 00090 virtual void div (unsigned int i, unsigned int j, real value); 00091 00092 virtual real** getvalues(); 00093 virtual real** const getvalues() const; 00094 00095 virtual void initperm(); 00096 virtual void clearperm(); 00097 00098 virtual unsigned int* getperm(); 00099 virtual unsigned int* const getperm() const; 00100 00101 // Dimension 00102 unsigned int m; 00103 unsigned int n; 00104 00105 }; 00106 00107 } 00108 00109 #endif
Documentation automatically generated with Doxygen on 10 Sep 2004.