LagrangianFiniteElement< numberOfDegreesOfFreedom, FiniteElementType, GivenQuadratureType > Class Template Reference

#include <LagrangianFiniteElement.hpp>

Inheritance diagram for LagrangianFiniteElement< numberOfDegreesOfFreedom, FiniteElementType, GivenQuadratureType >:

Inheritance graph
[legend]
Collaboration diagram for LagrangianFiniteElement< numberOfDegreesOfFreedom, FiniteElementType, GivenQuadratureType >:

Collaboration graph
[legend]

List of all members.

Public Types

enum  { numberOfQuadraturePoints = QuadratureType::numberOfQuadraturePoints }
typedef GivenQuadratureType QuadratureType
typedef TinyVector
< numberOfDegreesOfFreedom > 
ElementaryVector
typedef TinyMatrix
< numberOfDegreesOfFreedom,
numberOfDegreesOfFreedom > 
ElementaryMatrix

Public Member Functions

const real_t & W (const size_t &i, const size_t &j) const
const real_t & dxW (const size_t &i, const size_t &j) const
const real_t & dyW (const size_t &i, const size_t &j) const
const real_t & dzW (const size_t &i, const size_t &j) const
template<typename ConformTransformation>
void integrateWjWi (ElementaryMatrix &matElem, const ConformTransformation &T) const
template<typename ConformTransformation>
void integrateDWjWi (ElementaryMatrix &matElem, const size_t &n, const ConformTransformation &T) const
template<typename ConformTransformation>
void integrateWjDWi (ElementaryMatrix &matElem, const size_t &n, const ConformTransformation &T) const
template<typename ConformTransformation>
void integrateDWjDWi (ElementaryMatrix &matElem, const size_t &n, const size_t &m, const ConformTransformation &T) const
template<typename ConformTransformation>
void integrateWj (ElementaryVector &vectElem, const ConformTransformation &T, const TinyVector< numberOfQuadraturePoints, real_t > &f) const
 LagrangianFiniteElement ()
virtual ~LagrangianFiniteElement ()

Protected Member Functions

real_t __W (const size_t &i, const size_t &j)
real_t __dxW (const size_t &i, const size_t &j)
real_t __dyW (const size_t &i, const size_t &j)
real_t __dzW (const size_t &i, const size_t &j)

Protected Attributes

TinyMatrix
< numberOfDegreesOfFreedom,
numberOfQuadraturePoints > 
__w
TinyMatrix
< numberOfDegreesOfFreedom,
numberOfQuadraturePoints > 
__dxw
TinyMatrix
< numberOfDegreesOfFreedom,
numberOfQuadraturePoints > 
__dyw
TinyMatrix
< numberOfDegreesOfFreedom,
numberOfQuadraturePoints > 
__dzw

Private Member Functions

FiniteElementType & self ()


Detailed Description

template<size_t numberOfDegreesOfFreedom, typename FiniteElementType, typename GivenQuadratureType>
class LagrangianFiniteElement< numberOfDegreesOfFreedom, FiniteElementType, GivenQuadratureType >

Definition at line 42 of file LagrangianFiniteElement.hpp.


Member Typedef Documentation

template<size_t numberOfDegreesOfFreedom, typename FiniteElementType, typename GivenQuadratureType>
typedef GivenQuadratureType LagrangianFiniteElement< numberOfDegreesOfFreedom, FiniteElementType, GivenQuadratureType >::QuadratureType

default quadrature type

Definition at line 46 of file LagrangianFiniteElement.hpp.

template<size_t numberOfDegreesOfFreedom, typename FiniteElementType, typename GivenQuadratureType>
typedef TinyVector<numberOfDegreesOfFreedom> LagrangianFiniteElement< numberOfDegreesOfFreedom, FiniteElementType, GivenQuadratureType >::ElementaryVector

type of elementary vector

Definition at line 54 of file LagrangianFiniteElement.hpp.

