Memosa-FVM  0.2
DiagonalMatrix< Diag, X > Class Template Reference

#include <DiagonalMatrix.h>

Inheritance diagram for DiagonalMatrix< Diag, X >:
Collaboration diagram for DiagonalMatrix< Diag, X >:

Public Types

typedef Array< Diag > DiagArray
 
typedef Array< X > XArray
 

Public Member Functions

 DiagonalMatrix (const int length)
 
virtual ~DiagonalMatrix ()
 
 DEFINE_TYPENAME ("DiagonalMatrix<"+NumTypeTraits< Diag >::getTypeName()+","+NumTypeTraits< X >::getTypeName()+">")
 
virtual void multiply (IContainer &yB, const IContainer &xB) const
 
virtual void multiplyAndAdd (IContainer &yB, const IContainer &xB) const
 
virtual void forwardGS (IContainer &xB, IContainer &bB, IContainer &) const
 
virtual void reverseGS (IContainer &xB, IContainer &bB, IContainer &r) const
 
virtual void solveBoundary (IContainer &xB, IContainer &bB, IContainer &r) const
 
virtual void computeResidual (const IContainer &xB, const IContainer &bB, IContainer &rB) const
 
virtual void transpose ()
 
Diag & operator[] (int n)
 
const Diag & operator[] (int n) const
 
void addToDiag (const int i, const Diag &d)
 
void unitize ()
 
void unitize (const int i)
 
virtual shared_ptr
< CRConnectivity
createCoarseConnectivity (const IContainer &gCoarseIndex, const CRConnectivity &coarseToFine, const StorageSite &coarseRowSite, const StorageSite &coarseColSite)
 
virtual shared_ptr< MatrixcreateCoarseMatrix (const IContainer &gCoarseIndex, const CRConnectivity &coarseToFine, const CRConnectivity &)
 
virtual void initAssembly ()
 
virtual bool isInvertible ()
 
- Public Member Functions inherited from Matrix
 Matrix ()
 
virtual ~Matrix ()
 
 DEFINE_TYPENAME ("Matrix")
 
virtual shared_ptr< ArrayBasequadProduct (const IContainer &xB) const
 
virtual void Jacobi (IContainer &xnew, const IContainer &xold, const IContainer &b) const
 
virtual void iluSolve (IContainer &xB, const IContainer &bB, const IContainer &residual) const
 
virtual void spikeSolve (IContainer &xB, const IContainer &bB, const IContainer &residual, const SpikeStorage &spike_storage) const
 
virtual int createCoarsening (IContainer &coarseIndex, const int groupSize, const double weighRatioThreshold)
 
virtual const CRConnectivitygetConnectivity () const
 
virtual void eliminateBoundaryEquations (IContainer &xB)
 
virtual void printRow (const int nr) const
 
virtual void * getDiagData () const
 
virtual void * getOffDiagData () const
 
virtual int getDiagDataSize () const
 
virtual int getOffDiagDataSize () const
 
virtual shared_ptr< MatrixcreateMergeMatrix (const LinearSystemMerger &mergeLS)
 
virtual void setFlatMatrix (Matrix &fmg) const
 

Private Attributes

const int _length
 
Array< Diag > _diag
 

Detailed Description

template<class Diag, class X>
class DiagonalMatrix< Diag, X >

Definition at line 16 of file DiagonalMatrix.h.

Member Typedef Documentation

template<class Diag , class X >
typedef Array<Diag> DiagonalMatrix< Diag, X >::DiagArray

Definition at line 19 of file DiagonalMatrix.h.

template<class Diag , class X >
typedef Array<X> DiagonalMatrix< Diag, X >::XArray

Definition at line 20 of file DiagonalMatrix.h.

Constructor & Destructor Documentation

template<class Diag , class X >
DiagonalMatrix< Diag, X >::DiagonalMatrix ( const int  length)
inline

Definition at line 22 of file DiagonalMatrix.h.

References logCtor.

Referenced by DiagonalMatrix< Diag, X >::createCoarseMatrix().

22  :
23  Matrix(),
24  _length(length),
25  _diag(_length)
26  {
27  logCtor();
28  }
Matrix()
Definition: Matrix.cpp:8
Array< Diag > _diag
#define logCtor()
Definition: RLogInterface.h:26
const int _length
template<class Diag , class X >
virtual DiagonalMatrix< Diag, X >::~DiagonalMatrix ( )
inlinevirtual

