BaseFEMDiscretization< GivenMeshType, TypeOfDiscretization > Class Template Reference

#include <BaseFEMDiscretization.hpp>

Inheritance diagram for BaseFEMDiscretization< GivenMeshType, TypeOfDiscretization >:

Inheritance graph
[legend]
Collaboration diagram for BaseFEMDiscretization< GivenMeshType, TypeOfDiscretization >:

Collaboration graph
[legend]

List of all members.

Public Member Functions

void setDirichletList (const Vector< bool > &dirichletList)
virtual void assembleMatrix ()=0
virtual void assembleSecondMember ()=0
virtual void getDiagonal (BaseVector &u) const =0
virtual void transposedTimesX (const BaseVector &x, BaseVector &v) const =0
virtual void timesX (const BaseVector &x, BaseVector &v) const =0
const Problemproblem () const
BaseMatrixA ()
BaseVectorb ()

Protected Types

typedef GivenMeshType MeshType
 The type of mesh used for discretization.
typedef MeshType::CellType CellType
 The geometry of finite elements.
typedef FiniteElementTraits
< CellType,
TypeOfDiscretization >::Type 
FiniteElement
 Finite element type.
typedef
FiniteElement::ElementaryMatrix 
ElementaryMatrixType
 Elementary matrices type.
typedef
FiniteElement::ElementaryVector 
ElementaryVectorType
 Elementary vector type.
typedef FiniteElementTraits
< CellType,
TypeOfDiscretization >
::Transformation 
ConformTransformation
 type of transformation from reference element
typedef FiniteElementTraits
< CellType,
TypeOfDiscretization >
::JacobianTransformation 
JacobianTransformation
 Associated jacobian.

Protected Member Functions

void generatesElementaryVector (ElementaryVectorType &eVector, const JacobianTransformation &J, const TinyVector< FiniteElement::numberOfQuadraturePoints, real_t > &f) const
void generatesElementaryMatrix (ElementaryMatrixSet< ElementaryMatrixType > &eSet, const JacobianTransformation &J) const
void generatesElementaryMatrix (const PDEOperator::Type operatorType, const JacobianTransformation &J, ElementaryMatrixType &matelem, const size_t i=0, const size_t j=0) const
 BaseFEMDiscretization (const Problem &p, const MeshType &mesh, const DiscretizationType &discretisationType, BaseMatrix &a, BaseVector &bb, const DegreeOfFreedomSet &dof)
virtual ~BaseFEMDiscretization ()

Protected Attributes

const MeshType__mesh
 Mesh used to perform discretization.
ElementaryMatrixSet
< ElementaryMatrixType
__eSet
 Set of elementary matrices.
DiscretizedOperators
< ElementaryMatrixType
__discretizedOperators
 Operators that are discretized.
const DegreeOfFreedomSet__degreeOfFreedomSet
 Set of degrees of freedom.
const DiscretizationType __discretizationType
const Problem__problem
 The PDEProblem to discretize.
BaseMatrix__A
 The matrix which will contain the discretization.
BaseVector__b
 The second member.
const Vector< bool > * __dirichletList
 elimination dirichlet informations


Detailed Description

template<typename GivenMeshType, ScalarDiscretizationTypeBase::Type TypeOfDiscretization>
class BaseFEMDiscretization< GivenMeshType, TypeOfDiscretization >

Definition at line 62 of file BaseFEMDiscretization.hpp.


Member Typedef Documentation

template<typename GivenMeshType, ScalarDiscretizationTypeBase::Type TypeOfDiscretization>
typedef GivenMeshType BaseFEMDiscretization< GivenMeshType, TypeOfDiscretization >::MeshType [protected]

The type of mesh used for discretization.

Reimplemented in FEMDiscretization< GivenMeshType, TypeOfDiscretization >, and FEMDiscretization< Structured3DMesh, TypeOfDiscretization >.

Definition at line 67 of file BaseFEMDiscretization.hpp.

template<typename GivenMeshType, ScalarDiscretizationTypeBase::Type TypeOfDiscretization>
typedef MeshType::CellType BaseFEMDiscretization< GivenMeshType, TypeOfDiscretization >::CellType [protected]

