CPPLapack
 All Classes Files Functions Variables Friends Pages
Public Member Functions | Public Attributes | Friends | List of all members
dgbmatrix Class Reference

Real Double-precision General Band Matrix Class. More...

#include <dgbmatrix.hpp>

Public Member Functions

 dgbmatrix ()
 
 dgbmatrix (const dgbmatrix &)
 
 dgbmatrix (const _dgbmatrix &)
 
 dgbmatrix (const CPPL_INT &, const CPPL_INT &, const CPPL_INT &, const CPPL_INT &)
 
 dgbmatrix (const char *)
 
 ~dgbmatrix ()
 
_zgbmatrix to_zgbmatrix () const
 
_dgematrix to_dgematrix () const
 
double & operator() (const CPPL_INT &, const CPPL_INT &)
 
double operator() (const CPPL_INT &, const CPPL_INT &) const
 
dgbmatrixset (const CPPL_INT &, const CPPL_INT &, const double &)
 
void write (const char *) const
 
void read (const char *)
 
void clear ()
 
dgbmatrixzero ()
 
dgbmatrixidentity ()
 
void chsign ()
 
void copy (const dgbmatrix &)
 
void shallow_copy (const _dgbmatrix &)
 
dgbmatrixresize (const CPPL_INT &, const CPPL_INT &, const CPPL_INT &, const CPPL_INT &)
 
_drovector row (const CPPL_INT &) const
 
_dcovector col (const CPPL_INT &) const
 
CPPL_INT dgbsv (dgematrix &)
 
CPPL_INT dgbsv (dcovector &)
 
dgbmatrixoperator= (const dgbmatrix &)
 
dgbmatrixoperator= (const _dgbmatrix &)
 
dgbmatrixoperator+= (const dgbmatrix &)
 
dgbmatrixoperator+= (const _dgbmatrix &)
 
dgbmatrixoperator-= (const dgbmatrix &)
 
dgbmatrixoperator-= (const _dgbmatrix &)
 
dgbmatrixoperator*= (const dgbmatrix &)
 
dgbmatrixoperator*= (const _dgbmatrix &)
 
dgbmatrixoperator*= (const double &)
 
dgbmatrixoperator/= (const double &)
 

Public Attributes

CPPL_INT m
 matrix row size More...
 
CPPL_INT n
 matrix column size More...
 
CPPL_INT kl
 lower band width More...
 
CPPL_INT ku
 upper band width More...
 
double * array
 1D array to store matrix data More...
 
double ** darray
 array of pointers of column head addresses More...
 

Friends

std::ostream & operator<< (std::ostream &, const dgbmatrix &)
 
void swap (dgbmatrix &, dgbmatrix &)
 
_dgbmatrix _ (dgbmatrix &)
 
_dgbmatrix t (const dgbmatrix &)
 
_dgematrix i (const dgbmatrix &)
 
const dgbmatrixoperator+ (const dgbmatrix &)
 
_dgbmatrix operator- (const dgbmatrix &)
 
_dgematrix operator+ (const dgbmatrix &, const dgematrix &)
 
_dgematrix operator+ (const dgbmatrix &, const _dgematrix &)
 
_dgematrix operator+ (const dgbmatrix &, const dsymatrix &)
 
_dgematrix operator+ (const dgbmatrix &, const _dsymatrix &)
 
_dgbmatrix operator+ (const dgbmatrix &, const dgbmatrix &)
 
_dgbmatrix operator+ (const dgbmatrix &, const _dgbmatrix &)
 
_dgematrix operator+ (const dgbmatrix &, const dgsmatrix &)
 
_dgematrix operator+ (const dgbmatrix &, const _dgsmatrix &)
 
_dgematrix operator+ (const dgbmatrix &, const dssmatrix &)
 
_dgematrix operator+ (const dgbmatrix &, const _dssmatrix &)
 
_dgematrix operator- (const dgbmatrix &, const dgematrix &)
 
_dgematrix operator- (const dgbmatrix &, const _dgematrix &)
 
_dgematrix operator- (const dgbmatrix &, const dsymatrix &)
 
_dgematrix operator- (const dgbmatrix &, const _dsymatrix &)
 
_dgbmatrix operator- (const dgbmatrix &, const dgbmatrix &)
 
_dgbmatrix operator- (const dgbmatrix &, const _dgbmatrix &)
 
_dgematrix operator- (const dgbmatrix &, const dgsmatrix &)
 
_dgematrix operator- (const dgbmatrix &, const _dgsmatrix &)
 
_dgematrix operator- (const dgbmatrix &, const dssmatrix &)
 
_dgematrix operator- (const dgbmatrix &, const _dssmatrix &)
 
_dcovector operator* (const dgbmatrix &, const dcovector &)
 
_dcovector operator* (const dgbmatrix &, const _dcovector &)
 
_dgematrix operator* (const dgbmatrix &, const dgematrix &)
 
_dgematrix operator* (const dgbmatrix &, const _dgematrix &)
 
_dgematrix operator* (const dgbmatrix &, const dsymatrix &)
 
_dgematrix operator* (const dgbmatrix &, const _dsymatrix &)
 
_dgbmatrix operator* (const dgbmatrix &, const dgbmatrix &)
 
_dgbmatrix operator* (const dgbmatrix &, const _dgbmatrix &)
 
_dgematrix operator* (const dgbmatrix &, const dgsmatrix &)
 
_dgematrix operator* (const dgbmatrix &, const _dgsmatrix &)
 
_dgematrix operator* (const dgbmatrix &, const dssmatrix &)
 
_dgematrix operator* (const dgbmatrix &, const _dssmatrix &)
 
_dgbmatrix operator* (const dgbmatrix &, const double &)
 
_dgbmatrix operator/ (const dgbmatrix &, const double &)
 
_dgbmatrix operator* (const double &, const dgbmatrix &)
 

Detailed Description

Real Double-precision General Band Matrix Class.

Definition at line 3 of file dgbmatrix.hpp.

Constructor & Destructor Documentation

dgbmatrix::dgbmatrix ( )
inline

dgbmatrix constructor

Definition at line 3 of file dgbmatrix-constructor.hpp.

References array, darray, kl, ku, m, and n.

4 {CPPL_VERBOSE_REPORT;
5  //////// initialize ////////
6  m =0;
7  n =0;
8  kl=0;
9  ku=0;
10  array =NULL;
11  darray =NULL;
12 }
CPPL_INT m
matrix row size
Definition: dgbmatrix.hpp:9
double ** darray
array of pointers of column head addresses
Definition: dgbmatrix.hpp:14
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
double * array
1D array to store matrix data
Definition: dgbmatrix.hpp:13
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
dgbmatrix::dgbmatrix ( const dgbmatrix mat)
inline

dgbmatrix copy constructor

Definition at line 16 of file dgbmatrix-constructor.hpp.

References array, darray, i, kl, ku, m, and n.

17 {CPPL_VERBOSE_REPORT;
18  //////// initialize ////////
19  m =mat.m;
20  n =mat.n;
21  kl=mat.kl;
22  ku=mat.ku;
23  array =new double[(kl+ku+1)*n];
24  darray =new double*[n];
25  for(int i=0; i<n; i++){
26  darray[i] =&array[i*(kl+ku+1)];
27  }
28 
29  //////// copy ////////
30  CPPL_INT size =(kl+ku+1)*n;
31  CPPL_INT inc =1;
32  dcopy_(&size, mat.array, &inc, array, &inc);
33 }
friend _dgematrix i(const dgbmatrix &)
CPPL_INT m
matrix row size
Definition: dgbmatrix.hpp:9
double ** darray
array of pointers of column head addresses
Definition: dgbmatrix.hpp:14
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
double * array
1D array to store matrix data
Definition: dgbmatrix.hpp:13
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
dgbmatrix::dgbmatrix ( const _dgbmatrix mat)
inline

dgbmatrix constructor to cast _dgbmatrix

Definition at line 37 of file dgbmatrix-constructor.hpp.

References array, _dgbmatrix::array, darray, _dgbmatrix::darray, kl, _dgbmatrix::kl, _dgbmatrix::ku, ku, m, _dgbmatrix::m, _dgbmatrix::n, n, and _dgbmatrix::nullify().

38 {CPPL_VERBOSE_REPORT;
39  m =mat.m;
40  n =mat.n;
41  kl =mat.kl;
42  ku =mat.ku;
43  array =mat.array;
44  darray =mat.darray;
45 
46  mat.nullify();
47 }
CPPL_INT m
matrix row size
Definition: dgbmatrix.hpp:9
double ** darray
array of pointers of column head addresses
Definition: _dgbmatrix.hpp:14
void nullify() const
CPPL_INT ku
upper band width
Definition: _dgbmatrix.hpp:12
double ** darray
array of pointers of column head addresses
Definition: dgbmatrix.hpp:14
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT kl
lower band width
Definition: _dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
double * array
1D array to store matrix data
Definition: dgbmatrix.hpp:13
CPPL_INT n
matrix column size
Definition: _dgbmatrix.hpp:10
double * array
1D array to store matrix data
Definition: _dgbmatrix.hpp:13
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
CPPL_INT m
matrix row size
Definition: _dgbmatrix.hpp:9
dgbmatrix::dgbmatrix ( const CPPL_INT &  _m,
const CPPL_INT &  _n,
const CPPL_INT &  _kl,
const CPPL_INT &  _ku 
)
inline

dgbmatrix constructor with size specification

Definition at line 51 of file dgbmatrix-constructor.hpp.

References array, darray, i, kl, ku, m, and n.

53 {CPPL_VERBOSE_REPORT;
54 #ifdef CPPL_DEBUG
55  if( _m<0 || _n<0 || _kl<0 || _ku<0 || _m<_kl || _n<_ku ){
56  ERROR_REPORT;
57  std::cerr << "It is impossible to make a matrix you ordered. " << std::endl
58  << "Your input was (" << _m << "," << _n << ","<< _ku << "," << _kl << ")." << std::endl;
59  exit(1);
60  }
61 #endif//CPPL_DEBUG
62 
63  //////// initialize ////////
64  m =_m;
65  n =_n;
66  kl =_kl;
67  ku =_ku;
68  array =new double[(kl+ku+1)*n];
69  darray =new double*[n];
70  for(int i=0; i<n; i++){
71  darray[i] =&array[i*(kl+ku+1)];
72  }
73 }
friend _dgematrix i(const dgbmatrix &)
CPPL_INT m
matrix row size
Definition: dgbmatrix.hpp:9
double ** darray
array of pointers of column head addresses
Definition: dgbmatrix.hpp:14
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
double * array
1D array to store matrix data
Definition: dgbmatrix.hpp:13
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
dgbmatrix::dgbmatrix ( const char *  filename)
inline

dgbmatrix constructor with filename

Definition at line 77 of file dgbmatrix-constructor.hpp.

References array, darray, and read().

78 {CPPL_VERBOSE_REPORT;
79  array =NULL;
80  darray =NULL;
81 
82  //// read ////
83  read(filename);
84 }
double ** darray
array of pointers of column head addresses
Definition: dgbmatrix.hpp:14
double * array
1D array to store matrix data
Definition: dgbmatrix.hpp:13
void read(const char *)
dgbmatrix::~dgbmatrix ( )
inline

dgbmatrix destructor

Definition at line 92 of file dgbmatrix-constructor.hpp.

References array, and darray.

93 {CPPL_VERBOSE_REPORT;
94  //////// delete array ////////
95  delete [] array;
96  delete [] darray;
97 }
double ** darray
array of pointers of column head addresses
Definition: dgbmatrix.hpp:14
double * array
1D array to store matrix data
Definition: dgbmatrix.hpp:13

Member Function Documentation

_zgbmatrix dgbmatrix::to_zgbmatrix ( ) const
inline

cast to _zgbmatrix

Definition at line 3 of file dgbmatrix-cast.hpp.

References _, zgbmatrix::array, array, i, kl, ku, m, and n.

4 {CPPL_VERBOSE_REPORT;
5  zgbmatrix newmat(m,n,kl,ku);
6 
7  for(CPPL_INT i=0; i<(kl+ku+1)*n; i++){
8  newmat.array[i] =comple(array[i],0.0);
9  }
10 
11  return _(newmat);
12 }
friend _dgematrix i(const dgbmatrix &)
CPPL_INT m
matrix row size
Definition: dgbmatrix.hpp:9
friend _dgbmatrix _(dgbmatrix &)
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
double * array
1D array to store matrix data
Definition: dgbmatrix.hpp:13
Complex Double-precision General Band Matrix Class.
Definition: zgbmatrix.hpp:3
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
_dgematrix dgbmatrix::to_dgematrix ( ) const
inline

convert to _dgematrix

Definition at line 20 of file dgbmatrix-cast.hpp.

References _, i, kl, ku, m, n, and zero().

21 {CPPL_VERBOSE_REPORT;
22  dgematrix newmat( dgematrix(m,n).zero() );
23 
24  for(CPPL_INT i=0; i<m; i++){
25  const CPPL_INT jmax =std::min(n,i+ku+1);
26  for(CPPL_INT j=std::max(CPPL_INT(0),i-kl); j<jmax; j++){
27  newmat(i,j) =(*this)(i,j);
28  }
29  }
30 
31  return _(newmat);
32 }
friend _dgematrix i(const dgbmatrix &)
CPPL_INT m
matrix row size
Definition: dgbmatrix.hpp:9
friend _dgbmatrix _(dgbmatrix &)
Real Double-precision General Dence Matrix Class.
Definition: dgematrix.hpp:3
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
dgbmatrix & zero()
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
double & dgbmatrix::operator() ( const CPPL_INT &  i,
const CPPL_INT &  j 
)
inline

