NeoPZ
pzskylmat.h
Go to the documentation of this file.
1 #ifndef TSKYLMATH
2 #define TSKYLMATH
3 
4 #ifdef USING_NEW_SKYLMAT
5 
13 #include "pzmatrix.h"
14 #include "pzvec.h"
15 //#include "pzmanvector.h" // TODO: verify if this include file is required.
16 
17 //TODO: why we need the OOPARLIB ifdef?
18 #ifdef OOPARLIB
19 #include "pzsaveable.h"
20 #include "pzmatdefs.h"
21 #endif
22 
23 #include "pzfmatrix.h"
24 
25 /*
26  The fStorate and fElem arrays store the columns data and the pointers to the
27  columns in the following way.
28 
29  Let the following matrix be a 6x6 skyline matrix.
30 
31  A B D
32  C E G
33  F H
34  I J
35  K
36  L
37 
38  fStorage is an array that stores the columns data in the following way:
39 
40  A B C D E F G H I J K L
41 
42  and fElem is an array of pointers to the first element of each column.
43 
44  fStorage = A B C D E F G H I J K L
45  ^ ^ ^ ^ ^ ^ ^
46  | | | | | | |
47  | +-+ +-+ | +-+ +-+ ++
48  | | | | | | |
49  fElem = 0 1 3 6 9 11 12
50 
51 
52  M[r,c] = (fElem[c+1]-1) - (c-r)
53  | |
54  Diag. Dist to Diag.
55 
56  Ensure (c-r) < Size(c) == fElem[c+1] - fElemn[c-1]
57 
58  Size(c) == fElem[c+1]-fElem[c]
59 
60  M[r,c] = (fElem[c+1]-1) - (c-r)
61  = fElem[c] + Size(c) - 1 - c + r
62  = fElem[c] + (Size(c) - 1 - c + r)
63  = fElem[c] + (r + Size(c) - c - 1)
64  = fElem[c] + (r + (Size(c)-1) - c)
65  = fElem[c] + r + ((Size(c)-1) - c)
66 
67  Hence:
68  element index = r + Size(c) -1 -c
69 
70 
71  */
72 
73 
79 template<class TVar>
80 class TPZSkylMatrix : public TPZMatrix<TVar>
81 {
82 public:
83 
84  TPZSkylMatrix() : TPZMatrix<TVar>(0,0), fElem(0), fStorage(0)
85  { }
86 
87  virtual ~TPZSkylMatrix() { Clear(); }
88 
92  TPZSkylMatrix(const int64_t dim);
93 
94  //TODO: Verify the descriptions...
99  TPZSkylMatrix(const int64_t dim ,const TPZVec<int64_t> &skyline);
100 
101  TPZSkylMatrix(const TPZSkylMatrix<TVar> &A ) :
103  { Copy(A); }
104 
106 
107  virtual int64_t MemoryFootprint() const {
108  return (sizeof(TVar*)*fElem.size() +
109  sizeof(TVar)*fStorage.size());
110  }
111 
117  void SetSkyline(const TPZVec<int64_t> &skyline);
118 
119  friend class TPZSkylMatrix<float>;
120  friend class TPZSkylMatrix<double>;
121 
123  template<class TVar2>
124  void CopyFrom(TPZSkylMatrix<TVar2> &orig)
125  {
127  TPZVec<TVar2> &origstorage = orig.Storage();
128  TPZVec<TVar2> &origelem = orig.Elem();
129  int64_t nel = origstorage.size();
130  fElem.resize(origelem.size());
131  fStorage.resize(nel);
132  for (int64_t el=0; el<nel; el++) {
133  fStorage[el] = origstorage[el];
134  }
135  int64_t size_el = fElem.size();
136  TVar *first = &fStorage[0];
137  TVar2 *first_orig = &origstorage[0];
138  for (int64_t el=0; el<size_el; el++) {
139  fElem[el] = first+(origelem[el]-first_orig);
140  }
141 
142  }
143 
144 
145  const TPZVec<TVar> &Elem()
146  {
147  return fElem;
148  }
149 
150  const TPZVec<TVar. &Storage()
151  {
152  return fStorage;
153  }
157  int64_t SkyHeight(int64_t col) const { return fElem[col+1]-fElem[col] - 1; }
158 
163  void AddSameStruct(TPZSkylMatrix<TVar> &B, double k = 1.);
164 
166  virtual int IsSimetric() const {return 1;}
167 
172  virtual void UpdateFrom(TPZAutoPointer<TPZMatrix<TVar> > mat);
173 
178  int PutVal(const int64_t row,const int64_t col,const TVar &element );
179 
183  const TVar& GetVal(const int64_t row,const int64_t col ) const;
184 
185  TVar& operator()(const int64_t row, const int64_t col);
186 
187  virtual TVar& s(const int64_t row, const int64_t col) { return operator()(row, col); }
188 
189  TVar &operator()(const int64_t row) { return operator()(row, row); }
190 
191  virtual void MultAdd(const TPZFMatrix<TVar> &x,const TPZFMatrix<TVar> &y, TPZFMatrix<TVar> &z,
192  const TVar alpha,const TVar beta ,const int opt = 0) const ;
193 
195 
198 
201 
202  TPZSkylMatrix operator* (const TVar v ) const;
203  TPZSkylMatrix &operator*=( TVar value );
204 
205  TPZSkylMatrix operator-() const { return operator*(-1.0); }
206 
207 
212  int Resize(const int64_t newDim ,const int64_t );
213 
218  int Redim(const int64_t newDim ,const int64_t );
219  int Redim(const int64_t newDim) {return Redim(newDim,newDim);}
220 
228  void AddKel(TPZFMatrix<TVar>&elmat, TPZVec<int64_t> &sourceindex, TPZVec<int64_t> &destinationindex);
229 
233  int Zero();
234 
238  // @{
239  virtual void SolveSOR(int64_t &numiterations,const TPZFMatrix<TVar> &F, TPZFMatrix<TVar> &result,
240  TPZFMatrix<TVar> *residual,TPZFMatrix<TVar> &scratch,const REAL overrelax, REAL &tol,
241  const int FromCurrent = 0,const int direction = 1) ;
242 
243  int Decompose_Cholesky(); // Faz A = GGt.
244  int Decompose_Cholesky_blk(int64_t blk_sz);
245 
246  int Decompose_LDLt (); // Faz A = LDLt.
247  int Decompose_Cholesky(std::list<int64_t> &singular); // Faz A = GGt.
248  int Decompose_LDLt (std::list<int64_t> &singular); // Faz A = LDLt.
249 
250  int Subst_Forward ( TPZFMatrix<TVar> *b ) const;
251  int Subst_Backward ( TPZFMatrix<TVar> *b ) const;
252  int Subst_LForward ( TPZFMatrix<TVar> *b ) const;
253  int Subst_LBackward( TPZFMatrix<TVar> *b ) const;
254  int Subst_Diag ( TPZFMatrix<TVar> *b ) const;
255  // @}
256 
257  virtual void AutoFill(int64_t nrow, int64_t ncol, int symmetric);
258 
259  public:
260 int ClassId() const override;
261 
262 
268  void Read(TPZStream &buf, void *context) override;
269 
276  void Write(TPZStream &buf, int withclassid) const override;
277  void Write(TPZStream &buf, int withclassid) const override;
278 
279  virtual std::string ClassName() const { return( "TPZSkylMatrix"); }
280 
281  int64_t Size(const int64_t column) const
282  {
283 #ifdef PZDEBUG
284  if (column < 0 || column >= this->Rows()) {
285  DebugStop();
286  }
287 #endif
288  return fElem[column+1]-fElem[column];
289  }
290 
291 protected:
292 
297  TVar* Diag(int64_t col) { return fElem[col+1]-1;}
298 
299  void DecomposeColumn(int64_t col, int64_t prevcol);
300  void DecomposeColumn(int64_t col, int64_t prevcol, std::list<int64_t> &singular);
301  void DecomposeColumn2(int64_t col, int64_t prevcol);
302 
303 private:
304 
305  int Clear();
306  void Copy (const TPZSkylMatrix<TVar> & );
307  static int64_t NumElements(const TPZVec<int64_t> &skyline);
308  static void InitializeElem(const TPZVec<int64_t> &skyline, TPZVec<TVar> &storage, TPZVec<TVar *> &elem);
309 
313  static void ComputeMaxSkyline(const TPZSkylMatrix<TVar> &first,
314  const TPZSkylMatrix<TVar> &second,
316 
317  void MigratePages() {
320  }
321 
322  void ReallocForNuma() {
324  TVar* old_start = &fStorage[0];
326  TVar* new_start = &fStorage[0];
327  for (int i=0; i<fElem.size(); i++) {
328  fElem[i] = new_start + (fElem[i]-old_start);
329  }
330  }
331 protected:
339 
340 private:
346 };
347 
351 template<class TVar,int N>
352 inline TVar TemplateSum(const TVar *p1, const TVar *p2){
353  return *p1* *p2 + TemplateSum<N-1>(p1+1,p2+1);
354 
355 }
356 
360 template<>
361 inline double TemplateSum<double,1>(const double *p1, const double *p2){
362  return *p1 * *p2;
363 }
364 
365 #else // USING_NEW_SKYLMAT
366 
372 #include "pzmatrix.h"
373 #include "pzvec.h"
374 #include "pzmanvector.h"
375 
376 #ifdef OOPARLIB
377 
378 #include "pzsaveable.h"
379 #include "pzmatdefs.h"
380 
381 #endif
382 
383 #include "pzfmatrix.h"
384 
393 template<class TVar>
394 class TPZSkylMatrix : public TPZMatrix<TVar>
395 {
396 public:
398  TPZSkylMatrix(const int64_t dim);
403  TPZSkylMatrix(const int64_t dim ,const TPZVec<int64_t> &skyline);
405 
407 
408  virtual int64_t MemoryFootprint() const override {
409  return (sizeof(TVar*)*fElem.size() +
410  sizeof(TVar)*fStorage.size());
411  }
412 
417  void SetSkyline(const TPZVec<int64_t> &skyline);
418 
422  int64_t SkyHeight(int64_t col) { return fElem[col+1]-fElem[col] - 1; }
423 
427  void AddSameStruct(TPZSkylMatrix<TVar> &B, double k = 1.);
428 
430  virtual int IsSimetric() const override {return 1;}
431 
433  virtual ~TPZSkylMatrix() { Clear(); }
434 
438  virtual void UpdateFrom(TPZAutoPointer<TPZMatrix<TVar> > mat) override;
439 
440  friend class TPZSkylMatrix<float>;
441  friend class TPZSkylMatrix<double>;
442 
444  template<class TVar2>
446  {
448  int64_t nel = orig.fStorage.size();
449  fElem.resize(orig.fElem.size());
450  fStorage.resize(nel);
451  for (int64_t el=0; el<nel; el++) {
452  fStorage[el] = orig.fStorage[el];
453  }
454  int64_t size_el = fElem.size();
455  TVar *first = &fStorage[0];
456  TVar2 *first_orig = &orig.fStorage[0];
457  for (int64_t el=0; el<size_el; el++) {
458  fElem[el] = first+(orig.fElem[el]-first_orig);
459  }
460 
461  }
462 
463 
464  int PutVal(const int64_t row,const int64_t col,const TVar &element ) override;
465  const TVar &GetVal(const int64_t row,const int64_t col ) const override;
466 
467 
468  TVar &operator()(const int64_t row, const int64_t col);
469  virtual TVar &s(const int64_t row, const int64_t col) override;
470 
471 
472  TVar &operator()(const int64_t row);
473 
474  virtual void MultAdd(const TPZFMatrix<TVar> &x,const TPZFMatrix<TVar> &y, TPZFMatrix<TVar> &z,
475  const TVar alpha,const TVar beta ,const int opt = 0) const override;
476  // Operadores com matrizes SKY LINE.
478  //TPZSkylMatrix &operator= (TTempMat<TPZSkylMatrix> A);
479 
482 
485 
486  // Operadores com valores NUMERICOS.
487  TPZSkylMatrix operator* (const TVar v ) const;
488  TPZSkylMatrix &operator*=( TVar value );
489 
490  TPZSkylMatrix operator-() const;// { return operator*(-1.0); }
491 
492  // Redimensiona a matriz, mas mantem seus elementos.
493  // o segundo parametro � o tamanho das colunas
494  int Resize(const int64_t newDim ,const int64_t ) override;
495 
496  // Redimensiona a matriz e ZERA seus elementos.
497  // o segundo parametro � o tamanho das colunas
498  int Redim(const int64_t newDim ,const int64_t ) override;
499  int Redim(const int64_t newDim) {return Redim(newDim,newDim);}
500 
501  // Zera os Elementos da matriz
502  int Zero() override;
503 
511  void AddKel(TPZFMatrix<TVar>&elmat, TPZVec<int64_t> &sourceindex, TPZVec<int64_t> &destinationindex) override;
512 
513 
514  /*** @brief To Solve Linear Equations ***/
515  // @{
516  virtual void SolveSOR(int64_t &numiterations,const TPZFMatrix<TVar> &F, TPZFMatrix<TVar> &result,
517  TPZFMatrix<TVar> *residual,TPZFMatrix<TVar> &scratch,const REAL overrelax, REAL &tol,
518  const int FromCurrent = 0,const int direction = 1) override;
519 
520 
521  int Decompose_Cholesky() override; // Faz A = GGt.
522  int Decompose_Cholesky_blk(int64_t blk_sz);
523 
524  int Decompose_LDLt () override; // Faz A = LDLt.
525  int Decompose_Cholesky(std::list<int64_t> &singular) override; // Faz A = GGt.
526  int Decompose_LDLt (std::list<int64_t> &singular) override; // Faz A = LDLt.
527 
528  int Subst_Forward ( TPZFMatrix<TVar> *b ) const override;
529  int Subst_Backward ( TPZFMatrix<TVar> *b ) const override;
530  int Subst_LForward ( TPZFMatrix<TVar> *b ) const override;
531  int Subst_LBackward( TPZFMatrix<TVar> *b ) const override;
532  int Subst_Diag ( TPZFMatrix<TVar> *b ) const override;
533  // @}
534 
535  //void TestSpeed(int col, int prevcol);
536  virtual void AutoFill(int64_t nrow, int64_t ncol, int symmetric) ;
537 
538  public:
539 int ClassId() const override;
540 
546  void Read(TPZStream &buf, void *context) override;
552  void Write(TPZStream &buf, int withclassid) const override;
553 
554 
555  virtual std::string ClassName() const { return( "TPZSkylMatrix"); }
556 
557 
558  int64_t Size(const int64_t column) const
559  {
560 #ifdef PZDEBUG
561  if (column < 0 || column >= this->Rows()) {
562  DebugStop();
563  }
564 #endif
565  return fElem[column+1]-fElem[column];
566  }
567 
568  int64_t GetNelemts(){
569  return fStorage.size();
570  }
571 
572 protected:
573 
577  TVar *Diag(int64_t col) { return fElem[col];}
578 
579  void DecomposeColumn(int64_t col, int64_t prevcol);
580  void DecomposeColumn(int64_t col, int64_t prevcol, std::list<int64_t> &singular);
581 
582  void DecomposeColumn2(int64_t col, int64_t prevcol);
583 private:
584 
585  // Aloca uma nova coluna. 'fDiag[col].pElem' deve ser NULL.
586 
587  //static int Error(const char *msg1,const char* msg2="" );
588  int Clear() override;
589  void Copy (const TPZSkylMatrix<TVar> & );
590 
591  static int64_t NumElements(const TPZVec<int64_t> &skyline);
592  static void InitializeElem(const TPZVec<int64_t> &skyline, TPZVec<TVar> &storage, TPZVec<TVar *> &elem);
596  static void ComputeMaxSkyline(const TPZSkylMatrix<TVar> &first, const TPZSkylMatrix<TVar> &second, TPZVec<int64_t> &res);
597 
598  void MigratePages() {
601  }
602 
603  void ReallocForNuma() {
605  TVar* old_start = &fStorage[0];
607  TVar* new_start = &fStorage[0];
608  for (int i=0; i<fElem.size(); i++) {
609  fElem[i] = new_start + (fElem[i]-old_start);
610  }
611  }
612 
613 protected:
621 private:
626 };
627 
628 template<class TVar>
630  return Hash("TPZSkylMatrix") ^ TPZMatrix<TVar>::ClassId() << 1;
631 }
632 
634 template<class TVar,int N>
635 inline TVar TemplateSum(const TVar *p1, const TVar *p2){
636  return *p1* *p2 + TemplateSum<N-1>(p1+1,p2+1);
637 
638 }
640 template<>
641 inline double TemplateSum<double,1>(const double *p1, const double *p2){
642  return *p1 * *p2;
643 }
644 
645 #endif // USING_NEW_SKYLMAT
646 
647 #endif // TSKYLMATH
int Subst_LForward(TPZFMatrix< TVar > *b) const override
Computes B = Y, where A*Y = B, A is lower triangular with A(i,i)=1.
Definition: pzskylmat.cpp:3135
int Resize(const int64_t newDim, const int64_t) override
Redimensions a matriz keeping the previous values.
Definition: pzskylmat.cpp:2487
void AddKel(TPZFMatrix< TVar > &elmat, TPZVec< int64_t > &sourceindex, TPZVec< int64_t > &destinationindex) override
Add a contribution of a stiffness matrix.
Definition: pzskylmat.cpp:2259
void MigratePages()
Definition: pzvec.h:74
void ReallocForNuma()
Definition: pzskylmat.h:603
const TVar & GetVal(const int64_t row, const int64_t col) const override
Get values without bounds checking This method is faster than "Get" if DEBUG is defined.
Definition: pzskylmat.cpp:2130
virtual void resize(const int64_t newsize)
Definition: pzvec.h:213
TVar & operator()(const int64_t row, const int64_t col)
Definition: pzskylmat.cpp:1856
TPZVec< TVar > fStorage
fStorage is a unique vector which contains all the data of the skyline matrix
Definition: pzskylmat.h:625
void ReallocForNuma()
Definition: pzvec.h:77
Templated vector implementation.
static void ComputeMaxSkyline(const TPZSkylMatrix< TVar > &first, const TPZSkylMatrix< TVar > &second, TPZVec< int64_t > &res)
Computes the highest skyline of both objects.
Definition: pzskylmat.cpp:1838
void Write(TPZStream &buf, int withclassid) const override
Packs the object structure in a stream of bytes.
Definition: pzskylmat.cpp:3287
virtual int64_t MemoryFootprint() const override
Returns the approximate size of the memory footprint (amount of memory required to store this object)...
Definition: pzskylmat.h:408
int Decompose_Cholesky() override
Decomposes the current matrix using Cholesky method. The current matrix has to be symmetric...
Definition: pzskylmat.cpp:2668
void CopyFrom(TPZSkylMatrix< TVar2 > &orig)
copy the values from a matrix with a different precision
Definition: pzskylmat.h:445
TPZSkylMatrix & operator-=(const TPZSkylMatrix< TVar > &A)
Definition: pzskylmat.cpp:2406
int64_t SkyHeight(int64_t col)
return the height of the skyline for a given column
Definition: pzskylmat.h:422
void Copy(const TPZSkylMatrix< TVar > &)
Definition: pzskylmat.cpp:3249
int Subst_Diag(TPZFMatrix< TVar > *b) const override
Computes B = Y, where A*Y = B, A is diagonal matrix.
Definition: pzskylmat.cpp:3167
TPZSkylMatrix & operator*=(TVar value)
Definition: pzskylmat.cpp:2457
void MigratePages()
Definition: pzskylmat.h:598
Implements a skyline storage format. A Skyline matrix is symmetric so square. Matrix.
Definition: pzskylmat.h:394
double TemplateSum< double, 1 >(const double *p1, const double *p2)
Implements product of the values into p1 and p2.
Definition: pzskylmat.h:641
TVar * Diag(int64_t col)
This method returns a pointer to the diagonal element of the matrix of the col column.
Definition: pzskylmat.h:577
TPZSkylMatrix operator*(const TVar v) const
Definition: pzskylmat.cpp:2431
virtual void UpdateFrom(TPZAutoPointer< TPZMatrix< TVar > > mat) override
Updates the values of the matrix based on the values of the matrix.
Definition: pzskylmat.cpp:1775
virtual TVar & s(const int64_t row, const int64_t col) override
The operators check on the bounds if the DEBUG variable is defined.
Definition: pzskylmat.cpp:1871
int64_t size() const
Returns the number of elements of the vector.
Definition: pzvec.h:196
int Subst_Forward(TPZFMatrix< TVar > *b) const override
Computes B = Y, where A*Y = B, A is lower triangular.
Definition: pzskylmat.cpp:3034
static const double tol
Definition: pzgeoprism.cpp:23
void SetSkyline(const TPZVec< int64_t > &skyline)
modify the skyline of the matrix, throwing away its values skyline indicates the minimum row number w...
Definition: pzskylmat.cpp:1792
void CopyFrom(TPZMatrix< TVar2 > &copy)
Definition: pzmatrix.h:96
virtual std::string ClassName() const
Definition: pzskylmat.h:555
TPZSkylMatrix & operator+=(const TPZSkylMatrix< TVar > &A)
Definition: pzskylmat.cpp:2391
Contains TPZMatrixclass which implements full matrix (using column major representation).
#define DebugStop()
Returns a message to user put a breakpoint in.
Definition: pzerror.h:20
TPZSkylMatrix & operator=(const TPZSkylMatrix< TVar > &A)
Definition: pzskylmat.cpp:2164
int Redim(const int64_t newDim)
Definition: pzskylmat.h:499
Free store vector implementation.
int64_t GetNelemts()
Definition: pzskylmat.h:568
int64_t Rows() const
Returns number of rows.
Definition: pzmatrix.h:803
int Zero() override
Zeroes the matrix.
Definition: pzskylmat.cpp:3220
int Decompose_LDLt() override
Decomposes the current matrix using LDLt.
Definition: pzskylmat.cpp:2952
string res
Definition: test.py:151
static int64_t NumElements(const TPZVec< int64_t > &skyline)
Definition: pzskylmat.cpp:1803
int64_t Size(const int64_t column) const
Definition: pzskylmat.h:558
TPZVec< TVar * > fElem
Storage to keep the first elements to each equation.
Definition: pzskylmat.h:620
Full matrix class. Matrix.
Definition: pzfmatrix.h:32
int Subst_Backward(TPZFMatrix< TVar > *b) const override
Computes B = Y, where A*Y = B, A is upper triangular.
Definition: pzskylmat.cpp:3086
virtual void MultAdd(const TPZFMatrix< TVar > &x, const TPZFMatrix< TVar > &y, TPZFMatrix< TVar > &z, const TVar alpha, const TVar beta, const int opt=0) const override
It computes z = beta * y + alpha * opt(this)*x but z and x can not overlap in memory.
Definition: pzskylmat.cpp:1944
int Clear() override
It clears data structure.
Definition: pzskylmat.cpp:3234
int32_t Hash(std::string str)
Definition: TPZHash.cpp:10
int Redim(const int64_t newDim, const int64_t) override
Redimensions the matrix reinitializing it with zero.
Definition: pzskylmat.cpp:2516
Contains TPZMatrix<TVar>class, root matrix class.
TPZSkylMatrix operator-() const
Definition: pzskylmat.cpp:3267
void Read(TPZStream &buf, void *context) override
Unpacks the object structure from a stream of bytes.
Definition: pzskylmat.cpp:3270
virtual void SolveSOR(int64_t &numiterations, const TPZFMatrix< TVar > &F, TPZFMatrix< TVar > &result, TPZFMatrix< TVar > *residual, TPZFMatrix< TVar > &scratch, const REAL overrelax, REAL &tol, const int FromCurrent=0, const int direction=1) override
Solves the linear system using Successive Over Relaxation method (Gauss Seidel). ...
Definition: pzskylmat.cpp:1988
TPZSkylMatrix operator+(const TPZSkylMatrix< TVar > &A) const
Definition: pzskylmat.cpp:2176
int PutVal(const int64_t row, const int64_t col, const TVar &element) override
Put values without bounds checking This method is faster than "Put" if DEBUG is defined.
Definition: pzskylmat.cpp:1920
static void InitializeElem(const TPZVec< int64_t > &skyline, TPZVec< TVar > &storage, TPZVec< TVar *> &elem)
Definition: pzskylmat.cpp:1814
virtual int IsSimetric() const override
declare the object as simetric matrix
Definition: pzskylmat.h:430
void AddSameStruct(TPZSkylMatrix< TVar > &B, double k=1.)
Add a skyline matrix B with same structure of this It makes this += k * B.
Definition: pzskylmat.cpp:1747
void DecomposeColumn(int64_t col, int64_t prevcol)
Definition: pzskylmat.cpp:3304
int Decompose_Cholesky_blk(int64_t blk_sz)
Definition: pzskylmat.cpp:2811
int ClassId() const override
Define the class id associated with the class.
Definition: pzskylmat.h:629
Defines the interface for saving and reading data. Persistency.
Definition: TPZStream.h:50
#define CLONEDEF(A)
To create clone matrix.
Definition: pzmatrix.h:28
TPZSkylMatrix(const TPZSkylMatrix< TVar > &A)
Definition: pzskylmat.h:404
virtual ~TPZSkylMatrix()
destructor of the skyline matrix
Definition: pzskylmat.h:433
TVar TemplateSum(const TVar *p1, const TVar *p2)
Implements iterative sum over N steps.
Definition: pzskylmat.h:635
void DecomposeColumn2(int64_t col, int64_t prevcol)
Definition: pzskylmat.cpp:3424
int ClassId() const override
Define the class id associated with the class.
Definition: pzmatrix.h:957
int Subst_LBackward(TPZFMatrix< TVar > *b) const override
Computes B = Y, where A*Y = B, A is upper triangular with A(i,i)=1.
Definition: pzskylmat.cpp:3188
virtual void AutoFill(int64_t nrow, int64_t ncol, int symmetric)
Definition: pzskylmat.cpp:3474
Root matrix class (abstract). Matrix.
Definition: pzmatrix.h:60
This class implements a reference counter mechanism to administer a dynamically allocated object...