template<typename GivenMeshType, ScalarDiscretizationTypeBase::Type TypeOfDiscretization>
typedef FiniteElementTraits<CellType, TypeOfDiscretization>::Type BaseFEMDiscretization< GivenMeshType, TypeOfDiscretization >::FiniteElement [protected]

template<typename GivenMeshType, ScalarDiscretizationTypeBase::Type TypeOfDiscretization>
typedef FiniteElement::ElementaryMatrix BaseFEMDiscretization< GivenMeshType, TypeOfDiscretization >::ElementaryMatrixType [protected]

template<typename GivenMeshType, ScalarDiscretizationTypeBase::Type TypeOfDiscretization>
typedef FiniteElement::ElementaryVector BaseFEMDiscretization< GivenMeshType, TypeOfDiscretization >::ElementaryVectorType [protected]

template<typename GivenMeshType, ScalarDiscretizationTypeBase::Type TypeOfDiscretization>
typedef FiniteElementTraits<CellType, TypeOfDiscretization>::Transformation BaseFEMDiscretization< GivenMeshType, TypeOfDiscretization >::ConformTransformation [protected]

type of transformation from reference element

Reimplemented in FEMDiscretization< GivenMeshType, TypeOfDiscretization >, and FEMDiscretization< Structured3DMesh, TypeOfDiscretization >.

Definition at line 86 of file BaseFEMDiscretization.hpp.

template<typename GivenMeshType, ScalarDiscretizationTypeBase::Type TypeOfDiscretization>
typedef FiniteElementTraits<CellType, TypeOfDiscretization>::JacobianTransformation BaseFEMDiscretization< GivenMeshType, TypeOfDiscretization >::JacobianTransformation [protected]


Constructor & Destructor Documentation

template<typename GivenMeshType, ScalarDiscretizationTypeBase::Type TypeOfDiscretization>
BaseFEMDiscretization< GivenMeshType, TypeOfDiscretization >::BaseFEMDiscretization ( const Problem p,
const MeshType mesh,
const DiscretizationType discretisationType,
BaseMatrix a,
BaseVector bb,
const DegreeOfFreedomSet dof 
) [inline, protected]

Constructor of the discretization

Parameters:
p the problem
mesh the mesh used for discretization
discretizationType the type of discretization
a matrix storing discretization
bb vector that stores second member discretization
dof degrees of freedom set

Definition at line 226 of file BaseFEMDiscretization.hpp.

00232     : Discretization(discretisationType, p, a, bb),
00233       __mesh(mesh),
00234       __eSet(problem()),
00235       __discretizedOperators(__eSet,problem()),
00236       __degreeOfFreedomSet(dof)
00237   {
00238     ;
00239   }

template<typename GivenMeshType, ScalarDiscretizationTypeBase::Type TypeOfDiscretization>
virtual BaseFEMDiscretization< GivenMeshType, TypeOfDiscretization >::~BaseFEMDiscretization (  )  [inline, protected, virtual]

virtual destructor

Definition at line 245 of file BaseFEMDiscretization.hpp.

00246   {
00247     ;
00248   }


Member Function Documentation

template<typename GivenMeshType, ScalarDiscretizationTypeBase::Type TypeOfDiscretization>
void BaseFEMDiscretization< GivenMeshType, TypeOfDiscretization >::generatesElementaryVector ( ElementaryVectorType eVector,
const JacobianTransformation J,
const TinyVector< FiniteElement::numberOfQuadraturePoints, real_t > &  f 
) const [inline, protected]

Generates elementary vector

Parameters:
eVector the generated elementary vector
J the jacobian of the transformation
f the function to discretize

Definition at line 114 of file BaseFEMDiscretization.hpp.

Referenced by FEMDiscretization< Structured3DMesh, TypeOfDiscretization >::assembleSecondMember(), and FEMDiscretization< GivenMeshType, TypeOfDiscretization >::assembleSecondMember().

00117   {
00118     FiniteElement::instance().integrateWj(eVector,J,f);
00119   }

