BoundaryConditionDiscretizationPenalty< MeshType, TypeOfDiscretization >::__SetMatrixDirichletBoundaryConditions< MatrixType > Class Template Reference

Template declarations. More...

Collaboration diagram for BoundaryConditionDiscretizationPenalty< MeshType, TypeOfDiscretization >::__SetMatrixDirichletBoundaryConditions< MatrixType >:

Collaboration graph
[legend]

List of all members.

Public Member Functions

template<typename SurfaceMeshType>
void eval (const SurfaceMeshType &surfMesh) const
 __SetMatrixDirichletBoundaryConditions (const Dirichlet &D, const size_t &equationNumber, const real_t &epsilon, MatrixType &A, const BoundaryConditionDiscretizationPenalty< MeshType, TypeOfDiscretization > &bc)
 __SetMatrixDirichletBoundaryConditions (const __SetMatrixDirichletBoundaryConditions &S)
 ~__SetMatrixDirichletBoundaryConditions ()

Private Attributes

const Dirichlet__dirichlet
const size_t __equationNumber
const real_t __epsilon
MatrixType & __A
const
BoundaryConditionDiscretizationPenalty
< MeshType,
TypeOfDiscretization > & 
__bc


Detailed Description

template<typename MeshType, ScalarDiscretizationTypeBase::Type TypeOfDiscretization>
template<typename MatrixType>
class BoundaryConditionDiscretizationPenalty< MeshType, TypeOfDiscretization >::__SetMatrixDirichletBoundaryConditions< MatrixType >

Template declarations.

Definition at line 253 of file BoundaryConditionDiscretizationPenalty.hpp.


Constructor & Destructor Documentation

template<typename MeshType, ScalarDiscretizationTypeBase::Type TypeOfDiscretization>
template<typename MatrixType>
BoundaryConditionDiscretizationPenalty< MeshType, TypeOfDiscretization >::__SetMatrixDirichletBoundaryConditions< MatrixType >::__SetMatrixDirichletBoundaryConditions ( const Dirichlet D,
const size_t &  equationNumber,
const real_t &  epsilon,
MatrixType &  A,
const BoundaryConditionDiscretizationPenalty< MeshType, TypeOfDiscretization > &  bc 
) [inline]

Definition at line 357 of file BoundaryConditionDiscretizationPenalty.hpp.

00363       : __dirichlet(D),
00364         __equationNumber(equationNumber),
00365         __epsilon(epsilon),
00366         __A(A),
00367         __bc(bc)
00368     {
00369       ;
00370     }

template<typename MeshType, ScalarDiscretizationTypeBase::Type TypeOfDiscretization>
template<typename MatrixType>
BoundaryConditionDiscretizationPenalty< MeshType, TypeOfDiscretization >::__SetMatrixDirichletBoundaryConditions< MatrixType >::__SetMatrixDirichletBoundaryConditions ( const __SetMatrixDirichletBoundaryConditions< MatrixType > &  S  )  [inline]

Definition at line 372 of file BoundaryConditionDiscretizationPenalty.hpp.

00373       : __dirichlet(S.__dirichlet),
00374         __equationNumber(S.__equationNumber),
00375         __epsilon(S.__epsilon),
00376         __A(S.__A),
00377         __bc(S.__bc)
00378     {
00379       ;
00380     }

template<typename MeshType, ScalarDiscretizationTypeBase::Type TypeOfDiscretization>
template<typename MatrixType>
BoundaryConditionDiscretizationPenalty< MeshType, TypeOfDiscretization >::__SetMatrixDirichletBoundaryConditions< MatrixType >::~__SetMatrixDirichletBoundaryConditions (  )  [inline]

Definition at line 382 of file BoundaryConditionDiscretizationPenalty.hpp.

00383     {
00384       ;
00385     }


Member Function Documentation

template<typename MeshType, ScalarDiscretizationTypeBase::Type TypeOfDiscretization>
template<typename MatrixType>
template<typename SurfaceMeshType>
void BoundaryConditionDiscretizationPenalty< MeshType, TypeOfDiscretization >::__SetMatrixDirichletBoundaryConditions< MatrixType >::eval ( const SurfaceMeshType &  surfMesh  )  const [inline]

Definition at line 269 of file BoundaryConditionDiscretizationPenalty.hpp.

References BoundaryConditionDiscretizationPenalty< MeshType, TypeOfDiscretization >::__SetMatrixDirichletBoundaryConditions< MatrixType >::__A, BoundaryConditionDiscretizationPenalty< MeshType, TypeOfDiscretization >::__SetMatrixDirichletBoundaryConditions< MatrixType >::__bc, BoundaryConditionDiscretizationPenalty< MeshType, TypeOfDiscretization >::__SetMatrixDirichletBoundaryConditions< MatrixType >::__epsilon, and BoundaryConditionDiscretizationPenalty< MeshType, TypeOfDiscretization >::__SetMatrixDirichletBoundaryConditions< MatrixType >::__equationNumber.

