ug4
sparsematrix_interface.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2011-2015: G-CSC, Goethe University Frankfurt
3  * Author: Martin Rupp
4  *
5  * This file is part of UG4.
6  *
7  * UG4 is free software: you can redistribute it and/or modify it under the
8  * terms of the GNU Lesser General Public License version 3 (as published by the
9  * Free Software Foundation) with the following additional attribution
10  * requirements (according to LGPL/GPL v3 §7):
11  *
12  * (1) The following notice must be displayed in the Appropriate Legal Notices
13  * of covered and combined works: "Based on UG4 (www.ug4.org/license)".
14  *
15  * (2) The following notice must be displayed at a prominent place in the
16  * terminal output of covered works: "Based on UG4 (www.ug4.org/license)".
17  *
18  * (3) The following bibliography is recommended for citation and must be
19  * preserved in all covered files:
20  * "Reiter, S., Vogel, A., Heppner, I., Rupp, M., and Wittum, G. A massively
21  * parallel geometric multigrid solver on hierarchically distributed grids.
22  * Computing and visualization in science 16, 4 (2013), 151-164"
23  * "Vogel, A., Reiter, S., Rupp, M., Nägel, A., and Wittum, G. UG4 -- a novel
24  * flexible software system for simulating pde based models on high performance
25  * computers. Computing and visualization in science 16, 4 (2013), 165-179"
26  *
27  * This program is distributed in the hope that it will be useful,
28  * but WITHOUT ANY WARRANTY; without even the implied warranty of
29  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
30  * GNU Lesser General Public License for more details.
31  */
32 
33 #ifndef SPARSEMATRIX_INTERFACE_H_
34 #define SPARSEMATRIX_INTERFACE_H_
35 
36 template<typename T> class SparseMatrix
37 {
38 public:
39  // export value_type
40  typedef T value_type;
41 
42 public:
44  virtual ~SparseMatrix();
45 
46  bool resize(size_t newRows, size_t newCols);
47 
48  // blas2-funcionts
49 
50  // element access functions
51 public:
52 
61  value_type &operator() (size_t r, size_t c);
62 
71  const value_type &operator() (size_t r, size_t c) const;
72 
73  // information functions
74 public:
75  inline size_t num_connections(size_t row) const;
76  size_t num_rows() const { return rows; }
77  size_t num_cols() const { return cols; }
78  size_t total_num_connections() const { return iTotalNrOfConnections; }
79 
80 
81  // iterators
82  const_row_iterator begin_row(size_t row) const;
83  row_iterator begin_row(size_t row);
84  const_row_iterator end_row(size_t row) const;
85  row_iterator end_row(size_t row);
86 
87  // connectivity functions
88  //-------------------------
89  const_row_iterator get_connection(size_t r, size_t c, bool &bFound) const;
90  row_iterator get_connection(size_t r, size_t c, bool &bFound);
91 
92  const_row_iterator get_connection(size_t r, size_t c) const;
93  row_iterator get_connection(size_t r, size_t c);
94 
95  // finalizing functions
96  //----------------------
97  void defragment();
98 
99 }
100 
101 
102 // external functions which use the interface
103 
105 // CreateAsMultiplyOf:
106 //-------------------------
114 template<typename ABC_type, typename A_type, typename B_type, typename C_type>
115 void CreateAsProductOf(ABC_type &M, const A_type &A, const B_type &B, const C_type &C);
116 
117 
119 // CreateAsMultiplyOf:
120 //-------------------------
127 template<typename AB_type, typename A_type, typename B_type>
128 void CreateAsMultiplyOf(AB_type &M, const A_type &A, const B_type &B);
129 
131 // MatAdd:
132 //-------------------------
140 template<typename matrix_type>
141 void MatAdd(matrix_type &M, number &alpha1, const matrix_type &A, number &alpha2, const matrix_type &B);
142 
143 
144 // various SetDirichletRow and GetNeighborhood methods (see sparsematrix_util.h)
145 
146 
147 #endif /* SPARSEMATRIX_INTERFACE_H_ */
Definition: sparsematrix_interface.h:37
const_row_iterator get_connection(size_t r, size_t c, bool &bFound) const
row_iterator get_connection(size_t r, size_t c, bool &bFound)
const_row_iterator get_connection(size_t r, size_t c) const
size_t total_num_connections() const
Definition: sparsematrix_interface.h:78
row_iterator get_connection(size_t r, size_t c)
row_iterator begin_row(size_t row)
row_iterator end_row(size_t row)
size_t num_cols() const
Definition: sparsematrix_interface.h:77
value_type & operator()(size_t r, size_t c)
virtual ~SparseMatrix()
const_row_iterator begin_row(size_t row) const
T value_type
Definition: sparsematrix_interface.h:40
const_row_iterator end_row(size_t row) const
bool resize(size_t newRows, size_t newCols)
size_t num_rows() const
Definition: sparsematrix_interface.h:76
size_t num_connections(size_t row) const
void defragment()
double number
Definition: types.h:124
CPUAlgebra::matrix_type matrix_type
class SparseMatrix B_type
void CreateAsMultiplyOf(AB_type &M, const A_type &A, const B_type &B)
Calculates M = A*B.
class SparseMatrix ABC_type
Calculates M = A*B*C.
class SparseMatrix CreateAsProductOf(ABC_type &M, const A_type &A, const B_type &B, const C_type &C)
class SparseMatrix A_type
void MatAdd(matrix_type &M, number &alpha1, const matrix_type &A, number &alpha2, const matrix_type &B)
Calculates M = A + B.