template<typename GivenMeshType, ScalarDiscretizationTypeBase::Type TypeOfDiscretization>
void BaseFEMDiscretization< GivenMeshType, TypeOfDiscretization >::generatesElementaryMatrix ( ElementaryMatrixSet< ElementaryMatrixType > &  eSet,
const JacobianTransformation J 
) const [inline, protected]

Generates elementary matrices set for a given element

Parameters:
eSet the set of elementary matrices
J the jacobian of the transformation

Definition at line 128 of file BaseFEMDiscretization.hpp.

Referenced by FEMDiscretization< Structured3DMesh, TypeOfDiscretization >::assembleMatrix(), FEMDiscretization< GivenMeshType, TypeOfDiscretization >::assembleMatrix(), FEMDiscretization< Structured3DMesh, TypeOfDiscretization >::assembleSecondMember(), FEMDiscretization< GivenMeshType, TypeOfDiscretization >::assembleSecondMember(), BaseFEMDiscretization< Structured3DMesh, TypeOfDiscretization >::generatesElementaryMatrix(), FEMDiscretization< Structured3DMesh, TypeOfDiscretization >::getDiagonal(), FEMDiscretization< GivenMeshType, TypeOfDiscretization >::getDiagonal(), FEMDiscretization< Structured3DMesh, TypeOfDiscretization >::timesX(), FEMDiscretization< GivenMeshType, TypeOfDiscretization >::timesX(), FEMDiscretization< Structured3DMesh, TypeOfDiscretization >::transposedTimesX(), and FEMDiscretization< GivenMeshType, TypeOfDiscretization >::transposedTimesX().

00130   {
00131     if (eSet.isMassOperator()) {
00132       generatesElementaryMatrix(PDEOperator::massop,
00133                                 J, eSet.massOperator());
00134     }
00135     if (eSet.isFirstOrderOperator()) {
00136       for (size_t i=0; i<3; ++i) {
00137         if (eSet.isFirstOrderUdxV(i)) {
00138           generatesElementaryMatrix(PDEOperator::firstorderopTransposed,
00139                                     J,eSet.firstOrderOperatorUdxV(i),i);
00140         }
00141         if (eSet.isFirstOrderDxUV(i)) {
00142           generatesElementaryMatrix(PDEOperator::firstorderop, J,
00143                                     eSet.firstOrderOperatorDxUV(i),i);
00144         }
00145       }
00146     }
00147     if (eSet.isSecondOrderOperator()) {
00148       for (size_t i=0; i<3; ++i)
00149         for (size_t j=0; j<3; ++j) {
00150           if (eSet.isSecondOrderOperator(i,j)) {
00151             generatesElementaryMatrix(PDEOperator::secondorderop, J,
00152                                       eSet.secondOrderOperator(i,j),i,j);
00153           }
00154         }
00155     }
00156     if (eSet.isDivMuGrad()) {
00157       generatesElementaryMatrix(PDEOperator::divmugrad, J, eSet.divMuGrad());
00158     }
00159   }

template<typename GivenMeshType, ScalarDiscretizationTypeBase::Type TypeOfDiscretization>
void BaseFEMDiscretization< GivenMeshType, TypeOfDiscretization >::generatesElementaryMatrix ( const PDEOperator::Type  operatorType,
const JacobianTransformation J,
ElementaryMatrixType matelem,
const size_t  i = 0,
const size_t  j = 0 
) const [inline, protected]

Generates an elementary matrix for a given operator in an element. The row and column number can be specified when operator is not scalar: $ \partial_{x_i}(w_l)\partial_{x_j}(w_k)$ for instance.

Parameters:
operatorType type of the operator
J jacobian of the transformation
matelem generated elementary matrix
i row number
j column number

Definition at line 173 of file BaseFEMDiscretization.hpp.

