BoundaryConditionDiscretizationPenalty< MeshType, TypeOfDiscretization >::__GetDiagonalDirichletBoundaryConditions< VectorType > Class Template Reference

Collaboration diagram for BoundaryConditionDiscretizationPenalty< MeshType, TypeOfDiscretization >::__GetDiagonalDirichletBoundaryConditions< VectorType >:

Collaboration graph
[legend]

List of all members.

Public Member Functions

template<typename SurfaceMeshType>
void eval (const SurfaceMeshType &surfaceMesh) const
 __GetDiagonalDirichletBoundaryConditions (const Dirichlet &D, const size_t equationNumber, VectorType &z, const BoundaryConditionDiscretizationPenalty &bc)
 __GetDiagonalDirichletBoundaryConditions (const __GetDiagonalDirichletBoundaryConditions &G)
 ~__GetDiagonalDirichletBoundaryConditions ()

Private Attributes

const Dirichlet__dirichlet
const size_t __equationNumber
VectorType & __z
const
BoundaryConditionDiscretizationPenalty
< MeshType,
TypeOfDiscretization > & 
__bc


Detailed Description

template<typename MeshType, ScalarDiscretizationTypeBase::Type TypeOfDiscretization>
template<typename VectorType>
class BoundaryConditionDiscretizationPenalty< MeshType, TypeOfDiscretization >::__GetDiagonalDirichletBoundaryConditions< VectorType >

Definition at line 389 of file BoundaryConditionDiscretizationPenalty.hpp.


Constructor & Destructor Documentation

template<typename MeshType, ScalarDiscretizationTypeBase::Type TypeOfDiscretization>
template<typename VectorType>
BoundaryConditionDiscretizationPenalty< MeshType, TypeOfDiscretization >::__GetDiagonalDirichletBoundaryConditions< VectorType >::__GetDiagonalDirichletBoundaryConditions ( const Dirichlet D,
const size_t  equationNumber,
VectorType &  z,
const BoundaryConditionDiscretizationPenalty bc 
) [inline]

Definition at line 483 of file BoundaryConditionDiscretizationPenalty.hpp.

00487       : __dirichlet(D),
00488         __equationNumber(equationNumber),
00489         __z(z),
00490         __bc(bc)      
00491     {
00492       ;
00493     }

template<typename MeshType, ScalarDiscretizationTypeBase::Type TypeOfDiscretization>
template<typename VectorType>
BoundaryConditionDiscretizationPenalty< MeshType, TypeOfDiscretization >::__GetDiagonalDirichletBoundaryConditions< VectorType >::__GetDiagonalDirichletBoundaryConditions ( const __GetDiagonalDirichletBoundaryConditions< VectorType > &  G  )  [inline]

Definition at line 495 of file BoundaryConditionDiscretizationPenalty.hpp.

00496       : __dirichlet(G.__dirichlet),
00497         __equationNumber(G.__equationNumber),
00498         __z(G.__z),
00499         __bc(G.__bc)
00500     {
00501       ;
00502     }

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

Definition at line 504 of file BoundaryConditionDiscretizationPenalty.hpp.

00505     {
00506       ;
00507     }


Member Function Documentation

template<typename MeshType, ScalarDiscretizationTypeBase::Type TypeOfDiscretization>
template<typename VectorType>
template<typename SurfaceMeshType>
void BoundaryConditionDiscretizationPenalty< MeshType, TypeOfDiscretization >::__GetDiagonalDirichletBoundaryConditions< VectorType >::eval ( const SurfaceMeshType &  surfaceMesh  )  const [inline]

Definition at line 404 of file BoundaryConditionDiscretizationPenalty.hpp.

References BoundaryConditionDiscretizationPenalty< MeshType, TypeOfDiscretization >::__GetDiagonalDirichletBoundaryConditions< VectorType >::__bc, BoundaryConditionDiscretizationPenalty< MeshType, TypeOfDiscretization >::__GetDiagonalDirichletBoundaryConditions< VectorType >::__equationNumber, and BoundaryConditionDiscretizationPenalty< MeshType, TypeOfDiscretization >::__GetDiagonalDirichletBoundaryConditions< VectorType >::__z.

00405     {
00406       typedef typename SurfaceMeshType::CellType BoundaryCellType;
00407 
00408       typedef
00409         typename FiniteElementTraits<BoundaryCellType,
00410                                      TypeOfDiscretization>::Transformation
00411         BoundaryConformTransformation;
00412 
00413       typedef
00414         typename FiniteElementTraits<BoundaryCellType,
00415                                      TypeOfDiscretization>::Type
00416         BoundaryFiniteElement;
00417 
00418       typedef
00419         typename BoundaryFiniteElement::QuadratureType
00420         BoundaryQuadratureType;
00421 
00422       const FiniteElement& finiteElement = FiniteElement::instance();
00423 
00424       const BoundaryQuadratureType& referenceBoundaryQuadrature
00425         = BoundaryQuadratureType::instance();
00426 
00427       const ScalarDegreeOfFreedomPositionsSet& dofPositions
00428         = __bc.__degreeOfFreedomSet.positionsSet(0);
00429 
00430       AutoPointer<ConformTransformation> pT;
00431 
00432       const CellType* lastCell = 0;
00433 
00434       for (typename SurfaceMeshType::const_iterator iface(surfaceMesh);
00435            not(iface.end()); ++iface) {
00436         const typename SurfaceMeshType::CellType& face = *iface;
00437         const BoundaryConformTransformation boundaryT(face);
00438 
00439         const CellType& cell
00440           = static_cast<const CellType&>(face.mother());
00441 
00442         if(lastCell != &cell) {
00443           pT = new ConformTransformation(cell);
00444           lastCell = &cell;
00445         }
00446 
00447         const size_t cellNumber = __bc.mesh().cellNumber(cell);
00448 
00449         const ConformTransformation& T = *pT;
00450 
00451         for (size_t k=0; k<BoundaryQuadratureType::numberOfQuadraturePoints;
00452              k++) {
00453           // computes local quadrature vertex
00454           TinyVector<3, real_t> q;
00455           boundaryT.value(referenceBoundaryQuadrature[k], q);
00456 
00457           const real_t weight
00458             = referenceBoundaryQuadrature.weight(k)
00459             * face.volume();
00460 
00461           TinyVector<3> coordinates;
00462           T.invertT(q, coordinates);
00463 
00464           typename FiniteElement::ElementaryVector W;
00465           for (size_t l=0; l<FiniteElement::numberOfDegreesOfFreedom; l++) 
00466             W[l] = finiteElement.W(l,coordinates);
00467 
00468           size_t indices[FiniteElement::numberOfDegreesOfFreedom];
00469           for (size_t l=0; l<FiniteElement::numberOfDegreesOfFreedom; ++l) {
00470             indices[l] = __bc.__degreeOfFreedomSet(__equationNumber,
00471                                                    dofPositions(cellNumber,l));
00472           }
00473 
00474           for (size_t l=0; l<FiniteElement::numberOfDegreesOfFreedom; l++) {
00475             const size_t& I = indices[l];
00476             __z[I] += W[l] * W[l] * weight / __bc.__epsilon;
00477           }
00478         }
00479       }
00480     }


Member Data Documentation

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

Definition at line 392 of file BoundaryConditionDiscretizationPenalty.hpp.

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

template<typename MeshType, ScalarDiscretizationTypeBase::Type TypeOfDiscretization>
template<typename VectorType>
VectorType& BoundaryConditionDiscretizationPenalty< MeshType, TypeOfDiscretization >::__GetDiagonalDirichletBoundaryConditions< VectorType >::__z [private]

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


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

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