ug4
matrix_algebra_types.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2013-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 MATRIX_ALGEBRA_TYPES_H_
34 #define MATRIX_ALGEBRA_TYPES_H_
35 
36 namespace ug{
37 
38 /*
39 suppose you have your algebra with your vector class yourvector and your matrix class yourmatrix.
40 when your matrix class is rowwise multiplicable, and you want to do so, set
41 template<>
42 class matrix_algebra_type_traits<yourclass>
43 {
44  static const matrix_algebra_type type = MATRIX_USE_ROW_FUNCTIONS;
45 };
46 and add a function
47 inline void yourmatrix::mat_mult_add_row(size_t row, yourvector::value_type &dest, double beta1, const yourvector &v) const;
48 to your class.
49 
50 If you cannot or dont want to use rowwise multiplication, set
51 template<>
52 class matrix_algebra_type_traits<yourclass>
53 {
54  static const matrix_algebra_type type = MATRIX_USE_GLOBAL_FUNCTIONS;
55 };
56 
57 and implement (at least)
58 inline void MatMultAddDirect(yourvector &dest, const number &beta1, const yourmatrix &A1, const yourvector &w1);
59 inline void MatMultDirect(yourvector &dest, const number &beta1, const yourmatrix &A1, const yourvector &w1,
60  number &alpha1, const yourvector &v1);
61 Other functions like MatMultAdd(dest, beta1, A1, w1, beta2, A2, w2, alpha1, v1) are then implemented through your functions.
62 (see class mat_operations_class<vector_t, matrix_t, MATRIX_USE_GLOBAL_FUNCTIONS> for all functions).
63 
64 */
65 
67 {
72 };
73 
74 template<typename vector_t, typename matrix_t, int type>
76 
77 template<typename T>
79 {
80  static const int type = MATRIX_USE_OPERATORS;
81 };
82 
83 
84 }
85 
86 #endif /* MATRIX_ALGEBRA_TYPES_H_ */
the ug namespace
matrix_algebra_type
Definition: matrix_algebra_types.h:67
@ MATRIX_USE_OPERATORS
Definition: matrix_algebra_types.h:70
@ MATRIX_USE_ROW_FUNCTIONS
Definition: matrix_algebra_types.h:68
@ MATRIX_USE_MEMBER_FUNCTIONS
Definition: matrix_algebra_types.h:71
@ MATRIX_USE_GLOBAL_FUNCTIONS
Definition: matrix_algebra_types.h:69
Definition: matrix_algebra_types.h:75
Definition: matrix_algebra_types.h:79
static const int type
Definition: matrix_algebra_types.h:80