MFEM  v3.1 Finite element discretization library
matrix.hpp
Go to the documentation of this file.
1 // Copyright (c) 2010, Lawrence Livermore National Security, LLC. Produced at
2 // the Lawrence Livermore National Laboratory. LLNL-CODE-443211. All Rights
3 // reserved. See file COPYRIGHT for details.
4 //
5 // This file is part of the MFEM library. For more information and source code
6 // availability see http://mfem.org.
7 //
8 // MFEM is free software; you can redistribute it and/or modify it under the
10 // Software Foundation) version 2.1 dated February 1999.
11
12 #ifndef MFEM_MATRIX
13 #define MFEM_MATRIX
14
15 #include "../general/array.hpp"
16 #include "operator.hpp"
17 #include <iostream>
18
19 namespace mfem
20 {
21
22 // Abstract data types matrix, inverse matrix
23
24 class MatrixInverse;
25
27 class Matrix : public Operator
28 {
29  friend class MatrixInverse;
30 public:
32  explicit Matrix(int s) : Operator(s) { }
33
35  explicit Matrix(int h, int w) : Operator(h, w) { }
36
38  virtual double &Elem(int i, int j) = 0;
39
41  virtual const double &Elem(int i, int j) const = 0;
42
44  virtual MatrixInverse *Inverse() const = 0;
45
47  virtual void Finalize(int) { }
48
50  virtual void Print (std::ostream & out = std::cout, int width_ = 4) const;
51
53  virtual ~Matrix() { }
54 };
55
56
58 class MatrixInverse : public Solver
59 {
60 public:
62
64  MatrixInverse(const Matrix &mat)
65  : Solver(mat.height, mat.width) { }
66 };
67
70 {
71 public:
73  explicit AbstractSparseMatrix(int s = 0) : Matrix(s) { }
74
76  explicit AbstractSparseMatrix(int h, int w) : Matrix(h, w) { }
77
79  virtual int NumNonZeroElems() const = 0;
80
85  virtual int GetRow(const int row, Array<int> &cols, Vector &srow) const = 0;
86
91  virtual void EliminateZeroRows() = 0;
92
94  virtual void Mult(const Vector &x, Vector &y) const = 0;
96  virtual void AddMult(const Vector &x, Vector &y,
97  const double val = 1.) const = 0;
99  virtual void MultTranspose(const Vector &x, Vector &y) const = 0;
101  virtual void AddMultTranspose(const Vector &x, Vector &y,
102  const double val = 1.) const = 0;
103
105  virtual ~AbstractSparseMatrix() { }
106 };
107
108 }
109
110 #endif
virtual void Print(std::ostream &out=std::cout, int width_=4) const
Prints matrix to stream out.
Definition: matrix.cpp:22
virtual void Finalize(int)
Finalizes the matrix initialization.
Definition: matrix.hpp:47
virtual MatrixInverse * Inverse() const =0
Returns a pointer to (an approximation) of the matrix inverse.
virtual ~AbstractSparseMatrix()
Destroys AbstractSparseMatrix.
Definition: matrix.hpp:105
Abstract data type for sparse matrices.
Definition: matrix.hpp:69
virtual void AddMult(const Vector &x, Vector &y, const double val=1.) const =0
Matrix-Vector Multiplication y = y + val*A*x.
Abstract data type for matrix inverse.
Definition: matrix.hpp:58
virtual int NumNonZeroElems() const =0
Returns the number of non-zeros in a matrix.
AbstractSparseMatrix(int h, int w)
Creates a matrix of the given height and width.
Definition: matrix.hpp:76
virtual void MultTranspose(const Vector &x, Vector &y) const =0
MatrixTranspose-Vector Multiplication y = A&#39;*x.
Matrix(int h, int w)
Creates a matrix of the given height and width.
Definition: matrix.hpp:35
virtual ~Matrix()
Destroys matrix.
Definition: matrix.hpp:53
Abstract data type matrix.
Definition: matrix.hpp:27
virtual void EliminateZeroRows()=0
virtual double & Elem(int i, int j)=0
Returns reference to a_{ij}.
virtual int GetRow(const int row, Array< int > &cols, Vector &srow) const =0
virtual void Mult(const Vector &x, Vector &y) const =0
Matrix-Vector Multiplication y = A*x.
MatrixInverse(const Matrix &mat)
Creates approximation of the inverse of square matrix.
Definition: matrix.hpp:64
Matrix(int s)
Creates a square matrix of size s.
Definition: matrix.hpp:32
virtual void AddMultTranspose(const Vector &x, Vector &y, const double val=1.) const =0
MatrixTranspose-Vector Multiplication y = y + val*A&#39;*x.
Vector data type.
Definition: vector.hpp:33
Base class for solvers.
Definition: operator.hpp:102
Abstract operator.
Definition: operator.hpp:21
AbstractSparseMatrix(int s=0)
Creates a square matrix of the given size.
Definition: matrix.hpp:73