v2DM-DOCI  1.0
Container.h
Go to the documentation of this file.
1 /*
2  * @BEGIN LICENSE
3  *
4  * Copyright (C) 2014-2015 Ward Poelmans
5  *
6  * This file is part of v2DM-DOCI.
7  *
8  * v2DM-DOCI is free software: you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation, either version 3 of the License, or
11  * (at your option) any later version.
12  *
13  * Foobar is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with Foobar. If not, see <http://www.gnu.org/licenses/>.
20  *
21  * @END LICENSE
22  */
23 
24 #ifndef CONTAINER_H
25 #define CONTAINER_H
26 
27 #include <iostream>
28 #include <cstdlib>
29 #include <vector>
30 
31 #include "BlockStructure.h"
32 
33 namespace doci2DM
34 {
35 
39 class Container
40 {
50  friend std::ostream &operator<<(std::ostream &output,const doci2DM::Container &container);
51 
52  public:
53 
54  //constructor
55  Container(int n, int m);
56 
57  //copy constructor
58  Container(const Container &);
59 
60  Container(Container &&);
61 
62  //destructor
63  virtual ~Container() = default;
64 
65  void setMatrixDim(int,int,int);
66 
67  void setVectorDim(int,int,int);
68 
69  //overload equality operator
70  Container &operator=(const Container &);
71 
73 
74  Container &operator=(double);
75 
76  //overload += operator
77  Container &operator+=(const Container &);
78 
79  //overload -= operator
80  Container &operator-=(const Container &);
81 
82  Container &daxpy(double alpha,const Container &);
83 
84  Container &operator*=(double);
85 
86  Container &operator/=(double);
87 
88  Container &mprod(const Container &,const Container &);
89 
90  //easy to change the numbers
91  double &operator()(int block,int i,int j);
92 
93  //easy to access the numbers
94  double operator()(int block,int i,int j) const;
95 
96  double &operator()(int block,int i);
97 
98  //easy to access the numbers
99  double operator()(int block,int i) const;
100 
101  Matrix & getMatrix(int);
102  const Matrix & getMatrix(int) const;
103 
104  Vector & getVector(int);
105  const Vector & getVector(int) const;
106 
108  const BlockMatrix & getMatrices() const;
109 
111  const BlockVector & getVectors() const;
112 
113  int gnr() const;
114 
115  int gnMatrix() const;
116 
117  int gnVector() const;
118 
119  int gdimMatrix(int) const;
120 
121  int gdimVector(int) const;
122 
123  int gdegMatrix(int) const;
124 
125  int gdegVector(int) const;
126 
127  double trace() const;
128 
129  double ddot(const Container &) const;
130 
131  void invert();
132 
133  void dscal(double);
134 
135  void fill_Random();
136 
137  void fill_Random(int);
138 
139  //positieve of negatieve vierkantswortel uit de matrix
140  void sqrt(int);
141 
142  void L_map(const Container &,const Container &);
143 
144  void symmetrize();
145 
146  void sep_pm(Container &,Container &);
147 
148  private:
149 
150  std::unique_ptr<BlockMatrix> matrix;
151  std::unique_ptr<BlockVector> vector;
152 };
153 
154 }
155 
156 #endif
157 
158 /* vim: set ts=3 sw=3 expandtab :*/
double trace() const
Definition: Container.cpp:250
Matrix & getMatrix(int)
Definition: Container.cpp:174
Container & operator=(const Container &)
Definition: Container.cpp:75
int gnVector() const
Definition: Container.cpp:225
Vector & getVector(int)
Definition: Container.cpp:184
Container & mprod(const Container &, const Container &)
Definition: Container.cpp:146
double ddot(const Container &) const
Definition: Container.cpp:255
void setMatrixDim(int, int, int)
Definition: Container.cpp:59
int gdimVector(int) const
Definition: Container.cpp:235
std::unique_ptr< BlockMatrix > matrix
Definition: Container.h:150
int gnr() const
Definition: Container.cpp:215
friend std::ostream & operator<<(std::ostream &output, const doci2DM::Container &container)
Definition: Container.cpp:310
Container & operator-=(const Container &)
Definition: Container.cpp:108
int gdegMatrix(int) const
Definition: Container.cpp:240
void sep_pm(Container &, Container &)
Definition: Container.cpp:302
Container & operator+=(const Container &)
Definition: Container.cpp:99
BlockVector & getVectors()
Definition: Container.cpp:205
Container(int n, int m)
Definition: Container.cpp:34
Container & operator/=(double)
Definition: Container.cpp:132
Container & daxpy(double alpha, const Container &)
Definition: Container.cpp:116
void dscal(double)
Definition: Container.cpp:266
int gdegVector(int) const
Definition: Container.cpp:245
double & operator()(int block, int i, int j)
Definition: Container.cpp:154
std::unique_ptr< BlockVector > vector
Definition: Container.h:151
int gdimMatrix(int) const
Definition: Container.cpp:230
void L_map(const Container &, const Container &)
Definition: Container.cpp:291
BlockMatrix & getMatrices()
Definition: Container.cpp:195
int gnMatrix() const
Definition: Container.cpp:220
virtual ~Container()=default
void setVectorDim(int, int, int)
Definition: Container.cpp:70
Container & operator*=(double)
Definition: Container.cpp:124