Navigation

Main Page
Download
Support
Installation
Tutorial
Examples
Reference Manual
   Version 1.0.5new_solver
   Version 1.0.5dev
      Class Index
      File List
   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.
00001 
00005 /* Copyright (c) 2005-2010 Taneli Kalvas. All rights reserved.
00006  *
00007  * You can redistribute this software and/or modify it under the terms
00008  * of the GNU General Public License as published by the Free Software
00009  * Foundation; either version 2 of the License, or (at your option)
00010  * any later version.
00011  * 
00012  * This library is distributed in the hope that it will be useful, but
00013  * WITHOUT ANY WARRANTY; without even the implied warranty of
00014  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
00015  * General Public License for more details.
00016  * 
00017  * You should have received a copy of the GNU General Public License
00018  * along with this library (file "COPYING" included in the package);
00019  * if not, write to the Free Software Foundation, Inc., 51 Franklin
00020  * Street, Fifth Floor, Boston, MA 02110-1301 USA
00021  * 
00022  * If you have questions about your rights to use or distribute this
00023  * software, please contact Berkeley Lab's Technology Transfer
00024  * Department at TTD@lbl.gov. Other questions, comments and bug
00025  * reports should be sent directly to the author via email at
00026  * taneli.kalvas@jyu.fi.
00027  * 
00028  * NOTICE. This software was developed under partial funding from the
00029  * U.S.  Department of Energy.  As such, the U.S. Government has been
00030  * granted for itself and others acting on its behalf a paid-up,
00031  * nonexclusive, irrevocable, worldwide license in the Software to
00032  * reproduce, prepare derivative works, and perform publicly and
00033  * display publicly.  Beginning five (5) years after the date
00034  * permission to assert copyright is obtained from the U.S. Department
00035  * of Energy, and subject to any subsequent five (5) year renewals,
00036  * the U.S. Government is granted for itself and others acting on its
00037  * behalf a paid-up, nonexclusive, irrevocable, worldwide license in
00038  * the Software to reproduce, prepare derivative works, distribute
00039  * copies to the public, perform publicly and display publicly, and to
00040  * permit others to do so.
00041  */
00042 
00043 #ifndef MATRIX_HPP
00044 #define MATRIX_HPP 1
00045 
00046 
00047 #include <iostream>
00048 #include "mvector.hpp"
00049 
00050 
00057 struct MatrixMulVec {
00058     const class Matrix  *_mat; 
00059     const class Vector  *_vec; 
00060 
00064     MatrixMulVec( const Matrix &mat, const class Vector &vec ) : 
00065         _mat(&mat), _vec(&vec) {}
00066 
00067     friend class Vector;
00068 };
00069 
00070 
00076 class Matrix {
00077     virtual double get_check( int i, int j ) const = 0;
00078     virtual double &set_check( int i, int j ) = 0;
00079     virtual double get_no_check( int i, int j ) const = 0;
00080     virtual double &set_no_check( int i, int j ) = 0;
00081 
00082 public:
00083 
00084 /* ************************************** *
00085  * Constructors and destructor            *
00086  * ************************************** */
00087 
00090     virtual ~Matrix() {}
00091 
00092 /* ************************************** *
00093  * Access and information                 *
00094  * ************************************** */
00095 
00098     virtual int columns( void ) const = 0;
00099 
00102     virtual int rows( void ) const = 0;
00103 
00107     virtual void size( int &n, int &m ) const = 0;
00108 
00109 /* ************************************** *
00110  * User level control                     *
00111  * ************************************** */
00112 
00115     virtual void resize( int n, int m ) = 0;
00116 
00117     //virtual void merge( Matrix &mat ) = 0;
00118 
00121     virtual void clear( void ) = 0;
00122 
00123 /* ************************************** *
00124  * User level matrix element access       *
00125  * ************************************** */
00126 
00129     inline double get( int i, int j ) const;
00130 
00134     inline double &set( int i, int j );
00135 
00136 /* ************************************** *
00137  * Matrix-Vector operations               *
00138  * ************************************** */
00139 
00142     MatrixMulVec operator*( const class Vector &vec ) const;
00143 
00144     virtual void multiply_by_vector( Vector &res, const Vector &rhs ) const = 0;
00145     virtual void lower_unit_solve( Vector &y, const Vector &b ) const = 0;
00146     virtual void upper_diag_solve( Vector &x, const Vector &y ) const = 0;
00147 
00148     friend class Vector;
00149 };
00150 
00151 
00152 inline double Matrix::get( int i, int j ) const
00153 {
00154 #ifdef SPM_RANGE_CHECK
00155     return( get_check( i, j ) );
00156 #else
00157     return( get_no_check( i, j ) );
00158 #endif
00159 }    
00160 
00161 
00162 inline double &Matrix::set( int i, int j )
00163 {
00164 #ifdef SPM_RANGE_CHECK
00165     return( set_check( i, j ) );
00166 #else
00167     return( set_no_check( i, j ) );
00168 #endif
00169 }    
00170 
00171 
00172 std::ostream &operator<<( std::ostream &os, const Matrix &mat );
00173 
00174 
00175 
00176 #endif
00177 
00178 
00179 
00180 
00181 
00182 
00183 
00184 
00185 
00186 
00187 
00188 
00189 
00190 
00191 
00192 
00193 
00194 
00195 
00196 


Reference manual for Ion Beam Simulator 1.0.5dev
Generated by Doxygen 1.7.1 on Mon Feb 6 2012 15:07:15.