ug4
Loading...
Searching...
No Matches
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
36template<typename T> class SparseMatrix
38public:
39 // export value_type
40 typedef T value_type;
41
42public:
44 virtual ~SparseMatrix();
45
46 bool resize(size_t newRows, size_t newCols);
47
48 // blas2-funcionts
49
50 // element access functions
51public:
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
74public:
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//-------------------------
114template<typename ABC_type, typename A_type, typename B_type, typename C_type>
115void CreateAsProductOf(ABC_type &M, const A_type &A, const B_type &B, const C_type &C);
116
117
119// CreateAsMultiplyOf:
120//-------------------------
127template<typename AB_type, typename A_type, typename B_type>
128void CreateAsMultiplyOf(AB_type &M, const A_type &A, const B_type &B);
129
131// MatAdd:
132//-------------------------
140template<typename matrix_type>
141void 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
virtual ~SparseMatrix()
const_row_iterator begin_row(size_t row) const
value_type & operator()(size_t r, size_t c)
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
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.