operator() for non-const object

Definition at line 3 of file dgbmatrix-io.hpp.

References darray, i, kl, ku, m, and n.

Referenced by dgbsv(), identity(), operator*=(), operator+=(), operator-=(), read(), and write().

4 {CPPL_VERBOSE_REPORT;
5 #ifdef CPPL_DEBUG
6  if( i<0 || j<0 || m<=i || n<=j || i-j>kl || j-i>ku ){
7  ERROR_REPORT;
8  std::cerr << "The required component is out of the matrix size." << std::endl
9  << "Your input is (" << i << "," << j << "), whereas the matrix size is " << m << "x" << n << " with kl=" << kl << ", ku=" << ku << "." << std::endl;
10  exit(1);
11  }
12 #endif//CPPL_DEBUG
13 
14  //return array[ku+i+(kl+ku)*j];
15  return darray[j][ku-j+i];
16 }
friend _dgematrix i(const dgbmatrix &)
CPPL_INT m
matrix row size
Definition: dgbmatrix.hpp:9
double ** darray
array of pointers of column head addresses
Definition: dgbmatrix.hpp:14
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
double dgbmatrix::operator() ( const CPPL_INT &  i,
const CPPL_INT &  j 
) const
inline

operator() for const object

Definition at line 20 of file dgbmatrix-io.hpp.

References darray, i, kl, ku, m, and n.

21 {CPPL_VERBOSE_REPORT;
22 #ifdef CPPL_DEBUG
23  if( i<0 || j<0 || m<=i || n<=j || i-j>kl || j-i>ku ){
24  ERROR_REPORT;
25  std::cerr << "The required component is out of the matrix size." << std::endl
26  << "Your input is (" << i << "," << j << "), whereas the matrix size is " << m << "x" << n << " with kl=" << kl << ", ku=" << ku << "." << std::endl;
27  exit(1);
28  }
29 #endif//CPPL_DEBUG
30 
31  //return array[ku+i+(kl+ku)*j];
32  return darray[j][ku-j+i];
33 }
friend _dgematrix i(const dgbmatrix &)
CPPL_INT m
matrix row size
Definition: dgbmatrix.hpp:9
double ** darray
array of pointers of column head addresses
Definition: dgbmatrix.hpp:14
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
dgbmatrix & dgbmatrix::set ( const CPPL_INT &  i,
const CPPL_INT &  j,
const double &  v 
)
inline

set value for const object

Definition at line 41 of file dgbmatrix-io.hpp.

References darray, i, kl, ku, m, and n.

42 {CPPL_VERBOSE_REPORT;
43 #ifdef CPPL_DEBUG
44  if( i<0 || j<0 || m<=i || n<=j || i-j>kl || j-i>ku ){
45  ERROR_REPORT;
46  std::cerr << "The required component is out of the matrix size." << std::endl
47  << "Your input is (" << i << "," << j << "), whereas the matrix size is " << m << "x" << n << " with kl=" << kl << ", ku=" << ku << "." << std::endl;
48  exit(1);
49  }
50 #endif//CPPL_DEBUG
51 
52  //array[ku+i+(kl+ku)*j] =v;
53  darray[j][ku-j+i] =v;
54  return *this;
55 }
friend _dgematrix i(const dgbmatrix &)
CPPL_INT m
matrix row size
Definition: dgbmatrix.hpp:9
double ** darray
array of pointers of column head addresses
Definition: dgbmatrix.hpp:14
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
void dgbmatrix::write ( const char *  filename) const
inline

Definition at line 80 of file dgbmatrix-io.hpp.

References i, kl, ku, m, n, and operator()().

81 {CPPL_VERBOSE_REPORT;
82  std::ofstream ofs(filename, std::ios::trunc);
83  ofs.setf(std::cout.flags());
84  ofs.precision(std::cout.precision());
85  ofs.width(std::cout.width());
86  ofs.fill(std::cout.fill());
87 
88  ofs << "#dgbmatrix" << " " << m << " " << n << " " << kl << " " << ku << std::endl;
89 
90  for(CPPL_INT i=0; i<m; i++){
91  const CPPL_INT jmax =std::min(n,i+ku+1);
92  for(CPPL_INT j=std::max(CPPL_INT(0),i-kl); j<jmax; j++){
93  ofs << operator()(i,j) << " ";
94  }
95  ofs << std::endl;
96  }
97 
98  ofs.close();
99 }
friend _dgematrix i(const dgbmatrix &)
CPPL_INT m
matrix row size
Definition: dgbmatrix.hpp:9
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
double & operator()(const CPPL_INT &, const CPPL_INT &)
Definition: dgbmatrix-io.hpp:3
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
void dgbmatrix::read ( const char *  filename)
inline

Definition at line 102 of file dgbmatrix-io.hpp.

References i, kl, ku, m, n, operator()(), and resize().

Referenced by dgbmatrix().

103 {CPPL_VERBOSE_REPORT;
104  std::ifstream s( filename );
105  if(!s){
106  ERROR_REPORT;
107  std::cerr << "The file \"" << filename << "\" can not be opened." << std::endl;
108  exit(1);
109  }
110 
111  std::string id;
112  s >> id;
113  if( id != "dgbmatrix" && id != "#dgbmatrix" ){
114  ERROR_REPORT;
115  std::cerr << "The type name of the file \"" << filename << "\" is not dgbmatrix." << std::endl
116  << "Its type name was " << id << " ." << std::endl;
117  exit(1);
118  }
119 
120  s >> m >> n >> kl >> ku;
121  resize(m, n, kl, ku);
122 
123  for(CPPL_INT i=0; i<m; i++){
124  const CPPL_INT jmax =std::min(n,i+ku+1);
125  for(CPPL_INT j=std::max(CPPL_INT(0),i-kl); j<jmax; j++){
126  s >> operator()(i,j);
127  }
128  }
129  if(s.eof()){
130  ERROR_REPORT;
131  std::cerr << "There is something is wrong with the file \"" << filename << "\"." << std::endl
132  << "Most likely, there is not enough data components, or a linefeed code or space code is missing at the end of the last line." << std::endl;
133  exit(1);
134  }
135 
136  s >> id;
137  if(!s.eof()){
138  ERROR_REPORT;
139  std::cerr << "There is something is wrong with the file \"" << filename << "\"." << std::endl
140  << "Most likely, there are extra data components." << std::endl;
141  exit(1);
142  }
143 
144  s.close();
145 }
friend _dgematrix i(const dgbmatrix &)
CPPL_INT m
matrix row size
Definition: dgbmatrix.hpp:9
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
dgbmatrix & resize(const CPPL_INT &, const CPPL_INT &, const CPPL_INT &, const CPPL_INT &)
double & operator()(const CPPL_INT &, const CPPL_INT &)
Definition: dgbmatrix-io.hpp:3
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
void dgbmatrix::clear ( )
inline

clear all the matrix data and set the sizes 0

Definition at line 3 of file dgbmatrix-misc.hpp.

References array, darray, kl, ku, m, and n.

4 {CPPL_VERBOSE_REPORT;
5  m =0;
6  n =0;
7  kl =0;
8  ku =0;
9  delete [] array;
10  array=NULL;
11  delete [] darray;
12  darray=NULL;
13 }
CPPL_INT m
matrix row size
Definition: dgbmatrix.hpp:9
double ** darray
array of pointers of column head addresses
Definition: dgbmatrix.hpp:14
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
double * array
1D array to store matrix data
Definition: dgbmatrix.hpp:13
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
dgbmatrix & dgbmatrix::zero ( )
inline

change the matrix into a zero matrix

Definition at line 18 of file dgbmatrix-misc.hpp.

References array, i, kl, ku, and n.

Referenced by col(), operator*(), operator*=(), operator+(), operator+=(), operator-(), operator-=(), row(), and to_dgematrix().

19 {CPPL_VERBOSE_REPORT;
20  const CPPL_INT size =(kl+ku+1)*n;
21  for(CPPL_INT i=0; i<size; i++){
22  array[i] =0.0;
23  }
24  return *this;
25 }
friend _dgematrix i(const dgbmatrix &)
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
double * array
1D array to store matrix data
Definition: dgbmatrix.hpp:13
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
dgbmatrix & dgbmatrix::identity ( )
inline

change the matrix into an identity matrix

Definition at line 29 of file dgbmatrix-misc.hpp.

References array, i, kl, ku, m, n, and operator()().

30 {CPPL_VERBOSE_REPORT;
31 #ifdef CPPL_DEBUG
32  if(m!=n){
33  ERROR_REPORT;
34  std::cerr << "Only square matrix can be a identity matrix." << std::endl
35  << "The matrix size was " << m << "x" << n << "." << std::endl;
36  exit(1);
37  }
38 #endif//CPPL_DEBUG
39 
40  const CPPL_INT size =(kl+ku+1)*n;
41  for(CPPL_INT i=0; i<size; i++){
42  array[i] =0.0;
43  }
44  for(CPPL_INT i=0; i<m; i++){
45  operator()(i,i) =1.0;
46  }
47  return *this;
48 }
friend _dgematrix i(const dgbmatrix &)
CPPL_INT m
matrix row size
Definition: dgbmatrix.hpp:9
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
double * array
1D array to store matrix data
Definition: dgbmatrix.hpp:13
double & operator()(const CPPL_INT &, const CPPL_INT &)
Definition: dgbmatrix-io.hpp:3
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
void dgbmatrix::chsign ( )
inline

change sign(+/-) of the matrix

Definition at line 52 of file dgbmatrix-misc.hpp.

References array, i, kl, ku, and n.

53 {CPPL_VERBOSE_REPORT;
54  const CPPL_INT size =(kl+ku+1)*n;
55  for(CPPL_INT i=0; i<size; i++){
56  array[i] =-array[i];
57  }
58 }
friend _dgematrix i(const dgbmatrix &)
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
double * array
1D array to store matrix data
Definition: dgbmatrix.hpp:13
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
void dgbmatrix::copy ( const dgbmatrix mat)
inline

make a deep copy of the matrix

Definition at line 61 of file dgbmatrix-misc.hpp.

References array, darray, i, kl, ku, m, and n.

Referenced by operator=().

62 {CPPL_VERBOSE_REPORT;
63  m =mat.m;
64  n =mat.n;
65  kl =mat.kl;
66  ku =mat.ku;
67  delete [] array;
68  array =new double[(mat.kl+mat.ku+1)*mat.n];
69  delete [] darray;
70  darray =new double*[n];
71  for(int i=0; i<n; i++){
72  darray[i] =&array[i*(kl+ku+1)];
73  }
74 
75  CPPL_INT size =(mat.kl+mat.ku+1)*mat.n;
76  CPPL_INT inc =1;
77  dcopy_(&size, mat.array, &inc, array, &inc);
78 }
friend _dgematrix i(const dgbmatrix &)
CPPL_INT m
matrix row size
Definition: dgbmatrix.hpp:9
double ** darray
array of pointers of column head addresses
Definition: dgbmatrix.hpp:14
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
double * array
1D array to store matrix data
Definition: dgbmatrix.hpp:13
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
void dgbmatrix::shallow_copy ( const _dgbmatrix mat)
inline

make a shallow copy of the matrix
This function is not designed to be used in project codes.

Definition at line 83 of file dgbmatrix-misc.hpp.

References array, _dgbmatrix::array, darray, _dgbmatrix::darray, kl, _dgbmatrix::kl, _dgbmatrix::ku, ku, m, _dgbmatrix::m, _dgbmatrix::n, n, and _dgbmatrix::nullify().

Referenced by operator=().

84 {CPPL_VERBOSE_REPORT;
85  m =mat.m;
86  n =mat.n;
87  kl =mat.kl;
88  ku =mat.ku;
89  delete [] array;
90  array =mat.array;
91  delete [] darray;
92  darray =mat.darray;
93 
94  mat.nullify();
95 }
CPPL_INT m
matrix row size
Definition: dgbmatrix.hpp:9
double ** darray
array of pointers of column head addresses
Definition: _dgbmatrix.hpp:14
void nullify() const
CPPL_INT ku
upper band width
Definition: _dgbmatrix.hpp:12
double ** darray
array of pointers of column head addresses
Definition: dgbmatrix.hpp:14
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT kl
lower band width
Definition: _dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
double * array
1D array to store matrix data
Definition: dgbmatrix.hpp:13
CPPL_INT n
matrix column size
Definition: _dgbmatrix.hpp:10
double * array
1D array to store matrix data
Definition: _dgbmatrix.hpp:13
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
CPPL_INT m
matrix row size
Definition: _dgbmatrix.hpp:9
dgbmatrix & dgbmatrix::resize ( const CPPL_INT &  _m,
const CPPL_INT &  _n,
const CPPL_INT &  _kl,
const CPPL_INT &  _ku 
)
inline

resize the matrix

Definition at line 99 of file dgbmatrix-misc.hpp.

References array, darray, i, kl, ku, m, and n.

Referenced by dgematrix::dgesvd(), and read().