Definition at line 30 of file DiagonalMatrix.h.

30 {}

Member Function Documentation

template<class Diag , class X >
void DiagonalMatrix< Diag, X >::addToDiag ( const int  i,
const Diag &  d 
)
inline

Definition at line 93 of file DiagonalMatrix.h.

References DiagonalMatrix< Diag, X >::_diag.

94  {
95  _diag[i] += d;
96  }
Array< Diag > _diag
template<class Diag , class X >
virtual void DiagonalMatrix< Diag, X >::computeResidual ( const IContainer xB,
const IContainer bB,
IContainer rB 
) const
inlinevirtual

Reimplemented from Matrix.

Definition at line 75 of file DiagonalMatrix.h.

References DiagonalMatrix< Diag, X >::_diag, and DiagonalMatrix< Diag, X >::_length.

77  {
78  const XArray& x = dynamic_cast<const XArray&>(xB);
79  const XArray& b = dynamic_cast<const XArray&>(bB);
80  XArray& r = dynamic_cast<XArray&>(rB);
81 
82  for(int nr=0; nr<_length; nr++)
83  {
84  r[nr] = b[nr] + _diag[nr]*x[nr];
85  }
86  }
Array< Diag > _diag
Array< X > XArray
const int _length
template<class Diag , class X >
virtual shared_ptr<CRConnectivity> DiagonalMatrix< Diag, X >::createCoarseConnectivity ( const IContainer gCoarseIndex,
const CRConnectivity coarseToFine,
const StorageSite coarseRowSite,
const StorageSite coarseColSite 
)
inlinevirtual

Reimplemented from Matrix.

Definition at line 109 of file DiagonalMatrix.h.

113  {
114  // we don't really need one but all matrices are supposed to supply one
115  return shared_ptr<CRConnectivity>(new CRConnectivity(coarseRowSite,coarseColSite));
116  }
template<class Diag , class X >
virtual shared_ptr<Matrix> DiagonalMatrix< Diag, X >::createCoarseMatrix ( const IContainer gCoarseIndex,
const CRConnectivity coarseToFine,
const CRConnectivity  
)
inlinevirtual

Reimplemented from Matrix.

Definition at line 119 of file DiagonalMatrix.h.

References DiagonalMatrix< Diag, X >::_diag, DiagonalMatrix< Diag, X >::DiagonalMatrix(), CRConnectivity::getCount(), CRConnectivity::getRowDim(), and Array< T >::zero().

122  {
123  const int nCoarseRows = coarseToFine.getRowDim();
124 
125  shared_ptr<DiagonalMatrix> coarseMatrix(new DiagonalMatrix(nCoarseRows));
126 
127  Array<Diag>& coarseDiag = coarseMatrix->_diag;
128  coarseDiag.zero();
129 
130  for(int nrCoarse=0; nrCoarse<nCoarseRows; nrCoarse++)
131  {
132  // loop over the fine rows that make up this coarse row
133  const int nFine = coarseToFine.getCount(nrCoarse);
134  for(int nfr=0; nfr<nFine; nfr++)
135  {
136  const int nrFine = coarseToFine(nrCoarse,nfr);
137 
138  coarseDiag[nrCoarse] += _diag[nrFine];
139 
140  }
141  }
142 
143  return coarseMatrix;
144  }
int getCount(const int i) const
virtual void zero()
Definition: Array.h:281
Array< Diag > _diag
DiagonalMatrix(const int length)
int getRowDim() const
template<class Diag , class X >
DiagonalMatrix< Diag, X >::DEFINE_TYPENAME ( "DiagonalMatrix<"+NumTypeTraits< Diag >::getTypeName()+","+NumTypeTraits< X >::getTypeName()+">"  )
template<class Diag , class X >
virtual void DiagonalMatrix< Diag, X >::forwardGS ( IContainer xB,
IContainer bB,
IContainer  
) const
inlinevirtual

Reimplemented from Matrix.

Definition at line 57 of file DiagonalMatrix.h.

References DiagonalMatrix< Diag, X >::_diag, and DiagonalMatrix< Diag, X >::_length.

Referenced by DiagonalMatrix< Diag, X >::reverseGS(), and DiagonalMatrix< Diag, X >::solveBoundary().

