
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 |
Definition at line 253 of file BoundaryConditionDiscretizationPenalty.hpp.
| 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 }
| 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 }
| BoundaryConditionDiscretizationPenalty< MeshType, TypeOfDiscretization >::__SetMatrixDirichletBoundaryConditions< MatrixType >::~__SetMatrixDirichletBoundaryConditions | ( | ) | [inline] |
| 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 }
const Dirichlet& BoundaryConditionDiscretizationPenalty< MeshType, TypeOfDiscretization >::__SetMatrixDirichletBoundaryConditions< MatrixType >::__dirichlet [private] |
Definition at line 256 of file BoundaryConditionDiscretizationPenalty.hpp.
const size_t BoundaryConditionDiscretizationPenalty< MeshType, TypeOfDiscretization >::__SetMatrixDirichletBoundaryConditions< MatrixType >::__equationNumber [private] |
Definition at line 258 of file BoundaryConditionDiscretizationPenalty.hpp.
Referenced by BoundaryConditionDiscretizationPenalty< MeshType, TypeOfDiscretization >::__SetMatrixDirichletBoundaryConditions< MatrixType >::eval().
const real_t BoundaryConditionDiscretizationPenalty< MeshType, TypeOfDiscretization >::__SetMatrixDirichletBoundaryConditions< MatrixType >::__epsilon [private] |
Definition at line 259 of file BoundaryConditionDiscretizationPenalty.hpp.
Referenced by BoundaryConditionDiscretizationPenalty< MeshType, TypeOfDiscretization >::__SetMatrixDirichletBoundaryConditions< MatrixType >::eval().
MatrixType& BoundaryConditionDiscretizationPenalty< MeshType, TypeOfDiscretization >::__SetMatrixDirichletBoundaryConditions< MatrixType >::__A [private] |
Definition at line 261 of file BoundaryConditionDiscretizationPenalty.hpp.
Referenced by BoundaryConditionDiscretizationPenalty< MeshType, TypeOfDiscretization >::__SetMatrixDirichletBoundaryConditions< MatrixType >::eval().
const BoundaryConditionDiscretizationPenalty<MeshType, TypeOfDiscretization>& BoundaryConditionDiscretizationPenalty< MeshType, TypeOfDiscretization >::__SetMatrixDirichletBoundaryConditions< MatrixType >::__bc [private] |
Definition at line 264 of file BoundaryConditionDiscretizationPenalty.hpp.
Referenced by BoundaryConditionDiscretizationPenalty< MeshType, TypeOfDiscretization >::__SetMatrixDirichletBoundaryConditions< MatrixType >::eval().
1.5.6