101 {CPPL_VERBOSE_REPORT;
102 #ifdef CPPL_DEBUG
103  if( _m<0 || _n<0 || _kl<0 || _ku<0 || _m<_kl || _n<_ku ){
104  ERROR_REPORT;
105  std::cerr << "It is impossible to make a matrix you ordered. " << std::endl
106  << "Your input was (" << _m << "," << _n << ","<< _ku << "," << _kl << ")." << std::endl;
107  exit(1);
108  }
109 #endif//CPPL_DEBUG
110 
111  m =_m;
112  n =_n;
113  kl =_kl;
114  ku =_ku;
115  delete [] array;
116  array =new double[(kl+ku+1)*n];
117  delete [] darray;
118  darray =new double*[n];
119  for(int i=0; i<n; i++){ darray[i] =&array[i*(kl+ku+1)]; }
120 
121  return *this;
122 }
friend _dgematrix i(const dgbmatrix &)
CPPL_INT m
matrix row size
Definition: dgbmatrix.hpp:9
double ** darray
array of pointers of column head addresses
Definition: dgbmatrix.hpp:14
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
double * array
1D array to store matrix data
Definition: dgbmatrix.hpp:13
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
_drovector dgbmatrix::row ( const CPPL_INT &  _m) const
inline

get row of the matrix

Definition at line 130 of file dgbmatrix-misc.hpp.

References _, kl, ku, m, n, and zero().

131 {CPPL_VERBOSE_REPORT;
132 #ifdef CPPL_DEBUG
133  if( _m<0 || _m>m ){
134  ERROR_REPORT;
135  std::cerr << "Input row number must be between 0 and " << m << "." << std::endl
136  << "Your input was " << _m << "." << std::endl;
137  exit(1);
138  }
139 #endif//CPPL_DEBUG
140 
141  drovector v( drovector(n).zero() );
142 
143  const CPPL_INT jmax =std::min(n,_m+ku+1);
144  for(CPPL_INT j=std::max(CPPL_INT(0),_m-kl); j<jmax; j++){
145  v(j)=(*this)(_m,j);
146  }
147 
148  return _(v);
149 }
CPPL_INT m
matrix row size
Definition: dgbmatrix.hpp:9
friend _dgbmatrix _(dgbmatrix &)
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
Real Double-precision Row Vector Class.
Definition: drovector.hpp:3
dgbmatrix & zero()
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
_dcovector dgbmatrix::col ( const CPPL_INT &  _n) const
inline

get column of the matrix

Definition at line 153 of file dgbmatrix-misc.hpp.

References _, i, kl, ku, m, n, and zero().

154 {CPPL_VERBOSE_REPORT;
155 #ifdef CPPL_DEBUG
156  if( _n<0 || _n>n ){
157  ERROR_REPORT;
158  std::cerr << "Input row number must be between 0 and " << n << "." << std::endl
159  << "Your input was " << _n << "." << std::endl;
160  exit(1);
161  }
162 #endif//CPPL_DEBUG
163 
164  dcovector v( dcovector(m).zero() );
165 
166  const CPPL_INT imax =std::min(m,_n+kl+1);
167  for(CPPL_INT i=std::max(CPPL_INT(0),_n-ku); i<imax; i++){
168  v(i)=(*this)(i,_n);
169  }
170 
171  return _(v);
172 }
friend _dgematrix i(const dgbmatrix &)
CPPL_INT m
matrix row size
Definition: dgbmatrix.hpp:9
friend _dgbmatrix _(dgbmatrix &)
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
Real Double-precision Column Vector Class.
Definition: dcovector.hpp:3
dgbmatrix & zero()
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
CPPL_INT dgbmatrix::dgbsv ( dgematrix mat)
inline

solve A*X=Y using dgbsv
The argument is dgematrix Y. Y is overwritten and become the solution X. A is also overwritten.

Definition at line 5 of file dgbmatrix-lapack.hpp.

References dgematrix::array, array, i, kl, ku, m, dgematrix::m, n, dgematrix::n, operator()(), and swap.

Referenced by i().

6 {CPPL_VERBOSE_REPORT;
7 #ifdef CPPL_DEBUG
8  if(m!=n || n!=mat.m){
9  ERROR_REPORT;
10  std::cerr << "These matrix and vector cannot be solved." << std::endl
11  << "Your input was (" << m << "x" << n << ") and (" << mat.m << "x" << mat.n << ")." << std::endl;
12  exit(1);
13  }
14 #endif//CPPL_DEBUG
15 
16  dgbmatrix newmat(m,n,kl,ku+kl);
17  for(CPPL_INT i=0; i<m; i++){
18  const CPPL_INT jmax =std::min(n,i+ku+1);
19  for(CPPL_INT j=std::max(CPPL_INT(0),i-kl); j<jmax; j++){
20  newmat(i,j) =operator()(i,j);
21  }
22  }
23 
24  CPPL_INT NRHS(mat.n), LDAB(2*kl+ku+1), *IPIV(new CPPL_INT[n]), LDB(mat.m), INFO(1);
25  dgbsv_(&n, &kl, &ku, &NRHS, newmat.array, &LDAB, IPIV, mat.array, &LDB, &INFO);
26  delete [] IPIV;
27 
28  swap(*this,newmat);
29 
30  if(INFO!=0){
31  WARNING_REPORT;
32  std::cerr << "Serious trouble happend. INFO = " << INFO << "." << std::endl;
33  }
34  return INFO;
35 }
friend _dgematrix i(const dgbmatrix &)
CPPL_INT m
matrix row size
Definition: dgbmatrix.hpp:9
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
double * array
1D array to store matrix data
Definition: dgematrix.hpp:11
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
Real Double-precision General Band Matrix Class.
Definition: dgbmatrix.hpp:3
double & operator()(const CPPL_INT &, const CPPL_INT &)
Definition: dgbmatrix-io.hpp:3
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
friend void swap(dgbmatrix &, dgbmatrix &)
CPPL_INT dgbmatrix::dgbsv ( dcovector vec)
inline

solve A*x=y using dgbsv
The argument is dcovector y. y is overwritten and become the solution x. A is also overwritten.

Definition at line 41 of file dgbmatrix-lapack.hpp.

References dcovector::array, array, i, kl, ku, dcovector::l, m, n, operator()(), and swap.

42 {CPPL_VERBOSE_REPORT;
43 #ifdef CPPL_DEBUG
44  if(m!=n || n!=vec.l){
45  ERROR_REPORT;
46  std::cerr << "These matrix and vector cannot be solved." << std::endl
47  << "Your input was (" << m << "x" << n << ") and (" << vec.l << ")." << std::endl;
48  exit(1);
49  }
50 #endif//CPPL_DEBUG
51 
52  dgbmatrix newmat(m,n,kl,ku+kl);
53  for(CPPL_INT i=0; i<m; i++){
54  const CPPL_INT jmax =std::min(n,i+ku+1);
55  for(CPPL_INT j=std::max(CPPL_INT(0),i-kl); j<jmax; j++){
56  newmat(i,j) =operator()(i,j);
57  }
58  }
59 
60  CPPL_INT NRHS(1), LDAB(2*kl+ku+1), *IPIV(new CPPL_INT[n]), LDB(vec.l), INFO(1);
61  dgbsv_(&n, &kl, &ku, &NRHS, newmat.array, &LDAB, IPIV, vec.array, &LDB, &INFO);
62  delete [] IPIV;
63 
64  swap(*this,newmat);
65 
66  if(INFO!=0){
67  WARNING_REPORT;
68  std::cerr << "Serious trouble happend. INFO = " << INFO << "." << std::endl;
69  }
70  return INFO;
71 }
friend _dgematrix i(const dgbmatrix &)
CPPL_INT m
matrix row size
Definition: dgbmatrix.hpp:9
CPPL_INT l
vector size
Definition: dcovector.hpp:9
double * array
1D array to store vector data
Definition: dcovector.hpp:11
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
Real Double-precision General Band Matrix Class.
Definition: dgbmatrix.hpp:3
double & operator()(const CPPL_INT &, const CPPL_INT &)
Definition: dgbmatrix-io.hpp:3
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
friend void swap(dgbmatrix &, dgbmatrix &)
dgbmatrix & dgbmatrix::operator= ( const dgbmatrix mat)
inline

dgbmatrix=dgbmatrix operator
The left side matrix is overwritten thoroughly including band width.

Definition at line 4 of file dgbmatrix-dgbmatrix.hpp.

References array, and copy().

5 {CPPL_VERBOSE_REPORT;
6  if(array!=mat.array){ // if it is NOT self substitution
7  copy(mat);
8  }
9  return *this;
10 }
double * array
1D array to store matrix data
Definition: dgbmatrix.hpp:13
void copy(const dgbmatrix &)
dgbmatrix & dgbmatrix::operator= ( const _dgbmatrix mat)
inline

dgbmatrix=_dgbmatrix operator

Definition at line 3 of file dgbmatrix-_dgbmatrix.hpp.

References shallow_copy().

4 {CPPL_VERBOSE_REPORT;
5  shallow_copy(mat);
6  return *this;
7 }
void shallow_copy(const _dgbmatrix &)
dgbmatrix & dgbmatrix::operator+= ( const dgbmatrix mat)
inline

dgbmatrix+=dgbmatrix operator
If the band width of the left side matrix is narrower than the right side matrix, the band width of the left side matrix become thicker as same as the right side matrix.

Definition at line 19 of file dgbmatrix-dgbmatrix.hpp.

References i, kl, ku, m, n, operator()(), swap, and zero().

20 {CPPL_VERBOSE_REPORT;
21 #ifdef CPPL_DEBUG
22  if(n!=mat.n || m!=mat.m){
23  ERROR_REPORT;
24  std::cerr << "These two matrises can not make a summation." << std::endl
25  << "Your input was" << "(" << m <<"x"<< n <<","<< kl <<":"<< ku << ") "<< "+=" << "("<< mat.m <<"x"<< mat.n <<","<< mat.kl <<":"<< mat.ku <<") " << std::endl;
26  exit(1);
27  }
28 #endif//CPPL_DEBUG
29 
30  if(kl>=mat.kl && ku>=mat.ku){
31  for(CPPL_INT i=0; i<m; i++){
32  const CPPL_INT jmax =std::min(n,i+mat.ku+1);
33  for(CPPL_INT j=std::max(CPPL_INT(0),i-mat.kl); j<jmax; j++){
34  operator()(i,j) += mat(i,j);
35  }
36  }
37 
38  return *this;
39  }
40 
41  else{
42  dgbmatrix newmat(m,n,std::max(kl,mat.kl),std::max(ku,mat.ku));
43  newmat.zero();
44  for(CPPL_INT i=0; i<m; i++){
45  const CPPL_INT jmax1 =std::min(n,i+ku+1);
46  for(CPPL_INT j=std::max(CPPL_INT(0),i-kl); j<jmax1; j++){
47  newmat(i,j) += operator()(i,j);
48  }
49  const CPPL_INT jmax2 =std::min(mat.n,i+mat.ku+1);
50  for(CPPL_INT j=std::max(CPPL_INT(0),i-mat.kl); j<jmax2; j++){
51  newmat(i,j) += mat(i,j);
52  }
53  }
54 
55  swap(*this,newmat);
56  return *this;
57  }
58 }
friend _dgematrix i(const dgbmatrix &)
CPPL_INT m
matrix row size
Definition: dgbmatrix.hpp:9
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
Real Double-precision General Band Matrix Class.
Definition: dgbmatrix.hpp:3
double & operator()(const CPPL_INT &, const CPPL_INT &)
Definition: dgbmatrix-io.hpp:3
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
friend void swap(dgbmatrix &, dgbmatrix &)
dgbmatrix & dgbmatrix::operator+= ( const _dgbmatrix mat)
inline

dgbmatrix+=_dgbmatrix operator
If the band width of the left side matrix is narrower than the right side matrix, the band width of the left side matrix become thicker as same as the right side matrix.

Definition at line 16 of file dgbmatrix-_dgbmatrix.hpp.

References _dgbmatrix::destroy(), i, kl, _dgbmatrix::kl, _dgbmatrix::ku, ku, m, _dgbmatrix::m, _dgbmatrix::n, n, operator()(), swap, and zero().

17 {CPPL_VERBOSE_REPORT;
18 #ifdef CPPL_DEBUG
19  if(n!=mat.n || m!=mat.m){
20  ERROR_REPORT;
21  std::cerr << "These two matrises can not make a summation." << std::endl
22  << "Your input was" << "(" << m <<"x"<< n <<","<< kl <<":"<< ku << ") "<< "+=" << "("<< mat.m <<"x"<< mat.n <<","<< mat.kl <<":"<< mat.ku <<") " << std::endl;
23  exit(1);
24  }
25 #endif//CPPL_DEBUG
26 
27  if(kl>=mat.kl && ku>=mat.ku){
28  for(CPPL_INT i=0; i<m; i++){
29  const CPPL_INT jmax =std::min(n,i+mat.ku+1);
30  for(CPPL_INT j=std::max(CPPL_INT(0),i-mat.kl); j<jmax; j++){
31  operator()(i,j) += mat(i,j);
32  }
33  }
34 
35  mat.destroy();
36  return *this;
37  }
38  else{
39  dgbmatrix newmat(m,n,std::max(kl,mat.kl),std::max(ku,mat.ku));
40  newmat.zero();
41  for(CPPL_INT i=0; i<m; i++){
42  const CPPL_INT jmax1 =std::min(n,i+ku+1);
43  for(CPPL_INT j=std::max(CPPL_INT(0),i-kl); j<jmax1; j++){
44  newmat(i,j)+=operator()(i,j);
45  }
46  const CPPL_INT jmax2 =std::min(mat.n,i+mat.ku+1);
47  for(CPPL_INT j=std::max(CPPL_INT(0),i-mat.kl); j<jmax2; j++){
48  newmat(i,j)+=mat(i,j);
49  }
50  }
51 
52  swap(*this,newmat);
53  mat.destroy();
54  return *this;
55  }
56 }
friend _dgematrix i(const dgbmatrix &)
CPPL_INT m
matrix row size
Definition: dgbmatrix.hpp:9
CPPL_INT ku
upper band width
Definition: _dgbmatrix.hpp:12
void destroy() const
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT kl
lower band width
Definition: _dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
CPPL_INT n
matrix column size
Definition: _dgbmatrix.hpp:10
Real Double-precision General Band Matrix Class.
Definition: dgbmatrix.hpp:3
double & operator()(const CPPL_INT &, const CPPL_INT &)
Definition: dgbmatrix-io.hpp:3
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
friend void swap(dgbmatrix &, dgbmatrix &)
CPPL_INT m
matrix row size
Definition: _dgbmatrix.hpp:9
dgbmatrix & dgbmatrix::operator-= ( const dgbmatrix mat)
inline

