5#ifndef DUNE_BASISMATRIX_HH
6#define DUNE_BASISMATRIX_HH
9#include <dune/common/exceptions.hh>
25 template<
class PreBasis,
class Interpolation,
29 template<
class PreBasis,
class Interpolation,
36 const Interpolation& localInterpolation )
37 : cols_(preBasis.size())
39 localInterpolation.interpolate( preBasis, *
this );
43 DUNE_THROW(MathError,
"While computing basis a singular matrix was constructed!");
58 template< GeometryType::Id geometryId,
class F,
62 :
public BasisMatrixBase< const MonomialBasis< geometryId, F >, Interpolation, Field >
69 const Interpolation& localInterpolation )
70 :
Base(preBasis, localInterpolation)
72 template <
class Vector>
73 void row(
const unsigned int row, Vector &vec )
const
75 const unsigned int N = Matrix::rows();
76 assert( Matrix::cols() == N && vec.size() == N );
79 for (
unsigned int i=0; i<N; ++i)
83 template<
int dim,
class F,
87 :
public BasisMatrixBase< const VirtualMonomialBasis< dim, F >, Interpolation, Field >
94 const Interpolation& localInterpolation )
95 :
Base(preBasis, localInterpolation)
97 template <
class Vector>
98 void row(
const unsigned int row, Vector &vec )
const
100 const unsigned int N = Matrix::rows();
101 assert( Matrix::cols() == N && vec.size() == N );
104 for (
unsigned int i=0; i<N; ++i)
108 template<
class Eval,
class CM,
class D,
class R,
112 :
public BasisMatrixBase< const PolynomialBasis<Eval,CM,D,R>, Interpolation, Field >
119 const Interpolation& localInterpolation )
120 :
Base(preBasis, localInterpolation),
125 return preBasis_.matrix().baseSize() ;
127 template <
class Vector>
128 void row(
const unsigned int row, Vector &vec )
const
130 assert( Matrix::rows() == Matrix::cols() );
131 assert( vec.size() == preBasis_.matrix().baseSize() );
132 assert( Matrix::cols() == preBasis_.size() );
133 for (
unsigned int j=0; j<Matrix::cols(); ++j)
135 for (
unsigned int i=0; i<Matrix::rows(); ++i)
137 addRow(i,Base::Matrix::operator()(i,row),vec);
140 const PreBasis& preBasis_;
142 template<
class Eval,
class CM,
146 :
public BasisMatrixBase< const PolynomialBasisWithMatrix<Eval,CM>, Interpolation, Field >
153 const Interpolation& localInterpolation )
154 :
Base(preBasis, localInterpolation),
159 return preBasis_.matrix().baseSize() ;
163 assert( Matrix::rows() == preBasis_.matrix().size() );
164 return preBasis_.matrix().size()*CM::blockSize ;
166 template <
class Vector>
167 void row(
const unsigned int row, Vector &vec )
const
169 unsigned int r = row / CM::blockSize;
170 assert( r < Matrix::rows() );
171 assert( Matrix::rows() == Matrix::cols() );
172 assert( vec.size() == preBasis_.matrix().baseSize() );
173 assert( Matrix::cols() == preBasis_.size() );
174 for (
unsigned int j=0; j<vec.size(); ++j)
176 for (
unsigned int i=0; i<Matrix::rows(); ++i)
178 addRow(i*CM::blockSize+row%CM::blockSize,Base::Matrix::operator()(i,r),vec);
181 const PreBasis& preBasis_;
Definition: bdfmcube.hh:18
void field_cast(const F1 &f1, F2 &f2)
a helper class to cast from one field to another
Definition: field.hh:159
Definition: basismatrix.hh:27
Definition: basismatrix.hh:32
unsigned int cols() const
Definition: basismatrix.hh:46
unsigned int rows() const
Definition: basismatrix.hh:50
BasisMatrixBase(const PreBasis &preBasis, const Interpolation &localInterpolation)
Definition: basismatrix.hh:35
LFEMatrix< Field > Matrix
Definition: basismatrix.hh:33
void row(const unsigned int row, Vector &vec) const
Definition: basismatrix.hh:73
const MonomialBasis< geometryId, F > PreBasis
Definition: basismatrix.hh:64
Base::Matrix Matrix
Definition: basismatrix.hh:66
BasisMatrix(const PreBasis &preBasis, const Interpolation &localInterpolation)
Definition: basismatrix.hh:68
BasisMatrixBase< PreBasis, Interpolation, Field > Base
Definition: basismatrix.hh:65
void row(const unsigned int row, Vector &vec) const
Definition: basismatrix.hh:98
BasisMatrixBase< PreBasis, Interpolation, Field > Base
Definition: basismatrix.hh:90
Base::Matrix Matrix
Definition: basismatrix.hh:91
const VirtualMonomialBasis< dim, F > PreBasis
Definition: basismatrix.hh:89
BasisMatrix(const PreBasis &preBasis, const Interpolation &localInterpolation)
Definition: basismatrix.hh:93
Base::Matrix Matrix
Definition: basismatrix.hh:116
BasisMatrixBase< PreBasis, Interpolation, Field > Base
Definition: basismatrix.hh:115
BasisMatrix(const PreBasis &preBasis, const Interpolation &localInterpolation)
Definition: basismatrix.hh:118
unsigned int cols() const
Definition: basismatrix.hh:123
void row(const unsigned int row, Vector &vec) const
Definition: basismatrix.hh:128
const PolynomialBasis< Eval, CM, D, R > PreBasis
Definition: basismatrix.hh:114
const PolynomialBasisWithMatrix< Eval, CM > PreBasis
Definition: basismatrix.hh:148
BasisMatrixBase< PreBasis, Interpolation, Field > Base
Definition: basismatrix.hh:149
unsigned int rows() const
Definition: basismatrix.hh:161
Base::Matrix Matrix
Definition: basismatrix.hh:150
BasisMatrix(const PreBasis &preBasis, const Interpolation &localInterpolation)
Definition: basismatrix.hh:152
void row(const unsigned int row, Vector &vec) const
Definition: basismatrix.hh:167
unsigned int cols() const
Definition: basismatrix.hh:157
Definition: lfematrix.hh:18
unsigned int rows() const
Definition: lfematrix.hh:58
bool invert()
Definition: lfematrix.hh:89
Field Field
Definition: lfematrix.hh:24
Definition: monomialbasis.hh:440
Definition: monomialbasis.hh:612
Definition: polynomialbasis.hh:65
Definition: polynomialbasis.hh:348