58  {
59  XArray& x = dynamic_cast<XArray&>(xB);
60  const XArray& b = dynamic_cast<const XArray&>(bB);
61  for(int i=0; i<_length; i++)
62  x[i] = -b[i]/_diag[i];
63  }
Array< Diag > _diag
Array< X > XArray
const int _length
template<class Diag , class X >
virtual void DiagonalMatrix< Diag, X >::initAssembly ( )
inlinevirtual

Implements Matrix.

Definition at line 146 of file DiagonalMatrix.h.

References DiagonalMatrix< Diag, X >::_diag, and Array< T >::zero().

147  {
148  _diag.zero();
149  }
virtual void zero()
Definition: Array.h:281
Array< Diag > _diag
template<class Diag , class X >
virtual bool DiagonalMatrix< Diag, X >::isInvertible ( )
inlinevirtual

Reimplemented from Matrix.

Definition at line 151 of file DiagonalMatrix.h.

151 {return true;}
template<class Diag , class X >
virtual void DiagonalMatrix< Diag, X >::multiply ( IContainer yB,
const IContainer xB 
) const
inlinevirtual

Reimplemented from Matrix.

Definition at line 37 of file DiagonalMatrix.h.

References DiagonalMatrix< Diag, X >::_diag, and DiagonalMatrix< Diag, X >::_length.

38  {
39  XArray& y = dynamic_cast<XArray&>(yB);
40  const XArray& x = dynamic_cast<const XArray&>(xB);
41  for(int i=0; i<_length; i++)
42  {
43  y[i] = _diag[i]*x[i];
44  }
45  }
Array< Diag > _diag
Array< X > XArray
const int _length
template<class Diag , class X >
virtual void DiagonalMatrix< Diag, X >::multiplyAndAdd ( IContainer yB,
const IContainer xB 
) const
inlinevirtual

Reimplemented from Matrix.

Definition at line 47 of file DiagonalMatrix.h.

References DiagonalMatrix< Diag, X >::_diag, and DiagonalMatrix< Diag, X >::_length.

48  {
49  XArray& y = dynamic_cast<XArray&>(yB);
50  const XArray& x = dynamic_cast<const XArray&>(xB);
51  for(int i=0; i<_length; i++)
52  {
53  y[i] += _diag[i]*x[i];
54  }
55  }
Array< Diag > _diag
Array< X > XArray
const int _length
template<class Diag , class X >
Diag& DiagonalMatrix< Diag, X >::operator[] ( int  n)
inline

Definition at line 90 of file DiagonalMatrix.h.

References DiagonalMatrix< Diag, X >::_diag.

90 {return _diag[n];}
Array< Diag > _diag
template<class Diag , class X >
const Diag& DiagonalMatrix< Diag, X >::operator[] ( int  n) const
inline

Definition at line 91 of file DiagonalMatrix.h.

References DiagonalMatrix< Diag, X >::_diag.

91 {return _diag[n];}
Array< Diag > _diag
template<class Diag , class X >
virtual void DiagonalMatrix< Diag, X >::reverseGS ( IContainer xB,
IContainer bB,
IContainer r 
) const
inlinevirtual

Reimplemented from Matrix.

Definition at line 65 of file DiagonalMatrix.h.

References DiagonalMatrix< Diag, X >::forwardGS().

66  {
67  forwardGS(xB,bB,r);
68  }
virtual void forwardGS(IContainer &xB, IContainer &bB, IContainer &) const
template<class Diag , class X >
virtual void DiagonalMatrix< Diag, X >::solveBoundary ( IContainer xB,
IContainer bB,
IContainer r 
) const
inlinevirtual

Reimplemented from Matrix.

Definition at line 70 of file DiagonalMatrix.h.

References DiagonalMatrix< Diag, X >::forwardGS().

71  {
72  forwardGS(xB,bB,r);
73  }
virtual void forwardGS(IContainer &xB, IContainer &bB, IContainer &) const
template<class Diag , class X >
virtual void DiagonalMatrix< Diag, X >::transpose ( )
inlinevirtual

Reimplemented from Matrix.

Definition at line 88 of file DiagonalMatrix.h.

88 {}
template<class Diag , class X >
void DiagonalMatrix< Diag, X >::unitize ( )
inline
template<class Diag , class X >
void DiagonalMatrix< Diag, X >::unitize ( const int  i)
inline

Definition at line 103 of file DiagonalMatrix.h.

References DiagonalMatrix< Diag, X >::_diag.

104  {
106  }
Array< Diag > _diag

Member Data Documentation


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