MBDyn-1.7.3
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups
fullmh.h
Go to the documentation of this file.
1 /* $Header: /var/cvs/mbdyn/mbdyn/mbdyn-1.0/libraries/libmbmath/fullmh.h,v 1.39 2017/01/12 14:43:53 masarati Exp $ */
2 /*
3  * MBDyn (C) is a multibody analysis code.
4  * http://www.mbdyn.org
5  *
6  * Copyright (C) 1996-2017
7  *
8  * Pierangelo Masarati <masarati@aero.polimi.it>
9  * Paolo Mantegazza <mantegazza@aero.polimi.it>
10  *
11  * Dipartimento di Ingegneria Aerospaziale - Politecnico di Milano
12  * via La Masa, 34 - 20156 Milano, Italy
13  * http://www.aero.polimi.it
14  *
15  * Changing this copyright notice is forbidden.
16  *
17  * This program is free software; you can redistribute it and/or modify
18  * it under the terms of the GNU General Public License as published by
19  * the Free Software Foundation (version 2 of the License).
20  *
21  *
22  * This program is distributed in the hope that it will be useful,
23  * but WITHOUT ANY WARRANTY; without even the implied warranty of
24  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
25  * GNU General Public License for more details.
26  *
27  * You should have received a copy of the GNU General Public License
28  * along with this program; if not, write to the Free Software
29  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
30  */
31 
32 #ifndef FULLMH_H
33 #define FULLMH_H
34 
35 #include "solman.h"
36 #include "except.h"
37 
38 #include "spmh.h"
39 #include "matvec3.h"
40 #include "matvec3n.h"
41 
42 /* FullMatrixHandler - begin */
43 
45  friend std::ostream&
46  operator << (std::ostream& out, const FullMatrixHandler& m);
47  friend std::ostream& Write(std::ostream& out,
48  const FullMatrixHandler& m,
49  const char* s, const char* s2);
50  friend class FullSubMatrixHandler;
51  friend class SparseSubMatrixHandler;
52 
53 public:
54  // allow copy constructor!
57 
58 private:
59 
60 protected:
62 
65 
68 
73 
74  void CreateColRow(integer iNR, integer iNC);
75 
76 public:
78  friend class FullMatrixHandler;
79 
80  private:
82  mutable integer i_idx;
84 
85  protected:
86  void reset(bool is_end = false);
87 
88  public:
89  const_iterator(const FullMatrixHandler& m, bool is_end = false);
90  ~const_iterator(void);
94  bool operator == (const FullMatrixHandler::const_iterator& op) const;
95  bool operator != (const FullMatrixHandler::const_iterator& op) const;
96  };
97 
98 private:
100 
101 public:
103  return const_iterator(*this);
104  };
105 
107  return m_end;
108  };
109 
110 public:
112  integer iSize, integer iNR, integer iNC,
113  integer iMaxCols = 0);
114 
115  /* costruttore che si alloca la memoria */
116  FullMatrixHandler(integer iNR, integer iNC = 0);
117 
118  /* costruttore che non fa nulla */
119  FullMatrixHandler(void);
120 
121  virtual ~FullMatrixHandler(void);
122 
123  /* ridimensiona la matrice (se possiede la memoria) */
124  virtual void Resize(integer iNewRows, integer iNewCols);
125 
126  /* si stacca dalla memoria a cui e' associato */
127  void Detach(void);
128 
129  /* zero the matrix */
130  void Reset(void);
131 
132  /* Attacca un nuovo array, con n. righe, n. colonne e dim. massima;
133  * se assente, assunta = nrighe*ncolonne */
134  void Attach(integer iNewRows, integer iNewCols,
135  doublereal* pd, doublereal** ppd,
136  integer iMSize = 0, integer iMaxC = 0);
137 
138 #ifdef DEBUG
139  /* Usata per il debug */
140  virtual void IsValid(void) const;
141 #endif /* DEBUG */
142 
143  /* Used to access raw data by c functions */
144  const doublereal* pdGetMat(void) const {
145  ASSERT(pdRaw != NULL);
146  return pdRaw;
147  };
148 
150  ASSERT(pdRaw != NULL);
151  return pdRaw;
152  };
153 
154  virtual inline const doublereal *pdGetVec(integer iCol) const {
155 #ifdef DEBUG
156  ASSERT(pdRaw != NULL);
157  ASSERT(ppdColsm1 != NULL);
158  ASSERT(iCol > 0 && iCol <= iNumCols);
159  ASSERT(ppdColsm1[iCol] != NULL);
160 #endif /* DEBUG */
161 
162  return &ppdColsm1[iCol][1];
163  };
164 
165  virtual inline doublereal *pdGetVec(integer iCol) {
166 #ifdef DEBUG
167  ASSERT(pdRaw != NULL);
168  ASSERT(ppdColsm1 != NULL);
169  ASSERT(iCol > 0 && iCol <= iNumCols);
170  ASSERT(ppdColsm1[iCol] != NULL);
171 #endif /* DEBUG */
172 
173  return &ppdColsm1[iCol][1];
174  };
175 
176  /* Inserisce un coefficiente */
177  virtual inline void
178  PutCoef(integer iRow, integer iCol, const doublereal& dCoef) {
179 #ifdef DEBUG
180  IsValid();
181  ASSERT(iRow > 0 && iRow <= iNumRows);
182  ASSERT(iCol > 0 && iCol <= iNumCols);
183 #endif /* DEBUG */
184 
185  ppdColsm1[iCol][iRow] = dCoef;
186  };
187 
188  /* Incrementa un coefficiente - se non esiste lo crea */
189  virtual inline void
190  IncCoef(integer iRow, integer iCol, const doublereal& dCoef) {
191 #ifdef DEBUG
192  IsValid();
193  ASSERT(iRow > 0 && iRow <= iNumRows);
194  ASSERT(iCol > 0 && iCol <= iNumCols);
195 #endif /* DEBUG */
196 
197  ppdColsm1[iCol][iRow] += dCoef;
198  };
199 
200  /* Incrementa un coefficiente - se non esiste lo crea */
201  virtual inline void
202  DecCoef(integer iRow, integer iCol, const doublereal& dCoef) {
203 #ifdef DEBUG
204  IsValid();
205  ASSERT(iRow > 0 && iRow <= iNumRows);
206  ASSERT(iCol > 0 && iCol <= iNumCols);
207 #endif /* DEBUG */
208 
209  ppdColsm1[iCol][iRow] -= dCoef;
210  };
211 
212  /* Restituisce un coefficiente - zero se non e' definito */
213  virtual inline const doublereal&
214  dGetCoef(integer iRow, integer iCol) const {
215 #ifdef DEBUG
216  IsValid();
217  ASSERT(iRow > 0 && iRow <= iNumRows);
218  ASSERT(iCol > 0 && iCol <= iNumCols);
219 #endif /* DEBUG */
220 
221  return ppdColsm1[iCol][iRow];
222  };
223 
224  /* dimensioni */
225  virtual integer iGetNumRows(void) const {
226  return iNumRows;
227  };
228 
229  virtual integer iGetNumCols(void) const {
230  return iNumCols;
231  };
232 
233  virtual doublereal&
235 #ifdef DEBUG
236  IsValid();
237  ASSERT(iRow > 0);
238  ASSERT(iRow <= iNumRows);
239  ASSERT(iCol > 0);
240  ASSERT(iCol <= iNumCols);
241 #endif /* DEBUG */
242 
243  return ppdColsm1[iCol][iRow];
244  };
245 
246  virtual const doublereal&
247  operator () (integer iRow, integer iCol) const {
248 #ifdef DEBUG
249  IsValid();
250  ASSERT(iRow > 0);
251  ASSERT(iRow <= iNumRows);
252  ASSERT(iCol > 0);
253  ASSERT(iCol <= iNumCols);
254 #endif /* DEBUG */
255 
256  return ppdColsm1[iCol][iRow];
257  };
258 
259  /* Overload di += usato per l'assemblaggio delle matrici */
260  virtual MatrixHandler& operator +=(const SubMatrixHandler& SubMH);
261 
262  /* Overload di -= usato per l'assemblaggio delle matrici */
263  virtual MatrixHandler& operator -=(const SubMatrixHandler& SubMH);
264 
265  /* Overload di += usato per l'assemblaggio delle matrici */
266  virtual MatrixHandler& operator +=(const VariableSubMatrixHandler& SubMH);
267 
268  /* Overload di -= usato per l'assemblaggio delle matrici */
269  virtual MatrixHandler& operator -=(const VariableSubMatrixHandler& SubMH);
270 
271  /* Esegue il prodotto tra due matrici e se lo memorizza */
272  void MatMul(const FullMatrixHandler& m1, const FullMatrixHandler& m2);
273 
274 protected:
276  MatMatMul_base(void (MatrixHandler::*op)(integer iRow, integer iCol,
277  const doublereal& dCoef),
278  MatrixHandler& out, const MatrixHandler& in) const;
280  MatTMatMul_base(void (MatrixHandler::*op)(integer iRow, integer iCol,
281  const doublereal& dCoef),
282  MatrixHandler& out, const MatrixHandler& in) const;
283 
284  virtual VectorHandler&
285  MatVecMul_base(void (VectorHandler::*op)(integer iRow,
286  const doublereal& dCoef),
287  VectorHandler& out, const VectorHandler& in) const;
288  virtual VectorHandler&
289  MatTVecMul_base(void (VectorHandler::*op)(integer iRow,
290  const doublereal& dCoef),
291  VectorHandler& out, const VectorHandler& in) const;
292 
293 public:
294  void Add(integer iRow, integer iCol,
295  const FullMatrixHandler & source);
296  void Sub(integer iRow, integer iCol,
297  const FullMatrixHandler & source);
298  void Put(integer iRow, integer iCol,
299  const FullMatrixHandler & source);
300  void Add(integer iRow, integer iCol,
301  const FullMatrixHandler & source, const doublereal dCoef);
302  void Sub(integer iRow, integer iCol,
303  const FullMatrixHandler & source, const doublereal dCoef);
304  void Put(integer iRow, integer iCol,
305  const FullMatrixHandler & source, const doublereal dCoef);
306  void AddT(integer iRow, integer iCol,
307  const FullMatrixHandler & source);
308  void SubT(integer iRow, integer iCol,
309  const FullMatrixHandler & source);
310  void PutT(integer iRow, integer iCol,
311  const FullMatrixHandler & source);
312  void AddT(integer iRow, integer iCol,
313  const FullMatrixHandler & source, const doublereal dCoef);
314  void SubT(integer iRow, integer iCol,
315  const FullMatrixHandler & source, const doublereal dCoef);
316  void PutT(integer iRow, integer iCol,
317  const FullMatrixHandler & source, const doublereal dCoef);
318 
319  /*
320  * Somma un vettore di tipo Vec3 in una data posizione.
321  * Nota: si assume che nella sottomatrice vi sia spazio
322  * per il vettore 3.
323  * Nota: gli indici sono a base 1, in stile FORTRAN.
324  * @param iRow indice di riga della sottomatrice da cui iniziare
325  * @param iCol indice di colonna della sottomatrice da cui iniziare
326  * @param v Vec3 da sommare
327  */
328  void
329  Add(integer iRow, integer iCol, const Vec3& v);
330 
331  /*
332  * Sottrae un vettore di tipo Vec3 in una data posizione.
333  * Nota: si assume che nella sottomatrice vi sia spazio
334  * per il vettore 3.
335  * Nota: gli indici sono a base 1, in stile FORTRAN.
336  * @param iRow indice di riga della sottomatrice da cui iniziare
337  * @param iCol indice di colonna della sottomatrice da cui iniziare
338  * @param v Vec3 da sommare
339  */
340  void
341  Sub(integer iRow, integer iCol, const Vec3& v);
342 
343  /*
344  * Scrive un vettore di tipo Vec3 in una data posizione.
345  * Nota: si assume che nella sottomatrice vi sia spazio
346  * per il vettore 3.
347  * Nota: gli indici sono a base 1, in stile FORTRAN.
348  * @param iRow indice di riga della sottomatrice da cui iniziare
349  * @param iCol indice di colonna della sottomatrice da cui iniziare
350  * @param v Vec3 da sommare
351  */
352  void
353  Put(integer iRow, integer iCol, const Vec3& v);
354 
355  /*
356  * Somma un vettore di tipo Vec3 trasposto in una data posizione.
357  * Nota: si assume che nella sottomatrice vi sia spazio
358  * per il vettore 3 trasposto (riga).
359  * Nota: gli indici sono a base 1, in stile FORTRAN.
360  * @param iRow indice di riga della sottomatrice da cui iniziare
361  * @param iCol indice di colonna della sottomatrice da cui iniziare
362  * @param v Vec3 da sommare
363  */
364  void
365  AddT(integer iRow, integer iCol, const Vec3& v);
366 
367  /*
368  * Sottrae un vettore di tipo Vec3 trasposto in una data posizione.
369  * Nota: si assume che nella sottomatrice vi sia spazio
370  * per il vettore 3 trasposto (riga).
371  * Nota: gli indici sono a base 1, in stile FORTRAN.
372  * @param iRow indice di riga della sottomatrice da cui iniziare
373  * @param iCol indice di colonna della sottomatrice da cui iniziare
374  * @param v Vec3 da sommare
375  */
376  void
377  SubT(integer iRow, integer iCol, const Vec3& v);
378 
379  /*
380  * Scrive un vettore di tipo Vec3 trasposto in una data posizione.
381  * Nota: si assume che nella sottomatrice vi sia spazio
382  * per il vettore 3 trasposto (riga).
383  * Nota: gli indici sono a base 1, in stile FORTRAN.
384  * @param iRow indice di riga della sottomatrice da cui iniziare
385  * @param iCol indice di colonna della sottomatrice da cui iniziare
386  * @param v Vec3 da sommare
387  */
388  void
389  PutT(integer iRow, integer iCol, const Vec3& v);
390 
391 #if 0 /* FIXME: replace original? */
392  /*
393  * Somma un vettore di tipo Vec3 in una data posizione in diagonale.
394  * Nota: si assume che nella sottomatrice vi sia spazio
395  * per il vettore 3.
396  * Nota: gli indici sono a base 1, in stile FORTRAN.
397  * @param iRow indice di riga della sottomatrice da cui iniziare
398  * @param iCol indice di colonna della sottomatrice da cui iniziare
399  * @param v Vec3 da sommare
400  */
401  void
402  AddDiag(integer iRow, integer iCol, const Vec3& v);
403 
404  /*
405  * Sottrae un vettore di tipo Vec3 in una data posizione in diagonale.
406  * Nota: si assume che nella sottomatrice vi sia spazio
407  * per il vettore 3.
408  * Nota: gli indici sono a base 1, in stile FORTRAN.
409  * @param iRow indice di riga della sottomatrice da cui iniziare
410  * @param iCol indice di colonna della sottomatrice da cui iniziare
411  * @param v Vec3 da sommare
412  */
413  void
414  SubDiag(integer iRow, integer iCol, const Vec3& v);
415 
416  /*
417  * Scrive un vettore di tipo Vec3 in una data posizione in diagonale.
418  * Nota: si assume che nella sottomatrice vi sia spazio
419  * per il vettore 3.
420  * Nota: gli indici sono a base 1, in stile FORTRAN.
421  * @param iRow indice di riga della sottomatrice da cui iniziare
422  * @param iCol indice di colonna della sottomatrice da cui iniziare
423  * @param v Vec3 da sommare
424  */
425  void
426  PutDiag(integer iRow, integer iCol, const Vec3& v);
427 
428  /*
429  * Somma un vettore di tipo Vec3 in una data posizione [ v x ].
430  * Nota: si assume che nella sottomatrice vi sia spazio
431  * per il vettore 3.
432  * Nota: gli indici sono a base 1, in stile FORTRAN.
433  * @param iRow indice di riga della sottomatrice da cui iniziare
434  * @param iCol indice di colonna della sottomatrice da cui iniziare
435  * @param v Vec3 da sommare
436  */
437  void
438  AddCross(integer iRow, integer iCol, const Vec3& v);
439 
440  /*
441  * Sottrae un vettore di tipo Vec3 in una data posizione [ v x ].
442  * Nota: si assume che nella sottomatrice vi sia spazio
443  * per il vettore 3.
444  * Nota: gli indici sono a base 1, in stile FORTRAN.
445  * @param iRow indice di riga della sottomatrice da cui iniziare
446  * @param iCol indice di colonna della sottomatrice da cui iniziare
447  * @param v Vec3 da sommare
448  */
449  void
450  SubCross(integer iRow, integer iCol, const Vec3& v);
451 
452  /*
453  * Scrive un vettore di tipo Vec3 in una data posizione [ v x ].
454  * Nota: si assume che nella sottomatrice vi sia spazio
455  * per il vettore 3.
456  * Nota: gli indici sono a base 1, in stile FORTRAN.
457  * @param iRow indice di riga della sottomatrice da cui iniziare
458  * @param iCol indice di colonna della sottomatrice da cui iniziare
459  * @param v Vec3 da sommare
460  */
461  void
462  PutCross(integer iRow, integer iCol, const Vec3& v);
463 #endif
464 
465  /*
466  * Somma una matrice di tipo Mat3x3 in una data posizione.
467  * Nota: si assume che nella sottomatrice vi sia spazio
468  * per la matrice 3x3.
469  * Nota: gli indici sono a base 1, in stile FORTRAN.
470  * @param iRow indice di riga della sottomatrice da cui iniziare
471  * @param iCol indice di colonna della sottomatrice da cui iniziare
472  * @param m Mat3x3 da sommare
473  */
474  void
475  Add(integer iRow, integer iCol, const Mat3x3& m);
476  void
477  AddT(integer iRow, integer iCol, const Mat3x3& m);
478 
479  /*
480  * Sottrae una matrice di tipo Mat3x3 da una data posizione.
481  * Nota: si assume che nella sottomatrice vi sia spazio
482  * per la matrice 3x3.
483  * Nota: gli indici sono a base 1, in stile FORTRAN.
484  * @param iRow indice di riga della sottomatrice da cui iniziare
485  * @param iCol indice di colonna della sottomatrice da cui iniziare
486  * @param m Mat3x3 da sottrarre
487  */
488  void
489  Sub(integer iRow, integer iCol, const Mat3x3& m);
490  void
491  SubT(integer iRow, integer iCol, const Mat3x3& m);
492 
493  /*
494  * Scrive una matrice di tipo Mat3x3 in una data posizione.
495  * Nota: si assume che nella sottomatrice vi sia spazio
496  * per la matrice 3x3.
497  * Nota: gli indici sono a base 1, in stile FORTRAN.
498  * @param iRow indice di riga della sottomatrice da cui iniziare
499  * @param iCol indice di colonna della sottomatrice da cui iniziare
500  * @param m Mat3x3 da scrivere
501  */
502  void
503  Put(integer iRow, integer iCol, const Mat3x3& m);
504  void
505  PutT(integer iRow, integer iCol, const Mat3x3& m);
506 
507  /*
508  * Somma una matrice di tipo Mat3xN in una data posizione.
509  * Nota: si assume che nella sottomatrice vi sia spazio
510  * per la matrice 3x3.
511  * Nota: gli indici sono a base 1, in stile FORTRAN.
512  * @param iRow indice di riga della sottomatrice da cui iniziare
513  * @param iCol indice di colonna della sottomatrice da cui iniziare
514  * @param m Mat3xN
515  */
516  void
517  Add(integer iRow, integer iCol, const Mat3xN& m);
518  void
519  AddT(integer iRow, integer iCol, const Mat3xN& m);
520 
521  /*
522  * Sottrae una matrice di tipo Mat3xN da una data posizione.
523  * Nota: si assume che nella sottomatrice vi sia spazio
524  * per la matrice 3x3.
525  * Nota: gli indici sono a base 1, in stile FORTRAN.
526  * @param iRow indice di riga della sottomatrice da cui iniziare
527  * @param iCol indice di colonna della sottomatrice da cui iniziare
528  * @param m Mat3xN
529  */
530  void
531  Sub(integer iRow, integer iCol, const Mat3xN& m);
532  void
533  SubT(integer iRow, integer iCol, const Mat3xN& m);
534 
535  /*
536  * Scrive una matrice di tipo Mat3xN in una data posizione.
537  * Nota: si assume che nella sottomatrice vi sia spazio
538  * per la matrice 3x3.
539  * Nota: gli indici sono a base 1, in stile FORTRAN.
540  * @param iRow indice di riga della sottomatrice da cui iniziare
541  * @param iCol indice di colonna della sottomatrice da cui iniziare
542  * @param m Mat3xN
543  */
544  void
545  Put(integer iRow, integer iCol, const Mat3xN& m);
546  void
547  PutT(integer iRow, integer iCol, const Mat3xN& m);
548 
549  /* come sopra, ma per matrici Nx3 **/
550  void Add(integer iRow, integer iCol, const MatNx3& m);
551  void Sub(integer iRow, integer iCol, const MatNx3& m);
552  void Put(integer iRow, integer iCol, const MatNx3& m);
553 
554  void CopyMatrixRow(integer dest_row,
555  const FullMatrixHandler & source, integer source_row);
556  void CopyMatrixBlock(integer dest_row, integer dest_col,
557  const FullMatrixHandler & source,
558  integer source_start_row, integer source_end_row,
559  integer source_start_col, integer source_end_col);
560 };
561 
562 extern std::ostream&
563 operator << (std::ostream& out, const FullMatrixHandler& m);
564 
565 extern std::ostream& Write(std::ostream& out,
566  const FullMatrixHandler& m,
567  const char* s = " ",
568  const char* s2 = NULL);
569 
570 /* FullMatrixHandler - end */
571 
572 #endif /* FULLMH_H */
573 
void PutT(integer iRow, integer iCol, const FullMatrixHandler &source)
Definition: fullmh.cc:1338
doublereal * pdRaw
Definition: fullmh.h:69
void MatMul(const FullMatrixHandler &m1, const FullMatrixHandler &m2)
Definition: fullmh.cc:433
void reset(bool is_end=false)
Definition: fullmh.cc:2347
virtual MatrixHandler & operator-=(const SubMatrixHandler &SubMH)
Definition: fullmh.cc:412
const FullMatrixHandler::const_iterator & operator++(void) const
Definition: fullmh.cc:2373
SparseMatrixHandler::SparseMatrixElement elem
Definition: fullmh.h:83
Definition: matvec3.h:98
doublereal * pdRawm1
Definition: fullmh.h:70
friend std::ostream & operator<<(std::ostream &out, const FullMatrixHandler &m)
Definition: fullmh.cc:352
bool operator==(const FullMatrixHandler::const_iterator &op) const
Definition: fullmh.cc:2415
integer iMaxCols
Definition: fullmh.h:67
void Put(integer iRow, integer iCol, const FullMatrixHandler &source)
Definition: fullmh.cc:1113
const SparseMatrixHandler::SparseMatrixElement * operator->(void) const
Definition: fullmh.cc:2403
void Detach(void)
Definition: fullmh.cc:268
const_iterator(const FullMatrixHandler &m, bool is_end=false)
Definition: fullmh.cc:2361
integer iNumRows
Definition: fullmh.h:63
void CopyMatrixRow(integer dest_row, const FullMatrixHandler &source, integer source_row)
Definition: fullmh.cc:2301
virtual void IncCoef(integer iRow, integer iCol, const doublereal &dCoef)
Definition: fullmh.h:190
void Add(integer iRow, integer iCol, const FullMatrixHandler &source)
Definition: fullmh.cc:1039
virtual void DecCoef(integer iRow, integer iCol, const doublereal &dCoef)
Definition: fullmh.h:202
virtual doublereal * pdGetVec(integer iCol)
Definition: fullmh.h:165
const FullMatrixHandler::const_iterator & end(void) const
Definition: fullmh.h:106
FullMatrixHandler::const_iterator begin(void) const
Definition: fullmh.h:102
virtual MatrixHandler & operator+=(const SubMatrixHandler &SubMH)
Definition: fullmh.cc:405
virtual void Resize(integer iNewRows, integer iNewCols)
Definition: fullmh.cc:174
doublereal ** ppdCols
Definition: fullmh.h:71
std::ostream & operator<<(std::ostream &out, const FullMatrixHandler &m)
Definition: fullmh.cc:352
virtual const doublereal & dGetCoef(integer iRow, integer iCol) const
Definition: fullmh.h:214
virtual ~FullMatrixHandler(void)
Definition: fullmh.cc:167
virtual void PutCoef(integer iRow, integer iCol, const doublereal &dCoef)
Definition: fullmh.h:178
bool operator!=(const FullMatrixHandler::const_iterator &op) const
Definition: fullmh.cc:2421
integer iRawSize
Definition: fullmh.h:66
virtual VectorHandler & MatTVecMul_base(void(VectorHandler::*op)(integer iRow, const doublereal &dCoef), VectorHandler &out, const VectorHandler &in) const
Definition: fullmh.cc:963
integer iNumCols
Definition: fullmh.h:64
#define ASSERT(expression)
Definition: colamd.c:977
void CopyMatrixBlock(integer dest_row, integer dest_col, const FullMatrixHandler &source, integer source_start_row, integer source_end_row, integer source_start_col, integer source_end_col)
Definition: fullmh.cc:2319
void CreateColRow(integer iNR, integer iNC)
Definition: fullmh.cc:58
MatrixHandler & MatTMatMul_base(void(MatrixHandler::*op)(integer iRow, integer iCol, const doublereal &dCoef), MatrixHandler &out, const MatrixHandler &in) const
Definition: fullmh.cc:744
void Sub(integer iRow, integer iCol, const FullMatrixHandler &source)
Definition: fullmh.cc:1076
friend std::ostream & Write(std::ostream &out, const FullMatrixHandler &m, const char *s, const char *s2)
Definition: fullmh.cc:376
virtual integer iGetNumCols(void) const
Definition: fullmh.h:229
virtual doublereal & operator()(integer iRow, integer iCol)
Definition: fullmh.h:234
const SparseMatrixHandler::SparseMatrixElement & operator*(void) const
Definition: fullmh.cc:2409
const doublereal * pdGetMat(void) const
Definition: fullmh.h:144
FullMatrixHandler(void)
Definition: fullmh.cc:119
MatrixHandler & MatMatMul_base(void(MatrixHandler::*op)(integer iRow, integer iCol, const doublereal &dCoef), MatrixHandler &out, const MatrixHandler &in) const
Definition: fullmh.cc:601
void Attach(integer iNewRows, integer iNewCols, doublereal *pd, doublereal **ppd, integer iMSize=0, integer iMaxC=0)
Definition: fullmh.cc:290
const FullMatrixHandler & m
Definition: fullmh.h:81
bool bOwnsMemory
Definition: fullmh.h:61
doublereal ** ppdColsm1
Definition: fullmh.h:72
void SubT(integer iRow, integer iCol, const FullMatrixHandler &source)
Definition: fullmh.cc:1301
double doublereal
Definition: colamd.c:52
long int integer
Definition: colamd.c:51
void AddT(integer iRow, integer iCol, const FullMatrixHandler &source)
Definition: fullmh.cc:1264
const_iterator m_end
Definition: fullmh.h:99
virtual const doublereal * pdGetVec(integer iCol) const
Definition: fullmh.h:154
virtual VectorHandler & MatVecMul_base(void(VectorHandler::*op)(integer iRow, const doublereal &dCoef), VectorHandler &out, const VectorHandler &in) const
Definition: fullmh.cc:887
virtual integer iGetNumRows(void) const
Definition: fullmh.h:225
std::ostream & Write(std::ostream &out, const FullMatrixHandler &m, const char *s=" ", const char *s2=NULL)
Definition: fullmh.cc:376
doublereal * pdGetMat(void)
Definition: fullmh.h:149
void Reset(void)
Definition: fullmh.cc:44
FullMatrixHandler & operator=(const FullMatrixHandler &)
Definition: fullmh.cc:146