dgbmatrix-=dgbmatrix operator
If the band width of the left side matrix is narrower than the right side matrix, the band width of the left side matrix become thicker as same as the right side matrix.

Definition at line 63 of file dgbmatrix-dgbmatrix.hpp.

References i, kl, ku, m, n, operator()(), swap, and zero().

64 {CPPL_VERBOSE_REPORT;
65 #ifdef CPPL_DEBUG
66  if(n!=mat.n || m!=mat.m){
67  ERROR_REPORT;
68  std::cerr << "These two matrises can not make a subtraction." << std::endl
69  << "Your input was" << "(" << m <<"x"<< n <<","<< kl <<":"<< ku << ") "<< "-=" << "("<< mat.m <<"x"<< mat.n <<","<< mat.kl <<":"<< mat.ku <<") " << std::endl;
70  exit(1);
71  }
72 #endif//CPPL_DEBUG
73 
74  if(kl>=mat.kl && ku>=mat.ku){
75  for(CPPL_INT i=0; i<m; i++){
76  const CPPL_INT jmax =std::min(n,i+mat.ku+1);
77  for(CPPL_INT j=std::max(CPPL_INT(0),i-mat.kl); j<jmax; j++){
78  operator()(i,j) -= mat(i,j);
79  }
80  }
81 
82  return *this;
83  }
84 
85  else{
86  dgbmatrix newmat(m,n,std::max(kl,mat.kl),std::max(ku,mat.ku));
87  newmat.zero();
88  for(CPPL_INT i=0; i<m; i++){
89  const CPPL_INT jmax1 =std::min(n,i+ku+1);
90  for(CPPL_INT j=std::max(CPPL_INT(0),i-kl); j<jmax1; j++){
91  newmat(i,j) += operator()(i,j);
92  }
93  const CPPL_INT jmax2 =std::min(mat.n,i+mat.ku+1);
94  for(CPPL_INT j=std::max(CPPL_INT(0),i-mat.kl); j<jmax2; j++){
95  newmat(i,j) -= mat(i,j);
96  }
97  }
98 
99  swap(*this,newmat);
100  return *this;
101  }
102 }
friend _dgematrix i(const dgbmatrix &)
CPPL_INT m
matrix row size
Definition: dgbmatrix.hpp:9
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
Real Double-precision General Band Matrix Class.
Definition: dgbmatrix.hpp:3
double & operator()(const CPPL_INT &, const CPPL_INT &)
Definition: dgbmatrix-io.hpp:3
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
friend void swap(dgbmatrix &, dgbmatrix &)
dgbmatrix & dgbmatrix::operator-= ( const _dgbmatrix mat)
inline

dgbmatrix-=_dgbmatrix operator
If the band width of the left side matrix is narrower than the right side matrix, the band width of the left side matrix become thicker as same as the right side matrix.

Definition at line 61 of file dgbmatrix-_dgbmatrix.hpp.

References _dgbmatrix::destroy(), i, kl, _dgbmatrix::kl, _dgbmatrix::ku, ku, m, _dgbmatrix::m, _dgbmatrix::n, n, operator()(), swap, and zero().

62 {CPPL_VERBOSE_REPORT;
63 #ifdef CPPL_DEBUG
64  if(n!=mat.n || m!=mat.m){
65  ERROR_REPORT;
66  std::cerr << "These two matrises can not make a subtraction." << std::endl
67  << "Your input was" << "(" << m <<"x"<< n <<","<< kl <<":"<< ku << ") "<< "-=" << "("<< mat.m <<"x"<< mat.n <<","<< mat.kl <<":"<< mat.ku <<") " << std::endl;
68  exit(1);
69  }
70 #endif//CPPL_DEBUG
71 
72  if(kl>=mat.kl && ku>=mat.ku){
73  for(CPPL_INT i=0; i<m; i++){
74  const CPPL_INT jmax =std::min(n,i+mat.ku+1);
75  for(CPPL_INT j=std::max(CPPL_INT(0),i-mat.kl); j<jmax; j++){
76  operator()(i,j) -= mat(i,j);
77  }
78  }
79 
80  mat.destroy();
81  return *this;
82  }
83  else{
84  dgbmatrix newmat(m,n,std::max(kl,mat.kl),std::max(ku,mat.ku));
85  newmat.zero();
86  for(CPPL_INT i=0; i<m; i++){
87  const CPPL_INT jmax1 =std::min(n,i+ku+1);
88  for(CPPL_INT j=std::max(CPPL_INT(0),i-kl); j<jmax1; j++){
89  newmat(i,j)+=operator()(i,j);
90  }
91  const CPPL_INT jmax2 =std::min(mat.n,i+mat.ku+1);
92  for(CPPL_INT j=std::max(CPPL_INT(0),i-mat.kl); j<jmax2; j++){
93  newmat(i,j)-=mat(i,j);
94  }
95  }
96 
97  swap(*this,newmat);
98  mat.destroy();
99  return *this;
100  }
101 }
friend _dgematrix i(const dgbmatrix &)
CPPL_INT m
matrix row size
Definition: dgbmatrix.hpp:9
CPPL_INT ku
upper band width
Definition: _dgbmatrix.hpp:12
void destroy() const
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT kl
lower band width
Definition: _dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
CPPL_INT n
matrix column size
Definition: _dgbmatrix.hpp:10
Real Double-precision General Band Matrix Class.
Definition: dgbmatrix.hpp:3
double & operator()(const CPPL_INT &, const CPPL_INT &)
Definition: dgbmatrix-io.hpp:3
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
friend void swap(dgbmatrix &, dgbmatrix &)
CPPL_INT m
matrix row size
Definition: _dgbmatrix.hpp:9
dgbmatrix & dgbmatrix::operator*= ( const dgbmatrix mat)
inline

dgbmatrix*=dgbmatrix operator

Definition at line 106 of file dgbmatrix-dgbmatrix.hpp.

References i, kl, ku, m, n, operator()(), swap, and zero().

107 {CPPL_VERBOSE_REPORT;
108 #ifdef CPPL_DEBUG
109  if(n!=mat.m){
110  ERROR_REPORT;
111  std::cerr << "These two matrises can not make a product." << std::endl
112  << "Your input was (" << m << "x" << n << ") * (" << mat.m << "x" << mat.n << ")." << std::endl;
113  exit(1);
114  }
115 #endif//CPPL_DEBUG
116 
117  dgbmatrix newmat( m, mat.n, std::min(kl+mat.kl, m-1), std::min(ku+mat.ku, mat.n-1) );
118  newmat.zero();
119 
120  for(CPPL_INT i=0; i<newmat.m; i++){
121  const CPPL_INT jmax =std::min(newmat.n,i+newmat.ku+1);
122  for(CPPL_INT j=std::max(CPPL_INT(0),i-newmat.kl); j<jmax; j++){
123  const CPPL_INT kmax =std::min( std::min(n,i+ku+1), std::min(mat.m,j+mat.kl+1) );
124  for(CPPL_INT k=std::max( std::max(CPPL_INT(0),i-kl), std::max(CPPL_INT(0),j-mat.ku) ); k<kmax; k++){
125  newmat(i,j) += operator()(i,k)*mat(k,j);
126  }
127  }
128  }
129 
130  swap(*this,newmat);
131  return *this;
132 }
friend _dgematrix i(const dgbmatrix &)
CPPL_INT m
matrix row size
Definition: dgbmatrix.hpp:9
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
CPPL_INT m
matrix row size
Definition: _dgematrix.hpp:9
Real Double-precision General Band Matrix Class.
Definition: dgbmatrix.hpp:3
double & operator()(const CPPL_INT &, const CPPL_INT &)
Definition: dgbmatrix-io.hpp:3
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
friend void swap(dgbmatrix &, dgbmatrix &)
dgbmatrix & dgbmatrix::operator*= ( const _dgbmatrix mat)
inline

dgbmatrix*=_dgbmatrix operator

Definition at line 105 of file dgbmatrix-_dgbmatrix.hpp.

References _dgbmatrix::destroy(), i, kl, _dgbmatrix::kl, _dgbmatrix::ku, ku, _dgbmatrix::m, m, _dgbmatrix::n, n, operator()(), swap, and zero().

106 {CPPL_VERBOSE_REPORT;
107 #ifdef CPPL_DEBUG
108  if(n!=mat.m){
109  ERROR_REPORT;
110  std::cerr << "These two matrises can not make a product." << std::endl
111  << "Your input was (" << m << "x" << n << ") * (" << mat.m << "x" << mat.n << ")." << std::endl;
112  exit(1);
113  }
114 #endif//CPPL_DEBUG
115 
116  dgbmatrix newmat( m, mat.n, std::min(kl+mat.kl, m-1), std::min(ku+mat.ku, mat.n-1) );
117  newmat.zero();
118 
119  for(CPPL_INT i=0; i<newmat.m; i++){
120  const CPPL_INT jmax =std::min(newmat.n,i+newmat.ku+1);
121  for(CPPL_INT j=std::max(CPPL_INT(0),i-newmat.kl); j<jmax; j++){
122  const CPPL_INT kmax =std::min( std::min(n,i+ku+1), std::min(mat.m,j+mat.kl+1) );
123  for(CPPL_INT k=std::max( std::max(CPPL_INT(0),i-kl), std::max(CPPL_INT(0),j-mat.ku) ); k<kmax; k++){
124  newmat(i,j)+= operator()(i,k)*mat(k,j);
125  }
126  }
127  }
128 
129  swap(*this,newmat);
130  mat.destroy();
131  return *this;
132 }
friend _dgematrix i(const dgbmatrix &)
CPPL_INT m
matrix row size
Definition: dgbmatrix.hpp:9
CPPL_INT ku
upper band width
Definition: _dgbmatrix.hpp:12
void destroy() const
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT kl
lower band width
Definition: _dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
CPPL_INT n
matrix column size
Definition: _dgbmatrix.hpp:10
CPPL_INT m
matrix row size
Definition: _dgematrix.hpp:9
Real Double-precision General Band Matrix Class.
Definition: dgbmatrix.hpp:3
double & operator()(const CPPL_INT &, const CPPL_INT &)
Definition: dgbmatrix-io.hpp:3
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
friend void swap(dgbmatrix &, dgbmatrix &)
CPPL_INT m
matrix row size
Definition: _dgbmatrix.hpp:9
dgbmatrix & dgbmatrix::operator*= ( const double &  d)
inline

dgbmatrix*=double operator

Definition at line 3 of file dgbmatrix-double.hpp.

References array, kl, ku, and n.

4 {CPPL_VERBOSE_REPORT;
5  CPPL_INT size =(kl+ku+1)*n;
6  CPPL_INT inc =1;
7  dscal_(&size, &d, array, &inc);
8  return *this;
9 }
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
double * array
1D array to store matrix data
Definition: dgbmatrix.hpp:13
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
dgbmatrix & dgbmatrix::operator/= ( const double &  d)
inline

dgbmatrix/=double operator

Definition at line 13 of file dgbmatrix-double.hpp.

References array, kl, ku, and n.

14 {CPPL_VERBOSE_REPORT;
15  CPPL_INT size =(kl+ku+1)*n;
16  double dinv =1./d;
17  CPPL_INT inc =1;
18  dscal_(&size, &dinv, array, &inc);
19  return *this;
20 }
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
double * array
1D array to store matrix data
Definition: dgbmatrix.hpp:13
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10

Friends And Related Function Documentation

std::ostream& operator<< ( std::ostream &  s,
const dgbmatrix mat 
)
friend

Definition at line 62 of file dgbmatrix-io.hpp.

63 {CPPL_VERBOSE_REPORT;
64  for(CPPL_INT i=0; i<mat.m; i++){
65  for(CPPL_INT j=0; j<mat.n; j++){
66  if( i-j>mat.kl || j-i>mat.ku ){ s << " x"; }
67  else{ s << " " << mat(i,j); }
68  }
69  s << std::endl;
70  }
71 
72  return s;
73 }
friend _dgematrix i(const dgbmatrix &)
CPPL_INT m
matrix row size
Definition: dgbmatrix.hpp:9
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
void swap ( dgbmatrix A,
dgbmatrix B 
)
friend

swap two matrices

Definition at line 180 of file dgbmatrix-misc.hpp.

Referenced by dgbsv(), operator*=(), operator+=(), and operator-=().

181 {CPPL_VERBOSE_REPORT;
182  CPPL_INT A_m =A.m, A_n =A.n, A_kl =A.kl, A_ku =A.ku;
183  double* A_array =A.array;
184  double** A_darray=A.darray;
185  A.m=B.m; A.n=B.n; A.kl=B.kl; A.ku=B.ku; A.array=B.array; A.darray=B.darray;
186  B.m=A_m; B.n=A_n; B.kl=A_kl; B.ku=A_ku; B.array=A_array; B.darray=A_darray;
187 }
CPPL_INT m
matrix row size
Definition: dgbmatrix.hpp:9
double ** darray
array of pointers of column head addresses
Definition: dgbmatrix.hpp:14
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
double * array
1D array to store matrix data
Definition: dgbmatrix.hpp:13
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
_dgbmatrix _ ( dgbmatrix mat)
friend

