36 #ifndef INTEGRATE_MATRIX_ELEMENT_HPP 37 #define INTEGRATE_MATRIX_ELEMENT_HPP 43 #include <lifev/core/LifeV.hpp> 45 #include <lifev/core/util/OpenMPParameters.hpp> 47 #include <lifev/core/fem/QuadratureRule.hpp> 48 #include <lifev/eta/fem/ETCurrentFE.hpp> 49 #include <lifev/eta/fem/MeshGeometricMap.hpp> 50 #include <lifev/eta/fem/QRAdapterBase.hpp> 52 #include <lifev/eta/expression/ExpressionToEvaluation.hpp> 54 #include <lifev/eta/array/ETMatrixElemental.hpp> 56 #include <boost/shared_ptr.hpp> 57 #include <boost/scoped_ptr.hpp> 64 namespace ExpressionAssembly
77 template <
typename MeshType,
78 typename TestSpaceType,
79 typename SolutionSpaceType,
80 typename ExpressionType,
81 typename QRAdapterType >
92 TestSpaceType::field_dim,
93 SolutionSpaceType::field_dim,
104 const QRAdapterType& qrAdapter,
105 const std::shared_ptr<TestSpaceType>& testSpace,
106 const std::shared_ptr<SolutionSpaceType>& solutionSpace,
107 const ExpressionType& expression,
108 const UInt offsetUp = 0,
109 const UInt offsetLeft = 0,
110 const UInt regionFlag = 0,
111 const UInt numVolumeElements = 0,
113 const bool subDomain =
false );
117 const QRAdapterType& qrAdapter,
118 const std::shared_ptr<TestSpaceType>& testSpace,
119 const std::shared_ptr<SolutionSpaceType>& solutionSpace,
120 const ExpressionType& expression,
122 const UInt offsetUp = 0,
123 const UInt offsetLeft = 0,
124 const UInt regionFlag = 0,
125 const UInt numVolumeElements = 0,
127 const bool subDomain =
false );
142 template <
typename MatrixType>
163 template <
typename MatrixType>
164 inline void operator>> (std::shared_ptr<MatrixType> mat)
190 void check (std::ostream& out = std::cout);
200 template <
typename MatrixType>
201 void addTo (MatrixType& mat);
203 template <
typename MatrixType>
215 template <
typename MatrixType>
228 template <
typename MatrixType>
229 inline void addTo (std::shared_ptr<MatrixType> mat)
231 ASSERT (mat != 0,
" Cannot assemble with an empty matrix");
236 template <
typename MatrixType>
239 ASSERT (mat != 0,
" Cannot assemble with an empty matrix");
240 addToSubdomain (*mat);
254 template <
typename MatrixType>
257 ASSERT (mat != 0,
" Cannot assemble with an empty matrix");
279 const UInt nbTestDof,
280 const UInt nbSolutionDof,
283 ETCurrentFE<MeshType::S_geoDimensions, 1>& globalCFE,
284 ETCurrentFE<TestSpaceType::space_dim, TestSpaceType::field_dim>& testCFE,
285 ETCurrentFE<SolutionSpaceType::space_dim, SolutionSpaceType::field_dim>& solutionCFE);
304 ETCurrentFE<TestSpaceType::space_dim, TestSpaceType::field_dim>*
M_testCFE_std;
333 template <
typename MeshType,
typename TestSpaceType,
typename SolutionSpaceType,
typename ExpressionType,
typename QRAdapterType>
336 const QRAdapterType& qrAdapter,
337 const std::shared_ptr<TestSpaceType>& testSpace,
338 const std::shared_ptr<SolutionSpaceType>& solutionSpace,
339 const ExpressionType& expression,
341 const UInt offsetLeft,
342 const UInt regionFlag,
343 const UInt numVolumeElements,
344 const UInt *
const volumeElements,
345 const bool subDomain )
366 switch (MeshType::geoShape_Type::BasRefSha::S_shape)
369 M_globalCFE_std =
new ETCurrentFE<MeshType::S_geoDimensions, 1> (
feTetraP0, geometricMapFromMesh<MeshType>(), qrAdapter.standardQR() );
370 M_globalCFE_adapted =
new ETCurrentFE<MeshType::S_geoDimensions, 1> (
feTetraP0, geometricMapFromMesh<MeshType>(), qrAdapter.standardQR() ) ;
373 M_globalCFE_std =
new ETCurrentFE<MeshType::S_geoDimensions, 1> (
feTriaP0, geometricMapFromMesh<MeshType>(), qrAdapter.standardQR() );
374 M_globalCFE_adapted =
new ETCurrentFE<MeshType::S_geoDimensions, 1> (
feTriaP0, geometricMapFromMesh<MeshType>(), qrAdapter.standardQR() );
377 M_globalCFE_std =
new ETCurrentFE<MeshType::S_geoDimensions, 1> (
feQuadQ0, geometricMapFromMesh<MeshType>(), qrAdapter.standardQR() );
378 M_globalCFE_adapted =
new ETCurrentFE<MeshType::S_geoDimensions, 1> (
feQuadQ0, geometricMapFromMesh<MeshType>(), qrAdapter.standardQR() );
381 M_globalCFE_std =
new ETCurrentFE<MeshType::S_geoDimensions, 1> (
feTetraP0, geometricMapFromMesh<MeshType>(), qrAdapter.standardQR() );
382 M_globalCFE_adapted =
new ETCurrentFE<MeshType::S_geoDimensions, 1> (
feTetraP0, geometricMapFromMesh<MeshType>(), qrAdapter.standardQR() );
385 M_globalCFE_std =
new ETCurrentFE<MeshType::S_geoDimensions, 1> (
feHexaQ0, geometricMapFromMesh<MeshType>(), qrAdapter.standardQR() );
386 M_globalCFE_adapted =
new ETCurrentFE<MeshType::S_geoDimensions, 1> (
feHexaQ0, geometricMapFromMesh<MeshType>(), qrAdapter.standardQR() );
389 ERROR_MSG (
"Unrecognized element shape");
398 template <
typename MeshType,
typename TestSpaceType,
typename SolutionSpaceType,
typename ExpressionType,
typename QRAdapterType>
401 const QRAdapterType& qrAdapter,
402 const std::shared_ptr<TestSpaceType>& testSpace,
403 const std::shared_ptr<SolutionSpaceType>& solutionSpace,
404 const ExpressionType& expression,
407 const UInt offsetLeft,
408 const UInt regionFlag,
409 const UInt numVolumeElements,
410 const UInt *
const volumeElements,
411 const bool subDomain )
431 switch (MeshType::geoShape_Type::BasRefSha::S_shape)
434 M_globalCFE_std =
new ETCurrentFE<MeshType::S_geoDimensions, 1> (
feSegP0, geometricMapFromMesh<MeshType>(), qrAdapter.standardQR() );
435 M_globalCFE_adapted =
new ETCurrentFE<MeshType::S_geoDimensions, 1> (
feSegP0, geometricMapFromMesh<MeshType>(), qrAdapter.standardQR() );
438 M_globalCFE_std =
new ETCurrentFE<MeshType::S_geoDimensions, 1> (
feTriaP0, geometricMapFromMesh<MeshType>(), qrAdapter.standardQR() );
439 M_globalCFE_adapted =
new ETCurrentFE<MeshType::S_geoDimensions, 1> (
feTriaP0, geometricMapFromMesh<MeshType>(), qrAdapter.standardQR() );
442 M_globalCFE_std =
new ETCurrentFE<MeshType::S_geoDimensions, 1> (
feQuadQ0, geometricMapFromMesh<MeshType>(), qrAdapter.standardQR() );
443 M_globalCFE_adapted =
new ETCurrentFE<MeshType::S_geoDimensions, 1> (
feQuadQ0, geometricMapFromMesh<MeshType>(), qrAdapter.standardQR() );
446 M_globalCFE_std =
new ETCurrentFE<MeshType::S_geoDimensions, 1> (
feTetraP0, geometricMapFromMesh<MeshType>(), qrAdapter.standardQR() );
447 M_globalCFE_adapted =
new ETCurrentFE<MeshType::S_geoDimensions, 1> (
feTetraP0, geometricMapFromMesh<MeshType>(), qrAdapter.standardQR() );
450 M_globalCFE_std =
new ETCurrentFE<MeshType::S_geoDimensions, 1> (
feHexaQ0, geometricMapFromMesh<MeshType>(), qrAdapter.standardQR() );
451 M_globalCFE_adapted =
new ETCurrentFE<MeshType::S_geoDimensions, 1> (
feHexaQ0, geometricMapFromMesh<MeshType>(), qrAdapter.standardQR() );
454 ERROR_MSG (
"Unrecognized element shape");
464 template <
typename MeshType,
typename TestSpaceType,
typename SolutionSpaceType,
typename ExpressionType,
typename QRAdapterType>
488 switch (MeshType::geoShape_Type::BasRefSha::S_shape)
491 M_globalCFE_std =
new ETCurrentFE<MeshType::S_geoDimensions, 1> (
feSegP0, geometricMapFromMesh<MeshType>(), integrator.M_qrAdapter.standardQR() );
492 M_globalCFE_adapted =
new ETCurrentFE<MeshType::S_geoDimensions, 1> (
feSegP0, geometricMapFromMesh<MeshType>(), integrator.M_qrAdapter.standardQR() );
495 M_globalCFE_std =
new ETCurrentFE<MeshType::S_geoDimensions, 1> (
feTriaP0, geometricMapFromMesh<MeshType>(), integrator.M_qrAdapter.standardQR() );
496 M_globalCFE_adapted =
new ETCurrentFE<MeshType::S_geoDimensions, 1> (
feTriaP0, geometricMapFromMesh<MeshType>(), integrator.M_qrAdapter.standardQR() );
499 M_globalCFE_std =
new ETCurrentFE<MeshType::S_geoDimensions, 1> (
feQuadQ0, geometricMapFromMesh<MeshType>(), integrator.M_qrAdapter.standardQR() );
500 M_globalCFE_adapted =
new ETCurrentFE<MeshType::S_geoDimensions, 1> (
feQuadQ0, geometricMapFromMesh<MeshType>(), integrator.M_qrAdapter.standardQR() );
503 M_globalCFE_std =
new ETCurrentFE<MeshType::S_geoDimensions, 1> (
feTetraP0, geometricMapFromMesh<MeshType>(), integrator.M_qrAdapter.standardQR() );
504 M_globalCFE_adapted =
new ETCurrentFE<MeshType::S_geoDimensions, 1> (
feTetraP0, geometricMapFromMesh<MeshType>(), integrator.M_qrAdapter.standardQR() );
507 M_globalCFE_std =
new ETCurrentFE<MeshType::S_geoDimensions, 1> (
feHexaQ0, geometricMapFromMesh<MeshType>(), integrator.M_qrAdapter.standardQR() );
508 M_globalCFE_adapted =
new ETCurrentFE<MeshType::S_geoDimensions, 1> (
feHexaQ0, geometricMapFromMesh<MeshType>(), integrator.M_qrAdapter.standardQR() );
511 ERROR_MSG (
"Unrecognized element shape");
513 M_evaluation.setQuadrature (integrator.M_qrAdapter.standardQR() );
519 template <
typename MeshType,
typename TestSpaceType,
typename SolutionSpaceType,
typename ExpressionType,
typename QRAdapterType>
530 M_volumeElements = nullptr;
537 template <
typename MeshType,
typename TestSpaceType,
typename SolutionSpaceType,
typename ExpressionType,
typename QRAdapterType>
542 out <<
" Checking the integration : " << std::endl;
547 template <
typename MeshType,
typename TestSpaceType,
typename SolutionSpaceType,
typename ExpressionType,
typename QRAdapterType>
551 const UInt nbTestDof,
const UInt nbSolutionDof,
554 ETCurrentFE<MeshType::S_geoDimensions, 1>& globalCFE,
555 ETCurrentFE<TestSpaceType::space_dim, TestSpaceType::field_dim>& testCFE,
556 ETCurrentFE<SolutionSpaceType::space_dim, SolutionSpaceType::field_dim>& solutionCFE)
561 evaluation.update (iElement);
564 globalCFE.update (M_mesh->element (iElement), evaluation_Type::S_globalUpdateFlag | ET_UPDATE_WDET);
565 testCFE.update (M_mesh->element (iElement), evaluation_Type::S_testUpdateFlag);
566 solutionCFE.update (M_mesh->element (iElement), evaluation_Type::S_solutionUpdateFlag);
571 for (
UInt iblock (0); iblock < TestSpaceType::field_dim; ++iblock)
573 for (
UInt jblock (0); jblock < SolutionSpaceType::field_dim; ++jblock)
577 for (
UInt i (0); i < nbTestDof; ++i)
579 elementalMatrix.setRowIndex
580 (i + iblock * nbTestDof,
581 M_testSpace->dof().localToGlobalMap (iElement, i) + iblock * M_testSpace->dof().numTotalDof() + M_offsetUp);
585 for (
UInt j (0); j < nbSolutionDof; ++j)
587 elementalMatrix.setColumnIndex
588 (j + jblock * nbSolutionDof,
589 M_solutionSpace->dof().localToGlobalMap (iElement, j) + jblock * M_solutionSpace->dof().numTotalDof() + M_offsetLeft);
592 for (
UInt iQuadPt (0); iQuadPt < nbQuadPt; ++iQuadPt)
594 for (
UInt i (0); i < nbTestDof; ++i)
596 for (
UInt j (0); j < nbSolutionDof; ++j)
598 elementalMatrix
.element (i + iblock * nbTestDof
, j + jblock * nbSolutionDof
) +=
599 evaluation.value_qij (iQuadPt, i + iblock * nbTestDof, j + jblock * nbSolutionDof)
600 * globalCFE.wDet (iQuadPt);
610 template <
typename MeshType,
typename TestSpaceType,
typename SolutionSpaceType,
typename ExpressionType,
typename QRAdapterType>
611 template <
typename MatrixType>
616 UInt nbElements (M_mesh->numElements() );
618 UInt nbTestDof (M_testSpace->refFE().nbDof() );
619 UInt nbSolutionDof (M_solutionSpace->refFE().nbDof() );
626 ETMatrixElemental elementalMatrix (TestSpaceType::field_dim * M_testSpace->refFE().nbDof(),
627 SolutionSpaceType::field_dim * M_solutionSpace->refFE().nbDof() );
632 bool isPreviousAdapted (
true);
634 for (
UInt iElement (0); iElement < nbElements; ++iElement)
645 evaluation.setQuadrature (
M_qrAdapter.adaptedQR() );
659 isPreviousAdapted =
true;
665 if (isPreviousAdapted)
672 isPreviousAdapted =
false;
681 elementalMatrix.pushToGlobal (mat);
685 template <
typename MeshType,
typename TestSpaceType,
typename SolutionSpaceType,
typename ExpressionType,
typename QRAdapterType>
686 template <
typename MatrixType>
691 UInt nbElements (M_mesh->numElements() );
693 UInt nbTestDof (M_testSpace->refFE().nbDof() );
694 UInt nbSolutionDof (M_solutionSpace->refFE().nbDof() );
705 std::unique_ptr<ETCurrentFE<MeshType::S_geoDimensions, 1> > globalCFE_std;
706 std::unique_ptr<ETCurrentFE<MeshType::S_geoDimensions, 1> > globalCFE_adapted;
708 switch (MeshType::geoShape_Type::BasRefSha::S_shape)
711 globalCFE_std.reset (
new ETCurrentFE<MeshType::S_geoDimensions, 1> (feTetraP0, geometricMapFromMesh<MeshType>(), qrAdapter.standardQR() ) );
712 globalCFE_adapted.reset (
new ETCurrentFE<MeshType::S_geoDimensions, 1> (feTetraP0, geometricMapFromMesh<MeshType>(), qrAdapter.standardQR() ) );
715 globalCFE_std.reset (
new ETCurrentFE<MeshType::S_geoDimensions, 1> (feTriaP0, geometricMapFromMesh<MeshType>(), qrAdapter.standardQR() ) );
716 globalCFE_adapted.reset (
new ETCurrentFE<MeshType::S_geoDimensions, 1> (feTriaP0, geometricMapFromMesh<MeshType>(), qrAdapter.standardQR() ) );
719 globalCFE_std.reset (
new ETCurrentFE<MeshType::S_geoDimensions, 1> (feQuadQ0, geometricMapFromMesh<MeshType>(), qrAdapter.standardQR() ) );
720 globalCFE_adapted.reset (
new ETCurrentFE<MeshType::S_geoDimensions, 1> (feQuadQ0, geometricMapFromMesh<MeshType>(), qrAdapter.standardQR() ) );
723 globalCFE_std.reset (
new ETCurrentFE<MeshType::S_geoDimensions, 1> (feTetraP0, geometricMapFromMesh<MeshType>(), qrAdapter.standardQR() ) );
724 globalCFE_adapted.reset (
new ETCurrentFE<MeshType::S_geoDimensions, 1> (feTetraP0, geometricMapFromMesh<MeshType>(), qrAdapter.standardQR() ) );
727 globalCFE_std.reset (
new ETCurrentFE<MeshType::S_geoDimensions, 1> (feHexaQ0, geometricMapFromMesh<MeshType>(), qrAdapter.standardQR() ) );
728 globalCFE_adapted.reset (
new ETCurrentFE<MeshType::S_geoDimensions, 1> (feHexaQ0, geometricMapFromMesh<MeshType>(), qrAdapter.standardQR() ) );
731 ERROR_MSG (
"Unrecognized element shape");
734 ETCurrentFE<TestSpaceType::space_dim, TestSpaceType::field_dim>
735 testCFE_std (M_testSpace->refFE(), M_testSpace->geoMap(), M_qrAdapter.standardQR() );
737 ETCurrentFE<TestSpaceType::space_dim, TestSpaceType::field_dim>
738 testCFE_adapted (M_testSpace->refFE(), M_testSpace->geoMap(), M_qrAdapter.standardQR() );
741 ETCurrentFE<SolutionSpaceType::space_dim, SolutionSpaceType::field_dim>
742 solutionCFE_std (M_solutionSpace->refFE(), M_testSpace->geoMap(),
743 M_qrAdapter.standardQR() );
745 ETCurrentFE<SolutionSpaceType::space_dim, SolutionSpaceType::field_dim>
746 solutionCFE_adapted (M_solutionSpace->refFE(), M_testSpace->geoMap(),
747 M_qrAdapter.standardQR() );
758 ETMatrixElemental elementalMatrix (TestSpaceType::field_dim * M_testSpace->refFE().nbDof(),
759 SolutionSpaceType::field_dim * M_solutionSpace->refFE().nbDof() );
762 bool isPreviousAdapted (
true);
764 #pragma omp for schedule(runtime) 765 for (
UInt iElement = 0; iElement < nbElements; ++iElement)
768 qrAdapter.update (iElement);
774 if (qrAdapter.isAdaptedElement() )
777 evaluation.setQuadrature ( qrAdapter.adaptedQR() );
778 globalCFE_adapted -> setQuadratureRule ( qrAdapter.adaptedQR() );
779 testCFE_adapted.setQuadratureRule ( qrAdapter.adaptedQR() );
780 solutionCFE_adapted. setQuadratureRule ( qrAdapter.adaptedQR() );
783 evaluation.setGlobalCFE ( globalCFE_adapted.get() );
784 evaluation.setTestCFE ( &testCFE_adapted );
785 evaluation.setSolutionCFE ( &solutionCFE_adapted );
787 integrateElement (iElement, qrAdapter.adaptedQR().nbQuadPt(), nbTestDof, nbSolutionDof,
788 elementalMatrix, evaluation, *globalCFE_adapted ,
789 testCFE_adapted, solutionCFE_adapted);
791 isPreviousAdapted =
true;
797 if (isPreviousAdapted)
799 evaluation.setQuadrature ( qrAdapter.standardQR() );
800 evaluation.setGlobalCFE ( globalCFE_std.get() );
801 evaluation.setTestCFE ( &testCFE_std );
802 evaluation.setSolutionCFE ( &solutionCFE_std );
804 isPreviousAdapted =
false;
807 integrateElement (iElement, M_qrAdapter.standardQR().nbQuadPt(), nbTestDof, nbSolutionDof,
808 elementalMatrix, evaluation, *globalCFE_std ,
809 testCFE_std, solutionCFE_std);
813 elementalMatrix.pushToGlobal (mat);
823 template <
typename MeshType,
typename TestSpaceType,
typename SolutionSpaceType,
typename ExpressionType,
typename QRAdapterType>
824 template <
typename MatrixType>
831 UInt nbTestDof (M_testSpace->refFE().nbDof() );
832 UInt nbSolutionDof (M_solutionSpace->refFE().nbDof() );
834 ETMatrixElemental elementalMatrix (TestSpaceType::field_dim * M_testSpace->refFE().nbDof(),
835 SolutionSpaceType::field_dim * M_solutionSpace->refFE().nbDof() );
839 if( M_volumeElements != nullptr )
842 std::stringstream convertNumbEl;
843 convertNumbEl << nbElements;
846 bool isPreviousAdapted (
true);
848 for (
UInt iVolumeElement (0); iVolumeElement < nbElements; ++iVolumeElement)
862 evaluation.setQuadrature (
M_qrAdapter.adaptedQR() );
876 isPreviousAdapted =
true;
882 if (isPreviousAdapted)
889 isPreviousAdapted =
false;
898 elementalMatrix.pushToGlobal (mat);
const ReferenceFEScalar feHexaQ0("Lagrange Q0 on a hexaedra", FE_Q0_3D, HEXA, 0, 0, 0, 1, 1, 3, fct_Q0_3D, derfct_Q0_3D, der2fct_Q0_3D, refcoor_Q0_3D, STANDARD_PATTERN, &feQuadQ0, &lagrangianTransform)
~IntegrateMatrixElement()
Destructor.
void addTo(std::shared_ptr< MatrixType > mat)
Method that performs the assembly.
const ReferenceFEScalar feSegP0("Lagrange P0 on a segment", FE_P0_1D, LINE, 0, 1, 0, 0, 1, 1, fct_P0_1D, derfct_P0_1D, der2fct_P0_1D, refcoor_P0_1D, STANDARD_PATTERN, &fePointP0, &lagrangianTransform)
The class to actually perform the loop over the elements to assemble a matrix.
const UInt * M_volumeElements
std::shared_ptr< TestSpaceType > M_testSpace
ExpressionToEvaluation< ExpressionType, TestSpaceType::field_dim, SolutionSpaceType::field_dim, MeshType::S_geoDimensions >::evaluation_Type evaluation_Type
Type of the Evaluation.
void restorePreviousNumThreads()
void updateInverseJacobian(const UInt &iQuadPt)
const ReferenceFEScalar feTetraP0("Lagrange P0 on a tetraedra", FE_P0_3D, TETRA, 0, 0, 0, 1, 1, 3, fct_P0_3D, derfct_P0_3D, der2fct_P0_3D, refcoor_P0_3D, STANDARD_PATTERN, &feTriaP0, &lagrangianTransform)
IntegrateMatrixElement(const std::shared_ptr< MeshType > &mesh, const QRAdapterType &qrAdapter, const std::shared_ptr< TestSpaceType > &testSpace, const std::shared_ptr< SolutionSpaceType > &solutionSpace, const ExpressionType &expression, const OpenMPParameters &ompParams, const UInt offsetUp=0, const UInt offsetLeft=0, const UInt regionFlag=0, const UInt numVolumeElements=0, const UInt *const volumeElements=nullptr, const bool subDomain=false)
Full data constructor.
ETCurrentFE< MeshType::S_geoDimensions, 1 > * M_globalCFE_adapted
const ReferenceFEScalar feTriaP0("Lagrange P0 on a triangle", FE_P0_2D, TRIANGLE, 0, 0, 1, 0, 1, 2, fct_P0_2D, derfct_P0_2D, der2fct_P0_2D, refcoor_P0_2D, STANDARD_PATTERN, &feSegP0, &lagrangianTransform)
void integrateElement(const UInt iElement, const UInt nbQuadPt, const UInt nbTestDof, const UInt nbSolutionDof, ETMatrixElemental &elementalMatrix, evaluation_Type &evaluation, ETCurrentFE< MeshType::S_geoDimensions, 1 > &globalCFE, ETCurrentFE< TestSpaceType::space_dim, TestSpaceType::field_dim > &testCFE, ETCurrentFE< SolutionSpaceType::space_dim, SolutionSpaceType::field_dim > &solutionCFE)
Perform the computations for a single element.
ETCurrentFE< MeshType::S_geoDimensions, 1 > * M_globalCFE_std
IntegrateMatrixElement()
No empty constructor.
IntegrateMatrixElement(const IntegrateMatrixElement< MeshType, TestSpaceType, SolutionSpaceType, ExpressionType, QRAdapterType > &integrator)
Copy constructor.
void addTo(MatrixType &mat)
Method that performs the assembly.
void zero()
Put zero all the data stored.
void addToSubdomain(MatrixType &mat)
void addToClosed(std::shared_ptr< MatrixType > mat)
Method that performs the assembly.
void check(std::ostream &out=std::cout)
Ouput method.
class ExpressionToEvaluation A class to pass from an Expression (Tree) to the corresponding Evaluatio...
QRAdapterType M_qrAdapter
void addToClosed(MatrixType &mat)
Method that performs the assembly.
ETCurrentFE< TestSpaceType::space_dim, TestSpaceType::field_dim > * M_testCFE_std
void operator>>(std::shared_ptr< MatrixType > mat)
Operator wrapping the addTo method (for shared_ptr)
const bool M_integrateOnSubdomains
std::shared_ptr< SolutionSpaceType > M_solutionSpace
std::shared_ptr< MeshType > M_mesh
void addToSubdomain(boost::shared_ptr< MatrixType > mat)
ETCurrentFE< TestSpaceType::space_dim, SolutionSpaceType::field_dim > * M_solutionCFE_std
IntegrateMatrixElement(const std::shared_ptr< MeshType > &mesh, const QRAdapterType &qrAdapter, const std::shared_ptr< TestSpaceType > &testSpace, const std::shared_ptr< SolutionSpaceType > &solutionSpace, const ExpressionType &expression, const UInt offsetUp=0, const UInt offsetLeft=0, const UInt regionFlag=0, const UInt numVolumeElements=0, const UInt *const volumeElements=nullptr, const bool subDomain=false)
Full data constructor.
const ReferenceFEScalar feQuadQ0("Lagrange Q0 on a quadrangle", FE_Q0_2D, QUAD, 0, 0, 1, 0, 1, 2, fct_Q0_2D, derfct_Q0_2D, der2fct_Q0_2D, refcoor_Q0_2D, STANDARD_PATTERN, &feSegP0, &lagrangianTransform)
void operator>>(MatrixType &mat)
Operator wrapping the addTo method.
ETCurrentFE< TestSpaceType::space_dim, SolutionSpaceType::field_dim > * M_solutionCFE_adapted
Real & element(const UInt &iloc, const UInt &jloc)
Setter for the value in the local position (iloc,jloc)
OpenMPParameters M_ompParams
const UInt M_numVolumeElements
ETCurrentFE< TestSpaceType::space_dim, TestSpaceType::field_dim > * M_testCFE_adapted
evaluation_Type M_evaluation
class ETMatrixElemental A class for describing an elemental matrix
uint32_type UInt
generic unsigned integer (used mainly for addressing)