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

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

Collaboration graph
[legend]

List of all members.

Public Member Functions

template<typename SurfaceMeshType>
void eval (const SurfaceMeshType &surfaceMesh) const
 __SetSecondMemberDirichlet (const Dirichlet &dirichlet, const size_t equationNumber, VectorType &b, const BoundaryConditionDiscretizationPenalty< MeshType, TypeOfDiscretization > &bc)
 __SetSecondMemberDirichlet (const __SetSecondMemberDirichlet &S)
 ~__SetSecondMemberDirichlet ()

Private Attributes

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


Detailed Description

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

Definition at line 791 of file BoundaryConditionDiscretizationPenalty.hpp.


Constructor & Destructor Documentation

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

Definition at line 887 of file BoundaryConditionDiscretizationPenalty.hpp.

00892       : __dirichlet(dirichlet),
00893         __equationNumber(equationNumber),
00894         __b(b),
00895         __bc(bc)
00896     {
00897       ;
00898     }

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

Definition at line 900 of file BoundaryConditionDiscretizationPenalty.hpp.

00901       : __dirichlet(S.__dirichlet),
00902         __equationNumber(S.__equationNumber),
00903         __b(S.__b),
00904         __bc(S.__bc)
00905     {
00906       ;
00907     }

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

Definition at line 909 of file BoundaryConditionDiscretizationPenalty.hpp.

00910     {
00911       ;
00912     }


Member Function Documentation

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

Definition at line 806 of file BoundaryConditionDiscretizationPenalty.hpp.

References BoundaryConditionDiscretizationPenalty< MeshType, TypeOfDiscretization >::__SetSecondMemberDirichlet< VectorType >::__b, BoundaryConditionDiscretizationPenalty< MeshType, TypeOfDiscretization >::__SetSecondMemberDirichlet< VectorType >::__bc, BoundaryConditionDiscretizationPenalty< MeshType, TypeOfDiscretization >::__SetSecondMemberDirichlet< VectorType >::__dirichlet, BoundaryConditionDiscretizationPenalty< MeshType, TypeOfDiscretization >::__SetSecondMemberDirichlet< VectorType >::__equationNumber, and Dirichlet::g().

00807     {
00808       typedef typename SurfaceMeshType::CellType BoundaryCellType;
00809 
00810       typedef
00811         typename FiniteElementTraits<BoundaryCellType,
00812                                      TypeOfDiscretization>::Transformation
00813         BoundaryConformTransformation;
00814 
00815       typedef
00816         typename FiniteElementTraits<BoundaryCellType,
00817         TypeOfDiscretization>::Type
00818         BoundaryFiniteElement;
00819 
00820       typedef
00821         typename BoundaryFiniteElement::QuadratureType
00822         BoundaryQuadratureType;
00823 
00824       const FiniteElement& finiteElement = FiniteElement::instance();
00825 
00826       const BoundaryQuadratureType& referenceBoundaryQuadrature
00827         = BoundaryQuadratureType::instance();
00828 
00829       const ScalarDegreeOfFreedomPositionsSet& dofPositions
00830         = __bc.__degreeOfFreedomSet.positionsSet(0);
00831 
00832       AutoPointer<ConformTransformation> pT;
00833 
00834       const CellType* lastCell = 0;
00835 
00836       for (typename SurfaceMeshType::const_iterator iface(surfaceMesh);
00837            not(iface.end()); ++iface) {
00838         const typename SurfaceMeshType::CellType& face = *iface;
00839         const BoundaryConformTransformation boundaryT(face);
00840 
00841         const CellType& cell
00842           = static_cast<const CellType&>(face.mother());
00843 
00844         if(lastCell != &cell) {
00845           pT = new ConformTransformation(cell);
00846           lastCell = &cell;
00847         }
00848 
00849         const ConformTransformation T = *pT;
00850 
00851         const size_t cellNumber = __bc.mesh().cellNumber(cell);
00852 
00853         for (size_t k=0; k<BoundaryQuadratureType::numberOfQuadraturePoints;
00854              k++) {
00855           // computes local quadrature vertex
00856           TinyVector<3, real_t> q;
00857           boundaryT.value(referenceBoundaryQuadrature[k], q);
00858 
00859           const real_t weight
00860             = referenceBoundaryQuadrature.weight(k)
00861             * face.volume();
00862 
00863           TinyVector<3> coordinates;
00864           T.invertT(q, coordinates);
00865 
00866           const real_t GValue = __dirichlet.g(q);
00867 
00868           typename FiniteElement::ElementaryVector W;
00869           for (size_t l=0; l<FiniteElement::numberOfDegreesOfFreedom; l++) 
00870             W[l] = finiteElement.W(l,coordinates);
00871 
00872           size_t indices[FiniteElement::numberOfDegreesOfFreedom];
00873           for (size_t l=0; l<FiniteElement::numberOfDegreesOfFreedom; ++l) {
00874             indices[l] = dofPositions(cellNumber, l);
00875           }
00876 
00877           for (size_t l=0; l<FiniteElement::numberOfDegreesOfFreedom; l++) {
00878             const size_t I = __bc.__degreeOfFreedomSet(__equationNumber,
00879                                                        indices[l]);
00880             // Assembling second member
00881             __b[I] += W[l] * weight * GValue / __bc.__epsilon;
00882           }
00883         }
00884       }
00885     }

Here is the call graph for this function:


Member Data Documentation

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

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

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

template<typename MeshType, ScalarDiscretizationTypeBase::Type TypeOfDiscretization>
template<typename VectorType>
const BoundaryConditionDiscretizationPenalty<MeshType, TypeOfDiscretization>& BoundaryConditionDiscretizationPenalty< MeshType, TypeOfDiscretization >::__SetSecondMemberDirichlet< VectorType >::__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