template<size_t numberOfDegreesOfFreedom, typename FiniteElementType, typename GivenQuadratureType>
typedef TinyMatrix<numberOfDegreesOfFreedom, numberOfDegreesOfFreedom> LagrangianFiniteElement< numberOfDegreesOfFreedom, FiniteElementType, GivenQuadratureType >::ElementaryMatrix

type of elementary matrix

Definition at line 59 of file LagrangianFiniteElement.hpp.


Member Enumeration Documentation

template<size_t numberOfDegreesOfFreedom, typename FiniteElementType, typename GivenQuadratureType>
anonymous enum

Enumerator:
numberOfQuadraturePoints 

Definition at line 48 of file LagrangianFiniteElement.hpp.

00048        {
00049     numberOfQuadraturePoints = QuadratureType::numberOfQuadraturePoints
00050   };


Constructor & Destructor Documentation

template<size_t numberOfDegreesOfFreedom, typename FiniteElementType, typename GivenQuadratureType>
LagrangianFiniteElement< numberOfDegreesOfFreedom, FiniteElementType, GivenQuadratureType >::LagrangianFiniteElement (  )  [inline]

Constructor

Definition at line 353 of file LagrangianFiniteElement.hpp.

00354   {
00355     try {
00356       for (size_t i=0; i<numberOfDegreesOfFreedom; ++i) {
00357         for(size_t j=0; j<numberOfQuadraturePoints; ++j) {
00358           __w(i,j)   =   __W(i,j);
00359           __dxw(i,j) = __dxW(i,j);
00360           __dyw(i,j) = __dyW(i,j);
00361           __dzw(i,j) = __dzW(i,j);
00362         }
00363       }
00364     }
00365     catch(ErrorHandler e) {
00366       e.writeErrorMessage();    
00367     }
00368     catch(...) {
00369       fferr(0) << "error: Unknown exception caught!\n";
00370       fferr(0) << __FILE__ << ':' << __LINE__ << ": Not implemented\n";
00371     }
00372   }

template<size_t numberOfDegreesOfFreedom, typename FiniteElementType, typename GivenQuadratureType>
virtual LagrangianFiniteElement< numberOfDegreesOfFreedom, FiniteElementType, GivenQuadratureType >::~LagrangianFiniteElement (  )  [inline, virtual]

Destructor

Definition at line 378 of file LagrangianFiniteElement.hpp.

00379   {
00380     ;
00381   }


Member Function Documentation

template<size_t numberOfDegreesOfFreedom, typename FiniteElementType, typename GivenQuadratureType>
FiniteElementType& LagrangianFiniteElement< numberOfDegreesOfFreedom, FiniteElementType, GivenQuadratureType >::self (  )  [inline, private]

The static polymorphism core function

Returns:
the casted oject

Definition at line 67 of file LagrangianFiniteElement.hpp.

00068   {
00069     return static_cast<FiniteElementType&>(*this);
00070   }

template<size_t numberOfDegreesOfFreedom, typename FiniteElementType, typename GivenQuadratureType>
real_t LagrangianFiniteElement< numberOfDegreesOfFreedom, FiniteElementType, GivenQuadratureType >::__W ( const size_t &  i,
const size_t &  j 
) [inline, protected]

Computes hat function value at quadrature point

Parameters:
i the hat function number
j the number of quadrature point
Returns:
the function value

Definition at line 81 of file LagrangianFiniteElement.hpp.

Referenced by LagrangianFiniteElement< 1, P0TetrahedronFiniteElement, QuadratureFormulaP0Tetrahedron >::LagrangianFiniteElement().

00082   {
00083     return self().W(i,self().integrationVertices()[j]);
00084   }

template<size_t numberOfDegreesOfFreedom, typename FiniteElementType, typename GivenQuadratureType>
real_t LagrangianFiniteElement< numberOfDegreesOfFreedom, FiniteElementType, GivenQuadratureType >::__dxW ( const size_t &  i,
const size_t &  j 
) [inline, protected]

Computes hat function derivative by x at quadrature point