convert user object to smart-temporary object

Definition at line 191 of file dgbmatrix-misc.hpp.

Referenced by col(), row(), to_dgematrix(), and to_zgbmatrix().

192 {CPPL_VERBOSE_REPORT;
193  _dgbmatrix newmat;
194 
195  //////// shallow copy ////////
196  newmat.m =mat.m;
197  newmat.n =mat.n;
198  newmat.kl =mat.kl;
199  newmat.ku =mat.ku;
200  newmat.array =mat.array;
201  newmat.darray =mat.darray;
202 
203  //////// nullify ////////
204  mat.m =0;
205  mat.n =0;
206  mat.kl =0;
207  mat.ku =0;
208  mat.array =NULL;
209  mat.darray =NULL;
210 
211  return newmat;
212 }
CPPL_INT m
matrix row size
Definition: dgbmatrix.hpp:9
double ** darray
array of pointers of column head addresses
Definition: _dgbmatrix.hpp:14
CPPL_INT ku
upper band width
Definition: _dgbmatrix.hpp:12
double ** darray
array of pointers of column head addresses
Definition: dgbmatrix.hpp:14
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT kl
lower band width
Definition: _dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
double * array
1D array to store matrix data
Definition: dgbmatrix.hpp:13
CPPL_INT n
matrix column size
Definition: _dgbmatrix.hpp:10
double * array
1D array to store matrix data
Definition: _dgbmatrix.hpp:13
(DO NOT USE) Smart-temporary Real Double-precision General Band Matrix Class
Definition: _dgbmatrix.hpp:3
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
CPPL_INT m
matrix row size
Definition: _dgbmatrix.hpp:9
_dgbmatrix t ( const dgbmatrix mat)
friend

return transposed dgbmatrix

Definition at line 3 of file dgbmatrix-calc.hpp.

4 {CPPL_VERBOSE_REPORT;
5  dgbmatrix newmat(mat.n, mat.m, mat.ku, mat.kl);
6 
7  for(CPPL_INT i=0; i<newmat.m; i++){
8  const CPPL_INT jmax =std::min(newmat.n,i+newmat.ku+1);
9  for(CPPL_INT j=std::max(CPPL_INT(0),i-newmat.kl); j<jmax; j++){
10  newmat(i,j) =mat(j,i);
11  }
12  }
13 
14  return _(newmat);
15 }
friend _dgematrix i(const dgbmatrix &)
CPPL_INT m
matrix row size
Definition: dgbmatrix.hpp:9
friend _dgbmatrix _(dgbmatrix &)
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
CPPL_INT m
matrix row size
Definition: _dgematrix.hpp:9
Real Double-precision General Band Matrix Class.
Definition: dgbmatrix.hpp:3
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
_dgematrix i ( const dgbmatrix mat)
friend

return its inverse matrix

Definition at line 19 of file dgbmatrix-calc.hpp.

Referenced by chsign(), col(), copy(), dgbmatrix(), dgbsv(), identity(), operator()(), operator*=(), operator+=(), operator-=(), read(), resize(), set(), to_dgematrix(), to_zgbmatrix(), write(), and zero().

20 {CPPL_VERBOSE_REPORT;
21 #ifdef CPPL_DEBUG
22  if(mat.m!=mat.n){
23  ERROR_REPORT;
24  std::cerr << "This matrix is not square and has no inverse matrix." << std::endl
25  << "Your input was (" << mat.m << "x" << mat.n << ")." << std::endl;
26  exit(1);
27  }
28 #endif//CPPL_DEBUG
29 
30  dgbmatrix mat_cp(mat);
31  dgematrix mat_inv(mat.m,mat.n);
32  mat_inv.identity();
33  mat_cp.dgbsv(mat_inv);
34 
35  return _(mat_inv);
36 }
CPPL_INT m
matrix row size
Definition: dgbmatrix.hpp:9
friend _dgbmatrix _(dgbmatrix &)
Real Double-precision General Dence Matrix Class.
Definition: dgematrix.hpp:3
Real Double-precision General Band Matrix Class.
Definition: dgbmatrix.hpp:3
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
const dgbmatrix& operator+ ( const dgbmatrix mat)
friend

+dgbmatrix operator

Definition at line 3 of file dgbmatrix-unary.hpp.

4 {CPPL_VERBOSE_REPORT;
5  return mat;
6 }
_dgbmatrix operator- ( const dgbmatrix mat)
friend

-dgbmatrix operator

Definition at line 10 of file dgbmatrix-unary.hpp.

11 {CPPL_VERBOSE_REPORT;
12  dgbmatrix newmat(mat.m,mat.n,mat.kl,mat.ku);
13  for(CPPL_INT i=0; i<(newmat.kl+newmat.ku+1)*newmat.n; i++){
14  newmat.array[i]=-mat.array[i];
15  }
16 
17  return _(newmat);
18 }
friend _dgematrix i(const dgbmatrix &)
CPPL_INT m
matrix row size
Definition: dgbmatrix.hpp:9
friend _dgbmatrix _(dgbmatrix &)
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
double * array
1D array to store matrix data
Definition: dgbmatrix.hpp:13
Real Double-precision General Band Matrix Class.
Definition: dgbmatrix.hpp:3
CPPL_INT n
matrix column size
Definition: _dgematrix.hpp:10
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
_dgematrix operator+ ( const dgbmatrix matA,
const dgematrix matB 
)
friend

dgbmatrix+dgematrix operator

Definition at line 3 of file dgbmatrix-dgematrix.hpp.

4 {CPPL_VERBOSE_REPORT;
5 #ifdef CPPL_DEBUG
6  if(matA.n!=matB.n || matA.m!=matB.m){
7  ERROR_REPORT;
8  std::cerr << "These two matrises can not make a summation." << std::endl
9  << "Your input was (" << matA.m << "x" << matA.n << ") + (" << matB.m << "x" << matB.n << ")." << std::endl;
10  exit(1);
11  }
12 #endif//CPPL_DEBUG
13 
14  dgematrix newmat(matB);
15 
16  for(CPPL_INT i=0; i<matA.m; i++){
17  const CPPL_INT jmax =std::min(matA.n,i+matA.ku+1);
18  for(CPPL_INT j=std::max(CPPL_INT(0),i-matA.kl); j<jmax; j++){
19  newmat(i,j)+=matA(i,j);
20  }
21  }
22 
23  return _(newmat);
24 }
friend _dgematrix i(const dgbmatrix &)
CPPL_INT m
matrix row size
Definition: dgbmatrix.hpp:9
friend _dgbmatrix _(dgbmatrix &)
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
Real Double-precision General Dence Matrix Class.
Definition: dgematrix.hpp:3
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
_dgematrix operator+ ( const dgbmatrix matA,
const _dgematrix matB 
)
friend

dgbmatrix+_dgematrix operator

Definition at line 3 of file dgbmatrix-_dgematrix.hpp.

4 {CPPL_VERBOSE_REPORT;
5 #ifdef CPPL_DEBUG
6  if(matA.n!=matB.n || matA.m!=matB.m){
7  ERROR_REPORT;
8  std::cerr << "These two matrises can not make a summation." << std::endl
9  << "Your input was (" << matA.m << "x" << matA.n << ") + (" << matB.m << "x" << matB.n << ")." << std::endl;
10  exit(1);
11  }
12 #endif//CPPL_DEBUG
13 
14  for(CPPL_INT i=0; i<matA.m; i++){
15  const CPPL_INT jmax =std::min(matA.n,i+matA.ku+1);
16  for(CPPL_INT j=std::max(CPPL_INT(0),i-matA.kl); j<jmax; j++){
17  matB(i,j) += matA(i,j);
18  }
19  }
20 
21  return matB;
22 }
friend _dgematrix i(const dgbmatrix &)
CPPL_INT m
matrix row size
Definition: dgbmatrix.hpp:9
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
CPPL_INT m
matrix row size
Definition: _dgematrix.hpp:9
CPPL_INT n
matrix column size
Definition: _dgematrix.hpp:10
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
_dgematrix operator+ ( const dgbmatrix matA,
const dsymatrix matB 
)
friend

dgbmatrix+dsymatrix operator

Definition at line 3 of file dgbmatrix-dsymatrix.hpp.

4 {CPPL_VERBOSE_REPORT;
5 #ifdef CPPL_DEBUG
6  if(matA.n!=matB.n || matA.m!=matB.n){
7  ERROR_REPORT;
8  std::cerr << "These two matrises can not make a summation." << std::endl
9  << "Your input was (" << matA.m << "x" << matA.n << ") + (" << matB.n << "x" << matB.n << ")." << std::endl;
10  exit(1);
11  }
12 #endif//CPPL_DEBUG
13 
14  dgematrix newmat(matB.n,matB.n);
15 
16  for(CPPL_INT i=0; i<matA.m; i++){
17  for(CPPL_INT j=0; j<matB.n; j++){
18  newmat(i,j) = matB(i,j);
19  }
20  const CPPL_INT jmax =std::min(matA.n,i+matA.ku+1);
21  for(CPPL_INT j=std::max(CPPL_INT(0),i-matA.kl); j<jmax; j++){
22  newmat(i,j)+=matA(i,j);
23  }
24  }
25 
26  return _(newmat);
27 }
friend _dgematrix i(const dgbmatrix &)
CPPL_INT m
matrix row size
Definition: dgbmatrix.hpp:9
friend _dgbmatrix _(dgbmatrix &)
Real Double-precision General Dence Matrix Class.
Definition: dgematrix.hpp:3
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
CPPL_INT n
matrix column size
Definition: dsymatrix.hpp:10
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
_dgematrix operator+ ( const dgbmatrix matA,
const _dsymatrix matB 
)
friend

dgbmatrix+_dsymatrix operator

Definition at line 3 of file dgbmatrix-_dsymatrix.hpp.

4 {CPPL_VERBOSE_REPORT;
5 #ifdef CPPL_DEBUG
6  if(matA.n!=matB.n || matA.m!=matB.n){
7  ERROR_REPORT;
8  std::cerr << "These two matrises can not make a summation." << std::endl
9  << "Your input was (" << matA.m << "x" << matA.n << ") + (" << matB.n << "x" << matB.n << ")." << std::endl;
10  exit(1);
11  }
12 #endif//CPPL_DEBUG
13 
14  dgematrix newmat(matB.n,matB.n);
15  for(CPPL_INT i=0; i<matA.m; i++){
16  for(CPPL_INT j=0; j<matB.n; j++){
17  newmat(i,j) = matB(i,j);
18  }
19  const CPPL_INT jmax =std::min(matA.n,i+matA.ku+1);
20  for(CPPL_INT j=std::max(CPPL_INT(0),i-matA.kl); j<jmax; j++){
21  newmat(i,j)+=matA(i,j);
22  }
23  }
24 
25  matB.destroy();
26  return _(newmat);
27 }
friend _dgematrix i(const dgbmatrix &)
CPPL_INT m
matrix row size
Definition: dgbmatrix.hpp:9
friend _dgbmatrix _(dgbmatrix &)
void destroy() const
Real Double-precision General Dence Matrix Class.
Definition: dgematrix.hpp:3
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
CPPL_INT n
matrix column size
Definition: _dsymatrix.hpp:11
_dgbmatrix operator+ ( const dgbmatrix matA,
const dgbmatrix matB 
)
friend

dgbmatrix+dgbmatrix operator

Definition at line 140 of file dgbmatrix-dgbmatrix.hpp.

141 {CPPL_VERBOSE_REPORT;
142 #ifdef CPPL_DEBUG
143  if(matA.n!=matB.n || matA.m!=matB.m){
144  ERROR_REPORT;
145  std::cerr << "These two matrises can not make a summation." << std::endl
146  << "Your input was (" << matA.m << "x" << matA.n << ") + (" << matB.m << "x" << matB.n << ")." << std::endl;
147  exit(1);
148  }
149 #endif//CPPL_DEBUG
150 
151  dgbmatrix newmat(matA.m,matA.n,std::max(matA.kl,matB.kl),std::max(matA.ku,matB.ku));
152  newmat.zero();
153 
154  for(CPPL_INT i=0; i<matA.m; i++){
155  const CPPL_INT jmax1 =std::min(matA.n,i+matA.ku+1);
156  for(CPPL_INT j=std::max(CPPL_INT(0),i-matA.kl); j<jmax1; j++){
157  newmat(i,j) += matA(i,j);
158  }
159  const CPPL_INT jmax2 =std::min(matB.n,i+matB.ku+1);
160  for(CPPL_INT j=std::max(CPPL_INT(0),i-matB.kl); j<jmax2; j++){
161  newmat(i,j) += matB(i,j);
162  }
163  }
164 
165  return _(newmat);
166 }
friend _dgematrix i(const dgbmatrix &)
CPPL_INT m
matrix row size
Definition: dgbmatrix.hpp:9
friend _dgbmatrix _(dgbmatrix &)
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
Real Double-precision General Band Matrix Class.
Definition: dgbmatrix.hpp:3
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
_dgbmatrix operator+ ( const dgbmatrix matA,
const _dgbmatrix matB 
)
friend

dgbmatrix+_dgbmatrix operator

Definition at line 140 of file dgbmatrix-_dgbmatrix.hpp.

