5 #ifndef _DIAGONALMATRIX_H_
6 #define _DIAGONALMATRIX_H_
15 template<
class Diag,
class X>
53 y[i] +=
_diag[i]*x[i];
62 x[i] = -b[i]/
_diag[i];
84 r[nr] = b[nr] +
_diag[nr]*x[nr];
108 virtual shared_ptr<CRConnectivity>
115 return shared_ptr<CRConnectivity>(
new CRConnectivity(coarseRowSite,coarseColSite));
118 virtual shared_ptr<Matrix>
123 const int nCoarseRows = coarseToFine.
getRowDim();
125 shared_ptr<DiagonalMatrix> coarseMatrix(
new DiagonalMatrix(nCoarseRows));
130 for(
int nrCoarse=0; nrCoarse<nCoarseRows; nrCoarse++)
133 const int nFine = coarseToFine.
getCount(nrCoarse);
134 for(
int nfr=0; nfr<nFine; nfr++)
136 const int nrFine = coarseToFine(nrCoarse,nfr);
138 coarseDiag[nrCoarse] +=
_diag[nrFine];
int getCount(const int i) const
virtual bool isInvertible()
virtual void solveBoundary(IContainer &xB, IContainer &bB, IContainer &r) const
virtual shared_ptr< Matrix > createCoarseMatrix(const IContainer &gCoarseIndex, const CRConnectivity &coarseToFine, const CRConnectivity &)
DiagonalMatrix(const int length)
virtual void multiply(IContainer &yB, const IContainer &xB) const
virtual shared_ptr< CRConnectivity > createCoarseConnectivity(const IContainer &gCoarseIndex, const CRConnectivity &coarseToFine, const StorageSite &coarseRowSite, const StorageSite &coarseColSite)
const Diag & operator[](int n) const
virtual void initAssembly()
virtual void forwardGS(IContainer &xB, IContainer &bB, IContainer &) const
void addToDiag(const int i, const Diag &d)
virtual void multiplyAndAdd(IContainer &yB, const IContainer &xB) const
virtual ~DiagonalMatrix()
virtual void reverseGS(IContainer &xB, IContainer &bB, IContainer &r) const
void unitize(const int i)
DEFINE_TYPENAME("DiagonalMatrix<"+NumTypeTraits< Diag >::getTypeName()+","+NumTypeTraits< X >::getTypeName()+">")
virtual void computeResidual(const IContainer &xB, const IContainer &bB, IContainer &rB) const