Parameters:
i the hat function number
j the number of quadrature point
Returns:
the function's derivative value

Definition at line 94 of file LagrangianFiniteElement.hpp.

Referenced by LagrangianFiniteElement< 1, P0TetrahedronFiniteElement, QuadratureFormulaP0Tetrahedron >::LagrangianFiniteElement().

00095   {
00096     return self().dxW(i,self().integrationVertices()[j]);
00097   }

template<size_t numberOfDegreesOfFreedom, typename FiniteElementType, typename GivenQuadratureType>
real_t LagrangianFiniteElement< numberOfDegreesOfFreedom, FiniteElementType, GivenQuadratureType >::__dyW ( const size_t &  i,
const size_t &  j 
) [inline, protected]

Computes hat function derivative by y at quadrature point

Parameters:
i the hat function number
j the number of quadrature point
Returns:
the function's derivative value

Definition at line 107 of file LagrangianFiniteElement.hpp.

Referenced by LagrangianFiniteElement< 1, P0TetrahedronFiniteElement, QuadratureFormulaP0Tetrahedron >::LagrangianFiniteElement().

00108   {
00109     return self().dyW(i,self().integrationVertices()[j]);
00110   }

template<size_t numberOfDegreesOfFreedom, typename FiniteElementType, typename GivenQuadratureType>
real_t LagrangianFiniteElement< numberOfDegreesOfFreedom, FiniteElementType, GivenQuadratureType >::__dzW ( const size_t &  i,
const size_t &  j 
) [inline, protected]

Computes hat function derivative by z at quadrature point

Parameters:
i the hat function number
j the number of quadrature point
Returns:
the function's derivative value

Definition at line 120 of file LagrangianFiniteElement.hpp.

Referenced by LagrangianFiniteElement< 1, P0TetrahedronFiniteElement, QuadratureFormulaP0Tetrahedron >::LagrangianFiniteElement().

00121   {
00122     return self().dzW(i,self().integrationVertices()[j]);
00123   }

template<size_t numberOfDegreesOfFreedom, typename FiniteElementType, typename GivenQuadratureType>
const real_t& LagrangianFiniteElement< numberOfDegreesOfFreedom, FiniteElementType, GivenQuadratureType >::W ( const size_t &  i,
const size_t &  j 
) const [inline]

template<size_t numberOfDegreesOfFreedom, typename FiniteElementType, typename GivenQuadratureType>
const real_t& LagrangianFiniteElement< numberOfDegreesOfFreedom, FiniteElementType, GivenQuadratureType >::dxW ( const size_t &  i,
const size_t &  j 
) const [inline]

template<size_t numberOfDegreesOfFreedom, typename FiniteElementType, typename GivenQuadratureType>
const real_t& LagrangianFiniteElement< numberOfDegreesOfFreedom, FiniteElementType, GivenQuadratureType >::dyW ( const size_t &  i,
const size_t &  j 
) const [inline]

template<size_t numberOfDegreesOfFreedom, typename FiniteElementType, typename GivenQuadratureType>
const real_t& LagrangianFiniteElement< numberOfDegreesOfFreedom, FiniteElementType, GivenQuadratureType >::dzW ( const size_t &  i,
const size_t &  j 
) const [inline]

template<size_t numberOfDegreesOfFreedom, typename FiniteElementType, typename GivenQuadratureType>
template<typename ConformTransformation>
void LagrangianFiniteElement< numberOfDegreesOfFreedom, FiniteElementType, GivenQuadratureType >::integrateWjWi ( ElementaryMatrix matElem,
const ConformTransformation &  T 
) const [inline]

Computes elementary matrix associated to $ \int w_j w_i $ on a given element using the associated conform transformation

Parameters:
matElem the elementary matrix
T the given transformation

Definition at line 203 of file LagrangianFiniteElement.hpp.