141 {CPPL_VERBOSE_REPORT;
142 #ifdef CPPL_DEBUG
143  if(matA.n!=matB.n || matA.m!=matB.m){
144  ERROR_REPORT;
145  std::cerr << "These two matrises can not make a summation." << std::endl
146  << "Your input was (" << matA.m << "x" << matA.n << ") + (" << matB.m << "x" << matB.n << ")." << std::endl;
147  exit(1);
148  }
149 #endif//CPPL_DEBUG
150 
151  if(matB.kl>matA.kl && matB.ku>matA.ku){
152  for(CPPL_INT i=0; i<matA.m; i++){
153  const CPPL_INT jmax =std::min(matA.n,i+matA.ku+1);
154  for(CPPL_INT j=std::max(CPPL_INT(0),i-matA.kl); j<jmax; j++){
155  matB(i,j)+=matA(i,j);
156  }
157  }
158 
159  return matB;
160  }
161  else{
162  dgbmatrix newmat(matA.m,matA.n,std::max(matA.kl,matB.kl),std::max(matA.ku,matB.ku));
163  newmat.zero();
164 
165  for(CPPL_INT i=0; i<matA.m; i++){
166  const CPPL_INT jmax1 =std::min(matA.n,i+matA.ku+1);
167  for(CPPL_INT j=std::max(CPPL_INT(0),i-matA.kl); j<jmax1; j++){
168  newmat(i,j)+=matA(i,j);
169  }
170  const CPPL_INT jmax2 =std::min(matB.n,i+matB.ku+1);
171  for(CPPL_INT j=std::max(CPPL_INT(0),i-matB.kl); j<jmax2; j++){
172  newmat(i,j)+=matB(i,j);
173  }
174  }
175 
176  matB.destroy();
177  return _(newmat);
178  }
179 }
friend _dgematrix i(const dgbmatrix &)
CPPL_INT m
matrix row size
Definition: dgbmatrix.hpp:9
friend _dgbmatrix _(dgbmatrix &)
CPPL_INT ku
upper band width
Definition: _dgbmatrix.hpp:12
void destroy() const
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT kl
lower band width
Definition: _dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
CPPL_INT n
matrix column size
Definition: _dgbmatrix.hpp:10
Real Double-precision General Band Matrix Class.
Definition: dgbmatrix.hpp:3
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
CPPL_INT m
matrix row size
Definition: _dgbmatrix.hpp:9
_dgematrix operator+ ( const dgbmatrix matA,
const dgsmatrix matB 
)
friend

dgbmatrix+dgsmatrix operator

Definition at line 3 of file dgbmatrix-dgsmatrix.hpp.

4 {CPPL_VERBOSE_REPORT;
5 #ifdef CPPL_DEBUG
6  if(matA.n!=matB.n || matA.m!=matB.m){
7  ERROR_REPORT;
8  std::cerr << "These two matrises can not make a summation." << std::endl
9  << "Your input was (" << matA.m << "x" << matA.n << ") + (" << matB.m << "x" << matB.n << ")." << std::endl;
10  exit(1);
11  }
12 #endif//CPPL_DEBUG
13 
14  dgematrix newmat( matB.to_dgematrix() );
15 
16  for(CPPL_INT i=0; i<matA.m; i++){
17  const CPPL_INT jmax =std::min(matA.n,i+matA.ku+1);
18  for(CPPL_INT j=std::max(CPPL_INT(0),i-matA.kl); j<jmax; j++){
19  newmat(i,j)+=matA(i,j);
20  }
21  }
22 
23  return _(newmat);
24 }
friend _dgematrix i(const dgbmatrix &)
CPPL_INT m
matrix row size
Definition: dgbmatrix.hpp:9
friend _dgbmatrix _(dgbmatrix &)
CPPL_INT n
matrix column size
Definition: dgsmatrix.hpp:10
Real Double-precision General Dence Matrix Class.
Definition: dgematrix.hpp:3
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
_dgematrix to_dgematrix() const
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
CPPL_INT m
matrix row size
Definition: dgsmatrix.hpp:9
_dgematrix operator+ ( const dgbmatrix matA,
const _dgsmatrix matB 
)
friend

dgbmatrix+_dgsmatrix operator

Definition at line 3 of file dgbmatrix-_dgsmatrix.hpp.

4 {CPPL_VERBOSE_REPORT;
5 #ifdef CPPL_DEBUG
6  if(matA.n!=matB.n || matA.m!=matB.m){
7  ERROR_REPORT;
8  std::cerr << "These two matrises can not make a summation." << std::endl
9  << "Your input was (" << matA.m << "x" << matA.n << ") + (" << matB.m << "x" << matB.n << ")." << std::endl;
10  exit(1);
11  }
12 #endif//CPPL_DEBUG
13 
14  dgematrix newmat( matB.to_dgematrix() );
15 
16  for(CPPL_INT i=0; i<matA.m; i++){
17  const CPPL_INT jmax =std::min(matA.n,i+matA.ku+1);
18  for(CPPL_INT j=std::max(CPPL_INT(0),i-matA.kl); j<jmax; j++){
19  newmat(i,j)+=matA(i,j);
20  }
21  }
22 
23  matB.destroy();
24  return _(newmat);
25 }
friend _dgematrix i(const dgbmatrix &)
CPPL_INT m
matrix row size
Definition: dgbmatrix.hpp:9
friend _dgbmatrix _(dgbmatrix &)
CPPL_INT n
matrix column size
Definition: _dgsmatrix.hpp:10
_dgematrix to_dgematrix() const
Real Double-precision General Dence Matrix Class.
Definition: dgematrix.hpp:3
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
CPPL_INT m
matrix row size
Definition: _dgsmatrix.hpp:9
void destroy() const
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
_dgematrix operator+ ( const dgbmatrix ,
const dssmatrix  
)
friend
_dgematrix operator+ ( const dgbmatrix ,
const _dssmatrix  
)
friend
_dgematrix operator- ( const dgbmatrix matA,
const dgematrix matB 
)
friend

dgbmatrix-dgematrix operator

Definition at line 28 of file dgbmatrix-dgematrix.hpp.

29 {CPPL_VERBOSE_REPORT;
30 #ifdef CPPL_DEBUG
31  if(matA.n!=matB.n || matA.m!=matB.m){
32  ERROR_REPORT;
33  std::cerr << "These two matrises can not make a summation." << std::endl
34  << "Your input was (" << matA.m << "x" << matA.n << ") + (" << matB.m << "x" << matB.n << ")." << std::endl;
35  exit(1);
36  }
37 #endif//CPPL_DEBUG
38 
39  dgematrix newmat(-matB);
40 
41  for(CPPL_INT i=0; i<matA.m; i++){
42  const CPPL_INT jmax =std::min(matA.n,i+matA.ku+1);
43  for(CPPL_INT j=std::max(CPPL_INT(0),i-matA.kl); j<jmax; j++){
44  newmat(i,j)+=matA(i,j);
45  }
46  }
47 
48  return _(newmat);
49 }
friend _dgematrix i(const dgbmatrix &)
CPPL_INT m
matrix row size
Definition: dgbmatrix.hpp:9
friend _dgbmatrix _(dgbmatrix &)
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
Real Double-precision General Dence Matrix Class.
Definition: dgematrix.hpp:3
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
_dgematrix operator- ( const dgbmatrix matA,
const _dgematrix matB 
)
friend

dgbmatrix-_dgematrix operator

Definition at line 26 of file dgbmatrix-_dgematrix.hpp.

27 {CPPL_VERBOSE_REPORT;
28 #ifdef CPPL_DEBUG
29  if(matA.n!=matB.n || matA.m!=matB.m){
30  ERROR_REPORT;
31  std::cerr << "These two matrises can not make a summation." << std::endl
32  << "Your input was (" << matA.m << "x" << matA.n << ") + (" << matB.m << "x" << matB.n << ")." << std::endl;
33  exit(1);
34  }
35 #endif//CPPL_DEBUG
36 
37  //// change sign ////
38  for(CPPL_INT i=0; i<matB.m*matB.n; i++){
39  matB.array[i]=-matB.array[i];
40  }
41 
42  //// add ////
43  for(CPPL_INT i=0; i<matA.m; i++){
44  const CPPL_INT jmax =std::min(matA.n,i+matA.ku+1);
45  for(CPPL_INT j=std::max(CPPL_INT(0),i-matA.kl); j<jmax; j++){
46  matB(i,j) += matA(i,j);
47  }
48  }
49 
50  return matB;
51 }
friend _dgematrix i(const dgbmatrix &)
CPPL_INT m
matrix row size
Definition: dgbmatrix.hpp:9
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
CPPL_INT m
matrix row size
Definition: _dgematrix.hpp:9
double * array
1D array to store matrix data
Definition: _dgematrix.hpp:11
CPPL_INT n
matrix column size
Definition: _dgematrix.hpp:10
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
_dgematrix operator- ( const dgbmatrix matA,
const dsymatrix matB 
)
friend

dgbmatrix-dsymatrix operator

Definition at line 31 of file dgbmatrix-dsymatrix.hpp.

32 {CPPL_VERBOSE_REPORT;
33 #ifdef CPPL_DEBUG
34  if(matA.n!=matB.n || matA.m!=matB.n){
35  ERROR_REPORT;
36  std::cerr << "These two matrises can not make a summation." << std::endl
37  << "Your input was (" << matA.m << "x" << matA.n << ") + (" << matB.n << "x" << matB.n << ")." << std::endl;
38  exit(1);
39  }
40 #endif//CPPL_DEBUG
41 
42  dgematrix newmat(matB.n,matB.n);
43  for(CPPL_INT i=0; i<matA.m; i++){
44  for(CPPL_INT j=0; j<matB.n; j++){
45  newmat(i,j) = -matB(i,j);
46  }
47  const CPPL_INT jmax =std::min(matA.n,i+matA.ku+1);
48  for(CPPL_INT j=std::max(CPPL_INT(0),i-matA.kl); j<jmax; j++){
49  newmat(i,j) += matA(i,j);
50  }
51  }
52 
53  return _(newmat);
54 }
friend _dgematrix i(const dgbmatrix &)
CPPL_INT m
matrix row size
Definition: dgbmatrix.hpp:9
friend _dgbmatrix _(dgbmatrix &)
Real Double-precision General Dence Matrix Class.
Definition: dgematrix.hpp:3
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
CPPL_INT n
matrix column size
Definition: dsymatrix.hpp:10
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
_dgematrix operator- ( const dgbmatrix matA,
const _dsymatrix matB 
)
friend

dgbmatrix-_dsymatrix operator

Definition at line 31 of file dgbmatrix-_dsymatrix.hpp.

32 {CPPL_VERBOSE_REPORT;
33 #ifdef CPPL_DEBUG
34  if(matA.n!=matB.n || matA.m!=matB.n){
35  ERROR_REPORT;
36  std::cerr << "These two matrises can not make a summation." << std::endl
37  << "Your input was (" << matA.m << "x" << matA.n << ") + (" << matB.n << "x" << matB.n << ")." << std::endl;
38  exit(1);
39  }
40 #endif//CPPL_DEBUG
41 
42  dgematrix newmat(matB.n,matB.n);
43  for(CPPL_INT i=0; i<matA.m; i++){
44  for(CPPL_INT j=0; j<matB.n; j++){
45  newmat(i,j) = -matB(i,j);
46  }
47  const CPPL_INT jmax =std::min(matA.n,i+matA.ku+1);
48  for(CPPL_INT j=std::max(CPPL_INT(0),i-matA.kl); j<jmax; j++){
49  newmat(i,j) += matA(i,j);
50  }
51  }
52 
53  matB.destroy();
54  return _(newmat);
55 }
friend _dgematrix i(const dgbmatrix &)
CPPL_INT m
matrix row size
Definition: dgbmatrix.hpp:9
friend _dgbmatrix _(dgbmatrix &)
void destroy() const
Real Double-precision General Dence Matrix Class.
Definition: dgematrix.hpp:3
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
CPPL_INT n
matrix column size
Definition: _dsymatrix.hpp:11
_dgbmatrix operator- ( const dgbmatrix matA,
const dgbmatrix matB 
)
friend

dgbmatrix-dgbmatrix operator

Definition at line 170 of file dgbmatrix-dgbmatrix.hpp.

171 {CPPL_VERBOSE_REPORT;
172 #ifdef CPPL_DEBUG
173  if(matA.n!=matB.n || matA.m!=matB.m){
174  ERROR_REPORT;
175  std::cerr << "These two matrises can not make a subtraction." << std::endl
176  << "Your input was (" << matA.m << "x" << matA.n << ") - (" << matB.m << "x" << matB.n << ")." << std::endl;
177  exit(1);
178  }
179 #endif//CPPL_DEBUG
180 
181  dgbmatrix newmat(matA.m,matA.n,std::max(matA.kl,matB.kl),std::max(matA.ku,matB.ku));
182  newmat.zero();
183 
184  for(CPPL_INT i=0; i<matA.m; i++){
185  const CPPL_INT jmax1 =std::min(matA.n,i+matA.ku+1);
186  for(CPPL_INT j=std::max(CPPL_INT(0),i-matA.kl); j<jmax1; j++){
187  newmat(i,j) += matA(i,j);
188  }
189  const CPPL_INT jmax2 =std::min(matB.n,i+matB.ku+1);
190  for(CPPL_INT j=std::max(CPPL_INT(0),i-matB.kl); j<jmax2; j++){
191  newmat(i,j) -= matB(i,j);
192  }
193  }
194 
195  return _(newmat);
196 }
friend _dgematrix i(const dgbmatrix &)
CPPL_INT m
matrix row size
Definition: dgbmatrix.hpp:9
friend _dgbmatrix _(dgbmatrix &)
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
Real Double-precision General Band Matrix Class.
Definition: dgbmatrix.hpp:3
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
_dgbmatrix operator- ( const dgbmatrix matA,
const _dgbmatrix matB 
)
friend

