
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 |
Definition at line 651 of file BoundaryConditionDiscretizationPenalty.hpp.
| 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 }
| 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 }
| BoundaryConditionDiscretizationPenalty< MeshType, TypeOfDiscretization >::__TransposedTimesXDirichlet< VectorType >::~__TransposedTimesXDirichlet | ( | ) | [inline] |
| 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 }
const Dirichlet& BoundaryConditionDiscretizationPenalty< MeshType, TypeOfDiscretization >::__TransposedTimesXDirichlet< VectorType >::__dirichlet [private] |
Definition at line 654 of file BoundaryConditionDiscretizationPenalty.hpp.
const size_t BoundaryConditionDiscretizationPenalty< MeshType, TypeOfDiscretization >::__TransposedTimesXDirichlet< VectorType >::__equationNumber [private] |
Definition at line 656 of file BoundaryConditionDiscretizationPenalty.hpp.
Referenced by BoundaryConditionDiscretizationPenalty< MeshType, TypeOfDiscretization >::__TransposedTimesXDirichlet< VectorType >::eval().
const VectorType& BoundaryConditionDiscretizationPenalty< MeshType, TypeOfDiscretization >::__TransposedTimesXDirichlet< VectorType >::__x [private] |
Definition at line 658 of file BoundaryConditionDiscretizationPenalty.hpp.
Referenced by BoundaryConditionDiscretizationPenalty< MeshType, TypeOfDiscretization >::__TransposedTimesXDirichlet< VectorType >::eval().
VectorType& BoundaryConditionDiscretizationPenalty< MeshType, TypeOfDiscretization >::__TransposedTimesXDirichlet< VectorType >::__z [private] |
Definition at line 660 of file BoundaryConditionDiscretizationPenalty.hpp.
Referenced by BoundaryConditionDiscretizationPenalty< MeshType, TypeOfDiscretization >::__TransposedTimesXDirichlet< VectorType >::eval().
const BoundaryConditionDiscretizationPenalty<MeshType, TypeOfDiscretization>& BoundaryConditionDiscretizationPenalty< MeshType, TypeOfDiscretization >::__TransposedTimesXDirichlet< VectorType >::__bc [private] |
Definition at line 663 of file BoundaryConditionDiscretizationPenalty.hpp.
Referenced by BoundaryConditionDiscretizationPenalty< MeshType, TypeOfDiscretization >::__TransposedTimesXDirichlet< VectorType >::eval().
1.5.6