00205   {
00206     ElementaryMatrix tmp = 0;
00207 
00208     for (size_t k=0; k<numberOfQuadraturePoints; ++k) { // Loop on integration vertices
00209       for (size_t j=0; j<numberOfDegreesOfFreedom; ++j) {
00210         for (size_t i=0; i<=j; ++i) {
00211           tmp(i,j)
00212             += W(i,k) * W(j,k) * QuadratureType::instance().weight(k);
00213         }
00214       }
00215     }
00216 
00217     // for this operator, matElem is symetric.
00218     for (size_t j=0; j<numberOfDegreesOfFreedom; ++j)
00219       for (size_t i=j+1; i<numberOfDegreesOfFreedom; ++i)
00220         tmp(i,j) = tmp(j,i);
00221 
00222     matElem += tmp;
00223   }

template<size_t numberOfDegreesOfFreedom, typename FiniteElementType, typename GivenQuadratureType>
template<typename ConformTransformation>
void LagrangianFiniteElement< numberOfDegreesOfFreedom, FiniteElementType, GivenQuadratureType >::integrateDWjWi ( ElementaryMatrix matElem,
const size_t &  n,
const ConformTransformation &  T 
) const [inline]

Computes elementary matrix associated to $ \int \partial_{x_n} w_j w_i $ on a given element using the associated conform transformation

Parameters:
matElem the elementary matrix
n the $ n $ in $ \partial_{x_n} $
T the given transformation

Definition at line 235 of file LagrangianFiniteElement.hpp.

00238   {
00239     ElementaryMatrix tmp = 0;
00240 
00241     for (size_t k=0; k<numberOfQuadraturePoints; ++k) { // Loop on integration vertices
00242       for (size_t j=0; j<numberOfDegreesOfFreedom; ++j) {
00243         const real_t fj
00244           = dxW(j,k)*T.invJacobian(0,n)
00245           + dyW(j,k)*T.invJacobian(1,n)
00246           + dzW(j,k)*T.invJacobian(2,n);
00247         for (size_t i=0; i<numberOfDegreesOfFreedom; ++i) {
00248           tmp(i,j)
00249             += fj * W(i,k)  * QuadratureType::instance().weight(k);
00250         }
00251       }
00252     }
00253     matElem += tmp;
00254   }

template<size_t numberOfDegreesOfFreedom, typename FiniteElementType, typename GivenQuadratureType>
template<typename ConformTransformation>
void LagrangianFiniteElement< numberOfDegreesOfFreedom, FiniteElementType, GivenQuadratureType >::integrateWjDWi ( ElementaryMatrix matElem,
const size_t &  n,
const ConformTransformation &  T 
) const [inline]

Computes elementary matrix associated to $ \int w_j \partial_{x_n} w_i $ on a given element using the associated conform transformation

Parameters:
matElem the elementary matrix
n the $ n $ in $ \partial_{x_n} $
T the given transformation

Definition at line 266 of file LagrangianFiniteElement.hpp.

00269   {
00270     ElementaryMatrix tmp = 0;
00271 
00272     for (size_t k=0; k<numberOfQuadraturePoints; ++k) { // Loop on integration vertices
00273       for (size_t i=0; i<numberOfDegreesOfFreedom; ++i) {
00274         const real_t fi
00275           = dxW(i,k)*T.invJacobian(0,n)
00276           + dyW(i,k)*T.invJacobian(1,n)
00277           + dzW(i,k)*T.invJacobian(2,n);
00278         for (size_t j=0; j<numberOfDegreesOfFreedom; ++j) {
00279           tmp(i,j)
00280             += fi * W(j,k) * QuadratureType::instance().weight(k);
00281         }
00282       }
00283     }
00284     matElem += tmp;
00285   }

template<size_t numberOfDegreesOfFreedom, typename FiniteElementType, typename GivenQuadratureType>
template<typename ConformTransformation>
void LagrangianFiniteElement< numberOfDegreesOfFreedom, FiniteElementType, GivenQuadratureType >::integrateDWjDWi ( ElementaryMatrix matElem,
const size_t &  n,
const size_t &  m,
const ConformTransformation &  T 
) const [inline]