00270     {
00271       typedef typename SurfaceMeshType::CellType BoundaryCellType;
00272 
00273       typedef
00274         typename FiniteElementTraits<BoundaryCellType,
00275                                      TypeOfDiscretization>::Transformation
00276         BoundaryConformTransformation;
00277 
00278       typedef
00279         typename FiniteElementTraits<BoundaryCellType,
00280                                      TypeOfDiscretization>::Type
00281         BoundaryFiniteElement;
00282 
00283       typedef
00284         typename BoundaryFiniteElement::QuadratureType
00285         BoundaryQuadratureType;
00286 
00287       const FiniteElement& finiteElement
00288         = FiniteElement::instance();
00289 
00290       const BoundaryQuadratureType& referenceBoundaryQuadrature
00291         = BoundaryQuadratureType::instance();
00292 
00293       const ScalarDegreeOfFreedomPositionsSet& dofPositions
00294         = __bc.__degreeOfFreedomSet.positionsSet(0);
00295 
00296       AutoPointer<ConformTransformation> pT;
00297 
00298       const CellType* lastCell = 0;
00299 
00300       for (typename SurfaceMeshType::const_iterator iface(surfMesh);
00301            not(iface.end()); ++iface) {
00302         const typename SurfaceMeshType::CellType& face = *iface;
00303         const BoundaryConformTransformation boundaryT(face);
00304         
00305         const CellType& cell
00306           = static_cast<const CellType&>(face.mother());
00307         
00308         if(lastCell != &cell) {
00309           pT = new ConformTransformation(cell);
00310           lastCell = &cell;
00311         }
00312 
00313         const size_t cellNumber = __bc.mesh().cellNumber(cell);
00314 
00315         const ConformTransformation& T = *pT;
00316 
00317         for (size_t k=0; k<BoundaryQuadratureType::numberOfQuadraturePoints;
00318              k++) {
00319           // computes local quadrature vertex
00320           TinyVector<3, real_t> q;
00321           boundaryT.value(referenceBoundaryQuadrature[k], q);
00322 
00323           const real_t weight
00324             = referenceBoundaryQuadrature.weight(k)
00325             * face.volume();
00326 
00327           TinyVector<3> coordinates;
00328           T.invertT(q, coordinates);
00329 
00330           typename FiniteElement::ElementaryVector W;
00331           for (size_t l=0; l<FiniteElement::numberOfDegreesOfFreedom; l++)
00332             W[l] = finiteElement.W(l,coordinates);
00333 
00334           typename FiniteElement::ElementaryMatrix WiWj;
00335 
00336           for (size_t l=0; l<FiniteElement::numberOfDegreesOfFreedom; l++)
00337             for (size_t m=0; m<FiniteElement::numberOfDegreesOfFreedom; m++)
00338               WiWj(l,m) = W[l] * W[m];
00339 
00340           size_t indices[FiniteElement::numberOfDegreesOfFreedom];
00341           for (size_t l=0; l<FiniteElement::numberOfDegreesOfFreedom; ++l) {
00342             indices[l] = __bc.__degreeOfFreedomSet(__equationNumber,
00343                                                    dofPositions(cellNumber,l));
00344           }
00345 
00346           for (size_t l=0; l<FiniteElement::numberOfDegreesOfFreedom; l++) {
00347             const size_t I = indices[l];
00348             for (size_t m=0; m<FiniteElement::numberOfDegreesOfFreedom; m++) {
00349               const size_t J = indices[m];
00350               __A(I,J) += weight * WiWj(l,m) / __epsilon;
00351             }
00352           }
00353         }
00354       }
00355     }


Member Data Documentation

template<typename MeshType, ScalarDiscretizationTypeBase::Type TypeOfDiscretization>
template<typename MatrixType>
const Dirichlet& BoundaryConditionDiscretizationPenalty< MeshType, TypeOfDiscretization >::__SetMatrixDirichletBoundaryConditions< MatrixType >::__dirichlet [private]

Definition at line 256 of file BoundaryConditionDiscretizationPenalty.hpp.

template<typename MeshType, ScalarDiscretizationTypeBase::Type TypeOfDiscretization>
template<typename MatrixType>
const size_t BoundaryConditionDiscretizationPenalty< MeshType, TypeOfDiscretization >::__SetMatrixDirichletBoundaryConditions< MatrixType >::__equationNumber [private]

template<typename MeshType, ScalarDiscretizationTypeBase::Type TypeOfDiscretization>
template<typename MatrixType>
const real_t BoundaryConditionDiscretizationPenalty< MeshType, TypeOfDiscretization >::__SetMatrixDirichletBoundaryConditions< MatrixType >::__epsilon [private]

template<typename MeshType, ScalarDiscretizationTypeBase::Type TypeOfDiscretization>
template<typename MatrixType>
MatrixType& BoundaryConditionDiscretizationPenalty< MeshType, TypeOfDiscretization >::__SetMatrixDirichletBoundaryConditions< MatrixType >::__A [private]

template<typename MeshType, ScalarDiscretizationTypeBase::Type TypeOfDiscretization>
template<typename MatrixType>
const BoundaryConditionDiscretizationPenalty<MeshType, TypeOfDiscretization>& BoundaryConditionDiscretizationPenalty< MeshType, TypeOfDiscretization >::__SetMatrixDirichletBoundaryConditions< MatrixType >::__bc [private]


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

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