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

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

Collaboration graph
[legend]

List of all members.

Public Member Functions

template<typename SurfaceMeshType>
void eval (const SurfaceMeshType &surfaceMesh) const
 __TransposedTimesXDirichlet (const Dirichlet &dirichlet, const size_t equationNumber, const VectorType &x, VectorType &z, const BoundaryConditionDiscretizationPenalty< MeshType, TypeOfDiscretization > &bc)
 __TransposedTimesXDirichlet (const __TransposedTimesXDirichlet &T)
 ~__TransposedTimesXDirichlet ()

Private Attributes

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


Detailed Description

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

Definition at line 651 of file BoundaryConditionDiscretizationPenalty.hpp.


Constructor & Destructor Documentation

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

Definition at line 759 of file BoundaryConditionDiscretizationPenalty.hpp.

00765       : __dirichlet(dirichlet),
00766         __equationNumber(equationNumber),
00767         __x(x),
00768         __z(z),
00769         __bc(bc)
00770     {
00771       ;
00772     }

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

Definition at line 774 of file BoundaryConditionDiscretizationPenalty.hpp.

00775       : __dirichlet(T.__dirichlet),
00776         __equationNumber(T.__equationNumber),
00777         __x(T.__x),
00778         __z(T.__z),
00779         __bc(T.__bc)
00780     {
00781       ;
00782     }

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

Definition at line 784 of file BoundaryConditionDiscretizationPenalty.hpp.

00785     {
00786       ;
00787     }


Member Function Documentation

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

Definition at line 668 of file BoundaryConditionDiscretizationPenalty.hpp.

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

00669     {
00670       typedef typename SurfaceMeshType::CellType BoundaryCellType;
00671 
00672       typedef
00673         typename FiniteElementTraits<BoundaryCellType,
00674                                      TypeOfDiscretization>::Transformation
00675         BoundaryConformTransformation;
00676 
00677       typedef
00678         typename FiniteElementTraits<BoundaryCellType,
00679                                      TypeOfDiscretization>::Type
00680         BoundaryFiniteElement;
00681 
00682       typedef
00683         typename BoundaryFiniteElement::QuadratureType
00684         BoundaryQuadratureType;
00685 
00686       const FiniteElement& finiteElement = FiniteElement::instance();
00687 
00688       const BoundaryQuadratureType& referenceBoundaryQuadrature
00689         = BoundaryQuadratureType::instance();
00690 
00691       const ScalarDegreeOfFreedomPositionsSet& dofPositions
00692         = __bc.__degreeOfFreedomSet.positionsSet(0);
00693 
00694       AutoPointer<ConformTransformation> pT;
00695 
00696       const CellType* lastCell = 0;
00697 
00698       for (typename SurfaceMeshType::const_iterator iface(surfaceMesh);
00699            not(iface.end()); ++iface) {
00700         const typename SurfaceMeshType::CellType& face = *iface;
00701         const BoundaryConformTransformation boundaryT(face);
00702 
00703         const CellType& cell
00704           = static_cast<const CellType&>(face.mother());
00705 
00706         if(lastCell != &cell) {
00707           pT = new ConformTransformation(cell);
00708           lastCell = &cell;
00709         }
00710 
00711         const size_t cellNumber = __bc.mesh().cellNumber(cell);
00712 
00713         const ConformTransformation& T = *pT;
00714 
00715         for (size_t k=0; k<BoundaryQuadratureType::numberOfQuadraturePoints;
00716              k++) {
00717           // computes local quadrature vertex
00718           TinyVector<3, real_t> q;
00719           boundaryT.value(referenceBoundaryQuadrature[k], q);
00720 
00721           const real_t weight
00722             = referenceBoundaryQuadrature.weight(k)
00723             * face.volume();
00724 
00725           TinyVector<3> coordinates;
00726           T.invertT(q, coordinates);
00727 
00728           typename FiniteElement::ElementaryVector W;
00729           for (size_t l=0; l<FiniteElement::numberOfDegreesOfFreedom; l++) 
00730             W[l] = finiteElement.W(l,coordinates);
00731 
00732           typename FiniteElement::ElementaryMatrix WiWj;
00733 
00734           for (size_t l=0; l<FiniteElement::numberOfDegreesOfFreedom; l++)
00735             for (size_t m=0; m<FiniteElement::numberOfDegreesOfFreedom; m++)
00736               WiWj(l,m) = W[l] * W[m];
00737 
00738           size_t indices[FiniteElement::numberOfDegreesOfFreedom];
00739           for (size_t l=0; l<FiniteElement::numberOfDegreesOfFreedom; ++l) {
00740             indices[l] = __bc.__degreeOfFreedomSet(__equationNumber,
00741                                                    dofPositions(cellNumber, l));
00742           }
00743             
00744           for (size_t l=0; l<FiniteElement::numberOfDegreesOfFreedom; l++) {
00745             const size_t I = indices[l];
00746             if (not(__bc.__dirichletList[I])) {
00747               for (size_t m=0; m<FiniteElement::numberOfDegreesOfFreedom; m++) {
00748                 const size_t J = indices[m];
00749                 if (not(__bc.__dirichletList[J])) {
00750                   __z[I] += WiWj(l,m) * weight * __x[J] / __bc.__epsilon;
00751                 }
00752               }
00753             }
00754           }
00755         }
00756       }
00757     }


Member Data Documentation

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

Definition at line 654 of file BoundaryConditionDiscretizationPenalty.hpp.

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

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

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

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


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

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