Computes elementary matrix associated to $ \int \partial_{x_n} w_j \partial_{x_m} w_i $ on a given element using the associated conform transformation

Parameters:
matElem the elementary matrix
n the $ n $ in $ \partial_{x_n} $
m the $ m $ in $ \partial_{x_m} $
T the given transformation

Definition at line 298 of file LagrangianFiniteElement.hpp.

00302   {
00303     ElementaryMatrix tmp = 0;
00304 
00305     for (size_t k=0; k<numberOfQuadraturePoints; ++k) { // Loop on integration vertices
00306       for (size_t j=0; j<numberOfDegreesOfFreedom; ++j) {
00307         const real_t fj
00308           = dxW(j,k)*T.invJacobian(0,n)
00309           + dyW(j,k)*T.invJacobian(1,n)
00310           + dzW(j,k)*T.invJacobian(2,n);
00311         for (size_t i=0; i<numberOfDegreesOfFreedom; ++i) {
00312           tmp(i,j)
00313             += fj
00314             * (  dxW(i,k)*T.invJacobian(0,m)
00315                + dyW(i,k)*T.invJacobian(1,m)
00316                + dzW(i,k)*T.invJacobian(2,m) )
00317             * QuadratureType::instance().weight(k);
00318         }
00319       }
00320     }
00321 
00322     matElem += tmp;
00323   }

template<size_t numberOfDegreesOfFreedom, typename FiniteElementType, typename GivenQuadratureType>
template<typename ConformTransformation>
void LagrangianFiniteElement< numberOfDegreesOfFreedom, FiniteElementType, GivenQuadratureType >::integrateWj ( ElementaryVector vectElem,
const ConformTransformation &  T,
const TinyVector< numberOfQuadraturePoints, real_t > &  f 
) const [inline]

Computes elementary vector associated to $ \int f w_i $ on a given element using the associated conform transformation

Parameters:
vectElem the elementary vector
T the given transformation
f $ f $ values at quadrature points

Definition at line 334 of file LagrangianFiniteElement.hpp.

00337   {
00338     vectElem = 0;
00339 
00340     for (size_t k=0; k<numberOfQuadraturePoints; ++k)
00341       for (size_t j=0; j<numberOfDegreesOfFreedom; ++j) {
00342         vectElem[j]
00343           += W(j,k)
00344           *  f[k]
00345           *  QuadratureType::instance().weight(k);
00346       }
00347   }


Member Data Documentation

template<size_t numberOfDegreesOfFreedom, typename FiniteElementType, typename GivenQuadratureType>
TinyMatrix<numberOfDegreesOfFreedom,numberOfQuadraturePoints> LagrangianFiniteElement< numberOfDegreesOfFreedom, FiniteElementType, GivenQuadratureType >::__w [protected]

template<size_t numberOfDegreesOfFreedom, typename FiniteElementType, typename GivenQuadratureType>
TinyMatrix<numberOfDegreesOfFreedom,numberOfQuadraturePoints> LagrangianFiniteElement< numberOfDegreesOfFreedom, FiniteElementType, GivenQuadratureType >::__dxw [protected]

template<size_t numberOfDegreesOfFreedom, typename FiniteElementType, typename GivenQuadratureType>
TinyMatrix<numberOfDegreesOfFreedom,numberOfQuadraturePoints> LagrangianFiniteElement< numberOfDegreesOfFreedom, FiniteElementType, GivenQuadratureType >::__dyw [protected]

template<size_t numberOfDegreesOfFreedom, typename FiniteElementType, typename GivenQuadratureType>
TinyMatrix<numberOfDegreesOfFreedom,numberOfQuadraturePoints> LagrangianFiniteElement< numberOfDegreesOfFreedom, FiniteElementType, GivenQuadratureType >::__dzw [protected]


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

Generated on Wed Nov 19 00:08:37 2008 for FreeFEM3D (aka ff3d) by  doxygen 1.5.6