Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members

GenericMatrix.h

Go to the documentation of this file.
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.