00177   {
00178     matelem = 0;
00179     switch(operatorType) {
00180     case PDEOperator::firstorderop: {
00181       FiniteElement::instance().integrateDWjWi(matelem,i,J);
00182       matelem *= J.jacobianDet();
00183       break;
00184     }
00185     case PDEOperator::firstorderopTransposed: {
00186       FiniteElement::instance().integrateWjDWi(matelem,i,J);
00187       matelem *= J.jacobianDet();
00188       break;
00189     }
00190     case PDEOperator::divmugrad: {
00191       FiniteElement::instance().integrateDWjDWi(matelem,0,0,J);
00192       FiniteElement::instance().integrateDWjDWi(matelem,1,1,J);
00193       FiniteElement::instance().integrateDWjDWi(matelem,2,2,J);
00194       matelem *= J.jacobianDet();
00195       break;
00196     }
00197     case PDEOperator::secondorderop: {
00198       FiniteElement::instance().integrateDWjDWi(matelem,i,j,J);
00199       matelem *= J.jacobianDet();
00200       break;
00201     }
00202     case PDEOperator::massop: {
00203       FiniteElement::instance().integrateWjWi(matelem,J);
00204       matelem *= J.jacobianDet();
00205       break;
00206     }
00207     default: {
00208       throw ErrorHandler(__FILE__,__LINE__,
00209                          "unable to built elementary matrix for this operator",
00210                          ErrorHandler::unexpected);
00211     }
00212     }
00213   }

void Discretization::setDirichletList ( const Vector< bool > &  dirichletList  )  [inline, inherited]

Sets dirichlet vertices list

Parameters:
dirichletList list of dirichlet vertices

Definition at line 63 of file Discretization.hpp.

References Discretization::__dirichletList, and ASSERT.

00064   {
00065     ASSERT(__dirichletList == 0);
00066     __dirichletList = &dirichletList;
00067   }

virtual void Discretization::assembleMatrix (  )  [pure virtual, inherited]

virtual void Discretization::assembleSecondMember (  )  [pure virtual, inherited]

virtual void Discretization::getDiagonal ( BaseVector u  )  const [pure virtual, inherited]

Provides interface for to allow computation without matrix

Parameters:
u the vector representing the diagonal

Implemented in FEMDiscretization< GivenMeshType, TypeOfDiscretization >, FEMDiscretization< Structured3DMesh, TypeOfDiscretization >, SpectralLegendreDiscretizationConform, and SpectralLegendreDiscretizationNonConform.

virtual void Discretization::transposedTimesX ( const BaseVector x,
BaseVector v 
) const [pure virtual, inherited]

virtual void Discretization::timesX ( const BaseVector x,
BaseVector v 
) const [pure virtual, inherited]

const Problem& Discretization::problem (  )  const [inline, inherited]

BaseMatrix& Discretization::A (  )  [inline, inherited]

BaseVector& Discretization::b (  )  [inline, inherited]


Member Data Documentation

template<typename GivenMeshType, ScalarDiscretizationTypeBase::Type TypeOfDiscretization>
const MeshType& BaseFEMDiscretization< GivenMeshType, TypeOfDiscretization >::__mesh [protected]

template<typename GivenMeshType, ScalarDiscretizationTypeBase::Type TypeOfDiscretization>
ElementaryMatrixSet<ElementaryMatrixType> BaseFEMDiscretization< GivenMeshType, TypeOfDiscretization >::__eSet [mutable, protected]

template<typename GivenMeshType, ScalarDiscretizationTypeBase::Type TypeOfDiscretization>
DiscretizedOperators<ElementaryMatrixType> BaseFEMDiscretization< GivenMeshType, TypeOfDiscretization >::__discretizedOperators [mutable, protected]

template<typename GivenMeshType, ScalarDiscretizationTypeBase::Type TypeOfDiscretization>
const DegreeOfFreedomSet& BaseFEMDiscretization< GivenMeshType, TypeOfDiscretization >::__degreeOfFreedomSet [protected]

const Problem& Discretization::__problem [protected, inherited]

The PDEProblem to discretize.

Definition at line 46 of file Discretization.hpp.

Referenced by Discretization::problem().

BaseMatrix& Discretization::__A [protected, inherited]

BaseVector& Discretization::__b [protected, inherited]

const Vector<bool>* Discretization::__dirichletList [protected, inherited]


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

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