3 #ifndef DUNE_BASISMATRIX_HH
4 #define DUNE_BASISMATRIX_HH
7 #include <dune/common/exceptions.hh>
23 template<
class PreBasis,
class Interpolation,
27 template<
class PreBasis,
class Interpolation,
34 const Interpolation& localInterpolation )
35 : cols_(preBasis.size())
37 localInterpolation.interpolate( preBasis, *
this );
41 DUNE_THROW(MathError,
"While computing basis a singular matrix was constructed!");
56 template<
class Topology,
class F,
60 :
public BasisMatrixBase< const MonomialBasis< Topology, F >, Interpolation, Field >
67 const Interpolation& localInterpolation )
68 :
Base(preBasis, localInterpolation)
70 template <
class Vector>
71 void row(
const unsigned int row, Vector &vec )
const
73 const unsigned int N = Matrix::rows();
74 assert( Matrix::cols() == N && vec.size() == N );
77 for (
unsigned int i=0; i<N; ++i)
81 template<
int dim,
class F,
85 :
public BasisMatrixBase< const VirtualMonomialBasis< dim, F >, Interpolation, Field >
92 const Interpolation& localInterpolation )
93 :
Base(preBasis, localInterpolation)
95 template <
class Vector>
96 void row(
const unsigned int row, Vector &vec )
const
98 const unsigned int N = Matrix::rows();
99 assert( Matrix::cols() == N && vec.size() == N );
102 for (
unsigned int i=0; i<N; ++i)
106 template<
class Eval,
class CM,
class D,
class R,
110 :
public BasisMatrixBase< const PolynomialBasis<Eval,CM,D,R>, Interpolation, Field >
117 const Interpolation& localInterpolation )
118 :
Base(preBasis, localInterpolation),
123 return preBasis_.matrix().baseSize() ;
125 template <
class Vector>
126 void row(
const unsigned int row, Vector &vec )
const
128 assert( Matrix::rows() == Matrix::cols() );
129 assert( vec.size() == preBasis_.matrix().baseSize() );
130 assert( Matrix::cols() == preBasis_.size() );
131 for (
unsigned int j=0; j<Matrix::cols(); ++j)
133 for (
unsigned int i=0; i<Matrix::rows(); ++i)
135 addRow(i,Base::Matrix::operator()(i,row),vec);
138 const PreBasis& preBasis_;
140 template<
class Eval,
class CM,
144 :
public BasisMatrixBase< const PolynomialBasisWithMatrix<Eval,CM>, Interpolation, Field >
151 const Interpolation& localInterpolation )
152 :
Base(preBasis, localInterpolation),
157 return preBasis_.matrix().baseSize() ;
161 assert( Matrix::rows() == preBasis_.matrix().size() );
162 return preBasis_.matrix().size()*CM::blockSize ;
164 template <
class Vector>
165 void row(
const unsigned int row, Vector &vec )
const
167 unsigned int r = row / CM::blockSize;
168 assert( r < Matrix::rows() );
169 assert( Matrix::rows() == Matrix::cols() );
170 assert( vec.size() == preBasis_.matrix().baseSize() );
171 assert( Matrix::cols() == preBasis_.size() );
172 for (
unsigned int j=0; j<vec.size(); ++j)
174 for (
unsigned int i=0; i<Matrix::rows(); ++i)
176 addRow(i*CM::blockSize+row%CM::blockSize,Base::Matrix::operator()(i,r),vec);
179 const PreBasis& preBasis_;
Definition: bdfmcube.hh:16
void field_cast(const F1 &f1, F2 &f2)
a helper class to cast from one field to another
Definition: field.hh:157
Definition: basismatrix.hh:25
Definition: basismatrix.hh:30
unsigned int cols() const
Definition: basismatrix.hh:44
unsigned int rows() const
Definition: basismatrix.hh:48
BasisMatrixBase(const PreBasis &preBasis, const Interpolation &localInterpolation)
Definition: basismatrix.hh:33
LFEMatrix< Field > Matrix
Definition: basismatrix.hh:31
Base::Matrix Matrix
Definition: basismatrix.hh:64
BasisMatrix(const PreBasis &preBasis, const Interpolation &localInterpolation)
Definition: basismatrix.hh:66
BasisMatrixBase< PreBasis, Interpolation, Field > Base
Definition: basismatrix.hh:63
const MonomialBasis< Topology, F > PreBasis
Definition: basismatrix.hh:62
void row(const unsigned int row, Vector &vec) const
Definition: basismatrix.hh:71
void row(const unsigned int row, Vector &vec) const
Definition: basismatrix.hh:96
BasisMatrixBase< PreBasis, Interpolation, Field > Base
Definition: basismatrix.hh:88
Base::Matrix Matrix
Definition: basismatrix.hh:89
const VirtualMonomialBasis< dim, F > PreBasis
Definition: basismatrix.hh:87
BasisMatrix(const PreBasis &preBasis, const Interpolation &localInterpolation)
Definition: basismatrix.hh:91
Base::Matrix Matrix
Definition: basismatrix.hh:114
BasisMatrixBase< PreBasis, Interpolation, Field > Base
Definition: basismatrix.hh:113
BasisMatrix(const PreBasis &preBasis, const Interpolation &localInterpolation)
Definition: basismatrix.hh:116
unsigned int cols() const
Definition: basismatrix.hh:121
void row(const unsigned int row, Vector &vec) const
Definition: basismatrix.hh:126
const PolynomialBasis< Eval, CM, D, R > PreBasis
Definition: basismatrix.hh:112
const PolynomialBasisWithMatrix< Eval, CM > PreBasis
Definition: basismatrix.hh:146
BasisMatrixBase< PreBasis, Interpolation, Field > Base
Definition: basismatrix.hh:147
unsigned int rows() const
Definition: basismatrix.hh:159
Base::Matrix Matrix
Definition: basismatrix.hh:148
BasisMatrix(const PreBasis &preBasis, const Interpolation &localInterpolation)
Definition: basismatrix.hh:150
void row(const unsigned int row, Vector &vec) const
Definition: basismatrix.hh:165
unsigned int cols() const
Definition: basismatrix.hh:155
Definition: lfematrix.hh:16
unsigned int rows() const
Definition: lfematrix.hh:56
bool invert()
Definition: lfematrix.hh:87
Field Field
Definition: lfematrix.hh:22
Definition: monomialbasis.hh:506
Definition: monomialbasis.hh:678
Definition: polynomialbasis.hh:63
Definition: polynomialbasis.hh:335