dgbmatrix-_dgbmatrix operator

Definition at line 183 of file dgbmatrix-_dgbmatrix.hpp.

184 {CPPL_VERBOSE_REPORT;
185 #ifdef CPPL_DEBUG
186  if(matA.n!=matB.n || matA.m!=matB.m){
187  ERROR_REPORT;
188  std::cerr << "These two matrises can not make a subtraction." << std::endl
189  << "Your input was (" << matA.m << "x" << matA.n << ") - (" << matB.m << "x" << matB.n << ")." << std::endl;
190  exit(1);
191  }
192 #endif//CPPL_DEBUG
193 
194  dgbmatrix newmat(matA.m,matA.n,std::max(matA.kl,matB.kl),std::max(matA.ku,matB.ku));
195  newmat.zero();
196 
197  for(CPPL_INT i=0; i<matA.m; i++){
198  const CPPL_INT jmax1 =std::min(matA.n,i+matA.ku+1);
199  for(CPPL_INT j=std::max(CPPL_INT(0),i-matA.kl); j<jmax1; j++){
200  newmat(i,j)+=matA(i,j);
201  }
202  const CPPL_INT jmax2 =std::min(matB.n,i+matB.ku+1);
203  for(CPPL_INT j=std::max(CPPL_INT(0),i-matB.kl); j<jmax2; j++){
204  newmat(i,j)-=matB(i,j);
205  }
206  }
207 
208  matB.destroy();
209  return _(newmat);
210 }
friend _dgematrix i(const dgbmatrix &)
CPPL_INT m
matrix row size
Definition: dgbmatrix.hpp:9
friend _dgbmatrix _(dgbmatrix &)
CPPL_INT ku
upper band width
Definition: _dgbmatrix.hpp:12
void destroy() const
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT kl
lower band width
Definition: _dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
CPPL_INT n
matrix column size
Definition: _dgbmatrix.hpp:10
Real Double-precision General Band Matrix Class.
Definition: dgbmatrix.hpp:3
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
CPPL_INT m
matrix row size
Definition: _dgbmatrix.hpp:9
_dgematrix operator- ( const dgbmatrix matA,
const dgsmatrix matB 
)
friend

dgbmatrix-dgsmatrix operator

Definition at line 28 of file dgbmatrix-dgsmatrix.hpp.

29 {CPPL_VERBOSE_REPORT;
30 #ifdef CPPL_DEBUG
31  if(matA.n!=matB.n || matA.m!=matB.m){
32  ERROR_REPORT;
33  std::cerr << "These two matrises can not make a summation." << std::endl
34  << "Your input was (" << matA.m << "x" << matA.n << ") + (" << matB.m << "x" << matB.n << ")." << std::endl;
35  exit(1);
36  }
37 #endif//CPPL_DEBUG
38 
39  dgematrix newmat( -matB.to_dgematrix() );
40 
41  for(CPPL_INT i=0; i<matA.m; i++){
42  const CPPL_INT jmax =std::min(matA.n,i+matA.ku+1);
43  for(CPPL_INT j=std::max(CPPL_INT(0),i-matA.kl); j<jmax; j++){
44  newmat(i,j)-=matA(i,j);
45  }
46  }
47 
48  return _(newmat);
49 }
friend _dgematrix i(const dgbmatrix &)
CPPL_INT m
matrix row size
Definition: dgbmatrix.hpp:9
friend _dgbmatrix _(dgbmatrix &)
CPPL_INT n
matrix column size
Definition: dgsmatrix.hpp:10
Real Double-precision General Dence Matrix Class.
Definition: dgematrix.hpp:3
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
_dgematrix to_dgematrix() const
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
CPPL_INT m
matrix row size
Definition: dgsmatrix.hpp:9
_dgematrix operator- ( const dgbmatrix matA,
const _dgsmatrix matB 
)
friend

dgbmatrix-_dgsmatrix operator

Definition at line 29 of file dgbmatrix-_dgsmatrix.hpp.

30 {CPPL_VERBOSE_REPORT;
31 #ifdef CPPL_DEBUG
32  if(matA.n!=matB.n || matA.m!=matB.m){
33  ERROR_REPORT;
34  std::cerr << "These two matrises can not make a summation." << std::endl
35  << "Your input was (" << matA.m << "x" << matA.n << ") + (" << matB.m << "x" << matB.n << ")." << std::endl;
36  exit(1);
37  }
38 #endif//CPPL_DEBUG
39 
40  dgematrix newmat( (-matB).to_dgematrix() );
41 
42  for(CPPL_INT i=0; i<matA.m; i++){
43  const CPPL_INT jmax =std::min(matA.n,i+matA.ku+1);
44  for(CPPL_INT j=std::max(CPPL_INT(0),i-matA.kl); j<jmax; j++){
45  newmat(i,j)-=matA(i,j);
46  }
47  }
48 
49  matB.destroy();
50  return _(newmat);
51 }
friend _dgematrix i(const dgbmatrix &)
CPPL_INT m
matrix row size
Definition: dgbmatrix.hpp:9
friend _dgbmatrix _(dgbmatrix &)
CPPL_INT n
matrix column size
Definition: _dgsmatrix.hpp:10
_dgematrix to_dgematrix() const
Real Double-precision General Dence Matrix Class.
Definition: dgematrix.hpp:3
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
CPPL_INT m
matrix row size
Definition: _dgsmatrix.hpp:9
void destroy() const
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
_dgematrix operator- ( const dgbmatrix ,
const dssmatrix  
)
friend
_dgematrix operator- ( const dgbmatrix ,
const _dssmatrix  
)
friend
_dcovector operator* ( const dgbmatrix mat,
const dcovector vec 
)
friend

dgbmatrix*dcovector operator

Definition at line 3 of file dgbmatrix-dcovector.hpp.

4 {CPPL_VERBOSE_REPORT;
5 #ifdef CPPL_DEBUG
6  if(mat.n!=vec.l){
7  ERROR_REPORT;
8  std::cerr << "These matrix and vector can not make a product." << std::endl
9  << "Your input was (" << mat.m << "x" << mat.n << ") * (" << vec.l << ")." << std::endl;
10  exit(1);
11  }
12 #endif//CPPL_DEBUG
13 
14  dcovector newvec(mat.m);
15  char trans ='n';
16  double alpha =1.;
17  CPPL_INT lda =mat.kl+mat.ku+1;
18  CPPL_INT inc =1;
19  double beta =0.;
20 
21  dgbmv_( &trans, &mat.m, &mat.n, &mat.kl, &mat.ku, &alpha, mat.array, &lda, vec.array, &inc, &beta, newvec.array, &inc );
22 
23  return _(newvec);
24 }
CPPL_INT m
matrix row size
Definition: dgbmatrix.hpp:9
friend _dgbmatrix _(dgbmatrix &)
CPPL_INT l
vector size
Definition: dcovector.hpp:9
double * array
1D array to store vector data
Definition: dcovector.hpp:11
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
double * array
1D array to store matrix data
Definition: dgbmatrix.hpp:13
Real Double-precision Column Vector Class.
Definition: dcovector.hpp:3
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
_dcovector operator* ( const dgbmatrix mat,
const _dcovector vec 
)
friend

dgbmatrix*_dcovector operator

Definition at line 3 of file dgbmatrix-_dcovector.hpp.

4 {CPPL_VERBOSE_REPORT;
5 #ifdef CPPL_DEBUG
6  if(mat.n!=vec.l){
7  ERROR_REPORT;
8  std::cerr << "These matrix and vector can not make a product." << std::endl
9  << "Your input was (" << mat.m << "x" << mat.n << ") * (" << vec.l << ")." << std::endl;
10  exit(1);
11  }
12 #endif//CPPL_DEBUG
13 
14  dcovector newvec(mat.m);
15  char trans ='n';
16  double alpha =1.;
17  CPPL_INT lda =mat.kl+mat.ku+1;
18  CPPL_INT inc =1;
19  double beta =0.;
20 
21  dgbmv_( &trans, &mat.m, &mat.n, &mat.kl, &mat.ku, &alpha, mat.array, &lda, vec.array, &inc, &beta, newvec.array, &inc );
22 
23  vec.destroy();
24  return _(newvec);
25 }
CPPL_INT l
vector size
Definition: _dcovector.hpp:9
CPPL_INT m
matrix row size
Definition: dgbmatrix.hpp:9
friend _dgbmatrix _(dgbmatrix &)
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
double * array
1D array to store matrix data
Definition: dgbmatrix.hpp:13
void destroy() const
Real Double-precision Column Vector Class.
Definition: dcovector.hpp:3
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
double * array
1D array to store vector data
Definition: _dcovector.hpp:11
_dgematrix operator* ( const dgbmatrix matA,
const dgematrix matB 
)
friend

dgbmatrix*dgematrix operator

Definition at line 53 of file dgbmatrix-dgematrix.hpp.

54 {CPPL_VERBOSE_REPORT;
55 #ifdef CPPL_DEBUG
56  if(matA.n!=matB.m){
57  ERROR_REPORT;
58  std::cerr << "These two matrises can not make a product." << std::endl
59  << "Your input was (" << matA.m << "x" << matA.n << ") * (" << matB.m << "x" << matB.n << ")." << std::endl;
60  exit(1);
61  }
62 #endif//CPPL_DEBUG
63 
64  dgematrix newmat( matA.m, matB.n );
65  newmat.zero();
66 
67  for(CPPL_INT i=0; i<newmat.m; i++){
68  for(CPPL_INT j=0; j<newmat.n; j++){
69  const CPPL_INT kmax =std::min(matA.n,i+matA.ku+1);
70  for(CPPL_INT k=std::max(CPPL_INT(0),i-matA.kl); k<kmax; k++){
71  newmat(i,j)+=matA(i,k)*matB(k,j);
72  }
73  }
74  }
75 
76  return _(newmat);
77 }
friend _dgematrix i(const dgbmatrix &)
CPPL_INT m
matrix row size
Definition: dgbmatrix.hpp:9
friend _dgbmatrix _(dgbmatrix &)
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
Real Double-precision General Dence Matrix Class.
Definition: dgematrix.hpp:3
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
CPPL_INT m
matrix row size
Definition: _dgematrix.hpp:9
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
_dgematrix operator* ( const dgbmatrix matA,
const _dgematrix matB 
)
friend

dgbmatrix*_dgematrix operator

Definition at line 55 of file dgbmatrix-_dgematrix.hpp.

56 {CPPL_VERBOSE_REPORT;
57 #ifdef CPPL_DEBUG
58  if(matA.n!=matB.m){
59  ERROR_REPORT;
60  std::cerr << "These two matrises can not make a product." << std::endl
61  << "Your input was (" << matA.m << "x" << matA.n << ") * (" << matB.m << "x" << matB.n << ")." << std::endl;
62  exit(1);
63  }
64 #endif//CPPL_DEBUG
65 
66  dgematrix newmat( matA.m, matB.n );
67  newmat.zero();
68 
69  for(CPPL_INT i=0; i<newmat.m; i++){
70  for(CPPL_INT j=0; j<newmat.n; j++){
71  const CPPL_INT kmax =std::min(matA.n,i+matA.ku+1);
72  for(CPPL_INT k=std::max(CPPL_INT(0),i-matA.kl); k<kmax; k++){
73  newmat(i,j) += matA(i,k)*matB(k,j);
74  }
75  }
76  }
77 
78  matB.destroy();
79  return _(newmat);
80 }
friend _dgematrix i(const dgbmatrix &)
CPPL_INT m
matrix row size
Definition: dgbmatrix.hpp:9
friend _dgbmatrix _(dgbmatrix &)
Real Double-precision General Dence Matrix Class.
Definition: dgematrix.hpp:3
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
CPPL_INT m
matrix row size
Definition: _dgematrix.hpp:9
CPPL_INT n
matrix column size
Definition: _dgematrix.hpp:10
void destroy() const
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
_dgematrix operator* ( const dgbmatrix matA,
const dsymatrix matB 
)
friend

dgbmatrix*dsymatrix operator

Definition at line 58 of file dgbmatrix-dsymatrix.hpp.

59 {CPPL_VERBOSE_REPORT;
60 #ifdef CPPL_DEBUG
61  if(matA.n!=matB.n){
62  ERROR_REPORT;
63  std::cerr << "These two matrises can not make a product." << std::endl
64  << "Your input was (" << matA.m << "x" << matA.n << ") * (" << matB.n << "x" << matB.n << ")." << std::endl;
65  exit(1);
66  }
67 #endif//CPPL_DEBUG
68 
69  dgematrix newmat( matA.m, matB.n );
70  newmat.zero();
71 
72  for(CPPL_INT i=0; i<newmat.m; i++){
73  for(CPPL_INT j=0; j<newmat.n; j++){
74  const CPPL_INT kmax =std::min(matA.n,i+matA.ku+1);
75  for(CPPL_INT k=std::max(CPPL_INT(0),i-matA.kl); k<kmax; k++){
76  newmat(i,j) += matA(i,k)*matB(k,j);
77  }
78  }
79  }
80 
81  return _(newmat);
82 }
friend _dgematrix i(const dgbmatrix &)
CPPL_INT m
matrix row size
Definition: dgbmatrix.hpp:9
friend _dgbmatrix _(dgbmatrix &)
Real Double-precision General Dence Matrix Class.
Definition: dgematrix.hpp:3
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
CPPL_INT m
matrix row size
Definition: _dgematrix.hpp:9
CPPL_INT n
matrix column size
Definition: dsymatrix.hpp:10
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
_dgematrix operator* ( const dgbmatrix matA,
const _dsymatrix matB 
)
friend

