v0.14.0 |
base operator to do operations at Gauss Pt. level More...
#include <src/finite_elements/DataOperators.hpp>
Public Types | |
using | DoWorkLhsHookFunType = boost::function< MoFEMErrorCode(DataOperator *op_ptr, int row_side, int col_side, EntityType row_type, EntityType col_type, EntitiesFieldData::EntData &row_data, EntitiesFieldData::EntData &col_data)> |
using | DoWorkRhsHookFunType = boost::function< MoFEMErrorCode(DataOperator *op_ptr, int side, EntityType type, EntitiesFieldData::EntData &data)> |
Public Member Functions | |
DataOperator (const bool symm=true) | |
virtual | ~DataOperator ()=default |
virtual MoFEMErrorCode | doWork (int row_side, int col_side, EntityType row_type, EntityType col_type, EntitiesFieldData::EntData &row_data, EntitiesFieldData::EntData &col_data) |
Operator for bi-linear form, usually to calculate values on left hand side. More... | |
virtual MoFEMErrorCode | opLhs (EntitiesFieldData &row_data, EntitiesFieldData &col_data) |
virtual MoFEMErrorCode | doWork (int side, EntityType type, EntitiesFieldData::EntData &data) |
Operator for linear form, usually to calculate values on right hand side. More... | |
virtual MoFEMErrorCode | opRhs (EntitiesFieldData &data, const bool error_if_no_base=false) |
bool | getSymm () const |
Get if operator uses symmetry of DOFs or not. More... | |
void | setSymm () |
set if operator is executed taking in account symmetry More... | |
void | unSetSymm () |
unset if operator is executed for non symmetric problem More... | |
Public Attributes | |
DoWorkLhsHookFunType | doWorkLhsHook |
DoWorkRhsHookFunType | doWorkRhsHook |
bool | sYmm |
If true assume that matrix is symmetric structure. More... | |
std::array< bool, MBMAXTYPE > | doEntities |
If true operator is executed for entity. More... | |
bool & | doVertices |
\deprectaed If false skip vertices More... | |
bool & | doEdges |
\deprectaed If false skip edges More... | |
bool & | doQuads |
\deprectaed More... | |
bool & | doTris |
\deprectaed More... | |
bool & | doTets |
\deprectaed More... | |
bool & | doPrisms |
\deprectaed More... | |
Private Member Functions | |
template<bool Symm> | |
MoFEMErrorCode | opLhs (EntitiesFieldData &row_data, EntitiesFieldData &col_data) |
template<bool ErrorIfNoBase> | |
MoFEMErrorCode | opRhs (EntitiesFieldData &data, const std::array< bool, MBMAXTYPE > &do_entities) |
base operator to do operations at Gauss Pt. level
Definition at line 24 of file DataOperators.hpp.
using MoFEM::DataOperator::DoWorkLhsHookFunType = boost::function<MoFEMErrorCode( DataOperator *op_ptr, int row_side, int col_side, EntityType row_type, EntityType col_type, EntitiesFieldData::EntData &row_data, EntitiesFieldData::EntData &col_data)> |
Definition at line 33 of file DataOperators.hpp.
using MoFEM::DataOperator::DoWorkRhsHookFunType = boost::function<MoFEMErrorCode( DataOperator *op_ptr, int side, EntityType type, EntitiesFieldData::EntData &data)> |
Definition at line 60 of file DataOperators.hpp.
MoFEM::DataOperator::DataOperator | ( | const bool | symm = true | ) |
|
virtualdefault |
|
inlinevirtual |
Operator for bi-linear form, usually to calculate values on left hand side.
Reimplemented in MixTransport::MixTransportElement::OpVDivSigma_L2Hdiv, MixTransport::MixTransportElement::OpTauDotSigma_HdivHdiv, PoissonExample::OpC, OpCalculateMassMatrix, MyOp2, OpSimpleRodK, CallingOp, OpS, PrismOpLhs, OpFace, OpK, QuadOpLhs, OpRowCol, AnalyticalDirichletBC::ApproxField::OpLhs, PoissonExample::OpK, OpVolume, MetaSpringBC::OpSpringALEMaterialLhs_dX_dX, MetaSpringBC::OpSpringALEMaterialLhs_dX_dx, MetaSpringBC::OpSpringALEMaterialLhs, OpAssemble, MetaSpringBC::SpringALEMaterialVolOnSideLhs, MetaSpringBC::OpSpringKs_dX, NavierStokesElement::OpAssembleLhs, MetaSpringBC::OpSpringKs, ReactionDiffusionEquation::OpAssembleStiffLhs< DIM >, Poisson2DLagrangeMultiplierOperators::OpBoundaryLhsC, Poisson2DNonhomogeneousOperators::OpBoundaryLhs, ReactionDiffusionEquation::OpAssembleMass, Poisson2DLagrangeMultiplierOperators::OpDomainLhsK, and Poisson2DNonhomogeneousOperators::OpDomainLhs.
Definition at line 40 of file DataOperators.hpp.
|
inlinevirtual |
Operator for linear form, usually to calculate values on right hand side.
Reimplemented in MoFEM::OpCalculateTraceFromSymmMat< DIM >, MoFEM::OpCalculateTraceFromMat< DIM >, MoFEM::OpInvertMatrix< DIM >, MoFEM::OpSetInvJacH1ForFlatPrism, MoFEM::OpCalculateInvJacForFlatPrism, MoFEM::OpSetInvJacH1ForFatPrism, MoFEM::OpCalculateInvJacForFatPrism, MoFEM::OpMultiplyDeterminantOfJacobianAndWeightsForFatPrisms, MoFEM::OpSetContravariantPiolaTransformOnEdge2D, MoFEM::OpSetContravariantPiolaTransformOnFace2DImpl< 3 >, MoFEM::OpSetContravariantPiolaTransformOnFace2DImpl< 2 >, MoFEM::OpSetCovariantPiolaTransformOnFace2DImpl< 2 >, MoFEM::OpMakeHdivFromHcurl, MoFEM::OpSetInvJacHcurlFaceImpl< 3 >, MoFEM::OpSetInvJacHcurlFaceImpl< 2 >, MoFEM::OpSetInvJacSpaceForFaceImpl< 2, 2 >, MoFEM::OpSetInvJacSpaceForFaceImpl< 3, 1 >, MoFEM::OpSetInvJacSpaceForFaceImpl< 2, 1 >, MoFEM::OpCalculateHVecTensorDivergence< Tensor_Dim0, Tensor_Dim1, CoordSys >, MoFEM::OpCalculateHTensorTensorField< Tensor_Dim0, Tensor_Dim1 >, MoFEM::OpCalculateHVecTensorField< Tensor_Dim0, Tensor_Dim1 >, MoFEM::OpCalculateHcurlVectorCurl< 1, 3 >, MoFEM::OpCalculateHcurlVectorCurl< 1, 2 >, MoFEM::OpCalculateHcurlVectorCurl< 3, 3 >, MoFEM::OpCalculateHdivVectorDivergenceDot< Tensor_Dim1, Tensor_Dim2 >, MoFEM::OpCalculateHVecVectorHessian< BASE_DIM, SPACE_DIM >, MoFEM::OpCalculateHVecVectorGradient< BASE_DIM, SPACE_DIM >, MoFEM::OpCalculateHdivVectorDivergence< BASE_DIM, SPACE_DIM >, MoFEM::OpCalculateHVecVectorFieldDot< 3, Field_Dim >, MoFEM::OpCalculateHVecVectorField_General< 3, Field_Dim, double, ublas::row_major, DoubleAllocator >, MoFEM::OpCalculateVectorFieldHessian< Tensor_Dim0, Tensor_Dim1 >, MoFEM::OpCalculateTensor2SymmetricFieldGradient_General< Tensor_Dim0, Tensor_Dim1, double, ublas::row_major, DoubleAllocator >, MoFEM::OpCalculateVectorFieldGradientDot< Tensor_Dim0, Tensor_Dim1 >, MixTransport::MixTransportElement::OpSkeleton, MixTransport::MixTransportElement::OpSkeleton::OpVolSide, MoFEM::OpCalculateVectorFieldGradient_General< Tensor_Dim0, Tensor_Dim1, double, ublas::row_major, DoubleAllocator >, MixTransport::MixTransportElement::OpError, MixTransport::MixTransportElement::OpFluxDivergenceAtGaussPts, MoFEM::OpCalculateScalarFieldHessian< Tensor_Dim >, MoFEM::OpLoopSide< E >, MixTransport::MixTransportElement::OpValuesGradientAtGaussPts, MixTransport::MixTransportElement::OpValuesAtGaussPts, MoFEM::OpCalculateScalarFieldGradient_General< Tensor_Dim, double, ublas::row_major, DoubleAllocator >, MixTransport::MixTransportElement::OpEvaluateBcOnFluxes, MixTransport::MixTransportElement::OpRhsBcOnValues, MoFEM::OpCalculateTensor2SymmetricFieldValuesDot< Tensor_Dim >, MixTransport::MixTransportElement::OpL2Source, MixTransport::MixTransportElement::OpVDivSigma_L2Hdiv, MoFEM::OpCalculateTensor2SymmetricFieldValues< Tensor_Dim >, MoFEM::OpCalculateTensor2FieldValuesDot< Tensor_Dim0, Tensor_Dim1 >, MixTransport::MixTransportElement::OpDivTauU_HdivL2, MixTransport::MixTransportElement::OpTauDotSigma_HdivHdiv, MoFEM::OpCalculateTensor2FieldValues_General< Tensor_Dim0, Tensor_Dim1, double, ublas::row_major, DoubleAllocator >, MoFEM::OpCalculateTensor2FieldValues_General< Tensor_Dim0, Tensor_Dim1, T, L, A >, MoFEM::OpPostProcMapInMoab< DIM1, DIM2 >, MoFEM::OpCalculateVectorFieldValuesFromPetscVecImpl< Tensor_Dim, CTX >, MoFEM::OpSetCovariantPiolaTransformOnEdge, MoFEM::OpCalculateDivergenceVectorFieldValues< Tensor_Dim, COORDINATE_SYSTEM >, MoFEM::OpGetHOTangentOnEdge, MoFEM::OpSetCovariantPiolaTransformOnFace, MoFEM::OpSetContravariantPiolaTransformOnFace, MoFEM::OpGetCoordsAndNormalsOnPrism, MoFEM::OpScaleBaseBySpaceInverseOfMeasure, MoFEM::OpGetHOTangentsOnEdge< FIELD_DIM >, MoFEM::OpCopyGeomDataToE< 2 >, MixTransport::MixTransportElement::OpPostProc, MoFEM::OpCalculateVectorFieldValues_General< Tensor_Dim, double, ublas::row_major, DoubleAllocator >, MoFEM::OpHOSetCovariantPiolaTransformOnFace3D, MoFEM::OpHOSetContravariantPiolaTransformOnEdge3D, MoFEM::OpCalculateVectorFieldValues_General< Tensor_Dim, T, L, A >, MoFEM::OpHOSetContravariantPiolaTransformOnFace3D, MoFEM::OpGetDataAndGradient< RANK, DIM >, MoFEM::OpGetHONormalsOnFace< FIELD_DIM >, MoFEM::OpCalculateHOJacForFaceImpl< 3 >, MoFEM::OpCalculateHOJacForFaceImpl< 2 >, OpPressure, MoFEM::OpSetCovariantPiolaTransform, OpCalculateLameStress< DIM >, OpSimpleRodPreStress, MoFEM::OpSetHOCovariantPiolaTransform, MoFEM::OpSetContravariantPiolaTransform, MoFEM::OpSetHOContravariantPiolaTransform, OpCheckValsDiffVals, OpCheckValsDiffVals, MoFEM::OpSetHOWeights, MoFEM::OpCalculateScalarFieldValuesFromPetscVecImpl< CTX >, MoFEM::OpSetInvJacHdivAndHcurl, OpVolumeAssemble, MoFEM::OpDGProjectionEvaluation, MoFEM::OpSetInvJacH1, MoFEM::OpSetHOWeightsOnEdge, MoFEM::OpSchurAssembleEnd< SchurDGESV >, MoFEM::OpGetTensor1fromFunc< SPACE_DIM, BASE_DIM >, MyOp2, MoFEM::OpSchurAssembleEnd< SchurDSYSV >, MoFEM::OpDGProjectionCoefficients, MoFEM::OpSetHOWeightsOnFace, OpVolumeSide, MoFEM::OpGetTensor0fromFunc, Example::OpCalcSurfaceAverageTemperature, MoFEM::OpDGProjectionMassMatrix, MoFEM::OpSetHOInvJacVectorBase, MoFEM::OpBaseDerivativesNext< 3 >, OpVolumeTest, OpFaceSide, MoFEM::OpCalculateScalarFieldValues, SkeletonFE, CallingOp, SkeletonFE, OpCheckValsDiffVals, MoFEM::OpCalcNormL2Tensor2< DIM_1, DIM_2 >, SkeletonFE, MoFEM::OpLoopThis< E >, OpFace, MoFEM::OpBaseDerivativesNext< 1 >, AnalyticalDirichletBC::ApproxField::OpRhs< FUNEVAL >, OpVolume, PrismOpRhs, MoFEM::OpSchurAssembleBegin, QuadOpRhs, OpFlux, MoFEM::OpBaseDerivativesSetHOInvJacobian< 2 >, MoFEM::OpSetHOInvJacToScalarBasesImpl, MoFEM::OpCalcNormL2Tensor1< DIM >, PrismOpCheck, OpFace, OpFlux, PrismOp, QuadOpCheck, MoFEM::OpCalculateScalarFieldValues_General< T, A >, MoFEM::OpCalculateScalarFieldValues_General< double, DoubleAllocator >, MoFEM::OpUnSetBc, MoFEM::OpCalculateHOCoords< FIELD_DIM >, MoFEM::OpRunParent, OpFacesRot, MoFEM::OpBaseDerivativesMass< 1 >, MoFEM::OpSetBc, OpFacesFluxes, OpVolumeSet, SkeletonFE::OpFaceSide, SkeletonFE::OpFaceSide, SkeletonFE::OpFaceSide, OpDivergence, OpVolCurl, MoFEM::OpCalcNormL2Tensor0, OpDivergence, OpVolDivergence, OpFace, MoFEM::OpCalculateHOJacForVolume, OpRow, OpCheck, OpVolume, MoFEM::OpBrokenLoopSide< E >, MetaSpringBC::OpGetNormalSpEle, MetaSpringBC::OpGetTangentSpEle, MetaSpringBC::OpSpringFsMaterial, MoFEM::OpScaleMatrix, MoFEM::OpSymmetrizeTensor< DIM >, MoFEM::OpTensorTimesSymmetricTensor< DIM_01, DIM_23, S >, NavierStokesElement::OpCalcVolumeFlux, NavierStokesElement::OpPostProcVorticity, NavierStokesElement::OpPostProcDrag, NavierStokesElement::OpCalcDragTraction, NavierStokesElement::OpCalcDragForce, Poisson2DNonhomogeneousOperators::OpBoundaryRhs, Poisson2DLagrangeMultiplierOperators::OpBoundaryRhsG, Example::BoundaryOp, MetaSpringBC::OpSpringFs, ReactionDiffusionEquation::OpAssembleStiffRhs< DIM >, Example::OpSecond, Poisson2DLagrangeMultiplierOperators::OpDomainRhsF, Poisson2DNonhomogeneousOperators::OpDomainRhs, ReactionDiffusionEquation::OpAssembleSlowRhs, Example::OpFirst, Example::OpZero, OpVolumeCalculation, OpAleLhsPre_dX_dx< S >, NavierStokesElement::OpAssembleRhs, OpAssemble, OpCalculateStiffnessScaledByDensityField, OpCalculateHomogeneousStiffness< S >, OpCalculateEshelbyStress, OpCalculateEnergy, OpCalculateStress< S >, HookeInternalStressElement::OpSaveStress, OpCalculateStrainAle, OpCalculateStrain< D >, HookeInternalStressElement::OpGetAnalyticalInternalStress< S >, and HookeInternalStressElement::OpGetInternalStress.
Definition at line 67 of file DataOperators.hpp.
|
inline |
Get if operator uses symmetry of DOFs or not.
If symmetry is used, only not repeating combinations of entities are looped. For an example pair of (Vertex, Edge_0) and (Edge_0, Vertex) will calculate the same matrices only transposed. Implementing that this can be exploited by integrating only one pair.
Definition at line 107 of file DataOperators.hpp.
|
virtual |
Definition at line 90 of file DataOperators.cpp.
|
inlineprivate |
Definition at line 41 of file DataOperators.cpp.
|
virtual |
|
inlineprivate |
Definition at line 100 of file DataOperators.cpp.
|
inline |
set if operator is executed taking in account symmetry
Definition at line 110 of file DataOperators.hpp.
|
inline |
unset if operator is executed for non symmetric problem
Definition at line 113 of file DataOperators.hpp.
bool& MoFEM::DataOperator::doEdges |
\deprectaed If false skip edges
Definition at line 91 of file DataOperators.hpp.
std::array<bool, MBMAXTYPE> MoFEM::DataOperator::doEntities |
If true operator is executed for entity.
Definition at line 85 of file DataOperators.hpp.
bool& MoFEM::DataOperator::doPrisms |
\deprectaed
Definition at line 95 of file DataOperators.hpp.
bool& MoFEM::DataOperator::doQuads |
\deprectaed
Definition at line 92 of file DataOperators.hpp.
bool& MoFEM::DataOperator::doTets |
\deprectaed
Definition at line 94 of file DataOperators.hpp.
bool& MoFEM::DataOperator::doTris |
\deprectaed
Definition at line 93 of file DataOperators.hpp.
bool& MoFEM::DataOperator::doVertices |
\deprectaed If false skip vertices
Definition at line 90 of file DataOperators.hpp.
DoWorkLhsHookFunType MoFEM::DataOperator::doWorkLhsHook |
Definition at line 35 of file DataOperators.hpp.
DoWorkRhsHookFunType MoFEM::DataOperator::doWorkRhsHook |
Definition at line 62 of file DataOperators.hpp.
bool MoFEM::DataOperator::sYmm |
If true assume that matrix is symmetric structure.
Definition at line 82 of file DataOperators.hpp.