Navigation

Main Page
Download
Support
Installation
Tutorial
Examples
Reference Manual
   Version 1.0.6dev
      Class Index
      File List
   Version 1.0.6
   Version 1.0.5new_solver
   Version 1.0.5dev
   Version 1.0.5b
   Version 1.0.4dev
   Version 1.0.4
Publications


Hosted by Get Ion Beam Simulator at SourceForge.net. Fast, secure and Free Open Source software downloads
matrix.hpp
Go to the documentation of this file.
1 
5 /* Copyright (c) 2005-2010,2012 Taneli Kalvas. All rights reserved.
6  *
7  * You can redistribute this software and/or modify it under the terms
8  * of the GNU General Public License as published by the Free Software
9  * Foundation; either version 2 of the License, or (at your option)
10  * any later version.
11  *
12  * This library is distributed in the hope that it will be useful, but
13  * WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  * General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this library (file "COPYING" included in the package);
19  * if not, write to the Free Software Foundation, Inc., 51 Franklin
20  * Street, Fifth Floor, Boston, MA 02110-1301 USA
21  *
22  * If you have questions about your rights to use or distribute this
23  * software, please contact Berkeley Lab's Technology Transfer
24  * Department at TTD@lbl.gov. Other questions, comments and bug
25  * reports should be sent directly to the author via email at
26  * taneli.kalvas@jyu.fi.
27  *
28  * NOTICE. This software was developed under partial funding from the
29  * U.S. Department of Energy. As such, the U.S. Government has been
30  * granted for itself and others acting on its behalf a paid-up,
31  * nonexclusive, irrevocable, worldwide license in the Software to
32  * reproduce, prepare derivative works, and perform publicly and
33  * display publicly. Beginning five (5) years after the date
34  * permission to assert copyright is obtained from the U.S. Department
35  * of Energy, and subject to any subsequent five (5) year renewals,
36  * the U.S. Government is granted for itself and others acting on its
37  * behalf a paid-up, nonexclusive, irrevocable, worldwide license in
38  * the Software to reproduce, prepare derivative works, distribute
39  * copies to the public, perform publicly and display publicly, and to
40  * permit others to do so.
41  */
42 
43 #ifndef MATRIX_HPP
44 #define MATRIX_HPP 1
45 
46 
47 #include <iostream>
48 #include "mvector.hpp"
49 
50 
57 struct MatrixMulVec {
58  const class Matrix *_mat;
59  const class Vector *_vec;
60 
64  MatrixMulVec( const Matrix &mat, const class Vector &vec ) :
65  _mat(&mat), _vec(&vec) {}
66 
67  friend class Vector;
68 };
69 
70 
76 class Matrix {
77  virtual double get_check( int i, int j ) const = 0;
78  virtual double &set_check( int i, int j ) = 0;
79  virtual double get_no_check( int i, int j ) const = 0;
80  virtual double &set_no_check( int i, int j ) = 0;
81 
82 public:
83 
84 /* ************************************** *
85  * Constructors and destructor *
86  * ************************************** */
87 
90  virtual ~Matrix() {}
91 
92 /* ************************************** *
93  * Access and information *
94  * ************************************** */
95 
98  virtual int columns( void ) const = 0;
99 
102  virtual int rows( void ) const = 0;
103 
107  virtual void size( int &n, int &m ) const = 0;
108 
109 /* ************************************** *
110  * User level control *
111  * ************************************** */
112 
115  virtual void resize( int n, int m ) = 0;
116 
117  //virtual void merge( Matrix &mat ) = 0;
118 
121  virtual void clear( void ) = 0;
122 
123 /* ************************************** *
124  * User level matrix element access *
125  * ************************************** */
126 
129  inline double get( int i, int j ) const;
130 
134  inline double &set( int i, int j );
135 
136 /* ************************************** *
137  * Matrix-Vector operations *
138  * ************************************** */
139 
142  MatrixMulVec operator*( const class Vector &vec ) const;
143 
144  /* \brief Calculates \a x = \a A*b.
145  *
146  * Called by Vector through MatrixMulVec for efficient use of
147  * operator* in matrix-vector multiplication.
148  */
149  virtual void multiply_by_vector( Vector &res, const Vector &rhs ) const = 0;
150 
156  virtual void lower_unit_solve( Vector &y, const Vector &b ) const = 0;
157 
164  virtual void upper_diag_solve( Vector &x, const Vector &y ) const = 0;
165 
166  friend class Vector;
167 };
168 
169 
170 inline double Matrix::get( int i, int j ) const
171 {
172 #ifdef SPM_RANGE_CHECK
173  return( get_check( i, j ) );
174 #else
175  return( get_no_check( i, j ) );
176 #endif
177 }
178 
179 
180 inline double &Matrix::set( int i, int j )
181 {
182 #ifdef SPM_RANGE_CHECK
183  return( set_check( i, j ) );
184 #else
185  return( set_no_check( i, j ) );
186 #endif
187 }
188 
189 
190 std::ostream &operator<<( std::ostream &os, const Matrix &mat );
191 
192 
193 #endif
Base matrix class.
Definition: matrix.hpp:76
virtual void resize(int n, int m)=0
Resizes the matrix to nn x mm.
virtual void upper_diag_solve(Vector &x, const Vector &y) const =0
Solves A*x = b for upper diagonal matrix.
virtual void size(int &n, int &m) const =0
Returns the number of rows n and the number of columns m of the matrix.
virtual int columns(void) const =0
Returns the number of columns of the matrix.
virtual void clear(void)=0
Clears the matrix (sets all element to zero).
virtual void lower_unit_solve(Vector &y, const Vector &b) const =0
Solves A*x = b for lower unit diagonal matrix.
double get(int i, int j) const
Function to get a matrix element value at (i,j).
Definition: matrix.hpp:170
virtual int rows(void) const =0
Returns the number of rows of the matrix.
virtual ~Matrix()
Virtual destructor.
Definition: matrix.hpp:90
double & set(int i, int j)
Function to get a reference to matrix element value at (i,j).
Definition: matrix.hpp:180
MatrixMulVec operator*(const class Vector &vec) const
Operator for matrix-vector multiplication.
Definition: matrix.cpp:47
Dense math vector class.
Definition: mvector.hpp:71
friend std::ostream & operator<<(std::ostream &os, const Vector &vec)
Operator for printing a vector.
Definition: mvector.cpp:434
N-dimensional vector.
Container object for matrix-vector multiplication operation.
Definition: matrix.hpp:57
MatrixMulVec(const Matrix &mat, const class Vector &vec)
Constructor for MMatrixMulVec with matrix mat and vector vec.
Definition: matrix.hpp:64
const class Vector * _vec
Pointer to vector.
Definition: matrix.hpp:59
const class Matrix * _mat
Pointer to matrix.
Definition: matrix.hpp:58


Reference manual for Ion Beam Simulator 1.0.6dev
Generated by Doxygen 1.9.1 on Thu Sep 11 2025 09:37:24.