dgbmatrix*_dsymatrix operator

Definition at line 59 of file dgbmatrix-_dsymatrix.hpp.

60 {CPPL_VERBOSE_REPORT;
61 #ifdef CPPL_DEBUG
62  if(matA.n!=matB.n){
63  ERROR_REPORT;
64  std::cerr << "These two matrises can not make a product." << std::endl
65  << "Your input was (" << matA.m << "x" << matA.n << ") * (" << matB.n << "x" << matB.n << ")." << std::endl;
66  exit(1);
67  }
68 #endif//CPPL_DEBUG
69 
70  dgematrix newmat( matA.m, matB.n );
71  newmat.zero();
72 
73  for(CPPL_INT i=0; i<newmat.m; i++){
74  for(CPPL_INT j=0; j<newmat.n; j++){
75  const CPPL_INT kmax =std::min(matA.n,i+matA.ku+1);
76  for(CPPL_INT k=std::max(CPPL_INT(0),i-matA.kl); k<kmax; k++){
77  newmat(i,j)+=matA(i,k)*matB(k,j);
78  }
79  }
80  }
81 
82  matB.destroy();
83  return _(newmat);
84 }
friend _dgematrix i(const dgbmatrix &)
CPPL_INT m
matrix row size
Definition: dgbmatrix.hpp:9
friend _dgbmatrix _(dgbmatrix &)
void destroy() const
Real Double-precision General Dence Matrix Class.
Definition: dgematrix.hpp:3
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
CPPL_INT m
matrix row size
Definition: _dgematrix.hpp:9
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
CPPL_INT n
matrix column size
Definition: _dsymatrix.hpp:11
_dgbmatrix operator* ( const dgbmatrix matA,
const dgbmatrix matB 
)
friend

dgbmatrix*dgbmatrix operator

Definition at line 200 of file dgbmatrix-dgbmatrix.hpp.

201 {CPPL_VERBOSE_REPORT;
202 #ifdef CPPL_DEBUG
203  if(matA.n!=matB.m){
204  ERROR_REPORT;
205  std::cerr << "These two matrises can not make a product." << std::endl
206  << "Your input was (" << matA.m << "x" << matA.n << ") * (" << matB.m << "x" << matB.n << ")." << std::endl;
207  exit(1);
208  }
209 #endif//CPPL_DEBUG
210 
211  dgbmatrix newmat( matA.m, matB.n, std::min(matA.kl+matB.kl,matA.m-1), std::min(matA.ku+matB.ku,matB.n-1) );
212  newmat.zero();
213 
214  for(CPPL_INT i=0; i<newmat.m; i++){
215  const CPPL_INT jmax =std::min(newmat.n,i+newmat.ku+1);
216  for(CPPL_INT j=std::max(CPPL_INT(0),i-newmat.kl); j<jmax; j++){
217  const CPPL_INT kmax =std::min( std::min(matA.n,i+matA.ku+1), std::min(matB.m,j+matB.kl+1) );
218  for(CPPL_INT k=std::max( std::max(CPPL_INT(0),i-matA.kl), std::max(CPPL_INT(0),j-matB.ku) ); k<kmax; k++){
219  newmat(i,j) += matA(i,k)*matB(k,j);
220  }
221  }
222  }
223 
224  return _(newmat);
225 }
friend _dgematrix i(const dgbmatrix &)
CPPL_INT m
matrix row size
Definition: dgbmatrix.hpp:9
friend _dgbmatrix _(dgbmatrix &)
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
CPPL_INT m
matrix row size
Definition: _dgematrix.hpp:9
Real Double-precision General Band Matrix Class.
Definition: dgbmatrix.hpp:3
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
_dgbmatrix operator* ( const dgbmatrix matA,
const _dgbmatrix matB 
)
friend

dgbmatrix*_dgbmatrix operator

Definition at line 214 of file dgbmatrix-_dgbmatrix.hpp.

215 {CPPL_VERBOSE_REPORT;
216 #ifdef CPPL_DEBUG
217  if(matA.n!=matB.m){
218  ERROR_REPORT;
219  std::cerr << "These two matrises can not make a product." << std::endl
220  << "Your input was (" << matA.m << "x" << matA.n << ") * (" << matB.m << "x" << matB.n << ")." << std::endl;
221  exit(1);
222  }
223 #endif//CPPL_DEBUG
224 
225  dgbmatrix newmat( matA.m, matB.n, std::min(matA.kl+matB.kl,matA.m-1), std::min(matA.ku+matB.ku,matB.n-1) );
226  newmat.zero();
227 
228  for(CPPL_INT i=0; i<newmat.m; i++){
229  const CPPL_INT jmax =std::min(newmat.n,i+newmat.ku+1);
230  for(CPPL_INT j=std::max(CPPL_INT(0),i-newmat.kl); j<jmax; j++){
231  const CPPL_INT kmax =std::min( std::min(matA.n,i+matA.ku+1), std::min(matB.m,j+matB.kl+1) );
232  for(CPPL_INT k=std::max( std::max(CPPL_INT(0),i-matA.kl), std::max(CPPL_INT(0),j-matB.ku) ); k<kmax; k++){
233  newmat(i,j)+= matA(i,k)*matB(k,j);
234  }
235  }
236  }
237 
238  matB.destroy();
239  return _(newmat);
240 }
friend _dgematrix i(const dgbmatrix &)
CPPL_INT m
matrix row size
Definition: dgbmatrix.hpp:9
friend _dgbmatrix _(dgbmatrix &)
CPPL_INT ku
upper band width
Definition: _dgbmatrix.hpp:12
void destroy() const
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT kl
lower band width
Definition: _dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
CPPL_INT n
matrix column size
Definition: _dgbmatrix.hpp:10
CPPL_INT m
matrix row size
Definition: _dgematrix.hpp:9
Real Double-precision General Band Matrix Class.
Definition: dgbmatrix.hpp:3
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
CPPL_INT m
matrix row size
Definition: _dgbmatrix.hpp:9
_dgematrix operator* ( const dgbmatrix matA,
const dgsmatrix matB 
)
friend

dgbmatrix*dgsmatrix operator

Definition at line 53 of file dgbmatrix-dgsmatrix.hpp.

54 {CPPL_VERBOSE_REPORT;
55 #ifdef CPPL_DEBUG
56  if(matA.n!=matB.m){
57  ERROR_REPORT;
58  std::cerr << "These two matrises can not make a product." << std::endl
59  << "Your input was (" << matA.m << "x" << matA.n << ") * (" << matB.m << "x" << matB.n << ")." << std::endl;
60  exit(1);
61  }
62 #endif//CPPL_DEBUG
63 
64  dgematrix newmat( matA.m, matB.n );
65  newmat.zero();
66 
67  const std::vector<dcomponent>::const_iterator matB_data_end =matB.data.end();
68  for(std::vector<dcomponent>::const_iterator it=matB.data.begin(); it!=matB_data_end; it++){
69  const CPPL_INT imax =std::min(matA.m,it->i+matA.kl);
70  for(CPPL_INT i=std::max(CPPL_INT(0),it->i-(matA.ku+1)); i<imax; i++){
71  newmat(i,it->j) += matA(i,it->i)*it->v;
72  }
73  }
74 
75  return _(newmat);
76 }
friend _dgematrix i(const dgbmatrix &)
std::vector< dcomponent > data
matrix data
Definition: dgsmatrix.hpp:11
CPPL_INT m
matrix row size
Definition: dgbmatrix.hpp:9
friend _dgbmatrix _(dgbmatrix &)
CPPL_INT n
matrix column size
Definition: dgsmatrix.hpp:10
Real Double-precision General Dence Matrix Class.
Definition: dgematrix.hpp:3
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
friend _dgematrix i(const _dgematrix &)
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
CPPL_INT m
matrix row size
Definition: dgsmatrix.hpp:9
_dgematrix operator* ( const dgbmatrix matA,
const _dgsmatrix matB 
)
friend

dgbmatrix*_dgsmatrix operator

Definition at line 55 of file dgbmatrix-_dgsmatrix.hpp.

56 {CPPL_VERBOSE_REPORT;
57 #ifdef CPPL_DEBUG
58  if(matA.n!=matB.m){
59  ERROR_REPORT;
60  std::cerr << "These two matrises can not make a product." << std::endl
61  << "Your input was (" << matA.m << "x" << matA.n << ") * (" << matB.m << "x" << matB.n << ")." << std::endl;
62  exit(1);
63  }
64 #endif//CPPL_DEBUG
65 
66  dgematrix newmat( matA.m, matB.n );
67  newmat.zero();
68 
69  const std::vector<dcomponent>::const_iterator matB_data_end =matB.data.end();
70  for(std::vector<dcomponent>::const_iterator it=matB.data.begin(); it!=matB_data_end; it++){
71  const CPPL_INT imax =std::min(matA.m,it->i+matA.kl);
72  for(CPPL_INT i=std::max(CPPL_INT(0),it->i-(matA.ku+1)); i<imax; i++){
73  newmat(i,it->j) += matA(i,it->i)*it->v;
74  }
75  }
76 
77  matB.destroy();
78  return _(newmat);
79 }
friend _dgematrix i(const dgbmatrix &)
CPPL_INT m
matrix row size
Definition: dgbmatrix.hpp:9
friend _dgbmatrix _(dgbmatrix &)
CPPL_INT n
matrix column size
Definition: _dgsmatrix.hpp:10
Real Double-precision General Dence Matrix Class.
Definition: dgematrix.hpp:3
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
friend _dgematrix i(const _dgematrix &)
CPPL_INT m
matrix row size
Definition: _dgsmatrix.hpp:9
void destroy() const
std::vector< dcomponent > data
matrix data
Definition: _dgsmatrix.hpp:11
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
_dgematrix operator* ( const dgbmatrix ,
const dssmatrix  
)
friend
_dgematrix operator* ( const dgbmatrix ,
const _dssmatrix  
)
friend
_dgbmatrix operator* ( const dgbmatrix mat,
const double &  d 
)
friend

dgbmatrix*double operator

Definition at line 28 of file dgbmatrix-double.hpp.

29 {CPPL_VERBOSE_REPORT;
30  dgbmatrix newmat(mat.m, mat.n, mat.kl, mat.ku);
31 
32  const CPPL_INT size =(newmat.kl+newmat.ku+1)*newmat.n;
33  for(CPPL_INT i=0; i<size; i++){
34  newmat.array[i] =mat.array[i]*d;
35  }
36 
37  return _(newmat);
38 }
friend _dgematrix i(const dgbmatrix &)
CPPL_INT m
matrix row size
Definition: dgbmatrix.hpp:9
friend _dgbmatrix _(dgbmatrix &)
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
double * array
1D array to store matrix data
Definition: dgbmatrix.hpp:13
Real Double-precision General Band Matrix Class.
Definition: dgbmatrix.hpp:3
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
_dgbmatrix operator/ ( const dgbmatrix mat,
const double &  d 
)
friend

dgbmatrix/double operator

Definition at line 42 of file dgbmatrix-double.hpp.

43 {CPPL_VERBOSE_REPORT;
44  dgbmatrix newmat(mat.m, mat.n, mat.kl, mat.ku);
45 
46  const CPPL_INT size =(newmat.kl+newmat.ku+1)*newmat.n;
47  for(CPPL_INT i=0; i<size; i++){
48  newmat.array[i] =mat.array[i]/d;
49  }
50 
51  return _(newmat);
52 }
friend _dgematrix i(const dgbmatrix &)
CPPL_INT m
matrix row size
Definition: dgbmatrix.hpp:9
friend _dgbmatrix _(dgbmatrix &)
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
double * array
1D array to store matrix data
Definition: dgbmatrix.hpp:13
Real Double-precision General Band Matrix Class.
Definition: dgbmatrix.hpp:3
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
_dgbmatrix operator* ( const double &  d,
const dgbmatrix mat 
)
friend

double*dgbmatrix operator

Definition at line 3 of file double-dgbmatrix.hpp.

4 {CPPL_VERBOSE_REPORT;
5  dgbmatrix newmat(mat.m, mat.n, mat.kl, mat.ku);
6 
7  const CPPL_INT size =(mat.kl+mat.ku+1)*mat.n;
8  for(CPPL_INT i=0; i<size; i++){
9  newmat.array[i] =d*mat.array[i];
10  }
11 
12  return _(newmat);
13 }
friend _dgematrix i(const dgbmatrix &)
CPPL_INT m
matrix row size
Definition: dgbmatrix.hpp:9
friend _dgbmatrix _(dgbmatrix &)
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
double * array
1D array to store matrix data
Definition: dgbmatrix.hpp:13
Real Double-precision General Band Matrix Class.
Definition: dgbmatrix.hpp:3
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10

Member Data Documentation

CPPL_INT dgbmatrix::m
CPPL_INT dgbmatrix::n
CPPL_INT dgbmatrix::kl
CPPL_INT dgbmatrix::ku
double* dgbmatrix::array
double** dgbmatrix::darray

array of pointers of column head addresses

Definition at line 14 of file dgbmatrix.hpp.

Referenced by _(), clear(), copy(), dgbmatrix(), operator()(), resize(), set(), shallow_copy(), swap(), and ~dgbmatrix().


The documentation for this class was generated from the following files: